================================================== FILE PATH: ./lib/app_bindings.dart ================================================== import 'package:get/get.dart'; import 'package:Intaleq/controller/auth/login_controller.dart'; import 'package:Intaleq/controller/firebase/firbase_messge.dart'; import 'package:Intaleq/controller/firebase/local_notification.dart'; import 'package:Intaleq/controller/home/deep_link_controller.dart'; import 'package:Intaleq/controller/local/local_controller.dart'; /// This is the central dependency injection file for the app. /// It uses GetX Bindings to make the app start faster and manage memory better. class AppBindings extends Bindings { @override void dependencies() { // --- [Type 1: Permanent Controllers] --- // Use Get.put() for controllers that need to be available immediately and ALWAYS. // They are created right away and never destroyed. // LocaleController is needed instantly to set the app's theme and language. Get.put(LocaleController()); // DeepLinkController must always be listening for incoming links. // `permanent: true` ensures it survives `Get.offAll()`. Get.put(DeepLinkController(), permanent: true); // --- [Type 2: Lazy Loaded "Phoenix" Controllers] --- // Use Get.lazyPut() for controllers that are heavy or not needed immediately. // They are only created in memory the first time `Get.find()` is called. // `fenix: true` is the key: it allows the controller to be "reborn" after being // destroyed (e.g., by Get.offAll), preserving its state and functionality. // LoginController is only needed during the login process on the splash screen. Get.lazyPut(() => LoginController(), fenix: true); // NotificationController is initialized on the splash screen, but might be needed later. Get.lazyPut(() => NotificationController(), fenix: true); // FirebaseMessagesController is also initialized on splash, but must persist its token and listeners. Get.lazyPut(() => FirebaseMessagesController(), fenix: true); } } ================================================== FILE PATH: ./lib/homw_widget.dart ================================================== import 'package:flutter/services.dart'; class WidgetManager { static const platform = MethodChannel('com.mobileapp.store.ride/widget'); static Future updateWidget() async { try { await platform.invokeMethod('updateWidget'); } on PlatformException catch (e) { print("Failed to update widget: '${e.message}'."); } } } // Example usage: void updateHomeScreenWidget() { WidgetManager.updateWidget(); } ================================================== FILE PATH: ./lib/print.dart ================================================== import 'dart:developer' as developer; class Log { Log._(); static void print(String value, {StackTrace? stackTrace}) { developer.log(value, name: 'LOG', stackTrace: stackTrace); } static Object? inspect(Object? object) { return developer.inspect(object); } } ================================================== FILE PATH: ./lib/splash_screen_page.dart ================================================== import 'package:animated_text_kit/animated_text_kit.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/main.dart'; import 'controller/home/splash_screen_controlle.dart'; // شاشة بداية بتصميم جديد وحركات وألوان محسّنة class SplashScreen extends StatelessWidget { const SplashScreen({super.key}); @override Widget build(BuildContext context) { // تهيئة الكنترولر final SplashScreenController controller = Get.put(SplashScreenController()); // تعريف الألوان المستخدمة في حركة اسم التطبيق const colorizeColors = [ Colors.white, Color(0xFF89D4CF), // لون تركواز فاتح Color(0xFF734AE8), // لون بنفسجي مشرق Colors.white, ]; return SafeArea( child: Scaffold( body: Container( // --- تحسين الألوان --- // تم استخدام تدرج لوني جديد أكثر حيوية وعصرية decoration: const BoxDecoration( gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [ Color(0xFF2E3192), // أزرق داكن Color(0xFF1BFFFF), // سماوي ساطع ], ), ), child: Stack( children: [ // دوائر زخرفية لإضافة عمق للتصميم _buildDecorativeCircles(), // المحتوى الرئيسي مع الحركات المتتالية Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // --- حركة اسم التطبيق --- // تم إلغاء الشعار واستبداله بحركة نصية ملونة لكلمة "Intaleq" FadeTransition( opacity: controller.titleFadeAnimation, child: ScaleTransition( scale: controller.titleScaleAnimation, child: AnimatedTextKit( animatedTexts: [ ColorizeAnimatedText( 'Intaleq', textStyle: AppStyle.headTitle.copyWith( fontSize: 65.0, // تكبير حجم الخط fontWeight: FontWeight.bold, shadows: [ const Shadow( blurRadius: 15.0, color: Colors.black38, offset: Offset(0, 3.0), ), ], ), colors: colorizeColors, speed: const Duration(milliseconds: 300), ), ], isRepeatingAnimation: false, ), ), ), const SizedBox(height: 18), // --- حركة الشعار النصي --- FadeTransition( opacity: controller.taglineFadeAnimation, child: SlideTransition( position: controller.taglineSlideAnimation, child: Text( 'Your Journey Begins Here'.tr, style: AppStyle.title.copyWith( color: AppColor.writeColor.withOpacity(0.9), fontSize: 18, ), ), ), ), ], ), ), // قسم سفلي لشريط التقدم ومعلومات الإصدار Align( alignment: Alignment.bottomCenter, child: FadeTransition( opacity: controller.footerFadeAnimation, child: Padding( padding: const EdgeInsets.only( bottom: 40.0, left: 40, right: 40), child: Column( mainAxisSize: MainAxisSize.min, children: [ ClipRRect( borderRadius: BorderRadius.circular(10), child: Obx(() => LinearProgressIndicator( value: controller.progress.value, backgroundColor: AppColor.writeColor.withOpacity(0.2), valueColor: const AlwaysStoppedAnimation( AppColor.writeColor), minHeight: 5, )), ), const SizedBox(height: 20), Text( 'Version: ${box.read(BoxName.packagInfo) ?? '1.0.0'}', style: AppStyle.subtitle.copyWith( color: AppColor.writeColor.withOpacity(0.7), fontWeight: FontWeight.w600, ), ), ], ), ), ), ), ], ), ), ), ); } /// بناء دوائر زخرفية لتحسين الخلفية Widget _buildDecorativeCircles() { return Stack( children: [ Positioned( top: -80, left: -100, child: CircleAvatar( radius: 120, backgroundColor: Colors.white.withOpacity(0.05), ), ), Positioned( bottom: -120, right: -150, child: CircleAvatar( radius: 180, backgroundColor: Colors.white.withOpacity(0.07), ), ), ], ); } } ================================================== FILE PATH: ./lib/onbording_page.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'constant/colors.dart'; import 'controller/auth/onboarding_controller.dart'; import 'models/model/onboarding_model.dart'; class OnBoardingPage extends StatelessWidget { OnBoardingControllerImp onBoardingControllerImp = Get.put(OnBoardingControllerImp()); OnBoardingPage({super.key}); @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColor.secondaryColor, body: SafeArea( child: Column(mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox( height: Get.height * .7, child: const CustomSliderOnBoarding(), ), const CustomDotControllerOnBoarding(), // const Spacer(flex: 2), const SizedBox(height: 20), MyElevatedButton( onPressed: () => onBoardingControllerImp.next(), title: 'Next'.tr, ) ]), )); } } class CustomSliderOnBoarding extends GetView { const CustomSliderOnBoarding({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return PageView.builder( controller: controller.pageController, onPageChanged: (val) { controller.onPageChanged(val); }, itemCount: onBoardingList.length, itemBuilder: (context, i) => Column( children: [ Image.asset( onBoardingList[i].image!, // width: , height: Get.width / 2, fit: BoxFit.fill, ), const SizedBox(height: 20), Text(onBoardingList[i].title!, textAlign: TextAlign.center, style: const TextStyle( fontWeight: FontWeight.bold, fontSize: 22, color: AppColor.primaryColor)), const SizedBox(height: 20), Container( width: Get.width * .8, alignment: Alignment.center, child: Text( onBoardingList[i].body!, textAlign: TextAlign.center, style: const TextStyle( height: 2, color: AppColor.accentColor, fontWeight: FontWeight.bold, fontSize: 14), )), // const SizedBox(height: 20), ], )); } } class CustomDotControllerOnBoarding extends StatelessWidget { const CustomDotControllerOnBoarding({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return GetBuilder( builder: (controller) => Row( mainAxisAlignment: MainAxisAlignment.center, children: [ ...List.generate( onBoardingList.length, (index) => AnimatedContainer( margin: const EdgeInsets.only(right: 5), duration: const Duration(milliseconds: 900), width: controller.currentPage == index ? 20 : 5, height: 6, decoration: BoxDecoration( color: AppColor.primaryColor, borderRadius: BorderRadius.circular(10)), )) ], )); } } ================================================== FILE PATH: ./lib/firebase_options.dart ================================================== // File generated by FlutterFire CLI. // ignore_for_file: type=lint import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; import 'package:flutter/foundation.dart' show defaultTargetPlatform, kIsWeb, TargetPlatform; /// Default [FirebaseOptions] for use with your Firebase apps. /// /// Example: /// ```dart /// import 'firebase_options.dart'; /// // ... /// await Firebase.initializeApp( /// options: DefaultFirebaseOptions.currentPlatform, /// ); /// ``` class DefaultFirebaseOptions { static FirebaseOptions get currentPlatform { if (kIsWeb) { throw UnsupportedError( 'DefaultFirebaseOptions have not been configured for web - ' 'you can reconfigure this by running the FlutterFire CLI again.', ); } switch (defaultTargetPlatform) { case TargetPlatform.android: return android; case TargetPlatform.iOS: return ios; case TargetPlatform.macOS: throw UnsupportedError( 'DefaultFirebaseOptions have not been configured for macos - ' 'you can reconfigure this by running the FlutterFire CLI again.', ); case TargetPlatform.windows: throw UnsupportedError( 'DefaultFirebaseOptions have not been configured for windows - ' 'you can reconfigure this by running the FlutterFire CLI again.', ); case TargetPlatform.linux: throw UnsupportedError( 'DefaultFirebaseOptions have not been configured for linux - ' 'you can reconfigure this by running the FlutterFire CLI again.', ); default: throw UnsupportedError( 'DefaultFirebaseOptions are not supported for this platform.', ); } } static const FirebaseOptions android = FirebaseOptions( apiKey: 'AIzaSyCFsWBqvkXzk1Gb-bCGxwqTwJQKIeHjH64', appId: '1:1086900987150:android:b7231956aa6d3b3377a35f', messagingSenderId: '1086900987150', projectId: 'intaleq-d48a7', storageBucket: 'intaleq-d48a7.firebasestorage.app', ); static const FirebaseOptions ios = FirebaseOptions( apiKey: 'AIzaSyDzGO9a-1IDMLD2FxhmOO9ONL1gMssFa9g', appId: '1:1086900987150:ios:a60973accd7f3dc777a35f', messagingSenderId: '1086900987150', projectId: 'intaleq-d48a7', storageBucket: 'intaleq-d48a7.firebasestorage.app', androidClientId: '1086900987150-060srlmdjocdcav377rbur4ka14m90b7.apps.googleusercontent.com', iosClientId: '1086900987150-9jv4oa8l3t23d54lrf27c1d22tbt9i6d.apps.googleusercontent.com', iosBundleId: 'com.Intaleq.intaleq', ); } ================================================== FILE PATH: ./lib/main.dart ================================================== import 'dart:async'; import 'dart:io'; import 'package:Intaleq/app_bindings.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:Intaleq/views/home/HomePage/contact_us.dart'; import 'package:Intaleq/views/home/HomePage/share_app_page.dart'; import 'package:Intaleq/views/home/my_wallet/passenger_wallet.dart'; import 'package:Intaleq/views/home/profile/passenger_profile_page.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_stripe/flutter_stripe.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:flutter/services.dart'; import 'package:wakelock_plus/wakelock_plus.dart'; import 'constant/api_key.dart'; import 'constant/info.dart'; import 'controller/local/local_controller.dart'; import 'controller/local/translations.dart'; import 'firebase_options.dart'; import 'models/db_sql.dart'; import 'splash_screen_page.dart'; // -- Global instances for easy access -- final box = GetStorage(); final storage = FlutterSecureStorage(); DbSql sql = DbSql.instance; // Firebase background message handler must be a top-level function. @pragma('vm:entry-point') Future backgroundMessageHandler(RemoteMessage message) async { await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); print("Handling a background message: ${message.messageId}"); } void main() { // Use runZonedGuarded to catch all unhandled exceptions in the app. runZonedGuarded>(() async { // --- Step 1: Critical initializations before runApp() --- // These must complete before the UI can be built. WidgetsFlutterBinding.ensureInitialized(); await GetStorage.init(); WakelockPlus.enable(); if (Platform.isAndroid || Platform.isIOS) { await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform); FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler); } // Stripe key initialization is very fast. Stripe.publishableKey = AK.publishableKey; // Lock screen orientation. await SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); Get.put(LocaleController()); // --- Step 2: Run the app immediately --- // All heavy initializations are deferred to the SplashScreen. runApp(const MyApp()); }, (error, stack) { // Global error handler. final s = error.toString(); final ignored = s.contains('PERMISSION_DENIED') || s.contains('FormatException') || s.contains('Null check operator used on a null value'); if (!ignored) { CRUD.addError(s, stack.toString(), 'main_zone_guard'); } }); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { // Get.find() is used here because LocaleController is already put in AppBindings. final LocaleController localController = Get.find(); return GetMaterialApp( title: AppInformation.appName, translations: MyTranslation(), debugShowCheckedModeBanner: false, locale: localController.language, theme: localController.appTheme, // --- [CRITICAL] --- // initialBinding tells GetX to run AppBindings once at the start. // This sets up all our controllers (put, lazyPut) for the entire app lifecycle. initialBinding: AppBindings(), initialRoute: '/', getPages: [ GetPage(name: '/', page: () => const SplashScreen()), // These routes are used by QuickActions and other navigation events. GetPage(name: '/shareApp', page: () => ShareAppPage()), GetPage(name: '/wallet', page: () => const PassengerWallet()), GetPage(name: '/profile', page: () => PassengerProfilePage()), GetPage(name: '/contactSupport', page: () => ContactUsPage()), ], ); } } ================================================== FILE PATH: ./lib/models/db_sql.dart ================================================== import 'package:Intaleq/constant/table_names.dart'; import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart'; class DbSql { static final DbSql instance = DbSql._(); static Database? _database; DbSql._(); Future get database async { if (_database != null) return _database!; _database = await _initDatabase(); return _database!; } Future _initDatabase() async { String path = join(await getDatabasesPath(), 'my_database.db'); return await openDatabase( path, version: 1, onCreate: (db, version) async { await db.execute(''' CREATE TABLE IF NOT EXISTS ${TableName.carLocations}( id INTEGER PRIMARY KEY AUTOINCREMENT, driver_id TEXT, latitude REAL, longitude REAL, created_at TEXT, updated_at TEXT ) '''); await db.execute(''' CREATE TABLE IF NOT EXISTS ${TableName.placesFavorite}( id INTEGER PRIMARY KEY AUTOINCREMENT, latitude REAL, longitude REAL, name TEXT UNIQUE, rate TEXT, createdAt TEXT ) '''); // await db.execute('DROP TABLE IF EXISTS ${TableName.recentLocations}'); await db.execute(''' CREATE TABLE ${TableName.recentLocations}( id INTEGER PRIMARY KEY AUTOINCREMENT, latitude REAL, longitude REAL, name TEXT, rate TEXT, createdAt TEXT ) '''); await db.execute(''' CREATE TABLE IF NOT EXISTS ${TableName.driverOrdersRefuse}( id INTEGER PRIMARY KEY AUTOINCREMENT, order_id TEXT UNIQUE, created_at TEXT, driver_id TEXT ) '''); await db.execute(''' CREATE TABLE IF NOT EXISTS ${TableName.rideLocation}( id INTEGER PRIMARY KEY AUTOINCREMENT, order_id TEXT , created_at TEXT, lat TEXT, lng TEXT ) '''); await db.execute(''' CREATE TABLE IF NOT EXISTS ${TableName.faceDetectTimes}( id INTEGER PRIMARY KEY AUTOINCREMENT, faceDetectTimes INTEGER ) '''); await db.execute(''' CREATE TABLE IF NOT EXISTS ${TableName.captainNotification}( id INTEGER PRIMARY KEY AUTOINCREMENT, faceDetectTimes INTEGER ) '''); }, ); } Future>> getAllData(String table) async { Database db = await instance.database; return await db.query(table); } Future>> getCustomQuery(String query) async { Database db = await instance.database; return await db.rawQuery(query); } Future insertData(Map map, String table) async { Database db = await instance.database; return await db.insert(table, map); } Future insertMapLocation(Map map, String table) async { Database db = await instance.database; // Check if the record already exists (based on latitude, longitude, and name) var existing = await db.query( table, where: 'latitude = ? AND longitude = ? AND name = ?', whereArgs: [map['latitude'], map['longitude'], map['name']], ); if (existing.isNotEmpty) { // If record exists, update the createdAt field with the current timestamp var updatedMap = Map.from(map); updatedMap['createdAt'] = DateTime.now().toIso8601String(); // Update timestamp return await db.update( table, updatedMap, where: 'id = ?', whereArgs: [existing.first['id']], // Update the existing row ); } else { // If record doesn't exist, insert new record with the current timestamp map['createdAt'] = DateTime.now().toIso8601String(); return await db.insert(table, map); } } Future updateData(Map map, String table, int id) async { Database db = await instance.database; return await db.update(table, map, where: 'id = ?', whereArgs: [id]); } Future deleteData(String table, int id) async { Database db = await instance.database; return await db.delete(table, where: 'id = ?', whereArgs: [id]); } Future deleteAllData(String table) async { Database db = await instance.database; return await db.delete(table); } } ================================================== FILE PATH: ./lib/models/model/painter_copoun.dart ================================================== import 'dart:math' as math; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/main.dart'; import 'package:Intaleq/splash_screen_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; class CouponPainter extends CustomPainter { final Color primaryColor; final Color secondaryColor; CouponPainter({ required this.primaryColor, required this.secondaryColor, }); @override void paint(Canvas canvas, Size size) { final Paint primaryPaint = Paint() ..color = primaryColor ..style = PaintingStyle.fill; // final Paint secondaryPaint = Paint() ..color = secondaryColor ..style = PaintingStyle.fill; final Path path = Path(); // Draw the main ticket shape path.moveTo(0, size.height * 0.1); path.lineTo(size.width * 0.93, size.height * 0.1); path.arcToPoint( Offset(size.width, size.height * 0.2), radius: const Radius.circular(20), clockwise: false, ); path.lineTo(size.width, size.height * 0.8); path.arcToPoint( Offset(size.width * 0.93, size.height * 0.9), radius: const Radius.circular(20), clockwise: false, ); path.lineTo(0, size.height * 0.9); path.close(); canvas.drawPath(path, primaryPaint); // Draw decorative circles on the left side for (int i = 0; i < 5; i++) { canvas.drawCircle( Offset(0, size.height * (0.2 + i * 0.15)), 10, secondaryPaint, ); } // Draw a wavy pattern on the right side final wavePaint = Paint() ..color = secondaryColor.withOpacity(0.3) ..style = PaintingStyle.stroke ..strokeWidth = 2; for (int i = 0; i < 20; i++) { canvas.drawLine( Offset(size.width * 0.8, i * 10.0), Offset( size.width, i * 10.0 + math.sin(i * 0.5) * 10, ), wavePaint, ); } } @override bool shouldRepaint(CustomPainter oldDelegate) => false; } class PromoBanner extends StatelessWidget { final String promoCode; final String discountPercentage; final String validity; const PromoBanner({ Key? key, required this.promoCode, required this.discountPercentage, required this.validity, }) : super(key: key); @override Widget build(BuildContext context) { return CustomPaint( painter: CouponPainter( primaryColor: Colors.blue[800]!, secondaryColor: Colors.white, ), child: Container( width: 320, height: 240, padding: const EdgeInsets.all(16), child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ const SizedBox( height: 10, ), Text( 'Enter the promo code and get'.tr, style: const TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: Colors.white, ), textAlign: TextAlign.center, ), Text( '${'DISCOUNT'.tr} $discountPercentage ${'for'.tr} $validity' .toUpperCase(), style: const TextStyle( fontSize: 20, fontWeight: FontWeight.bold, color: Colors.white, ), textAlign: TextAlign.center, ), const SizedBox(height: 10), Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 4, offset: const Offset(0, 2), ), ], ), padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), child: Text( promoCode, style: TextStyle( fontSize: 24, fontWeight: FontWeight.bold, color: Colors.blue[800], ), ), ), const SizedBox(height: 10), ElevatedButton( onPressed: () { // Copy promo code to clipboard Clipboard.setData(ClipboardData(text: promoCode)); // Show a Snackbar or other feedback to the user ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Promo code copied to clipboard!'.tr)), ); box.write(BoxName.isGiftToken, '1'); box.write(BoxName.isFirstTime, '1'); Get.back(); }, style: ElevatedButton.styleFrom( foregroundColor: Colors.blue[800], // Customize the color backgroundColor: Colors.white, // Customize the background color ), child: Text('Copy Code'.tr), ) ], ), ), ); } } // import 'package:Intaleq/constant/colors.dart'; // import 'package:flutter/cupertino.dart'; // import 'package:flutter/material.dart'; // class CouponPainter extends CustomPainter { // @override // void paint(Canvas canvas, Size size) { // final Paint paint = Paint() // ..color = AppColor.blueColor // ..style = PaintingStyle.fill; // final Path path = Path(); // // Draw the ticket shape (like the image) // path.moveTo(0, 0); // path.lineTo(size.width * 0.7, 0); // top left to top right edge // // Draw curve for the cut on the right side (ticket look) // path.arcToPoint(Offset(size.width, size.height * 0.15), // radius: const Radius.circular(15), clockwise: false); // path.lineTo(size.width, size.height * 0.85); // path.arcToPoint(Offset(size.width * 0.7, size.height), // radius: const Radius.circular(15), clockwise: false); // path.lineTo(0, size.height); // canvas.drawPath(path, paint); // } // @override // bool shouldRepaint(CustomPainter oldDelegate) { // return false; // } // } // class PromoBanner extends StatelessWidget { // final String promoCode; // final String discountPercentage; // final String validity; // const PromoBanner({ // required this.promoCode, // required this.discountPercentage, // required this.validity, // }); // @override // Widget build(BuildContext context) { // return CustomPaint( // painter: CouponPainter(), // child: Container( // width: 300, // Fixed width for the promo banner // height: 180, // Set the desired height for your banner // padding: const EdgeInsets.all(16), // child: Column( // mainAxisAlignment: MainAxisAlignment.spaceAround, // children: [ // Text( // 'Enter the promo code and get'.toUpperCase(), // style: const TextStyle( // fontSize: 16, // fontWeight: FontWeight.bold, // color: Colors.white, // ), // textAlign: TextAlign.center, // ), // Text( // '$discountPercentage OFF for $validity'.toUpperCase(), // style: const TextStyle( // fontSize: 18, // fontWeight: FontWeight.bold, // color: Colors.white, // ), // textAlign: TextAlign.center, // ), // const SizedBox(height: 10), // Container( // decoration: BoxDecoration( // color: Colors.white, // borderRadius: BorderRadius.circular(10), // ), // padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), // child: Text( // promoCode, // style: TextStyle( // fontSize: 20, // fontWeight: FontWeight.bold, // color: Colors.blue[800], // ), // ), // ), // ], // ), // ), // ); // } // } ================================================== FILE PATH: ./lib/models/model/onboarding_model.dart ================================================== import 'package:get/get.dart'; List onBoardingList = [ OnBoardingModel( title: 'Welcome to Intaleq!'.tr, image: 'assets/images/on1.png', body: 'Intaleq is the ride-hailing app that is safe, reliable, and accessible.' .tr, ), OnBoardingModel( title: 'Get to your destination quickly and easily.'.tr, image: 'assets/images/on2.png', body: 'With Intaleq, you can get a ride to your destination in minutes.'.tr, ), OnBoardingModel( title: 'Enjoy a safe and comfortable ride.'.tr, image: 'assets/images/on3.png', body: 'Intaleq is committed to safety, and all of our captains are carefully screened and background checked.' .tr, ), ]; class OnBoardingModel { final String? title; final String? image; final String? body; OnBoardingModel({this.body, this.title, this.image}); } ================================================== FILE PATH: ./lib/models/model/locations.dart ================================================== class CarLocationModel { String id; String driverId; double latitude; double heading; double speed; double longitude; DateTime createdAt; DateTime updatedAt; CarLocationModel({ required this.id, required this.driverId, required this.latitude, required this.longitude, required this.heading, required this.speed, required this.createdAt, required this.updatedAt, }); factory CarLocationModel.fromJson(Map json) { return CarLocationModel( id: json['id'], driverId: json['driver_id'], latitude: double.parse(json['latitude'].toString()), longitude: double.parse(json['longitude'].toString()), heading: double.parse(json['heading'].toString()), speed: double.parse(json['speed'].toString()), createdAt: DateTime.parse(json['created_at']), updatedAt: DateTime.parse(json['updated_at']), ); } } ================================================== FILE PATH: ./lib/models/model/driver/rides_summary_model.dart ================================================== class MonthlyDataModel { int day; int totalDuration; MonthlyDataModel({required this.day, required this.totalDuration}); factory MonthlyDataModel.fromJson(Map json) => MonthlyDataModel( day: int.parse(json['day'].toString().split('-')[2]), totalDuration: int.parse(json['total_duration'].toString().split(':')[0])); } ================================================== FILE PATH: ./lib/models/model/admin/passenger_model.dart ================================================== class Passenger { String id; String phone; String email; String gender; String status; String birthdate; String site; String firstName; String lastName; String sosPhone; String education; String employmentType; String maritalStatus; String createdAt; String updatedAt; int countPassenger; int countFeedback; double ratingPassenger; int countDriverRate; int countPassengerCancel; double passengerAverageRating; int countPassengerRate; int countPassengerRide; Passenger({ required this.id, required this.phone, required this.email, required this.gender, required this.status, required this.birthdate, required this.site, required this.firstName, required this.lastName, required this.sosPhone, required this.education, required this.employmentType, required this.maritalStatus, required this.createdAt, required this.updatedAt, required this.countPassenger, required this.countFeedback, required this.ratingPassenger, required this.countDriverRate, required this.countPassengerCancel, required this.passengerAverageRating, required this.countPassengerRate, required this.countPassengerRide, }); factory Passenger.fromJson(Map json) { return Passenger( id: json['id'], phone: json['phone'], email: json['email'], gender: json['gender'], status: json['status'], birthdate: json['birthdate'], site: json['site'], firstName: json['first_name'], lastName: json['last_name'], sosPhone: json['sosPhone'], education: json['education'], employmentType: json['employmentType'], maritalStatus: json['maritalStatus'], createdAt: json['created_at'], updatedAt: json['updated_at'], countPassenger: json['countPassenger'], countFeedback: json['countFeedback'], ratingPassenger: json['ratingPassenger'].toDouble(), countDriverRate: json['countDriverRate'], countPassengerCancel: json['countPassengerCancel'], passengerAverageRating: json['passengerAverageRating'].toDouble(), countPassengerRate: json['countPassengerRate'], countPassengerRide: json['countPassengerRide'], ); } } ================================================== FILE PATH: ./lib/models/model/admin/monthly_ride.dart ================================================== class MonthlyDataModel { final int year; final int month; final int day; final int ridesCount; MonthlyDataModel({ required this.year, required this.month, required this.day, required this.ridesCount, }); factory MonthlyDataModel.fromJson(Map json) => MonthlyDataModel( year: json['year'] as int, month: json['month'] as int, day: json['day'] as int, ridesCount: json['rides_count'] as int, ); } ================================================== FILE PATH: ./lib/controller/home/decode_polyline_isolate.dart ================================================== import 'package:google_maps_flutter/google_maps_flutter.dart'; List decodePolylineIsolate(String encoded) { List points = []; int index = 0, len = encoded.length; int lat = 0, lng = 0; while (index < len) { int b, shift = 0, result = 0; do { b = encoded.codeUnitAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); lat += dlat; shift = 0; result = 0; do { b = encoded.codeUnitAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); lng += dlng; points.add(LatLng(lat / 1E5, lng / 1E5)); } return points; } // Helper method for decoding polyline (if not already defined) // List decodePolyline(String encoded) { // List points = []; // int index = 0, len = encoded.length; // int lat = 0, lng = 0; // while (index < len) { // int b, shift = 0, result = 0; // do { // b = encoded.codeUnitAt(index++) - 63; // result |= (b & 0x1f) << shift; // shift += 5; // } while (b >= 0x20); // int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); // lat += dlat; // shift = 0; // result = 0; // do { // b = encoded.codeUnitAt(index++) - 63; // result |= (b & 0x1f) << shift; // shift += 5; // } while (b >= 0x20); // int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); // lng += dlng; // points.add(LatLng(lat / 1E5, lng / 1E5)); // } // return points; // } ================================================== FILE PATH: ./lib/controller/home/vip_waitting_page.dart ================================================== import 'dart:async'; import 'dart:convert'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/home/map_passenger_controller.dart'; import 'package:Intaleq/main.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; import 'package:Intaleq/views/widgets/mycircular.dart'; import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; import '../functions/crud.dart'; import '../functions/encrypt_decrypt.dart'; class VipOrderController extends GetxController { RxBool isLoading = false.obs; final arguments = Get.arguments; RxList tripData = [].obs; RxBool isButtonVisible = false.obs; RxInt countdown = 60.obs; Timer? _countdownTimer; @override void onInit() { super.onInit(); fetchOrder(); startCountdown(); } @override void onClose() { _countdownTimer?.cancel(); super.onClose(); } Future fetchOrder() async { try { isLoading.value = true; var mapPassengerController = Get.find(); var res = await CRUD().get( link: AppLink.getMishwari, payload: { // 'driverId': mapPassengerController.driverIdVip.toString(), 'driverId': box.read(BoxName.passengerID).toString(), }, ); if (res != 'failure') { var decodedResponse = jsonDecode(res); if (decodedResponse['message'] is List) { tripData.value = decodedResponse['message']; } else { tripData.clear(); // Ensure empty list if no data // mySnackeBarError('No trip data found'); } } else { tripData.clear(); // mySnackeBarError('Failed to fetch trip data'); } } catch (e) { tripData.clear(); // mySnackeBarError('An error occurred: $e'); } finally { isLoading.value = false; } } void startCountdown() { _countdownTimer?.cancel(); // Cancel any existing timer countdown.value = 60; _countdownTimer = Timer.periodic(const Duration(seconds: 1), (timer) { if (countdown.value > 0) { countdown.value--; } else { timer.cancel(); isButtonVisible.value = true; } }); } void sendToDriverAgain() { // Reset states isButtonVisible.value = false; fetchOrder(); // Refresh order startCountdown(); // Restart countdown } } class VipWaittingPage extends StatelessWidget { VipWaittingPage({super.key}); final VipOrderController vipOrderController = Get.put(VipOrderController()); @override Widget build(BuildContext context) { return MyScafolld( title: "Waiting VIP".tr, body: [ Obx(() { // Loading state if (vipOrderController.isLoading.value) { return const Center(child: MyCircularProgressIndicator()); } // No data state if (vipOrderController.tripData.isEmpty) { return Center( child: Text( 'No trip data available'.tr, style: AppStyle.title, ), ); } // Data available var data = vipOrderController.tripData[0]; // Function to get the localized status string String getLocalizedStatus(String status) { switch (status) { case 'pending': return 'pending'.tr; case 'accepted': return 'accepted'.tr; case 'begin': return 'begin'.tr; case 'rejected': return 'rejected'.tr; case 'cancelled': return 'cancelled'.tr; default: return 'unknown'.tr; } } // Function to get the appropriate status color Color getStatusColor(String status) { switch (status) { case 'pending': return Colors.yellow; case 'accepted': return Colors.green; case 'begin': return Colors.green; case 'rejected': return Colors.red; case 'cancelled': return Colors.red; default: return Colors.grey; } } return Card( elevation: 4, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), margin: const EdgeInsets.all(16), child: Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "${'Driver Name:'.tr} ${data['name']}", style: AppStyle.title, ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "${'Car Plate:'.tr} ${data['car_plate']}", style: AppStyle.title, ), Text( "${'Car Make:'.tr} ${data['make']}", style: AppStyle.title, ), Text( "${'Car Model:'.tr} ${data['model']}", style: AppStyle.title, ), Text( "${"Car Color:".tr} ${data['color']}", style: AppStyle.title, ), ], ), SizedBox( width: 100, height: 100, child: Icon( Fontisto.car, size: 80, color: Color( int.parse( data['color_hex'].replaceFirst('#', '0xff'), ), ), ), ), ], ), const SizedBox(height: 12), const Divider(), const SizedBox(height: 12), Container( color: getStatusColor(data['status']), child: Padding( padding: const EdgeInsets.all(8.0), child: Text( "${'Trip Status:'.tr} ${getLocalizedStatus(data['status'])}", style: const TextStyle(fontSize: 16), ), ), ), Text( "${'Scheduled Time:'.tr} ${DateFormat('yyyy-MM-dd hh:mm a').format(DateTime.parse(data['timeSelected']))}", style: const TextStyle(fontSize: 16), ), const SizedBox(height: 12), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ data['status'].toString() != 'begin' ? MyElevatedButton( title: "Cancel Trip".tr, kolor: AppColor.redColor, onPressed: () { Get.find().cancelVip( data['token'].toString(), data['id'].toString(), ); }, ) : const SizedBox(), Obx(() { // If countdown is still running, show countdown if (!vipOrderController.isButtonVisible.value) { return Column( children: [ CircularProgressIndicator( value: 1 - (vipOrderController.countdown.value / 60), strokeWidth: 6.0, color: AppColor.greenColor, backgroundColor: AppColor.accentColor, ), const SizedBox(height: 10), Text( "${vipOrderController.countdown.value}s ${'remaining'.tr}", style: const TextStyle(fontSize: 16), ), ], ); } // Once countdown is complete, show "Send to Driver Again" button return MyElevatedButton( title: "Send to Driver Again".tr, kolor: AppColor.greenColor, onPressed: () { Get.find() .sendToDriverAgain(data['token']); vipOrderController.fetchOrder(); }, ); }), ], ), const SizedBox( height: 30, ), data['status'].toString() == 'begin' ? MyElevatedButton( title: "Click here to begin your trip\n\nGood luck, " .tr + (box.read(BoxName.name).toString().split(' ')[0]) .toString(), kolor: AppColor.greenColor, onPressed: () { final mapPassengerController = Get.find(); mapPassengerController.make = data['make']; mapPassengerController.licensePlate = data['car_plate']; mapPassengerController.model = data['model']; mapPassengerController.driverId = data['driverId']; mapPassengerController.carColor = data['color']; mapPassengerController.driverRate = data['rating']; mapPassengerController.colorHex = data['color_hex']; mapPassengerController.driverPhone = data['phone']; mapPassengerController.driverToken = data['token']; mapPassengerController.driverName = data['name'].toString().split(' ')[0]; Get.back(); mapPassengerController.begiVIPTripFromPassenger(); }, ) : const SizedBox() ], ), ), ); }), ], isleading: true, ); } } ================================================== FILE PATH: ./lib/controller/home/points_for_rider_controller.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/home/map_passenger_controller.dart'; import '../../constant/api_key.dart'; import '../../constant/links.dart'; import '../functions/crud.dart'; import '../functions/location_controller.dart'; class PointsForRiderController extends GetxController { List locations = []; String hintTextDestinationPoint = 'Search for your destination'.tr; TextEditingController placeStartController = TextEditingController(); void addLocation(String location) { locations.add(location); update(); } void getTextFromList(String location) { locations.add(location); update(); Get.back(); } void removeLocation(int index) { locations.removeAt(index); update(); } void onReorder(int oldIndex, int newIndex) { if (newIndex > oldIndex) { newIndex -= 1; update(); } final item = locations.removeAt(oldIndex); locations.insert(newIndex, item); update(); } } class LocationModel { String name; double lat, lon; LocationModel({required this.name, required this.lat, required this.lon}); } class WayPointController extends GetxController { // A list of text editing controllers for each text field // final textFields = [TextEditingController()].obs; List wayPoints = []; List> placeListResponse = []; double wayPointHeight = 400; String hintTextDestinationPoint = 'Search for your destination'.tr; TextEditingController textSearchCotroller = TextEditingController(); // A list of places corresponding to each text field final places = []; final hintTextPointList = []; late LatLng myLocation; void addWayPoints() { String wayPoint = 'Add a Stop'.tr; if (wayPoints.length < 5) { wayPoints.add(wayPoint); update(); } else { Get.defaultDialog( title: 'This is most WayPoints', titleStyle: AppStyle.title, middleText: ''); } update(); } void removeTextField(int index) { wayPoints.removeAt(index); update(); } // A method to reorder the text fields and the places void reorderTextFields(int oldIndex, int newIndex) { if (newIndex > oldIndex) { newIndex -= 1; } final wayPoint = wayPoints.removeAt(oldIndex); wayPoints.insert(newIndex, wayPoint); update(); } void updatePlace(int index, String input) async { var url = '${AppLink.googleMapsLink}place/nearbysearch/json?keyword=$input&location=${myLocation.latitude},${myLocation.longitude}&radius=50000&language=en&key=${AK.mapAPIKEY.toString()}'; var response = await CRUD().getGoogleApi(link: url, payload: {}); // final place = input; // if (index == 0) { List newList = []; placeListResponse.add(newList); newList = response['results']; placeListResponse[index].add(newList); update(); // } update(); } @override void onInit() { // Get.put(LocationController()); addWayPoints(); myLocation = Get.find().passengerLocation; super.onInit(); } } class PlaceList extends StatelessWidget { // Get the controller instance final controller = Get.put(WayPointController()); @override Widget build(BuildContext context) { // Use the Obx widget to rebuild the widget when the controller changes return Obx(() { // Use the ListView widget to display the list of places return ListView( // The children of the list are the places children: [ // Loop through the places in the controller for (final place in controller.places) // Create a text widget for each place Text( // Use the place as the text place, // Add some style and padding style: const TextStyle(fontSize: 18.0), ), ], ); }); } } ================================================== FILE PATH: ./lib/controller/home/device_tier.dart ================================================== import 'dart:io'; import 'package:device_info_plus/device_info_plus.dart'; import '../../main.dart'; // مفاتيح التخزين (بسيطة) const _kDeviceTierKey = 'deviceTier'; // 'low' | 'mid' | 'high' const _kDeviceTierCheckedAtKey = 'deviceTierTime'; // millisSinceEpoch Future detectAndCacheDeviceTier({bool force = false}) async { // لا تعيد الفحص إذا عملناه خلال آخر 24 ساعة if (!force) { final last = box.read(_kDeviceTierCheckedAtKey); if (last is int) { final dt = DateTime.fromMillisecondsSinceEpoch(last); if (DateTime.now().difference(dt) < const Duration(hours: 24)) { final cached = box.read(_kDeviceTierKey); if (cached is String && cached.isNotEmpty) return cached; // low/mid/high } } } final info = DeviceInfoPlugin(); int score = 0; if (Platform.isAndroid) { final a = await info.androidInfo; final int sdk = a.version.sdkInt ?? 0; final int cores = Platform.numberOfProcessors; final int abisCount = a.supportedAbis.length; final bool isEmu = !(a.isPhysicalDevice ?? true); // SDK (أقدم = أضعف) if (sdk <= 26) score += 3; // 8.0 وأقدم else if (sdk <= 29) score += 2; // 9-10 else if (sdk <= 30) score += 1; // 11 // الأنوية if (cores <= 4) score += 3; else if (cores <= 6) score += 2; else if (cores <= 8) score += 1; // ABI count (القليل غالباً أضعف) if (abisCount <= 1) score += 2; else if (abisCount == 2) score += 1; // محاكي if (isEmu) score += 2; } else { // iOS/منصات أخرى: تقدير سريع بالأنوية فقط final int cores = Platform.numberOfProcessors; if (cores <= 4) score += 3; else if (cores <= 6) score += 2; else if (cores <= 8) score += 1; } // تحويل السكور إلى تصنيف final String tier = (score >= 6) ? 'low' : (score >= 3) ? 'mid' : 'high'; box.write(_kDeviceTierKey, tier); box.write(_kDeviceTierCheckedAtKey, DateTime.now().millisecondsSinceEpoch); return tier; } // للقراءة السريعة وقت ما تحتاج: String getCachedDeviceTier() { final t = box.read(_kDeviceTierKey); if (t is String && t.isNotEmpty) return t; return 'mid'; } bool isLowEnd() => getCachedDeviceTier() == 'low'; bool isMidEnd() => getCachedDeviceTier() == 'mid'; bool isHighEnd() => getCachedDeviceTier() == 'high'; ================================================== FILE PATH: ./lib/controller/home/device_performance.dart ================================================== import 'dart:io'; import 'package:device_info_plus/device_info_plus.dart'; class DevicePerformanceManager { /// القائمة البيضاء لموديلات الهواتف القوية (Flagships Only) /// أي هاتف يبدأ موديله بأحد هذه الرموز سيعتبر قوياً static const List _highEndSamsungModels = [ 'SM-S', // سلسلة Galaxy S21, S22, S23, S24 (S901, S908, S911...) 'SM-F', // سلسلة Fold و Flip (Z Fold, Z Flip) 'SM-N9', // سلسلة Note 9, Note 10, Note 20 'SM-G9', // سلسلة S10, S20 (G970, G980...) ]; static const List _highEndGoogleModels = [ 'Pixel 6', 'Pixel 7', 'Pixel 8', 'Pixel 9', 'Pixel Fold' ]; static const List _highEndHuaweiModels = [ 'ELS-', // P40 Pro 'ANA-', // P40 'HMA-', // Mate 20 'LYA-', // Mate 20 Pro 'VOG-', // P30 Pro 'ELE-', // P30 'NOH-', // Mate 40 Pro 'AL00', // Mate X series (some) ]; static const List _highEndXiaomiModels = [ '2201122', // Xiaomi 12 series patterns often look like this '2210132', // Xiaomi 13 '2304FPN', // Xiaomi 13 Ultra 'M2007J1', // Mi 10 series 'M2102K1', // Mi 11 Ultra ]; static const List _highEndOnePlusModels = [ 'GM19', // OnePlus 7 'HD19', // OnePlus 7T 'IN20', // OnePlus 8 'KB20', // OnePlus 8T 'LE21', // OnePlus 9 'NE22', // OnePlus 10 'PHB110', // OnePlus 11 'CPH', // Newer OnePlus models ]; /// دالة الفحص الرئيسية static Future isHighEndDevice() async { // 1. الآيفون دائماً قوي (نظام الرسوميات فيه متفوق حتى في الموديلات القديمة) if (Platform.isIOS) return true; if (Platform.isAndroid) { try { final androidInfo = await DeviceInfoPlugin().androidInfo; String manufacturer = androidInfo.manufacturer.toLowerCase(); String model = androidInfo.model.toUpperCase(); // نحوله لحروف كبيرة للمقارنة String hardware = androidInfo.hardware.toLowerCase(); // المعالج // --- الفحص العكسي (الحظر المباشر) --- // إذا كان المعالج من الفئات الضعيفة جداً المشهورة في الهواتف المقلدة // mt65xx, mt6735, sc77xx هي معالجات رخيصة جداً if (hardware.contains('mt65') || hardware.contains('mt6735') || hardware.contains('sc77')) { return false; } // --- فحص القائمة البيضاء (Whitelist) --- // 1. Samsung Flagships if (manufacturer.contains('samsung')) { for (var prefix in _highEndSamsungModels) { if (model.startsWith(prefix)) return true; } } // 2. Google Pixel (6 and above) if (manufacturer.contains('google')) { for (var prefix in _highEndGoogleModels) { if (model.contains(prefix.toUpperCase())) return true; } } // 3. Huawei Flagships if (manufacturer.contains('huawei')) { for (var prefix in _highEndHuaweiModels) { if (model.startsWith(prefix)) return true; } } // 4. OnePlus Flagships if (manufacturer.contains('oneplus')) { for (var prefix in _highEndOnePlusModels) { if (model.startsWith(prefix)) return true; } } // 5. Xiaomi Flagships if (manufacturer.contains('xiaomi') || manufacturer.contains('redmi') || manufacturer.contains('poco')) { // شاومي تسميتها معقدة، لذا سنعتمد على فحص الرام كعامل مساعد هنا فقط // لأن هواتف شاومي القوية عادة لا تزور الرام // الرام يجب أن يكون أكبر من 6 جيجا (بايت) double ramGB = (androidInfo.availableRamSize) / (1024 * 1024 * 1024); if (ramGB > 7.5) return true; // 8GB RAM or more is usually safe for Xiaomi high-end } // إذا لم يكن من ضمن القوائم أعلاه، نعتبره جهازاً متوسطاً/ضعيفاً ونعرض الرسم البسيط return false; } catch (e) { // في حال حدوث خطأ في الفحص، نعود للوضع الآمن (الرسم البسيط) return false; } } return false; } } ================================================== FILE PATH: ./lib/controller/home/contact_us_controller.dart ================================================== import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; import '../../../constant/colors.dart'; import '../functions/launch.dart'; class ContactUsController extends GetxController { /// WORKING HOURS (10:00 → 16:00) final TimeOfDay workStartTime = const TimeOfDay(hour: 10, minute: 0); final TimeOfDay workEndTime = const TimeOfDay(hour: 16, minute: 0); bool _isWithinWorkTime(TimeOfDay now) { return (now.hour > workStartTime.hour || (now.hour == workStartTime.hour && now.minute >= workStartTime.minute)) && (now.hour < workEndTime.hour || (now.hour == workEndTime.hour && now.minute <= workEndTime.minute)); } /// PHONE LIST (USED FOR CALLS + WHATSAPP) final List phoneNumbers = [ '+963952475734', '+963952475740', '+963952475742' ]; /// RANDOM PHONE SELECTOR String getRandomPhone() { final random = Random(); return phoneNumbers[random.nextInt(phoneNumbers.length)]; } /// SHOW DIALOG void showContactDialog(BuildContext context) { TimeOfDay now = TimeOfDay.now(); bool withinHours = _isWithinWorkTime(now); showCupertinoModalPopup( context: context, builder: (context) => CupertinoActionSheet( title: Text('Contact Us'.tr), message: Text('Choose a contact option'.tr), actions: [ /// 📞 CALL (RANDOM) — ONLY DURING WORK HOURS if (withinHours) CupertinoActionSheetAction( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const Icon(CupertinoIcons.phone), Text('Call Support'.tr), ], ), onPressed: () { final phone = getRandomPhone(); makePhoneCall(phone); }, ), /// ⛔ OUTSIDE WORK HOURS — SHOW INFO if (!withinHours) CupertinoActionSheetAction( child: Text( 'Work time is from 10:00 AM to 16:00 PM.\nYou can send a WhatsApp message or email.' .tr, textAlign: TextAlign.center, ), onPressed: () => Navigator.pop(context), ), /// 💬 WHATSAPP (RANDOM) CupertinoActionSheetAction( child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ const Icon( FontAwesome.whatsapp, color: AppColor.greenColor, ), Text('Send WhatsApp Message'.tr), ], ), onPressed: () { final phone = getRandomPhone(); launchCommunication('whatsapp', phone, 'Hello'.tr); }, ), /// 📧 EMAIL CupertinoActionSheetAction( child: Text('Send Email'.tr), onPressed: () => launchCommunication( 'email', 'support@intaleqapp.com', 'Hello'.tr), ), ], /// ❌ CANCEL BUTTON cancelButton: CupertinoActionSheetAction( child: Text('Cancel'.tr), onPressed: () => Navigator.pop(context), ), ), ); } } ================================================== FILE PATH: ./lib/controller/home/trip_monitor_controller.dart ================================================== import 'dart:async'; import 'dart:convert'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; class TripMonitorController extends GetxController { bool isLoading = false; Map tripData = {}; late String rideId; late String driverId; GoogleMapController? mapController; List myListString = []; late Timer timer; late LatLng parentLocation; BitmapDescriptor carIcon = BitmapDescriptor.defaultMarker; BitmapDescriptor motoIcon = BitmapDescriptor.defaultMarker; BitmapDescriptor ladyIcon = BitmapDescriptor.defaultMarker; double rotation = 0; double speed = 0; getLocationParent() async { var res = await CRUD().get( link: AppLink.getLocationParents, payload: {"driver_id": driverId}); if (res != 'failure') { tripData = jsonDecode(res); parentLocation = LatLng( double.parse(tripData['message'][0]['latitude'].toString()), double.parse(tripData['message'][0]['longitude'].toString())); rotation = double.parse(tripData['message'][0]['heading'].toString()); speed = double.parse(tripData['message'][0]['speed'].toString()); update(); } } void onMapCreated(GoogleMapController controller) async { mapController = controller; controller.getVisibleRegion(); controller.animateCamera( CameraUpdate.newLatLng(parentLocation), ); update(); // Set up a timer or interval to trigger the marker update every 3 seconds. timer = Timer.periodic(const Duration(seconds: 10), (_) async { await getLocationParent(); mapController?.animateCamera(CameraUpdate.newLatLng(parentLocation)); update(); }); } // init() async { // final arguments = Get.arguments; // driverId = arguments['driverId']; // rideId = arguments['rideId']; // await getLocationParent(); // } Future init({String? rideId, String? driverId}) async { this.driverId = driverId!; this.rideId = rideId!; await getLocationParent(); update(); } void addCustomCarIcon() { ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); BitmapDescriptor.fromAssetImage(config, 'assets/images/car.png', mipmaps: false) .then((value) { carIcon = value; update(); }); void addCustomMotoIcon() { ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); BitmapDescriptor.fromAssetImage(config, 'assets/images/moto1.png', mipmaps: false) .then((value) { motoIcon = value; update(); }); } void addCustomLadyIcon() { ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); BitmapDescriptor.fromAssetImage(config, 'assets/images/lady1.png', mipmaps: false) .then((value) { ladyIcon = value; update(); }); } } @override void onInit() { addCustomCarIcon(); super.onInit(); } @override void onClose() { timer.cancel(); mapController?.dispose(); super.onClose(); } } ================================================== FILE PATH: ./lib/controller/home/deep_link_controller.dart ================================================== import 'dart:async'; import 'package:app_links/app_links.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; class DeepLinkController extends GetxController { // استخدم AppLinks للتعامل مع الروابط final _appLinks = AppLinks(); StreamSubscription? _linkSubscription; // متغير لتخزين الإحداثيات القادمة من الرابط final Rx deepLinkLatLng = Rx(null); @override void onInit() { super.onInit(); // ابدأ بالاستماع للروابط عند تشغيل التطبيق initDeepLinks(); } Future initDeepLinks() async { // الاستماع إلى الروابط القادمة _linkSubscription = _appLinks.uriLinkStream.listen((uri) { print('Received deep link: $uri'); _handleLink(uri); }); // جلب الرابط الأولي الذي قد يكون فتح التطبيق final initialUri = await _appLinks.getInitialLink(); if (initialUri != null) { print('Received initial deep link: $initialUri'); _handleLink(initialUri); } } void _handleLink(Uri uri) { // تحقق من أن الرابط يتبع النمط المتوقع (مثال: intaleq://route?lat=xx&lng=yy) if (uri.scheme == 'intaleq' && uri.host == 'route') { // استخراج خطوط الطول والعرض من الرابط final latString = uri.queryParameters['lat']; final lngString = uri.queryParameters['lng']; if (latString != null && lngString != null) { final double? lat = double.tryParse(latString); final double? lng = double.tryParse(lngString); if (lat != null && lng != null) { // إذا كانت الإحداثيات صالحة، قم بتحديث المتغير // ستستمع وحدة التحكم في الخريطة لهذا التغيير deepLinkLatLng.value = LatLng(lat, lng); print('Parsed LatLng from deep link: ${deepLinkLatLng.value}'); } } } } @override void onClose() { // تأكد من إلغاء الاشتراك عند إغلاق وحدة التحكم _linkSubscription?.cancel(); super.onClose(); } } ================================================== FILE PATH: ./lib/controller/home/menu_controller.dart ================================================== import 'package:get/get.dart'; class MyMenuController extends GetxController { bool isDrawerOpen = true; void getDrawerMenu() { if (isDrawerOpen == true) { isDrawerOpen = false; } else { isDrawerOpen = true; } update(); } } ================================================== FILE PATH: ./lib/controller/home/map_passenger_controller.dart ================================================== import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'dart:math' show Random, atan2, cos, max, min, pi, pow, sin, sqrt; import 'dart:math' as math; import 'dart:ui'; import 'dart:convert'; import 'package:crypto/crypto.dart'; import 'package:Intaleq/views/Rate/rate_captain.dart'; import 'package:Intaleq/views/Rate/rating_driver_bottom.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; import 'package:Intaleq/constant/univeries_polygon.dart'; import 'package:Intaleq/controller/firebase/local_notification.dart'; import 'package:Intaleq/controller/functions/encrypt_decrypt.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_confetti/flutter_confetti.dart'; import 'package:vector_math/vector_math.dart' show radians, degrees; import 'package:Intaleq/controller/functions/tts.dart'; import 'package:Intaleq/views/home/map_page_passenger.dart'; import 'package:Intaleq/views/widgets/my_textField.dart'; import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; // import 'package:google_polyline_algorithm/google_polyline_algorithm.dart'; import 'package:intl/intl.dart'; import 'package:location/location.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/home/points_for_rider_controller.dart'; import 'package:Intaleq/views/home/map_widget.dart/form_serch_multiy_point.dart'; import '../../constant/api_key.dart'; import '../../constant/box_name.dart'; import '../../constant/country_polygons.dart'; import '../../constant/info.dart'; import '../../constant/links.dart'; import '../../constant/table_names.dart'; import '../../env/env.dart'; import '../../main.dart'; import '../../models/model/locations.dart'; import '../../models/model/painter_copoun.dart'; import '../../print.dart'; import '../../views/home/map_widget.dart/cancel_raide_page.dart'; import '../../views/home/map_widget.dart/car_details_widget_to_go.dart'; import '../../views/home/map_widget.dart/searching_captain_window.dart'; import '../../views/home/map_widget.dart/select_driver_mishwari.dart'; import '../../views/widgets/elevated_btn.dart'; import '../../views/widgets/error_snakbar.dart'; import '../../views/widgets/mydialoug.dart'; import '../firebase/firbase_messge.dart'; import '../firebase/notification_service.dart'; import '../functions/audio_record1.dart'; import '../functions/crud.dart'; import '../functions/launch.dart'; import '../functions/package_info.dart'; import '../functions/secure_storage.dart'; import '../payment/payment_controller.dart'; import '../rate/rate_conroller.dart'; import 'decode_polyline_isolate.dart'; import 'deep_link_controller.dart'; import 'device_performance.dart'; import 'device_tier.dart'; import 'vip_waitting_page.dart'; enum RideState { noRide, // لا يوجد رحلة جارية، عرض واجهة البحث cancelled, // تم إلغاء الرحلة preCheckReview, // يوجد رحلة منتهية، تحقق من التقييم searching, // جاري البحث عن كابتن driverApplied, // تم قبول الطلب driverArrived, // وصل السائق inProgress, // الرحلة بدأت بالفعل finished, // انتهت الرحلة (سيتم تحويلها إلى preCheckReview) } class MapPassengerController extends GetxController { bool isLoading = true; TextEditingController placeDestinationController = TextEditingController(); TextEditingController increasFeeFromPassenger = TextEditingController(); TextEditingController placeStartController = TextEditingController(); TextEditingController wayPoint0Controller = TextEditingController(); TextEditingController wayPoint1Controller = TextEditingController(); TextEditingController wayPoint2Controller = TextEditingController(); TextEditingController wayPoint3Controller = TextEditingController(); TextEditingController wayPoint4Controller = TextEditingController(); TextEditingController sosPhonePassengerProfile = TextEditingController(); TextEditingController whatsAppLocationText = TextEditingController(); TextEditingController messageToDriver = TextEditingController(); final sosFormKey = GlobalKey(); final promoFormKey = GlobalKey(); final messagesFormKey = GlobalKey(); final increaseFeeFormKey = GlobalKey(); List data = []; List bounds = []; List placesStart = []; List driversToken = []; LatLng previousLocationOfDrivers = const LatLng(0, 0); double angleDegrees = 0; LatLng currentLocationOfDrivers = const LatLng(0, 0); List allTextEditingPlaces = []; List placesDestination = []; List wayPoint0 = []; List wayPoint1 = []; List wayPoint2 = []; List wayPoint3 = []; List wayPoint4 = []; final firebaseMessagesController = Get.isRegistered() ? Get.find() : Get.put(FirebaseMessagesController()); List> placeListResponseAll = []; List placeListResponse = [ formSearchPlaces(0), formSearchPlaces(1), formSearchPlaces(2), formSearchPlaces(3), ]; LatLngBounds? boundsdata; List markers = []; List polyLines = []; late LatLng passengerLocation = const LatLng(32, 34); late LatLng newMyLocation = const LatLng(32.115295, 36.064773); late LatLng newStartPointLocation = const LatLng(32.115295, 36.064773); late LatLng newPointLocation0 = const LatLng(32.115295, 36.064773); late LatLng newPointLocation1 = const LatLng(32.115295, 36.064773); late LatLng newPointLocation2 = const LatLng(32.115295, 36.064773); late LatLng newPointLocation3 = const LatLng(32.115295, 36.064773); late LatLng newPointLocation4 = const LatLng(32.115295, 36.064773); late LatLng myDestination; List polylineCoordinates = []; List polylineCoordinates0 = []; List polylineCoordinates1 = []; List polylineCoordinates2 = []; List polylineCoordinates3 = []; List polylineCoordinates4 = []; List> polylineCoordinatesPointsAll = []; List carsLocationByPassenger = []; List driverCarsLocationToPassengerAfterApplied = []; BitmapDescriptor markerIcon = BitmapDescriptor.defaultMarker; BitmapDescriptor tripIcon = BitmapDescriptor.defaultMarker; BitmapDescriptor startIcon = BitmapDescriptor.defaultMarker; BitmapDescriptor endIcon = BitmapDescriptor.defaultMarker; BitmapDescriptor carIcon = BitmapDescriptor.defaultMarker; BitmapDescriptor motoIcon = BitmapDescriptor.defaultMarker; BitmapDescriptor ladyIcon = BitmapDescriptor.defaultMarker; double height = 150; DateTime currentTime = DateTime.now(); final location = Location(); late LocationData currentLocation; double heightMenu = 0; double widthMenu = 0; double heightPickerContainer = 90; double heightPointsPageForRider = 0; double mainBottomMenuMapHeight = Get.height * .2; double wayPointSheetHeight = 0; String stringRemainingTimeToPassenger = ''; String stringRemainingTimeDriverWaitPassenger5Minute = ''; bool isDriverInPassengerWay = false; bool isDriverArrivePassenger = false; bool startLocationFromMap = false; bool isAnotherOreder = false; bool isWhatsAppOrder = false; bool passengerStartLocationFromMap = false; bool workLocationFromMap = false; bool homeLocationFromMap = false; bool isPassengerRideLocationWidget = false; bool startLocationFromMap0 = false; bool startLocationFromMap1 = false; bool startLocationFromMap2 = false; bool startLocationFromMap3 = false; bool startLocationFromMap4 = false; List startLocationFromMapAll = []; double latePrice = 0; double fuelPrice = 0; double heavyPrice = 0; double naturePrice = 0; bool heightMenuBool = false; String statusRide = 'wait'; String statusRideVip = 'wait'; bool statusRideFromStart = false; bool isPickerShown = false; bool isPointsPageForRider = false; bool isBottomSheetShown = false; bool mapType = false; bool mapTrafficON = false; bool isCancelRidePageShown = false; bool isCashConfirmPageShown = false; bool isPaymentMethodPageShown = false; bool isRideFinished = false; bool rideConfirm = false; bool isMarkersShown = false; bool isMainBottomMenuMap = true; Timer? markerReloadingTimer2 = Timer(Duration.zero, () {}); Timer? markerReloadingTimer1 = Timer(Duration.zero, () {}); int durationToPassenger = 0; bool isWayPointSheet = false; bool isWayPointStopsSheet = false; bool isWayPointStopsSheetUtilGetMap = false; double heightBottomSheetShown = 0; double cashConfirmPageShown = 250; late String driverId = ''; late String gender = ''; double widthMapTypeAndTraffic = 50; double paymentPageShown = Get.height * .6; late LatLng southwest; late LatLng northeast; List carLocationsModels = []; var dataCarsLocationByPassenger; var datadriverCarsLocationToPassengerAfterApplied; CarLocation? nearestCar; late Timer? markerReloadingTimer = Timer(Duration.zero, () {}); bool shouldFetch = true; // Flag to determine if fetch should be executed int selectedPassengerCount = 1; double progress = 0; double progressTimerToPassengerFromDriverAfterApplied = 0; double progressTimerDriverWaitPassenger5Minute = 0; int durationTimer = 9; int durationToRide = 0; int remainingTime = 25; int remainingTimeToPassengerFromDriverAfterApplied = 60; int remainingTimeDriverWaitPassenger5Minute = 60; int timeToPassengerFromDriverAfterApplied = 0; Timer? timerToPassengerFromDriverAfterApplied; bool rideTimerBegin = false; double progressTimerRideBegin = 0; int remainingTimeTimerRideBegin = 60; String stringRemainingTimeRideBegin = ''; String hintTextStartPoint = 'Search for your Start point'.tr; String hintTextwayPoint0 = 'Search for waypoint'.tr; String hintTextwayPoint1 = 'Search for waypoint'.tr; String hintTextwayPoint2 = 'Search for waypoint'.tr; String hintTextwayPoint3 = 'Search for waypoint'.tr; String hintTextwayPoint4 = 'Search for waypoint'.tr; String currentLocationString = 'Current Location'.tr; String currentLocationString0 = 'Current Location'.tr; String currentLocationString1 = 'Add Location 1'.tr; String currentLocationString2 = 'Add Location 2'.tr; String currentLocationString3 = 'Add Location 3'.tr; String currentLocationString4 = 'Add Location 4'.tr; String placesCoordinate0 = ''.tr; String placesCoordinate1 = ''.tr; String placesCoordinate2 = ''.tr; String placesCoordinate3 = ''.tr; String placesCoordinate4 = ''.tr; List currentLocationStringAll = []; List hintTextwayPointStringAll = []; var placesCoordinate = []; String hintTextDestinationPoint = 'Select your destination'.tr; late String rideId = 'yet'; bool noCarString = false; bool isCashSelectedBeforeConfirmRide = false; bool isPassengerChosen = false; bool isSearchingWindow = false; bool currentLocationToFormPlaces = false; bool currentLocationToFormPlaces0 = false; bool currentLocationToFormPlaces1 = false; bool currentLocationToFormPlaces2 = false; bool currentLocationToFormPlaces3 = false; bool currentLocationToFormPlaces4 = false; List currentLocationToFormPlacesAll = []; late String driverToken = ''; int carsOrder = 0; int wayPointIndex = 0; late double kazan = 8; String? mapAPIKEY; late double totalME = 0; late double tax = 0; late double totalPassenger = 0; late double totalCostPassenger = 0; late double totalPassengerComfort = 0; late double totalPassengerComfortDiscount = 0; late double totalPassengerElectricDiscount = 0; late double totalPassengerLadyDiscount = 0; late double totalPassengerSpeedDiscount = 0; late double totalPassengerBalashDiscount = 0; late double totalPassengerRaihGaiDiscount = 0; late double totalPassengerScooter = 0; late double totalPassengerVan = 0; late double totalDriver = 0; late double averageDuration = 0; late double costDuration = 0; late double costDistance = 0; late double distance = 0; late double duration = 0; bool _isDriverAppliedLogicExecuted = false; // فلاج لمنع التنفيذ المتكرر bool _isDriverArrivedLogicExecuted = false; bool _isRideBeginLogicExecuted = false; DateTime? _searchStartTime; // لتتبع مدة البحث DateTime? _lastDriversNotifyTime; // لتتبع آخر مرة تم إرسال إشعار للسائقين final int _masterTimerIntervalSeconds = 5; // فاصل زمني ثابت للمؤقت الرئيسي final int _searchTimeoutSeconds = 60; // مهلة البحث قبل عرض خيار زيادة السعر final int _notifyDriversIntervalSeconds = 25; // إرسال إشعار للسائقين كل 25 ثانية // متغير لمنع أي عمليات تحديث أثناء التقييم bool _isRatingScreenOpen = false; // --- إضافة جديدة: متغيرات لإدارة البحث المتوسع --- int _currentSearchPhase = 0; // لتتبع المرحلة الحالية للبحث bool _isFetchingDriverLocation = false; // متغير لمنع تكرار الطلب // قائمة بأنصاف الأقطار (بالأمتار) لكل مرحلة final List _searchRadii = [ 2400, 3000, 3100 ]; // 0 ثانية، 30 ثانية، 60 ثانية // المدة الزمنية لكل مرحلة بحث (بالثواني) final int _searchPhaseDurationSeconds = 30; // المهلة الإجمالية للبحث قبل عرض خيار زيادة السعر final int _totalSearchTimeoutSeconds = 90; // 90 ثانية // --- noRide throttling --- int _noRideSearchCount = 0; final int _noRideMaxTries = 3; // نفذ البحث 6 مرات فقط final int _noRideIntervalSec = 5; // بين كل محاولة وأخرى 5 ثواني DateTime? _noRideNextAllowed; // متى نسمح بالمحاولة التالية bool _noRideSearchCapped = false; // وصلنا للحد وتوقفنا // ============== new design to manage ride state ============== // === 1. حالة الرحلة والمؤقت الرئيسي (Single Source of Truth) === Rx currentRideState = RideState.noRide.obs; Timer? _masterTimer; final int _pollingIntervalSeconds = 4; // فاصل زمني موحد للاستعلام void _startMasterTimer() { // نضمن أن مؤقت واحد فقط يعمل في أي وقت _masterTimer?.cancel(); _masterTimer = Timer.periodic(Duration(seconds: _pollingIntervalSeconds), (_) { _handleRideState(currentRideState.value); }); } void stopAllTimers() { Log.print('🛑 FORCE STOP: Stopping ALL Timers and Streams 🛑'); // 1. إيقاف الماكينة الرئيسية _masterTimer?.cancel(); _masterTimer = null; // 2. إيقاف مؤقتات تتبع السائق timerToPassengerFromDriverAfterApplied?.cancel(); _timer?.cancel(); _uiCountdownTimer?.cancel(); // 3. إيقاف مؤقتات الخريطة markerReloadingTimer?.cancel(); markerReloadingTimer1?.cancel(); markerReloadingTimer2?.cancel(); _animationTimers.forEach((key, timer) => timer.cancel()); _animationTimers.clear(); // 4. إغلاق الستريمز if (!_rideStatusStreamController.isClosed) _rideStatusStreamController.close(); if (!_beginRideStreamController.isClosed) _beginRideStreamController.close(); if (!timerController.isClosed) timerController.close(); // 5. تصفير العدادات لمنع إعادة الدخول isTimerRunning = false; isBeginRideFromDriverRunning = false; _isFetchingDriverLocation = false; update(); } final int _maxNoRideSearch = 3; // عدد المرات القصوى final int _noRideDelaySeconds = 6; // الفاصل الزمني بين كل بحث // // // !!! يرجى استبدال الدالة القديمة بالكامل بهذه الدالة الجديدة !!! // // bool _isStateProcessing = false; Future _handleRideState(RideState state) async { if (_isRatingScreenOpen) { Log.print('⛔ Rating Screen is Open. Skipping Logic.'); stopAllTimers(); // تأكيد إضافي للإيقاف return; } Log.print('Handling state: $state'); int effectivePollingInterval = _pollingIntervalSeconds; switch (state) { case RideState.noRide: final now = DateTime.now(); if (_noRideSearchCount >= _noRideMaxTries) { if (!_noRideSearchCapped) { _noRideSearchCapped = true; Log.print('[noRide] search capped at $_noRideMaxTries attempts'); } break; } if (_noRideNextAllowed != null && now.isBefore(_noRideNextAllowed!)) { break; } _noRideSearchCount++; Log.print('_noRideSearchCount: ${_noRideSearchCount}'); _noRideNextAllowed = now.add(Duration(seconds: _noRideIntervalSec)); String currentCarType = box.read(BoxName.carType) ?? 'yet'; getCarsLocationByPassengerAndReloadMarker(currentCarType, 2000); getNearestDriverByPassengerLocation(); break; case RideState.cancelled: Log.print('[handleRideState] Ride cancelled. Stopping polling.'); stopAllTimers(); effectivePollingInterval = 3600; break; case RideState.preCheckReview: stopAllTimers(); _checkLastRideForReview(); break; case RideState.searching: effectivePollingInterval = 5; // 1. التحقق من حالة الطلب (هل قبله أحد؟) try { String statusFromServer = await getRideStatus(rideId); if (statusFromServer == 'Apply' || statusFromServer == 'Applied') { await processRideAcceptance(); break; } } catch (e) { Log.print('Error polling getRideStatus: $e'); } final now = DateTime.now(); final int elapsedSeconds = now.difference(_searchStartTime!).inSeconds; // انتهاء وقت البحث الكلي if (elapsedSeconds > _totalSearchTimeoutSeconds) { stopAllTimers(); currentRideState.value = RideState.noRide; isSearchingWindow = false; update(); _showIncreaseFeeDialog(); break; } // 2. إدارة مراحل البحث (توسيع النطاق) // السيناريو الجديد: لا نقوم بالقصف العشوائي، نرسل بناء على المرحلة أو مرور وقت كافٍ لدخول سائقين جدد int targetPhase = (elapsedSeconds / _searchPhaseDurationSeconds).floor(); if (targetPhase >= _searchRadii.length) { targetPhase = _searchRadii.length - 1; } // هل تغيرت المرحلة (توسع النطاق)؟ أو هل مر 10 ثواني منذ آخر محاولة إرسال؟ // هذا يمنع إرسال الإشعار في كل دورة (كل 5 ثواني) ويقلل الازعاج bool isNewPhase = targetPhase > _currentSearchPhase; bool timeToScanForNewDrivers = (elapsedSeconds % 15 == 0); // كل 15 ثانية نفحص الدخول الجديد if (isNewPhase || timeToScanForNewDrivers || elapsedSeconds < 5) { _currentSearchPhase = targetPhase; int currentRadius = _searchRadii[_currentSearchPhase]; Log.print( '[Search Logic] Scanning for drivers. Phase: $_currentSearchPhase, Radius: $currentRadius'); // استدعاء دالة الإشعار الذكية _findAndNotifyNearestDrivers(currentRadius); } // تحديث نصوص الواجهة if (elapsedSeconds < 5) { driversStatusForSearchWindow = 'Your order is being prepared'.tr; } else if (elapsedSeconds < 15) { driversStatusForSearchWindow = 'Your order sent to drivers'.tr; } else { driversStatusForSearchWindow = 'The drivers are reviewing your request'.tr; } update(); break; case RideState.driverApplied: effectivePollingInterval = 10; if (!_isDriverAppliedLogicExecuted) { Log.print('[handleRideState] Execution driverApplied logic.'); rideAppliedFromDriver(true); _isDriverAppliedLogicExecuted = true; } try { String statusFromServer = await getRideStatus(rideId); if (statusFromServer == 'Arrived') { currentRideState.value = RideState.driverArrived; break; } else if (statusFromServer == 'Begin' || statusFromServer == 'inProgress') { processRideBegin(); break; } } catch (e) { Log.print('Error polling for Arrived/Begin status: $e'); } getDriverCarsLocationToPassengerAfterApplied(); break; case RideState.driverArrived: if (!_isDriverArrivedLogicExecuted) { _isDriverArrivedLogicExecuted = true; startTimerDriverWaitPassenger5Minute(); driverArrivePassengerDialoge(); } effectivePollingInterval = 8; break; case RideState.inProgress: effectivePollingInterval = 6; try { String statusFromServer = await getRideStatus(rideId); // !!! هنا التغيير الجذري !!! if (statusFromServer == 'Finished' || statusFromServer == 'finished') { Log.print( '🏁 DETECTED FINISHED: Killing processes and forcing Review.'); // 1. قتل العمليات فوراً stopAllTimers(); // 2. تغيير الحالة الداخلية لمنع أي كود آخر من العمل currentRideState.value = RideState.preCheckReview; // 3. تنظيف الواجهة tripFinishedFromDriver(); // 4. استدعاء شاشة التقييم فوراً _checkLastRideForReview(); return; // خروج نهائي من الدالة لمنع أي كود بالأسفل من التنفيذ } } catch (e) { Log.print('Error polling status: $e'); } // بقية كود التتبع العادي (لن يتم الوصول إليه إذا انتهت الرحلة) if (!_isRideBeginLogicExecuted) { _isRideBeginLogicExecuted = true; _executeBeginRideLogic(); } getDriverCarsLocationToPassengerAfterApplied(); break; case RideState.finished: tripFinishedFromDriver(); stopAllTimers(); effectivePollingInterval = 3600; break; } if (_masterTimer?.tick != effectivePollingInterval) { _masterTimer?.cancel(); _masterTimer = Timer.periodic(Duration(seconds: effectivePollingInterval), (_) { _handleRideState(currentRideState.value); }); } } // Future _handleRideState(RideState state) async { // Log.print('Handling state: $state'); // int effectivePollingInterval = _pollingIntervalSeconds; // switch (state) { // // 1. تم فصل "noRide" عن "cancelled" // case RideState.noRide: // final now = DateTime.now(); // if (_noRideSearchCount >= _noRideMaxTries) { // if (!_noRideSearchCapped) { // _noRideSearchCapped = true; // Log.print('[noRide] search capped at $_noRideMaxTries attempts'); // } // break; // } // if (_noRideNextAllowed != null && now.isBefore(_noRideNextAllowed!)) { // break; // } // _noRideSearchCount++; // Log.print('_noRideSearchCount: ${_noRideSearchCount}'); // _noRideNextAllowed = now.add(Duration(seconds: _noRideIntervalSec)); // String currentCarType = box.read(BoxName.carType) ?? 'yet'; // getCarsLocationByPassengerAndReloadMarker(currentCarType, 3000); // getNearestDriverByPassengerLocation(); // break; // // 2. "cancelled" أصبحت حالة منفصلة توقف كل شيء // case RideState.cancelled: // Log.print('[handleRideState] Ride cancelled. Stopping polling.'); // stopAllTimers(); // أوقف المؤقت الرئيسي // effectivePollingInterval = 3600; // إيقاف فعلي للمؤقت // break; // case RideState.preCheckReview: // stopAllTimers(); // _checkLastRideForReview(); // break; // case RideState.searching: // // ... (منطق هذا الكيس سيبقى كما هو تماماً - لا تغيير هنا) // effectivePollingInterval = 3; // try { // String statusFromServer = await getRideStatus(rideId); // if (statusFromServer == 'Apply' || statusFromServer == 'Applied') { // await processRideAcceptance(); // break; // } // } catch (e) { // Log.print('Error polling getRideStatus: $e'); // } // final now = DateTime.now(); // final int elapsedSeconds = now.difference(_searchStartTime!).inSeconds; // if (elapsedSeconds > _totalSearchTimeoutSeconds) { // stopAllTimers(); // currentRideState.value = RideState.noRide; // isSearchingWindow = false; // update(); // _showIncreaseFeeDialog(); // break; // } // int targetPhase = // (elapsedSeconds / _searchPhaseDurationSeconds).floor(); // if (targetPhase >= _searchRadii.length) { // targetPhase = _searchRadii.length - 1; // } // bool needsNewSearch = false; // if (targetPhase > _currentSearchPhase) { // _currentSearchPhase = targetPhase; // needsNewSearch = true; // Log.print( // '[Search] Expanding to Phase $_currentSearchPhase (Radius: ${_searchRadii[_currentSearchPhase]}m)'); // } else if (elapsedSeconds < effectivePollingInterval) { // needsNewSearch = true; // Log.print('[Search] Starting Phase 0 (Radius: ${_searchRadii[0]}m)'); // } // // if (needsNewSearch) { // int currentRadius = _searchRadii[_currentSearchPhase]; // // _findAndNotifyNearestDrivers(currentRadius); // // } // // (3) [!! التعديل الجوهري !!] // // احذف 'if (needsNewSearch)' وقم بالاستدعاء مباشرة // // هذا سيضمن أنه في كل دورة (كل 4 ثوانٍ)، يتم إعادة جلب السائقين // Log.print( // '[Search Polling] Finding new drivers in Phase $_currentSearchPhase (Radius: ${currentRadius}m)'); // _findAndNotifyNearestDrivers(currentRadius); // if (elapsedSeconds < 5) { // driversStatusForSearchWindow = 'Your order is being prepared'.tr; // } else if (elapsedSeconds < 15) { // driversStatusForSearchWindow = 'Your order sent to drivers'.tr; // } else { // driversStatusForSearchWindow = // 'The drivers are reviewing your request'.tr; // } // update(); // break; // // ... // case RideState.driverApplied: // effectivePollingInterval = 10; // فاصل زمني مناسب // if (!_isDriverAppliedLogicExecuted) { // Log.print('[handleRideState] تنفيذ منطق "driverApplied" لأول مرة.'); // rideAppliedFromDriver(true); // هذا يشغل عداد وصول السائق // _isDriverAppliedLogicExecuted = true; // } // // [!! إضافة مهمة !!] // // استمر في التحقق من حالة الرحلة (Status) // try { // String statusFromServer = await getRideStatus(rideId); // if (statusFromServer == 'Arrived') { // Log.print('[Polling] اكتشف "Arrived". تغيير الحالة.'); // currentRideState.value = RideState.driverArrived; // break; // اخرج (سيتم تفعيل case driverArrived في الدورة القادمة) // } else if (statusFromServer == 'Begin' || // statusFromServer == 'inProgress') { // Log.print('[Polling] اكتشف "Begin" (تجاوز حالة الوصول).'); // // استدعاء حارس البوابة الآمن // processRideBegin(); // هذه الدالة ستغير الحالة إلى inProgress // break; // } // } catch (e) { // Log.print('Error polling for Arrived/Begin status: $e'); // } // // [!! نهاية الإضافة !!] // getDriverCarsLocationToPassengerAfterApplied(); // استمر بجلب الموقع أيضاً // break; // // ... // case RideState.driverArrived: // if (!_isDriverArrivedLogicExecuted) { // _isDriverArrivedLogicExecuted = true; // Log.print( // '[handleRideState] اكتشف "driverArrived". بدء عداد 5 دقائق.'); // startTimerDriverWaitPassenger5Minute(); // driverArrivePassengerDialoge(); // } // effectivePollingInterval = 8; // يبقى يعمل لاكتشاف "inProgress" // break; // case RideState.inProgress: // effectivePollingInterval = 11; // // 3. إضافة "بحث دوري" (Polling) لاكتشاف إنهاء الرحلة // try { // String statusFromServer = await getRideStatus(rideId); // if (statusFromServer == 'Finished' || // statusFromServer == 'finished') { // if (currentRideState.value == RideState.inProgress) { // Log.print('[Polling] اكتشف "Finished". تغيير الحالة.'); // currentRideState.value = RideState.finished; // غيّر الحالة // break; // اخرج (سيتم تفعيل case finished في الدورة القادمة) // } // } // } catch (e) { // Log.print('Error polling for Finished status: $e'); // } // // --- نهاية الإضافة --- // if (!_isRideBeginLogicExecuted) { // _isRideBeginLogicExecuted = true; // _executeBeginRideLogic(); // } // getDriverCarsLocationToPassengerAfterApplied(); // استمر في تتبع الموقع // break; // // 4. "finished" أصبحت حالة نهائية آمنة // case RideState.finished: // // إشعار FCM (الذي يملك بيانات السعر) هو المسؤول عن الانتقال للتقييم // // هذه الحالة هي مجرد "نقطة توقف" للمؤقت. // Log.print('[handleRideState] Ride is Finished. Stopping all activity.'); // // نستدعي هذه لضمان تصفير الواجهة، حتى لو فاز البحث الدوري // tripFinishedFromDriver(); // (سنقوم بتعديل هذه الدالة في الخطوة 3) // stopAllTimers(); // effectivePollingInterval = 3600; // إيقاف فعلي // break; // } // if (_masterTimer?.tick != effectivePollingInterval) { // _masterTimer?.cancel(); // _masterTimer = // Timer.periodic(Duration(seconds: effectivePollingInterval), (_) { // _handleRideState(currentRideState.value); // }); // } // } // // === 4. المنطق الجديد: فحص الرحلة الأخيرة للتقييم === Future _checkInitialRideStatus() async { // 1. جلب الحالة من السيرفر (باستخدام getRideStatusFromStartApp) await getRideStatusFromStartApp(); String _status = rideStatusFromStartApp['data']['status']; // Log.print('rideStatusFromStartApp: ${rideStatusFromStartApp}'); // Log.print('_status: ${_status}'); if (_status == 'waiting' || _status == 'Apply' || _status == 'Begin') { // رحلة جارية rideId = rideStatusFromStartApp['data']['rideId'].toString(); currentRideState.value = _status == 'waiting' ? RideState.searching : _status == 'Apply' ? RideState.driverApplied : _status == 'Begin' ? RideState.inProgress : _status == 'Cancel' ? RideState.cancelled : RideState.noRide; } else if (_status == 'Finished') { // رحلة منتهية/ملغاة if (rideStatusFromStartApp['data']['needsReview'] == 1) { currentRideState.value = RideState.preCheckReview; } else { currentRideState.value = RideState.noRide; } } else { currentRideState.value = RideState.noRide; } // بدء المعالجة الفورية _handleRideState(currentRideState.value); } Future _checkLastRideForReview() async { Log.print('⭐ FORCE OPEN RATING PAGE (Get.to mode)'); // جلب البيانات await getRideStatusFromStartApp(); if (rideStatusFromStartApp['data'] == null) { currentRideState.value = RideState.noRide; _startMasterTimer(); return; } String needsReview = rideStatusFromStartApp['data']['needsReview'].toString(); if (needsReview == '1') { _isRatingScreenOpen = true; // 1. تجهيز البيانات (Arguments) var args = { 'driverId': rideStatusFromStartApp['data']['driver_id'].toString(), 'rideId': rideStatusFromStartApp['data']['rideId'].toString(), 'driverName': rideStatusFromStartApp['data']['driverName'], 'price': rideStatusFromStartApp['data']['price'], }; // 2. استخدام Get.to مع await (هذا هو الحل الجذري) // الكود سيتوقف هنا ولن يكمل التنفيذ حتى يتم إغلاق صفحة التقييم await Get.to( () => RatingDriverBottomSheet(), arguments: args, // تمرير البيانات بالطريقة التي تريدها preventDuplicates: true, // لمنع فتح الصفحة مرتين popGesture: false, // لمنع السحب للرجوع (في iOS) ); // 3. هذا الكود لن يتنفذ إلا بعد أن يضغط المستخدم "تم" في التقييم ويغلق الصفحة Log.print('✅ Rating Page Closed. Resetting App.'); _isRatingScreenOpen = false; restCounter(); currentRideState.value = RideState.noRide; _startMasterTimer(); // إعادة تشغيل البحث الآن فقط } else { currentRideState.value = RideState.noRide; _startMasterTimer(); } } // [داخل MapPassengerController] // (افترض وجود هذه الدالة لديك بالفعل) // === 5. دوال التغيير في الحالة التي تستدعى من واجهة المستخدم === // void startSearchingForDriver() { // confirmRideForAllDriverAvailable(); // currentRideState.value = RideState.searching; // _startMasterTimer(); // } /// هذه هي الدالة التي يتم استدعاؤها من الواجهة عند ضغط المستخدم على زر تأكيد الطلب /// هذه هي الدالة التي يتم استدعاؤها من الواجهة عند ضغط المستخدم على زر تأكيد الطلب void startSearchingForDriver() async { isSearchingWindow = true; currentRideState.value = RideState.searching; update(); // ============================================================ // 1. الحل الجذري: إجبار التطبيق على جلب سائقي الفئة المختارة فقط الآن // ============================================================ String selectedCarType = box.read(BoxName.carType) ?? 'Speed'; // تفريغ القائمة القديمة لمنع الخلط dataCarsLocationByPassenger = null; // بحث جديد وحصري بناءً على النوع المختار (Lady, VIP, etc) // نستخدم نصف قطر صغير (2000 متر) للبحث عن الأقرب في البداية bool driversFound = await getCarsLocationByPassengerAndReloadMarker(selectedCarType, 2400); Log.print('driversFound: ${driversFound}'); // التحقق: هل وجدنا سائقين من الفئة المطلوبة؟ if (!driversFound || dataCarsLocationByPassenger == null || dataCarsLocationByPassenger == 'failure' || dataCarsLocationByPassenger['message'] == null || (dataCarsLocationByPassenger['message'] as List).isEmpty) { // إذا لم نجد، نغلق النافذة ونظهر رسالة خطأ، ولا نرسل الطلب للسيرفر isSearchingWindow = false; currentRideState.value = RideState.noRide; update(); Get.snackbar("نعتذر".tr, "لا يوجد سائقين من فئة $selectedCarType متاحين حالياً في منطقتك".tr, backgroundColor: AppColor.redColor, colorText: Colors.white); return; // توقف هنا } // ============================================================ // 2. الآن القائمة dataCarsLocationByPassenger نظيفة وتحتوي فقط على الفئة الصحيحة // يمكننا متابعة إنشاء الرحلة بأمان // ============================================================ bool rideCreated = await postRideDetailsToServer(); if (!rideCreated) { isSearchingWindow = false; update(); return; } await _addRideToWaitingTable(); Log.print( '[startSearchingForDriver] Starting fresh search sequence for $selectedCarType.'); // تصفير القائمة هنا ضروري لأنها رحلة جديدة notifiedDrivers.clear(); _searchStartTime = DateTime.now(); _lastDriversNotifyTime = null; _currentSearchPhase = 0; _isDriverAppliedLogicExecuted = false; _isDriverArrivedLogicExecuted = false; _isRideBeginLogicExecuted = false; // تنفيذ إشعار السائقين (الذين جلبناهم للتو في الخطوة 1) currentRideState.value = RideState.searching; isSearchingWindow = true; await notifyAvailableDrivers(); // أو دالة الإشعار الخاصة بك update(); _startMasterTimer(); } // void startSearchingForDriver() async { // isSearchingWindow = true; // update(); // bool rideCreated = await postRideDetailsToServer(); // if (!rideCreated) { // isSearchingWindow = false; // update(); // return; // } // await _addRideToWaitingTable(); // Log.print('[startSearchingForDriver] Starting fresh search sequence.'); // // تصفير القائمة هنا ضروري لأنها رحلة جديدة // notifiedDrivers.clear(); // _searchStartTime = DateTime.now(); // _lastDriversNotifyTime = null; // _currentSearchPhase = 0; // _isDriverAppliedLogicExecuted = false; // _isDriverArrivedLogicExecuted = false; // _isRideBeginLogicExecuted = false; // // تنفيذ البحث الأولي فوراً // await _findAndNotifyNearestDrivers(_searchRadii[0]); // currentRideState.value = RideState.searching; // isSearchingWindow = true; // update(); // _startMasterTimer(); // } /// دالة جديدة للبحث عن السائقين وإرسال الإشعارات لهم // تم التعديل: الآن تقبل نصف القطر (radius) /// [!! إصلاح خطأ البيلود !!] /// تم التعديل: العودة إلى إرسال إشعارات فردية (لكل سائق) /// لإرسال "البيلود" الصحيح الذي يتوقعه تطبيق السائق Future _findAndNotifyNearestDrivers(int radius) async { Log.print('[Notify Logic] Finding drivers within $radius meters...'); // 1. جلب السائقين وتحديث الماركر // ملاحظة: تأكد أن هذه الدالة تعيد true/false لتدل على النجاح await getCarsLocationByPassengerAndReloadMarker( box.read(BoxName.carType), radius); // التأكد من صحة البيانات if (dataCarsLocationByPassenger == null || dataCarsLocationByPassenger == 'failure' || dataCarsLocationByPassenger['message'] == null) { Log.print('[Notify Logic] No drivers found or API failure.'); return; } int newDriversNotified = 0; var driversList = dataCarsLocationByPassenger['message']; if (driversList is! List) { Log.print('[Notify Logic] Drivers data is not a list.'); return; } // 2. المرور على كل سائق for (var driverData in driversList) { // حماية من البيانات الناقصة if (driverData['driver_id'] == null || driverData['token'] == null) { continue; } String driverId = driverData['driver_id'].toString(); String driverToken = driverData['token'].toString(); // تجاهل التوكن الفارغ أو غير الصالح if (driverToken.isEmpty || driverToken == 'null') continue; // 3. التحقق من القائمة المرجعية (المنع الصارم للتكرار) if (!notifiedDrivers.contains(driverId)) { // إضافة السائق للقائمة فوراً لمنع تكرار الإرسال في الدورات القادمة notifiedDrivers.add(driverId); newDriversNotified++; // 4. بناء البيلود وإرسال الإشعار try { final body = constructNotificationBody(driverData); Log.print('[Notify Logic] Sending New Order to Driver ID: $driverId'); NotificationService.sendNotification( target: driverToken, title: 'Order', body: endNameAddress, // عنوان الوجهة كنص مختصر isTopic: false, tone: 'tone1', category: 'Order', driverList: body); } catch (e) { Log.print('[Notify Logic] Error sending to driver $driverId: $e'); // في حال فشل الإرسال، هل تريد حذفه من القائمة ليحاول مرة أخرى؟ // يفضل عدم الحذف لتجنب الإزعاج، إلا إذا كان خطأ شبكة مؤقت. } } else { // Log.print('[Notify Logic] Driver $driverId already notified. Skipping.'); } } Log.print( '[Notify Logic] Cycle finished. Sent to $newDriversNotified NEW drivers.'); } /// دالة لإظهار النافذة المنبثقة لزيادة السعر void _showIncreaseFeeDialog() { Get.dialog( CupertinoAlertDialog( title: Text("No drivers accepted your request yet".tr), content: Text( "Increasing the fare might attract more drivers. Would you like to increase the price?" .tr), actions: [ CupertinoDialogAction( child: Text("Cancel Ride".tr, style: const TextStyle(color: AppColor.redColor)), onPressed: () { Get.back(); changeCancelRidePageShow(); // cancelRide(); // دالة إلغاء الرحلة }, ), CupertinoDialogAction( child: Text("Increase Fare".tr, style: const TextStyle(color: AppColor.greenColor)), onPressed: () { Get.back(); // هنا يمكنك عرض نافذة أخرى لإدخال السعر الجديد // وبعدها استدعاء الدالة التالية // كمثال، سنزيد السعر بنسبة 10% double newPrice = totalPassenger * 1.10; increasePriceAndRestartSearch(newPrice); }, ), ], ), barrierDismissible: false, ); } /// دالة لتحديث السعر وإعادة بدء البحث Future increasePriceAndRestartSearch(double newPrice) async { totalPassenger = newPrice; update(); // await CRUD().post(link: AppLink.updateRides, payload: { // "id": rideId, // "price": newPrice.toStringAsFixed(2), // }); CRUD().post(link: "${AppLink.server}/ride/rides/update.php", payload: { "id": rideId, "price": newPrice.toStringAsFixed(2), }); // تصفير القائمة لأن السعر تغير، ويجب إبلاغ الجميع (حتى من وصله الإشعار سابقاً) Log.print( '[increasePrice] Price changed. Clearing notified list to resend.'); notifiedDrivers.clear(); _searchStartTime = DateTime.now(); _currentSearchPhase = 0; isSearchingWindow = true; update(); _startMasterTimer(); } /// (دالة جديدة موحدة) /// هذه هي الدالة الوحيدة المسؤولة عن بدء عملية قبول الرحلة. /// يتم استدعاؤها إما من إشعار Firebase أو من البحث الدوري (Polling). /// هي تحتوي على "حارس البوابة" لمنع تضارب السباق. /// (دالة موحدة وصارمة) /// تستدعى من FCM أو من Polling عند اكتشاف قبول السائق /// تمنع تضارب السباق وتضمن تنفيذ المنطق مرة واحدة فقط Future processRideAcceptance( {String? driverIdFromFCM, String? rideIdFromFCM}) async { // 1. القفل الصارم: إذا لم نكن في حالة بحث، فهذا يعني أن الأمر قضي if (currentRideState.value != RideState.searching) { Log.print( '[processRideAcceptance] ⛔ Blocked: State is already ${currentRideState.value}. Ignoring request.'); return; } Log.print( '[processRideAcceptance] ✅ Winner! Driver Accepted. Locking State.'); // 2. تغيير الحالة فوراً لمنع أي تداخل آخر (Stop the World) currentRideState.value = RideState.driverApplied; // 3. إيقاف مؤقتات البحث فوراً _masterTimer?.cancel(); // 4. تحديث البيانات القادمة من الإشعار (إن وجدت) if (driverIdFromFCM != null) driverId = driverIdFromFCM; if (rideIdFromFCM != null) rideId = rideIdFromFCM; // 5. تحديث الواجهة فوراً لإخفاء نافذة البحث statusRide = 'Apply'; isSearchingWindow = false; update(); // 6. تشغيل المنطق الرئيسي (جلب بيانات، موقع، رسم مسار، وحساب وقت) await rideAppliedFromDriver(true); // 7. إظهار إشعار محلي if (Get.isRegistered()) { Get.find().showNotification( 'Accepted Ride'.tr, 'Driver Accepted the Ride for You'.tr, 'ding'); } // 8. إعادة تشغيل الماكينة الرئيسية لمراقبة حالة "الوصول" و "البدء" _startMasterTimer(); } Future driverArrivePassengerDialoge() { return Get.defaultDialog( barrierDismissible: false, title: 'Hi ,I Arrive your site'.tr, titleStyle: AppStyle.title, middleText: 'Please go to Car Driver'.tr, middleTextStyle: AppStyle.title, confirm: MyElevatedButton( title: 'Ok I will go now.'.tr, onPressed: () { NotificationService.sendNotification( target: driverToken.toString(), title: 'Hi ,I will go now'.tr, body: 'I will go now'.tr, isTopic: false, // Important: this is a token tone: 'ding', driverList: [], category: 'Hi ,I will go now', ); Get.back(); remainingTime = 0; update(); })); } /// (دالة خاصة جديدة) /// تحتوي على كل المنطق الفعلي لبدء الرحلة. void _executeBeginRideLogic() { Log.print('[executeBeginRideLogic] تنفيذ منطق بدء الرحلة...'); // 1. تصفير كل عدادات ما قبل الرحلة timeToPassengerFromDriverAfterApplied = 0; remainingTime = 0; remainingTimeToPassengerFromDriverAfterApplied = 0; remainingTimeDriverWaitPassenger5Minute = 0; // 2. تحديث الحالة والواجهة rideTimerBegin = true; statusRide = 'Begin'; isDriverInPassengerWay = false; isDriverArrivePassenger = false; // لإخفاء واجهة "السائق وصل" // 3. (من كود الإشعار الخاص بك) box.write(BoxName.passengerWalletTotal, '0'); update(); // تحديث الواجهة قبل بدء المؤقتات // 4. بدء مؤقتات الرحلة الفعلية rideIsBeginPassengerTimer(); // مؤقت عداد مدة الرحلة // runWhenRideIsBegin(); // مؤقت تتبع موقع السائق أثناء الرحلة // 5. إشعار الراكب (من كود الإشعار الخاص بك) NotificationController().showNotification( 'Trip is Begin'.tr, 'The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey' .tr, 'start'); } /// (دالة جديدة موحدة) /// حارس البوابة الآمن لبدء الرحلة. تمنع تضارب السباق. // // // !!! يرجى استبدال الدالة القديمة بالكامل بهذه الدالة الجديدة !!! // // /// (دالة جديدة موحدة) /// حارس البوابة الآمن لبدء الرحلة. تمنع تضارب السباق. void processRideBegin() { // [!! تعديل رقم 3: حل مشكلة "تم الحظر" !!] // اقبل بدء الرحلة إذا كانت الحالة (وصل) أو (قَبِل) // هذا يضمن أنه إذا فاتنا إشعار "الوصول" واستلمنا "البدء" مباشرة، فإنه سيعمل if (currentRideState.value != RideState.driverArrived && currentRideState.value != RideState.driverApplied) { Log.print( '[processRideBegin] تم الحظر: الحالة ليست driverArrived أو driverApplied.'); return; } // تأكد من تغيير الحالة فقط إذا لم تكن كذلك بالفعل if (currentRideState.value != RideState.inProgress) { currentRideState.value = RideState.inProgress; Log.print('[processRideBegin] نجح: تغيير الحالة إلى inProgress.'); } // لا تقم بتشغيل أي منطق هنا // المنطق الفعلي (_executeBeginRideLogic) سيتم استدعاؤه بواسطة // المؤقت الرئيسي (_handleRideState) عند اكتشاف حالة inProgress // هذا يضمن أنه يعمل مرة واحدة فقط وبشكل آمن } late Duration durationToAdd; late DateTime newTime = DateTime.now(); int hours = 0; int minutes = 0; // --- إضافة جديدة: للوصول إلى وحدة التحكم بالروابط --- final DeepLinkController _deepLinkController = Get.isRegistered() ? Get.find() : Get.put(DeepLinkController()); // ------------------------------------------------ void onChangedPassengerCount(int newValue) { selectedPassengerCount = newValue; update(); } void onChangedPassengersChoose() { isPassengerChosen = true; update(); } void getCurrentLocationFormString() async { currentLocationToFormPlaces = true; currentLocationString = 'Waiting for your location'.tr; await getLocation(); currentLocationString = passengerLocation.toString(); newStartPointLocation = passengerLocation; update(); } List coordinatesWithoutEmpty = []; void getMapPointsForAllMethods() async { clearPolyline(); isMarkersShown = false; isWayPointStopsSheetUtilGetMap = false; isWayPointSheet = false; durationToRide = 0; distanceOfDestination = 0; wayPointSheetHeight = 0; remainingTime = 25; haveSteps = true; // Filter out empty value coordinatesWithoutEmpty = placesCoordinate.where((coord) => coord.isNotEmpty).toList(); latestPosition = LatLng( double.parse(coordinatesWithoutEmpty.last.split(',')[0]), double.parse(coordinatesWithoutEmpty.last.split(',')[1])); for (var i = 0; i < coordinatesWithoutEmpty.length; i++) { if ((i + 1) < coordinatesWithoutEmpty.length) { await getMapPoints( coordinatesWithoutEmpty[i].toString(), coordinatesWithoutEmpty[i + 1].toString(), i, ); if (i == 0) { startNameAddress = data[0]['start_address']; } if (i == coordinatesWithoutEmpty.length) { endNameAddress = data[0]['end_address']; } } } // isWayPointStopsSheet = false; if (haveSteps) { String latestWaypoint = placesCoordinate.lastWhere((coord) => coord.isNotEmpty); latestPosition = LatLng( double.parse(latestWaypoint.split(',')[0]), double.parse(latestWaypoint.split(',')[1]), ); } updateCameraForDistanceAfterGetMap(); changeWayPointStopsSheet(); bottomSheet(); showBottomSheet1(); update(); } void convertHintTextStartNewPlaces(int index) { if (placesStart.isEmpty) { hintTextStartPoint = 'Search for your Start point'.tr; update(); } else { var res = placesStart[index]; hintTextStartPoint = res['displayName']?['text'] ?? res['formattedAddress'] ?? 'Unknown Place'; double? lat = res['location']?['latitude']; double? lng = res['location']?['longitude']; if (lat != null && lng != null) { newStartPointLocation = LatLng(lat, lng); } update(); } } void convertHintTextPlaces(int index, var res) { if (placeListResponseAll[index].isEmpty) { placeListResponseAll[index] = res; hintTextwayPointStringAll[index] = 'Search for your Start point'.tr; update(); } else { hintTextwayPointStringAll[index] = res['name']; currentLocationStringAll[index] = res['name']; placesCoordinate[index] = '${res['geometry']['location']['lat']},${res['geometry']['location']['lng']}'; placeListResponseAll[index] = []; allTextEditingPlaces[index].clear(); // double lat = wayPoint0[index]['geometry']['location']['lat']; // double lng = wayPoint0[index]['geometry']['location']['lng']; // newPointLocation0 = LatLng(lat, lng); update(); Get.back(); } } increaseFeeByPassengerAndReOrder() async { if (increaseFeeFormKey.currentState!.validate()) { if (double.parse(increasFeeFromPassenger.text) > totalPassenger) { totalPassenger = double.parse(increasFeeFromPassenger.text); Get.back(); if (rideId != 'yet') { Log.print('rideId from increase: $rideId'); notifyAvailableDriversAgain(); await CRUD().post(link: AppLink.updateDriverOrder, payload: { "order_id": rideId.toString(), // Convert to String "status": 'waiting' }); await CRUD().post(link: AppLink.updateRides, payload: { "id": rideId.toString(), // Convert to String "status": 'waiting' }); CRUD().post(link: AppLink.updateWaitingTrip, payload: { "id": rideId.toString(), // Convert to String "status": 'wait' }); CRUD().post( link: "${AppLink.endPoint}/ride/rides/update.php", payload: { "id": rideId.toString(), // Convert to String "status": 'waiting' }); // if (AppLink.endPoint != AppLink.IntaleqSyriaServer) { CRUD().post( link: "${AppLink.endPoint}/ride/notificationCaptain/updateWaitingTrip.php", payload: { "id": rideId.toString(), // Convert to String "status": 'wait' }); } tick = 0; // } await getCarsLocationByPassengerAndReloadMarker( box.read(BoxName.carType), 3000); // confirmRideForAllDriverAvailable(); increaseForSameRideAndDelay(); } } } void convertHintTextPlaces1(int index) { if (wayPoint1.isEmpty) { hintTextwayPoint1 = 'Search for your Start point'.tr; update(); } else { hintTextwayPoint1 = wayPoint1[index]['name']; currentLocationString1 = wayPoint1[index]['name']; double lat = wayPoint1[index]['geometry']['location']['lat']; double lng = wayPoint1[index]['geometry']['location']['lng']; newPointLocation1 = LatLng(lat, lng); update(); } } void convertHintTextPlaces2(int index) { if (wayPoint1.isEmpty) { hintTextwayPoint2 = 'Search for your Start point'.tr; update(); } else { hintTextwayPoint2 = wayPoint2[index]['name']; currentLocationString2 = wayPoint1[index]['name']; double lat = wayPoint2[index]['geometry']['location']['lat']; double lng = wayPoint2[index]['geometry']['location']['lng']; newPointLocation2 = LatLng(lat, lng); update(); } } void convertHintTextPlaces3(int index) { if (wayPoint1.isEmpty) { hintTextwayPoint3 = 'Search for your Start point'.tr; update(); } else { hintTextwayPoint3 = wayPoint3[index]['name']; currentLocationString3 = wayPoint1[index]['name']; double lat = wayPoint3[index]['geometry']['location']['lat']; double lng = wayPoint3[index]['geometry']['location']['lng']; newPointLocation3 = LatLng(lat, lng); update(); } } void convertHintTextPlaces4(int index) { if (wayPoint1.isEmpty) { hintTextwayPoint4 = 'Search for your Start point'.tr; update(); } else { hintTextwayPoint4 = wayPoint4[index]['name']; currentLocationString4 = wayPoint1[index]['name']; double lat = wayPoint4[index]['geometry']['location']['lat']; double lng = wayPoint4[index]['geometry']['location']['lng']; newPointLocation4 = LatLng(lat, lng); update(); } } void convertHintTextDestinationNewPlaces(int index) { if (placesDestination.isEmpty) { hintTextDestinationPoint = 'Search for your destination'.tr; update(); } else { var res = placesDestination[index]; // استخراج الاسم من displayName.text أو بديله hintTextDestinationPoint = res['displayName']?['text'] ?? res['formattedAddress'] ?? 'Unknown Place'; // استخراج الإحداثيات double? lat = res['location']?['latitude']; double? lng = res['location']?['longitude']; if (lat != null && lng != null) { newMyLocation = LatLng(lat, lng); } update(); } } void convertHintTextDestinationNewPlacesFromRecent( List recentLocations, int index) { hintTextDestinationPoint = recentLocations[index]['name']; double lat = recentLocations[index]['latitude']; double lng = recentLocations[index]['longitude']; newMyLocation = LatLng(lat, lng); update(); } // final mainBottomMenuMap = GlobalKey(); void changeBottomSheetShown() { isBottomSheetShown = !isBottomSheetShown; heightBottomSheetShown = isBottomSheetShown == true ? 250 : 0; update(); } void changeCashConfirmPageShown() { isCashConfirmPageShown = !isCashConfirmPageShown; isCashSelectedBeforeConfirmRide = true; cashConfirmPageShown = isCashConfirmPageShown == true ? 250 : 0; // to get or sure picker point for origin //todo // isPickerShown = true; // clickPointPosition(); update(); } void changePaymentMethodPageShown() { isPaymentMethodPageShown = !isPaymentMethodPageShown; paymentPageShown = isPaymentMethodPageShown == true ? Get.height * .6 : 0; update(); } void changeMapType() { mapType = !mapType; // heightButtomSheetShown = isButtomSheetShown == true ? 240 : 0; update(); } void changeMapTraffic() { mapTrafficON = !mapTrafficON; update(); } void changeisAnotherOreder(bool val) { isAnotherOreder = val; update(); } void changeIsWhatsAppOrder(bool val) { isWhatsAppOrder = val; update(); } void sendSMS(String to) async { // Get the driver's phone number. String driverPhone = (dataCarsLocationByPassenger['message'][carsOrder]['phone'].toString()); // Format the message. String message = 'Hi! This is ${(box.read(BoxName.name).toString().split(' ')[0]).toString()}.\n I am using ${box.read(AppInformation.appName)} to ride with $passengerName as the driver. $passengerName \nis driving a $model\n with license plate $licensePlate.\n I am currently located at $passengerLocation.\n If you need to reach me, please contact the driver directly at\n\n $driverPhone.'; // Launch the URL to send the SMS. launchCommunication('sms', to, message); } String formatSyrianPhone(String phone) { // Remove spaces and + phone = phone.replaceAll(' ', '').replaceAll('+', ''); // If starts with 00963 → remove 00 → 963 if (phone.startsWith('00963')) { phone = phone.replaceFirst('00963', '963'); } // If starts with 0963 (common mistake) → fix it if (phone.startsWith('0963')) { phone = phone.replaceFirst('0963', '963'); } // If starts with 963 (already correct) if (phone.startsWith('963')) { return phone; // nothing to do } // If starts with 09 → remove leading 0 → add 963 if (phone.startsWith('09')) { return '963' + phone.substring(1); // 9xxxxxxxxx } // If starts with 9xxxxxxxxx (no country code) if (phone.startsWith('9') && phone.length == 9) { return '963' + phone; } // Otherwise return raw phone return phone; } void sendWhatsapp(String to) async { // Normalize phone number before sending String formattedPhone = formatSyrianPhone(to); // Message body String message = '${'${'Hi! This is'.tr} ${(box.read(BoxName.name).toString().split(' ')[0]).toString()}.\n${' I am using'.tr}'} ${AppInformation.appName}${' to ride with'.tr} $passengerName${' as the driver.'.tr} $passengerName \n${'is driving a '.tr}$model\n${' with license plate '.tr}$licensePlate.\n${' I am currently located at '.tr} https://www.google.com/maps/place/${passengerLocation.latitude},${passengerLocation.longitude}.\n${' If you need to reach me, please contact the driver directly at'.tr}\n\n $driverPhone.'; // Send WhatsApp message launchCommunication('whatsapp', formattedPhone, message); } void changeCancelRidePageShow() { showCancelRideBottomSheet(); isCancelRidePageShown = !isCancelRidePageShown; // : cancelRide(); update(); } void getDrawerMenu() { heightMenuBool = !heightMenuBool; widthMapTypeAndTraffic = heightMenuBool == true ? 0 : 50; heightMenu = heightMenuBool == true ? 80 : 0; widthMenu = heightMenuBool == true ? 110 : 0; update(); } calcualateDistsanceInMetet(LatLng prev, current) async { double distance2 = Geolocator.distanceBetween( prev.latitude, prev.longitude, current.latitude, current.longitude, ); return distance2; } StreamController _timerStreamController = StreamController(); Stream get timerStream => _timerStreamController.stream; bool isTimerFromDriverToPassengerAfterAppliedRunning = true; bool isTimerRunning = false; // Flag to track if the timer is running int beginRideInterval = 5; // Interval in seconds for getBeginRideFromDriver void startTimerFromDriverToPassengerAfterApplied() { stopTimerFromDriverToPassengerAfterApplied(); if (isTimerRunning) return; isTimerRunning = true; isTimerFromDriverToPassengerAfterAppliedRunning = true; int secondsElapsed = 0; // استدعاء فوري لأول مرة getDriverCarsLocationToPassengerAfterApplied(); Timer.periodic(const Duration(seconds: 1), (timer) { // --- التغيير الجوهري هنا --- // شرط الإيقاف: نتوقف فقط إذا انتهت الرحلة أو ألغيت، أو تم إيقاف التايمر يدوياً // لم نعد نعتمد على تجاوز الوقت المقدر (timeToPassenger) كشرط للإيقاف bool isRideActive = (statusRide == 'Apply' || statusRide == 'Arrived' || statusRide == 'Begin' || currentRideState.value == RideState.driverApplied || currentRideState.value == RideState.cancelled || currentRideState.value == RideState.preCheckReview || currentRideState.value == RideState.searching || currentRideState.value == RideState.noRide || currentRideState.value == RideState.driverArrived || currentRideState.value == RideState.inProgress); if (!isRideActive || !isTimerFromDriverToPassengerAfterAppliedRunning) { timer.cancel(); isTimerRunning = false; if (!_timerStreamController.isClosed) { _timerStreamController.close(); } return; } secondsElapsed++; if (!_timerStreamController.isClosed) { _timerStreamController.add(secondsElapsed); } // تحديث الواجهة للوقت المتبقي (شكلياً فقط للراكب) // حتى لو أصبح الوقت سالباً (تأخر السائق)، سنظهره كـ 00:00 أو نتركه سالباً remainingTimeToPassengerFromDriverAfterApplied = timeToPassengerFromDriverAfterApplied - secondsElapsed; if (remainingTimeToPassengerFromDriverAfterApplied < 0) { remainingTimeToPassengerFromDriverAfterApplied = 0; } int minutes = (remainingTimeToPassengerFromDriverAfterApplied / 60).floor(); int seconds = remainingTimeToPassengerFromDriverAfterApplied % 60; stringRemainingTimeToPassenger = '$minutes:${seconds.toString().padLeft(2, '0')}'; // جلب موقع السائق كل 4 ثواني (Polling) ما دامت الرحلة نشطة if (secondsElapsed % beginRideInterval == 0) { // 1. تحقق من تغير الحالة من السيرفر (مثل تحولها لـ Begin) getBeginRideFromDriver(); // 2. تحديث موقع الراكب للسائق uploadPassengerLocation(); // 3. جلب موقع السائق وتحديث الخريطة getDriverCarsLocationToPassengerAfterApplied(); } else { update(); } }); } // if (isTimerRunning) return; // Exit if timer is already running // isTimerRunning = true; // Set the flag to true // int secondsElapsed = 0; // while (secondsElapsed <= timeToPassengerFromDriverAfterApplied && // isTimerFromDriverToPassengerAfterAppliedRunning) { // await Future.delayed(const Duration(seconds: 1)); // secondsElapsed++; // progressTimerToPassengerFromDriverAfterApplied = // secondsElapsed / timeToPassengerFromDriverAfterApplied; // remainingTimeToPassengerFromDriverAfterApplied = // timeToPassengerFromDriverAfterApplied - secondsElapsed; // if (remainingTimeToPassengerFromDriverAfterApplied < 59) { // if (rideTimerBegin == false) { // rideTimerBegin = true; // } // } // // Call getBeginRideFromDriver every 4 seconds // if (secondsElapsed % beginRideInterval == 0) { // getBeginRideFromDriver(); // uploadPassengerLocation(); // } // int minutes = // (remainingTimeToPassengerFromDriverAfterApplied / 60).floor(); // int seconds = remainingTimeToPassengerFromDriverAfterApplied % 60; // stringRemainingTimeToPassenger = // '$minutes:${seconds.toString().padLeft(2, '0')}'; // update(); // } // isTimerRunning = false; // Reset the flag when timer completes // } // Remove the getBeginRideFromDriverForDuration function as it's no longer needed // Function to stop the timer void stopTimerFromDriverToPassengerAfterApplied() { isTimerFromDriverToPassengerAfterAppliedRunning = false; update(); } void startTimerDriverWaitPassenger5Minute() async { // 1. [مهم] إيقاف المؤقت السابق (مؤقت تتبع وصول السائق) stopTimerFromDriverToPassengerAfterApplied(); isTimerRunning = false; // (إذا كنت تستخدم فلاج للتحكم بالمؤقت السابق) // 2. تحديث حالة الواجهة فوراً isDriverArrivePassenger = true; isDriverInPassengerWay = false; timeToPassengerFromDriverAfterApplied = 0; update(); Log.print('[startTimerDriverWaitPassenger5Minute] بدأ عداد الـ 5 دقائق.'); // 3. بدء عداد الخمس دقائق (300 ثانية) for (int i = 0; i <= 300; i++) { // 4. [حارس السباق 1] التحقق من الحالة // إذا فاز إشعار FCM (FCM Winner) وتغيرت الحالة، أوقف هذا العداد فوراً. if (currentRideState.value != RideState.driverArrived) { Log.print( '[startTimerDriverWaitPassenger5Minute] إيقاف العد: الحالة تغيرت (FCM فاز).'); break; // اخرج من loop الخمس دقائق } // 5. [البحث الدوري 2] التحقق من السيرفر (كل 6 ثوانٍ) if (i % 6 == 0 && i > 0) { // (نتخطى الثانية صفر) try { var res = await CRUD().get( link: AppLink.getRideStatusBegin, payload: {'ride_id': rideId}); if (res != 'failure') { var decode = jsonDecode(res); if (decode['data']['status'] == 'Begin') { Log.print( '[startTimerDriverWaitPassenger5Minute] اكتشف "Begin" (Polling فاز).'); // 6. استدعاء حارس البوابة الآمن processRideBegin(); break; // اخرج من loop الخمس دقائق } } } catch (e) { Log.print('خطأ أثناء البحث الدوري عن بدء الرحلة: $e'); } } // 7. تحديث واجهة المستخدم (العداد) progressTimerDriverWaitPassenger5Minute = i / 300; remainingTimeDriverWaitPassenger5Minute = 300 - i; int minutes = (remainingTimeDriverWaitPassenger5Minute / 60).floor(); int seconds = remainingTimeDriverWaitPassenger5Minute % 60; stringRemainingTimeDriverWaitPassenger5Minute = '$minutes:${seconds.toString().padLeft(2, '0')}'; update(); // 8. الانتظار ثانية واحدة await Future.delayed(const Duration(seconds: 1)); } Log.print( '[startTimerDriverWaitPassenger5Minute] انتهى (إما بالوقت أو ببدء الرحلة).'); } // Create a StreamController to manage the timer values final timerController = StreamController(); // Start the timer when the ride begins void beginRideTimer() { // Set up the timer to run every second Timer.periodic(const Duration(seconds: 1), (timer) { // Update the timer value and notify listeners timerController.add(timer.tick); update(); }); } // Stop the timer when the ride ends void stopRideTimer() { timerController.close(); update(); } late String arrivalTime = ''; void rideIsBeginPassengerTimer() async { // Calculate arrival time considering current time and duration DateTime now = DateTime.now(); DateTime arrivalTime1 = now.add(Duration(seconds: durationToRide)); arrivalTime = DateFormat('hh:mm').format(arrivalTime1); box.write(BoxName.arrivalTime, arrivalTime); for (int i = 0; i <= durationToRide; i++) { await Future.delayed(const Duration(seconds: 1)); progressTimerRideBegin = i / durationToRide; remainingTimeTimerRideBegin = durationToRide - i; if (i == (durationToRide / 4).round() && (statusRide == 'Begin')) { NotificationController().showNotification("Record Your Trip".tr, "You can call or record audio during this trip.".tr, 'tone1'); } bool sendSOS = false; if (speed > 100 && sendSOS == false) { NotificationController().showNotification( "Warning: Speeding detected!".tr, 'You can call or record audio of this trip'.tr, 'tone1'); Get.defaultDialog( barrierDismissible: false, title: "Warning: Speeding detected!".tr, titleStyle: AppStyle.title, content: Text( "We noticed the speed is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button." .tr, style: AppStyle.title, ), confirm: MyElevatedButton( title: "Share Trip Details".tr, onPressed: () { Get.back(); // Implement sharing trip details logic here String message = "**Emergency SOS from Passenger:**\n"; // Get trip details from GetX or relevant provider String origin = passengerLocation.toString(); String destination = myDestination.toString(); String driverName = passengerName; String driverCarPlate = licensePlate; // Add trip details to the message message += "* ${'Origin'.tr}: $origin\n"; message += "* ${'Destination'.tr}: $destination\n"; message += "* ${'Driver Name'.tr}: $driverName\n"; message += "* ${'Driver Car Plate'.tr}: $driverCarPlate\n\n"; message += "* ${'Driver phone'.tr}:$driverPhone\n\n"; // Add any additional information you want to include (optional) // - Example: current location (using GetX LocationController) message += "${'Current Location'.tr}:https://www.google.com/maps/place/${passengerLocation.latitude},${passengerLocation.longitude} \n"; // Append a call to action message += "Please help! Contact me as soon as possible.".tr; // Launch WhatsApp communication with the constructed message launchCommunication( 'whatsapp', box.read(BoxName.sosPhonePassenger), message); sendSOS = true; }, kolor: AppColor.redColor, ), cancel: MyElevatedButton( title: "Cancel".tr, onPressed: () { Get.back(); }, kolor: AppColor.greenColor, ), ); } int minutes = (remainingTimeTimerRideBegin / 60).floor(); int seconds = remainingTimeTimerRideBegin % 60; stringRemainingTimeRideBegin = '$minutes:${seconds.toString().padLeft(2, '0')}'; update(); } // rideTimerBegin = false; // isRideFinished = true; // update(); } int progressTimerRideBeginVip = 0; int elapsedTimeInSeconds = 0; // Timer starts from 0 String stringElapsedTimeRideBegin = '0:00'; String stringElapsedTimeRideBeginVip = '0:00'; bool rideInProgress = true; // To control when to stop the timer void rideIsBeginPassengerTimerVIP() async { rideInProgress = true; // Start the ride timer bool sendSOS = false; while (rideInProgress) { await Future.delayed(const Duration(seconds: 1)); // Increment elapsed time elapsedTimeInSeconds++; // Update the time display int minutes = (elapsedTimeInSeconds / 60).floor(); int seconds = elapsedTimeInSeconds % 60; stringElapsedTimeRideBeginVip = '$minutes:${seconds.toString().padLeft(2, '0')}'; // Check for speed and SOS conditions if (speed > 100 && !sendSOS) { Get.defaultDialog( barrierDismissible: false, title: "Warning: Speeding detected!".tr, titleStyle: AppStyle.title, content: Text( "We noticed the speed is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button." .tr, style: AppStyle.title, ), confirm: MyElevatedButton( title: "Share Trip Details".tr, onPressed: () { Get.back(); // Implement sharing trip details logic here String message = "**Emergency SOS from Passenger:**\n"; // Get trip details from GetX or relevant provider String origin = passengerLocation.toString(); String destination = myDestination.toString(); String driverName = passengerName; String driverCarPlate = licensePlate; // Add trip details to the message message += "* ${'Origin'.tr}: $origin\n"; message += "* ${'Destination'.tr}: $destination\n"; message += "* ${'Driver Name'.tr}: $driverName\n"; message += "* ${'Driver Car Plate'.tr}: $driverCarPlate\n\n"; message += "* ${'Driver Phone'.tr}: $driverPhone\n\n"; // Add current location message += "${'Current Location'.tr}:https://www.google.com/maps/place/${passengerLocation.latitude},${passengerLocation.longitude} \n"; // Append a call to action message += "Please help! Contact me as soon as possible.".tr; // Launch WhatsApp communication launchCommunication( 'whatsapp', box.read(BoxName.sosPhonePassenger), message); sendSOS = true; }, kolor: AppColor.redColor, ), cancel: MyElevatedButton( title: "Cancel".tr, onPressed: () { Get.back(); }, kolor: AppColor.greenColor, ), ); } // Update the UI update(); } } Future tripFinishedFromDriver() async { Log.print('🧹 Cleaning UI for Finish'); // إغلاق أي ديالوج مفتوح if (Get.isDialogOpen == true) Get.back(); if (Get.isBottomSheetOpen == true) Get.back(); statusRide = 'Finished'; currentRideState.value = RideState.finished; // تثبيت الحالة // إيقاف البحث والعدادات isSearchingWindow = false; rideTimerBegin = false; shouldFetch = false; // إيقاف التايمرات stopAllTimers(); clearPolyline(); clearMarkersExceptStartEnd(); markers.clear(); update(); } StreamController _beginRideStreamController = StreamController.broadcast(); Stream get beginRideStream => _beginRideStreamController.stream; bool isBeginRideFromDriverRunning = false; void getBeginRideFromDriver() { if (isBeginRideFromDriverRunning) return; // Prevent duplicate streams isBeginRideFromDriverRunning = true; Timer.periodic(const Duration(seconds: 2), (timer) async { try { var res = await CRUD().get( link: AppLink.getRideStatusBegin, payload: {'ride_id': rideId}); print(res); print('1002'); if (res != 'failure') { var decode = jsonDecode(res); _beginRideStreamController .add(decode['data']['status']); // Emit the status if (decode['data']['status'] == 'Begin') { // Stop the periodic check timer.cancel(); isBeginRideFromDriverRunning = false; timeToPassengerFromDriverAfterApplied = 0; remainingTime = 0; remainingTimeToPassengerFromDriverAfterApplied = 0; remainingTimeDriverWaitPassenger5Minute = 0; rideTimerBegin = true; statusRide = 'Begin'; isDriverInPassengerWay = false; isDriverArrivePassenger = false; update(); // Trigger additional actions rideIsBeginPassengerTimer(); runWhenRideIsBegin(); NotificationController().showNotification( 'Trip is begin'.tr, 'The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey' .tr, 'ding'); } } } catch (e) { // Handle errors _beginRideStreamController.addError(e); } }); } // Call this method to listen to the stream void listenToBeginRideStream() { beginRideStream.listen((status) { print("Ride status: $status"); // Perform additional actions based on the status }, onError: (error) { print("Error in Begin Ride Stream: $error"); }); } begiVIPTripFromPassenger() async { timeToPassengerFromDriverAfterApplied = 0; remainingTime = 0; isBottomSheetShown = false; remainingTimeToPassengerFromDriverAfterApplied = 0; remainingTimeDriverWaitPassenger5Minute = 0; rideTimerBegin = true; statusRideVip = 'Begin'; isDriverInPassengerWay = false; isDriverArrivePassenger = false; update(); // isCancelRidePageShown = true; rideIsBeginPassengerTimerVIP(); runWhenRideIsBegin(); } Map rideStatusFromStartApp = {}; bool isStartAppHasRide = false; getRideStatusFromStartApp() async { try { var res = await CRUD().get( link: AppLink.getRideStatusFromStartApp, payload: {'passenger_id': box.read(BoxName.passengerID)}); // print(res); Log.print('rideStatusFromStartApp: ${res}'); // print('1070'); if (res == 'failure') { rideStatusFromStartApp = { 'data': {'status': 'NoRide', 'needsReview': false} }; isStartAppHasRide = false; print( "No rides found for the given passenger ID within the last hour."); } rideStatusFromStartApp = jsonDecode(res); if (rideStatusFromStartApp['data']['status'] == 'Begin' || rideStatusFromStartApp['data']['status'] == 'Apply' || rideStatusFromStartApp['data']['status'] == 'Applied') { statusRide = rideStatusFromStartApp['data']['status']; isStartAppHasRide = true; RideState.inProgress; driverId = rideStatusFromStartApp['data']['driver_id']; passengerName = rideStatusFromStartApp['data']['driverName']; driverRate = rideStatusFromStartApp['data']['rateDriver'].toString(); statusRideFromStart = true; update(); Map tripData = box.read(BoxName.tripData) as Map; final String pointsString = tripData['polyline']; List decodedPoints = await compute(decodePolylineIsolate, pointsString); // decodePolyline(response["routes"][0]["overview_polyline"]["points"]); for (int i = 0; i < decodedPoints.length; i++) { polylineCoordinates.add(decodedPoints[i]); } var polyline = Polyline( polylineId: const PolylineId('begin trip'), points: polylineCoordinates, width: 10, color: Colors.blue, ); polyLines.add(polyline); timeToPassengerFromDriverAfterApplied = 0; remainingTime = 0; remainingTimeToPassengerFromDriverAfterApplied = 0; remainingTimeDriverWaitPassenger5Minute = 0; rideTimerBegin = true; isDriverInPassengerWay = false; isDriverArrivePassenger = false; // update(); // isCancelRidePageShown = true; durationToAdd = tripData['distance_m']; rideIsBeginPassengerTimer(); runWhenRideIsBegin(); update(); } } catch (e) { // Handle the error or perform any necessary actions } } void driverArrivePassenger() { timeToPassengerFromDriverAfterApplied = 0; remainingTime = 0; // isCancelRidePageShown = true; update(); rideIsBeginPassengerTimer(); // runWhenRideIsBegin(); } void cancelTimerToPassengerFromDriverAfterApplied() { timerToPassengerFromDriverAfterApplied?.cancel(); } void clearPlacesDestination() { placesDestination = []; hintTextDestinationPoint = 'Search for your destination'.tr; update(); } void clearPlacesStart() { placesStart = []; hintTextStartPoint = 'Search for your Start point'.tr; update(); } void clearPlaces(int index) { placeListResponseAll[index] = []; hintTextwayPointStringAll[index] = 'Search for waypoint'.tr; update(); } void clearPlaces1() { wayPoint1 = []; hintTextwayPoint1 = 'Search for waypoint'.tr; update(); } void clearPlaces2() { wayPoint2 = []; hintTextwayPoint2 = 'Search for waypoint'.tr; update(); } void clearPlaces3() { wayPoint3 = []; hintTextwayPoint3 = 'Search for waypoint'.tr; update(); } void clearPlaces4() { wayPoint4 = []; hintTextwayPoint4 = 'Search for waypoint'.tr; update(); } int selectedReason = -1; String? cancelNote; void selectReason(int index, String note) { selectedReason = index; cancelNote = note; update(); } void getDialog(String title, String? midTitle, VoidCallback onPressed) { final textToSpeechController = Get.find(); Get.defaultDialog( title: title, titleStyle: AppStyle.title, middleTextStyle: AppStyle.title, content: Column( children: [ IconButton( onPressed: () async { await textToSpeechController.speakText(title ?? midTitle!); }, icon: const Icon(Icons.headphones)), Text( midTitle!, style: AppStyle.title, ) ], ), confirm: MyElevatedButton( title: 'Ok'.tr, onPressed: onPressed, kolor: AppColor.greenColor, ), cancel: MyElevatedButton( title: 'Cancel', kolor: AppColor.redColor, onPressed: () { Get.back(); })); } Map? extractCoordinatesFromLink(String link) { try { // Extract the URL part from the link by finding the first occurrence of "http" int urlStartIndex = link.indexOf(RegExp(r'https?://')); if (urlStartIndex == -1) { throw const FormatException('No URL found in the provided link.'); } // Extract the URL and clean it link = link.substring(urlStartIndex).trim(); Uri uri = Uri.parse(link); // Common coordinate query parameters List coordinateParams = ['q', 'cp', 'll']; // Try to extract coordinates from query parameters for (var param in coordinateParams) { String? value = uri.queryParameters[param]; if (value != null && (value.contains(',') || value.contains('~'))) { List coordinates = value.contains(',') ? value.split(',') : value.split('~'); if (coordinates.length == 2) { double? latitude = double.tryParse(coordinates[0].trim()); double? longitude = double.tryParse(coordinates[1].trim()); if (latitude != null && longitude != null) { return { 'latitude': latitude, 'longitude': longitude, }; } } } } // Try to extract coordinates from the path List pathSegments = uri.pathSegments; for (var segment in pathSegments) { if (segment.contains(',')) { List coordinates = segment.split(','); if (coordinates.length == 2) { double? latitude = double.tryParse(coordinates[0].trim()); double? longitude = double.tryParse(coordinates[1].trim()); if (latitude != null && longitude != null) { return { 'latitude': latitude, 'longitude': longitude, }; } } } } } catch (e) { print('Error parsing location link: $e'); } return null; } double latitudeWhatsApp = 0; double longitudeWhatsApp = 0; void handleWhatsAppLink(String link) { Map? coordinates = extractCoordinatesFromLink(link); if (coordinates != null) { latitudeWhatsApp = coordinates['latitude']!; longitudeWhatsApp = coordinates['longitude']!; print( 'Extracted coordinates: Lat: $latitudeWhatsApp, Long: $longitudeWhatsApp'); // Use these coordinates in your app as needed } else { print('Failed to extract coordinates from the link'); } } void goToWhatappLocation() async { if (sosFormKey.currentState!.validate()) { changeIsWhatsAppOrder(true); Get.back(); handleWhatsAppLink(whatsAppLocationText.text); myDestination = LatLng(latitudeWhatsApp, longitudeWhatsApp); await mapController?.animateCamera(CameraUpdate.newLatLng( LatLng(passengerLocation.latitude, passengerLocation.longitude))); changeMainBottomMenuMap(); passengerStartLocationFromMap = true; isPickerShown = true; update(); } } int currentTimeSearchingCaptainWindow = 0; late String driverPhone = ''; late String driverRate = ''; late String passengerName = ''; late String carColor = ''; late String colorHex = ''; late String carYear = ''; late String model = ''; late String make = ''; late String licensePlate = ''; String driverOrderStatus = 'yet'; bool isDriversTokensSend = false; Set notifiedDrivers = {}; /// [إضافة جديدة] /// دالة مخصصة لإضافة الرحلة إلى جدول الانتظار (waiting_ride) Future _addRideToWaitingTable() async { try { await CRUD().post(link: AppLink.addWaitingRide, payload: { 'id': rideId.toString(), "start_location": '${startLocation.latitude},${startLocation.longitude}', "end_location": '${endLocation.latitude},${endLocation.longitude}', // 'start_location': // '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', // 'end_location': // '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', "date": DateTime.now().toString(), "time": DateTime.now().toString(), "price": totalPassenger.toStringAsFixed(2), 'passenger_id': box.read(BoxName.passengerID).toString(), 'status': 'waiting', // الحالة الرئيسية لجدول الانتظار 'carType': box.read(BoxName.carType), 'passengerRate': passengerRate.toStringAsFixed(2), 'price_for_passenger': totalME.toStringAsFixed(2), 'distance': distance.toStringAsFixed(1), 'duration': duration.toStringAsFixed(1), }); Log.print('[WaitingTable] Ride $rideId added to waiting_ride table.'); } catch (e) { Log.print('Error adding ride to waiting_ride table: $e'); } } // Future confirmRideForAllDriverAvailable1() async { // // Try to fetch car locations up to 4 times with a 2-second delay // bool driversFound = false; // for (int attempt = 0; attempt < 8; attempt++) { // await getCarsLocationByPassengerAndReloadMarker( // box.read(BoxName.carType), attempt > 5 ? 4500 : 3000); // // Check if dataCarsLocationByPassenger is valid and contains drivers // if (dataCarsLocationByPassenger != 'failure' && // dataCarsLocationByPassenger != null && // dataCarsLocationByPassenger.containsKey('data') && // dataCarsLocationByPassenger['message'] != null) { // driversFound = true; // break; // Exit loop if drivers are found // } // // Wait 2 seconds before next attempt // await Future.delayed(const Duration(seconds: 2)); // } // // If no drivers were found after 4 attempts, show a dialog // if (!driversFound) { // Get.dialog( // BackdropFilter( // filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), // child: CupertinoAlertDialog( // title: Text( // "No Car or Driver Found in your area.".tr, // style: AppStyle.title.copyWith( // fontSize: 20, // fontWeight: FontWeight.bold, // ), // ), // content: Text( // "No Car or Driver Found in your area.".tr, // style: AppStyle.title.copyWith(fontSize: 16), // ), // actions: [ // CupertinoDialogAction( // onPressed: () { // Get.back(); // Get.offAll(() => const MapPagePassenger()); // }, // child: Text('OK'.tr, // style: const TextStyle(color: AppColor.greenColor)), // ), // ], // ), // ), // barrierDismissible: false, // ); // return; // } // // Proceed with the rest of the function if drivers are found // PaymentController paymentController = Get.find(); // rideConfirm = true; // shouldFetch = true; // isBottomSheetShown = false; // timeToPassengerFromDriverAfterApplied = 60; // // Add ride to database // await CRUD() // .post(link: "${AppLink.IntaleqCairoServer}/ride/rides/add.php", payload: { // "start_location": // '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', // "end_location": // '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', // "date": DateTime.now().toString(), // "time": DateTime.now().toString(), // "endtime": durationToAdd.toString(), // "price": totalPassenger.toStringAsFixed(2), // "passenger_id": box.read(BoxName.passengerID).toString(), // "driver_id": dataCarsLocationByPassenger['message'][carsOrder]['driver_id'] // .toString(), // "status": "waiting", // 'carType': box.read(BoxName.carType), // "price_for_driver": totalPassenger.toString(), // "price_for_passenger": totalME.toString(), // "distance": distance.toString(), // "paymentMethod": paymentController.isWalletChecked.toString(), // }).then((value) { // if (value is String) { // final parsedValue = jsonDecode(value); // rideId = parsedValue['message']; // } else if (value is Map) { // rideId = value['message']; // } else { // Log.print('Unexpected response type: ${value.runtimeType}'); // } // // Timer to notify drivers every 2 seconds for 5 iterations // int iteration = 0; // Timer.periodic(const Duration(seconds: 2), (timer) async { // if (iteration >= 5) { // timer.cancel(); // return; // } // iteration++; // // Reload driver locations and notify available drivers // await getCarsLocationByPassengerAndReloadMarker( // box.read(BoxName.carType), 3000); // if (dataCarsLocationByPassenger != null && // dataCarsLocationByPassenger.containsKey('data') && // dataCarsLocationByPassenger['message'] != null) { // for (var driverData in dataCarsLocationByPassenger['message']) { // String driverId = driverData['driver_id'].toString(); // if (!notifiedDrivers.contains(driverId)) { // notifiedDrivers.add(driverId); // List body = [ // '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', // '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', // totalPassenger.toStringAsFixed(2), // totalDriver.toStringAsFixed(2), // durationToRide.toString(), // distance.toStringAsFixed(2), // driverId.toString(), // box.read(BoxName.passengerID).toString(), // box.read(BoxName.name).toString(), // box.read(BoxName.tokenFCM).toString(), // box.read(BoxName.phone).toString(), // durationByPassenger.toString(), // distanceByPassenger.toString(), // paymentController.isWalletChecked.toString(), // driverData['token'].toString(), // durationToPassenger.toString(), // rideId.toString(), // rideTimerBegin.toString(), // driverId.toString(), // durationToRide.toString(), // Get.find().wayPoints.length > 1 // ? 'haveSteps' // : 'startEnd', // placesCoordinate[0], // placesCoordinate[1], // placesCoordinate[2], // placesCoordinate[3], // placesCoordinate[4], // costForDriver.toStringAsFixed(2), // (double.parse(box.read(BoxName.passengerWalletTotal)) < 0 // ? double.parse(box.read(BoxName.passengerWalletTotal)) // .toStringAsFixed(2) // : '0'), // box.read(BoxName.email).toString(), // data[0]['start_address'], // data[0]['end_address'], // box.read(BoxName.carType), // kazan.toStringAsFixed(0), // passengerRate.toStringAsFixed(2), // ]; // Log.print('body: ${body}'); // firebaseMessagesController.sendNotificationToDriverMAP( // 'OrderSpeed', // rideId, // driverData['token'].toString(), // body, // 'order', // ); // } // } // } // }); // }); // // If an additional endpoint is available, post data there as well // if (AppLink.endPoint != AppLink.IntaleqCairoServer) { // CRUD().post(link: '${AppLink.endPoint}/ride/rides/add.php', payload: { // "start_location": // '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', // "end_location": // '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', // "date": DateTime.now().toString(), // "time": DateTime.now().toString(), // "endtime": durationToAdd.toString(), // "price": totalPassenger.toStringAsFixed(2), // "passenger_id": box.read(BoxName.passengerID).toString(), // "driver_id": dataCarsLocationByPassenger['message'][carsOrder]['driver_id'] // .toString(), // "status": "waiting", // 'carType': box.read(BoxName.carType), // "price_for_driver": totalPassenger.toString(), // "price_for_passenger": totalME.toString(), // "distance": distance.toString(), // "paymentMethod": paymentController.isWalletChecked.toString(), // }); // } // delayAndFetchRideStatusForAllDriverAvailable(rideId); // update(); // } increaseForSameRideAndDelay() async { reSearchAfterCanceledFromDriver(); // bool driversFound = false; // for (int attempt = 0; attempt < 8; attempt++) { // await getCarsLocationByPassengerAndReloadMarker( // box.read(BoxName.carType), 4500); // // Check if dataCarsLocationByPassenger is valid and contains drivers // if (dataCarsLocationByPassenger != 'failure' && // dataCarsLocationByPassenger != null && // dataCarsLocationByPassenger.containsKey('message') && // dataCarsLocationByPassenger['message'] != null) { // driversFound = true; // break; // Exit loop if drivers are found // } // // Wait 2 seconds before next attempt // await Future.delayed(const Duration(seconds: 2)); // } // // If no drivers were found after 4 attempts, show a dialog // if (!driversFound) { // Get.dialog( // BackdropFilter( // filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), // child: CupertinoAlertDialog( // title: Text( // "No Car or Driver Found in your area.".tr, // style: AppStyle.title.copyWith( // fontSize: 20, // fontWeight: FontWeight.bold, // ), // ), // content: Text( // "No Car or Driver Found in your area.".tr, // style: AppStyle.title.copyWith(fontSize: 16), // ), // actions: [ // CupertinoDialogAction( // onPressed: () { // Get.back(); // Get.offAll(() => const MapPagePassenger()); // }, // child: Text('OK'.tr, // style: const TextStyle(color: AppColor.greenColor)), // ), // ], // ), // ), // barrierDismissible: false, // ); // return; // } // PaymentController paymentController = Get.find(); // rideConfirm = true; // shouldFetch = true; // isBottomSheetShown = false; // timeToPassengerFromDriverAfterApplied = 60; // // confirmRideForAllDriverAvailable(); // for (var i = 0; i < dataCarsLocationByPassenger['message'].length; i++) { // List body = [ // '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', // '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', // totalPassenger.toStringAsFixed(2), // totalDriver.toStringAsFixed(2), // durationToRide.toString(), // distance.toStringAsFixed(2), // dataCarsLocationByPassenger['message'][i]['driver_id'].toString(), // box.read(BoxName.passengerID).toString(), // box.read(BoxName.name).toString(), // box.read(BoxName.tokenFCM).toString(), // box.read(BoxName.phone).toString(), // durationByPassenger.toString(), // distanceByPassenger.toString(), // paymentController.isWalletChecked.toString(), // dataCarsLocationByPassenger['message'][i]['token'].toString(), // durationToPassenger.toString(), // rideId.toString(), // rideTimerBegin.toString(), // dataCarsLocationByPassenger['message'][i]['driver_id'].toString(), // durationToRide.toString(), // Get.find().wayPoints.length > 1 // ? 'haveSteps' // : 'startEnd', // placesCoordinate[0], // placesCoordinate[1], // placesCoordinate[2], // placesCoordinate[3], // placesCoordinate[4], // costForDriver.toStringAsFixed(2), // double.parse(box.read(BoxName.passengerWalletTotal)) < 0 // ? double.parse(box.read(BoxName.passengerWalletTotal)) // .toStringAsFixed(2) // : '0', // box.read(BoxName.email).toString(), // data[0]['start_address'], // data[0]['end_address'], // box.read(BoxName.carType), // kazan.toStringAsFixed(0), // passengerRate.toStringAsFixed(2), // ]; // // Log.print('body: ${body}'); // firebaseMessagesController.sendNotificationToDriverMAP( // 'OrderSpeed', // rideId.toString(), // dataCarsLocationByPassenger['message'][i]['token'].toString(), // body, // 'order'); // } } int tick = 0; // Move tick outside the function to maintain its state // void delayAndFetchRideStatus(String rideId, carType) { // Timer.periodic(const Duration(seconds: 1), (timer) async { // if (shouldFetch) { // if (remainingTimeToPassengerFromDriverAfterApplied > 0) { // String res = await getRideStatus(rideId); // Log.print('tick: $tick'); // String rideStatusDelayed = res.toString(); // if ((rideStatusDelayed == 'waiting' || // rideStatusDelayed == 'Refused') && // tick >= 15) { // timer.cancel(); // Stop the current timer // showAndResearchForCaptain(); // //TODO add to wait // await getCarsLocationByPassengerAndReloadMarker(carType, 3000); // // await getNearestDriverByPassengerLocationAPIGOOGLE(); // // getCarForFirstConfirm(carType); // confirmRideForAllDriverAvailable(); // // delayAndFetchRideStatusForAllDriverAvailable(rideId); // } else if (rideStatusDelayed == 'Apply' || statusRide == 'Apply') { // Log.print('rideStatusDelayed == Apply: $rideStatusDelayed'); // // todo play sound // Get.find() // .playSoundFromAssets('assets/start'); // timer.cancel(); // Stop the current timer // await getUpdatedRideForDriverApply(rideId); // shouldFetch = false; // Stop further fetches // statusRide = 'Apply'; // rideConfirm = false; // isSearchingWindow = false; // update(); // startTimerFromDriverToPassengerAfterApplied(); // if (box.read(BoxName.carType) == 'Speed' || // box.read(BoxName.carType) == 'Awfar Car') { // NotificationController().showNotification( // 'The captain is responsible for the route.'.tr, // 'This price is fixed even if the route changes for the driver.' // .tr, // 'ding'); // } else if (box.read(BoxName.carType) == 'Comfort' || // box.read(BoxName.carType) == 'Lady') { // NotificationController().showNotification('Attention'.tr, // 'The price may increase if the route changes.'.tr, 'ding'); // } // } else if (rideStatusDelayed == 'Refused') { // statusRide = 'Refused'; // if (isDriversTokensSend == false) { // confirmRideForAllDriverAvailable(); // isDriversTokensSend = true; // } // Start 15-second timer // } // //else if (isDriversTokensSend == false) { // // No need to recall delayAndFetchRideStatus as Timer.periodic is already running // update(); // // } // if (tick < 19) { // tick++; // } else { // timer.cancel(); // // Stop the timer if remainingTimeToPassengerFromDriverAfterApplied <= 0 // } // } else { // timer.cancel(); // // Stop the timer if remainingTimeToPassengerFromDriverAfterApplied <= 0 // } // } else { // timer.cancel(); // Stop the timer if shouldFetch is false // } // }); // } // showAndResearchForCaptain() { // Get.snackbar( // "No Captain Accepted Your Order".tr, // "We are looking for a captain but the price may increase to let a captain accept" // .tr, // duration: const Duration(seconds: 5), // backgroundColor: AppColor.yellowColor, // ); // isSearchingWindow == true; // update(); // } String driversStatusForSearchWindow = ''; // Future confirmRideForAllDriverAvailable() async { // bool driversFound = false; // const maxAttempts = 8; // const attemptDelay = Duration(seconds: 3); // for (int attempt = 0; attempt < maxAttempts; attempt++) { // final reloadDuration = attempt > 5 ? 4500 : 3000; // await getCarsLocationByPassengerAndReloadMarker( // box.read(BoxName.carType), reloadDuration); // // await getNearestDriverByPassengerLocation(); // currentTimeSearchingCaptainWindow = 0; // driversStatusForSearchWindow = 'We are search for nearst driver'.tr; // if (isDriversDataValid()) { // driversFound = true; // break; // } // await Future.delayed(attemptDelay); // } // if (!driversFound) { // showNoDriversDialog(); // return; // } // driversStatusForSearchWindow = 'Your order is being prepared'.tr; // Log.print('driversStatusForSearchWindow: $driversStatusForSearchWindow'); // update(); // await postRideDetailsToServer(); // driversStatusForSearchWindow = 'Your order sent to drivers'.tr; // await notifyAvailableDrivers(); // driversStatusForSearchWindow = 'The drivers are reviewing your request'.tr; // Log.print('driversStatusForSearchWindow: $driversStatusForSearchWindow'); // update(); // delayAndFetchRideStatusForAllDriverAvailable(rideId); // // update(); // } Future updateConfirmRideForAllDriverAvailable() async { bool driversFound = false; const maxAttempts = 8; const attemptDelay = Duration(seconds: 3); for (int attempt = 0; attempt < maxAttempts; attempt++) { final reloadDuration = attempt > 5 ? 4500 : 3000; await getCarsLocationByPassengerAndReloadMarker( box.read(BoxName.carType), reloadDuration); // await getNearestDriverByPassengerLocation(); if (isDriversDataValid()) { driversFound = true; break; } await Future.delayed(attemptDelay); } if (!driversFound) { showNoDriversDialog(); return; } // await postRideDetailsToServer(); // delayAndFetchRideStatusForAllDriverAvailable(rideId); // update(); await notifyAvailableDrivers(); } bool isDriversDataValid() { return dataCarsLocationByPassenger != 'failure' && dataCarsLocationByPassenger != null && dataCarsLocationByPassenger.containsKey('message') && dataCarsLocationByPassenger['message'] != null; } void showNoDriversDialog() { Get.dialog( BackdropFilter( filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), child: CupertinoAlertDialog( title: Text("No Car or Driver Found in your area.".tr, style: AppStyle.title .copyWith(fontSize: 20, fontWeight: FontWeight.bold)), content: Text("No Car or Driver Found in your area.".tr, style: AppStyle.title.copyWith(fontSize: 16)), actions: [ CupertinoDialogAction( onPressed: () { Get.back(); Get.offAll(() => const MapPagePassenger()); }, child: Text('OK'.tr, style: const TextStyle(color: AppColor.greenColor)), ), ], ), ), barrierDismissible: false, ); } Future postRideDetailsToServer() async { final paymentController = Get.find(); // تأكد من وجود إحداثيات قبل البدء if (polylineCoordinates.isEmpty) { Log.print("Polyline coordinates are empty!"); return false; } startLocation = polylineCoordinates.first; endLocation = polylineCoordinates.last; // بناء البيانات final payload = constructRidePayload(paymentController); // هام جداً: إذا كانت البيانات null (بسبب عدم وجود سائقين)، نوقف العملية هنا if (payload == null) { Log.print('Payload is null (No drivers or error). Operation aborted.'); return false; } Log.print('constructRidePayload: ${payload}'); try { // 🚀 إرسال طلب واحد فقط // ملف PHP الجديد سيقوم بالحفظ في السيرفرين (Local & Remote) تلقائياً final response = await CRUD() .post(link: "${AppLink.server}/ride/rides/add.php", payload: payload); // معالجة الاستجابة var responseBody; if (response is String) { responseBody = jsonDecode(response); } else { responseBody = response; } // التحقق من النجاح حسب دالة printSuccess في PHP // عادةً تكون { "status": "success", "data": 155 } if (responseBody['status'] == 'success') { // PHP يرجع الـ ID داخل الـ data rideId = responseBody['message']; Log.print("Ride Created Successfully with ID: $rideId"); return true; } else { Log.print('Server returned failure: $responseBody'); return false; } } catch (e) { Log.print('Error posting ride details: $e'); return false; } } late LatLng endLocation; late LatLng startLocation; Map? constructRidePayload( PaymentController paymentController) { try { final msg = dataCarsLocationByPassenger?['message']; // التحقق من وجود قائمة السائقين وصحة الـ index final hasDrivers = msg is List && msg.isNotEmpty && carsOrder >= 0 && carsOrder < msg.length; if (!hasDrivers) { _showNoDriversDialog(); return null; // نعيد null ليتم التعامل معه في الدالة الرئيسية } final driverId = msg[carsOrder]['driver_id'] ?? 'new_driver'; // تجهيز الوقت الحالي DateTime now = DateTime.now(); // حساب وقت الوصول المتوقع (EndTime) // durationToAdd يجب أن يكون Duration object. إذا كان نصاً يجب تحويله // سأفترض هنا أنه كائن Duration، إذا لم يكن كذلك أخبرني للتعديل DateTime endTimeDt = now.add(durationToAdd); return { "start_location": '${startLocation.latitude},${startLocation.longitude}', "end_location": '${endLocation.latitude},${endLocation.longitude}', // تنسيق التاريخ والوقت ليتوافق مع MySQL "date": "${now.year}-${now.month.toString().padLeft(2, '0')}-${now.day.toString().padLeft(2, '0')}", // YYYY-MM-DD "time": "${now.hour.toString().padLeft(2, '0')}:${now.minute.toString().padLeft(2, '0')}:${now.second.toString().padLeft(2, '0')}", // HH:MM:SS // إرسال وقت الانتهاء بتنسيق كامل أو وقت فقط حسب العمود في قاعدة البيانات // هنا سأرسله كوقت HH:MM:SS "endtime": "${endTimeDt.hour.toString().padLeft(2, '0')}:${endTimeDt.minute.toString().padLeft(2, '0')}:${endTimeDt.second.toString().padLeft(2, '0')}", "price": totalPassenger.toStringAsFixed(2), "passenger_id": box.read(BoxName.passengerID).toString(), "driver_id": driverId, "status": "waiting", 'carType': box.read(BoxName.carType), "price_for_driver": totalPassenger.toString(), "price_for_passenger": totalME.toString(), "distance": distance.toString(), "paymentMethod": paymentController.isWalletChecked .toString(), // تأكد أن PHP يستقبل هذا الحقل إذا كنت قد أضفته }; } catch (e, st) { Log.print('Error in constructRidePayload: $e'); Log.print(st.toString()); _showNoDriversDialog(); return null; } } void _showNoDriversDialog() { // اذا تستخدم GetX: MyDialog().getDialog( 'Sorry'.tr, 'No cars are available at the moment. Please try again later.'.tr, () { Get.back(); // closes the dialog cancelRide(); // cancels or resets the ride }, ); } Future notifyAvailableDrivers() async { int iteration = 0; const maxIterations = 5; const iterationDelay = Duration(seconds: 2); while (iteration < maxIterations) { await Future.delayed(iterationDelay); await getCarsLocationByPassengerAndReloadMarker( box.read(BoxName.carType), 2400); if (dataCarsLocationByPassenger != null && dataCarsLocationByPassenger.containsKey('message') && dataCarsLocationByPassenger['message'] != null) { for (var driverData in dataCarsLocationByPassenger['message']) { String driverId = driverData['driver_id'].toString(); if (!notifiedDrivers.contains(driverId)) { notifiedDrivers.add(driverId); double driverLat = double.parse(driverData['latitude']); double driverLng = double.parse(driverData['longitude']); double distanceToDriverInMeters = Geolocator.distanceBetween( passengerLocation.latitude, passengerLocation.longitude, driverLat, driverLng, ); double distanceToDriverInKm = distanceToDriverInMeters * 1.3 / //to approximate to stright distance 1000; double durationToDriverInHours = distanceToDriverInKm / 20; // 25 km/h as default speed double durationToDriverInSeconds = durationToDriverInHours * 3600; durationToPassenger = durationToDriverInSeconds.toInt(); distanceByPassenger = (distanceToDriverInMeters * 1.25).toStringAsFixed(0); Future.delayed(const Duration(microseconds: 10)); final body = constructNotificationBody(driverData); Log.print('body:ww $body'); // firebaseMessagesController.sendNotificationToDriverMAP( // 'Order', // without tr since background not valid // endNameAddress, // (driverData['token'].toString()), // body, // 'order'); NotificationService.sendNotification( category: 'Order', target: (driverData['token'].toString()), title: 'Order'.tr, body: endNameAddress, isTopic: false, // Important: this is a token tone: 'tone1', driverList: body); } } } iteration++; } } Future notifyAvailableDriversAgain() async { Log.print('[DEBUG] Starting notifyAvailableDriversAgain()'); await getCarsLocationByPassengerAndReloadMarker( box.read(BoxName.carType), 2400); Log.print( '[DEBUG] Found drivers to notify: ${dataCarsLocationByPassenger['message']?.length}'); if (dataCarsLocationByPassenger != null && dataCarsLocationByPassenger.containsKey('message') && dataCarsLocationByPassenger['message'] != null) { for (var driverData in dataCarsLocationByPassenger['message']) { String driverId = driverData['driver_id'].toString(); if (!notifiedDrivers.contains(driverId)) { notifiedDrivers.add(driverId); double driverLat = double.parse(driverData['latitude']); double driverLng = double.parse(driverData['longitude']); double distanceToDriverInMeters = Geolocator.distanceBetween( passengerLocation.latitude, passengerLocation.longitude, driverLat, driverLng, ); double distanceToDriverInKm = distanceToDriverInMeters * 1.25 / //to approximate to stright distance 1000; double durationToDriverInHours = distanceToDriverInKm / 25; // 25 km/h as default speed double durationToDriverInSeconds = durationToDriverInHours * 3600; durationToPassenger = durationToDriverInSeconds.toInt(); distanceByPassenger = (distanceToDriverInMeters * 1.25).toStringAsFixed(0); Future.delayed(const Duration(microseconds: 10)); final body = constructNotificationBody(driverData); Log.print('body:ww ${body}'); Log.print( '[DEBUG] Sending to driver: ${driverData['driver_id']}, token: ${driverData['token']}'); NotificationService.sendNotification( category: 'Order', target: (driverData['token'].toString()), title: 'Order'.tr, body: endNameAddress, isTopic: false, // Important: this is a token tone: 'tone1', driverList: body); } } } } List constructNotificationBody(var driverData) { final paymentController = Get.find(); return [ // '${data[0]['start_location']['lat']},${data[0]['start_location']['lng']}', // '${data[0]['end_location']['lat']},${data[0]['end_location']['lng']}', '${startLocation.latitude},${startLocation.longitude}', '${endLocation.latitude},${endLocation.longitude}', totalPassenger.toStringAsFixed(2), totalDriver.toStringAsFixed(2), durationToRide.toString(), distance.toStringAsFixed(2), driverData?['driver_id']?.toString() ?? 'N/A', box.read(BoxName.passengerID).toString(), (box.read(BoxName.name).toString().split(' ')[0]).toString(), (box.read(BoxName.tokenFCM).toString()), (box.read(BoxName.phone).toString()), durationToPassenger.toStringAsFixed(0) ?? '120', distanceByPassenger.toString() ?? '2000', paymentController.isWalletChecked.toString(), driverData?['token']?.toString() ?? 'N/A', durationToPassenger.toString(), rideId.toString(), rideTimerBegin.toString(), driverData?['driver_id']?.toString() ?? 'N/A', durationToRide.toString(), Get.find().wayPoints.length > 1 ? 'haveSteps' : 'startEnd', placesCoordinate[0], placesCoordinate[1], placesCoordinate[2], placesCoordinate[3], placesCoordinate[4], costForDriver.toStringAsFixed(2), (double.parse(box.read(BoxName.passengerWalletTotal)) < 0 ? double.parse(box.read(BoxName.passengerWalletTotal)) .toStringAsFixed(2) : '0'), box.read(BoxName.email).toString() ?? 'none', startNameAddress, endNameAddress, box.read(BoxName.carType), kazan.toStringAsFixed(0), passengerRate.toStringAsFixed(2), ]; } StreamController _rideStatusStreamController = StreamController.broadcast(); Stream get rideStatusStream => _rideStatusStreamController.stream; int maxAttempts = 28; // Future delayAndFetchRideStatusForAllDriverAvailable( // String rideId) async { // int attemptCounter = 0; // bool isApplied = false; // tick = 0; // await addRideToNotificationDriverAvailable(); // Timer.periodic(const Duration(seconds: 1), (timer) async { // if (attemptCounter >= maxAttempts || isApplied == true) { // timer.cancel(); // _rideStatusStreamController.close(); // Close the stream when done // return; // } // attemptCounter++; // tick++; // try { // var res = await getRideStatus(rideId); // String rideStatusDelayed = res.toString(); // Log.print('rideStatusDelayed: $rideStatusDelayed'); // _rideStatusStreamController // .add(rideStatusDelayed); // Emit the ride status // // addRideToNotificationDriverString(); // if (rideStatusDelayed == 'Cancel') { // timer.cancel(); // NotificationController().showNotification( // "Order Cancelled".tr, "you canceled order".tr, 'ding'); // _rideStatusStreamController // .close(); // Close stream after cancellation // // // // // } else if (rideStatusDelayed == 'Apply' || // rideStatusDelayed == 'Applied') { // isApplied = true; // // timer.cancel(); // rideAppliedFromDriver(isApplied); // timer.cancel(); // // Close stream after applying // } else if (attemptCounter >= maxAttempts || // rideStatusDelayed == 'waiting') { // // timer.cancel(); //todo // // addRideToNotificationDriverString(); // // Show dialog to increase fee... // // buildTimerForIncrease(); // Get.defaultDialog( // title: 'Are you want to wait drivers to accept your order'.tr, // middleText: '', // onConfirm: () { // Log.print('[DEBUG] User chose to wait again'); // Get.back(); // notifyAvailableDriversAgain(); // delayAndFetchRideStatusForAllDriverAvailable(rideId); // // addRideToNotificationDriverAvailable(); // }, // onCancel: () { // timer.cancel(); // Get.back(); // showCancelRideBottomSheet(); // }, // ); // // MyDialog().getDialog( // // 'Are you want to wait drivers to accept your order'.tr, '', () { // // Get.back(); // // addRideToNotificationDriverAvailable(); // // }); // update(); // _rideStatusStreamController // .close(); // Close stream after max attempts // } // } catch (e) { // _rideStatusStreamController.addError(e); // Handle errors in the stream // } // }); // } Future rideAppliedFromDriver(bool isApplied) async { Log.print('[rideAppliedFromDriver] 🚀 Starting logic...'); // 1. جلب بيانات السائق والسيارة المحدثة من السيرفر await getUpdatedRideForDriverApply(rideId); // تنبيهات الأسعار حسب نوع السيارة if (['Speed', 'Awfar Car'].contains(box.read(BoxName.carType))) { NotificationController().showNotification('Fixed Price'.tr, 'The captain is responsible for the route.'.tr, 'ding'); } else if (['Comfort', 'Lady'].contains(box.read(BoxName.carType))) { NotificationController().showNotification('Attention'.tr, 'The price may increase if the route changes.'.tr, 'ding'); } isApplied = true; statusRide = 'Apply'; rideConfirm = false; isSearchingWindow = false; _isDriverAppliedLogicExecuted = true; // ضمان عدم التكرار update(); // تحديث أولي // 2. جلب موقع السائق الأولي فوراً (Blocking await) await getDriverCarsLocationToPassengerAfterApplied(); // 3. إذا توفر الموقع: حساب المسافة/الزمن ورسم المسار if (driverCarsLocationToPassengerAfterApplied.isNotEmpty) { LatLng driverPos = driverCarsLocationToPassengerAfterApplied.last; Log.print( '[rideAppliedFromDriver] 📍 Driver at: $driverPos, Passenger at: $passengerLocation'); // أ) استدعاء API لحساب المسافة والزمن الدقيق (بدون رسم) await getInitialDriverDistanceAndDuration(driverPos, passengerLocation); // ب) رسم خط المسار (Visual only) await drawDriverPathOnly(driverPos, passengerLocation); // ج) ضبط الكاميرا لتشمل السائق والراكب _fitCameraToPoints(driverPos, passengerLocation); } else { Log.print( '[rideAppliedFromDriver] ⚠️ Warning: Driver location not found yet.'); } // 4. تشغيل تايمر التتبع المستمر (الذي سيقوم بتناقص الوقت الذي جلبناه من API) startTimerFromDriverToPassengerAfterApplied(); // إغلاق الستريم القديم if (!_rideStatusStreamController.isClosed) _rideStatusStreamController.close(); } /// دالة لجلب المسافة والزمن بين السائق والراكب عند قبول الطلب /// تستخدم API سريع (overview=false) Future getInitialDriverDistanceAndDuration( LatLng driverPos, LatLng passengerPos) async { final String apiUrl = 'https://routec.intaleq.xyz/route'; final String apiKey = Env.mapKeyOsm; final String origin = '${driverPos.latitude},${driverPos.longitude}'; final String dest = '${passengerPos.latitude},${passengerPos.longitude}'; // الرابط المطلوب: steps=false&overview=false (سريع جداً للبيانات فقط) final Uri uri = Uri.parse( '$apiUrl?origin=$origin&destination=$dest&steps=false&overview=false'); try { Log.print('[InitialCalc] Fetching distance/duration from: $uri'); final response = await http.get(uri, headers: {'X-API-KEY': apiKey}); if (response.statusCode == 200) { final data = jsonDecode(response.body); if (data['status'] == 'ok') { // 1. استخراج الزمن (بالثواني) // نستخدم المعامل 1.5348 أو 1.4 حسب منطقك السابق لتقدير الوقت الواقعي double durationSecondsRaw = (data['duration_s'] as num).toDouble(); int finalDurationSeconds = (durationSecondsRaw * kDurationScalar) .toInt(); // kDurationScalar = 1.5348 // 2. استخراج المسافة (بالأمتار) double distanceMeters = (data['distance_m'] as num).toDouble(); // 3. تحديث المتغيرات في الكنترولر timeToPassengerFromDriverAfterApplied = finalDurationSeconds; remainingTimeToPassengerFromDriverAfterApplied = finalDurationSeconds; distanceByPassenger = (distanceMeters).toStringAsFixed(0); // المسافة نصاً // يمكنك أيضاً تحديث durationToPassenger إذا كنت تستخدمها durationToPassenger = finalDurationSeconds; Log.print( '[InitialCalc] ✅ Success: Duration=${finalDurationSeconds}s, Distance=${distanceMeters}m'); update(); // تحديث الواجهة لعرض الوقت الجديد فوراً } } else { Log.print('[InitialCalc] ❌ API Error: ${response.statusCode}'); } } catch (e) { Log.print('[InitialCalc] 💥 Exception: $e'); } } // دالة خفيفة وسريعة لرسم خط المسار فقط (بدون أسعار أو خطوات) Future drawDriverPathOnly(LatLng driverPos, LatLng passengerPos) async { final String apiUrl = 'https://routec.intaleq.xyz/route'; final String apiKey = Env.mapKeyOsm; final String origin = '${driverPos.latitude},${driverPos.longitude}'; final String dest = '${passengerPos.latitude},${passengerPos.longitude}'; // استخدام overview=full للدقة، و steps=false للسرعة final Uri uri = Uri.parse( '$apiUrl?origin=$origin&destination=$dest&steps=false&overview=full'); try { final response = await http.get(uri, headers: {'X-API-KEY': apiKey}); if (response.statusCode == 200) { final data = jsonDecode(response.body); if (data['status'] == 'ok' && data['polyline'] != null) { final String pointsString = data['polyline']; // فك التشفير List decodedPoints = await compute(decodePolylineIsolate, pointsString); // إزالة خط مسار السائق القديم فقط polyLines .removeWhere((p) => p.polylineId.value == 'driver_track_line'); // إضافة الخط الجديد polyLines.add(Polyline( polylineId: const PolylineId('driver_track_line'), points: decodedPoints, color: Colors.black87, // لون مميز لمسار السائق width: 5, jointType: JointType.round, startCap: Cap.roundCap, endCap: Cap.roundCap, patterns: [ PatternItem.dash(10), PatternItem.gap(10) ], // جعله منقطاً )); // لا تستدعي update هنا، سيتم استدعاؤها في الدالة الأب (getDriverCars...) لتقليل عدد التحديثات } } } catch (e) { print('Error drawing driver path: $e'); } } // دالة مساعدة لضبط الكاميرا // void _fitCameraToPoints(LatLng p1, LatLng p2) { // double minLat = min(p1.latitude, p2.latitude); // double maxLat = max(p1.latitude, p2.latitude); // double minLng = min(p1.longitude, p2.longitude); // double maxLng = max(p1.longitude, p2.longitude); // mapController?.animateCamera( // CameraUpdate.newLatLngBounds( // LatLngBounds( // southwest: LatLng(minLat, minLng), // northeast: LatLng(maxLat, maxLng), // ), // 100 // Padding // ), // ); // } void _fitCameraToPoints(LatLng p1, LatLng p2) async { if (mapController == null) return; // 1. معالجة حالة النقاط المتطابقة (تمنع الكراش في Android) if (p1.latitude == p2.latitude && p1.longitude == p2.longitude) { try { mapController?.animateCamera(CameraUpdate.newLatLngZoom(p1, 17)); } catch (e) { Log.print("Error animating to single point: $e"); } return; } // 2. حساب الحدود double minLat = min(p1.latitude, p2.latitude); double maxLat = max(p1.latitude, p2.latitude); double minLng = min(p1.longitude, p2.longitude); double maxLng = max(p1.longitude, p2.longitude); // 3. تقليل الهوامش لتجنب خطأ "View size too small" // نستخدم 50 بدلاً من 100 ليكون آمناً مع الخرائط الصغيرة double padding = 50.0; try { await mapController?.animateCamera( CameraUpdate.newLatLngBounds( LatLngBounds( southwest: LatLng(minLat, minLng), northeast: LatLng(maxLat, maxLng), ), padding, ), ); } catch (e) { Log.print("Error animating bounds (Map might be resizing): $e"); // محاولة بديلة آمنة: تحريك الكاميرا للمنتصف فقط دون Bounds try { LatLng center = LatLng((minLat + maxLat) / 2, (minLng + maxLng) / 2); mapController?.animateCamera(CameraUpdate.newLatLngZoom(center, 14)); } catch (_) {} } } // Listening to the Stream void listenToRideStatusStream() { rideStatusStream.listen((rideStatus) { print("Ride Status: $rideStatus"); // Handle updates based on the ride status }, onError: (error) { print("Error in Ride Status Stream: $error"); // Handle stream errors }, onDone: () { print("Ride status stream closed."); }); } reSearchAfterCanceledFromDriver() async { shouldFetch = true; // Stop further fetches statusRide = 'wait'; rideConfirm = true; isSearchingWindow = true; update(); updateConfirmRideForAllDriverAvailable(); } void start15SecondTimer(String rideId) { Timer(const Duration(seconds: 15), () { // delayAndFetchRideStatusForAllDriverAvailable(rideId); }); } // Replaces void startTimer() Timer? _uiCountdownTimer; // Add this variable to your class to manage lifecycle void startUiCountdown() { // Cancel any existing timer to avoid duplicates _uiCountdownTimer?.cancel(); // Reset variables progress = 0; remainingTime = durationTimer; _uiCountdownTimer = Timer.periodic(const Duration(seconds: 1), (timer) { // Logic from your loop, but non-blocking int i = timer.tick; // current tick progress = i / durationTimer; remainingTime = durationTimer - i; if (remainingTime <= 0) { timer.cancel(); // Stop this specific timer rideConfirm = false; // Add the duration to the tracking time logic timeToPassengerFromDriverAfterApplied += durationToPassenger; // Note: We do NOT call startTimerFromDriverToPassengerAfterApplied() here // because we already started it in rideAppliedFromDriver! timerEnded(); // Call your existing completion logic } update(); // Update the UI progress bar }); } void timerEnded() async { runEvery30SecondsUntilConditionMet(); isCancelRidePageShown = false; print('isCancelRidePageShown: $isCancelRidePageShown'); update(); } Future getRideStatus(String rideId) async { final response = await CRUD().get( link: "${AppLink.ride}/ride/rides/getRideStatus.php", payload: {'id': rideId}); print(response); print('2176'); return jsonDecode(response)['data']; } late String driverCarModel, driverCarMake, driverLicensePlate, driverName = ''; Future getUpdatedRideForDriverApply(String rideId) async { // حماية مبدئية: إذا كان المعرف غير صالح لا تكمل if (rideId == 'yet' || rideId.isEmpty) return; try { final res = await CRUD().get( link: "${AppLink.server}/ride/rides/getRideOrderID.php", payload: {'passengerID': box.read(BoxName.passengerID).toString()}); if (res != 'failure') { var response = jsonDecode(res); Log.print('getUpdatedRideForDriverApply Response: $response'); // [هام] التحقق من أن data عبارة عن Map وليست false أو null // هذا يمنع الخطأ: Class 'bool' has no instance method '[]' if (response['status'] == 'success' && response['data'] != null && response['data'] is Map) { var data = response['data']; // استخدام ?.toString() ?? '' للحماية من القيم الفارغة (Null Safety) driverId = data['driver_id']?.toString() ?? ''; driverPhone = data['phone']?.toString() ?? ''; driverCarMake = data['make']?.toString() ?? ''; model = data['model']?.toString() ?? ''; colorHex = data['color_hex']?.toString() ?? ''; carColor = data['color']?.toString() ?? ''; make = data['make']?.toString() ?? ''; licensePlate = data['car_plate']?.toString() ?? ''; // دمج الاسم الأول والأخير للراكب String firstName = data['passengerName']?.toString() ?? ''; String lastName = data['last_name']?.toString() ?? ''; passengerName = lastName.isNotEmpty ? "$firstName $lastName" : firstName; driverName = data['driverName']?.toString() ?? ''; // [هام] التوكن ضروري للإشعارات driverToken = data['token']?.toString() ?? ''; carYear = data['year']?.toString() ?? ''; driverRate = data['ratingDriver']?.toString() ?? '5.0'; update(); // تحديث الواجهة بالبيانات الجديدة } else { Log.print( "Warning: Ride data not found or invalid (data is false/null)"); // اختياري: يمكنك هنا التعامل مع حالة عدم العثور على السائق بعد } } } catch (e) { Log.print("Error in getUpdatedRideForDriverApply: $e"); } } late LatLng currentDriverLocation; late double headingList; // Future getCarsLocationByPassengerAndReloadMarker() async { // if (statusRide == 'wait') { // carsLocationByPassenger = []; // LatLngBounds bounds = calculateBounds( // passengerLocation.latitude, passengerLocation.longitude, 7000); // var res; // if (box.read(BoxName.carType) == 'Lady') { // res = await CRUD() // .get(link: AppLink.getFemalDriverLocationByPassenger, payload: { // 'southwestLat': bounds.southwest.latitude.toString(), // 'southwestLon': bounds.southwest.longitude.toString(), // 'northeastLat': bounds.northeast.latitude.toString(), // 'northeastLon': bounds.northeast.longitude.toString(), // }); // } else if (box.read(BoxName.carType) == 'Speed') { // res = await CRUD().get( // link: AppLink.getCarsLocationByPassengerSpeed, // payload: { // 'southwestLat': bounds.southwest.latitude.toString(), // 'southwestLon': bounds.southwest.longitude.toString(), // 'northeastLat': bounds.northeast.latitude.toString(), // 'northeastLon': bounds.northeast.longitude.toString(), // }, // ); // } else if (box.read(BoxName.carType) == 'Delivery') { // res = await CRUD().get( // link: AppLink.getCarsLocationByPassengerDelivery, // payload: { // 'southwestLat': bounds.southwest.latitude.toString(), // 'southwestLon': bounds.southwest.longitude.toString(), // 'northeastLat': bounds.northeast.latitude.toString(), // 'northeastLon': bounds.northeast.longitude.toString(), // }, // ); // } else { // res = await CRUD() // .get(link: AppLink.getCarsLocationByPassenger, payload: { // 'southwestLat': bounds.southwest.latitude.toString(), // 'southwestLon': bounds.southwest.longitude.toString(), // 'northeastLat': bounds.northeast.latitude.toString(), // 'northeastLon': bounds.northeast.longitude.toString(), // }); // } // if (res == 'failure') { // noCarString = true; // dataCarsLocationByPassenger = res; // update(); // } else { // // Get.snackbar('no car', 'message'); // noCarString = false; // dataCarsLocationByPassenger = jsonDecode(res); // // if (dataCarsLocationByPassenger.length > carsOrder) { // driverId = dataCarsLocationByPassenger['message'][carsOrder] // ['driver_id'] // .toString(); // gender = dataCarsLocationByPassenger['message'][carsOrder]['gender'] // .toString(); // // } // carsLocationByPassenger.clear(); // Clear existing markers // // late LatLng lastDriverLocation; // Initialize a variable for last location // for (var i = 0; // i < dataCarsLocationByPassenger['message'].length; // i++) { // var json = dataCarsLocationByPassenger['message'][i]; // // CarLocationModel model = CarLocationModel.fromJson(json); // if (carLocationsModels.length < i + 1) { // // carLocationsModels.add(model); // markers.add( // Marker( // markerId: MarkerId(json['latitude']), // position: LatLng( // double.parse(json['latitude']), // double.parse(json['longitude']), // ), // rotation: double.parse(json['heading']), // icon: json['model'].toString().contains('دراجة') // ? motoIcon // : json['gender'] == 'Male'.tr // ? carIcon // : ladyIcon, // ), // ); // driversToken.add(json['token']); // // driversToken = json['token']; // } else { // // carLocationsModels[i] = model; // markers[i] = Marker( // markerId: MarkerId(json['latitude']), // position: LatLng( // double.parse(json['latitude']), // double.parse(json['longitude']), // ), // rotation: double.parse(json['heading']), // icon: json['model'].contains('دراجة') // ? motoIcon // : json['gender'] == 'Male'.tr // ? carIcon // : ladyIcon, // ); // // driversToken = json['token']; // driversToken.add(json['token']); // } // } // } // update(); // } // } Map _animationTimers = {}; final int updateIntervalMs = 100; // Update every 100ms final double minMovementThreshold = 10; // Minimum movement in meters to trigger update Future getCarForFirstConfirm(String carType) async { bool foundCars = false; int attempt = 0; // Set up the periodic timer Timer? timer = Timer.periodic(const Duration(seconds: 4), (Timer t) async { // Attempt to get car location foundCars = await getCarsLocationByPassengerAndReloadMarker( carType, attempt * 2000); Log.print('foundCars: $foundCars'); if (foundCars) { // If cars are found, cancel the timer and exit the search t.cancel(); } else if (attempt >= 4) { // After 4 attempts, stop the search t.cancel(); // No cars found after 4 attempts // MyDialog().getDialog( // "No Car or Driver Found in your area.".tr, // "No Car or Driver Found in your area.".tr, // () { // Get.back(); // }, // ); if (!foundCars) { noCarString = true; dataCarsLocationByPassenger = 'failure'; } update(); } attempt++; // Increment attempt }); } void startCarLocationSearch(String carType) { int searchInterval = 5; // Interval in seconds Log.print('searchInterval: $searchInterval'); int boundIncreaseStep = 2500; // Initial bounds in meters Log.print('boundIncreaseStep: $boundIncreaseStep'); int maxAttempts = 3; // Maximum attempts to increase bounds int maxBoundIncreaseStep = 6000; // Maximum bounds increase step int attempt = 0; // Current attempt Log.print('initial attempt: $attempt'); Timer.periodic(Duration(seconds: searchInterval), (Timer timer) async { Log.print('Current attempt: $attempt'); // Log current attempt bool foundCars = false; if (attempt >= maxAttempts) { timer.cancel(); if (foundCars == false) { noCarString = true; // dataCarsLocationByPassenger = 'failure'; update(); } // return; } else if (reloadStartApp == true) { Log.print('reloadStartApp: $reloadStartApp'); foundCars = await getCarsLocationByPassengerAndReloadMarker( carType, boundIncreaseStep); Log.print('foundCars: $foundCars'); if (foundCars) { timer.cancel(); } else { attempt++; if (reloadCount >= 3 || tick > 18 || reloadCount > 15) { timer.cancel(); } Log.print( 'Incrementing attempt to: $attempt'); // Log incremented attempt if (boundIncreaseStep < maxBoundIncreaseStep) { boundIncreaseStep += 1500; // Increase bounds if (boundIncreaseStep > maxBoundIncreaseStep) { boundIncreaseStep = maxBoundIncreaseStep; // Ensure it does not exceed the maximum } Log.print( 'New boundIncreaseStep: $boundIncreaseStep'); // Log new bounds } } } }); } // String getLocationArea(double latitude, double longitude) { // final locations = box.read(BoxName.locationName) ?? []; // for (final location in locations) { // final locationData = location as Map; // // Debugging: Print location data // // print('Location Data: $locationData'); // // Convert string values to double // final minLatitude = // double.tryParse(locationData['min_latitude'].toString()) ?? 0.0; // final maxLatitude = // double.tryParse(locationData['max_latitude'].toString()) ?? 0.0; // final minLongitude = // double.tryParse(locationData['min_longitude'].toString()) ?? 0.0; // final maxLongitude = // double.tryParse(locationData['max_longitude'].toString()) ?? 0.0; // // Debugging: Print converted values // print( // 'Converted Values: minLatitude=$minLatitude, maxLatitude=$maxLatitude, minLongitude=$minLongitude, maxLongitude=$maxLongitude'); // if (latitude >= minLatitude && // latitude <= maxLatitude && // longitude >= minLongitude && // longitude <= maxLongitude) { // box.write(BoxName.serverChosen, (locationData['server_link'])); // // Log.print( // // 'locationData----server_link: ${(locationData['server_link'])}'); // return locationData['name']; // } // } // // Default case // box.write(BoxName.serverChosen, AppLink.IntaleqSyriaServer); // return 'Cairo'; // } String getLocationArea(double latitude, double longitude) { LatLng passengerPoint = LatLng(latitude, longitude); // 1. فحص الأردن if (isPointInPolygon(passengerPoint, CountryPolygons.jordanBoundary)) { box.write(BoxName.countryCode, 'Jordan'); // يمكنك تعيين AppLink.endPoint هنا إذا كان منطقك الداخلي لا يزال يعتمد عليه box.write(BoxName.serverChosen, AppLink.IntaleqSyriaServer); // مثال: اختر سيرفر سوريا للبيانات return 'Jordan'; } // 2. فحص سوريا if (isPointInPolygon(passengerPoint, CountryPolygons.syriaBoundary)) { box.write(BoxName.countryCode, 'Syria'); box.write(BoxName.serverChosen, AppLink.IntaleqSyriaServer); return 'Syria'; } // 3. فحص مصر if (isPointInPolygon(passengerPoint, CountryPolygons.egyptBoundary)) { box.write(BoxName.countryCode, 'Egypt'); box.write(BoxName.serverChosen, AppLink.IntaleqAlexandriaServer); return 'Egypt'; } // 4. الافتراضي (إذا كان خارج المناطق المخدومة) box.write(BoxName.countryCode, 'Jordan'); box.write(BoxName.serverChosen, AppLink.IntaleqSyriaServer); return 'Unknown Location (Defaulting to Jordan)'; } // if (latitude >= 29.918901 && // latitude <= 30.198857 && // longitude >= 31.215009 && // longitude <= 31.532186) { // box.write(BoxName.serverChosen, AppLink.IntaleqCairoServer); // return 'Cairo'; // } else if (latitude >= 29.904975 && // latitude <= 30.143372 && // longitude >= 30.787030 && // longitude <= 31.215009) { // box.write(BoxName.serverChosen, AppLink.IntaleqGizaServer); // return 'Giza'; // } else if (latitude >= 30.396286 && // latitude <= 31.654458 && // longitude >= 29.041139 && // longitude <= 32.626259) { // box.write(BoxName.serverChosen, AppLink.IntaleqAlexandriaServer); // return 'Alexandria'; // } else { // box.write(BoxName.serverChosen, AppLink.IntaleqCairoServer); // return 'Cairo'; // } // } Future getCarsLocationByPassengerAndReloadMarker( String carType, int boundIncreaseStep) async { // if (statusRide == 'wait') { carsLocationByPassenger = []; LatLngBounds bounds = calculateBounds(passengerLocation.latitude, passengerLocation.longitude, boundIncreaseStep.toDouble()); var res; // await getLocation(); switch (carType) { case 'Lady': res = await CRUD() .get(link: AppLink.getFemalDriverLocationByPassenger, payload: { 'southwestLat': bounds.southwest.latitude.toString(), 'southwestLon': bounds.southwest.longitude.toString(), 'northeastLat': bounds.northeast.latitude.toString(), 'northeastLon': bounds.northeast.longitude.toString(), }); break; case 'Comfort': res = await CRUD() .get(link: AppLink.getCarsLocationByPassengerComfort, payload: { 'southwestLat': bounds.southwest.latitude.toString(), 'southwestLon': bounds.southwest.longitude.toString(), 'northeastLat': bounds.northeast.latitude.toString(), 'northeastLon': bounds.northeast.longitude.toString(), }); break; case 'Speed': res = await CRUD() .get(link: AppLink.getCarsLocationByPassengerSpeed, payload: { 'southwestLat': bounds.southwest.latitude.toString(), 'southwestLon': bounds.southwest.longitude.toString(), 'northeastLat': bounds.northeast.latitude.toString(), 'northeastLon': bounds.northeast.longitude.toString(), }); break; case 'Scooter': res = await CRUD() .get(link: AppLink.getCarsLocationByPassengerDelivery, payload: { 'southwestLat': bounds.southwest.latitude.toString(), 'southwestLon': bounds.southwest.longitude.toString(), 'northeastLat': bounds.northeast.latitude.toString(), 'northeastLon': bounds.northeast.longitude.toString(), }); break; case 'Awfar Car': res = await CRUD() .get(link: AppLink.getCarsLocationByPassengerBalash, payload: { 'southwestLat': bounds.southwest.latitude.toString(), 'southwestLon': bounds.southwest.longitude.toString(), 'northeastLat': bounds.northeast.latitude.toString(), 'northeastLon': bounds.northeast.longitude.toString(), }); break; case 'Electric': res = await CRUD() .get(link: AppLink.getCarsLocationByPassengerElectric, payload: { 'southwestLat': bounds.southwest.latitude.toString(), 'southwestLon': bounds.southwest.longitude.toString(), 'northeastLat': bounds.northeast.latitude.toString(), 'northeastLon': bounds.northeast.longitude.toString(), }); break; case 'Pink Bike': res = await CRUD() .get(link: AppLink.getCarsLocationByPassengerPinkBike, payload: { 'southwestLat': bounds.southwest.latitude.toString(), 'southwestLon': bounds.southwest.longitude.toString(), 'northeastLat': bounds.northeast.latitude.toString(), 'northeastLon': bounds.northeast.longitude.toString(), }); break; case 'Van': res = await CRUD() .get(link: AppLink.getCarsLocationByPassengerVan, payload: { 'southwestLat': bounds.southwest.latitude.toString(), 'southwestLon': bounds.southwest.longitude.toString(), 'northeastLat': bounds.northeast.latitude.toString(), 'northeastLon': bounds.northeast.longitude.toString(), }); break; default: res = await CRUD() .get(link: AppLink.getCarsLocationByPassenger, payload: { 'southwestLat': bounds.southwest.latitude.toString(), 'southwestLon': bounds.southwest.longitude.toString(), 'northeastLat': bounds.northeast.latitude.toString(), 'northeastLon': bounds.northeast.longitude.toString(), }); } if (res == 'failure') { noCarString = true; // dataCarsLocationByPassenger = 'failure'; update(); return false; } else { noCarString = false; dataCarsLocationByPassenger = jsonDecode(res); // Log.print( // 'dataCarsLocationByPassenger:getCarsLocationByPassengerAndReloadMarker $dataCarsLocationByPassenger'); // Check if 'message' is present and not null if (dataCarsLocationByPassenger != null && dataCarsLocationByPassenger.isNotEmpty) { print('carsOrder is in of bounds for message array'); // return false; // } } else { // Get.defaultDialog(title: 'No cars available '); print('No cars available or message is null'); return false; } carsLocationByPassenger.clear(); // Clear existing markers for (var i = 0; i < dataCarsLocationByPassenger['message'].length; i++) { var json = dataCarsLocationByPassenger['message'][i]; _updateOrCreateMarker( MarkerId(json['latitude']).toString(), LatLng( double.parse(json['latitude']), double.parse(json['longitude'])), double.parse(json['heading']), _getIconForCar(json), ); driversToken.add((json['token'])); } // Add fake car markers _addFakeCarMarkers(passengerLocation, 1); update(); return true; } // } // return false; } final List> fakeCarData = []; void _addFakeCarMarkers(LatLng center, int count) { if (fakeCarData.isEmpty) { Random random = Random(); double radiusInKm = 2.5; // 3 km diameter, so 1.5 km radius for (int i = 0; i < count; i++) { // Generate a random angle and distance within the circle double angle = random.nextDouble() * 2 * pi; double distance = sqrt(random.nextDouble()) * radiusInKm; // Convert distance to latitude and longitude offsets double latOffset = (distance / 111.32); // 1 degree lat ≈ 111.32 km double lonOffset = (distance / (111.32 * cos(radians(center.latitude)))); // Calculate new position double lat = center.latitude + (latOffset * cos(angle)); double lon = center.longitude + (lonOffset * sin(angle)); double heading = random.nextDouble() * 360; fakeCarData.add({ 'id': 'fake_$i', 'latitude': lat, 'longitude': lon, 'heading': heading, 'gender': 'Male', // Randomize gender }); } } for (var carData in fakeCarData) { _updateOrCreateMarker( MarkerId(carData['id']).toString(), LatLng(carData['latitude'], carData['longitude']), carData['heading'], _getIconForCar(carData), ); } } BitmapDescriptor _getIconForCar(Map carData) { if (carData['model'].toString().contains('دراجة')) { return motoIcon; } else if (carData['gender'] == 'Female') { return ladyIcon; } else { return carIcon; } } void _updateOrCreateMarker(String markerId, LatLng newPosition, double newHeading, BitmapDescriptor icon) { Marker? existingMarker = markers.cast().firstWhere( (m) => m?.markerId == MarkerId(markerId), orElse: () => null, ); if (existingMarker == null) { markers.add(Marker( markerId: MarkerId(markerId), position: newPosition, rotation: newHeading, icon: icon, )); } else { double distance = _calculateDistance(existingMarker.position, newPosition); if (distance >= minMovementThreshold) { _smoothlyUpdateMarker(existingMarker, newPosition, newHeading, icon); } } } double _calculateDistance(LatLng start, LatLng end) { // Implement distance calculation (e.g., Haversine formula) // For simplicity, this is a placeholder. Replace with actual implementation. return 1000 * sqrt(pow(start.latitude - end.latitude, 2) + pow(start.longitude - end.longitude, 2)); } String formatSyrianPhoneNumber(String phoneNumber) { // Trim any whitespace from the input. String trimmedPhone = phoneNumber.trim(); // If the number starts with '09', remove the leading '0' and prepend '963'. if (trimmedPhone.startsWith('09')) { return '963${trimmedPhone.substring(1)}'; } // If the number already starts with '963', return it as is to avoid duplication. if (trimmedPhone.startsWith('963')) { return trimmedPhone; } // For any other case (e.g., number starts with '9' without a '0'), // prepend '963' to ensure the correct format. return '963$trimmedPhone'; } String generateTrackingLink(String rideId, String driverId) { String cleanRideId = rideId.toString().trim(); String cleanDriverId = driverId.toString().trim(); // الكلمة السرية للمطابقة مع السيرفر const String secretSalt = "Intaleq_Secure_Track_2025"; // الدمج والتشفير String rawString = "$cleanRideId$cleanDriverId$secretSalt"; var bytes = utf8.encode(rawString); var digest = md5.convert(bytes); String token = digest.toString(); // الرابط المباشر لصفحة التتبع return "https://intaleqapp.com/track/index.html?id=$cleanRideId&token=$token"; } // 2. الدالة الرئيسية (تم تعديلها لإرسال واتساب بدلاً من الإشعارات) Future shareTripWithFamily() async { // التحقق أولاً: هل الرقم موجود؟ String? storedPhone = box.read(BoxName.sosPhonePassenger); if (storedPhone == null) { // --- (نفس المنطق القديم: فتح ديالوج لإضافة الرقم) --- Get.defaultDialog( title: 'Add SOS Phone'.tr, titleStyle: AppStyle.title, content: Form( key: sosFormKey, child: MyTextForm( controller: sosPhonePassengerProfile, label: 'insert sos phone'.tr, hint: 'e.g. 0912345678'.tr, type: TextInputType.phone, ), ), confirm: MyElevatedButton( title: 'Add SOS Phone'.tr, onPressed: () async { if (sosFormKey.currentState!.validate()) { Get.back(); // تنسيق الرقم var numberPhone = formatSyrianPhoneNumber(sosPhonePassengerProfile.text); // حفظ في السيرفر await CRUD().post( link: AppLink.updateprofile, payload: { 'id': box.read(BoxName.passengerID), 'sosPhone': numberPhone, }, ); // حفظ محلياً box.write(BoxName.sosPhonePassenger, numberPhone); // استدعاء الدالة مرة أخرى للمتابعة shareTripWithFamily(); } })); return; } // --- (المنطق الجديد: إرسال واتساب مباشرة) --- // 1. التأكد من وجود بيانات للرحلة if (rideId == 'yet' || driverId.isEmpty) { Get.snackbar("Alert".tr, "Wait for the trip to start first".tr); return; } // 2. تنسيق الرقم var numberPhone = formatSyrianPhoneNumber(storedPhone); // 3. توليد الرابط String trackingLink = generateTrackingLink(rideId, driverId); // 4. تجهيز الرسالة (بالإنجليزية وجاهزة للترجمة) // لاحظ: استخدمت المتغيرات الموجودة في الكنترولر (passengerName هنا عادة يحمل اسم السائق في الكنترولر الخاص بك حسب الكود السابق) String message = """ مرحباً، تابع رحلتي مباشرة على تطبيق انطلق 🚗 يمكنك تتبع مسار الرحلة من هنا: $trackingLink السائق: $passengerName السيارة: $model - $licensePlate شكراً لاستخدامك انطلق! """ .tr; String messageEn = """Hello, follow my trip live on Intaleq 🚗 Track my ride here: $trackingLink Driver: $passengerName Car: $model - $licensePlate Thank you for using Intaleq! """; // اختر الرسالة بناءً على اللغة المفضلة (مثال بسيط) String userLanguage = box.read(BoxName.lang) ?? 'ar'; message = (userLanguage == 'ar') ? message : messageEn; // وضعنا .tr لكي تتمكن من ترجمتها للعربية في ملفات اللغة إذا أردت، أو تركها إنجليزية print("Sending WhatsApp to: $numberPhone"); // 5. فتح واتساب launchCommunication('whatsapp', numberPhone, message); // (اختياري) حفظ أن التتبع مفعل لتغيير حالة الأيقونة في الواجهة box.write(BoxName.parentTripSelected, true); update(); } Future getTokenForParent() async { // 1. التحقق أولاً: هل الرقم موجود؟ String? storedPhone = box.read(BoxName.sosPhonePassenger); if (storedPhone == null) { // --- حالة الرقم غير موجود: نفتح الديالوج فقط --- Get.defaultDialog( title: 'Add SOS Phone'.tr, titleStyle: AppStyle.title, content: Form( key: sosFormKey, child: MyTextForm( controller: sosPhonePassengerProfile, label: 'insert sos phone'.tr, hint: 'e.g. 0912345678'.tr, type: TextInputType.phone, ), ), confirm: MyElevatedButton( title: 'Add SOS Phone'.tr, onPressed: () async { if (sosFormKey.currentState!.validate()) { // إغلاق الديالوج الحالي Get.back(); // تنسيق الرقم (تأكد أن هذا التنسيق يطابق ما تم تخزينه عند تسجيل الراكب) var numberPhone = formatSyrianPhoneNumber(sosPhonePassengerProfile.text); // حفظ الرقم في السيرفر (تحديث البروفايل) await CRUD().post( link: AppLink.updateprofile, payload: { 'id': box.read(BoxName.passengerID), 'sosPhone': numberPhone, }, ); // حفظ الرقم محلياً box.write(BoxName.sosPhonePassenger, numberPhone); // استدعاء الدالة مرة أخرى getTokenForParent(); } })); return; } generateTrackingLink(rideId, driverId); // --- حالة الرقم موجود: نكمل التنفيذ --- var numberPhone = formatSyrianPhoneNumber(storedPhone); print("Searching for Parent Token with Phone: $numberPhone"); // استدعاء السكريبت (استخدم POST بدلاً من GET) var res = await CRUD() .post(link: AppLink.getTokenParent, payload: {'phone': numberPhone}); // التعامل مع الاستجابة if (res is Map) { handleResponse(res); } else { try { // var jsonRes = jsonDecode(res); handleResponse(res); } catch (e) { print("Error parsing response: $res"); } } } void handleResponse(Map res) { print("Handle Response: $res"); // للتأكد من دخول الدالة // الحالة 1: الرقم غير مسجل (Failure) if (res['status'] == 'failure') { // إذا كان هناك أي ديالوج تحميل مفتوح، نغلقه أولاً، لكن بحذر if (Get.isDialogOpen ?? false) Get.back(); Get.defaultDialog( title: "No user found".tr, // اختصرت العنوان ليظهر بشكل أفضل titleStyle: AppStyle.title, content: Column( children: [ Text( "No passenger found for the given phone number".tr, style: AppStyle.title, // غيرت الستايل ليكون أصغر قليلاً textAlign: TextAlign.center, ), const SizedBox(height: 10), Text( "Send Intaleq app to him".tr, style: AppStyle.title .copyWith(color: AppColor.greenColor, fontSize: 14), textAlign: TextAlign.center, ) ], ), confirm: MyElevatedButton( title: 'Send Invite'.tr, onPressed: () { Get.back(); // إغلاق الديالوج var rawPhone = box.read(BoxName.sosPhonePassenger); // تأكد أن rawPhone ليس null if (rawPhone == null) return; var phone = formatSyrianPhoneNumber(rawPhone); // تصحيح نص الرسالة var message = '''Dear Friend, 🚀 I have just started an exciting trip on Intaleq! Download the app to track my ride: 👉 Android: https://play.google.com/store/apps/details?id=com.Intaleq.intaleq&hl=en-US 👉 iOS: https://apps.apple.com/st/app/intaleq-rider/id6748075179 See you there! Intaleq Team'''; launchCommunication('whatsapp', phone, message); }), cancel: MyElevatedButton( title: 'Cancel'.tr, onPressed: () { Get.back(); })); } // الحالة 2: نجاح (Success) else if (res['status'] == 'success') { // إغلاق أي ديالوج سابق (مثل Loading) if (Get.isDialogOpen ?? false) Get.back(); Get.snackbar("Success".tr, "The invitation was sent successfully".tr, backgroundColor: AppColor.greenColor, colorText: Colors.white); List tokensData = res['data']; for (var device in tokensData) { String tokenParent = device['token']; NotificationService.sendNotification( category: "Trip Monitoring", target: tokenParent, title: "Trip Monitoring".tr, body: "Click to track the trip".tr, isTopic: false, tone: 'tone1', driverList: [rideId, driverId], ); // حفظ آخر توكن box.write(BoxName.tokenParent, tokenParent); } box.write(BoxName.parentTripSelected, true); } } // Function to check if the point is inside the polygon bool isPointInPolygon(LatLng point, List polygon) { int intersections = 0; for (int i = 0; i < polygon.length; i++) { LatLng vertex1 = polygon[i]; LatLng vertex2 = polygon[(i + 1) % polygon.length]; // Loop back to the start if (_rayIntersectsSegment(point, vertex1, vertex2)) { intersections++; } } // If the number of intersections is odd, the point is inside return intersections % 2 != 0; } // Helper function to check if a ray from the point intersects with a polygon segment bool _rayIntersectsSegment(LatLng point, LatLng vertex1, LatLng vertex2) { double px = point.longitude; double py = point.latitude; double v1x = vertex1.longitude; double v1y = vertex1.latitude; double v2x = vertex2.longitude; double v2y = vertex2.latitude; // Check if the point is outside the vertical bounds of the segment if ((py < v1y && py < v2y) || (py > v1y && py > v2y)) { return false; } // Calculate the intersection of the ray and the segment double intersectX = v1x + (py - v1y) * (v2x - v1x) / (v2y - v1y); // Check if the intersection is to the right of the point return intersectX > px; } bool isInUniversity = false; // Function to check if the passenger is in any university polygon // Function to check if the passenger is in any university polygon and return the university name String checkPassengerLocation(LatLng passengerLocation, List> universityPolygons, List universityNames) { for (int i = 0; i < universityPolygons.length; i++) { if (isPointInPolygon(passengerLocation, universityPolygons[i])) { isInUniversity = true; return "Passenger is in ${universityNames[i]}"; } } return "Passenger is not in any university"; } String passengerLocationStringUnvirsity = 'unKnown'; void getPassengerLocationUniversity() { // Check if the passenger is inside any of the university polygons and get the university name passengerLocationStringUnvirsity = checkPassengerLocation( passengerLocation, UniversitiesPolygons.universityPolygons, UniversitiesPolygons.universityNames, ); if (passengerLocationStringUnvirsity != 'unKnown') { // Get.snackbar('you are in $passengerLocationStringUnvirsity', ""); } print(passengerLocationStringUnvirsity); } var polygons = {}.obs; // Initialize polygons from UniversitiesPolygons void _initializePolygons() { List> universityPolygons = UniversitiesPolygons.universityPolygons; List universityNames = UniversitiesPolygons.universityNames; for (int i = 0; i < universityPolygons.length; i++) { Polygon polygon = Polygon( polygonId: PolygonId(universityNames[i]), points: universityPolygons[i], strokeColor: Colors.blueAccent, fillColor: Colors.blueAccent.withOpacity(0.2), strokeWidth: 2, ); polygons.add(polygon); // Add polygon to observable set } } LatLng driverLocationToPassenger = const LatLng(32, 35); Future getDriverCarsLocationToPassengerAfterApplied() async { // 1. الشرط الأمني: تتبع فقط إذا كانت الرحلة نشطة bool isRideActive = (statusRide == 'Apply' || statusRide == 'Arrived' || statusRide == 'Begin' || currentRideState.value == RideState.driverApplied || currentRideState.value == RideState.driverArrived || currentRideState.value == RideState.inProgress); if (!isRideActive || statusRide == 'Finished' || statusRide == 'Cancel' || currentRideState.value == RideState.finished || currentRideState.value == RideState.preCheckReview) { return; } // 2. منع التداخل (Blocking) if (_isFetchingDriverLocation) return; _isFetchingDriverLocation = true; try { var res = await CRUD().get( link: AppLink.getDriverCarsLocationToPassengerAfterApplied, payload: {'driver_id': driverId}); if (res != 'failure') { datadriverCarsLocationToPassengerAfterApplied = jsonDecode(res); if (datadriverCarsLocationToPassengerAfterApplied['message'] != null && datadriverCarsLocationToPassengerAfterApplied['message'] .isNotEmpty) { var _data = datadriverCarsLocationToPassengerAfterApplied['message'][0]; LatLng newDriverPos = LatLng( double.parse(_data['latitude'].toString()), double.parse(_data['longitude'].toString())); driverLocationToPassenger = newDriverPos; driverCarsLocationToPassengerAfterApplied.add(newDriverPos); // [تعديل هام] تنظيف آمن: لا نحذف ماركر السائق الحالي clearMarkersExceptStartEndAndDriver(); // تحريك الماركر reloadMarkerDriverCarsLocationToPassengerAfterApplied(); } } update(); } catch (e) { Log.print('Error fetching driver location: $e'); } finally { _isFetchingDriverLocation = false; } } Future runEvery30SecondsUntilConditionMet() async { // Calculate the duration of the trip in minutes. double tripDurationInMinutes = durationToPassenger / 5; int loopCount = tripDurationInMinutes.ceil(); // If the trip duration is less than or equal to 50 minutes, then break the loop. for (var i = 0; i < loopCount; i++) { // Wait for 50 seconds. await Future.delayed(const Duration(seconds: 5)); if (rideTimerBegin == true || statusRide == 'Apply') { await getDriverCarsLocationToPassengerAfterApplied(); reloadMarkerDriverCarsLocationToPassengerAfterApplied(); } } } Future runWhenRideIsBegin() async { // Calculate the duration of the trip in minutes. double tripDurationInMinutes = durationToRide / 6; int loopCount = tripDurationInMinutes.ceil(); // If the trip duration is less than or equal to 50 minutes, then break the loop. clearMarkersExceptStartEnd(); for (var i = 0; i < loopCount; i++) { // Wait for 50 seconds. await Future.delayed(const Duration(seconds: 4)); // if (rideTimerBegin == true && statusRide == 'Apply') { await getDriverCarsLocationToPassengerAfterApplied(); // } reloadMarkerDriverCarsLocationToPassengerAfterApplied(); } } Timer? _timer; // final int updateIntervalMs = 100; // Update every 100ms // final double minMovementThreshold = // 1.0; // Minimum movement in meters to trigger update void clearMarkersExceptStartEndAndDriver() { markers.removeWhere((marker) { String id = marker.markerId.value; // لا تحذف نقطة البداية if (id == 'start') return false; // لا تحذف نقطة النهاية if (id == 'end') return false; // لا تحذف السائق الحالي if (id == currentDriverMarkerId) return false; // احذف أي شيء آخر (مثل السيارات التي ظهرت وقت البحث) return true; }); // ملاحظة: لا نستدعي update() هنا لأننا سنستدعيها في نهاية الدالة الرئيسية } void clearMarkersExceptStartEnd() { Set markersToRemove = markers .where((marker) => marker.markerId != const MarkerId("start") && marker.markerId != const MarkerId("end")) .toSet(); for (Marker marker in markersToRemove) { markers.remove(marker); } update(); } // 1. تعريف ID ثابت للسائق طوال الرحلة String get currentDriverMarkerId => 'driver_marker_$driverId'; void reloadMarkerDriverCarsLocationToPassengerAfterApplied() { if (datadriverCarsLocationToPassengerAfterApplied == null || datadriverCarsLocationToPassengerAfterApplied['message'] == null || datadriverCarsLocationToPassengerAfterApplied['message'].isEmpty) { return; } var driverData = datadriverCarsLocationToPassengerAfterApplied['message'][0]; // جلب الإحداثيات الجديدة LatLng newPosition = LatLng(double.parse(driverData['latitude'].toString()), double.parse(driverData['longitude'].toString())); double newHeading = double.tryParse(driverData['heading'].toString()) ?? 0.0; // تحديد الأيقونة BitmapDescriptor icon; if (driverData['model'].toString().contains('دراجة') || driverData['make'].toString().contains('دراجة')) { icon = motoIcon; } else if (driverData['gender'] == 'Female') { icon = ladyIcon; } else { icon = carIcon; } // 2. البحث عن الماركر القديم وتحديثه أو إنشاء جديد final MarkerId markerId = MarkerId(currentDriverMarkerId); // التحقق هل الماركر موجود مسبقاً؟ final int existingIndex = markers.indexWhere((m) => m.markerId == markerId); if (existingIndex != -1) { // الماركر موجود، نقوم بتحريكه (Animation) Marker oldMarker = markers[existingIndex]; _smoothlyUpdateMarker(oldMarker, newPosition, newHeading, icon); } else { // الماركر غير موجود، نقوم بإنشائه markers.add(Marker( markerId: markerId, position: newPosition, rotation: newHeading, icon: icon, anchor: const Offset(0.5, 0.5), // مهم لكي تدور السيارة حول مركزها infoWindow: InfoWindow(title: driverName), )); update(); // تحديث الخريطة } } // التأكد من دالة التحريك السلس void _smoothlyUpdateMarker(Marker oldMarker, LatLng newPosition, double newHeading, BitmapDescriptor icon) { // إذا كانت المسافة صغيرة جداً لا داعي للتحريك (لتقليل الوميض) double distance = Geolocator.distanceBetween( oldMarker.position.latitude, oldMarker.position.longitude, newPosition.latitude, newPosition.longitude); if (distance < 2.0) return; final String markerIdKey = oldMarker.markerId.value; // إلغاء أي أنيميشن سابق لنفس الماركر _animationTimers[markerIdKey]?.cancel(); int ticks = 0; const int totalSteps = 20; // عدد الخطوات (نعومة الحركة) const int stepDuration = 50; // سرعة التحديث بالميلي ثانية (المجموع 1 ثانية) double latStep = (newPosition.latitude - oldMarker.position.latitude) / totalSteps; double lngStep = (newPosition.longitude - oldMarker.position.longitude) / totalSteps; double headingStep = (newHeading - oldMarker.rotation) / totalSteps; // معالجة مشكلة الدوران (مثلاً الانتقال من 350 درجة إلى 10 درجات) if (headingStep.abs() > 180) { // منطق لضبط الدوران في الاتجاه الأقرب (اختياري) } LatLng currentPos = oldMarker.position; double currentHeading = oldMarker.rotation; _animationTimers[markerIdKey] = Timer.periodic(const Duration(milliseconds: stepDuration), (timer) { ticks++; currentPos = LatLng(currentPos.latitude + latStep, currentPos.longitude + lngStep); currentHeading += headingStep; // تحديث القائمة int index = markers.indexWhere((m) => m.markerId.value == markerIdKey); if (index != -1) { markers[index] = oldMarker.copyWith( positionParam: currentPos, rotationParam: currentHeading, iconParam: icon, // تحديث الأيقونة في حال تغيرت ); update(); // تحديث الواجهة في كل خطوة } if (ticks >= totalSteps) { timer.cancel(); _animationTimers.remove(markerIdKey); } }); } void _updateMarkerPosition( LatLng newPosition, double newHeading, BitmapDescriptor icon) { const String markerId = 'driverToPassengers'; Marker? existingMarker = markers.cast().firstWhere( (m) => m?.markerId == const MarkerId(markerId), orElse: () => null, ); if (existingMarker == null) { // If the marker doesn't exist, create it at the new position markers.add(Marker( markerId: const MarkerId(markerId), position: newPosition, rotation: newHeading, icon: icon, )); update(); } else { // If the marker exists, check if the movement is significant enough to update double distance = _calculateDistance(existingMarker.position, newPosition); if (distance >= minMovementThreshold) { _smoothlyUpdateMarker(existingMarker, newPosition, newHeading, icon); } } mapController?.animateCamera(CameraUpdate.newLatLng(newPosition)); } @override void onClose() { print( "--- MapPassengerController: Closing and cleaning up all resources. ---"); // 1. إلغاء المؤقتات الفردية (باستخدام ?. الآمن) markerReloadingTimer?.cancel(); markerReloadingTimer1?.cancel(); markerReloadingTimer2?.cancel(); timerToPassengerFromDriverAfterApplied?.cancel(); _timer?.cancel(); _masterTimer?.cancel(); // (أضف المؤقت الرئيسي) _camThrottle?.cancel(); // (أضف مؤقت الكاميرا) // 2. إلغاء جميع المؤقتات في الخريطة (للتحريكات السلسة) _animationTimers.forEach((key, timer) { timer.cancel(); }); _animationTimers.clear(); // 3. إغلاق متحكمات البث (StreamControllers) لمنع تسريب الذاكرة if (!_timerStreamController.isClosed) { _timerStreamController.close(); } if (!_beginRideStreamController.isClosed) { _beginRideStreamController.close(); } if (!_rideStatusStreamController.isClosed) { _rideStatusStreamController.close(); } if (!timerController.isClosed) { timerController.close(); } // 4. التخلص من متحكم الخريطة (ممارسة جيدة) mapController?.dispose(); print("--- Cleanup complete. ---"); super.onClose(); } restCounter() { clearPlacesDestination(); clearPolyline(); data = []; rideConfirm = false; shouldFetch = false; timeToPassengerFromDriverAfterApplied = 0; update(); } //driver behaviour double calculateBearing(double lat1, double lon1, double lat2, double lon2) { double deltaLon = lon2 - lon1; double y = sin(deltaLon) * cos(lat2); double x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(deltaLon); double bearing = atan2(y, x); return (bearing * 180 / pi + 360) % 360; // تحويل إلى درجات } void analyzeBehavior(Position currentPosition, List routePoints) { double actualBearing = currentPosition.heading; // الاتجاه الفعلي من GPS double expectedBearing = calculateBearing( routePoints[0].latitude, routePoints[0].longitude, routePoints[1].latitude, routePoints[1].longitude, ); double bearingDifference = (expectedBearing - actualBearing).abs(); if (bearingDifference > 30) { print("⚠️ السائق انحرف عن المسار!"); } } void detectStops(Position currentPosition) { if (currentPosition.speed < 0.5) { print("🚦 السائق توقف في موقع غير متوقع!"); } } Future cancelRideAfterRejectFromAll() async { clearPlacesDestination(); clearPolyline(); data = []; await CRUD().post(link: AppLink.updateRides, payload: { "id": rideId.toString(), // Convert to String "status": 'notApplyFromAnyDriver' }); CRUD().post(link: "${AppLink.endPoint}/ride/rides/update.php", payload: { "id": rideId.toString(), // Convert to String "status": 'notApplyFromAnyDriver' }); rideConfirm = false; statusRide == 'Cancel'; isSearchingWindow = false; shouldFetch = false; isPassengerChosen = false; isCashConfirmPageShown = false; // totalStepDurations = 0; isCashSelectedBeforeConfirmRide = false; timeToPassengerFromDriverAfterApplied = 0; changeCancelRidePageShow(); remainingTime = 0; update(); } Future cancelRide() async { clearPlacesDestination(); clearPolyline(); data = []; changeCancelRidePageShow(); if (rideId != 'yet') { Log.print('cancelRide: 1'); await NotificationService.sendNotification( category: 'Cancel Trip', target: driverToken.toString(), title: 'Cancel Trip'.tr, body: 'Cancel Trip'.tr, isTopic: false, tone: 'tone1', driverList: [], ); await Future.wait([ // CRUD().post( // link: AppLink.updateRides, // payload: {"id": rideId.toString(), "status": 'Cancel'}), CRUD().post( link: "${AppLink.server}/ride/rides/update.php", payload: {"id": rideId.toString(), "status": 'Cancel'}), CRUD().post( link: AppLink.updateDriverOrder, payload: {"order_id": rideId.toString(), "status": 'Cancel'}), CRUD().post( link: AppLink.updateWaitingTrip, payload: {"id": rideId.toString(), "status": 'Cancel'}), ]); } // ---!! الإضافة الحاسمة لحل مشكلة "cancelled" !! --- Log.print( '[cancelRide] User cancelled. Setting state and stopping timers.'); currentRideState.value = RideState.cancelled; // 1. تعيين الحالة stopAllTimers(); // 2. إيقاف المؤقت الرئيسي // --- نهاية الإضافة --- Get.offAll(() => const MapPagePassenger()); } void changePickerShown() { isPickerShown = !isPickerShown; heightPickerContainer = isPickerShown == true ? 150 : 90; update(); } void changeHeightPointsPageForRider() { isPointsPageForRider = !isPointsPageForRider; heightPointsPageForRider = isPointsPageForRider == true ? Get.height : 0; update(); } getCoordinateFromMapWayPoints(int index) { placesCoordinate[index] = newStartPointLocation.toString(); update(); } // --- ابدأ الإضافة هنا --- // 1. قائمة لتخزين نقاط التوقف List> waypoints = []; // 2. دالة لإضافة نقطة توقف جديدة void addWaypoint(Map placeDetails) { // يمكنك إضافة منطق للتحقق من عدد نقاط التوقف المسموح بها هنا waypoints.add(placeDetails); update(); // لتحديث الواجهة // TODO: أضف هنا استدعاء دالة إعادة رسم المسار مع نقاط التوقف الجديدة // getDirectionMapWithWaypoints(); } // 3. دالة لحذف نقطة توقف void removeWaypoint(int index) { if (index >= 0 && index < waypoints.length) { waypoints.removeAt(index); update(); // لتحديث الواجهة // TODO: أضف هنا استدعاء دالة إعادة رسم المسار بعد حذف النقطة // getDirectionMapWithWaypoints(); } } // --- انتهى --- void changeMainBottomMenuMap() { if (isWayPointStopsSheetUtilGetMap == true) { changeWayPointSheet(); } else { isMainBottomMenuMap = !isMainBottomMenuMap; mainBottomMenuMapHeight = isMainBottomMenuMap == true ? Get.height * .22 : Get.height * .6; isWayPointSheet = false; if (heightMenuBool == true) { getDrawerMenu(); } initilizeGetStorage(); update(); } } void downPoints() { if (Get.find().wayPoints.length < 2) { isWayPointStopsSheetUtilGetMap = false; isWayPointSheet = false; wayPointSheetHeight = isWayPointStopsSheet ? Get.height * .45 : 0; // changeWayPointStopsSheet(); update(); } // changeWayPointStopsSheet(); // isWayPointSheet = false; update(); } void changeWayPointSheet() { isWayPointSheet = !isWayPointSheet; wayPointSheetHeight = isWayPointSheet == false ? 0 : Get.height * .45; // if (heightMenuBool == true) { // getDrawerMenu(); // } update(); } void changeWayPointStopsSheet() { // int waypointsLength = Get.find().wayPoints.length; if (wayPointIndex > -1) { isWayPointStopsSheet = true; isWayPointStopsSheetUtilGetMap = true; } isWayPointStopsSheet = !isWayPointStopsSheet; wayPointSheetHeight = isWayPointStopsSheet ? Get.height * .45 : 0; // if (heightMenuBool == true) { // getDrawerMenu(); // } update(); } changeHeightPlaces() { if (placesDestination.isEmpty) { height = 0; update(); } height = 150; update(); } changeHeightStartPlaces() { if (placesStart.isEmpty) { height = 0; update(); } height = 150; update(); } changeHeightPlacesAll(int index) { if (placeListResponseAll[index].isEmpty) { height = 0; update(); } height = 150; update(); } changeHeightPlaces1() { if (wayPoint1.isEmpty) { height = 0; update(); } height = 150; update(); } changeHeightPlaces2() { if (wayPoint2.isEmpty) { height = 0; update(); } height = 150; update(); } changeHeightPlaces3() { if (wayPoint3.isEmpty) { height = 0; update(); } height = 150; update(); } changeHeightPlaces4() { if (wayPoint4.isEmpty) { height = 0; update(); } height = 150; update(); } hidePlaces() { height = 0; update(); } /// تحويل نصف قطر بالكيلومتر إلى دلتا درجات عرض // double _haversineKm(double lat1, double lon1, double lat2, double lon2) { // const R = 6371.0; // km // final dLat = (lat2 - lat1) * math.pi / 180.0; // final dLon = (lon2 - lon1) * math.pi / 180.0; // final a = math.sin(dLat / 2) * math.sin(dLat / 2) + // math.cos(lat1 * math.pi / 180.0) * // math.cos(lat2 * math.pi / 180.0) * // math.sin(dLon / 2) * // math.sin(dLon / 2); // final c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)); // return R * c; // } /// تحويل نصف قطر بالكيلومتر إلى دلتا درجات عرض // double _kmToLatDelta(double km) => km / 111.0; // /// تحويل نصف قطر بالكيلومتر إلى دلتا درجات طول (تعتمد على خط العرض) // double _kmToLngDelta(double km, double atLat) => // km / (111.320 * math.cos(atLat * math.pi / 180.0)).abs().clamp(1e-6, 1e9); /// حساب درجة التطابق النصي (كل كلمة تبدأ بها الاسم = 2 نقاط، يحتويها = 1 نقطة) // double _relevanceScore(String name, String query) { // final n = name.toLowerCase(); // final parts = // query.toLowerCase().split(RegExp(r'\s+')).where((p) => p.length >= 2); // double s = 0.0; // for (final p in parts) { // if (n.startsWith(p)) { // s += 2.0; // } else if (n.contains(p)) { // s += 1.0; // } // } // return s; // } // الدالة الرئيسية لجلب الأماكن من السيرفر وترتيبها // انسخ هذه الدوال والصقها داخل كلاس الكنترولر الخاص بك // ----------------------------------------------------------------- // --== الدالة الرئيسية للبحث ==-- // ----------------------------------------------------------------- /// الدالة الرئيسية لجلب الأماكن من السيرفر وترتيبها // انسخ هذه الدوال والصقها داخل كلاس الكنترولر الخاص بك // ----------------------------------------------------------------- // --== الدالة الرئيسية للبحث ==-- // ----------------------------------------------------------------- /// الدالة الرئيسية لجلب الأماكن من السيرفر وترتيبها Future getPlaces() async { // افترض وجود `placeDestinationController` و `passengerLocation` و `CRUD()` معرفة في الكنترولر final q = placeDestinationController.text.trim(); if (q.isEmpty || q.length < 3) { // يفضل عدم البحث قبل 3 أحرف placesDestination = []; update(); // افترض أنك تستخدم GetX أو أي State Management آخر return; } final lat = passengerLocation.latitude; final lng = passengerLocation.longitude; // نصف قطر البحث بالكيلومتر const radiusKm = 45.0; // حساب النطاق الجغرافي (Bounding Box) لإرساله للسيرفر final latDelta = _kmToLatDelta(radiusKm); final lngDelta = _kmToLngDelta(radiusKm, lat); final latMin = lat - latDelta; final latMax = lat + latDelta; final lngMin = lng - lngDelta; final lngMax = lng + lngDelta; try { // استدعاء الـ API (تأكد من أن AppLink.getPlacesSyria يشير للسكريبت الجديد) final response = await CRUD().post( link: AppLink.getPlacesSyria, payload: { 'query': q, 'lat_min': latMin.toString(), 'lat_max': latMax.toString(), 'lng_min': lngMin.toString(), 'lng_max': lngMax.toString(), }, ); // --- [تم الإصلاح هنا] --- // معالجة الاستجابة من السيرفر بشكل يوافق {"status":"success", "message":[...]} List list; if (response is Map) { if (response['status'] == 'success' && response['message'] is List) { list = List.from(response['message'] as List); } else if (response['status'] == 'failure') { print('Server Error: ${response['message']}'); return; } else { print('Unexpected Map shape from server'); return; } } else if (response is List) { // للتعامل مع الحالات التي قد يرجع فيها السيرفر قائمة مباشرة list = List.from(response); } else { print('Unexpected response shape from server'); return; } // --- هنا يبدأ عمل فلاتر: الترتيب النهائي الدقيق --- // دالة مساعدة لاختيار أفضل اسم متاح String _bestName(Map p) { return (p['name_ar'] ?? p['name'] ?? p['name_en'] ?? '').toString(); } // حساب المسافة والصلة والنقاط النهائية لكل نتيجة for (final p in list) { final plat = double.tryParse(p['latitude']?.toString() ?? '0.0') ?? 0.0; final plng = double.tryParse(p['longitude']?.toString() ?? '0.0') ?? 0.0; final distance = _haversineKm(lat, lng, plat, plng); final relevance = _relevanceScore(_bestName(p), q); // معادلة الترتيب: (الأولوية للمسافة الأقرب) * (ثم الصلة الأعلى) final score = (1.0 / (1.0 + distance)) * (1.0 + relevance); p['distanceKm'] = distance; p['relevance'] = relevance; p['score'] = score; } // ترتيب القائمة النهائية حسب النقاط (الأعلى أولاً) list.sort((a, b) { final sa = (a['score'] ?? 0.0) as double; final sb = (b['score'] ?? 0.0) as double; return sb.compareTo(sa); }); placesDestination = list; print('Updated places: $placesDestination'); update(); } catch (e) { print('Exception in getPlaces: $e'); } } // ----------------------------------------------------------------- // --== دوال مساعدة ==-- // ----------------------------------------------------------------- /// تحسب المسافة بين نقطتين بالكيلومتر (معادلة هافرساين) double _haversineKm(double lat1, double lon1, double lat2, double lon2) { const R = 6371.0; // نصف قطر الأرض بالكيلومتر final dLat = (lat2 - lat1) * (pi / 180.0); final dLon = (lon2 - lon1) * (pi / 180.0); final rLat1 = lat1 * (pi / 180.0); final rLat2 = lat2 * (pi / 180.0); final a = sin(dLat / 2) * sin(dLat / 2) + cos(rLat1) * cos(rLat2) * sin(dLon / 2) * sin(dLon / 2); final c = 2 * atan2(sqrt(a), sqrt(1 - a)); return R * c; } /// تحسب درجة تطابق بسيطة بين اسم المكان وكلمة البحث double _relevanceScore(String placeName, String query) { if (placeName.isEmpty || query.isEmpty) return 0.0; final pLower = placeName.toLowerCase(); final qLower = query.toLowerCase(); if (pLower.startsWith(qLower)) return 1.0; // تطابق كامل في البداية if (pLower.contains(qLower)) return 0.5; // تحتوي على الكلمة return 0.0; } /// تحويل كيلومتر إلى فرق درجات لخط العرض double _kmToLatDelta(double km) { const kmInDegree = 111.32; return km / kmInDegree; } /// تحويل كيلومتر إلى فرق درجات لخط الطول (يعتمد على خط العرض الحالي) double _kmToLngDelta(double km, double latitude) { const kmInDegree = 111.32; return km / (kmInDegree * cos(latitude * (pi / 180.0))); } // var languageCode; // // تحديد اللغة حسب الإدخال // if (RegExp(r'[a-zA-Z]').hasMatch(placeDestinationController.text)) { // languageCode = 'en'; // } else { // languageCode = 'ar'; // } // final bool isTextEmpty = placeDestinationController.text.trim().isEmpty; // var key = Platform.isAndroid ? AK.mapAPIKEY : AK.mapAPIKEYIOS; // final Uri url = Uri.parse( // isTextEmpty // ? 'https://places.googleapis.com/v1/places:searchNearby?key=$key' // : 'https://places.googleapis.com/v1/places:searchText?key=$key', // ); // Log.print('url: $url'); // // بناء الجسم حسب نوع الطلب // final body = isTextEmpty // ? jsonEncode({ // "languageCode": languageCode, // "locationRestriction": { // "circle": { // "center": { // "latitude": passengerLocation.latitude, // "longitude": passengerLocation.longitude // }, // "radius": 40000 // 40 كم // } // }, // "maxResultCount": 10 // }) // : jsonEncode({ // "textQuery": placeDestinationController.text, // "languageCode": languageCode, // "maxResultCount": 10, // "locationBias": { // "circle": { // "center": { // "latitude": passengerLocation.latitude, // "longitude": passengerLocation.longitude // }, // "radius": 40000 // } // } // }); // final headers = { // 'Content-Type': 'application/json', // 'X-Goog-Api-Key': AK.mapAPIKEY, // 'X-Goog-FieldMask': // 'places.displayName,places.formattedAddress,places.location' // }; // try { // final response = await http.post(url, headers: headers, body: body); // print('response: ${response.statusCode} - ${response.body}'); // if (response.statusCode == 200) { // final data = jsonDecode(response.body); // placesDestination = data['places'] ?? []; // update(); // } else { // print('Error: ${response.statusCode} - ${response.reasonPhrase}'); // } // } catch (e) { // print('Exception: $e'); // } // } getAIKey(String key) async { var res = await CRUD().get(link: AppLink.getapiKey, payload: {"keyName": key}); if (res != 'failure') { var d = jsonDecode(res)['message']; return d[key].toString(); } else {} } // Future getPlaces() async { // var languageCode; // // Check if `placeDestinationController.text` contains English characters // if (RegExp(r'[a-zA-Z]').hasMatch(placeDestinationController.text)) { // languageCode = 'en'; // } else { // languageCode = 'ar'; // } // // Construct the URL // var url = Uri.parse( // '${AppLink.searcMaps}?q=${Uri.encodeQueryComponent(placeDestinationController.text)}&limit=10&in=circle:${passengerLocation.latitude},${passengerLocation.longitude};r=50000&lang=$languageCode&apiKey=$k', // ); // // Log the URL for debugging // print(url); // // box.remove(BoxName.placesDestination); // try { // // Make the API request // var response = await CRUD().getHereMap( // link: url.toString(), // ); // // Log the response for debugging // // Log.print('response: ${response}'); // // Check if the response is valid // if (response != null && response['items'] != null) { // placesDestination = response['items']; // // Log.print('placesDestination: ${placesDestination}'); // placesDestination = response['items']; // // box.write(BoxName.placesDestination, placesDestination); // for (var i = 0; i < placesDestination.length; i++) { // var res = placesDestination[i]; // // Extract fields with null safety // var title = res['title']?.toString() ?? 'Unknown Place'; // var position = res['position']; // var address = res['address']?['label'] ?? 'Unknown Address'; // if (position == null) { // Log.print('Position is null for place: $title'); // continue; // Skip this place and continue with the next one // } // String latitude = position['lat']?.toString() ?? '0.0'; // String longitude = position['lng']?.toString() ?? '0.0'; // try { // await savePlaceToServer(latitude, longitude, title, address); // // Log.print('Place saved successfully: $title'); // } catch (e) { // // Log.print('Failed to save place: $e'); // } // } // todo save key in env then get key and use it // } else { // placesDestination = []; // } // } catch (e) { // // Handle any errors that occur during the API request // Log.print('Error fetching places: $e'); // placesDestination = []; // } // // Notify listeners that the state has changed // update(); // } Future getPlacesStart() async { // افترض وجود `placeDestinationController` و `passengerLocation` و `CRUD()` معرفة في الكنترولر final q = placeStartController.text.trim(); if (q.isEmpty || q.length < 3) { // يفضل عدم البحث قبل 3 أحرف placesStart = []; update(); // افترض أنك تستخدم GetX أو أي State Management آخر return; } final lat = passengerLocation.latitude; final lng = passengerLocation.longitude; // نصف قطر البحث بالكيلومتر const radiusKm = 200.0; // حساب النطاق الجغرافي (Bounding Box) لإرساله للسيرفر final latDelta = _kmToLatDelta(radiusKm); final lngDelta = _kmToLngDelta(radiusKm, lat); final latMin = lat - latDelta; final latMax = lat + latDelta; final lngMin = lng - lngDelta; final lngMax = lng + lngDelta; try { // استدعاء الـ API (تأكد من أن AppLink.getPlacesSyria يشير للسكريبت الجديد) final response = await CRUD().post( link: AppLink.getPlacesSyria, payload: { 'query': q, 'lat_min': latMin.toString(), 'lat_max': latMax.toString(), 'lng_min': lngMin.toString(), 'lng_max': lngMax.toString(), }, ); // --- [تم الإصلاح هنا] --- // معالجة الاستجابة من السيرفر بشكل يوافق {"status":"success", "message":[...]} List list; if (response is Map) { if (response['status'] == 'success' && response['message'] is List) { list = List.from(response['message'] as List); } else if (response['status'] == 'failure') { print('Server Error: ${response['message']}'); return; } else { print('Unexpected Map shape from server'); return; } } else if (response is List) { // للتعامل مع الحالات التي قد يرجع فيها السيرفر قائمة مباشرة list = List.from(response); } else { print('Unexpected response shape from server'); return; } // --- هنا يبدأ عمل فلاتر: الترتيب النهائي الدقيق --- // دالة مساعدة لاختيار أفضل اسم متاح String _bestName(Map p) { return (p['name_ar'] ?? p['name'] ?? p['name_en'] ?? '').toString(); } // حساب المسافة والصلة والنقاط النهائية لكل نتيجة for (final p in list) { final plat = double.tryParse(p['latitude']?.toString() ?? '0.0') ?? 0.0; final plng = double.tryParse(p['longitude']?.toString() ?? '0.0') ?? 0.0; final distance = _haversineKm(lat, lng, plat, plng); final relevance = _relevanceScore(_bestName(p), q); // معادلة الترتيب: (الأولوية للمسافة الأقرب) * (ثم الصلة الأعلى) final score = (1.0 / (1.0 + distance)) * (1.0 + relevance); p['distanceKm'] = distance; p['relevance'] = relevance; p['score'] = score; } // ترتيب القائمة النهائية حسب النقاط (الأعلى أولاً) list.sort((a, b) { final sa = (a['score'] ?? 0.0) as double; final sb = (b['score'] ?? 0.0) as double; return sb.compareTo(sa); }); placesStart = list; print('Updated places: $placesDestination'); update(); } catch (e) { print('Exception in getPlaces: $e'); } } Future getPlacesListsWayPoint(int index) async { var languageCode = wayPoint0Controller.text; // Regular expression to check for English alphabet characters final englishRegex = RegExp(r'[a-zA-Z]'); // Check if text contains English characters if (englishRegex.hasMatch(languageCode)) { languageCode = 'en'; } else { languageCode = 'ar'; } var url = '${AppLink.googleMapsLink}place/nearbysearch/json?keyword=${wayPoint0Controller.text}&location=${passengerLocation.latitude},${passengerLocation.longitude}&radius=250000&language=$languageCode&key=${AK.mapAPIKEY.toString()}'; try { var response = await CRUD().getGoogleApi(link: url, payload: {}); if (response != null && response['results'] != null) { wayPoint0 = response['results']; placeListResponseAll[index] = response['results']; update(); } else { print('Error: Invalid response from Google Places API'); } } catch (e) { print('Error fetching places: $e'); } } // داخل MapPassengerController bool lowPerf = false; Timer? _camThrottle; DateTime _lastUiUpdate = DateTime.fromMillisecondsSinceEpoch(0); Future detectPerfMode() async { try { if (GetPlatform.isAndroid) { final info = await DeviceInfoPlugin().androidInfo; final sdk = info.version.sdkInt ?? 0; final ram = info.availableRamSize ?? 0; lowPerf = (sdk < 28) || (ram > 0 && ram < 3 * 1024 * 1024 * 1024); } else { lowPerf = false; } } catch (_) { lowPerf = false; } update(); } // تحديث الكاميرا بثروتل void onCameraMoveThrottled(CameraPosition pos) { if (_camThrottle?.isActive ?? false) return; _camThrottle = Timer(const Duration(milliseconds: 160), () { // ضع فقط المنطق الضروري هنا لتقليل الحمل int waypointsLength = Get.find().wayPoints.length; int index = wayPointIndex; if (waypointsLength > 0) { placesCoordinate[index] = '${pos.target.latitude},${pos.target.longitude}'; } newMyLocation = pos.target; }); } // تهيئة polylines خفيفة (استدعها بعد جلب المسار) Set polyLinesLight = {}; List simplifyPolyline(List pts, double epsilonMeters) { if (pts.length <= 2) return pts; double _perpDist(LatLng p, LatLng a, LatLng b) { // مسافة عمودية تقريبية بالأمتار double _toRad(double d) => d * math.pi / 180.0; // تحويل بسيط للمتر (تقريبي) final x1 = a.longitude, y1 = a.latitude; final x2 = b.longitude, y2 = b.latitude; final x0 = p.longitude, y0 = p.latitude; final num = ((y2 - y1) * x0 - (x2 - x1) * y0 + x2 * y1 - y2 * x1).abs(); final den = math.sqrt(math.pow(y2 - y1, 2) + math.pow(x2 - x1, 2)); // تحويل درجات -> أمتار تقريبي (1 درجة ~ 111km) final degDist = den == 0 ? 0 : num / den; return degDist * 111000; // متر } List dp(int start, int end) { double maxDist = 0; int index = start; for (int i = start + 1; i < end; i++) { final d = _perpDist(pts[i], pts[start], pts[end]); if (d > maxDist) { maxDist = d; index = i; } } if (maxDist > epsilonMeters) { final r1 = dp(start, index); final r2 = dp(index, end); return [...r1.sublist(0, r1.length - 1), ...r2]; } else { return [pts[start], pts[end]]; } } return dp(0, pts.length - 1); } void buildLightPolylines(List originalPoints) { final simplified = simplifyPolyline(originalPoints, lowPerf ? 12 : 3); polyLinesLight = { Polyline( polylineId: const PolylineId('route_light'), points: simplified, width: lowPerf ? 4 : 6, geodesic: true, color: AppColor.primaryColor, endCap: Cap.roundCap, startCap: Cap.roundCap, jointType: JointType.round, ), }; update(); } Future savePlaceToServer( String latitude, String longitude, String name, String rate) async { var data = { 'latitude': latitude, 'longitude': longitude, 'name': name, 'rate': rate, }; try { CRUD().post( link: AppLink.savePlacesServer, payload: data, ); } catch (e) { print('Error: $e'); } } // Future getPlacesListsWayPoint(int index) async { // var url = // '${AppLink.googleMapsLink}place/nearbysearch/json?keyword=${wayPoint0Controller.text}&location=${passengerLocation.latitude},${passengerLocation.longitude}&radius=80000&language=${}&key=${AK.mapAPIKEY.toString()}'; // var response = await CRUD().getGoogleApi(link: url, payload: {}); // wayPoint0 = response['results']; // placeListResponseAll[index] = response['results']; // update(); // } LatLng fromString(String location) { List parts = location.split(','); double lat = double.parse(parts[0]); double lng = double.parse(parts[1]); return LatLng(lat, lng); } void clearPolyline() { polyLines = []; polylineCoordinates.clear(); // polylineCoordinates = []; polylineCoordinatesPointsAll[0].clear(); polylineCoordinatesPointsAll[1].clear(); polylineCoordinatesPointsAll[2].clear(); polylineCoordinatesPointsAll[3].clear(); polylineCoordinatesPointsAll[4].clear(); isMarkersShown = false; update(); } void addCustomPicker() { ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio // scale: 1.0, ); BitmapDescriptor.asset( config, 'assets/images/picker.png', // mipmaps: false, ).then((value) { markerIcon = value; update(); }); } void addCustomStartIcon() async { // Create the marker with the resized image ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); BitmapDescriptor.asset( config, 'assets/images/A.png', // mipmaps: false, ).then((value) { startIcon = value; update(); }); } void addCustomEndIcon() { ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); BitmapDescriptor.asset( config, 'assets/images/b.png', // mipmaps: false, ).then((value) { endIcon = value; update(); }); } void addCustomCarIcon() { ImageConfiguration config = ImageConfiguration( size: const Size(30, 35), devicePixelRatio: Get.pixelRatio); BitmapDescriptor.asset( config, 'assets/images/car.png', // mipmaps: false, ).then((value) { carIcon = value; update(); }); } void addCustomMotoIcon() { ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); BitmapDescriptor.asset( config, 'assets/images/moto1.png', // mipmaps: false, ).then((value) { motoIcon = value; update(); }); } void addCustomLadyIcon() { ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); BitmapDescriptor.asset( config, 'assets/images/lady1.png', // mipmaps: false, ).then((value) { ladyIcon = value; update(); }); } void addCustomStepIcon() { ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); BitmapDescriptor.asset( config, 'assets/images/brand.png', // mipmaps: false, ).then((value) { tripIcon = value; update(); }); } dialoge() { Get.defaultDialog( title: 'Location '.tr, content: Container( child: Column( children: [ Text( 'We use location to get accurate and nearest driver for you'.tr, style: AppStyle.title, ), TextButton( onPressed: () async { // await Permission.location.request(); Get.back(); }, child: Text( 'Grant'.tr, style: AppStyle.title, ), ) ], ), ), ); } double speed = 0; Future getLocation() async { isLoading = true; update(); bool serviceEnabled; PermissionStatus permissionGranted; // dialoge(); // Check if location services are enabled serviceEnabled = await location.serviceEnabled(); if (!serviceEnabled) { serviceEnabled = await location.requestService(); if (!serviceEnabled) { // Location services are still not enabled, handle the error return; } } // Check if the app has permission to access location permissionGranted = await location.hasPermission(); if (permissionGranted == PermissionStatus.denied) { permissionGranted = await location.requestPermission(); if (permissionGranted != PermissionStatus.granted) { // Location permission is still not granted, handle the error return; } } // Configure location accuracy // LocationAccuracy desiredAccuracy = LocationAccuracy.high; // Get the current location LocationData _locationData = await location.getLocation(); passengerLocation = (_locationData.latitude != null && _locationData.longitude != null ? LatLng(_locationData.latitude!, _locationData.longitude!) : null)!; // getLocationArea(passengerLocation.latitude, passengerLocation.longitude); // Log.print('AppLink.endPoint: ${AppLink.endPoint}'); // Log.print('BoxName.serverChosen: ${box.read(BoxName.serverChosen)}'); newStartPointLocation = passengerLocation; // Log.print('passengerLocation: $passengerLocation'); speed = _locationData.speed!; // //print location details isLoading = false; update(); } LatLngBounds calculateBounds(double lat, double lng, double radiusInMeters) { const double earthRadius = 6378137.0; // Earth's radius in meters double latDelta = (radiusInMeters / earthRadius) * (180 / pi); double lngDelta = (radiusInMeters / (earthRadius * cos(pi * lat / 180))) * (180 / pi); double minLat = lat - latDelta; double maxLat = lat + latDelta; double minLng = lng - lngDelta; double maxLng = lng + lngDelta; // Ensure the latitude is between -90 and 90 minLat = max(-90.0, minLat); maxLat = min(90.0, maxLat); // Ensure the longitude is between -180 and 180 minLng = (minLng + 180) % 360 - 180; maxLng = (maxLng + 180) % 360 - 180; // Ensure the bounds are in the correct order if (minLng > maxLng) { double temp = minLng; minLng = maxLng; maxLng = temp; } return LatLngBounds( southwest: LatLng(minLat, minLng), northeast: LatLng(maxLat, maxLng), ); } GoogleMapController? mapController; void onMapCreated(GoogleMapController controller) { // myLocation = Get.find().location as LatLng; // myLocation = myLocation; mapController = controller; controller.getVisibleRegion(); controller.animateCamera( CameraUpdate.newLatLng(passengerLocation), ); // Future.delayed(const Duration(milliseconds: 500), () { // markers.forEach((marker) { // controller.showMarkerInfoWindow(marker.markerId); // }); // }); update(); } // void startMarkerReloading() { // int count = 0; // markerReloadingTimer = Timer.periodic(const Duration(seconds: 30), (timer) { // reloadMarkers(); // // count++; // if (count == 10) { // timer.cancel(); // } // }); // } bool reloadStartApp = false; int reloadCount = 0; startMarkerReloading() async { if (reloadStartApp == false) { Timer.periodic(const Duration(seconds: 3), (timer) async { reloadCount++; Log.print('reloadCount: $reloadCount'); if (rideConfirm == false) { clearMarkersExceptStartEnd(); // _smoothlyUpdateMarker(); // startCarLocationSearch(box.read(BoxName.carType)); await getCarsLocationByPassengerAndReloadMarker( box.read(BoxName.carType), 5000); await getNearestDriverByPassengerLocation(); // Log.print('reloadMarkers: from startMarkerReloading'); } else { // runWhenRideIsBegin(); } if (reloadCount >= 6) { reloadStartApp = true; timer.cancel(); // Stop the timer after 5 reloads } }); } } String durationByPassenger = ''; late DateTime newTime1 = DateTime.now(); late DateTime timeFromDriverToPassenger = DateTime.now(); String distanceByPassenger = ''; late Duration durationFromDriverToPassenger; double nearestDistance = double.infinity; // Future getNearestDriverByPassengerLocation() async { // if (polyLines.isEmpty || data.isEmpty) { // return null; // Early return if data is empty // } // if (!rideConfirm) { // if (dataCarsLocationByPassenger != 'failure') { // if (dataCarsLocationByPassenger != null) { // if (dataCarsLocationByPassenger['message'].length > 0) { // double nearestDistance = double // .infinity; // Initialize nearest distance to a large number // CarLocation? nearestCar; // for (var i = 0; // i < dataCarsLocationByPassenger['message'].length; // i++) { // var carLocation = dataCarsLocationByPassenger['message'][i]; // // Calculate the distance between passenger's location and current driver's location // final distance = Geolocator.distanceBetween( // passengerLocation.latitude, // passengerLocation.longitude, // double.parse(carLocation['latitude']), // double.parse(carLocation['longitude']), // ); // // Calculate duration assuming an average speed of 25 km/h (adjust as needed) // int durationToPassenger = // (distance * 25 * (1000 / 3600)).round(); // 25 km/h in m/s // // Update the UI with the distance and duration for each car // update(); // // If this distance is smaller than the nearest distance found so far, update nearestCar // if (distance < nearestDistance) { // nearestDistance = distance; // nearestCar = CarLocation( // distance: distance, // duration: durationToPassenger.toDouble(), // id: carLocation['driver_id'], // latitude: double.parse(carLocation['latitude']), // longitude: double.parse(carLocation['longitude']), // ); // // Update the UI with the nearest driver // update(); // } // } // // Return the nearest car found // return nearestCar; // } // } // } // } // // Return null if no drivers are found or if ride is confirmed // return null; // } Future getNearestDriverByPassengerLocation() async { if (!rideConfirm) { if (dataCarsLocationByPassenger != 'failure' && dataCarsLocationByPassenger != null && dataCarsLocationByPassenger['message'] != null && dataCarsLocationByPassenger['message'].length > 0) { double nearestDistance = double.infinity; // Initialize nearest distance CarLocation? nearestCar; for (var i = 0; i < dataCarsLocationByPassenger['message'].length; i++) { var carLocation = dataCarsLocationByPassenger['message'][i]; // Log.print('carLocation: $carLocation'); try { // Calculate distance between passenger's location and current driver's location final distance = Geolocator.distanceBetween( passengerLocation.latitude, passengerLocation.longitude, double.parse(carLocation['latitude']), double.parse(carLocation['longitude']), ); // Calculate duration assuming an average speed of 25 km/h (adjust as needed) int durationToPassenger = (distance / 1000 / 25 * 3600).round(); // Log.print('distance: $distance'); // Log.print('durationToPassenger: $durationToPassenger'); // Log.print('passengerLocation: $passengerLocation'); // Log.print('carLocation: $carLocation'); // Log.print('distance: $distance meters'); // Log.print('durationToPassenger: $durationToPassenger seconds'); // Update the UI with the distance and duration for each car update(); // If this distance is smaller than the nearest distance found so far, update nearestCar if (distance < nearestDistance) { nearestDistance = distance; nearestCar = CarLocation( distance: distance, duration: durationToPassenger.toDouble(), id: carLocation['driver_id'], latitude: double.parse(carLocation['latitude']), longitude: double.parse(carLocation['longitude']), ); // Log.print('nearestCar: $nearestCar'); // Update the UI with the nearest driver update(); } } catch (e) { Log.print('Error calculating distance/duration: $e'); } } // Return the nearest car found return nearestCar; } } // Return null if no drivers are found or if ride is confirmed return null; } getNearestDriverByPassengerLocationAPIGOOGLE() async { if (polyLines.isEmpty || data.isEmpty) { return null; // Early return if data is empty } if (!rideConfirm) { double nearestDistance = double.infinity; if (dataCarsLocationByPassenger != 'failure') { if (dataCarsLocationByPassenger['message'].length > 0) { for (var i = 0; i < dataCarsLocationByPassenger['message'].length; i++) { var carLocation = dataCarsLocationByPassenger['message'][i]; // } // isloading = true; update(); // Make API request to get exact distance and duration String apiUrl = '${AppLink.googleMapsLink}distancematrix/json?destinations=${carLocation['latitude']},${carLocation['longitude']}&origins=${passengerLocation.latitude},${passengerLocation.longitude}&units=metric&key=${AK.mapAPIKEY}'; var response = await CRUD().getGoogleApi(link: apiUrl, payload: {}); if (response != null && response['status'] == "OK") { var data = response; // Extract distance and duration from the response and handle accordingly int distance1 = data['rows'][0]['elements'][0]['distance']['value']; distanceByPassenger = data['rows'][0]['elements'][0]['distance']['text']; durationToPassenger = data['rows'][0]['elements'][0]['duration']['value']; durationFromDriverToPassenger = Duration(seconds: durationToPassenger.toInt()); newTime1 = currentTime.add(durationFromDriverToPassenger); timeFromDriverToPassenger = newTime1.add(Duration(minutes: 2.toInt())); durationByPassenger = data['rows'][0]['elements'][0]['duration']['text']; update(); if (distance1 < nearestDistance) { nearestDistance = distance1.toDouble(); nearestCar = CarLocation( distance: distance1.toDouble(), duration: durationToPassenger.toDouble(), id: carLocation['driver_id'], latitude: double.parse(carLocation['latitude']), longitude: double.parse(carLocation['longitude']), ); // isloading = false; update(); } } // Handle the distance and duration as needed else { // 'Failed to retrieve distance and duration: ${response['status']}'); Log.print('${response['status']}: ${response['status']}}'); // Handle the failure case } } } } } } calculateDistanceBetweenPassengerAndDriverBeforeCancelRide() async { await getDriverCarsLocationToPassengerAfterApplied(); double distance = Geolocator.distanceBetween( passengerLocation.latitude, passengerLocation.longitude, driverCarsLocationToPassengerAfterApplied.last.latitude, driverCarsLocationToPassengerAfterApplied.last.longitude, ); if (distance > 500) { isCancelRidePageShown = true; update(); } else { Get.defaultDialog( barrierDismissible: false, title: 'The Driver Will be in your location soon .'.tr, middleText: 'The distance less than 500 meter.'.tr, confirm: Column( children: [ MyElevatedButton( kolor: AppColor.greenColor, title: 'Ok'.tr, onPressed: () { Get.back(); }, ), MyElevatedButton( kolor: AppColor.redColor, title: 'No, I want to cancel this trip'.tr, onPressed: () { Get.back(); MyDialog().getDialog( 'Attention'.tr, 'You will be charged for the cost of the driver coming to your location.' .tr, () async { Get.back(); Get.find() .payToDriverForCancelAfterAppliedAndHeNearYou(rideId); // isCancelRidePageShown = true; // update(); }, ); }, ), ], ), ); // cancel: MyElevatedButton( // title: 'No.Iwant Cancel Trip.'.tr, onPressed: () {})); } } List headingAngles = []; double calculateAngleBetweenLocations(LatLng start, LatLng end) { double startLat = start.latitude * math.pi / 180; double startLon = start.longitude * math.pi / 180; double endLat = end.latitude * math.pi / 180; double endLon = end.longitude * math.pi / 180; double dLon = endLon - startLon; double y = math.sin(dLon) * cos(endLat); double x = cos(startLat) * math.sin(endLat) - math.sin(startLat) * cos(endLat) * cos(dLon); double angle = math.atan2(y, x); double angleDegrees = angle * 180 / math.pi; return angleDegrees; } late LatLngBounds boundsData; late String startNameAddress = ''; late String endNameAddress = ''; List> stopPoints = []; void removeStop(Map stop) { stopPoints.remove(stop); update(); // Trigger a rebuild of the UI } // [تعديل] نحتاج هذه المكتبات لإرسال طلب HTTP مع هيدر // ... (باقي imports الخاصة بك) // داخل MapPassengerController // Future getReverseGeocoding(LatLng location) async { // final lat = location.latitude; // final lon = location.longitude; // // بناء رابط الـ Reverse Geocoding // final url = // 'https://geocode.intaleq.xyz/reverse_geocode.php?lat=$lat&lon=$lon'; // try { // // استخدام دالة CRUD للطلب (نفترض أن CRUD تستخدم http.get أو ما شابه) // final response = await CRUD().get(link: url, payload: {}); // if (response != 'failure') { // final data = jsonDecode(response); // // if (data['status'] == 'ok') { // // نفضل استخدام display_name أو neighbourhood إذا كان متاحًا // String name = data['display_name'] ?? // data['neighbourhood'] ?? // 'Unknown Location'.tr; // return name; // // } // } // } catch (e) { // Log.print('Error in Reverse Geocoding: $e'); // } // // العودة لقيمة افتراضية في حالة الفشل // return 'Unknown Location'.tr; // } Future getReverseGeocoding(LatLng location) async { final lat = location.latitude; final lon = location.longitude; final url = 'https://geocode.intaleq.xyz/reverse_geocode.php?lat=$lat&lon=$lon'; try { final response = await http.get(Uri.parse(url)); // Log raw response for debugging // Check if the request was successful if (response.statusCode == 200) { String body = response.body.trim(); // Validate it's actual JSON if (body.startsWith('{') && body.endsWith('}')) { final data = jsonDecode(body); // Handle case where API returns {"status":"ok", ...} if (data is Map && data['status'] == 'ok') { String? name = data['display_name'] ?? data['neighbourhood']; return name ?? 'Unknown Location'.tr; } else { // API returned JSON but not with "status: ok" return 'Unknown Location'.tr; } } else { // Not valid JSON (e.g., just "ok" or error message) print('[WARNING] Invalid JSON: $body'); return 'Unknown Location'.tr; } } else { print('[ERROR] HTTP ${response.statusCode}: ${response.body}'); return 'Unknown Location'.tr; } } catch (e) { print('Error in Reverse Geocoding: $e'); return 'Unknown Location'.tr; } } bool isDrawingRoute = false; showDrawingBottomSheet() { Get.bottomSheet( Container( width: double.infinity, padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: Colors.white, borderRadius: const BorderRadius.only( topLeft: Radius.circular(20), topRight: Radius.circular(20), ), ), child: Column( mainAxisSize: MainAxisSize.min, children: [ CircularProgressIndicator( color: AppColor.primaryColor, ), const SizedBox(height: 15), Text( 'Drawing route on map...'.tr, style: AppStyle.title.copyWith(fontSize: 16), ), const SizedBox(height: 5), Text( 'Please wait while we prepare your trip.'.tr, style: TextStyle(color: Colors.grey[600]), ), ], ), ), isDismissible: false, enableDrag: false, ); } String dynamicApiUrl = 'https://routec.intaleq.xyz/route'; Future getDistanceFromDriverAfterAcceptedRide( String origin, String destination) async { String apiKey = Env.mapKeyOsm; // مفتاح API الخاص بك if (origin.isEmpty) { origin = '${passengerLocation.latitude.toString().split(',')[0]},${passengerLocation.longitude.toString().split(',')[1]}'; } // 2. بناء الرابط (URI) // Waypoints غير مدعومة حالياً في OSRM، لذلك تم تجاهلها var uri = Uri.parse( '$dynamicApiUrl?origin=$origin&destination=$destination&steps=false&overview=false'); Log.print('uri: ${uri}'); // 3. إرسال الطلب مع الهيدر http.Response response; Map responseData; try { response = await http.get( uri, headers: { 'X-API-KEY': apiKey, }, ).timeout(const Duration(seconds: 20)); // تايم آوت 20 ثانية if (response.statusCode != 200) { print('Error from API: ${response.statusCode}'); isLoading = false; update(); return; // خروج في حالة الخطأ } if (Get.isBottomSheetOpen ?? false) { Get.back(); // لإغلاق شاشة "جاري الرسم" } isDrawingRoute = false; // Reset state responseData = json.decode(response.body); Log.print('responseData: ${responseData}'); if (responseData['status'] != 'ok') { print('API returned an error: ${responseData['message']}'); isLoading = false; update(); return; // خروج في حالة خطأ منطقي (مثل "no path") } } catch (e) { print('Failed to get directions: $e'); isLoading = false; update(); return; // خروج عند فشل الاتصال } } // (b = 1.5348) هو المعامل الذي تم حسابه من مقارنة 60 رحلة بين Google و OSRM double kDurationScalar = 1.5348; //this from colab 60 random locations from google and routec // ----------------------------------------------------------------------------------------- // GET DIRECTION MAP (FULL) // ----------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------- // GET DIRECTION MAP (With Auto-Retry Logic) // ----------------------------------------------------------------------------------------- // أضفنا attemptCount لتتبع عدد المحاولات // ----------------------------------------------------------------------------------------- // GET DIRECTION MAP (Retry or Fail Strict Logic) // ----------------------------------------------------------------------------------------- Future getDirectionMap(String origin, String destination, [List waypoints = const [], int attemptCount = 0]) async { // 1. إظهار التحميل فقط في المحاولة الأولى if (attemptCount == 0) { isLoading = true; isDrawingRoute = true; update(); if (isDrawingRoute) showDrawingBottomSheet(); // تحميل السيارات مرة واحدة فقط في البداية await getCarsLocationByPassengerAndReloadMarker( box.read(BoxName.carType), 2400); } // تجهيز الإحداثيات if (origin.isEmpty) { origin = '${passengerLocation.latitude.toString().split(',')[0]},${passengerLocation.longitude.toString().split(',')[1]}'; } var coordDestination = destination.split(','); double latDest = double.parse(coordDestination[0]); double lngDest = double.parse(coordDestination[1]); myDestination = LatLng(latDest, lngDest); // 2. الاتصال بالسيرفر String dynamicApiUrl = 'https://routec.intaleq.xyz/route'; String apiKey = Env.mapKeyOsm; var uri = Uri.parse( '$dynamicApiUrl?origin=$origin&destination=$destination&steps=false&overview=full'); Log.print('Requesting Route URI (Attempt: ${attemptCount + 1}): ${uri}'); http.Response response; Map responseData; try { response = await http.get( uri, headers: {'X-API-KEY': apiKey}, ).timeout(const Duration(seconds: 20)); if (response.statusCode != 200) { if (attemptCount < 2) { await _retryProcess(origin, destination, waypoints, attemptCount); return; } _handleFatalError( "Server Error".tr, "Connection failed. Please try again.".tr); return; } responseData = json.decode(response.body); // ============================================================ // 🛑 الفحص الأمني (Sanity Check) // ============================================================ double apiDistanceMeters = (responseData['distance_m'] as num).toDouble(); double startLat = double.parse(origin.split(',')[0]); double startLng = double.parse(origin.split(',')[1]); // المسافة الجوية double aerialDistance = Geolocator.distanceBetween(startLat, startLng, latDest, lngDest); // الشرط: مسافة السيرفر صفرية أو صغيرة جداً بينما الحقيقية كبيرة if (apiDistanceMeters < 50.0 && aerialDistance > 200.0) { Log.print( "⚠️ Suspicious Route detected! Server: $apiDistanceMeters m | Aerial: $aerialDistance m"); // --- محاولة إعادة الطلب (Retry) --- if (attemptCount < 2) { Log.print("🔄 Retrying request (Attempt ${attemptCount + 2})..."); await Future.delayed(const Duration(seconds: 1)); getDirectionMap(origin, destination, waypoints, attemptCount + 1); return; } // --- فشلت كل المحاولات (السيناريو المطلوب) --- else { Log.print("❌ All retries failed. Calculating Route is impossible."); // استدعاء دالة الإلغاء والخروج النهائي _handleFatalError( "Route Not Found".tr, "We couldn't find a valid route to this destination. Please try selecting a different point." .tr); return; // ⛔ توقف هنا فوراً } } // ============================================================ // 3. معالجة البيانات (فقط في حال النجاح) box.remove(BoxName.tripData); box.write(BoxName.tripData, responseData); durationToRide = ((responseData['duration_s'] as num) * kDurationScalar).toInt(); double distanceOfTrip = (responseData['distance_m'] as num) / 1000.0; distance = distanceOfTrip; data = responseData['steps'] ?? []; // معالجة الرسم (Polyline) String pointsString = responseData['polyline'] ?? ""; List decodedPoints = []; if (pointsString.isNotEmpty) { decodedPoints = await compute(decodePolylineIsolate, pointsString); } // حماية إضافية: لو البولي لاين فارغ رغم أن المسافة سليمة if (decodedPoints.isEmpty) { _handleFatalError("Map Error".tr, "Received empty route data.".tr); return; } polylineCoordinates.clear(); polylineCoordinates.addAll(decodedPoints); // 4. جلب العناوين (Reverse Geocoding) final LatLng startLoc = polylineCoordinates.first; final LatLng endLoc = polylineCoordinates.last; try { final results = await Future.wait([ getReverseGeocoding(startLoc), getReverseGeocoding(endLoc), ]); startNameAddress = results[0]; endNameAddress = results[1]; } catch (e) { startNameAddress = 'Start Point'.tr; endNameAddress = 'Destination'.tr; } // 5. تحديث الكاميرا double? minLat, maxLat, minLng, maxLng; for (LatLng point in polylineCoordinates) { minLat = minLat == null ? point.latitude : min(minLat, point.latitude); maxLat = maxLat == null ? point.latitude : max(maxLat, point.latitude); minLng = minLng == null ? point.longitude : min(minLng, point.longitude); maxLng = maxLng == null ? point.longitude : max(maxLng, point.longitude); } // إغلاق شاشة التحميل بنجاح if (Get.isBottomSheetOpen ?? false) Get.back(); isDrawingRoute = false; isLoading = false; if (minLat != null) { LatLngBounds boundsData = LatLngBounds( northeast: LatLng(maxLat!, maxLng!), southwest: LatLng(minLat!, minLng!)); mapController ?.animateCamera(CameraUpdate.newLatLngBounds(boundsData, 100)); } // 6. إضافة الماركرز durationToAdd = Duration(seconds: durationToRide); hours = durationToAdd.inHours; minutes = (durationToAdd.inMinutes % 60).round(); markers.clear(); markers.add(Marker( markerId: const MarkerId('start'), position: startLoc, icon: startIcon, infoWindow: InfoWindow(title: startNameAddress), )); markers.add(Marker( markerId: const MarkerId('end'), position: endLoc, icon: endIcon, infoWindow: InfoWindow( title: endNameAddress, snippet: '$distance ${'KM'.tr} ⌛ ${hours > 0 ? '$hours H $minutes m' : '$minutes m'}'), )); // 7. رسم الخط (فقط في حال النجاح) if (polyLines.isNotEmpty) clearPolyline(); bool isLowEndDevice = box.read(BoxName.lowEndMode) ?? true; if (isLowEndDevice) { polyLines.add(Polyline( polylineId: const PolylineId('route_solid'), points: polylineCoordinates, width: 6, color: AppColor.primaryColor, endCap: Cap.roundCap, startCap: Cap.roundCap, jointType: JointType.round, )); } else { polyLines.addAll(_createGradientPolylines(polylineCoordinates, const Color(0xFF00E5FF), const Color(0xFFFF4081))); } rideConfirm = false; isMarkersShown = true; update(); // إظهار الباتم شيت للسعر bottomSheet(); } catch (e) { // محاولة أخيرة عند حدوث Exception if (attemptCount < 2) { await _retryProcess(origin, destination, waypoints, attemptCount); } else { _handleFatalError("Connection Error".tr, "Please check your internet and try again.".tr); } } } // --- دالة المساعدة لإعادة المحاولة --- Future _retryProcess(String origin, String dest, List waypoints, int currentAttempt) async { Log.print( "🔄 Exception or Error caught. Retrying in 1s... (Attempt ${currentAttempt + 1})"); await Future.delayed(const Duration(seconds: 1)); getDirectionMap(origin, dest, waypoints, currentAttempt + 1); } // ----------------------------------------------------------------------------------------- // 🛑 دالة الخطأ القاتل (تغلق كل شيء وتعيد المستخدم للخريطة) // ----------------------------------------------------------------------------------------- void _handleFatalError(String title, String message) { // 1. إغلاق شاشة التحميل (Drawing route...) if (Get.isBottomSheetOpen ?? false) Get.back(); // 2. تصفير المتغيرات isDrawingRoute = false; isLoading = false; update(); // 3. إظهار الديالوج الإجباري Get.defaultDialog( title: title, titleStyle: AppStyle.title.copyWith(color: AppColor.redColor), middleText: message, middleTextStyle: AppStyle.subtitle, barrierDismissible: false, // لا يمكن إغلاقه بالضغط خارجاً confirm: MyElevatedButton( title: "Close".tr, kolor: AppColor.redColor, onPressed: () { Get.back(); // إغلاق الديالوج // 4. إعادة تحميل الصفحة بالكامل (تنظيف الحالة) // تأكد من استيراد MapPagePassenger Get.offAll(() => const MapPagePassenger()); }, ), ); } /// دالة لتقسيم المسار الطويل إلى قطع صغيرة ملونة بتدرج Set _createGradientPolylines( List points, Color startColor, Color endColor) { Set lines = {}; // إذا كانت النقاط قليلة جداً، نرسم خطاً عادياً if (points.length < 2) return lines; for (int i = 0; i < points.length - 1; i++) { // حساب نسبة التقدم في المسار (من 0.0 إلى 1.0) double t = i / points.length; // دمج اللونين بناءً على النسبة للحصول على اللون الحالي // هذا يخلق التدرج من البداية للنهاية Color segmentColor = Color.lerp(startColor, endColor, t) ?? startColor; lines.add(Polyline( polylineId: PolylineId('route_segment_$i'), points: [points[i], points[i + 1]], // وصل النقطة الحالية بالتالية فقط width: 6, // سماكة الخط (اجعله سميكاً قليلاً ليظهر التدرج) color: segmentColor, startCap: Cap.roundCap, endCap: Cap.roundCap, jointType: JointType.round, zIndex: 2, // لضمان ظهوره فوق أي طبقات أخرى )); } // (اختياري) إضافة "وهج" أو Glow أسفل الخط الرئيسي // يتم ذلك برسم خط واحد شفاف وعريض أسفل الخطوط الملونة lines.add(Polyline( polylineId: const PolylineId('route_glow'), points: points, width: 10, // أعرض من الخط الرئيسي color: startColor.withOpacity(0.3), // لون شفاف zIndex: 1, // أسفل الخط الملون )); return lines; } // getDirectionMap(String origin, destination, // [List waypoints = const []]) async { // isLoading = true; // update(); // remainingTime = 25; //to make cancel every call // // startCarLocationSearch(box.read(BoxName.carType)); // await getCarsLocationByPassengerAndReloadMarker( // box.read(BoxName.carType), 5000); // // await getCarsLocationByPassengerAndReloadMarker(); // var coordDestination = destination.split(','); // double latPassengerDestination = double.parse(coordDestination[0]); // double lngPassengerDestination = double.parse(coordDestination[1]); // myDestination = LatLng(latPassengerDestination, lngPassengerDestination); // if (origin.isEmpty) { // origin = // '${passengerLocation.latitude.toString().split(',')[0]},${passengerLocation.longitude.toString().split(',')[1]}'; //todo // } // isLoading = false; // update(); // var url = // ('${AppLink.googleMapsLink}directions/json?&language=${box.read(BoxName.lang) ?? 'ar'}&avoid=tolls|ferries&destination=$destination&origin=$origin&key=${AK.mapAPIKEY}'); // if (waypoints.isNotEmpty) { // String formattedWaypoints = waypoints.join('|'); // url += '&waypoints=$formattedWaypoints'; // } // var response = await CRUD().getGoogleApi(link: url, payload: {}); // data = response['routes'][0]['legs']; // box.remove(BoxName.tripData); // box.write(BoxName.tripData, response); // startNameAddress = shortenAddress(data[0]['start_address']); // // print('data[0][start_address]: ${data[0]['start_address']}'); // endNameAddress = shortenAddress(data[0]['end_address']); // isLoading = false; // newStartPointLocation = LatLng( // data[0]["start_location"]['lat'], data[0]["start_location"]['lng']); // durationToRide = data[0]['duration']['value']; // final String pointsString = // response['routes'][0]["overview_polyline"]["points"]; // List decodedPoints = // await compute(decodePolylineIsolate, pointsString); // // decodePolyline(response["routes"][0]["overview_polyline"]["points"]); // for (int i = 0; i < decodedPoints.length; i++) { // // double lat = decodedPoints[i][0].toDouble(); // // double lng = decodedPoints[i][1].toDouble(); // polylineCoordinates.add(decodedPoints[i]); // } // // Define the northeast and southwest coordinates // // Define the northeast and southwest coordinates // final bounds = response["routes"][0]["bounds"]; // LatLng northeast = // LatLng(bounds['northeast']['lat'], bounds['northeast']['lng']); // LatLng southwest = // LatLng(bounds['southwest']['lat'], bounds['southwest']['lng']); // // Create the LatLngBounds object // LatLngBounds boundsData = // LatLngBounds(northeast: northeast, southwest: southwest); // // Fit the camera to the bounds // var cameraUpdate = CameraUpdate.newLatLngBounds(boundsData, 130); // mapController!.animateCamera(cameraUpdate); // // getDistanceFromText(data[0]['distance']['text']); // double distanceOfTrip = (data[0]['distance']['value']) / 1000; // distance = distanceOfTrip; // durationToAdd = Duration(seconds: durationToRide); // hours = durationToAdd.inHours; // minutes = (durationToAdd.inMinutes % 60).round(); // // updateCameraForDistanceAfterGetMap(); // markers.clear(); // update(); // markers.add( // Marker( // markerId: const MarkerId('start'), // position: newStartPointLocation, // icon: startIcon, // infoWindow: InfoWindow( // title: startNameAddress, // snippet: '', // ), // ), // ); // // Add end marker // markers.add( // Marker( // markerId: const MarkerId('end'), // position: LatLng( // data[0]["end_location"]['lat'], data[0]["end_location"]['lng']), // icon: endIcon, // infoWindow: InfoWindow( // title: endNameAddress, // snippet: // '$distance ${'KM'.tr} ⌛ ${hours > 0 ? '${'Your Ride Duration is '.tr}$hours ${'H and'.tr} $minutes ${'m'.tr}' : '${'Your Ride Duration is '.tr} $minutes ${'m'.tr}'}'), // ), // ); // // // Show info windows automatically // // Future.delayed(const Duration(milliseconds: 500), () { // // mapController?.showMarkerInfoWindow(const MarkerId('start')); // // }); // // Future.delayed(const Duration(milliseconds: 500), () { // // mapController?.showMarkerInfoWindow(const MarkerId('end')); // // }); // // update(); // if (polyLines.isNotEmpty) { // clearPolyline(); // } else { // // الآن نقرأ القيمة ونحدد عدد النقاط بناءً عليها // bool lowEndMode = box.read(BoxName.lowEndMode) ?? // false; // الأفضل أن يكون الافتراضي هو الجودة العالية // // نمرر عدد النقاط المناسب هنا // if (Platform.isIOS) { // animatePolylineLayered( // polylineCoordinates, // maxPoints: // lowEndMode ? 30 : 150, // 30 نقطة لوضع الأداء، 150 للوضع العادي // ); // } else { // polyLines.add(Polyline( // polylineId: const PolylineId('route'), // points: polylineCoordinates, // width: 6, // color: AppColor.primaryColor, // endCap: Cap.roundCap, // startCap: Cap.roundCap, // jointType: JointType.round, // )); // } // rideConfirm = false; // isMarkersShown = true; // update(); // } // } // 1) تقليل النقاط إلى حد أقصى 30 نقطة (مع بداية ونهاية محفوظة وتوزيع متساوٍ) List _downsampleEven(List coords, {int maxPoints = 30}) { if (coords.isEmpty) return const []; if (coords.length <= maxPoints) return List.from(coords); final int n = coords.length; final int keep = maxPoints.clamp(2, n); final List idx = []; for (int i = 0; i < keep; i++) { final double pos = i * (n - 1) / (keep - 1); idx.add(pos.round()); } final seen = {}; final List out = []; for (final i in idx) { if (seen.add(i)) out.add(coords[i]); } if (out.first != coords.first) out.insert(0, coords.first); if (out.last != coords.last) out.add(coords.last); while (out.length > maxPoints) { out.removeAt(out.length ~/ 2); } return out; } // 2) رسم متدرّج بطبقات متراكبة (بدون حذف)، برونزي ↔ أخضر، مع zIndex وعرض مختلف Future animatePolylineLayered(List coordinates, {int layersCount = 8, int stepDelayMs = 10, int maxPoints = 160}) async { // امسح أي طبقات قديمة فقط الخاصة بالطريق polyLines.removeWhere((p) => p.polylineId.value.startsWith('route_layer_')); update(); final List coords = _downsampleEven(coordinates, maxPoints: maxPoints); if (coords.length < 2) return; // ألوان مع شفافية خفيفة للتمييز Color bronze([int alpha = 220]) => AppColor.gold; Color green([int alpha = 220]) => AppColor.primaryColor; Color _layerColor(int layer) => (layer % 2 == 0) ? bronze() : green(); // عرض الخط: البرونزي أعرض، الأخضر أنحف int _layerWidth(int layer) => (layer % 2 == 0) ? 6 : 4; // لكل طبقة: أنشئ Polyline بهوية فريدة وزي إندكس أعلى من السابقة for (int layer = 0; layer < layersCount; layer++) { final id = PolylineId('route_layer_$layer'); polyLines.add(Polyline( polylineId: id, points: const [], width: _layerWidth(layer), color: _layerColor(layer), zIndex: layer, // مهم لإظهار جميع الطبقات endCap: Cap.roundCap, startCap: Cap.roundCap, geodesic: true, visible: true, )); } update(); // نبني كل طبقة تدريجيًا فوق التي قبلها — بدون مسح الطبقات السابقة for (int layer = 0; layer < layersCount; layer++) { final id = PolylineId('route_layer_$layer'); final List growing = []; for (int i = 0; i < coords.length; i++) { growing.add(coords[i]); // حدّث فقط هذه الطبقة polyLines.removeWhere((p) => p.polylineId == id); polyLines.add(Polyline( polylineId: id, points: List.from(growing), width: _layerWidth(layer), color: _layerColor(layer), zIndex: layer, endCap: Cap.roundCap, startCap: Cap.roundCap, geodesic: true, visible: true, )); update(); await Future.delayed(Duration(milliseconds: stepDelayMs)); } // مهلة خفيفة بين الطبقات عشان يبان التبديل await Future.delayed(const Duration(milliseconds: 120)); } } String shortenAddress(String fullAddress) { // Split the address into parts List parts = fullAddress.split('،'); // Remove any leading or trailing whitespace from each part parts = parts.map((part) => part.trim()).toList(); // Remove any empty parts parts = parts.where((part) => part.isNotEmpty).toList(); // Initialize the short address String shortAddress = ''; if (parts.isNotEmpty) { // Add the first part (usually the most specific location) shortAddress += parts[0]; } if (parts.length > 2) { // Add the district or area name (usually the third part in Arabic format) shortAddress += '، ${parts[2]}'; } else if (parts.length > 1) { // Add the second part for English or shorter addresses shortAddress += '، ${parts[1]}'; } // Add the country (usually the last part) if (parts.length > 1) { shortAddress += '، ${parts.last}'; } // Remove any part that's just numbers (like postal codes) shortAddress = shortAddress .split('،') .where((part) => !RegExp(r'^[0-9 ]+$').hasMatch(part.trim())) .join('،'); // Check if the address is in English bool isEnglish = RegExp(r'^[a-zA-Z0-9 ]+$').hasMatch(shortAddress.replaceAll('،', '')); if (isEnglish) { // Further processing for English addresses List englishParts = shortAddress.split('،'); if (englishParts.length > 2) { shortAddress = '${englishParts[0]}، ${englishParts[1]}، ${englishParts.last}'; } else if (englishParts.length > 1) { shortAddress = '${englishParts[0]}، ${englishParts.last}'; } } return shortAddress; } double distanceOfDestination = 0; bool haveSteps = false; late LatLng latestPosition; getMapPoints(String originSteps, String destinationSteps, int index) async { isWayPointStopsSheetUtilGetMap = false; // haveSteps = true; // startCarLocationSearch(box.read(BoxName.carType)); await getCarsLocationByPassengerAndReloadMarker( box.read(BoxName.carType), 7000); // await getCarsLocationByPassengerAndReloadMarker(); // isLoading = true; update(); var url = ('${AppLink.googleMapsLink}directions/json?&language=${box.read(BoxName.lang)}&avoid=tolls|ferries&destination=$destinationSteps&origin=$originSteps&key=${AK.mapAPIKEY}'); var response = await CRUD().getGoogleApi(link: url, payload: {}); data = response['routes'][0]['legs']; // isLoading = false; int durationToRide0 = data[0]['duration']['value']; durationToRide = durationToRide + durationToRide0; distance = distanceOfDestination + (data[0]['distance']['value']) / 1000; update(); // final points = // decodePolyline(response["routes"][0]["overview_polyline"]["points"]); final String pointsString = response['routes'][0]["overview_polyline"]["points"]; List decodedPoints = await compute(decodePolylineIsolate, pointsString); // decodePolyline(response["routes"][0]["overview_polyline"]["points"]); for (int i = 0; i < decodedPoints.length; i++) { polylineCoordinates.add(decodedPoints[i]); } // Define the northeast and southwest coordinates if (polyLines.isNotEmpty) { // clearPolyline(); } else { var polyline = Polyline( polylineId: PolylineId(response["routes"][0]["summary"]), points: polylineCoordinatesPointsAll[index], width: 10, color: Colors.blue, ); polyLines.add(polyline); rideConfirm = false; // isMarkersShown = true; update(); } } void updateCameraForDistanceAfterGetMap() { LatLng coord1 = LatLng( double.parse(coordinatesWithoutEmpty.first.split(',')[0]), double.parse(coordinatesWithoutEmpty.first.split(',')[1])); LatLng coord2 = LatLng( double.parse(coordinatesWithoutEmpty.last.split(',')[0]), double.parse(coordinatesWithoutEmpty.last.split(',')[1])); LatLng northeast; LatLng southwest; if (coord1.latitude > coord2.latitude) { northeast = coord1; southwest = coord2; } else { northeast = coord2; southwest = coord1; } // Create the LatLngBounds object LatLngBounds bounds = LatLngBounds(northeast: northeast, southwest: southwest); // Fit the camera to the bounds var cameraUpdate = CameraUpdate.newLatLngBounds(bounds, 180); mapController!.animateCamera(cameraUpdate); update(); } int selectedIndex = -1; // Initialize with no selection void selectCarFromList(int index) { selectedIndex = index; // Update selected index carTypes.forEach( (element) => element.isSelected = false); // Reset selection flags carTypes[index].isSelected = true; update(); } showBottomSheet1() async { await bottomSheet(); isBottomSheetShown = true; heightBottomSheetShown = 250; update(); } final promo = TextEditingController(); bool promoTaken = false; void applyPromoCodeToPassenger(BuildContext context) async { if (promoTaken == true) { MyDialog().getDialog( 'Promo Already Used'.tr, 'You have already used this promo code.'.tr, () => Get.back(), ); return; } if (!promoFormKey.currentState!.validate()) return; // العتبات بالليرة السورية const double minPromoLowSYP = 172; // Speed / Balash const double minPromoHighSYP = 200; // Comfort / Electric / Lady try { final value = await CRUD().get( link: AppLink.getPassengersPromo, payload: {'promo_code': promo.text}, ); if (value == 'failure') { MyDialog().getDialog( 'Promo Ended'.tr, 'The promotion period has ended.'.tr, () => Get.back(), ); return; } // هل يوجد فئة مؤهلة أصلاً قبل الخصم؟ final bool eligibleNow = (totalPassengerSpeed >= minPromoLowSYP) || (totalPassengerBalash >= minPromoLowSYP) || (totalPassengerComfort >= minPromoHighSYP) || (totalPassengerElectric >= minPromoHighSYP) || (totalPassengerLady >= minPromoHighSYP); if (!eligibleNow) { Get.snackbar( 'Lowest Price Achieved'.tr, 'Cannot apply further discounts.'.tr, backgroundColor: AppColor.yellowColor, ); return; } final decode = jsonDecode(value); if (decode["status"] != "success") { MyDialog().getDialog( 'Promo Ended'.tr, 'The promotion period has ended.'.tr, () => Get.back(), ); return; } Get.snackbar('Promo Code Accepted'.tr, '', backgroundColor: AppColor.greenColor); final firstElement = decode["message"][0]; final int discountPercentage = int.tryParse(firstElement['amount'].toString()) ?? 0; // قيمة المحفظة - قد تكون سالبة final double walletVal = double.tryParse( box.read(BoxName.passengerWalletTotal)?.toString() ?? '0') ?? 0.0; final bool isWalletNegative = walletVal < 0; // -------------------------- // دالة تُطبّق الخصم دون النزول تحت الحد الأدنى // -------------------------- double _applyDiscountPerTier({ required double fare, required double minThreshold, required bool isWalletNegative, }) { if (fare < minThreshold) return fare; // غير مؤهل أصلاً final double discount = fare * (discountPercentage / 100.0); double result; if (isWalletNegative) { double neg = (-1) * walletVal; // walletVal < 0 => neg positive result = fare + neg - discount; } else { result = fare - discount; } // لا نسمح بالنزول دون الحد الأدنى if (result < minThreshold) { result = minThreshold; } // ولا نسمح بمبلغ سالب return result.clamp(0.0, double.infinity); } // Comfort totalPassengerComfort = _applyDiscountPerTier( fare: totalPassengerComfort, minThreshold: minPromoHighSYP, isWalletNegative: isWalletNegative, ); // Electric totalPassengerElectric = _applyDiscountPerTier( fare: totalPassengerElectric, minThreshold: minPromoHighSYP, isWalletNegative: isWalletNegative, ); // Lady totalPassengerLady = _applyDiscountPerTier( fare: totalPassengerLady, minThreshold: minPromoHighSYP, isWalletNegative: isWalletNegative, ); // Speed totalPassengerSpeed = _applyDiscountPerTier( fare: totalPassengerSpeed, minThreshold: minPromoLowSYP, isWalletNegative: isWalletNegative, ); // Balash totalPassengerBalash = _applyDiscountPerTier( fare: totalPassengerBalash, minThreshold: minPromoLowSYP, isWalletNegative: isWalletNegative, ); // تعديل دخل السائق وفق نسبة الخصم totalDriver = totalDriver - (totalDriver * discountPercentage / 100.0); promoTaken = true; update(); // مؤثرات Confetti.launch( context, options: const ConfettiOptions(particleCount: 100, spread: 70, y: 0.6), ); Get.back(); await Future.delayed(const Duration(milliseconds: 120)); } catch (e) { Get.snackbar('Error'.tr, e.toString(), backgroundColor: AppColor.redColor); } } double getDistanceFromText(String distanceText) { // Remove any non-digit characters from the distance text String distanceValue = distanceText.replaceAll(RegExp(r'[^0-9.]+'), ''); // Parse the extracted numerical value as a double double distance = double.parse(distanceValue); return distance; } double costForDriver = 0; double totalPassengerSpeed = 0; double totalPassengerBalash = 0; double totalPassengerElectric = 0; double totalPassengerLady = 0; double totalPassengerRayehGai = 0; double totalPassengerRayehGaiComfort = 0; double totalPassengerRayehGaiBalash = 0; Future bottomSheet() async { // if (data.isEmpty) return; // === إعدادات عامة === const double minFareSYP = 160; // حد أدنى const double minBillableKm = 0.3; // حد أدنى للمسافة المفوترة const double ladyFlatAddon = 20; // إضافة ثابتة لـ Lady const double airportAddonSYP = 200; // إضافة المطار // --- ⬇️ الإضافة الجديدة: إضافة حدود مطار دمشق ⬇️ --- const double damascusAirportBoundAddon = 1400; // إضافة المطار (حدود) // --- ⬆️ نهاية الإضافة ⬆️ --- // كهرباء const double electricPerKmUplift = 4; // زيادة/كم const double electricFlatAddon = 10; // زيادة ثابتة // Long Speed const double longSpeedThresholdKm = 40.0; const double longSpeedPerKm = 26.0; // Speed عند >40كم // قواعد الرحلات البعيدة للدقائق (تعمل لكل الأوقات) const double mediumDistThresholdKm = 25.0; // >25كم const double longDistThresholdKm = 35.0; // >35كم const double longTripPerMin = 6.0; const int minuteCapMedium = 60; // سقف دقائق عند >25كم const int minuteCapLong = 80; // سقف دقائق عند >35كم const int freeMinutesLong = 10; // عفو 10 دقائق عند >35كم // تخفيضات المسافات الكبيرة للفئات غير Speed const double extraReduction100 = 0.07; // +7% فوق تخفيض >40كم للرحلات >100كم const double maxReductionCap = 0.35; // سقف 35% كحد أقصى // ====== زمن الرحلة ====== durationToAdd = Duration(seconds: durationToRide); hours = durationToAdd.inHours; minutes = (durationToAdd.inMinutes % 60).round(); final DateTime currentTime = DateTime.now(); newTime = currentTime.add(durationToAdd); averageDuration = (durationToRide / 60) / distance; final int totalMinutes = (durationToRide / 60).floor(); // ====== أدوات مساعدة ====== bool _isAirport(String s) { final t = s.toLowerCase(); return t.contains('airport') || s.contains('مطار') || s.contains('المطار'); } bool _isClub(String s) { final t = s.toLowerCase(); return t.contains('club') || t.contains('nightclub') || t.contains('night club') || s.contains('ديسكو') || s.contains('ملهى ليلي'); } // --- ⬇️ الإضافة الجديدة: دالة التحقق من حدود المطار ⬇️ --- // (P1: 33.415313, 36.499687) (P2: 33.400265, 36.531505) bool _isInsideDamascusAirportBounds(double lat, double lng) { final double northLat = 33.415313; final double southLat = 33.400265; final double eastLng = 36.531505; final double westLng = 36.499687; // التحقق من خط العرض (بين الشمال والجنوب) bool isLatInside = (lat <= northLat) && (lat >= southLat); // التحقق من خط الطول (بين الشرق والغرب) bool isLngInside = (lng <= eastLng) && (lng >= westLng); return isLatInside && isLngInside; } // --- ⬆️ نهاية الإضافة ⬆️ --- // أسعار الدقيقة من السيرفر final double naturePerMin = naturePrice; // طبيعي final double latePerMin = latePrice; // ليل final double heavyPerMin = heavyPrice; // ذروة // سعر الدقيقة حسب الوقت (أساس قبل قواعد المسافة) double _perMinuteByTime(DateTime now, bool clubCtx) { final h = now.hour; if (h >= 21 || h < 1) return latePerMin; // ليل if (h >= 1 && h < 5) return clubCtx ? (latePerMin * 2) : latePerMin; if (h >= 14 && h <= 17) return heavyPerMin; // ذروة return naturePerMin; // طبيعي } // حد أدنى double _applyMinFare(double fare) => (fare < minFareSYP) ? minFareSYP : fare; // عمولة الراكب (kazan من السيرفر) double _withCommission(double base) => (base * (1 + kazan / 100)).ceilToDouble(); // ====== سياق ====== final bool airportCtx = _isAirport(startNameAddress) || _isAirport(endNameAddress); final bool clubCtx = _isClub(startNameAddress) || _isClub(endNameAddress); // --- ⬇️ الإضافة الجديدة: التحقق من سياق حدود المطار ⬇️ --- // !! ⚠️ تأكد من أن هذه هي المتغيرات الصحيحة لإحداثيات نقطة النهاية !! final bool damascusAirportBoundCtx = _isInsideDamascusAirportBounds( myDestination.latitude, // <-- ⚠️ غيّر هذا للمتغير الصحيح myDestination.longitude, // <-- ⚠️ غيّر هذا للمتغير الصحيح ); final bool isInDamascusAirportBoundCtx = _isInsideDamascusAirportBounds( newMyLocation.latitude, // <-- ⚠️ غيّر هذا للمتغير الصحيح newMyLocation.longitude, // <-- ⚠️ غيّر هذا للمتغير الصحيح ); // --- ⬆️ نهاية الإضافة ⬆️ --- // ====== مسافة مفوترة ====== final double billableDistance = (distance < minBillableKm) ? minBillableKm : distance; // ====== Speed (قصير/طويل) ====== final bool isLongSpeed = billableDistance > longSpeedThresholdKm; final double perKmSpeedBaseFromServer = speedPrice; // مثال: 2900 يأتي من السيرفر final double perKmSpeed = isLongSpeed ? longSpeedPerKm : perKmSpeedBaseFromServer; // ====== تخفيضات الفئات الأخرى حسب بُعد الرحلة ====== // ... (الكود كما هو) ... double reductionPct40 = 0.0; if (perKmSpeedBaseFromServer > 0) { reductionPct40 = (1.0 - (longSpeedPerKm / perKmSpeedBaseFromServer)) .clamp(0.0, maxReductionCap); } final double reductionPct100 = (reductionPct40 + extraReduction100).clamp(0.0, maxReductionCap); double distanceReduction = 0.0; if (billableDistance > 100.0) { distanceReduction = reductionPct100; } else if (billableDistance > 40.0) { distanceReduction = reductionPct40; } // ====== منطق الدقيقة يعمل لكل الأوقات ويتكيّف مع المسافة ====== // ... (الكود كما هو) ... double effectivePerMin = _perMinuteByTime(currentTime, clubCtx); int billableMinutes = totalMinutes; if (billableDistance > longDistThresholdKm) { effectivePerMin = longTripPerMin; final int capped = (billableMinutes > minuteCapLong) ? minuteCapLong : billableMinutes; billableMinutes = capped - freeMinutesLong; if (billableMinutes < 0) billableMinutes = 0; } else if (billableDistance > mediumDistThresholdKm) { effectivePerMin = longTripPerMin; billableMinutes = (billableMinutes > minuteCapMedium) ? minuteCapMedium : billableMinutes; } // ====== أسعار/كم قبل التخفيض ====== // ... (الكود كما هو) ... final double perKmComfortRaw = comfortPrice; final double perKmDelivery = deliveryPrice; final double perKmVanRaw = (familyPrice > 0 ? familyPrice : (speedPrice + 13)); final double perKmElectricRaw = perKmComfortRaw + electricPerKmUplift; // ====== تطبيق التخفيضات على الفئات (نفس نسبة Speed للبعيد) ====== // ... (الكود كما هو) ... double perKmComfort = perKmComfortRaw * (1.0 - distanceReduction); double perKmElectric = perKmElectricRaw * (1.0 - distanceReduction); double perKmVan = perKmVanRaw * (1.0 - distanceReduction); perKmComfort = perKmComfort.clamp(0, double.infinity); perKmElectric = perKmElectric.clamp(0, double.infinity); perKmVan = perKmVan.clamp(0, double.infinity); final double perKmBalash = (perKmSpeed - 5).clamp(0, double.infinity); // ====== دوال الاحتساب ====== double _oneWayFare({ required double perKm, required bool isLady, double flatAddon = 0, }) { double fare = billableDistance * perKm; fare += billableMinutes * effectivePerMin; // دقائق بعد السقف/العفو إن وُجد fare += flatAddon; if (isLady) fare += ladyFlatAddon; if (airportCtx) fare += airportAddonSYP; // --- ⬇️ الإضافة الجديدة: تطبيق إضافة حدود المطار ⬇️ --- if (damascusAirportBoundCtx || isInDamascusAirportBoundCtx) { fare += damascusAirportBoundAddon; } // --- ⬆️ نهاية الإضافة ⬆️ --- return _applyMinFare(fare); } double _roundTripFare({required double perKm}) { // خصم 40% لمسافة إياب واحدة + زمن مضاعف (بنفس قواعد الدقيقة المعدّلة) double distPart = (billableDistance * 2 * perKm) - ((billableDistance * perKm) * 0.4); double timePart = (billableMinutes * 2) * effectivePerMin; double fare = distPart + timePart; if (airportCtx) fare += airportAddonSYP; // --- ⬇️ الإضافة الجديدة: تطبيق إضافة حدود المطار ⬇️ --- // تنطبق أيضاً على رحلات الذهاب والعودة لأنها "تصل" إلى الوجهة if (damascusAirportBoundCtx || isInDamascusAirportBoundCtx) { fare += damascusAirportBoundAddon; } // --- ⬆️ نهاية الإضافة ⬆️ --- return _applyMinFare(fare); } // ====== حساب كل الفئات (Base قبل العمولة) ====== final double costSpeed = _oneWayFare(perKm: perKmSpeed, isLady: false); final double costBalash = _oneWayFare(perKm: perKmBalash, isLady: false); final double costComfort = _oneWayFare(perKm: perKmComfort, isLady: false); final double costElectric = _oneWayFare( perKm: perKmElectric, isLady: false, flatAddon: electricFlatAddon); final double costDelivery = _oneWayFare(perKm: perKmDelivery, isLady: false); final double costLady = _oneWayFare( perKm: perKmComfort, isLady: true); // Lady تعتمد Comfort بعد التخفيض + إضافة ثابتة final double costVan = _oneWayFare(perKm: perKmVan, isLady: false); final double costRayehGai = _roundTripFare(perKm: perKmSpeed); final double costRayehGaiComfort = _roundTripFare(perKm: perKmComfort); final double costRayehGaiBalash = _roundTripFare(perKm: perKmBalash); // ====== أسعار الراكب بعد العمولة (kazan من السيرفر) ====== totalPassengerSpeed = _withCommission(costSpeed); totalPassengerBalash = _withCommission(costBalash); totalPassengerComfort = _withCommission(costComfort); totalPassengerElectric = _withCommission(costElectric); totalPassengerLady = _withCommission(costLady); totalPassengerScooter = _withCommission(costDelivery); totalPassengerVan = _withCommission(costVan); totalPassengerRayehGai = _withCommission(costRayehGai); totalPassengerRayehGaiComfort = _withCommission(costRayehGaiComfort); totalPassengerRayehGaiBalash = _withCommission(costRayehGaiBalash); // افتراضي للعرض totalPassenger = totalPassengerSpeed; totalCostPassenger = totalPassenger; // ====== دعم رصيد محفظة سلبي ====== try { final walletStr = box.read(BoxName.passengerWalletTotal).toString(); final walletVal = double.tryParse(walletStr) ?? 0.0; if (walletVal < 0) { final neg = (-1) * walletVal; totalPassenger += neg; totalPassengerComfort += neg; totalPassengerElectric += neg; totalPassengerLady += neg; totalPassengerBalash += neg; totalPassengerScooter += neg; totalPassengerRayehGai += neg; totalPassengerRayehGaiComfort += neg; totalPassengerRayehGaiBalash += neg; totalPassengerVan += neg; } } catch (_) {} update(); changeBottomSheetShown(); } // addToken() async { // String fingerPrint = await DeviceHelper.getDeviceFingerprint(); // await CRUD() // .post(link: "${AppLink.server}/ride/firebase/add.php", payload: { // 'token': (box.read(BoxName.tokenFCM.toString())), // 'passengerID': box.read(BoxName.passengerID).toString(), // "fingerPrint": fingerPrint // }); // CRUD().postWallet( // link: "${AppLink.seferPaymentServer}/ride/firebase/add.php", // payload: { // 'token': (box.read(BoxName.tokenFCM.toString())), // 'passengerID': box.read(BoxName.passengerID).toString(), // "fingerPrint": fingerPrint // }); // } List polylineCoordinate = []; String? cardNumber; void readyWayPoints() { hintTextwayPointStringAll = [ hintTextwayPoint0, hintTextwayPoint1, hintTextwayPoint2, hintTextwayPoint3, hintTextwayPoint4, ]; polylineCoordinatesPointsAll = [ polylineCoordinates0, polylineCoordinates1, polylineCoordinates2, polylineCoordinates3, polylineCoordinates4, ]; allTextEditingPlaces = [ wayPoint0Controller, wayPoint1Controller, wayPoint2Controller, wayPoint3Controller, wayPoint4Controller, ]; currentLocationToFormPlacesAll = [ currentLocationToFormPlaces0, currentLocationToFormPlaces1, currentLocationToFormPlaces2, currentLocationToFormPlaces3, currentLocationToFormPlaces4, ]; placeListResponseAll = [ wayPoint0, wayPoint1, wayPoint2, wayPoint3, wayPoint4 ]; startLocationFromMapAll = [ startLocationFromMap0, startLocationFromMap1, startLocationFromMap2, startLocationFromMap3, startLocationFromMap4, ]; currentLocationStringAll = [ currentLocationString0, currentLocationString1, currentLocationString2, currentLocationString3, currentLocationString4, ]; placesCoordinate = [ placesCoordinate0, placesCoordinate1, placesCoordinate2, placesCoordinate3, placesCoordinate4, ]; update(); } List driversForMishwari = []; Future selectDriverAndCarForMishwariTrip() async { // Calculate the bounds for 20km double latitudeOffset = 0.1795; // 20km range in latitude double longitudeOffset = 0.2074; // 20km range in longitude // Calculate bounding box based on passenger's location double southwestLat = passengerLocation.latitude - latitudeOffset; double northeastLat = passengerLocation.latitude + latitudeOffset; double southwestLon = passengerLocation.longitude - longitudeOffset; double northeastLon = passengerLocation.longitude + longitudeOffset; // Create the payload with calculated bounds var payload = { 'southwestLat': southwestLat.toString(), 'northeastLat': northeastLat.toString(), 'southwestLon': southwestLon.toString(), 'northeastLon': northeastLon.toString(), }; try { // Fetch data from the API var res = await CRUD().get( link: AppLink.selectDriverAndCarForMishwariTrip, payload: payload); if (res != 'failure') { // Check if response is valid JSON try { var d = jsonDecode(res); driversForMishwari = d['message']; Log.print('driversForMishwari: $driversForMishwari'); update(); } catch (e) { // Handle invalid JSON format print("Error decoding JSON: $e"); return 'Server returned invalid data. Please try again later.'; } } else { return 'No driver available now, try again later. Thanks for using our app.' .tr; } } catch (e) { // Handle network or other exceptions print("Error fetching data: $e"); return 'There was an issue connecting to the server. Please try again later.' .tr; } } final Rx selectedDateTime = DateTime.now().obs; void updateDateTime(DateTime newDateTime) { selectedDateTime.value = newDateTime; } Future mishwariOption() async { isLoading = true; update(); // add dialoug for select driver and car await selectDriverAndCarForMishwariTrip(); Future.delayed(Duration.zero); isLoading = false; update(); Get.to(() => CupertinoDriverListWidget()); // changeCashConfirmPageShown(); } var driverIdVip = ''; Future saveTripData( Map driver, DateTime tripDateTime) async { try { // Prepare trip data Map tripData = { 'id': driver['driver_id'].toString(), // Ensure the id is a string 'phone': driver['phone'], 'gender': driver['gender'], 'name': driver['NAME'], 'name_english': driver['name_english'], 'address': driver['address'], 'religion': driver['religion'] ?? 'UnKnown', 'age': driver['age'].toString(), // Convert age to String 'education': driver['education'] ?? 'UnKnown', //startlocationname 'license_type': driver['license_type'] ?? 'UnKnown', 'national_number': driver['national_number'] ?? 'UnKnown', 'car_plate': driver['car_plate'], 'make': driver['make'], 'model': driver['model'], 'year': driver['year'].toString(), // Convert year to String 'color': driver['color'], 'color_hex': driver['color_hex'], 'displacement': driver['displacement'], 'fuel': driver['fuel'], 'token': driver['token'], 'rating': driver['rating'].toString(), // Convert rating to String 'countRide': driver['ride_count'].toString(), // Convert countRide to String 'passengerId': box.read(BoxName.passengerID), 'timeSelected': tripDateTime.toIso8601String(), 'status': 'pending', 'startNameAddress': startNameAddress.toString(), 'locationCoordinate': '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', }; Log.print('tripData: $tripData'); // Send data to server var response = await CRUD().post(link: AppLink.addMishwari, payload: tripData); // Log.print('response: $response'); if (response != 'failure') { // Trip saved successfully // Get.snackbar('Success'.tr, 'Trip booked successfully'.tr); var id = response['message']['id'].toString(); await CRUD().post( link: '${AppLink.IntaleqSyriaServer}/ride/rides/add.php', payload: { "start_location": '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', "end_location": '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', "date": DateTime.now().toString(), "time": DateTime.now().toString(), "endtime": DateTime.now().add(const Duration(hours: 2)).toString(), "price": '50', "passenger_id": box.read(BoxName.passengerID).toString(), "driver_id": driver['driver_id'].toString(), "status": "waiting", 'carType': 'vip', "price_for_driver": '50', "price_for_passenger": '50', "distance": '20', "paymentMethod": 'cash', }).then((value) { if (value is String) { final parsedValue = jsonDecode(value); rideId = parsedValue['message']; } else if (value is Map) { rideId = value['message']; } else { Log.print('Unexpected response type: ${value.runtimeType}'); } }); if (AppLink.endPoint != AppLink.IntaleqSyriaServer) { await CRUD().post( link: "${AppLink.endPoint}/ride/mishwari/add.php", payload: tripData); CRUD().post(link: '${AppLink.endPoint}/ride/rides/add.php', payload: { "start_location": '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', "end_location": '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', "date": DateTime.now().toString(), "time": DateTime.now().toString(), "endtime": DateTime.now().add(const Duration(hours: 2)).toString(), "price": '50', "passenger_id": box.read(BoxName.passengerID).toString(), "driver_id": driver['driver_id'].toString(), "status": "waiting", 'carType': 'vip', "price_for_driver": '50', "price_for_passenger": '50', "distance": '20', "paymentMethod": 'cash', }); } driverIdVip = driver['driver_id'].toString(); driverId = driver['driver_id'].toString(); DateTime timeSelected = DateTime.parse(tripDateTime.toIso8601String()); Get.find().scheduleNotificationsForTimeSelected( "Your trip is scheduled".tr, "Don't forget your ride!".tr, "tone1", timeSelected); // Optionally, set up local notification or send a push notification // await firebaseMessagesController.sendNotificationToDriverMAP( // 'OrderVIP', // rideId.toString(), // (driver['token'].toString()), // [ // id, // rideId, // driver['id'], // passengerLocation.latitude.toString(), // startNameAddress.toString(), // passengerLocation.longitude.toString(), // (box.read(BoxName.name).toString().split(' ')[0]).toString(), // box.read(BoxName.passengerID).toString(), // box.read(BoxName.phone).toString(), // box.read(BoxName.email).toString(), // box.read(BoxName.passengerPhotoUrl).toString(), // box.read(BoxName.tokenFCM).toString(), // (driver['token'].toString()), // ], // 'order'); await NotificationService.sendNotification( category: 'OrderVIP', target: driver['token'].toString(), title: 'OrderVIP'.tr, body: '$rideId - VIP Trip', isTopic: false, // Important: this is a token tone: 'tone1', driverList: [ id, rideId, driver['id'], passengerLocation.latitude.toString(), startNameAddress.toString(), passengerLocation.longitude.toString(), (box.read(BoxName.name).toString().split(' ')[0]).toString(), box.read(BoxName.passengerID).toString(), box.read(BoxName.phone).toString(), box.read(BoxName.email).toString(), box.read(BoxName.passengerPhotoUrl).toString(), box.read(BoxName.tokenFCM).toString(), (driver['token'].toString()), ], ); if (response['message'] == "Trip updated successfully") { mySnackbarSuccess("Trip updated successfully".tr); Log.print( 'previous_driver_token: ${response['previous_driver_token']}'); // firebaseMessagesController.sendNotificationToDriverMAP( // 'Order VIP Canceld'.tr, // 'Passenger cancel order'.tr, // response['previous_driver_token'].toString(), // [], // 'cancel', // ); await NotificationService.sendNotification( category: 'Order VIP Canceld', target: response['previous_driver_token'].toString(), title: 'Order VIP Canceld'.tr, body: 'Passenger cancel order'.tr, isTopic: false, // Important: this is a token tone: 'cancel', driverList: [], ); } // data = []; isBottomSheetShown = false; update(); Get.to(() => VipWaittingPage()); } else { throw Exception('Failed to save trip'); } } catch (e) { // Show error message with more details for debugging Get.snackbar('Error'.tr, 'Failed to book trip: $e'.tr, backgroundColor: AppColor.redColor); Log.print('Error: $e'); } } cancelVip(String token, tripId) async { // firebaseMessagesController.sendNotificationToDriverMAP( // 'Order VIP Canceld'.tr, // 'Passenger cancel order'.tr, // token, // [], // 'cancel', // ); var res = await CRUD() .post(link: AppLink.cancelMishwari, payload: {'id': tripId}); if (res != 'failur') { Get.back(); mySnackbarSuccess('You canceled VIP trip'.tr); } } sendToDriverAgain(String token) { NotificationService.sendNotification( category: 'Order VIP Canceld', target: token.toString(), title: 'Order VIP Canceld'.tr, body: 'Passenger cancel order'.tr, isTopic: false, // Important: this is a token tone: 'cancel', driverList: [], ); } // دالة الفحص عند بدء التطبيق Future detectAndCacheDeviceTier() async { // 1. استخدام الكلاس الذي أنشأناه سابقاً للفحص bool isHighEnd = await DevicePerformanceManager.isHighEndDevice(); // 2. طباعة النتيجة للتأكد Log.print("Device Analysis - Is Flagship/HighEnd? $isHighEnd"); // 3. تخزين النتيجة بشكل منطقي صحيح // إذا كان الجهاز قوياً (true)، فإن وضع الـ LowEnd يكون (false) // والعكس صحيح box.write(BoxName.lowEndMode, !isHighEnd); } initilizeGetStorage() async { if (box.read(BoxName.addWork) == null) { box.write(BoxName.addWork, 'addWork'); } if (box.read(BoxName.addHome) == null) { box.write(BoxName.addHome, 'addHome'); } if (box.read(BoxName.lowEndMode) == null) { detectAndCacheDeviceTier(); } } late List recentPlaces = []; getFavioratePlaces0() async { recentPlaces = await sql.getCustomQuery( 'SELECT DISTINCT latitude, longitude, name, rate FROM ${TableName.recentLocations}'); } getFavioratePlaces() async { recentPlaces = await sql.getCustomQuery( 'SELECT * FROM ${TableName.recentLocations} ORDER BY createdAt DESC'); // Log.print('recentPlaces: ${recentPlaces}'); } double passengerRate = 5; double comfortPrice = 45; double speedPrice = 40; double mashwariPrice = 40; double familyPrice = 55; double deliveryPrice = 1.2; double minFareSYP = 16000; // حد أدنى للأجرة (سوريا) double minBillableKm = 1.0; // حد أدنى للمسافة المفوترة double commissionPct = 15; // عمولة التطبيق % (راكب) getKazanPercent() async { var res = await CRUD().get( link: AppLink.getKazanPercent, payload: {'country': box.read(BoxName.countryCode).toString()}, ); if (res != 'failure') { var json = jsonDecode(res); kazan = double.parse(json['message'][0]['kazan']); naturePrice = double.parse(json['message'][0]['naturePrice']); heavyPrice = double.parse(json['message'][0]['heavyPrice']); latePrice = double.parse(json['message'][0]['latePrice']); comfortPrice = double.parse(json['message'][0]['comfortPrice']); speedPrice = double.parse(json['message'][0]['speedPrice']); deliveryPrice = double.parse(json['message'][0]['deliveryPrice']); mashwariPrice = double.parse(json['message'][0]['freePrice']); familyPrice = double.parse(json['message'][0]['familyPrice']); fuelPrice = double.parse(json['message'][0]['fuelPrice']); } } getPassengerRate() async { var res = await CRUD().get( link: AppLink.getPassengerRate, payload: {'passenger_id': box.read(BoxName.passengerID)}); if (res != 'failure') { var message = jsonDecode(res)['message']; if (message['rating'] == null) { passengerRate = 5.0; // Default rating } else { // Safely parse the rating to double var rating = message['rating']; if (rating is String) { passengerRate = double.tryParse(rating) ?? 5.0; // Default if parsing fails } else if (rating is num) { passengerRate = rating.toDouble(); // Already a number, convert to double } else { passengerRate = 5.0; // Default for unexpected data types } } } else { passengerRate = 5.0; // Default rating for failure } } addFingerPrint() async { String fingerPrint = await DeviceHelper.getDeviceFingerprint(); await CRUD().postWallet(link: AppLink.addFingerPrint, payload: { 'token': (box.read(BoxName.tokenFCM.toString())), 'passengerID': box.read(BoxName.passengerID).toString(), "fingerPrint": fingerPrint }); } firstTimeRunToGetCoupon() async { // Check if it's the first time and the app is installed and gift token is available if (box.read(BoxName.isFirstTime).toString() == '0' && box.read(BoxName.isInstall).toString() == '1' && box.read(BoxName.isGiftToken).toString() == '0') { var promo, discount, validity; var resPromo = await CRUD().get(link: AppLink.getPromoFirst, payload: { "passengerID": box.read(BoxName.passengerID).toString(), }); if (resPromo != 'failure') { var d1 = jsonDecode(resPromo); promo = d1['message']['promo_code']; discount = d1['message']['amount']; validity = d1['message']['validity_end_date']; } box.write(BoxName.isFirstTime, '1'); // Show a full-screen modal styled as an ad Get.dialog( AlertDialog( contentPadding: EdgeInsets.zero, // Removes the padding around the content content: SizedBox( width: 300, // Match the width of PromoBanner // height: 250, // Match the height of PromoBanner child: PromoBanner( promoCode: promo, discountPercentage: discount, validity: validity, ), ), ), ); } } // --- دالة جديدة للاستماع ومعالجة الرابط --- void _listenForDeepLink() { // استمع إلى أي تغيير في الإحداثيات القادمة من الرابط ever(_deepLinkController.deepLinkLatLng, (LatLng? latLng) { if (latLng != null) { print('MapPassengerController detected deep link LatLng: $latLng'); // عندما يتم استلام إحداثيات جديدة، عينها كوجهة myDestination = latLng; // قم بتشغيل المنطق الخاص بك لعرض المسار // (تأكد من أن `passengerLocation` لديها قيمة أولاً) if (passengerLocation != null) { getDirectionMap( '${passengerLocation.latitude},${passengerLocation.longitude}', '${myDestination.latitude},${myDestination.longitude}'); } else { // يمكنك إظهار رسالة للمستخدم لتمكين الموقع أولاً print( 'Cannot process deep link route yet, passenger location is null.'); } // إعادة تعيين القيمة إلى null لمنع التشغيل مرة أخرى عند إعادة بناء الواجهة _deepLinkController.deepLinkLatLng.value = null; } }); } @override void onInit() async { super.onInit(); // // --- إضافة جديدة: تهيئة وحدة التحكم في الروابط العميقة --- Get.put(DeepLinkController(), permanent: true); // // ---------------------------------------------------- // مرحلة 0: الضروري جداً لعرض الخريطة سريعاً // mapAPIKEY = await storage.read(key: BoxName.mapAPIKEY); await initilizeGetStorage(); // إعداد سريع await _initMinimalIcons(); // start/end فقط // await addToken(); // لو لازم للمصادقة _listenForDeepLink(); await getLocation(); // لتحديد الكاميرا box.write(BoxName.carType, 'yet'); box.write(BoxName.tipPercentage, '0'); // await detectAndCacheDeviceTier(); // لا تُنشئ Controllers الثقيلة الآن: Get.lazyPut(() => TextToSpeechController(), fenix: true); Get.lazyPut(() => FirebaseMessagesController(), fenix: true); Get.lazyPut(() => AudioRecorderController(), fenix: true); // ابدأ الخريطة الآن (الشاشة ظهرت للمستخدم) // لاحقاً: استخدم SchedulerBinding.instance.addPostFrameCallback إذا احتجت. // مرحلة 1: مهام ضرورية للتسعير لكن غير حرجة لظهور UI unawaited(_stagePricingAndState()); // مرحلة 2: تحسينات/كماليات بالخلفية unawaited(_stageNiceToHave()); // ابدأ إعادة تحميل الماركر لكن بثروتل داخلي // startMarkerReloading(); // تأكد أنه مَخنوق التحديث (throttled) _startMasterTimer(); } // === Helpers === Future _initMinimalIcons() async { addCustomStartIcon(); addCustomEndIcon(); // أجّل باقي الأيقونات: // addCustomCarIcon(), addCustomLadyIcon(), addCustomMotoIcon(), addCustomStepIcon() } Future _stagePricingAndState() async { try { await getKazanPercent(); // أسعار السيرفر } catch (_) {} try { _checkInitialRideStatus(); // تحقق من حالة الرحلة الحالية } catch (_) {} // لو عندك ضبط “وضع خفيف” حسب الجهاز: _applyLowEndModeIfNeeded(); } Future _stageNiceToHave() async { // نفّذ بالتوازي await Future.wait([ Future(() async { try { getFavioratePlaces(); } catch (_) {} }), Future(() async { try { readyWayPoints(); } catch (_) {} }), Future(() async { try { addCustomPicker(); } catch (_) {} }), Future(() async { try { addCustomCarIcon(); } catch (_) {} }), Future(() async { try { addCustomLadyIcon(); } catch (_) {} }), Future(() async { try { addCustomMotoIcon(); } catch (_) {} }), Future(() async { try { addCustomStepIcon(); } catch (_) {} }), Future(() async { try { getPassengerRate(); } catch (_) {} }), Future(() async { try { firstTimeRunToGetCoupon(); } catch (_) {} }), ]); try { cardNumber = await SecureStorage().readData(BoxName.cardNumber); } catch (_) {} } void _applyLowEndModeIfNeeded() { // مثال بسيط: يمكنك حفظ فلاج بنظامك (من السيرفر/الإعدادات/الكاش) لتفعيل وضع خفيف // لاحقاً فعّل: map.trafficEnabled=false, buildingsEnabled=false, تبسيط polylines... // controller.lowEndMode = true; } uploadPassengerLocation() async { await CRUD().post(link: AppLink.addpassengerLocation, payload: { "passengerId": box.read(BoxName.passengerID), "lat": passengerLocation.latitude.toString(), "lng": passengerLocation.longitude.toString(), "rideId": rideId.toString() }); } } class CarLocation { final String id; final double latitude; final double longitude; final double distance; final double duration; CarLocation({ required this.id, required this.latitude, required this.longitude, this.distance = 10000, this.duration = 10000, }); } ================================================== FILE PATH: ./lib/controller/home/splash_screen_controlle.dart ================================================== import 'dart:async'; import 'dart:math'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/onbording_page.dart'; import 'package:Intaleq/views/auth/login_page.dart'; import 'package:Intaleq/controller/auth/login_controller.dart'; import 'package:Intaleq/controller/functions/secure_storage.dart'; import 'package:quick_actions/quick_actions.dart'; import '../../../constant/notification.dart'; import '../../../main.dart'; import '../firebase/firbase_messge.dart'; import '../firebase/local_notification.dart'; import '../functions/encrypt_decrypt.dart'; class SplashScreenController extends GetxController with GetTickerProviderStateMixin { late AnimationController _animationController; late Animation titleFadeAnimation, titleScaleAnimation, taglineFadeAnimation, footerFadeAnimation; late Animation taglineSlideAnimation; final progress = 0.0.obs; Timer? _progressTimer; @override void onInit() { super.onInit(); _animationController = AnimationController( vsync: this, duration: const Duration(milliseconds: 2000)); // Animation definitions titleFadeAnimation = Tween(begin: 0.0, end: 1.0).animate( CurvedAnimation( parent: _animationController, curve: const Interval(0.0, 0.5, curve: Curves.easeOut))); titleScaleAnimation = Tween(begin: 0.8, end: 1.0).animate( CurvedAnimation( parent: _animationController, curve: const Interval(0.0, 0.5, curve: Curves.easeOut))); taglineFadeAnimation = Tween(begin: 0.0, end: 1.0).animate( CurvedAnimation( parent: _animationController, curve: const Interval(0.3, 0.8, curve: Curves.easeOut))); taglineSlideAnimation = Tween(begin: const Offset(0, 0.5), end: Offset.zero).animate( CurvedAnimation( parent: _animationController, curve: const Interval(0.3, 0.8, curve: Curves.easeOut))); footerFadeAnimation = Tween(begin: 0.0, end: 1.0).animate( CurvedAnimation( parent: _animationController, curve: const Interval(0.5, 1.0, curve: Curves.easeOut))); _animationController.forward(); _initializeApp(); } Future _initializeApp() async { _startProgressAnimation(); // Run navigation logic and background services in parallel. final logicFuture = _performNavigationLogic(); final backgroundServicesFuture = _initializeBackgroundServices(); // Ensure the splash screen is visible for a minimum duration. final minTimeFuture = Future.delayed(const Duration(seconds: 3)); // Wait for all tasks to complete. await Future.wait([logicFuture, backgroundServicesFuture, minTimeFuture]); } void _startProgressAnimation() { // Visual timer for the progress bar. const totalTime = 2800; // ms const interval = 50; // ms int elapsed = 0; _progressTimer = Timer.periodic(const Duration(milliseconds: interval), (timer) { elapsed += interval; progress.value = (elapsed / totalTime).clamp(0.0, 1.0); if (elapsed >= totalTime) timer.cancel(); }); } /// Initializes all heavy background services while the splash animation is running. Future _initializeBackgroundServices() async { try { await EncryptionHelper.initialize(); // --- [LAZY LOADING IN ACTION] --- // This `Get.find()` call will create the NotificationController instance // for the first time because it was defined with `lazyPut`. final notificationController = Get.find(); await notificationController.initNotifications(); // The same happens for FirebaseMessagesController. final fcm = Get.find(); await fcm.requestFirebaseMessagingPermission(); _scheduleDailyNotifications(notificationController); _initializeQuickActions(); } catch (e, st) { CRUD.addError('background_init_error: $e', st.toString(), 'SplashScreen'); } } /// Determines the next screen based on user's login state. Future _performNavigationLogic() async { await _getPackageInfo(); SecureStorage().saveData('iss', 'mobile-app:'); if (box.read(BoxName.onBoarding) == null) { Get.off(() => OnBoardingPage()); } else if (box.read(BoxName.email) != null && box.read(BoxName.phone) != null && box.read(BoxName.isVerified) == '1') { // `Get.find()` creates the LoginController instance here. final loginController = Get.find(); // The loginController itself will handle navigation via Get.offAll() upon success. await loginController.loginUsingCredentials( box.read(BoxName.passengerID).toString(), box.read(BoxName.email).toString(), ); } else { Get.off(() => LoginPage()); } } Future _getPackageInfo() async { try { final info = await PackageInfo.fromPlatform(); box.write(BoxName.packagInfo, info.version); update(); } catch (e) { print("Could not get package info: $e"); } } void _scheduleDailyNotifications(NotificationController controller) { try { final List msgs = passengerMessages ?? const []; if (msgs.isEmpty) { controller.scheduleNotificationsForSevenDays( 'Intaleq', 'مرحباً بك! تابع رحلاتك بأمان مع انطلق.', "tone1"); } else { final rnd = Random(); final raw = msgs[rnd.nextInt(msgs.length)]; final parts = raw.split(':'); final title = parts.isNotEmpty ? parts.first.trim() : 'Intaleq'; final body = parts.length > 1 ? parts.sublist(1).join(':').trim() : 'مرحباً بك! تابع رحلاتك بأمان مع انطلق.'; controller.scheduleNotificationsForSevenDays( title.isEmpty ? 'Intaleq' : title, body.isEmpty ? 'مرحباً بك! تابع رحلاتك بأمان مع انطلق.' : body, "tone1"); } } catch (e, st) { CRUD.addError('notif_init: $e', st.toString(), 'SplashScreen'); } } void _initializeQuickActions() { final QuickActions quickActions = QuickActions(); quickActions.initialize((String shortcutType) { Get.toNamed('/$shortcutType'); }); quickActions.setShortcutItems([ ShortcutItem( type: 'shareApp', localizedTitle: 'Share App'.tr, icon: 'icon_share'), ShortcutItem( type: 'wallet', localizedTitle: 'Wallet'.tr, icon: 'icon_wallet'), ShortcutItem( type: 'profile', localizedTitle: 'Profile'.tr, icon: 'icon_user'), ShortcutItem( type: 'contactSupport', localizedTitle: 'Contact Support'.tr, icon: 'icon_support'), ]); } @override void onClose() { _progressTimer?.cancel(); _animationController.dispose(); super.onClose(); } } ================================================== FILE PATH: ./lib/controller/home/blinking_promo_controller.dart.dart ================================================== import 'dart:async'; import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../constant/links.dart'; import '../../views/widgets/elevated_btn.dart'; import '../functions/crud.dart'; class BlinkingController extends GetxController { final promoFormKey = GlobalKey(); final promo = TextEditingController(); bool promoTaken = false; void applyPromoCodeToPassenger() async { //TAWJIHI if (promoFormKey.currentState!.validate()) { CRUD().get(link: AppLink.getPassengersPromo, payload: { 'promo_code': promo.text, }).then((value) { if (value == 'failure') { Get.defaultDialog( title: 'Promo End !'.tr, confirm: MyElevatedButton( title: 'Back', onPressed: () { Get.back(); Get.back(); }, )); } var decode = jsonDecode(value); // if (decode["status"] == "success") { // var firstElement = decode["message"][0]; // if (double.parse(box.read(BoxName.passengerWalletTotal)) < 0) { // totalPassenger = totalCostPassenger - // (totalCostPassenger * int.parse(firstElement['amount']) / 100); // update(); // } else { // totalPassenger = totalCostPassenger - // (totalCostPassenger * int.parse(firstElement['amount']) / 100); // update(); // } // totalDriver = totalDriver - // (totalDriver * int.parse(firstElement['amount']) / 100); // promoTaken = true; // update(); // Get.back(); // } }); } } // Reactive variable for blinking (on/off) var isLightOn = false.obs; // To animate the border color var borderColor = Colors.black.obs; Timer? _blinkingTimer; // Method to start blinking for 5 seconds void startBlinking() { int count = 0; _blinkingTimer = Timer.periodic(const Duration(seconds: 1), (timer) { // Toggle light on/off isLightOn.value = !isLightOn.value; borderColor.value = isLightOn.value ? Colors.yellow : Colors.black; // Animate border color count++; // Stop blinking after 5 seconds if (count >= 35) { timer.cancel(); isLightOn.value = false; // Ensure light turns off borderColor.value = Colors.black; // Reset the border color } }); } @override void onClose() { _blinkingTimer?.cancel(); super.onClose(); } } ================================================== FILE PATH: ./lib/controller/home/home_page_controller.dart ================================================== import 'package:get/get.dart'; import '../../constant/box_name.dart'; import '../../main.dart'; class HomePageController extends GetxController { late bool isVibrate = box.read(BoxName.isvibrate) ?? true; void changeVibrateOption(bool value) { isVibrate = box.read(BoxName.isvibrate) ?? true; isVibrate = value; box.write(BoxName.isvibrate, value); update(); } } ================================================== FILE PATH: ./lib/controller/home/payment/captain_wallet_controller.dart ================================================== import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:Intaleq/main.dart'; class CaptainWalletController extends GetxController { bool isLoading = false; Map walletDate = {}; Map walletDateVisa = {}; Map walletDriverPointsDate = {}; final formKey = GlobalKey(); String totalAmount = '0'; String totalAmountVisa = '0'; String totalPoints = '0'; final amountFromBudgetController = TextEditingController(); payFromBudget() async { if (formKey.currentState!.validate()) { var pointFromBudget = box.read(BoxName.countryCode) == 'Jordan' ? int.parse((amountFromBudgetController.text)) * 100 : int.parse((amountFromBudgetController.text)); await addDriverPayment('fromBudgetToPoints', int.parse((amountFromBudgetController.text)) * -1); Future.delayed(const Duration(seconds: 2)); await addDriverWallet('fromBudget', pointFromBudget.toString()); update(); Get.back(); // getCaptainWalletFromRide(); // getCaptainWalletFromBuyPoints(); // checkAccountCaptainBank(); } } // Future getCaptainWalletFromRide() async { // isLoading = true; // update(); // var res = await CRUD().get( // link: AppLink.getAllPaymentFromRide, // payload: {'driverID': box.read(BoxName.driverID)}, // ); // walletDate = jsonDecode(res); // totalAmount = walletDate['message'][0]['total_amount'].toString() == null // ? '0' // : walletDate['message'][0]['total_amount']; // var res1 = await CRUD().get( // link: AppLink.getAllPaymentVisa, // payload: {'driverID': box.read(BoxName.driverID)}); // walletDateVisa = jsonDecode(res1); // totalAmountVisa = walletDateVisa['message'][0]['diff'].toString() == null // ? '0' // : walletDateVisa['message'][0]['diff']; // isLoading = false; // update(); // } // Future getCaptainWalletFromBuyPoints() async { // isLoading = true; // update(); // var res = await CRUD().get( // link: AppLink.getDriverPaymentPoints, // payload: {'driverID': box.read(BoxName.driverID)}, // ); // walletDriverPointsDate = jsonDecode(res); // if (walletDriverPointsDate['message'][0]['driverID'].toString() == // box.read(BoxName.driverID)) { // double totalPointsDouble = double.parse( // walletDriverPointsDate['message'][0]['total_amount'].toString()); // totalPoints = totalPointsDouble.toStringAsFixed(0); // } else { // totalPoints = '0'; // } // isLoading = false; // update(); // } late String paymentID; Future addDriverPayment(String paymentMethod, amount) async { var res = await CRUD().postWallet(link: AppLink.addDriverPaymentPoints, payload: { 'driverID': box.read(BoxName.driverID).toString(), 'amount': amount.toString(), 'payment_method': paymentMethod.toString(), }); var d = jsonDecode(res); paymentID = d['message'].toString(); } Future addDriverWallet(String paymentMethod, point) async { await CRUD().postWallet(link: AppLink.addDriversWalletPoints, payload: { 'driverID': box.read(BoxName.driverID).toString(), 'paymentID': paymentID.toString(), 'amount': point, 'paymentMethod': paymentMethod.toString(), }); } //check if account bank is created or not Future checkAccountCaptainBank() async { isLoading = false; update(); if (box.read(BoxName.accountIdStripeConnect).toString().isEmpty) { var res = await CRUD().getWallet(link: AppLink.getAccount, payload: { 'id': box.read(BoxName.driverID).toString(), }); var d = jsonDecode(res); if (d['status'] != 'failure') { box.write(BoxName.accountIdStripeConnect, d['message'][0]['accountBank'].toString()); } } isLoading = true; update(); } @override void onInit() { // getCaptainWalletFromRide(); // getCaptainWalletFromBuyPoints(); // checkAccountCaptainBank(); super.onInit(); } } ================================================== FILE PATH: ./lib/controller/home/payment/credit_card_Controller.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../../constant/box_name.dart'; import '../../functions/digit_obsecur_formate.dart'; import '../../functions/secure_storage.dart'; class CreditCardController extends GetxController { final GlobalKey formKey = GlobalKey(); final TextEditingController cardNumberController = TextEditingController(); final TextEditingController cardHolderNameController = TextEditingController(); final TextEditingController expiryDateController = TextEditingController(); final TextEditingController cvvCodeController = TextEditingController(); openPayment() async { String? cardNumber = await SecureStorage().readData(BoxName.cardNumber); String? cardHolderName = await SecureStorage().readData(BoxName.cardHolderName); String? expiryDate = await SecureStorage().readData(BoxName.expiryDate); String? cvvCode = await SecureStorage().readData(BoxName.cvvCode); // if (cvvCode != null && cvvCode.isNotEmpty) { // final maskedCardNumber = DigitObscuringFormatter() // .formatEditUpdate( // TextEditingValue.empty, // TextEditingValue(text: cardNumber ?? ''), // ) // .text; // cardNumberController.text = maskedCardNumber; // cardHolderNameController.text = cardHolderName ?? ''; // expiryDateController.text = expiryDate ?? ''; // cvvCodeController.text = cvvCode; // } } @override void onInit() async { super.onInit(); openPayment(); // String? cardNumber = await SecureStorage().readData(BoxName.cardNumber); // String? cardHolderName = // await SecureStorage().readData(BoxName.cardHolderName); // String? expiryDate = await SecureStorage().readData(BoxName.expiryDate); // String? cvvCode = await SecureStorage().readData(BoxName.cvvCode); // if (cvvCode != null && cvvCode.isNotEmpty) { // final maskedCardNumber = DigitObscuringFormatter() // .formatEditUpdate( // TextEditingValue.empty, // TextEditingValue(text: cardNumber ?? ''), // ) // .text; // cardNumberController.text = maskedCardNumber; // cardHolderNameController.text = cardHolderName ?? ''; // expiryDateController.text = expiryDate ?? ''; // cvvCodeController.text = cvvCode; // } } } class CreditCardModel { String cardNumber; String cardHolderName; String expiryDate; String cvvCode; CreditCardModel({ required this.cardNumber, required this.cardHolderName, required this.expiryDate, required this.cvvCode, }); } ================================================== FILE PATH: ./lib/controller/home/profile/promos_controller.dart ================================================== import 'dart:convert'; import 'package:Intaleq/constant/box_name.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import '../../../main.dart'; class PromosController extends GetxController { List promoList = []; bool isLoading = true; late String promos; @override void onInit() { getPromoByToday(); super.onInit(); } Future getPromoByToday() async { var res = await CRUD().get(link: AppLink.getPromoBytody, payload: { 'passengerID': box.read(BoxName.passengerID).toString(), }); if (res.toString() == 'failure') { // Get.defaultDialog( // title: 'No Promo for today .'.tr, // middleText: '', // titleStyle: AppStyle.title, // confirm: MyElevatedButton( // title: 'Back'.tr, // onPressed: () { // Get.back(); // Get.back(); // })); isLoading = false; update(); } else { var jsonDecoded = jsonDecode(res); promoList = jsonDecoded['message']; isLoading = false; update(); } } } ================================================== FILE PATH: ./lib/controller/home/profile/invit_controller.dart ================================================== import 'dart:convert'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:flutter/material.dart'; import 'package:flutter_contacts/flutter_contacts.dart'; import 'package:get/get.dart'; import 'package:share_plus/share_plus.dart'; import '../../../main.dart'; import '../../../print.dart'; import '../../../views/widgets/error_snakbar.dart'; import '../../../views/widgets/mydialoug.dart'; import '../../functions/launch.dart'; import '../../notification/notification_captain_controller.dart'; import '../../payment/payment_controller.dart'; class InviteController extends GetxController { final TextEditingController invitePhoneController = TextEditingController(); List driverInvitationData = []; List driverInvitationDataToPassengers = []; String? couponCode; String? driverCouponCode; int selectedTab = 0; PassengerStats passengerStats = PassengerStats(); List contacts = []; RxList> contactMaps = >[].obs; @override void onInit() { super.onInit(); // It's good practice to fetch initial data in onInit or onReady // fetchDriverStats(); // fetchDriverStatsPassengers(); } void updateSelectedTab(int index) { selectedTab = index; update(); } // --- Sharing Methods --- Future shareDriverCode() async { if (driverCouponCode != null) { final String shareText = ''' ${'Join Intaleq as a driver using my referral code!'.tr} ${'Use code:'.tr} $driverCouponCode ${'Download the Intaleq Driver app now and earn rewards!'.tr} '''; await Share.share(shareText); } } Future sharePassengerCode() async { if (couponCode != null) { final String shareText = ''' ${'Get a discount on your first Intaleq ride!'.tr} ${'Use my referral code:'.tr} $couponCode ${'Download the Intaleq app now and enjoy your ride!'.tr} '''; await Share.share(shareText); } } // --- Data Fetching --- void fetchDriverStats() async { try { var response = await CRUD().get(link: AppLink.getInviteDriver, payload: { "driverId": box.read(BoxName.driverID), }); if (response != 'failure') { var data = jsonDecode(response); driverInvitationData = data['message']; update(); } } catch (e) { Log.print("Error fetching driver stats: $e"); } } void fetchDriverStatsPassengers() async { try { var response = await CRUD() .get(link: AppLink.getDriverInvitationToPassengers, payload: { "driverId": box.read(BoxName.passengerID), }); if (response != 'failure') { var data = jsonDecode(response); driverInvitationDataToPassengers = data['message']; update(); } } catch (e) { Log.print("Error fetching passenger stats: $e"); } } // --- Contact Handling --- /// **IMPROVEMENT**: This function now filters out contacts without any phone numbers. /// This is the fix for the `RangeError` you were seeing, which happened when the UI /// tried to access the first phone number of a contact that had none. Future pickContacts() async { try { if (await FlutterContacts.requestPermission(readonly: true)) { final List allContacts = await FlutterContacts.getContacts(withProperties: true); final int totalContactsOnDevice = allContacts.length; // **FIX**: Filter contacts to only include those with at least one phone number. contacts = allContacts.where((c) => c.phones.isNotEmpty).toList(); final int contactsWithPhones = contacts.length; if (contactsWithPhones > 0) { Log.print('Found $contactsWithPhones contacts with phone numbers.'); contactMaps.value = contacts.map((contact) { return { 'name': contact.displayName, 'phones': contact.phones.map((p) => p.number).toList(), 'emails': contact.emails.map((e) => e.address).toList(), }; }).toList(); update(); // **IMPROVEMENT**: Provide feedback if some contacts were filtered out. if (contactsWithPhones < totalContactsOnDevice) { Get.snackbar('Contacts Loaded'.tr, '${'Showing'.tr} $contactsWithPhones ${'of'.tr} $totalContactsOnDevice ${'contacts. Others were hidden because they don\'t have a phone number.'.tr}', snackPosition: SnackPosition.BOTTOM); } } else { Get.snackbar('No contacts found'.tr, 'No contacts with phone numbers were found on your device.'.tr); } } else { Get.snackbar('Permission denied'.tr, 'Contact permission is required to pick contacts'.tr); } } catch (e) { Log.print('Error picking contacts: $e'); Get.snackbar( 'Error'.tr, 'An error occurred while picking contacts: $e'.tr); } } void selectPhone(String phone) { invitePhoneController.text = phone; update(); Get.back(); } /// **IMPROVEMENT**: A new robust function to format phone numbers specifically for Syria (+963). /// It handles various user inputs gracefully to produce a standardized international format. String _formatSyrianPhoneNumber(String phone) { // 1. Remove all non-digit characters to clean the input. String digitsOnly = phone.replaceAll(RegExp(r'\D'), ''); // 2. If it already starts with the country code, we assume it's correct. if (digitsOnly.startsWith('963')) { return '$digitsOnly'; } // 3. If it starts with '09' (common local format), remove the leading '0'. if (digitsOnly.startsWith('09')) { digitsOnly = digitsOnly.substring(1); } // 4. Prepend the Syrian country code. return '963$digitsOnly'; } /// **IMPROVEMENT**: This method now uses the new phone formatting logic and /// sends a much-improved, user-friendly WhatsApp message. void sendInviteToPassenger() async { if (invitePhoneController.text.isEmpty || invitePhoneController.text.length < 9) { mySnackeBarError('Please enter a correct phone'.tr); return; } try { // Use the new formatting function to ensure the number is correct. String formattedPhoneNumber = _formatSyrianPhoneNumber(invitePhoneController.text); var response = await CRUD().post(link: AppLink.addInvitationPassenger, payload: { "driverId": box.read(BoxName.passengerID), "inviterPassengerPhone": formattedPhoneNumber, }); if (response != 'failure') { var d = response; Get.snackbar('Success'.tr, 'Invite sent successfully'.tr, backgroundColor: Colors.green, colorText: Colors.white); String expirationTime = d['message']['expirationTime'].toString(); String inviteCode = d['message']['inviteCode'].toString(); // New and improved WhatsApp message for better user engagement. String message = "👋 ${'Hello! I\'m inviting you to try Intaleq.'.tr}\n\n" "🎁 ${'Use my invitation code to get a special gift on your first ride!'.tr}\n\n" "${'Your personal invitation code is:'.tr}\n" "*$inviteCode*\n\n" "⏳ ${'Be sure to use it quickly! This code expires at'.tr} *$expirationTime*.\n\n" "📲 ${'Download the app now:'.tr}\n" "• *Android:* https://play.google.com/store/apps/details?id=com.Intaleq.intaleq\n" "• *iOS:* https://apps.apple.com/st/app/intaleq-rider/id6748075179\n\n" "${'See you on the road!'.tr} 🚗"; launchCommunication('whatsapp', formattedPhoneNumber, message); invitePhoneController.clear(); update(); } else { Get.snackbar( 'Error'.tr, "This phone number has already been invited.".tr, backgroundColor: AppColor.redColor, duration: const Duration(seconds: 4)); } } catch (e) { Log.print("Error sending invite: $e"); Get.snackbar( 'Error'.tr, 'An unexpected error occurred. Please try again.'.tr, backgroundColor: AppColor.redColor); } } // This function is dependent on the `pickContacts` method filtering out contacts without phones. savePhoneToServer() async { for (var contactMap in contactMaps) { // The `pickContacts` function ensures the 'phones' list is not empty here. var phones = contactMap['phones'] as List; var res = await CRUD().post(link: AppLink.savePhones, payload: { "name": contactMap['name'] ?? 'No Name', "phones": phones.first, // Safely access the first phone number "phones2": phones.join(', '), }); if (res == 'failure') { Log.print('Failed to save contact: ${contactMap['name']}'); } } } void onSelectPassengerInvitation(int index) async { try { final invitation = driverInvitationDataToPassengers[index]; final tripCount = int.tryParse(invitation['countOfInvitDriver'].toString()) ?? 0; final passengerName = invitation['passengerName'].toString(); final isGiftTaken = invitation['isGiftToken'].toString() == '1'; if (tripCount >= 2) { // Gift can be claimed if (!isGiftTaken) { MyDialog().getDialog( 'You deserve the gift'.tr, '${'Claim your 20 LE gift for inviting'.tr} $passengerName!', () async { Get.back(); // Close dialog first await Get.find().addPassengersWallet('20'); await CRUD().post( link: AppLink.updatePassengerGift, payload: {'id': invitation['id']}, ); NotificationCaptainController().addNotificationCaptain( invitation['passengerInviterId'].toString(), "You have got a gift for invitation".tr, '${"You have earned 20".tr} ${'LE'}', false, ); fetchDriverStatsPassengers(); // Refresh list }, ); } else { MyDialog().getDialog( "Gift Already Claimed".tr, "You have already received your gift for inviting $passengerName." .tr, () => Get.back(), ); } } else { // Gift not yet earned MyDialog().getDialog( '${'Keep it up!'.tr}', '$passengerName ${'has completed'.tr} $tripCount / 2 ${'trips'.tr}. ${"You can claim your gift once they complete 2 trips.".tr}', () => Get.back(), ); } } catch (e) { Log.print("Error in onSelectPassengerInvitation: $e"); } } } class PassengerStats { final int totalInvites; final int activeUsers; final double totalEarnings; PassengerStats({ this.totalInvites = 0, this.activeUsers = 0, this.totalEarnings = 0.0, }); } ================================================== FILE PATH: ./lib/controller/home/profile/complaint_controller.dart ================================================== import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:http/http.dart' as http; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:Intaleq/main.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:http_parser/http_parser.dart'; import 'package:mime/mime.dart'; import '../../../constant/api_key.dart'; import '../../../env/env.dart'; import '../../../print.dart'; import '../../../views/widgets/mydialoug.dart'; import '../../functions/encrypt_decrypt.dart'; class ComplaintController extends GetxController { bool isLoading = false; final formKey = GlobalKey(); final complaintController = TextEditingController(); List feedBack = []; Map? passengerReport; Map? driverReport; var isUploading = false.obs; var uploadSuccess = false.obs; String audioLink = ''; // سيتم تخزين رابط الصوت هنا بعد الرفع @override void onInit() { super.onInit(); getLatestRidesForPassengers(); } // --- دالة مخصصة لعرض إشعارات Snackbar بشكل جميل --- void _showCustomSnackbar(String title, String message, {bool isError = false}) { Get.snackbar( '', // العنوان سيتم التعامل معه عبر titleText '', // الرسالة سيتم التعامل معها عبر messageText titleText: Text(title.tr, style: const TextStyle( color: Colors.white, fontWeight: FontWeight.bold, fontSize: 16)), messageText: Text(message.tr, style: const TextStyle(color: Colors.white, fontSize: 14)), backgroundColor: isError ? AppColor.redColor.withOpacity(0.95) : const Color.fromARGB(255, 6, 148, 79).withOpacity(0.95), icon: Icon(isError ? Icons.error_outline : Icons.check_circle_outline, color: Colors.white, size: 28), borderRadius: 12, margin: const EdgeInsets.all(15), padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 18), snackPosition: SnackPosition.BOTTOM, duration: const Duration(seconds: 4), colorText: Colors.white, ); } // --- هذه الدالة تبقى كما هي لجلب بيانات الرحلة --- getLatestRidesForPassengers() async { isLoading = true; update(); var res = await CRUD().get(link: AppLink.getFeedBack, payload: { 'passengerId': box.read(BoxName.passengerID).toString(), }); if (res != 'failure') { var d = jsonDecode(res)['message']; feedBack = d; } isLoading = false; update(); } // --- تم تحديث الهيدر في هذه الدالة --- Future uploadAudioFile(File audioFile) async { try { isUploading.value = true; update(); var uri = Uri.parse('${AppLink.IntaleqSyriaServer}/upload_audio.php'); var request = http.MultipartRequest('POST', uri); String token = r(box.read(BoxName.jwt)).toString().split(Env.addd)[0]; var mimeType = lookupMimeType(audioFile.path); // ** التعديل: تم استخدام نفس هيدر التوثيق ** request.headers.addAll({ 'Authorization': 'Bearer $token', }); request.files.add( await http.MultipartFile.fromPath( 'audio', audioFile.path, contentType: mimeType != null ? MediaType.parse(mimeType) : null, ), ); var response = await request.send(); var responseBody = await http.Response.fromStream(response); if (response.statusCode == 200) { var jsonResponse = jsonDecode(responseBody.body); if (jsonResponse['status'] == 'Audio file uploaded successfully.') { uploadSuccess.value = true; audioLink = jsonResponse['link']; // تخزين الرابط في المتغير Get.back(); // استخدام الـ Snackbar الجديد _showCustomSnackbar('Success', 'Audio uploaded successfully.'); } else { uploadSuccess.value = false; _showCustomSnackbar('Error', 'Failed to upload audio file.', isError: true); } } else { uploadSuccess.value = false; _showCustomSnackbar('Error', 'Server error: ${response.statusCode}', isError: true); } } catch (e) { uploadSuccess.value = false; _showCustomSnackbar( 'Error', 'An application error occurred during upload.', isError: true); } finally { isUploading.value = false; update(); } } // --- الدالة الجديدة التي تتصل بالسكريبت الجديد --- Future submitComplaintToServer() async { // 1. التحقق من صحة الفورم if (!formKey.currentState!.validate() || complaintController.text.isEmpty) { // استخدام الـ Snackbar الجديد _showCustomSnackbar( 'Error', 'Please describe your issue before submitting.', isError: true); return; } // 2. التحقق من وجود بيانات الرحلة if (feedBack.isEmpty) { // استخدام الـ Snackbar الجديد _showCustomSnackbar( 'Error', 'Ride information not found. Please refresh the page.', isError: true); return; } isLoading = true; update(); try { // 3. استخراج البيانات المطلوبة final rideId = feedBack[0]['id'].toString(); // ! تأكد أن اسم حقل ID صحيح final complaint = complaintController.text; String token = r(box.read(BoxName.jwt)).toString().split(Env.addd)[0]; // 4. استدعاء سكربت PHP الجديد باستخدام http.post final response = await http.post( Uri.parse(AppLink.add_solve_all), headers: {'Authorization': 'Bearer $token'}, body: { 'ride_id': rideId, 'complaint_text': complaint, 'audio_link': audioLink, }, ); Log.print('Server Response: ${response.body}'); if (response.statusCode != 200) { _showCustomSnackbar( 'Error', 'Failed to connect to the server. Please try again.', isError: true); return; } // 5. التعامل مع محتوى الرد من الخادم final responseData = jsonDecode(response.body); if (responseData['status'] == 'success') { passengerReport = responseData['data']['passenger_response']; driverReport = responseData['data']['driver_response']; update(); MyDialogContent().getDialog( 'Success'.tr, Text('Your complaint has been submitted.'.tr), () { Get.back(); complaintController.clear(); audioLink = ''; formKey.currentState?.reset(); }); } else { String errorMessage = responseData['message'] ?? 'An unknown server error occurred'.tr; _showCustomSnackbar('Submission Failed', errorMessage, isError: true); } } catch (e) { Log.print("Submit Complaint Error: $e"); _showCustomSnackbar('Error', 'An application error occurred.'.tr, isError: true); } finally { isLoading = false; update(); } } } ================================================== FILE PATH: ./lib/controller/home/profile/order_history_controller.dart ================================================== import 'dart:convert'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:Intaleq/main.dart'; class OrderHistoryController extends GetxController { List orderHistoryListPassenger = []; bool isloading = true; @override void onInit() { getOrderHistoryByPassenger(); super.onInit(); } Future getOrderHistoryByPassenger() async { var res = await CRUD().get(link: AppLink.getRides, payload: { 'passenger_id': box.read(BoxName.passengerID).toString(), }); if (res.toString() == 'failure') { // Get.snackbar('failure', 'message'); isloading = false; update(); } else { var jsonDecoded = jsonDecode(res); orderHistoryListPassenger = jsonDecoded['data']; isloading = false; update(); } } } ================================================== FILE PATH: ./lib/controller/rate/rate_conroller.dart ================================================== import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:Intaleq/controller/home/map_passenger_controller.dart'; import 'package:Intaleq/main.dart'; import 'package:Intaleq/views/home/map_page_passenger.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import '../firebase/notification_service.dart'; import '../payment/payment_controller.dart'; // import '../home/captin/home_captain_controller.dart'; class RateController extends GetxController { double selectedRateItemId = -1; TextEditingController comment = TextEditingController(); String? rideId, passengerId, driverId, driverName, price; late GlobalKey formKey; @override void onInit() { formKey = GlobalKey(); passengerId = Get.arguments['passengerId']; rideId = Get.arguments['rideId']; driverId = Get.arguments['driverId']; driverName = Get.arguments['driverName']; price = Get.arguments['price']; box.write(BoxName.tipPercentage, '0'); super.onInit(); } void selectRateItem(double id) { selectedRateItemId = id; update(); } addRateToDriver() async { if (selectedRateItemId < 1) { Get.defaultDialog( title: 'You Should choose rate figure'.tr, titleStyle: AppStyle.title, middleText: '', confirm: MyElevatedButton(title: 'Ok', onPressed: () => Get.back())); } else if (Get.find().isWalletChecked == true) { double tip = 0; tip = (Get.find().totalPassenger) * (double.parse(box.read(BoxName.tipPercentage).toString())); if (tip > 0) { var res = await CRUD().post(link: AppLink.addTips, payload: { 'passengerID': box.read(BoxName.passengerID), 'driverID': Get.find().driverId.toString(), 'rideID': Get.find().rideId.toString(), 'tipAmount': tip.toString(), }); await Get.find() .addPassengersWallet(((-1) * tip).toString()); var token1 = await Get.find().generateTokenDriver( box.read(BoxName.countryCode) == 'Egypt' ? tip.toStringAsFixed(0) : (tip * 100).toString()); await CRUD().postWallet(link: AppLink.addDriversWalletPoints, payload: { 'driverID': Get.find().driverId.toString(), 'paymentID': '${Get.find().rideId}tip', 'amount': box.read(BoxName.countryCode) == 'Egypt' ? tip.toStringAsFixed(0) : (tip * 100).toString(), 'paymentMethod': 'visa-tip', 'token': token1, }); if (res != 'failure') { await NotificationService.sendNotification( category: 'You Have Tips', target: Get.find().driverToken.toString(), title: 'You Have Tips'.tr, body: '${'${tip.toString()}\$${' tips\nTotal is'.tr}'} ${tip + (Get.find().totalPassenger)}', isTopic: false, // Important: this is a token tone: 'ding', driverList: [], ); } } } await CRUD().post( link: "${AppLink.server}/ride/rate/addRateToDriver.php", payload: { 'passenger_id': box.read(BoxName.passengerID).toString(), 'driver_id': driverId.toString(), 'ride_id': rideId.toString(), 'rating': selectedRateItemId.toString(), 'comment': comment.text, }, ); Get.find().restCounter(); Get.offAll(const MapPagePassenger()); } } ================================================== FILE PATH: ./lib/controller/Widget/home_widget_provider.dart ================================================== // import 'package:home_widget/home_widget.dart'; // class TripzHomeWidgetProvider { // static const String widgetName = 'TripzHomeWidget'; // // Initialize Home Widget // static Future initHomeWidget() async { // await HomeWidget.registerInteractivityCallback(backgroundCallback); // } // // Background Callback for Widget Updates // static Future backgroundCallback(Uri? uri) async { // if (uri?.host == 'updateWidget') { // // Logic to update widget data // await updateWidgetData(); // } // } // // Update Widget Data Method // static Future updateWidgetData() async { // // Fetch current ride details // final rideData = await _fetchCurrentRideDetails(); // // Update Widget with Ride Information // await HomeWidget.saveWidgetData( // 'ride_destination', rideData.destination); // await HomeWidget.saveWidgetData( // 'ride_estimated_time', rideData.estimatedTime); // await HomeWidget.saveWidgetData('ride_fare', rideData.fare); // // Trigger Widget Update // await HomeWidget.updateWidget( // name: widgetName, // iOSName: 'TripzWidgetProvider', // androidName: 'com.mobileapp.store.ride.HomeWidgetProvider', // ); // } // // Mock method to fetch ride details (replace with actual implementation) // static Future _fetchCurrentRideDetails() async { // // Implement actual data fetching logic // return RideData( // destination: 'Downtown Office', estimatedTime: '25 mins', fare: 15.50); // } // } // // Ride Data Model // class RideData { // final String destination; // final String estimatedTime; // final double fare; // RideData( // {required this.destination, // required this.estimatedTime, // required this.fare}); // } ================================================== FILE PATH: ./lib/controller/auth/apple_signin_controller.dart ================================================== import 'package:firebase_auth/firebase_auth.dart'; import 'package:get/get.dart'; import 'package:sign_in_with_apple/sign_in_with_apple.dart'; class AuthController extends GetxController { final FirebaseAuth _auth = FirebaseAuth.instance; Future signInWithApple() async { try { final appleCredential = await SignInWithApple.getAppleIDCredential( scopes: [ AppleIDAuthorizationScopes.email, AppleIDAuthorizationScopes.fullName, ], ); final oAuthProvider = OAuthProvider('apple.com'); final credential = oAuthProvider.credential( idToken: appleCredential.identityToken, accessToken: appleCredential.authorizationCode, ); UserCredential userCredential = await _auth.signInWithCredential(credential); return userCredential.user; } catch (error) { return null; } } Future signOut() async { try { await _auth.signOut(); } catch (error) {} } } ================================================== FILE PATH: ./lib/controller/auth/register_controller.dart ================================================== import 'dart:async'; import 'dart:convert'; import 'dart:math'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/controller/auth/login_controller.dart'; import 'package:Intaleq/controller/functions/add_error.dart'; import 'package:Intaleq/controller/functions/encrypt_decrypt.dart'; import 'package:Intaleq/views/home/map_page_passenger.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:Intaleq/views/auth/login_page.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import '../../constant/box_name.dart'; import '../../main.dart'; import '../../print.dart'; import '../../views/auth/verify_email_page.dart'; import '../../views/widgets/mydialoug.dart'; import '../functions/sms_controller.dart'; class RegisterController extends GetxController { final formKey = GlobalKey(); final formKey3 = GlobalKey(); TextEditingController firstNameController = TextEditingController(); TextEditingController lastNameController = TextEditingController(); TextEditingController emailController = TextEditingController(); TextEditingController phoneController = TextEditingController(); TextEditingController passwordController = TextEditingController(); TextEditingController siteController = TextEditingController(); // TextEditingController verfyCode = TextEditingController(); TextEditingController verifyCode = TextEditingController(); int remainingTime = 300; // 5 minutes in seconds bool isSent = false; bool isLoading = false; Timer? _timer; String birthDate = 'Birth Date'.tr; String gender = 'Male'.tr; @override void onInit() { super.onInit(); } void startTimer() { _timer?.cancel(); // Cancel any existing timer _timer = Timer.periodic(const Duration(seconds: 1), (timer) { if (remainingTime > 0) { remainingTime--; } else { timer.cancel(); } }); } getBirthDate() { Get.defaultDialog( title: 'Select Date'.tr, titleStyle: AppStyle.title, content: SizedBox( width: 300, child: CalendarDatePicker( initialDate: DateTime.now().subtract(const Duration(days: 14 * 365)), firstDate: DateTime.parse('1940-06-01'), lastDate: DateTime.now().subtract(const Duration(days: 14 * 365)), onDateChanged: (date) { // Get the selected date and convert it to a DateTime object DateTime dateTime = date; // Call the getOrders() function from the controller birthDate = dateTime.toString().split(' ')[0]; update(); }, // onDateChanged: (DateTime value) {}, ), ), confirm: MyElevatedButton(title: 'Ok'.tr, onPressed: () => Get.back())); } void changeGender(String value) { gender = value; update(); } bool isValidEgyptianPhoneNumber(String phoneNumber) { // Remove any whitespace from the phone number phoneNumber = phoneNumber.replaceAll(RegExp(r'\s+'), ''); // Check if the phone number has exactly 11 digits if (phoneNumber.length != 11) { return false; } // Check if the phone number starts with 010, 011, 012, or 015 RegExp validPrefixes = RegExp(r'^01[0125]\d{8}$'); return validPrefixes.hasMatch(phoneNumber); } bool isValidPhoneNumber(String phoneNumber) { // Remove any whitespace from the phone number phoneNumber = phoneNumber.replaceAll(RegExp(r'\s+'), ''); // Check if the phone number has at least 10 digits if (phoneNumber.length < 10) { return false; } // Check for valid prefixes (modify this to match your use case) RegExp validPrefixes = RegExp(r'^[0-9]+$'); // Check if the phone number contains only digits return validPrefixes.hasMatch(phoneNumber); } sendOtpMessage() async { SmsEgyptController smsEgyptController; isLoading = true; update(); try { // Initialize SmsEgyptController smsEgyptController = Get.put(SmsEgyptController()); isLoading = true; update(); // Get phone number from controller String phoneNumber = phoneController.text; // Check if the phone number is from Egypt (Assuming Egyptian numbers start with +20) if (phoneController.text.isNotEmpty) { bool isEgyptianNumber = phoneNumber.startsWith('+20'); if (isEgyptianNumber && phoneNumber.length == 13) { // Check if the phone number is already verified var responseChecker = await CRUD().post( link: AppLink.checkPhoneNumberISVerfiedPassenger, payload: { 'phone_number': (phoneNumber), 'email': box.read(BoxName.email), }, ); if (responseChecker != 'failure') { var data = jsonDecode(responseChecker); // If the phone number is already verified if (data['message'][0]['verified'].toString() == '1') { Get.snackbar('Phone number is verified before'.tr, '', backgroundColor: AppColor.greenColor); box.write(BoxName.isVerified, '1'); box.write(BoxName.phone, (phoneNumber)); Get.offAll(const MapPagePassenger()); } else { await sendOtp(phoneNumber, isEgyptianNumber, smsEgyptController); } } else { await sendOtp(phoneNumber, isEgyptianNumber, smsEgyptController); } } else if (phoneNumber.length > 9) { sendOtp(phoneNumber, isEgyptianNumber, smsEgyptController); } } else { MyDialog().getDialog( 'Error'.tr, 'Phone number must be exactly 11 digits long'.tr, () { Get.back(); }); // sendOtp( // phoneNumber, randomNumber, isEgyptianNumber, smsEgyptController); } } catch (e) { // Handle error } finally { isLoading = false; update(); } } // Helper function to send OTP or WhatsApp message based on phone number location Future sendOtp(String phoneNumber, bool isEgyptian, SmsEgyptController controller) async { // Trim any leading or trailing whitespace from the phone number phoneNumber = phoneNumber.trim(); var dd = await CRUD().post(link: AppLink.sendVerifyOtpMessage, payload: { 'phone_number': (phoneNumber), }); Log.print('dd: ${dd}'); // Common Registration Logic (extracted for reuse) Future registerUser() async { await CRUD().post(link: AppLink.updatePhoneInvalidSMSPassenger, payload: { "phone_number": (Get.find().phoneController.text) }); box.write(BoxName.phone, (phoneController.text)); var nameParts = (box.read(BoxName.name)).toString().split(' '); var firstName = nameParts.isNotEmpty ? nameParts[0] : 'unknown'; var lastName = nameParts.length > 1 ? nameParts[1] : 'unknown'; var payload = { 'id': box.read(BoxName.passengerID), 'phone': (phoneController.text), 'email': box.read(BoxName.email), 'password': ('unknown'), //Consider if you *really* want to store 'unknown' passwords 'gender': ('unknown'), 'birthdate': ('2002-01-01'), 'site': box.read(BoxName.passengerPhotoUrl) ?? 'unknown', 'first_name': (firstName), 'last_name': (lastName), }; var res1 = await CRUD().post( link: AppLink.signUp, payload: payload, ); if (res1 != 'failure') { //Multi-server signup (moved inside the successful registration check) // if (AppLink.IntaleqAlexandriaServer != AppLink.IntaleqSyriaServer) { // List signUp = [ // CRUD().post( // link: '${AppLink.IntaleqAlexandriaServer}/auth/signup.php', // payload: payload, // ), // CRUD().post( // link: '${AppLink.IntaleqGizaServer}/auth/signup.php', // payload: payload, // ) // ]; // await Future.wait(signUp); // Wait for both sign-ups to complete. // } box.write(BoxName.isVerified, '1'); box.write( BoxName.isFirstTime, '0'); //Double-check the logic for isFirstTime box.write(BoxName.phone, (phoneController.text)); Get.put(LoginController()).loginUsingCredentials( box.read(BoxName.passengerID).toString(), box.read(BoxName.email).toString(), ); } } if (isEgyptian) { // verifySMSCode(); // await registerUser(); // Use the common registration logic // await controller.sendSmsEgypt(phoneNumber, otp.toString()); // Optional: Send SMS if Egyptian } else if (phoneController.text.toString().length >= 10) { await registerUser(); // Use the common registration logic for non-Egyptian users as well. // this for whatsapp messsage // Optional: Send WhatsApp message // await CRUD().sendWhatsAppAuth(phoneNumber, otp.toString()); } isLoading = false; isSent = true; remainingTime = 300; update(); // Reset to 5 minutes // startTimer(); // Consider whether you need a timer here, or if it's handled elsewhere. } verifySMSCode() async { try { if (formKey3.currentState!.validate()) { var res = await CRUD().post(link: AppLink.verifyOtpPassenger, payload: { 'phone_number': phoneController.text, 'token': verifyCode.text, }); if (res != 'failure') { box.write(BoxName.phone, (phoneController.text)); var nameParts = (box.read(BoxName.name)).toString().split(' '); var firstName = nameParts.isNotEmpty ? nameParts[0] : 'unknown'; var lastName = nameParts.length > 1 ? nameParts[1] : 'unknown'; var payload = { 'id': box.read(BoxName.passengerID), 'phone': (phoneController.text), 'email': box.read(BoxName.email), 'password': 'unknown', 'gender': 'unknown', 'birthdate': '2002-01-01', 'site': box.read(BoxName.passengerPhotoUrl) ?? 'unknown', 'first_name': firstName, 'last_name': lastName, }; var res1 = await CRUD().post( link: AppLink.signUp, payload: payload, ); if (res1 != 'failure') { // if (AppLink.IntaleqAlexandriaServer != AppLink.IntaleqSyriaServer) { // List signUp = [ // CRUD().post( // link: '${AppLink.IntaleqAlexandriaServer}/auth/signup.php', // payload: payload, // ), // CRUD().post( // link: '${AppLink.IntaleqGizaServer}/auth/signup.php', // payload: payload, // ) // ]; // await Future.wait(signUp); // } box.write(BoxName.isVerified, '1'); box.write(BoxName.isFirstTime, '0'); box.write(BoxName.phone, (phoneController.text)); Get.put(LoginController()).loginUsingCredentials( box.read(BoxName.passengerID).toString(), box.read(BoxName.email).toString(), ); } else { Get.snackbar('Error'.tr, "The email or phone number is already registered.".tr, backgroundColor: Colors.redAccent); } } else { Get.snackbar('Error'.tr, "phone not verified".tr, backgroundColor: Colors.redAccent); } } else { Get.snackbar('Error'.tr, "you must insert token code".tr, backgroundColor: AppColor.redColor); } } catch (e) { addError(e.toString(), 'passenger sign up '); Get.snackbar('Error'.tr, "Something went wrong. Please try again.".tr, backgroundColor: Colors.redAccent); } } sendVerifications() async { var res = await CRUD().post(link: AppLink.verifyEmail, payload: { 'email': emailController.text, 'token': verifyCode.text, }); var dec = jsonDecode(res); if (dec['status'] == 'success') { Get.offAll(() => LoginPage()); } } void register() async { if (formKey.currentState!.validate()) { var res = await CRUD().post(link: AppLink.signUp, payload: { 'first_name': firstNameController.text.toString(), 'last_name': lastNameController.text.toString(), 'email': emailController.text.toString(), 'phone': phoneController.text.toString(), 'password': passwordController.text.toString(), 'gender': 'yet', 'site': siteController.text, 'birthdate': birthDate, }); if (jsonDecode(res)['status'] == 'success') { int randomNumber = Random().nextInt(100000) + 1; await CRUD().post(link: AppLink.sendVerifyEmail, payload: { 'email': emailController.text, 'token': randomNumber.toString(), }); Get.to(() => const VerifyEmailPage()); } } } @override void onClose() { _timer?.cancel(); super.onClose(); } } ================================================== FILE PATH: ./lib/controller/auth/login_controller.dart ================================================== import 'dart:convert'; import 'dart:io'; import 'dart:math'; import 'package:Intaleq/constant/api_key.dart'; import 'package:Intaleq/controller/firebase/firbase_messge.dart'; import 'package:Intaleq/views/auth/otp_page.dart'; import 'package:http/http.dart' as http; import 'package:Intaleq/constant/info.dart'; import 'package:Intaleq/controller/functions/add_error.dart'; import 'package:Intaleq/views/auth/login_page.dart'; import 'package:Intaleq/views/auth/sms_verfy_page.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:Intaleq/main.dart'; import 'package:Intaleq/views/home/map_page_passenger.dart'; import 'package:jwt_decoder/jwt_decoder.dart'; import 'package:location/location.dart'; import 'package:secure_string_operations/secure_string_operations.dart'; import '../../constant/char_map.dart'; import '../../print.dart'; import '../../views/auth/otp_token_page.dart'; import '../functions/encrypt_decrypt.dart'; import '../functions/package_info.dart'; import '../functions/secure_storage.dart'; import '../functions/securty_check.dart'; class LoginController extends GetxController { final formKey = GlobalKey(); final formKeyAdmin = GlobalKey(); TextEditingController emailController = TextEditingController(); TextEditingController phoneController = TextEditingController(); TextEditingController passwordController = TextEditingController(); TextEditingController adminPasswordController = TextEditingController(); TextEditingController adminNameController = TextEditingController(); bool isAgreeTerms = false; bool isloading = false; late int isTest = 1; void changeAgreeTerm() { isAgreeTerms = !isAgreeTerms; update(); } var dev = ''; @override void onInit() async { await getJWT(); // Log.print('box.read(BoxName.isTest): ${box.read(BoxName.isTest)}'); box.write(BoxName.countryCode, 'Syria'); FirebaseMessagesController().getToken(); super.onInit(); } // getAppTester() async { // var res = await CRUD().get( // link: AppLink.getTesterApp, // payload: {'appPlatform': AppInformation.appName}); // if (res != 'failure') { // var d = jsonDecode(res); // isTest = int.parse(d['message'][0]['isTest'].toString()); // box.write(BoxName.isTest, isTest); // update(); // } else { // box.write(BoxName.isTest, '1'); // update(); // return false; // } // } // updateAppTester(String appPlatform) async { // await CRUD().post( // link: AppLink.updateTesterApp, payload: {'appPlatform': appPlatform}); // } void saveAgreementTerms() { box.write(BoxName.agreeTerms, 'agreed'); update(); } void saveCountryCode(String countryCode) { box.write(BoxName.countryCode, countryCode); update(); } Future getJwtWallet() async { try { final random = Random(); // Perform security check randomly if (random.nextBool()) { await SecurityHelper.performSecurityChecks(); } else { await SecurityChecks.isDeviceRootedFromNative(Get.context!); } String fingerPrint = await DeviceHelper.getDeviceFingerprint(); final dev = GetPlatform.isAndroid ? 'android' : 'ios'; var payload = { 'id': box.read(BoxName.passengerID), 'password': AK.passnpassenger, 'aud': '${AK.allowed}$dev', 'fingerPrint': fingerPrint, }; var response = await http.post( Uri.parse(AppLink.loginJwtWalletRider), body: payload, ); // Handle bad responses if (response.statusCode != 200) { _showJwtErrorDialog( "حدث خطأ أثناء الاتصال بالخادم. يرجى المحاولة مرة أخرى."); throw Exception("JWT request failed"); } var data = jsonDecode(response.body); // Validate JWT response structure if (!data.containsKey('jwt') || !data.containsKey('hmac')) { _showJwtErrorDialog("تعذّر التحقق من الأمان. يرجى إعادة المحاولة."); throw Exception("Invalid JWT response format"); } // Save HMAC locally await box.write(BoxName.hmac, data['hmac']); return data['jwt'].toString(); } catch (e) { _showJwtErrorDialog("حدث خلل غير متوقع. يرجى المحاولة مرة أخرى."); rethrow; } } void _showJwtErrorDialog(String message) { if (Get.context == null) return; Get.defaultDialog( title: "خطأ في الاتصال", middleText: message, textConfirm: "إعادة المحاولة", confirmTextColor: Colors.white, onConfirm: () { Get.back(); getJwtWallet(); }, ); } getJWT() async { // print(Pasenger.pasengerpas); // await SecurityHelper.performSecurityChecks(); Log.print('firstTimeLoadKey: ${box.read(BoxName.firstTimeLoadKey)}'); dev = Platform.isAndroid ? 'android' : 'ios'; if (box.read(BoxName.firstTimeLoadKey).toString() != 'false') { var payload = { 'id': box.read(BoxName.passengerID) ?? AK.newId, 'password': AK.passnpassenger, 'aud': '${AK.allowed}$dev', }; // Log.print('payload: ${payload}'); var response0 = await http.post( Uri.parse(AppLink.loginFirstTime), body: payload, ); if (response0.statusCode == 200) { final decodedResponse1 = jsonDecode(response0.body); final jwt = decodedResponse1['jwt']; final refreshToken = decodedResponse1['refresh_token']; box.write(BoxName.jwt, c(jwt)); // Sss.write(BoxName.jwt, jwt); await storage.write(key: BoxName.refreshToken, value: refreshToken); // await AppInitializer().getAIKey(Pasenger.keyOfApp); // await AppInitializer().getAIKey(Pasenger.initializationVector); // await Future.delayed(Duration.zero); await EncryptionHelper.initialize(); await AppInitializer().getKey(); } else {} } else { await EncryptionHelper.initialize(); var payload = { 'id': box.read(BoxName.passengerID), 'password': box.read(BoxName.email), 'aud': '${AK.allowed}$dev', }; // Log.print('payload: ${payload}'); var response1 = await http.post( Uri.parse(AppLink.loginJwtRider), body: payload, ); Log.print('req: ${response1.request}'); Log.print('response: ${response1.body}'); Log.print('payload: ${payload}'); // Log.print('decodedResponse1: ${jsonDecode(response1.body)}'); if (response1.statusCode == 200) { final decodedResponse1 = jsonDecode(response1.body); // Log.print('decodedResponse1: ${decodedResponse1}'); final jwt = decodedResponse1['jwt']; await box.write(BoxName.jwt, c(jwt)); await AppInitializer().getKey(); // final refreshToken = decodedResponse1['refresh_token']; // await storage.write(key: BoxName.refreshToken, value: refreshToken); } } } Future loginUsingCredentials(String passengerID, String email) async { isloading = true; update(); await getJWT(); try { // 1) استعلام تسجيل الدخول final res = await CRUD().get( link: AppLink.loginFromGooglePassenger, payload: { 'email': email, 'id': passengerID, // استخدم المعامل مباشرة 'platform': Platform.isAndroid ? 'android' : 'ios', 'appName': AppInformation.appName, }, ); if (res == 'Failure') { Get.snackbar("User does not exist.".tr, '', backgroundColor: Colors.red); return; } // 2) فك JSON مرة واحدة final decoded = jsonDecode(res); if (decoded is! Map || decoded.isEmpty) return; final status = (decoded['status'] ?? '').toString(); final data = (decoded['data'] as List?)?.firstOrNull as Map? ?? {}; if (status != 'success' || data['verified'].toString() != '1') { // غير مُفعل -> أذهب للتسجيل بالـ SMS Get.offAll(() => PhoneNumberScreen()); return; } // 3) كتابة القيم (خفيفة) box.write(BoxName.isVerified, '1'); box.write(BoxName.email, data['email']); box.write(BoxName.phone, data['phone']); box.write(BoxName.name, data['first_name']); box.write(BoxName.isTest, '1'); box.write(BoxName.package, data['package']); box.write(BoxName.promo, data['promo']); box.write(BoxName.discount, data['discount']); box.write(BoxName.validity, data['validity']); box.write(BoxName.isInstall, data['isInstall'] ?? 'none'); box.write(BoxName.isGiftToken, data['isGiftToken'] ?? 'none'); if (data['inviteCode'] != null) { box.write(BoxName.inviteCode, data['inviteCode'].toString()); } // مهم: تأكد من passengerID في الـ box box.write(BoxName.passengerID, passengerID); // 4) نفّذ عمليات مكلفة بالتوازي: getTokens + fingerprint final results = await Future.wait([ CRUD().get(link: AppLink.getTokens, payload: { 'passengerID': passengerID, // FIX: لا تستخدم box هنا }), DeviceHelper.getDeviceFingerprint(), ]); await box.write(BoxName.firstTimeLoadKey, 'false'); final tokenResp = results[0]; final fingerPrint = (results[1] ?? '').toString(); await storage.write(key: BoxName.fingerPrint, value: fingerPrint); if (email != '962798583052@intaleqapp.com' && tokenResp != 'failure') { final tokenJson = jsonDecode(tokenResp); final serverToken = tokenJson['message']?['token']?.toString() ?? ''; // Log.print('serverToken: ${serverToken}'); final localFcm = (box.read(BoxName.tokenFCM) ?? '').toString(); // Log.print('localFcm: ${localFcm}'); // 5) اختلاف الجهاز -> تحقّق OTP if (serverToken.isNotEmpty && serverToken != localFcm) { final goVerify = await _confirmDeviceChangeDialog(); if (goVerify == true) { await Get.to(() => OtpVerificationPage( phone: data['phone'].toString(), deviceToken: fingerPrint, token: tokenResp.toString(), ptoken: serverToken, )); // بعد العودة من OTP (نجح/فشل)، أخرج من الميثود كي لا يحصل offAll مرتين return; } } } // 6) منطق الدعوة (إن وُجد) ثم الانتقال final invite = box.read(BoxName.inviteCode)?.toString() ?? 'none'; final isInstall = box.read(BoxName.isInstall)?.toString() ?? '0'; if (invite != 'none' && isInstall != '1') { try { await CRUD().post(link: AppLink.updatePassengersInvitation, payload: { "inviteCode": invite, "passengerID": passengerID, }); await Get.defaultDialog( title: 'Invitation Used'.tr, middleText: "Your invite code was successfully applied!".tr, textConfirm: "OK".tr, confirmTextColor: Colors.white, onConfirm: () async { try { await CRUD().post(link: AppLink.addPassengersPromo, payload: { "promoCode": 'I-${(box.read(BoxName.name)).toString().split(' ').first}', "amount": '25', "passengerID": passengerID, "description": 'promo first' }); } catch (e) { addError( e.toString(), 'promo on invitation in login_controller'); } finally { Get.offAll(() => const MapPagePassenger()); } }, ); return; } catch (_) { // حتى لو فشل، كمل للصفحة الرئيسية } } Get.offAll(() => const MapPagePassenger()); } catch (e, st) { addError('$e', 'loginUsingCredentials'); Get.snackbar('Error', e.toString(), backgroundColor: Colors.redAccent); } finally { isloading = false; update(); } } Future _confirmDeviceChangeDialog() { return Get.defaultDialog( barrierDismissible: false, title: 'Device Change Detected'.tr, middleText: 'Please verify your identity'.tr, textConfirm: 'Verify'.tr, confirmTextColor: Colors.white, onConfirm: () => Get.back(result: true), textCancel: 'Cancel'.tr, onCancel: () => Get.back(result: false), ); } void login() async { isloading = true; update(); var res = await CRUD().get(link: AppLink.loginFromGooglePassenger, payload: { 'email': (emailController.text), 'id': passwordController.text, "platform": Platform.isAndroid ? 'android' : 'ios', "appName": AppInformation.appName, }); isloading = false; update(); if (res == 'Failure') { //Failure Get.offAll(() => LoginPage()); isloading = false; update(); // Get.snackbar("User does not exist.".tr, '', backgroundColor: Colors.red); } else { var jsonDecoeded = jsonDecode(res); if (jsonDecoeded.isNotEmpty) { if (jsonDecoeded['status'] == 'success' && jsonDecoeded['data'][0]['verified'].toString() == '1') { // box.write(BoxName.isVerified, '1'); box.write(BoxName.email, jsonDecoeded['data'][0]['email']); box.write(BoxName.name, jsonDecoeded['data'][0]['first_name']); box.write(BoxName.phone, jsonDecoeded['data'][0]['phone']); box.write(BoxName.passengerID, passwordController.text); // var token = await CRUD().get(link: AppLink.getTokens, payload: { // 'passengerID': box.read(BoxName.passengerID).toString() // }); // await updateAppTester(AppInformation.appName); Get.offAll(() => const MapPagePassenger()); } else { // Get.offAll(() => SmsSignupEgypt()); // Get.snackbar(jsonDecoeded['status'], jsonDecoeded['data'], // backgroundColor: Colors.redAccent); isloading = false; update(); } } else { isloading = false; update(); } } } goToMapPage() { if (box.read(BoxName.email) != null) { Get.offAll(() => const MapPagePassenger()); } } final location = Location(); // late PermissionStatus permissionGranted = PermissionStatus.denied; Future getLocationPermission() async { bool serviceEnabled; PermissionStatus permissionGranted; // Check if location services are enabled serviceEnabled = await location.serviceEnabled(); if (!serviceEnabled) { serviceEnabled = await location.requestService(); if (!serviceEnabled) { // Location services are still not enabled, handle the error return; } } // Check if the app has permission to access location permissionGranted = await location.hasPermission(); if (permissionGranted == PermissionStatus.denied) { permissionGranted = await location.requestPermission(); if (permissionGranted != PermissionStatus.granted) { // Location permission is still not granted, handle the error permissionGranted = await location.requestPermission(); return; } } if (permissionGranted.toString() == 'PermissionStatus.granted') { box.write(BoxName.locationPermission, 'true'); } update(); } } ================================================== FILE PATH: ./lib/controller/auth/otp_controller.dart ================================================== import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/views/home/map_page_passenger.dart'; import 'package:get/get.dart'; import '../../../constant/box_name.dart'; import '../../../main.dart'; import '../../../print.dart'; import '../../views/auth/otp_page.dart'; import '../../views/widgets/error_snakbar.dart'; import '../functions/crud.dart'; import '../functions/package_info.dart'; import 'login_controller.dart'; // --- Helper Class for Phone Authentication --- class PhoneAuthHelper { // Define your server URLs static final String _baseUrl = '${AppLink.server}/auth/syria/'; static final String _sendOtpUrl = '${_baseUrl}sendWhatsOpt.php'; static final String _verifyOtpUrl = '${_baseUrl}verifyOtp.php'; static final String _registerUrl = '${_baseUrl}register_passenger.php'; static String formatSyrianPhone(String phone) { // Remove spaces, symbols, +, -, () phone = phone.replaceAll(RegExp(r'[ \-\(\)\+]'), '').trim(); // Normalize 00963 → 963 if (phone.startsWith('00963')) { phone = phone.replaceFirst('00963', '963'); } // Normalize 0963 → 963 if (phone.startsWith('0963')) { phone = phone.replaceFirst('0963', '963'); } // NEW: Fix 96309xxxx → 9639xxxx if (phone.startsWith('96309')) { phone = '9639' + phone.substring(5); // remove the "0" after 963 } // If starts with 9630 → correct to 9639 if (phone.startsWith('9630')) { phone = '9639' + phone.substring(4); } // If already in correct format: 9639xxxxxxxx if (phone.startsWith('9639') && phone.length == 12) { return phone; } // If starts with 963 but missing the 9 if (phone.startsWith('963') && phone.length > 3) { // Ensure it begins with 9639 if (!phone.startsWith('9639')) { phone = '9639' + phone.substring(3); } return phone; } // If starts with 09xxxxxxxx → 9639xxxxxxxx if (phone.startsWith('09')) { return '963' + phone.substring(1); } // If 9xxxxxxxx (9 digits) if (phone.startsWith('9') && phone.length == 9) { return '963' + phone; } // If starts with incorrect 0xxxxxxx → assume Syrian and fix if (phone.startsWith('0') && phone.length == 10) { return '963' + phone.substring(1); } return phone; } /// Sends an OTP to the provided phone number. static Future sendOtp(String phoneNumber) async { try { // إصلاح الرقم قبل الإرسال final fixedPhone = formatSyrianPhone(phoneNumber); final response = await CRUD().post( link: _sendOtpUrl, payload: {'receiver': fixedPhone}, // ← ← استخدام الرقم المُعدّل ); if (response != 'failure') { final data = response; if (data['status'] == 'success') { mySnackbarSuccess('An OTP has been sent to your number.'.tr); return true; } else { mySnackeBarError(data['message'] ?? 'Failed to send OTP.'); return false; } } else { mySnackeBarError('Server error. Please try again.'.tr); return false; } } catch (e) { return false; } } /// Verifies the OTP and logs the user in. static Future verifyOtp(String phoneNumber) async { try { final fixedPhone = formatSyrianPhone(phoneNumber); final response = await CRUD().post( link: _verifyOtpUrl, payload: { 'phone_number': fixedPhone, }, ); if (response != 'failure') { final data = (response); // Log.print('data: ${data}'); if (data['status'] == 'success') { final isRegistered = data['message']['isRegistered'] ?? false; // Log.print('isRegistered: ${isRegistered}'); if (isRegistered) { // ✅ المستخدم موجود مسبقاً -> تسجيل دخول مباشر await _handleSuccessfulLogin(data['message']['passenger']); } else { // ✅ مستخدم جديد -> الذهاب لصفحة التسجيل mySnackbarSuccess( 'Phone verified. Please complete registration.'.tr); Get.to(() => RegistrationScreen(phoneNumber: phoneNumber)); } } else { mySnackeBarError(data['message']); } } else { mySnackeBarError('Server error. Please try again.'.tr); } } catch (e) { mySnackeBarError('An error occurred: $e'); } } static Future _addTokens() async { String fingerPrint = await DeviceHelper.getDeviceFingerprint(); await CRUD() .post(link: "${AppLink.server}/ride/firebase/add.php", payload: { 'token': (box.read(BoxName.tokenFCM.toString())), 'passengerID': box.read(BoxName.passengerID).toString(), "fingerPrint": fingerPrint }); await CRUD() .post(link: "${AppLink.paymentServer}/ride/firebase/add.php", payload: { 'token': (box.read(BoxName.tokenFCM.toString())), 'passengerID': box.read(BoxName.passengerID).toString(), "fingerPrint": fingerPrint }); } static Future registerUser({ required String phoneNumber, required String firstName, required String lastName, String? email, }) async { try { final response = await CRUD().post( link: _registerUrl, payload: { 'phone_number': phoneNumber, 'first_name': firstName, 'last_name': lastName, 'email': email ?? '', // Send empty string if null }, ); final data = (response); if (data != 'failure') { // Registration successful, log user in await _handleSuccessfulLogin(data['message']['data']); } else { mySnackeBarError( "User with this phone number or email already exists.".tr); } } catch (e) { Log.print('e: ${e}'); mySnackeBarError('An error occurred: $e'); } } static Future _handleSuccessfulLogin( Map userData) async { mySnackbarSuccess('Welcome, ${userData['first_name']}!'); // Save user data to local storage (Hive box) using new keys box.write(BoxName.passengerID, userData['id']); box.write(BoxName.name, userData['first_name']); box.write(BoxName.lastName, userData['last_name']); box.write(BoxName.email, userData['email']); box.write(BoxName.phone, userData['phone']); box.write(BoxName.isVerified, '1'); await _addTokens(); await Get.put(LoginController()).loginUsingCredentials( box.read(BoxName.passengerID).toString(), box.read(BoxName.email).toString(), ); // Navigate to home } } ================================================== FILE PATH: ./lib/controller/auth/token_otp_change_controller.dart ================================================== import 'dart:async'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:Intaleq/main.dart'; import 'package:get/get.dart'; import '../../print.dart'; import '../../views/home/map_page_passenger.dart'; import '../firebase/firbase_messge.dart'; import '../firebase/notification_service.dart'; import '../functions/package_info.dart'; class OtpVerificationController extends GetxController { final String phone; final String deviceToken; final String token; final otpCode = ''.obs; final isLoading = false.obs; final isVerifying = false.obs; var canResend = false.obs; var countdown = 120.obs; Timer? _timer; OtpVerificationController({ required this.phone, required this.deviceToken, required this.token, }); @override void onInit() { super.onInit(); sendOtp(); // ترسل تلقائيًا عند فتح الصفحة startCountdown(); } void startCountdown() { canResend.value = false; countdown.value = 120; _timer?.cancel(); _timer = Timer.periodic(const Duration(seconds: 1), (timer) { if (countdown.value > 0) { countdown.value--; } else { canResend.value = true; timer.cancel(); } }); } Future sendOtp() async { if (isLoading.value) return; isLoading.value = true; try { final response = await CRUD().post( link: '${AppLink.server}/auth/token_passenger/send_otp.php', payload: { 'receiver': phone, // 'device_token': deviceToken, }, ); if (response != 'failure') { isLoading.value = true; // بإمكانك عرض رسالة نجاح هنا } else { Get.snackbar('Error'.tr, 'Failed to send OTP'.tr); } } catch (e) { Get.snackbar('Error', e.toString()); } finally { // isLoading.value = false; } } Future verifyOtp(String ptoken) async { isVerifying.value = true; try { String fingerPrint = await DeviceHelper.getDeviceFingerprint(); final response = await CRUD().post( link: '${AppLink.server}/auth/token_passenger/verify_otp.php', payload: { 'phone_number': phone, 'otp': otpCode.value, 'token': box.read(BoxName.tokenFCM).toString(), 'fingerPrint': fingerPrint.toString(), }, ); if (response != 'failure' && response['status'] == 'success') { await NotificationService.sendNotification( category: 'token change', target: ptoken.toString(), title: 'token change'.tr, body: 'change device'.tr, isTopic: false, // Important: this is a token tone: 'cancel', driverList: [], ); Get.offAll(() => const MapPagePassenger()); } else { Get.snackbar('Verification Failed', 'OTP is incorrect or expired'); } } catch (e) { Get.snackbar('Error', e.toString()); } finally { isVerifying.value = false; } } } ================================================== FILE PATH: ./lib/controller/auth/certificate.dart ================================================== import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; import 'package:crypto/crypto.dart'; Future verifyCertificateManually( String host, int port, String expectedPin) async { try { final socket = await SecureSocket.connect(host, port, timeout: const Duration(seconds: 5)); final certificate = socket.peerCertificate; if (certificate == null) { print("❌ لا يوجد شهادة."); return false; } final der = certificate.der; final actualPin = base64.encode(sha256.convert(der).bytes); print("📛 HOST: $host"); print("📜 Subject: ${certificate.subject}"); print("📜 Issuer: ${certificate.issuer}"); print("📅 Valid From: ${certificate.startValidity}"); print("📅 Valid To: ${certificate.endValidity}"); print( "🔐 Server Pin: $actualPin → ${actualPin == expectedPin ? '✅ MATCH' : '❌ MISMATCH'}"); socket.destroy(); return actualPin == expectedPin; } catch (e) { print("❌ خطأ أثناء الاتصال أو الفحص: $e"); return false; } } /// تحويل المفتاح العام إلى بصمة SHA-256 List sha256Convert(Uint8List der) { return sha256.convert(der).bytes; } ================================================== FILE PATH: ./lib/controller/auth/tokens_controller.dart ================================================== import 'dart:convert'; import 'package:get/get.dart'; import 'package:http/http.dart' as http; import '../../constant/box_name.dart'; import '../../constant/links.dart'; import '../../main.dart'; import '../functions/encrypt_decrypt.dart'; class TokenController extends GetxController { bool isloading = false; Future addToken() async { String? basicAuthCredentials = await storage.read(key: BoxName.basicAuthCredentials); isloading = true; update(); var res = await http.post( Uri.parse(AppLink.addTokens), headers: { 'Authorization': 'Basic ${base64Encode(utf8.encode(basicAuthCredentials.toString()))}', }, body: { 'token': (box.read(BoxName.tokenFCM.toString())), 'passengerID': box.read(BoxName.passengerID).toString() }, ); isloading = false; update(); var jsonToken = jsonDecode(res.body); if (jsonToken['status'] == 'The token has been updated successfully.') { Get.snackbar('token updated'.tr, ''); } } } ================================================== FILE PATH: ./lib/controller/auth/verify_email_controller.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/functions/crud.dart'; class VerifyEmailController extends GetxController { TextEditingController verfyCode = TextEditingController(); @override void onInit() async { super.onInit(); } sendverfications() async { await CRUD().post(link: AppLink.sendVerifyEmail); } } ================================================== FILE PATH: ./lib/controller/auth/onboarding_controller.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/main.dart'; import 'package:Intaleq/views/auth/login_page.dart'; import '../../models/model/onboarding_model.dart'; abstract class OnBoardingController extends GetxController { next(); onPageChanged(int index); } class OnBoardingControllerImp extends OnBoardingController { late PageController pageController; int currentPage = 0; @override next() { currentPage++; if (currentPage > onBoardingList.length - 1) { box.write(BoxName.onBoarding, 'yes'); Get.offAll(() => LoginPage()); } else { pageController.animateToPage(currentPage, duration: const Duration(milliseconds: 900), curve: Curves.easeInOut); } } @override onPageChanged(int index) { currentPage = index; update(); } @override void onInit() { pageController = PageController(); super.onInit(); } } ================================================== FILE PATH: ./lib/controller/auth/google_sign.dart ================================================== import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:google_sign_in/google_sign_in.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../constant/box_name.dart'; import '../../constant/links.dart'; import '../../main.dart'; import '../functions/crud.dart'; import '../../onbording_page.dart'; import 'login_controller.dart'; class GoogleSignInHelper { // ✅ GoogleSignIn singleton static final GoogleSignIn _signIn = GoogleSignIn.instance; static GoogleSignInAccount? _lastUser; /// 👇 استدعها في main() مرة واحدة static Future init() async { await _signIn.initialize( serverClientId: '594687661098-2u640akrb3k7sak5t0nqki6f4v6hq1bq.apps.googleusercontent.com', ); // Events listener _signIn.authenticationEvents.listen((event) async { if (event is GoogleSignInAuthenticationEventSignIn) { _lastUser = event.user; await _handleSignUp(event.user); } else if (event is GoogleSignInAuthenticationEventSignOut) { _lastUser = null; } }); // silent login if possible try { await _signIn.attemptLightweightAuthentication(); } catch (_) {} } /// ✅ تسجيل دخول عادي static Future signIn() async { try { final user = await _signIn.authenticate(scopeHint: const ['email', 'profile']); if (user != null) { _lastUser = user; await _handleSignUp(user); // اطبع القيم (للتأكد) print("Google ID: ${user.id}"); print("Email: ${user.email}"); print("Name: ${user.displayName}"); print("Photo: ${user.photoUrl}"); } return user; } on PlatformException catch (e) { if (e.code == 'sign_in_required') { await showGooglePlayServicesError(); } return null; } catch (e) { await addError("Google Sign-In error: $e", "signIn()"); return null; } } /// ✅ تسجيل دخول مخصص لشاشة Login (مع استدعاء الكنترولر) static Future signInFromLogin() async { await init(); final user = await signIn(); if (user != null) { await Get.put(LoginController()).loginUsingCredentials( box.read(BoxName.passengerID).toString(), box.read(BoxName.email).toString(), ); } return user; } /// ✅ طلب سكوبات إضافية (بديل withScopes القديم) static Future requestExtraScopes(List scopes) async { final user = _lastUser; if (user == null) return; await user.authorizationClient.authorizeScopes(scopes); } /// ✅ تسجيل خروج static Future signOut() async { await _signIn.signOut(); await _handleSignOut(); } static GoogleSignInAccount? getCurrentUser() => _lastUser; // ================= Helpers ================== static Future _handleSignUp(GoogleSignInAccount user) async { box.write(BoxName.passengerID, user.id); box.write(BoxName.email, user.email); box.write(BoxName.name, user.displayName ?? ''); box.write(BoxName.passengerPhotoUrl, user.photoUrl ?? ''); } static Future _handleSignOut() async { box.erase(); Get.offAll(OnBoardingPage()); } static Future addError(String error, String where) async { await CRUD().post(link: AppLink.addError, payload: { 'error': error, 'userId': box.read(BoxName.driverID) ?? box.read(BoxName.passengerID), 'userType': box.read(BoxName.driverID) != null ? 'Driver' : 'Passenger', 'phone': box.read(BoxName.phone) ?? box.read(BoxName.phoneDriver), 'device': where, }); } static Future showGooglePlayServicesError() async { const playStoreUrl = 'https://play.google.com/store/apps/details?id=com.google.android.gms&hl=en_US'; final uri = Uri.parse(playStoreUrl); if (await canLaunchUrl(uri)) { await launchUrl(uri); } else { showDialog( context: Get.context!, builder: (context) => AlertDialog( title: Text('Error'.tr), content: Text( 'Could not open the Google Play Store. Please update Google Play Services manually.' .tr, ), actions: [ TextButton( onPressed: () => Navigator.pop(context), child: Text('Close'.tr), ), ], ), ); } } } ================================================== FILE PATH: ./lib/controller/notification/notification_captain_controller.dart ================================================== import 'dart:convert'; import 'package:get/get.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import '../../constant/box_name.dart'; import '../../constant/links.dart'; import '../../main.dart'; import '../functions/crud.dart'; class NotificationCaptainController extends GetxController { bool isLoading = false; Map notificationData = {}; getNotifications() async { isLoading = true; update(); var res = await CRUD().get( link: AppLink.getNotificationCaptain, payload: {'driverID': box.read(BoxName.driverID)}); if (res == "failure") { Get.defaultDialog( title: 'There is no notification yet'.tr, titleStyle: AppStyle.title, middleText: '', confirm: MyElevatedButton( title: 'Back', onPressed: () { Get.back(); Get.back(); })); } notificationData = jsonDecode(res); // sql.insertData(notificationData['message'], TableName.captainNotification); isLoading = false; update(); } updateNotification(String id) async { await CRUD().post( link: AppLink.updateNotificationCaptain, payload: {'isShown': true, 'id': id}, ); } addNotificationCaptain(String driverId, title, body, isPin) async { await CRUD().post(link: AppLink.addNotificationCaptain, payload: { 'driverID': driverId, 'title': title, 'body': body, 'isPin': isPin }); } @override void onInit() { getNotifications(); super.onInit(); } } ================================================== FILE PATH: ./lib/controller/notification/passenger_notification_controller.dart ================================================== import 'dart:convert'; import 'package:get/get.dart'; import 'package:Intaleq/controller/firebase/firbase_messge.dart'; import '../../constant/box_name.dart'; import '../../constant/links.dart'; import '../../main.dart'; import '../../views/widgets/mydialoug.dart'; import '../firebase/notification_service.dart'; import '../functions/crud.dart'; class PassengerNotificationController extends GetxController { bool isloading = false; Map notificationData = {}; getNotifications() async { isloading = true; update(); var res = await CRUD().get( link: AppLink.getNotificationPassenger, payload: {'passenger_id': box.read(BoxName.passengerID)}); if (res == "failure") { MyDialog().getDialog('There is no notification yet'.tr, '', () { Get.back(); Get.back(); }); } else { notificationData = jsonDecode(res); isloading = false; update(); } // sql.insertData(notificationData['message'], TableName.captainNotification); } updateNotification(String id) async { await CRUD().post( link: AppLink.updateNotificationPassenger, payload: {'isShown': 'true', 'id': id}, ); Get.back(); getNotifications(); } addNotificationToPassenger(String title, body) async { var res = CRUD().post(link: AppLink.addNotificationPassenger, payload: { 'title': title, 'body': body, }); // Get.find().sendNotificationToPassengerToken( // title, // body, // 'token', // [], // 'iphone_ringtone', // ); await NotificationService.sendNotification( category: title, target: 'token'.toString(), title: title, body: body.tr, isTopic: false, // Important: this is a token tone: 'cancel', driverList: [], ); } @override void onInit() { getNotifications(); super.onInit(); } } ================================================== FILE PATH: ./lib/controller/notification/ride_available_controller.dart ================================================== import 'dart:convert'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:get/get.dart'; import '../../constant/links.dart'; import '../functions/crud.dart'; class RideAvailableController extends GetxController { bool isLoading = false; Map rideAvailableMap = {}; getRideAvailable() async { isLoading = true; var res = await CRUD().get(link: AppLink.getRideWaiting, payload: {}); if (res != 'failure') { rideAvailableMap = jsonDecode(res); isLoading = false; update(); } else { Get.defaultDialog( title: 'No Rides now!'.tr, middleText: '', titleStyle: AppStyle.title, confirm: MyElevatedButton( title: 'Ok'.tr, onPressed: () { Get.back(); Get.back(); })); } } @override void onInit() { getRideAvailable(); super.onInit(); } } ================================================== FILE PATH: ./lib/controller/payment/paymob.dart ================================================== import 'package:Intaleq/constant/box_name.dart'; import 'package:dio/dio.dart' as dio; import 'package:dio/dio.dart'; import 'package:get/get.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../constant/api_key.dart'; import '../../main.dart'; import '../../print.dart'; import '../functions/encrypt_decrypt.dart'; class PaymobManager extends GetxController { String authanticationToken1 = ""; String orderId1 = ""; Future getPaymentKey(int amount, String currency) async { try { String authanticationToken = await _getAuthanticationToken(); int orderId = await _getOrderId( authanticationToken: authanticationToken, amount: (100 * amount).toString(), currency: currency, ); String paymentKey = await _getPaymentKey( authanticationToken: authanticationToken, amount: (100 * amount).toString(), currency: currency, orderId: orderId.toString(), ); authanticationToken1 = authanticationToken.toString(); orderId1 = orderId.toString(); update(); return paymentKey; } catch (e) { throw Exception(); } } Future payWithPayMob(int amount, String currency) async { // 1. Fetch Payment Key (Assuming PaymobManager is a custom class) String paymentToken; try { paymentToken = await PaymobManager().getPaymentKey(amount, currency); } on Exception catch (e) { // Handle errors gracefully, e.g., display error message to user return; } // 2. Prepare Payment Data Payload final Map data = { "source": { "identifier": box.read(BoxName.phone), //"01010101010" "subtype": "WALLET", }, "payment_token": paymentToken, }; // 3. Make Payment Request using Dio final dio = Dio(); try { final response = await dio.post( 'https://accept.paymobsolutions.com/api/acceptance/payments/pay', data: data, ); // 4. Handle Payment Response if (response.statusCode == 200) { final paymentData = response.data; // Assuming JSON response // Navigate to success screen or display success message launchUrl(Uri.parse(paymentData['iframe_redirection_url'])); } else { // Payment failed: Handle errors (e.g., display error message) } } on DioError catch (e) { // Handle network or Dio-related errors } } Future _getStatusAfterPaid() async { final dio.Response response = await Dio().post( "https://accept.paymob.com/api/ecommerce/orders/transaction_inquiry", data: { "auth_token": authanticationToken1, "merchant_order_id": "970960", "order_id": orderId1 }); return response.data["success"]; } Future _getAuthanticationToken() async { final dio.Response response = await Dio().post("https://accept.paymob.com/api/auth/tokens", data: { "api_key": AK.payMobApikey, 'username': AK.usernamePayMob, "password": AK.passwordPayMob, }); Log.print('token: ${response}'); return response.data["token"]; } Future _getOrderId({ required String authanticationToken, required String amount, required String currency, }) async { final dio.Response response = await Dio() .post("https://accept.paymob.com/api/ecommerce/orders", data: { "auth_token": authanticationToken, "amount_cents": amount, "currency": currency, "delivery_needed": "false", "items": [], }); Log.print('id: ${response}'); return response.data["id"]; } Future _getPaymentKey({ required String authanticationToken, required String orderId, required String amount, required String currency, }) async { final dio.Response response = await Dio() .post("https://accept.paymob.com/api/acceptance/payment_keys", data: { "expiration": 200, "auth_token": authanticationToken.toString(), "order_id": orderId.toString(), "integration_id": 4601103, ////todo wallet or online card int.parse(AK.integrationIdPayMob), "lock_order_when_paid": "false", "amount_cents": amount, "currency": currency, "billing_data": { "first_name": (box.read(BoxName.name).toString().split(' ')[0]).toString(), "last_name": (box.read(BoxName.name).toString().split(' ')[1]).toString(), "email": (box.read(BoxName.email)), "phone_number": (box.read(BoxName.phone)), "apartment": "NA", "floor": "NA", "street": "NA", "building": "NA", "shipping_method": "NA", "postal_code": "NA", "city": "NA", "country": box.read(BoxName.countryCode), "state": "NA" }, }); Log.print('token: ${response}'); return response.data["token"]; } } ================================================== FILE PATH: ./lib/controller/payment/payment_controller.dart ================================================== import 'dart:convert'; import 'package:Intaleq/constant/api_key.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/firebase/firbase_messge.dart'; import 'package:Intaleq/controller/payment/paymob/paymob_response.dart'; import 'package:Intaleq/views/home/map_page_passenger.dart'; import 'package:http/http.dart' as http; import 'package:flutter/material.dart'; import 'package:flutter_paypal/flutter_paypal.dart'; import 'package:flutter_stripe/flutter_stripe.dart'; import 'package:get/get.dart'; import 'package:local_auth/local_auth.dart'; import 'package:Intaleq/controller/home/map_passenger_controller.dart'; import 'package:webview_flutter/webview_flutter.dart'; import '../../constant/box_name.dart'; import '../../constant/colors.dart'; import '../../constant/info.dart'; import '../../constant/links.dart'; import '../../main.dart'; import '../../print.dart'; import '../firebase/notification_service.dart'; import '../functions/crud.dart'; import '../functions/encrypt_decrypt.dart'; import '../functions/toast.dart'; import 'paymob/e_cash_screen.dart'; class PaymentController extends GetxController { bool isLoading = false; bool isWalletChecked = true; bool isCashChecked = false; bool isWalletFound = false; bool isPromoSheetDialogue = false; final formKey = GlobalKey(); final promo = TextEditingController(); final walletphoneController = TextEditingController(); double totalPassenger = Get.find().totalPassenger; int? selectedAmount = 0; List totalPassengerWalletDetails = []; String passengerTotalWalletAmount = ''; String ip = '1'; DateTime now = DateTime.now(); late int timestamp; void updateSelectedAmount(int value) { selectedAmount = value; update(); } void changePromoSheetDialogue() { isPromoSheetDialogue = !isPromoSheetDialogue; update(); } getPassengerWallet() async { isLoading = true; update(); await CRUD().getWallet( link: AppLink.getWalletByPassenger, payload: {'passenger_id': box.read(BoxName.passengerID)}).then((value) { box.write(BoxName.passengerWalletTotal, jsonDecode(value)['message'][0]['total'].toString()); }); isLoading = false; update(); } String paymentToken = ''; Future generateTokenPassenger(String amount) async { var res = await CRUD().post(link: AppLink.addPaymentTokenPassenger, payload: { 'passengerId': box.read(BoxName.passengerID).toString(), 'amount': amount.toString(), }); var d = jsonDecode(res); return d['message']; } Future generateTokenDriver(String amount) async { var res = await CRUD().post(link: AppLink.addPaymentTokenDriver, payload: { 'driverID': Get.find().driverId, 'amount': amount.toString(), }); var d = jsonDecode(res); return d['message']; } Future addSeferWallet(String paymentMethod, point) async { var seferToken = await generateTokenPassenger(point); await CRUD().postWallet(link: AppLink.addSeferWallet, payload: { 'amount': point.toString(), 'paymentMethod': paymentMethod, 'passengerId': box.read(BoxName.passengerID).toString(), 'token': seferToken, 'driverId': 'passenger', }); } Future addPassengersWallet(String point) async { var token = await generateTokenPassenger(point); await CRUD().postWallet(link: AppLink.addPassengersWallet, payload: { 'passenger_id': box.read(BoxName.passengerID).toString(), 'balance': point, 'token': token, }); } payToDriverForCancelAfterAppliedAndHeNearYou(String rideId) async { { double costOfWaiting5Minute = box.read(BoxName.countryCode) == 'Egypt' ? (4 * .08) + (5 * 1) // 4 indicate foe 4 km ditance from driver start move to passenger : (4 * .06) + (5 * .06); //for Eygpt other like jordan .06 per minute var paymentTokenWait = await generateTokenDriver(costOfWaiting5Minute.toString()); var res = await CRUD().postWallet(link: AppLink.addDrivePayment, payload: { 'rideId': rideId, 'amount': costOfWaiting5Minute.toString(), 'payment_method': 'cancel-from-near', 'passengerID': box.read(BoxName.passengerID).toString(), 'token': paymentTokenWait, 'driverID': Get.find().driverId.toString(), }); var paymentTokenWait1 = await generateTokenDriver(costOfWaiting5Minute.toString()); var res1 = await CRUD() .postWallet(link: AppLink.addDriversWalletPoints, payload: { 'paymentID': 'rideId$rideId', 'amount': (costOfWaiting5Minute).toStringAsFixed(0), 'paymentMethod': 'cancel-from-near', 'token': paymentTokenWait1, 'driverID': Get.find().driverId.toString(), }); if (res != 'failure') { // Get.find().sendNotificationToDriverMAP( // 'Cancel', // 'Trip Cancelled. The cost of the trip will be added to your wallet.' // .tr, // Get.find().driverToken, // [], // 'cancel', // ); await NotificationService.sendNotification( category: 'Cancel', target: Get.find().driverToken.toString(), title: 'Cancel'.tr, body: 'Trip Cancelled. The cost of the trip will be added to your wallet.' .tr, isTopic: false, // Important: this is a token tone: 'cancel', driverList: [], ); } var paymentTokenWaitPassenger1 = await generateTokenPassenger((costOfWaiting5Minute * -1).toString()); await CRUD().post(link: AppLink.addPassengersWallet, payload: { 'passenger_id': box.read(BoxName.passengerID).toString(), 'balance': (costOfWaiting5Minute * -1).toString(), 'token': paymentTokenWaitPassenger1, }); Get.offAll(const MapPagePassenger()); } } addPassengerWallet() async { isLoading = true; update(); await addSeferWallet('visa-in', selectedAmount.toString()); await addPassengersWallet(selectedAmount == 100 ? '100' : selectedAmount == 200 ? '215' : selectedAmount == 400 ? '450' : selectedAmount == 1000 ? '1140' : '0'); // getPassengerWallet(); isLoading = false; update(); } void onChangedPaymentMethodWallet(bool? value) { if (box.read(BoxName.passengerWalletTotal) == null || double.parse(box.read(BoxName.passengerWalletTotal).toString()) < totalPassenger) { isWalletChecked = false; isWalletChecked ? isCashChecked = true : isCashChecked = true; update(); } else { isWalletChecked = !isWalletChecked; isWalletChecked ? isCashChecked = false : isCashChecked = true; update(); } } void onChangedPaymentMethodCash(bool? value) { if (box.read(BoxName.passengerWalletTotal) == null || double.parse(box.read(BoxName.passengerWalletTotal)) < totalPassenger) { isWalletChecked = false; isCashChecked = !isCashChecked; isCashChecked ? isWalletChecked = false : isWalletChecked = false; update(); } else { isCashChecked = !isCashChecked; isCashChecked ? isWalletChecked = false : isWalletChecked = true; update(); } } void applyPromoCodeToPassenger() async { //TAWJIHI CRUD().get(link: AppLink.getPassengersPromo, payload: { 'promo_code': promo.text, }).then((value) { var decod = jsonDecode(value); if (decod["status"] == "success") { var firstElement = decod["message"][0]; totalPassenger = totalPassenger - (totalPassenger * int.parse(firstElement['amount'])); MapPassengerController().promoTaken = true; update(); } }); } late String clientSecret; Future makePaymentStripe( double amount, String currency, Function method) async { var newAmount = (amount * 100).toInt(); try { // Check if local authentication is available bool isAvailable = await LocalAuthentication().isDeviceSupported(); if (isAvailable) { // Authenticate the user bool didAuthenticate = await LocalAuthentication().authenticate( localizedReason: 'Use Touch ID or Face ID to confirm payment', ); if (didAuthenticate) { // User authenticated successfully, proceed with payment clientSecret = await getClientSecret(newAmount.toString(), currency); await initializePaymentSheet(clientSecret); await Stripe.instance.presentPaymentSheet(); method(); } else { // Authentication failed, handle accordingly } } else { // Local authentication not available, proceed with payment without authentication clientSecret = await getClientSecret(newAmount.toString(), currency); await initializePaymentSheet(clientSecret); await Stripe.instance.presentPaymentSheet(); method(); } } catch (e) { rethrow; } } Future initializePaymentSheet(String clientSecret) async { await Stripe.instance.initPaymentSheet( paymentSheetParameters: SetupPaymentSheetParameters( // intentConfiguration: IntentConfiguration.fromJson({}), // applePay: const PaymentSheetApplePay(merchantCountryCode: 'US'), // googlePay: const PaymentSheetGooglePay(merchantCountryCode: 'US'), paymentIntentClientSecret: clientSecret, merchantDisplayName: AppInformation.appName, billingDetails: BillingDetails( name: box.read(BoxName.nameDriver) == null ? (box.read(BoxName.name).toString().split(' ')[0]).toString() : box.read(BoxName.nameDriver).toString(), email: box.read(BoxName.emailDriver) == null ? box.read(BoxName.email).toString() : box.read(BoxName.emailDriver).toString(), phone: box.read(BoxName.phoneDriver) == null ? box.read(BoxName.phone).toString() : box.read(BoxName.phoneDriver).toString(), address: Address( city: 'city', country: box.read(BoxName.countryCode), //'United States' line1: '', line2: '', postalCode: '12345', state: box.read(BoxName.countryCode) // 'Boston' )), allowsDelayedPaymentMethods: true, customerEphemeralKeySecret: Stripe.merchantIdentifier, appearance: const PaymentSheetAppearance( shapes: PaymentSheetShape(borderRadius: 12), colors: PaymentSheetAppearanceColors( background: AppColor.secondaryColor, ), ), billingDetailsCollectionConfiguration: const BillingDetailsCollectionConfiguration( name: CollectionMode.automatic, phone: CollectionMode.automatic, email: CollectionMode.automatic, // address: CollectionMode.automatic, ), ), ); } Future getClientSecret(String amount, currency) async { var res = await CRUD().postStripe( link: 'https://api.stripe.com/v1/payment_intents', payload: { 'amount': amount, 'currency': currency, 'payment_method_types[0]': 'card' }, ); // Convert the res object to a JSON object final jsonResponse = jsonDecode(res); // Check if the client_secret property exists and is not null if (jsonResponse.containsKey('client_secret') && jsonResponse['client_secret'] != null) { // Return the client_secret property return jsonResponse['client_secret'] as String; } else { throw Exception('Failed to fetch client secret'); } } Future configure3dSecureFuture() async { await Stripe.instance.openApplePaySetup(); } Future makePaymentPayPal(BuildContext context) async { try { // Check if local authentication is available bool isAvailable = await LocalAuthentication().isDeviceSupported(); if (isAvailable) { // Authenticate the user bool didAuthenticate = await LocalAuthentication().authenticate( localizedReason: 'Use Touch ID or Face ID to confirm payment', ); if (didAuthenticate) { // User authenticated successfully, proceed with payment if (selectedAmount != 0) { changePromoSheetDialogue(); Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) => UsePaypal( sandboxMode: true, clientId: AK.payPalClientId, secretKey: AK.payPalSecret, returnURL: AppInformation.website, cancelURL: "${AppInformation.website}/cancel", transactions: [ { "amount": { //sb-opsju26682403@personal.example.com "total": '$selectedAmount', "currency": box.read(BoxName.countryCode) == 'Egypt' ? 'EGP' : "JOD", "details": { "subtotal": '$selectedAmount', "shipping": '0', "shipping_discount": 0 } }, "description": "The payment transaction description.", "payment_options": const { "allowed_payment_method": "INSTANT_FUNDING_SOURCE" }, "item_list": { "items": [ { "name": "${AppInformation.appName} Wallet ", "quantity": 1, "price": '$selectedAmount', "currency": "USD" } ], // shipping address is not required though "shipping_address": const { "recipient_name": "${AppInformation.appName} Wallet", "line1": "Shafa Badran", "line2": "", "city": "Amman", "country_code": "JO", "postal_code": "13112", "phone": "+962798583052", "state": "Amman" }, } } ], note: "Contact us for any questions on your order.".tr, onSuccess: (Map params) async { addPassengerWallet(); changePromoSheetDialogue(); await getPassengerWallet(); }, onError: (error) { Toast.show(context, ' $error'.tr, AppColor.redColor); }, onCancel: (params) { Toast.show(context, 'Pyament Cancelled .'.tr, AppColor.yellowColor); }), ), ); } else { Toast.show(context, 'You will choose one of above !'.tr, AppColor.redColor); } } else { // Authentication failed, handle accordingly } } } catch (e) { rethrow; } } Map licenseDetailsMap = {}; Future getLicenseInfo() async { var res = await CRUD().get( link: AppLink.getLicense, payload: {'driverID': box.read(BoxName.driverID)}); licenseDetailsMap = jsonDecode(res); } Future createConnectAccount() async { String url = 'https://api.stripe.com/v1/accounts'; await getLicenseInfo(); DateTime dob = DateTime.parse(licenseDetailsMap['message'][0]['dateOfBirth']); int currentTimestamp = (DateTime.now().millisecondsSinceEpoch / 1000).round(); int day = dob.day; int month = dob.month; int year = dob.year; await getIpAddress(); final body = { "type": "custom", "business_profile[name]": box.read(BoxName.nameDriver), "business_profile[product_description]": "Captain", "business_profile[support_address][city]": "San Francisco", "business_profile[support_address][country]": 'US', "business_profile[support_address][line1]": licenseDetailsMap['message'][0]['address'].toString().trim()[0], "business_profile[support_address][postal_code]": licenseDetailsMap['message'][0]['postalCode'], "business_profile[support_address][state]": "MA", "business_profile[support_email]": "support@sefer.live", "business_profile[support_phone]": "555-123-4567", "business_profile[url]": "https://sefer.live", "business_type": "individual", "capabilities[card_payments][requested]": "true", "capabilities[transfers][requested]": "true", "company[address][city]": "ATTLEBORO", "company[address][country]": "US", "company[address][line1]": "1249 NEWPORT AVE", "company[address][postal_code]": "02703 ", "company[address][state]": "MA", "company[name]": AppInformation.companyName, "country": "us", "default_currency": "usd", "email": "support@sefer.live", // "individual[ssn]": "123-45-6789", // "individual[id_number]": licenseDetailsMap['message'][0]['documentNo'], // "individual[id_type]": "drivers_license", // "individual[address][city]": "ATTLEBORO", "individual[address][country]": "US", "individual[address][line1]": licenseDetailsMap['message'][0]['address'], // "individual[address][postal_code]": licenseDetailsMap['message'][0] // ['postalCode'], "individual[address][state]": "MA", // "individual[ssn_last_4]": '1111', //////// "individual[dob][day]": day.toString(), "individual[dob][month]": month.toString(), "individual[dob][year]": year.toString(), "individual[email]": box.read(BoxName.emailDriver), "individual[first_name]": licenseDetailsMap['message'][0]['name'].toString().split(' ')[0], "individual[gender]": licenseDetailsMap['message'][0]['sex'] == 'M' ? 'male' : 'female', "individual[last_name]": licenseDetailsMap['message'][0]['name'].toString().split(' ')[1], // "individual[phone]": box.read(BoxName.phoneDriver),//////////// "tos_acceptance[date]": currentTimestamp.toString(), "tos_acceptance[ip]": ip.toString() }; final response = await CRUD().postStripe( link: url, payload: body, ); final responseData = jsonDecode(response); final accountId = responseData['id']; box.write(BoxName.accountIdStripeConnect, accountId); await updateCaptainAccountBank(); return accountId; } Future updateCaptainAccountBank() async { var res = await CRUD().post(link: AppLink.updateAccountBank, payload: { 'id': box.read(BoxName.driverID), 'accountBank': box.read(BoxName.accountIdStripeConnect), }); if (jsonDecode(res)['status'] == 'success') { Get.snackbar('Account Updated', ''); } } Future createTransactionToCaptain( String amount, String account) async { String url = 'https://api.stripe.com/v1/transfers'; final body = { 'amount': amount, //amount 'currency': 'usd', 'destination': account //'acct_1OKIjQRgcWrsdyDT' //account id }; final response = await CRUD().postStripe( link: url, payload: body, ); final responseData = jsonDecode(response); final transactionId = responseData['id']; return transactionId; } Future getIpAddress() async { var url = Uri.parse('https://api.ipify.org?format=json'); var response = await http.get(url); if (response.statusCode == 200) { ip = jsonDecode(response.body)['ip']; } else {} } // 'https://accept.paymob.com/unifiedcheckout/?publicKey=egy_pk_live_mbjDC9Ni6FSHKmsz8sOHiVk2xd7oWRve&clientSecret=egy_sk_live_c0904e9cf04506ae64f818d4e075b4a957e3713fdf7a22cb7da30a29e72442b5' // أضف هذا الرابط إلى ملف AppLink الخاص بك // هذه هي الدالة الجديدة التي ستستخدمها لبدء الدفع Future payWithEcash(BuildContext context, String amount) async { try { // 1. يمكنك استخدام نفس طريقة التحقق بالبصمة إذا أردت bool isAvailable = await LocalAuthentication().isDeviceSupported(); if (isAvailable) { bool didAuthenticate = await LocalAuthentication().authenticate( localizedReason: 'Use Touch ID or Face ID to confirm payment', ); if (didAuthenticate) { // 2. استدعاء الـ Endpoint الجديد على السيرفر الخاص بك var res = await CRUD().postWallet( link: AppLink.payWithEcashPassenger, payload: { // ✅ أرسل البيانات التي يحتاجها السيرفر الخاص بـ ecash "amount": amount, "passengerId": box.read(BoxName.passengerID), }, ); // 3. التأكد من أن السيرفر أعاد رابط الدفع بنجاح if (res != null && res['status'] == 'success' && res['message'] != null) { final String paymentUrl = res['message']; // 4. الانتقال إلى شاشة الدفع الجديدة الخاصة بـ ecash Navigator.push( context, MaterialPageRoute( builder: (context) => EcashPaymentScreen(paymentUrl: paymentUrl), ), ); } else { // عرض رسالة خطأ في حال فشل السيرفر في إنشاء الرابط Get.defaultDialog( title: 'Error'.tr, content: Text( 'Failed to initiate payment. Please try again.'.tr, style: AppStyle.title, ), ); } } } } catch (e) { Get.defaultDialog( title: 'Error'.tr, content: Text( 'An error occurred during the payment process.'.tr, style: AppStyle.title, ), ); } } // Future payWithEcashDriver(BuildContext context, String amount) async { // try { // // يمكنك استخدام نفس طريقة التحقق بالبصمة إذا أردت // bool isAvailable = await LocalAuthentication().isDeviceSupported(); // if (isAvailable) { // bool didAuthenticate = await LocalAuthentication().authenticate( // localizedReason: 'Use Touch ID or Face ID to confirm payment'.tr, // ); // if (didAuthenticate) { // // استدعاء الـ Endpoint الجديد على السيرفر الخاص بك // var res = await CRUD().postWallet( // link: AppLink.payWithEcashPassenger, // // link: // // 'https://wl.tripz-egypt.com/v1/main/ride/ecash/driver/payWithEcash.php', // payload: { // // أرسل البيانات التي يحتاجها السيرفر // "amount": amount, // // "driverId": box.read(BoxName.driverID), // تأكد من وجود هذا المتغير // "passengerId": // box.read(BoxName.passengerID), // تأكد من وجود هذا المتغير // }, // ); // // التأكد من أن السيرفر أعاد رابط الدفع بنجاح // if (res != null && // res['status'] == 'success' && // res['message'] != null) { // final String paymentUrl = res['message']; // // الانتقال إلى شاشة الدفع الجديدة الخاصة بـ ecash للسائق // Navigator.push( // context, // MaterialPageRoute( // builder: (context) => // EcashDriverPaymentScreen(paymentUrl: paymentUrl), // ), // ); // } else { // // عرض رسالة خطأ في حال فشل السيرفر في إنشاء الرابط // Get.defaultDialog( // title: 'Error'.tr, // content: Text( // 'Failed to initiate payment. Please try again.'.tr, // style: AppStyle.title, // ), // ); // } // } // } // } catch (e) { // Get.defaultDialog( // title: 'Error'.tr, // content: Text( // 'An error occurred during the payment process.'.tr, // style: AppStyle.title, // ), // ); // } // } /// شاشة جديدة ومبسطة خاصة بدفع السائقين عبر ecash // Future payWithMTNWallet( // BuildContext context, String amount, String currency) async { // // خزن سياق علوي آمن من البداية // final BuildContext safeContext = // Get.overlayContext ?? Get.context ?? context; // // سبينر تحميل // if (!(Get.isDialogOpen ?? false)) { // Get.dialog(const Center(child: CircularProgressIndicator()), // barrierDismissible: false); // } // try { // final phone = box.read(BoxName.phoneWallet) as String; // final passengerID = box.read(BoxName.passengerID).toString(); // final formattedAmount = double.parse(amount).toStringAsFixed(0); // print("🚀 بدء عملية دفع MTN"); // print( // "📦 Payload: passengerID: $passengerID, amount: $formattedAmount, phone: $phone"); // // التحقق بالبصمة (اختياري) + حماية من الـ await // final localAuth = LocalAuthentication(); // final isAuthSupported = await localAuth.isDeviceSupported(); // if (isAuthSupported) { // final didAuth = await localAuth.authenticate( // localizedReason: 'استخدم بصمة الإصبع أو الوجه لتأكيد الدفع', // ); // if (!didAuth) { // if (Get.isDialogOpen == true) Get.back(); // print("❌ المستخدم لم يؤكد بالبصمة/الوجه"); // return; // } // } // // 1) بدء الدفع // final responseData = await CRUD().postWalletMtn( // link: AppLink.payWithMTNStart, // payload: { // "amount": formattedAmount, // "passengerId": passengerID, // "phone": phone, // "lang": box.read(BoxName.lang) ?? 'ar', // }, // ); // // print("✅ استجابة الخادم (mtn_start_payment.php):"); // // print(responseData); // Log.print('responseData: ${responseData}'); // // فحص الاستجابة بقوة // late final Map startRes; // if (responseData is Map) { // startRes = responseData; // } else if (responseData is String) { // startRes = json.decode(responseData) as Map; // } else { // throw Exception("تم استلام نوع بيانات غير متوقع من الخادم."); // } // if (startRes['status'] != 'success') { // final errorMsg = startRes['message']['Error']?.toString().tr ?? // "فشل بدء عملية الدفع. حاول مرة أخرى."; // throw Exception(errorMsg); // } // final messageData = startRes["message"] as Map; // final invoiceNumber = messageData["invoiceNumber"].toString(); // final operationNumber = messageData["operationNumber"].toString(); // final guid = messageData["guid"].toString(); // // print( // // "📄 invoiceNumber: $invoiceNumber, 🔢 operationNumber: $operationNumber, 🧭 guid: $guid"); // // أغلق السبينر قبل إظهار حوار OTP // if (Get.isDialogOpen == true) Get.back(); // // 2) إدخال OTP بـ Get.defaultDialog (لا يستخدم context قابل للتلف) // String otpInput = ""; // await Get.defaultDialog( // title: "أدخل كود التحقق", // barrierDismissible: false, // content: TextField( // keyboardType: TextInputType.number, // decoration: const InputDecoration(hintText: "كود OTP"), // onChanged: (v) => otpInput = v, // ), // confirm: TextButton( // onPressed: () { // if (otpInput.isEmpty || // otpInput.length < 4 || // otpInput.length > 8) { // Get.snackbar("تنبيه", "أدخل كود OTP صحيح (4–8 أرقام)"); // return; // } // Get.back(result: otpInput); // }, // child: const Text("تأكيد"), // ), // cancel: TextButton( // onPressed: () => Get.back(result: null), // child: const Text("إلغاء"), // ), // ).then((res) => otpInput = (res ?? "") as String); // if (otpInput.isEmpty) { // print("❌ لم يتم إدخال OTP"); // return; // } // print("🔐 تم إدخال OTP: $otpInput"); // // سبينر أثناء التأكيد // Get.dialog(const Center(child: CircularProgressIndicator()), // barrierDismissible: false); // // 3) تأكيد الدفع // final confirmRes = await CRUD().postWalletMtn( // link: AppLink.payWithMTNConfirm, // payload: { // "invoiceNumber": invoiceNumber, // "operationNumber": operationNumber, // "guid": guid, // "otp": otpInput, // "phone": phone, // "lang": box.read(BoxName.lang) ?? 'ar', // }, // ); // if (Get.isDialogOpen == true) Get.back(); // // print("✅ استجابة mtn_confirm.php:"); // // Log.print('confirmRes: ${confirmRes}'); // final ok = (confirmRes is Map && confirmRes['status'] == 'success'); // if (ok) { // Get.defaultDialog( // title: "✅ نجاح", // content: const Text("تمت عملية الدفع وإضافة الرصيد إلى محفظتك."), // ); // await getPassengerWallet(); // } else { // final errorMsg = (confirmRes['message']['message']?.toString()) ?? // "فشل في تأكيد الدفع"; // Get.defaultDialog(title: "❌ فشل", content: Text(errorMsg.tr)); // } // } catch (e, s) { // print("🔥 خطأ أثناء الدفع عبر MTN:"); // print(e); // print(s); // if (Get.isDialogOpen == true) Get.back(); // Get.defaultDialog( // title: 'حدث خطأ', // content: Text(e.toString().replaceFirst("Exception: ", "")), // ); // } // } Future payWithSyriaTelWallet(String amount, String currency) async { // helper لفتح لودينغ بأمان Future _showLoading() async { if (!(Get.isDialogOpen ?? false)) { Get.dialog(const Center(child: CircularProgressIndicator()), barrierDismissible: false); } } // helper لإغلاق أي حوار مفتوح void _closeAnyDialog() { if (Get.isDialogOpen ?? false) { Get.back(); } } await _showLoading(); try { final phone = box.read(BoxName.phoneWallet) as String; final passengerId = box.read(BoxName.passengerID).toString(); final formattedAmount = double.parse(amount).toStringAsFixed(0); print("🚀 Syriatel payment start"); print( "📦 Payload => passengerId:$passengerId amount:$formattedAmount phone:$phone"); // مصادقة حيوية (اختياري) final auth = LocalAuthentication(); if (await auth.isDeviceSupported()) { final ok = await auth.authenticate( localizedReason: 'استخدم بصمة الإصبع أو الوجه لتأكيد الدفع', ); if (!ok) { _closeAnyDialog(); print("❌ User did not authenticate"); return; } } // 1) بدء عملية الدفع final startRaw = await CRUD().postWalletMtn( link: AppLink.payWithSyriatelStart, payload: { "amount": formattedAmount, "passengerId": passengerId, "phone": phone, "lang": box.read(BoxName.lang) ?? 'ar', }, ); print("✅ Server response (start): $startRaw"); // تحويل الاستجابة إلى Map late final Map startRes; if (startRaw is Map) { startRes = startRaw; } else if (startRaw is String) { startRes = json.decode(startRaw) as Map; } else { throw Exception("Unexpected start response type"); } if (startRes['status'] != 'success') { final msg = (startRes['message'] ?? 'Failed to start payment').toString(); throw Exception(msg); } final messageData = startRes['message'] as Map; final transactionID = messageData['transactionID'].toString(); print("📄 transactionID: $transactionID"); // // 2) اطلب من المستخدم إدخال OTP عبر Get.dialog (بدون context) _closeAnyDialog(); // أغلق اللودينغ أولاً final otpController = TextEditingController(); final otp = await Get.dialog( AlertDialog( title: const Text("أدخل كود التحقق"), content: TextField( controller: otpController, keyboardType: TextInputType.number, decoration: const InputDecoration(hintText: "كود OTP"), ), actions: [ TextButton( child: const Text("تأكيد"), onPressed: () => Get.back(result: otpController.text.trim()), ), TextButton( child: const Text("إلغاء"), onPressed: () => Get.back(result: null), ), ], ), barrierDismissible: false, ); if (otp == null || otp.isEmpty) { print("❌ OTP not provided"); return; } print("🔐 OTP: $otp"); await _showLoading(); // 3) تأكيد الدفع final confirmRaw = await CRUD().postWallet( link: AppLink.payWithSyriatelConfirm, payload: { "transactionID": transactionID, "otp": otp, }, ); _closeAnyDialog(); // أغلق اللودينغ print("✅ Response (confirm): $confirmRaw"); late final Map confirmRes; if (confirmRaw is Map) { confirmRes = confirmRaw; } else if (confirmRaw is String) { confirmRes = json.decode(confirmRaw) as Map; } else { throw Exception("Unexpected confirm response type"); } if (confirmRes['status'] == 'success') { Get.defaultDialog( title: "✅ نجاح", content: const Text("تمت عملية الدفع وإضافة الرصيد إلى محفظتك."), ); } else { final msg = (confirmRes['message'] ?? 'فشل في تأكيد الدفع').toString(); Get.defaultDialog( title: "❌ فشل", content: Text(msg), ); } } catch (e, s) { print("🔥 Error during Syriatel Wallet payment:\n$e\n$s"); _closeAnyDialog(); Get.defaultDialog( title: 'حدث خطأ', content: Text(e.toString().replaceFirst("Exception: ", "")), ); } } @override void onInit() { timestamp = now.millisecondsSinceEpoch; if (box.read(BoxName.passengerWalletTotal) == null) { box.write(BoxName.passengerWalletTotal, '0'); } getPassengerWallet(); final localAuth = LocalAuthentication(); super.onInit(); } } class EcashDriverPaymentScreen extends StatefulWidget { final String paymentUrl; const EcashDriverPaymentScreen({required this.paymentUrl, Key? key}) : super(key: key); @override State createState() => _EcashDriverPaymentScreenState(); } class _EcashDriverPaymentScreenState extends State { late final WebViewController _controller; @override void initState() { super.initState(); _controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setNavigationDelegate(NavigationDelegate( onPageFinished: (url) async { print('Ecash Driver WebView URL Finished: $url'); await Get.find().getPassengerWallet(); // هنا نتحقق فقط من أن المستخدم عاد إلى صفحة النجاح // لا حاجة لاستدعاء أي API هنا، فالـ Webhook يقوم بكل العمل if (url.contains("success.php")) { showProcessingDialog(); } }, )) ..loadRequest(Uri.parse(widget.paymentUrl)); } // دالة لعرض رسالة "العملية قيد المعالجة" void showProcessingDialog() { showDialog( barrierDismissible: false, context: Get.context!, builder: (BuildContext context) { return AlertDialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12.0), ), title: Row( children: [ Icon(Icons.check_circle, color: Colors.green), const SizedBox(width: 8), Text( "Payment Successful".tr, style: TextStyle( color: Colors.green, fontWeight: FontWeight.bold, ), ), ], ), content: Text( "Your payment is being processed and your wallet will be updated shortly." .tr, style: const TextStyle(fontSize: 16), ), actions: [ TextButton( onPressed: () { // أغلق مربع الحوار، ثم أغلق شاشة الدفع Navigator.pop(context); // Close the dialog Navigator.pop(context); // Close the payment screen }, style: TextButton.styleFrom( backgroundColor: Colors.green, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8.0), ), ), child: Text( "OK".tr, style: const TextStyle(color: Colors.white), ), ), ], ); }, ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Complete Payment'.tr)), body: WebViewWidget(controller: _controller), ); } } ================================================== FILE PATH: ./lib/controller/payment/passenger_wallet_history_controller.dart ================================================== import 'dart:convert'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:Intaleq/main.dart'; import '../../views/widgets/mydialoug.dart'; class PassengerWalletHistoryController extends GetxController { bool isLoading = false; List archive = []; Future getArchivePayment() async { try { isLoading = true; update(); var res = await CRUD().getWallet( link: AppLink.getPassengerWalletArchive, payload: {'passenger_id': box.read(BoxName.passengerID)}, ); if (res != 'failure') { archive = jsonDecode(res)['message']; } else { MyDialog().getDialog('No wallet record found'.tr, '', () { Get.back(); Get.back(); }); } } catch (e) { // MyDialog().getDialog('An error occurred'.tr, '', () { // Get.back(); // }); } finally { isLoading = false; update(); } } @override void onInit() { getArchivePayment(); super.onInit(); } } ================================================== FILE PATH: ./lib/controller/payment/driver_payment_controller.dart ================================================== import 'dart:convert'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:Intaleq/main.dart'; class DriverWalletHistoryController extends GetxController { bool isLoading = false; List archive = []; getArchivePayment() async { isLoading = true; update(); var res = await CRUD().getWallet( link: AppLink.getWalletByDriver, payload: {'driverID': box.read(BoxName.driverID)}); if (res == 'failure') { Get.defaultDialog( barrierDismissible: false, title: 'There is no data yet.'.tr, middleText: '', confirm: MyElevatedButton( title: 'Back'.tr, onPressed: () { Get.back(); Get.back(); }, )); } archive = jsonDecode(res)['message']; isLoading = false; update(); } @override void onInit() { getArchivePayment(); super.onInit(); } } ================================================== FILE PATH: ./lib/controller/payment/stripe.dart ================================================== ================================================== FILE PATH: ./lib/controller/payment/paymob/paymob_wallet.dart ================================================== import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/main.dart'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; import '../../../print.dart'; import '../../functions/encrypt_decrypt.dart'; class PaymobResponseWallet { final bool success; final String? transactionID; final String? responseCode; final String? message; PaymobResponseWallet({ required this.success, this.transactionID, this.responseCode, this.message, }); factory PaymobResponseWallet.fromJson(Map json) { return PaymobResponseWallet( success: json['success'] == 'true', transactionID: json['id'], responseCode: json['txn_response_code'], message: json['data']['message'], ); } } class PaymobPaymentWallet { static PaymobPaymentWallet instance = PaymobPaymentWallet(); bool _isInitializedWallet = false; final Dio _dio = Dio(); final _baseURL = 'https://accept.paymob.com/api/'; late String _apiKey; late int _integrationID; late int _iFrameID; late String _iFrameURL; late int _userTokenExpiration; /// Initializing PaymobPayment instance. Future initialize({ /// It is a unique identifier for the merchant which used to authenticate your requests calling any of Accept's API. /// from dashboard Select Settings -> Account Info -> API Key required String apiKey, /// from dashboard Select Developers -> Payment Integrations -> Online Card ID required int integrationID, /// from paymob Select Developers -> iframes required int iFrameID, /// The expiration time of this payment token in seconds. (The maximum is 3600 seconds which is an hour) int userTokenExpiration = 300, }) async { if (_isInitializedWallet) { return true; } _dio.options.baseUrl = _baseURL; _dio.options.validateStatus = (status) => true; _apiKey = apiKey; _integrationID = integrationID; _iFrameID = iFrameID; _iFrameURL = 'https://accept.paymobsolutions.com/api/acceptance/iframes/$_iFrameID?payment_token='; _isInitializedWallet = true; _userTokenExpiration = userTokenExpiration; return _isInitializedWallet; } /// Get authentication token, which is valid for one hour from the creation time. Future _getAuthToken() async { try { final response = await _dio.post( 'auth/tokens', data: { 'api_key': _apiKey, }, ); return response.data['token']; } catch (e) { rethrow; } } /// At this step, you will register an order to Accept's database, so that you can pay for it later using a transaction Future _addOrder({ required String authToken, required String currency, required String amount, required List items, }) async { try { final response = await _dio.post( 'ecommerce/orders', data: { "auth_token": authToken, "delivery_needed": "false", "amount_cents": amount, "currency": currency, "items": items, }, ); return response.data['id']; } catch (e) { rethrow; } } /// At this step, you will obtain a payment_key token. This key will be used to authenticate your payment request. It will be also used for verifying your transaction request metadata. Future _getPurchaseToken({ required String authToken, required String currency, required int orderID, required String amount, required PaymobBillingDataWallet billingData, }) async { final response = await _dio.post( 'acceptance/payment_keys', data: { "auth_token": authToken, "amount_cents": amount, "expiration": _userTokenExpiration, "order_id": orderID, "billing_data": billingData, "currency": currency, "integration_id": _integrationID, "lock_order_when_paid": "false" }, ); // final message = response.data['message']; // if (message != null) { // throw Exception(message); // } return response.data['token']; } Future _getWalletUrl({ required String paymentToken, }) async { final Map data = { "source": { "identifier": (box.read(BoxName.phoneWallet).toString()), "subtype": "WALLET", }, "payment_token": paymentToken, }; final dio = Dio(); try { final response = await dio.post( 'https://accept.paymobsolutions.com/api/acceptance/payments/pay', data: data, ); // 4. Handle Payment Response if (response.statusCode == 200) { final paymentData = response.data; // Assuming JSON response return paymentData['iframe_redirection_url']; // Navigate to success screen or display success message } else { // Payment failed: Handle errors (e.g., display error message) } } on DioError catch (e) { // Handle network or Dio-related errors } return ''; } /// Proceed to pay with only calling this function. /// Opens a WebView at Paymob redirectedURL to accept user payment info. Future pay( { /// BuildContext for navigation to WebView required BuildContext context, /// Which Currency you would pay in. required String currency, /// Payment amount in cents EX: 20000 is an 200 EGP required String amountInCents, /// Optional Callback if you can use return result of pay function or use this callback void Function(PaymobResponseWallet response)? onPayment, /// list of json objects contains the contents of the purchase. List? items, /// The billing data related to the customer related to this payment. PaymobBillingDataWallet? billingData}) async { if (!_isInitializedWallet) { throw Exception( 'PaymobPayment is not initialized call:`PaymobPayment.instance.initialize`'); } final authToken = await _getAuthToken(); final orderID = await _addOrder( authToken: authToken, currency: currency, amount: amountInCents, items: items ?? [], ); final purchaseToken = await _getPurchaseToken( authToken: authToken, currency: currency, orderID: orderID, amount: amountInCents, billingData: billingData ?? PaymobBillingDataWallet( // email: box.read(BoxName.email) ?? box.read(BoxName.emailDriver), // firstName: box.read(BoxName.name) ?? box.read(BoxName.nameDriver), // lastName: // box.read(BoxName.lastNameDriver) ?? box.read(BoxName.name), // phoneNumber: // box.read(BoxName.phone) ?? box.read(BoxName.phoneDriver), ), ); final urlWallet = await _getWalletUrl(paymentToken: purchaseToken); Log.print('urlWallet: ${urlWallet}'); if (context.mounted) { final response = await PaymobIFrameWallet.show( context: context, redirectURL: urlWallet, onPayment: onPayment, ); return response; } return null; } } class PaymobBillingDataWallet { String? email; String? firstName; String? lastName; String? phoneNumber; String? apartment; String? floor; String? street; String? building; String? postalCode; String? city; String? state; String? country; String? shippingMethod; PaymobBillingDataWallet({ this.email, this.firstName, this.lastName, this.phoneNumber, this.apartment, this.floor, this.street, this.building, this.postalCode, this.city, this.state, this.country, this.shippingMethod, }); Map toJson() { return { "email": (box.read(BoxName.email)), "first_name": (box.read(BoxName.name).toString().split(' ')[0]).toString(), "last_name": (box.read(BoxName.name).toString().split(' ')[1]).toString() ?? 'Intaleq', "phone_number": (box.read(BoxName.phoneWallet)), "apartment": apartment ?? "NA", "floor": floor ?? "NA", "building": building ?? "NA", "street": street ?? "NA", "postal_code": postalCode ?? "NA", "city": city ?? "NA", "state": state ?? "NA", "country": country ?? "NA", "shipping_method": shippingMethod ?? "NA", }; } } class PaymobIFrameWallet extends StatefulWidget { const PaymobIFrameWallet({ Key? key, required this.redirectURL, this.onPayment, }) : super(key: key); final String redirectURL; final void Function(PaymobResponseWallet)? onPayment; static Future show({ required BuildContext context, required String redirectURL, void Function(PaymobResponseWallet)? onPayment, }) => Navigator.of(context).push( MaterialPageRoute( builder: (context) { return PaymobIFrameWallet( onPayment: onPayment, redirectURL: redirectURL, ); }, ), ); @override State createState() => _PaymobIFrameState(); } class _PaymobIFrameState extends State { WebViewController? controller; @override void initState() { controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setNavigationDelegate( NavigationDelegate( onNavigationRequest: (NavigationRequest request) { if (request.url.contains('txn_response_code') && // request.url.contains('successfully') && request.url.contains('success') && request.url.contains('id')) { final params = _getParamFromURL(request.url); final response = PaymobResponseWallet.fromJson(params); if (widget.onPayment != null) { widget.onPayment!(response); } Navigator.pop(context, response); return NavigationDecision.prevent; } return NavigationDecision.navigate; }, ), ) ..loadRequest(Uri.parse(widget.redirectURL)); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( body: controller == null ? const Center( child: CircularProgressIndicator.adaptive(), ) : SafeArea( child: WebViewWidget( controller: controller!, ), ), ); } Map _getParamFromURL(String url) { final uri = Uri.parse(url); final queryParams = uri.queryParameters; final data = {}; queryParams.forEach((key, value) { if (key.contains('.')) { final parts = key.split('.'); data.putIfAbsent(parts.first, () => {}); (data[parts.first] as Map)[parts.last] = value; } else { data[key] = value; } }); return data; } } ================================================== FILE PATH: ./lib/controller/payment/paymob/e_cash_screen.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:webview_flutter/webview_flutter.dart'; // ✅ شاشة جديدة ومبسطة خاصة بـ ecash class EcashPaymentScreen extends StatefulWidget { final String paymentUrl; const EcashPaymentScreen({required this.paymentUrl, Key? key}) : super(key: key); @override State createState() => _EcashPaymentScreenState(); } class _EcashPaymentScreenState extends State { late final WebViewController _controller; @override void initState() { super.initState(); _controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setNavigationDelegate(NavigationDelegate( onPageFinished: (url) { print('Ecash WebView URL Finished: $url'); // ✅ هنا نتحقق فقط من أن المستخدم عاد إلى صفحة النجاح // هذه الصفحة هي التي حددناها في `APP_REDIRECT_URL_SUCCESS` في ملف PHP if (url.contains("success.php")) { // لا نستدعي أي API هنا. الـ Webhook على السيرفر يقوم بكل العمل. // فقط نعرض للمستخدم رسالة بأن العملية قيد المراجعة ونغلق الشاشة. showProcessingDialog(); } }, )) ..loadRequest(Uri.parse(widget.paymentUrl)); } // دالة لعرض رسالة "العملية قيد المعالجة" void showProcessingDialog() { showDialog( barrierDismissible: false, context: Get.context!, builder: (BuildContext context) { return AlertDialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12.0), ), title: Row( children: [ Icon(Icons.check_circle, color: Colors.green), const SizedBox(width: 8), Text( "Payment Successful".tr, style: TextStyle( color: Colors.green, fontWeight: FontWeight.bold, ), ), ], ), content: Text( "Your payment is being processed and your wallet will be updated shortly." .tr, style: const TextStyle(fontSize: 16), ), actions: [ TextButton( onPressed: () { // أغلق مربع الحوار، ثم أغلق شاشة الدفع Navigator.pop(context); // Close the dialog Navigator.pop(context); // Close the payment screen }, style: TextButton.styleFrom( backgroundColor: Colors.green, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8.0), ), ), child: Text( "OK".tr, style: const TextStyle(color: Colors.white), ), ), ], ); }, ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Complete Payment'.tr)), body: WebViewWidget(controller: _controller), ); } } ================================================== FILE PATH: ./lib/controller/payment/paymob/paymob_response.dart ================================================== import 'dart:convert'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:Intaleq/main.dart'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:webview_flutter/webview_flutter.dart'; import 'package:http/http.dart' as http; import '../../../print.dart'; import '../../functions/encrypt_decrypt.dart'; class PaymobResponse { bool success; String? transactionID; String? responseCode; String? message; PaymobResponse({ this.transactionID, required this.success, this.responseCode, this.message, }); factory PaymobResponse.fromJson(Map json) { return PaymobResponse( success: json['success'] == 'true', transactionID: json['id'], message: json['message'], responseCode: json['txn_response_code'], ); } } class PaymobPayment { static PaymobPayment instance = PaymobPayment(); bool _isInitialized = false; final Dio _dio = Dio(); final _baseURL = 'https://accept.paymob.com/api/'; late String _apiKey; late int _integrationID; late int _iFrameID; late String _iFrameURL; late int _userTokenExpiration; /// Initializing PaymobPayment instance. Future initialize({ /// It is a unique identifier for the merchant which used to authenticate your requests calling any of Accept's API. /// from dashboard Select Settings -> Account Info -> API Key required String apiKey, /// from dashboard Select Developers -> Payment Integrations -> Online Card ID required int integrationID, /// from paymob Select Developers -> iframes required int iFrameID, /// The expiration time of this payment token in seconds. (The maximum is 3600 seconds which is an hour) int userTokenExpiration = 300, }) async { if (_isInitialized) { return true; } _dio.options.baseUrl = _baseURL; _dio.options.validateStatus = (status) => true; _apiKey = apiKey; _integrationID = integrationID; _iFrameID = iFrameID; _iFrameURL = 'https://accept.paymobsolutions.com/api/acceptance/iframes/$_iFrameID?payment_token='; _isInitialized = true; _userTokenExpiration = userTokenExpiration; return _isInitialized; } /// Get authentication token, which is valid for one hour from the creation time. Future _getAuthToken() async { try { final response = await _dio.post( 'auth/tokens', data: { 'api_key': _apiKey, }, ); return response.data['token']; } catch (e) { rethrow; } } /// At this step, you will register an order to Accept's database, so that you can pay for it later using a transaction Future _addOrder({ required String authToken, required String currency, required String amount, required List items, }) async { try { final response = await _dio.post( 'ecommerce/orders', data: { "auth_token": authToken, "delivery_needed": "false", "amount_cents": amount, "currency": currency, "items": items, }, ); return response.data['id']; } catch (e) { rethrow; } } /// At this step, you will obtain a payment_key token. This key will be used to authenticate your payment request. It will be also used for verifying your transaction request metadata. Future _getPurchaseToken({ required String authToken, required String currency, required int orderID, required String amount, required PaymobBillingData billingData, }) async { final response = await _dio.post( 'acceptance/payment_keys', data: { "auth_token": authToken, "amount_cents": amount, "expiration": _userTokenExpiration, "order_id": orderID, "billing_data": billingData, "currency": currency, "integration_id": _integrationID, "lock_order_when_paid": "false" }, ); final message = response.data['message']; if (message != null) { throw Exception(message); } return response.data['token']; } /// Proceed to pay with only calling this function. /// Opens a WebView at Paymob redirectedURL to accept user payment info. Future pay( { /// BuildContext for navigation to WebView required BuildContext context, /// Which Currency you would pay in. required String currency, /// Payment amount in cents EX: 20000 is an 200 EGP required String amountInCents, /// Optional Callback if you can use return result of pay function or use this callback void Function(PaymobResponse response)? onPayment, /// list of json objects contains the contents of the purchase. List? items, /// The billing data related to the customer related to this payment. PaymobBillingData? billingData}) async { if (!_isInitialized) { throw Exception( 'PaymobPayment is not initialized call:`PaymobPayment.instance.initialize`'); } final authToken = await _getAuthToken(); final orderID = await _addOrder( authToken: authToken, currency: currency, amount: amountInCents, items: items ?? [], ); final purchaseToken = await _getPurchaseToken( authToken: authToken, currency: currency, orderID: orderID, amount: amountInCents, billingData: billingData ?? PaymobBillingData(), ); if (context.mounted) { final response = await PaymobIFrame.show( context: context, redirectURL: _iFrameURL + purchaseToken, onPayment: onPayment, ); return response; } return null; } //51624 } class PaymobBillingData { String? email; String? firstName; String? lastName; String? phoneNumber; String? apartment; String? floor; String? street; String? building; String? postalCode; String? city; String? state; String? country; String? shippingMethod; PaymobBillingData({ this.email, this.firstName, this.lastName, this.phoneNumber, this.apartment, this.floor, this.street, this.building, this.postalCode, this.city, this.state, this.country, this.shippingMethod, }); Map toJson() { return { "email": box.read(BoxName.email) ?? box.read(BoxName.emailDriver), "first_name": (box.read(BoxName.name).toString().split(' ')[0]).toString(), "last_name": (box.read(BoxName.name).toString().split(' ')[1]).toString(), "phone_number": (box.read(BoxName.phone)), "apartment": apartment ?? "NA", "floor": floor ?? "NA", "building": building ?? "NA", "street": street ?? "NA", "postal_code": postalCode ?? "NA", "city": city ?? "NA", "state": state ?? "NA", "country": country ?? "NA", "shipping_method": box.read(BoxName.passengerID) ?? "NA", }; } } class PaymobIFrame extends StatefulWidget { const PaymobIFrame({ Key? key, required this.redirectURL, this.onPayment, }) : super(key: key); final String redirectURL; final void Function(PaymobResponse)? onPayment; static Future show({ required BuildContext context, required String redirectURL, void Function(PaymobResponse)? onPayment, }) => Navigator.of(context).push( MaterialPageRoute( builder: (context) { return PaymobIFrame( onPayment: onPayment, redirectURL: redirectURL, ); }, ), ); @override State createState() => _PaymobIFrameState(); } class _PaymobIFrameState extends State { WebViewController? controller; @override void initState() { controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setNavigationDelegate( NavigationDelegate( onNavigationRequest: (NavigationRequest request) { if (request.url.contains('txn_response_code') && request.url.contains('success') && request.url.contains('id')) { final params = _getParamFromURL(request.url); final response = PaymobResponse.fromJson(params); if (widget.onPayment != null) { widget.onPayment!(response); } Navigator.pop(context, response); return NavigationDecision.prevent; } return NavigationDecision.navigate; }, ), ) ..loadRequest(Uri.parse(widget.redirectURL)); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( body: controller == null ? const Center( child: CircularProgressIndicator.adaptive(), ) : SafeArea( child: WebViewWidget( controller: controller!, ), ), ); } Map _getParamFromURL(String url) { final uri = Uri.parse(url); Map data = {}; uri.queryParameters.forEach((key, value) { data[key] = value; }); return data; } } class PaymentScreen extends StatefulWidget { final String iframeUrl; const PaymentScreen({required this.iframeUrl, Key? key}) : super(key: key); @override State createState() => _PaymentScreenState(); } class _PaymentScreenState extends State { late final WebViewController _controller; @override void initState() { super.initState(); _controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setNavigationDelegate(NavigationDelegate( onPageFinished: (url) { Log.print('url onPageFinished : ${url}'); if (url.contains("success")) { _fetchPaymentStatus(); // ✅ استدعاء الويب هوك بعد نجاح الدفع } else if (url.contains("failed")) { showCustomDialog( title: "Error".tr, message: 'Payment Failed'.tr, // يتم جلب رسالة الخطأ من الخادم isSuccess: false, ); } }, )) ..loadRequest(Uri.parse(widget.iframeUrl)); } // ✅ استدعاء الويب هوك بعد انتهاء الدفع Future _fetchPaymentStatus() async { final String userId = (box.read(BoxName.phoneWallet)); // ضع user_id الحقيقي final String apiUrl = AppLink.paymetVerifyPassenger; try { final response = await CRUD().getWallet(link: apiUrl, payload: { 'user_id': userId, 'passengerId': box.read(BoxName.passengerID), 'paymentMethod': 'visa-in', }); if (response != 'failure' && response != 'token_expired') { try { final jsonData = jsonDecode(response); if (jsonData['status'] == 'success') { // تأكد أن 'message' هو String وليس Map // final message = jsonData['message']; showCustomDialog( title: "Payment Status", message: jsonData['message'], // يتم جلب الرسالة من الخادم isSuccess: true, ); } else { showCustomDialog( title: "Error", message: jsonData['message'], // يتم جلب رسالة الخطأ من الخادم isSuccess: false, ); } } catch (e) { showCustomDialog( title: "Error", message: response, // يتم جلب رسالة الخطأ من الخادم isSuccess: false, ); } } else { showCustomDialog( title: "Error".tr, message: response, // يتم جلب رسالة الخطأ من الخادم isSuccess: false, ); } } catch (e) { showCustomDialog( title: "Error".tr, message: 'Server error'.tr, // يتم جلب رسالة الخطأ من الخادم isSuccess: false, ); } } void showCustomDialog({ required String title, required String message, required bool isSuccess, }) { showDialog( barrierDismissible: false, context: Get.context!, builder: (BuildContext context) { return AlertDialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12.0), ), title: Row( children: [ Icon( isSuccess ? Icons.check_circle : Icons.error, color: isSuccess ? Colors.green : Colors.red, ), const SizedBox(width: 8), Text( title, style: TextStyle( color: isSuccess ? Colors.green : Colors.red, fontWeight: FontWeight.bold, ), ), ], ), content: Text( message, style: const TextStyle(fontSize: 16), ), actions: [ TextButton( onPressed: () { Navigator.pop(context); Navigator.pop(context); }, style: TextButton.styleFrom( backgroundColor: isSuccess ? Colors.green : Colors.red, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8.0), ), ), child: Text( "OK", style: const TextStyle(color: Colors.white), ), ), ], ); }, ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('إتمام الدفع')), body: WebViewWidget(controller: _controller), ); } } ================================================== FILE PATH: ./lib/controller/local/local_controller.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../constant/box_name.dart'; import '../../main.dart'; import '../themes/themes.dart'; class LocaleController extends GetxController { Locale? language; String countryCode = ''; ThemeData appTheme = lightThemeEnglish; void changeLang(String langcode) { Locale locale; switch (langcode) { case "ar": locale = const Locale("ar"); appTheme = lightThemeArabic; box.write(BoxName.lang, 'ar'); break; case "ar-main": locale = const Locale("ar-main"); appTheme = lightThemeArabic; box.write(BoxName.lang, 'ar-main'); break; case "en": locale = const Locale("en"); appTheme = lightThemeEnglish; box.write(BoxName.lang, 'en'); break; case "tr": locale = const Locale("tr"); appTheme = lightThemeEnglish; box.write(BoxName.lang, 'tr'); break; case "fr": locale = const Locale("fr"); appTheme = lightThemeEnglish; box.write(BoxName.lang, 'fr'); break; case "it": locale = const Locale("it"); appTheme = lightThemeEnglish; box.write(BoxName.lang, 'it'); break; case "de": locale = const Locale("de"); appTheme = lightThemeEnglish; box.write(BoxName.lang, 'de'); break; case "el": locale = const Locale("el"); appTheme = lightThemeEnglish; box.write(BoxName.lang, 'el'); break; case "es": locale = const Locale("es"); appTheme = lightThemeEnglish; box.write(BoxName.lang, 'es'); break; case "fa": locale = const Locale("fa"); appTheme = lightThemeEnglish; box.write(BoxName.lang, 'fa'); break; case "zh": locale = const Locale("zh"); appTheme = lightThemeEnglish; box.write(BoxName.lang, 'zh'); break; case "ru": locale = const Locale("ru"); appTheme = lightThemeEnglish; box.write(BoxName.lang, 'ru'); break; case "hi": locale = const Locale("hi"); appTheme = lightThemeEnglish; box.write(BoxName.lang, 'hi'); break; case "ar-ma": locale = const Locale("ar-ma"); appTheme = lightThemeArabic; box.write(BoxName.lang, 'ar-ma'); break; case "ar-gulf": locale = const Locale("ar-gulf"); appTheme = lightThemeArabic; box.write(BoxName.lang, 'ar-gulf'); break; default: locale = Locale(Get.deviceLocale!.languageCode); box.write(BoxName.lang, Get.deviceLocale!.languageCode); appTheme = lightThemeEnglish; break; } box.write(BoxName.lang, langcode); Get.changeTheme(appTheme); Get.updateLocale(locale); update(); } @override void onInit() { String? storedLang = box.read(BoxName.lang); if (storedLang == null) { // Use device language if no language is stored storedLang = Get.deviceLocale!.languageCode; box.write(BoxName.lang, storedLang); } changeLang(storedLang); super.onInit(); } } // class LocaleController extends GetxController { // Locale? language; // String countryCode = ''; // void restartApp() { // runApp(const MyApp()); // } // ThemeData appTheme = themeEnglish; // changeLang(String langcode) { // Locale locale; // switch (langcode) { // case "ar": // locale = const Locale("ar"); // appTheme = themeArabic; // break; // case "en": // locale = const Locale("en"); // appTheme = themeEnglish; // break; // case "tr": // locale = const Locale("tr"); // appTheme = themeEnglish; // break; // case "fr": // locale = const Locale("fr"); // appTheme = themeEnglish; // break; // case "it": // locale = const Locale("it"); // appTheme = themeEnglish; // break; // case "de": // locale = const Locale("de"); // appTheme = themeEnglish; // break; // case "el": // locale = const Locale("el"); // appTheme = themeEnglish; // break; // case "es": // locale = const Locale("es"); // appTheme = themeEnglish; // break; // case "fa": // locale = const Locale("fa"); // appTheme = themeArabic; // break; // case "zh": // locale = const Locale("zh"); // appTheme = themeEnglish; // break; // case "ru": // locale = const Locale("ru"); // appTheme = themeEnglish; // break; // case "hi": // locale = const Locale("hi"); // appTheme = themeEnglish; // break; // default: // locale = Locale(Get.deviceLocale!.languageCode); // appTheme = themeEnglish; // break; // } // box.write(BoxName.lang, langcode); // Get.changeTheme(appTheme); // Get.updateLocale(locale); // restartApp(); // update(); // } // @override // void onInit() { // String? storedLang = box.read(BoxName.lang); // if (storedLang == null) { // // Use device language if no language is stored // storedLang = Get.deviceLocale!.languageCode; // box.write(BoxName.lang, storedLang); // } // changeLang(storedLang); // super.onInit(); // } // } ================================================== FILE PATH: ./lib/controller/local/translations.dart ================================================== import 'package:get/get.dart'; class MyTranslation extends Translations { @override Map> get keys => { "ar": { "Syria": "سوريا", "SYP": "ل.س", "Order": "طلب", "OrderVIP": "طلب VIP", "Cancel Trip": "إلغاء الرحلة", "Passenger Cancel Trip": "الراكب ألغى الرحلة", "VIP Order": "طلب VIP", 'Hi ,I Arrive your site': "مرحبًا، لقد وصلت إلى موقعك", "The driver accepted your trip": "السائق قبل رحلتك", "message From passenger": "رسالة من الراكب", "Cancel": "إلغاء", "Trip Cancelled. The cost of the trip will be added to your wallet.": "تم إلغاء الرحلة. سيتم إضافة تكلفة الرحلة إلى محفظتك.", "token change": "تغيير الرمز", "face detect": "كشف الوجه", "Face Detection Result": "نتيجة كشف الوجه", "similar": "مشابه", "not similar": "غير مشابه", "Hi ,I will go now": "مرحبًا، سأذهب الآن", "Passenger come to you": "الراكب قادم إليك", "Call Income": "مكالمة واردة", "Call Income from Passenger": "مكالمة واردة من الراكب", "Criminal Document Required": "مطلوب وثيقة جنائية", "You should have upload it .": "يجب عليك تحميلها.", "Call End": "انتهاء المكالمة", "The order has been accepted by another driver.": "تم قبول الطلب من قبل سائق آخر.", "The order Accepted by another Driver": "تم قبول الطلب من قبل سائق آخر", "We regret to inform you that another driver has accepted this order.": "نأسف لإعلامك بأن سائقًا آخر قد قبل هذا الطلب.", "Driver Applied the Ride for You": "السائق قدم الطلب لك", "Applied": "تم التقديم", 'Pay by Sham Cash': 'الدفع عبر شام كاش', 'Pay with Debit Card': 'الدفع ببطاقة الخصم', "Please go to Car Driver": "يرجى الذهاب إلى سائق السيارة", "Ok I will go now.": "حسنًا، سأذهب الآن.", "Accepted Ride": "تم قبول الرحلة", "Driver Accepted the Ride for You": "السائق قبل الرحلة لك", "Promo": "عرض ترويجي", "Show latest promo": "عرض أحدث عرض ترويجي", "Trip Monitoring": "مراقبة الرحلة", "Driver Is Going To Passenger": "السائق في طريقه إليك", "Please stay on the picked point.": "يرجى البقاء في نقطة الالتقاط المحددة.", "message From Driver": "رسالة من السائق", "Trip is Begin": "بدأت الرحلة", "Cancel Trip from driver": "إلغاء الرحلة من السائق", "We will look for a new driver.\nPlease wait.": "هنبحث عن سائق جديد.\nمن فضلك انتظر.", "The driver canceled your ride.": "السائق ألغى رحلتك.", "Driver Finish Trip": "السائق أنهى الرحلة", "you will pay to Driver": "هتدفع للسائق", "Don’t forget your personal belongings.": "متنساش حاجاتك الشخصية.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "من فضلك تأكد إن معاك كل حاجاتك الشخصية وإن أي مبلغ متبقي، لو موجود، تم إضافته لمحفظتك قبل ما تمشي. شكرًا لاستخدامك تطبيق انطلق", "Finish Monitor": "إنهاء المراقبة", "Trip finished": "الرحلة انتهت", "Call Income from Driver": "مكالمة واردة من السائق", "Driver Cancelled Your Trip": "السائق ألغى رحلتك", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "هتدفع للسائق هتدفع تكلفة وقت السائق شوف محفظة Intaleq بتاعتك", "Order Applied": "تم تطبيق الطلب", "welcome to intaleq": "أهلاً بك في انطلق", "login or register subtitle": "أدخل رقم موبايلك لتسجيل الدخول أو لإنشاء حساب جديد", 'An application error occurred.': 'حدث خطأ في التطبيق.', 'Submission Failed': 'فشل الإرسال', 'Your complaint has been submitted.': 'تم تقديم شكواك.', 'Failed to connect to the server. Please try again.': 'فشل الاتصال بالخادم. الرجاء المحاولة مرة أخرى.', 'Ride information not found. Please refresh the page.': 'لم يتم العثور على معلومات الرحلة. الرجاء تحديث الصفحة.', 'Please describe your issue before submitting.': 'يرجى وصف مشكلتك قبل الإرسال.', 'An application error occurred during upload.': 'حدث خطأ في التطبيق أثناء الرفع.', 'Failed to upload audio file.': 'فشل رفع الملف الصوتي.', 'Audio uploaded successfully.': 'تم رفع الصوت بنجاح.', "Complaint cannot be filed for this ride. It may not have been completed or started.": "لا يمكن تقديم شكوى لهذه الرحلة. قد لا تكون قد اكتملت أو بدأت.", '2. Attach Recorded Audio (Optional)': '٢. إرفاق تسجيل صوتي (اختياري)', 'Please enter a description of the issue.': 'يرجى إدخال وصف للمشكلة.', "phone number label": "رقم الموبايل", "phone number required": "الرجاء إدخال رقم الموبايل", "send otp button": "إرسال رمز التحقق", "verify your number title": "التحقق من رقمك", "otp sent subtitle": "تم إرسال رمز تحقق مؤلف من 5 أرقام إلى\n@phoneNumber", "verify and continue button": "تحقق ومتابعة", "enter otp validation": "الرجاء إدخال رمز التحقق المكون من 5 أرقام", "one last step title": "خطوة أخيرة", "complete profile subtitle": "أكمل معلوماتك الشخصية للبدء", "first name label": "الاسم الأول", "first name required": "الرجاء إدخال الاسم الأول", "last name label": "الاسم الأخير", "Verify OTP": "التحقق من الرمز", "Verification Code": "رمز التحقق", "We have sent a verification code to your mobile number:": "لقد أرسلنا رمز التحقق إلى رقم موبايلك:", "Verify": "تحقق", "Resend Code": "إعادة إرسال الرمز", "You can resend in": "يمكنك إعادة الإرسال بعد", "seconds": "ثانية", "Error": "خطأ", "Please enter the complete 6-digit code.": "الرجاء إدخال الرمز كاملاً المكون من 6 أرقام.", "last name required": "الرجاء إدخال الاسم الأخير", "email optional label": "البريد الإلكتروني (اختياري)", "complete registration button": "إتمام التسجيل", "User with this phone number or email already exists.": "يوجد حساب مسجل بنفس رقم الموبايل أو البريد الإلكتروني.", "otp sent success": "تم إرسال رمز التحقق إلى واتساب.", "failed to send otp": "فشل إرسال الرمز.", "server error try again": "حدث خطأ في الخادم، الرجاء المحاولة مرة أخرى.", "an error occurred": "حدث خطأ غير متوقع: @error", "otp verification failed": "رمز التحقق غير صحيح.", "registration failed": "فشلت عملية التسجيل.", "welcome user": "أهلاً بك، @firstName!", "Cancel Trip from driver": "إلغاء الرحلة من قبل الكابتن", "We will look for a new driver.\nPlease wait.": "جاري البحث عن كابتن جديد.\nالرجاء الانتظار.", "The driver canceled your ride.": "الكابتن ألغى رحلتك.", "Driver Finish Trip": "الكابتن أنهى الرحلة", "you will pay to Driver": "ستدفع للكابتن", "Don't forget your personal belongings.": "لا تنسَ أغراضك الشخصية.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "يرجى التأكد من أخذ جميع أغراضك الشخصية، وأن أي مبلغ متبقٍ قد أُضيف إلى محفظتك قبل المغادرة. شكراً لاختيارك تطبيق انطلق.", "Finish Monitor": "إنهاء المراقبة", "Trip finished": "انتهت الرحلة", "Call Income from Driver": "مكالمة واردة من الكابتن", "Driver Cancelled Your Trip": "الكابتن ألغى رحلتك", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "ستقوم بدفع تكلفة وقت الكابتن، راجع محفظتك في انطلق", "Order Applied": "تم تقديم الطلب", "Share App": "مشاركة التطبيق", "Wallet": "المحفظة", "Balance": "الرصيد", "Don’t forget your personal belongings.": "لا تنسَ أغراضك الشخصية.", "Profile": "الملف الشخصي", "Contact Support": "التواصل مع الدعم", "Session expired. Please log in again.": "انتهت صلاحية الجلسة. الرجاء تسجيل الدخول مرة أخرى.", "Security Warning": "⚠️ تحذير أمني", "Potential security risks detected. The application may not function correctly.": "تم كشف مخاطر أمنية محتملة. قد لا يعمل التطبيق بشكل صحيح.", "please order now": "اطلب الآن", "Where to": "إلى أين؟", "Where are you going?": "لوين رايح؟", "Quick Actions": "إجراءات سريعة", "My Balance": "رصيدي", "Order History": "سجل الطلبات", "Contact Us": "تواصل معنا", "Driver": "كابتن", "Complaint": "شكوى", "Promos": "العروض", "Recent Places": "الأماكن الأخيرة", "From": "من", "WhatsApp Location Extractor": "استخراج الموقع من واتساب", "Location Link": "رابط الموقع", "Paste location link here": "الصق رابط الموقع هنا", "Go to this location": "اذهب إلى هذا الموقع", "Paste WhatsApp location link": "الصق رابط موقع واتساب", "Select Order Type": "اختر نوع الطلب", "Choose who this order is for": "اختر لمن هذا الطلب", "I want to order for myself": "أريد أن أطلب لنفسي", "I want to order for someone else": "أريد أن أطلب لشخص آخر", "Order for someone else": "اطلب لشخص آخر", "Order for myself": "اطلب لنفسي", "Are you want to go this site": "هل تريد الذهاب إلى هذا الموقع؟", "No": "لا", 'Pay by Sham Cash': 'الدفع عبر شام كاش', "Intaleq Wallet": "محفظة انطلق", "Have a promo code?": "هل لديك رمز خصم؟", "Your Wallet balance is ": "رصيد محفظتك هو ", "Cash": "كاش", 'Phone Number': 'رقم الموبايل', 'Search country': 'ابحث عن دولة', 'Payment Successful!': 'تم الدفع بنجاح!', 'Your payment was successful.': 'تم الدفع بنجاح.', "Pay directly to the captain": "ادفع للكابتن مباشرة", "Top up Wallet to continue": "اشحن المحفظة للمتابعة", "Or pay with Cash instead": "أو ادفع كاش بدلاً من ذلك", "Confirm & Find a Ride": "تأكيد وإيجاد رحلة", "Balance:": "الرصيد:", "Alerts": "الإشعارات", "Welcome Back!": "أهلاً بعودتك!", "Current Balance": "الرصيد الحالي", "Set Wallet Phone Number": "تعيين رقم هاتف للمحفظة", "Link a phone number for transfers": "اربط رقم هاتف لإجراء التحويلات", "Payment History": "سجل الدفعات", "View your past transactions": "عرض معاملاتك السابقة", "Top up Wallet": "تعبئة المحفظة", "Add funds using our secure methods": "أضف رصيداً باستخدام طرقنا الآمنة", 'Driver is waiting': 'الكابتن في انتظارك', 'Type your message...': 'اكتب رسالتك...', 'Driver Accepted Request': 'الكابتن قبل الطلب', 'Message': 'رسالة', 'Call': 'اتصال', 'Set Phone Number': 'تعيين رقم الهاتف', 'Select This Ride': 'اختر هذه الرحلة', 'Call Driver': 'اتصل بالكابتن', "Increase Fare": "زيادة الأجرة", 'Stop': 'إيقاف', 'Record': 'تسجيل', 'Share': 'مشاركة', 'WhatsApp': 'واتساب', 'SOS': 'الطوارئ', "No drivers accepted your request yet": "لم يقبل أي كابتن طلبك بعد", "Increasing the fare might attract more drivers. Would you like to increase the price?": "زيادة الأجرة قد تجذب المزيد من الكباتن. هل ترغب في زيادة السعر؟", "Please make sure not to leave any personal belongings in the car.": "يرجى التأكد من عدم ترك أي أغراض شخصية في السيارة.", "Cancel Ride": "إلغاء الرحلة", "Route Not Found": "المسار غير موجود", "We couldn't find a valid route to this destination. Please try selecting a different point.": "لم نتمكن من العثور على مسار صالح إلى هذا الوجهة. يرجى محاولة اختيار نقطة مختلفة.", // "Increase Fare": "زيادة الأجرة", 'alert': 'تنبيه', "You can call or record audio during this trip.": "يمكنك الاتصال أو تسجيل صوت أثناء هذه الرحلة.", "Warning: Speeding detected!": "تحذير: تم الكشف عن تجاوز السرعة!", 'Fixed Price': 'سعر ثابت', 'Report': 'إبلاغ', "Comfort": "‏مريحة", "Intaleq Balance": "رصيد انطلق", 'Search for a starting point': 'ابحث عن نقطة انطلاق', 'Top up Balance to continue': 'اشحن الرصيد للمتابعة', "Electric": "كهربائية", "Lady": "سيدة", "Van": "عائلية", "Rayeh Gai": "رايح جاي", "Join Intaleq as a driver using my referral code!": "انضم إلى 'انطلق' ككابتن باستخدام رمز دعوتي!", "Use code:": "استخدم الرمز:", "Download the Intaleq Driver app now and earn rewards!": "حمّل تطبيق 'انطلق' للكباتن الآن واحصل على مكافآت!", "Get a discount on your first Intaleq ride!": "احصل على خصم على رحلتك الأولى مع 'انطلق'!", "Use my referral code:": "استخدم رمز دعوتي:", "Download the Intaleq app now and enjoy your ride!": "حمّل تطبيق 'انطلق' الآن واستمتع برحلتك!", "Contacts Loaded": "تم تحميل جهات الاتصال", "Showing": "يتم عرض", "of": "من", 'Pay by MTN Wallet': 'الدفع عبر محفظة MTN', 'Pay by Syriatel Wallet': 'الدفع عبر محفظة سيريتل', "Customer not found": "العميل غير موجود", "Wallet is blocked": "المحفظة محظورة", "Customer phone is not active": "هاتف العميل غير نشط", "Balance not enough": "الرصيد غير كافٍ", "Balance limit exceeded": "تم تجاوز حد الرصيد", "Incorrect sms code": "⚠️ رمز التحقق الذي أدخلته غير صحيح. يرجى المحاولة مرة أخرى.", "contacts. Others were hidden because they don't have a phone number.": "جهة اتصال. تم إخفاء البقية لعدم وجود أرقام هواتف لديهم.", "No contacts found": "لم يتم العثور على جهات اتصال", "No contacts with phone numbers were found on your device.": "لم يتم العثور على جهات اتصال لديها أرقام هواتف في جهازك.", "Permission denied": "تم رفض الإذن", "Contact permission is required to pick contacts": "مطلوب إذن الوصول لجهات الاتصال لاختيار الأسماء.", "An error occurred while picking contacts:": "حدث خطأ أثناء اختيار جهات الاتصال:", "Please enter a correct phone": "الرجاء إدخال رقم هاتف صحيح", "Success": "نجاح", "Invite sent successfully": "تم إرسال الدعوة بنجاح", "Hello! I'm inviting you to try Intaleq.": "مرحباً! أدعوك لتجربة تطبيق 'انطلق'.", "Use my invitation code to get a special gift on your first ride!": "استخدم رمز دعوتي لتحصل على هدية خاصة في رحلتك الأولى!", "Your personal invitation code is:": "رمز دعوتك الشخصي هو:", "Be sure to use it quickly! This code expires at": "لا تتأخر! صلاحية هذا الرمز تنتهي في", "Download the app now:": "حمّل التطبيق الآن:", "See you on the road!": "نلتقي على الطريق!", "This phone number has already been invited.": "لقد تم إرسال دعوة لهذا الرقم مسبقاً.", "An unexpected error occurred. Please try again.": "حدث خطأ غير متوقع. الرجاء المحاولة مرة أخرى.", "You deserve the gift": "أنت تستحق الهدية", "Claim your 20 LE gift for inviting": "اطلب هديتك بقيمة 20 جنيه لدعوة", "You have got a gift for invitation": "لقد حصلت على هدية لدعوتك", "You have earned 20": "لقد ربحت 20", "LE": "ل.س", "Vibration feedback for all buttons": "تفعيل الاهتزاز لجميع الأزرار", "Share with friends and earn rewards": "شارك التطبيق مع أصدقائك واحصل على مكافآت", "Gift Already Claimed": "تم استلام الهدية مسبقاً", "You have already received your gift for inviting": "لقد استلمت هديتك بالفعل مقابل هذه الدعوة", "Keep it up!": "استمر!", "has completed": "أكمل", "trips": "رحلات", "Personal Information": "المعلومات الشخصية", "Name": "الاسم", "Not set": "غير محدد", "Gender": "الجنس", "Education": "التحصيل العلمي", "Work & Contact": "العمل والاتصال", "Employment Type": "نوع العمل", "Marital Status": "الحالة الاجتماعية", "SOS Phone": "رقم الطوارئ", "Sign Out": "تسجيل الخروج", "Delete My Account": "حذف حسابي", "Update Gender": "تحديث الجنس", "Update": "تحديث", "Update Education": "تحديث التحصيل العلمي", "Are you sure? This action cannot be undone.": "هل أنت متأكد؟ لا يمكن التراجع عن هذا الإجراء.", "Confirm your Email": "تأكيد بريدك الإلكتروني", "Type your Email": "اكتب بريدك الإلكتروني", "Delete Permanently": "حذف نهائي", "Male": "ذكر", "Female": "أنثى", "Other": "آخر", "High School Diploma": "شهادة ثانوية", "Associate Degree": "دبلوم", "Bachelor's Degree": "إجازة جامعية", "Master's Degree": "ماجستير", "Doctoral Degree": "دكتوراه", "Select your preferred language for the app interface.": "اختر لغتك المفضلة لواجهة التطبيق.", "Language Options": "خيارات اللغة", "You can claim your gift once they complete 2 trips.": "يمكنك طلب هديتك بعد إتمامه لرحلتين.", "Closest & Cheapest": "الأقرب والأرخص", "Comfort choice": "خيار الراحة", "Travel in a modern, silent electric car. A premium, eco-friendly choice for a smooth ride.": "تنقّل في سيارة كهربائية حديثة وصامتة. خيار مميز وصديق للبيئة لرحلة هادئة.", "Spacious van service ideal for families and groups. Comfortable, safe, and cost-effective travel together.": "خدمة فان واسعة ومثالية للعائلات والمجموعات. سفر مريح، آمن، واقتصادي.", "Quiet & Eco-Friendly": "هادئة وصديقة للبيئة", "Lady Captain for girls": "كابتن سيدة للبنات", "Van for familly": "سيارة فان للعائلة", "Are you sure to delete this location?": "هل أنت متأكد من حذف هذا الموقع؟", 'Change Work location?': 'تغيير موقع العمل؟', 'Change Home location?': 'تغيير موقع البيت؟', "Submit a Complaint": "تقديم شكوى", "Submit Complaint": "إرسال الشكوى", "No trip history found": "لا يوجد سجل للرحلات", "Your past trips will appear here.": "ستظهر رحلاتك السابقة هنا.", "1. Describe Your Issue": "١. اشرح مشكلتك", "Enter your complaint here...": "اكتب شكواك هنا...", "2. Attach Recorded Audio": "٢. إرفاق تسجيل صوتي", "No audio files found.": "لم يتم العثور على ملفات صوتية.", "Confirm Attachment": "تأكيد الإرفاق", "Attach this audio file?": "هل تريد إرفاق هذا الملف الصوتي؟", "Uploaded": "تم الرفع بنجاح", "3. Review Details & Response": "٣. مراجعة التفاصيل والرد", "Date": "التاريخ", "Today's Promos": "عروض اليوم", "No promos available right now.": "لا توجد عروض متاحة حالياً.", "Check back later for new offers!": "تحقق لاحقاً من وجود عروض جديدة!", "Valid Until:": "صالح حتى:", "CODE": "الرمز", "Login": "تسجيل الدخول", "Sign in for a seamless experience": "سجل دخولك لتجربة سلسلة", "Sign In with Google": "الدخول عبر جوجل", "Sign in with Apple": "الدخول عبر آبل", "User not found": "المستخدم غير موجود", "Need assistance? Contact us": "هل تحتاج مساعدة؟ تواصل معنا", "Email": "البريد الإلكتروني", "Your email address": "بريدك الإلكتروني", "Enter a valid email": "أدخل بريداً إلكترونياً صالحاً", "Password": "كلمة المرور", "Your password": "كلمة مرورك", "Enter your password": "أدخل كلمة المرور", "Submit": "إرسال", "Terms of Use & Privacy Notice": "شروط الاستخدام وبيان الخصوصية", "By selecting \"I Agree\" below, I confirm that I have read and agree to the ": "باختيار \"أوافق\" أدناه، أؤكد أنني قرأت ووافقت على ", "Terms of Use": "شروط الاستخدام", " and acknowledge the ": " وأقر بـ ", "Privacy Notice": "بيان الخصوصية", ". I am at least 18 years old.": ". عمري 18 عاماً على الأقل.", "I Agree": "أوافق على الشروط والأحكام", "Continue": "متابعة", "Enable Location": "تفعيل الموقع", "To give you the best experience, we need to know where you are. Your location is used to find nearby captains and for pickups.": "لنمنحك أفضل تجربة، نحتاج لمعرفة موقعك. يتم استخدام موقعك للعثور على الكباتن القريبين ولتحديد نقاط الانطلاق.", "Allow Location Access": "السماح بالوصول للموقع", "Welcome to Intaleq!": "أهلاً بك في انطلق!", "Before we start, please review our terms.": "قبل أن نبدأ، يرجى مراجعة شروطنا.", "Your journey starts here": "رحلتك تبدأ هنا", "Cancel Search": "إلغاء البحث", "Set pickup location": "تحديد موقع الانطلاق", "Move the map to adjust the pin": "حرّك الخريطة لتحديد الموقع", "Searching for the nearest captain...": "جاري البحث عن أقرب كابتن...", "No one accepted? Try increasing the fare.": "لم يقبل أحد؟ حاول زيادة الأجرة.", "Increase Your Trip Fee (Optional)": "زيادة أجرة رحلتك (اختياري)", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "لم نعثر على أي كابتن حتى الآن. يمكنك زيادة أجرة الرحلة لجعل عرضك أكثر جاذبية.", "No, thanks": "لا، شكراً", "Increase Fee": "زيادة الأجرة", "Copy": "نسخ", "Promo Copied!": "تم نسخ العرض!", "Code": "الرمز", "copied to clipboard": "تم نسخه إلى الحافظة", "Price": "السعر", "Intaleq's Response": "رد فريق انطلق", "Awaiting response...": "بانتظار الرد...", "Audio file not attached": "الملف الصوتي غير مرفق", "The audio file is not uploaded yet.\\nDo you want to submit without it?": "لم يتم رفع الملف الصوتي بعد.\\nهل تريد الإرسال بدونه؟", "deleted": "تم الحذف", "To Work": "إلى العمل", "Work Saved": "تم حفظ موقع العمل", "To Home": "إلى البيت", "Home Saved": "تم حفظ موقع البيت", "Destination selected": "تم اختيار الوجهة", "Now select start pick": "الآن حدد نقطة الانطلاق", "OK": "موافق", "Confirm Pick-up Location": "تأكيد موقع الانطلاق", "Set Location on Map": "حدد الموقع على الخريطة", 'Leave a detailed comment (Optional)': 'اترك تعليقاً مفصلاً (اختياري)', 'Share your experience to help us improve...': 'شارك تجربتك لمساعدتنا على التحسن...', 'Your valuable feedback helps us improve our service quality.': 'ملاحظاتك القيمة تساعدنا في تحسين جودة خدماتنا.', 'witout zero': 'بدون صفر', 'Top up Balance': 'اشحن الرصيد', 'An error occurred': 'حدث خطأ', 'Send WhatsApp Message': 'إرسال رسالة واتساب', 'How was your trip with': 'كيف كانت رحلتك مع', 'Drawing route on map...': 'جارٍ رسم المسار على الخريطة...', 'Please wait while we prepare your trip.': 'يرجى الانتظار بينما نحضر رحلتك.', 'Submit Rating': 'إرسال التقييم', 'Call Support': 'الاتصال بالدعم', "You can contact us during working hours from 10:00 - 16:00.": "يمكنك التواصل معنا خلال ساعات العمل من 10:00 إلى 16:00.", "Intaleq is the safest and most reliable ride-sharing app designed especially for passengers in Syria. We provide a comfortable, respectful, and affordable riding experience with features that prioritize your safety and convenience. Our trusted captains are verified, insured, and supported by regular car maintenance carried out by top engineers. We also offer on-road support services to make sure every trip is smooth and worry-free. With Intaleq, you enjoy quality, safety, and peace of mind—every time you ride.": """إنطلِق هو التطبيق الأكثر أماناً وموثوقية لمشاركة الركوب والمصمم خصيصاً للركّاب في سوريا. نوفر لك تجربة تنقّل مريحة، محترمة، وبأسعار مناسبة، مع ميزات تضع سلامتك وراحتك في المقام الأول. جميع الكباتن لدينا موثوقون، مُؤمَّنون، وتخضع سياراتهم لصيانة دورية يقوم بها مهندسون مختصون لضمان أفضل جودة. كما نقدّم خدمات دعم على الطريق لضمان أن تكون كل رحلة سلسة وخالية من القلق. مع إنطلِق، ستستمتع دائماً بالأمان، والجودة، وراحة البال في كل رحلة تقوم بها.""", 'Work time is from 10:00 AM to 16:00 PM.\nYou can send a WhatsApp message or email.': 'وقت العمل من 10:00 صباحاً إلى 16:00 مساءً.\nيمكنك إرسال رسالة واتساب أو بريد إلكتروني.', 'Sorry': 'عذراً', "Customer MSISDN doesn’t have customer wallet": "رقم هاتف العميل لا يحتوي على محفظة عميل", 'Please enter the number without the leading 0': 'يرجى إدخال الرقم بدون الصفر الأولي', 'Please enter your phone number': 'يرجى إدخال رقم هاتفك', 'Phone number seems too short': 'يبدو أن رقم الهاتف قصير جدًا', 'No cars are available at the moment. Please try again later.': 'لا توجد سيارات متاحة حالياً. الرجاء المحاولة مرة أخرى لاحقاً.', "Nearest Car: ~": "أقرب سيارة: ~", "Nearest Car": "أقرب سيارة", "No cars nearby": "لا توجد سيارات قريبة", "Favorite Places": "الأماكن المفضلة", "No favorite places yet!": "لا توجد أماكن مفضلة بعد!", "from your favorites": "من مفضلتك", "Back": "رجوع", "Enter your code below to apply the discount.": "أدخل الرمز أدناه لتطبيق الخصم", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "باختياري \"أوافق\" أدناه، أؤكد أنني قرأت ووافقت على", "and acknowledge the": "وأقر بـ", "Enable Location Access": "تفعيل الوصول إلى الموقع", "We need your location to find nearby drivers for pickups and drop-offs.": "نحتاج موقعك للعثور على كباتن قريبين لنقاط الانطلاق والوصول.", "You should restart app to change language": "يجب إعادة تشغيل التطبيق لتغيير اللغة", "Home Page": "الصفحة الرئيسية", "To change Language the App": "لتغيير لغة التطبيق", "Learn more about our app and mission": "تعرف أكثر على تطبيقنا ورؤيتنا", "Promos For Today": "عروض اليوم", "Choose your ride": "اختر رحلتك", "Your Journey Begins Here": "رحلتك تبدأ من هنا", "Bonus gift": "هدية إضافية", "Pay": "ادفع", "Get": "احصل على", "Send to Driver Again": "أرسل للكابتن مرة أخرى", "Driver Name:": "اسم الكابتن:", "No trip data available": "لا تتوفر بيانات للرحلة", "Car Plate:": "رقم لوحة السيارة:", "remaining": "متبقٍ", "Order Cancelled": "تم إلغاء الطلب", "You canceled VIP trip": "لقد ألغيت رحلة الـ VIP", "Passenger cancelled order": "الراكب ألغى الطلب", "Your trip is scheduled": "رحلتك مجدولة", "Don't forget your ride!": "لا تنسَ رحلتك!", "Trip updated successfully": "تم تحديث الرحلة بنجاح", "Car Make:": "نوع السيارة:", "Car Model:": "موديل السيارة:", "Car Color:": "لون السيارة:", "Driver Phone:": "رقم الكابتن:", "Pre-booking": "حجز مسبق", "Waiting VIP": "بانتظار VIP", "Driver List": "قائمة الكباتن", "Confirm Trip": "تأكيد الرحلة", "Select date and time of trip": "اختر تاريخ ووقت الرحلة", "Date and Time Picker": "اختيار التاريخ والوقت", "Trip Status:": "حالة الرحلة:", "pending": "قيد الانتظار", "accepted": "مقبولة", "rejected": "مرفوضة", "Apply": "تطبيق", "Enter your promo code": "أدخل رمز العرض", "Apply Promo Code": "تطبيق رمز العرض", "Scheduled Time:": "الوقت المجدول:", "No drivers available": "لا يوجد كباتن متاحون", "No drivers available at the moment. Please try again later.": "لا يوجد كباتن متاحون حالياً. الرجاء المحاولة مرة أخرى.", "you have a negative balance of": "لديك رصيد سالب بقيمة", "Please try again in a few moments": "الرجاء المحاولة بعد لحظات قليلة", "Unknown Driver": "كابتن غير معروف", "in your": "في محفظتك", "The driver accepted your order for": "الكابتن قبل طلبك مقابل", "wallet due to a previous trip.": "بسبب رحلة سابقة.", "rides": "رحلات", "Add Work": "إضافة العمل", "The reason is": "السبب هو", "User does not have a wallet #1652": "المستخدم ليس لديه محفظة #1652", "Price of trip": "سعر الرحلة", "From:": "من:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "لرحلات انطلق والتوصيل، يتم حساب السعر بشكل متغير. أما لرحلات الراحة، فيعتمد السعر على الوقت والمسافة.", "Phone Wallet Saved Successfully": "تم حفظ رقم هاتف المحفظة بنجاح", "Add wallet phone you use": "أضف رقم هاتف المحفظة الذي تستخدمه", "Update Available": "يتوفر تحديث", "Phone number must be exactly 11 digits long": "يجب أن يتكون رقم الهاتف من 11 رقماً بالضبط", "Insert Wallet phone number": "أدخل رقم هاتف المحفظة", "Phone number isn't an Egyptian phone number": "رقم الهاتف ليس رقماً مصرياً", "A new version of the app is available. Please update to the latest version.": "يتوفر إصدار جديد من التطبيق. الرجاء التحديث إلى آخر إصدار.", "We use location to get accurate and nearest passengers for you": "نستخدم الموقع لنجد لك الركاب الأقرب وبدقة", "This ride is already applied by another driver.": "هذه الرحلة تم قبولها من قبل كابتن آخر.", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "نستخدم موقعك الدقيق للعثور على أقرب كابتن متاح وتوفير معلومات دقيقة عن نقاط الانطلاق والوصول. يمكنك إدارة ذلك في الإعدادات.", "Where are you, sir?": "أين أنت يا سيدي؟", "I've been trying to reach you but your phone is off.": "كنت أحاول الاتصال بك لكن هاتفك مغلق.", "Please don't be late": "من فضلك لا تتأخر", "Please don't be late, I'm waiting for you at the specified location.": "من فضلك لا تتأخر، أنا بانتظارك في الموقع المحدد.", "My location is correct. You can search for me using the navigation app": "موقعي صحيح. يمكنك إيجادي باستخدام تطبيق الخرائط", "Hello, I'm at the agreed-upon location": "مرحباً، أنا في الموقع المتفق عليه", "How much longer will you be?": "كم من الوقت تحتاج بعد؟", "Phone number is verified before": "تم التحقق من رقم الهاتف مسبقاً", "Change Ride": "تغيير الرحلة", "You can change the destination by long-pressing any point on the map": "يمكنك تغيير الوجهة بالضغط المطول على أي نقطة على الخريطة", "Pick from map destination": "اختر الوجهة من الخريطة", "Pick or Tap to confirm": "اختر أو اضغط للتأكيد", "Accepted your order": "تم قبول طلبك", "Order Accepted": "تم قبول الطلب", "with type": "من نوع", "accepted your order at price": "وافق على طلبك بسعر", "you canceled order": "لقد ألغيت الطلب", "If you want order to another person": "إذا كنت تريد الطلب لشخص آخر", "upgrade price": "رفع السعر", "airport": "مطار", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "الخيار الأفضل لسيارة مريحة مع مسار مرن ونقاط توقف. هذا المطار يوفر تأشيرة دخول بهذا السعر.", "You can upgrade price to may driver accept your order": "يمكنك رفع السعر ليقبل الكابتن طلبك", "Change Route": "تغيير المسار", "No Captain Accepted Your Order": "لم يقبل أي كابتن طلبك", "We are looking for a captain but the price may increase to let a captain accept": "نبحث عن كابتن ولكن قد يرتفع السعر ليوافق أحدهم", "No, I want to cancel this trip": "لا، أريد إلغاء هذه الرحلة", "Attention": "انتباه", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "تم إلغاء الرحلة. سيتم خصم تكلفتها من محفظتك.", "You will be charged for the cost of the driver coming to your location.": "سيتم تحميلك تكلفة قدوم الكابتن إلى موقعك.", "reject your order.": "رفض طلبك.", "Order Under Review": "الطلب قيد المراجعة", "is reviewing your order. They may need more information or a higher price.": "يقوم بمراجعة طلبك. قد يحتاج لمعلومات إضافية أو سعر أعلى.", "Vibration": "اهتزاز", "Resend code": "إعادة إرسال الرمز", "change device": "تغيير الجهاز", "Device Change Detected": "تم اكتشاف تغيير في الجهاز", "You can only use one device at a time. This device will now be set as your active device.": "يمكنك استخدام جهاز واحد فقط في كل مرة. سيتم الآن تعيين هذا الجهاز كجهازك النشط.", "Click here point": "اضغط هنا", "Are you want to change": "هل تريد التغيير؟", "by": "بواسطة", "Enter your complaint here": "أدخل شكواك هنا", "Please enter your complaint.": "الرجاء إدخال شكواك.", "Complaint data saved successfully": "تم حفظ بيانات الشكوى بنجاح", "Trip Monitor": "مراقبة الرحلة", "Insert SOS Phone": "إدخال رقم الطوارئ", "Add SOS Phone": "إضافة رقم الطوارئ", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "عزيزي،\n\n🚀 لقد بدأت رحلة شيقة وأود أن أشاركك تفاصيلها وموقعي الحالي بشكل مباشر! حمّل تطبيق انطلق لتتمكن من متابعة تفاصيل رحلتي وآخر موقع لي.\n\n👈 رابط التحميل:\nأندرويد [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\nآيفون [https://getapp.cc/app/6458734951]\n\nيسعدني أن تبقى على اطلاع بمغامرتي!\n\nانطلق،", "Send Intaleq app to him": "أرسل له تطبيق انطلق", "No passenger found for the given phone number": "لم يتم العثور على راكب بهذا الرقم", "No user found for the given phone number": "لم يتم العثور على مستخدم بهذا الرقم", "This price is": "هذا السعر هو", "Work": "العمل", "Add Home": "إضافة المنزل", "Notifications": "الإشعارات", "💳 Pay with Credit Card": "💳 الدفع بالبطاقة الائتمانية", "⚠️ You need to choose an amount!": "⚠️ يجب اختيار مبلغ!", "💰 Pay with Wallet": "💰 الدفع بالمحفظة", "You must restart the app to change the language.": "يجب إعادة تشغيل التطبيق لتغيير اللغة.", "joined": "انضم", "Driver joined the channel": "الكابتن انضم إلى القناة", "Driver left the channel": "الكابتن غادر القناة", "Call Page": "صفحة الاتصال", "Call Left": "مكالمات متبقية", " Next as Cash !": " التالي كاش!", "To use Wallet charge it": "لاستخدام المحفظة، قم بشحنها", "We are searching for the nearest driver to you": "نبحث لك عن أقرب كابتن", "Best choice for cities": "الخيار الأفضل للمدن", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "رايح جاي: خدمة ذهاب وإياب مريحة بين المدن، سهلة وموثوقة.", "This trip is for women only": "هذه الرحلة للنساء فقط", "Total budgets on month": "إجمالي الميزانية الشهرية", "You have call from driver": "لديك مكالمة من الكابتن", "Intaleq": "انطلق", "passenger agreement": "اتفاقية الراكب", "To become a passenger, you must review and agree to the ": "لتصبح راكباً، يجب عليك مراجعة والموافقة على", "agreement subtitle": "للمتابعة، يجب مراجعة شروط الاستخدام وسياسة الخصوصية والموافقة عليها.", "terms of use": "شروط الاستخدام", " and acknowledge our Privacy Policy.": "والإقرار بسياسة الخصوصية الخاصة بنا.", "and acknowledge our": "والإقرار بـ", "privacy policy": "سياسة الخصوصية.", "i agree": "أوافق على الشروط والأحكام", "Driver already has 2 trips within the specified period.": "لدى الكابتن رحلتان بالفعل خلال الفترة المحددة.", "The invitation was sent successfully": "تم إرسال الدعوة بنجاح", "You should select your country": "يجب عليك اختيار بلدك", "Scooter": "سكوتر", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "رحلة بحجز مسبق، تتيح لك اختيار أفضل الكباتن والسيارات.", "Mishwar Vip": "مشوار VIP", "The driver waiting you in picked location .": "الكابتن بانتظارك في موقع الانطلاق.", "About Us": "من نحن", "You can change the vibration feedback for all buttons": "يمكنك تغيير استجابة الاهتزاز لجميع الأزرار", "Most Secure Methods": "أكثر الطرق أماناً", "In-App VOIP Calls": "مكالمات صوتية داخل التطبيق", "Recorded Trips for Safety": "رحلات مسجلة للأمان", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nنهتم أيضاً بأن تكون الأسعار مناسبة للجميع، حيث نقدم أسعاراً تنافسية لجعل رحلاتك في متناول اليد.", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "انطلق هو تطبيق لمشاركة الرحلات مصمم مع الأخذ بعين الاعتبار سلامتك وميزانيتك. نصلك بكباتن موثوقين في منطقتك، لنضمن لك تجربة تنقل مريحة وخالية من التوتر.\n\nإليك بعض الميزات الرئيسية التي تميزنا:", "Sign In by Apple": "الدخول عبر Apple", "Sign In by Google": "الدخول عبر Google", "How do I request a ride?": "كيف أطلب رحلة؟", "Step-by-step instructions on how to request a ride through the Intaleq app.": "تعليمات مفصلة خطوة بخطوة حول كيفية طلب رحلة عبر تطبيق انطلق.", "What types of vehicles are available?": "ما هي أنواع السيارات المتاحة؟", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "يوفر انطلق مجموعة متنوعة من خيارات السيارات لتناسب احتياجاتك، بما في ذلك الاقتصادية، والمريحة، والفاخرة. اختر الخيار الذي يناسب ميزانيتك وعدد الركاب.", "How can I pay for my ride?": "كيف يمكنني الدفع لرحلتي؟", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "يوفر انطلق طرق دفع متعددة لراحتك. اختر بين الدفع نقداً أو ببطاقة الائتمان/الخصم عند تأكيد الرحلة.", "Can I cancel my ride?": "هل يمكنني إلغاء رحلتي؟", "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Intaleq cancellation policy for details.": "نعم، يمكنك إلغاء رحلتك بشروط معينة (مثلاً، قبل تعيين الكابتن). راجع سياسة الإلغاء في انطلق لمعرفة التفاصيل.", "Driver Registration & Requirements": "تسجيل الكباتن والمتطلبات", "How can I register as a driver?": "كيف يمكنني التسجيل ككابتن؟", "What are the requirements to become a driver?": "ما هي متطلبات الانضمام ككابتن؟", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "لمعلومات حول التسجيل والمتطلبات، تفضل بزيارة موقعنا الإلكتروني أو تواصل مع دعم انطلق.", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "يوفر انطلق ميزة الدردشة داخل التطبيق للتواصل مع الكابتن أو الراكب أثناء الرحلة.", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "سلامتك أولويتنا في انطلق. نوفر ميزات مثل التحقق من الكابتن، تتبع الرحلة داخل التطبيق، وخيارات الاتصال بالطوارئ.", "Frequently Questions": "الأسئلة الشائعة", "User does not exist.": "المستخدم غير موجود.", "We need your phone number to contact you and to help you.": "نحتاج رقم هاتفك لنتواصل معك ونساعدك.", "You will recieve code in sms message": "ستتلقى رمزاً في رسالة نصية", "Please enter": "الرجاء إدخال", "We need your phone number to contact you and to help you receive orders.": "نحتاج رقم هاتفك لنتواصل معك ولمساعدتك في استقبال الطلبات.", "The full name on your criminal record does not match the one on your driver's license. Please verify and provide the correct documents.": "الاسم الكامل في وثيقة لا حكم عليه لا يطابق الاسم في رخصة القيادة. الرجاء التحقق وتقديم المستندات الصحيحة.", "The national number on your driver's license does not match the one on your ID document. Please verify and provide the correct documents.": "الرقم الوطني في رخصة القيادة لا يطابق الرقم في هويتك. الرجاء التحقق وتقديم المستندات الصحيحة.", "Capture an Image of Your Criminal Record": "التقط صورة لوثيقة لا حكم عليه", "IssueDate": "تاريخ الإصدار", "Capture an Image of Your car license front": "التقط صورة للوجه الأمامي لرخصة سيارتك", "Capture an Image of Your ID Document front": "التقط صورة للوجه الأمامي لهويتك", "NationalID": "الرقم الوطني", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "يمكنك مشاركة تطبيق انطلق مع أصدقائك وكسب مكافآت على الرحلات التي يقومون بها باستخدام رمزك.", "FullName": "الاسم الكامل", "No invitation found yet!": "لم يتم العثور على دعوات بعد!", "InspectionResult": "نتيجة الفحص", "Criminal Record": "لا حكم عليه", "The email or phone number is already registered.": "البريد الإلكتروني أو رقم الهاتف مسجل مسبقاً.", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "لتصبح كابتن في تطبيق انطلق، يجب عليك رفع رخصة القيادة، الهوية الشخصية، ورخصة السيارة. سيقوم نظام الذكاء الاصطناعي لدينا بمراجعة وثائقك والتحقق من صحتها خلال 2-3 دقائق. في حال الموافقة، يمكنك البدء بالعمل مباشرة. يرجى العلم أن تقديم وثائق مزورة يعتبر مخالفة خطيرة وقد يؤدي إلى إنهاء حسابك وملاحقات قانونية.", "Documents check": "فحص الوثائق", "Driver's License": "رخصة القيادة", "for your first registration!": "لتسجيلك الأول!", "Get it Now!": "احصل عليه الآن!", "before": "قبل", "Code not approved": "الرمز غير مقبول", "3000 LE": "3000 ل.س", "Do you have an invitation code from another driver?": "هل لديك رمز دعوة من كابتن آخر؟", "Paste the code here": "الصق الرمز هنا", "No, I don't have a code": "لا، ليس لدي رمز", "Code approved": "تم قبول الرمز", "Install our app:": "حمّل تطبيقنا:", "Invite another driver and both get a gift after he completes 100 trips!": "ادعُ كابتن آخر واحصلوا على هدية بعد إكماله 100 رحلة!", "Invite": "دعوة", "Are you sure?": "هل أنت متأكد؟", "This will delete all recorded files from your device.": "سيؤدي هذا إلى حذف جميع الملفات المسجلة من جهازك.", "Select a file": "اختر ملفاً", "Select a File": "اختر ملفاً", "Delete": "حذف", "attach audio of complain": "إرفاق تسجيل صوتي للشكوى", "Phone Number Check": "التحقق من رقم الهاتف", "Drivers received orders": "الكباتن استلموا الطلبات", "No audio files recorded.": "لا توجد ملفات صوتية مسجلة.", "This is for delivery or a motorcycle.": "هذا لطلبات التوصيل أو الدراجات النارية.", "Intaleq Reminder": "تذكير من انطلق", "It's time to check the Intaleq app!": "حان وقت تفقد تطبيق انطلق!", "you must insert token code": "يجب إدخال الرمز", "Something went wrong. Please try again.": "حدث خطأ ما. الرجاء المحاولة مرة أخرى.", "Trip Details": "تفاصيل الرحلة", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "لا توجد تفاصيل كافية عن الشكوى لتقديم حل. يرجى تزويدنا بالمعلومات اللازمة، وسنسعد بمساعدتك.", "Submit Your Complaint": "قدّم شكواك", "Status": "الحالة", "Choose from contact": "اختر من جهات الاتصال", "attach correct audio": "إرفاق الصوت الصحيح", "be sure": "تأكد", "Audio uploaded successfully.": "تم رفع الملف الصوتي بنجاح.", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "مثالي للركاب الذين يبحثون عن أحدث موديلات السيارات مع حرية اختيار أي مسار يرغبون به", "Share this code with your friends and earn rewards when they use it!": "شارك هذا الرمز مع أصدقائك واحصل على مكافآت عند استخدامه!", "Enter phone": "أدخل الرقم", "complete, you can claim your gift": "اكتمل، يمكنك طلب هديتك", "When": "عندما", "Enter driver's phone": "أدخل رقم الكابتن", "Send Invite": "إرسال دعوة", "Show Invitations": "عرض الدعوات", "License Type": "نوع الرخصة", "National Number": "الرقم الوطني", "Name (Arabic)": "الاسم (بالعربية)", "Name (English)": "الاسم (بالإنكليزية)", "Address": "العنوان", "Issue Date": "تاريخ الإصدار", "Expiry Date": "تاريخ الانتهاء", "License Categories": "فئات الرخصة", "driver_license": "رخصة القيادة", "Capture an Image of Your Driver License": "التقط صورة لرخصة قيادتك", "ID Documents Back": "الوجه الخلفي للهوية", "National ID": "الرقم الوطني", "Occupation": "المهنة", "Religion": "الدين", "Full Name (Marital)": "الاسم الكامل (حسب الحالة الاجتماعية)", "Expiration Date": "تاريخ الانتهاء", "Capture an Image of Your ID Document Back": "التقط صورة للوجه الخلفي لهويتك", "ID Documents Front": "الوجه الأمامي للهوية", "First Name": "الاسم الأول", "CardID": "رقم البطاقة", "Vehicle Details Front": "تفاصيل المركبة (الأمام)", "Plate Number": "رقم اللوحة", "Owner Name": "اسم المالك", "Vehicle Details Back": "تفاصيل المركبة (الخلف)", "Make": "الشركة المصنعة", "Model": "الموديل", "Year": "سنة الصنع", "Chassis": "رقم الشاسيه", "Color": "اللون", "Displacement": "سعة المحرك", "Fuel": "نوع الوقود", "Tax Expiry Date": "تاريخ انتهاء الضريبة", "Inspection Date": "تاريخ الفحص", "Capture an Image of Your car license back": "التقط صورة للوجه الخلفي لرخصة سيارتك", "Capture an Image of Your Driver's License": "التقط صورة لرخصة قيادتك", "Sign in with Google for easier email and name entry": "سجل الدخول عبر جوجل لتسهيل إدخال الاسم والبريد الإلكتروني", "You will choose allow all the time to be ready receive orders": "اختر 'السماح طوال الوقت' لتكون جاهزاً لاستقبال الطلبات", "Get to your destination quickly and easily.": "صل إلى وجهتك بسرعة وسهولة.", "Enjoy a safe and comfortable ride.": "استمتع برحلة آمنة ومريحة.", "Choose Language": "اختر اللغة", "Pay with Wallet": "الدفع بالمحفظة", "Invalid MPIN": "رمز MPIN غير صالح", "Invalid OTP": "رمز التحقق غير صالح", "Enter your email address": "أدخل بريدك الإلكتروني", "Please enter Your Email.": "الرجاء إدخال بريدك الإلكتروني.", "Enter your phone number": "أدخل رقم هاتفك", "Please enter your phone number.": "الرجاء إدخال رقم هاتفك.", "Please enter Your Password.": "الرجاء إدخال كلمة المرور.", "if you dont have account": "إذا لم يكن لديك حساب", "Register": "تسجيل", "Accept Ride's Terms & Review Privacy Notice": "قبول شروط الرحلة ومراجعة بيان الخصوصية", "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "باختياري 'أوافق' أدناه، أكون قد راجعت ووافقت على شروط الاستخدام وأقررت ببيان الخصوصية. وعمري لا يقل عن 18 عاماً.", "First name": "الاسم الأول", "Enter your first name": "أدخل اسمك الأول", "Please enter your first name.": "الرجاء إدخال اسمك الأول.", "Last name": "الاسم الأخير", "Enter your last name": "أدخل اسمك الأخير", "Please enter your last name.": "الرجاء إدخال اسمك الأخير.", "City": "المدينة", "Please enter your City.": "الرجاء إدخال مدينتك.", "Verify Email": "التحقق من البريد الإلكتروني", "We sent 5 digit to your Email provided": "أرسلنا رمزاً من 5 أرقام إلى بريدك الإلكتروني", "5 digit": "5 أرقام", "Send Verification Code": "إرسال رمز التحقق", "Your Ride Duration is ": "مدة رحلتك هي ", "You will be thier in": "ستصل خلال", "You trip distance is": "مسافة رحلتك هي", "Fee is": "الأجرة هي", "From : ": "من: ", "To : ": "إلى: ", "Add Promo": "إضافة عرض", "Confirm Selection": "تأكيد الاختيار", "distance is": "المسافة هي", "Privacy Policy": "سياسة الخصوصية", "Intaleq LLC": "شركة انطلق", "Syria's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "خدمة مشاركة الرحلات الرائدة في سوريا، تم تطويرها بفخر من قبل ملاك عرب ومحليين. أولويتنا هي أن نكون بالقرب منك - ركابنا الكرام وكباتننا المتفانين.", "Intaleq is the first ride-sharing app in Syria, designed to connect you with the nearest drivers for a quick and convenient travel experience.": "انطلق هو أول تطبيق لمشاركة الرحلات في سوريا، مصمم ليوصلك بأقرب الكباتن لتجربة تنقل سريعة ومريحة.", "Why Choose Intaleq?": "لماذا تختار انطلق؟", "Closest to You": "الأقرب إليك", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "نوصلك بأقرب الكباتن لوصول أسرع ورحلات أسرع.", "Uncompromising Security": "أمان لا هوادة فيه", "Lady Captains Available": "كباتن سيدات متاحات", "Recorded Trips (Voice & AI Analysis)": "رحلات مسجلة (تحليل صوتي وذكاء اصطناعي)", "Fastest Complaint Response": "أسرع استجابة للشكاوى", "Our dedicated customer service team ensures swift resolution of any issues.": "فريق خدمة العملاء لدينا يضمن حلاً سريعاً لأي مشكلة.", "Affordable for Everyone": "أسعار مناسبة للجميع", "Frequently Asked Questions": "الأسئلة المتكررة", "Getting Started": "البداية", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "ببساطة افتح تطبيق انطلق، أدخل وجهتك، واضغط \"اطلب رحلة\". سيقوم التطبيق بتوصيلك بكابتن قريب.", "Vehicle Options": "خيارات المركبات", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "يقدم انطلق خيارات متنوعة تشمل الاقتصادية، والمريحة، والفاخرة لتناسب احتياجاتك وميزانيتك.", "Payments": "الدفع", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "يمكنك الدفع لرحلتك نقداً أو ببطاقة الائتمان/الخصم. اختر طريقة الدفع المفضلة لديك قبل تأكيد الرحلة.", "Ride Management": "إدارة الرحلات", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "نعم، يمكنك إلغاء رحلتك، ولكن قد يتم تطبيق رسوم إلغاء حسب توقيت الإلغاء.", "For Drivers": "للكباتن", "Driver Registration": "تسجيل الكابتن", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "للتسجيل ككابتن أو لمعرفة المتطلبات، يرجى زيارة موقعنا أو التواصل مع دعم انطلق مباشرة.", "Visit Website/Contact Support": "زيارة الموقع / التواصل مع الدعم", "Close": "إغلاق", "We are searching for the nearest driver": "نبحث عن أقرب كابتن", "Communication": "التواصل", "How do I communicate with the other party (passenger/driver)?": "كيف أتواصل مع الطرف الآخر (الراكب/الكابتن)؟", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "يمكنك التواصل مع الكابتن أو الراكب عبر ميزة الدردشة داخل التطبيق بعد تأكيد الرحلة.", "Safety & Security": "السلامة والأمان", "What safety measures does Intaleq offer?": "ما هي إجراءات السلامة التي يوفرها انطلق؟", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "يوفر انطلق ميزات أمان متنوعة تشمل التحقق من الكابتن، تتبع الرحلة داخل التطبيق، خيارات الاتصال بالطوارئ، وإمكانية مشاركة حالة رحلتك مع جهات اتصال موثوقة.", "Enjoy competitive prices across all trip options, making travel accessible.": "استمتع بأسعار تنافسية لجميع خيارات الرحلات، مما يجعل التنقل في متناول الجميع.", "Variety of Trip Choices": "تنوع خيارات الرحلات", "Choose the trip option that perfectly suits your needs and preferences.": "اختر خيار الرحلة الذي يناسب احتياجاتك ورغباتك تماماً.", "Your Choice, Our Priority": "اختيارك أولويتنا", "Because we are near, you have the flexibility to choose the ride that works best for you.": "لأننا قريبون، لديك المرونة لاختيار الرحلة الأنسب لك.", "duration is": "المدة هي", "Setting": "الإعدادات", "Find answers to common questions": "ابحث عن إجابات للأسئلة الشائعة", "I don't need a ride anymore": "لم أعد بحاجة لرحلة", "I was just trying the application": "كنت أجرب التطبيق فقط", "No driver accepted my request": "لم يوافق أي كابتن على طلبي", "I added the wrong pick-up/drop-off location": "أضفت موقع انطلاق/وصول خاطئ", "I don't have a reason": "ليس لدي سبب", "Can we know why you want to cancel Ride ?": "هل يمكننا معرفة سبب رغبتك في إلغاء الرحلة؟", "Cancel Ride": "إلغاء الرحلة", "Add Payment Method": "إضافة طريقة دفع", "Ride Wallet": "محفظة الرحلة", "Payment Method": "طريقة الدفع", "Type here Place": "اكتب المكان هنا", "Are You sure to ride to": "هل أنت متأكد من الذهاب إلى", "Confirm": "تأكيد", "You are Delete": "أنت تحذف", "Deleted": "تم الحذف", "You Dont Have Any places yet !": "ليس لديك أي أماكن بعد!", "From : Current Location": "من: الموقع الحالي", "My Cared": "بطاقاتي", "Add Card": "إضافة بطاقة", "Add Credit Card": "إضافة بطاقة ائتمانية", "Please enter the cardholder name": "الرجاء إدخال اسم صاحب البطاقة", "Please enter the expiry date": "الرجاء إدخال تاريخ انتهاء الصلاحية", "Please enter the CVV code": "الرجاء إدخال رمز CVV", "Go To Favorite Places": "الذهاب إلى الأماكن المفضلة", "Go to this Target": "اذهب إلى هذه الوجهة", "My Profile": "ملفي الشخصي", "Are you want to go to this site": "هل تريد الذهاب إلى هذا الموقع؟", "MyLocation": "موقعي", "my location": "موقعي", "Target": "الوجهة", "You Should choose rate figure": "يجب عليك اختيار تقييم", "Login Captin": "تسجيل دخول الكابتن", "Register Captin": "تسجيل كابتن", "Send Verfication Code": "إرسال رمز التحقق", "KM": "كم", "End Ride": "إنهاء الرحلة", "Minute": "دقيقة", "Go to passenger Location now": "اذهب إلى موقع الراكب الآن", "Duration of the Ride is ": "مدة الرحلة ", "Distance of the Ride is ": "مسافة الرحلة ", "Name of the Passenger is ": "اسم الراكب ", "Hello this is Captain": "مرحباً، معك الكابتن", "Start the Ride": "ابدأ الرحلة", "Please Wait If passenger want To Cancel!": "الرجاء الانتظار في حال أراد الراكب الإلغاء!", "Total Duration:": "المدة الإجمالية:", "Active Duration:": "المدة النشطة:", "Waiting for Captin ...": "بانتظار الكابتن...", "Age is ": "العمر: ", "Rating is ": "التقييم: ", " to arrive you.": "للوصول إليك.", "Tariff": "التعرفة", "Settings": "الإعدادات", "Feed Back": "التقييمات", "Please enter a valid 16-digit card number": "الرجاء إدخال رقم بطاقة صالح مكون من 16 رقماً", "Add Phone": "إضافة رقم", "Please enter a phone number": "الرجاء إدخال رقم هاتف", "You dont Add Emergency Phone Yet!": "لم تقم بإضافة رقم طوارئ بعد!", "You will arrive to your destination after ": "ستصل إلى وجهتك بعد ", "You can cancel Ride now": "يمكنك إلغاء الرحلة الآن", "You Can cancel Ride After Captain did not come in the time": "يمكنك إلغاء الرحلة إذا لم يأتِ الكابتن في الوقت المحدد", "If you in Car Now. Press Start The Ride": "إذا كنت في السيارة الآن، اضغط على 'ابدأ الرحلة'", "You Dont Have Any amount in": "ليس لديك أي رصيد في", "Wallet!": "المحفظة!", "You Have": "لديك", "Save Credit Card": "حفظ البطاقة الائتمانية", "Show Promos": "عرض العروض", "10 and get 4% discount": "10 واحصل على خصم 4%", "20 and get 6% discount": "20 واحصل على خصم 6%", "40 and get 8% discount": "40 واحصل على خصم 8%", "100 and get 11% discount": "100 واحصل على خصم 11%", "Pay with Your PayPal": "ادفع عبر PayPal", "You will choose one of above !": "اختر أحد الخيارات أعلاه!", "Edit Profile": "تعديل الملف الشخصي", "Copy this Promo to use it in your Ride!": "انسخ هذا العرض واستخدمه في رحلتك!", "To change some Settings": "لتغيير بعض الإعدادات", "Order Request Page": "صفحة طلب الرحلة", "Rouats of Trip": "مسارات الرحلة", "Passenger Name is ": "اسم الراكب: ", "Total From Passenger is ": "الإجمالي من الراكب: ", "Duration To Passenger is ": "المدة للوصول للراكب: ", "Distance To Passenger is ": "المسافة للوصول للراكب: ", "Total For You is ": "الإجمالي لك: ", "Distance is ": "المسافة: ", " KM": " كم", "Duration of Trip is ": "مدة الرحلة: ", " Minutes": " دقائق", "Apply Order": "قبول الطلب", "Refuse Order": "رفض الطلب", "Rate Captain": "تقييم الكابتن", "Enter your Note": "أدخل ملاحظتك", "Type something...": "اكتب شيئاً...", "Submit rating": "إرسال التقييم", "Rate Passenger": "تقييم الراكب", "Ride Summary": "ملخص الرحلة", "welcome_message": "أهلاً بك في انطلق!", "app_description": "انطلق هو تطبيق لمشاركة الرحلات، موثوق، آمن، وفي متناول اليد.", "get_to_destination": "صل إلى وجهتك بسرعة وسهولة.", "get_a_ride": "مع انطلق، يمكنك الحصول على توصيلة لوجهتك في دقائق.", "safe_and_comfortable": "استمتع برحلة آمنة ومريحة.", "committed_to_safety": "تلتزم انطلق بالسلامة، وجميع كباتننا يتم فحصهم بعناية والتحقق من سجلاتهم.", "your ride is Accepted": "تم قبول رحلتك", "Driver is waiting at pickup.": "الكابتن بانتظارك في نقطة الانطلاق.", "Driver is on the way": "الكابتن في الطريق", "Contact Options": "خيارات التواصل", "Send a custom message": "إرسال رسالة مخصصة", "Type your message": "اكتب رسالتك", "I will go now": "أنا ذاهب الآن", "You Have Tips": "لديك إكرامية", " tips\nTotal is": " إكرامية\nالإجمالي هو", "Your fee is ": "أجرتك هي ", "Do you want to pay Tips for this Driver": "هل تريد دفع إكرامية لهذا الكابتن؟", "Tip is ": "الإكرامية: ", "Are you want to wait drivers to accept your order": "هل تريد انتظار الكباتن ليقبلوا طلبك؟", "This price is fixed even if the route changes for the driver.": "هذا السعر ثابت حتى لو تغير مسار الكابتن.", "The price may increase if the route changes.": "قد يرتفع السعر إذا تغير المسار.", "The captain is responsible for the route.": "الكابتن هو المسؤول عن المسار.", "We are search for nearst driver": "نبحث عن أقرب كابتن", "Your order is being prepared": "طلبك قيد التحضير", "The drivers are reviewing your request": "يقوم الكباتن بمراجعة طلبك", "Your order sent to drivers": "تم إرسال طلبك للكباتن", "You can call or record audio of this trip": "يمكنك الاتصال أو تسجيل صوت لهذه الرحلة", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "بدأت الرحلة! يمكنك الآن الاتصال بأرقام الطوارئ، مشاركة رحلتك، أو تفعيل التسجيل الصوتي.", "Camera Access Denied.": "تم رفض الوصول إلى الكاميرا.", "Open Settings": "فتح الإعدادات", "GPS Required Allow !.": "مطلوب تفعيل GPS!", "Your Account is Deleted": "تم حذف حسابك", "Are you sure to delete your account?": "هل أنت متأكد من حذف حسابك؟", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "سيتم حذف بياناتك بعد أسبوعين\nولن تتمكن من استخدام التطبيق مرة أخرى بعد شهر واحد.", "Enter Your First Name": "أدخل اسمك الأول", "Are you Sure to LogOut?": "هل أنت متأكد من تسجيل الخروج؟", "Email Wrong": "البريد الإلكتروني خاطئ", "Email you inserted is Wrong.": "البريد الإلكتروني الذي أدخلته خاطئ.", "You have finished all times ": "لقد استنفدت كل المحاولات", "if you want help you can email us here": "إذا كنت بحاجة للمساعدة، يمكنك مراسلتنا هنا", "Thanks": "شكراً", "Email Us": "راسلنا عبر البريد الإلكتروني", "I cant register in your app in face detection ": "لا أستطيع التسجيل في تطبيقكم بسبب مشكلة في التحقق من الوجه", "Hi": "مرحباً", "No face detected": "لم يتم التعرف على أي وجه", "Image detecting result is ": "نتيجة التعرف على الصورة هي ", "from 3 times Take Attention": "من 3 محاولات، انتبه", "Be sure for take accurate images please\nYou have": "الرجاء التأكد من التقاط صور دقيقة\nلديك", "image verified": "تم التحقق من الصورة", "Next": "التالي", "There is no help Question here": "لا يوجد سؤال مساعدة هنا", "You dont have Points": "ليس لديك نقاط", "You Are Stopped For this Day !": "لقد تم إيقافك لهذا اليوم!", "You must be charge your Account": "يجب عليك شحن حسابك", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "لقد رفضت 3 رحلات اليوم، ولهذا السبب تم إيقافك.\nنراك غداً!", "Recharge my Account": "إعادة شحن حسابي", "Ok , See you Tomorrow": "حسناً، أراك غداً", "You are Stopped": "أنت موقوف", "Connected": "متصل", "Not Connected": "غير متصل", "Your are far from passenger location": "أنت بعيد عن موقع الراكب", "go to your passenger location before\nPassenger cancel trip": "اذهب إلى موقع الراكب قبل أن يلغي الرحلة", "You will get cost of your work for this trip": "ستحصل على تكلفة عملك لهذه الرحلة", " in your wallet": "في محفظتك", "you gain": "لقد ربحت", "Order Cancelled by Passenger": "تم إلغاء الطلب من قبل الراكب", "Feedback data saved successfully": "تم حفظ التقييم بنجاح", "No Promo for today .": "لا يوجد عرض لليوم.", "Select your destination": "اختر وجهتك", "Search for your Start point": "ابحث عن نقطة انطلاقك", "Search for waypoint": "ابحث عن نقطة توقف", "Current Location": "الموقع الحالي", "Add Location 1": "إضافة موقع 1", "You must Verify email !.": "يجب عليك التحقق من البريد الإلكتروني!", "Cropper": "قص الصورة", "Saved Sucssefully": "تم الحفظ بنجاح", "Select Date": "اختر التاريخ", "Birth Date": "تاريخ الميلاد", "Ok": "حسناً", "the 500 points equal 30 JOD": "500 نقطة تساوي 30 ديناراً أردنياً", "the 500 points equal 30 JOD for you \nSo go and gain your money": "500 نقطة تساوي 30 ديناراً أردنياً لك\nاذهب الآن واكسب أموالك", "token updated": "تم تحديث الرمز", "Add Location 2": "إضافة موقع 2", "Add Location 3": "إضافة موقع 3", "Add Location 4": "إضافة موقع 4", "Waiting for your location": "بانتظار موقعك", "Search for your destination": "ابحث عن وجهتك", "Hi! This is": "مرحباً! هذا", " I am using": " أنا أستخدم", " to ride with": " للتنقل مع", " as the driver.": " ككابتن.", "is driving a ": "يقود سيارة ", " with license plate ": " رقم لوحتها ", " I am currently located at ": " أنا حالياً في ", "Please go to Car now ": "الرجاء التوجه إلى السيارة الآن", "You will receive a code in WhatsApp Messenger": "سوف تستلم الرمز عبر واتساب", "If you need assistance, contact us": "إذا احتجت للمساعدة، تواصل معنا", "Promo Ended": "انتهى العرض", "Enter the promo code and get": "أدخل رمز العرض واحصل على", "DISCOUNT": "خصم", "No wallet record found": "لم يتم العثور على سجل للمحفظة", "for": "لـ", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "انطلق هو تطبيق مشاركة الرحلات الأكثر أماناً، ويقدم ميزات عديدة للكباتن والركاب. نقدم أقل نسبة عمولة، 8% فقط، لنضمن لك أفضل قيمة لرحلاتك. يشمل تطبيقنا تأميناً لأفضل الكباتن، صيانة دورية للسيارات مع أفضل المهندسين، وخدمات على الطريق لتجربة محترمة وعالية الجودة لجميع المستخدمين.", "You can contact us during working hours from 12:00 - 19:00.": "يمكنك التواصل معنا خلال ساعات العمل من 12:00 ظهراً حتى 7:00 مساءً.", "Choose a contact option": "اختر طريقة التواصل", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "أوقات العمل من 12:00 ظهراً حتى 7:00 مساءً.\nيمكنك إرسال رسالة واتساب أو بريد إلكتروني.", "Promo code copied to clipboard!": "تم نسخ رمز العرض إلى الحافظة!", "Copy Code": "نسخ الرمز", "Your invite code was successfully applied!": "تم تطبيق رمز دعوتك بنجاح!", "Payment Options": "خيارات الدفع", "wait 1 minute to receive message": "انتظر دقيقة واحدة لاستلام الرسالة", "You have copied the promo code.": "لقد نسخت رمز العرض.", "Select Payment Amount": "اختر مبلغ الدفع", "The promotion period has ended.": "لقد انتهت فترة العرض.", "Promo Code Accepted": "تم قبول رمز العرض", "Tap on the promo code to copy it!": "اضغط على رمز العرض لنسخه!", "Lowest Price Achieved": "تم الوصول لأقل سعر", "Cannot apply further discounts.": "لا يمكن تطبيق المزيد من الخصومات.", "Promo Already Used": "تم استخدام العرض مسبقاً", "Invitation Used": "تم استخدام الدعوة", "You have already used this promo code.": "لقد استخدمت هذا العرض مسبقاً.", "Insert Your Promo Code": "أدخل رمز العرض الخاص بك", "Enter promo code here": "أدخل رمز العرض هنا", "Please enter a valid promo code": "الرجاء إدخال رمز عرض صالح", "Awfar Car": "سيارة أوفر", "Old and affordable, perfect for budget rides.": "قديمة واقتصادية، مثالية للرحلات الموفّرة.", " If you need to reach me, please contact the driver directly at": "إذا احتجت للتواصل معي، يرجى الاتصال بالكابتن مباشرة على", "No Car or Driver Found in your area.": "لم يتم العثور على سيارة أو كابتن في منطقتك.", "Please Try anther time ": "الرجاء المحاولة في وقت آخر", "There no Driver Aplly your order sorry for that ": "لم يتقدم أي كابتن لطلبك، نعتذر عن ذلك", "Trip Cancelled": "تم إلغاء الرحلة", "The Driver Will be in your location soon .": "سيصل الكابتن إلى موقعك قريباً.", "The distance less than 500 meter.": "المسافة أقل من 500 متر.", "Promo End !": "انتهى العرض!", "There is no notification yet": "لا توجد إشعارات بعد", "Use Touch ID or Face ID to confirm payment": "استخدم بصمة الإصبع أو الوجه لتأكيد الدفع", "Contact us for any questions on your order.": "تواصل معنا لأي استفسار حول طلبك.", "Pyament Cancelled .": "تم إلغاء الدفع.", "type here": "اكتب هنا", "Scan Driver License": "مسح رخصة القيادة", "Please put your licence in these border": "الرجاء وضع رخصتك ضمن هذه الحدود", "Camera not initialized yet": "لم يتم تفعيل الكاميرا بعد", "Take Image": "التقط صورة", "AI Page": "صفحة الذكاء الاصطناعي", "Take Picture Of ID Card": "التقط صورة للهوية", "Take Picture Of Driver License Card": "التقط صورة لرخصة القيادة", "We are process picture please wait ": "جاري معالجة الصورة، يرجى الانتظار", "There is no data yet.": "لا توجد بيانات بعد.", "Name :": "الاسم:", "Drivers License Class: ": "فئة الرخصة:", "Document Number: ": "رقم الوثيقة:", "Address: ": "العنوان:", "Height: ": "الطول:", "Expiry Date: ": "تاريخ الانتهاء:", "Date of Birth: ": "تاريخ الميلاد:", "You can't continue with us .\nYou should renew Driver license": "لا يمكنك المتابعة معنا.\nيجب عليك تجديد رخصة القيادة", "Detect Your Face ": "التحقق من وجهك", "Go to next step\nscan Car License.": "انتقل للخطوة التالية\nمسح رخصة السيارة.", "Name in arabic": "الاسم بالعربية", "Drivers License Class": "فئة رخصة القيادة", "Selected Date": "التاريخ المحدد", "Select Time": "اختر الوقت", "Selected Time": "الوقت المحدد", "Selected Date and Time": "التاريخ والوقت المحددان", "Lets check Car license ": "لنتحقق من رخصة السيارة", "Car": "سيارة", "Plate": "لوحة", "Rides": "رحلات", "Selected driver": "الكابتن المختار", "Lets check License Back Face": "لنتحقق من الوجه الخلفي للرخصة", "Car License Card": "رخصة السيارة", "No image selected yet": "لم يتم اختيار صورة بعد", "Made :": "الصنع:", "model :": "الموديل:", "VIN :": "رقم الهيكل:", "year :": "السنة:", "ُExpire Date": "تاريخ الانتهاء", "Login Driver": "دخول الكابتن", "Password must br at least 6 character.": "يجب أن تتكون كلمة المرور من 6 أحرف على الأقل.", "if you don't have account": "إذا لم يكن لديك حساب", "Here recorded trips audio": "هنا التسجيلات الصوتية للرحلات", "Register as Driver": "التسجيل ككابتن", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "باختياري \"أوافق\" أدناه، أكون قد راجعت ووافقت على شروط الاستخدام وأقر بـ", "Log Out Page": "صفحة تسجيل الخروج", "Log Off": "تسجيل الخروج", "Register Driver": "تسجيل كابتن", "Verify Email For Driver": "التحقق من بريد الكابتن الإلكتروني", "Admin DashBoard": "لوحة تحكم المشرف", "Your name": "اسمك", "your ride is applied": "تم قبول رحلتك", "H and": "س و", "JOD": "دينار", "m": "د", "We search nearst Driver to you": "نبحث لك عن أقرب كابتن", "please wait till driver accept your order": "الرجاء الانتظار حتى يقبل الكابتن طلبك", "No accepted orders? Try raising your trip fee to attract riders.": "لا يوجد قبول للطلبات؟ حاول رفع أجرة رحلتك لجذب الكباتن.", "You should select one": "يجب عليك اختيار واحد", "The driver accept your order for": "الكابتن قبل طلبك مقابل", "The driver on your way": "الكابتن في طريقه إليك", "Total price from ": "السعر الإجمالي من ", "Order Details Intaleq": "تفاصيل طلب انطلق", "Selected file:": "الملف المختار:", "Your trip cost is": "تكلفة رحلتك هي", "this will delete all files from your device": "سيؤدي هذا إلى حذف جميع الملفات من جهازك", "Exclusive offers and discounts always with the Intaleq app": "عروض وخصومات حصرية دائماً مع تطبيق انطلق", "Submit Question": "إرسال سؤال", "Please enter your Question.": "الرجاء إدخال سؤالك.", "Help Details": "تفاصيل المساعدة", "No trip yet found": "لم يتم العثور على رحلة بعد", "No Response yet.": "لا يوجد رد بعد.", " You Earn today is ": "أرباحك اليوم هي ", " You Have in": " لديك في", "Total points is ": "إجمالي النقاط: ", "Total Connection Duration:": "إجمالي مدة الاتصال:", "Passenger name : ": "اسم الراكب: ", "Cost Of Trip IS ": "تكلفة الرحلة: ", "Arrival time": "وقت الوصول", "arrival time to reach your point": "وقت الوصول إلى وجهتك", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "لرحلات انطلق والسكوتر، يتم حساب السعر بشكل متغير. أما لرحلات الراحة، فيعتمد السعر على الوقت والمسافة.", "Hello this is Driver": "مرحباً، معك الكابتن", "Is the Passenger in your Car ?": "هل الراكب في سيارتك؟", "Please wait for the passenger to enter the car before starting the trip.": "الرجاء انتظار دخول الراكب إلى السيارة قبل بدء الرحلة.", "No ,still Waiting.": "لا، ما زلت أنتظر.", "I arrive you": "أنا وصلتك", "I Arrive your site": "أنا وصلت لموقعك", "You are not in near to passenger location": "أنت لست قريباً من موقع الراكب", "please go to picker location exactly": "الرجاء الذهاب إلى موقع الانطلاق بدقة", "You Can Cancel Trip And get Cost of Trip From": "يمكنك إلغاء الرحلة والحصول على تكلفتها من", "Are you sure to cancel?": "هل أنت متأكد من الإلغاء؟", "Insert Emergincy Number": "إدخال رقم الطوارئ", "Best choice for comfort car and flexible route and stops point": "الخيار الأفضل لسيارة مريحة ومسار مرن ونقاط توقف", "Insert": "إدخال", "This is for scooter or a motorcycle.": "هذا للسكوتر أو الدراجة النارية.", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "هذه الرحلة مباشرة من نقطة انطلاقك إلى وجهتك بسعر ثابت. يجب على الكابتن اتباع المسار المحدد.", "You can decline a request without any cost": "يمكنك رفض الطلب دون أي تكلفة", "Perfect for adventure seekers who want to experience something new and exciting": "مثالي لمحبي المغامرات الذين يرغبون في تجربة شيء جديد ومثير", "My current location is:": "موقعي الحالي هو:", "and I have a trip on": "ولدي رحلة على", "App with Passenger": "التطبيق مع الراكب", "You will be pay the cost to driver or we will get it from you on next trip": "ستدفع التكلفة للكابتن أو سنحصل عليها منك في الرحلة القادمة", "Trip has Steps": "الرحلة لها عدة وجهات", "Distance from Passenger to destination is ": "المسافة من الراكب للوجهة: ", "price is": "السعر هو", "This ride type does not allow changes to the destination or additional stops": "هذا النوع من الرحلات لا يسمح بتغيير الوجهة أو إضافة نقاط توقف", "This price may be changed": "قد يتغير هذا السعر", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "لا حاجة لبطاقة SIM! اتصل بالكابتن مباشرة عبر تطبيقنا. نستخدم تقنية متقدمة لضمان خصوصيتك.", "This ride type allows changes, but the price may increase": "هذا النوع من الرحلات يسمح بالتغييرات، ولكن قد يرتفع السعر", "Select one message": "اختر رسالة واحدة", "I'm waiting for you": "أنا بانتظارك", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "لاحظنا أن السرعة تجاوزت 100 كم/ساعة. الرجاء تخفيف السرعة من أجل سلامتك. إذا شعرت بعدم الأمان، يمكنك مشاركة تفاصيل رحلتك مع جهة اتصال أو الاتصال بالشرطة باستخدام زر الطوارئ الأحمر.", "Warning: Intaleqing detected!": "تحذير: تم كشف سرعة زائدة!", "Please help! Contact me as soon as possible.": "الرجاء المساعدة! تواصل معي بأسرع وقت ممكن.", "Share Trip Details": "مشاركة تفاصيل الرحلة", "Car Plate is ": "رقم لوحة السيارة: ", "the 300 points equal 300 L.E for you \nSo go and gain your money": "300 نقطة تساوي 300 ليرة لك\nاذهب الآن واكسب أموالك", "the 300 points equal 300 L.E": "300 نقطة تساوي 300 ليرة", "The payment was not approved. Please try again.": "لم تتم الموافقة على الدفع. الرجاء المحاولة مرة أخرى.", "Payment Failed": "فشل الدفع", "This is a scheduled notification.": "هذا إشعار مجدول.", "An error occurred during the payment process.": "حدث خطأ أثناء عملية الدفع.", "The payment was approved.": "تمت الموافقة على الدفع.", "Payment Successful": "تم الدفع بنجاح", "No ride found yet": "لم يتم العثور على رحلة بعد", "Accept Order": "قبول الطلب", "Bottom Bar Example": "مثال للشريط السفلي", "Driver phone": "رقم الكابتن", "Statistics": "الإحصائيات", "Origin": "نقطة الانطلاق", "Destination": "الوجهة", "Driver Name": "اسم الكابتن", "Driver Car Plate": "رقم لوحة سيارة الكابتن", "Available for rides": "متاح للرحلات", "Scan Id": "مسح الهوية", "Camera not initilaized yet": "لم يتم تفعيل الكاميرا بعد", "Scan ID MklGoogle": "مسح هوية MklGoogle", "Language": "اللغة", "Jordan": "الأردن", "USA": "الولايات المتحدة الأمريكية", "Egypt": "مصر", "Turkey": "تركيا", "Saudi Arabia": "المملكة العربية السعودية", "Qatar": "قطر", "Bahrain": "البحرين", "Kuwait": "الكويت", "But you have a negative salary of": "لكن لديك رصيد سالب بقيمة", "Promo Code": "رمز العرض", "Your trip distance is": "مسافة رحلتك هي", "Enter promo code": "أدخل رمز العرض", "You have promo!": "لديك عرض!", "Cost Duration": "تكلفة المدة", "Duration is": "المدة هي", "Leave": "مغادرة", "Join": "انضمام", "Heading your way now. Please be ready.": "أنا في طريقي إليك الآن. يرجى الاستعداد.", "Approaching your area. Should be there in 3 minutes.": "أقترب من منطقتك. سأكون هناك خلال 3 دقائق.", "There's heavy traffic here. Can you suggest an alternate pickup point?": "هناك ازدحام مروري شديد. هل يمكنك اقتراح نقطة انطلاق بديلة؟", "This ride is already taken by another driver.": "هذه الرحلة قد أخذها كابتن آخر.", "You Should be select reason.": "يجب عليك اختيار السبب.", "Waiting for Driver ...": "بانتظار الكابتن...", "Latest Recent Trip": "آخر رحلة حديثة", "from your list": "من قائمتك", "Do you want to change Work location": "هل تريد تغيير موقع العمل؟", "Do you want to change Home location": "هل تريد تغيير موقع المنزل؟", "We Are Sorry That we dont have cars in your Location!": "نأسف لعدم توفر سيارات في موقعك!", "Choose from Map": "اختر من الخريطة", "Pick your ride location on the map - Tap to confirm": "اختر موقع رحلتك على الخريطة - اضغط للتأكيد", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "انطلق هو تطبيق طلب السيارات الآمن، الموثوق، وفي متناول اليد.", "With Intaleq, you can get a ride to your destination in minutes.": "مع انطلق، يمكنك الوصول إلى وجهتك في دقائق.", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "تلتزم انطلق بالسلامة، وجميع كباتننا يتم فحصهم بعناية والتحقق من سجلاتهم.", "Pick from map": "اختر من الخريطة", "No Car in your site. Sorry!": "لا توجد سيارة في موقعك. نعتذر!", "Nearest Car for you about ": "أقرب سيارة لك على بعد ", "From :": "من:", "Get Details of Trip": "الحصول على تفاصيل الرحلة", "If you want add stop click here": "إذا أردت إضافة نقطة توقف، اضغط هنا", "Where you want go ": "إلى أين تريد الذهاب؟", "My Card": "بطاقتي", "Start Record": "بدء التسجيل", "History of Trip": "سجل الرحلات", "Helping Center": "مركز المساعدة", "Record saved": "تم حفظ التسجيل", "Trips recorded": "الرحلات المسجلة", "Select Your Country": "اختر بلدك", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "لضمان حصولك على أدق المعلومات لموقعك، يرجى اختيار بلدك أدناه. سيساعد هذا في تخصيص تجربة التطبيق ومحتواه لبلدك.", "Are you sure to delete recorded files": "هل أنت متأكد من حذف الملفات المسجلة؟", "Select recorded trip": "اختر رحلة مسجلة", "Card Number": "رقم البطاقة", "Hi, Where to ": "مرحباً، إلى أين؟", "Pick your destination from Map": "اختر وجهتك من الخريطة", "Add Stops": "إضافة نقاط توقف", "Get Direction": "الحصول على الاتجاهات", "Add Location": "إضافة موقع", "Switch Rider": "تبديل الراكب", "You will arrive to your destination after timer end.": "ستصل إلى وجهتك بعد انتهاء المؤقت.", "You can cancel trip": "يمكنك إلغاء الرحلة", "The driver waitting you in picked location .": "الكابتن بانتظارك في موقع الانطلاق.", "Pay with Your": "ادفع باستخدام", "Pay with Credit Card": "الدفع بالبطاقة الائتمانية", "Show Promos to Charge": "عرض العروض للشحن", "Point": "نقطة", "How many hours would you like to wait?": "كم ساعة تود الانتظار؟", "Driver Wallet": "محفظة الكابتن", "Choose between those Type Cars": "اختر بين أنواع السيارات هذه", "hour": "ساعة", "Select Waiting Hours": "اختر ساعات الانتظار", "Total Points is": "إجمالي النقاط", "You will receive a code in SMS message": "ستستلم رمزاً في رسالة نصية", "Done": "تم", "Total Budget from trips is ": "إجمالي الميزانية من الرحلات: ", "Total Amount:": "المبلغ الإجمالي:", "Total Budget from trips by\nCredit card is ": "إجمالي الميزانية من الرحلات بالبطاقة الائتمانية: ", "This amount for all trip I get from Passengers": "هذا المبلغ هو لكل الرحلات التي أحصل عليها من الركاب", "Pay from my budget": "ادفع من ميزانيتي", "This amount for all trip I get from Passengers and Collected For me in": "هذا المبلغ هو لكل الرحلات التي أحصل عليها من الركاب والمجمعة لي في", "You can buy points from your budget": "يمكنك شراء نقاط من ميزانيتك", "insert amount": "أدخل المبلغ", "You can buy Points to let you online\nby this list below": "يمكنك شراء نقاط لتكون متصلاً\nمن القائمة أدناه", "Create Wallet to receive your money": "أنشئ محفظة لاستلام أموالك", "Enter your feedback here": "أدخل تقييمك هنا", "Please enter your feedback.": "الرجاء إدخال تقييمك.", "Feedback": "تقييم", "Submit ": "إرسال ", "Click here to Show it in Map": "اضغط هنا لعرضه على الخريطة", "Canceled": "تم الإلغاء", "No I want": "لا أريد", "Email is": "البريد الإلكتروني:", "Phone Number is": "رقم الهاتف:", "Date of Birth is": "تاريخ الميلاد:", "Sex is ": "الجنس: ", "Car Details": "تفاصيل السيارة", "VIN is": "رقم الهيكل:", "Color is ": "اللون: ", "Make is ": "الشركة المصنعة: ", "Model is": "الموديل:", "Year is": "السنة:", "Expiration Date ": "تاريخ الانتهاء: ", "Edit Your data": "تعديل بياناتك", "write vin for your car": "اكتب رقم هيكل سيارتك", "VIN": "رقم الهيكل", "Device Change Detected": "تم اكتشاف تغيير في الجهاز", "Please verify your identity": "يرجى التحقق من هويتك", "write Color for your car": "اكتب لون سيارتك", "write Make for your car": "اكتب الشركة المصنعة لسيارتك", "write Model for your car": "اكتب موديل سيارتك", "write Year for your car": "اكتب سنة صنع سيارتك", "write Expiration Date for your car": "اكتب تاريخ انتهاء صلاحية سيارتك", "Tariffs": "التعرفات", "Minimum fare": "الحد الأدنى للأجرة", "Maximum fare": "الحد الأقصى للأجرة", "Flag-down fee": "رسوم بدء الرحلة", "Including Tax": "شامل الضريبة", "BookingFee": "رسوم الحجز", "Morning": "صباحاً", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "من 7:30 صباحاً حتى 10:30 صباحاً (الخميس، الجمعة، السبت، الاثنين)", "Evening": "مساءً", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "من 12:00 ظهراً حتى 3:00 عصراً (الخميس، الجمعة، السبت، الاثنين)", "Night": "ليلاً", "You have in account": "لديك في الحساب", "Select Country": "اختر البلد", "Ride Today : ": "رحلة اليوم: ", "After this period\nYou can't cancel!": "بعد هذه الفترة\nلا يمكنك الإلغاء!", "from 23:59 till 05:30": "من 11:59 مساءً حتى 5:30 صباحاً", "Rate Driver": "تقييم الكابتن", "Total Cost is ": "التكلفة الإجمالية: ", "Write note": "اكتب ملاحظة", "Time to arrive": "وقت الوصول", "Ride Summaries": "ملخصات الرحلات", "Total Cost": "التكلفة الإجمالية", "Average of Hours of": "متوسط ساعات", " is ON for this month": " متصل لهذا الشهر", "Days": "أيام", "Total Hours on month": "إجمالي الساعات في الشهر", "Counts of Hours on days": "عدد الساعات في الأيام", "OrderId": "رقم الطلب", "created time": "وقت الإنشاء", "Intaleq Over": "انتهت رحلة انطلق", "I will slow down": "سأخفف السرعة", "Map Passenger": "خريطة الراكب", "Be Slowly": "تمهل", "If you want to make Google Map App run directly when you apply order": "إذا أردت تشغيل خرائط جوجل مباشرة عند قبول الطلب", "You can change the language of the app": "يمكنك تغيير لغة التطبيق", "Your Budget less than needed": "رصيدك أقل من المطلوب", "You can change the Country to get all features": "يمكنك تغيير البلد للحصول على كل الميزات", "Change Country": "تغيير البلد" }, "ar-eg": { "EGP": "ج.م", "Order": "طلب", "OrderVIP": "طلب VIP", "Cancel Trip": "إلغاء الرحلة", "Passenger Cancel Trip": "الراكب لغى الرحلة", "VIP Order": "طلب VIP", "Hi ,I Arrive your site": "أهلاً، أنا وصلت مكانك", "The driver accepted your trip": "الكابتن قبل رحلتك", "message From passenger": "رسالة من الراكب", "Cancel": "إلغاء", "Trip Cancelled. The cost of the trip will be added to your wallet.": "الرحلة اتلغت. تكلفة الرحلة هتضاف لمحفظتك.", "token change": "تغيير التوكن", "face detect": "كشف الوجه", "Face Detection Result": "نتيجة كشف الوجه", "similar": "مطابق", "not similar": "غير مطابق", "Hi ,I will go now": "أهلاً، أنا هتحرك دلوقتي", "Passenger come to you": "الراكب جايلك", "Call Income": "مكالمة واردة", "Call Income from Passenger": "مكالمة واردة من الراكب", "Criminal Document Required": "مطلوب الفيش والتشبيه", "You should have upload it .": "لازم ترفع الملف ده.", "Call End": "إنهاء المكالمة", "The order has been accepted by another driver.": "كابتن تاني قبل الطلب.", "The order Accepted by another Driver": "الطلب اتقبل من كابتن تاني", "We regret to inform you that another driver has accepted this order.": "للأسف، كابتن تاني قبل الطلب ده.", "Driver Applied the Ride for You": "الكابتن قدم الطلب ليك", "Applied": "تم التقديم", "Pay by Sham Cash": "دفع بـ كاش", "Pay with Debit Card": "دفع ببطاقة الخصم", "Please go to Car Driver": "يا ريت تروح للكابتن", "Ok I will go now.": "تمام، أنا رايح دلوقتي.", "Accepted Ride": "الرحلة اتقبلت", "Driver Accepted the Ride for You": "الكابتن قبل الرحلة عشانك", "Promo": "برومو كود", "Show latest promo": "اظهر آخر العروض", "Trip Monitoring": "متابعة الرحلة", "Driver Is Going To Passenger": "الكابتن في الطريق ليك", "Please stay on the picked point.": "خليك واقف في النقطة اللي حددتها.", "message From Driver": "رسالة من الكابتن", "Trip is Begin": "الرحلة بدأت", "Cancel Trip from driver": "إلغاء الرحلة من الكابتن", "We will look for a new driver.\nPlease wait.": "هنشوفلك كابتن تاني.\nثواني من فضلك.", "The driver canceled your ride.": "الكابتن لغى رحلتك.", "Driver Finish Trip": "الكابتن أنهى الرحلة", "you will pay to Driver": "هتدفع للكابتن", "Don’t forget your personal belongings.": "اوعى تنسى متعلقاتك الشخصية.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "يا ريت تتأكد إن كل حاجتك معاك وإن أي باقي ليك اتضاف للمحفظة قبل ما تنزل. شكراً لاستخدامك انطلق.", "Finish Monitor": "إنهاء المتابعة", "Trip finished": "الرحلة خلصت", "Call Income from Driver": "مكالمة من الكابتن", "Driver Cancelled Your Trip": "الكابتن لغى رحلتك", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "هتدفع للكابتن تكلفة وقته، راجع محفظة انطلق بتاعتك", "Order Applied": "تم تقديم الطلب", "welcome to intaleq": "أهلاً بيك في انطلق", "login or register subtitle": "دخل رقم موبايلك للدخول أو لإنشاء حساب جديد", "An application error occurred.": "حصل خطأ في التطبيق.", "Submission Failed": "فشل الإرسال", "Your complaint has been submitted.": "شكوتك وصلتنا.", "Failed to connect to the server. Please try again.": "في مشكلة في الاتصال بالسيرفر. جرب تاني.", "Ride information not found. Please refresh the page.": "معلومات الرحلة مش موجودة. اعمل تحديث للصفحة.", "Please describe your issue before submitting.": "يا ريت توصف المشكلة قبل ما تبعت.", "An application error occurred during upload.": "حصل خطأ أثناء الرفع.", "Failed to upload audio file.": "فشل رفع الملف الصوتي.", "Audio uploaded successfully.": "تم رفع الصوت بنجاح.", "Complaint cannot be filed for this ride. It may not have been completed or started.": "مينفعش تقدم شكوى للرحلة دي. ممكن تكون لسه مخلصتش أو مابدأتش.", "2. Attach Recorded Audio (Optional)": "٢. ضيف تسجيل صوتي (اختياري)", "Please enter a description of the issue.": "اكتب وصف للمشكلة.", "phone number label": "رقم الموبايل", "phone number required": "دخل رقم الموبايل", "send otp button": "ابعت كود التحقق", "verify your number title": "تأكيد رقمك", "otp sent subtitle": "بعتنا كود من 5 أرقام لـ\n@phoneNumber", "verify and continue button": "تأكيد ومتابعة", "enter otp validation": "دخل كود التحقق المكون من 5 أرقام", "one last step title": "آخر خطوة", "complete profile subtitle": "كمل بياناتك عشان تبدأ", "first name label": "الاسم الأول", "first name required": "دخل الاسم الأول", "last name label": "الاسم الأخير", "Verify OTP": "تأكيد الكود", "Verification Code": "كود التحقق", "We have sent a verification code to your mobile number:": "بعتنا كود التحقق على رقم موبايلك:", "Verify": "تأكيد", "Resend Code": "إعادة إرسال الكود", "You can resend in": "ممكن تبعته تاني بعد", "seconds": "ثانية", "Error": "خطأ", "Please enter the complete 6-digit code.": "دخل الكود كامل (6 أرقام).", "last name required": "دخل الاسم الأخير", "email optional label": "الإيميل (اختياري)", "complete registration button": "تمام التسجيل", "User with this phone number or email already exists.": "في حساب مسجل بنفس الرقم أو الإيميل ده.", "otp sent success": "تم إرسال الكود على الواتساب.", "failed to send otp": "فشل إرسال الكود.", "server error try again": "خطأ في السيرفر، جرب تاني.", "an error occurred": "حصل خطأ غير متوقع: @error", "otp verification failed": "كود التحقق غلط.", "registration failed": "التسجيل فشل.", "welcome user": "أهلاً، @firstName!", "Cancel Trip from driver": "إلغاء الرحلة من الكابتن", "We will look for a new driver.\nPlease wait.": "بنشوفلك كابتن تاني.\nثواني.", "The driver canceled your ride.": "الكابتن لغى الرحلة.", "Driver Finish Trip": "الكابتن خلص الرحلة", "you will pay to Driver": "هتدفع للكابتن", "Don't forget your personal belongings.": "متنساش متعلقاتك الشخصية.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "اتأكد إن كل حاجتك معاك وإن أي باقي اتضاف للمحفظة. شكراً لاختيارك انطلق.", "Finish Monitor": "إنهاء المتابعة", "Trip finished": "الرحلة انتهت", "Call Income from Driver": "مكالمة من الكابتن", "Driver Cancelled Your Trip": "الكابتن لغى رحلتك", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "هتدفع للكابتن تمن وقته، راجع محفظتك في انطلق", "Order Applied": "تم تقديم الطلب", "Share App": "شارك التطبيق", "Wallet": "المحفظة", "Balance": "الرصيد", "Don’t forget your personal belongings.": "اوعى تنسى متعلقاتك.", "Profile": "الملف الشخصي", "Contact Support": "كلم الدعم", "Session expired. Please log in again.": "الجلسة انتهت. سجل دخول تاني.", "Security Warning": "⚠️ تحذير أمني", "Potential security risks detected. The application may not function correctly.": "اكتشفنا مخاطر أمنية. التطبيق ممكن ميعملش صح.", "please order now": "اطلب دلوقتي", "Where to": "رايح فين؟", "Where are you going?": "رايح فين؟", "Quick Actions": "إجراءات سريعة", "My Balance": "رصيدي", "Order History": "سجل الطلبات", "Contact Us": "تواصل معنا", "Driver": "كابتن", "Complaint": "شكوى", "Promos": "العروض", "Recent Places": "الأماكن الأخيرة", "From": "من", "WhatsApp Location Extractor": "استخراج الموقع من واتساب", "Location Link": "رابط الموقع", "Paste location link here": "حط رابط الموقع هنا", "Go to this location": "روح للمكان ده", "Paste WhatsApp location link": "الصق لوكيشن الواتساب", "Select Order Type": "اختار نوع الطلب", "Choose who this order is for": "الطلب ده لمين؟", "I want to order for myself": "هطلب لنفسي", "I want to order for someone else": "هطلب لحد تاني", "Order for someone else": "اطلب لحد تاني", "Order for myself": "اطلب لنفسي", "Are you want to go this site": "عايز تروح المكان ده؟", "No": "لأ", "Pay by Sham Cash": "دفع كاش", "Intaleq Wallet": "محفظة انطلق", "Have a promo code?": "معاك برومو كود؟", "Your Wallet balance is ": "رصيد محفظتك: ", "Cash": "كاش", "Phone Number": "رقم الموبايل", "Search country": "دور على الدولة", "Payment Successful!": "تم الدفع!", "Your payment was successful.": "تم الدفع بنجاح.", "Pay directly to the captain": "ادفع للكابتن علطول", "Top up Wallet to continue": "اشحن المحفظة عشان تكمل", "Or pay with Cash instead": "أو ادفع كاش بدل كده", "Confirm & Find a Ride": "تأكيد وشوف رحلة", "Balance:": "الرصيد:", "Alerts": "تنبيهات", "Welcome Back!": "نورتنا تاني!", "Current Balance": "الرصيد الحالي", "Set Wallet Phone Number": "حط رقم للمحفظة", "Link a phone number for transfers": "اربط رقم موبايل للتحويلات", "Payment History": "سجل المدفوعات", "View your past transactions": "شوف معاملاتك اللي فاتت", "Top up Wallet": "شحن المحفظة", "Add funds using our secure methods": "ضيف رصيد بطرق آمنة", "Driver is waiting": "الكابتن مستنيك", "Type your message...": "اكتب رسالتك...", "Driver Accepted Request": "الكابتن قبل الطلب", "Message": "رسالة", "Call": "اتصال", "Set Phone Number": "حط رقم الموبايل", "Select This Ride": "اختار الرحلة دي", "Call Driver": "كلم الكابتن", "Increase Fare": "زود الأجرة", "Stop": "قف", "Record": "سجل", "Share": "شارك", "WhatsApp": "واتساب", "SOS": "طوارئ", "No drivers accepted your request yet": "مفيش كباتن قبلوا طلبك لسه", "Increasing the fare might attract more drivers. Would you like to increase the price?": "لو زودت الأجرة ممكن تشجع الكباتن. تحب تزود السعر؟", "Please make sure not to leave any personal belongings in the car.": "اتأكد إنك منستش أي حاجة في العربية.", "Cancel Ride": "إلغاء الرحلة", "Route Not Found": "المسار مش موجود", "We couldn't find a valid route to this destination. Please try selecting a different point.": "مش لاقيين طريق للوجهة دي. جرب تختار نقطة تانية.", "alert": "تنبيه", "You can call or record audio during this trip.": "تقدر تتصل أو تسجل صوت خلال الرحلة.", "Warning: Speeding detected!": "تحذير: سرعة عالية!", "Fixed Price": "سعر ثابت", "Report": "إبلاغ", "Comfort": "مريحة", "Intaleq Balance": "رصيد انطلق", "Search for a starting point": "دور على نقطة الانطلاق", "Top up Balance to continue": "اشحن الرصيد عشان تكمل", "Electric": "كهرباء", "Lady": "للسيدات", "Van": "عائلية (فان)", "Rayeh Gai": "رايح جاي", "Join Intaleq as a driver using my referral code!": "انضم لـ 'انطلق' ككابتن واستخدم كود الدعوة بتاعي!", "Use code:": "استخدم الكود:", "Download the Intaleq Driver app now and earn rewards!": "نزل تطبيق 'انطلق' للكباتن واكسب مكافآت!", "Get a discount on your first Intaleq ride!": "خد خصم على أول رحلة ليك مع انطلق!", "Use my referral code:": "استخدم كود الدعوة بتاعي:", "Download the Intaleq app now and enjoy your ride!": "نزل أبلكيشن انطلق واستمتع بمشوارك!", "Contacts Loaded": "تم تحميل الأسماء", "Showing": "بيظهر", "of": "من", "Pay by MTN Wallet": "دفع بمحفظة كاش", "Pay by Syriatel Wallet": "دفع بمحفظة كاش", "Customer not found": "العميل مش موجود", "Wallet is blocked": "المحفظة موقوفة", "Customer phone is not active": "موبايل العميل مش شغال", "Balance not enough": "الرصيد مش كفاية", "Balance limit exceeded": "عديت حد الرصيد", "Incorrect sms code": "⚠️ كود التحقق غلط. جرب تاني.", "contacts. Others were hidden because they don't have a phone number.": "اسم. الباقي مخفي عشان ملهوش أرقام.", "No contacts found": "مفيش أسماء", "No contacts with phone numbers were found on your device.": "ملقيناش أسماء ليها أرقام على جهازك.", "Permission denied": "مفيش إذن", "Contact permission is required to pick contacts": "محتاجين إذن الوصول للأسماء.", "An error occurred while picking contacts:": "حصل خطأ وإحنا بنختار الأسماء:", "Please enter a correct phone": "دخل رقم موبايل صح", "Success": "تمام", "Invite sent successfully": "الدعوة اتبعتت بنجاح", "Hello! I'm inviting you to try Intaleq.": "أهلاً! بدعوك تجرب تطبيق انطلق.", "Use my invitation code to get a special gift on your first ride!": "استخدم كود الدعوة بتاعي عشان تاخد هدية في أول رحلة!", "Your personal invitation code is:": "كود دعوتك هو:", "Be sure to use it quickly! This code expires at": "استخدمه بسرعة! الكود هينتهي في", "Download the app now:": "نزل التطبيق دلوقتي:", "See you on the road!": "نشوفك في المشوار!", "This phone number has already been invited.": "الرقم ده اتبعتتله دعوة قبل كده.", "An unexpected error occurred. Please try again.": "حصل خطأ غير متوقع. جرب تاني.", "You deserve the gift": "تستاهل الهدية", "Claim your 20 LE gift for inviting": "اطلب هديتك (20 جنيه) عشان دعيت", "You have got a gift for invitation": "جيلك هدية عشان الدعوة", "You have earned 20": "كسبت 20", "LE": "جنيه", "Vibration feedback for all buttons": "هزة مع كل الأزرار", "Share with friends and earn rewards": "شارك مع صحابك واكسب مكافآت", "Gift Already Claimed": "خدت الهدية دي قبل كده", "You have already received your gift for inviting": "انت استلمت هدية الدعوة دي خلاص", "Keep it up!": "كمل!", "has completed": "كمّل", "trips": "رحلات", "Personal Information": "البيانات الشخصية", "Name": "الاسم", "Not set": "مش متحدد", "Gender": "النوع", "Education": "التعليم", "Work & Contact": "العمل والتواصل", "Employment Type": "نوع الشغل", "Marital Status": "الحالة الاجتماعية", "SOS Phone": "رقم الطوارئ", "Sign Out": "خروج", "Delete My Account": "امسح حسابي", "Update Gender": "تحديث النوع", "Update": "تحديث", "Update Education": "تحديث التعليم", "Are you sure? This action cannot be undone.": "متأكد؟ مينفعش ترجع في الخطوة دي.", "Confirm your Email": "أكد إيميلك", "Type your Email": "اكتب إيميلك", "Delete Permanently": "حذف نهائي", "Male": "ذكر", "Female": "أنثى", "Other": "آخر", "High School Diploma": "ثانوية عامة", "Associate Degree": "دبلوم", "Bachelor's Degree": "بكالوريوس / ليسانس", "Master's Degree": "ماجستير", "Doctoral Degree": "دكتوراه", "Select your preferred language for the app interface.": "اختار لغة التطبيق.", "Language Options": "خيارات اللغة", "You can claim your gift once they complete 2 trips.": "تقدر تاخد هديتك لما يخلصوا رحلتين.", "Closest & Cheapest": "الأقرب والأوفر", "Comfort choice": "خيار الراحة", "Travel in a modern, silent electric car. A premium, eco-friendly choice for a smooth ride.": "سافر بعربية كهرباء حديثة وهادية. خيار مميز وصديق للبيئة لمشوار رايق.", "Spacious van service ideal for families and groups. Comfortable, safe, and cost-effective travel together.": "عربية فان واسعة للعيلات والمجموعات. سفر مريح وآمن وموفر.", "Quiet & Eco-Friendly": "هادية وصديقة للبيئة", "Lady Captain for girls": "كابتن سيدة للبنات", "Van for familly": "فان للعيلة", "Are you sure to delete this location?": "متأكد إنك عايز تمسح المكان ده؟", "Change Work location?": "تغيير مكان الشغل؟", "Change Home location?": "تغيير مكان البيت؟", "Submit a Complaint": "قدم شكوى", "Submit Complaint": "إرسال الشكوى", "No trip history found": "مفيش رحلات سابقة", "Your past trips will appear here.": "رحلاتك اللي فاتت هتظهر هنا.", "1. Describe Your Issue": "١. اوصف المشكلة", "Enter your complaint here...": "اكتب شكوتك هنا...", "2. Attach Recorded Audio": "٢. ضيف تسجيل صوتي", "No audio files found.": "مفيش ملفات صوتية.", "Confirm Attachment": "تأكيد الإرفاق", "Attach this audio file?": "تبعت الملف الصوتي ده؟", "Uploaded": "تم الرفع", "3. Review Details & Response": "٣. مراجعة التفاصيل والرد", "Date": "التاريخ", "Today's Promos": "عروض النهاردة", "No promos available right now.": "مفيش عروض دلوقتي.", "Check back later for new offers!": "شوف تاني بعدين عشان العروض الجديدة!", "Valid Until:": "صالح لحد:", "CODE": "الكود", "Login": "دخول", "Sign in for a seamless experience": "سجل دخولك لتجربة أسهل", "Sign In with Google": "دخول بـ جوجل", "Sign in with Apple": "دخول بـ أبل", "User not found": "المستخدم مش موجود", "Need assistance? Contact us": "محتاج مساعدة؟ كلمنا", "Email": "الإيميل", "Your email address": "عنوان بريدك الإلكتروني", "Enter a valid email": "دخل إيميل صح", "Password": "الباسورد", "Your password": "كلمة السر بتاعتك", "Enter your password": "دخل الباسورد", "Submit": "إرسال", "Terms of Use & Privacy Notice": "شروط الاستخدام والخصوصية", "By selecting \"I Agree\" below, I confirm that I have read and agree to the ": "لما تختار \"أوافق\"، بتأكد إنك قريت ووافقت على ", "Terms of Use": "شروط الاستخدام", " and acknowledge the ": " وبتقر بـ ", "Privacy Notice": "سياسة الخصوصية", " . I am at least 18 years old.": " . وعمري 18 سنة على الأقل.", "I Agree": "أوافق", "Continue": "متابعة", "Enable Location": "شغل اللوكيشن", "To give you the best experience, we need to know where you are. Your location is used to find nearby captains and for pickups.": "عشان نخدمك أحسن، محتاجين نعرف مكانك. اللوكيشن بيستخدم عشان نلاقي كباتن قريبين ليك.", "Allow Location Access": "السماح بالوصول للموقع", "Welcome to Intaleq!": "أهلاً بيك في انطلق!", "Before we start, please review our terms.": "قبل ما نبدأ، يا ريت تراجع شروطنا.", "Your journey starts here": "مشوارك بيبدأ من هنا", "Cancel Search": "إلغاء البحث", "Set pickup location": "حدد مكان الركوب", "Move the map to adjust the pin": "حرك الخريطة عشان تظبط الدبوس", "Searching for the nearest captain...": "بندور على أقرب كابتن...", "No one accepted? Try increasing the fare.": "محدش قبل؟ جرب تزود الأجرة.", "Increase Your Trip Fee (Optional)": "زود أجرة المشوار (اختياري)", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "مش لاقيين كباتن لسه. جرب تزود الأجرة عشان تشجع الكباتن يقبلوا.", "No, thanks": "لأ، شكراً", "Increase Fee": "زود الأجرة", "Copy": "نسخ", "Promo Copied!": "نسخت البرومو!", "Code": "الكود", "copied to clipboard": "تم النسخ", "Price": "السعر", "Intaleq's Response": "رد انطلق", "Awaiting response...": "مستنيين الرد...", "Audio file not attached": "الملف الصوتي ماترفقش", "The audio file is not uploaded yet.\\nDo you want to submit without it?": "الملف الصوتي لسه ماترفعش.\\nعايز تبعت من غيره؟", "deleted": "اتمسح", "To Work": "للشغل", "Work Saved": "حفظنا مكان الشغل", "To Home": "للبيت", "Home Saved": "حفظنا مكان البيت", "Destination selected": "اخترت الوجهة", "Now select start pick": "دلوقتي حدد مكان الركوب", "OK": "تمام", "Confirm Pick-up Location": "أكد مكان الركوب", "Set Location on Map": "حدد المكان على الخريطة", "Leave a detailed comment (Optional)": "سيب تعليق بالتفصيل (اختياري)", "Share your experience to help us improve...": "شارك تجربتك عشان نتحسن...", "Your valuable feedback helps us improve our service quality.": "رأيك مهم عشان نحسن خدماتنا.", "witout zero": "من غير صفر", "Top up Balance": "شحن الرصيد", "An error occurred": "حصل خطأ", "Send WhatsApp Message": "ابعت رسالة واتساب", "How was your trip with": "إيه أخبار رحلتك مع", "Drawing route on map...": "بنرسم الطريق على الخريطة...", "Please wait while we prepare your trip.": "لحظة بنجهزلك الرحلة.", "Submit Rating": "ابعت التقييم", "Call Support": "كلم الدعم", "You can contact us during working hours from 10:00 - 16:00.": "تقدر تكلمنا في مواعيد العمل من ١٠ ص لـ ٤ م.", "Intaleq is the safest and most reliable ride-sharing app designed especially for passengers in Syria. We provide a comfortable, respectful, and affordable riding experience with features that prioritize your safety and convenience. Our trusted captains are verified, insured, and supported by regular car maintenance carried out by top engineers. We also offer on-road support services to make sure every trip is smooth and worry-free. With Intaleq, you enjoy quality, safety, and peace of mind—every time you ride.": "انطلق هو أأمن تطبيق مشاوير مصمم مخصوص عشانك في مصر. بنوفرلك تجربة مريحة، محترمة، وبسعر على قد الإيد، مع مميزات بتهتم بسلامتك وراحتك. كل الكباتن عندنا متراجع ورقهم، وعربياتهم بتتصين بانتظام عشان نضمن الجودة. وكمان عندنا دعم على الطريق عشان نضمن إن كل مشوار يكون سلس ومن غير قلق. مع انطلق، هتستمتع بالجودة والأمان وراحة البال في كل مشوار.", "Work time is from 10:00 AM to 16:00 PM.\nYou can send a WhatsApp message or email.": "مواعيد العمل من ١٠ ص لـ ٤ م.\nممكن تبعت واتساب أو إيميل.", "Sorry": "معلش", "Customer MSISDN doesn’t have customer wallet": "رقم العميل ملهوش محفظة", "Please enter the number without the leading 0": "دخل الرقم من غير الصفر اللي في الأول", "Please enter your phone number": "دخل رقم موبايلك", "Phone number seems too short": "رقم الموبايل شكله قصير", "No cars are available at the moment. Please try again later.": "مفيش عربيات متاحة دلوقتي. جرب تاني بعد شوية.", "Nearest Car: ~": "أقرب عربية: ~", "Nearest Car": "أقرب عربية", "No cars nearby": "مفيش عربيات قريبة", "Favorite Places": "الأماكن المفضلة", "No favorite places yet!": "مفيش أماكن مفضلة لسه!", "from your favorites": "من المفضلة", "Back": "رجوع", "Enter your code below to apply the discount.": "دخل الكود تحت عشان تاخد الخصم.", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "لما تختار \"أوافق\"، بتأكد إنك قريت ووافقت على", "and acknowledge the": "وبتقر بـ", "Enable Location Access": "شغل الوصول للموقع", "We need your location to find nearby drivers for pickups and drop-offs.": "محتاجين نعرف مكانك عشان نلاقي كباتن قريبين.", "You should restart app to change language": "لازم تعيد تشغيل التطبيق عشان اللغة تتغير", "Home Page": "الرئيسية", "To change Language the App": "عشان تغير لغة التطبيق", "Learn more about our app and mission": "اعرف أكتر عننا", "Promos For Today": "عروض النهاردة", "Choose your ride": "اختار مشوارك", "Your Journey Begins Here": "مشوارك بيبدأ هنا", "Bonus gift": "هدية إضافية", "Pay": "ادفع", "Get": "احصل على", "Send to Driver Again": "ابعت للكابتن تاني", "Driver Name:": "اسم الكابتن:", "No trip data available": "مفيش بيانات للرحلة", "Car Plate:": "نمرة العربية:", "remaining": "متبقي", "Order Cancelled": "الطلب اتلغى", "You canceled VIP trip": "أنت لغيت رحلة الـ VIP", "Passenger cancelled order": "الراكب لغى الطلب", "Your trip is scheduled": "رحلتك اتجدولت", "Don't forget your ride!": "متنساش مشوارك!", "Trip updated successfully": "الرحلة اتحدثت بنجاح", "Car Make:": "نوع العربية:", "Car Model:": "موديل العربية:", "Car Color:": "لون العربية:", "Driver Phone:": "رقم الكابتن:", "Pre-booking": "حجز مسبق", "Waiting VIP": "انتظار VIP", "Driver List": "قائمة الكباتن", "Confirm Trip": "تأكيد الرحلة", "Select date and time of trip": "حدد تاريخ ووقت الرحلة", "Date and Time Picker": "اختار الوقت والتاريخ", "Trip Status:": "حالة الرحلة:", "pending": "انتظار", "accepted": "مقبولة", "rejected": "مرفوضة", "Apply": "تطبيق", "Enter your promo code": "دخل البرومو كود", "Apply Promo Code": "طبق الكود", "Scheduled Time:": "الوقت المتحدد:", "No drivers available": "مفيش كباتن متاحين", "No drivers available at the moment. Please try again later.": "مفيش كباتن دلوقتي. جرب تاني بعد شوية.", "you have a negative balance of": "عندك رصيد بالسالب بقيمة", "Please try again in a few moments": "جرب تاني بعد لحظات", "Unknown Driver": "كابتن غير معروف", "in your": "في محفظتك", "The driver accepted your order for": "الكابتن قبل طلبك بـ", "wallet due to a previous trip.": "من المحفظة عشان رحلة قديمة.", "rides": "مشاوير", "Add Work": "ضيف الشغل", "The reason is": "السبب هو", "User does not have a wallet #1652": "المستخدم ملهوش محفظة #1652", "Price of trip": "سعر الرحلة", "From:": "من:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "لرحلات انطلق والتوصيل، السعر بيتحسب أوتوماتيك. لرحلات الراحة، السعر حسب الوقت والمسافة.", "Phone Wallet Saved Successfully": "تم حفظ رقم المحفظة", "Add wallet phone you use": "ضيف رقم المحفظة اللي بتستخدمه", "Update Available": "في تحديث جديد", "Phone number must be exactly 11 digits long": "رقم الموبايل لازم يكون ١١ رقم", "Insert Wallet phone number": "دخل رقم المحفظة", "Phone number isn't an Egyptian phone number": "الرقم ده مش مصري", "A new version of the app is available. Please update to the latest version.": "في نسخة جديدة من التطبيق. يا ريت تحدث لآخر إصدار.", "We use location to get accurate and nearest passengers for you": "بنستخدم اللوكيشن عشان نجيبلك أقرب ركاب بدقة", "This ride is already applied by another driver.": "الرحلة دي أخدها كابتن تاني.", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "بنستخدم مكانك الدقيق عشان نلاقي أقرب كابتن ونحدد نقط الركوب والنزول بدقة. تقدر تظبط ده من الإعدادات.", "Where are you, sir?": "أنت فين يا فندم؟", "I've been trying to reach you but your phone is off.": "بحاول أكلمك بس تليفونك مقفول.", "Please don't be late": "من فضلك متتأخرش", "Please don't be late, I'm waiting for you at the specified location.": "يا ريت متتأخرش، أنا مستنيك في المكان المحدد.", "My location is correct. You can search for me using the navigation app": "موقعي صح. ممكن تدور عليا بالـ GPS", "Hello, I'm at the agreed-upon location": "أهلاً، أنا في المكان المتفق عليه", "How much longer will you be?": "قدامك وقت قد إيه؟", "Phone number is verified before": "الرقم ده متأكد قبل كده", "Change Ride": "غير الرحلة", "You can change the destination by long-pressing any point on the map": "ممكن تغير الوجهة بالضغط الطويل على أي نقطة في الخريطة", "Pick from map destination": "اختار الوجهة من الخريطة", "Pick or Tap to confirm": "اختار أو اضغط للتأكيد", "Accepted your order": "قبل طلبك", "Order Accepted": "الطلب اتقبل", "with type": "من نوع", "accepted your order at price": "وافق على طلبك بسعر", "you canceled order": "لغيت الطلب", "If you want order to another person": "لو عايز تطلب لحد تاني", "upgrade price": "علي السعر", "airport": "المطار", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "أحسن اختيار لعربية مريحة مع خط سير مرن ووقوف متكرر.", "You can upgrade price to may driver accept your order": "ممكن تعلي السعر عشان الكابتن يقبل", "Change Route": "غير الطريق", "No Captain Accepted Your Order": "محدش قبل طلبك", "We are looking for a captain but the price may increase to let a captain accept": "بندور على كابتن بس ممكن السعر يزيد عشان حد يقبل", "No, I want to cancel this trip": "لأ، عايز ألغي الرحلة", "Attention": "انتباه", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "الرحلة اتلغت. وتكلفتها هتتخصم من محفظتك.", "You will be charged for the cost of the driver coming to your location.": "هتتحاسب على تكلفة مشوار الكابتن ليك.", "reject your order.": "رفض طلبك.", "Order Under Review": "الطلب بيتراجع", "is reviewing your order. They may need more information or a higher price.": "بيراجع طلبك. ممكن يحتاج معلومات أكتر أو سعر أعلى.", "Vibration": "اهتزاز", "Resend code": "ابعت الكود تاني", "change device": "تغيير الجهاز", "Device Change Detected": "تم تغيير الجهاز", "You can only use one device at a time. This device will now be set as your active device.": "ممكن تستخدم جهاز واحد بس. الجهاز ده بقى هو الأساسي دلوقتي.", "Click here point": "دوس هنا", "Are you want to change": "عايز تغير؟", "by": "بواسطة", "Enter your complaint here": "اكتب شكوتك هنا", "Please enter your complaint.": "اكتب الشكوى من فضلك.", "Complaint data saved successfully": "الشكوى اتحفظت", "Trip Monitor": "مراقبة الرحلة", "Insert SOS Phone": "دخل رقم الطوارئ", "Add SOS Phone": "ضيف رقم الطوارئ", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "عزيزي،\n\n🚀 أنا بدأت رحلة وحابب أشاركك تفاصيلها ومكاني الحالي لحظة بلحظة! نزل تطبيق انطلق عشان تتابعني.\n\n👈 رابط التحميل:\nأندرويد [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\nآيفون [https://getapp.cc/app/6458734951]\n\nخليك متابعني!\n\nانطلق،", "Send Intaleq app to him": "ابعتله تطبيق انطلق", "No passenger found for the given phone number": "مفيش راكب بالرقم ده", "No user found for the given phone number": "مفيش مستخدم بالرقم ده", "This price is": "السعر ده", "Work": "الشغل", "Add Home": "ضيف البيت", "Notifications": "الإشعارات", "💳 Pay with Credit Card": "💳 دفع بالفيزا", "⚠️ You need to choose an amount!": "⚠️ لازم تختار مبلغ!", "💰 Pay with Wallet": "💰 دفع بالمحفظة", "You must restart the app to change the language.": "لازم تعيد تشغيل التطبيق لتغيير اللغة.", "joined": "انضم", "Driver joined the channel": "الكابتن دخل الشات", "Driver left the channel": "الكابتن خرج من الشات", "Call Page": "صفحة الاتصال", "Call Left": "مكالمات باقية", " Next as Cash !": " اللي جاي كاش!", "To use Wallet charge it": "عشان تستخدم المحفظة اشحنها", "We are searching for the nearest driver to you": "بندورلك على أقرب كابتن", "Best choice for cities": "أحسن اختيار للمدن", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "رايح جاي: خدمة سفر مريحة بين المحافظات.", "This trip is for women only": "الرحلة دي للسيدات فقط", "Total budgets on month": "إجمالي ميزانية الشهر", "You have call from driver": "مكالمة من الكابتن", "Intaleq": "انطلق", "passenger agreement": "اتفاقية الراكب", "To become a passenger, you must review and agree to the ": "عشان تبقى راكب، لازم تراجع وتوافق على ", "agreement subtitle": "للمتابعة، لازم توافق على الشروط والخصوصية.", "terms of use": "شروط الاستخدام", " and acknowledge our Privacy Policy.": " وتقر بسياسة الخصوصية.", "and acknowledge our": "وتقر بـ", "privacy policy": "سياسة الخصوصية.", "i agree": "موافق", "Driver already has 2 trips within the specified period.": "الكابتن عنده رحلتين في الوقت ده.", "The invitation was sent successfully": "الدعوة اتبعتت", "You should select your country": "اختار بلدك", "Scooter": "سكوتر", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "رحلة بحجز مسبق، اختار أحسن الكباتن والعربيات.", "Mishwar Vip": "مشوار VIP", "The driver waiting you in picked location .": "الكابتن مستنيك في مكان الركوب.", "About Us": "عننا", "You can change the vibration feedback for all buttons": "ممكن تغير الهزاز للأزرار", "Most Secure Methods": "أأمن الطرق", "In-App VOIP Calls": "مكالمات صوتية جوا التطبيق", "Recorded Trips for Safety": "رحلات مسجلة للأمان", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nوكمان بنهتم بالأسعار، بنقدم أسعار تنافسية عشان تناسب الكل.", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "انطلق تطبيق مشاوير مصمم عشان أمانك وميزانيتك. بنوصلك بكباتن موثوقين في منطقتك، لتجربة مريحة.\n\nدي شوية مميزات بتميزنا:", "Sign In by Apple": "دخول بـ أبل", "Sign In by Google": "دخول بـ جوجل", "How do I request a ride?": "ازاي أطلب رحلة؟", "Step-by-step instructions on how to request a ride through the Intaleq app.": "خطوات طلب رحلة عن طريق أبلكيشن انطلق.", "What types of vehicles are available?": "إيه أنواع العربيات المتاحة؟", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "انطلق بيوفر عربيات كتير تناسبك، زي الاقتصادية والمريحة والفاخرة. اختار اللي يناسب ميزانيتك.", "How can I pay for my ride?": "ادفع ازاي؟", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "انطلق بيوفر طرق دفع كتير. اختار بين الكاش أو الفيزا وأنت بتأكد الرحلة.", "Can I cancel my ride?": "ممكن ألغي الرحلة؟", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "أيوه، ممكن تلغي، بس خد بالك ممكن يكون في رسوم إلغاء حسب التوقيت.", "Driver Registration & Requirements": "تسجيل الكباتن والشروط", "How can I register as a driver?": "ازاي أسجل كابتن؟", "What are the requirements to become a driver?": "إيه شروط الانضمام ككابتن؟", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "زور موقعنا أو كلم دعم انطلق عشان تعرف تفاصيل التسجيل.", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "انطلق بيوفر شات جوا التطبيق عشان تتكلم مع الكابتن أو الراكب.", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "أمانك أهم حاجة عندنا. بنقدم مميزات زي التحقق من الكابتن، وتتبع الرحلة، وأرقام الطوارئ.", "Frequently Questions": "أسئلة شائعة", "User does not exist.": "المستخدم مش موجود.", "We need your phone number to contact you and to help you.": "محتاجين رقمك عشان نتواصل معاك ونساعدك.", "You will recieve code in sms message": "هيجيلك كود في رسالة", "Please enter": "من فضلك دخل", "We need your phone number to contact you and to help you receive orders.": "محتاجين رقمك عشان نساعدك تستقبل طلبات.", "The full name on your criminal record does not match the one on your driver's license. Please verify and provide the correct documents.": "الاسم في الفيش مش مطابق للاسم في الرخصة. راجع الورق تاني.", "The national number on your driver's license does not match the one on your ID document. Please verify and provide the correct documents.": "الرقم القومي في الرخصة مش زي اللي في البطاقة. راجع الورق تاني.", "Capture an Image of Your Criminal Record": "صور الفيش والتشبيه", "IssueDate": "تاريخ الإصدار", "Capture an Image of Your car license front": "صور وش رخصة العربية", "Capture an Image of Your ID Document front": "صور وش البطاقة", "NationalID": "الرقم القومي", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "شارك انطلق مع صحابك واكسب مكافآت لما يستخدموا الكود بتاعك.", "FullName": "الاسم بالكامل", "No invitation found yet!": "مفيش دعوات لسه!", "InspectionResult": "نتيجة الفحص", "Criminal Record": "الفيش والتشبيه", "The email or phone number is already registered.": "الإيميل أو الرقم ده متسجل قبل كده.", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "عشان تشتغل كابتن في انطلق، لازم ترفع رخصتك، وبطاقتك، ورخصة العربية. السيستم هيراجعهم في دقيقتين تلاتة. لو اتقبلوا، تقدر تبدأ شغل علطول. تزوير الورق هيعرضك للمساءلة القانونية وقفل الحساب.", "Documents check": "فحص الورق", "Driver's License": "رخصة القيادة", "for your first registration!": "عشان أول تسجيل ليك!", "Get it Now!": "خدها دلوقتي!", "before": "قبل", "Code not approved": "الكود مش مقبول", "3000 LE": "3000 جنيه", "Do you have an invitation code from another driver?": "معاك كود دعوة من كابتن تاني؟", "Paste the code here": "حط الكود هنا", "No, I don't have a code": "لأ، معيش كود", "Code approved": "الكود اتقبل", "Install our app:": "نزل تطبيقنا:", "Invite another driver and both get a gift after he completes 100 trips!": "ادعي كابتن تاني وانتوا الاتنين تكسبوا هدية لما يخلص 100 رحلة!", "Invite": "دعوة", "Are you sure?": "أنت متأكد؟", "This will delete all recorded files from your device.": "ده هيمسح كل الملفات المتسجلة من جهازك.", "Select a file": "اختار ملف", "Select a File": "اختار ملف", "Delete": "حذف", "attach audio of complain": "ارفق صوت للشكوى", "Phone Number Check": "فحص رقم الموبايل", "Drivers received orders": "الكباتن استلموا الطلبات", "No audio files recorded.": "مفيش تسجيلات.", "This is for delivery or a motorcycle.": "ده للتوصيل أو الموتوسيكل.", "Intaleq Reminder": "تذكير انطلق", "It's time to check the Intaleq app!": "وقت تفقد تطبيق انطلق!", "you must insert token code": "لازم تدخل الكود", "Something went wrong. Please try again.": "حصلت مشكلة. جرب تاني.", "Trip Details": "تفاصيل الرحلة", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "مفيش تفاصيل كفاية عن الشكوى. يا ريت توضح أكتر عشان نقدر نساعدك.", "Submit Your Complaint": "قدم شكوتك", "Status": "الحالة", "Choose from contact": "اختار من الأسماء", "attach correct audio": "ارفق صوت صح", "be sure": "اتأكد", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "مثالي للي بيدور على أحدث عربيات مع حرية اختيار الطريق", "Share this code with your friends and earn rewards when they use it!": "شارك الكود مع صحابك واكسب لما يستخدموه!", "Enter phone": "دخل الرقم", "complete, you can claim your gift": "اكتمل، تقدر تاخد هديتك", "When": "لما", "Enter driver's phone": "دخل رقم الكابتن", "Send Invite": "ابعت دعوة", "Show Invitations": "اظهر الدعوات", "License Type": "نوع الرخصة", "National Number": "الرقم القومي", "Name (Arabic)": "الاسم (عربي)", "Name (English)": "الاسم (إنجليزي)", "Address": "العنوان", "Issue Date": "تاريخ الإصدار", "Expiry Date": "تاريخ الانتهاء", "License Categories": "فئات الرخصة", "driver_license": "رخصة القيادة", "Capture an Image of Your Driver License": "صور رخصتك", "ID Documents Back": "ظهر البطاقة", "National ID": "الرقم القومي", "Occupation": "الوظيفة", "Religion": "الديانة", "Full Name (Marital)": "الاسم بالكامل", "Expiration Date": "تاريخ الانتهاء", "Capture an Image of Your ID Document Back": "صور ظهر البطاقة", "ID Documents Front": "وش البطاقة", "First Name": "الاسم الأول", "CardID": "رقم البطاقة", "Vehicle Details Front": "تفاصيل العربية (أمام)", "Plate Number": "رقم اللوحة", "Owner Name": "اسم المالك", "Vehicle Details Back": "تفاصيل العربية (خلف)", "Make": "الماركة", "Model": "الموديل", "Year": "السنة", "Chassis": "رقم الشاسيه", "Color": "اللون", "Displacement": "السعة اللترية", "Fuel": "بنزين/غاز", "Tax Expiry Date": "انتهاء الضريبة", "Inspection Date": "تاريخ الفحص", "Capture an Image of Your car license back": "صور ظهر رخصة العربية", "Capture an Image of Your Driver's License": "صور رخصة القيادة", "Sign in with Google for easier email and name entry": "ادخل بجوجل عشان أسهل", "You will choose allow all the time to be ready receive orders": "اختار 'السماح طوال الوقت' عشان تستقبل طلبات", "Get to your destination quickly and easily.": "وصل لوجهتك بسرعة وسهولة.", "Enjoy a safe and comfortable ride.": "استمتع بمشوار آمن ومريح.", "Choose Language": "اختار اللغة", "Pay with Wallet": "دفع بالمحفظة", "Invalid MPIN": "رمز MPIN غلط", "Invalid OTP": "كود التحقق غلط", "Enter your email address": "دخل إيميلك", "Please enter Your Email.": "من فضلك دخل الإيميل.", "Enter your phone number": "دخل رقمك", "Please enter your phone number.": "دخل رقم موبايلك.", "Please enter Your Password.": "دخل الباسورد.", "if you dont have account": "لو معندكش حساب", "Register": "تسجيل", "Accept Ride's Terms & Review Privacy Notice": "قبول الشروط والخصوصية", "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "لما تختار 'أوافق'، بتأكد إنك وافقت على الشروط والخصوصية، وإن سنك ١٨ سنة أو أكتر.", "First name": "الاسم الأول", "Enter your first name": "دخل اسمك الأول", "Please enter your first name.": "الاسم الأول مطلوب.", "Last name": "الاسم الأخير", "Enter your last name": "دخل اسمك الأخير", "Please enter your last name.": "الاسم الأخير مطلوب.", "City": "المدينة", "Please enter your City.": "دخل مدينتك.", "Verify Email": "تأكيد الإيميل", "We sent 5 digit to your Email provided": "بعتنا ٥ أرقام لإيميلك", "5 digit": "٥ أرقام", "Send Verification Code": "ابعت كود التحقق", "Your Ride Duration is ": "مدة المشوار: ", "You will be thier in": "هتوصل خلال", "You trip distance is": "مسافة المشوار:", "Fee is": "الأجرة:", "From : ": "من: ", "To : ": "إلى: ", "Add Promo": "ضيف برومو", "Confirm Selection": "تأكيد الاختيار", "distance is": "المسافة:", "Privacy Policy": "سياسة الخصوصية", "Intaleq LLC": "شركة انطلق", "Syria's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "خدمة مشاركة الرحلات الرائدة في مصر، اتطورت بأيادي عربية ومحلية. أولويتنا نكون جنبك، ركابنا وكباتننا.", "Intaleq is the first ride-sharing app in Syria, designed to connect you with the nearest drivers for a quick and convenient travel experience.": "انطلق هو تطبيق المشاوير اللي بيوصلك بأقرب كباتن لتجربة سريعة ومريحة.", "Why Choose Intaleq?": "ليه تختار انطلق؟", "Closest to You": "الأقرب ليك", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "بنوصلك بأقرب كباتن عشان منضيعش وقتك.", "Uncompromising Security": "أمان تام", "Lady Captains Available": "كباتن سيدات", "Recorded Trips (Voice & AI Analysis)": "رحلات مسجلة (تحليل صوتي وذكاء اصطناعي)", "Fastest Complaint Response": "أسرع استجابة للشكاوى", "Our dedicated customer service team ensures swift resolution of any issues.": "فريق خدمة العملاء جاهز يحل أي مشكلة بسرعة.", "Affordable for Everyone": "أسعار تناسب الكل", "Frequently Asked Questions": "الأسئلة المتكررة", "Getting Started": "ابدأ", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "افتح انطلق، حط واجهتك، ودوس \"اطلب رحلة\". التطبيق هيوصلك بأقرب كابتن.", "Vehicle Options": "خيارات العربيات", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "انطلق بيقدملك خيارات كتير (اقتصادي، مريح، فاخر) عشان تناسبك.", "Payments": "الدفع", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "تقدر تدفع كاش أو فيزا. اختار الطريقة اللي تريحك قبل ما تأكد الطلب.", "Ride Management": "إدارة الرحلات", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "ممكن تلغي الرحلة، بس ممكن يتخصم رسوم لو لغيت متأخر.", "For Drivers": "للكباتن", "Driver Registration": "تسجيل الكابتن", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "للتسجيل ككابتن أو معرفة الشروط، زور موقعنا أو كلم الدعم.", "Visit Website/Contact Support": "زور الموقع / كلم الدعم", "Close": "قفل", "We are searching for the nearest driver": "بندور على أقرب كابتن", "Communication": "التواصل", "How do I communicate with the other party (passenger/driver)?": "ازاي أتواصل مع الطرف التاني؟", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "تقدر تتكلم شات مع الكابتن أو الراكب بعد تأكيد الرحلة.", "Safety & Security": "الأمان", "What safety measures does Intaleq offer?": "إيه إجراءات الأمان في انطلق؟", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "انطلق بيقدم مميزات أمان زي التحقق من الكابتن، تتبع الرحلة، أرقام الطوارئ، ومشاركة تفاصيل الرحلة.", "Enjoy competitive prices across all trip options, making travel accessible.": "استمتع بأسعار تنافسية لكل الرحلات.", "Variety of Trip Choices": "خيارات كتير للرحلة", "Choose the trip option that perfectly suits your needs and preferences.": "اختار الرحلة اللي تريحك.", "Your Choice, Our Priority": "اختيارك يهمنا", "Because we are near, you have the flexibility to choose the ride that works best for you.": "عشان إحنا قريبين، عندك مرونة تختار اللي يناسبك.", "duration is": "المدة:", "Setting": "الإعدادات", "Find answers to common questions": "لاقي إجابات لأسئلتك", "I don't need a ride anymore": "مش محتاج رحلة خلاص", "I was just trying the application": "بجرب التطبيق بس", "No driver accepted my request": "مفيش كابتن قبل طلبي", "I added the wrong pick-up/drop-off location": "حطيت مكان غلط", "I don't have a reason": "مفيش سبب", "Can we know why you want to cancel Ride ?": "ممكن نعرف ليه عايز تلغي؟", "Add Payment Method": "ضيف طريقة دفع", "Ride Wallet": "محفظة الرحلة", "Payment Method": "طريقة الدفع", "Type here Place": "اكتب المكان هنا", "Are You sure to ride to": "متأكد إنك رايح لـ", "Confirm": "تأكيد", "You are Delete": "أنت بتمسح", "Deleted": "اتمسح", "You Dont Have Any places yet !": "معندكش أماكن لسه!", "From : Current Location": "من: مكاني الحالي", "My Cared": "كروتي", "Add Card": "ضيف كارت", "Add Credit Card": "ضيف فيزا", "Please enter the cardholder name": "دخل اسم صاحب الكارت", "Please enter the expiry date": "دخل تاريخ الانتهاء", "Please enter the CVV code": "دخل كود الـ CVV", "Go To Favorite Places": "روح للأماكن المفضلة", "Go to this Target": "روح للوجهة دي", "My Profile": "بروفايلي", "Are you want to go to this site": "عايز تروح المكان ده؟", "MyLocation": "موقعي", "my location": "موقعي", "Target": "الهدف", "You Should choose rate figure": "لازم تختار تقييم", "Login Captin": "دخول الكابتن", "Register Captin": "تسجيل كابتن", "Send Verfication Code": "ابعت كود التحقق", "KM": "كم", "End Ride": "إنهاء الرحلة", "Minute": "دقيقة", "Go to passenger Location now": "روح لمكان الراكب دلوقتي", "Duration of the Ride is ": "مدة الرحلة ", "Distance of the Ride is ": "مسافة الرحلة ", "Name of the Passenger is ": "اسم الراكب ", "Hello this is Captain": "أهلاً، أنا الكابتن", "Start the Ride": "ابدأ الرحلة", "Please Wait If passenger want To Cancel!": "استنى لو الراكب عايز يلغي!", "Total Duration:": "المدة الكلية:", "Active Duration:": "المدة الفعلية:", "Waiting for Captin ...": "مستني الكابتن...", "Age is ": "السن: ", "Rating is ": "التقييم: ", " to arrive you.": "عشان يوصلك.", "Tariff": "التعريفة", "Settings": "الإعدادات", "Feed Back": "رأيك", "Please enter a valid 16-digit card number": "دخل رقم الكارت (١٦ رقم)", "Add Phone": "ضيف رقم", "You dont Add Emergency Phone Yet!": "مضفتش رقم طوارئ لسه!", "You will arrive to your destination after ": "هتوصل بعد ", "You can cancel Ride now": "تقدر تلغي الرحلة دلوقتي", "You Can cancel Ride After Captain did not come in the time": "تقدر تلغي لو الكابتن مجاش في ميعاده", "If you in Car Now. Press Start The Ride": "لو أنت في العربية، دوس ابدأ الرحلة", "You Dont Have Any amount in": "معندكش رصيد في", "Wallet!": "المحفظة!", "You Have": "معاك", "Save Credit Card": "حفظ الفيزا", "Show Promos": "اظهر العروض", "10 and get 4% discount": "١٠ وخد خصم ٤٪", "20 and get 6% discount": "٢٠ وخد خصم ٦٪", "40 and get 8% discount": "٤٠ وخد خصم ٨٪", "100 and get 11% discount": "١٠٠ وخد خصم ١١٪", "Pay with Your PayPal": "ادفع بـ PayPal", "You will choose one of above !": "اختار واحد من اللي فوق!", "Edit Profile": "تعديل الملف", "Copy this Promo to use it in your Ride!": "انسخ البرومو واستخدمه!", "To change some Settings": "لتغيير الإعدادات", "Order Request Page": "صفحة الطلب", "Rouats of Trip": "مسارات الرحلة", "Passenger Name is ": "اسم الراكب: ", "Total From Passenger is ": "المطلوب من الراكب: ", "Duration To Passenger is ": "الوقت للوصول للراكب: ", "Distance To Passenger is ": "المسافة للوصول للراكب: ", "Total For You is ": "الإجمالي ليك: ", "Distance is ": "المسافة: ", " KM": " كم", "Duration of Trip is ": "مدة الرحلة: ", " Minutes": " دقائق", "Apply Order": "اقبل الطلب", "Refuse Order": "ارفض الطلب", "Rate Captain": "قيم الكابتن", "Enter your Note": "اكتب ملاحظة", "Type something...": "اكتب حاجة...", "Submit rating": "ابعت التقييم", "Rate Passenger": "قيم الراكب", "Ride Summary": "ملخص الرحلة", "welcome_message": "أهلاً بيك في انطلق!", "app_description": "انطلق تطبيق مشاوير أمين وموثوق.", "get_to_destination": "وصل لوجهتك بسرعة.", "get_a_ride": "مع انطلق، هتوصل في دقايق.", "safe_and_comfortable": "استمتع برحلة آمنة ومريحة.", "committed_to_safety": "بنهتم بسلامتك، وكل الكباتن متراجعين كويس.", "your ride is Accepted": "رحلتك اتقبلت", "Driver is waiting at pickup.": "الكابتن مستنيك.", "Driver is on the way": "الكابتن في الطريق", "Contact Options": "خيارات التواصل", "Send a custom message": "ابعت رسالة", "Type your message": "اكتب رسالتك", "I will go now": "أنا هتحرك دلوقتي", "You Have Tips": "عندك بقشيش", " tips\nTotal is": " بقشيش\nالإجمالي", "Your fee is ": "أجرتك: ", "Do you want to pay Tips for this Driver": "تحب تدفع بقشيش للكابتن ده؟", "Tip is ": "البقشيش: ", "Are you want to wait drivers to accept your order": "عايز تستنى كباتن يقبلوا طلبك؟", "This price is fixed even if the route changes for the driver.": "السعر ده ثابت حتى لو الطريق اتغير.", "The price may increase if the route changes.": "السعر ممكن يزيد لو الطريق اتغير.", "The captain is responsible for the route.": "الكابتن مسؤول عن الطريق.", "We are search for nearst driver": "بندور على أقرب كابتن", "Your order is being prepared": "طلبك بيتجهز", "The drivers are reviewing your request": "الكباتن بيشوفوا طلبك", "Your order sent to drivers": "طلبك اتبعت للكباتن", "You can call or record audio of this trip": "تقدر تتصل أو تسجل صوت", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "الرحلة بدأت! تقدر تكلم الطوارئ، تشارك رحلتك، أو تشغل التسجيل الصوتي.", "Camera Access Denied.": "مفيش وصول للكاميرا.", "Open Settings": "افتح الإعدادات", "GPS Required Allow !.": "لازم تشغل الـ GPS!", "Your Account is Deleted": "حسابك اتمسح", "Are you sure to delete your account?": "متأكد إنك عايز تمسح حسابك؟", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "بياناتك هتتمسح بعد أسبوعين\nومش هتقدر تستخدم التطبيق تاني بعد شهر", "Enter Your First Name": "دخل اسمك الأول", "Are you Sure to LogOut?": "متأكد إنك عايز تخرج؟", "Email Wrong": "الإيميل غلط", "Email you inserted is Wrong.": "الإيميل اللي دخلته غلط.", "You have finished all times ": "خلصت كل المحاولات", "if you want help you can email us here": "لو محتاج مساعدة ابعتلنا إيميل هنا", "Thanks": "شكراً", "Email Us": "راسلنا", "I cant register in your app in face detection ": "مش عارف أسجل بسبب مشكلة كشف الوجه", "Hi": "أهلاً", "No face detected": "مش لاقيين وجه", "Image detecting result is ": "نتيجة فحص الصورة: ", "from 3 times Take Attention": "من ٣ محاولات، خد بالك", "Be sure for take accurate images please\nYou have": "اتأكد إنك بتاخد صور واضحة\nفاضلك", "image verified": "الصورة تمام", "Next": "التالي", "There is no help Question here": "مفيش أسئلة مساعدة هنا", "You dont have Points": "معندكش نقاط", "You Are Stopped For this Day !": "اتوقفت النهاردة!", "You must be charge your Account": "لازم تشحن حسابك", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "رفضت ٣ رحلات النهاردة، وده السبب.\nنشوفك بكرة!", "Recharge my Account": "شحن حسابي", "Ok , See you Tomorrow": "تمام، أشوفك بكرة", "You are Stopped": "أنت موقوف", "Connected": "متصل", "Not Connected": "غير متصل", "Your are far from passenger location": "أنت بعيد عن الراكب", "go to your passenger location before\nPassenger cancel trip": "روح لمكان الراكب قبل ما يلغي", "You will get cost of your work for this trip": "هتاخد حق مشوارك ده", " in your wallet": "في محفظتك", "you gain": "كسبت", "Order Cancelled by Passenger": "الطلب اتلغى من الراكب", "Feedback data saved successfully": "التقييم اتحفظ", "No Promo for today .": "مفيش برومو النهاردة.", "Select your destination": "اختار وجهتك", "Search for your Start point": "ابحث عن نقطة البداية", "Search for waypoint": "ابحث عن نقطة وقوف", "Current Location": "الموقع الحالي", "Add Location 1": "ضيف موقع ١", "You must Verify email !.": "لازم تأكد الإيميل!", "Cropper": "قص الصورة", "Saved Sucssefully": "اتحفظ بنجاح", "Select Date": "اختار التاريخ", "Birth Date": "تاريخ الميلاد", "Ok": "تمام", "the 500 points equal 30 JOD": "الـ 500 نقطة بـ 30 جنيه", "the 500 points equal 30 JOD for you \nSo go and gain your money": "الـ 500 نقطة بـ 30 جنيه ليك\nيلا اكسب فلوسك", "token updated": "التوكن اتحدث", "Add Location 2": "ضيف موقع ٢", "Add Location 3": "ضيف موقع ٣", "Add Location 4": "ضيف موقع ٤", "Waiting for your location": "مستنيين موقعك", "Search for your destination": "ابحث عن وجهتك", "Hi! This is": "أهلاً! ده", " I am using": " أنا بستخدم", " to ride with": " عشان أركب مع", " as the driver.": " ككابتن.", "is driving a ": "سايق ", " with license plate ": " نمرتها ", " I am currently located at ": " مكاني دلوقتي في ", "Please go to Car now ": "روح للعربية دلوقتي", "You will receive a code in WhatsApp Messenger": "هيجيلك كود على الواتساب", "If you need assistance, contact us": "لو محتاج مساعدة، كلمنا", "Promo Ended": "العرض انتهى", "Enter the promo code and get": "دخل الكود واحصل على", "DISCOUNT": "خصم", "No wallet record found": "مفيش سجل للمحفظة", "for": "لـ", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "انطلق أأمن تطبيق مشاوير بمميزات كتير للكباتن والركاب. بنقدم أقل عمولة، ٨٪ بس. عندنا تأمين لأحسن الكباتن، وصيانة دورية، وخدمات على الطريق.", "You can contact us during working hours from 12:00 - 19:00.": "كلمنا من ١٢ لـ ٧.", "Choose a contact option": "اختار طريقة تواصل", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "مواعيد العمل من ١٢ لـ ٧.\nابعت واتساب أو إيميل.", "Promo code copied to clipboard!": "الكود اتنسخ!", "Copy Code": "نسخ الكود", "Your invite code was successfully applied!": "كود الدعوة اشتغل!", "Payment Options": "خيارات الدفع", "wait 1 minute to receive message": "استنى دقيقة عشان الرسالة توصل", "You have copied the promo code.": "نسخت الكود.", "Select Payment Amount": "اختار المبلغ", "The promotion period has ended.": "فترة العرض خلصت.", "Promo Code Accepted": "الكود اتقبل", "Tap on the promo code to copy it!": "دوس على الكود عشان تنسخه!", "Lowest Price Achieved": "أقل سعر", "Cannot apply further discounts.": "مينفعش خصم أكتر من كده.", "Promo Already Used": "الكود استخدمته قبل كده", "Invitation Used": "الدعوة مستخدمة", "You have already used this promo code.": "استخدمت الكود ده قبل كده.", "Insert Your Promo Code": "دخل الكود بتاعك", "Enter promo code here": "حط الكود هنا", "Please enter a valid promo code": "دخل كود صالح", "Awfar Car": "عربية أوفر", "Old and affordable, perfect for budget rides.": "قديمة وموفرة، مناسبة للمشاوير الاقتصادية.", " If you need to reach me, please contact the driver directly at": " لو محتاج تكلمني، اتصل بالكابتن على", "No Car or Driver Found in your area.": "مفيش عربيات أو كباتن في منطقتك.", "Please Try anther time ": "جرب وقت تاني", "There no Driver Aplly your order sorry for that ": "مفيش كابتن قبل طلبك، بنعتذرلك", "Trip Cancelled": "الرحلة اتلغت", "The Driver Will be in your location soon .": "الكابتن هيوصلك قريب.", "The distance less than 500 meter.": "المسافة أقل من ٥٠٠ متر.", "Promo End !": "العرض انتهى!", "There is no notification yet": "مفيش إشعارات", "Use Touch ID or Face ID to confirm payment": "استخدم البصمة لتأكيد الدفع", "Contact us for any questions on your order.": "كلمنا لو عندك سؤال عن طلبك.", "Pyament Cancelled .": "الدفع اتلغى.", "type here": "اكتب هنا", "Scan Driver License": "امسح الرخصة", "Please put your licence in these border": "حط الرخصة جوا الإطار", "Camera not initialized yet": "الكاميرا لسه مجهزتش", "Take Image": "خد صورة", "AI Page": "صفحة الذكاء الاصطناعي", "Take Picture Of ID Card": "صور البطاقة", "Take Picture Of Driver License Card": "صور رخصة القيادة", "We are process picture please wait ": "بنحمل الصورة، استنى...", "There is no data yet.": "مفيش بيانات لسه.", "Name :": "الاسم:", "Drivers License Class: ": "درجة الرخصة:", "Document Number: ": "رقم الوثيقة:", "Address: ": "العنوان:", "Height: ": "الطول:", "Expiry Date: ": "تاريخ الانتهاء:", "Date of Birth: ": "تاريخ الميلاد:", "You can't continue with us .\nYou should renew Driver license": "مش هينفع تكمل معانا.\nلازم تجدد الرخصة", "Detect Your Face ": "افحص وجهك", "Go to next step\nscan Car License.": "الخطوة الجاية\nصور رخصة العربية.", "Name in arabic": "الاسم بالعربي", "Drivers License Class": "درجة الرخصة", "Selected Date": "التاريخ المختار", "Select Time": "اختار الوقت", "Selected Time": "الوقت المختار", "Selected Date and Time": "التاريخ والوقت المختارين", "Lets check Car license ": "يلا نفحص رخصة العربية", "Car": "عربية", "Plate": "نمرة", "Rides": "مشاوير", "Selected driver": "الكابتن المختار", "Lets check License Back Face": "يلا نفحص ظهر الرخصة", "Car License Card": "رخصة العربية", "No image selected yet": "مخترتش صورة لسه", "Made :": "الصنع:", "model :": "الموديل:", "VIN :": "الشاسيه:", "year :": "السنة:", "ُExpire Date": "تاريخ الانتهاء", "Login Driver": "دخول الكابتن", "Password must br at least 6 character.": "الباسورد لازم يكون ٦ حروف على الأقل.", "if you don't have account": "لو معندكش حساب", "Here recorded trips audio": "هنا تسجيلات الرحلات", "Register as Driver": "سجل كابتن", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "لما تختار \"أوافق\"، بتأكد موافقتك على الشروط وإقرارك بـ ", "Log Out Page": "صفحة الخروج", "Log Off": "خروج", "Register Driver": "تسجيل كابتن", "Verify Email For Driver": "تأكيد إيميل الكابتن", "Admin DashBoard": "لوحة الأدمن", "Your name": "اسمك", "your ride is applied": "رحلتك اتقدمت", "H and": "س و", "JOD": "جنيه", "m": "د", "We search nearst Driver to you": "بندورلك على أقرب كابتن", "please wait till driver accept your order": "استنى لحد ما الكابتن يقبل", "No accepted orders? Try raising your trip fee to attract riders.": "محدش قبل؟ جرب تعلي السعر.", "You should select one": "لازم تختار واحد", "The driver accept your order for": "الكابتن قبل طلبك بـ", "The driver on your way": "الكابتن جاي", "Total price from ": "السعر الكلي من ", "Order Details Intaleq": "تفاصيل الطلب", "Selected file:": "الملف المختار:", "Your trip cost is": "تكلفة رحلتك:", "this will delete all files from your device": "ده هيمسح كل الملفات من جهازك", "Exclusive offers and discounts always with the Intaleq app": "عروض وخصومات حصرية دايماً مع انطلق", "Submit Question": "ابعت سؤال", "Please enter your Question.": "اكتب سؤالك.", "Help Details": "تفاصيل المساعدة", "No trip yet found": "ملقيناش رحلة", "No Response yet.": "مفيش رد لسه.", " You Earn today is ": " كسبت النهاردة ", " You Have in": " معاك في", "Total points is ": "مجموع النقاط ", "Total Connection Duration:": "مدة الاتصال الكلية:", "Passenger name : ": "اسم الراكب: ", "Cost Of Trip IS ": "تكلفة الرحلة: ", "Arrival time": "وقت الوصول", "arrival time to reach your point": "وقت الوصول لنقطتك", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "لرحلات انطلق والسكوتر السعر متغير. للراحة السعر بالوقت والمسافة.", "Hello this is Driver": "أهلاً، أنا الكابتن", "Is the Passenger in your Car ?": "الراكب ركب معاك؟", "Please wait for the passenger to enter the car before starting the trip.": "استنى لما الراكب يركب قبل ما تبدأ.", "No ,still Waiting.": "لأ، لسه مستني.", "I arrive you": "وصلتلك", "I Arrive your site": "أنا في موقعك", "You are not in near to passenger location": "أنت مش قريب من الراكب", "please go to picker location exactly": "روح لمكان الركوب بالضبط", "You Can Cancel Trip And get Cost of Trip From": "تقدر تلغي وتاخد تمن الرحلة من", "Are you sure to cancel?": "متأكد إنك عايز تلغي؟", "Insert Emergincy Number": "دخل رقم الطوارئ", "Best choice for comfort car and flexible route and stops point": "أحسن خيار لرحلة مريحة ومسار مرن", "Insert": "إدخال", "This is for scooter or a motorcycle.": "ده للسكوتر أو الموتوسيكل.", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "رحلة مباشرة بسعر ثابت. الكابتن لازم يمشي على الطريق المحدد.", "You can decline a request without any cost": "تقدر ترفض الطلب ببلاش", "Perfect for adventure seekers who want to experience something new and exciting": "مثالي للي بيحب يجرب حاجة جديدة", "My current location is:": "مكاني دلوقتي:", "and I have a trip on": "وعندي رحلة على", "App with Passenger": "التطبيق مع الراكب", "You will be pay the cost to driver or we will get it from you on next trip": "هتدفع للكابتن أو هناخدها منك المرة الجاية", "Trip has Steps": "الرحلة فيها وقفات", "Distance from Passenger to destination is ": "المسافة من الراكب للوجهة: ", "price is": "السعر:", "This ride type does not allow changes to the destination or additional stops": "النوع ده مبيسمحش بتغيير الوجهة أو الوقفات", "This price may be changed": "السعر ده ممكن يتغير", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "مفيش شريحة؟ مفيش مشكلة! كلم الكابتن من التطبيق.", "This ride type allows changes, but the price may increase": "النوع ده بيسمح بالتغيير بس السعر ممكن يزيد", "Select one message": "اختار رسالة", "I'm waiting for you": "أنا مستنيك", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "لاحظنا السرعة عدت ١٠٠ كم/س. هدي السرعة عشان سلامتك. لو قلقان شارك رحلتك أو كلم الشرطة من زرار الطوارئ.", "Warning: Intaleqing detected!": "تحذير: سرعة زايدة!", "Please help! Contact me as soon as possible.": "إلحقوني! كلموني بسرعة.", "Share Trip Details": "شارك تفاصيل الرحلة", "Car Plate is ": "نمرة العربية: ", "the 300 points equal 300 L.E for you \nSo go and gain your money": "الـ 300 نقطة بـ 300 جنيه ليك\nيلا اكسب فلوسك", "the 300 points equal 300 L.E": "الـ 300 نقطة بـ 300 جنيه", "The payment was not approved. Please try again.": "الدفع ماتقبلش. جرب تاني.", "Payment Failed": "فشل الدفع", "This is a scheduled notification.": "ده إشعار مجدول.", "An error occurred during the payment process.": "حصل خطأ وقت الدفع.", "The payment was approved.": "تم الدفع.", "Payment Successful": "تم الدفع بنجاح", "No ride found yet": "ملقيناش رحلة لسه", "Accept Order": "اقبل الطلب", "Bottom Bar Example": "مثال الشريط السفلي", "Driver phone": "رقم الكابتن", "Statistics": "الإحصائيات", "Origin": "الانطلاق", "Destination": "الوصول", "Driver Name": "اسم الكابتن", "Driver Car Plate": "نمرة الكابتن", "Available for rides": "متاح للرحلات", "Scan Id": "امسح البطاقة", "Camera not initilaized yet": "الكاميرا لسه", "Scan ID MklGoogle": "مسح هوية MklGoogle", "Language": "اللغة", "Jordan": "الأردن", "USA": "أمريكا", "Egypt": "مصر", "Turkey": "تركيا", "Saudi Arabia": "السعودية", "Qatar": "قطر", "Bahrain": "البحرين", "Kuwait": "الكويت", "But you have a negative salary of": "بس عندك عجز بقيمة", "Promo Code": "برومو كود", "Your trip distance is": "مسافة رحلتك:", "Enter promo code": "دخل الكود", "You have promo!": "عندك برومو!", "Cost Duration": "تكلفة الوقت", "Duration is": "الوقت:", "Leave": "مغادرة", "Join": "انضمام", "Heading your way now. Please be ready.": "جايلك في السكة. خليك جاهز.", "Approaching your area. Should be there in 3 minutes.": "قربت من منطقتك. ٣ دقايق وأكون عندك.", "There's heavy traffic here. Can you suggest an alternate pickup point?": "الدنيا زحمة هنا. ممكن نقف في حتة تانية؟", "This ride is already taken by another driver.": "الرحلة دي راحت لكابتن تاني.", "You Should be select reason.": "لازم تختار سبب.", "Waiting for Driver ...": "مستني الكابتن...", "Latest Recent Trip": "آخر رحلة", "from your list": "من قائمتك", "Do you want to change Work location": "تغير مكان الشغل؟", "Do you want to change Home location": "تغير مكان البيت؟", "We Are Sorry That we dont have cars in your Location!": "آسفين، مفيش عربيات في مكانك!", "Choose from Map": "اختار من الخريطة", "Pick your ride location on the map - Tap to confirm": "حدد مكانك على الخريطة - دوس للتأكيد", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "انطلق هو تطبيق المشاوير الآمن والموثوق.", "With Intaleq, you can get a ride to your destination in minutes.": "مع انطلق، هتوصل في دقايق.", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "بنهتم بسلامتك، وكل كباتننا متراجعين.", "Pick from map": "اختار من الخريطة", "No Car in your site. Sorry!": "مفيش عربية عندك. آسفين!", "Nearest Car for you about ": "أقرب عربية ليك على بعد ", "From :": "من:", "Get Details of Trip": "تفاصيل الرحلة", "If you want add stop click here": "لو عايز تضيف وقفة دوس هنا", "Where you want go ": "رايح فين؟", "My Card": "كارتي", "Start Record": "ابدأ التسجيل", "History of Trip": "سجل الرحلات", "Helping Center": "مركز المساعدة", "Record saved": "التسجيل اتحفظ", "Trips recorded": "رحلات مسجلة", "Select Your Country": "اختار بلدك", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "عشان نجبلك معلومات دقيقة، اختار بلدك تحت.", "Are you sure to delete recorded files": "متأكد تمسح الملفات؟", "Select recorded trip": "اختار رحلة مسجلة", "Card Number": "رقم الكارت", "Hi, Where to ": "أهلاً، رايح فين؟", "Pick your destination from Map": "حدد وجهتك من الخريطة", "Add Stops": "ضيف وقفات", "Get Direction": "اعرف الطريق", "Add Location": "ضيف مكان", "Switch Rider": "بدل الراكب", "You will arrive to your destination after timer end.": "هتوصل لما الوقت يخلص.", "You can cancel trip": "تقدر تلغي الرحلة", "The driver waitting you in picked location .": "الكابتن مستنيك.", "Pay with Your": "ادفع بـ", "Pay with Credit Card": "ادفع بالفيزا", "Show Promos to Charge": "اظهر عروض الشحن", "Point": "نقطة", "How many hours would you like to wait?": "عايز تستنى كام ساعة؟", "Driver Wallet": "محفظة الكابتن", "Choose between those Type Cars": "اختار نوع العربية", "hour": "ساعة", "Select Waiting Hours": "اختار ساعات الانتظار", "Total Points is": "مجموع النقاط", "You will receive a code in SMS message": "هيجيلك كود في رسالة", "Done": "تمام", "Total Budget from trips is ": "إجمالي الدخل من الرحلات: ", "Total Amount:": "المبلغ الكلي:", "Total Budget from trips by\nCredit card is ": "إجمالي الدخل بالفيزا: ", "This amount for all trip I get from Passengers": "ده المبلغ من كل الركاب", "Pay from my budget": "ادفع من رصيدي", "This amount for all trip I get from Passengers and Collected For me in": "ده المبلغ اللي جمعته وبيتحوشلي في", "You can buy points from your budget": "ممكن تشتري نقاط من رصيدك", "insert amount": "دخل المبلغ", "You can buy Points to let you online\nby this list below": "اشتري نقاط عشان تفضل أونلاين\nمن القائمة دي", "Create Wallet to receive your money": "اعمل محفظة عشان تستلم فلوسك", "Enter your feedback here": "اكتب رأيك هنا", "Please enter your feedback.": "اكتب رأيك.", "Feedback": "رأيك", "Submit ": "إرسال ", "Click here to Show it in Map": "دوس هنا عشان تشوفه في الخريطة", "Canceled": "ملغي", "No I want": "لأ أنا عايز", "Email is": "الإيميل:", "Phone Number is": "الموبايل:", "Date of Birth is": "تاريخ الميلاد:", "Sex is ": "النوع: ", "Car Details": "تفاصيل العربية", "VIN is": "الشاسيه:", "Color is ": "اللون: ", "Make is ": "الماركة: ", "Model is": "الموديل:", "Year is": "السنة:", "Expiration Date ": "الانتهاء: ", "Edit Your data": "تعديل بياناتك", "write vin for your car": "اكتب الشاسيه", "VIN": "الشاسيه", "Device Change Detected": "الجهاز اتغير", "Please verify your identity": "أكد هويتك", "write Color for your car": "اكتب لون العربية", "write Make for your car": "اكتب ماركة العربية", "write Model for your car": "اكتب موديل العربية", "write Year for your car": "اكتب سنة الصنع", "write Expiration Date for your car": "اكتب تاريخ الانتهاء", "Tariffs": "التعريفة", "Minimum fare": "أقل أجرة", "Maximum fare": "أقصى أجرة", "Flag-down fee": "فتحة العداد", "Including Tax": "شامل الضريبة", "BookingFee": "رسوم الحجز", "Morning": "صبح", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "من ٧:٣٠ لـ ١٠:٣٠ (خميس، جمعة، سبت، اثنين)", "Evening": "ليل", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "من ١٢ لـ ٣ (خميس، جمعة، سبت، اثنين)", "Night": "سهرة", "You have in account": "معاك في الحساب", "Select Country": "اختار الدولة", "Ride Today : ": "رحلة اليوم: ", "After this period\nYou can't cancel!": "بعد الوقت ده\nمش هتعرف تلغي!", "from 23:59 till 05:30": "من ١١:٥٩ م لـ ٥:٣٠ ص", "Rate Driver": "قيم الكابتن", "Total Cost is ": "التكلفة: ", "Write note": "اكتب ملاحظة", "Time to arrive": "وقت الوصول", "Ride Summaries": "ملخص الرحلات", "Total Cost": "التكلفة الكلية", "Average of Hours of": "متوسط ساعات", " is ON for this month": " متصل الشهر ده", "Days": "أيام", "Total Hours on month": "إجمالي ساعات الشهر", "Counts of Hours on days": "عدد الساعات في الأيام", "OrderId": "رقم الطلب", "created time": "وقت الإنشاء", "Intaleq Over": "انتهت رحلة انطلق", "I will slow down": "هدي السرعة", "Map Passenger": "خريطة الراكب", "Be Slowly": "على مهلك", "If you want to make Google Map App run directly when you apply order": "لو عايز جوجل ماب يفتح علطول لما تقبل الطلب", "You can change the language of the app": "تقدر تغير لغة التطبيق", "Your Budget less than needed": "رصيدك أقل من المطلوب", "You can change the Country to get all features": "غير الدولة عشان كل المميزات تظهر", "Change Country": "تغيير الدولة" }, "ar-main": { "Syria": "‏سوريا", "Order": "طلب", "OrderVIP": "طلب VIP", "Cancel Trip": "إلغاء الرحلة", "Passenger Cancel Trip": "الراكب ألغى الرحلة", "VIP Order": "طلب VIP", "The driver accepted your trip": "السائق قبل رحلتك", "message From passenger": "رسالة من الراكب", "Cancel": "إلغاء", "Trip Cancelled. The cost of the trip will be added to your wallet.": "تم إلغاء الرحلة. سيتم إضافة تكلفة الرحلة إلى محفظتك.", "token change": "تغيير الرمز", "face detect": "كشف الوجه", "Face Detection Result": "نتيجة كشف الوجه", "similar": "مشابه", "not similar": "غير مشابه", "Hi ,I will go now": "مرحبًا، سأذهب الآن", "Passenger come to you": "الراكب قادم إليك", "Call Income": "مكالمة واردة", "Call Income from Passenger": "مكالمة واردة من الراكب", "Criminal Document Required": "مطلوب وثيقة جنائية", "You should have upload it .": "يجب عليك تحميلها.", "Call End": "انتهاء المكالمة", "The order has been accepted by another driver.": "تم قبول الطلب من قبل سائق آخر.", "The order Accepted by another Driver": "تم قبول الطلب من قبل سائق آخر", "We regret to inform you that another driver has accepted this order.": "نأسف لإعلامك بأن سائقًا آخر قد قبل هذا الطلب.", "Driver Applied the Ride for You": "السائق قدم الطلب لك", "Applied": "تم التقديم", "Hi ,I Arrive your site": "مرحبًا، لقد وصلت إلى موقعك", "Please go to Car Driver": "يرجى الذهاب إلى سائق السيارة", "Ok I will go now.": "حسنًا، سأذهب الآن.", "Accepted Ride": "تم قبول الرحلة", "Driver Accepted the Ride for You": "السائق قبل الرحلة لك", "Promo": "عرض ترويجي", "Show latest promo": "عرض أحدث عرض ترويجي", "Trip Monitoring": "مراقبة الرحلة", "Driver Is Going To Passenger": "السائق في طريقه إليك", "Please stay on the picked point.": "يرجى البقاء في نقطة الالتقاط المحددة.", "message From Driver": "رسالة من السائق", "Trip is Begin": "بدأت الرحلة", "Verify OTP": "التحقق من الرمز", "Customer not found": "العميل غير موجود", "Wallet is blocked": "المحفظة محظورة", "Customer phone is not active": "هاتف العميل غير نشط", "Balance not enough": "الرصيد غير كافٍ", "Balance limit exceeded": "تم تجاوز حد الرصيد", "Verification Code": "رمز التحقق", "We have sent a verification code to your mobile number:": "لقد أرسلنا رمز التحقق إلى رقم هاتفك المحمول:", "Verify": "تحقق", "Resend Code": "إعادة إرسال الرمز", "You can resend in": "يمكنك إعادة الإرسال خلال", "seconds": "ثوانٍ", "Cancel Trip from driver": "إلغاء الرحلة من السائق", "We will look for a new driver.\nPlease wait.": "هنبحث عن سائق جديد.\nمن فضلك انتظر.", "The driver canceled your ride.": "السائق ألغى رحلتك.", "Driver Finish Trip": "السائق أنهى الرحلة", "you will pay to Driver": "هتدفع للسائق", "Don’t forget your personal belongings.": "متنساش حاجاتك الشخصية.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "من فضلك تأكد إن معاك كل حاجاتك الشخصية وإن أي مبلغ متبقي، لو موجود، تم إضافته لمحفظتك قبل ما تمشي. شكرًا لاستخدامك تطبيق تربز", "Finish Monitor": "إنهاء المراقبة", "Trip finished": "الرحلة انتهت", "Call Income from Driver": "مكالمة واردة من السائق", "Driver Cancelled Your Trip": "السائق ألغى رحلتك", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "هتدفع للسائق هتدفع تكلفة وقت السائق شوف محفظة Intaleq بتاعتك", "Order Applied": "تم تطبيق الطلب", //firebase above // 'Share App': "مشاركة التطبيق", "Wallet": "المحفظة", "Profile": "الملف الشخصي", "Contact Support": "اتصل بالدعم", 'Session expired. Please log in again.': 'انتهت الجلسة. يرجى تسجيل الدخول مرة أخرى.', "Security Warning": "⚠️ تحذير أمني", "Potential security risks detected. The application may not function correctly.": "تم اكتشاف ثغرات أمنية على هذا الجهاز. للحفاظ على أمان بياناتك، سيتم حذف جميع البيانات وإغلاق التطبيق.", 'please order now': " ‏الرجاء الطلب مرة أخرى", "Where to": "على فين؟", "Where are you going?": "رايح فين؟", "Quick Actions": "إجراءات سريعة", "My Wallet": "محفظتي", "Order History": "سجل الطلبات", "Contact Us": "اتصل بنا", "Driver": "السائق", "Complaint": "شكوى", "Promos": "العروض", "Recent Places": "الأماكن الأخيرة", "From": "من", "WhatsApp Location Extractor": "مستخرج موقع واتساب", "Location Link": "رابط الموقع", "Paste location link here": "الصق رابط الموقع هنا", "Go to this location": "انتقل إلى هذا الموقع", "Paste WhatsApp location link": "الصق رابط موقع واتساب", "Select Order Type": "اختر نوع الطلب", "Choose who this order is for": "اختر الطلب ده لمين؟", "I want to order for myself": "أطلب لنفسي", "I want to order for someone else": "أطلب لحد تاني", // "Cancel": "إلغاء", "Order for someone else": "اطلب لشخص آخر", "Order for myself": "اطلب لنفسي", "Are you want to go this site": "عايز تروح المكان ده؟", // "Yes": "أيوة", "No": "لأ", "Are you sure to delete this location?": "متأكد إنك عايز تحذف الموقع ده؟", "deleted": "تم الحذف", "To Work": "الشغل", "Work Saved": "تم حفظ مكان العمل", "To Home": "البيت", "Home Saved": "تم حفظ مكان البيت", "Destination selected": "تم اختيار الوجهة", "Now select start pick": "دلوقتي اختار نقطة البداية", "OK": "تمام", "Confirm Pick-up Location": "تأكيد موقع الالتقاء", "Set Location on Map": "حدد الموقع على الخريطة", "Nearest Car: ~": "أقرب عربية: ~", "Nearest Car": "أقرب عربية", "No cars nearby": "مفيش عربيات قريبة", "Favorite Places": "الأماكن المفضلة", "No favorite places yet!": "مفيش أماكن مفضلة لسه!", "from your favorites": "من مفضلتك", "Back": "رجوع", "Sign in for a seamless experience": "سجل الدخول لتجربة أفضل", "Sign In with Google": "تسجيل الدخول باستخدام جوجل", "Sign in with Apple": "تسجيل الدخول باستخدام آبل", "Need assistance? Contact us": "محتاج مساعدة؟ كلمنا", "User not found": "المستخدم مش موجود", "Email": "البريد الإلكتروني", "Your email address": "عنوان بريدك الإلكتروني", "Enter a valid email": "أدخل بريد إلكتروني صحيح", "Password": "كلمة المرور", // "Your password": "كلمة مرورك", "Enter your password": "أدخل كلمة المرور", "Submit": "إرسال", "Terms of Use & Privacy Notice": "شروط الاستخدام وإشعار الخصوصية", "Terms of Use": "شروط الاستخدام", "Privacy Notice": "سياسة الخصوصية", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "بالنقر على \"أوافق\" أدناه، أؤكد أنني قرأت ووافقت على", "and acknowledge the": "وأقر بـ", ". I am at least 18 years old.": ". أنا عندي 18 سنة على الأقل.", "Continue": "متابعة", "Enable Location Access": "تفعيل الوصول للموقع", "We need your location to find nearby drivers for pickups and drop-offs.": "محتاجين موقعك عشان نلاقي سواقين قريبين للاستلام والتوصيل.", "Allow Location Access": "السماح بالوصول للموقع", "You should restart app to change language": "لازم تقفل التطبيق وتفتحه تاني عشان اللغة تتغير", "Home Page": "الرئيسية", "To change Language the App": "لتغيير لغة التطبيق", "Learn more about our app and mission": "اعرف أكتر عن تطبيقنا ورسالتنا", "Promos For Today": "عروض اليوم", "Choose your ride": "اختار مشوارك", "Your Journey Begins Here": "رحلتك تبدأ هنا", "Bonus gift": "هدية إضافية", "Pay": "ادفع", "Get": "احصل على", "Send to Driver Again": "إرسال للسواق مرة تانية", "Driver Name:": "اسم السائق:", "No trip data available": "مفيش بيانات للرحلة متاحة", "Car Plate:": "رقم اللوحة:", "remaining": "متبقي", "Order Cancelled": "تم إلغاء الطلب", "You canceled VIP trip": "ألغيت مشوار VIP", "Passenger cancelled order": "الراكب ألغى الطلب", "Your trip is scheduled": "رحلتك مجدولة", "Don't forget your ride!": "متنساش مشوارك!", "Trip updated successfully": "تم تحديث الرحلة بنجاح", "Car Make:": "ماركة العربية:", "Car Model:": "موديل العربية:", "Car Color:": "لون العربية:", "Driver Phone:": "رقم تليفون السواق:", "Pre-booking": "حجز مسبق", "Waiting VIP": "انتظار VIP", "Driver List": "قائمة السائقين", "Confirm Trip": "تأكيد المشوار", "Select date and time of trip": "حدد تاريخ ووقت المشوار", "Date and Time Picker": "اختيار التاريخ والوقت", "Trip Status:": "حالة المشوار:", "pending": "قيد الانتظار", "accepted": "تم القبول", "rejected": "تم الرفض", "Apply": "تطبيق", "Enter your promo code": "أدخل رمز الترويج الخاص بك", "Apply Promo Code": "تطبيق رمز الترويج", "Scheduled Time:": "الوقت المحدد:", "No drivers available": "مفيش سواقين متاحين", "No drivers available at the moment. Please try again later.": "مفيش سواقين متاحين دلوقتي. حاول تاني بعدين.", "you have a negative balance of": "لديك رصيد سلبي قدره", "Please try again in a few moments": "حاول تاني بعد شوية", "Unknown Driver": "سائق غير معروف", "in your": "في محفظتك", "The driver accepted your order for": "السائق قبل طلبك مقابل", "wallet due to a previous trip.": "بسبب رحلة سابقة.", "rides": "مشاوير", "Add Work": "أضف مكان العمل", "The reason is": "السبب هو", "User does not have a wallet #1652": "المستخدم معندوش محفظة", "Price of trip": "سعر المشوار", "From:": "من:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "بالنسبة لمشاوير السرعة والتوصيل، السعر بيتحدد بشكل تلقائي. أما مشاوير الكمفورت، السعر بيكون على حسب الوقت والمسافة", "Phone Wallet Saved Successfully": "تم حفظ محفظة الهاتف بنجاح", "Add wallet phone you use": "ضيف رقم محفظة هاتفك اللي بتستخدمها", "Update Available": "تحديث متاح", 'Intaleq Balance': "رصيد Intaleq", 'Van for familly': "فان للعائلات", "Electric": "سيارة كهربائية", "Van": "فان للعائلات", "Closest & Cheapest": "الأقرب والأرخص", "Comfort choice": "خيار الراحة", "Lady Captain for girls": "سائقة خاصة للسيدات", "Best choice for cities": "أفضل خيار بين المدن", "Quiet & Eco-Friendly": "هادئة وصديقة للبيئة", "Travel in a modern, silent electric car. A premium, eco-friendly choice for a smooth ride.": "سافر في سيارة كهربائية حديثة وهادئة. خيار مميز وصديق للبيئة لرحلة مريحة وسلسة.", "Spacious van service ideal for families and groups. Comfortable, safe, and cost-effective travel together.": "خدمة فان واسعة مثالية للعائلات والمجموعات. رحلة مريحة وآمنة واقتصادية للتنقل معًا.", "Phone number must be exactly 11 digits long": "رقم التليفون لازم يكون 11 رقم بالظبط", 'Set Phone Number': "تعيين رقم الهاتف", 'Top up Balance to continue': "اشحن الرصيد للمتابعة", "Insert Wallet phone number": "أدخل رقم محفظة الهاتف", 'Set Wallet Phone Number': 'تعيين رقم الهاتف', "Phone number isn't an Egyptian phone number": "رقم التليفون ده مش رقم مصري", "A new version of the app is available. Please update to the latest version.": "فيه نسخة جديدة من التطبيق متاحة. يرجى التحديث لآخر نسخة.", "We use location to get accurate and nearest passengers for you": "بنستخدم الموقع عشان نوصلك بأقرب ركاب وأدقهم ليك", "This ride is already applied by another driver.": "المشوار ده اتقبل من سواق تاني خلاص.", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "بنستخدم موقعك بالتحديد عشان نلاقي أقرب سواق متاح ونديك معلومات دقيقة عن مكان الاستلام والوصول. ممكن تتحكم في ده من الإعدادات.", "Where are you, sir?": "أنا وصلت حضرتك فين.", "I've been trying to reach you but your phone is off.": "بحاول أكلمك والتليفون مقفول.", "Please don't be late": "ياريت متتأخرش", "Please don't be late, I'm waiting for you at the specified location.": "ياريت متتأخرش، أنا مستنيك في المكان اللي متحدد.", "My location is correct. You can search for me using the navigation app": "موقعي مظبوط. ممكن تدور عليا باستخدام تطبيق الملاحة", "Hello, I'm at the agreed-upon location": "أهلاً، أنا في المكان المتفق عليه", "How much longer will you be?": "قدامك قد إيه؟", "Phone number is verified before": "تم التحقق من رقم الهاتف قبل كده", "Change Ride": "تغيير المشوار", "You can change the destination by long-pressing any point on the map": "ممكن تغير الوجهة بالضغط مطولاً على أي نقطة في الخريطة", "Pick from map destination": "اختار وجهتك من الخريطة", "Pick or Tap to confirm": "اختار أو اضغط للتأكيد", "Accepted your order": "تم قبول طلبك", "Order Accepted": "تم قبول الطلب", "with type": "مع نوع", "accepted your order at price": "تم قبول طلبك بسعر", "you canceled order": "أنت ألغيت الطلب", "If you want order to another person": "لو عايز تطلب لشخص تاني", // "Ok I will go now.": "تمام، أنا ماشي دلوقتي.", // "Hi, I will go now": "أهلاً، أنا ماشي دلوقتي", "upgrade price": "رفع السعر", "Please enter a correct phone": "يرجى إدخال رقم هاتف صحيح", "airport": "مطار", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "أفضل اختيار لعربية مريحة بمسار مرن ونقاط توقف. المطار ده بيقدم دخول فيزا بالسعر ده.", "You can upgrade price to may driver accept your order": "ممكن تزود السعر عشان السواق يقبل طلبك", "Change Route": "تغيير المسار", "No Captain Accepted Your Order": "مفيش كابتن قبل طلبك", "We are looking for a captain but the price may increase to let a captain accept": "بندور على كابتن بس ممكن السعر يزيد عشان كابتن يقبل", "No, I want to cancel this trip": "لأ، أنا عايز ألغي المشوار ده", // "Trip Cancelled. The cost of the trip will be added to your wallet.": // "تم إلغاء الرحلة. هيتم إضافة تكلفة الرحلة لمحفظتك.", "Attention": "تنبيه", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "تم إلغاء الرحلة. هيتخصم تكلفة الرحلة من محفظتك.", "You will be charged for the cost of the driver coming to your location.": "هتتحاسب على تكلفة مجيء السواق لموقعك.", "reject your order.": "رفض طلبك.", "Order Under Review": "الطلب قيد المراجعة", "is reviewing your order. They may need more information or a higher price.": "بيراجع طلبك. ممكن يحتاجوا معلومات أكتر أو سعر أعلى.", // "The driver canceled your ride.": "السواق ألغى مشوارك.", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "ملقيناش أي سواقين لسه. فكر تزود سعر المشوار عشان عرضك يكون جذاب أكتر للسواقين.", "Increase Your Trip Fee (Optional)": "زود سعر مشوارك (اختياري)", "Vibration": "اهتزاز", "Resend code": "إعادة إرسال الرمز", // "token change": "تغيير الرمز", "change device": "تغيير الجهاز", "Device Change Detected": "تم اكتشاف تغيير الجهاز", "You can only use one device at a time. This device will now be set as your active device.": "ممكن تستخدم جهاز واحد بس في المرة الواحدة. الجهاز ده هيتعين دلوقتي كجهازك النشط.", "Click here point": "اضغط هنا", "Are you want to change": "عايز تغير؟", "by": "بواسطة", "Enter your complaint here": "اكتب شكوتك هنا", "Please enter your complaint.": "الرجاء إدخال شكواك.", "Complaint data saved successfully": "تم حفظ بيانات الشكوى بنجاح", "Trip Monitor": "مراقبة الرحلة", "Insert SOS Phone": "أدخل رقم طوارئ", "Add SOS Phone": "أضف رقم طوارئ", // "Trip Monitoring": "مراقبة الرحلة", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "عزيزي،\n\n🚀 بدأت للتو رحلة مثيرة وأود مشاركة تفاصيل رحلتي وموقعي الحالي معك في الوقت الفعلي! يرجى تنزيل تطبيق Intaleq. سيسمح لك بعرض تفاصيل رحلتي وموقعي الأخير.\n\n👈 رابط التحميل:\nAndroid [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\niOS [https://getapp.cc/app/6458734951]\n\nأتطلع إلى إبقائك على اطلاع دائم بمغامرتي!\n\nIntaleq،", "Send Intaleq app to him": "ابعتله تطبيق Intaleq", "No passenger found for the given phone number": "مفيش راكب بالرقم ده", "No user found for the given phone number": "مفيش مستخدم بالرقم ده", "This price is": "السعر ده", "Work": "عمل", "Add Home": "أضف منزل", "Notifications": "الإشعارات", "💳 Pay with Credit Card": "ادفع بالبطاقة الائتمانية 💳", "⚠️ You need to choose an amount!": "⚠️ لازم تختار مبلغ!", "💰 Pay with Wallet": "ادفع من المحفظة", "You must restart the app to change the language.": "لازم تقفل التطبيق وتفتحه تاني عشان اللغة تتغير.", "joined": "انضم", "Driver joined the channel": "السائق انضم للقناة", "Driver left the channel": "السائق غادر القناة", "Call Page": "صفحة الاتصال", // "Call End": "إنهاء المكالمة", "Call Left": "مكالمات متبقية", r"$ Next as Cash $!": " نقداً !", "To use Wallet charge it": "عشان تستخدم المحفظة اشحنها", "We are searching for the nearest driver to you": "بندورلك على أقرب سواق ليك", "Best choice for cities": "أفضل اختيار للمدن", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "رايح جاي: خدمة للذهاب والعودة لIntaleq مريح بين المدن، سهلة وموثوقة.", "Rayeh Gai": "رايح جاي", "This trip is for women only": "المشوار ده للسيدات فقط", "Total budgets on month": "إجمالي الميزانية الشهرية", "You have call from driver": "عندك مكالمة من السواق", "Comfort": "كمفورت", "Intaleq": "Intaleq", "Driver already has 2 trips within the specified period.": "السائق عنده بالفعل مشوارين خلال الفترة المحددة.", "The invitation was sent successfully": "تم إرسال الدعوة بنجاح", "Lady": "ليدي", "You should select your country": "يجب عليك اختيار بلدك", "Scooter": "سكوتر", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "مشوار بحجز مسبق، تقدر تختار فيه أفضل الكباتن والعربيات.", "Mishwar Vip": "مشوار VIP", "The driver waiting you in picked location .": "السائق منتظرك في مكان الالتقاء.", "About Us": "عن التطبيق", "You can change the vibration feedback for all buttons": "ممكن تغير اهتزاز الأزرار", "Most Secure Methods": "أكثر طرق الأمان", "In-App VOIP Calls": "مكالمات صوتية داخل التطبيق", "Recorded Trips for Safety": "تسجيل الرحلات للأمان", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nكما نولي أهمية كبيرة للأسعار المناسبة، ونقدم أسعارًا تنافسية لجعل مشاويرك في متناول الجميع.", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "Intaleq هو تطبيق لمشاركة المشاوير مصمم مع وضع سلامتك وتكلفة المشوار في الاعتبار. نوصلك بسائقين موثوقين في منطقتك، ونضمن لك تجربة Intaleq مريحة وبدون قلق.\n\nإليك بعض المميزات الأساسية اللي بتميزنا:", "Sign In by Apple": "تسجيل الدخول باستخدام Apple", "Sign In by Google": "تسجيل الدخول باستخدام Google", "How do I request a ride?": "إزاي أطلب مشوار؟", "Step-by-step instructions on how to request a ride through the Intaleq app.": "تعليمات خطوة بخطوة عن كيفية طلب مشوار من خلال تطبيق Intaleq.", "What types of vehicles are available?": "إيه أنواع العربيات المتاحة؟", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "Intaleq بتقدملك اختيارات متنوعة للعربيات تناسب احتياجاتك، منها اقتصادي ومريح وفاخر. اختار اللي يناسب ميزانيتك وعدد الركاب.", "How can I pay for my ride?": "إزاي أدفع تمن المشوار؟", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "Intaleq بتقدملك طرق دفع متعددة لراحتك. اختار بين الدفع كاش أو ببطاقة الائتمان/الخصم وأنت بتأكد المشوار.", "Can I cancel my ride?": "ممكن ألغي المشوار؟", "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Intaleq cancellation policy for details.": "نعم، يمكنك إلغاء رحلتك في ظل ظروف معينة (مثل قبل تعيين السائق). اطلع على سياسة الإلغاء في Intaleq للحصول على التفاصيل.", "Driver Registration & Requirements": "تسجيل السائقين والمتطلبات", "How can I register as a driver?": "كيف يمكنني التسجيل كسائق؟", "What are the requirements to become a driver?": "ما هي المتطلبات للعمل كسائق؟", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "تفضل بزيارة موقعنا الإلكتروني أو اتصل بدعم Intaleq للحصول على معلومات حول تسجيل السائقين والمتطلبات.", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "توفر Intaleq ميزة الدردشة داخل التطبيق لتتيح لك التواصل مع سائقك أو راكبك أثناء الرحلة.", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "تُولي Intaleq أهمية كبيرة لسلامتك. نحن نقدم ميزات مثل التحقق من هوية السائق ، وتتبع الرحلات داخل التطبيق ، وخيارات الاتصال في حالات الطوارئ.", "Frequently Questions": "الأسئلة الشائعة", "User does not exist.": "المستخدم غير موجود", "We need your phone number to contact you and to help you.": "نحتاج إلى رقم هاتفك للتواصل معك ولمساعدتك", "You will recieve code in sms message": "ستتلقى رمزًا في رسالة SMS", "Please enter": "يرجى إدخال", "We need your phone number to contact you and to help you receive orders.": "نحتاج إلى رقم هاتفك للتواصل معك ولمساعدتك في تلقي الطلبات.", "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": "الاسم الكامل في سجلك الجنائي لا يتطابق مع الاسم الموجود في رخصة القيادة الخاصة بك. يرجى التحقق وتقديم الوثائق الصحيحة.", "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": "الرقم الوطني على رخصة القيادة الخاصة بك لا يتطابق مع الرقم الموجود على وثيقة الهوية الخاصة بك. يرجى التحقق وتقديم الوثائق الصحيحة.", "Capture an Image of Your Criminal Record": "التقط صورة لسجلك الجنائي", "IssueDate": "تاريخ الإصدار", "Capture an Image of Your car license front ": "التقط صورة للواجهة الأمامية لرخصة سيارتك", "Capture an Image of Your ID Document front": "التقط صورة للواجهة الأمامية لوثيقة هويتك", "NationalID": "الرقم القومي", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "يمكنك مشاركة تطبيق Intaleq مع أصدقائك وكسب مكافآت من الرحلات التي يقومون بها باستخدام كودك.", "FullName": "الاسم الكامل", "No invitation found yet!": "لم يتم العثور على دعوات حتى الآن!", "InspectionResult": "نتيجة الفحص", "Criminal Record": "السجل الجنائي", "Share App": "شارك التطبيق", "The email or phone number is already registered.": "البريد الإلكتروني أو رقم الهاتف مسجل بالفعل.", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "لِتُصْبِحَ سَائِقَاً لِلرُّكوبِ المُشْتَرَكِ عَلَى تَطْبِيق سَفَر، يَجِبُ عَلَيْكَ تَحْمِيل رُخْصَةِ القِيَادَةِ، وَثِيقَةِ الهُوِيَّةِ، وَوَثِيقَةَ تَسْجِيل السَّيَّارَةِ. سَيَقُومُ نِظَامُ الذَّكَاءِ الاِصْطِنَاعِيِّ لَدَيْنَا بِمُرَاجَعَةِ وَتَحْقِيقِ صِحَّةِ الوَثَائِقِ فِي غُضُونِ ٢-٣ دَقَائِقَ فَقَطْ. إِذَا تَمَّتْ المُوَافَقَةُ عَلَى وَثَائِقِكَ، يُمْكِنُكَ البَدْءُ فِي العَمَلِ كَسَائِقٍ عَلَى تَطْبِيق سَفَر. يُرْجَى مُلَاحَظَةُ، تَقْدِيمُ وَثَائِقَ مُزَورَةٍ يُعَدُّ جَرِيمَةً خَطِيرَةً وَقَدْ يَتَرَتَّبُ عَلَيْهِ اِنهَاءُ الحِسَابِ فَوْرِيَّاً وَعَوَاقِبُ قَانُونِيَّة.", "Documents check": "فحص الوثائق", "Driver's License": "رخصة القيادة", "for your first registration!": "للتسجيل الأول!", "Get it Now!": "احصل عليه الآن!", "before": "قبل", "Code not approved": "الرمز غير موافق عليه", "3000 LE": "3000 جنيه مصري", "Do you have an invitation code from another driver?": "هل لديك كود دعوة من سائق آخر؟", "Paste the code here": "الصق الكود هنا", "No, I don't have a code": "لا، لا أملك كودا", "Code approved": "تمت الموافقة على الكود", "Install our app:": "قم بتثبيت تطبيقنا:", "Invite another driver and both get a gift after he completes 100 trips!": "ادع صديقًا ليكون سائقًا واحصلا على هدية بعد إكماله 100 مشوار!", "Invite": "دعوة", "Are you sure?": "هل أنت متأكد؟", "This will delete all recorded files from your device.": "سيؤدي هذا إلى حذف جميع الملفات المسجلة من جهازك.", "Select a file": "اختر ملفاً", "Select a File": "اختر ملفاً", "Delete": "حذف", "attach audio of complain": "إرفاق صوت للشكوى", "Phone Number Check": "فحص رقم الهاتف", "Drivers received orders": "السائقون استقبلوا الطلبات", "No audio files recorded.": "لا توجد ملفات صوتية مسجلة.", "This is for delivery or a motorcycle.": "هذا للتوصيل أو للدراجة النارية.", // "We will look for a new driver.\nPlease wait.": // "سوف نبحث عن سائق جديد.\nيرجى الانتظار", "Intaleq Reminder": "تطبيق Intaleq", "It's time to check the Intaleq app!": "حان وقت استخدام تطبيق Intaleq", "you must insert token code": "يجب إدخال رمز التحقق.", "Something went wrong. Please try again.": "حدث خطأ ما. يرجى المحاولة مرة أخرى.", "Trip Details": "تفاصيل الرحلة", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "لا تتوفر تفاصيل الشكوى في السياق، لذا لا أستطيع تقديم حل لهذه المشكلة. يرجى تقديم المعلومات اللازمة، وسأكون سعيدًا بمساعدتك", "Submit Your Complaint": "أرسل شكواك", "Date": "التاريخ", "Price": "السعر", "Status": "الحالة", "Choose from contact": "اختر من جهات الاتصال", "attach correct audio": "إرفاق صوت للشكوى", "be sure": "كن متأكدًا", "Audio uploaded successfully.": "تم رفع الصوت بنجاح", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "مثالي للركاب الذين يبحثون عن أحدث موديلات السيارات مع حرية اختيار أي طريق يرغبون به", "Share this code with your friends and earn rewards when they use it!": "شارك هذا الرمز مع أصدقائك واحصل على مكافآت عند استخدامهم له!", "Enter phone": "أدخل رقم الهاتف", "You deserve the gift": "أنت تستحق الهدية", "complete, you can claim your gift": " يمكنك المطالبة بهديتك", "When": "‏عندما يكمل", "Enter driver's phone": "أدخل رقم هاتف السائق", "Send Invite": "أرسل الدعوة", "Show Invitations": "عرض الدعوات", "License Type": "نوع الرخصة", "National Number": "الرقم الوطني", "Name (Arabic)": "الاسم بالعربي", "Name (English)": "الاسم بالإنجليزية", "Address": "العنوان", "Issue Date": "تاريخ الإصدار", "Expiry Date": "تاريخ الانتهاء", "License Categories": "فئات الرخصة", "driver_license": "رخصة القيادة", "Capture an Image of Your Driver License": "التقط صورة لرخصة قيادتك", "ID Documents Back": "الوجه الخلفي لوثائق الهوية", "National ID": "البطاقة الوطنية", "Occupation": "المهنة", "Gender": "الجنس", "Religion": "الديانة", "Marital Status": "الحالة الاجتماعية", "Full Name (Marital)": "الاسم الكامل (حسب الحالة الاجتماعية)", "Expiration Date": "تاريخ الانتهاء", "Capture an Image of Your ID Document Back": "التقط صورة للوجه الخلفي لوثيقة الهوية الخاصة بك", "ID Documents Front": "الوجه الأمامي لوثائق الهوية", "First Name": "الاسم الأول", "CardID": "رقم البطاقة", "Vehicle Details Front": "تفاصيل المركبة ‏الوجه الأمامية", "Plate Number": "رقم اللوحة", "Owner Name": "اسم المالك", "Vehicle Details Back": "تفاصيل المركبة ‏الوجه الخلفي", "Make": "المصنع", "Model": "الطراز", "Year": "السنة", "Chassis": "الشاسيه", "Color": "اللون", "Displacement": "السعة", "Fuel": "الوقود", "Tax Expiry Date": "تاريخ انتهاء الضريبة", "Inspection Date": "تاريخ الفحص", "Capture an Image of Your car license back": "التقط صورة للوجه الخلفي لرخصة سيارتك", "Capture an Image of Your Driver’s License": "التقط صورة لرخصة قيادتك", "Sign in with Google for easier email and name entry": "سجل دخولك باستخدام جوجل لتسجيل بريدك الإلكتروني واسمك بسهولة", "You will choose allow all the time to be ready receive orders": "ستختار السماح طوال الوقت لتكون جاهزًا لاستقبال الطلبات", "Welcome to Intaleq!": "مرحبا بكم في Intaleq!", "Get to your destination quickly and easily.": "وصول إلى وجهتك بسرعة وسهولة.", "Enjoy a safe and comfortable ride.": "استمتع برحلة آمنة ومريحة.", "Choose Language": "اختر اللغة", "Login": "تسجيل الدخول", "Pay with Wallet": "ادفع باستخدام المحفظة", "Invalid MPIN": "رمز PIN غير صحيح", "Invalid OTP": "كود التحقق خاطئ", // "Driver Accepted the Ride for You": "السائق قبل الرحلة لك", "Enter your email address": "أدخل عنوان بريدك الإلكتروني", "Please enter Your Email.": "يرجى إدخال بريدك الإلكتروني.", "Enter your phone number": "أدخل رقم هاتفك", "Please enter your phone number.": "يرجى إدخال رقم هاتفك.", "Please enter Your Password.": "يرجى إدخال كلمة المرور.", "if you dont have account": "إذا لم يكن لديك حساب", "Register": "تسجيل", "Accept Ride's Terms & Review Privacy Notice": "قبول شروط الاستخدام ومراجعة إشعار الخصوصية", "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "من خلال اختيار 'أوافق' أدناه، قمت بمراجعة وقبول شروط الاستخدام وأقر بإشعار الخصوصية. أنا على الأقل 18 عامًا.", "I Agree": "أوافق", // "Finish Monitor": " إنهاء مراقبة الرحلة ", "First name": "الاسم الأول", "Enter your first name": "أدخل اسمك الأول", "Please enter your first name.": "يرجى إدخال اسمك الأول.", "Last name": "اسم العائلة", "Enter your last name": "أدخل اسمك الأخير", "Please enter your last name.": "يرجى إدخال اسمك الأخير.", "City": "المدينة", "Please enter your City.": "يرجى إدخال اسم مدينتك.", "Male": "ذكر", "Female": "أنثى", "Verify Email": "تحقق من البريد الإلكتروني", "We sent 5 digit to your Email provided": "لقد أرسلنا رمزًا مؤلفًا من 5 أرقام إلى بريدك الإلكتروني المدخل", "5 digit": "5 أرقام", "Send Verification Code": "إرسال رمز التحقق", "Your Ride Duration is ": "مُدَّة رِحْلَتِكَ ", "You will be thier in": "سَتَكُون هُنَاكَ فِي", "You trip distance is": "مَسَافَة الرِّحْلَة", "Fee is": "الرُّسُوم", "From : ": "مِنْ: ", "To : ": "إِلَى: ", "Add Promo": "إضَافَة بَرُومُو", "Confirm Selection": "تَأْكِيد الاخْتِيَار", "distance is": "المَسَافَة", "Intaleq LLC": "شركة Intaleq", "Egypt's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "أول خدمة مشاركة ركوب في مصر، تم تطويرها بفخر من قبل مالكين عرب ومحليين. نحن نركز على أن نكون قريبين منك - سواء كنت راكبًا قيمًا أو قائدًا مخلصًا.", "Why Choose Intaleq?": "لماذا تختار Intaleq؟", "Closest to You": "الأقرب إليك", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "نربطك بأقرب السائقين لضمان وصول سريع ورحلات أسرع.", "Uncompromising Security": "أعلى مستويات الأمان", "Lady Captains Available": "قائدات سيارات متاحات", "Recorded Trips (Voice & AI Analysis)": "الرحلات المسجلة (تحليل صوتي بالذكاء الاصطناعي)", "Fastest Complaint Response": "أسرع استجابة للشكاوى", "Our dedicated customer service team ensures swift resolution of any issues.": "فريق خدمة العملاء لدينا يضمن حل أي مشكلة بسرعة.", "Affordable for Everyone": "في متناول الجميع", "Frequently Asked Questions": "الأسئلة الشائعة", "Getting Started": "البدء", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "افتح تطبيق Intaleq، وأدخل وجهتك، واضغط على \"طلب رحلة\". سيقوم التطبيق بتوصيلك بأقرب سائق.", "Vehicle Options": "خيارات المركبات", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "يوفر Intaleq مجموعة متنوعة من الخيارات بما في ذلك الاقتصادية، المريحة، والفاخرة لتلبية احتياجاتك وميزانيتك.", "Payments": "المدفوعات", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "ممكن تدفع تمن مشوارك كاش أو ببطاقة الائتمان/الخصم. تقدر تختار طريقة الدفع اللي تفضلها قبل ما تأكد المشوار.", "Ride Management": "إدارة الرحلات", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "أيوة، ممكن تلغي مشوارك، بس يرجى ملاحظة إن فيه رسوم إلغاء ممكن تتطبق حسب الوقت اللي بتلغي فيه قبلها قد إيه.", "For Drivers": "للسواقين", // "Driver Registration & Requirements": "تسجيل ومتطلبات السواقين", "Driver Registration": "تسجيل السواق", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "علشان تسجل كسواق أو تعرف المتطلبات، يرجى زيارة موقعنا الإلكتروني أو الاتصال بدعم Intaleq مباشرةً.", "Visit Website/Contact Support": "زيارة الموقع/الاتصال بالدعم", "Close": "إغلاق", "We are searching for the nearest driver": "بندور على أقرب سواق", "Communication": "التواصل", "How do I communicate with the other party (passenger/driver)?": "إزاي أتواصل مع الطرف التاني (الراكب/السواق)؟", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "ممكن تتواصل مع السواق أو الراكب من خلال خاصية الشات جوة التطبيق أول ما المشوار يتأكد.", "Safety & Security": "الأمان والحماية", "What safety measures does Intaleq offer?": "إيه إجراءات الأمان اللي بيقدمها Intaleq؟", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "Intaleq بيقدم مميزات أمان متنوعة زي التحقق من السواق، تتبع الرحلة جوة التطبيق، خيارات الاتصال في حالات الطوارئ، وإمكانية مشاركة حالة رحلتك مع جهات اتصال موثوقة.", "Enjoy competitive prices across all trip options, making travel accessible.": "استمتع بأسعار تنافسية على كل خيارات الرحلات، وده بيخلي الIntaleq سهل الوصول ليه.", "Variety of Trip Choices": "خيارات رحلات متنوعة", "Choose the trip option that perfectly suits your needs and preferences.": "اختار خيار الرحلة اللي يناسب احتياجاتك وتفضيلاتك بالظبط.", "Your Choice, Our Priority": "اختيارك هو أولويتنا", "Because we are near, you have the flexibility to choose the ride that works best for you.": "علشان إحنا قريبين، عندك المرونة تختار المشوار اللي يناسبك.", "duration is": "المدة", "Setting": "الإعدادات", "Find answers to common questions": "اعثر على إجابات للأسئلة الشائعة", "I don't need a ride anymore": "أنا مش محتاج مشوار تاني", "I was just trying the application": "كنت بجرب التطبيق بس", "No driver accepted my request": "مفيش سواق قبل الطلب بتاعي", "I added the wrong pick-up/drop-off location": "أنا ضفت مكان استلام/توصيل غلط", "I don't have a reason": "ماليش سبب", "Other": "أخرى", "Can we know why you want to cancel Ride ?": "ممكن نعرف ليه عايز تلغي المشوار؟", "Cancel Ride": "إلغاء المشوار", "Add Payment Method": "إضافة طريقة الدفع", "Your Wallet balance is ": "رصيد محفظتك هو ", "Ride Wallet": "محفظة الرحلة", "Payment Method": "طريقة الدفع", "Type here Place": "اكتب هنا المكان", "Are You sure to ride to": "أنت متأكد إنك عايز تروح", "Confirm": "تأكيد", // "Back": "رجوع", "You are Delete": "أنت على وشك الحذف", "Deleted": "تم الحذف", "You Dont Have Any places yet !": "لسا معندكش أي أماكن!", // "Favorite Places": "الأماكن المفضلة", "From : Current Location": "من: الموقع الحالي", // "Where to": "إلى أين", "Profile": "الملف الشخصي", "Home": "الصفحة الرئيسية", "My Cared": "بطاقاتي", "Add Card": "إضافة بطاقة", "Add Credit Card": "إضافة بطاقة ائتمان", "Please enter the cardholder name": "يرجى إدخال اسم حامل البطاقة", "Please enter the expiry date": "يرجى إدخال تاريخ انتهاء الصلاحية", "Please enter the CVV code": "يرجى إدخال رمز CVV", "Go To Favorite Places": "الذهاب إلى الأماكن المفضلة", "Go to this Target": "الذهاب إلى هذا الهدف", "My Profile": "ملفي الشخصي", "Sign Out": "تسجيل الخروج", "Are you want to go to this site": "هل ترغب في الذهاب إلى هذا الموقع", "MyLocation": "موقعي", "my location": "موقعي", "Target": "هدف", "Update": "تحديث", "You Should choose rate figure": "يجب عليك اختيار تقييم", "Login Captin": "تسجيل دخول الكابتن", "Register Captin": "تسجيل كابتن جديد", "Send Verfication Code": "إرسال رمز التحقق", "KM": "كم", "End Ride": "إنهاء الرحلة", "Minute": "دقيقة", "Go to passenger Location now": "اذهب إلى موقع الراكب الآن", "Duration of the Ride is ": "مدة الرحلة هي ", "Distance of the Ride is ": "المسافة للرحلة هي", "Name of the Passenger is ": "اسم الراكب هو", "Hello this is Captain": "مرحباً، أنا الكابتن", "Start the Ride": "بدء الرحلة", "Please Wait If passenger want To Cancel!": "الرجاء الانتظار إذا أراد الراكب الإلغاء!", "Total Duration:": "المدة الإجمالية:", "Active Duration:": "المدة الفعلية:", "Waiting for Captin ...": "في انتظار الكابتن...", "Age is ": "العمر هو", "Rating is ": "التقييم هو", " to arrive you.": "للوصول إليك.", "Tariff": "تعريفة", "Settings": "الإعدادات", "Feed Back": "اقتراحات", "Please enter a valid 16-digit card number": "يرجى إدخال رقم بطاقة صالح مكون من 16 رقم", "Add Phone": "إضافة هاتف", "Please enter a phone number": "يرجى إدخال رقم هاتف", "You dont Add Emergency Phone Yet!": "لسه مضفتش رقم هاتف طوارئ!", "You will arrive to your destination after ": "هتوصل وجهتك بعد", "You can cancel Ride now": "ممكن تلغي المشوار دلوقتي", "You Can cancel Ride After Captain did not come in the time": "ممكن تلغي المشوار بعد ما الكابتن ميوصلش في الوقت المحدد", "If you in Car Now. Press Start The Ride": "لو أنت في العربية دلوقتي. اضغط على بدء الرحلة", "You Dont Have Any amount in": "معندكش أي مبلغ في", "Wallet!": "المحفظة!", "You Have": "لديك", "Save Credit Card": "حفظ بطاقة الائتمان", "Show Promos": "إظهار العروض الترويجية", "10 and get 4% discount": "10 واحصل على خصم 4%", "20 and get 6% discount": "20 واحصل على خصم 6%", "40 and get 8% discount": "40 واحصل على خصم 8%", "100 and get 11% discount": "100 واحصل على خصم 11%", "Pay with Your PayPal": "ادفع باستخدام PayPal", "You will choose one of above !": "هتختار واحدة من اللي فوق!", "Delete My Account": "حذف حسابي", "Edit Profile": "تعديل الملف الشخصي", "Name": "الاسم", "Update Gender": "تحديث الجنس", "Education": "التعليم", "Update Education": "تحديث التعليم", "Employment Type": "نوع التوظيف", "SOS Phone": "هاتف الطوارئ", "High School Diploma": "شهادة الثانوية العامة", "Associate Degree": "درجة الدبلوم", "Bachelor's Degree": "بكالوريوس", "Master's Degree": "ماجستير", "Doctoral Degree": "دكتوراه", "Copy this Promo to use it in your Ride!": "انسخ العرض ده علشان تستخدمه في مشوارك!", "To change some Settings": "لتغيير بعض الإعدادات", "Order Request Page": "صفحة طلب الطلب", "Rouats of Trip": "طرق الرحلة", "Passenger Name is ": "اسم الراكب هو ", "Total From Passenger is ": "المبلغ الإجمالي من الراكب هو ", "Duration To Passenger is ": "المدة للوصول للراكب هي ", "Distance To Passenger is ": "المسافة للوصول للراكب هي ", "Total For You is ": "المبلغ الإجمالي ليك هو ", "Distance is ": "المسافة هي ", " KM": " كيلومتر", "Intaleq Wallet": "محفظة انطلق", "Cash": "كاش", "Pay directly to the captain": "ادفع للكابتن مباشرةً", "Top up Wallet to continue": "اشحن المحفظة للمتابعة", "Or pay with Cash instead": "أو ادفع بالكاش بدلاً من ذلك", "Confirm & Find a Ride": "تأكيد والبحث عن مشوار", "Balance:": "الرصيد:", 'Have a promo code?': "هل لديك كود ترويجي؟", "Duration of Trip is ": "مدة الرحلة هي ", " Minutes": " دقائق", "Apply Order": "قبول الطلب", "Refuse Order": "رفض الطلب", "Rate Captain": "تقييم الكابتن", "Enter your Note": "أدخل ملاحظتك", "Type something...": "اكتب حاجة...", "Submit rating": "إرسال التقييم", "Rate Passenger": "تقييم الراكب", "Ride Summary": "ملخص الرحلة", "welcome_message": "مرحباً بك في Intaleq!", "app_description": "Intaleq هو تطبيق موثوق وآمن وسهل الوصول إليه لمشاركة الركوب.", "get_to_destination": "اذهب إلى وجهتك بسرعة وسهولة.", "get_a_ride": "مع Intaleq، تقدر تحصل على رحلة لوجهتك في دقايق.", "safe_and_comfortable": "استمتع برحلة آمنة ومريحة.", "committed_to_safety": "Intaleq ملتزمة بالسلامة، وكل الكباتن عندنا بيتفحصوا كويس ويتعملهم فحص خلفية.", // "Driver Applied the Ride for You": "السواق طلب المشوار ليك", // "Show latest promo": "أظهر آخر عرض ترويجي", // "Cancel Trip": "إلغاء الرحلة", // "Passenger Cancel Trip": "الراكب ألغى الرحلة", // "Accepted Ride": "تم قبول الرحلة", "your ride is Accepted": "تم قبول رحلتك", // "Trip is Begin": "بدأت الرحلة", "Driver is waiting at pickup.": "السائق في انتظارك عند نقطة الاستلام.", "Driver is on the way": "السائق في الطريق", "Contact Options": "خيارات الاتصال", "Send a custom message": "أرسل رسالة مخصصة", "Type your message": "اكتب رسالتك", // "Hi ,I will go now": "مرحباً، أنا هتحرك دلوقتي", // "Passenger come to you": "الراكب جاي لك", // "Hi ,I Arrive your site": "مرحباً، وصلت مكانك", // "Driver Finish Trip": "السواق أنهى الرحلة", // "you will pay to Driver": "هتدفع للسواق", // "Driver Cancel Your Trip": "السواق ألغى رحلتك", // "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": // "هتدفع للسواق تكلفة وقته، بص على محفظتك في Intaleq", // "I will go now": "أنا هتحرك دلوقتي", "You Have Tips": "عندك زيادة فلوس", " tips\nTotal is": " زيادة مال\nالمجموع هو", // "No,I want": "لأ، أنا عايز", "Your fee is ": "الأجرة بتاعتك هي ", // "Do you want to pay Tips for this Driver": // "هل تريد دفع بقشيش للسواق ده؟", "Tip is ": " مبلغ البقشيش هو", "Are you want to wait drivers to accept your order": "هل عايز تستنى لحد ما السواقين يقبلوا طلبك؟", "This price is fixed even if the route changes for the driver.": "السعر ده ثابت حتى لو المسار اتغير للسواق.", "The price may increase if the route changes.": "احتمالية زيادة السعر عند تغيير المسار", "The captain is responsible for the route.": "الكابتن مسؤول عن المسار", "We are search for nearst driver": "بندور على أقرب سواق", "Your order is being prepared": "جاري تجهيز الطلب", "The drivers are reviewing your request": "السواقين بيدرسوا طلبك", "Your order sent to drivers": "تم إرسال طلبك للسواقين", "You can call or record audio of this trip": "ممكن تتصل أو تسجل صوت للرحلة دي", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "بدأت الرحلة! براحتك تتصل بأرقام الطوارئ، تشارك رحلتك، أو تفعل التسجيل الصوتي للرحلة", // "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": // "الرجاء التأكد من جميع أغراضك الشخصية وإضافة باقي الأجرة في محفظتك قبل النزول. شكراً لاختيارك تطبيق Intaleq", // "Don’t forget your personal belongings.": "متنساش متعلقاتك الشخصية.", "Camera Access Denied.": "تم رفض الوصول للكاميرا.", "Open Settings": "افتح الإعدادات", "GPS Required Allow !.": "تفعيل GPS مطلوب!", "Your Account is Deleted": "تم حذف حسابك", "Are you sure to delete your account?": "أنت متأكد إنك عايز تحذف حسابك؟", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "بياناتك هتتمسح بعد أسبوعين\nومش هتقدر ترجع تستخدم التطبيق تاني بعد شهر", "Enter Your First Name": "أدخل اسمك الأول", "Are you Sure to LogOut?": "أنت متأكد إنك عايز تسجل الخروج؟", "Email Wrong": "البريد الإلكتروني غلط", "Email you inserted is Wrong.": "البريد الإلكتروني اللي أدخلته غلط.", "You have finished all times ": "لقد استنفدت كل المحاولات", "if you want help you can email us here": "لو عايز مساعدة ممكن تبعتلنا إيميل هنا", "Thanks": "شكراً", "Email Us": "ابعت لنا إيميل", "I cant register in your app in face detection ": "مش عارف أسجل في تطبيقكم بسبب كشف الوجه", "Hi": "مرحباً", "No face detected": "لم يتم الكشف عن أي وجه", "Image detecting result is ": "نتيجة الكشف عن الصورة هي", "from 3 times Take Attention": "من 3 محاولات انتبه", "Be sure for take accurate images please\nYou have": "الرجاء التأكد من التقاط صور دقيقة\nلديك", "image verified": "الصورة موثقة", "Next": "التالي", "There is no help Question here": "مفيش أسئلة مساعدة هنا", "You dont have Points": "معندكش نقاط", "You Are Stopped For this Day !": "تم توقيفك لهذا اليوم!", "You must be charge your Account": "يجب إعادة شحن رصيد النقاط", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "رفضت 3 رحلات النهاردة وده السبب\nنتقابل بكرة!", "Recharge my Account": "ادفع رسوم من حسابي", "Ok , See you Tomorrow": "تمام، نتقابل بكرة", "You are Stopped": "تم توقيفك", "Connected": "متصل", "Not Connected": "غير متصل", "Your are far from passenger location": "أنت بعيد عن مكان الراكب", "go to your passenger location before\nPassenger cancel trip": "اذهب إلى مكان الراكب قبل أن\nيلغي الراكب الرحلة", "You will get cost of your work for this trip": "هتحصل على تكاليف عملك لهذه الرحلة", " in your wallet": "في محفظتك", "you gain": "ربحت", "Order Cancelled by Passenger": "تم إلغاء الطلب من قبل الراكب", "Success": "نجاح", "Feedback data saved successfully": "تم حفظ بيانات التعليقات بنجاح", "No Promo for today .": "مفيش عروض ترويجية النهاردة.", "Select your destination": "اختار وجهتك", "Search for your Start point": "ابحث عن نقطة الانطلاق", "Search for waypoint": "ابحث عن النقطة الآلية", "Current Location": "الموقع الحالي", "Add Location 1": "إضافة الموقع 1", "You must Verify email !.": "يجب التحقق من البريد الإلكتروني!", "Cropper": "القاصة", "Saved Sucssefully": "تم الحفظ بنجاح", "Select Date": "اختر التاريخ", "Birth Date": "تاريخ الميلاد", "Ok": "موافق", "the 500 points equal 30 JOD": "الـ 500 نقطة تساوي 30 دينار أردني", "the 500 points equal 30 JOD for you \nSo go and gain your money": "الـ 500 نقطة تساوي 30 دينار أردني\nفاستحق فلوسك واكسب النقاط", "token updated": "تم تحديث الرمز", "Add Location 2": "إضافة الموقع 2", "Add Location 3": "إضافة الموقع 3", "Add Location 4": "إضافة الموقع 4", "Waiting for your location": "في انتظار موقعك", "Search for your destination": "ابحث عن وجهتك", "Hi! This is": "مرحباً! أنا", " I am using": " أنا بستخدم", " to ride with": " للركوب مع", " as the driver.": " كسائق.", "is driving a ": "يقود", " with license plate ": "بلوحة ترخيص", " I am currently located at ": "أنا حالياً في", "Please go to Car now ": "الرجاء التحرك إلى السيارة الآن", "You will receive a code in WhatsApp Messenger": "سوف تتلقى رمزًا في واتساب ماسنجر", "If you need assistance, contact us": "إذا كنت بحاجة إلى المساعدة، تواصل معنا", "Promo Ended": "انتهى العرض", "Enter the promo code and get": "أدخل رمز الترويج واحصل على", "DISCOUNT": "خصم", "No wallet record found": "لم يتم العثور على سجل محفظة", "for": "لمدة", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "Intaleq هو أكتر تطبيق آمن لمشاركة الركوب وبيقدّم مميزات كتير للكباتن والركاب. إحنا بنقدّم أقل نسبة عمولة وهي 8% بس، وده بيضمن إنك تاخد أحسن قيمة لمشاويرك. تطبيقنا فيه تأمين لأحسن الكباتن، صيانة دورية للعربيات مع أحسن المهندسين، وخدمات على الطريق لضمان تجربة محترمة وعالية الجودة لكل المستخدمين.", "You can contact us during working hours from 12:00 - 19:00.": "ممكن تتصل بينا في مواعيد العمل من الساعة 12:00 للساعة 7:00 مساءً.", "Choose a contact option": "اختر طريقة الاتصال", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "مواعيد العمل من الساعة 12:00 للساعة 7:00 مساءً.\nممكن تبعت رسالة واتساب أو إيميل.", "Promo code copied to clipboard!": "تم نسخ رمز العرض إلى الحافظة!", "Copy Code": "نسخ الرمز", "Your invite code was successfully applied!": "تم تطبيق رمز الدعوة بنجاح!", "Payment Options": "خيارات الدفع", "wait 1 minute to receive message": "استنى دقيقة واحدة لاستلام الرسالة", "Promo Copied!": "تم نسخ العرض!", "You have copied the promo code.": "تم نسخ رمز العرض.", "Valid Until:": "صالح حتى:", "Select Payment Amount": "اختر مبلغ الدفع", "The promotion period has ended.": "انتهت فترة العرض.", "Promo Code Accepted": "تم قبول كود العرض", "Tap on the promo code to copy it!": "اضغط على رمز العرض لنسخه!", "Lowest Price Achieved": "تم الوصول إلى أقل سعر", "Cannot apply further discounts.": "لا يمكن تطبيق المزيد من الخصومات.", "Promo Already Used": "تم استخدام كود العرض بالفعل", "Invitation Used": "تم استخدام الدعوة", "You have already used this promo code.": "لقد استخدمت هذا الكود بالفعل.", "Insert Your Promo Code": "أدخل كود العرض الخاص بك", "Enter promo code here": "أدخل كود العرض هنا", "Please enter a valid promo code": "يرجى إدخال كود عرض صالح", "Awfar Car": "أوفر كار", "Old and affordable, perfect for budget rides.": "سيارة قديمة وبسعر معقول، مثالية للمشاوير الاقتصادية.", " If you need to reach me, please contact the driver directly at": "لو محتاج تتواصل معايا، يرجى التواصل مع السواق مباشرة على", "No Car or Driver Found in your area.": "لم يتم العثور على سيارة أو سواق في منطقتك.", "Please Try anther time ": "الرجاء المحاولة في وقت آخر", "There no Driver Aplly your order sorry for that ": "مفيش سواق قبل طلبك، آسفين على كده", "Trip Cancelled": "تم إلغاء الرحلة", "The Driver Will be in your location soon .": "السواق هيكون في موقعك قريبًا.", "The distance less than 500 meter.": "المسافة أقل من 500 متر.", "Promo End !": "انتهاء العرض!", "There is no notification yet": "لا توجد إشعارات بعد", "Use Touch ID or Face ID to confirm payment": "استخدم Touch ID أو Face ID لتأكيد الدفع", "Contact us for any questions on your order.": "تواصل معانا لو عندك أي استفسارات بخصوص طلبك.", "Pyament Cancelled .": "تم إلغاء الدفع.", "type here": "اكتب هنا", "Scan Driver License": "مسح رخصة القيادة", "Please put your licence in these border": "الرجاء وضع رخصتك داخل هذا الإطار", "Camera not initialized yet": "الكاميرا لم يتم تشغيلها بعد", "Take Image": "التقاط الصورة", "AI Page": "صفحة الذكاء الاصطناعي", "Take Picture Of ID Card": "التقاط صورة لبطاقة الهوية", "Take Picture Of Driver License Card": "التقاط صورة لبطاقة رخصة القيادة", "We are process picture please wait ": "نقوم بمعالجة الصورة، الرجاء الانتظار", "There is no data yet.": "لا توجد بيانات بعد.", "Name :": "الاسم:", "Drivers License Class: ": "فئة رخصة القيادة:", "Document Number: ": "رقم المستند:", "Address: ": "العنوان:", "Height: ": "الطول:", "Expiry Date: ": "تاريخ الانتهاء:", "Date of Birth: ": "تاريخ الميلاد:", "You can\'t continue with us .\nYou should renew Driver license": "لا يمكنك الاستمرار معانا. يجب تجديد رخصة القيادة", "Detect Your Face ": "التعرف على وجهك", "Go to next step\nscan Car License.": "اذهب للخطوة اللي بعدها\nوامسح رخصة العربية.", "Name in arabic": "الاسم باللغة العربية", "Drivers License Class": "فئة رخصة القيادة", "Date of Birth": "تاريخ الميلاد", // "Select date and time of trip": "اختر تاريخ ووقت الرحلة", "Selected Date": "التاريخ المحدد", "Select Time": "اختر الوقت", "Selected Time": "الوقت المحدد", // "OK": "موافق", // "Cancel": "إلغاء", "Selected Date and Time": "التاريخ والوقت المحددين", "Lets check Car license ": "يلا نفحص رخصة العربية", "Car": "السيارة", "Plate": "لوحة السيارة", "N/A": "غير متوفر", "Rides": "الرحلات", "Age": "العمر", // "Education": "التعليم", // "Color": "اللون", // "Displacement": "السعة", // "Fuel": "الوقود", "Selected driver": "السواق اللي اخترته", "Lets check License Back Face": "يلا نفحص الوجه الخلفي للرخصة", "Car License Card": "بطاقة رخصة السيارة", "No image selected yet": "لم يتم اختيار أي صورة بعد", "Made :": "الصنع:", "model :": "الموديل:", "VIN :": "رقم الشاسيه:", "year :": "السنة:", "ُExpire Date": "تاريخ الانتهاء", "Login Driver": "تسجيل دخول السائق", "Password must br at least 6 character.": "كلمة المرور لازم تكون 6 حروف على الأقل.", "if you don\'t have account": "لو معندكش حساب", "Here recorded trips audio": "هنا تسجيلات صوتية للرحلات", "Register as Driver": "التسجيل كسائق", // "Privacy Notice": "إخطار الخصوصية", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "باختياري 'أوافق' أدناه، قمت بمراجعة والموافقة على شروط الاستخدام والإقرار بـ", ". I am at least 18 years of age.": ". أنا عمري 18 سنة على الأقل.", "Log Out Page": "صفحة تسجيل الخروج", "Log Off": "تسجيل الخروج", "Register Driver": "تسجيل سائق جديد", "Verify Email For Driver": "التحقق من البريد الإلكتروني للسائق", "Admin DashBoard": "لوحة تحكم المدير", "Your name": "اسمك", "your ride is applied": "تم قبول الطلب بتاعك", "Your password": "كلمة المرور بتاعتك", "H and": "ساعة و", "LE": "جنيه", "JOD": "دينار", "m": "دقيقة", "We search nearst Driver to you": "بندور على أقرب سواق ليك", "please wait till driver accept your order": "الرجاء الانتظار لحد ما السواق يقبل طلبك", "No accepted orders? Try raising your trip fee to attract riders.": "مفيش طلبات مقبولة؟ حاول تزود أجرة المشوار لجذب الركاب.", "You should select one": "لازم تختار واحد", "The driver accept your order for": "السواق قبل طلبك بمبلغ", "Increase Fee": "زود الأجرة", "No, thanks": "لا، شكرًا", "The driver on your way": "الكابتن في طريقه إليك", "Total price from ": "السعر الإجمالي من ", "Order Details Intaleq": "طلب سريع", // "Order Applied": "تم قبول الطلب", "accepted your order": "قبل طلبك", // "We regret to inform you that another driver has accepted this order.": // "نأسف لإبلاغك بأن سائق آخر قد قبل هذا الطلب", "Selected file:": "الملف المختار:", "Your trip cost is": "تكلفة رحلتك هي", "this will delete all files from your device": "حذف هذا سيمسح كل الملفات من جهازك", " in your": "في محفظتك", "Exclusive offers and discounts always with the Intaleq app": "عروض وخصومات حصرية دائمًا مع تطبيق Intaleq", // "Please go to Car Driver": "الرجاء التوجه إلى سائق السيارة", " wallet due to a previous trip.": "بسبب رحلة سابقة.", "Submit Question": "اطرح سؤال", "Please enter your Question.": "الرجاء إدخال سؤالك.", "Help Details": "تفاصيل المساعدة", "No trip yet found": "لم يتم حجز أي رحلة بعد", "No Response yet.": "لا يوجد رد حتى الآن.", " You Earn today is ": "اللي كسبته النهارده هو", " You Have in": "عندك في", "Total points is ": "إجمالي النقاط هو", "Total Connection Duration:": "إجمالي مدة الاتصال:", " H and": "ساعة و", "Passenger name : ": "اسم الراكب", "Cost Of Trip IS ": "تكلفة الرحلة هي", "Arrival time": "وقت الوصول", "arrival time to reach your point": "الوقت المتوقع للوصول إلى وجهتك", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "بالنسبة لمشاوير السرعة والسكوتر، السعر بيتحسب بشكل تلقائي. أما مشاوير الراحة، فالسعر بيكون حسب الوقت والمسافة.", "Hello this is Driver": "مرحباً، أنا السواق", "Is the Passenger in your Car ?": "هل الراكب معاك في العربية؟", "Please wait for the passenger to enter the car before starting the trip.": "الرجاء الانتظار لحد ما الراكب يركب العربية قبل ما تبدأ المشوار.", "No ,still Waiting.": "لأ، لسه منتظر.", "I arrive you": "أنا وصلت لك", "I Arrive your site": "أنا وصلت مكانك", "You are not in near to passenger location": "أنت مش قريب من مكان الراكب", "please go to picker location exactly": "الرجاء الذهاب إلى موقع الراكب بالضبط", "You Can Cancel Trip And get Cost of Trip From": "ممكن تلغي المشوار وتاخد التكلفة من", "Are you sure to cancel?": "أنت متأكد إنك عايز تلغي؟", // "Yes": "نعم", "Insert Emergincy Number": "أدخل رقم الطوارئ", "Best choice for comfort car and flexible route and stops point": "أفضل اختيار لعربية مريحة ومسار مرن ونقط وقوف", "Insert": "إدخال", "This is for scooter or a motorcycle.": "ده للتوصيل أو للموتوسيكل", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "المشوار ده من نقطة البداية لنقطة النهاية بسعر ثابت. والسواق لازم يلتزم بالمسار المحدد.", "You can decline a request without any cost": "تقدر ترفض الطلب من غير أي تكلفة", "Perfect for adventure seekers who want to experience something new and exciting": "مثالي لمحبي المغامرة اللي عايزين يجربوا حاجات جديدة ومثيرة", "My current location is:": "موقعي الحالي هو:", "and I have a trip on": "وعندي مشوار على", "App with Passenger": "التطبيق\nمع الراكب", "You will be pay the cost to driver or we will get it from you on next trip": "هتدفع التكلفة للسواق أو هناخدها منك في المشوار اللي جاي", "Trip has Steps": "الرحلة ليها خطوات", "Distance from Passenger to destination is ": "المسافة من الراكب للوجهة هي", "price is": "التكلفة", "This ride type does not allow changes to the destination or additional stops": "نوع المشوار ده ميسمحش بتغيير الوجهة أو إضافة وقفات.", "This price may be changed": "خلي بالك السعر ممكن يتغير", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "حتى لو مفيش خط، متقلقش! كلم السواق بتاعك من خلال التطبيق بتاعنا. بنستخدم تكنولوجيا حديثة عشان نحافظ على خصوصيتك.", "This ride type allows changes, but the price may increase": "نوع المشوار ده بيسمح بالتغييرات، بس السعر ممكن يزيد", "Select one message": "اختار رسالة", "I'm waiting for you": "أنا في انتظارك", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "لاحظنا إن السرعة بتزيد عن 100 كم/ساعة. يرجى التباطؤ حفاظًا على سلامتك. لو حسيت بعدم الأمان، ممكن تشارك تفاصيل رحلتك مع حد تثق فيه أو تتصل بالشرطة عن طريق زر الطوارئ الأحمر.", "Warning: Intaleqing detected!": "تحذير: تم رصد السرعة الزائدة!", "Please help! Contact me as soon as possible.": "الرجاء المساعدة! اتصل بي في أقرب وقت ممكن", "Share Trip Details": "مشاركة تفاصيل الرحلة", "Car Plate is ": "رقم اللوحة", "VIP Order": "طلب VIP", "the 300 points equal 300 L.E for you \nSo go and gain your money": "اكسب 300 جنيه! كل 300 نقطة تساوي 300 جنيه. يلا استغل نقاطك!", "the 300 points equal 300 L.E": "الـ 300 نقطة تساوي 300 جنيه ليك", "The payment was not approved. Please try again.": "لم يتم الموافقة على الدفع. يرجى المحاولة مرة أخرى.", "Payment Failed": "فشل الدفع", "Error": "خطأ", "This is a scheduled notification.": "هذا إشعار مجدول.", "An error occurred during the payment process.": "حدث خطأ أثناء عملية الدفع.", "The payment was approved.": "تمت الموافقة على الدفع.", "Payment Successful": "نجح الدفع", "No ride found yet": "مفيش طلبات متاحة حاليًا", "Accept Order": "اقبل الطلب", // "reject your order.": "رفض طلبك.", "Bottom Bar Example": "مثال لشريط التنقل السفلي", "Driver phone": "رقم السواق", "Statistics": "الإحصائيات", "Origin": "نقطة الانطلاق", "Destination": "الوجهة", "Driver Name": "اسم السائق", "Driver Car Plate": "لوحة السيارة", "Available for rides": "متاح للمشاوير", "Scan Id": "مسح الهوية", "Camera not initilaized yet": "الكاميرا لم يتم تشغيلها بعد", "Scan ID MklGoogle": "مسح هوية MklGoogle", "Language": "اللغة", "Jordan": "الأردن", "USA": "الولايات المتحدة الأمريكية", "Egypt": "مصر", "Turkey": "تركيا", "Saudi Arabia": "المملكة العربية السعودية", "Qatar": "قطر", "Bahrain": "البحرين", "Kuwait": "الكويت", "But you have a negative salary of": "لكن عندك رصيد سالب بقيمة", "Promo Code": "كود ترويجي", "Your trip distance is": "مسافة رحلتك هي", "Enter promo code": "أدخل كود ترويجي", "You have promo!": "عندك عرض ترويجي!", "Cost Duration": "تكلفة المدة", "Duration is": "المدة هي", "Leave": "مغادرة", "Join": "انضمام", "Heading your way now. Please be ready.": "أنا في طريقي إليك الآن. يرجى الاستعداد.", "Approaching your area. Should be there in 3 minutes.": "أقترب من منطقتك. يفترض أوصل خلال 3 دقايق.", "There's heavy traffic here. Can you suggest an alternate pickup point?": "فيه زحمة مرور شديدة هنا. ممكن تقترح مكان تاني للاستلام؟", "This ride is already taken by another driver.": "المشوار ده أخده سواق تاني خلاص.", "You Should be select reason.": "يجب أن تختار سبب.", "Waiting for Driver ...": "في انتظار السواق...", "Latest Recent Trip": "آخر مشوار عملته", "from your list": "من قائمتك", "Do you want to change Work location": "عايز تغير مكان شغلك؟", "Do you want to change Home location": "عايز تغير مكان بيتك؟", "We Are Sorry That we dont have cars in your Location!": "نعتذر لعدم وجود سيارات في موقعك!", "Choose from Map": "اختر من الخريطة", "Pick your ride location on the map - Tap to confirm": "حدد مكان الالتقاء على الخريطة - اضغط للتأكيد", // "To Work": "إلى العمل", // "Are you want to go this site": "عايز تروح المكان ده؟", "Closest & Cheapest": "الأقرب والأرخص", // "Work Saved": "تم حفظ مكان العمل", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "Intaleq هو تطبيق توصيل آمن وموثوق وسهل الاستخدام.", "With Intaleq, you can get a ride to your destination in minutes.": "مع Intaleq، تقدر توصل لوجهتك في دقايق.", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "Intaleq ملتزمة بالأمان، وكل الكباتن بيتم فحصهم بدقة والتحقق من خلفيتهم.", // "To Home": "إلى المنزل", // "Home Saved": "تم حفظ مكان المنزل", // "Destination selected": "تم اختيار الوجهة:", // "Now select start pick": "اختار مكان الانطلاق دلوقتي:", "Pick from map": "اختيار من الخريطة", // "Click here point": "حدد هذه النقطة", "No Car in your site. Sorry!": "مفيش عربية في موقعك. آسف!", "Nearest Car for you about ": "أقرب عربية ليك على بعد حوالي ", // "N/A": "غير متوفر", "From :": "من:", "Get Details of Trip": "عرض تفاصيل الرحلة", "If you want add stop click here": "لو عايز تضيف وقفة اضغط هنا", // "Driver": "السائق", "Where you want go ": "رايح فين؟", "My Card": "بطاقتي", "Start Record": "بدء التسجيل", "Wallet": "المحفظة", "History of Trip": "سجل الرحلات", "Helping Center": "مركز المساعدة", "Record saved": "تم حفظ التسجيل", "Trips recorded": "الرحلات المسجلة", "Select Your Country": "اختر بلدك", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "لتلقي أدق المعلومات لموقعك، يرجى اختيار بلدك أدناه. هذا سيساعد على تخصيص تجربة التطبيق والمحتوى لبلدك.", "Are you sure to delete recorded files": "أكيد عايز تمسح الملفات الصوتية المسجلة؟", "Select recorded trip": "اختر الملف الصوتي المسجل", "Card Number": "رقم البطاقة", "Hi, Where to ": "مرحباً، رايح فين؟", "Pick your destination from Map": "اختار وجهتك من الخريطة", "Add Stops": "إضافة محطات", "Get Direction": "عرض الاتجاهات", "Add Location": "إضافة موقع", "Switch Rider": "تبديل الراكب", "You will arrive to your destination after timer end.": "هتوصل وجهتك بعد انتهاء العداد.", "You can cancel trip": "تقدر تلغي الرحلة", "The driver waitting you in picked location .": "السواق منتظرك في المكان اللي اخترته.", "Pay with Your": "ادفع بـ", "Pay with Credit Card": "ادفع ببطاقة الائتمان", "Payment History": "سجل المدفوعات", "Show Promos to Charge": "عرض العروض للشحن", "Point": "نقطة", "How many hours would you like to wait?": "كم ساعة تحب تنتظر؟", "Driver Wallet": "محفظة السائق", "Choose between those Type Cars": "اختار من بين أنواع العربيات دي", "hour": "ساعة", "Select Waiting Hours": "اختر ساعات الانتظار", "Total Points is": "إجمالي النقاط هو", "You will receive a code in SMS message": "سوف تتلقى رمزًا في رسالة نصية", "Done": "تم", "Total Budget from trips is ": "إجمالي المبلغ المستحق من الرحلات هو", "Total Amount:": "المبلغ الإجمالي:", "Total Budget from trips by\nCredit card is ": "إجمالي المبلغ المستحق من الرحلات عن طريق\nبطاقة الائتمان هو", "This amount for all trip I get from Passengers": "ده المبلغ اللي حصلت عليه من كل الرحلات من الركاب", "Pay from my budget": "ادفع من رصيدي", "This amount for all trip I get from Passengers and Collected For me in": "ده المبلغ اللي حصلت عليه من كل الرحلات من الركاب وتم تجميعه لي في", "You can buy points from your budget": "تقدر تشتري نقاط من رصيدك", "insert amount": "أدخل المبلغ", "You can buy Points to let you online\nby this list below": "تقدر تشتري نقاط عشان تبقى متصل\nمن القائمة دي تحت", "Create Wallet to receive your money": "إنشاء محفظة لاستقبال أموالك", "Enter your feedback here": "اكتب ملاحظاتك هنا", "Please enter your feedback.": "الرجاء إدخال ملاحظاتك.", "Feedback": "ملاحظات", "Submit ": "إرسال", "Click here to Show it in Map": "اضغط هنا لعرضه على الخريطة", "Canceled": "تم الإلغاء", "Type your Email": "اكتب بريدك الإلكتروني", "No I want": "لا أريد", "Email is": "البريد الإلكتروني هو", "Phone Number is": "رقم الهاتف هو", "Date of Birth is": "تاريخ الميلاد هو", "Sex is ": "النوع هو ", "Car Details": "تفاصيل السيارة", "VIN is": "رقم الشاسيه هو", "Color is ": "اللون هو ", "Make is ": "الشركة المصنعة", "Model is": "الموديل هو", "Year is": "السنة هي", "Expiration Date ": "تاريخ الانتهاء ", "Edit Your data": "تعديل بياناتك", "write vin for your car": "اكتب رقم الشاسيه لعربيتك", "VIN": "رقم الشاسيه", "write Color for your car": "اكتب لون عربيتك", "write Make for your car": "اكتب الشركة المصنعة لعربيتك", // "Make": "الشركة المصنعة", "write Model for your car": "اكتب موديل عربيتك", // "Model": "الموديل", "write Year for your car": "اكتب سنة صنع عربيتك", // "Expiration Date": "تاريخ الانتهاء", "write Expiration Date for your car": "اكتب تاريخ انتهاء رخصة عربيتك", "Tariffs": "التعريفات", "Minimum fare": "الحد الأدنى للأجرة", "Maximum fare": "الحد الأقصى للأجرة", "Flag-down fee": "رسوم فتح العداد", "Including Tax": "شامل الضريبة", "BookingFee": "رسوم الحجز", "Morning": "الصباح", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "من 07:30 حتى 10:30 (الخميس، الجمعة، السبت، الاثنين)", "Evening": "المساء", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "من 12:00 حتى 15:00 (الخميس، الجمعة، السبت، الاثنين)", "Night": "الليل", "You have in account": "عندك في الحساب", "Select Country": "اختر الدولة", "Ride Today : ": "عدد رحلات اليوم: ", "After this period\nYou can\'t cancel!": "بعد الفترة دي\nمش هتقدر تلغي!", "from 23:59 till 05:30": "من 23:59 حتى 05:30", "Rate Driver": "تقييم السائق", "Total Cost is ": "صافي الربح", "Write note": "اكتب ملاحظة", "Time to arrive": "وقت الوصول", "Ride Summaries": "ملخصات الرحلات", "Total Cost": "المبلغ الإجمالي", "Average of Hours of": "متوسط ساعات", " is ON for this month": "في هذا الشهر", "Days": "أيام", "Total Hours on month": "إجمالي الساعات في الشهر", "Counts of Hours on days": "عدد ساعات الأيام", "OrderId": "رقم الرحلة", "created time": "وقت الرحلة", "Intaleq Over": "سرعة عالية", "I will slow down": "حاضر ههدي السرعة", "Map Passenger": "خريطة الراكب", "Be Slowly": "بالراحة شوية في السرعة", "If you want to make Google Map App run directly when you apply order": "لو عايز تطبيق خرائط جوجل يشتغل تلقائي لما تطلب الخدمة", "You can change the language of the app": "تقدر تغير لغة التطبيق", "Your Budget less than needed": "القيمة المدخلة أقل من رصيدك", "You can change the Country to get all features": "تقدر تغير البلد عشان تحصل على كل المميزات", "Change Country": "تغيير الدولة" }, "tr": { "Order": "Sipariş", "OrderVIP": "VIP Sipariş", "Cancel Trip": "Yolculuğu İptal Et", "Passenger Cancel Trip": "Yolcu Yolculuğu İptal Etti", "VIP Order": "VIP Sipariş", "Hi ,I Arrive your site": "Selam, konumuna ulaştım", "The driver accepted your trip": "Sürücü yolculuğunu kabul etti", "message From passenger": "Yolcumuzdan mesaj", "Cancel": "İptal", "Trip Cancelled. The cost of the trip will be added to your wallet.": "Yolculuk iptal edildi. Ücret cüzdanınıza eklenecektir.", "token change": "Token değişikliği", "face detect": "Yüz Algılama", "Face Detection Result": "Yüz Algılama Sonucu", "similar": "Benzer", "not similar": "Benzer Değil", "Hi ,I will go now": "Selam, şimdi yola çıkıyorum", "Passenger come to you": "Yolcu size geliyor", "Call Income": "Gelen Arama", "Call Income from Passenger": "Yolcumuzdan Gelen Arama", "Criminal Document Required": "Adli Sicil Kaydı Gerekli", "You should have upload it .": "Bunu yüklemeniz gerekiyor.", "Call End": "Arama Sonlandı", "The order has been accepted by another driver.": "Sipariş başka bir sürücü tarafından kabul edildi.", "The order Accepted by another Driver": "Sipariş Başka Sürücü Tarafından Kabul Edildi", "We regret to inform you that another driver has accepted this order.": "Üzgünüz, bu siparişi başka bir sürücü kabul etti.", "Driver Applied the Ride for You": "Sürücü Sizin İçin Yolculuk Başlattı", "Applied": "Başvuruldu", "Pay by Sham Cash": "Sham Cash ile Öde", "Pay with Debit Card": "Banka Kartı ile Öde", "Please go to Car Driver": "Lütfen Sürücüye Gidin", "Ok I will go now.": "Tamam, şimdi gidiyorum.", "Accepted Ride": "Kabul Edilen Yolculuk", "Driver Accepted the Ride for You": "Sürücü Sizin İçin Yolculuğu Kabul Etti", "Promo": "Promosyon", "Show latest promo": "Son promosyonları göster", "Trip Monitoring": "Yolculuk Takibi", "Driver Is Going To Passenger": "Sürücü Yolcuya Gidiyor", "Please stay on the picked point.": "Lütfen seçilen noktada bekleyin.", "message From Driver": "Sürücüden Mesaj", "Trip is Begin": "Yolculuk Başlıyor", "Cancel Trip from driver": "Sürücü tarafından iptal", "We will look for a new driver.\nPlease wait.": "Yeni bir sürücü arıyoruz.\nLütfen bekleyin.", "The driver canceled your ride.": "Sürücü yolculuğunuzu iptal etti.", "Driver Finish Trip": "Sürücü Yolculuğu Bitirdi", "you will pay to Driver": "Sürücüye ödeyeceksiniz", "Don’t forget your personal belongings.": "Kişisel eşyalarınızı unutmayın.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "Lütfen tüm kişisel eşyalarınızı aldığınızdan ve kalan ücretin cüzdanınıza eklendiğinden emin olun. Intaleq'i seçtiğiniz için teşekkürler.", "Finish Monitor": "İzlemeyi Bitir", "Trip finished": "Yolculuk tamamlandı", "Call Income from Driver": "Sürücüden Gelen Arama", "Driver Cancelled Your Trip": "Sürücü Yolculuğunuzu İptal Etti", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "Sürücüye zaman maliyetini ödeyeceksiniz, Intaleq Cüzdanınıza bakın", "Order Applied": "Sipariş Uygulandı", "welcome to intaleq": "Intaleq'e Hoş Geldiniz", "login or register subtitle": "Giriş yapmak veya kayıt olmak için numaranızı girin", "An application error occurred.": "Bir uygulama hatası oluştu.", "Submission Failed": "Gönderim Başarısız", "Your complaint has been submitted.": "Şikayetiniz gönderildi.", "Failed to connect to the server. Please try again.": "Sunucuya bağlanılamadı. Lütfen tekrar deneyin.", "Ride information not found. Please refresh the page.": "Yolculuk bilgisi bulunamadı. Lütfen sayfayı yenileyin.", "Please describe your issue before submitting.": "Lütfen göndermeden önce sorununuzu açıklayın.", "An application error occurred during upload.": "Yükleme sırasında bir hata oluştu.", "Failed to upload audio file.": "Ses dosyası yüklenemedi.", "Audio uploaded successfully.": "Ses başarıyla yüklendi.", "Complaint cannot be filed for this ride. It may not have been completed or started.": "Bu yolculuk için şikayet oluşturulamaz. Tamamlanmamış veya başlamamış olabilir.", "2. Attach Recorded Audio (Optional)": "2. Ses Kaydı Ekle (İsteğe Bağlı)", "Please enter a description of the issue.": "Lütfen sorunun tanımını girin.", "phone number label": "Telefon Numarası", "phone number required": "Telefon numarası gerekli", "send otp button": "Doğrulama Kodu Gönder", "verify your number title": "Numaranızı Doğrulayın", "otp sent subtitle": "5 haneli kod şuraya gönderildi:\n@phoneNumber", "verify and continue button": "Doğrula ve Devam Et", "enter otp validation": "Lütfen 5 haneli doğrulama kodunu girin", "one last step title": "Son bir adım", "complete profile subtitle": "Başlamak için profilinizi tamamlayın", "first name label": "Ad", "first name required": "Ad gerekli", "last name label": "Soyad", "Verify OTP": "Kodu Doğrula", "Verification Code": "Doğrulama Kodu", "We have sent a verification code to your mobile number:": "Cep telefonu numaranıza bir doğrulama kodu gönderdik:", "Verify": "Doğrula", "Resend Code": "Kodu Tekrar Gönder", "You can resend in": "Tekrar gönderim süresi:", "seconds": "saniye", "Error": "Hata", "Please enter the complete 6-digit code.": "Lütfen 6 haneli kodu eksiksiz girin.", "last name required": "Soyad gerekli", "email optional label": "E-posta (İsteğe Bağlı)", "complete registration button": "Kaydı Tamamla", "User with this phone number or email already exists.": "Bu telefon veya e-posta ile kayıtlı bir kullanıcı zaten var.", "otp sent success": "Kod WhatsApp'a başarıyla gönderildi.", "failed to send otp": "Kod gönderilemedi.", "server error try again": "Sunucu hatası, tekrar deneyin.", "an error occurred": "Bir hata oluştu: @error", "otp verification failed": "Kod doğrulaması başarısız.", "registration failed": "Kayıt başarısız.", "welcome user": "Hoş geldin, @firstName!", "Cancel Trip from driver": "Sürücü tarafından iptal", "We will look for a new driver.\nPlease wait.": "Yeni bir sürücü arıyoruz.\nLütfen bekleyin.", "The driver canceled your ride.": "Sürücü yolculuğunuzu iptal etti.", "Driver Finish Trip": "Sürücü Yolculuğu Bitirdi", "you will pay to Driver": "Sürücüye ödeyeceksiniz", "Don't forget your personal belongings.": "Kişisel eşyalarınızı unutmayın.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "Lütfen eşyalarınızı kontrol edin ve kalan ücretin cüzdanınıza eklendiğinden emin olun. Teşekkürler.", "Finish Monitor": "İzlemeyi Bitir", "Trip finished": "Yolculuk bitti", "Call Income from Driver": "Sürücüden Gelen Arama", "Driver Cancelled Your Trip": "Sürücü Yolculuğunuzu İptal Etti", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "Sürücünün zaman maliyetini ödeyeceksiniz, Intaleq Cüzdanınıza bakın", "Order Applied": "Sipariş Alındı", "Share App": "Uygulamayı Paylaş", "Wallet": "Cüzdan", "Balance": "Bakiye", "Don’t forget your personal belongings.": "Eşyalarınızı unutmayın.", "Profile": "Profil", "Contact Support": "Destekle İletişime Geç", "Session expired. Please log in again.": "Oturum süresi doldu. Lütfen tekrar giriş yapın.", "Security Warning": "⚠️ Güvenlik Uyarısı", "Potential security risks detected. The application may not function correctly.": "Potansiyel güvenlik riski algılandı. Uygulama düzgün çalışmayabilir.", "please order now": "Şimdi sipariş ver", "Where to": "Nereye?", "Where are you going?": "Nereye gidiyorsunuz?", "Quick Actions": "Hızlı İşlemler", "My Balance": "Bakiyem", "Order History": "Sipariş Geçmişi", "Contact Us": "Bize Ulaşın", "Driver": "Sürücü", "Complaint": "Şikayet", "Promos": "Promosyonlar", "Recent Places": "Son Gidilen Yerler", "From": "Nereden", "WhatsApp Location Extractor": "WhatsApp Konum Çıkarıcı", "Location Link": "Konum Linki", "Paste location link here": "Konum linkini buraya yapıştırın", "Go to this location": "Bu konuma git", "Paste WhatsApp location link": "WhatsApp konum linkini yapıştır", "Select Order Type": "Sipariş Türünü Seç", "Choose who this order is for": "Bu sipariş kimin için?", "I want to order for myself": "Kendim için", "I want to order for someone else": "Başka biri için", "Order for someone else": "Başkası için sipariş ver", "Order for myself": "Kendim için sipariş ver", "Are you want to go this site": "Bu konuma gitmek istiyor musunuz?", "No": "Hayır", "Pay by Sham Cash": "Sham Cash ile Öde", "Intaleq Wallet": "Intaleq Cüzdan", "Have a promo code?": "Promosyon kodunuz var mı?", "Your Wallet balance is ": "Cüzdan bakiyeniz: ", "Cash": "Nakit", "Phone Number": "Telefon Numarası", "Search country": "Ülke ara", "Payment Successful!": "Ödeme Başarılı!", "Your payment was successful.": "Ödemeniz başarıyla gerçekleşti.", "Pay directly to the captain": "Doğrudan Kaptana öde", "Top up Wallet to continue": "Devam etmek için Cüzdanı doldur", "Or pay with Cash instead": "Veya Nakit öde", "Confirm & Find a Ride": "Onayla & Araç Bul", "Balance:": "Bakiye:", "Alerts": "Uyarılar", "Welcome Back!": "Tekrar Hoş Geldiniz!", "Current Balance": "Güncel Bakiye", "Set Wallet Phone Number": "Cüzdan Numarası Ayarla", "Link a phone number for transfers": "Transferler için numara bağla", "Payment History": "Ödeme Geçmişi", "View your past transactions": "Geçmiş işlemleri görüntüle", "Top up Wallet": "Cüzdanı Doldur", "Add funds using our secure methods": "Güvenli yöntemlerle bakiye ekle", "Driver is waiting": "Sürücü bekliyor", "Type your message...": "Mesajınızı yazın...", "Driver Accepted Request": "Sürücü İsteği Kabul Etti", "Message": "Mesaj", "Call": "Ara", "Set Phone Number": "Telefon Numarası Ayarla", "Select This Ride": "Bu Yolculuğu Seç", "Call Driver": "Sürücüyü Ara", "Increase Fare": "Ücreti Artır", "Stop": "Dur", "Record": "Kaydet", "Share": "Paylaş", "WhatsApp": "WhatsApp", "SOS": "SOS", "No drivers accepted your request yet": "Henüz hiçbir sürücü isteğinizi kabul etmedi", "Increasing the fare might attract more drivers. Would you like to increase the price?": "Ücreti artırmak daha fazla sürücü çekebilir. Fiyatı artırmak ister misiniz?", "Please make sure not to leave any personal belongings in the car.": "Lütfen araçta kişisel eşya bırakmadığınızdan emin olun.", "Cancel Ride": "Yolculuğu İptal Et", "Route Not Found": "Rota Bulunamadı", "We couldn't find a valid route to this destination. Please try selecting a different point.": "Bu hedefe geçerli bir rota bulamadık. Lütfen farklı bir nokta seçin.", "alert": "Uyarı", "You can call or record audio during this trip.": "Bu yolculuk sırasında arama yapabilir veya ses kaydedebilirsiniz.", "Warning: Speeding detected!": "Uyarı: Hız sınırı aşıldı!", "Fixed Price": "Sabit Fiyat", "Report": "Bildir", "Comfort": "Konfor", "Intaleq Balance": "Intaleq Bakiyesi", "Search for a starting point": "Başlangıç noktası ara", "Top up Balance to continue": "Devam etmek için Bakiye Yükle", "Electric": "Elektrikli", "Lady": "Kadın", "Van": "Geniş Araç", "Rayeh Gai": "Gidiş-Dönüş", "Join Intaleq as a driver using my referral code!": "Referans kodumla Intaleq sürücüsü ol!", "Use code:": "Kodu kullan:", "Download the Intaleq Driver app now and earn rewards!": "Intaleq Sürücü uygulamasını indir ve kazan!", "Get a discount on your first Intaleq ride!": "İlk Intaleq yolculuğunda indirim kazan!", "Use my referral code:": "Referans kodumu kullan:", "Download the Intaleq app now and enjoy your ride!": "Intaleq uygulamasını indir ve yolculuğun tadını çıkar!", "Contacts Loaded": "Kişiler Yüklendi", "Showing": "Gösteriliyor", "of": "/", "Pay by MTN Wallet": "MTN Cüzdan ile Öde", "Pay by Syriatel Wallet": "Syriatel Cüzdan ile Öde", "Customer not found": "Müşteri bulunamadı", "Wallet is blocked": "Cüzdan bloke edildi", "Customer phone is not active": "Müşteri telefonu aktif değil", "Balance not enough": "Bakiye yetersiz", "Balance limit exceeded": "Bakiye limiti aşıldı", "Incorrect sms code": "⚠️ Hatalı SMS kodu. Lütfen tekrar deneyin.", "contacts. Others were hidden because they don't have a phone number.": "kişi. Diğerleri numarası olmadığı için gizlendi.", "No contacts found": "Kişi bulunamadı", "No contacts with phone numbers were found on your device.": "Cihazınızda telefon numarası olan kişi bulunamadı.", "Permission denied": "İzin reddedildi", "Contact permission is required to pick contacts": "Kişileri seçmek için rehber izni gerekli.", "An error occurred while picking contacts:": "Kişi seçilirken hata oluştu:", "Please enter a correct phone": "Lütfen geçerli bir telefon girin", "Success": "Başarılı", "Invite sent successfully": "Davet başarıyla gönderildi", "Hello! I'm inviting you to try Intaleq.": "Merhaba! Seni Intaleq'i denemeye davet ediyorum.", "Use my invitation code to get a special gift on your first ride!": "İlk yolculuğunda özel hediye için davet kodumu kullan!", "Your personal invitation code is:": "Kişisel davet kodun:", "Be sure to use it quickly! This code expires at": "Hızlı kullan! Kodun son kullanma tarihi:", "Download the app now:": "Uygulamayı hemen indir:", "See you on the road!": "Yollarda görüşmek üzere!", "This phone number has already been invited.": "Bu numara zaten davet edilmiş.", "An unexpected error occurred. Please try again.": "Beklenmedik bir hata oluştu. Lütfen tekrar deneyin.", "You deserve the gift": "Hediyeyi hak ettiniz", "Claim your 20 LE gift for inviting": "Davet için 20 TL hediyeni al", "You have got a gift for invitation": "Davet için hediye kazandınız", "You have earned 20": "20 kazandınız", "LE": "TL", "Vibration feedback for all buttons": "Tüm butonlar için titreşim geri bildirimi", "Share with friends and earn rewards": "Arkadaşlarınla paylaş ve ödül kazan", "Gift Already Claimed": "Hediye Zaten Alındı", "You have already received your gift for inviting": "Davet hediyenizi zaten aldınız", "Keep it up!": "Böyle devam et!", "has completed": "tamamladı", "trips": "yolculuk", "Personal Information": "Kişisel Bilgiler", "Name": "Ad", "Not set": "Ayarlanmadı", "Gender": "Cinsiyet", "Education": "Eğitim", "Work & Contact": "İş & İletişim", "Employment Type": "İstihdam Türü", "Marital Status": "Medeni Durum", "SOS Phone": "Acil Durum Telefonu", "Sign Out": "Çıkış Yap", "Delete My Account": "Hesabımı Sil", "Update Gender": "Cinsiyeti Güncelle", "Update": "Güncelle", "Update Education": "Eğitimi Güncelle", "Are you sure? This action cannot be undone.": "Emin misiniz? Bu işlem geri alınamaz.", "Confirm your Email": "E-postanızı Onaylayın", "Type your Email": "E-postanızı Yazın", "Delete Permanently": "Kalıcı Olarak Sil", "Male": "Erkek", "Female": "Kadın", "Other": "Diğer", "High School Diploma": "Lise Diploması", "Associate Degree": "Önlisans", "Bachelor's Degree": "Lisans", "Master's Degree": "Yüksek Lisans", "Doctoral Degree": "Doktora", "Select your preferred language for the app interface.": "Uygulama arayüzü için dil seçin.", "Language Options": "Dil Seçenekleri", "You can claim your gift once they complete 2 trips.": "Onlar 2 yolculuk tamamlayınca hediyeni alabilirsin.", "Closest & Cheapest": "En Yakın & En Ucuz", "Comfort choice": "Konfor seçimi", "Travel in a modern, silent electric car. A premium, eco-friendly choice for a smooth ride.": "Modern, sessiz elektrikli araçla seyahat edin. Pürüzsüz bir yolculuk için premium, çevre dostu seçim.", "Spacious van service ideal for families and groups. Comfortable, safe, and cost-effective travel together.": "Aileler ve gruplar için ideal geniş araç hizmeti. Rahat, güvenli ve ekonomik.", "Quiet & Eco-Friendly": "Sessiz & Çevre Dostu", "Lady Captain for girls": "Kadınlar için Kadın Sürücü", "Van for familly": "Aile için Geniş Araç", "Are you sure to delete this location?": "Bu konumu silmek istediğinize emin misiniz?", "Change Work location?": "İş konumunu değiştir?", "Change Home location?": "Ev konumunu değiştir?", "Submit a Complaint": "Şikayet Gönder", "Submit Complaint": "Şikayeti Gönder", "No trip history found": "Yolculuk geçmişi bulunamadı", "Your past trips will appear here.": "Geçmiş yolculuklarınız burada görünecek.", "1. Describe Your Issue": "1. Sorununuzu Açıklayın", "Enter your complaint here...": "Şikayetinizi buraya girin...", "2. Attach Recorded Audio": "2. Kayıtlı Ses Dosyası Ekle", "No audio files found.": "Ses dosyası bulunamadı.", "Confirm Attachment": "Eki Onayla", "Attach this audio file?": "Bu ses dosyasını ekle?", "Uploaded": "Yüklendi", "3. Review Details & Response": "3. Detayları ve Yanıtı İncele", "Date": "Tarih", "Today's Promos": "Günün Fırsatları", "No promos available right now.": "Şu an uygun promosyon yok.", "Check back later for new offers!": "Yeni teklifler için sonra tekrar kontrol et!", "Valid Until:": "Son Geçerlilik:", "CODE": "KOD", "Login": "Giriş Yap", "Sign in for a seamless experience": "Kusursuz bir deneyim için giriş yapın", "Sign In with Google": "Google ile Giriş Yap", "Sign in with Apple": "Apple ile Giriş Yap", "User not found": "Kullanıcı bulunamadı", "Need assistance? Contact us": "Yardım mı lazım? Bize ulaşın", "Email": "E-posta", "Your email address": "E-posta adresiniz", "Enter a valid email": "Geçerli bir e-posta girin", "Password": "Şifre", "Your password": "Şifreniz", "Enter your password": "Şifrenizi girin", "Submit": "Gönder", "Terms of Use & Privacy Notice": "Kullanım Şartları & Gizlilik Bildirimi", "By selecting \"I Agree\" below, I confirm that I have read and agree to the ": "Aşağıdaki \"Kabul Ediyorum\" seçeneğini seçerek, şunları okuduğumu ve kabul ettiğimi onaylıyorum: ", "Terms of Use": "Kullanım Şartları", " and acknowledge the ": " ve şunu kabul ediyorum: ", "Privacy Notice": "Gizlilik Bildirimi", " . I am at least 18 years old.": " . En az 18 yaşındayım.", "I Agree": "Kabul Ediyorum", "Continue": "Devam Et", "Enable Location": "Konumu Etkinleştir", "To give you the best experience, we need to know where you are. Your location is used to find nearby captains and for pickups.": "Size en iyi deneyimi sunmak için nerede olduğunuzu bilmemiz gerek. Konumunuz yakın sürücüleri bulmak için kullanılır.", "Allow Location Access": "Konum Erişimine İzin Ver", "Welcome to Intaleq!": "Intaleq'e Hoş Geldiniz!", "Before we start, please review our terms.": "Başlamadan önce lütfen şartlarımızı inceleyin.", "Your journey starts here": "Yolculuğunuz burada başlıyor", "Cancel Search": "Aramayı İptal Et", "Set pickup location": "Alım noktasını ayarla", "Move the map to adjust the pin": "İğneyi ayarlamak için haritayı kaydırın", "Searching for the nearest captain...": "En yakın kaptan aranıyor...", "No one accepted? Try increasing the fare.": "Kimse kabul etmedi mi? Ücreti artırmayı deneyin.", "Increase Your Trip Fee (Optional)": "Yolculuk Ücretini Artır (İsteğe Bağlı)", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "Henüz sürücü bulunamadı. Teklifinizi daha cazip hale getirmek için ücreti artırmayı düşünün.", "No, thanks": "Hayır, teşekkürler", "Increase Fee": "Ücreti Artır", "Copy": "Kopyala", "Promo Copied!": "Promosyon Kopyalandı!", "Code": "Kod", "copied to clipboard": "panoya kopyalandı", "Price": "Fiyat", "Intaleq's Response": "Intaleq'in Yanıtı", "Awaiting response...": "Yanıt bekleniyor...", "Audio file not attached": "Ses dosyası eklenmedi", "The audio file is not uploaded yet.\\nDo you want to submit without it?": "Ses dosyası henüz yüklenmedi.\\nOnsuz göndermek istiyor musunuz?", "deleted": "silindi", "To Work": "İşe", "Work Saved": "İş Kaydedildi", "To Home": "Eve", "Home Saved": "Ev Kaydedildi", "Destination selected": "Varış noktası seçildi", "Now select start pick": "Şimdi başlangıç noktasını seç", "OK": "TAMAM", "Confirm Pick-up Location": "Alım Konumunu Onayla", "Set Location on Map": "Konumu Haritada Belirle", "Leave a detailed comment (Optional)": "Detaylı yorum bırak (İsteğe Bağlı)", "Share your experience to help us improve...": "Gelişmemize yardımcı olmak için deneyimini paylaş...", "Your valuable feedback helps us improve our service quality.": "Değerli geri bildiriminiz hizmet kalitemizi artırmaya yardımcı olur.", "witout zero": "sıfır olmadan", "Top up Balance": "Bakiye Yükle", "An error occurred": "Bir hata oluştu", "Send WhatsApp Message": "WhatsApp Mesajı Gönder", "How was your trip with": "Yolculuğun nasıldı:", "Drawing route on map...": "Rota haritaya çiziliyor...", "Please wait while we prepare your trip.": "Lütfen yolculuğunuz hazırlanırken bekleyin.", "Submit Rating": "Puanı Gönder", "Call Support": "Desteği Ara", "You can contact us during working hours from 10:00 - 16:00.": "Çalışma saatleri (10:00 - 16:00) içinde bize ulaşabilirsiniz.", "Intaleq is the safest and most reliable ride-sharing app designed especially for passengers in Syria. We provide a comfortable, respectful, and affordable riding experience with features that prioritize your safety and convenience. Our trusted captains are verified, insured, and supported by regular car maintenance carried out by top engineers. We also offer on-road support services to make sure every trip is smooth and worry-free. With Intaleq, you enjoy quality, safety, and peace of mind—every time you ride.": "Intaleq, Türkiye'deki yolcular için tasarlanmış en güvenli ve güvenilir araç paylaşım uygulamasıdır. Güvenliğinizi ve rahatlığınızı ön planda tutarak konforlu, saygılı ve uygun fiyatlı bir yolculuk deneyimi sunuyoruz. Güvenilir kaptanlarımız doğrulanmış, sigortalıdır. Intaleq ile her yolculukta kalitenin ve güvenin tadını çıkarın.", "Work time is from 10:00 AM to 16:00 PM.\nYou can send a WhatsApp message or email.": "Çalışma saatleri 10:00 - 16:00 arasıdır.\nWhatsApp mesajı veya e-posta gönderebilirsiniz.", "Sorry": "Üzgünüz", "Customer MSISDN doesn’t have customer wallet": "Müşteri numarasının cüzdanı yok", "Please enter the number without the leading 0": "Lütfen numarayı başında 0 olmadan girin", "Please enter your phone number": "Lütfen telefon numaranızı girin", "Phone number seems too short": "Telefon numarası çok kısa görünüyor", "No cars are available at the moment. Please try again later.": "Şu anda müsait araç yok. Lütfen daha sonra tekrar deneyin.", "Nearest Car: ~": "En Yakın Araç: ~", "Nearest Car": "En Yakın Araç", "No cars nearby": "Yakında araç yok", "Favorite Places": "Favori Yerler", "No favorite places yet!": "Henüz favori yer yok!", "from your favorites": "favorilerinizden", "Back": "Geri", "Enter your code below to apply the discount.": "İndirimi uygulamak için kodu aşağıya girin.", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "Aşağıda \"Kabul Ediyorum\"u seçerek, şunları okuduğumu ve kabul ettiğimi onaylıyorum:", "and acknowledge the": "ve şunu kabul ediyorum:", "Enable Location Access": "Konum Erişimini Etkinleştir", "We need your location to find nearby drivers for pickups and drop-offs.": "Alım ve bırakma işlemleri için yakındaki sürücüleri bulmak adına konumunuza ihtiyacımız var.", "You should restart app to change language": "Dili değiştirmek için uygulamayı yeniden başlatmalısınız", "Home Page": "Ana Sayfa", "To change Language the App": "Uygulama Dilini Değiştirmek İçin", "Learn more about our app and mission": "Uygulamamız ve misyonumuz hakkında daha fazla bilgi edinin", "Promos For Today": "Bugünün Fırsatları", "Choose your ride": "Yolculuğunu seç", "Your Journey Begins Here": "Yolculuğun Burada Başlıyor", "Bonus gift": "Bonus hediye", "Pay": "Öde", "Get": "Al", "Send to Driver Again": "Sürücüye Tekrar Gönder", "Driver Name:": "Sürücü Adı:", "No trip data available": "Yolculuk verisi yok", "Car Plate:": "Plaka:", "remaining": "kalan", "Order Cancelled": "Sipariş İptal Edildi", "You canceled VIP trip": "VIP yolculuğu iptal ettiniz", "Passenger cancelled order": "Yolcu siparişi iptal etti", "Your trip is scheduled": "Yolculuğunuz planlandı", "Don't forget your ride!": "Yolculuğunu unutma!", "Trip updated successfully": "Yolculuk başarıyla güncellendi", "Car Make:": "Marka:", "Car Model:": "Model:", "Car Color:": "Renk:", "Driver Phone:": "Sürücü Tel:", "Pre-booking": "Ön Rezervasyon", "Waiting VIP": "VIP Bekleniyor", "Driver List": "Sürücü Listesi", "Confirm Trip": "Yolculuğu Onayla", "Select date and time of trip": "Yolculuk tarihini ve saatini seç", "Date and Time Picker": "Tarih ve Saat Seçici", "Trip Status:": "Yolculuk Durumu:", "pending": "bekliyor", "accepted": "kabul edildi", "rejected": "reddedildi", "Apply": "Uygula", "Enter your promo code": "Promosyon kodunu gir", "Apply Promo Code": "Promosyon Kodunu Uygula", "Scheduled Time:": "Planlanan Zaman:", "No drivers available": "Sürücü yok", "No drivers available at the moment. Please try again later.": "Şu anda müsait sürücü yok. Lütfen daha sonra tekrar deneyin.", "you have a negative balance of": "negatif bakiyeniz var:", "Please try again in a few moments": "Lütfen birkaç dakika içinde tekrar deneyin", "Unknown Driver": "Bilinmeyen Sürücü", "in your": "cüzdanınızda", "The driver accepted your order for": "Sürücü siparişinizi şu tutara kabul etti:", "wallet due to a previous trip.": "önceki yolculuk nedeniyle cüzdandan.", "rides": "yolculuklar", "Add Work": "İş Ekle", "The reason is": "Sebep:", "User does not have a wallet #1652": "Kullanıcının cüzdanı yok #1652", "Price of trip": "Yolculuk ücreti", "From:": "Nereden:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Intaleq ve Teslimat yolculukları için fiyat dinamik hesaplanır. Konfor yolculukları için fiyat zaman ve mesafeye dayalıdır.", "Phone Wallet Saved Successfully": "Telefon Cüzdanı Başarıyla Kaydedildi", "Add wallet phone you use": "Kullandığınız cüzdan telefonunu ekleyin", "Update Available": "Güncelleme Mevcut", "Phone number must be exactly 11 digits long": "Telefon numarası tam 11 haneli olmalıdır", "Insert Wallet phone number": "Cüzdan telefon numarasını girin", "Phone number isn't an Egyptian phone number": "Telefon numarası Türkiye numarası değil", "A new version of the app is available. Please update to the latest version.": "Uygulamanın yeni bir sürümü mevcut. Lütfen güncelleyin.", "We use location to get accurate and nearest passengers for you": "Size en yakın ve doğru yolcuları bulmak için konumu kullanıyoruz", "This ride is already applied by another driver.": "Bu yolculuk başka bir sürücü tarafından alınmış.", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "En yakın sürücüyü bulmak ve doğru konum bilgisi sağlamak için hassas konumunuzu kullanıyoruz. Ayarlardan yönetebilirsiniz.", "Where are you, sir?": "Neredesiniz efendim?", "I've been trying to reach you but your phone is off.": "Size ulaşmaya çalışıyorum ama telefonunuz kapalı.", "Please don't be late": "Lütfen gecikmeyin", "Please don't be late, I'm waiting for you at the specified location.": "Lütfen gecikmeyin, belirtilen konumda sizi bekliyorum.", "My location is correct. You can search for me using the navigation app": "Konumum doğru. Navigasyon uygulamasıyla beni arayabilirsiniz.", "Hello, I'm at the agreed-upon location": "Merhaba, anlaşılan konumdayım", "How much longer will you be?": "Ne kadar sürer?", "Phone number is verified before": "Telefon numarası daha önce doğrulanmış", "Change Ride": "Yolculuğu Değiştir", "You can change the destination by long-pressing any point on the map": "Haritada herhangi bir noktaya uzun basarak varış yerini değiştirebilirsiniz", "Pick from map destination": "Haritadan varış yeri seç", "Pick or Tap to confirm": "Seç veya Onaylamak için Dokun", "Accepted your order": "Siparişinizi kabul etti", "Order Accepted": "Sipariş Kabul Edildi", "with type": "türü ile", "accepted your order at price": "siparişinizi şu fiyattan kabul etti:", "you canceled order": "siparişi iptal ettiniz", "If you want order to another person": "Başka birine sipariş vermek isterseniz", "upgrade price": "fiyatı yükselt", "airport": "havalimanı", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "Esnek rota ve durak noktaları ile konforlu bir araç için en iyi seçim.", "You can upgrade price to may driver accept your order": "Sürücünün kabul etmesi için fiyatı yükseltebilirsiniz", "Change Route": "Rotayı Değiştir", "No Captain Accepted Your Order": "Hiçbir Kaptan Siparişinizi Kabul Etmedi", "We are looking for a captain but the price may increase to let a captain accept": "Kaptan arıyoruz ancak kabul edilmesi için fiyat artabilir", "No, I want to cancel this trip": "Hayır, bu yolculuğu iptal etmek istiyorum", "Attention": "Dikkat", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "Yolculuk İptal Edildi. Yolculuk ücreti cüzdanınızdan düşülecektir.", "You will be charged for the cost of the driver coming to your location.": "Sürücünün konumunuza gelme maliyeti tahsil edilecektir.", "reject your order.": "siparişinizi reddetti.", "Order Under Review": "Sipariş İnceleniyor", "is reviewing your order. They may need more information or a higher price.": "siparişinizi inceliyor. Daha fazla bilgi veya yüksek fiyat gerekebilir.", "Vibration": "Titreşim", "Resend code": "Kodu tekrar gönder", "change device": "cihaz değiştir", "Device Change Detected": "Cihaz Değişikliği Algılandı", "You can only use one device at a time. This device will now be set as your active device.": "Aynı anda sadece bir cihaz kullanabilirsiniz. Bu cihaz şimdi aktif cihazınız olarak ayarlanacak.", "Click here point": "Buraya tıkla", "Are you want to change": "Değiştirmek istiyor musunuz?", "by": "tarafından", "Enter your complaint here": "Şikayetinizi buraya girin", "Please enter your complaint.": "Lütfen şikayetinizi girin.", "Complaint data saved successfully": "Şikayet verisi başarıyla kaydedildi", "Trip Monitor": "Yolculuk İzleme", "Insert SOS Phone": "Acil Durum Telefonu Gir", "Add SOS Phone": "Acil Durum Telefonu Ekle", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "Sevgili ,\n\n🚀 Heyecanlı bir yolculuğa başladım ve detayları ile anlık konumumu seninle paylaşmak istiyorum! Lütfen Intaleq uygulamasını indir. Böylece yolculuk detaylarımı ve son konumumu görebilirsin.\n\n👉 İndirme linki: \nAndroid [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\niOS [https://getapp.cc/app/6458734951]\n\nMaceram boyunca seni yakınımda hissetmek istiyorum!\n\nIntaleq ,", "Send Intaleq app to him": "Ona Intaleq uygulamasını gönder", "No passenger found for the given phone number": "Verilen numara için yolcu bulunamadı", "No user found for the given phone number": "Verilen numara için kullanıcı bulunamadı", "This price is": "Bu fiyat:", "Work": "İş", "Add Home": "Ev Ekle", "Notifications": "Bildirimler", "💳 Pay with Credit Card": "💳 Kredi Kartı ile Öde", "⚠️ You need to choose an amount!": "⚠️ Bir tutar seçmelisiniz!", "💰 Pay with Wallet": "💰 Cüzdan ile Öde", "You must restart the app to change the language.": "Dili değiştirmek için uygulamayı yeniden başlatmalısınız.", "joined": "katıldı", "Driver joined the channel": "Sürücü kanala katıldı", "Driver left the channel": "Sürücü kanaldan ayrıldı", "Call Page": "Arama Sayfası", "Call Left": "Kalan Arama", " Next as Cash !": " Sonraki Nakit!", "To use Wallet charge it": "Cüzdanı kullanmak için yükleme yapın", "We are searching for the nearest driver to you": "Size en yakın sürücüyü arıyoruz", "Best choice for cities": "Şehirler için en iyi seçim", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "Gidiş-Dönüş: Şehirler arası rahat seyahat için kolay ve güvenilir hizmet.", "This trip is for women only": "Bu yolculuk sadece kadınlar içindir", "Total budgets on month": "Aylık toplam bütçe", "You have call from driver": "Sürücüden aramanız var", "Intaleq": "Intaleq", "passenger agreement": "yolcu sözleşmesi", "To become a passenger, you must review and agree to the ": "Yolcu olmak için şunları inceleyip kabul etmelisiniz: ", "agreement subtitle": "Devam etmek için Kullanım Şartları ve Gizlilik Politikasını kabul etmelisiniz.", "terms of use": "kullanım şartları", " and acknowledge our Privacy Policy.": " ve Gizlilik Politikamızı kabul edin.", "and acknowledge our": "ve şunu kabul edin:", "privacy policy": "gizlilik politikası.", "i agree": "kabul ediyorum", "Driver already has 2 trips within the specified period.": "Sürücünün belirtilen sürede zaten 2 yolculuğu var.", "The invitation was sent successfully": "Davet başarıyla gönderildi", "You should select your country": "Ülkenizi seçmelisiniz", "Scooter": "Scooter", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "Ön rezervasyonlu yolculuk, en iyi kaptanları ve araçları seçmenize olanak tanır.", "Mishwar Vip": "Mishwar VIP", "The driver waiting you in picked location .": "Sürücü sizi seçilen konumda bekliyor.", "About Us": "Hakkımızda", "You can change the vibration feedback for all buttons": "Tüm butonlar için titreşimi değiştirebilirsiniz", "Most Secure Methods": "En Güvenli Yöntemler", "In-App VOIP Calls": "Uygulama İçi VOIP Aramalar", "Recorded Trips for Safety": "Güvenlik İçin Kaydedilen Yolculuklar", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nAyrıca uygun fiyat önceliğimizdir, rekabetçi fiyatlarla yolculuğu erişilebilir kılıyoruz.", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "Intaleq, güvenliğiniz ve bütçeniz düşünülerek tasarlanmış bir araç paylaşım uygulamasıdır. Sizi bölgenizdeki güvenilir sürücülerle buluşturuyoruz.", "Sign In by Apple": "Apple ile Giriş Yap", "Sign In by Google": "Google ile Giriş Yap", "How do I request a ride?": "Nasıl yolculuk isterim?", "Step-by-step instructions on how to request a ride through the Intaleq app.": "Intaleq uygulaması üzerinden yolculuk isteme adımları.", "What types of vehicles are available?": "Hangi araç türleri mevcut?", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "Intaleq ihtiyaçlarınıza uygun ekonomi, konfor ve lüks dahil çeşitli araç seçenekleri sunar.", "How can I pay for my ride?": "Yolculuğumu nasıl öderim?", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "Intaleq nakit veya kredi/banka kartı ile ödeme seçenekleri sunar.", "Can I cancel my ride?": "Yolculuğumu iptal edebilir miyim?", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "Evet, iptal edebilirsiniz ancak iptal zamanlamasına göre ücret uygulanabilir.", "Driver Registration & Requirements": "Sürücü Kaydı & Gereksinimler", "How can I register as a driver?": "Sürücü olarak nasıl kayıt olurum?", "What are the requirements to become a driver?": "Sürücü olma şartları nelerdir?", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "Bilgi için web sitemizi ziyaret edin veya destek ile iletişime geçin.", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "Intaleq, yolculuk sırasında iletişim kurmanız için uygulama içi sohbet sunar.", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "Intaleq güvenliğinizi önceler. Sürücü doğrulama, takip ve acil durum seçenekleri sunar.", "Frequently Questions": "Sıkça Sorulan Sorular", "User does not exist.": "Kullanıcı mevcut değil.", "We need your phone number to contact you and to help you.": "Size ulaşmak ve yardım etmek için numaranıza ihtiyacımız var.", "You will recieve code in sms message": "Kodu SMS ile alacaksınız", "Please enter": "Lütfen girin", "We need your phone number to contact you and to help you receive orders.": "Sipariş alabilmeniz ve iletişim için numaranıza ihtiyacımız var.", "The full name on your criminal record does not match the one on your driver's license. Please verify and provide the correct documents.": "Adli sicil kaydındaki isim ehliyetinizle eşleşmiyor. Lütfen doğrulayın.", "The national number on your driver's license does not match the one on your ID document. Please verify and provide the correct documents.": "Ehliyetinizdeki T.C. kimlik no kimliğinizle eşleşmiyor.", "Capture an Image of Your Criminal Record": "Adli Sicil Kaydınızın Fotoğrafını Çekin", "IssueDate": "Veriliş Tarihi", "Capture an Image of Your car license front": "Ruhsatınızın Ön Yüzünün Fotoğrafını Çekin", "Capture an Image of Your ID Document front": "Kimliğinizin Ön Yüzünün Fotoğrafını Çekin", "NationalID": "T.C. Kimlik No", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "Uygulamayı paylaşın ve kodunuzla yapılan yolculuklardan ödül kazanın.", "FullName": "Tam Ad", "No invitation found yet!": "Henüz davet bulunamadı!", "InspectionResult": "Muayene Sonucu", "Criminal Record": "Adli Sicil Kaydı", "The email or phone number is already registered.": "E-posta veya telefon numarası zaten kayıtlı.", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "Sürücü olmak için ehliyet, kimlik ve ruhsatınızı yüklemelisiniz. Yapay zekamız 2-3 dakikada doğrular. Sahte belge yüklemek yasal sonuçlar doğurur.", "Documents check": "Belge Kontrolü", "Driver's License": "Sürücü Belgesi (Ehliyet)", "for your first registration!": "ilk kaydınız için!", "Get it Now!": "Hemen Al!", "before": "önce", "Code not approved": "Kod onaylanmadı", "3000 LE": "3000 TL", "Do you have an invitation code from another driver?": "Başka bir sürücüden davet kodunuz var mı?", "Paste the code here": "Kodu buraya yapıştır", "No, I don't have a code": "Hayır, kodum yok", "Code approved": "Kod onaylandı", "Install our app:": "Uygulamamızı yükle:", "Invite another driver and both get a gift after he completes 100 trips!": "Başka bir sürücüyü davet et, 100 yolculuk tamamlayınca ikiniz de kazanın!", "Invite": "Davet Et", "Are you sure?": "Emin misiniz?", "This will delete all recorded files from your device.": "Bu işlem cihazınızdaki tüm kayıtlı dosyaları silecek.", "Select a file": "Dosya seç", "Select a File": "Dosya Seç", "Delete": "Sil", "attach audio of complain": "şikayet ses kaydını ekle", "Phone Number Check": "Telefon Numarası Kontrolü", "Drivers received orders": "Sürücüler siparişleri aldı", "No audio files recorded.": "Ses dosyası kaydedilmedi.", "This is for delivery or a motorcycle.": "Bu teslimat veya motosiklet içindir.", "Intaleq Reminder": "Intaleq Hatırlatıcı", "It's time to check the Intaleq app!": "Intaleq uygulamasını kontrol etme zamanı!", "you must insert token code": "token kodunu girmelisiniz", "Something went wrong. Please try again.": "Bir şeyler ters gitti. Lütfen tekrar deneyin.", "Trip Details": "Yolculuk Detayları", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "Şikayet detayı yok, çözüm sunamıyorum. Lütfen bilgi sağlayın.", "Submit Your Complaint": "Şikayetinizi Gönderin", "Status": "Durum", "Choose from contact": "Rehberden seç", "attach correct audio": "doğru sesi ekle", "be sure": "emin olun", "Audio uploaded successfully.": "Ses başarıyla yüklendi.", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "En yeni model araçlar ve rota özgürlüğü isteyen yolcular için mükemmel", "Share this code with your friends and earn rewards when they use it!": "Bu kodu arkadaşlarınla paylaş ve kullandıklarında ödül kazan!", "Enter phone": "Telefon gir", "complete, you can claim your gift": "tamamlandı, hediyeni alabilirsin", "When": "Ne zaman", "Enter driver's phone": "Sürücü telefonunu gir", "Send Invite": "Davet Gönder", "Show Invitations": "Davetleri Göster", "License Type": "Ehliyet Sınıfı", "National Number": "T.C. Kimlik No", "Name (Arabic)": "Ad (Arapça)", "Name (English)": "Ad (İngilizce)", "Address": "Adres", "Issue Date": "Veriliş Tarihi", "Expiry Date": "Geçerlilik Tarihi", "License Categories": "Ehliyet Kategorileri", "driver_license": "ehliyet", "Capture an Image of Your Driver License": "Ehliyetinizin Fotoğrafını Çekin", "ID Documents Back": "Kimlik Arka Yüzü", "National ID": "T.C. Kimlik", "Occupation": "Meslek", "Religion": "Din", "Full Name (Marital)": "Tam Ad", "Expiration Date": "Son Kullanma Tarihi", "Capture an Image of Your ID Document Back": "Kimliğinizin Arka Yüzünün Fotoğrafını Çekin", "ID Documents Front": "Kimlik Ön Yüzü", "First Name": "Ad", "CardID": "Kart No", "Vehicle Details Front": "Araç Detayları Ön", "Plate Number": "Plaka No", "Owner Name": "Ruhsat Sahibi", "Vehicle Details Back": "Araç Detayları Arka", "Make": "Marka", "Model": "Model", "Year": "Yıl", "Chassis": "Şasi No", "Color": "Renk", "Displacement": "Motor Hacmi", "Fuel": "Yakıt", "Tax Expiry Date": "Vergi Bitiş Tarihi", "Inspection Date": "Muayene Tarihi", "Capture an Image of Your car license back": "Ruhsatınızın Arka Yüzünün Fotoğrafını Çekin", "Capture an Image of Your Driver's License": "Ehliyetinizin Fotoğrafını Çekin", "Sign in with Google for easier email and name entry": "Daha kolay giriş için Google ile bağlanın", "You will choose allow all the time to be ready receive orders": "Sipariş almak için 'Her zaman izin ver'i seçmelisiniz", "Get to your destination quickly and easily.": "Hedefinize hızlı ve kolayca ulaşın.", "Enjoy a safe and comfortable ride.": "Güvenli ve konforlu bir yolculuğun tadını çıkarın.", "Choose Language": "Dil Seçin", "Pay with Wallet": "Cüzdan ile Öde", "Invalid MPIN": "Geçersiz MPIN", "Invalid OTP": "Geçersiz Kod", "Enter your email address": "E-posta adresinizi girin", "Please enter Your Email.": "Lütfen e-postanızı girin.", "Enter your phone number": "Telefon numaranızı girin", "Please enter your phone number.": "Lütfen telefon numaranızı girin.", "Please enter Your Password.": "Lütfen şifrenizi girin.", "if you dont have account": "hesabınız yoksa", "Register": "Kayıt Ol", "Accept Ride's Terms & Review Privacy Notice": "Şartları Kabul Et & Gizliliği İncele", "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "Aşağıdaki 'Kabul Ediyorum' seçeneği ile şartları kabul etmiş ve 18 yaşından büyük olduğumu onaylamış olurum.", "First name": "Ad", "Enter your first name": "Adınızı girin", "Please enter your first name.": "Lütfen adınızı girin.", "Last name": "Soyad", "Enter your last name": "Soyadınızı girin", "Please enter your last name.": "Lütfen soyadınızı girin.", "City": "Şehir", "Please enter your City.": "Lütfen Şehrinizi girin.", "Verify Email": "E-postayı Doğrula", "We sent 5 digit to your Email provided": "E-postanıza 5 haneli kod gönderdik", "5 digit": "5 haneli", "Send Verification Code": "Doğrulama Kodu Gönder", "Your Ride Duration is ": "Yolculuk Süreniz: ", "You will be thier in": "Şu sürede orada olacaksınız:", "You trip distance is": "Yolculuk mesafesi:", "Fee is": "Ücret:", "From : ": "Nereden: ", "To : ": "Nereye: ", "Add Promo": "Promosyon Ekle", "Confirm Selection": "Seçimi Onayla", "distance is": "mesafe:", "Privacy Policy": "Gizlilik Politikası", "Intaleq LLC": "Intaleq Ltd. Şti.", "Syria's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "Türkiye'nin öncü araç paylaşım hizmeti.", "Intaleq is the first ride-sharing app in Syria, designed to connect you with the nearest drivers for a quick and convenient travel experience.": "Intaleq, sizi en yakın sürücülerle buluşturan ilk uygulamadır.", "Why Choose Intaleq?": "Neden Intaleq?", "Closest to You": "Size En Yakın", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "Daha hızlı alım ve yolculuk için sizi en yakın sürücülere bağlıyoruz.", "Uncompromising Security": "Tavizsiz Güvenlik", "Lady Captains Available": "Kadın Kaptanlar Mevcut", "Recorded Trips (Voice & AI Analysis)": "Kaydedilen Yolculuklar (Ses & YZ Analizi)", "Fastest Complaint Response": "En Hızlı Şikayet Yanıtı", "Our dedicated customer service team ensures swift resolution of any issues.": "Müşteri hizmetleri ekibimiz sorunları hızla çözer.", "Affordable for Everyone": "Herkes İçin Uygun Fiyatlı", "Frequently Asked Questions": "Sıkça Sorulan Sorular", "Getting Started": "Başlarken", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "Uygulamayı açın, hedefi girin ve \"Yolculuk İste\"ye dokunun.", "Vehicle Options": "Araç Seçenekleri", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "Intaleq; Ekonomi, Konfor ve Lüks gibi çeşitli seçenekler sunar.", "Payments": "Ödemeler", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "Nakit veya kartla ödeyebilirsiniz. Onaylamadan önce yöntemi seçin.", "Ride Management": "Yolculuk Yönetimi", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "Evet, iptal edebilirsiniz ancak iptal ücreti uygulanabilir.", "For Drivers": "Sürücüler İçin", "Driver Registration": "Sürücü Kaydı", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "Sürücü olmak için web sitemizi ziyaret edin veya destekle görüşün.", "Visit Website/Contact Support": "Web Sitesini Ziyaret Et/Desteğe Ulaş", "Close": "Kapat", "We are searching for the nearest driver": "En yakın sürücüyü arıyoruz", "Communication": "İletişim", "How do I communicate with the other party (passenger/driver)?": "Diğer taraf (yolcu/sürücü) ile nasıl iletişim kurarım?", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "Yolculuk onaylandığında uygulama içi sohbeti kullanabilirsiniz.", "Safety & Security": "Güvenlik & Emniyet", "What safety measures does Intaleq offer?": "Intaleq hangi güvenlik önlemlerini sunuyor?", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "Sürücü doğrulama, yolculuk takibi ve acil durum kişileri gibi özellikler sunuyoruz.", "Enjoy competitive prices across all trip options, making travel accessible.": "Tüm seçeneklerde rekabetçi fiyatların tadını çıkarın.", "Variety of Trip Choices": "Yolculuk Seçeneği Çeşitliliği", "Choose the trip option that perfectly suits your needs and preferences.": "İhtiyaçlarınıza mükemmel uyan seçeneği tercih edin.", "Your Choice, Our Priority": "Sizin Seçiminiz, Bizim Önceliğimiz", "Because we are near, you have the flexibility to choose the ride that works best for you.": "Size yakın olduğumuz için en uygun yolculuğu seçme esnekliğine sahipsiniz.", "duration is": "süre:", "Setting": "Ayar", "Find answers to common questions": "Sık sorulan soruların cevaplarını bul", "I don't need a ride anymore": "Artık yolculuğa ihtiyacım yok", "I was just trying the application": "Sadece uygulamayı deniyordum", "No driver accepted my request": "Hiçbir sürücü isteğimi kabul etmedi", "I added the wrong pick-up/drop-off location": "Yanlış konum ekledim", "I don't have a reason": "Bir sebebim yok", "Can we know why you want to cancel Ride ?": "Neden iptal etmek istediğinizi öğrenebilir miyiz?", "Add Payment Method": "Ödeme Yöntemi Ekle", "Ride Wallet": "Yolculuk Cüzdanı", "Payment Method": "Ödeme Yöntemi", "Type here Place": "Yeri buraya yaz", "Are You sure to ride to": "Şuraya gitmek istediğinize emin misiniz:", "Confirm": "Onayla", "You are Delete": "Siliyorsunuz", "Deleted": "Silindi", "You Dont Have Any places yet !": "Henüz kayıtlı yeriniz yok!", "From : Current Location": "Nereden: Mevcut Konum", "My Cared": "Kartlarım", "Add Card": "Kart Ekle", "Add Credit Card": "Kredi Kartı Ekle", "Please enter the cardholder name": "Kart sahibinin adını girin", "Please enter the expiry date": "Son kullanma tarihini girin", "Please enter the CVV code": "CVV kodunu girin", "Go To Favorite Places": "Favori Yerlere Git", "Go to this Target": "Bu Hedefe Git", "My Profile": "Profilim", "Are you want to go to this site": "Bu konuma gitmek istiyor musunuz?", "MyLocation": "Konumum", "my location": "konumum", "Target": "Hedef", "You Should choose rate figure": "Puan seçmelisiniz", "Login Captin": "Kaptan Girişi", "Register Captin": "Kaptan Kaydı", "Send Verfication Code": "Doğrulama Kodu Gönder", "KM": "KM", "End Ride": "Yolculuğu Bitir", "Minute": "Dakika", "Go to passenger Location now": "Yolcu Konumuna Git", "Duration of the Ride is ": "Yolculuk Süresi: ", "Distance of the Ride is ": "Yolculuk Mesafesi: ", "Name of the Passenger is ": "Yolcunun Adı: ", "Hello this is Captain": "Merhaba, ben Kaptan", "Start the Ride": "Yolculuğu Başlat", "Please Wait If passenger want To Cancel!": "Lütfen Bekleyin, yolcu iptal etmek isteyebilir!", "Total Duration:": "Toplam Süre:", "Active Duration:": "Aktif Süre:", "Waiting for Captin ...": "Kaptan Bekleniyor...", "Age is ": "Yaş: ", "Rating is ": "Puan: ", " to arrive you.": " size ulaşmak için.", "Tariff": "Tarife", "Settings": "Ayarlar", "Feed Back": "Geri Bildirim", "Please enter a valid 16-digit card number": "Lütfen geçerli 16 haneli kart numarasını girin", "Add Phone": "Telefon Ekle", "You dont Add Emergency Phone Yet!": "Henüz Acil Durum Telefonu Eklemediniz!", "You will arrive to your destination after ": "Hedefe varış süreniz: ", "You can cancel Ride now": "Yolculuğu şimdi iptal edebilirsiniz", "You Can cancel Ride After Captain did not come in the time": "Kaptan zamanında gelmezse iptal edebilirsiniz", "If you in Car Now. Press Start The Ride": "Şu an araçtaysanız, Yolculuğu Başlat'a basın", "You Dont Have Any amount in": "Hiç bakiyeniz yok:", "Wallet!": "Cüzdan!", "You Have": "Bakiyeniz:", "Save Credit Card": "Kredi Kartını Kaydet", "Show Promos": "Promosyonları Göster", "10 and get 4% discount": "10 ve %4 indirim al", "20 and get 6% discount": "20 ve %6 indirim al", "40 and get 8% discount": "40 ve %8 indirim al", "100 and get 11% discount": "100 ve %11 indirim al", "Pay with Your PayPal": "PayPal ile Öde", "You will choose one of above !": "Yukarıdakilerden birini seçmelisiniz!", "Edit Profile": "Profili Düzenle", "Copy this Promo to use it in your Ride!": "Bu Promosyonu kopyalayıp kullanın!", "To change some Settings": "Bazı Ayarları değiştirmek için", "Order Request Page": "Sipariş İstek Sayfası", "Rouats of Trip": "Yolculuk Rotaları", "Passenger Name is ": "Yolcu Adı: ", "Total From Passenger is ": "Yolcu Tutarı: ", "Duration To Passenger is ": "Yolcuya Varış Süresi: ", "Distance To Passenger is ": "Yolcuya Mesafe: ", "Total For You is ": "Size Ödenecek: ", "Distance is ": "Mesafe: ", " KM": " KM", "Duration of Trip is ": "Yolculuk Süresi: ", " Minutes": " Dakika", "Apply Order": "Siparişi Kabul Et", "Refuse Order": "Siparişi Reddet", "Rate Captain": "Kaptanı Puanla", "Enter your Note": "Notunu gir", "Type something...": "Bir şeyler yaz...", "Submit rating": "Puanı gönder", "Rate Passenger": "Yolcuyu Puanla", "Ride Summary": "Yolculuk Özeti", "welcome_message": "Intaleq'e Hoş Geldiniz!", "app_description": "Intaleq güvenli, güvenilir ve erişilebilir bir araç çağırma uygulamasıdır.", "get_to_destination": "Hedefinize hızlı ve kolay ulaşın.", "get_a_ride": "Intaleq ile dakikalar içinde araç bulun.", "safe_and_comfortable": "Güvenli ve konforlu yolculuğun tadını çıkarın.", "committed_to_safety": "Güvenliğe önem veriyoruz, tüm kaptanlarımız kontrolden geçer.", "your ride is Accepted": "yolculuğunuz Kabul Edildi", "Driver is waiting at pickup.": "Sürücü alım noktasında bekliyor.", "Driver is on the way": "Sürücü yolda", "Contact Options": "İletişim Seçenekleri", "Send a custom message": "Özel mesaj gönder", "Type your message": "Mesajını yaz", "I will go now": "Şimdi gidiyorum", "You Have Tips": "Bahşişiniz var", " tips\nTotal is": " bahşiş\nToplam:", "Your fee is ": "Ücretiniz: ", "Do you want to pay Tips for this Driver": "Bu Sürücüye Bahşiş vermek ister misiniz?", "Tip is ": "Bahşiş: ", "Are you want to wait drivers to accept your order": "Sürücülerin siparişinizi kabul etmesini beklemek ister misiniz?", "This price is fixed even if the route changes for the driver.": "Bu fiyat rota değişse bile sabittir.", "The price may increase if the route changes.": "Rota değişirse fiyat artabilir.", "The captain is responsible for the route.": "Rota sorumluluğu kaptandadır.", "We are search for nearst driver": "En yakın sürücüyü arıyoruz", "Your order is being prepared": "Siparişiniz hazırlanıyor", "The drivers are reviewing your request": "Sürücüler isteğinizi inceliyor", "Your order sent to drivers": "Siparişiniz sürücülere gönderildi", "You can call or record audio of this trip": "Arama yapabilir veya ses kaydedebilirsiniz", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "Yolculuk başladı! Acil numaraları aramaktan, yolculuğu paylaşmaktan veya ses kaydı almaktan çekinmeyin.", "Camera Access Denied.": "Kamera Erişimi Reddedildi.", "Open Settings": "Ayarları Aç", "GPS Required Allow !.": "GPS Gerekli, İzin Ver!", "Your Account is Deleted": "Hesabınız Silindi", "Are you sure to delete your account?": "Hesabınızı silmek istediğinize emin misiniz?", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "Verileriniz 2 hafta sonra silinecek\nVe 1 ay sonra uygulamayı kullanamayacaksınız", "Enter Your First Name": "Adınızı Girin", "Are you Sure to LogOut?": "Çıkış Yapmak İstediğinize Emin misiniz?", "Email Wrong": "E-posta Yanlış", "Email you inserted is Wrong.": "Girdiğiniz e-posta yanlış.", "You have finished all times ": "Tüm haklarınızı doldurdunuz ", "if you want help you can email us here": "yardım isterseniz bize e-posta atabilirsiniz", "Thanks": "Teşekkürler", "Email Us": "Bize E-posta Gönder", "I cant register in your app in face detection ": "Yüz algılamada sorun yaşıyorum, kayıt olamıyorum", "Hi": "Selam", "No face detected": "Yüz algılanmadı", "Image detecting result is ": "Görüntü algılama sonucu: ", "from 3 times Take Attention": "3 denemeden, Dikkat Edin", "Be sure for take accurate images please\nYou have": "Lütfen net fotoğraflar çekin\nKalan hakkınız:", "image verified": "görüntü doğrulandı", "Next": "İleri", "There is no help Question here": "Burada yardım sorusu yok", "You dont have Points": "Puanınız yok", "You Are Stopped For this Day !": "Bugünlük durduruldunuz!", "You must be charge your Account": "Hesabınıza yükleme yapmalısınız", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "Bugün 3 yolculuğu reddettiniz, sebep bu \nYarın görüşürüz!", "Recharge my Account": "Hesabımı Doldur", "Ok , See you Tomorrow": "Tamam, Yarın Görüşürüz", "You are Stopped": "Durduruldunuz", "Connected": "Bağlı", "Not Connected": "Bağlı Değil", "Your are far from passenger location": "Yolcu konumundan uzaksınız", "go to your passenger location before\nPassenger cancel trip": "yolcu iptal etmeden konumuna gidin", "You will get cost of your work for this trip": "Bu yolculuk için emeğinizin karşılığını alacaksınız", " in your wallet": " cüzdanınızda", "you gain": "kazandınız", "Order Cancelled by Passenger": "Sipariş Yolcu Tarafından İptal Edildi", "Feedback data saved successfully": "Geri bildirim başarıyla kaydedildi", "No Promo for today .": "Bugün için Promosyon yok.", "Select your destination": "Varış noktasını seç", "Search for your Start point": "Başlangıç noktasını ara", "Search for waypoint": "Ara nokta ara", "Current Location": "Mevcut Konum", "Add Location 1": "Konum 1 Ekle", "You must Verify email !.": "E-postayı doğrulamalısınız!", "Cropper": "Kırpıcı", "Saved Sucssefully": "Başarıyla Kaydedildi", "Select Date": "Tarih Seç", "Birth Date": "Doğum Tarihi", "Ok": "Tamam", "the 500 points equal 30 JOD": "500 puan 30 TL eder", "the 500 points equal 30 JOD for you \nSo go and gain your money": "500 puan senin için 30 TL eder \nHadi paranı kazan", "token updated": "token güncellendi", "Add Location 2": "Konum 2 Ekle", "Add Location 3": "Konum 3 Ekle", "Add Location 4": "Konum 4 Ekle", "Waiting for your location": "Konumunuz bekleniyor", "Search for your destination": "Varış yerini ara", "Hi! This is": "Merhaba! Bu", " I am using": " kullanıyorum", " to ride with": " şununla yolculuk yapmak için:", " as the driver.": " sürücü olarak.", "is driving a ": "bir araç kullanıyor: ", " with license plate ": " plaka: ", " I am currently located at ": " Şu anki konumum: ", "Please go to Car now ": "Lütfen şimdi Araca gidin ", "You will receive a code in WhatsApp Messenger": "WhatsApp üzerinden bir kod alacaksınız", "If you need assistance, contact us": "Yardıma ihtiyacınız varsa bize ulaşın", "Promo Ended": "Promosyon Sona Erdi", "Enter the promo code and get": "Promosyon kodunu gir ve kazan:", "DISCOUNT": "İNDİRİM", "No wallet record found": "Cüzdan kaydı bulunamadı", "for": "için", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "Intaleq, kaptanlar ve yolcular için birçok özellik sunan en güvenli araç paylaşım uygulamasıdır. Sadece %8 komisyon oranıyla en iyi değeri almanızı sağlıyoruz. En iyi kaptanlar için sigorta, düzenli araç bakımı ve yol yardımı hizmetleri sunuyoruz.", "You can contact us during working hours from 12:00 - 19:00.": "Bize 12:00 - 19:00 saatleri arasında ulaşabilirsiniz.", "Choose a contact option": "İletişim seçeneği belirleyin", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "Çalışma saatleri 12:00 - 19:00.\nWhatsApp mesajı veya e-posta gönderebilirsiniz.", "Promo code copied to clipboard!": "Promosyon kodu panoya kopyalandı!", "Copy Code": "Kodu Kopyala", "Your invite code was successfully applied!": "Davet kodunuz başarıyla uygulandı!", "Payment Options": "Ödeme Seçenekleri", "wait 1 minute to receive message": "mesajı almak için 1 dakika bekleyin", "You have copied the promo code.": "Promosyon kodunu kopyaladınız.", "Select Payment Amount": "Ödeme Tutarını Seç", "The promotion period has ended.": "Promosyon süresi doldu.", "Promo Code Accepted": "Promosyon Kodu Kabul Edildi", "Tap on the promo code to copy it!": "Kopyalamak için koda dokunun!", "Lowest Price Achieved": "En Düşük Fiyata Ulaşıldı", "Cannot apply further discounts.": "Daha fazla indirim uygulanamaz.", "Promo Already Used": "Promosyon Zaten Kullanıldı", "Invitation Used": "Davet Kullanıldı", "You have already used this promo code.": "Bu promosyon kodunu zaten kullandınız.", "Insert Your Promo Code": "Promosyon Kodunu Gir", "Enter promo code here": "Promosyon kodunu buraya girin", "Please enter a valid promo code": "Lütfen geçerli bir promosyon kodu girin", "Awfar Car": "Ekonomik Araç", "Old and affordable, perfect for budget rides.": "Eski ve uygun fiyatlı, bütçe dostu yolculuklar için mükemmel.", " If you need to reach me, please contact the driver directly at": " Bana ulaşmanız gerekirse, lütfen sürücüyle şu numaradan iletişime geçin:", "No Car or Driver Found in your area.": "Bölgenizde Araç veya Sürücü Bulunamadı.", "Please Try anther time ": "Lütfen başka zaman deneyin ", "There no Driver Aplly your order sorry for that ": "Siparişinize başvuran sürücü yok, üzgünüz ", "Trip Cancelled": "Yolculuk İptal Edildi", "The Driver Will be in your location soon .": "Sürücü yakında konumunuzda olacak.", "The distance less than 500 meter.": "Mesafe 500 metreden az.", "Promo End !": "Promosyon Bitti!", "There is no notification yet": "Henüz bildirim yok", "Use Touch ID or Face ID to confirm payment": "Ödemeyi onaylamak için Touch ID veya Face ID kullanın", "Contact us for any questions on your order.": "Siparişinizle ilgili sorular için bize ulaşın.", "Pyament Cancelled .": "Ödeme İptal Edildi.", "type here": "buraya yazın", "Scan Driver License": "Ehliyeti Tara", "Please put your licence in these border": "Lütfen ehliyetinizi bu çerçeveye yerleştirin", "Camera not initialized yet": "Kamera henüz başlatılmadı", "Take Image": "Fotoğraf Çek", "AI Page": "YZ Sayfası", "Take Picture Of ID Card": "Kimlik Kartı Fotoğrafı Çek", "Take Picture Of Driver License Card": "Ehliyet Fotoğrafı Çek", "We are process picture please wait ": "Fotoğrafı işliyoruz lütfen bekleyin ", "There is no data yet.": "Henüz veri yok.", "Name :": "Ad:", "Drivers License Class: ": "Ehliyet Sınıfı: ", "Document Number: ": "Belge No: ", "Address: ": "Adres: ", "Height: ": "Boy: ", "Expiry Date: ": "Son Kullanma Tarihi: ", "Date of Birth: ": "Doğum Tarihi: ", "You can't continue with us .\nYou should renew Driver license": "Bizimle devam edemezsiniz.\nEhliyetinizi yenilemelisiniz", "Detect Your Face ": "Yüzünüzü Algılayın ", "Go to next step\nscan Car License.": "Sonraki adıma git\nRuhsatı tara.", "Name in arabic": "Arapça Ad", "Drivers License Class": "Ehliyet Sınıfı", "Selected Date": "Seçilen Tarih", "Select Time": "Zaman Seç", "Selected Time": "Seçilen Zaman", "Selected Date and Time": "Seçilen Tarih ve Saat", "Lets check Car license ": "Hadi Ruhsatı kontrol edelim ", "Car": "Araç", "Plate": "Plaka", "Rides": "Yolculuklar", "Selected driver": "Seçilen sürücü", "Lets check License Back Face": "Hadi Ehliyet Arka Yüzünü kontrol edelim", "Car License Card": "Ruhsat Kartı", "No image selected yet": "Henüz resim seçilmedi", "Made :": "Marka:", "model :": "Model:", "VIN :": "Şasi No:", "year :": "Yıl:", "ُExpire Date": "Son Kullanma Tarihi", "Login Driver": "Sürücü Girişi", "Password must br at least 6 character.": "Şifre en az 6 karakter olmalıdır.", "if you don't have account": "hesabınız yoksa", "Here recorded trips audio": "Burada kaydedilen yolculuk sesleri", "Register as Driver": "Sürücü olarak Kayıt Ol", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "Aşağıdaki \"Kabul Ediyorum\" seçeneği ile Kullanım Şartlarını inceleyip kabul ettiğimi ve şunu onayladığımı beyan ederim: ", "Log Out Page": "Çıkış Sayfası", "Log Off": "Oturumu Kapat", "Register Driver": "Sürücü Kaydı", "Verify Email For Driver": "Sürücü İçin E-postayı Doğrula", "Admin DashBoard": "Yönetici Paneli", "Your name": "Adınız", "your ride is applied": "yolculuğunuz başvuruldu", "H and": "S ve", "JOD": "TL", "m": "dk", "We search nearst Driver to you": "Size en yakın sürücüyü arıyoruz", "please wait till driver accept your order": "sürücü siparişinizi kabul edene kadar bekleyin", "No accepted orders? Try raising your trip fee to attract riders.": "Kabul eden yok mu? Ücreti artırmayı deneyin.", "You should select one": "Birini seçmelisiniz", "The driver accept your order for": "Sürücü siparişinizi şu fiyata kabul etti:", "The driver on your way": "Sürücü yolda", "Total price from ": "Toplam fiyat: ", "Order Details Intaleq": "Sipariş Detayları Intaleq", "Selected file:": "Seçilen dosya:", "Your trip cost is": "Yolculuk maliyetiniz:", "this will delete all files from your device": "bu işlem cihazınızdaki tüm dosyaları silecek", "Exclusive offers and discounts always with the Intaleq app": "Özel teklifler ve indirimler her zaman Intaleq uygulamasında", "Submit Question": "Soru Gönder", "Please enter your Question.": "Lütfen Sorunuzu girin.", "Help Details": "Yardım Detayları", "No trip yet found": "Henüz yolculuk bulunamadı", "No Response yet.": "Henüz Yanıt yok.", " You Earn today is ": " Bugün Kazandığınız: ", " You Have in": " Hesabınızdaki:", "Total points is ": "Toplam puan: ", "Total Connection Duration:": "Toplam Bağlantı Süresi:", "Passenger name : ": "Yolcu adı: ", "Cost Of Trip IS ": "Yolculuk Maliyeti: ", "Arrival time": "Varış zamanı", "arrival time to reach your point": "noktanıza varış zamanı", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Intaleq ve scooter yolculukları için fiyat dinamiktir. Konfor için zaman ve mesafeye dayalıdır.", "Hello this is Driver": "Merhaba ben Sürücü", "Is the Passenger in your Car ?": "Yolcu Aracınızda mı?", "Please wait for the passenger to enter the car before starting the trip.": "Lütfen yolculuğu başlatmadan önce yolcunun araca binmesini bekleyin.", "No ,still Waiting.": "Hayır, hâlâ bekliyorum.", "I arrive you": "Sana ulaştım", "I Arrive your site": "Konumunuza ulaştım", "You are not in near to passenger location": "Yolcu konumuna yakın değilsiniz", "please go to picker location exactly": "lütfen tam olarak alım noktasına gidin", "You Can Cancel Trip And get Cost of Trip From": "Yolculuğu İptal Edip Ücretini Şuradan Alabilirsiniz:", "Are you sure to cancel?": "İptal etmek istediğinize emin misiniz?", "Insert Emergincy Number": "Acil Durum Numarası Gir", "Best choice for comfort car and flexible route and stops point": "Konforlu araç ve esnek rota için en iyi seçim", "Insert": "Ekle", "This is for scooter or a motorcycle.": "Bu scooter veya motosiklet içindir.", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "Sabit fiyatlı doğrudan yolculuk. Sürücü planlanan rotayı izlemelidir.", "You can decline a request without any cost": "Bir isteği ücretsiz reddedebilirsiniz", "Perfect for adventure seekers who want to experience something new and exciting": "Yeni ve heyecanlı bir şey denemek isteyen maceraperestler için mükemmel", "My current location is:": "Mevcut konumum:", "and I have a trip on": "ve şurada bir yolculuğum var:", "App with Passenger": "Yolcu ile Uygulama", "You will be pay the cost to driver or we will get it from you on next trip": "Sürücüye ödeme yapacaksınız veya bir sonraki yolculukta sizden alacağız", "Trip has Steps": "Yolculuğun Adımları Var", "Distance from Passenger to destination is ": "Yolcudan hedefe mesafe: ", "price is": "fiyat:", "This ride type does not allow changes to the destination or additional stops": "Bu yolculuk türü hedef değişikliğine veya ek duraklara izin vermez", "This price may be changed": "Bu fiyat değişebilir", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "SIM kart yok mu, sorun değil! Uygulamamız üzerinden sürücünüzü doğrudan arayın.", "This ride type allows changes, but the price may increase": "Bu tür değişikliklere izin verir ancak fiyat artabilir", "Select one message": "Bir mesaj seç", "I'm waiting for you": "Sizi bekliyorum", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "Intaleq aracının 100 km/s hızını aştığını fark ettik. Lütfen yavaşlayın.", "Warning: Intaleqing detected!": "Uyarı: Hız tespit edildi!", "Please help! Contact me as soon as possible.": "Lütfen yardım edin! Bana hemen ulaşın.", "Share Trip Details": "Yolculuk Detaylarını Paylaş", "Car Plate is ": "Araç Plakası: ", "the 300 points equal 300 L.E for you \nSo go and gain your money": "300 puan senin için 300 TL eder \nHadi paranı kazan", "the 300 points equal 300 L.E": "300 puan 300 TL eder", "The payment was not approved. Please try again.": "Ödeme onaylanmadı. Lütfen tekrar deneyin.", "Payment Failed": "Ödeme Başarısız", "This is a scheduled notification.": "Bu planlanmış bir bildirimdir.", "An error occurred during the payment process.": "Ödeme işlemi sırasında bir hata oluştu.", "The payment was approved.": "Ödeme onaylandı.", "Payment Successful": "Ödeme Başarılı", "No ride found yet": "Henüz araç bulunamadı", "Accept Order": "Siparişi Kabul Et", "Bottom Bar Example": "Alt Çubuk Örneği", "Driver phone": "Sürücü telefonu", "Statistics": "İstatistikler", "Origin": "Başlangıç", "Destination": "Varış", "Driver Name": "Sürücü Adı", "Driver Car Plate": "Sürücü Plakası", "Available for rides": "Yolculuklar için müsait", "Scan Id": "Kimlik Tara", "Camera not initilaized yet": "Kamera henüz başlatılmadı", "Scan ID MklGoogle": "Kimlik Tara MklGoogle", "Language": "Dil", "Jordan": "Ürdün", "USA": "ABD", "Egypt": "Mısır", "Turkey": "Türkiye", "Saudi Arabia": "Suudi Arabistan", "Qatar": "Katar", "Bahrain": "Bahreyn", "Kuwait": "Kuveyt", "But you have a negative salary of": "Ancak negatif maaşınız var:", "Promo Code": "Promosyon Kodu", "Your trip distance is": "Yolculuk mesafeniz:", "Enter promo code": "Promosyon kodu gir", "You have promo!": "Promosyonun var!", "Cost Duration": "Maliyet Süresi", "Duration is": "Süre:", "Leave": "Ayrıl", "Join": "Katıl", "Heading your way now. Please be ready.": "Sana doğru geliyorum. Lütfen hazır ol.", "Approaching your area. Should be there in 3 minutes.": "Bölgene yaklaşıyorum. 3 dakika içinde orada olmalıyım.", "There's heavy traffic here. Can you suggest an alternate pickup point?": "Burada trafik yoğun. Alternatif bir alım noktası önerebilir misin?", "This ride is already taken by another driver.": "Bu yolculuk başka bir sürücü tarafından alınmış.", "You Should be select reason.": "Bir sebep seçmelisiniz.", "Waiting for Driver ...": "Sürücü Bekleniyor...", "Latest Recent Trip": "En Son Yolculuk", "from your list": "listenden", "Do you want to change Work location": "İş konumunu değiştirmek istiyor musunuz?", "Do you want to change Home location": "Ev konumunu değiştirmek istiyor musunuz?", "We Are Sorry That we dont have cars in your Location!": "Üzgünüz, konumunuzda aracımız yok!", "Choose from Map": "Haritadan Seç", "Pick your ride location on the map - Tap to confirm": "Haritada konumunu seç - Onaylamak için dokun", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "Intaleq güvenli, güvenilir ve erişilebilir araç çağırma uygulamasıdır.", "With Intaleq, you can get a ride to your destination in minutes.": "Intaleq ile dakikalar içinde hedefinize araç bulabilirsiniz.", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "Intaleq güvenliğe önem verir, tüm kaptanlarımız dikkatle incelenir.", "Pick from map": "Haritadan seç", "No Car in your site. Sorry!": "Konumunuzda araç yok. Üzgünüz!", "Nearest Car for you about ": "Size en yakın araç yaklaşık: ", "From :": "Nereden:", "Get Details of Trip": "Yolculuk Detaylarını Al", "If you want add stop click here": "Durak eklemek istiyorsanız buraya tıklayın", "Where you want go ": "Nereye gitmek istiyorsunuz ", "My Card": "Kartım", "Start Record": "Kaydı Başlat", "History of Trip": "Yolculuk Geçmişi", "Helping Center": "Yardım Merkezi", "Record saved": "Kayıt kaydedildi", "Trips recorded": "Kaydedilen Yolculuklar", "Select Your Country": "Ülkenizi Seçin", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "En doğru bilgiyi almak için lütfen ülkenizi seçin.", "Are you sure to delete recorded files": "Kayıtlı dosyaları silmek istediğinize emin misiniz?", "Select recorded trip": "Kaydedilen yolculuğu seç", "Card Number": "Kart Numarası", "Hi, Where to ": "Selam, Nereye ", "Pick your destination from Map": "Haritadan varış yerini seç", "Add Stops": "Durak Ekle", "Get Direction": "Yol Tarifi Al", "Add Location": "Konum Ekle", "Switch Rider": "Yolcuyu Değiştir", "You will arrive to your destination after timer end.": "Süre bittikten sonra hedefe varacaksınız.", "You can cancel trip": "Yolculuğu iptal edebilirsiniz", "The driver waitting you in picked location .": "Sürücü sizi seçilen konumda bekliyor.", "Pay with Your": "Şununla Öde:", "Pay with Credit Card": "Kredi Kartı ile Öde", "Show Promos to Charge": "Yükleme için Promosyonları Göster", "Point": "Puan", "How many hours would you like to wait?": "Kaç saat beklemek istersiniz?", "Driver Wallet": "Sürücü Cüzdanı", "Choose between those Type Cars": "Bu Araç Tipleri Arasından Seçin", "hour": "saat", "Select Waiting Hours": "Bekleme Süresini Seç", "Total Points is": "Toplam Puan:", "You will receive a code in SMS message": "SMS ile bir kod alacaksınız", "Done": "Bitti", "Total Budget from trips is ": "Yolculuklardan Toplam Bütçe: ", "Total Amount:": "Toplam Tutar:", "Total Budget from trips by\nCredit card is ": "Kredi kartı ile yolculuklardan\nToplam Bütçe: ", "This amount for all trip I get from Passengers": "Yolculardan aldığım tüm yolculuk tutarı", "Pay from my budget": "Bütçemden öde", "This amount for all trip I get from Passengers and Collected For me in": "Bu tutar yolculardan aldığım ve benim için toplanan", "You can buy points from your budget": "Bütçenizden puan satın alabilirsiniz", "insert amount": "tutar girin", "You can buy Points to let you online\nby this list below": "Çevrimiçi kalmak için Puan satın alabilirsiniz\naşağıdaki listeden", "Create Wallet to receive your money": "Paranızı almak için Cüzdan oluşturun", "Enter your feedback here": "Geri bildiriminizi buraya girin", "Please enter your feedback.": "Lütfen geri bildiriminizi girin.", "Feedback": "Geri Bildirim", "Submit ": "Gönder ", "Click here to Show it in Map": "Haritada Göstermek için Tıkla", "Canceled": "İptal Edildi", "No I want": "Hayır istiyorum", "Email is": "E-posta:", "Phone Number is": "Telefon:", "Date of Birth is": "Doğum Tarihi:", "Sex is ": "Cinsiyet: ", "Car Details": "Araç Detayları", "VIN is": "Şasi No:", "Color is ": "Renk: ", "Make is ": "Marka: ", "Model is": "Model:", "Year is": "Yıl:", "Expiration Date ": "Son Kullanma Tarihi: ", "Edit Your data": "Verilerini Düzenle", "write vin for your car": "aracın şasi numarasını yaz", "VIN": "Şasi No", "Device Change Detected": "Cihaz Değişikliği Algılandı", "Please verify your identity": "Lütfen kimliğinizi doğrulayın", "write Color for your car": "aracın rengini yaz", "write Make for your car": "aracın markasını yaz", "write Model for your car": "aracın modelini yaz", "write Year for your car": "aracın yılını yaz", "write Expiration Date for your car": "aracın son kullanma tarihini yaz", "Tariffs": "Tarifeler", "Minimum fare": "Minimum ücret", "Maximum fare": "Maksimum ücret", "Flag-down fee": "Açılış ücreti", "Including Tax": "Vergi Dahil", "BookingFee": "Rezervasyon Ücreti", "Morning": "Sabah", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "07:30'dan 10:30'a kadar", "Evening": "Akşam", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "12:00'den 15:00'e kadar", "Night": "Gece", "You have in account": "Hesabınızda var", "Select Country": "Ülke Seç", "Ride Today : ": "Bugünkü Yolculuk: ", "After this period\nYou can't cancel!": "Bu süreden sonra\nİptal edemezsiniz!", "from 23:59 till 05:30": "23:59'dan 05:30'a kadar", "Rate Driver": "Sürücüyü Puanla", "Total Cost is ": "Toplam Maliyet: ", "Write note": "Not yaz", "Time to arrive": "Varış zamanı", "Ride Summaries": "Yolculuk Özetleri", "Total Cost": "Toplam Maliyet", "Average of Hours of": "Şu saatlerin ortalaması:", " is ON for this month": " bu ay için AÇIK", "Days": "Günler", "Total Hours on month": "Aydaki Toplam Saat", "Counts of Hours on days": "Günlerdeki Saat Sayısı", "OrderId": "Sipariş No", "created time": "oluşturulma zamanı", "Intaleq Over": "Intaleq Bitti", "I will slow down": "Yavaşlayacağım", "Map Passenger": "Yolcu Haritası", "Be Slowly": "Yavaş Ol", "If you want to make Google Map App run directly when you apply order": "Siparişi uyguladığınızda Google Haritalar'ın direkt açılmasını istiyorsanız", "You can change the language of the app": "Uygulamanın dilini değiştirebilirsiniz", "Your Budget less than needed": "Bütçeniz gerekenden az", "You can change the Country to get all features": "Tüm özellikleri almak için Ülkeyi değiştirebilirsiniz", "Change Country": "Ülke Değiştir" }, "fr": { "Order": "Commande", "OrderVIP": "Commande VIP", "Cancel Trip": "Annuler le trajet", "Passenger Cancel Trip": "Le passager a annulé le trajet", "VIP Order": "Commande VIP", "Hi ,I Arrive your site": "Bonjour, je suis arrivé à votre position", "The driver accepted your trip": "Le chauffeur a accepté votre trajet", "message From passenger": "Message du passager", "Cancel": "Annuler", "Trip Cancelled. The cost of the trip will be added to your wallet.": "Trajet annulé. Les frais seront crédités sur votre portefeuille.", "token change": "Changement de jeton", "face detect": "Détection de visage", "Face Detection Result": "Résultat de la détection de visage", "similar": "Similaire", "not similar": "Non similaire", "Hi ,I will go now": "Bonjour, je pars maintenant", "Passenger come to you": "Le passager vient vers vous", "Call Income": "Appel entrant", "Call Income from Passenger": "Appel entrant du passager", "Criminal Document Required": "Extrait de casier judiciaire requis", "You should have upload it .": "Vous devez le télécharger.", "Call End": "Fin de l'appel", "The order has been accepted by another driver.": "La commande a été acceptée par un autre chauffeur.", "The order Accepted by another Driver": "Commande acceptée par un autre chauffeur", "We regret to inform you that another driver has accepted this order.": "Nous regrettons de vous informer qu'un autre chauffeur a accepté cette commande.", "Driver Applied the Ride for You": "Le chauffeur a demandé le trajet pour vous", "Applied": "Demandé", "Pay by Sham Cash": "Payer via Sham Cash", "Pay with Debit Card": "Payer par carte de débit", "Please go to Car Driver": "Veuillez rejoindre le chauffeur", "Ok I will go now.": "D'accord, j'y vais maintenant.", "Accepted Ride": "Trajet accepté", "Driver Accepted the Ride for You": "Le chauffeur a accepté le trajet pour vous", "Promo": "Promo", "Show latest promo": "Voir les dernières promos", "Trip Monitoring": "Suivi du trajet", "Driver Is Going To Passenger": "Le chauffeur se rend vers le passager", "Please stay on the picked point.": "Veuillez rester au point de prise en charge.", "message From Driver": "Message du chauffeur", "Trip is Begin": "Le trajet commence", "Cancel Trip from driver": "Annulation du trajet par le chauffeur", "We will look for a new driver.\nPlease wait.": "Nous cherchons un nouveau chauffeur.\nVeuillez patienter.", "The driver canceled your ride.": "Le chauffeur a annulé votre course.", "Driver Finish Trip": "Le chauffeur a terminé le trajet", "you will pay to Driver": "Vous paierez au chauffeur", "Don’t forget your personal belongings.": "N'oubliez pas vos effets personnels.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "Veuillez vous assurer d'avoir tous vos effets personnels et que tout solde restant a été ajouté à votre portefeuille avant de partir. Merci d'avoir choisi Intaleq.", "Finish Monitor": "Terminer le suivi", "Trip finished": "Trajet terminé", "Call Income from Driver": "Appel entrant du chauffeur", "Driver Cancelled Your Trip": "Le chauffeur a annulé votre trajet", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "Vous paierez le chauffeur pour son temps, vérifiez votre portefeuille Intaleq", "Order Applied": "Commande appliquée", "welcome to intaleq": "Bienvenue chez Intaleq", "login or register subtitle": "Entrez votre numéro de mobile pour vous connecter ou vous inscrire", "An application error occurred.": "Une erreur d'application s'est produite.", "Submission Failed": "Échec de l'envoi", "Your complaint has been submitted.": "Votre réclamation a été envoyée.", "Failed to connect to the server. Please try again.": "Échec de la connexion au serveur. Veuillez réessayer.", "Ride information not found. Please refresh the page.": "Informations sur le trajet introuvables. Veuillez actualiser la page.", "Please describe your issue before submitting.": "Veuillez décrire votre problème avant d'envoyer.", "An application error occurred during upload.": "Une erreur s'est produite lors du téléchargement.", "Failed to upload audio file.": "Échec du téléchargement du fichier audio.", "Audio uploaded successfully.": "Audio téléchargé avec succès.", "Complaint cannot be filed for this ride. It may not have been completed or started.": "Impossible de déposer une plainte pour ce trajet. Il n'a peut-être pas été terminé ou commencé.", "2. Attach Recorded Audio (Optional)": "2. Joindre un enregistrement audio (Optionnel)", "Please enter a description of the issue.": "Veuillez entrer une description du problème.", "phone number label": "Numéro de téléphone", "phone number required": "Numéro de téléphone requis", "send otp button": "Envoyer le code OTP", "verify your number title": "Vérifiez votre numéro", "otp sent subtitle": "Un code à 5 chiffres a été envoyé au\n@phoneNumber", "verify and continue button": "Vérifier et continuer", "enter otp validation": "Veuillez entrer le code OTP à 5 chiffres", "one last step title": "Une dernière étape", "complete profile subtitle": "Complétez votre profil pour commencer", "first name label": "Prénom", "first name required": "Prénom requis", "last name label": "Nom", "Verify OTP": "Vérifier l'OTP", "Verification Code": "Code de vérification", "We have sent a verification code to your mobile number:": "Nous avons envoyé un code de vérification à votre numéro de mobile :", "Verify": "Vérifier", "Resend Code": "Renvoyer le code", "You can resend in": "Vous pouvez renvoyer dans", "seconds": "secondes", "Error": "Erreur", "Please enter the complete 6-digit code.": "Veuillez entrer le code complet à 6 chiffres.", "last name required": "Nom requis", "email optional label": "Email (Optionnel)", "complete registration button": "Terminer l'inscription", "User with this phone number or email already exists.": "Un utilisateur avec ce numéro ou cet email existe déjà.", "otp sent success": "Code OTP envoyé avec succès.", "failed to send otp": "Échec de l'envoi du code OTP.", "server error try again": "Erreur serveur, veuillez réessayer.", "an error occurred": "Une erreur s'est produite : @error", "otp verification failed": "Échec de la vérification OTP.", "registration failed": "Échec de l'inscription.", "welcome user": "Bienvenue, @firstName !", "Cancel Trip from driver": "Annuler le trajet (Chauffeur)", "We will look for a new driver.\nPlease wait.": "Nous cherchons un nouveau chauffeur.\nVeuillez patienter.", "The driver canceled your ride.": "Le chauffeur a annulé votre course.", "Driver Finish Trip": "Le chauffeur a terminé la course", "you will pay to Driver": "Vous paierez au chauffeur", "Don't forget your personal belongings.": "N'oubliez pas vos effets personnels.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "Veuillez vérifier que vous avez tous vos effets personnels et que tout solde restant a été ajouté à votre portefeuille. Merci d'avoir choisi Intaleq.", "Finish Monitor": "Terminer la surveillance", "Trip finished": "Trajet terminé", "Call Income from Driver": "Appel entrant du chauffeur", "Driver Cancelled Your Trip": "Le chauffeur a annulé votre trajet", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "Vous paierez le temps du chauffeur, consultez votre portefeuille Intaleq", "Order Applied": "Commande passée", "Share App": "Partager l'application", "Wallet": "Portefeuille", "Balance": "Solde", "Don’t forget your personal belongings.": "N'oubliez pas vos effets personnels.", "Profile": "Profil", "Contact Support": "Contacter le support", "Session expired. Please log in again.": "Session expirée. Veuillez vous reconnecter.", "Security Warning": "⚠️ Avertissement de sécurité", "Potential security risks detected. The application may not function correctly.": "Risques de sécurité potentiels détectés. L'application peut ne pas fonctionner correctement.", "please order now": "Commandez maintenant", "Where to": "Où allez-vous ?", "Where are you going?": "Où allez-vous ?", "Quick Actions": "Actions rapides", "My Balance": "Mon solde", "Order History": "Historique des commandes", "Contact Us": "Nous contacter", "Driver": "Chauffeur", "Complaint": "Réclamation", "Promos": "Promos", "Recent Places": "Lieux récents", "From": "De", "WhatsApp Location Extractor": "Extracteur de localisation WhatsApp", "Location Link": "Lien de localisation", "Paste location link here": "Collez le lien de localisation ici", "Go to this location": "Aller à cet endroit", "Paste WhatsApp location link": "Coller le lien de localisation WhatsApp", "Select Order Type": "Sélectionner le type de commande", "Choose who this order is for": "Pour qui est cette commande ?", "I want to order for myself": "Je commande pour moi-même", "I want to order for someone else": "Je commande pour quelqu'un d'autre", "Order for someone else": "Commander pour autrui", "Order for myself": "Commander pour moi", "Are you want to go this site": "Voulez-vous aller à cet endroit ?", "No": "Non", "Pay by Sham Cash": "Payer via Sham Cash", "Intaleq Wallet": "Portefeuille Intaleq", "Have a promo code?": "Avez-vous un code promo ?", "Your Wallet balance is ": "Le solde de votre portefeuille est ", "Cash": "Espèces", "Phone Number": "Numéro de téléphone", "Search country": "Rechercher un pays", "Payment Successful!": "Paiement réussi !", "Your payment was successful.": "Votre paiement a été effectué avec succès.", "Pay directly to the captain": "Payer directement au chauffeur", "Top up Wallet to continue": "Rechargez votre portefeuille pour continuer", "Or pay with Cash instead": "Ou payez en espèces", "Confirm & Find a Ride": "Confirmer et trouver un trajet", "Balance:": "Solde :", "Alerts": "Alertes", "Welcome Back!": "Bon retour !", "Current Balance": "Solde actuel", "Set Wallet Phone Number": "Définir le numéro du portefeuille", "Link a phone number for transfers": "Lier un numéro pour les transferts", "Payment History": "Historique des paiements", "View your past transactions": "Voir vos transactions passées", "Top up Wallet": "Recharger le portefeuille", "Add funds using our secure methods": "Ajouter des fonds via nos méthodes sécurisées", "Driver is waiting": "Le chauffeur attend", "Type your message...": "Tapez votre message...", "Driver Accepted Request": "Le chauffeur a accepté la demande", "Message": "Message", "Call": "Appeler", "Set Phone Number": "Définir le numéro de téléphone", "Select This Ride": "Sélectionner ce trajet", "Call Driver": "Appeler le chauffeur", "Increase Fare": "Augmenter le tarif", "Stop": "Arrêter", "Record": "Enregistrer", "Share": "Partager", "WhatsApp": "WhatsApp", "SOS": "SOS", "No drivers accepted your request yet": "Aucun chauffeur n'a encore accepté votre demande", "Increasing the fare might attract more drivers. Would you like to increase the price?": "Augmenter le tarif pourrait attirer plus de chauffeurs. Voulez-vous augmenter le prix ?", "Please make sure not to leave any personal belongings in the car.": "Veuillez vous assurer de ne rien laisser dans la voiture.", "Cancel Ride": "Annuler la course", "Route Not Found": "Itinéraire introuvable", "We couldn't find a valid route to this destination. Please try selecting a different point.": "Impossible de trouver un itinéraire valide vers cette destination. Veuillez sélectionner un autre point.", "alert": "Alerte", "You can call or record audio during this trip.": "Vous pouvez appeler ou enregistrer l'audio pendant ce trajet.", "Warning: Speeding detected!": "Attention : Excès de vitesse détecté !", "Fixed Price": "Prix fixe", "Report": "Signaler", "Comfort": "Confort", "Intaleq Balance": "Solde Intaleq", "Search for a starting point": "Rechercher un point de départ", "Top up Balance to continue": "Rechargez le solde pour continuer", "Electric": "Électrique", "Lady": "Dame", "Van": "Van", "Rayeh Gai": "Aller-Retour", "Join Intaleq as a driver using my referral code!": "Rejoignez Intaleq comme chauffeur avec mon code de parrainage !", "Use code:": "Utilisez le code :", "Download the Intaleq Driver app now and earn rewards!": "Téléchargez l'appli Chauffeur Intaleq et gagnez des récompenses !", "Get a discount on your first Intaleq ride!": "Obtenez une réduction sur votre premier trajet Intaleq !", "Use my referral code:": "Utilisez mon code de parrainage :", "Download the Intaleq app now and enjoy your ride!": "Téléchargez Intaleq maintenant et profitez du trajet !", "Contacts Loaded": "Contacts chargés", "Showing": "Affichage de", "of": "sur", "Pay by MTN Wallet": "Payer via MTN Wallet", "Pay by Syriatel Wallet": "Payer via Syriatel Wallet", "Customer not found": "Client introuvable", "Wallet is blocked": "Portefeuille bloqué", "Customer phone is not active": "Le téléphone du client n'est pas actif", "Balance not enough": "Solde insuffisant", "Balance limit exceeded": "Limite de solde dépassée", "Incorrect sms code": "⚠️ Code SMS incorrect. Veuillez réessayer.", "contacts. Others were hidden because they don't have a phone number.": "contacts. Les autres sont masqués car ils n'ont pas de numéro.", "No contacts found": "Aucun contact trouvé", "No contacts with phone numbers were found on your device.": "Aucun contact avec numéro de téléphone trouvé sur votre appareil.", "Permission denied": "Permission refusée", "Contact permission is required to pick contacts": "La permission d'accès aux contacts est requise.", "An error occurred while picking contacts:": "Une erreur est survenue lors de la sélection des contacts :", "Please enter a correct phone": "Veuillez entrer un numéro valide", "Success": "Succès", "Invite sent successfully": "Invitation envoyée avec succès", "Hello! I'm inviting you to try Intaleq.": "Bonjour ! Je vous invite à essayer Intaleq.", "Use my invitation code to get a special gift on your first ride!": "Utilisez mon code pour un cadeau spécial lors de votre premier trajet !", "Your personal invitation code is:": "Votre code d'invitation personnel est :", "Be sure to use it quickly! This code expires at": "Utilisez-le vite ! Ce code expire le", "Download the app now:": "Téléchargez l'application :", "See you on the road!": "À bientôt sur la route !", "This phone number has already been invited.": "Ce numéro a déjà été invité.", "An unexpected error occurred. Please try again.": "Une erreur inattendue s'est produite. Réessayez.", "You deserve the gift": "Vous méritez le cadeau", "Claim your 20 LE gift for inviting": "Réclamez votre cadeau de 20 € pour l'invitation", "You have got a gift for invitation": "Vous avez reçu un cadeau pour l'invitation", "You have earned 20": "Vous avez gagné 20", "LE": "€", "Vibration feedback for all buttons": "Vibration pour tous les boutons", "Share with friends and earn rewards": "Partagez avec des amis et gagnez des récompenses", "Gift Already Claimed": "Cadeau déjà réclamé", "You have already received your gift for inviting": "Vous avez déjà reçu votre cadeau pour cette invitation", "Keep it up!": "Continuez comme ça !", "has completed": "a terminé", "trips": "trajets", "Personal Information": "Informations personnelles", "Name": "Nom", "Not set": "Non défini", "Gender": "Sexe", "Education": "Éducation", "Work & Contact": "Travail et Contact", "Employment Type": "Type d'emploi", "Marital Status": "État civil", "SOS Phone": "Téléphone SOS", "Sign Out": "Se déconnecter", "Delete My Account": "Supprimer mon compte", "Update Gender": "Mettre à jour le sexe", "Update": "Mettre à jour", "Update Education": "Mettre à jour l'éducation", "Are you sure? This action cannot be undone.": "Êtes-vous sûr ? Cette action est irréversible.", "Confirm your Email": "Confirmez votre email", "Type your Email": "Tapez votre email", "Delete Permanently": "Supprimer définitivement", "Male": "Homme", "Female": "Femme", "Other": "Autre", "High School Diploma": "Baccalauréat", "Associate Degree": "BTS / DUT", "Bachelor's Degree": "Licence", "Master's Degree": "Master", "Doctoral Degree": "Doctorat", "Select your preferred language for the app interface.": "Sélectionnez votre langue préférée pour l'interface.", "Language Options": "Options de langue", "You can claim your gift once they complete 2 trips.": "Vous pourrez réclamer votre cadeau après qu'ils aient terminé 2 trajets.", "Closest & Cheapest": "Le plus proche et le moins cher", "Comfort choice": "Choix confort", "Travel in a modern, silent electric car. A premium, eco-friendly choice for a smooth ride.": "Voyagez dans une voiture électrique moderne et silencieuse. Un choix premium et écologique.", "Spacious van service ideal for families and groups. Comfortable, safe, and cost-effective travel together.": "Service de van spacieux idéal pour les familles et groupes. Confortable, sûr et économique.", "Quiet & Eco-Friendly": "Calme et Écologique", "Lady Captain for girls": "Chauffeur femme pour dames", "Van for familly": "Van pour la famille", "Are you sure to delete this location?": "Voulez-vous vraiment supprimer ce lieu ?", "Change Work location?": "Changer le lieu de travail ?", "Change Home location?": "Changer le lieu de domicile ?", "Submit a Complaint": "Déposer une réclamation", "Submit Complaint": "Envoyer la réclamation", "No trip history found": "Aucun historique de trajet", "Your past trips will appear here.": "Vos trajets passés apparaîtront ici.", "1. Describe Your Issue": "1. Décrivez votre problème", "Enter your complaint here...": "Entrez votre réclamation ici...", "2. Attach Recorded Audio": "2. Joindre l'audio enregistré", "No audio files found.": "Aucun fichier audio trouvé.", "Confirm Attachment": "Confirmer la pièce jointe", "Attach this audio file?": "Joindre ce fichier audio ?", "Uploaded": "Téléchargé", "3. Review Details & Response": "3. Revoir les détails et la réponse", "Date": "Date", "Today's Promos": "Promos du jour", "No promos available right now.": "Aucune promo disponible pour le moment.", "Check back later for new offers!": "Revenez plus tard pour de nouvelles offres !", "Valid Until:": "Valable jusqu'au :", "CODE": "CODE", "Login": "Connexion", "Sign in for a seamless experience": "Connectez-vous pour une expérience fluide", "Sign In with Google": "Se connecter avec Google", "Sign in with Apple": "Se connecter avec Apple", "User not found": "Utilisateur introuvable", "Need assistance? Contact us": "Besoin d'aide ? Contactez-nous", "Email": "Email", "Your email address": "Votre adresse email", "Enter a valid email": "Entrez un email valide", "Password": "Mot de passe", "Your password": "Votre mot de passe", "Enter your password": "Entrez votre mot de passe", "Submit": "Envoyer", "Terms of Use & Privacy Notice": "Conditions d'utilisation et Avis de confidentialité", "By selecting \"I Agree\" below, I confirm that I have read and agree to the ": "En sélectionnant \"J'accepte\" ci-dessous, je confirme avoir lu et accepté les ", "Terms of Use": "Conditions d'utilisation", " and acknowledge the ": " et reconnais l' ", "Privacy Notice": "Avis de confidentialité", " . I am at least 18 years old.": " . J'ai au moins 18 ans.", "I Agree": "J'accepte", "Continue": "Continuer", "Enable Location": "Activer la localisation", "To give you the best experience, we need to know where you are. Your location is used to find nearby captains and for pickups.": "Pour vous offrir la meilleure expérience, nous devons savoir où vous êtes. Votre position est utilisée pour trouver des chauffeurs à proximité.", "Allow Location Access": "Autoriser l'accès à la localisation", "Welcome to Intaleq!": "Bienvenue sur Intaleq !", "Before we start, please review our terms.": "Avant de commencer, veuillez consulter nos conditions.", "Your journey starts here": "Votre voyage commence ici", "Cancel Search": "Annuler la recherche", "Set pickup location": "Définir le lieu de prise en charge", "Move the map to adjust the pin": "Déplacez la carte pour ajuster l'épingle", "Searching for the nearest captain...": "Recherche du chauffeur le plus proche...", "No one accepted? Try increasing the fare.": "Personne n'a accepté ? Essayez d'augmenter le tarif.", "Increase Your Trip Fee (Optional)": "Augmentez le prix de votre trajet (Optionnel)", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "Nous n'avons pas encore trouvé de chauffeurs. Pensez à augmenter votre tarif pour rendre votre offre plus attractive.", "No, thanks": "Non, merci", "Increase Fee": "Augmenter le tarif", "Copy": "Copier", "Promo Copied!": "Promo copiée !", "Code": "Code", "copied to clipboard": "copié dans le presse-papiers", "Price": "Prix", "Intaleq's Response": "Réponse d'Intaleq", "Awaiting response...": "En attente de réponse...", "Audio file not attached": "Fichier audio non joint", "The audio file is not uploaded yet.\\nDo you want to submit without it?": "Le fichier audio n'est pas encore téléchargé.\\nVoulez-vous envoyer sans ?", "deleted": "supprimé", "To Work": "Au Travail", "Work Saved": "Lieu de travail enregistré", "To Home": "À la Maison", "Home Saved": "Domicile enregistré", "Destination selected": "Destination sélectionnée", "Now select start pick": "Sélectionnez maintenant le départ", "OK": "OK", "Confirm Pick-up Location": "Confirmer le lieu de prise en charge", "Set Location on Map": "Définir le lieu sur la carte", "Leave a detailed comment (Optional)": "Laisser un commentaire détaillé (Optionnel)", "Share your experience to help us improve...": "Partagez votre expérience pour nous aider à nous améliorer...", "Your valuable feedback helps us improve our service quality.": "Vos commentaires nous aident à améliorer la qualité de notre service.", "witout zero": "sans zéro", "Top up Balance": "Recharger le solde", "An error occurred": "Une erreur s'est produite", "Send WhatsApp Message": "Envoyer un message WhatsApp", "How was your trip with": "Comment s'est passé votre trajet avec", "Drawing route on map...": "Traçage de l'itinéraire sur la carte...", "Please wait while we prepare your trip.": "Veuillez patienter pendant la préparation de votre trajet.", "Submit Rating": "Envoyer la note", "Call Support": "Appeler le support", "You can contact us during working hours from 10:00 - 16:00.": "Vous pouvez nous contacter pendant les heures de travail de 10h00 à 16h00.", "Intaleq is the safest and most reliable ride-sharing app designed especially for passengers in Syria. We provide a comfortable, respectful, and affordable riding experience with features that prioritize your safety and convenience. Our trusted captains are verified, insured, and supported by regular car maintenance carried out by top engineers. We also offer on-road support services to make sure every trip is smooth and worry-free. With Intaleq, you enjoy quality, safety, and peace of mind—every time you ride.": "Intaleq est l'application de covoiturage la plus sûre et la plus fiable conçue pour la France. Nous offrons une expérience confortable, respectueuse et abordable, avec la sécurité comme priorité. Nos chauffeurs de confiance sont vérifiés et assurés. Avec Intaleq, profitez de la qualité et de la tranquillité d'esprit à chaque trajet.", "Work time is from 10:00 AM to 16:00 PM.\nYou can send a WhatsApp message or email.": "Les heures de travail sont de 10h00 à 16h00.\nVous pouvez envoyer un message WhatsApp ou un email.", "Sorry": "Désolé", "Customer MSISDN doesn’t have customer wallet": "Le numéro du client n'a pas de portefeuille client", "Please enter the number without the leading 0": "Veuillez entrer le numéro sans le 0 initial", "Please enter your phone number": "Veuillez entrer votre numéro de téléphone", "Phone number seems too short": "Le numéro de téléphone semble trop court", "No cars are available at the moment. Please try again later.": "Aucune voiture disponible pour le moment. Veuillez réessayer plus tard.", "Nearest Car: ~": "Voiture la plus proche : ~", "Nearest Car": "Voiture la plus proche", "No cars nearby": "Aucune voiture à proximité", "Favorite Places": "Lieux favoris", "No favorite places yet!": "Pas encore de lieux favoris !", "from your favorites": "de vos favoris", "Back": "Retour", "Enter your code below to apply the discount.": "Entrez votre code ci-dessous pour appliquer la réduction.", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "En sélectionnant \"J'accepte\" ci-dessous, je confirme avoir lu et accepté les", "and acknowledge the": "et reconnais le", "Enable Location Access": "Activer l'accès à la localisation", "We need your location to find nearby drivers for pickups and drop-offs.": "Nous avons besoin de votre position pour trouver des chauffeurs à proximité.", "You should restart app to change language": "Vous devez redémarrer l'application pour changer la langue", "Home Page": "Page d'accueil", "To change Language the App": "Pour changer la langue de l'appli", "Learn more about our app and mission": "En savoir plus sur notre appli et notre mission", "Promos For Today": "Promos du jour", "Choose your ride": "Choisissez votre trajet", "Your Journey Begins Here": "Votre voyage commence ici", "Bonus gift": "Cadeau bonus", "Pay": "Payer", "Get": "Obtenir", "Send to Driver Again": "Renvoyer au chauffeur", "Driver Name:": "Nom du chauffeur :", "No trip data available": "Aucune donnée de trajet disponible", "Car Plate:": "Immatriculation :", "remaining": "restant", "Order Cancelled": "Commande annulée", "You canceled VIP trip": "Vous avez annulé le trajet VIP", "Passenger cancelled order": "Le passager a annulé la commande", "Your trip is scheduled": "Votre trajet est programmé", "Don't forget your ride!": "N'oubliez pas votre trajet !", "Trip updated successfully": "Trajet mis à jour avec succès", "Car Make:": "Marque :", "Car Model:": "Modèle :", "Car Color:": "Couleur :", "Driver Phone:": "Tél. Chauffeur :", "Pre-booking": "Pré-réservation", "Waiting VIP": "Attente VIP", "Driver List": "Liste des chauffeurs", "Confirm Trip": "Confirmer le trajet", "Select date and time of trip": "Sélectionnez la date et l'heure", "Date and Time Picker": "Sélecteur de date et heure", "Trip Status:": "Statut du trajet :", "pending": "en attente", "accepted": "accepté", "rejected": "rejeté", "Apply": "Appliquer", "Enter your promo code": "Entrez votre code promo", "Apply Promo Code": "Appliquer le code promo", "Scheduled Time:": "Heure prévue :", "No drivers available": "Aucun chauffeur disponible", "No drivers available at the moment. Please try again later.": "Aucun chauffeur disponible pour le moment. Réessayez plus tard.", "you have a negative balance of": "vous avez un solde négatif de", "Please try again in a few moments": "Veuillez réessayer dans quelques instants", "Unknown Driver": "Chauffeur inconnu", "in your": "dans votre", "The driver accepted your order for": "Le chauffeur a accepté votre commande pour", "wallet due to a previous trip.": "portefeuille dû à un trajet précédent.", "rides": "trajets", "Add Work": "Ajouter Travail", "The reason is": "La raison est", "User does not have a wallet #1652": "L'utilisateur n'a pas de portefeuille #1652", "Price of trip": "Prix du trajet", "From:": "De :", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Pour les trajets Intaleq et Livraison, le prix est dynamique. Pour Confort, le prix est basé sur le temps et la distance.", "Phone Wallet Saved Successfully": "Numéro de portefeuille enregistré avec succès", "Add wallet phone you use": "Ajoutez le numéro de portefeuille que vous utilisez", "Update Available": "Mise à jour disponible", "Phone number must be exactly 11 digits long": "Le numéro de téléphone doit comporter exactement 10 chiffres", "Insert Wallet phone number": "Insérer le numéro de portefeuille", "Phone number isn't an Egyptian phone number": "Ce n'est pas un numéro de téléphone français", "A new version of the app is available. Please update to the latest version.": "Une nouvelle version de l'application est disponible. Veuillez mettre à jour.", "We use location to get accurate and nearest passengers for you": "Nous utilisons la localisation pour trouver les passagers les plus proches avec précision", "This ride is already applied by another driver.": "Ce trajet a déjà été pris par un autre chauffeur.", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "Nous utilisons votre position précise pour trouver le chauffeur le plus proche et fournir des infos exactes. Vous pouvez gérer cela dans les Paramètres.", "Where are you, sir?": "Où êtes-vous, monsieur ?", "I've been trying to reach you but your phone is off.": "J'essaie de vous joindre mais votre téléphone est éteint.", "Please don't be late": "S'il vous plaît, ne soyez pas en retard", "Please don't be late, I'm waiting for you at the specified location.": "Ne soyez pas en retard, je vous attends à l'endroit indiqué.", "My location is correct. You can search for me using the navigation app": "Ma position est correcte. Vous pouvez me chercher via le GPS", "Hello, I'm at the agreed-upon location": "Bonjour, je suis au lieu convenu", "How much longer will you be?": "Combien de temps encore ?", "Phone number is verified before": "Le numéro de téléphone a déjà été vérifié", "Change Ride": "Changer de trajet", "You can change the destination by long-pressing any point on the map": "Vous pouvez changer la destination par un appui long sur la carte", "Pick from map destination": "Choisir la destination sur la carte", "Pick or Tap to confirm": "Choisir ou appuyer pour confirmer", "Accepted your order": "A accepté votre commande", "Order Accepted": "Commande acceptée", "with type": "avec le type", "accepted your order at price": "a accepté votre commande au prix de", "you canceled order": "vous avez annulé la commande", "If you want order to another person": "Si vous voulez commander pour une autre personne", "upgrade price": "augmenter le prix", "airport": "aéroport", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "Le meilleur choix pour une voiture confortable avec itinéraire flexible.", "You can upgrade price to may driver accept your order": "Vous pouvez augmenter le prix pour qu'un chauffeur accepte", "Change Route": "Changer l'itinéraire", "No Captain Accepted Your Order": "Aucun chauffeur n'a accepté votre commande", "We are looking for a captain but the price may increase to let a captain accept": "Nous cherchons un chauffeur mais le prix peut augmenter pour faciliter l'acceptation", "No, I want to cancel this trip": "Non, je veux annuler ce trajet", "Attention": "Attention", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "Trajet annulé. Le coût sera déduit de votre portefeuille.", "You will be charged for the cost of the driver coming to your location.": "Les frais d'approche du chauffeur vous seront facturés.", "reject your order.": "rejeter votre commande.", "Order Under Review": "Commande en cours d'examen", "is reviewing your order. They may need more information or a higher price.": "examine votre commande. Il peut avoir besoin de plus d'infos ou d'un meilleur prix.", "Vibration": "Vibration", "Resend code": "Renvoyer le code", "change device": "changer d'appareil", "Device Change Detected": "Changement d'appareil détecté", "You can only use one device at a time. This device will now be set as your active device.": "Vous ne pouvez utiliser qu'un seul appareil à la fois. Cet appareil est maintenant actif.", "Click here point": "Cliquez ici point", "Are you want to change": "Voulez-vous changer", "by": "par", "Enter your complaint here": "Entrez votre réclamation ici", "Please enter your complaint.": "Veuillez entrer votre réclamation.", "Complaint data saved successfully": "Données de réclamation enregistrées avec succès", "Trip Monitor": "Moniteur de trajet", "Insert SOS Phone": "Insérer téléphone SOS", "Add SOS Phone": "Ajouter téléphone SOS", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "Cher(e),\n\n🚀 Je viens de commencer un trajet et je voudrais partager ma position en temps réel avec toi ! Télécharge l'application Intaleq pour voir les détails de mon trajet.\n\n👉 Lien de téléchargement :\nAndroid [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\niOS [https://getapp.cc/app/6458734951]\n\nÀ bientôt !\n\nIntaleq ,", "Send Intaleq app to him": "Lui envoyer l'appli Intaleq", "No passenger found for the given phone number": "Aucun passager trouvé pour ce numéro", "No user found for the given phone number": "Aucun utilisateur trouvé pour ce numéro", "This price is": "Ce prix est", "Work": "Travail", "Add Home": "Ajouter Maison", "Notifications": "Notifications", "💳 Pay with Credit Card": "💳 Payer par carte de crédit", "⚠️ You need to choose an amount!": "⚠️ Vous devez choisir un montant !", "💰 Pay with Wallet": "💰 Payer avec le portefeuille", "You must restart the app to change the language.": "Vous devez redémarrer l'application pour changer la langue.", "joined": "a rejoint", "Driver joined the channel": "Le chauffeur a rejoint le canal", "Driver left the channel": "Le chauffeur a quitté le canal", "Call Page": "Page d'appel", "Call Left": "Appels restants", " Next as Cash !": " Suivant en espèces !", "To use Wallet charge it": "Pour utiliser le portefeuille, rechargez-le", "We are searching for the nearest driver to you": "Nous cherchons le chauffeur le plus proche", "Best choice for cities": "Meilleur choix pour la ville", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "Rayeh Gai : Service aller-retour pratique pour voyager entre les villes.", "This trip is for women only": "Ce trajet est réservé aux femmes", "Total budgets on month": "Budgets totaux du mois", "You have call from driver": "Vous avez un appel du chauffeur", "Intaleq": "Intaleq", "passenger agreement": "accord passager", "To become a passenger, you must review and agree to the ": "Pour devenir passager, vous devez accepter les ", "agreement subtitle": "Pour continuer, vous devez accepter les conditions d'utilisation et la politique de confidentialité.", "terms of use": "conditions d'utilisation", " and acknowledge our Privacy Policy.": " et reconnaître notre Politique de Confidentialité.", "and acknowledge our": "et reconnaître notre", "privacy policy": "politique de confidentialité.", "i agree": "j'accepte", "Driver already has 2 trips within the specified period.": "Le chauffeur a déjà 2 trajets dans la période spécifiée.", "The invitation was sent successfully": "L'invitation a été envoyée avec succès", "You should select your country": "Vous devez sélectionner votre pays", "Scooter": "Scooter", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "Un trajet avec réservation préalable, vous permettant de choisir les meilleurs chauffeurs et voitures.", "Mishwar Vip": "Trajet VIP", "The driver waiting you in picked location .": "Le chauffeur vous attend au lieu de prise en charge.", "About Us": "À propos de nous", "You can change the vibration feedback for all buttons": "Vous pouvez changer le retour de vibration pour tous les boutons", "Most Secure Methods": "Méthodes les plus sécurisées", "In-App VOIP Calls": "Appels VOIP intégrés", "Recorded Trips for Safety": "Trajets enregistrés pour la sécurité", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nNous privilégions aussi l'accessibilité, offrant des prix compétitifs.", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "Intaleq est une application de covoiturage conçue pour votre sécurité et votre budget. Nous vous connectons avec des chauffeurs fiables dans votre région.", "Sign In by Apple": "Connexion via Apple", "Sign In by Google": "Connexion via Google", "How do I request a ride?": "Comment demander un trajet ?", "Step-by-step instructions on how to request a ride through the Intaleq app.": "Instructions étape par étape pour demander un trajet.", "What types of vehicles are available?": "Quels types de véhicules sont disponibles ?", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "Intaleq offre diverses options de véhicules incluant éco, confort et luxe.", "How can I pay for my ride?": "Comment payer mon trajet ?", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "Intaleq offre plusieurs méthodes de paiement. Choisissez entre espèces ou carte lors de la confirmation.", "Can I cancel my ride?": "Puis-je annuler mon trajet ?", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "Oui, vous pouvez annuler, mais des frais d'annulation peuvent s'appliquer.", "Driver Registration & Requirements": "Inscription Chauffeur & Requis", "How can I register as a driver?": "Comment s'inscrire comme chauffeur ?", "What are the requirements to become a driver?": "Quelles sont les conditions pour devenir chauffeur ?", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "Visitez notre site web ou contactez le support pour plus d'infos.", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "Intaleq fournit une fonction de chat pour communiquer avec votre chauffeur ou passager.", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "Intaleq priorise votre sécurité avec la vérification des chauffeurs et le suivi des trajets.", "Frequently Questions": "Questions Fréquentes", "User does not exist.": "L'utilisateur n'existe pas.", "We need your phone number to contact you and to help you.": "Nous avons besoin de votre numéro pour vous contacter et vous aider.", "You will recieve code in sms message": "Vous recevrez un code par SMS", "Please enter": "Veuillez entrer", "We need your phone number to contact you and to help you receive orders.": "Nous avons besoin de votre numéro pour vous aider à recevoir des commandes.", "The full name on your criminal record does not match the one on your driver's license. Please verify and provide the correct documents.": "Le nom sur le casier judiciaire ne correspond pas à celui du permis. Veuillez vérifier.", "The national number on your driver's license does not match the one on your ID document. Please verify and provide the correct documents.": "Le numéro national sur votre permis ne correspond pas à votre pièce d'identité.", "Capture an Image of Your Criminal Record": "Prendre une photo de votre casier judiciaire", "IssueDate": "Date d'émission", "Capture an Image of Your car license front": "Photo recto de la carte grise", "Capture an Image of Your ID Document front": "Photo recto de la pièce d'identité", "NationalID": "Numéro National / CNI", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "Partagez Intaleq avec vos amis et gagnez des récompenses.", "FullName": "Nom complet", "No invitation found yet!": "Aucune invitation trouvée !", "InspectionResult": "Résultat de l'inspection", "Criminal Record": "Casier judiciaire", "The email or phone number is already registered.": "L'email ou le numéro de téléphone est déjà enregistré.", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "Pour devenir chauffeur sur Intaleq, téléchargez votre permis, pièce d'identité et carte grise. Notre IA vérifiera leur authenticité en quelques minutes. La soumission de faux documents entraînera une résiliation immédiate.", "Documents check": "Vérification des documents", "Driver's License": "Permis de conduire", "for your first registration!": "pour votre première inscription !", "Get it Now!": "Obtenez-le maintenant !", "before": "avant", "Code not approved": "Code non approuvé", "3000 LE": "30 €", "Do you have an invitation code from another driver?": "Avez-vous un code d'invitation d'un autre chauffeur ?", "Paste the code here": "Collez le code ici", "No, I don't have a code": "Non, je n'ai pas de code", "Code approved": "Code approuvé", "Install our app:": "Installez notre appli :", "Invite another driver and both get a gift after he completes 100 trips!": "Invitez un autre chauffeur et recevez un cadeau après ses 100 trajets !", "Invite": "Inviter", "Are you sure?": "Êtes-vous sûr ?", "This will delete all recorded files from your device.": "Cela supprimera tous les fichiers enregistrés de votre appareil.", "Select a file": "Sélectionner un fichier", "Select a File": "Sélectionner un Fichier", "Delete": "Supprimer", "attach audio of complain": "joindre audio de plainte", "Phone Number Check": "Vérification du numéro de téléphone", "Drivers received orders": "Les chauffeurs ont reçu les commandes", "No audio files recorded.": "Aucun fichier audio enregistré.", "This is for delivery or a motorcycle.": "Ceci est pour la livraison ou une moto.", "Intaleq Reminder": "Rappel Intaleq", "It's time to check the Intaleq app!": "Il est temps de vérifier l'appli Intaleq !", "you must insert token code": "vous devez insérer le code jeton", "Something went wrong. Please try again.": "Un problème est survenu. Veuillez réessayer.", "Trip Details": "Détails du trajet", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "Le contexte ne fournit pas de détails sur la plainte. Veuillez fournir les informations nécessaires.", "Submit Your Complaint": "Soumettre votre réclamation", "Status": "Statut", "Choose from contact": "Choisir dans les contacts", "attach correct audio": "joindre l'audio correct", "be sure": "assurez-vous", "Audio uploaded successfully.": "Audio téléchargé avec succès.", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "Parfait pour les passagers cherchant des voitures récentes avec liberté d'itinéraire", "Share this code with your friends and earn rewards when they use it!": "Partagez ce code et gagnez des récompenses !", "Enter phone": "Entrer téléphone", "complete, you can claim your gift": "terminé, vous pouvez réclamer votre cadeau", "When": "Quand", "Enter driver's phone": "Entrer tél. du chauffeur", "Send Invite": "Envoyer l'invitation", "Show Invitations": "Afficher les invitations", "License Type": "Type de permis", "National Number": "Numéro National", "Name (Arabic)": "Nom (Arabe)", "Name (English)": "Nom (Français/Anglais)", "Address": "Adresse", "Issue Date": "Date de délivrance", "Expiry Date": "Date d'expiration", "License Categories": "Catégories de permis", "driver_license": "permis_de_conduire", "Capture an Image of Your Driver License": "Prendre une photo de votre permis", "ID Documents Back": "Verso de la pièce d'identité", "National ID": "CNI / Numéro National", "Occupation": "Profession", "Religion": "Religion", "Full Name (Marital)": "Nom complet", "Expiration Date": "Date d'expiration", "Capture an Image of Your ID Document Back": "Photo verso de la pièce d'identité", "ID Documents Front": "Recto de la pièce d'identité", "First Name": "Prénom", "CardID": "Numéro de Carte", "Vehicle Details Front": "Détails du véhicule (Avant)", "Plate Number": "Numéro d'immatriculation", "Owner Name": "Nom du propriétaire", "Vehicle Details Back": "Détails du véhicule (Arrière)", "Make": "Marque", "Model": "Modèle", "Year": "Année", "Chassis": "Châssis", "Color": "Couleur", "Displacement": "Cylindrée", "Fuel": "Carburant", "Tax Expiry Date": "Date d'expiration de la taxe", "Inspection Date": "Date d'inspection", "Capture an Image of Your car license back": "Photo verso de la carte grise", "Capture an Image of Your Driver's License": "Photo de votre permis de conduire", "Sign in with Google for easier email and name entry": "Connectez-vous avec Google pour faciliter la saisie", "You will choose allow all the time to be ready receive orders": "Choisissez 'Toujours autoriser' pour recevoir des commandes", "Get to your destination quickly and easily.": "Arrivez à destination rapidement et facilement.", "Enjoy a safe and comfortable ride.": "Profitez d'un trajet sûr et confortable.", "Choose Language": "Choisir la langue", "Pay with Wallet": "Payer avec le portefeuille", "Invalid MPIN": "MPIN invalide", "Invalid OTP": "OTP invalide", "Enter your email address": "Entrez votre adresse email", "Please enter Your Email.": "Veuillez entrer votre email.", "Enter your phone number": "Entrez votre numéro de téléphone", "Please enter your phone number.": "Veuillez entrer votre numéro de téléphone.", "Please enter Your Password.": "Veuillez entrer votre mot de passe.", "if you dont have account": "si vous n'avez pas de compte", "Register": "S'inscrire", "Accept Ride's Terms & Review Privacy Notice": "Accepter les conditions et la confidentialité", "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "En sélectionnant 'J'accepte', je reconnais avoir lu et accepté les conditions d'utilisation et la politique de confidentialité. J'ai au moins 18 ans.", "First name": "Prénom", "Enter your first name": "Entrez votre prénom", "Please enter your first name.": "Veuillez entrer votre prénom.", "Last name": "Nom", "Enter your last name": "Entrez votre nom", "Please enter your last name.": "Veuillez entrer votre nom.", "City": "Ville", "Please enter your City.": "Veuillez entrer votre ville.", "Verify Email": "Vérifier l'email", "We sent 5 digit to your Email provided": "Nous avons envoyé 5 chiffres à votre email", "5 digit": "5 chiffres", "Send Verification Code": "Envoyer le code de vérification", "Your Ride Duration is ": "La durée de votre trajet est ", "You will be thier in": "Vous y serez dans", "You trip distance is": "La distance de votre trajet est", "Fee is": "Les frais sont", "From : ": "De : ", "To : ": "À : ", "Add Promo": "Ajouter Promo", "Confirm Selection": "Confirmer la sélection", "distance is": "la distance est", "Privacy Policy": "Politique de confidentialité", "Intaleq LLC": "Intaleq LLC", "Syria's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "Service de covoiturage pionnier en France. Nous priorisons la proximité avec vous.", "Intaleq is the first ride-sharing app in Syria, designed to connect you with the nearest drivers for a quick and convenient travel experience.": "Intaleq est la première appli de covoiturage en France, conçue pour vous connecter aux chauffeurs les plus proches.", "Why Choose Intaleq?": "Pourquoi choisir Intaleq ?", "Closest to You": "Le plus proche de vous", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "Nous vous connectons aux chauffeurs les plus proches pour des trajets plus rapides.", "Uncompromising Security": "Sécurité sans compromis", "Lady Captains Available": "Chauffeurs femmes disponibles", "Recorded Trips (Voice & AI Analysis)": "Trajets enregistrés (Analyse vocale & IA)", "Fastest Complaint Response": "Réponse rapide aux plaintes", "Our dedicated customer service team ensures swift resolution of any issues.": "Notre service client assure une résolution rapide des problèmes.", "Affordable for Everyone": "Abordable pour tous", "Frequently Asked Questions": "Questions Fréquemment Posées", "Getting Started": "Commencer", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "Ouvrez simplement l'appli Intaleq, entrez votre destination et appuyez sur \"Commander\".", "Vehicle Options": "Options de véhicule", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "Intaleq offre diverses options incluant Éco, Confort et Luxe pour s'adapter à vos besoins.", "Payments": "Paiements", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "Vous pouvez payer en espèces ou par carte. Sélectionnez votre méthode préférée avant de confirmer.", "Ride Management": "Gestion des trajets", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "Oui, vous pouvez annuler, mais des frais peuvent s'appliquer.", "For Drivers": "Pour les chauffeurs", "Driver Registration": "Inscription Chauffeur", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "Pour s'inscrire comme chauffeur, visitez notre site ou contactez le support.", "Visit Website/Contact Support": "Visiter le site / Contacter le support", "Close": "Fermer", "We are searching for the nearest driver": "Nous cherchons le chauffeur le plus proche", "Communication": "Communication", "How do I communicate with the other party (passenger/driver)?": "Comment communiquer avec l'autre partie ?", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "Vous pouvez communiquer via le chat intégré une fois le trajet confirmé.", "Safety & Security": "Sûreté et Sécurité", "What safety measures does Intaleq offer?": "Quelles mesures de sécurité offre Intaleq ?", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "Intaleq offre la vérification des chauffeurs, le suivi des trajets et les contacts d'urgence.", "Enjoy competitive prices across all trip options, making travel accessible.": "Profitez de prix compétitifs sur tous les trajets.", "Variety of Trip Choices": "Variété de choix de trajets", "Choose the trip option that perfectly suits your needs and preferences.": "Choisissez l'option de trajet qui vous convient parfaitement.", "Your Choice, Our Priority": "Votre Choix, Notre Priorité", "Because we are near, you have the flexibility to choose the ride that works best for you.": "Parce que nous sommes proches, vous avez la flexibilité de choisir le meilleur trajet.", "duration is": "la durée est", "Setting": "Paramètre", "Find answers to common questions": "Trouver des réponses aux questions courantes", "I don't need a ride anymore": "Je n'ai plus besoin de trajet", "I was just trying the application": "J'essayais juste l'application", "No driver accepted my request": "Aucun chauffeur n'a accepté ma demande", "I added the wrong pick-up/drop-off location": "J'ai mis le mauvais lieu de prise en charge/dépose", "I don't have a reason": "Je n'ai pas de raison", "Can we know why you want to cancel Ride ?": "Pouvons-nous savoir pourquoi vous voulez annuler ?", "Cancel Ride": "Annuler la course", "Add Payment Method": "Ajouter une méthode de paiement", "Ride Wallet": "Portefeuille Trajet", "Payment Method": "Méthode de paiement", "Type here Place": "Tapez le lieu ici", "Are You sure to ride to": "Êtes-vous sûr d'aller à", "Confirm": "Confirmer", "You are Delete": "Vous supprimez", "Deleted": "Supprimé", "You Dont Have Any places yet !": "Vous n'avez pas encore de lieux !", "From : Current Location": "De : Position actuelle", "My Cared": "Mes Cartes", "Add Card": "Ajouter une carte", "Add Credit Card": "Ajouter une carte de crédit", "Please enter the cardholder name": "Veuillez entrer le nom du titulaire", "Please enter the expiry date": "Veuillez entrer la date d'expiration", "Please enter the CVV code": "Veuillez entrer le code CVV", "Go To Favorite Places": "Aller aux lieux favoris", "Go to this Target": "Aller à cette destination", "My Profile": "Mon Profil", "Are you want to go to this site": "Voulez-vous aller à ce site", "MyLocation": "MaPosition", "my location": "ma position", "Target": "Destination", "You Should choose rate figure": "Vous devez choisir une note", "Login Captin": "Connexion Chauffeur", "Register Captin": "Inscription Chauffeur", "Send Verfication Code": "Envoyer le code de vérification", "KM": "KM", "End Ride": "Fin du trajet", "Minute": "Minute", "Go to passenger Location now": "Allez à la position du passager maintenant", "Duration of the Ride is ": "La durée du trajet est ", "Distance of the Ride is ": "La distance du trajet est ", "Name of the Passenger is ": "Le nom du passager est ", "Hello this is Captain": "Bonjour c'est le Chauffeur", "Start the Ride": "Démarrer la course", "Please Wait If passenger want To Cancel!": "Veuillez patienter si le passager veut annuler !", "Total Duration:": "Durée totale :", "Active Duration:": "Durée active :", "Waiting for Captin ...": "En attente du chauffeur...", "Age is ": "L'âge est ", "Rating is ": "La note est ", " to arrive you.": " pour arriver à vous.", "Tariff": "Tarif", "Settings": "Paramètres", "Feed Back": "Avis", "Please enter a valid 16-digit card number": "Veuillez entrer un numéro de carte valide à 16 chiffres", "Add Phone": "Ajouter téléphone", "Please enter a phone number": "Veuillez entrer un numéro de téléphone", "You dont Add Emergency Phone Yet!": "Vous n'avez pas encore ajouté de téléphone d'urgence !", "You will arrive to your destination after ": "Vous arriverez à destination après ", "You can cancel Ride now": "Vous pouvez annuler le trajet maintenant", "You Can cancel Ride After Captain did not come in the time": "Vous pouvez annuler si le chauffeur ne vient pas à temps", "If you in Car Now. Press Start The Ride": "Si vous êtes en voiture, appuyez sur Démarrer", "You Dont Have Any amount in": "Vous n'avez aucun montant dans", "Wallet!": "Portefeuille !", "You Have": "Vous avez", "Save Credit Card": "Enregistrer la carte", "Show Promos": "Voir les Promos", "10 and get 4% discount": "10 et obtenez 4% de réduction", "20 and get 6% discount": "20 et obtenez 6% de réduction", "40 and get 8% discount": "40 et obtenez 8% de réduction", "100 and get 11% discount": "100 et obtenez 11% de réduction", "Pay with Your PayPal": "Payer avec PayPal", "You will choose one of above !": "Vous devez choisir l'un des choix ci-dessus !", "Edit Profile": "Modifier le profil", "Copy this Promo to use it in your Ride!": "Copiez cette promo pour l'utiliser !", "To change some Settings": "Pour changer certains paramètres", "Order Request Page": "Page de demande de commande", "Rouats of Trip": "Itinéraires du trajet", "Passenger Name is ": "Le nom du passager est ", "Total From Passenger is ": "Total du passager est ", "Duration To Passenger is ": "Durée vers le passager est ", "Distance To Passenger is ": "Distance vers le passager est ", "Total For You is ": "Total pour vous est ", "Distance is ": "Distance est ", " KM": " KM", "Duration of Trip is ": "Durée du trajet est ", " Minutes": " Minutes", "Apply Order": "Accepter la commande", "Refuse Order": "Refuser la commande", "Rate Captain": "Noter le chauffeur", "Enter your Note": "Entrez votre note", "Type something...": "Tapez quelque chose...", "Submit rating": "Envoyer la note", "Rate Passenger": "Noter le passager", "Ride Summary": "Résumé du trajet", "welcome_message": "Bienvenue sur Intaleq !", "app_description": "Intaleq est une appli de covoiturage fiable et sûre.", "get_to_destination": "Arrivez à destination rapidement.", "get_a_ride": "Avec Intaleq, obtenez un trajet en quelques minutes.", "safe_and_comfortable": "Profitez d'un trajet sûr et confortable.", "committed_to_safety": "Intaleq s'engage pour la sécurité.", "your ride is Accepted": "votre trajet est Accepté", "Driver is waiting at pickup.": "Le chauffeur attend au point de rendez-vous.", "Driver is on the way": "Le chauffeur est en route", "Contact Options": "Options de contact", "Send a custom message": "Envoyer un message personnalisé", "Type your message": "Tapez votre message", "I will go now": "J'y vais maintenant", "You Have Tips": "Vous avez des pourboires", " tips\nTotal is": " pourboires\nLe total est", "Your fee is ": "Vos frais sont ", "Do you want to pay Tips for this Driver": "Voulez-vous donner un pourboire ?", "Tip is ": "Le pourboire est ", "Are you want to wait drivers to accept your order": "Voulez-vous attendre que les chauffeurs acceptent ?", "This price is fixed even if the route changes for the driver.": "Ce prix est fixe même si l'itinéraire change.", "The price may increase if the route changes.": "Le prix peut augmenter si l'itinéraire change.", "The captain is responsible for the route.": "Le chauffeur est responsable de l'itinéraire.", "We are search for nearst driver": "Nous cherchons le chauffeur le plus proche", "Your order is being prepared": "Votre commande est en préparation", "The drivers are reviewing your request": "Les chauffeurs examinent votre demande", "Your order sent to drivers": "Votre commande a été envoyée aux chauffeurs", "You can call or record audio of this trip": "Vous pouvez appeler ou enregistrer l'audio", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "Le trajet a commencé ! N'hésitez pas à contacter les urgences ou partager votre trajet.", "Camera Access Denied.": "Accès caméra refusé.", "Open Settings": "Ouvrir les paramètres", "GPS Required Allow !.": "GPS requis, autorisez-le !", "Your Account is Deleted": "Votre compte est supprimé", "Are you sure to delete your account?": "Êtes-vous sûr de supprimer votre compte ?", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "Vos données seront effacées après 2 semaines\nVous ne pourrez plus utiliser l'appli après 1 mois ", "Enter Your First Name": "Entrez votre prénom", "Are you Sure to LogOut?": "Êtes-vous sûr de vous déconnecter ?", "Email Wrong": "Email incorrect", "Email you inserted is Wrong.": "L'email inséré est incorrect.", "You have finished all times ": "Vous avez épuisé toutes les tentatives ", "if you want help you can email us here": "si vous voulez de l'aide, écrivez-nous ici", "Thanks": "Merci", "Email Us": "Envoyez-nous un email", "I cant register in your app in face detection ": "Je ne peux pas m'inscrire à cause de la détection faciale ", "Hi": "Bonjour", "No face detected": "Aucun visage détecté", "Image detecting result is ": "Le résultat de détection d'image est ", "from 3 times Take Attention": "sur 3 fois, faites attention", "Be sure for take accurate images please\nYou have": "Assurez-vous de prendre des images précises svp\nVous avez", "image verified": "image vérifiée", "Next": "Suivant", "There is no help Question here": "Il n'y a pas de question d'aide ici", "You dont have Points": "Vous n'avez pas de points", "You Are Stopped For this Day !": "Vous êtes arrêté pour aujourd'hui !", "You must be charge your Account": "Vous devez recharger votre compte", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "Vous avez refusé 3 trajets aujourd'hui \nÀ demain !", "Recharge my Account": "Recharger mon compte", "Ok , See you Tomorrow": "Ok, à demain", "You are Stopped": "Vous êtes arrêté", "Connected": "Connecté", "Not Connected": "Non connecté", "Your are far from passenger location": "Vous êtes loin du passager", "go to your passenger location before\nPassenger cancel trip": "allez vers le passager avant qu'il n'annule", "You will get cost of your work for this trip": "Vous serez payé pour ce trajet", " in your wallet": " dans votre portefeuille", "you gain": "vous gagnez", "Order Cancelled by Passenger": "Commande annulée par le passager", "Feedback data saved successfully": "Données d'avis enregistrées avec succès", "No Promo for today .": "Pas de promo pour aujourd'hui.", "Select your destination": "Sélectionnez votre destination", "Search for your Start point": "Recherchez votre point de départ", "Search for waypoint": "Recherchez un point de passage", "Current Location": "Position actuelle", "Add Location 1": "Ajouter Lieu 1", "You must Verify email !.": "Vous devez vérifier l'email !", "Cropper": "Recadrer", "Saved Sucssefully": "Enregistré avec succès", "Select Date": "Sélectionner la date", "Birth Date": "Date de naissance", "Ok": "Ok", "the 500 points equal 30 JOD": "les 500 points égalent 30 €", "the 500 points equal 30 JOD for you \nSo go and gain your money": "les 500 points égalent 30 € pour vous \nAlors allez gagner votre argent", "token updated": "jeton mis à jour", "Add Location 2": "Ajouter Lieu 2", "Add Location 3": "Ajouter Lieu 3", "Add Location 4": "Ajouter Lieu 4", "Waiting for your location": "En attente de votre position", "Search for your destination": "Recherchez votre destination", "Hi! This is": "Salut ! C'est", " I am using": " J'utilise", " to ride with": " pour rouler avec", " as the driver.": " comme chauffeur.", "is driving a ": "conduit une ", " with license plate ": " immatriculée ", " I am currently located at ": " Je suis actuellement à ", "Please go to Car now ": "Veuillez aller à la voiture maintenant ", "You will receive a code in WhatsApp Messenger": "Vous recevrez un code sur WhatsApp", "If you need assistance, contact us": "Si vous avez besoin d'aide, contactez-nous", "Promo Ended": "Promo terminée", "Enter the promo code and get": "Entrez le code promo et obtenez", "DISCOUNT": "REMISE", "No wallet record found": "Aucun enregistrement de portefeuille trouvé", "for": "pour", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "Intaleq est l'appli de covoiturage la plus sûre avec de nombreuses fonctionnalités. Nous offrons le taux de commission le plus bas de seulement 8%.", "You can contact us during working hours from 12:00 - 19:00.": "Vous pouvez nous contacter de 12h00 à 19h00.", "Choose a contact option": "Choisissez une option de contact", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "Heures de travail de 12h00 à 19h00.\nVous pouvez envoyer un WhatsApp ou email.", "Promo code copied to clipboard!": "Code promo copié !", "Copy Code": "Copier le code", "Your invite code was successfully applied!": "Votre code d'invitation a été appliqué !", "Payment Options": "Options de paiement", "wait 1 minute to receive message": "attendez 1 minute pour recevoir le message", "You have copied the promo code.": "Vous avez copié le code promo.", "Select Payment Amount": "Sélectionner le montant du paiement", "The promotion period has ended.": "La période de promotion est terminée.", "Promo Code Accepted": "Code promo accepté", "Tap on the promo code to copy it!": "Appuyez sur le code promo pour le copier !", "Lowest Price Achieved": "Prix le plus bas atteint", "Cannot apply further discounts.": "Impossible d'appliquer plus de remises.", "Promo Already Used": "Promo déjà utilisée", "Invitation Used": "Invitation utilisée", "You have already used this promo code.": "Vous avez déjà utilisé ce code promo.", "Insert Your Promo Code": "Insérez votre code promo", "Enter promo code here": "Entrez le code promo ici", "Please enter a valid promo code": "Veuillez entrer un code promo valide", "Awfar Car": "Voiture Éco", "Old and affordable, perfect for budget rides.": "Abordable, parfait pour les petits budgets.", " If you need to reach me, please contact the driver directly at": " Si vous devez me joindre, contactez le chauffeur au", "No Car or Driver Found in your area.": "Aucune voiture ou chauffeur trouvé dans votre zone.", "Please Try anther time ": "Veuillez réessayer une autre fois ", "There no Driver Aplly your order sorry for that ": "Aucun chauffeur n'a pris votre commande, désolé ", "Trip Cancelled": "Trajet annulé", "The Driver Will be in your location soon .": "Le chauffeur sera bientôt là.", "The distance less than 500 meter.": "La distance est inférieure à 500 mètres.", "Promo End !": "Fin de la promo !", "There is no notification yet": "Il n'y a pas encore de notification", "Use Touch ID or Face ID to confirm payment": "Utilisez Touch ID ou Face ID pour confirmer", "Contact us for any questions on your order.": "Contactez-nous pour toute question.", "Pyament Cancelled .": "Paiement annulé.", "type here": "tapez ici", "Scan Driver License": "Scanner le permis", "Please put your licence in these border": "Veuillez mettre votre permis dans ce cadre", "Camera not initialized yet": "Caméra non initialisée", "Take Image": "Prendre une photo", "AI Page": "Page IA", "Take Picture Of ID Card": "Photo de la pièce d'identité", "Take Picture Of Driver License Card": "Photo du permis de conduire", "We are process picture please wait ": "Traitement de l'image en cours, veuillez patienter ", "There is no data yet.": "Il n'y a pas encore de données.", "Name :": "Nom :", "Drivers License Class: ": "Classe de permis :", "Document Number: ": "Numéro de document :", "Address: ": "Adresse :", "Height: ": "Taille :", "Expiry Date: ": "Date d'expiration :", "Date of Birth: ": "Date de naissance :", "You can't continue with us .\nYou should renew Driver license": "Vous ne pouvez pas continuer.\nVous devez renouveler votre permis", "Detect Your Face ": "Détecter votre visage ", "Go to next step\nscan Car License.": "Étape suivante\nscanner la carte grise.", "Name in arabic": "Nom en arabe", "Drivers License Class": "Classe de permis", "Selected Date": "Date sélectionnée", "Select Time": "Sélectionner l'heure", "Selected Time": "Heure sélectionnée", "Selected Date and Time": "Date et heure sélectionnées", "Lets check Car license ": "Vérifions la carte grise ", "Car": "Voiture", "Plate": "Plaque", "Rides": "Trajets", "Selected driver": "Chauffeur sélectionné", "Lets check License Back Face": "Vérifions le verso du permis", "Car License Card": "Carte Grise", "No image selected yet": "Aucune image sélectionnée", "Made :": "Marque :", "model :": "Modèle :", "VIN :": "VIN :", "year :": "Année :", "ُExpire Date": "Date d'expiration", "Login Driver": "Connexion Chauffeur", "Password must br at least 6 character.": "Le mot de passe doit avoir au moins 6 caractères.", "if you don't have account": "si vous n'avez pas de compte", "Here recorded trips audio": "Ici l'audio des trajets enregistrés", "Register as Driver": "S'inscrire comme chauffeur", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "En sélectionnant \"J'accepte\", j'accepte les conditions d'utilisation et reconnais ", "Log Out Page": "Page de déconnexion", "Log Off": "Déconnexion", "Register Driver": "Inscrire Chauffeur", "Verify Email For Driver": "Vérifier l'email pour le chauffeur", "Admin DashBoard": "Tableau de bord Admin", "Your name": "Votre nom", "your ride is applied": "votre trajet est demandé", "H and": "H et", "JOD": "€", "m": "m", "We search nearst Driver to you": "Nous cherchons le chauffeur le plus proche", "please wait till driver accept your order": "veuillez attendre que le chauffeur accepte", "No accepted orders? Try raising your trip fee to attract riders.": "Pas de commande acceptée ? Essayez d'augmenter votre tarif.", "You should select one": "Vous devez en sélectionner un", "The driver accept your order for": "Le chauffeur accepte votre commande pour", "The driver on your way": "Le chauffeur est en route", "Total price from ": "Prix total de ", "Order Details Intaleq": "Détails Commande Intaleq", "Selected file:": "Fichier sélectionné :", "Your trip cost is": "Le coût de votre trajet est", "this will delete all files from your device": "cela supprimera tous les fichiers de votre appareil", "Exclusive offers and discounts always with the Intaleq app": "Offres exclusives et remises toujours avec l'appli Intaleq", "Submit Question": "Soumettre une question", "Please enter your Question.": "Veuillez entrer votre question.", "Help Details": "Détails de l'aide", "No trip yet found": "Aucun trajet trouvé", "No Response yet.": "Pas encore de réponse.", " You Earn today is ": " Vous avez gagné aujourd'hui ", " You Have in": " Vous avez dans", "Total points is ": "Total des points est ", "Total Connection Duration:": "Durée totale de connexion :", "Passenger name : ": "Nom du passager : ", "Cost Of Trip IS ": "Le coût du trajet est ", "Arrival time": "Heure d'arrivée", "arrival time to reach your point": "heure d'arrivée pour atteindre votre point", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Pour Intaleq et scooter, le prix est dynamique. Pour Confort, basé sur le temps et la distance.", "Hello this is Driver": "Bonjour c'est le chauffeur", "Is the Passenger in your Car ?": "Le passager est-il dans votre voiture ?", "Please wait for the passenger to enter the car before starting the trip.": "Veuillez attendre que le passager monte avant de démarrer.", "No ,still Waiting.": "Non, j'attends toujours.", "I arrive you": "Je suis arrivé", "I Arrive your site": "Je suis arrivé à votre emplacement", "You are not in near to passenger location": "Vous n'êtes pas proche du passager", "please go to picker location exactly": "veuillez aller exactement au lieu de prise en charge", "You Can Cancel Trip And get Cost of Trip From": "Vous pouvez annuler et obtenir le coût de", "Are you sure to cancel?": "Êtes-vous sûr d'annuler ?", "Insert Emergincy Number": "Insérer numéro d'urgence", "Best choice for comfort car and flexible route and stops point": "Meilleur choix pour voiture confort et itinéraire flexible", "Insert": "Insérer", "This is for scooter or a motorcycle.": "Ceci est pour un scooter ou une moto.", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "Trajet direct à prix fixe. Le chauffeur doit suivre l'itinéraire.", "You can decline a request without any cost": "Vous pouvez refuser une demande sans frais", "Perfect for adventure seekers who want to experience something new and exciting": "Parfait pour les amateurs d'aventure", "My current location is:": "Ma position actuelle est :", "and I have a trip on": "et j'ai un trajet sur", "App with Passenger": "Appli avec Passager", "You will be pay the cost to driver or we will get it from you on next trip": "Vous paierez le chauffeur ou nous le récupérerons au prochain trajet", "Trip has Steps": "Le trajet a des étapes", "Distance from Passenger to destination is ": "La distance du passager à la destination est ", "price is": "le prix est", "This ride type does not allow changes to the destination or additional stops": "Ce type de trajet ne permet pas de changements", "This price may be changed": "Ce prix peut changer", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "Pas de SIM ? Appelez votre chauffeur via l'appli.", "This ride type allows changes, but the price may increase": "Ce type permet des changements, mais le prix peut augmenter", "Select one message": "Sélectionnez un message", "I'm waiting for you": "Je vous attends", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "Nous avons remarqué une vitesse excessive (>100 km/h). Ralentissez svp.", "Warning: Intaleqing detected!": "Attention : Intaleqing détecté !", "Please help! Contact me as soon as possible.": "Aidez-moi ! Contactez-moi dès que possible.", "Share Trip Details": "Partager les détails du trajet", "Car Plate is ": "La plaque est ", "the 300 points equal 300 L.E for you \nSo go and gain your money": "les 300 points égalent 300 € pour vous \nAlors allez gagner votre argent", "the 300 points equal 300 L.E": "les 300 points égalent 300 €", "The payment was not approved. Please try again.": "Le paiement n'a pas été approuvé. Réessayez.", "Payment Failed": "Paiement échoué", "This is a scheduled notification.": "Ceci est une notification programmée.", "An error occurred during the payment process.": "Une erreur est survenue durant le paiement.", "The payment was approved.": "Le paiement a été approuvé.", "Payment Successful": "Paiement réussi", "No ride found yet": "Aucun trajet trouvé", "Accept Order": "Accepter la commande", "Bottom Bar Example": "Exemple de barre inférieure", "Driver phone": "Tél. du chauffeur", "Statistics": "Statistiques", "Origin": "Origine", "Destination": "Destination", "Driver Name": "Nom du chauffeur", "Driver Car Plate": "Plaque du chauffeur", "Available for rides": "Disponible pour des trajets", "Scan Id": "Scanner ID", "Camera not initilaized yet": "Caméra non initialisée", "Scan ID MklGoogle": "Scan ID MklGoogle", "Language": "Langue", "Jordan": "Jordanie", "USA": "USA", "Egypt": "Égypte", "Turkey": "Turquie", "Saudi Arabia": "Arabie Saoudite", "Qatar": "Qatar", "Bahrain": "Bahreïn", "Kuwait": "Koweït", "But you have a negative salary of": "Mais vous avez un salaire négatif de", "Promo Code": "Code Promo", "Your trip distance is": "Votre distance de trajet est", "Enter promo code": "Entrer code promo", "You have promo!": "Vous avez une promo !", "Cost Duration": "Coût Durée", "Duration is": "La durée est", "Leave": "Quitter", "Join": "Rejoindre", "Heading your way now. Please be ready.": "J'arrive. Soyez prêt svp.", "Approaching your area. Should be there in 3 minutes.": "J'approche. Là dans 3 minutes.", "There's heavy traffic here. Can you suggest an alternate pickup point?": "Trafic dense ici. Pouvez-vous suggérer un autre point ?", "This ride is already taken by another driver.": "Ce trajet est déjà pris.", "You Should be select reason.": "Vous devez sélectionner une raison.", "Waiting for Driver ...": "En attente du chauffeur...", "Latest Recent Trip": "Dernier trajet récent", "from your list": "de votre liste", "Do you want to change Work location": "Voulez-vous changer le lieu de travail", "Do you want to change Home location": "Voulez-vous changer le domicile", "We Are Sorry That we dont have cars in your Location!": "Désolé, pas de voitures dans votre zone !", "Choose from Map": "Choisir sur la carte", "Pick your ride location on the map - Tap to confirm": "Choisissez votre lieu sur la carte - Appuyez pour confirmer", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "Intaleq est l'appli de transport sûre et fiable.", "With Intaleq, you can get a ride to your destination in minutes.": "Avec Intaleq, obtenez un trajet en quelques minutes.", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "Intaleq s'engage pour la sécurité, tous nos chauffeurs sont vérifiés.", "Pick from map": "Choisir sur la carte", "No Car in your site. Sorry!": "Pas de voiture à votre emplacement. Désolé !", "Nearest Car for you about ": "Voiture la plus proche à environ ", "From :": "De :", "Get Details of Trip": "Obtenir les détails du trajet", "If you want add stop click here": "Si vous voulez ajouter un arrêt cliquez ici", "Where you want go ": "Où voulez-vous aller ", "My Card": "Ma Carte", "Start Record": "Démarrer l'enregistrement", "History of Trip": "Historique du trajet", "Helping Center": "Centre d'aide", "Record saved": "Enregistrement sauvegardé", "Trips recorded": "Trajets enregistrés", "Select Your Country": "Sélectionnez votre pays", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "Pour assurer des infos précises, sélectionnez votre pays.", "Are you sure to delete recorded files": "Êtes-vous sûr de supprimer les fichiers ?", "Select recorded trip": "Sélectionner le trajet enregistré", "Card Number": "Numéro de carte", "Hi, Where to ": "Salut, on va où ", "Pick your destination from Map": "Choisissez votre destination sur la carte", "Add Stops": "Ajouter des arrêts", "Get Direction": "Obtenir l'itinéraire", "Add Location": "Ajouter un lieu", "Switch Rider": "Changer de passager", "You will arrive to your destination after timer end.": "Vous arriverez après la fin du minuteur.", "You can cancel trip": "Vous pouvez annuler le trajet", "The driver waitting you in picked location .": "Le chauffeur vous attend au lieu choisi.", "Pay with Your": "Payer avec votre", "Pay with Credit Card": "Payer par carte de crédit", "Show Promos to Charge": "Afficher les promos pour recharger", "Point": "Point", "How many hours would you like to wait?": "Combien d'heures voulez-vous attendre ?", "Driver Wallet": "Portefeuille Chauffeur", "Choose between those Type Cars": "Choisissez parmi ces types de voitures", "hour": "heure", "Select Waiting Hours": "Sélectionner les heures d'attente", "Total Points is": "Total des points est", "You will receive a code in SMS message": "Vous recevrez un code par SMS", "Done": "Fait", "Total Budget from trips is ": "Budget total des trajets est ", "Total Amount:": "Montant total :", "Total Budget from trips by\nCredit card is ": "Budget total par\nCarte de crédit est ", "This amount for all trip I get from Passengers": "Ce montant pour tous les trajets des passagers", "Pay from my budget": "Payer de mon budget", "This amount for all trip I get from Passengers and Collected For me in": "Ce montant collecté pour moi dans", "You can buy points from your budget": "Vous pouvez acheter des points de votre budget", "insert amount": "insérer le montant", "You can buy Points to let you online\nby this list below": "Vous pouvez acheter des points pour rester en ligne\nvia cette liste", "Create Wallet to receive your money": "Créer un portefeuille pour recevoir votre argent", "Enter your feedback here": "Entrez votre avis ici", "Please enter your feedback.": "Veuillez entrer votre avis.", "Feedback": "Avis", "Submit ": "Envoyer ", "Click here to Show it in Map": "Cliquez ici pour voir sur la carte", "Canceled": "Annulé", "No I want": "Non je veux", "Email is": "L'email est :", "Phone Number is": "Le numéro est :", "Date of Birth is": "Date de naissance :", "Sex is ": "Le sexe est : ", "Car Details": "Détails de la voiture", "VIN is": "VIN est :", "Color is ": "La couleur est : ", "Make is ": "La marque est : ", "Model is": "Le modèle est :", "Year is": "L'année est :", "Expiration Date ": "Date d'expiration : ", "Edit Your data": "Modifier vos données", "write vin for your car": "écrire le VIN de votre voiture", "VIN": "VIN", "Device Change Detected": "Changement d'appareil détecté", "Please verify your identity": "Veuillez vérifier votre identité", "write Color for your car": "écrire la couleur de votre voiture", "write Make for your car": "écrire la marque de votre voiture", "write Model for your car": "écrire le modèle de votre voiture", "write Year for your car": "écrire l'année de votre voiture", "write Expiration Date for your car": "écrire la date d'expiration", "Tariffs": "Tarifs", "Minimum fare": "Tarif minimum", "Maximum fare": "Tarif maximum", "Flag-down fee": "Prise en charge", "Including Tax": "Taxes incluses", "BookingFee": "Frais de réservation", "Morning": "Matin", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "de 07:30 à 10:30", "Evening": "Soir", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "de 12:00 à 15:00", "Night": "Nuit", "You have in account": "Vous avez sur le compte", "Select Country": "Sélectionner le pays", "Ride Today : ": "Trajet Aujourd'hui : ", "After this period\nYou can't cancel!": "Après cette période\nVous ne pouvez plus annuler !", "from 23:59 till 05:30": "de 23:59 à 05:30", "Rate Driver": "Noter le chauffeur", "Total Cost is ": "Coût total est ", "Write note": "Écrire une note", "Time to arrive": "Heure d'arrivée", "Ride Summaries": "Résumés des trajets", "Total Cost": "Coût Total", "Average of Hours of": "Moyenne des heures de", " is ON for this month": " est ON pour ce mois", "Days": "Jours", "Total Hours on month": "Heures totales sur le mois", "Counts of Hours on days": "Comptes des heures sur les jours", "OrderId": "ID Commande", "created time": "heure de création", "Intaleq Over": "Intaleq Terminé", "I will slow down": "Je vais ralentir", "Map Passenger": "Carte Passager", "Be Slowly": "Doucement", "If you want to make Google Map App run directly when you apply order": "Si vous voulez lancer Google Maps directement", "You can change the language of the app": "Vous pouvez changer la langue de l'appli", "Your Budget less than needed": "Votre budget est insuffisant", "You can change the Country to get all features": "Changez de pays pour toutes les fonctionnalités", "Change Country": "Changer de pays" }, "de": { "Order": "Bestellung", "Where to": "Wohin", "Where are you going?": "Wohin gehen Sie?", "Quick Actions": "Schnelle Aktionen", "My Wallet": "Mein Portemonnaie", "Order History": "Bestellverlauf", "Contact Us": "Kontaktieren Sie uns", "Driver": "Fahrer", "Complaint": "Beschwerde", "Promos": "Promotionen", "Recent Places": "Letzte Orte", "From": "Von", "WhatsApp Location Extractor": "WhatsApp-Standort-Extraktor", "Location Link": "Standortlink", "Paste location link here": "Fügen Sie den Standortlink hier ein", "Go to this location": "Gehen Sie zu diesem Ort", "Paste WhatsApp location link": "Fügen Sie den WhatsApp-Standortlink ein", "Select Order Type": "Bestelltyp auswählen", "Choose who this order is for": "Wählen Sie, für wen diese Bestellung ist", "I want to order for myself": "Ich möchte für mich selbst bestellen", "I want to order for someone else": "Ich möchte für jemand anderen bestellen", "Cancel": "Abbrechen", "Order for someone else": "Für jemand anderen bestellen", "Order for myself": "Für mich selbst bestellen", "Are you want to go this site": "Möchten Sie zu dieser Seite gehen?", "Yes": "Ja", "No": "Nein", "Are you sure to delete this location?": "Sind Sie sicher, dass Sie diesen Ort löschen möchten?", "deleted": "gelöscht", "To Work": "Zur Arbeit", "Work Saved": "Arbeitsort gespeichert", "To Home": "Nach Hause", "Home Saved": "Zuhause gespeichert", "Destination selected": "Ziel ausgewählt", "Now select start pick": "Wählen Sie nun den Startpunkt aus", "OK": "OK", "Confirm Pick-up Location": "Abholort bestätigen", "Set Location on Map": "Ort auf der Karte festlegen", "Nearest Car: ~": "Nächstes Auto: ~", "Nearest Car": "Nächstes Auto", "No cars nearby": "Keine Autos in der Nähe", "Favorite Places": "Lieblingsorte", "No favorite places yet!": "Noch keine Lieblingsorte!", "from your favorites": "aus Ihren Favoriten", "Back": "Zurück", "Sign in for a seamless experience": "Melden Sie sich für ein nahtloses Erlebnis an", "Sign In with Google": "Mit Google anmelden", "Sign in with Apple": "Mit Apple anmelden", "Need assistance? Contact us": "Brauchen Sie Hilfe? Kontaktieren Sie uns", "User not found": "Benutzer nicht gefunden", "Email": "E-Mail", "Your email address": "Ihre E-Mail-Adresse", "Enter a valid email": "Geben Sie eine gültige E-Mail-Adresse ein", "Password": "Passwort", "Enter your password": "Geben Sie Ihr Passwort ein", "Submit": "Einreichen", "Terms of Use & Privacy Notice": "Nutzungsbedingungen & Datenschutzhinweis", "Terms of Use": "Nutzungsbedingungen", "Privacy Notice": "Datenschutzhinweis", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "Durch die Auswahl von \"Ich stimme zu\" bestätige ich, dass ich die", "and acknowledge the": "gelesen und akzeptiert habe und den", ". I am at least 18 years old.": ". Ich bin mindestens 18 Jahre alt.", "Continue": "Weiter", "Enable Location Access": "Standortzugriff aktivieren", "We need your location to find nearby drivers for pickups and drop-offs.": "Wir benötigen Ihren Standort, um nahegelegene Fahrer für Abholungen und Absetzungen zu finden.", "Allow Location Access": "Standortzugriff erlauben", "You should restart app to change language": "Sie sollten die App neu starten, um die Sprache zu ändern", "Home Page": "Startseite", "To change Language the App": "Um die Sprache der App zu ändern", "Learn more about our app and mission": "Erfahren Sie mehr über unsere App und Mission", "Promos For Today": "Promotionen für heute", "Choose your ride": "Wählen Sie Ihre Fahrt", "Your Journey Begins Here": "Ihre Reise beginnt hier", "Bonus gift": "Bonusgeschenk", "Pay": "Bezahlen", "Get": "Erhalten", "Send to Driver Again": "Nochmals an den Fahrer senden", "Driver Name:": "Fahrername:", "No trip data available": "Keine Fahrtdaten verfügbar", "Car Plate:": "Nummernschild:", "remaining": "verbleibend", "Order Cancelled": "Bestellung storniert", "You canceled VIP trip": "Sie haben die VIP-Fahrt storniert", "Passenger cancelled order": "Der Fahrgast hat die Bestellung storniert", "Your trip is scheduled": "Ihre Fahrt ist geplant", "Don't forget your ride!": "Vergessen Sie Ihre Fahrt nicht!", "Trip updated successfully": "Fahrt erfolgreich aktualisiert", "Car Make:": "Automarke:", "Car Model:": "Automodell:", "Car Color:": "Autofarbe:", "Driver Phone:": "Fahrertelefon:", "Pre-booking": "Vorabbuchung", "Waiting VIP": "Warten auf VIP", "Driver List": "Fahrerliste", "Confirm Trip": "Fahrt bestätigen", "Select date and time of trip": "Datum und Uhrzeit der Fahrt auswählen", "Date and Time Picker": "Datum- und Uhrzeitauswahl", "Trip Status:": "Fahrtstatus:", "pending": "ausstehend", "accepted": "akzeptiert", "rejected": "abgelehnt", "Apply": "Anwenden", "Enter your promo code": "Geben Sie Ihren Promo-Code ein", "Apply Promo Code": "Promo-Code anwenden", "Scheduled Time:": "Geplante Zeit:", "No drivers available": "Keine Fahrer verfügbar", "No drivers available at the moment. Please try again later.": "Derzeit sind keine Fahrer verfügbar. Bitte versuchen Sie es später erneut.", "you have a negative balance of": "Sie haben ein negatives Guthaben von", "Please try again in a few moments": "Bitte versuchen Sie es in einigen Augenblicken erneut", "Unknown Driver": "Unbekannter Fahrer", "in your": "in Ihrem", "The driver accepted your order for": "Der Fahrer hat Ihre Bestellung für", "wallet due to a previous trip.": "Portemonnaie aufgrund einer vorherigen Fahrt.", "rides": "Fahrten", "Add Work": "Arbeit hinzufügen", "The reason is": "Der Grund ist", "User does not have a wallet #1652": "Der Benutzer hat kein Portemonnaie #1652", "Price of trip": "Preis der Fahrt", "From:": "Von:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Für Schnell- und Lieferfahrten wird der Preis dynamisch berechnet. Für Komfortfahrten basiert der Preis auf Zeit und Entfernung.", "Phone Wallet Saved Successfully": "Telefon-Portemonnaie erfolgreich gespeichert", "Add wallet phone you use": "Fügen Sie das Telefon-Portemonnaie hinzu, das Sie verwenden", "Update Available": "Update verfügbar", "Phone number must be exactly 11 digits long": "Die Telefonnummer muss genau 11 Ziffern lang sein", "Insert Wallet phone number": "Geben Sie die Telefonnummer des Portemonnaies ein", "Phone number isn't an Egyptian phone number": "Die Telefonnummer ist keine ägyptische Telefonnummer", "A new version of the app is available. Please update to the latest version.": "Eine neue Version der App ist verfügbar. Bitte aktualisieren Sie auf die neueste Version.", "We use location to get accurate and nearest passengers for you": "Wir verwenden den Standort, um genaue und nahegelegene Fahrgäste für Sie zu finden", "This ride is already applied by another driver.": "Diese Fahrt wurde bereits von einem anderen Fahrer übernommen.", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "Wir verwenden Ihren genauen Standort, um den nächsten verfügbaren Fahrer zu finden und genaue Abhol- und Absetzinformationen bereitzustellen. Sie können dies in den Einstellungen verwalten.", "message From Driver": "Nachricht vom Fahrer", "message From passenger": "Nachricht vom Fahrgast", "Where are you, sir?": "Wo sind Sie, Sir?", "I've been trying to reach you but your phone is off.": "Ich habe versucht, Sie zu erreichen, aber Ihr Telefon ist ausgeschaltet.", "Please don't be late": "Bitte seien Sie nicht zu spät", "Please don't be late, I'm waiting for you at the specified location.": "Bitte seien Sie nicht zu spät, ich warte an dem angegebenen Ort auf Sie.", "My location is correct. You can search for me using the navigation app": "Mein Standort ist korrekt. Sie können mich über die Navigations-App suchen.", "Hello, I'm at the agreed-upon location": "Hallo, ich bin am vereinbarten Ort", "How much longer will you be?": "Wie viel länger werden Sie brauchen?", "Phone number is verified before": "Die Telefonnummer wurde bereits verifiziert", "Change Ride": "Fahrt ändern", "You can change the destination by long-pressing any point on the map": "Sie können das Ziel ändern, indem Sie einen beliebigen Punkt auf der Karte lange drücken", "Pick from map destination": "Ziel auf der Karte auswählen", "Pick or Tap to confirm": "Auswählen oder Tippen, um zu bestätigen", "Accepted your order": "Ihre Bestellung wurde angenommen", "Order Accepted": "Bestellung angenommen", "with type": "mit Typ", "accepted your order at price": "hat Ihre Bestellung zum Preis von", "Cancel Trip from driver": "Fahrt vom Fahrer stornieren", "you canceled order": "Sie haben die Bestellung storniert", "If you want order to another person": "Wenn Sie für eine andere Person bestellen möchten", "Ok I will go now.": "Ok, ich werde jetzt gehen.", "Hi, I will go now": "Hallo, ich werde jetzt gehen", "upgrade price": "Preis erhöhen", "Please enter a correct phone": "Bitte geben Sie eine korrekte Telefonnummer ein", "airport": "Flughafen", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "Beste Wahl für ein komfortables Auto mit einer flexiblen Route und Haltepunkten. Dieser Flughafen bietet Visa-Einreise zu diesem Preis.", "You can upgrade price to may driver accept your order": "Sie können den Preis erhöhen, damit der Fahrer Ihre Bestellung annimmt", "Change Route": "Route ändern", "No Captain Accepted Your Order": "Kein Kapitän hat Ihre Bestellung angenommen", "We are looking for a captain but the price may increase to let a captain accept": "Wir suchen einen Kapitän, aber der Preis könnte steigen, damit ein Kapitän annimmt", "No, I want to cancel this trip": "Nein, ich möchte diese Fahrt stornieren", "Trip Cancelled. The cost of the trip will be added to your wallet.": "Fahrt storniert. Die Kosten der Fahrt werden Ihrem Portemonnaie hinzugefügt.", "Attention": "Achtung", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "Fahrt storniert. Die Kosten der Fahrt werden von Ihrem Portemonnaie abgezogen.", "You will be charged for the cost of the driver coming to your location.": "Ihnen werden die Kosten für den Fahrer berechnet, der zu Ihrem Standort kommt.", "reject your order.": "hat Ihre Bestellung abgelehnt.", "Order Under Review": "Bestellung in Überprüfung", "is reviewing your order. They may need more information or a higher price.": "überprüft Ihre Bestellung. Möglicherweise benötigen sie mehr Informationen oder einen höheren Preis.", "The driver canceled your ride.": "Der Fahrer hat Ihre Fahrt storniert.", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "Wir haben noch keine Fahrer gefunden. Erwägen Sie, Ihre Fahrpreise zu erhöhen, um Ihr Angebot für Fahrer attraktiver zu machen.", "Increase Your Trip Fee (Optional)": "Erhöhen Sie Ihre Fahrpreise (optional)", "Vibration": "Vibration", "Resend code": "Code erneut senden", "token change": "Token-Änderung", "change device": "Gerät ändern", "Device Change Detected": "Gerätewechsel erkannt", "You can only use one device at a time. This device will now be set as your active device.": "Sie können nur ein Gerät gleichzeitig verwenden. Dieses Gerät wird nun als Ihr aktives Gerät festgelegt.", "Click here point": "Klicken Sie hier", "Are you want to change": "Möchten Sie ändern", "by": "von", "Enter your complaint here": "Geben Sie Ihre Beschwerde hier ein", "Please enter your complaint.": "Bitte geben Sie Ihre Beschwerde ein.", "Complaint data saved successfully": "Beschwerdedaten erfolgreich gespeichert", "Trip Monitor": "Fahrtmonitor", "Insert SOS Phone": "SOS-Telefon einfügen", "Add SOS Phone": "SOS-Telefon hinzufügen", "Trip Monitoring": "Fahrtüberwachung", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "Sehr geehrte/r ,\n\n 🚀 Ich habe gerade eine aufregende Reise begonnen und möchte die Details meiner Reise und meinen aktuellen Standort in Echtzeit mit Ihnen teilen! Bitte laden Sie die Intaleq-App herunter. Sie ermöglicht Ihnen, meine Reisedetails und meinen letzten Standort einzusehen.\n\n 👉 Download-Link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n Ich freue mich darauf, Sie während meines Abenteuers nah bei mir zu haben!\n\n Intaleq ,", "Send Intaleq app to him": "Senden Sie ihm die Intaleq-App", "No passenger found for the given phone number": "Kein Fahrgast für die angegebene Telefonnummer gefunden", "No user found for the given phone number": "Kein Benutzer für die angegebene Telefonnummer gefunden", "This price is": "Dieser Preis ist", "Work": "Arbeit", "Add Home": "Zuhause hinzufügen", "Notifications": "Benachrichtigungen", "💳 Pay with Credit Card": "💳 Mit Kreditkarte bezahlen", "⚠️ You need to choose an amount!": "⚠️ Sie müssen einen Betrag auswählen!", "💰 Pay with Wallet": "Mit Portemonnaie bezahlen", "You must restart the app to change the language.": "Sie müssen die App neu starten, um die Sprache zu ändern.", "joined": "beigetreten", "Driver joined the channel": "Der Fahrer ist dem Kanal beigetreten", "Driver left the channel": "Der Fahrer hat den Kanal verlassen", "Call Page": "Anrufseite", "Call End": "Anrufende", "Call Left": "Verbleibender Anruf", r"$ Next as Cash $!": " Nächstes als Bargeld!", "To use Wallet charge it": "Um das Portemonnaie zu verwenden, laden Sie es auf", "We are searching for the nearest driver to you": "Wir suchen den nächstgelegenen Fahrer für Sie", "Best choice for cities": "Beste Wahl für Städte", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "Rayeh Gai: Rundreiseservice für bequemes Reisen zwischen Städten, einfach und zuverlässig.", "Rayeh Gai": "Rayeh Gai", "This trip is for women only": "Diese Fahrt ist nur für Frauen", "Total budgets on month": "Gesamtbudgets des Monats", "You have call from driver": "Sie haben einen Anruf vom Fahrer", "Comfort": "Komfort", "Intaleq": "Geschwindigkeit", "Driver already has 2 trips within the specified period.": "Der Fahrer hat bereits 2 Fahrten innerhalb des angegebenen Zeitraums.", "The invitation was sent successfully": "Die Einladung wurde erfolgreich versendet", "Lady": "Dame", "You should select your country": "Sie sollten Ihr Land auswählen", "Scooter": "Roller", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "Eine Fahrt mit Vorabreservierung, die es Ihnen ermöglicht, die besten Kapitäne und Autos auszuwählen.", "Mishwar Vip": "Mishwar Vip", "The driver waiting you in picked location .": "Der Fahrer wartet an dem ausgewählten Ort auf Sie.", "About Us": "Über uns", "You can change the vibration feedback for all buttons": "Sie können das Vibrationsfeedback für alle Schaltflächen ändern", "Most Secure Methods": "Sicherste Methoden", "In-App VOIP Calls": "VOIP-Anrufe in der App", "Recorded Trips for Safety": "Aufgezeichnete Fahrten für die Sicherheit", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nWir legen auch Wert auf Erschwinglichkeit und bieten wettbewerbsfähige Preise, um Ihre Fahrten zugänglich zu machen.", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "Intaleq ist eine Mitfahr-App, die mit Blick auf Ihre Sicherheit und Erschwinglichkeit entwickelt wurde. Wir verbinden Sie mit zuverlässigen Fahrern in Ihrer Nähe und sorgen für eine bequeme und stressfreie Reiseerfahrung.\n\nHier sind einige der wichtigsten Funktionen, die uns auszeichnen:", "Sign In by Apple": "Mit Apple anmelden", "Sign In by Google": "Mit Google anmelden", "How do I request a ride?": "Wie buche ich eine Fahrt?", "Step-by-step instructions on how to request a ride through the Intaleq app.": "Schritt-für-Schritt-Anleitung, wie Sie eine Fahrt über die Intaleq-App buchen können.", "What types of vehicles are available?": "Welche Fahrzeugtypen sind verfügbar?", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "Intaleq bietet eine Vielzahl von Fahrzeugoptionen, die Ihren Bedürfnissen entsprechen, darunter Economy, Komfort und Luxus. Wählen Sie die Option, die am besten zu Ihrem Budget und Ihrer Passagierzahl passt.", "How can I pay for my ride?": "Wie kann ich meine Fahrt bezahlen?", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "Intaleq bietet mehrere Zahlungsmethoden für Ihre Bequemlichkeit. Wählen Sie zwischen Barzahlung oder Kredit-/Debitkartenzahlung während der Fahrtbestätigung.", "Can I cancel my ride?": "Kann ich meine Fahrt stornieren?", "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Intaleq cancellation policy for details.": "Ja, Sie können Ihre Fahrt unter bestimmten Bedingungen stornieren (z.B. bevor der Fahrer zugewiesen wird). Weitere Details finden Sie in der Stornierungsrichtlinie von Intaleq.", "Driver Registration & Requirements": "Fahrerregistrierung & Anforderungen", "How can I register as a driver?": "Wie kann ich mich als Fahrer registrieren?", "What are the requirements to become a driver?": "Welche Anforderungen gibt es, um Fahrer zu werden?", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "Besuchen Sie unsere Website oder kontaktieren Sie den Intaleq-Support für Informationen zur Fahrerregistrierung und den Anforderungen.", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "Intaleq bietet eine In-App-Chat-Funktion, die es Ihnen ermöglicht, während Ihrer Fahrt mit Ihrem Fahrer oder Fahrgast zu kommunizieren.", "What safety measures does Intaleq offer?": "Welche Sicherheitsmaßnahmen bietet Intaleq?", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "Intaleq priorisiert Ihre Sicherheit. Wir bieten Funktionen wie Fahrerverifizierung, In-App-Fahrtverfolgung und Notfallkontaktoptionen.", "Frequently Questions": "Häufige Fragen", "User does not exist.": "Benutzer existiert nicht.", "We need your phone number to contact you and to help you.": "Wir benötigen Ihre Telefonnummer, um Sie zu kontaktieren und Ihnen zu helfen.", "You will recieve code in sms message": "Sie erhalten den Code per SMS", "Please enter": "Bitte eingeben", "We need your phone number to contact you and to help you receive orders.": "Wir benötigen Ihre Telefonnummer, um Sie zu kontaktieren und Ihnen zu helfen, Bestellungen zu erhalten.", "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": "Der vollständige Name in Ihrem Strafregister stimmt nicht mit dem auf Ihrem Führerschein überein. Bitte überprüfen und die korrekten Dokumente vorlegen.", "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": "Die nationale Nummer auf Ihrem Führerschein stimmt nicht mit der auf Ihrem Ausweisdokument überein. Bitte überprüfen und die korrekten Dokumente vorlegen.", "Capture an Image of Your Criminal Record": "Machen Sie ein Bild Ihres Strafregisters", "IssueDate": "Ausstellungsdatum", "Capture an Image of Your car license front ": "Machen Sie ein Bild der Vorderseite Ihrer Fahrzeuglizenz", "Capture an Image of Your ID Document front": "Machen Sie ein Bild der Vorderseite Ihres Ausweisdokuments", "NationalID": "Nationale ID", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "Sie können die Intaleq-App mit Ihren Freunden teilen und Belohnungen für Fahrten verdienen, die sie mit Ihrem Code unternehmen", "FullName": "Vollständiger Name", "No invitation found yet!": "Noch keine Einladung gefunden!", "InspectionResult": "Inspektionsergebnis", "Criminal Record": "Strafregister", "Share App": "App teilen", "The email or phone number is already registered.": "Die E-Mail oder Telefonnummer ist bereits registriert.", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "Um ein Mitfahrfahrer in der Intaleq-App zu werden, müssen Sie Ihren Führerschein, Ihr Ausweisdokument und Ihr Fahrzeugregistrierungsdokument hochladen. Unser KI-System überprüft und verifiziert deren Authentizität in nur 2-3 Minuten. Wenn Ihre Dokumente genehmigt werden, können Sie als Fahrer in der Intaleq-App arbeiten. Bitte beachten Sie, dass die Einreichung betrügerischer Dokumente eine schwerwiegende Straftat darstellt und zu sofortiger Kündigung und rechtlichen Konsequenzen führen kann.", "Documents check": "Dokumentenprüfung", "Driver's License": "Führerschein", "for your first registration!": "für Ihre erste Registrierung!", "Get it Now!": "Holen Sie es sich jetzt!", "before": "vor", "Code not approved": "Code nicht genehmigt", "3000 LE": "3000 LE", "Do you have an invitation code from another driver?": "Haben Sie einen Einladungscode von einem anderen Fahrer?", "Paste the code here": "Fügen Sie den Code hier ein", "No, I don't have a code": "Nein, ich habe keinen Code", "Code approved": "Code genehmigt", "Install our app:": "Installieren Sie unsere App:", "Invite another driver and both get a gift after he completes 100 trips!": "Laden Sie einen anderen Fahrer ein und beide erhalten ein Geschenk, nachdem er 100 Fahrten abgeschlossen hat!", "Invite": "Einladen", "Are you sure?": "Sind Sie sicher?", "This will delete all recorded files from your device.": "Dadurch werden alle aufgezeichneten Dateien von Ihrem Gerät gelöscht.", "Select a file": "Datei auswählen", "Select a File": "Datei auswählen", "Delete": "Löschen", "attach audio of complain": "Audio der Beschwerde anhängen", "Phone Number Check": "Telefonnummernprüfung", "Drivers received orders": "Fahrer haben Bestellungen erhalten", "No audio files recorded.": "Keine Audiodateien aufgezeichnet.", "This is for delivery or a motorcycle.": "Dies ist für Lieferungen oder ein Motorrad.", "We will look for a new driver.\nPlease wait.": "Wir werden nach einem neuen Fahrer suchen.\nBitte warten Sie.", "Intaleq Reminder": "Intaleq-Erinnerung", "It's time to check the Intaleq app!": "Es ist Zeit, die Intaleq-App zu überprüfen!", "you must insert token code": "Sie müssen den Token-Code eingeben", "Something went wrong. Please try again.": "Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut.", "Trip Details": "Fahrtdetails", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "Der Kontext liefert keine Beschwerdedetails, daher kann ich keine Lösung für dieses Problem anbieten. Bitte geben Sie die notwendigen Informationen an, und ich werde Ihnen gerne helfen.", "Submit Your Complaint": "Reichen Sie Ihre Beschwerde ein", "Date": "Datum", "Price": "Preis", "Status": "Status", "Choose from contact": "Aus Kontakten auswählen", "attach correct audio": "Korrektes Audio anhängen", "be sure": "Seien Sie sicher", "Audio uploaded successfully.": "Audio erfolgreich hochgeladen.", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "Perfekt für Fahrgäste, die die neuesten Automodelle suchen und die Freiheit haben möchten, jede gewünschte Route zu wählen", "Share this code with your friends and earn rewards when they use it!": "Teilen Sie diesen Code mit Ihren Freunden und verdienen Sie Belohnungen, wenn sie ihn verwenden!", "Enter phone": "Telefon eingeben", "You deserve the gift": "Sie verdienen das Geschenk", "complete, you can claim your gift": "abgeschlossen, Sie können Ihr Geschenk einfordern", "When": "Wann", "Enter driver's phone": "Fahrertelefon eingeben", "Send Invite": "Einladung senden", "Show Invitations": "Einladungen anzeigen", "License Type": "Lizenztyp", "National Number": "Nationale Nummer", "Name (Arabic)": "Name (Arabisch)", "Name (English)": "Name (Englisch)", "Address": "Adresse", "Issue Date": "Ausstellungsdatum", "Expiry Date": "Ablaufdatum", "License Categories": "Lizenzkategorien", "driver_license": "Führerschein", "Capture an Image of Your Driver License": "Machen Sie ein Bild Ihres Führerscheins", "ID Documents Back": "Rückseite der Ausweisdokumente", "National ID": "Nationale ID", "Occupation": "Beruf", "Gender": "Geschlecht", "Religion": "Religion", "Marital Status": "Familienstand", "Full Name (Marital)": "Vollständiger Name (Familienstand)", "Expiration Date": "Ablaufdatum", "Capture an Image of Your ID Document Back": "Machen Sie ein Bild der Rückseite Ihres Ausweisdokuments", "ID Documents Front": "Vorderseite der Ausweisdokumente", "First Name": "Vorname", "CardID": "Karten-ID", "Vehicle Details Front": "Fahrzeugdetails Vorderseite", "Plate Number": "Nummernschild", "Owner Name": "Name des Eigentümers", "Vehicle Details Back": "Fahrzeugdetails Rückseite", "Make": "Marke", "Model": "Modell", "Year": "Jahr", "Chassis": "Chassis", "Color": "Farbe", "Displacement": "Hubraum", "Fuel": "Kraftstoff", "Tax Expiry Date": "Steuerablaufdatum", "Inspection Date": "Inspektionsdatum", "Capture an Image of Your car license back": "Machen Sie ein Bild der Rückseite Ihrer Fahrzeuglizenz", "Capture an Image of Your Driver’s License": "Machen Sie ein Bild Ihres Führerscheins", "Sign in with Google for easier email and name entry": "Melden Sie sich mit Google an, um E-Mail und Namen einfacher einzugeben", "You will choose allow all the time to be ready receive orders": "Sie werden die Erlaubnis jederzeit erteilen, um bereit zu sein, Bestellungen zu empfangen", "Welcome to Intaleq!": "Willkommen bei Intaleq!", "Get to your destination quickly and easily.": "Erreichen Sie Ihr Ziel schnell und einfach.", "Enjoy a safe and comfortable ride.": "Genießen Sie eine sichere und komfortable Fahrt.", "Choose Language": "Sprache auswählen", "Login": "Anmelden", "Pay with Wallet": "Mit Portemonnaie bezahlen", "Invalid MPIN": "Ungültiger MPIN", "Invalid OTP": "Ungültiger OTP", "Driver Accepted the Ride for You": "Der Fahrer hat die Fahrt für Sie angenommen", "Enter your email address": "Geben Sie Ihre E-Mail-Adresse ein", "Please enter Your Email.": "Bitte geben Sie Ihre E-Mail ein.", "Enter your phone number": "Geben Sie Ihre Telefonnummer ein", "Please enter your phone number.": "Bitte geben Sie Ihre Telefonnummer ein.", "Please enter Your Password.": "Bitte geben Sie Ihr Passwort ein.", "if you dont have account": "Wenn Sie kein Konto haben", "Register": "Registrieren", "Accept Ride's Terms & Review Privacy Notice": "Akzeptieren Sie die Nutzungsbedingungen und überprüfen Sie die Datenschutzerklärung", "By selecting 'I Agree' below, I confirm that I have read and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "Durch die Auswahl von 'Ich stimme zu' bestätige ich, dass ich die Nutzungsbedingungen gelesen und akzeptiert habe und die Datenschutzerklärung zur Kenntnis genommen habe. Ich bin mindestens 18 Jahre alt.", "I Agree": "Ich stimme zu", "Finish Monitor": "Monitor beenden", "First name": "Vorname", "Enter your first name": "Geben Sie Ihren Vornamen ein", "Please enter your first name.": "Bitte geben Sie Ihren Vornamen ein.", "Last name": "Nachname", "Enter your last name": "Geben Sie Ihren Nachnamen ein", "Please enter your last name.": "Bitte geben Sie Ihren Nachnamen ein.", "City": "Stadt", "Please enter your City.": "Bitte geben Sie Ihre Stadt ein.", "Male": "Männlich", "Female": "Weiblich", "Verify Email": "E-Mail verifizieren", "We sent 5 digit to your Email provided": "Wir haben einen 5-stelligen Code an die angegebene E-Mail gesendet", "5 digit": "5-stellig", "Send Verification Code": "Verifizierungscode senden", "Your Ride Duration is ": "Ihre Fahrtdauer beträgt ", "You will be thier in": "Sie werden dort sein in", "You trip distance is": "Ihre Fahrtstrecke beträgt", "Fee is": "Gebühr ist", "From : ": "Von : ", "To : ": "Nach : ", "Add Promo": "Promotion hinzufügen", "Confirm Selection": "Auswahl bestätigen", "distance is": "Entfernung ist", "Intaleq LLC": "Intaleq LLC", "Egypt's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "Ägyptens wegweisender Mitfahrservice, stolz entwickelt von arabischen und lokalen Eigentümern. Wir priorisieren, in Ihrer Nähe zu sein – sowohl für unsere geschätzten Fahrgäste als auch für unsere engagierten Kapitäne.", "Why Choose Intaleq?": "Warum Intaleq wählen?", "Closest to You": "Am nächsten bei Ihnen", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "Wir verbinden Sie mit den nächstgelegenen Fahrern für schnellere Abholungen und kürzere Fahrten.", "Uncompromising Security": "Kompromisslose Sicherheit", "Lady Captains Available": "Kapitäninnen verfügbar", "Recorded Trips (Voice & AI Analysis)": "Aufgezeichnete Fahrten (Sprach- & KI-Analyse)", "Fastest Complaint Response": "Schnellste Beschwerdeantwort", "Our dedicated customer service team ensures swift resolution of any issues.": "Unser engagiertes Kundenservice-Team sorgt für eine schnelle Lösung aller Probleme.", "Affordable for Everyone": "Erschwinglich für alle", "Frequently Asked Questions": "Häufig gestellte Fragen", "Getting Started": "Erste Schritte", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "Öffnen Sie einfach die Intaleq-App, geben Sie Ihr Ziel ein und tippen Sie auf \"Fahrt anfordern\". Die App verbindet Sie mit einem nahegelegenen Fahrer.", "Vehicle Options": "Fahrzeugoptionen", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "Intaleq bietet eine Vielzahl von Optionen, darunter Economy, Komfort und Luxus, die Ihren Bedürfnissen und Ihrem Budget entsprechen.", "Payments": "Zahlungen", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "Sie können Ihre Fahrt mit Bargeld oder Kredit-/Debitkarte bezahlen. Sie können Ihre bevorzugte Zahlungsmethode vor der Bestätigung Ihrer Fahrt auswählen.", "Ride Management": "Fahrtmanagement", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "Ja, Sie können Ihre Fahrt stornieren, aber bitte beachten Sie, dass Stornierungsgebühren anfallen können, je nachdem, wie weit im Voraus Sie stornieren.", "For Drivers": "Für Fahrer", "Driver Registration": "Fahrerregistrierung", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "Um sich als Fahrer zu registrieren oder mehr über die Anforderungen zu erfahren, besuchen Sie bitte unsere Website oder kontaktieren Sie den Intaleq-Support direkt.", "Visit Website/Contact Support": "Website besuchen/Support kontaktieren", "Close": "Schließen", "We are searching for the nearest driver": "Wir suchen den nächstgelegenen Fahrer", "Communication": "Kommunikation", "How do I communicate with the other party (passenger/driver)?": "Wie kommuniziere ich mit der anderen Partei (Fahrgast/Fahrer)?", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "Sie können mit Ihrem Fahrer oder Fahrgast über die In-App-Chat-Funktion kommunizieren, sobald eine Fahrt bestätigt ist.", "Safety & Security": "Sicherheit & Schutz", "What safety measures does Intaleq offer?": "Welche Sicherheitsmaßnahmen bietet Intaleq?", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "Intaleq bietet verschiedene Sicherheitsfunktionen, darunter Fahrerverifizierung, In-App-Fahrtverfolgung, Notfallkontaktoptionen und die Möglichkeit, Ihren Fahrtstatus mit vertrauenswürdigen Kontakten zu teilen.", "Enjoy competitive prices across all trip options, making travel accessible.": "Genießen Sie wettbewerbsfähige Preise für alle Fahrtoptionen, die Reisen zugänglich machen.", "Variety of Trip Choices": "Vielfalt der Fahrtoptionen", "Choose the trip option that perfectly suits your needs and preferences.": "Wählen Sie die Fahrtoption, die perfekt zu Ihren Bedürfnissen und Vorlieben passt.", "Your Choice, Our Priority": "Ihre Wahl, unsere Priorität", "Because we are near, you have the flexibility to choose the ride that works best for you.": "Weil wir in der Nähe sind, haben Sie die Flexibilität, die Fahrt zu wählen, die am besten zu Ihnen passt.", "duration is": "Dauer ist", "Setting": "Einstellung", "Find answers to common questions": "Finden Sie Antworten auf häufig gestellte Fragen", "I don't need a ride anymore": "Ich brauche keine Fahrt mehr", "I was just trying the application": "Ich habe die Anwendung nur ausprobiert", "No driver accepted my request": "Kein Fahrer hat meine Anfrage angenommen", "I added the wrong pick-up/drop-off location": "Ich habe den falschen Abhol-/Absetzort hinzugefügt", "I don't have a reason": "Ich habe keinen Grund", "Other": "Andere", "Can we know why you want to cancel Ride ?": "Können wir erfahren, warum Sie die Fahrt stornieren möchten?", "Cancel Ride": "Fahrt stornieren", "Add Payment Method": "Zahlungsmethode hinzufügen", "Your Wallet balance is ": "Ihr Portemonnaie-Guthaben beträgt ", "Ride Wallet": "Fahrt-Portemonnaie", "Payment Method": "Zahlungsmethode", "Type here Place": "Geben Sie hier den Ort ein", "Are You sure to ride to": "Sind Sie sicher, dass Sie fahren möchten nach", "Confirm": "Bestätigen", "You are Delete": "Sie löschen", "Deleted": "Gelöscht", "You Dont Have Any places yet !": "Sie haben noch keine Orte!", "From : Current Location": "Von : Aktueller Standort", "Profile": "Profil", "Home": "Zuhause", "My Cared": "Meine Karten", "Add Card": "Karte hinzufügen", "Add Credit Card": "Kreditkarte hinzufügen", "Please enter the cardholder name": "Bitte geben Sie den Namen des Karteninhabers ein", "Please enter the expiry date": "Bitte geben Sie das Ablaufdatum ein", "Please enter the CVV code": "Bitte geben Sie den CVV-Code ein", "Go To Favorite Places": "Zu Lieblingsorten gehen", "Go to this Target": "Gehen Sie zu diesem Ziel", "My Profile": "Mein Profil", "Sign Out": "Abmelden", "Are you want to go to this site": "Möchten Sie zu dieser Seite gehen?", "MyLocation": "Mein Standort", "my location": "mein Standort", "Target": "Ziel", "Update": "Aktualisieren", "You Should choose rate figure": "Sie sollten eine Bewertungszahl auswählen", "Login Captin": "Kapitän anmelden", "Register Captin": "Kapitän registrieren", "Send Verfication Code": "Verifizierungscode senden", "KM": "KM", "End Ride": "Fahrt beenden", "Minute": "Minute", "Go to passenger Location now": "Gehen Sie jetzt zum Standort des Fahrgasts", "Duration of the Ride is ": "Die Dauer der Fahrt beträgt ", "Distance of the Ride is ": "Die Entfernung der Fahrt beträgt ", "Name of the Passenger is ": "Der Name des Fahrgasts ist ", "Hello this is Captain": "Hallo, das ist Kapitän", "Start the Ride": "Fahrt starten", "Please Wait If passenger want To Cancel!": "Bitte warten Sie, wenn der Fahrgast stornieren möchte!", "Total Duration:": "Gesamtdauer:", "Active Duration:": "Aktive Dauer:", "Waiting for Captin ...": "Warten auf Kapitän ...", "Age is ": "Alter ist ", "Rating is ": "Bewertung ist ", " to arrive you.": "um zu Ihnen zu gelangen.", "Tariff": "Tarif", "Settings": "Einstellungen", "Feed Back": "Feedback", "Please enter a valid 16-digit card number": "Bitte geben Sie eine gültige 16-stellige Kartennummer ein", "Add Phone": "Telefon hinzufügen", "Please enter a phone number": "Bitte geben Sie eine Telefonnummer ein", "You dont Add Emergency Phone Yet!": "Sie haben noch kein Notfalltelefon hinzugefügt!", "You will arrive to your destination after ": "Sie werden nach ", "You can cancel Ride now": "Sie können die Fahrt jetzt stornieren", "You Can cancel Ride After Captain did not come in the time": "Sie können die Fahrt stornieren, wenn der Kapitän nicht rechtzeitig gekommen ist", "If you in Car Now. Press Start The Ride": "Wenn Sie jetzt im Auto sind. Drücken Sie Fahrt starten", "You Dont Have Any amount in": "Sie haben keinen Betrag in", "Wallet!": "Portemonnaie!", "You Have": "Sie haben", "Save Credit Card": "Kreditkarte speichern", "Show Promos": "Promotionen anzeigen", "10 and get 4% discount": "10 und erhalten Sie 4% Rabatt", "20 and get 6% discount": "20 und erhalten Sie 6% Rabatt", "40 and get 8% discount": "40 und erhalten Sie 8% Rabatt", "100 and get 11% discount": "100 und erhalten Sie 11% Rabatt", "Pay with Your PayPal": "Mit Ihrem PayPal bezahlen", "You will choose one of above !": "Sie werden eines der oben genannten auswählen!", "Delete My Account": "Mein Konto löschen", "Edit Profile": "Profil bearbeiten", "Name": "Name", "Update Gender": "Geschlecht aktualisieren", "Education": "Bildung", "Update Education": "Bildung aktualisieren", "Employment Type": "Beschäftigungsart", "SOS Phone": "SOS-Telefon", "High School Diploma": "Abitur", "Associate Degree": "Associate Degree", "Bachelor's Degree": "Bachelor-Abschluss", "Master's Degree": "Master-Abschluss", "Doctoral Degree": "Doktortitel", "Copy this Promo to use it in your Ride!": "Kopieren Sie diese Promotion, um sie in Ihrer Fahrt zu verwenden!", "To change some Settings": "Um einige Einstellungen zu ändern", "Order Request Page": "Bestellanfrageseite", "Rouats of Trip": "Routen der Fahrt", "Passenger name : ": "Fahrgastname : ", "Total From Passenger is ": "Gesamtbetrag vom Fahrgast ist ", "Duration To Passenger is ": "Dauer bis zum Fahrgast ist ", "Distance To Passenger is ": "Entfernung bis zum Fahrgast ist ", "Total For You is ": "Gesamtbetrag für Sie ist ", "Distance is ": "Entfernung ist ", " KM": " KM", "Duration of Trip is ": "Dauer der Fahrt ist ", " Minutes": " Minuten", "Apply Order": "Bestellung anwenden", "Refuse Order": "Bestellung ablehnen", "Rate Captain": "Kapitän bewerten", "Enter your Note": "Geben Sie Ihre Notiz ein", "Type something...": "Geben Sie etwas ein...", "Submit rating": "Bewertung abschicken", "Rate Passenger": "Fahrgast bewerten", "Ride Summary": "Fahrtzusammenfassung", "welcome_message": "Willkommen bei Intaleq!", "app_description": "Intaleq ist eine zuverlässige, sichere und zugängliche Mitfahr-App.", "get_to_destination": "Erreichen Sie Ihr Ziel schnell und einfach.", "get_a_ride": "Mit Intaleq können Sie in wenigen Minuten an Ihr Ziel gelangen.", "safe_and_comfortable": "Genießen Sie eine sichere und komfortable Fahrt.", "committed_to_safety": "Intaleq setzt sich für Sicherheit ein, und alle unsere Kapitäne werden sorgfältig überprüft.", "Driver Applied the Ride for You": "Der Fahrer hat die Fahrt für Sie übernommen", "Show latest promo": "Neueste Promotion anzeigen", "Cancel Trip": "Fahrt stornieren", "Passenger Cancel Trip": "Fahrgast hat die Fahrt storniert", "Accepted Ride": "Fahrt angenommen", "your ride is Accepted": "Ihre Fahrt wurde angenommen", "Please stay on the picked point.": "Bitte bleiben Sie am ausgewählten Punkt.", "Trip is Begin": "Fahrt beginnt", "Driver is waiting at pickup.": "Der Fahrer wartet am Abholpunkt.", "Driver is on the way": "Der Fahrer ist unterwegs", "Contact Options": "Kontaktoptionen", "Send a custom message": "Benutzerdefinierte Nachricht senden", "Type your message": "Geben Sie Ihre Nachricht ein", "Hi ,I will go now": "Hallo, ich werde jetzt gehen", "Passenger come to you": "Fahrgast kommt zu Ihnen", "Hi ,I Arrive your site": "Hallo, ich bin an Ihrem Standort angekommen", "Driver Finish Trip": "Fahrer beendet die Fahrt", "you will pay to Driver": "Sie werden den Fahrer bezahlen", "Driver Cancel Your Trip": "Der Fahrer hat Ihre Fahrt storniert", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "Sie werden den Fahrer bezahlen, Sie werden die Kosten für die Fahrerzeit bezahlen, sehen Sie in Ihrem Intaleq-Portemonnaie nach", "I will go now": "Ich werde jetzt gehen", "You Have Tips": "Sie haben Trinkgeld", " tips\nTotal is": " Trinkgeld\nGesamtbetrag ist", "No,I want": "Nein, ich möchte", "Your fee is ": "Ihre Gebühr ist ", "Do you want to pay Tips for this Driver": "Möchten Sie Trinkgeld für diesen Fahrer bezahlen?", "Tip is ": "Trinkgeld ist ", "Are you want to wait drivers to accept your order": "Möchten Sie warten, bis Fahrer Ihre Bestellung annehmen?", "This price is fixed even if the route changes for the driver.": "Dieser Preis ist fest, auch wenn sich die Route für den Fahrer ändert.", "The price may increase if the route changes.": "Der Preis kann steigen, wenn sich die Route ändert.", "The captain is responsible for the route.": "Der Kapitän ist für die Route verantwortlich.", "We are search for nearst driver": "Wir suchen den nächstgelegenen Fahrer", "Your order is being prepared": "Ihre Bestellung wird vorbereitet", "The drivers are reviewing your request": "Die Fahrer überprüfen Ihre Anfrage", "Your order sent to drivers": "Ihre Bestellung wurde an die Fahrer gesendet", "You can call or record audio of this trip": "Sie können anrufen oder das Audio dieser Fahrt aufnehmen", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "Die Fahrt hat begonnen! Zögern Sie nicht, Notrufnummern zu kontaktieren, Ihre Fahrt zu teilen oder die Sprachaufzeichnung für die Reise zu aktivieren", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "Bitte stellen Sie sicher, dass Sie alle Ihre persönlichen Gegenstände haben und dass etwaige verbleibende Fahrpreise, falls zutreffend, vor dem Verlassen Ihrem Portemonnaie hinzugefügt wurden. Vielen Dank, dass Sie die Intaleq-App gewählt haben", "Don’t forget your personal belongings.": "Vergessen Sie nicht Ihre persönlichen Gegenstände.", "Camera Access Denied.": "Kamerazugriff verweigert.", "Open Settings": "Einstellungen öffnen", "GPS Required Allow !.": "GPS erforderlich, erlauben!.", "Your Account is Deleted": "Ihr Konto wurde gelöscht", "Are you sure to delete your account?": "Sind Sie sicher, dass Sie Ihr Konto löschen möchten?", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "Ihre Daten werden nach 2 Wochen gelöscht\nUnd Sie können die App nach 1 Monat nicht mehr verwenden ", "Enter Your First Name": "Geben Sie Ihren Vornamen ein", "Are you Sure to LogOut?": "Sind Sie sicher, dass Sie sich abmelden möchten?", "Email Wrong": "E-Mail falsch", "Email you inserted is Wrong.": "Die von Ihnen eingegebene E-Mail ist falsch.", "You have finished all times ": "Sie haben alle Zeiten beendet ", "if you want help you can email us here": "Wenn Sie Hilfe benötigen, können Sie uns hier eine E-Mail senden", "Thanks": "Danke", "Email Us": "Senden Sie uns eine E-Mail", "I cant register in your app in face detection ": "Ich kann mich in Ihrer App nicht mit Gesichtserkennung registrieren ", "Hi": "Hallo", "No face detected": "Kein Gesicht erkannt", "Image detecting result is ": "Das Ergebnis der Bilderkennung ist ", "from 3 times Take Attention": "von 3 Malen, achten Sie darauf", "Be sure for take accurate images please\nYou have": "Bitte achten Sie darauf, genaue Bilder aufzunehmen\nSie haben", "image verified": "Bild verifiziert", "Next": "Weiter", "There is no help Question here": "Hier gibt es keine Hilfefrage", "You dont have Points": "Sie haben keine Punkte", "You Are Stopped For this Day !": "Sie sind für diesen Tag gestoppt!", "You must be charge your Account": "Sie müssen Ihr Konto aufladen", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "Sie haben 3 Fahrten an diesem Tag abgelehnt, das ist der Grund \nBis morgen!", "Recharge my Account": "Mein Konto aufladen", "Ok , See you Tomorrow": "Ok, bis morgen", "You are Stopped": "Sie sind gestoppt", "Connected": "Verbunden", "Not Connected": "Nicht verbunden", "Your are far from passenger location": "Sie sind weit vom Standort des Fahrgasts entfernt", "go to your passenger location before\nPassenger cancel trip": "gehen Sie zum Standort des Fahrgasts, bevor\n der Fahrgast die Fahrt storniert", "You will get cost of your work for this trip": "Sie erhalten die Kosten für Ihre Arbeit für diese Fahrt", " in your wallet": "in Ihrem Portemonnaie", "you gain": "Sie erhalten", "Order Cancelled by Passenger": "Bestellung vom Fahrgast storniert", "Success": "Erfolg", "Feedback data saved successfully": "Feedback-Daten erfolgreich gespeichert", "No Promo for today .": "Keine Promotion für heute.", "Select your destination": "Wählen Sie Ihr Ziel aus", "Search for your Start point": "Suchen Sie Ihren Startpunkt", "Search for waypoint": "Wegpunkt suchen", "Current Location": "Aktueller Standort", "Add Location 1": "Standort 1 hinzufügen", "You must Verify email !.": "Sie müssen die E-Mail verifizieren!.", "Cropper": "Zuschneider", "Saved Sucssefully": "Erfolgreich gespeichert", "Select Date": "Datum auswählen", "Birth Date": "Geburtsdatum", "Ok": "Ok", "the 500 points equal 30 JOD": "500 Punkte entsprechen 30 JOD", "the 500 points equal 30 JOD for you \nSo go and gain your money": "500 Punkte entsprechen 30 JOD für Sie \nAlso los, verdienen Sie Ihr Geld", "token updated": "Token aktualisiert", "Add Location 2": "Standort 2 hinzufügen", "Add Location 3": "Standort 3 hinzufügen", "Add Location 4": "Standort 4 hinzufügen", "Waiting for your location": "Warten auf Ihren Standort", "Search for your destination": "Suchen Sie Ihr Ziel", "Hi! This is": "Hallo! Das ist", " I am using": " ich benutze", " to ride with": " um mitzufahren", " as the driver.": " als Fahrer.", "is driving a ": "fährt ein ", " with license plate ": " mit dem Nummernschild ", " I am currently located at ": "Ich befinde mich derzeit an ", "Please go to Car now ": "Bitte gehen Sie jetzt zum Auto ", "You will receive a code in WhatsApp Messenger": "Sie erhalten einen Code in WhatsApp Messenger", "If you need assistance, contact us": "Wenn Sie Hilfe benötigen, kontaktieren Sie uns", "Promo Ended": "Promotion beendet", "Enter the promo code and get": "Geben Sie den Promo-Code ein und erhalten Sie", "DISCOUNT": "RABATT", "No wallet record found": "Kein Portemonnaie-Eintrag gefunden", "for": "für", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "Intaleq ist die sicherste Mitfahr-App, die viele Funktionen für sowohl Kapitäne als auch Fahrgäste einführt. Wir bieten die niedrigste Kommissionsrate von nur 8%, um sicherzustellen, dass Sie den besten Wert für Ihre Fahrten erhalten. Unsere App beinhaltet Versicherungen für die besten Kapitäne, regelmäßige Wartung der Autos durch Top-Ingenieure und Dienstleistungen vor Ort, um ein respektvolles und hochwertiges Erlebnis für alle Nutzer zu gewährleisten.", "You can contact us during working hours from 12:00 - 19:00.": "Sie können uns während der Arbeitszeiten von 12:00 - 19:00 Uhr kontaktieren.", "Choose a contact option": "Wählen Sie eine Kontaktoption", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "Die Arbeitszeit ist von 12:00 - 19:00 Uhr.\nSie können eine WhatsApp-Nachricht oder E-Mail senden.", "Promo code copied to clipboard!": "Promo-Code in die Zwischenablage kopiert!", "Copy Code": "Code kopieren", "Your invite code was successfully applied!": "Ihr Einladungscode wurde erfolgreich angewendet!", "Payment Options": "Zahlungsoptionen", "wait 1 minute to receive message": "Warten Sie 1 Minute, um die Nachricht zu erhalten", "Promo Copied!": "Promotion kopiert!", "You have copied the promo code.": "Sie haben den Promo-Code kopiert.", "Valid Until:": "Gültig bis:", "Select Payment Amount": "Zahlungsbetrag auswählen", "The promotion period has ended.": "Die Promotionsperiode ist beendet.", "Promo Code Accepted": "Promo-Code akzeptiert", "Tap on the promo code to copy it!": "Tippen Sie auf den Promo-Code, um ihn zu kopieren!", "Lowest Price Achieved": "Niedrigster Preis erreicht", "Cannot apply further discounts.": "Weitere Rabatte können nicht angewendet werden.", "Promo Already Used": "Promotion bereits verwendet", "Invitation Used": "Einladung verwendet", "You have already used this promo code.": "Sie haben diesen Promo-Code bereits verwendet.", "Insert Your Promo Code": "Geben Sie Ihren Promo-Code ein", "Enter promo code here": "Geben Sie den Promo-Code hier ein", "Please enter a valid promo code": "Bitte geben Sie einen gültigen Promo-Code ein", "Awfar Car": "Awfar Auto", "Old and affordable, perfect for budget rides.": "Alt und erschwinglich, perfekt für preiswerte Fahrten.", " If you need to reach me, please contact the driver directly at": " Wenn Sie mich erreichen müssen, kontaktieren Sie bitte den Fahrer direkt unter", "No Car or Driver Found in your area.": "Kein Auto oder Fahrer in Ihrer Region gefunden.", "Please Try anther time ": "Bitte versuchen Sie es zu einem anderen Zeitpunkt ", "There no Driver Aplly your order sorry for that ": "Es hat kein Fahrer Ihre Bestellung angenommen, tut uns leid ", "Trip Cancelled": "Fahrt storniert", "The Driver Will be in your location soon .": "Der Fahrer wird bald an Ihrem Standort sein .", "The distance less than 500 meter.": "Die Entfernung beträgt weniger als 500 Meter.", "Promo End !": "Promotion beendet!", "There is no notification yet": "Es gibt noch keine Benachrichtigung", "Use Touch ID or Face ID to confirm payment": "Verwenden Sie Touch ID oder Face ID, um die Zahlung zu bestätigen", "Contact us for any questions on your order.": "Kontaktieren Sie uns bei Fragen zu Ihrer Bestellung.", "Pyament Cancelled .": "Zahlung storniert .", "type here": "hier eingeben", "Scan Driver License": "Führerschein scannen", "Please put your licence in these border": "Bitte legen Sie Ihren Führerschein in diesen Rahmen", "Camera not initialized yet": "Kamera noch nicht initialisiert", "Take Image": "Bild aufnehmen", "AI Page": "KI-Seite", "Take Picture Of ID Card": "Machen Sie ein Bild Ihres Ausweises", "Take Picture Of Driver License Card": "Machen Sie ein Bild Ihrer Führerscheinkarte", "We are process picture please wait ": "Wir verarbeiten das Bild, bitte warten Sie ", "There is no data yet.": "Es gibt noch keine Daten.", "Name :": "Name :", "Drivers License Class: ": "Führerscheinklasse: ", "Document Number: ": "Dokumentennummer: ", "Address: ": "Adresse: ", "Height: ": "Größe: ", "Expiry Date: ": "Ablaufdatum: ", "Date of Birth: ": "Geburtsdatum: ", "You can\'t continue with us .\nYou should renew Driver license": "Sie können nicht mit uns weitermachen .\nSie sollten Ihren Führerschein erneuern", "Detect Your Face ": "Erkennen Sie Ihr Gesicht ", "Go to next step\nscan Car License.": "Gehen Sie zum nächsten Schritt\nscannen Sie die Fahrzeuglizenz.", "Name in arabic": "Name auf Arabisch", "Drivers License Class": "Führerscheinklasse", "Date of Birth": "Geburtsdatum", "Selected Date": "Ausgewähltes Datum", "Select Time": "Zeit auswählen", "Selected Time": "Ausgewählte Zeit", "Selected Date and Time": "Ausgewähltes Datum und Uhrzeit", "Lets check Car license ": "Lassen Sie uns die Fahrzeuglizenz überprüfen ", "Car": "Auto", "Plate": "Nummernschild", "N/A": "N/A", "Rides": "Fahrten", "Age": "Alter", "Selected driver": "Ausgewählter Fahrer", "Lets check License Back Face": "Lassen Sie uns die Rückseite des Führerscheins überprüfen", "Car License Card": "Fahrzeuglizenzkarte", "No image selected yet": "Noch kein Bild ausgewählt", "Made :": "Hergestellt :", "model :": "Modell :", "VIN :": "Fahrgestellnummer :", "year :": "Jahr :", "ُExpire Date": "Ablaufdatum", "Login Driver": "Fahrer anmelden", "Password must br at least 6 character.": "Das Passwort muss mindestens 6 Zeichen lang sein.", "if you don\'t have account": "Wenn Sie kein Konto haben", "Here recorded trips audio": "Hier sind die Audioaufnahmen der Fahrten", "Register as Driver": "Als Fahrer registrieren", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "Durch die Auswahl von \"Ich stimme zu\" bestätige ich, dass ich die Nutzungsbedingungen gelesen und akzeptiert habe und die ", ". I am at least 18 years of age.": ". Ich bin mindestens 18 Jahre alt.", "Log Out Page": "Abmeldeseite", "Log Off": "Abmelden", "Register Driver": "Fahrer registrieren", "Verify Email For Driver": "E-Mail für Fahrer verifizieren", "Admin DashBoard": "Admin-Dashboard", "Your name": "Ihr Name", "your ride is applied": "Ihre Fahrt wurde übernommen", "Your password": "Ihr Passwort", "H and": "Stunden und", "LE": "LE", "JOD": "JOD", "m": "Minuten", "We search nearst Driver to you": "Wir suchen den nächstgelegenen Fahrer für Sie", "please wait till driver accept your order": "Bitte warten Sie, bis der Fahrer Ihre Bestellung annimmt", "No accepted orders? Try raising your trip fee to attract riders.": "Keine angenommenen Bestellungen? Versuchen Sie, Ihre Fahrpreise zu erhöhen, um Fahrer anzulocken.", "You should select one": "Sie sollten eines auswählen", "The driver accept your order for": "Der Fahrer hat Ihre Bestellung für", "Increase Fee": "Preis erhöhen", "No, thanks": "Nein, danke", "The driver on your way": "Der Fahrer ist auf dem Weg zu Ihnen", "Total price from ": "Gesamtpreis ab ", "Order Details Intaleq": "Bestelldetails Geschwindigkeit", "Order Applied": "Bestellung übernommen", "accepted your order": "hat Ihre Bestellung angenommen", "We regret to inform you that another driver has accepted this order.": "Wir bedauern, Ihnen mitteilen zu müssen, dass ein anderer Fahrer diese Bestellung angenommen hat.", "Selected file:": "Ausgewählte Datei:", "Your trip cost is": "Ihre Fahrtkosten betragen", "this will delete all files from your device": "Dadurch werden alle Dateien von Ihrem Gerät gelöscht", " in your": "in Ihrem", "Exclusive offers and discounts always with the Intaleq app": "Exklusive Angebote und Rabatte immer mit der Intaleq-App", "Please go to Car Driver": "Bitte gehen Sie zum Autofahrer", " wallet due to a previous trip.": "Portemonnaie aufgrund einer vorherigen Fahrt.", "Submit Question": "Frage einreichen", "Please enter your Question.": "Bitte geben Sie Ihre Frage ein.", "Help Details": "Hilfedetails", "No trip yet found": "Noch keine Fahrt gefunden", "No Response yet.": "Noch keine Antwort.", " You Earn today is ": " Sie haben heute verdient ", " You Have in": " Sie haben in", "Total points is ": "Die Gesamtpunktzahl beträgt ", "Total Connection Duration:": "Gesamte Verbindungsdauer:", " H and": " Stunden und", "Passenger name : ": "Fahrgastname : ", "Cost Of Trip IS ": "Die Fahrtkosten betragen ", "Arrival time": "Ankunftszeit", "arrival time to reach your point": "Ankunftszeit, um Ihren Punkt zu erreichen", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Für Schnell- und Rollerfahrten wird der Preis dynamisch berechnet. Für Komfortfahrten basiert der Preis auf Zeit und Entfernung.", "Hello this is Driver": "Hallo, das ist der Fahrer", "Is the Passenger in your Car ?": "Ist der Fahrgast in Ihrem Auto?", "Please wait for the passenger to enter the car before starting the trip.": "Bitte warten Sie, bis der Fahrgast ins Auto steigt, bevor Sie die Fahrt starten.", "No ,still Waiting.": "Nein, noch warten.", "I arrive you": "Ich komme zu Ihnen", "I Arrive your site": "Ich bin an Ihrem Standort angekommen", "You are not in near to passenger location": "Sie sind nicht in der Nähe des Standorts des Fahrgasts", "please go to picker location exactly": "Bitte gehen Sie genau zum Abholort", "You Can Cancel Trip And get Cost of Trip From": "Sie können die Fahrt stornieren und die Fahrtkosten von", "Are you sure to cancel?": "Sind Sie sicher, dass Sie stornieren möchten?", "Insert Emergincy Number": "Notrufnummer einfügen", "Best choice for comfort car and flexible route and stops point": "Beste Wahl für ein komfortables Auto und eine flexible Route mit Haltepunkten", "Insert": "Einfügen", "This is for scooter or a motorcycle.": "Dies ist für einen Roller oder ein Motorrad.", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "Diese Fahrt geht direkt von Ihrem Startpunkt zu Ihrem Ziel für einen festen Preis. Der Fahrer muss der geplanten Route folgen.", "You can decline a request without any cost": "Sie können eine Anfrage ohne Kosten ablehnen", "Perfect for adventure seekers who want to experience something new and exciting": "Perfekt für Abenteurer, die etwas Neues und Aufregendes erleben möchten", "My current location is:": "Mein aktueller Standort ist:", "and I have a trip on": "und ich habe eine Fahrt am", "App with Passenger": "App mit Fahrgast", "You will be pay the cost to driver or we will get it from you on next trip": "Sie werden die Kosten an den Fahrer zahlen oder wir werden sie bei der nächsten Fahrt von Ihnen einziehen", "Trip has Steps": "Die Fahrt hat Schritte", "Distance from Passenger to destination is ": "Die Entfernung vom Fahrgast zum Ziel beträgt ", "price is": "Preis ist", "This ride type does not allow changes to the destination or additional stops": "Dieser Fahrttyp erlaubt keine Änderungen des Ziels oder zusätzliche Stopps", "This price may be changed": "Dieser Preis kann geändert werden", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "Keine SIM-Karte, kein Problem! Rufen Sie Ihren Fahrer direkt über unsere App an. Wir verwenden fortschrittliche Technologie, um Ihre Privatsphäre zu gewährleisten.", "This ride type allows changes, but the price may increase": "Dieser Fahrttyp erlaubt Änderungen, aber der Preis kann steigen", "Select one message": "Wählen Sie eine Nachricht", "I'm waiting for you": "Ich warte auf Sie", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "Wir haben festgestellt, dass die Geschwindigkeit 100 km/h überschreitet. Bitte verlangsamen Sie für Ihre Sicherheit. Wenn Sie sich unsicher fühlen, können Sie Ihre Fahrtdetails mit einem Kontakt teilen oder die Polizei über die rote SOS-Taste anrufen.", "Warning: Intaleqing detected!": "Warnung: Geschwindigkeitsüberschreitung erkannt!", "Please help! Contact me as soon as possible.": "Bitte helfen Sie! Kontaktieren Sie mich so schnell wie möglich.", "Share Trip Details": "Fahrtdetails teilen", "Car Plate is ": "Das Nummernschild ist ", "VIP Order": "VIP-Bestellung", "the 300 points equal 300 L.E for you \nSo go and gain your money": "300 Punkte entsprechen 300 L.E für Sie \nAlso los, verdienen Sie Ihr Geld", "the 300 points equal 300 L.E": "300 Punkte entsprechen 300 L.E", "The payment was not approved. Please try again.": "Die Zahlung wurde nicht genehmigt. Bitte versuchen Sie es erneut.", "Payment Failed": "Zahlung fehlgeschlagen", "Error": "Fehler", "This is a scheduled notification.": "Dies ist eine geplante Benachrichtigung.", "An error occurred during the payment process.": "Während des Zahlungsvorgangs ist ein Fehler aufgetreten.", "The payment was approved.": "Die Zahlung wurde genehmigt.", "Payment Successful": "Zahlung erfolgreich", "No ride found yet": "Noch keine Fahrt gefunden", "Accept Order": "Bestellung annehmen", "Bottom Bar Example": "Beispiel für die untere Leiste", "Driver phone": "Fahrertelefon", "Statistics": "Statistiken", "Origin": "Ursprung", "Destination": "Ziel", "Driver Name": "Fahrername", "Driver Car Plate": "Fahrer-Nummernschild", "Available for rides": "Verfügbar für Fahrten", "Scan Id": "ID scannen", "Camera not initilaized yet": "Kamera noch nicht initialisiert", "Scan ID MklGoogle": "ID MklGoogle scannen", "Language": "Sprache", "Jordan": "Jordanien", "USA": "USA", "Egypt": "Ägypten", "Turkey": "Türkei", "Saudi Arabia": "Saudi-Arabien", "Qatar": "Katar", "Bahrain": "Bahrain", "Kuwait": "Kuwait", "But you have a negative salary of": "Aber Sie haben ein negatives Gehalt von", "Promo Code": "Promo-Code", "Your trip distance is": "Ihre Fahrtstrecke beträgt", "Enter promo code": "Promo-Code eingeben", "You have promo!": "Sie haben eine Promotion!", "Cost Duration": "Kostendauer", "Duration is": "Dauer ist", "Leave": "Verlassen", "Join": "Beitreten", "Heading your way now. Please be ready.": "Jetzt auf dem Weg zu Ihnen. Bitte seien Sie bereit.", "Approaching your area. Should be there in 3 minutes.": "Nähern Sie sich Ihrem Gebiet. Sollte in 3 Minuten da sein.", "There's heavy traffic here. Can you suggest an alternate pickup point?": "Hier herrscht starker Verkehr. Können Sie einen alternativen Abholpunkt vorschlagen?", "This ride is already taken by another driver.": "Diese Fahrt wurde bereits von einem anderen Fahrer übernommen.", "You Should be select reason.": "Sie sollten einen Grund auswählen.", " \$": " \$", "Waiting for Driver ...": "Warten auf Fahrer ...", "Latest Recent Trip": "Letzte kürzliche Fahrt", "from your list": "aus Ihrer Liste", "Do you want to change Work location": "Möchten Sie den Arbeitsort ändern?", "Do you want to change Home location": "Möchten Sie den Wohnort ändern?", "We Are Sorry That we dont have cars in your Location!": "Es tut uns leid, dass wir keine Autos in Ihrer Region haben!", "Choose from Map": "Aus der Karte auswählen", "Pick your ride location on the map - Tap to confirm": "Wählen Sie Ihren Fahrtort auf der Karte aus - Tippen Sie, um zu bestätigen", "Closest & Cheapest": "Nächstgelegen & Günstigst", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "Intaleq ist die Mitfahr-App, die sicher, zuverlässig und zugänglich ist.", "With Intaleq, you can get a ride to your destination in minutes.": "Mit Intaleq können Sie in wenigen Minuten eine Fahrt zu Ihrem Ziel bekommen.", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "Intaleq setzt sich für Sicherheit ein, und alle unsere Kapitäne werden sorgfältig überprüft.", "Pick from map": "Aus der Karte auswählen", "No Car in your site. Sorry!": "Kein Auto in Ihrer Region. Entschuldigung!", "Nearest Car for you about ": "Nächstes Auto für Sie in etwa ", "From :": "Von :", "Get Details of Trip": "Fahrtdetails erhalten", "If you want add stop click here": "Wenn Sie einen Stopp hinzufügen möchten, klicken Sie hier", "Where you want go ": "Wohin Sie gehen möchten ", "My Card": "Meine Karte", "Start Record": "Aufnahme starten", "Wallet": "Portemonnaie", "History of Trip": "Fahrtverlauf", "Helping Center": "Hilfezentrum", "Record saved": "Aufnahme gespeichert", "Trips recorded": "Fahrten aufgezeichnet", "Select Your Country": "Wählen Sie Ihr Land aus", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "Um sicherzustellen, dass Sie die genauesten Informationen für Ihren Standort erhalten, wählen Sie bitte unten Ihr Land aus. Dies hilft, das App-Erlebnis und den Inhalt auf Ihr Land zuzuschneiden.", "Are you sure to delete recorded files": "Sind Sie sicher, dass Sie die aufgezeichneten Dateien löschen möchten?", "Select recorded trip": "Aufgezeichnete Fahrt auswählen", "Card Number": "Kartennummer", "Hi, Where to ": "Hallo, wohin ", "Pick your destination from Map": "Wählen Sie Ihr Ziel aus der Karte aus", "Add Stops": "Stopps hinzufügen", "Get Direction": "Route erhalten", "Add Location": "Standort hinzufügen", "Switch Rider": "Fahrgast wechseln", "You will arrive to your destination after timer end.": "Sie werden nach Ablauf des Timers an Ihrem Ziel ankommen.", "You can cancel trip": "Sie können die Fahrt stornieren", "The driver waitting you in picked location .": "Der Fahrer wartet an dem ausgewählten Ort auf Sie .", "10\$ and get 3% discount": "10\$ und erhalten Sie 3% Rabatt", "20\$ and get 4% discount": "20\$ und erhalten Sie 4% Rabatt", "40\$ and get 6% discount": "40\$ und erhalten Sie 6% Rabatt", "100\$ and get 9% discount": "100\$ und erhalten Sie 9% Rabatt", "Pay with Your": "Bezahlen Sie mit Ihrem", "Pay with Credit Card": "Mit Kreditkarte bezahlen", "Payment History": "Zahlungsverlauf", "Show Promos to Charge": "Promotionen zum Aufladen anzeigen", "Point": "Punkt", "How many hours would you like to wait?": "Wie viele Stunden möchten Sie warten?", "Driver Wallet": "Fahrer-Portemonnaie", "Choose between those Type Cars": "Wählen Sie zwischen diesen Autotypen", "hour": "Stunde", "Select Waiting Hours": "Wartezeit auswählen", "Total Points is": "Die Gesamtpunktzahl beträgt", "You will receive a code in SMS message": "Sie erhalten einen Code per SMS", "Done": "Fertig", "Total Budget from trips is ": "Das Gesamtbudget aus Fahrten beträgt ", "Total Amount:": "Gesamtbetrag:", "Total Budget from trips by\nCredit card is ": "Das Gesamtbudget aus Fahrten per\nKreditkarte beträgt ", "This amount for all trip I get from Passengers": "Dieser Betrag für alle Fahrten, die ich von Fahrgästen erhalte", "Pay from my budget": "Aus meinem Budget bezahlen", "This amount for all trip I get from Passengers and Collected For me in": "Dieser Betrag für alle Fahrten, die ich von Fahrgästen erhalte und für mich gesammelt habe in", "You can buy points from your budget": "Sie können Punkte aus Ihrem Budget kaufen", "insert amount": "Betrag einfügen", "You can buy Points to let you online\nby this list below": "Sie können Punkte kaufen, um online zu gehen\nmit dieser Liste unten", "Create Wallet to receive your money": "Erstellen Sie ein Portemonnaie, um Ihr Geld zu erhalten", "Enter your feedback here": "Geben Sie Ihr Feedback hier ein", "Please enter your feedback.": "Bitte geben Sie Ihr Feedback ein.", "Feedback": "Feedback", "Submit ": "Einreichen ", "Click here to Show it in Map": "Klicken Sie hier, um es auf der Karte anzuzeigen", "Canceled": "Storniert", "Type your Email": "Geben Sie Ihre E-Mail ein", "No I want": "Nein, ich möchte", "Email is": "E-Mail ist", "Phone Number is": "Telefonnummer ist", "Date of Birth is": "Geburtsdatum ist", "Sex is ": "Geschlecht ist ", "Car Details": "Autodetails", "VIN is": "Fahrgestellnummer ist", "Color is ": "Farbe ist ", "Make is ": "Marke ist ", "Model is": "Modell ist", "Year is": "Jahr ist", "Expiration Date ": "Ablaufdatum ", "Edit Your data": "Bearbeiten Sie Ihre Daten", "write vin for your car": "Geben Sie die Fahrgestellnummer Ihres Autos ein", "VIN": "Fahrgestellnummer", "write Color for your car": "Geben Sie die Farbe Ihres Autos ein", "write Make for your car": "Geben Sie die Marke Ihres Autos ein", "write Model for your car": "Geben Sie das Modell Ihres Autos ein", "write Year for your car": "Geben Sie das Jahr Ihres Autos ein", "write Expiration Date for your car": "Geben Sie das Ablaufdatum Ihres Autos ein", "Tariffs": "Tarife", "Minimum fare": "Mindesttarif", "Maximum fare": "Höchsttarif", "Flag-down fee": "Grundpreis", "Including Tax": "Inklusive Steuer", "BookingFee": "Buchungsgebühr", "Morning": "Morgen", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "von 07:30 bis 10:30 (Donnerstag, Freitag, Samstag, Montag)", "Evening": "Abend", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "von 12:00 bis 15:00 (Donnerstag, Freitag, Samstag, Montag)", "Night": "Nacht", "You have in account": "Sie haben auf dem Konto", "Select Country": "Land auswählen", "Ride Today : ": "Fahrt heute : ", "After this period\nYou can\'t cancel!": "Nach dieser Zeit\nkönnen Sie nicht stornieren!", "from 23:59 till 05:30": "von 23:59 bis 05:30", "Rate Driver": "Fahrer bewerten", "Total Cost is ": "Die Gesamtkosten betragen ", "Write note": "Notiz schreiben", "Time to arrive": "Ankunftszeit", "Ride Summaries": "Fahrtzusammenfassungen", "Total Cost": "Gesamtkosten", "Average of Hours of": "Durchschnitt der Stunden von", " is ON for this month": " ist diesen Monat aktiviert", "Days": "Tage", "Total Hours on month": "Gesamtstunden im Monat", "Counts of Hours on days": "Anzahl der Stunden pro Tag", "OrderId": "Bestell-ID", "created time": "Erstellungszeit", "Intaleq Over": "Geschwindigkeitsüberschreitung", "I will slow down": "Ich werde langsamer fahren", "Map Passenger": "Karte Fahrgast", "Be Slowly": "Langsam sein", "If you want to make Google Map App run directly when you apply order": "Wenn Sie möchten, dass die Google Map App direkt ausgeführt wird, wenn Sie eine Bestellung aufgeben", "You can change the language of the app": "Sie können die Sprache der App ändern", "Your Budget less than needed": "Ihr Budget ist geringer als benötigt", "You can change the Country to get all features": "Sie können das Land ändern, um alle Funktionen zu erhalten", "Change Country": "Land ändern" }, "es": { "Order": "Pedido", "Where to": "A dónde", "Where are you going?": "¿A dónde vas?", "Quick Actions": "Acciones rápidas", "My Wallet": "Mi billetera", "Order History": "Historial de pedidos", "Contact Us": "Contáctanos", "Driver": "Conductor", "Complaint": "Queja", "Promos": "Promociones", "Recent Places": "Lugares recientes", "From": "Desde", "WhatsApp Location Extractor": "Extractor de ubicación de WhatsApp", "Location Link": "Enlace de ubicación", "Paste location link here": "Pega el enlace de ubicación aquí", "Go to this location": "Ir a esta ubicación", "Paste WhatsApp location link": "Pega el enlace de ubicación de WhatsApp", "Select Order Type": "Seleccionar tipo de pedido", "Choose who this order is for": "Elige para quién es este pedido", "I want to order for myself": "Quiero pedir para mí", "I want to order for someone else": "Quiero pedir para alguien más", "Cancel": "Cancelar", "Order for someone else": "Pedido para alguien más", "Order for myself": "Pedido para mí", "Are you want to go this site": "¿Quieres ir a este sitio?", "Yes": "Sí", "No": "No", "Are you sure to delete this location?": "¿Estás seguro de eliminar esta ubicación?", "deleted": "eliminado", "To Work": "Al trabajo", "Work Saved": "Trabajo guardado", "To Home": "A casa", "Home Saved": "Casa guardada", "Destination selected": "Destino seleccionado", "Now select start pick": "Ahora selecciona el punto de inicio", "OK": "OK", "Confirm Pick-up Location": "Confirmar ubicación de recogida", "Set Location on Map": "Establecer ubicación en el mapa", "Nearest Car: ~": "Coche más cercano: ~", "Nearest Car": "Coche más cercano", "No cars nearby": "No hay coches cerca", "Favorite Places": "Lugares favoritos", "No favorite places yet!": "¡Aún no tienes lugares favoritos!", "from your favorites": "de tus favoritos", "Back": "Atrás", "Sign in for a seamless experience": "Inicia sesión para una experiencia sin interrupciones", "Sign In with Google": "Iniciar sesión con Google", "Sign in with Apple": "Iniciar sesión con Apple", "Need assistance? Contact us": "¿Necesitas ayuda? Contáctanos", "User not found": "Usuario no encontrado", "Email": "Correo electrónico", "Your email address": "Tu dirección de correo electrónico", "Enter a valid email": "Ingresa un correo electrónico válido", "Password": "Contraseña", "Enter your password": "Ingresa tu contraseña", "Submit": "Enviar", "Terms of Use & Privacy Notice": "Términos de uso y aviso de privacidad", "Terms of Use": "Términos de uso", "Privacy Notice": "Aviso de privacidad", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "Al seleccionar \"Acepto\" a continuación, confirmo que he leído y acepto los", "and acknowledge the": "y reconozco el", ". I am at least 18 years old.": ". Tengo al menos 18 años.", "Continue": "Continuar", "Enable Location Access": "Habilitar acceso a la ubicación", "We need your location to find nearby drivers for pickups and drop-offs.": "Necesitamos tu ubicación para encontrar conductores cercanos para recogidas y dejadas.", "Allow Location Access": "Permitir acceso a la ubicación", "You should restart app to change language": "Debes reiniciar la aplicación para cambiar el idioma", "Home Page": "Página de inicio", "To change Language the App": "Para cambiar el idioma de la aplicación", "Learn more about our app and mission": "Aprende más sobre nuestra aplicación y misión", "Promos For Today": "Promociones para hoy", "Choose your ride": "Elige tu viaje", "Your Journey Begins Here": "Tu viaje comienza aquí", "Bonus gift": "Regalo de bonificación", "Pay": "Pagar", "Get": "Obtener", "Send to Driver Again": "Enviar al conductor nuevamente", "Driver Name:": "Nombre del conductor:", "No trip data available": "No hay datos de viaje disponibles", "Car Plate:": "Matrícula del coche:", "remaining": "restante", "Order Cancelled": "Pedido cancelado", "You canceled VIP trip": "Cancelaste el viaje VIP", "Passenger cancelled order": "El pasajero canceló el pedido", "Your trip is scheduled": "Tu viaje está programado", "Don't forget your ride!": "¡No olvides tu viaje!", "Trip updated successfully": "Viaje actualizado con éxito", "Car Make:": "Marca del coche:", "Car Model:": "Modelo del coche:", "Car Color:": "Color del coche:", "Driver Phone:": "Teléfono del conductor:", "Pre-booking": "Reserva anticipada", "Waiting VIP": "Esperando VIP", "Driver List": "Lista de conductores", "Confirm Trip": "Confirmar viaje", "Select date and time of trip": "Seleccionar fecha y hora del viaje", "Date and Time Picker": "Selector de fecha y hora", "Trip Status:": "Estado del viaje:", "pending": "pendiente", "accepted": "aceptado", "rejected": "rechazado", "Apply": "Aplicar", "Enter your promo code": "Ingresa tu código de promoción", "Apply Promo Code": "Aplicar código de promoción", "Scheduled Time:": "Hora programada:", "No drivers available": "No hay conductores disponibles", "No drivers available at the moment. Please try again later.": "No hay conductores disponibles en este momento. Por favor, inténtalo de nuevo más tarde.", "you have a negative balance of": "tienes un saldo negativo de", "Please try again in a few moments": "Por favor, inténtalo de nuevo en unos momentos", "Unknown Driver": "Conductor desconocido", "in your": "en tu", "The driver accepted your order for": "El conductor aceptó tu pedido para", "wallet due to a previous trip.": "billetera debido a un viaje anterior.", "rides": "viajes", "Add Work": "Añadir trabajo", "The reason is": "La razón es", "User does not have a wallet #1652": "El usuario no tiene una billetera #1652", "Price of trip": "Precio del viaje", "From:": "Desde:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Para viajes de velocidad y entrega, el precio se calcula dinámicamente. Para viajes de confort, el precio se basa en el tiempo y la distancia.", "Phone Wallet Saved Successfully": "Billetera telefónica guardada con éxito", "Add wallet phone you use": "Añade el teléfono de la billetera que usas", "Update Available": "Actualización disponible", "Phone number must be exactly 11 digits long": "El número de teléfono debe tener exactamente 11 dígitos", "Insert Wallet phone number": "Ingresa el número de teléfono de la billetera", "Phone number isn't an Egyptian phone number": "El número de teléfono no es un número egipcio", "A new version of the app is available. Please update to the latest version.": "Hay una nueva versión de la aplicación disponible. Por favor, actualiza a la última versión.", "We use location to get accurate and nearest passengers for you": "Usamos la ubicación para obtener pasajeros precisos y cercanos para ti", "This ride is already applied by another driver.": "Este viaje ya ha sido aplicado por otro conductor.", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "Usamos tu ubicación precisa para encontrar el conductor disponible más cercano y proporcionar información precisa de recogida y dejada. Puedes gestionar esto en Configuración.", "message From Driver": "Mensaje del conductor", "message From passenger": "Mensaje del pasajero", "Where are you, sir?": "¿Dónde estás, señor?", "I've been trying to reach you but your phone is off.": "He estado intentando contactarte pero tu teléfono está apagado.", "Please don't be late": "Por favor, no llegues tarde", "Please don't be late, I'm waiting for you at the specified location.": "Por favor, no llegues tarde, te estoy esperando en la ubicación especificada.", "My location is correct. You can search for me using the navigation app": "Mi ubicación es correcta. Puedes buscarme usando la aplicación de navegación.", "Hello, I'm at the agreed-upon location": "Hola, estoy en la ubicación acordada", "How much longer will you be?": "¿Cuánto tiempo más tardarás?", "Phone number is verified before": "El número de teléfono ya ha sido verificado", "Change Ride": "Cambiar viaje", "You can change the destination by long-pressing any point on the map": "Puedes cambiar el destino manteniendo presionado cualquier punto en el mapa", "Pick from map destination": "Elige el destino en el mapa", "Pick or Tap to confirm": "Elige o toca para confirmar", "Accepted your order": "Tu pedido ha sido aceptado", "Order Accepted": "Pedido aceptado", "with type": "con tipo", "accepted your order at price": "aceptó tu pedido al precio de", "Cancel Trip from driver": "Cancelar viaje por el conductor", "you canceled order": "cancelaste el pedido", "If you want order to another person": "Si quieres pedir para otra persona", "Ok I will go now.": "Ok, iré ahora.", "Hi, I will go now": "Hola, iré ahora", "upgrade price": "aumentar el precio", "Please enter a correct phone": "Por favor, ingresa un teléfono correcto", "airport": "aeropuerto", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "Mejor opción para un coche cómodo con una ruta flexible y puntos de parada. Este aeropuerto ofrece entrada con visa a este precio.", "You can upgrade price to may driver accept your order": "Puedes aumentar el precio para que el conductor acepte tu pedido", "Change Route": "Cambiar ruta", "No Captain Accepted Your Order": "Ningún capitán aceptó tu pedido", "We are looking for a captain but the price may increase to let a captain accept": "Estamos buscando un capitán, pero el precio puede aumentar para que un capitán acepte", "No, I want to cancel this trip": "No, quiero cancelar este viaje", "Trip Cancelled. The cost of the trip will be added to your wallet.": "Viaje cancelado. El costo del viaje se añadirá a tu billetera.", "Attention": "Atención", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "Viaje cancelado. El costo del viaje se deducirá de tu billetera.", "You will be charged for the cost of the driver coming to your location.": "Se te cobrará el costo del conductor que viene a tu ubicación.", "reject your order.": "rechazó tu pedido.", "Order Under Review": "Pedido en revisión", "is reviewing your order. They may need more information or a higher price.": "está revisando tu pedido. Pueden necesitar más información o un precio más alto.", "The driver canceled your ride.": "El conductor canceló tu viaje.", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "Aún no hemos encontrado conductores. Considera aumentar la tarifa de tu viaje para hacer tu oferta más atractiva para los conductores.", "Increase Your Trip Fee (Optional)": "Aumenta la tarifa de tu viaje (Opcional)", "Vibration": "Vibración", "Resend code": "Reenviar código", "token change": "cambio de token", "change device": "cambiar dispositivo", "Device Change Detected": "Cambio de dispositivo detectado", "You can only use one device at a time. This device will now be set as your active device.": "Solo puedes usar un dispositivo a la vez. Este dispositivo se establecerá ahora como tu dispositivo activo.", "Click here point": "Haz clic aquí", "Are you want to change": "¿Quieres cambiar?", "by": "por", "Enter your complaint here": "Ingresa tu queja aquí", "Please enter your complaint.": "Por favor, ingresa tu queja.", "Complaint data saved successfully": "Datos de la queja guardados con éxito", "Trip Monitor": "Monitor de viaje", "Insert SOS Phone": "Insertar teléfono SOS", "Add SOS Phone": "Añadir teléfono SOS", "Trip Monitoring": "Monitoreo de viaje", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "Estimado ,\n\n 🚀 ¡Acabo de comenzar un viaje emocionante y me gustaría compartir los detalles de mi trayecto y mi ubicación actual contigo en tiempo real! Por favor, descarga la aplicación Intaleq. Te permitirá ver los detalles de mi viaje y mi última ubicación.\n\n 👉 Enlace de descarga: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n ¡Espero mantenerte cerca durante mi aventura!\n\n Intaleq ,", "Send Intaleq app to him": "Enviarle la aplicación Intaleq", "No passenger found for the given phone number": "No se encontró ningún pasajero para el número de teléfono proporcionado", "No user found for the given phone number": "No se encontró ningún usuario para el número de teléfono proporcionado", "This price is": "Este precio es", "Work": "Trabajo", "Add Home": "Añadir casa", "Notifications": "Notificaciones", "💳 Pay with Credit Card": "💳 Pagar con tarjeta de crédito", "⚠️ You need to choose an amount!": "⚠️ ¡Necesitas elegir un monto!", "💰 Pay with Wallet": "Pagar con billetera", "You must restart the app to change the language.": "Debes reiniciar la aplicación para cambiar el idioma.", "joined": "se unió", "Driver joined the channel": "El conductor se unió al canal", "Driver left the channel": "El conductor dejó el canal", "Call Page": "Página de llamada", "Call End": "Fin de la llamada", "Call Left": "Llamada restante", r"$ Next as Cash $!": "¡Siguiente como efectivo!", "To use Wallet charge it": "Para usar la billetera, cárgala", "We are searching for the nearest driver to you": "Estamos buscando al conductor más cercano para ti", "Best choice for cities": "Mejor opción para ciudades", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "Rayeh Gai: Servicio de viaje redondo para un viaje conveniente entre ciudades, fácil y confiable.", "Rayeh Gai": "Rayeh Gai", "This trip is for women only": "Este viaje es solo para mujeres", "Total budgets on month": "Presupuestos totales del mes", "You have call from driver": "Tienes una llamada del conductor", "Comfort": "Confort", "Intaleq": "Velocidad", "Driver already has 2 trips within the specified period.": "El conductor ya tiene 2 viajes dentro del período especificado.", "The invitation was sent successfully": "La invitación fue enviada con éxito", "Lady": "Dama", "You should select your country": "Debes seleccionar tu país", "Scooter": "Scooter", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "Un viaje con reserva previa, que te permite elegir a los mejores capitanes y coches.", "Mishwar Vip": "Mishwar Vip", "The driver waiting you in picked location .": "El conductor te espera en la ubicación seleccionada.", "About Us": "Sobre nosotros", "You can change the vibration feedback for all buttons": "Puedes cambiar la retroalimentación de vibración para todos los botones", "Most Secure Methods": "Métodos más seguros", "In-App VOIP Calls": "Llamadas VOIP en la aplicación", "Recorded Trips for Safety": "Viajes grabados para seguridad", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nTambién priorizamos la asequibilidad, ofreciendo precios competitivos para que tus viajes sean accesibles.", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "Intaleq es una aplicación de viajes compartidos diseñada pensando en tu seguridad y asequibilidad. Te conectamos con conductores confiables en tu área, asegurando una experiencia de viaje conveniente y sin estrés.\n\nAquí hay algunas de las características clave que nos diferencian:", "Sign In by Apple": "Iniciar sesión con Apple", "Sign In by Google": "Iniciar sesión con Google", "How do I request a ride?": "¿Cómo solicito un viaje?", "Step-by-step instructions on how to request a ride through the Intaleq app.": "Instrucciones paso a paso sobre cómo solicitar un viaje a través de la aplicación Intaleq.", "What types of vehicles are available?": "¿Qué tipos de vehículos están disponibles?", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "Intaleq ofrece una variedad de opciones de vehículos para adaptarse a tus necesidades, incluyendo economía, confort y lujo. Elige la opción que mejor se ajuste a tu presupuesto y número de pasajeros.", "How can I pay for my ride?": "¿Cómo puedo pagar mi viaje?", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "Intaleq ofrece múltiples métodos de pago para tu conveniencia. Elige entre pago en efectivo o con tarjeta de crédito/débito durante la confirmación del viaje.", "Can I cancel my ride?": "¿Puedo cancelar mi viaje?", "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Intaleq cancellation policy for details.": "Sí, puedes cancelar tu viaje bajo ciertas condiciones (por ejemplo, antes de que se asigne un conductor). Consulta la política de cancelación de Intaleq para más detalles.", "Driver Registration & Requirements": "Registro y requisitos del conductor", "How can I register as a driver?": "¿Cómo puedo registrarme como conductor?", "What are the requirements to become a driver?": "¿Cuáles son los requisitos para convertirse en conductor?", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "Visita nuestro sitio web o contacta al soporte de Intaleq para obtener información sobre el registro y los requisitos del conductor.", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "Intaleq ofrece funcionalidad de chat en la aplicación para que puedas comunicarte con tu conductor o pasajero durante tu viaje.", "What safety measures does Intaleq offer?": "¿Qué medidas de seguridad ofrece Intaleq?", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "Intaleq prioriza tu seguridad. Ofrecemos funciones como verificación del conductor, seguimiento del viaje en la aplicación y opciones de contacto de emergencia.", "Frequently Questions": "Preguntas frecuentes", "User does not exist.": "El usuario no existe.", "We need your phone number to contact you and to help you.": "Necesitamos tu número de teléfono para contactarte y ayudarte.", "You will recieve code in sms message": "Recibirás el código en un mensaje SMS", "Please enter": "Por favor, ingresa", "We need your phone number to contact you and to help you receive orders.": "Necesitamos tu número de teléfono para contactarte y ayudarte a recibir pedidos.", "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": "El nombre completo en tu registro criminal no coincide con el de tu licencia de conducir. Por favor, verifica y proporciona los documentos correctos.", "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": "El número nacional en tu licencia de conducir no coincide con el de tu documento de identidad. Por favor, verifica y proporciona los documentos correctos.", "Capture an Image of Your Criminal Record": "Captura una imagen de tu registro criminal", "IssueDate": "Fecha de emisión", "Capture an Image of Your car license front ": "Captura una imagen de la parte frontal de tu licencia de coche", "Capture an Image of Your ID Document front": "Captura una imagen de la parte frontal de tu documento de identidad", "NationalID": "Identificación nacional", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "Puedes compartir la aplicación Intaleq con tus amigos y ganar recompensas por los viajes que hagan usando tu código", "FullName": "Nombre completo", "No invitation found yet!": "¡Aún no se ha encontrado ninguna invitación!", "InspectionResult": "Resultado de la inspección", "Criminal Record": "Registro criminal", "Share App": "Compartir aplicación", "The email or phone number is already registered.": "El correo electrónico o número de teléfono ya está registrado.", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "Para convertirte en un conductor de viajes compartidos en la aplicación Intaleq, debes subir tu licencia de conducir, documento de identidad y documento de registro del coche. Nuestro sistema de IA revisará y verificará su autenticidad en solo 2-3 minutos. Si tus documentos son aprobados, puedes comenzar a trabajar como conductor en la aplicación Intaleq. Ten en cuenta que enviar documentos fraudulentos es un delito grave y puede resultar en la terminación inmediata y consecuencias legales.", "Documents check": "Verificación de documentos", "Driver's License": "Licencia de conducir", "for your first registration!": "¡para tu primer registro!", "Get it Now!": "¡Consíguelo ahora!", "before": "antes", "Code not approved": "Código no aprobado", "3000 LE": "3000 LE", "Do you have an invitation code from another driver?": "¿Tienes un código de invitación de otro conductor?", "Paste the code here": "Pega el código aquí", "No, I don't have a code": "No, no tengo un código", "Code approved": "Código aprobado", "Install our app:": "Instala nuestra aplicación:", "Invite another driver and both get a gift after he completes 100 trips!": "¡Invita a otro conductor y ambos recibirán un regalo después de que complete 100 viajes!", "Invite": "Invitar", "Are you sure?": "¿Estás seguro?", "This will delete all recorded files from your device.": "Esto eliminará todos los archivos grabados de tu dispositivo.", "Select a file": "Seleccionar un archivo", "Select a File": "Seleccionar un archivo", "Delete": "Eliminar", "attach audio of complain": "adjuntar audio de la queja", "Phone Number Check": "Verificación del número de teléfono", "Drivers received orders": "Los conductores recibieron pedidos", "No audio files recorded.": "No se han grabado archivos de audio.", "This is for delivery or a motorcycle.": "Esto es para entrega o una motocicleta.", "We will look for a new driver.\nPlease wait.": "Buscaremos un nuevo conductor.\nPor favor, espera.", "Intaleq Reminder": "Recordatorio de Intaleq", "It's time to check the Intaleq app!": "¡Es hora de revisar la aplicación Intaleq!", "you must insert token code": "debes insertar el código de token", "Something went wrong. Please try again.": "Algo salió mal. Por favor, inténtalo de nuevo.", "Trip Details": "Detalles del viaje", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "El contexto no proporciona detalles de la queja, por lo que no puedo ofrecer una solución a este problema. Por favor, proporciona la información necesaria y estaré encantado de ayudarte.", "Submit Your Complaint": "Envía tu queja", "Date": "Fecha", "Price": "Precio", "Status": "Estado", "Choose from contact": "Elegir de los contactos", "attach correct audio": "adjuntar audio correcto", "be sure": "asegúrate", "Audio uploaded successfully.": "Audio subido con éxito.", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "Perfecto para pasajeros que buscan los últimos modelos de coches con la libertad de elegir cualquier ruta que deseen", "Share this code with your friends and earn rewards when they use it!": "¡Comparte este código con tus amigos y gana recompensas cuando lo usen!", "Enter phone": "Ingresar teléfono", "You deserve the gift": "Te mereces el regalo", "complete, you can claim your gift": "completo, puedes reclamar tu regalo", "When": "Cuándo", "Enter driver's phone": "Ingresar teléfono del conductor", "Send Invite": "Enviar invitación", "Show Invitations": "Mostrar invitaciones", "License Type": "Tipo de licencia", "National Number": "Número nacional", "Name (Arabic)": "Nombre (árabe)", "Name (English)": "Nombre (inglés)", "Address": "Dirección", "Issue Date": "Fecha de emisión", "Expiry Date": "Fecha de vencimiento", "License Categories": "Categorías de licencia", "driver_license": "licencia de conducir", "Capture an Image of Your Driver License": "Captura una imagen de tu licencia de conducir", "ID Documents Back": "Parte trasera de los documentos de identidad", "National ID": "Identificación nacional", "Occupation": "Ocupación", "Gender": "Género", "Religion": "Religión", "Marital Status": "Estado civil", "Full Name (Marital)": "Nombre completo (estado civil)", "Expiration Date": "Fecha de vencimiento", "Capture an Image of Your ID Document Back": "Captura una imagen de la parte trasera de tu documento de identidad", "ID Documents Front": "Parte frontal de los documentos de identidad", "First Name": "Nombre", "CardID": "ID de la tarjeta", "Vehicle Details Front": "Detalles del vehículo (frente)", "Plate Number": "Número de placa", "Owner Name": "Nombre del propietario", "Vehicle Details Back": "Detalles del vehículo (parte trasera)", "Make": "Marca", "Model": "Modelo", "Year": "Año", "Chassis": "Chasis", "Color": "Color", "Displacement": "Cilindrada", "Fuel": "Combustible", "Tax Expiry Date": "Fecha de vencimiento del impuesto", "Inspection Date": "Fecha de inspección", "Capture an Image of Your car license back": "Captura una imagen de la parte trasera de tu licencia de coche", "Capture an Image of Your Driver’s License": "Captura una imagen de tu licencia de conducir", "Sign in with Google for easier email and name entry": "Inicia sesión con Google para ingresar el correo electrónico y el nombre más fácilmente", "You will choose allow all the time to be ready receive orders": "Elegirás permitir todo el tiempo para estar listo para recibir pedidos", "Welcome to Intaleq!": "¡Bienvenido a Intaleq!", "Get to your destination quickly and easily.": "Llega a tu destino de manera rápida y sencilla.", "Enjoy a safe and comfortable ride.": "Disfruta de un viaje seguro y cómodo.", "Choose Language": "Elegir idioma", "Login": "Iniciar sesión", "Pay with Wallet": "Pagar con billetera", "Invalid MPIN": "MPIN inválido", "Invalid OTP": "OTP inválido", "Driver Accepted the Ride for You": "El conductor aceptó el viaje por ti", "Enter your email address": "Ingresa tu dirección de correo electrónico", "Please enter Your Email.": "Por favor, ingresa tu correo electrónico.", "Enter your phone number": "Ingresa tu número de teléfono", "Please enter your phone number.": "Por favor, ingresa tu número de teléfono.", "Please enter Your Password.": "Por favor, ingresa tu contraseña.", "if you dont have account": "si no tienes una cuenta", "Register": "Registrarse", "Accept Ride's Terms & Review Privacy Notice": "Acepta los términos del viaje y revisa el aviso de privacidad", "By selecting 'I Agree' below, I confirm that I have read and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "Al seleccionar 'Acepto' a continuación, confirmo que he leído y acepto los Términos de uso y reconozco el Aviso de privacidad. Tengo al menos 18 años de edad.", "I Agree": "Acepto", "Finish Monitor": "Finalizar monitor", "First name": "Nombre", "Enter your first name": "Ingresa tu nombre", "Please enter your first name.": "Por favor, ingresa tu nombre.", "Last name": "Apellido", "Enter your last name": "Ingresa tu apellido", "Please enter your last name.": "Por favor, ingresa tu apellido.", "City": "Ciudad", "Please enter your City.": "Por favor, ingresa tu ciudad.", "Male": "Hombre", "Female": "Mujer", "Verify Email": "Verificar correo electrónico", "We sent 5 digit to your Email provided": "Enviamos un código de 5 dígitos al correo electrónico proporcionado", "5 digit": "5 dígitos", "Send Verification Code": "Enviar código de verificación", "Your Ride Duration is ": "La duración de tu viaje es ", "You will be thier in": "Estarás allí en", "You trip distance is": "La distancia de tu viaje es", "Fee is": "La tarifa es", "From : ": "Desde : ", "To : ": "Hacia : ", "Add Promo": "Añadir promoción", "Confirm Selection": "Confirmar selección", "distance is": "la distancia es", "Intaleq LLC": "Intaleq LLC", "Egypt's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "El servicio pionero de viajes compartidos de Egipto, desarrollado con orgullo por propietarios árabes y locales. Priorizamos estar cerca de ti, tanto nuestros valiosos pasajeros como nuestros dedicados capitanes.", "Why Choose Intaleq?": "¿Por qué elegir Intaleq?", "Closest to You": "Más cerca de ti", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "Te conectamos con los conductores más cercanos para recogidas más rápidas y viajes más cortos.", "Uncompromising Security": "Seguridad sin compromisos", "Lady Captains Available": "Capitanas disponibles", "Recorded Trips (Voice & AI Analysis)": "Viajes grabados (análisis de voz e IA)", "Fastest Complaint Response": "Respuesta más rápida a las quejas", "Our dedicated customer service team ensures swift resolution of any issues.": "Nuestro dedicado equipo de servicio al cliente garantiza una resolución rápida de cualquier problema.", "Affordable for Everyone": "Asequible para todos", "Frequently Asked Questions": "Preguntas frecuentes", "Getting Started": "Cómo empezar", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "Simplemente abre la aplicación Intaleq, ingresa tu destino y toca \"Solicitar viaje\". La aplicación te conectará con un conductor cercano.", "Vehicle Options": "Opciones de vehículos", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "Intaleq ofrece una variedad de opciones, incluyendo Economía, Confort y Lujo, para adaptarse a tus necesidades y presupuesto.", "Payments": "Pagos", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "Puedes pagar tu viaje en efectivo o con tarjeta de crédito/débito. Puedes seleccionar tu método de pago preferido antes de confirmar tu viaje.", "Ride Management": "Gestión de viajes", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "Sí, puedes cancelar tu viaje, pero ten en cuenta que pueden aplicarse tarifas de cancelación dependiendo de cuánto tiempo antes canceles.", "For Drivers": "Para conductores", "Driver Registration": "Registro de conductores", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "Para registrarte como conductor o conocer los requisitos, visita nuestro sitio web o contacta directamente al soporte de Intaleq.", "Visit Website/Contact Support": "Visita el sitio web/Contacta al soporte", "Close": "Cerrar", "We are searching for the nearest driver": "Estamos buscando al conductor más cercano", "Communication": "Comunicación", "How do I communicate with the other party (passenger/driver)?": "¿Cómo me comunico con la otra parte (pasajero/conductor)?", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "Puedes comunicarte con tu conductor o pasajero a través de la función de chat en la aplicación una vez que se confirme el viaje.", "Safety & Security": "Seguridad y protección", "What safety measures does Intaleq offer?": "¿Qué medidas de seguridad ofrece Intaleq?", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "Intaleq ofrece varias características de seguridad, incluyendo verificación del conductor, seguimiento del viaje en la aplicación, opciones de contacto de emergencia y la capacidad de compartir el estado de tu viaje con contactos de confianza.", "Enjoy competitive prices across all trip options, making travel accessible.": "Disfruta de precios competitivos en todas las opciones de viaje, haciendo que los viajes sean accesibles.", "Variety of Trip Choices": "Variedad de opciones de viaje", "Choose the trip option that perfectly suits your needs and preferences.": "Elige la opción de viaje que mejor se adapte a tus necesidades y preferencias.", "Your Choice, Our Priority": "Tu elección, nuestra prioridad", "Because we are near, you have the flexibility to choose the ride that works best for you.": "Porque estamos cerca, tienes la flexibilidad de elegir el viaje que mejor funcione para ti.", "duration is": "la duración es", "Setting": "Configuración", "Find answers to common questions": "Encuentra respuestas a preguntas comunes", "I don't need a ride anymore": "Ya no necesito un viaje", "I was just trying the application": "Solo estaba probando la aplicación", "No driver accepted my request": "Ningún conductor aceptó mi solicitud", "I added the wrong pick-up/drop-off location": "Agregué la ubicación de recogida/dejada incorrecta", "I don't have a reason": "No tengo una razón", "Other": "Otro", "Can we know why you want to cancel Ride ?": "¿Podemos saber por qué quieres cancelar el viaje?", "Cancel Ride": "Cancelar viaje", "Add Payment Method": "Añadir método de pago", "Your Wallet balance is ": "El saldo de tu billetera es ", "Ride Wallet": "Billetera de viajes", "Payment Method": "Método de pago", "Type here Place": "Escribe aquí el lugar", "Are You sure to ride to": "¿Estás seguro de viajar a", "Confirm": "Confirmar", "You are Delete": "Estás eliminando", "Deleted": "Eliminado", "You Dont Have Any places yet !": "¡Aún no tienes ningún lugar!", "From : Current Location": "Desde : Ubicación actual", "Profile": "Perfil", "Home": "Casa", "My Cared": "Mis tarjetas", "Add Card": "Añadir tarjeta", "Add Credit Card": "Añadir tarjeta de crédito", "Please enter the cardholder name": "Por favor, ingresa el nombre del titular de la tarjeta", "Please enter the expiry date": "Por favor, ingresa la fecha de vencimiento", "Please enter the CVV code": "Por favor, ingresa el código CVV", "Go To Favorite Places": "Ir a lugares favoritos", "Go to this Target": "Ir a este objetivo", "My Profile": "Mi perfil", "Sign Out": "Cerrar sesión", "Are you want to go to this site": "¿Quieres ir a este sitio?", "MyLocation": "Mi ubicación", "my location": "mi ubicación", "Target": "Objetivo", "Update": "Actualizar", "You Should choose rate figure": "Debes elegir una figura de calificación", "Login Captin": "Iniciar sesión como capitán", "Register Captin": "Registrar capitán", "Send Verfication Code": "Enviar código de verificación", "KM": "KM", "End Ride": "Finalizar viaje", "Minute": "Minuto", "Go to passenger Location now": "Ir ahora a la ubicación del pasajero", "Duration of the Ride is ": "La duración del viaje es ", "Distance of the Ride is ": "La distancia del viaje es ", "Name of the Passenger is ": "El nombre del pasajero es ", "Hello this is Captain": "Hola, este es el capitán", "Start the Ride": "Iniciar el viaje", "Please Wait If passenger want To Cancel!": "¡Por favor, espera si el pasajero quiere cancelar!", "Total Duration:": "Duración total:", "Active Duration:": "Duración activa:", "Waiting for Captin ...": "Esperando al capitán ...", "Age is ": "La edad es ", "Rating is ": "La calificación es ", " to arrive you.": "para llegar a ti.", "Tariff": "Tarifa", "Settings": "Configuración", "Feed Back": "Retroalimentación", "Please enter a valid 16-digit card number": "Por favor, ingresa un número de tarjeta válido de 16 dígitos", "Add Phone": "Añadir teléfono", "Please enter a phone number": "Por favor, ingresa un número de teléfono", "You dont Add Emergency Phone Yet!": "¡Aún no has añadido un teléfono de emergencia!", "You will arrive to your destination after ": "Llegarás a tu destino después de ", "You can cancel Ride now": "Puedes cancelar el viaje ahora", "You Can cancel Ride After Captain did not come in the time": "Puedes cancelar el viaje si el capitán no llegó a tiempo", "If you in Car Now. Press Start The Ride": "Si estás en el coche ahora. Presiona Iniciar el viaje", "You Dont Have Any amount in": "No tienes ningún monto en", "Wallet!": "¡Billetera!", "You Have": "Tienes", "Save Credit Card": "Guardar tarjeta de crédito", "Show Promos": "Mostrar promociones", "10 and get 4% discount": "10 y obtén un 4% de descuento", "20 and get 6% discount": "20 y obtén un 6% de descuento", "40 and get 8% discount": "40 y obtén un 8% de descuento", "100 and get 11% discount": "100 y obtén un 11% de descuento", "Pay with Your PayPal": "Paga con tu PayPal", "You will choose one of above !": "¡Elegirás uno de los anteriores!", "Delete My Account": "Eliminar mi cuenta", "Edit Profile": "Editar perfil", "Name": "Nombre", "Update Gender": "Actualizar género", "Education": "Educación", "Update Education": "Actualizar educación", "Employment Type": "Tipo de empleo", "SOS Phone": "Teléfono SOS", "High School Diploma": "Diploma de bachillerato", "Associate Degree": "Título de asociado", "Bachelor's Degree": "Licenciatura", "Master's Degree": "Maestría", "Doctoral Degree": "Doctorado", "Copy this Promo to use it in your Ride!": "¡Copia esta promoción para usarla en tu viaje!", "To change some Settings": "Para cambiar algunas configuraciones", "Order Request Page": "Página de solicitud de pedido", "Rouats of Trip": "Rutas del viaje", "Passenger name : ": "Nombre del pasajero : ", "Total From Passenger is ": "El total del pasajero es ", "Duration To Passenger is ": "La duración hasta el pasajero es ", "Distance To Passenger is ": "La distancia hasta el pasajero es ", "Total For You is ": "El total para ti es ", "Distance is ": "La distancia es ", " KM": " KM", "Duration of Trip is ": "La duración del viaje es ", " Minutes": " Minutos", "Apply Order": "Aplicar pedido", "Refuse Order": "Rechazar pedido", "Rate Captain": "Calificar al capitán", "Enter your Note": "Ingresa tu nota", "Type something...": "Escribe algo...", "Submit rating": "Enviar calificación", "Rate Passenger": "Calificar al pasajero", "Ride Summary": "Resumen del viaje", "welcome_message": "Bienvenido a Intaleq!", "app_description": "Intaleq es una aplicación de viajes compartidos segura, confiable y accesible.", "get_to_destination": "Llega a tu destino de manera rápida y sencilla.", "get_a_ride": "Con Intaleq, puedes llegar a tu destino en minutos.", "safe_and_comfortable": "Disfruta de un viaje seguro y cómodo.", "committed_to_safety": "Intaleq se compromete con la seguridad, y todos nuestros capitanes son cuidadosamente seleccionados y verificados.", "Driver Applied the Ride for You": "El conductor aplicó el viaje por ti", "Show latest promo": "Mostrar la última promoción", "Cancel Trip": "Cancelar viaje", "Passenger Cancel Trip": "El pasajero canceló el viaje", "Accepted Ride": "Viaje aceptado", "your ride is Accepted": "tu viaje ha sido aceptado", "Please stay on the picked point.": "Por favor, permanece en el punto seleccionado.", "Trip is Begin": "El viaje comienza", "Driver is waiting at pickup.": "El conductor está esperando en el punto de recogida.", "Driver is on the way": "El conductor está en camino", "Contact Options": "Opciones de contacto", "Send a custom message": "Enviar un mensaje personalizado", "Type your message": "Escribe tu mensaje", "Hi ,I will go now": "Hola, iré ahora", "Passenger come to you": "El pasajero viene a ti", "Hi ,I Arrive your site": "Hola, llegué a tu sitio", "Driver Finish Trip": "El conductor finalizó el viaje", "you will pay to Driver": "pagarás al conductor", "Driver Cancel Your Trip": "El conductor canceló tu viaje", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "pagarás al conductor, pagarás el costo del tiempo del conductor, revisa tu billetera Intaleq", "I will go now": "Iré ahora", "You Have Tips": "Tienes propinas", " tips\nTotal is": " propinas\nEl total es", "No,I want": "No, quiero", "Your fee is ": "Tu tarifa es ", "Do you want to pay Tips for this Driver": "¿Quieres pagar propinas a este conductor?", "Tip is ": "La propina es ", "Are you want to wait drivers to accept your order": "¿Quieres esperar a que los conductores acepten tu pedido?", "This price is fixed even if the route changes for the driver.": "Este precio es fijo incluso si la ruta cambia para el conductor.", "The price may increase if the route changes.": "El precio puede aumentar si la ruta cambia.", "The captain is responsible for the route.": "El capitán es responsable de la ruta.", "We are search for nearst driver": "Estamos buscando al conductor más cercano", "Your order is being prepared": "Tu pedido está siendo preparado", "The drivers are reviewing your request": "Los conductores están revisando tu solicitud", "Your order sent to drivers": "Tu pedido fue enviado a los conductores", "You can call or record audio of this trip": "Puedes llamar o grabar audio de este viaje", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "¡El viaje ha comenzado! No dudes en contactar números de emergencia, compartir tu viaje o activar la grabación de voz para el trayecto", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "Por favor, asegúrate de tener todas tus pertenencias personales y que cualquier tarifa restante, si corresponde, se haya añadido a tu billetera antes de salir. Gracias por elegir la aplicación Intaleq", "Don’t forget your personal belongings.": "No olvides tus pertenencias personales.", "Camera Access Denied.": "Acceso a la cámara denegado.", "Open Settings": "Abrir configuración", "GPS Required Allow !.": "¡GPS requerido, permitir!.", "Your Account is Deleted": "Tu cuenta ha sido eliminada", "Are you sure to delete your account?": "¿Estás seguro de eliminar tu cuenta?", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "Tus datos serán borrados después de 2 semanas\nY no podrás volver a usar la aplicación después de 1 mes ", "Enter Your First Name": "Ingresa tu nombre", "Are you Sure to LogOut?": "¿Estás seguro de cerrar sesión?", "Email Wrong": "Correo electrónico incorrecto", "Email you inserted is Wrong.": "El correo electrónico que ingresaste es incorrecto.", "You have finished all times ": "Has terminado todas las veces ", "if you want help you can email us here": "si necesitas ayuda, puedes enviarnos un correo electrónico aquí", "Thanks": "Gracias", "Email Us": "Envíanos un correo electrónico", "I cant register in your app in face detection ": "No puedo registrarme en tu aplicación con detección facial ", "Hi": "Hola", "No face detected": "No se detectó ninguna cara", "Image detecting result is ": "El resultado de la detección de imagen es ", "from 3 times Take Attention": "de 3 veces, presta atención", "Be sure for take accurate images please\nYou have": "Por favor, asegúrate de tomar imágenes precisas\nTienes", "image verified": "imagen verificada", "Next": "Siguiente", "There is no help Question here": "No hay una pregunta de ayuda aquí", "You dont have Points": "No tienes puntos", "You Are Stopped For this Day !": "¡Estás detenido por este día!", "You must be charge your Account": "Debes cargar tu cuenta", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "Rechazaste 3 viajes este día, esa es la razón \n¡Nos vemos mañana!", "Recharge my Account": "Recargar mi cuenta", "Ok , See you Tomorrow": "Ok, nos vemos mañana", "You are Stopped": "Estás detenido", "Connected": "Conectado", "Not Connected": "No conectado", "Your are far from passenger location": "Estás lejos de la ubicación del pasajero", "go to your passenger location before\nPassenger cancel trip": "ve a la ubicación del pasajero antes de que\nel pasajero cancele el viaje", "You will get cost of your work for this trip": "Obtendrás el costo de tu trabajo por este viaje", " in your wallet": "en tu billetera", "you gain": "ganas", "Order Cancelled by Passenger": "Pedido cancelado por el pasajero", "Success": "Éxito", "Feedback data saved successfully": "Datos de retroalimentación guardados con éxito", "No Promo for today .": "No hay promoción para hoy.", "Select your destination": "Selecciona tu destino", "Search for your Start point": "Busca tu punto de inicio", "Search for waypoint": "Buscar punto de referencia", "Current Location": "Ubicación actual", "Add Location 1": "Añadir ubicación 1", "You must Verify email !.": "¡Debes verificar el correo electrónico!.", "Cropper": "Recortador", "Saved Sucssefully": "Guardado exitosamente", "Select Date": "Seleccionar fecha", "Birth Date": "Fecha de nacimiento", "Ok": "Ok", "the 500 points equal 30 JOD": "500 puntos equivalen a 30 JOD", "the 500 points equal 30 JOD for you \nSo go and gain your money": "500 puntos equivalen a 30 JOD para ti \nAsí que ve y gana tu dinero", "token updated": "token actualizado", "Add Location 2": "Añadir ubicación 2", "Add Location 3": "Añadir ubicación 3", "Add Location 4": "Añadir ubicación 4", "Waiting for your location": "Esperando tu ubicación", "Search for your destination": "Busca tu destino", "Hi! This is": "¡Hola! Este es", " I am using": " estoy usando", " to ride with": " para viajar con", " as the driver.": " como el conductor.", "is driving a ": "está conduciendo un ", " with license plate ": " con matrícula ", " I am currently located at ": "Actualmente estoy ubicado en ", "Please go to Car now ": "Por favor, ve al coche ahora ", "You will receive a code in WhatsApp Messenger": "Recibirás un código en WhatsApp Messenger", "If you need assistance, contact us": "Si necesitas ayuda, contáctanos", "Promo Ended": "Promoción terminada", "Enter the promo code and get": "Ingresa el código de promoción y obtén", "DISCOUNT": "DESCUENTO", "No wallet record found": "No se encontró ningún registro de billetera", "for": "para", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "Intaleq es la aplicación de viajes compartidos más segura que introduce muchas características tanto para capitanes como para pasajeros. Ofrecemos la tasa de comisión más baja de solo el 8%, asegurando que obtengas el mejor valor por tus viajes. Nuestra aplicación incluye seguro para los mejores capitanes, mantenimiento regular de coches con los mejores ingenieros y servicios en carretera para garantizar una experiencia respetuosa y de alta calidad para todos los usuarios.", "You can contact us during working hours from 12:00 - 19:00.": "Puedes contactarnos durante el horario de trabajo de 12:00 - 19:00.", "Choose a contact option": "Elige una opción de contacto", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "El horario de trabajo es de 12:00 - 19:00.\nPuedes enviar un mensaje de WhatsApp o un correo electrónico.", "Promo code copied to clipboard!": "¡Código de promoción copiado al portapapeles!", "Copy Code": "Copiar código", "Your invite code was successfully applied!": "¡Tu código de invitación fue aplicado con éxito!", "Payment Options": "Opciones de pago", "wait 1 minute to receive message": "espera 1 minuto para recibir el mensaje", "Promo Copied!": "¡Promoción copiada!", "You have copied the promo code.": "Has copiado el código de promoción.", "Valid Until:": "Válido hasta:", "Select Payment Amount": "Seleccionar monto de pago", "The promotion period has ended.": "El período de promoción ha terminado.", "Promo Code Accepted": "Código de promoción aceptado", "Tap on the promo code to copy it!": "¡Toca el código de promoción para copiarlo!", "Lowest Price Achieved": "Precio más bajo alcanzado", "Cannot apply further discounts.": "No se pueden aplicar más descuentos.", "Promo Already Used": "Promoción ya utilizada", "Invitation Used": "Invitación utilizada", "You have already used this promo code.": "Ya has usado este código de promoción.", "Insert Your Promo Code": "Inserta tu código de promoción", "Enter promo code here": "Ingresa el código de promoción aquí", "Please enter a valid promo code": "Por favor, ingresa un código de promoción válido", "Awfar Car": "Coche Awfar", "Old and affordable, perfect for budget rides.": "Viejo y asequible, perfecto para viajes económicos.", " If you need to reach me, please contact the driver directly at": " Si necesitas contactarme, por favor contacta al conductor directamente al", "No Car or Driver Found in your area.": "No se encontró ningún coche o conductor en tu área.", "Please Try anther time ": "Por favor, intenta otro momento ", "There no Driver Aplly your order sorry for that ": "Ningún conductor aplicó tu pedido, lo sentimos ", "Trip Cancelled": "Viaje cancelado", "The Driver Will be in your location soon .": "El conductor estará en tu ubicación pronto .", "The distance less than 500 meter.": "La distancia es menor a 500 metros.", "Promo End !": "¡Promoción terminada!", "There is no notification yet": "Aún no hay notificaciones", "Use Touch ID or Face ID to confirm payment": "Usa Touch ID o Face ID para confirmar el pago", "Contact us for any questions on your order.": "Contáctanos si tienes preguntas sobre tu pedido.", "Pyament Cancelled .": "Pago cancelado .", "type here": "escribe aquí", "Scan Driver License": "Escanear licencia de conducir", "Please put your licence in these border": "Por favor, coloca tu licencia en este marco", "Camera not initialized yet": "La cámara aún no se ha inicializado", "Take Image": "Tomar imagen", "AI Page": "Página de IA", "Take Picture Of ID Card": "Tomar foto de la tarjeta de identificación", "Take Picture Of Driver License Card": "Tomar foto de la tarjeta de licencia de conducir", "We are process picture please wait ": "Estamos procesando la imagen, por favor espera ", "There is no data yet.": "Aún no hay datos.", "Name :": "Nombre :", "Drivers License Class: ": "Clase de licencia de conducir: ", "Document Number: ": "Número de documento: ", "Address: ": "Dirección: ", "Height: ": "Altura: ", "Expiry Date: ": "Fecha de vencimiento: ", "Date of Birth: ": "Fecha de nacimiento: ", "You can\'t continue with us .\nYou should renew Driver license": "No puedes continuar con nosotros .\nDebes renovar tu licencia de conducir", "Detect Your Face ": "Detecta tu cara ", "Go to next step\nscan Car License.": "Ve al siguiente paso\nescanea la licencia del coche.", "Name in arabic": "Nombre en árabe", "Drivers License Class": "Clase de licencia de conducir", "Date of Birth": "Fecha de nacimiento", "Selected Date": "Fecha seleccionada", "Select Time": "Seleccionar hora", "Selected Time": "Hora seleccionada", "Selected Date and Time": "Fecha y hora seleccionadas", "Lets check Car license ": "Vamos a verificar la licencia del coche ", "Car": "Coche", "Plate": "Placa", "N/A": "N/A", "Rides": "Viajes", "Age": "Edad", "Selected driver": "Conductor seleccionado", "Lets check License Back Face": "Vamos a verificar la parte trasera de la licencia", "Car License Card": "Tarjeta de licencia de coche", "No image selected yet": "Aún no se ha seleccionado ninguna imagen", "Made :": "Hecho :", "model :": "modelo :", "VIN :": "Número de chasis :", "year :": "año :", "ُExpire Date": "Fecha de vencimiento", "Login Driver": "Iniciar sesión como conductor", "Password must br at least 6 character.": "La contraseña debe tener al menos 6 caracteres.", "if you don\'t have account": "si no tienes una cuenta", "Here recorded trips audio": "Aquí están los audios de los viajes grabados", "Register as Driver": "Registrarse como conductor", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "Al seleccionar \"Acepto\" a continuación, he revisado y acepto los Términos de uso y reconozco el ", ". I am at least 18 years of age.": ". Tengo al menos 18 años de edad.", "Log Out Page": "Página de cierre de sesión", "Log Off": "Cerrar sesión", "Register Driver": "Registrar conductor", "Verify Email For Driver": "Verificar correo electrónico para el conductor", "Admin DashBoard": "Panel de administración", "Your name": "Tu nombre", "your ride is applied": "tu viaje ha sido aplicado", "Your password": "Tu contraseña", "H and": "Horas y", "LE": "LE", "JOD": "JOD", "m": "minutos", "We search nearst Driver to you": "Buscamos al conductor más cercano para ti", "please wait till driver accept your order": "por favor espera hasta que el conductor acepte tu pedido", "No accepted orders? Try raising your trip fee to attract riders.": "¿No hay pedidos aceptados? Intenta aumentar la tarifa de tu viaje para atraer a los conductores.", "You should select one": "Debes seleccionar uno", "The driver accept your order for": "El conductor aceptó tu pedido para", "Increase Fee": "Aumentar tarifa", "No, thanks": "No, gracias", "The driver on your way": "El conductor está en camino", "Total price from ": "Precio total desde ", "Order Details Intaleq": "Detalles del pedido Velocidad", "Order Applied": "Pedido aplicado", "accepted your order": "aceptó tu pedido", "We regret to inform you that another driver has accepted this order.": "Lamentamos informarte que otro conductor ha aceptado este pedido.", "Selected file:": "Archivo seleccionado:", "Your trip cost is": "El costo de tu viaje es", "this will delete all files from your device": "esto eliminará todos los archivos de tu dispositivo", " in your": "en tu", "Exclusive offers and discounts always with the Intaleq app": "Ofertas exclusivas y descuentos siempre con la aplicación Intaleq", "Please go to Car Driver": "Por favor, ve al conductor del coche", " wallet due to a previous trip.": "billetera debido a un viaje anterior.", "Submit Question": "Enviar pregunta", "Please enter your Question.": "Por favor, ingresa tu pregunta.", "Help Details": "Detalles de ayuda", "No trip yet found": "Aún no se ha encontrado ningún viaje", "No Response yet.": "Aún no hay respuesta.", " You Earn today is ": " Lo que ganaste hoy es ", " You Have in": " Tienes en", "Total points is ": "El total de puntos es ", "Total Connection Duration:": "Duración total de la conexión:", " H and": " Horas y", "Passenger name : ": "Nombre del pasajero : ", "Cost Of Trip IS ": "El costo del viaje es ", "Arrival time": "Hora de llegada", "arrival time to reach your point": "hora de llegada para llegar a tu punto", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Para viajes de velocidad y scooter, el precio se calcula dinámicamente. Para viajes de confort, el precio se basa en el tiempo y la distancia.", "Hello this is Driver": "Hola, este es el conductor", "Is the Passenger in your Car ?": "¿El pasajero está en tu coche?", "Please wait for the passenger to enter the car before starting the trip.": "Por favor, espera a que el pasajero entre al coche antes de iniciar el viaje.", "No ,still Waiting.": "No, aún esperando.", "I arrive you": "Llego a ti", "I Arrive your site": "Llego a tu sitio", "You are not in near to passenger location": "No estás cerca de la ubicación del pasajero", "please go to picker location exactly": "por favor ve exactamente a la ubicación del recolector", "You Can Cancel Trip And get Cost of Trip From": "Puedes cancelar el viaje y obtener el costo del viaje de", "Are you sure to cancel?": "¿Estás seguro de cancelar?", "Insert Emergincy Number": "Insertar número de emergencia", "Best choice for comfort car and flexible route and stops point": "Mejor opción para un coche cómodo y una ruta flexible con puntos de parada", "Insert": "Insertar", "This is for scooter or a motorcycle.": "Esto es para un scooter o una motocicleta.", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "Este viaje va directamente desde tu punto de inicio hasta tu destino por un precio fijo. El conductor debe seguir la ruta planificada.", "You can decline a request without any cost": "Puedes rechazar una solicitud sin ningún costo", "Perfect for adventure seekers who want to experience something new and exciting": "Perfecto para los buscadores de aventuras que quieren experimentar algo nuevo y emocionante", "My current location is:": "Mi ubicación actual es:", "and I have a trip on": "y tengo un viaje el", "App with Passenger": "Aplicación con pasajero", "You will be pay the cost to driver or we will get it from you on next trip": "Pagarás el costo al conductor o lo obtendremos de ti en el próximo viaje", "Trip has Steps": "El viaje tiene pasos", "Distance from Passenger to destination is ": "La distancia del pasajero al destino es ", "price is": "el precio es", "This ride type does not allow changes to the destination or additional stops": "Este tipo de viaje no permite cambios en el destino o paradas adicionales", "This price may be changed": "Este precio puede cambiar", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "¡Sin tarjeta SIM, no hay problema! Llama a tu conductor directamente a través de nuestra aplicación. Usamos tecnología avanzada para garantizar tu privacidad.", "This ride type allows changes, but the price may increase": "Este tipo de viaje permite cambios, pero el precio puede aumentar", "Select one message": "Selecciona un mensaje", "I'm waiting for you": "Te estoy esperando", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "Notamos que la velocidad supera los 100 km/h. Por favor, reduce la velocidad por tu seguridad. Si te sientes inseguro, puedes compartir los detalles de tu viaje con un contacto o llamar a la policía usando el botón rojo de SOS.", "Warning: Intaleqing detected!": "¡Advertencia: Se detectó exceso de velocidad!", "Please help! Contact me as soon as possible.": "¡Por favor, ayuda! Contáctame lo antes posible.", "Share Trip Details": "Compartir detalles del viaje", "Car Plate is ": "La placa del coche es ", "VIP Order": "Pedido VIP", "the 300 points equal 300 L.E for you \nSo go and gain your money": "300 puntos equivalen a 300 L.E para ti \nAsí que ve y gana tu dinero", "the 300 points equal 300 L.E": "300 puntos equivalen a 300 L.E", "The payment was not approved. Please try again.": "El pago no fue aprobado. Por favor, inténtalo de nuevo.", "Payment Failed": "Pago fallido", "Error": "Error", "This is a scheduled notification.": "Esta es una notificación programada.", "An error occurred during the payment process.": "Ocurrió un error durante el proceso de pago.", "The payment was approved.": "El pago fue aprobado.", "Payment Successful": "Pago exitoso", "No ride found yet": "Aún no se ha encontrado ningún viaje", "Accept Order": "Aceptar pedido", "Bottom Bar Example": "Ejemplo de barra inferior", "Driver phone": "Teléfono del conductor", "Statistics": "Estadísticas", "Origin": "Origen", "Destination": "Destino", "Driver Name": "Nombre del conductor", "Driver Car Plate": "Placa del coche del conductor", "Available for rides": "Disponible para viajes", "Scan Id": "Escanear ID", "Camera not initilaized yet": "La cámara aún no se ha inicializado", "Scan ID MklGoogle": "Escanear ID MklGoogle", "Language": "Idioma", "Jordan": "Jordania", "USA": "EE. UU.", "Egypt": "Egipto", "Turkey": "Turquía", "Saudi Arabia": "Arabia Saudita", "Qatar": "Catar", "Bahrain": "Baréin", "Kuwait": "Kuwait", "But you have a negative salary of": "Pero tienes un salario negativo de", "Promo Code": "Código de promoción", "Your trip distance is": "La distancia de tu viaje es", "Enter promo code": "Ingresar código de promoción", "You have promo!": "¡Tienes una promoción!", "Cost Duration": "Duración del costo", "Duration is": "La duración es", "Leave": "Salir", "Join": "Unirse", "Heading your way now. Please be ready.": "En camino hacia ti ahora. Por favor, estate listo.", "Approaching your area. Should be there in 3 minutes.": "Acercándome a tu área. Debería estar allí en 3 minutos.", "There's heavy traffic here. Can you suggest an alternate pickup point?": "Hay mucho tráfico aquí. ¿Puedes sugerir un punto de recogida alternativo?", "This ride is already taken by another driver.": "Este viaje ya ha sido tomado por otro conductor.", "You Should be select reason.": "Debes seleccionar una razón.", " \$": " \$", "Waiting for Driver ...": "Esperando al conductor ...", "Latest Recent Trip": "Último viaje reciente", "from your list": "de tu lista", "Do you want to change Work location": "¿Quieres cambiar la ubicación del trabajo?", "Do you want to change Home location": "¿Quieres cambiar la ubicación del hogar?", "We Are Sorry That we dont have cars in your Location!": "¡Lamentamos no tener coches en tu ubicación!", "Choose from Map": "Elegir del mapa", "Pick your ride location on the map - Tap to confirm": "Elige la ubicación de tu viaje en el mapa - Toca para confirmar", "Closest & Cheapest": "Más cercano y más barato", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "Intaleq es la aplicación de viajes compartidos que es segura, confiable y accesible.", "With Intaleq, you can get a ride to your destination in minutes.": "Con Intaleq, puedes llegar a tu destino en minutos.", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "Intaleq se compromete con la seguridad, y todos nuestros capitanes son cuidadosamente seleccionados y verificados.", "Pick from map": "Elegir del mapa", "No Car in your site. Sorry!": "No hay coche en tu sitio. ¡Lo siento!", "Nearest Car for you about ": "El coche más cercano para ti en aproximadamente ", "From :": "Desde :", "Get Details of Trip": "Obtener detalles del viaje", "If you want add stop click here": "Si quieres añadir una parada, haz clic aquí", "Where you want go ": "A dónde quieres ir ", "My Card": "Mi tarjeta", "Start Record": "Iniciar grabación", "Wallet": "Billetera", "History of Trip": "Historial de viajes", "Helping Center": "Centro de ayuda", "Record saved": "Grabación guardada", "Trips recorded": "Viajes grabados", "Select Your Country": "Selecciona tu país", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "Para asegurarte de recibir la información más precisa para tu ubicación, por favor selecciona tu país a continuación. Esto ayudará a personalizar la experiencia de la aplicación y el contenido para tu país.", "Are you sure to delete recorded files": "¿Estás seguro de eliminar los archivos grabados?", "Select recorded trip": "Seleccionar viaje grabado", "Card Number": "Número de tarjeta", "Hi, Where to ": "Hola, a dónde ", "Pick your destination from Map": "Elige tu destino del mapa", "Add Stops": "Añadir paradas", "Get Direction": "Obtener dirección", "Add Location": "Añadir ubicación", "Switch Rider": "Cambiar pasajero", "You will arrive to your destination after timer end.": "Llegarás a tu destino después de que termine el temporizador.", "You can cancel trip": "Puedes cancelar el viaje", "The driver waitting you in picked location .": "El conductor te está esperando en la ubicación seleccionada .", "10\$ and get 3% discount": "10\$ y obtén un 3% de descuento", "20\$ and get 4% discount": "20\$ y obtén un 4% de descuento", "40\$ and get 6% discount": "40\$ y obtén un 6% de descuento", "100\$ and get 9% discount": "100\$ y obtén un 9% de descuento", "Pay with Your": "Paga con tu", "Pay with Credit Card": "Pagar con tarjeta de crédito", "Payment History": "Historial de pagos", "Show Promos to Charge": "Mostrar promociones para cargar", "Point": "Punto", "How many hours would you like to wait?": "¿Cuántas horas te gustaría esperar?", "Driver Wallet": "Billetera del conductor", "Choose between those Type Cars": "Elige entre esos tipos de coches", "hour": "hora", "Select Waiting Hours": "Seleccionar horas de espera", "Total Points is": "El total de puntos es", "You will receive a code in SMS message": "Recibirás un código en un mensaje SMS", "Done": "Hecho", "Total Budget from trips is ": "El presupuesto total de los viajes es ", "Total Amount:": "Monto total:", "Total Budget from trips by\nCredit card is ": "El presupuesto total de los viajes por\nTarjeta de crédito es ", "This amount for all trip I get from Passengers": "Este monto por todos los viajes que obtengo de los pasajeros", "Pay from my budget": "Pagar de mi presupuesto", "This amount for all trip I get from Passengers and Collected For me in": "Este monto por todos los viajes que obtengo de los pasajeros y recaudado para mí en", "You can buy points from your budget": "Puedes comprar puntos de tu presupuesto", "insert amount": "insertar monto", "You can buy Points to let you online\nby this list below": "Puedes comprar puntos para estar en línea\ncon esta lista a continuación", "Create Wallet to receive your money": "Crea una billetera para recibir tu dinero", "Enter your feedback here": "Ingresa tu retroalimentación aquí", "Please enter your feedback.": "Por favor, ingresa tu retroalimentación.", "Feedback": "Retroalimentación", "Submit ": "Enviar ", "Click here to Show it in Map": "Haz clic aquí para mostrarlo en el mapa", "Canceled": "Cancelado", "Type your Email": "Escribe tu correo electrónico", "No I want": "No, quiero", "Email is": "El correo electrónico es", "Phone Number is": "El número de teléfono es", "Date of Birth is": "La fecha de nacimiento es", "Sex is ": "El sexo es ", "Car Details": "Detalles del coche", "VIN is": "El número de chasis es", "Color is ": "El color es ", "Make is ": "La marca es ", "Model is": "El modelo es", "Year is": "El año es", "Expiration Date ": "Fecha de vencimiento ", "Edit Your data": "Edita tus datos", "write vin for your car": "escribe el número de chasis de tu coche", "VIN": "Número de chasis", "write Color for your car": "escribe el color de tu coche", "write Make for your car": "escribe la marca de tu coche", "write Model for your car": "escribe el modelo de tu coche", "write Year for your car": "escribe el año de tu coche", "write Expiration Date for your car": "escribe la fecha de vencimiento de tu coche", "Tariffs": "Tarifas", "Minimum fare": "Tarifa mínima", "Maximum fare": "Tarifa máxima", "Flag-down fee": "Tarifa base", "Including Tax": "Incluyendo impuesto", "BookingFee": "Tarifa de reserva", "Morning": "Mañana", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "de 07:30 a 10:30 (jueves, viernes, sábado, lunes)", "Evening": "Tarde", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "de 12:00 a 15:00 (jueves, viernes, sábado, lunes)", "Night": "Noche", "You have in account": "Tienes en la cuenta", "Select Country": "Seleccionar país", "Ride Today : ": "Viaje hoy : ", "After this period\nYou can\'t cancel!": "Después de este período\n¡No puedes cancelar!", "from 23:59 till 05:30": "de 23:59 a 05:30", "Rate Driver": "Calificar al conductor", "Total Cost is ": "El costo total es ", "Write note": "Escribir nota", "Time to arrive": "Hora de llegada", "Ride Summaries": "Resúmenes de viajes", "Total Cost": "Costo total", "Average of Hours of": "Promedio de horas de", " is ON for this month": " está activo este mes", "Days": "Días", "Total Hours on month": "Horas totales en el mes", "Counts of Hours on days": "Cantidad de horas por día", "OrderId": "ID del pedido", "created time": "hora de creación", "Intaleq Over": "Exceso de velocidad", "I will slow down": "Reduciré la velocidad", "Map Passenger": "Mapa del pasajero", "Be Slowly": "Ser lento", "If you want to make Google Map App run directly when you apply order": "Si quieres que la aplicación Google Map se ejecute directamente cuando aplicas un pedido", "You can change the language of the app": "Puedes cambiar el idioma de la aplicación", "Your Budget less than needed": "Tu presupuesto es menor que lo necesario", "You can change the Country to get all features": "Puedes cambiar el país para obtener todas las características", "Change Country": "Cambiar país" }, "fa": { "Order": "درخواست", "OrderVIP": "درخواست VIP", "Cancel Trip": "لغو سفر", "Passenger Cancel Trip": "مسافر سفر را لغو کرد", "VIP Order": "سفارش VIP", "Hi ,I Arrive your site": "سلام، من به موقعیت شما رسیدم", "The driver accepted your trip": "راننده سفر شما را پذیرفت", "message From passenger": "پیام از مسافر", "Cancel": "لغو", "Trip Cancelled. The cost of the trip will be added to your wallet.": "سفر لغو شد. هزینه سفر به کیف پول شما اضافه خواهد شد.", "token change": "تغییر توکن", "face detect": "تشخیص چهره", "Face Detection Result": "نتیجه تشخیص چهره", "similar": "مشابه", "not similar": "غیر مشابه", "Hi ,I will go now": "سلام، من الان حرکت می‌کنم", "Passenger come to you": "مسافر به سمت شما می‌آید", "Call Income": "تماس ورودی", "Call Income from Passenger": "تماس ورودی از مسافر", "Criminal Document Required": "گواهی عدم سوءپیشینه الزامی است", "You should have upload it .": "شما باید آن را آپلود کنید.", "Call End": "پایان تماس", "The order has been accepted by another driver.": "درخواست توسط راننده دیگری پذیرفته شد.", "The order Accepted by another Driver": "درخواست توسط راننده دیگری پذیرفته شد", "We regret to inform you that another driver has accepted this order.": "متاسفیم، راننده دیگری این درخواست را پذیرفته است.", "Driver Applied the Ride for You": "راننده درخواست سفر را برای شما ثبت کرد", "Applied": "ثبت شد", "Pay by Sham Cash": "پرداخت با Sham Cash", "Pay with Debit Card": "پرداخت با کارت بانکی", "Please go to Car Driver": "لطفاً به سمت خودروی راننده بروید", "Ok I will go now.": "باشه، الان می‌روم.", "Accepted Ride": "سفر پذیرفته شد", "Driver Accepted the Ride for You": "راننده سفر را برای شما پذیرفت", "Promo": "کد تخفیف", "Show latest promo": "نمایش آخرین تخفیف‌ها", "Trip Monitoring": "نظارت بر سفر", "Driver Is Going To Passenger": "راننده در حال حرکت به سمت مسافر است", "Please stay on the picked point.": "لطفاً در نقطه انتخاب شده بمانید.", "message From Driver": "پیام از راننده", "Trip is Begin": "سفر آغاز شد", "Cancel Trip from driver": "لغو سفر توسط راننده", "We will look for a new driver.\nPlease wait.": "ما به دنبال راننده جدید می‌گردیم.\nلطفاً صبر کنید.", "The driver canceled your ride.": "راننده سفر شما را لغو کرد.", "Driver Finish Trip": "راننده سفر را پایان داد", "you will pay to Driver": "شما به راننده پرداخت خواهید کرد", "Don’t forget your personal belongings.": "وسایل شخصی خود را فراموش نکنید.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "لطفاً قبل از خروج مطمئن شوید که تمام وسایل شخصی خود را برداشته‌اید و باقی‌مانده کرایه (در صورت وجود) به کیف پول شما اضافه شده است. از انتخاب Intaleq سپاسگزاریم.", "Finish Monitor": "پایان نظارت", "Trip finished": "سفر پایان یافت", "Call Income from Driver": "تماس ورودی از راننده", "Driver Cancelled Your Trip": "راننده سفر شما را لغو کرد", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "هزینه زمان راننده را پرداخت خواهید کرد، کیف پول Intaleq خود را چک کنید", "Order Applied": "سفارش اعمال شد", "welcome to intaleq": "به Intaleq خوش آمدید", "login or register subtitle": "برای ورود یا ثبت نام شماره موبایل خود را وارد کنید", "An application error occurred.": "خطای برنامه رخ داد.", "Submission Failed": "ارسال ناموفق", "Your complaint has been submitted.": "شکایت شما ثبت شد.", "Failed to connect to the server. Please try again.": "اتصال به سرور برقرار نشد. لطفاً دوباره تلاش کنید.", "Ride information not found. Please refresh the page.": "اطلاعات سفر یافت نشد. لطفاً صفحه را رفرش کنید.", "Please describe your issue before submitting.": "لطفاً قبل از ارسال، مشکل خود را توضیح دهید.", "An application error occurred during upload.": "هنگام آپلود خطایی رخ داد.", "Failed to upload audio file.": "آپلود فایل صوتی ناموفق بود.", "Audio uploaded successfully.": "فایل صوتی با موفقیت آپلود شد.", "Complaint cannot be filed for this ride. It may not have been completed or started.": "برای این سفر نمی‌توان شکایت ثبت کرد. ممکن است تکمیل یا شروع نشده باشد.", "2. Attach Recorded Audio (Optional)": "۲. ضمیمه کردن صدای ضبط شده (اختیاری)", "Please enter a description of the issue.": "لطفاً توضیحی در مورد مشکل وارد کنید.", "phone number label": "شماره تلفن", "phone number required": "شماره تلفن الزامی است", "send otp button": "ارسال کد تأیید", "verify your number title": "تأیید شماره", "otp sent subtitle": "یک کد ۵ رقمی به شماره\n@phoneNumber ارسال شد", "verify and continue button": "تأیید و ادامه", "enter otp validation": "لطفاً کد تأیید ۵ رقمی را وارد کنید", "one last step title": "یک قدم دیگر", "complete profile subtitle": "برای شروع پروفایل خود را تکمیل کنید", "first name label": "نام", "first name required": "نام الزامی است", "last name label": "نام خانوادگی", "Verify OTP": "تأیید کد", "Verification Code": "کد تأیید", "We have sent a verification code to your mobile number:": "ما یک کد تأیید به شماره موبایل شما ارسال کردیم:", "Verify": "تأیید", "Resend Code": "ارسال مجدد کد", "You can resend in": "ارسال مجدد در", "seconds": "ثانیه", "Error": "خطا", "Please enter the complete 6-digit code.": "لطفاً کد کامل ۶ رقمی را وارد کنید.", "last name required": "نام خانوادگی الزامی است", "email optional label": "ایمیل (اختیاری)", "complete registration button": "تکمیل ثبت نام", "User with this phone number or email already exists.": "کاربری با این شماره تلفن یا ایمیل قبلاً ثبت نام کرده است.", "otp sent success": "کد تأیید به واتس‌اپ ارسال شد.", "failed to send otp": "ارسال کد تأیید ناموفق بود.", "server error try again": "خطای سرور، لطفاً دوباره تلاش کنید.", "an error occurred": "خطایی رخ داد: @error", "otp verification failed": "تأیید کد ناموفق بود.", "registration failed": "ثبت نام ناموفق بود.", "welcome user": "خوش آمدید، @firstName!", "Cancel Trip from driver": "لغو سفر توسط راننده", "We will look for a new driver.\nPlease wait.": "ما به دنبال راننده جدید می‌گردیم.\nلطفاً صبر کنید.", "The driver canceled your ride.": "راننده سفر شما را لغو کرد.", "Driver Finish Trip": "راننده سفر را تمام کرد", "you will pay to Driver": "شما به راننده پرداخت می‌کنید", "Don't forget your personal belongings.": "وسایل شخصی خود را فراموش نکنید.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "لطفاً مطمئن شوید که تمام وسایل شخصی خود را برداشته‌اید و باقی‌مانده کرایه به کیف پول شما اضافه شده است. از انتخاب اپلیکیشن Intaleq متشکریم.", "Finish Monitor": "پایان نظارت", "Trip finished": "سفر پایان یافت", "Call Income from Driver": "تماس از راننده", "Driver Cancelled Your Trip": "راننده سفر شما را لغو کرد", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "هزینه زمان راننده را پرداخت خواهید کرد، کیف پول Intaleq را ببینید", "Order Applied": "درخواست ثبت شد", "Share App": "اشتراک‌گذاری برنامه", "Wallet": "کیف پول", "Balance": "موجودی", "Don’t forget your personal belongings.": "وسایل شخصی خود را جا نگذارید.", "Profile": "پروفایل", "Contact Support": "تماس با پشتیبانی", "Session expired. Please log in again.": "نشست منقضی شد. لطفاً دوباره وارد شوید.", "Security Warning": "⚠️ هشدار امنیتی", "Potential security risks detected. The application may not function correctly.": "خطرات امنیتی احتمالی شناسایی شد. ممکن است برنامه به درستی کار نکند.", "please order now": "اکنون سفارش دهید", "Where to": "کجا می‌روید؟", "Where are you going?": "به کجا می‌روید؟", "Quick Actions": "دسترسی سریع", "My Balance": "موجودی من", "Order History": "تاریخچه سفارش‌ها", "Contact Us": "تماس با ما", "Driver": "راننده", "Complaint": "شکایت", "Promos": "تخفیف‌ها", "Recent Places": "مکان‌های اخیر", "From": "از", "WhatsApp Location Extractor": "استخراج موقعیت واتس‌اپ", "Location Link": "لینک موقعیت", "Paste location link here": "لینک موقعیت را اینجا پیست کنید", "Go to this location": "برو به این موقعیت", "Paste WhatsApp location link": "لینک موقعیت واتس‌اپ را پیست کنید", "Select Order Type": "انتخاب نوع درخواست", "Choose who this order is for": "این درخواست برای چه کسی است", "I want to order for myself": "برای خودم درخواست می‌دهم", "I want to order for someone else": "برای شخص دیگری درخواست می‌دهم", "Order for someone else": "درخواست برای دیگری", "Order for myself": "درخواست برای خودم", "Are you want to go this site": "آیا می‌خواهید به این مکان بروید", "No": "خیر", "Pay by Sham Cash": "پرداخت با Sham Cash", "Intaleq Wallet": "کیف پول Intaleq", "Have a promo code?": "کد تخفیف دارید؟", "Your Wallet balance is ": "موجودی کیف پول شما: ", "Cash": "نقدی", "Phone Number": "شماره تلفن", "Search country": "جستجوی کشور", "Payment Successful!": "پرداخت موفق!", "Your payment was successful.": "پرداخت شما با موفقیت انجام شد.", "Pay directly to the captain": "پرداخت مستقیم به سفیر (راننده)", "Top up Wallet to continue": "برای ادامه کیف پول را شارژ کنید", "Or pay with Cash instead": "یا به صورت نقدی پرداخت کنید", "Confirm & Find a Ride": "تأیید و یافتن خودرو", "Balance:": "موجودی:", "Alerts": "هشدارها", "Welcome Back!": "خوش آمدید!", "Current Balance": "موجودی فعلی", "Set Wallet Phone Number": "تنظیم شماره تلفن کیف پول", "Link a phone number for transfers": "اتصال شماره تلفن برای انتقال", "Payment History": "تاریخچه پرداخت", "View your past transactions": "مشاهده تراکنش‌های قبلی", "Top up Wallet": "شارژ کیف پول", "Add funds using our secure methods": "افزایش اعتبار با روش‌های امن", "Driver is waiting": "راننده منتظر است", "Type your message...": "پیام خود را بنویسید...", "Driver Accepted Request": "راننده درخواست را پذیرفت", "Message": "پیام", "Call": "تماس", "Set Phone Number": "تنظیم شماره تلفن", "Select This Ride": "انتخاب این سفر", "Call Driver": "تماس با راننده", "Increase Fare": "افزایش کرایه", "Stop": "توقف", "Record": "ضبط", "Share": "اشتراک‌گذاری", "WhatsApp": "واتس‌اپ", "SOS": "SOS", "No drivers accepted your request yet": "هنوز هیچ راننده‌ای درخواست شما را نپذیرفته است", "Increasing the fare might attract more drivers. Would you like to increase the price?": "افزایش کرایه ممکن است رانندگان بیشتری را جذب کند. آیا مایل به افزایش قیمت هستید؟", "Please make sure not to leave any personal belongings in the car.": "لطفاً مطمئن شوید هیچ وسیله شخصی در خودرو جا نماند.", "Cancel Ride": "لغو سفر", "Route Not Found": "مسیر یافت نشد", "We couldn't find a valid route to this destination. Please try selecting a different point.": "مسیر معتبری به این مقصد پیدا نکردیم. لطفاً نقطه دیگری را انتخاب کنید.", "alert": "هشدار", "You can call or record audio during this trip.": "شما می‌توانید در طول این سفر تماس بگیرید یا صدا ضبط کنید.", "Warning: Speeding detected!": "هشدار: سرعت غیرمجاز تشخیص داده شد!", "Fixed Price": "قیمت مقطوع", "Report": "گزارش", "Comfort": "آسایش (Comfort)", "Intaleq Balance": "اعتبار Intaleq", "Search for a starting point": "جستجو برای نقطه مبدأ", "Top up Balance to continue": "برای ادامه موجودی را افزایش دهید", "Electric": "الکتریکی", "Lady": "بانوان", "Van": "ون", "Rayeh Gai": "رفت و برگشت", "Join Intaleq as a driver using my referral code!": "با کد معرف من به عنوان راننده به Intaleq بپیوندید!", "Use code:": "استفاده از کد:", "Download the Intaleq Driver app now and earn rewards!": "اپلیکیشن رانندگان Intaleq را دانلود کنید و پاداش بگیرید!", "Get a discount on your first Intaleq ride!": "برای اولین سفر خود در Intaleq تخفیف بگیرید!", "Use my referral code:": "از کد معرف من استفاده کنید:", "Download the Intaleq app now and enjoy your ride!": "اپلیکیشن Intaleq را دانلود کنید و از سفر خود لذت ببرید!", "Contacts Loaded": "مخاطبین بارگذاری شدند", "Showing": "نمایش", "of": "از", "Pay by MTN Wallet": "پرداخت با کیف پول MTN", "Pay by Syriatel Wallet": "پرداخت با کیف پول Syriatel", "Customer not found": "مشتری یافت نشد", "Wallet is blocked": "کیف پول مسدود شده است", "Customer phone is not active": "تلفن مشتری فعال نیست", "Balance not enough": "موجودی کافی نیست", "Balance limit exceeded": "موجودی بیش از حد مجاز است", "Incorrect sms code": "⚠️ کد پیامک اشتباه است. لطفاً دوباره تلاش کنید.", "contacts. Others were hidden because they don't have a phone number.": "مخاطب. بقیه پنهان شدند چون شماره تلفن ندارند.", "No contacts found": "مخاطبی یافت نشد", "No contacts with phone numbers were found on your device.": "هیچ مخاطبی با شماره تلفن در دستگاه شما یافت نشد.", "Permission denied": "دسترسی رد شد", "Contact permission is required to pick contacts": "برای انتخاب مخاطبین دسترسی به دفترچه تلفن الزامی است.", "An error occurred while picking contacts:": "هنگام انتخاب مخاطبین خطایی رخ داد:", "Please enter a correct phone": "لطفاً یک شماره تلفن صحیح وارد کنید", "Success": "موفقیت", "Invite sent successfully": "دعوت‌نامه با موفقیت ارسال شد", "Hello! I'm inviting you to try Intaleq.": "سلام! شما را به امتحان کردن Intaleq دعوت می‌کنم.", "Use my invitation code to get a special gift on your first ride!": "از کد دعوت من استفاده کنید تا در اولین سفر هدیه ویژه بگیرید!", "Your personal invitation code is:": "کد دعوت شخصی شما:", "Be sure to use it quickly! This code expires at": "سریع استفاده کنید! این کد منقضی می‌شود در", "Download the app now:": "اپلیکیشن را دانلود کنید:", "See you on the road!": "به امید دیدار در جاده!", "This phone number has already been invited.": "این شماره قبلاً دعوت شده است.", "An unexpected error occurred. Please try again.": "خطای غیرمنتظره‌ای رخ داد. لطفاً دوباره تلاش کنید.", "You deserve the gift": "شما شایسته این هدیه هستید", "Claim your 20 LE gift for inviting": "هدیه ۲۰ تومانی خود را برای دعوت دریافت کنید", "You have got a gift for invitation": "شما یک هدیه برای دعوت دریافت کردید", "You have earned 20": "شما ۲۰ امتیاز کسب کردید", "LE": "تومان", "Vibration feedback for all buttons": "بازخورد لرزشی برای همه دکمه‌ها", "Share with friends and earn rewards": "با دوستان به اشتراک بگذارید و پاداش بگیرید", "Gift Already Claimed": "هدیه قبلاً دریافت شده است", "You have already received your gift for inviting": "شما قبلاً هدیه خود را برای این دعوت دریافت کرده‌اید", "Keep it up!": "ادامه بده!", "has completed": "تکمیل کرد", "trips": "سفرها", "Personal Information": "اطلاعات شخصی", "Name": "نام", "Not set": "تنظیم نشده", "Gender": "جنسیت", "Education": "تحصیلات", "Work & Contact": "کار و تماس", "Employment Type": "نوع شغل", "Marital Status": "وضعیت تاهل", "SOS Phone": "تلفن اضطراری", "Sign Out": "خروج از حساب", "Delete My Account": "حذف حساب من", "Update Gender": "بروزرسانی جنسیت", "Update": "بروزرسانی", "Update Education": "بروزرسانی تحصیلات", "Are you sure? This action cannot be undone.": "آیا مطمئن هستید؟ این عملیات قابل بازگشت نیست.", "Confirm your Email": "ایمیل خود را تأیید کنید", "Type your Email": "ایمیل خود را وارد کنید", "Delete Permanently": "حذف دائمی", "Male": "مرد", "Female": "زن", "Other": "سایر", "High School Diploma": "دیپلم", "Associate Degree": "کاردانی", "Bachelor's Degree": "کارشناسی", "Master's Degree": "کارشناسی ارشد", "Doctoral Degree": "دکترا", "Select your preferred language for the app interface.": "زبان مورد نظر خود را برای برنامه انتخاب کنید.", "Language Options": "گزینه‌های زبان", "You can claim your gift once they complete 2 trips.": "پس از انجام ۲ سفر توسط آنها، می‌توانید هدیه خود را دریافت کنید.", "Closest & Cheapest": "نزدیک‌ترین و ارزان‌ترین", "Comfort choice": "انتخاب راحت", "Travel in a modern, silent electric car. A premium, eco-friendly choice for a smooth ride.": "با خودروی الکتریکی مدرن و بی‌صدا سفر کنید. انتخابی ممتاز و دوستدار محیط زیست.", "Spacious van service ideal for families and groups. Comfortable, safe, and cost-effective travel together.": "سرویس ون جادار، ایده‌آل برای خانواده‌ها و گروه‌ها. سفر راحت، امن و مقرون‌به‌صرفه.", "Quiet & Eco-Friendly": "بی‌صدا و دوستدار محیط زیست", "Lady Captain for girls": "راننده خانم برای بانوان", "Van for familly": "ون برای خانواده", "Are you sure to delete this location?": "آیا از حذف این مکان مطمئن هستید؟", "Change Work location?": "تغییر محل کار؟", "Change Home location?": "تغییر محل خانه؟", "Submit a Complaint": "ثبت شکایت", "Submit Complaint": "ارسال شکایت", "No trip history found": "تاریخچه سفری یافت نشد", "Your past trips will appear here.": "سفرهای قبلی شما در اینجا نمایش داده می‌شود.", "1. Describe Your Issue": "۱. مشکل خود را شرح دهید", "Enter your complaint here...": "شکایت خود را اینجا بنویسید...", "2. Attach Recorded Audio": "۲. ضمیمه کردن فایل صوتی", "No audio files found.": "فایل صوتی یافت نشد.", "Confirm Attachment": "تأیید پیوست", "Attach this audio file?": "آیا این فایل صوتی پیوست شود؟", "Uploaded": "آپلود شد", "3. Review Details & Response": "۳. بررسی جزئیات و پاسخ", "Date": "تاریخ", "Today's Promos": "تخفیف‌های امروز", "No promos available right now.": "در حال حاضر تخفیفی موجود نیست.", "Check back later for new offers!": "بعداً برای پیشنهادات جدید سر بزنید!", "Valid Until:": "معتبر تا:", "CODE": "کد", "Login": "ورود", "Sign in for a seamless experience": "برای تجربه بهتر وارد شوید", "Sign In with Google": "ورود با گوگل", "Sign in with Apple": "ورود با اپل", "User not found": "کاربر یافت نشد", "Need assistance? Contact us": "نیاز به کمک دارید؟ تماس بگیرید", "Email": "ایمیل", "Your email address": "آدرس ایمیل شما", "Enter a valid email": "یک ایمیل معتبر وارد کنید", "Password": "رمز عبور", "Your password": "رمز عبور شما", "Enter your password": "رمز عبور را وارد کنید", "Submit": "ارسال", "Terms of Use & Privacy Notice": "شرایط استفاده و حریم خصوصی", "By selecting \"I Agree\" below, I confirm that I have read and agree to the ": "با انتخاب \"موافقم\" در زیر، تأیید می‌کنم که خوانده‌ام و موافقم با ", "Terms of Use": "شرایط استفاده", " and acknowledge the ": " و تأیید می‌کنم ", "Privacy Notice": "سیاست حریم خصوصی", " . I am at least 18 years old.": " . من حداقل ۱۸ سال دارم.", "I Agree": "موافقم", "Continue": "ادامه", "Enable Location": "فعال‌سازی موقعیت", "To give you the best experience, we need to know where you are. Your location is used to find nearby captains and for pickups.": "برای ارائه بهترین خدمات، باید بدانیم کجا هستید. موقعیت شما برای یافتن رانندگان نزدیک استفاده می‌شود.", "Allow Location Access": "اجازه دسترسی به موقعیت", "Welcome to Intaleq!": "به Intaleq خوش آمدید!", "Before we start, please review our terms.": "قبل از شروع، لطفاً شرایط ما را مرور کنید.", "Your journey starts here": "سفر شما از اینجا شروع می‌شود", "Cancel Search": "لغو جستجو", "Set pickup location": "تنظیم محل سوار شدن", "Move the map to adjust the pin": "نقشه را برای تنظیم پین جابجا کنید", "Searching for the nearest captain...": "در حال جستجوی نزدیک‌ترین سفیر...", "No one accepted? Try increasing the fare.": "کسی قبول نکرد؟ افزایش کرایه را امتحان کنید.", "Increase Your Trip Fee (Optional)": "افزایش هزینه سفر (اختیاری)", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "هنوز راننده‌ای پیدا نکرده‌ایم. برای جذاب‌تر کردن پیشنهاد، کرایه را افزایش دهید.", "No, thanks": "نه، ممنون", "Increase Fee": "افزایش کرایه", "Copy": "کپی", "Promo Copied!": "کد تخفیف کپی شد!", "Code": "کد", "copied to clipboard": "در کلیپ‌بورد کپی شد", "Price": "قیمت", "Intaleq's Response": "پاسخ Intaleq", "Awaiting response...": "در انتظار پاسخ...", "Audio file not attached": "فایل صوتی پیوست نشد", "The audio file is not uploaded yet.\\nDo you want to submit without it?": "فایل صوتی هنوز آپلود نشده است.\\nآیا می‌خواهید بدون آن ارسال کنید؟", "deleted": "حذف شد", "To Work": "به محل کار", "Work Saved": "محل کار ذخیره شد", "To Home": "به خانه", "Home Saved": "خانه ذخیره شد", "Destination selected": "مقصد انتخاب شد", "Now select start pick": "حالا نقطه مبدأ را انتخاب کنید", "OK": "تأیید", "Confirm Pick-up Location": "تأیید محل سوار شدن", "Set Location on Map": "تنظیم موقعیت روی نقشه", "Leave a detailed comment (Optional)": "نظر دقیق بنویسید (اختیاری)", "Share your experience to help us improve...": "تجربه خود را برای بهبود ما به اشتراک بگذارید...", "Your valuable feedback helps us improve our service quality.": "بازخورد ارزشمند شما به بهبود کیفیت خدمات ما کمک می‌کند.", "witout zero": "بدون صفر", "Top up Balance": "افزایش موجودی", "An error occurred": "خطایی رخ داد", "Send WhatsApp Message": "ارسال پیام واتس‌اپ", "How was your trip with": "سفر شما با ... چطور بود", "Drawing route on map...": "رسم مسیر روی نقشه...", "Please wait while we prepare your trip.": "لطفاً صبر کنید تا سفر شما را آماده کنیم.", "Submit Rating": "ثبت امتیاز", "Call Support": "تماس با پشتیبانی", "You can contact us during working hours from 10:00 - 16:00.": "می‌توانید در ساعات کاری ۱۰:۰۰ تا ۱۶:۰۰ با ما تماس بگیرید.", "Intaleq is the safest and most reliable ride-sharing app designed especially for passengers in Syria. We provide a comfortable, respectful, and affordable riding experience with features that prioritize your safety and convenience. Our trusted captains are verified, insured, and supported by regular car maintenance carried out by top engineers. We also offer on-road support services to make sure every trip is smooth and worry-free. With Intaleq, you enjoy quality, safety, and peace of mind—every time you ride.": "Intaleq امن‌ترین و مطمئن‌ترین اپلیکیشن درخواست خودرو است که برای ایران طراحی شده است. ما تجربه‌ای راحت، محترمانه و مقرون‌به‌صرفه را با ویژگی‌هایی که ایمنی شما را در اولویت قرار می‌دهند، فراهم می‌کنیم. رانندگان ما تأیید شده و بیمه هستند.", "Work time is from 10:00 AM to 16:00 PM.\nYou can send a WhatsApp message or email.": "ساعات کاری از ۱۰ صبح تا ۴ عصر است.\nمی‌توانید پیام واتس‌اپ یا ایمیل بفرستید.", "Sorry": "متأسفیم", "Customer MSISDN doesn’t have customer wallet": "شماره مشتری کیف پول ندارد", "Please enter the number without the leading 0": "لطفاً شماره را بدون صفر اول وارد کنید", "Please enter your phone number": "لطفاً شماره تلفن خود را وارد کنید", "Phone number seems too short": "شماره تلفن خیلی کوتاه به نظر می‌رسد", "No cars are available at the moment. Please try again later.": "در حال حاضر خودرویی موجود نیست. لطفاً بعداً تلاش کنید.", "Nearest Car: ~": "نزدیک‌ترین خودرو: ~", "Nearest Car": "نزدیک‌ترین خودرو", "No cars nearby": "خودرویی در نزدیکی نیست", "Favorite Places": "مکان‌های مورد علاقه", "No favorite places yet!": "هنوز مکان مورد علاقه‌ای ندارید!", "from your favorites": "از علاقه‌مندی‌های شما", "Back": "بازگشت", "Enter your code below to apply the discount.": "کد خود را برای اعمال تخفیف وارد کنید.", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "با انتخاب \"موافقم\"، تأیید می‌کنم که خوانده‌ام و قبول دارم", "and acknowledge the": "و تأیید می‌کنم", "Enable Location Access": "فعال‌سازی دسترسی موقعیت", "We need your location to find nearby drivers for pickups and drop-offs.": "ما برای یافتن رانندگان نزدیک به موقعیت شما نیاز داریم.", "You should restart app to change language": "برای تغییر زبان باید برنامه را مجدداً راه اندازی کنید", "Home Page": "صفحه اصلی", "To change Language the App": "برای تغییر زبان برنامه", "Learn more about our app and mission": "درباره برنامه و مأموریت ما بیشتر بدانید", "Promos For Today": "تخفیف‌های امروز", "Choose your ride": "سفر خود را انتخاب کنید", "Your Journey Begins Here": "سفر شما از اینجا آغاز می‌شود", "Bonus gift": "هدیه تشویقی", "Pay": "پرداخت", "Get": "دریافت", "Send to Driver Again": "ارسال مجدد به راننده", "Driver Name:": "نام راننده:", "No trip data available": "اطلاعات سفر موجود نیست", "Car Plate:": "پلاک خودرو:", "remaining": "باقی‌مانده", "Order Cancelled": "سفارش لغو شد", "You canceled VIP trip": "شما سفر VIP را لغو کردید", "Passenger cancelled order": "مسافر سفارش را لغو کرد", "Your trip is scheduled": "سفر شما زمان‌بندی شد", "Don't forget your ride!": "سفر خود را فراموش نکنید!", "Trip updated successfully": "سفر با موفقیت بروزرسانی شد", "Car Make:": "سازنده خودرو:", "Car Model:": "مدل خودرو:", "Car Color:": "رنگ خودرو:", "Driver Phone:": "تلفن راننده:", "Pre-booking": "رزرو پیش‌ازوقت", "Waiting VIP": "در انتظار VIP", "Driver List": "لیست رانندگان", "Confirm Trip": "تأیید سفر", "Select date and time of trip": "تاریخ و زمان سفر را انتخاب کنید", "Date and Time Picker": "انتخاب تاریخ و زمان", "Trip Status:": "وضعیت سفر:", "pending": "در انتظار", "accepted": "پذیرفته شده", "rejected": "رد شده", "Apply": "اعمال", "Enter your promo code": "کد تخفیف را وارد کنید", "Apply Promo Code": "اعمال کد تخفیف", "Scheduled Time:": "زمان برنامه‌ریزی شده:", "No drivers available": "راننده‌ای موجود نیست", "No drivers available at the moment. Please try again later.": "در حال حاضر راننده‌ای موجود نیست. لطفاً بعداً تلاش کنید.", "you have a negative balance of": "شما بدهی دارید به مبلغ", "Please try again in a few moments": "لطفاً چند لحظه دیگر تلاش کنید", "Unknown Driver": "راننده ناشناس", "in your": "در شما", "The driver accepted your order for": "راننده سفارش شما را پذیرفت به مبلغ", "wallet due to a previous trip.": "بدهی کیف پول بابت سفر قبلی.", "rides": "سفرها", "Add Work": "افزودن محل کار", "The reason is": "دلیل این است", "User does not have a wallet #1652": "کاربر کیف پول ندارد #1652", "Price of trip": "قیمت سفر", "From:": "از:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "برای سفرهای عادی و پیک، قیمت پویا محاسبه می‌شود. برای سفرهای راحت، قیمت بر اساس زمان و مسافت است.", "Phone Wallet Saved Successfully": "شماره کیف پول با موفقیت ذخیره شد", "Add wallet phone you use": "شماره موبایل کیف پول خود را وارد کنید", "Update Available": "بروزرسانی موجود است", "Phone number must be exactly 11 digits long": "شماره تلفن باید دقیقاً ۱۱ رقم باشد", "Insert Wallet phone number": "شماره موبایل کیف پول را وارد کنید", "Phone number isn't an Egyptian phone number": "شماره تلفن معتبر نیست", "A new version of the app is available. Please update to the latest version.": "نسخه جدید برنامه موجود است. لطفاً بروزرسانی کنید.", "We use location to get accurate and nearest passengers for you": "ما از موقعیت مکانی برای یافتن دقیق‌ترین و نزدیک‌ترین مسافران استفاده می‌کنیم", "This ride is already applied by another driver.": "این سفر قبلاً توسط راننده دیگری گرفته شده است.", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "ما از موقعیت دقیق شما برای یافتن نزدیک‌ترین راننده و ارائه اطلاعات دقیق مبدأ و مقصد استفاده می‌کنیم. می‌توانید این را در تنظیمات مدیریت کنید.", "Where are you, sir?": "کجایید قربان؟", "I've been trying to reach you but your phone is off.": "سعی کردم تماس بگیرم اما گوشی شما خاموش است.", "Please don't be late": "لطفاً دیر نکنید", "Please don't be late, I'm waiting for you at the specified location.": "لطفاً دیر نکنید، من در موقعیت مشخص شده منتظر شما هستم.", "My location is correct. You can search for me using the navigation app": "موقعیت من صحیح است. می‌توانید با مسیریاب مرا پیدا کنید", "Hello, I'm at the agreed-upon location": "سلام، من در محل توافق شده هستم", "How much longer will you be?": "چقدر دیگر طول می‌کشد؟", "Phone number is verified before": "شماره تلفن قبلاً تأیید شده است", "Change Ride": "تغییر سفر", "You can change the destination by long-pressing any point on the map": "می‌توانید با لمس طولانی روی نقشه مقصد را تغییر دهید", "Pick from map destination": "انتخاب مقصد از روی نقشه", "Pick or Tap to confirm": "انتخاب یا ضربه برای تأیید", "Accepted your order": "سفارش شما را پذیرفت", "Order Accepted": "سفارش پذیرفته شد", "with type": "با نوع", "accepted your order at price": "سفارش شما را با قیمت ... پذیرفت", "you canceled order": "شما سفارش را لغو کردید", "If you want order to another person": "اگر می‌خواهید برای شخص دیگری سفارش دهید", "upgrade price": "افزایش قیمت", "airport": "فرودگاه", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "بهترین انتخاب برای خودروی راحت با مسیر منعطف و توقف.", "You can upgrade price to may driver accept your order": "می‌توانید قیمت را افزایش دهید تا راننده قبول کند", "Change Route": "تغییر مسیر", "No Captain Accepted Your Order": "هیچ سفیری سفارش شما را نپذیرفت", "We are looking for a captain but the price may increase to let a captain accept": "ما به دنبال سفیر هستیم اما ممکن است قیمت افزایش یابد", "No, I want to cancel this trip": "نه، می‌خواهم سفر را لغو کنم", "Attention": "توجه", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "سفر لغو شد. هزینه سفر از کیف پول شما کسر خواهد شد.", "You will be charged for the cost of the driver coming to your location.": "هزینه آمدن راننده به محل شما محاسبه خواهد شد.", "reject your order.": "سفارش شما را رد کرد.", "Order Under Review": "سفارش در حال بررسی", "is reviewing your order. They may need more information or a higher price.": "سفارش شما را بررسی می‌کند. ممکن است اطلاعات بیشتر یا قیمت بالاتری بخواهد.", "Vibration": "لرزش", "Resend code": "ارسال مجدد کد", "change device": "تغییر دستگاه", "Device Change Detected": "تغییر دستگاه شناسایی شد", "You can only use one device at a time. This device will now be set as your active device.": "شما فقط می‌توانید از یک دستگاه در آن واحد استفاده کنید. این دستگاه اکنون فعال شد.", "Click here point": "اینجا کلیک کنید", "Are you want to change": "آیا می‌خواهید تغییر دهید", "by": "توسط", "Enter your complaint here": "شکایت خود را اینجا وارد کنید", "Please enter your complaint.": "لطفاً شکایت خود را وارد کنید.", "Complaint data saved successfully": "اطلاعات شکایت با موفقیت ذخیره شد", "Trip Monitor": "نظارت سفر", "Insert SOS Phone": "درج تلفن اضطراری", "Add SOS Phone": "افزودن تلفن اضطراری", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "عزیز،\n\n🚀 من همین الان یک سفر هیجان‌انگیز را شروع کردم و می‌خواهم جزئیات سفر و موقعیتم را با تو به اشتراک بگذارم! لطفاً اپلیکیشن Intaleq را دانلود کن.\n\n👉 لینک دانلود:\nاندروید [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\niOS [https://getapp.cc/app/6458734951]\n\nمنتظرم که در طول مسیر همراهم باشی!\n\nIntaleq ,", "Send Intaleq app to him": "ارسال برنامه Intaleq برای او", "No passenger found for the given phone number": "مسافری با این شماره تلفن یافت نشد", "No user found for the given phone number": "کاربری با این شماره تلفن یافت نشد", "This price is": "این قیمت است", "Work": "محل کار", "Add Home": "افزودن خانه", "Notifications": "اعلان‌ها", "💳 Pay with Credit Card": "💳 پرداخت با کارت اعتباری", "⚠️ You need to choose an amount!": "⚠️ باید مبلغی را انتخاب کنید!", "💰 Pay with Wallet": "💰 پرداخت با کیف پول", "You must restart the app to change the language.": "برای تغییر زبان باید برنامه را دوباره راه‌اندازی کنید.", "joined": "پیوست", "Driver joined the channel": "راننده به کانال پیوست", "Driver left the channel": "راننده کانال را ترک کرد", "Call Page": "صفحه تماس", "Call Left": "تماس‌های باقی‌مانده", " Next as Cash !": " بعدی به صورت نقدی!", "To use Wallet charge it": "برای استفاده از کیف پول آن را شارژ کنید", "We are searching for the nearest driver to you": "در حال جستجو برای نزدیک‌ترین راننده به شما", "Best choice for cities": "بهترین انتخاب برای شهرها", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "رفت و برگشت: سرویس سفر دوطرفه برای راحتی سفر بین شهری.", "This trip is for women only": "این سفر فقط برای بانوان است", "Total budgets on month": "مجموع بودجه در ماه", "You have call from driver": "شما تماس از راننده دارید", "Intaleq": "Intaleq", "passenger agreement": "توافق‌نامه مسافر", "To become a passenger, you must review and agree to the ": "برای مسافر شدن، باید بررسی کنید و موافقت کنید با ", "agreement subtitle": "برای ادامه، باید شرایط استفاده و سیاست حریم خصوصی را بپذیرید.", "terms of use": "شرایط استفاده", " and acknowledge our Privacy Policy.": " و سیاست حریم خصوصی ما را تأیید کنید.", "and acknowledge our": "و تأیید کنید", "privacy policy": "سیاست حریم خصوصی.", "i agree": "موافقم", "Driver already has 2 trips within the specified period.": "راننده در حال حاضر ۲ سفر در بازه زمانی مشخص دارد.", "The invitation was sent successfully": "دعوت‌نامه با موفقیت ارسال شد", "You should select your country": "باید کشور خود را انتخاب کنید", "Scooter": "اسکوتر", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "سفری با رزرو قبلی، که به شما امکان انتخاب بهترین سفیران و خودروها را می‌دهد.", "Mishwar Vip": "مشوار VIP", "The driver waiting you in picked location .": "راننده در محل انتخاب شده منتظر شماست.", "About Us": "درباره ما", "You can change the vibration feedback for all buttons": "می‌توانید بازخورد لرزشی دکمه‌ها را تغییر دهید", "Most Secure Methods": "امن‌ترین روش‌ها", "In-App VOIP Calls": "تماس اینترنتی درون‌برنامه‌ای", "Recorded Trips for Safety": "سفرهای ضبط شده برای امنیت", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nما همچنین اولویت را بر مقرون‌به‌صرفه بودن می‌گذاریم.", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "Intaleq یک برنامه درخواست خودرو است که با در نظر گرفتن امنیت و بودجه شما طراحی شده است.", "Sign In by Apple": "ورود با اپل", "Sign In by Google": "ورود با گوگل", "How do I request a ride?": "چگونه درخواست سفر دهم؟", "Step-by-step instructions on how to request a ride through the Intaleq app.": "دستورالعمل‌های گام‌به‌گام برای درخواست سفر.", "What types of vehicles are available?": "چه نوع خودروهایی موجود است؟", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "Intaleq گزینه‌های مختلفی از جمله اقتصادی، راحت و لوکس ارائه می‌دهد.", "How can I pay for my ride?": "چگونه هزینه سفر را پرداخت کنم؟", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "Intaleq روش‌های پرداخت متعددی ارائه می‌دهد.", "Can I cancel my ride?": "آیا می‌توانم سفرم را لغو کنم؟", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "بله، می‌توانید لغو کنید، اما ممکن است هزینه لغو اعمال شود.", "Driver Registration & Requirements": "ثبت نام راننده و الزامات", "How can I register as a driver?": "چگونه به عنوان راننده ثبت نام کنم؟", "What are the requirements to become a driver?": "شرایط راننده شدن چیست؟", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "برای اطلاعات بیشتر به وب‌سایت ما مراجعه کنید یا با پشتیبانی تماس بگیرید.", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "Intaleq امکان چت درون‌برنامه‌ای را فراهم می‌کند.", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "Intaleq امنیت شما را در اولویت قرار می‌دهد.", "Frequently Questions": "سوالات متداول", "User does not exist.": "کاربر وجود ندارد.", "We need your phone number to contact you and to help you.": "برای تماس و کمک به شما به شماره تلفن نیاز داریم.", "You will recieve code in sms message": "کد را در پیامک دریافت خواهید کرد", "Please enter": "لطفاً وارد کنید", "We need your phone number to contact you and to help you receive orders.": "برای دریافت سفارشات به شماره تلفن نیاز داریم.", "The full name on your criminal record does not match the one on your driver's license. Please verify and provide the correct documents.": "نام کامل در گواهی عدم سوءپیشینه با گواهینامه مطابقت ندارد.", "The national number on your driver's license does not match the one on your ID document. Please verify and provide the correct documents.": "کد ملی در گواهینامه با کارت ملی مطابقت ندارد.", "Capture an Image of Your Criminal Record": "از گواهی عدم سوءپیشینه عکس بگیرید", "IssueDate": "تاریخ صدور", "Capture an Image of Your car license front": "از روی کارت ماشین عکس بگیرید", "Capture an Image of Your ID Document front": "از روی کارت ملی عکس بگیرید", "NationalID": "کد ملی", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "برنامه را با دوستان به اشتراک بگذارید و پاداش بگیرید.", "FullName": "نام کامل", "No invitation found yet!": "هنوز دعوتی پیدا نشد!", "InspectionResult": "نتیجه معاینه", "Criminal Record": "گواهی عدم سوءپیشینه", "The email or phone number is already registered.": "ایمیل یا شماره تلفن قبلاً ثبت شده است.", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "برای راننده شدن باید مدارک خود را آپلود کنید. هوش مصنوعی ما در ۲-۳ دقیقه بررسی می‌کند.", "Documents check": "بررسی مدارک", "Driver's License": "گواهینامه رانندگی", "for your first registration!": "برای اولین ثبت نام شما!", "Get it Now!": "همین الان بگیر!", "before": "قبل از", "Code not approved": "کد تأیید نشد", "3000 LE": "۳۰۰۰ تومان", "Do you have an invitation code from another driver?": "آیا کد دعوت از راننده دیگری دارید؟", "Paste the code here": "کد را اینجا پیست کنید", "No, I don't have a code": "خیر، کد ندارم", "Code approved": "کد تأیید شد", "Install our app:": "برنامه ما را نصب کنید:", "Invite another driver and both get a gift after he completes 100 trips!": "راننده دیگری را دعوت کنید و بعد از ۱۰۰ سفر هدیه بگیرید!", "Invite": "دعوت", "Are you sure?": "مطمئن هستید؟", "This will delete all recorded files from your device.": "این کار تمام فایل‌های ضبط شده را حذف می‌کند.", "Select a file": "انتخاب فایل", "Select a File": "انتخاب یک فایل", "Delete": "حذف", "attach audio of complain": "ضمیمه صدای شکایت", "Phone Number Check": "بررسی شماره تلفن", "Drivers received orders": "رانندگان سفارشات را دریافت کردند", "No audio files recorded.": "هیچ فایل صوتی ضبط نشده.", "This is for delivery or a motorcycle.": "این برای پیک یا موتورسیکلت است.", "Intaleq Reminder": "یادآور Intaleq", "It's time to check the Intaleq app!": "وقت چک کردن برنامه Intaleq است!", "you must insert token code": "باید کد توکن را وارد کنید", "Something went wrong. Please try again.": "مشکلی پیش آمد. لطفاً دوباره تلاش کنید.", "Trip Details": "جزئیات سفر", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "جزئیات شکایت موجود نیست.", "Submit Your Complaint": "ارسال شکایت", "Status": "وضعیت", "Choose from contact": "انتخاب از مخاطبین", "attach correct audio": "صدای صحیح را ضمیمه کنید", "be sure": "مطمئن باشید", "Audio uploaded successfully.": "فایل صوتی با موفقیت آپلود شد.", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "عالی برای مسافرانی که دنبال خودروهای جدید و آزادی انتخاب مسیر هستند", "Share this code with your friends and earn rewards when they use it!": "این کد را به اشتراک بگذارید و پاداش بگیرید!", "Enter phone": "وارد کردن تلفن", "complete, you can claim your gift": "تکمیل شد، می‌توانید هدیه را دریافت کنید", "When": "وقتی", "Enter driver's phone": "تلفن راننده را وارد کنید", "Send Invite": "ارسال دعوت‌نامه", "Show Invitations": "نمایش دعوت‌ها", "License Type": "نوع گواهینامه", "National Number": "کد ملی", "Name (Arabic)": "نام (فارسی/عربی)", "Name (English)": "نام (انگلیسی)", "Address": "آدرس", "Issue Date": "تاریخ صدور", "Expiry Date": "تاریخ انقضا", "License Categories": "دسته‌های گواهینامه", "driver_license": "گواهینامه", "Capture an Image of Your Driver License": "عکس گواهینامه خود را بگیرید", "ID Documents Back": "پشت کارت ملی", "National ID": "کارت ملی", "Occupation": "شغل", "Religion": "مذهب", "Full Name (Marital)": "نام کامل", "Expiration Date": "تاریخ انقضا", "Capture an Image of Your ID Document Back": "عکس پشت کارت ملی", "ID Documents Front": "روی کارت ملی", "First Name": "نام", "CardID": "شماره کارت", "Vehicle Details Front": "جزئیات خودرو (جلو)", "Plate Number": "شماره پلاک", "Owner Name": "نام مالک", "Vehicle Details Back": "جزئیات خودرو (پشت)", "Make": "سازنده", "Model": "مدل", "Year": "سال", "Chassis": "شماره شاسی", "Color": "رنگ", "Displacement": "حجم موتور", "Fuel": "سوخت", "Tax Expiry Date": "تاریخ انقضای مالیات", "Inspection Date": "تاریخ معاینه فنی", "Capture an Image of Your car license back": "عکس پشت کارت ماشین", "Capture an Image of Your Driver's License": "عکس گواهینامه رانندگی", "Sign in with Google for easier email and name entry": "ورود با گوگل برای سهولت", "You will choose allow all the time to be ready receive orders": "گزینه 'همیشه اجازه داده شود' را انتخاب کنید", "Get to your destination quickly and easily.": "سریع و آسان به مقصد برسید.", "Enjoy a safe and comfortable ride.": "از سفری امن و راحت لذت ببرید.", "Choose Language": "انتخاب زبان", "Pay with Wallet": "پرداخت با کیف پول", "Invalid MPIN": "MPIN نامعتبر", "Invalid OTP": "کد تأیید نامعتبر", "Enter your email address": "آدرس ایمیل خود را وارد کنید", "Please enter Your Email.": "لطفاً ایمیل خود را وارد کنید.", "Enter your phone number": "شماره تلفن خود را وارد کنید", "Please enter your phone number.": "لطفاً شماره تلفن خود را وارد کنید.", "Please enter Your Password.": "لطفاً رمز عبور خود را وارد کنید.", "if you dont have account": "اگر حساب کاربری ندارید", "Register": "ثبت نام", "Accept Ride's Terms & Review Privacy Notice": "پذیرش شرایط و مرور حریم خصوصی", "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "با انتخاب 'موافقم'، شرایط و حریم خصوصی را پذیرفته‌ام. من حداقل ۱۸ سال دارم.", "First name": "نام", "Enter your first name": "نام خود را وارد کنید", "Please enter your first name.": "لطفاً نام خود را وارد کنید.", "Last name": "نام خانوادگی", "Enter your last name": "نام خانوادگی خود را وارد کنید", "Please enter your last name.": "لطفاً نام خانوادگی خود را وارد کنید.", "City": "شهر", "Please enter your City.": "لطفاً شهر خود را وارد کنید.", "Verify Email": "تأیید ایمیل", "We sent 5 digit to your Email provided": "کد ۵ رقمی به ایمیل شما ارسال شد", "5 digit": "۵ رقم", "Send Verification Code": "ارسال کد تأیید", "Your Ride Duration is ": "مدت زمان سفر شما: ", "You will be thier in": "شما در ... آنجا خواهید بود", "You trip distance is": "مسافت سفر شما:", "Fee is": "هزینه:", "From : ": "از: ", "To : ": "به: ", "Add Promo": "افزودن کد تخفیف", "Confirm Selection": "تأیید انتخاب", "distance is": "مسافت:", "Privacy Policy": "سیاست حریم خصوصی", "Intaleq LLC": "شرکت Intaleq", "Syria's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "سرویس پیشرو اشتراک سفر در ایران.", "Intaleq is the first ride-sharing app in Syria, designed to connect you with the nearest drivers for a quick and convenient travel experience.": "Intaleq اولین برنامه اشتراک سفر است.", "Why Choose Intaleq?": "چرا Intaleq؟", "Closest to You": "نزدیک‌ترین به شما", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "ما شما را به نزدیک‌ترین رانندگان متصل می‌کنیم.", "Uncompromising Security": "امنیت بی چون و چرا", "Lady Captains Available": "رانندگان خانم موجود است", "Recorded Trips (Voice & AI Analysis)": "سفرهای ضبط شده (صدا و تحلیل هوش مصنوعی)", "Fastest Complaint Response": "سریع‌ترین پاسخ به شکایات", "Our dedicated customer service team ensures swift resolution of any issues.": "تیم پشتیبانی ما مشکلات را سریع حل می‌کند.", "Affordable for Everyone": "مقرون‌به‌صرفه برای همه", "Frequently Asked Questions": "سوالات متداول", "Getting Started": "شروع کار", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "اپلیکیشن را باز کنید، مقصد را وارد کنید و درخواست خودرو دهید.", "Vehicle Options": "گزینه‌های خودرو", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "Intaleq گزینه‌های متنوعی ارائه می‌دهد.", "Payments": "پرداخت‌ها", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "می‌توانید نقدی یا با کارت پرداخت کنید.", "Ride Management": "مدیریت سفر", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "بله، می‌توانید سفر را لغو کنید (ممکن است هزینه داشته باشد).", "For Drivers": "برای رانندگان", "Driver Registration": "ثبت نام راننده", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "برای ثبت نام راننده به سایت مراجعه کنید.", "Visit Website/Contact Support": "مشاهده وب‌سایت / تماس با پشتیبانی", "Close": "بستن", "We are searching for the nearest driver": "جستجوی نزدیک‌ترین راننده", "Communication": "ارتباطات", "How do I communicate with the other party (passenger/driver)?": "چگونه ارتباط برقرار کنم؟", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "از طریق چت درون برنامه‌ای.", "Safety & Security": "ایمنی و امنیت", "What safety measures does Intaleq offer?": "چه اقدامات امنیتی ارائه می‌دهید؟", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "تأیید راننده، ردیابی سفر، تماس اضطراری.", "Enjoy competitive prices across all trip options, making travel accessible.": "از قیمت‌های رقابتی لذت ببرید.", "Variety of Trip Choices": "تنوع انتخاب سفر", "Choose the trip option that perfectly suits your needs and preferences.": "گزینه مناسب خود را انتخاب کنید.", "Your Choice, Our Priority": "انتخاب شما، اولویت ما", "Because we are near, you have the flexibility to choose the ride that works best for you.": "چون ما نزدیکیم، حق انتخاب دارید.", "duration is": "مدت زمان:", "Setting": "تنظیمات", "Find answers to common questions": "پاسخ سوالات متداول", "I don't need a ride anymore": "دیگر نیازی به سفر ندارم", "I was just trying the application": "فقط داشتم برنامه را تست می‌کردم", "No driver accepted my request": "هیچ راننده‌ای قبول نکرد", "I added the wrong pick-up/drop-off location": "مبدأ/مقصد را اشتباه وارد کردم", "I don't have a reason": "دلیلی ندارم", "Can we know why you want to cancel Ride ?": "چرا می‌خواهید لغو کنید؟", "Cancel Ride": "لغو سفر", "Add Payment Method": "افزودن روش پرداخت", "Ride Wallet": "کیف پول سفر", "Payment Method": "روش پرداخت", "Type here Place": "مکان را اینجا بنویسید", "Are You sure to ride to": "مطمئنید می‌خواهید بروید به", "Confirm": "تأیید", "You are Delete": "شما در حال حذف هستید", "Deleted": "حذف شد", "You Dont Have Any places yet !": "هنوز مکانی ندارید!", "From : Current Location": "از: موقعیت فعلی", "My Cared": "کارت‌های من", "Add Card": "افزودن کارت", "Add Credit Card": "افزودن کارت اعتباری", "Please enter the cardholder name": "نام دارنده کارت", "Please enter the expiry date": "تاریخ انقضا", "Please enter the CVV code": "کد CVV", "Go To Favorite Places": "رفتن به مکان‌های مورد علاقه", "Go to this Target": "رفتن به این مقصد", "My Profile": "پروفایل من", "Are you want to go to this site": "می‌خواهید به این مکان بروید", "MyLocation": "موقعیت من", "my location": "موقعیت من", "Target": "هدف", "You Should choose rate figure": "باید امتیاز انتخاب کنید", "Login Captin": "ورود سفیر", "Register Captin": "ثبت نام سفیر", "Send Verfication Code": "ارسال کد تأیید", "KM": "کیلومتر", "End Ride": "پایان سفر", "Minute": "دقیقه", "Go to passenger Location now": "الان به موقعیت مسافر بروید", "Duration of the Ride is ": "مدت سفر: ", "Distance of the Ride is ": "مسافت سفر: ", "Name of the Passenger is ": "نام مسافر: ", "Hello this is Captain": "سلام، من سفیر هستم", "Start the Ride": "شروع سفر", "Please Wait If passenger want To Cancel!": "لطفاً صبر کنید شاید مسافر لغو کند!", "Total Duration:": "مدت کل:", "Active Duration:": "مدت فعال:", "Waiting for Captin ...": "در انتظار سفیر...", "Age is ": "سن: ", "Rating is ": "امتیاز: ", " to arrive you.": " تا رسیدن به شما.", "Tariff": "تعرفه", "Settings": "تنظیمات", "Feed Back": "بازخورد", "Please enter a valid 16-digit card number": "لطفاً شماره کارت ۱۶ رقمی معتبر وارد کنید", "Add Phone": "افزودن تلفن", "Please enter a phone number": "لطفاً شماره تلفن وارد کنید", "You dont Add Emergency Phone Yet!": "هنوز تلفن اضطراری اضافه نکرده‌اید!", "You will arrive to your destination after ": "شما به مقصد می‌رسید بعد از ", "You can cancel Ride now": "الان می‌توانید سفر را لغو کنید", "You Can cancel Ride After Captain did not come in the time": "اگر سفیر به موقع نیامد می‌توانید لغو کنید", "If you in Car Now. Press Start The Ride": "اگر در ماشین هستید، شروع سفر را بزنید", "You Dont Have Any amount in": "موجودی ندارید در", "Wallet!": "کیف پول!", "You Have": "شما دارید", "Save Credit Card": "ذخیره کارت اعتباری", "Show Promos": "نمایش تخفیف‌ها", "10 and get 4% discount": "۱۰ و ۴٪ تخفیف بگیرید", "20 and get 6% discount": "۲۰ و ۶٪ تخفیف بگیرید", "40 and get 8% discount": "۴۰ و ۸٪ تخفیف بگیرید", "100 and get 11% discount": "۱۰۰ و ۱۱٪ تخفیف بگیرید", "Pay with Your PayPal": "پرداخت با PayPal", "You will choose one of above !": "یکی از موارد بالا را انتخاب کنید!", "Edit Profile": "ویرایش پروفایل", "Copy this Promo to use it in your Ride!": "این کد تخفیف را کپی و استفاده کنید!", "To change some Settings": "برای تغییر برخی تنظیمات", "Order Request Page": "صفحه درخواست سفر", "Rouats of Trip": "مسیرهای سفر", "Passenger Name is ": "نام مسافر: ", "Total From Passenger is ": "کل مبلغ از مسافر: ", "Duration To Passenger is ": "زمان تا مسافر: ", "Distance To Passenger is ": "مسافت تا مسافر: ", "Total For You is ": "مجموع برای شما: ", "Distance is ": "مسافت: ", " KM": " کیلومتر", "Duration of Trip is ": "مدت سفر: ", " Minutes": " دقیقه", "Apply Order": "پذیرش درخواست", "Refuse Order": "رد درخواست", "Rate Captain": "امتیاز به سفیر", "Enter your Note": "یادداشت خود را وارد کنید", "Type something...": "چیزی بنویسید...", "Submit rating": "ثبت امتیاز", "Rate Passenger": "امتیاز به مسافر", "Ride Summary": "خلاصه سفر", "welcome_message": "به Intaleq خوش آمدید!", "app_description": "Intaleq امن و قابل اعتماد است.", "get_to_destination": "سریع به مقصد برسید.", "get_a_ride": "در چند دقیقه خودرو بگیرید.", "safe_and_comfortable": "از سفری امن و راحت لذت ببرید.", "committed_to_safety": "متعهد به ایمنی.", "your ride is Accepted": "سفر شما پذیرفته شد", "Driver is waiting at pickup.": "راننده در مبدأ منتظر است.", "Driver is on the way": "راننده در راه است", "Contact Options": "گزینه‌های تماس", "Send a custom message": "ارسال پیام سفارشی", "Type your message": "پیام خود را بنویسید", "I will go now": "من الان می‌روم", "You Have Tips": "انعام دارید", " tips\nTotal is": " انعام\nمجموع:", "Your fee is ": "هزینه شما: ", "Do you want to pay Tips for this Driver": "می‌خواهید انعام دهید؟", "Tip is ": "انعام: ", "Are you want to wait drivers to accept your order": "می‌خواهید منتظر پذیرش بمانید؟", "This price is fixed even if the route changes for the driver.": "قیمت ثابت است.", "The price may increase if the route changes.": "قیمت ممکن است تغییر کند.", "The captain is responsible for the route.": "مسئولیت مسیر با سفیر است.", "We are search for nearst driver": "جستجوی نزدیک‌ترین راننده", "Your order is being prepared": "سفارش در حال آماده‌سازی", "The drivers are reviewing your request": "رانندگان در حال بررسی", "Your order sent to drivers": "به رانندگان ارسال شد", "You can call or record audio of this trip": "می‌توانید تماس بگیرید یا ضبط کنید", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "سفر شروع شد! می‌توانید تماس اضطراری بگیرید یا سفر را اشتراک بگذارید.", "Camera Access Denied.": "دسترسی دوربین رد شد.", "Open Settings": "باز کردن تنظیمات", "GPS Required Allow !.": "GPS لازم است!", "Your Account is Deleted": "حساب شما حذف شد", "Are you sure to delete your account?": "آیا مطمئنید؟", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "داده‌ها بعد از ۲ هفته پاک می‌شوند.", "Enter Your First Name": "نام خود را وارد کنید", "Are you Sure to LogOut?": "آیا برای خروج مطمئنید؟", "Email Wrong": "ایمیل اشتباه", "Email you inserted is Wrong.": "ایمیل وارد شده اشتباه است.", "You have finished all times ": "تمام دفعات را استفاده کردید", "if you want help you can email us here": "برای کمک ایمیل بزنید", "Thanks": "ممنون", "Email Us": "به ما ایمیل بزنید", "I cant register in your app in face detection ": "نمی‌توانم با تشخیص چهره ثبت نام کنم", "Hi": "سلام", "No face detected": "چهره‌ای تشخیص داده نشد", "Image detecting result is ": "نتیجه تشخیص تصویر: ", "from 3 times Take Attention": "از ۳ بار، دقت کنید", "Be sure for take accurate images please\nYou have": "لطفاً عکس دقیق بگیرید\nشما دارید", "image verified": "تصویر تأیید شد", "Next": "بعدی", "There is no help Question here": "سوال کمکی اینجا نیست", "You dont have Points": "امتیاز ندارید", "You Are Stopped For this Day !": "برای امروز متوقف شدید!", "You must be charge your Account": "باید حساب را شارژ کنید", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "۳ سفر را رد کردید.\nفردا می‌بینیمتان!", "Recharge my Account": "شارژ حساب من", "Ok , See you Tomorrow": "باشه، تا فردا", "You are Stopped": "متوقف شدید", "Connected": "متصل", "Not Connected": "متصل نیست", "Your are far from passenger location": "از مسافر دور هستید", "go to your passenger location before\nPassenger cancel trip": "قبل از لغو مسافر به موقعیت او بروید", "You will get cost of your work for this trip": "هزینه این سفر را دریافت خواهید کرد", " in your wallet": " در کیف پول", "you gain": "کسب کردید", "Order Cancelled by Passenger": "لغو توسط مسافر", "Feedback data saved successfully": "با موفقیت ذخیره شد", "No Promo for today .": "امروز تخفیفی نیست.", "Select your destination": "انتخاب مقصد", "Search for your Start point": "جستجوی نقطه شروع", "Search for waypoint": "جستجوی نقطه توقف", "Current Location": "موقعیت فعلی", "Add Location 1": "افزودن مکان ۱", "You must Verify email !.": "باید ایمیل را تأیید کنید!", "Cropper": "برش دهنده", "Saved Sucssefully": "با موفقیت ذخیره شد", "Select Date": "انتخاب تاریخ", "Birth Date": "تاریخ تولد", "Ok": "باشه", "the 500 points equal 30 JOD": "۵۰۰ امتیاز برابر ۳۰ تومان", "the 500 points equal 30 JOD for you \nSo go and gain your money": "۵۰۰ امتیاز برای شما ۳۰ تومان است\nبروید و پول درآورید", "token updated": "توکن بروز شد", "Add Location 2": "افزودن مکان ۲", "Add Location 3": "افزودن مکان ۳", "Add Location 4": "افزودن مکان ۴", "Waiting for your location": "در انتظار موقعیت شما", "Search for your destination": "جستجوی مقصد", "Hi! This is": "سلام! این", " I am using": " من استفاده می‌کنم", " to ride with": " برای سفر با", " as the driver.": " به عنوان راننده.", "is driving a ": "در حال راندن ", " with license plate ": " با پلاک ", " I am currently located at ": " من الان در ... هستم ", "Please go to Car now ": "لطفاً الان به سمت ماشین بروید ", "You will receive a code in WhatsApp Messenger": "کد را در واتس‌اپ دریافت خواهید کرد", "If you need assistance, contact us": "اگر کمک نیاز دارید تماس بگیرید", "Promo Ended": "تخفیف تمام شد", "Enter the promo code and get": "کد تخفیف را وارد کنید و بگیرید", "DISCOUNT": "تخفیف", "No wallet record found": "رکورد کیف پول یافت نشد", "for": "برای", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "Intaleq امن‌ترین برنامه است. کمیسیون پایین ۸٪. بیمه و تعمیر و نگهداری.", "You can contact us during working hours from 12:00 - 19:00.": "تماس در ساعات ۱۲ تا ۱۹.", "Choose a contact option": "یک گزینه تماس انتخاب کنید", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "ساعات کاری ۱۲ تا ۱۹.\nواتس‌اپ یا ایمیل بزنید.", "Promo code copied to clipboard!": "کد تخفیف کپی شد!", "Copy Code": "کپی کد", "Your invite code was successfully applied!": "کد دعوت اعمال شد!", "Payment Options": "گزینه‌های پرداخت", "wait 1 minute to receive message": "۱ دقیقه صبر کنید", "You have copied the promo code.": "کد تخفیف را کپی کردید.", "Select Payment Amount": "انتخاب مبلغ پرداخت", "The promotion period has ended.": "دوره تخفیف تمام شده.", "Promo Code Accepted": "کد تخفیف پذیرفته شد", "Tap on the promo code to copy it!": "برای کپی ضربه بزنید!", "Lowest Price Achieved": "کمترین قیمت حاصل شد", "Cannot apply further discounts.": "تخفیف بیشتر ممکن نیست.", "Promo Already Used": "تخفیف قبلاً استفاده شده", "Invitation Used": "دعوت استفاده شده", "You have already used this promo code.": "شما قبلاً از این کد استفاده کرده‌اید.", "Insert Your Promo Code": "کد تخفیف را وارد کنید", "Enter promo code here": "کد تخفیف اینجا", "Please enter a valid promo code": "لطفاً کد معتبر وارد کنید", "Awfar Car": "خودروی اقتصادی", "Old and affordable, perfect for budget rides.": "قدیمی و مقرون‌به‌صرفه.", " If you need to reach me, please contact the driver directly at": " اگر کاری دارید با راننده تماس بگیرید در", "No Car or Driver Found in your area.": "خودرو یا راننده‌ای یافت نشد.", "Please Try anther time ": "لطفاً زمان دیگری امتحان کنید ", "There no Driver Aplly your order sorry for that ": "هیچ راننده‌ای درخواست شما را نگرفت، متأسفیم ", "Trip Cancelled": "سفر لغو شد", "The Driver Will be in your location soon .": "راننده به‌زودی می‌رسد.", "The distance less than 500 meter.": "فاصله کمتر از ۵۰۰ متر.", "Promo End !": "تخفیف تمام شد!", "There is no notification yet": "اعلانی وجود ندارد", "Use Touch ID or Face ID to confirm payment": "از اثر انگشت یا چهره استفاده کنید", "Contact us for any questions on your order.": "برای هر سوالی تماس بگیرید.", "Pyament Cancelled .": "پرداخت لغو شد.", "type here": "اینجا بنویسید", "Scan Driver License": "اسکن گواهینامه", "Please put your licence in these border": "گواهینامه را در کادر قرار دهید", "Camera not initialized yet": "دوربین آماده نیست", "Take Image": "عکس گرفتن", "AI Page": "صفحه هوش مصنوعی", "Take Picture Of ID Card": "عکس از کارت ملی", "Take Picture Of Driver License Card": "عکس از گواهینامه", "We are process picture please wait ": "در حال پردازش عکس، صبر کنید ", "There is no data yet.": "هنوز داده‌ای نیست.", "Name :": "نام:", "Drivers License Class: ": "کلاس گواهینامه: ", "Document Number: ": "شماره سند: ", "Address: ": "آدرس: ", "Height: ": "قد: ", "Expiry Date: ": "تاریخ انقضا: ", "Date of Birth: ": "تاریخ تولد: ", "You can't continue with us .\nYou should renew Driver license": "باید گواهینامه را تمدید کنید", "Detect Your Face ": "تشخیص چهره ", "Go to next step\nscan Car License.": "مرحله بعد\nاسکن کارت ماشین.", "Name in arabic": "نام به فارسی", "Drivers License Class": "کلاس گواهینامه", "Selected Date": "تاریخ انتخاب شده", "Select Time": "انتخاب زمان", "Selected Time": "زمان انتخاب شده", "Selected Date and Time": "تاریخ و زمان انتخاب شده", "Lets check Car license ": "بررسی کارت ماشین ", "Car": "خودرو", "Plate": "پلاک", "Rides": "سفرها", "Selected driver": "راننده انتخاب شده", "Lets check License Back Face": "بررسی پشت گواهینامه", "Car License Card": "کارت ماشین", "No image selected yet": "عکسی انتخاب نشده", "Made :": "سازنده:", "model :": "مدل:", "VIN :": "شماره شاسی:", "year :": "سال:", "ُExpire Date": "تاریخ انقضا", "Login Driver": "ورود راننده", "Password must br at least 6 character.": "رمز باید حداقل ۶ کاراکتر باشد.", "if you don't have account": "اگر حساب ندارید", "Here recorded trips audio": "صدای ضبط شده سفرها", "Register as Driver": "ثبت نام به عنوان راننده", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "با انتخاب \"موافقم\"، شرایط استفاده را پذیرفته‌ام و ", "Log Out Page": "صفحه خروج", "Log Off": "خروج", "Register Driver": "ثبت نام راننده", "Verify Email For Driver": "تأیید ایمیل برای راننده", "Admin DashBoard": "داشبورد مدیریت", "Your name": "نام شما", "your ride is applied": "سفر شما ثبت شد", "H and": "س و", "JOD": "تومان", "m": "د", "We search nearst Driver to you": "جستجوی نزدیک‌ترین راننده", "please wait till driver accept your order": "لطفاً منتظر پذیرش راننده بمانید", "No accepted orders? Try raising your trip fee to attract riders.": "سفارشی پذیرفته نشد؟ مبلغ را افزایش دهید.", "You should select one": "باید یکی را انتخاب کنید", "The driver accept your order for": "راننده سفارش شما را پذیرفت برای", "The driver on your way": "راننده در راه است", "Total price from ": "قیمت کل از ", "Order Details Intaleq": "جزئیات سفارش Intaleq", "Selected file:": "فایل انتخاب شده:", "Your trip cost is": "هزینه سفر شما", "this will delete all files from your device": "این کار تمام فایل‌ها را حذف می‌کند", "Exclusive offers and discounts always with the Intaleq app": "تخفیف‌های ویژه همیشه با Intaleq", "Submit Question": "ارسال سوال", "Please enter your Question.": "لطفاً سوال خود را وارد کنید.", "Help Details": "جزئیات راهنما", "No trip yet found": "سفری یافت نشد", "No Response yet.": "هنوز پاسخی نیست.", " You Earn today is ": " درآمد امروز شما: ", " You Have in": " شما دارید در", "Total points is ": "مجموع امتیازات: ", "Total Connection Duration:": "مجموع مدت اتصال:", "Passenger name : ": "نام مسافر: ", "Cost Of Trip IS ": "هزینه سفر: ", "Arrival time": "زمان رسیدن", "arrival time to reach your point": "زمان رسیدن به نقطه شما", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "قیمت‌گذاری پویا برای Intaleq و اسکوتر. زمانی و مسافتی برای Comfort.", "Hello this is Driver": "سلام من راننده هستم", "Is the Passenger in your Car ?": "آیا مسافر در خودرو است؟", "Please wait for the passenger to enter the car before starting the trip.": "لطفاً صبر کنید تا مسافر سوار شود.", "No ,still Waiting.": "نه، هنوز منتظرم.", "I arrive you": "رسیدم", "I Arrive your site": "به موقعیت شما رسیدم", "You are not in near to passenger location": "نزدیک مسافر نیستید", "please go to picker location exactly": "لطفاً دقیقاً به محل سوار شدن بروید", "You Can Cancel Trip And get Cost of Trip From": "می‌توانید لغو کنید و هزینه را دریافت کنید از", "Are you sure to cancel?": "مطمئنید لغو می‌کنید؟", "Insert Emergincy Number": "درج شماره اضطراری", "Best choice for comfort car and flexible route and stops point": "بهترین انتخاب برای راحتی و مسیر منعطف", "Insert": "درج", "This is for scooter or a motorcycle.": "این برای اسکوتر یا موتورسیکلت است.", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "سفر مستقیم با قیمت ثابت.", "You can decline a request without any cost": "می‌توانید بدون هزینه رد کنید", "Perfect for adventure seekers who want to experience something new and exciting": "عالی برای ماجراجویان", "My current location is:": "موقعیت فعلی من:", "and I have a trip on": "و سفری دارم در", "App with Passenger": "برنامه با مسافر", "You will be pay the cost to driver or we will get it from you on next trip": "هزینه را به راننده پرداخت می‌کنید یا در سفر بعد از شما می‌گیریم", "Trip has Steps": "سفر مراحلی دارد", "Distance from Passenger to destination is ": "فاصله مسافر تا مقصد: ", "price is": "قیمت:", "This ride type does not allow changes to the destination or additional stops": "امکان تغییر مقصد یا توقف وجود ندارد", "This price may be changed": "این قیمت ممکن است تغییر کند", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "سیم‌کارت ندارید؟ مشکلی نیست! از طریق برنامه تماس بگیرید.", "This ride type allows changes, but the price may increase": "امکان تغییر دارد اما قیمت ممکن است افزایش یابد", "Select one message": "یک پیام انتخاب کنید", "I'm waiting for you": "منتظر شما هستم", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "سرعت بالای ۱۰۰ کیلومتر تشخیص داده شد. لطفاً آهسته‌تر برانید.", "Warning: Intaleqing detected!": "هشدار: سرعت غیرمجاز!", "Please help! Contact me as soon as possible.": "کمک! سریعاً تماس بگیرید.", "Share Trip Details": "اشتراک جزئیات سفر", "Car Plate is ": "پلاک خودرو: ", "the 300 points equal 300 L.E for you \nSo go and gain your money": "۳۰۰ امتیاز برابر ۳۰۰ تومان برای شماست\nبروید و پول درآورید", "the 300 points equal 300 L.E": "۳۰۰ امتیاز برابر ۳۰۰ تومان", "The payment was not approved. Please try again.": "پرداخت تأیید نشد. دوباره تلاش کنید.", "Payment Failed": "پرداخت ناموفق", "This is a scheduled notification.": "این یک اعلان زمان‌بندی شده است.", "An error occurred during the payment process.": "خطایی در پرداخت رخ داد.", "The payment was approved.": "پرداخت تأیید شد.", "Payment Successful": "پرداخت موفق", "No ride found yet": "هنوز سفری یافت نشد", "Accept Order": "پذیرش سفارش", "Bottom Bar Example": "مثال نوار پایین", "Driver phone": "تلفن راننده", "Statistics": "آمار", "Origin": "مبدأ", "Destination": "مقصد", "Driver Name": "نام راننده", "Driver Car Plate": "پلاک راننده", "Available for rides": "آماده برای سفر", "Scan Id": "اسکن کارت ملی", "Camera not initilaized yet": "دوربین هنوز آماده نیست", "Scan ID MklGoogle": "اسکن ID MklGoogle", "Language": "زبان", "Jordan": "اردن", "USA": "آمریکا", "Egypt": "مصر", "Turkey": "ترکیه", "Saudi Arabia": "عربستان سعودی", "Qatar": "قطر", "Bahrain": "بحرین", "Kuwait": "کویت", "But you have a negative salary of": "اما موجودی منفی دارید به مبلغ", "Promo Code": "کد تخفیف", "Your trip distance is": "مسافت سفر شما:", "Enter promo code": "کد تخفیف را وارد کنید", "You have promo!": "تخفیف دارید!", "Cost Duration": "هزینه مدت زمان", "Duration is": "مدت زمان:", "Leave": "ترک کردن", "Join": "پیوستن", "Heading your way now. Please be ready.": "دارم می‌آیم. لطفاً آماده باشید.", "Approaching your area. Should be there in 3 minutes.": "نزدیک منطقه شما هستم. ۳ دقیقه دیگر می‌رسم.", "There's heavy traffic here. Can you suggest an alternate pickup point?": "ترافیک سنگین است. نقطه دیگری پیشنهاد می‌کنید؟", "This ride is already taken by another driver.": "این سفر توسط راننده دیگری گرفته شد.", "You Should be select reason.": "باید دلیلی را انتخاب کنید.", "Waiting for Driver ...": "در انتظار راننده...", "Latest Recent Trip": "آخرین سفر اخیر", "from your list": "از لیست شما", "Do you want to change Work location": "می‌خواهید محل کار را تغییر دهید", "Do you want to change Home location": "می‌خواهید خانه را تغییر دهید", "We Are Sorry That we dont have cars in your Location!": "متاسفیم، در موقعیت شما خودرویی نداریم!", "Choose from Map": "انتخاب از روی نقشه", "Pick your ride location on the map - Tap to confirm": "محل سفر را روی نقشه انتخاب کنید - برای تأیید ضربه بزنید", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "Intaleq امن و قابل اعتماد است.", "With Intaleq, you can get a ride to your destination in minutes.": "با Intaleq در چند دقیقه به مقصد برسید.", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "Intaleq متعهد به ایمنی است.", "Pick from map": "انتخاب از نقشه", "No Car in your site. Sorry!": "خودرویی در محل شما نیست. متاسفیم!", "Nearest Car for you about ": "نزدیک‌ترین خودرو حدود ", "From :": "از:", "Get Details of Trip": "دریافت جزئیات سفر", "If you want add stop click here": "برای افزودن توقف اینجا کلیک کنید", "Where you want go ": "کجا می‌خواهید بروید ", "My Card": "کارت من", "Start Record": "شروع ضبط", "History of Trip": "تاریخچه سفر", "Helping Center": "مرکز راهنما", "Record saved": "ضبط ذخیره شد", "Trips recorded": "سفرهای ضبط شده", "Select Your Country": "کشور خود را انتخاب کنید", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "لطفاً کشور خود را انتخاب کنید تا اطلاعات دقیق دریافت کنید.", "Are you sure to delete recorded files": "آیا از حذف فایل‌های ضبط شده مطمئنید", "Select recorded trip": "انتخاب سفر ضبط شده", "Card Number": "شماره کارت", "Hi, Where to ": "سلام، به کجا ", "Pick your destination from Map": "مقصد را از نقشه انتخاب کنید", "Add Stops": "افزودن توقف", "Get Direction": "مسیریابی", "Add Location": "افزودن مکان", "Switch Rider": "تغییر مسافر", "You will arrive to your destination after timer end.": "پس از پایان تایمر به مقصد خواهید رسید.", "You can cancel trip": "می‌توانید سفر را لغو کنید", "The driver waitting you in picked location .": "راننده در محل انتخاب شده منتظر شماست.", "Pay with Your": "پرداخت با", "Pay with Credit Card": "پرداخت با کارت اعتباری", "Show Promos to Charge": "نمایش تخفیف‌ها برای شارژ", "Point": "امتیاز", "How many hours would you like to wait?": "چند ساعت می‌خواهید منتظر بمانید؟", "Driver Wallet": "کیف پول راننده", "Choose between those Type Cars": "از بین این نوع خودروها انتخاب کنید", "hour": "ساعت", "Select Waiting Hours": "انتخاب ساعات انتظار", "Total Points is": "مجموع امتیازات:", "You will receive a code in SMS message": "کدی در پیامک دریافت خواهید کرد", "Done": "انجام شد", "Total Budget from trips is ": "مجموع درآمد از سفرها: ", "Total Amount:": "مبلغ کل:", "Total Budget from trips by\nCredit card is ": "مجموع درآمد از کارت اعتباری: ", "This amount for all trip I get from Passengers": "این مبلغ برای تمام سفرهایی که از مسافران گرفتم", "Pay from my budget": "پرداخت از اعتبار من", "This amount for all trip I get from Passengers and Collected For me in": "این مبلغ جمع‌آوری شده برای من در", "You can buy points from your budget": "می‌توانید از اعتبار خود امتیاز بخرید", "insert amount": "مبلغ را وارد کنید", "You can buy Points to let you online\nby this list below": "می‌توانید امتیاز بخرید تا آنلاین شوید\nاز لیست زیر", "Create Wallet to receive your money": "برای دریافت پول کیف پول بسازید", "Enter your feedback here": "بازخورد خود را اینجا وارد کنید", "Please enter your feedback.": "لطفاً بازخورد خود را وارد کنید.", "Feedback": "بازخورد", "Submit ": "ارسال ", "Click here to Show it in Map": "برای نمایش روی نقشه کلیک کنید", "Canceled": "لغو شد", "No I want": "نه من می‌خواهم", "Email is": "ایمیل:", "Phone Number is": "شماره تلفن:", "Date of Birth is": "تاریخ تولد:", "Sex is ": "جنسیت: ", "Car Details": "جزئیات خودرو", "VIN is": "شماره شاسی:", "Color is ": "رنگ: ", "Make is ": "سازنده: ", "Model is": "مدل:", "Year is": "سال:", "Expiration Date ": "تاریخ انقضا: ", "Edit Your data": "ویرایش اطلاعات", "write vin for your car": "شماره شاسی خودرو را بنویسید", "VIN": "شماره شاسی", "Device Change Detected": "تغییر دستگاه شناسایی شد", "Please verify your identity": "لطفاً هویت خود را تأیید کنید", "write Color for your car": "رنگ خودرو را بنویسید", "write Make for your car": "سازنده خودرو را بنویسید", "write Model for your car": "مدل خودرو را بنویسید", "write Year for your car": "سال خودرو را بنویسید", "write Expiration Date for your car": "تاریخ انقضای خودرو را بنویسید", "Tariffs": "تعرفه‌ها", "Minimum fare": "حداقل کرایه", "Maximum fare": "حداکثر کرایه", "Flag-down fee": "ورودی", "Including Tax": "شامل مالیات", "BookingFee": "هزینه رزرو", "Morning": "صبح", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "از ۰۷:۳۰ تا ۱۰:۳۰", "Evening": "عصر", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "از ۱۲:۰۰ تا ۱۵:۰۰", "Night": "شب", "You have in account": "در حساب دارید", "Select Country": "انتخاب کشور", "Ride Today : ": "سفر امروز: ", "After this period\nYou can't cancel!": "بعد از این مدت\nنمی‌توانید لغو کنید!", "from 23:59 till 05:30": "از ۲۳:۵۹ تا ۰۵:۳۰", "Rate Driver": "امتیاز به راننده", "Total Cost is ": "هزینه کل: ", "Write note": "نوشتن یادداشت", "Time to arrive": "زمان رسیدن", "Ride Summaries": "خلاصه سفرها", "Total Cost": "هزینه کل", "Average of Hours of": "میانگین ساعات", " is ON for this month": " در این ماه روشن است", "Days": "روزها", "Total Hours on month": "مجموع ساعات در ماه", "Counts of Hours on days": "تعداد ساعات در روزها", "OrderId": "شناسه سفارش", "created time": "زمان ایجاد", "Intaleq Over": "Intaleq تمام شد", "I will slow down": "من سرعتم را کم می‌کنم", "Map Passenger": "نقشه مسافر", "Be Slowly": "آهسته باش", "If you want to make Google Map App run directly when you apply order": "اگر می‌خواهید گوگل مپ مستقیماً اجرا شود", "You can change the language of the app": "می‌توانید زبان برنامه را تغییر دهید", "Your Budget less than needed": "بودجه شما کمتر از حد نیاز است", "You can change the Country to get all features": "برای دسترسی به تمام ویژگی‌ها کشور را تغییر دهید", "Change Country": "تغییر کشور" }, "el": { "Order": "Αίτημα", "OrderVIP": "VIP Αίτημα", "Cancel Trip": "Ακύρωση Διαδρομής", "Passenger Cancel Trip": "Ο επιβάτης ακύρωσε τη διαδρομή", "VIP Order": "VIP Αίτημα", "Hi ,I Arrive your site": "Γεια, έφτασα στο σημείο σας", "The driver accepted your trip": "Ο οδηγός αποδέχτηκε τη διαδρομή σας", "message From passenger": "Μήνυμα από τον επιβάτη", "Cancel": "Ακύρωση", "Trip Cancelled. The cost of the trip will be added to your wallet.": "Η διαδρομή ακυρώθηκε. Το κόστος θα προστεθεί στο πορτοφόλι σας.", "token change": "Αλλαγή Token", "face detect": "Ανίχνευση Προσώπου", "Face Detection Result": "Αποτέλεσμα Ανίχνευσης Προσώπου", "similar": "Παρόμοιο", "not similar": "Μη παρόμοιο", "Hi ,I will go now": "Γεια, ξεκινάω τώρα", "Passenger come to you": "Ο επιβάτης έρχεται σε εσάς", "Call Income": "Εισερχόμενη Κλήση", "Call Income from Passenger": "Κλήση από Επιβάτη", "Criminal Document Required": "Απαιτείται Ποινικό Μητρώο", "You should have upload it .": "Πρέπει να το ανεβάσετε.", "Call End": "Τέλος Κλήσης", "The order has been accepted by another driver.": "Το αίτημα έγινε αποδεκτό από άλλον οδηγό.", "The order Accepted by another Driver": "Το αίτημα έγινε δεκτό από άλλον Οδηγό", "We regret to inform you that another driver has accepted this order.": "Λυπούμαστε, ένας άλλος οδηγός αποδέχτηκε αυτό το αίτημα.", "Driver Applied the Ride for You": "Ο οδηγός καταχώρησε τη διαδρομή για εσάς", "Applied": "Καταχωρήθηκε", "Pay by Sham Cash": "Πληρωμή με Sham Cash", "Pay with Debit Card": "Πληρωμή με Χρεωστική Κάρτα", "Please go to Car Driver": "Παρακαλώ πηγαίνετε στον Οδηγό", "Ok I will go now.": "Εντάξει, πηγαίνω τώρα.", "Accepted Ride": "Αποδεκτή Διαδρομή", "Driver Accepted the Ride for You": "Ο οδηγός αποδέχτηκε τη διαδρομή για εσάς", "Promo": "Προσφορά", "Show latest promo": "Εμφάνιση τελευταίων προσφορών", "Trip Monitoring": "Παρακολούθηση Διαδρομής", "Driver Is Going To Passenger": "Ο οδηγός πηγαίνει στον Επιβάτη", "Please stay on the picked point.": "Παρακαλώ μείνετε στο επιλεγμένο σημείο.", "message From Driver": "Μήνυμα από τον Οδηγό", "Trip is Begin": "Η διαδρομή ξεκινά", "Cancel Trip from driver": "Ακύρωση διαδρομής από τον οδηγό", "We will look for a new driver.\nPlease wait.": "Αναζητούμε νέο οδηγό.\nΠαρακαλώ περιμένετε.", "The driver canceled your ride.": "Ο οδηγός ακύρωσε τη διαδρομή σας.", "Driver Finish Trip": "Ο οδηγός ολοκλήρωσε τη διαδρομή", "you will pay to Driver": "Θα πληρώσετε στον Οδηγό", "Don’t forget your personal belongings.": "Μην ξεχάσετε τα προσωπικά σας αντικείμενα.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "Βεβαιωθείτε ότι έχετε πάρει όλα τα προσωπικά σας αντικείμενα και ότι τυχόν ρέστα έχουν προστεθεί στο πορτοφόλι σας πριν αποχωρήσετε. Ευχαριστούμε που επιλέξατε το Intaleq.", "Finish Monitor": "Τέλος Παρακολούθησης", "Trip finished": "Η διαδρομή ολοκληρώθηκε", "Call Income from Driver": "Κλήση από τον Οδηγό", "Driver Cancelled Your Trip": "Ο Οδηγός Ακύρωσε τη Διαδρομή σας", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "Θα πληρώσετε το κόστος χρόνου του οδηγού, δείτε το Πορτοφόλι Intaleq", "Order Applied": "Το αίτημα καταχωρήθηκε", "welcome to intaleq": "Καλώς ήρθατε στο Intaleq", "login or register subtitle": "Εισάγετε τον αριθμό κινητού για είσοδο ή εγγραφή", "An application error occurred.": "Προέκυψε σφάλμα εφαρμογής.", "Submission Failed": "Η υποβολή απέτυχε", "Your complaint has been submitted.": "Η καταγγελία σας υποβλήθηκε.", "Failed to connect to the server. Please try again.": "Αποτυχία σύνδεσης στον διακομιστή. Προσπαθήστε ξανά.", "Ride information not found. Please refresh the page.": "Δεν βρέθηκαν πληροφορίες διαδρομής. Ανανεώστε τη σελίδα.", "Please describe your issue before submitting.": "Περιγράψτε το πρόβλημά σας πριν την υποβολή.", "An application error occurred during upload.": "Προέκυψε σφάλμα κατά τη μεταφόρτωση.", "Failed to upload audio file.": "Αποτυχία μεταφόρτωσης αρχείου ήχου.", "Audio uploaded successfully.": "Ο ήχος μεταφορτώθηκε επιτυχώς.", "Complaint cannot be filed for this ride. It may not have been completed or started.": "Δεν μπορεί να υποβληθεί καταγγελία για αυτή τη διαδρομή. Ίσως δεν ολοκληρώθηκε ή δεν ξεκίνησε.", "2. Attach Recorded Audio (Optional)": "2. Επισύναψη Ηχογράφησης (Προαιρετικό)", "Please enter a description of the issue.": "Παρακαλώ εισάγετε περιγραφή του θέματος.", "phone number label": "Αριθμός Τηλεφώνου", "phone number required": "Απαιτείται αριθμός τηλεφώνου", "send otp button": "Αποστολή Κωδικού OTP", "verify your number title": "Επαληθεύστε τον αριθμό σας", "otp sent subtitle": "Ένας 5ψήφιος κωδικός στάλθηκε στο\n@phoneNumber", "verify and continue button": "Επαλήθευση και Συνέχεια", "enter otp validation": "Εισάγετε τον 5ψήφιο κωδικό OTP", "one last step title": "Ένα τελευταίο βήμα", "complete profile subtitle": "Ολοκληρώστε το προφίλ σας για να ξεκινήσετε", "first name label": "Όνομα", "first name required": "Απαιτείται όνομα", "last name label": "Επώνυμο", "Verify OTP": "Επαλήθευση OTP", "Verification Code": "Κωδικός Επαλήθευσης", "We have sent a verification code to your mobile number:": "Στείλαμε έναν κωδικό επαλήθευσης στο κινητό σας:", "Verify": "Επαλήθευση", "Resend Code": "Επαναποστολή Κωδικού", "You can resend in": "Επαναποστολή σε", "seconds": "δευτερόλεπτα", "Error": "Σφάλμα", "Please enter the complete 6-digit code.": "Παρακαλώ εισάγετε τον πλήρη 6ψήφιο κωδικό.", "last name required": "Απαιτείται επώνυμο", "email optional label": "Email (Προαιρετικό)", "complete registration button": "Ολοκλήρωση Εγγραφής", "User with this phone number or email already exists.": "Υπάρχει ήδη χρήστης με αυτό το τηλέφωνο ή email.", "otp sent success": "Ο κωδικός στάλθηκε στο WhatsApp.", "failed to send otp": "Αποτυχία αποστολής OTP.", "server error try again": "Σφάλμα διακομιστή, προσπαθήστε ξανά.", "an error occurred": "Προέκυψε σφάλμα: @error", "otp verification failed": "Η επαλήθευση OTP απέτυχε.", "registration failed": "Η εγγραφή απέτυχε.", "welcome user": "Καλώς ήρθες, @firstName!", "Cancel Trip from driver": "Ακύρωση από τον οδηγό", "We will look for a new driver.\nPlease wait.": "Αναζητούμε νέο οδηγό.\nΠαρακαλώ περιμένετε.", "The driver canceled your ride.": "Ο οδηγός ακύρωσε τη διαδρομή σας.", "Driver Finish Trip": "Ο Οδηγός Ολοκλήρωσε τη Διαδρομή", "you will pay to Driver": "Θα πληρώσετε στον Οδηγό", "Don't forget your personal belongings.": "Μην ξεχάσετε τα προσωπικά σας αντικείμενα.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "Βεβαιωθείτε ότι πήρατε τα πράγματά σας και ότι τυχόν ρέστα προστέθηκαν στο πορτοφόλι σας. Ευχαριστούμε που επιλέξατε το Intaleq.", "Finish Monitor": "Τέλος Παρακολούθησης", "Trip finished": "Η διαδρομή έληξε", "Call Income from Driver": "Κλήση από τον Οδηγό", "Driver Cancelled Your Trip": "Ο Οδηγός Ακύρωσε τη Διαδρομή", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "Θα πληρώσετε για τον χρόνο του οδηγού, δείτε το Πορτοφόλι Intaleq", "Order Applied": "Το αίτημα υποβλήθηκε", "Share App": "Κοινοποίηση Εφαρμογής", "Wallet": "Πορτοφόλι", "Balance": "Υπόλοιπο", "Don’t forget your personal belongings.": "Μην ξεχάσετε τα αντικείμενά σας.", "Profile": "Προφίλ", "Contact Support": "Επικοινωνία με Υποστήριξη", "Session expired. Please log in again.": "Η συνεδρία έληξε. Συνδεθείτε ξανά.", "Security Warning": "⚠️ Προειδοποίηση Ασφαλείας", "Potential security risks detected. The application may not function correctly.": "Εντοπίστηκαν πιθανοί κίνδυνοι ασφαλείας. Η εφαρμογή ενδέχεται να μην λειτουργεί σωστά.", "please order now": "Κάντε αίτημα τώρα", "Where to": "Πού πάτε;", "Where are you going?": "Πού πηγαίνετε;", "Quick Actions": "Γρήγορες Ενέργειες", "My Balance": "Το Υπόλοιπό μου", "Order History": "Ιστορικό Διαδρομών", "Contact Us": "Επικοινωνία", "Driver": "Οδηγός", "Complaint": "Καταγγελία", "Promos": "Προσφορές", "Recent Places": "Πρόσφατα Μέρη", "From": "Από", "WhatsApp Location Extractor": "Εξαγωγή Τοποθεσίας WhatsApp", "Location Link": "Σύνδεσμος Τοποθεσίας", "Paste location link here": "Επικολλήστε τον σύνδεσμο εδώ", "Go to this location": "Μετάβαση σε αυτή την τοποθεσία", "Paste WhatsApp location link": "Επικολλήστε σύνδεσμο WhatsApp", "Select Order Type": "Επιλογή Τύπου Διαδρομής", "Choose who this order is for": "Για ποιον είναι η διαδρομή;", "I want to order for myself": "Για εμένα", "I want to order for someone else": "Για κάποιον άλλον", "Order for someone else": "Διαδρομή για άλλον", "Order for myself": "Διαδρομή για εμένα", "Are you want to go this site": "Θέλετε να πάτε σε αυτό το σημείο;", "No": "Όχι", "Pay by Sham Cash": "Πληρωμή με Sham Cash", "Intaleq Wallet": "Πορτοφόλι Intaleq", "Have a promo code?": "Έχετε κωδικό προσφοράς;", "Your Wallet balance is ": "Το υπόλοιπο του πορτοφολιού είναι ", "Cash": "Μετρητά", "Phone Number": "Αριθμός Τηλεφώνου", "Search country": "Αναζήτηση χώρας", "Payment Successful!": "Πληρωμή Επιτυχής!", "Your payment was successful.": "Η πληρωμή σας ήταν επιτυχής.", "Pay directly to the captain": "Πληρωμή απευθείας στον οδηγό", "Top up Wallet to continue": "Φορτίστε το Πορτοφόλι για συνέχεια", "Or pay with Cash instead": "Ή πληρώστε με Μετρητά", "Confirm & Find a Ride": "Επιβεβαίωση & Εύρεση", "Balance:": "Υπόλοιπο:", "Alerts": "Ειδοποιήσεις", "Welcome Back!": "Καλώς ήρθατε ξανά!", "Current Balance": "Τρέχον Υπόλοιπο", "Set Wallet Phone Number": "Ορισμός Τηλεφώνου Πορτοφολιού", "Link a phone number for transfers": "Σύνδεση τηλεφώνου για μεταφορές", "Payment History": "Ιστορικό Πληρωμών", "View your past transactions": "Δείτε τις προηγούμενες συναλλαγές", "Top up Wallet": "Φόρτιση Πορτοφολιού", "Add funds using our secure methods": "Προσθήκη χρημάτων με ασφάλεια", "Driver is waiting": "Ο οδηγός περιμένει", "Type your message...": "Γράψτε το μήνυμά σας...", "Driver Accepted Request": "Ο Οδηγός Αποδέχτηκε", "Message": "Μήνυμα", "Call": "Κλήση", "Set Phone Number": "Ορισμός Τηλεφώνου", "Select This Ride": "Επιλογή Διαδρομής", "Call Driver": "Κλήση Οδηγού", "Increase Fare": "Αύξηση Ναύλου", "Stop": "Στάση", "Record": "Εγγραφή", "Share": "Κοινοποίηση", "WhatsApp": "WhatsApp", "SOS": "SOS", "No drivers accepted your request yet": "Κανένας οδηγός δεν αποδέχτηκε ακόμα", "Increasing the fare might attract more drivers. Would you like to increase the price?": "Η αύξηση του ναύλου μπορεί να προσελκύσει περισσότερους οδηγούς. Θέλετε να αυξήσετε την τιμή;", "Please make sure not to leave any personal belongings in the car.": "Βεβαιωθείτε ότι δεν αφήσατε προσωπικά αντικείμενα στο αμάξι.", "Cancel Ride": "Ακύρωση Διαδρομής", "Route Not Found": "Η διαδρομή δεν βρέθηκε", "We couldn't find a valid route to this destination. Please try selecting a different point.": "Δεν βρέθηκε έγκυρη διαδρομή. Παρακαλώ επιλέξτε άλλο σημείο.", "alert": "Ειδοποίηση", "You can call or record audio during this trip.": "Μπορείτε να καλέσετε ή να ηχογραφήσετε κατά τη διαδρομή.", "Warning: Speeding detected!": "Προειδοποίηση: Εντοπίστηκε υπερβολική ταχύτητα!", "Fixed Price": "Σταθερή Τιμή", "Report": "Αναφορά", "Comfort": "Comfort", "Intaleq Balance": "Υπόλοιπο Intaleq", "Search for a starting point": "Αναζήτηση σημείου εκκίνησης", "Top up Balance to continue": "Φορτίστε το Υπόλοιπο για συνέχεια", "Electric": "Ηλεκτρικό", "Lady": "Lady (Γυναίκες)", "Van": "Van", "Rayeh Gai": "Μετ' επιστροφής", "Join Intaleq as a driver using my referral code!": "Γίνε οδηγός στο Intaleq με τον κωδικό μου!", "Use code:": "Χρήση κωδικού:", "Download the Intaleq Driver app now and earn rewards!": "Κατεβάστε την εφαρμογή Οδηγού Intaleq και κερδίστε!", "Get a discount on your first Intaleq ride!": "Έκπτωση στην πρώτη διαδρομή Intaleq!", "Use my referral code:": "Χρησιμοποιήστε τον κωδικό μου:", "Download the Intaleq app now and enjoy your ride!": "Κατεβάστε το Intaleq και απολαύστε τη διαδρομή!", "Contacts Loaded": "Οι επαφές φορτώθηκαν", "Showing": "Εμφάνιση", "of": "από", "Pay by MTN Wallet": "Πληρωμή με MTN Wallet", "Pay by Syriatel Wallet": "Πληρωμή με Syriatel Wallet", "Customer not found": "Ο πελάτης δεν βρέθηκε", "Wallet is blocked": "Το πορτοφόλι έχει αποκλειστεί", "Customer phone is not active": "Το τηλέφωνο δεν είναι ενεργό", "Balance not enough": "Ανεπαρκές υπόλοιπο", "Balance limit exceeded": "Υπέρβαση ορίου υπολοίπου", "Incorrect sms code": "⚠️ Λάθος κωδικός SMS. Προσπαθήστε ξανά.", "contacts. Others were hidden because they don't have a phone number.": "επαφές. Οι άλλες αποκρύφθηκαν γιατί δεν έχουν αριθμό.", "No contacts found": "Δεν βρέθηκαν επαφές", "No contacts with phone numbers were found on your device.": "Δεν βρέθηκαν επαφές με αριθμούς στη συσκευή.", "Permission denied": "Άρνηση πρόσβασης", "Contact permission is required to pick contacts": "Απαιτείται άδεια επαφών.", "An error occurred while picking contacts:": "Σφάλμα κατά την επιλογή επαφών:", "Please enter a correct phone": "Εισάγετε σωστό τηλέφωνο", "Success": "Επιτυχία", "Invite sent successfully": "Η πρόσκληση στάλθηκε", "Hello! I'm inviting you to try Intaleq.": "Γεια! Σε προσκαλώ να δοκιμάσεις το Intaleq.", "Use my invitation code to get a special gift on your first ride!": "Χρησιμοποίησε τον κωδικό μου για δώρο στην πρώτη διαδρομή!", "Your personal invitation code is:": "Ο κωδικός πρόσκλησής σου:", "Be sure to use it quickly! This code expires at": "Χρησιμοποίησέ το γρήγορα! Λήγει στις", "Download the app now:": "Κατέβασε την εφαρμογή:", "See you on the road!": "Τα λέμε στον δρόμο!", "This phone number has already been invited.": "Αυτός ο αριθμός έχει ήδη προσκληθεί.", "An unexpected error occurred. Please try again.": "Προέκυψε απροσδόκητο σφάλμα. Προσπαθήστε ξανά.", "You deserve the gift": "Αξίζετε το δώρο", "Claim your 20 LE gift for inviting": "Διεκδικήστε το δώρο 20 € για την πρόσκληση", "You have got a gift for invitation": "Έχετε ένα δώρο πρόσκλησης", "You have earned 20": "Κερδίσατε 20", "LE": "€", "Vibration feedback for all buttons": "Δόνηση για όλα τα κουμπιά", "Share with friends and earn rewards": "Μοιραστείτε με φίλους και κερδίστε", "Gift Already Claimed": "Το δώρο έχει ήδη ληφθεί", "You have already received your gift for inviting": "Έχετε ήδη λάβει το δώρο σας", "Keep it up!": "Συνεχίστε έτσι!", "has completed": "ολοκλήρωσε", "trips": "διαδρομές", "Personal Information": "Προσωπικά Στοιχεία", "Name": "Όνομα", "Not set": "Δεν ορίστηκε", "Gender": "Φύλο", "Education": "Εκπαίδευση", "Work & Contact": "Εργασία & Επικοινωνία", "Employment Type": "Τύπος Απασχόλησης", "Marital Status": "Οικογενειακή Κατάσταση", "SOS Phone": "Τηλέφωνο SOS", "Sign Out": "Αποσύνδεση", "Delete My Account": "Διαγραφή Λογαριασμού", "Update Gender": "Ενημέρωση Φύλου", "Update": "Ενημέρωση", "Update Education": "Ενημέρωση Εκπαίδευσης", "Are you sure? This action cannot be undone.": "Είστε σίγουροι; Αυτή η ενέργεια δεν αναιρείται.", "Confirm your Email": "Επιβεβαίωση Email", "Type your Email": "Πληκτρολογήστε το Email", "Delete Permanently": "Οριστική Διαγραφή", "Male": "Άνδρας", "Female": "Γυναίκα", "Other": "Άλλο", "High School Diploma": "Απολυτήριο Λυκείου", "Associate Degree": "Πτυχίο ΙΕΚ/Κολεγίου", "Bachelor's Degree": "Πτυχίο ΑΕΙ", "Master's Degree": "Μεταπτυχιακό", "Doctoral Degree": "Διδακτορικό", "Select your preferred language for the app interface.": "Επιλέξτε γλώσσα εφαρμογής.", "Language Options": "Επιλογές Γλώσσας", "You can claim your gift once they complete 2 trips.": "Μπορείτε να πάρετε το δώρο αφού ολοκληρώσουν 2 διαδρομές.", "Closest & Cheapest": "Κοντινότερο & Φθηνότερο", "Comfort choice": "Επιλογή Comfort", "Travel in a modern, silent electric car. A premium, eco-friendly choice for a smooth ride.": "Ταξιδέψτε με σύγχρονο, αθόρυβο ηλεκτρικό αυτοκίνητο. Premium και οικολογική επιλογή.", "Spacious van service ideal for families and groups. Comfortable, safe, and cost-effective travel together.": "Ευρύχωρο βαν, ιδανικό για οικογένειες. Άνετο, ασφαλές και οικονομικό.", "Quiet & Eco-Friendly": "Ήσυχο & Οικολογικό", "Lady Captain for girls": "Γυναίκα Οδηγός για γυναίκες", "Van for familly": "Βαν για οικογένεια", "Are you sure to delete this location?": "Σίγουρα θέλετε να διαγράψετε την τοποθεσία;", "Change Work location?": "Αλλαγή τοποθεσίας Εργασίας;", "Change Home location?": "Αλλαγή τοποθεσίας Σπιτιού;", "Submit a Complaint": "Υποβολή Καταγγελίας", "Submit Complaint": "Υποβολή", "No trip history found": "Δεν βρέθηκε ιστορικό", "Your past trips will appear here.": "Οι προηγούμενες διαδρομές θα εμφανιστούν εδώ.", "1. Describe Your Issue": "1. Περιγράψτε το θέμα", "Enter your complaint here...": "Γράψτε την καταγγελία εδώ...", "2. Attach Recorded Audio": "2. Επισύναψη Ήχου", "No audio files found.": "Δεν βρέθηκαν αρχεία ήχου.", "Confirm Attachment": "Επιβεβαίωση Επισύναψης", "Attach this audio file?": "Επισύναψη αυτού του αρχείου;", "Uploaded": "Μεταφορτώθηκε", "3. Review Details & Response": "3. Έλεγχος Λεπτομερειών", "Date": "Ημερομηνία", "Today's Promos": "Σημερινές Προσφορές", "No promos available right now.": "Δεν υπάρχουν προσφορές τώρα.", "Check back later for new offers!": "Ελέγξτε ξανά αργότερα!", "Valid Until:": "Ισχύει έως:", "CODE": "ΚΩΔΙΚΟΣ", "Login": "Είσοδος", "Sign in for a seamless experience": "Συνδεθείτε για καλύτερη εμπειρία", "Sign In with Google": "Σύνδεση με Google", "Sign in with Apple": "Σύνδεση με Apple", "User not found": "Ο χρήστης δεν βρέθηκε", "Need assistance? Contact us": "Χρειάζεστε βοήθεια; Επικοινωνήστε", "Email": "Email", "Your email address": "Η διεύθυνση email σας", "Enter a valid email": "Εισάγετε έγκυρο email", "Password": "Κωδικός", "Your password": "Ο κωδικός σας", "Enter your password": "Εισάγετε κωδικό πρόσβασης", "Submit": "Υποβολή", "Terms of Use & Privacy Notice": "Όροι Χρήσης & Πολιτική Απορρήτου", "By selecting \"I Agree\" below, I confirm that I have read and agree to the ": "Επιλέγοντας \"Συμφωνώ\", επιβεβαιώνω ότι διάβασα και αποδέχομαι τους ", "Terms of Use": "Όρους Χρήσης", " and acknowledge the ": " και αναγνωρίζω την ", "Privacy Notice": "Πολιτική Απορρήτου", " . I am at least 18 years old.": " . Είμαι τουλάχιστον 18 ετών.", "I Agree": "Συμφωνώ", "Continue": "Συνέχεια", "Enable Location": "Ενεργοποίηση Τοποθεσίας", "To give you the best experience, we need to know where you are. Your location is used to find nearby captains and for pickups.": "Για την καλύτερη εμπειρία, χρειαζόμαστε την τοποθεσία σας για να βρούμε κοντινούς οδηγούς.", "Allow Location Access": "Να επιτρέπεται η πρόσβαση", "Welcome to Intaleq!": "Καλώς ήρθατε στο Intaleq!", "Before we start, please review our terms.": "Πριν ξεκινήσουμε, δείτε τους όρους μας.", "Your journey starts here": "Το ταξίδι ξεκινά εδώ", "Cancel Search": "Ακύρωση Αναζήτησης", "Set pickup location": "Ορισμός παραλαβής", "Move the map to adjust the pin": "Μετακινήστε τον χάρτη", "Searching for the nearest captain...": "Αναζήτηση κοντινότερου οδηγού...", "No one accepted? Try increasing the fare.": "Κανείς δεν δέχτηκε; Αυξήστε την προσφορά.", "Increase Your Trip Fee (Optional)": "Αύξηση Ναύλου (Προαιρετικό)", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "Δεν βρέθηκαν οδηγοί. Σκεφτείτε να αυξήσετε την τιμή για να γίνει πιο ελκυστική η προσφορά.", "No, thanks": "Όχι, ευχαριστώ", "Increase Fee": "Αύξηση Τιμής", "Copy": "Αντιγραφή", "Promo Copied!": "Αντιγράφηκε!", "Code": "Κωδικός", "copied to clipboard": "αντιγράφηκε στο πρόχειρο", "Price": "Τιμή", "Intaleq's Response": "Απάντηση Intaleq", "Awaiting response...": "Αναμονή απάντησης...", "Audio file not attached": "Δεν επισυνάφθηκε ήχος", "The audio file is not uploaded yet.\\nDo you want to submit without it?": "Ο ήχος δεν ανέβηκε ακόμα.\\nΝα γίνει υποβολή χωρίς αυτόν;", "deleted": "διαγράφηκε", "To Work": "Προς Εργασία", "Work Saved": "Εργασία Αποθηκεύτηκε", "To Home": "Προς Σπίτι", "Home Saved": "Σπίτι Αποθηκεύτηκε", "Destination selected": "Προορισμός επιλέχθηκε", "Now select start pick": "Επιλέξτε σημείο παραλαβής", "OK": "ΟΚ", "Confirm Pick-up Location": "Επιβεβαίωση Παραλαβής", "Set Location on Map": "Ορισμός στον Χάρτη", "Leave a detailed comment (Optional)": "Αφήστε σχόλιο (Προαιρετικό)", "Share your experience to help us improve...": "Μοιραστείτε την εμπειρία σας...", "Your valuable feedback helps us improve our service quality.": "Η γνώμη σας μας βοηθά να βελτιωθούμε.", "witout zero": "χωρίς μηδενικό", "Top up Balance": "Φόρτιση Υπολοίπου", "An error occurred": "Προέκυψε σφάλμα", "Send WhatsApp Message": "Αποστολή WhatsApp", "How was your trip with": "Πώς ήταν η διαδρομή με", "Drawing route on map...": "Σχεδίαση διαδρομής...", "Please wait while we prepare your trip.": "Περιμένετε όσο ετοιμάζουμε τη διαδρομή.", "Submit Rating": "Υποβολή Βαθμολογίας", "Call Support": "Κλήση Υποστήριξης", "You can contact us during working hours from 10:00 - 16:00.": "Επικοινωνήστε μαζί μας 10:00 - 16:00.", "Intaleq is the safest and most reliable ride-sharing app designed especially for passengers in Syria. We provide a comfortable, respectful, and affordable riding experience with features that prioritize your safety and convenience. Our trusted captains are verified, insured, and supported by regular car maintenance carried out by top engineers. We also offer on-road support services to make sure every trip is smooth and worry-free. With Intaleq, you enjoy quality, safety, and peace of mind—every time you ride.": "Το Intaleq είναι η ασφαλέστερη εφαρμογή μεταφοράς στην Ελλάδα. Παρέχουμε άνετη και οικονομική εμπειρία. Οι οδηγοί μας είναι ελεγμένοι και ασφαλισμένοι. Απολαύστε ποιότητα και ασφάλεια.", "Work time is from 10:00 AM to 16:00 PM.\nYou can send a WhatsApp message or email.": "Ώρες εργασίας 10:00 - 16:00.\nΣτείλτε WhatsApp ή email.", "Sorry": "Συγγνώμη", "Customer MSISDN doesn’t have customer wallet": "Ο αριθμός δεν έχει πορτοφόλι πελάτη", "Please enter the number without the leading 0": "Εισάγετε τον αριθμό χωρίς το αρχικό 0", "Please enter your phone number": "Εισάγετε τον αριθμό τηλεφώνου", "Phone number seems too short": "Ο αριθμός φαίνεται πολύ μικρός", "No cars are available at the moment. Please try again later.": "Δεν υπάρχουν οχήματα. Προσπαθήστε αργότερα.", "Nearest Car: ~": "Κοντινότερο Όχημα: ~", "Nearest Car": "Κοντινότερο Όχημα", "No cars nearby": "Κανένα όχημα κοντά", "Favorite Places": "Αγαπημένα Μέρη", "No favorite places yet!": "Κανένα αγαπημένο μέρος ακόμα!", "from your favorites": "από τα αγαπημένα", "Back": "Πίσω", "Enter your code below to apply the discount.": "Εισάγετε τον κωδικό για έκπτωση.", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "Επιλέγοντας \"Συμφωνώ\", αποδέχομαι τα", "and acknowledge the": "και αναγνωρίζω την", "Enable Location Access": "Ενεργοποίηση Τοποθεσίας", "We need your location to find nearby drivers for pickups and drop-offs.": "Χρειαζόμαστε την τοποθεσία σας για εύρεση οδηγών.", "You should restart app to change language": "Επανεκκινήστε την εφαρμογή για αλλαγή γλώσσας", "Home Page": "Αρχική Σελίδα", "To change Language the App": "Αλλαγή Γλώσσας Εφαρμογής", "Learn more about our app and mission": "Μάθετε περισσότερα για εμάς", "Promos For Today": "Σημερινές Προσφορές", "Choose your ride": "Επιλέξτε διαδρομή", "Your Journey Begins Here": "Το ταξίδι ξεκινά εδώ", "Bonus gift": "Δώρο Bonus", "Pay": "Πληρωμή", "Get": "Λήψη", "Send to Driver Again": "Αποστολή ξανά στον Οδηγό", "Driver Name:": "Όνομα Οδηγού:", "No trip data available": "Μη διαθέσιμα δεδομένα", "Car Plate:": "Πινακίδα:", "remaining": "απομένουν", "Order Cancelled": "Ακυρώθηκε", "You canceled VIP trip": "Ακυρώσατε τη VIP διαδρομή", "Passenger cancelled order": "Ο επιβάτης ακύρωσε", "Your trip is scheduled": "Η διαδρομή προγραμματίστηκε", "Don't forget your ride!": "Μην ξεχάσετε τη διαδρομή!", "Trip updated successfully": "Η διαδρομή ενημερώθηκε", "Car Make:": "Μάρκα:", "Car Model:": "Μοντέλο:", "Car Color:": "Χρώμα:", "Driver Phone:": "Τηλ. Οδηγού:", "Pre-booking": "Προκράτηση", "Waiting VIP": "Αναμονή VIP", "Driver List": "Λίστα Οδηγών", "Confirm Trip": "Επιβεβαίωση", "Select date and time of trip": "Επιλογή ημερομηνίας και ώρας", "Date and Time Picker": "Επιλογή Ημερομηνίας/Ώρας", "Trip Status:": "Κατάσταση:", "pending": "εκκρεμεί", "accepted": "εγκρίθηκε", "rejected": "απορρίφθηκε", "Apply": "Εφαρμογή", "Enter your promo code": "Εισάγετε κωδικό", "Apply Promo Code": "Χρήση Κωδικού", "Scheduled Time:": "Προγραμματισμένη Ώρα:", "No drivers available": "Κανένας οδηγός διαθέσιμος", "No drivers available at the moment. Please try again later.": "Κανένας οδηγός τώρα. Προσπαθήστε αργότερα.", "you have a negative balance of": "έχετε αρνητικό υπόλοιπο", "Please try again in a few moments": "Προσπαθήστε ξανά σε λίγο", "Unknown Driver": "Άγνωστος Οδηγός", "in your": "στο", "The driver accepted your order for": "Ο οδηγός αποδέχτηκε για", "wallet due to a previous trip.": "πορτοφόλι λόγω προηγούμενης διαδρομής.", "rides": "διαδρομές", "Add Work": "Προσθήκη Εργασίας", "The reason is": "Ο λόγος είναι", "User does not have a wallet #1652": "Ο χρήστης δεν έχει πορτοφόλι #1652", "Price of trip": "Τιμή διαδρομής", "From:": "Από:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Για Intaleq και Delivery, η τιμή είναι δυναμική. Για Comfort, βασίζεται σε χρόνο και απόσταση.", "Phone Wallet Saved Successfully": "Το τηλέφωνο πορτοφολιού αποθηκεύτηκε", "Add wallet phone you use": "Προσθήκη τηλεφώνου πορτοφολιού", "Update Available": "Διαθέσιμη Ενημέρωση", "Phone number must be exactly 11 digits long": "Ο αριθμός πρέπει να έχει 10 ψηφία", "Insert Wallet phone number": "Εισαγωγή τηλεφώνου πορτοφολιού", "Phone number isn't an Egyptian phone number": "Δεν είναι ελληνικός αριθμός", "A new version of the app is available. Please update to the latest version.": "Νέα έκδοση διαθέσιμη. Παρακαλώ ενημερώστε.", "We use location to get accurate and nearest passengers for you": "Χρησιμοποιούμε την τοποθεσία για εύρεση επιβατών", "This ride is already applied by another driver.": "Αυτή η διαδρομή αναλήφθηκε από άλλον οδηγό.", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "Χρησιμοποιούμε την ακριβή τοποθεσία για εύρεση οδηγού. Διαχείριση στις Ρυθμίσεις.", "Where are you, sir?": "Πού είστε;", "I've been trying to reach you but your phone is off.": "Προσπαθώ να σας βρω αλλά το κινητό είναι κλειστό.", "Please don't be late": "Παρακαλώ μην αργήσετε", "Please don't be late, I'm waiting for you at the specified location.": "Μην αργήσετε, περιμένω στο σημείο.", "My location is correct. You can search for me using the navigation app": "Η τοποθεσία είναι σωστή. Βρείτε με μέσω GPS.", "Hello, I'm at the agreed-upon location": "Γεια, είμαι στο συμφωνημένο σημείο", "How much longer will you be?": "Πόση ώρα ακόμα;", "Phone number is verified before": "Ο αριθμός έχει επαληθευτεί", "Change Ride": "Αλλαγή Διαδρομής", "You can change the destination by long-pressing any point on the map": "Αλλάξτε προορισμό πατώντας παρατεταμένα στον χάρτη", "Pick from map destination": "Επιλογή προορισμού στον χάρτη", "Pick or Tap to confirm": "Επιλέξτε ή Πατήστε για επιβεβαίωση", "Accepted your order": "Αποδέχτηκε το αίτημα", "Order Accepted": "Αίτημα Εγκρίθηκε", "with type": "τύπου", "accepted your order at price": "αποδέχτηκε στην τιμή", "you canceled order": "ακυρώσατε", "If you want order to another person": "Αν θέλετε διαδρομή για άλλον", "upgrade price": "αύξηση τιμής", "airport": "αεροδρόμιο", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "Καλύτερη επιλογή για άνετο αμάξι με ευέλικτη διαδρομή.", "You can upgrade price to may driver accept your order": "Μπορείτε να αυξήσετε την τιμή για να αποδεχτεί οδηγός", "Change Route": "Αλλαγή Διαδρομής", "No Captain Accepted Your Order": "Κανένας Οδηγός δεν αποδέχτηκε", "We are looking for a captain but the price may increase to let a captain accept": "Ψάχνουμε οδηγό αλλά η τιμή ίσως αυξηθεί", "No, I want to cancel this trip": "Όχι, θέλω ακύρωση", "Attention": "Προσοχή", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "Ακυρώθηκε. Το κόστος θα αφαιρεθεί από το πορτοφόλι.", "You will be charged for the cost of the driver coming to your location.": "Θα χρεωθείτε το κόστος μετάβασης του οδηγού.", "reject your order.": "απέρριψε το αίτημα.", "Order Under Review": "Υπό Εξέταση", "is reviewing your order. They may need more information or a higher price.": "εξετάζει το αίτημα. Ίσως χρειάζεται υψηλότερη τιμή.", "Vibration": "Δόνηση", "Resend code": "Επαναποστολή", "change device": "αλλαγή συσκευής", "Device Change Detected": "Ανιχνεύτηκε Αλλαγή Συσκευής", "You can only use one device at a time. This device will now be set as your active device.": "Μόνο μία συσκευή ταυτόχρονα. Αυτή ορίζεται ως ενεργή.", "Click here point": "Πατήστε εδώ", "Are you want to change": "Θέλετε να αλλάξετε", "by": "από", "Enter your complaint here": "Εισάγετε καταγγελία", "Please enter your complaint.": "Παρακαλώ εισάγετε καταγγελία.", "Complaint data saved successfully": "Αποθηκεύτηκε επιτυχώς", "Trip Monitor": "Παρακολούθηση", "Insert SOS Phone": "Εισαγωγή Τηλεφώνου SOS", "Add SOS Phone": "Προσθήκη SOS", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "Αγαπητέ,\n\n🚀 Ξεκίνησα μια διαδρομή και μοιράζομαι την τοποθεσία μου! Κατέβασε το Intaleq για να με παρακολουθείς.\n\n👉 Σύνδεσμος: \nAndroid [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\niOS [https://getapp.cc/app/6458734951]\n\nIntaleq ,", "Send Intaleq app to him": "Αποστολή εφαρμογής", "No passenger found for the given phone number": "Δεν βρέθηκε επιβάτης", "No user found for the given phone number": "Δεν βρέθηκε χρήστης", "This price is": "Η τιμή είναι", "Work": "Εργασία", "Add Home": "Προσθήκη Σπιτιού", "Notifications": "Ειδοποιήσεις", "💳 Pay with Credit Card": "💳 Πληρωμή με Κάρτα", "⚠️ You need to choose an amount!": "⚠️ Επιλέξτε ποσό!", "💰 Pay with Wallet": "💰 Πληρωμή με Πορτοφόλι", "You must restart the app to change the language.": "Επανεκκίνηση για αλλαγή γλώσσας.", "joined": "μπήκε", "Driver joined the channel": "Ο οδηγός μπήκε στο κανάλι", "Driver left the channel": "Ο οδηγός βγήκε από το κανάλι", "Call Page": "Σελίδα Κλήσης", "Call Left": "Κλήσεις που απομένουν", " Next as Cash !": " Επόμενο με Μετρητά!", "To use Wallet charge it": "Φορτίστε το πορτοφόλι", "We are searching for the nearest driver to you": "Ψάχνουμε τον κοντινότερο οδηγό", "Best choice for cities": "Καλύτερη επιλογή για πόλη", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "Μετ' επιστροφής: Άνετο ταξίδι μεταξύ πόλεων.", "This trip is for women only": "Μόνο για γυναίκες", "Total budgets on month": "Σύνολο μήνα", "You have call from driver": "Κλήση από οδηγό", "Intaleq": "Intaleq", "passenger agreement": "συμφωνία επιβάτη", "To become a passenger, you must review and agree to the ": "Πρέπει να συμφωνήσετε με τους ", "agreement subtitle": "Αποδοχή Όρων Χρήσης και Πολιτικής Απορρήτου.", "terms of use": "όρους χρήσης", " and acknowledge our Privacy Policy.": " και την Πολιτική Απορρήτου.", "and acknowledge our": "και την", "privacy policy": "πολιτική απορρήτου.", "i agree": "συμφωνώ", "Driver already has 2 trips within the specified period.": "Ο οδηγός έχει ήδη 2 διαδρομές.", "The invitation was sent successfully": "Η πρόσκληση στάλθηκε", "You should select your country": "Επιλέξτε χώρα", "Scooter": "Σκούτερ", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "Διαδρομή με κράτηση, επιλογή οδηγών και οχημάτων.", "Mishwar Vip": "VIP Διαδρομή", "The driver waiting you in picked location .": "Ο οδηγός περιμένει στο σημείο.", "About Us": "Σχετικά", "You can change the vibration feedback for all buttons": "Αλλαγή δόνησης κουμπιών", "Most Secure Methods": "Ασφαλείς Μέθοδοι", "In-App VOIP Calls": "Κλήσεις VOIP", "Recorded Trips for Safety": "Καταγεγραμμένες Διαδρομές", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nΠροσιτές τιμές για όλους.", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "Το Intaleq είναι εφαρμογή μετακίνησης με έμφαση στην ασφάλεια.", "Sign In by Apple": "Είσοδος με Apple", "Sign In by Google": "Είσοδος με Google", "How do I request a ride?": "Πώς ζητάω διαδρομή;", "Step-by-step instructions on how to request a ride through the Intaleq app.": "Οδηγίες για αίτημα διαδρομής.", "What types of vehicles are available?": "Τι οχήματα υπάρχουν;", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "Economy, Comfort, Luxury.", "How can I pay for my ride?": "Πώς πληρώνω;", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "Μετρητά ή Κάρτα.", "Can I cancel my ride?": "Μπορώ να ακυρώσω;", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "Ναι, ενδέχεται να υπάρξει χρέωση ακύρωσης.", "Driver Registration & Requirements": "Εγγραφή Οδηγού", "How can I register as a driver?": "Πώς γίνομαι οδηγός;", "What are the requirements to become a driver?": "Απαιτήσεις οδηγού;", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "Επισκεφτείτε την ιστοσελίδα ή επικοινωνήστε.", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "Chat εντός εφαρμογής.", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "Επαλήθευση οδηγού, παρακολούθηση, SOS.", "Frequently Questions": "Συχνές Ερωτήσεις", "User does not exist.": "Ο χρήστης δεν υπάρχει.", "We need your phone number to contact you and to help you.": "Χρειαζόμαστε το τηλέφωνο για επικοινωνία.", "You will recieve code in sms message": "Θα λάβετε SMS με κωδικό", "Please enter": "Εισάγετε", "We need your phone number to contact you and to help you receive orders.": "Χρειαζόμαστε το τηλέφωνο για λήψη παραγγελιών.", "The full name on your criminal record does not match the one on your driver's license. Please verify and provide the correct documents.": "Το όνομα στο Ποινικό Μητρώο δεν ταιριάζει με το δίπλωμα.", "The national number on your driver's license does not match the one on your ID document. Please verify and provide the correct documents.": "Ο αριθμός ταυτότητας δεν ταιριάζει.", "Capture an Image of Your Criminal Record": "Φωτογραφία Ποινικού Μητρώου", "IssueDate": "Ημ. Έκδοσης", "Capture an Image of Your car license front": "Φωτογραφία Άδειας Κυκλοφορίας (Μπροστά)", "Capture an Image of Your ID Document front": "Φωτογραφία Ταυτότητας (Μπροστά)", "NationalID": "Αριθμός Ταυτότητας", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "Μοιραστείτε και κερδίστε.", "FullName": "Ονοματεπώνυμο", "No invitation found yet!": "Καμία πρόσκληση!", "InspectionResult": "Αποτέλεσμα Ελέγχου", "Criminal Record": "Ποινικό Μητρώο", "The email or phone number is already registered.": "Το email ή τηλέφωνο χρησιμοποιείται.", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "Ανεβάστε δίπλωμα, ταυτότητα, άδεια κυκλοφορίας. Έλεγχος σε 2-3 λεπτά.", "Documents check": "Έλεγχος Εγγράφων", "Driver's License": "Δίπλωμα Οδήγησης", "for your first registration!": "για την πρώτη εγγραφή!", "Get it Now!": "Πάρτε το!", "before": "πριν", "Code not approved": "Κωδικός μη αποδεκτός", "3000 LE": "30 €", "Do you have an invitation code from another driver?": "Έχετε κωδικό πρόσκλησης;", "Paste the code here": "Επικόλληση κωδικού", "No, I don't have a code": "Όχι", "Code approved": "Κωδικός εγκρίθηκε", "Install our app:": "Εγκατάσταση:", "Invite another driver and both get a gift after he completes 100 trips!": "Προσκαλέστε οδηγό και κερδίστε δώρο μετά από 100 διαδρομές!", "Invite": "Πρόσκληση", "Are you sure?": "Είστε σίγουροι;", "This will delete all recorded files from your device.": "Διαγραφή όλων των αρχείων.", "Select a file": "Επιλογή αρχείου", "Select a File": "Επιλογή Αρχείου", "Delete": "Διαγραφή", "attach audio of complain": "επισύναψη ήχου καταγγελίας", "Phone Number Check": "Έλεγχος Τηλεφώνου", "Drivers received orders": "Οι οδηγοί έλαβαν αιτήματα", "No audio files recorded.": "Κανένα ηχητικό αρχείο.", "This is for delivery or a motorcycle.": "Για διανομή ή μοτοσυκλέτα.", "Intaleq Reminder": "Υπενθύμιση Intaleq", "It's time to check the Intaleq app!": "Ώρα να ελέγξετε το Intaleq!", "you must insert token code": "εισάγετε κωδικό token", "Something went wrong. Please try again.": "Κάτι πήγε στραβά.", "Trip Details": "Λεπτομέρειες", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "Δεν υπάρχουν λεπτομέρειες.", "Submit Your Complaint": "Υποβολή", "Status": "Κατάσταση", "Choose from contact": "Επιλογή από επαφές", "attach correct audio": "σωστός ήχος", "be sure": "βεβαιωθείτε", "Audio uploaded successfully.": "Επιτυχής μεταφόρτωση.", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "Ιδανικό για νέα μοντέλα και ελευθερία διαδρομής", "Share this code with your friends and earn rewards when they use it!": "Μοιραστείτε και κερδίστε!", "Enter phone": "Εισαγωγή τηλεφώνου", "complete, you can claim your gift": "ολοκληρώθηκε, λάβετε το δώρο", "When": "Όταν", "Enter driver's phone": "Τηλέφωνο οδηγού", "Send Invite": "Αποστολή Πρόσκλησης", "Show Invitations": "Προβολή Προσκλήσεων", "License Type": "Τύπος Διπλώματος", "National Number": "Αριθμός Ταυτότητας", "Name (Arabic)": "Όνομα (Αραβικά)", "Name (English)": "Όνομα (Αγγλικά)", "Address": "Διεύθυνση", "Issue Date": "Ημ. Έκδοσης", "Expiry Date": "Ημ. Λήξης", "License Categories": "Κατηγορίες", "driver_license": "δίπλωμα_οδήγησης", "Capture an Image of Your Driver License": "Φωτογραφία Διπλώματος", "ID Documents Back": "Ταυτότητα (Πίσω)", "National ID": "Ταυτότητα", "Occupation": "Επάγγελμα", "Religion": "Θρήσκευμα", "Full Name (Marital)": "Ονοματεπώνυμο", "Expiration Date": "Ημερομηνία Λήξης", "Capture an Image of Your ID Document Back": "Φωτογραφία Ταυτότητας (Πίσω)", "ID Documents Front": "Ταυτότητα (Μπροστά)", "First Name": "Όνομα", "CardID": "Αρ. Κάρτας", "Vehicle Details Front": "Στοιχεία Οχήματος (Μπροστά)", "Plate Number": "Αριθμός Πινακίδας", "Owner Name": "Ιδιοκτήτης", "Vehicle Details Back": "Στοιχεία Οχήματος (Πίσω)", "Make": "Μάρκα", "Model": "Μοντέλο", "Year": "Έτος", "Chassis": "Αριθμός Πλαισίου", "Color": "Χρώμα", "Displacement": "Κυβισμός", "Fuel": "Καύσιμο", "Tax Expiry Date": "Λήξη Τελών", "Inspection Date": "Ημ. ΚΤΕΟ", "Capture an Image of Your car license back": "Φωτογραφία Άδειας (Πίσω)", "Capture an Image of Your Driver's License": "Φωτογραφία Διπλώματος", "Sign in with Google for easier email and name entry": "Είσοδος με Google", "You will choose allow all the time to be ready receive orders": "Επιλέξτε 'Πάντα' για λήψη παραγγελιών", "Get to your destination quickly and easily.": "Φτάστε γρήγορα στον προορισμό.", "Enjoy a safe and comfortable ride.": "Απολαύστε ασφαλή διαδρομή.", "Choose Language": "Επιλογή Γλώσσας", "Pay with Wallet": "Πληρωμή με Πορτοφόλι", "Invalid MPIN": "Άκυρο MPIN", "Invalid OTP": "Άκυρο OTP", "Enter your email address": "Εισάγετε email", "Please enter Your Email.": "Παρακαλώ εισάγετε Email.", "Enter your phone number": "Εισάγετε τηλέφωνο", "Please enter your phone number.": "Παρακαλώ εισάγετε τηλέφωνο.", "Please enter Your Password.": "Εισάγετε Κωδικό.", "if you dont have account": "αν δεν έχετε λογαριασμό", "Register": "Εγγραφή", "Accept Ride's Terms & Review Privacy Notice": "Αποδοχή Όρων", "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "Επιλέγοντας 'Συμφωνώ', αποδέχομαι τους Όρους. Είμαι άνω των 18.", "First name": "Όνομα", "Enter your first name": "Εισάγετε όνομα", "Please enter your first name.": "Παρακαλώ εισάγετε όνομα.", "Last name": "Επώνυμο", "Enter your last name": "Εισάγετε επώνυμο", "Please enter your last name.": "Παρακαλώ εισάγετε επώνυμο.", "City": "Πόλη", "Please enter your City.": "Εισάγετε Πόλη.", "Verify Email": "Επαλήθευση Email", "We sent 5 digit to your Email provided": "Στείλαμε 5ψήφιο κωδικό", "5 digit": "5 ψηφία", "Send Verification Code": "Αποστολή Κωδικού", "Your Ride Duration is ": "Διάρκεια: ", "You will be thier in": "Θα είστε εκεί σε", "You trip distance is": "Απόσταση: ", "Fee is": "Κόστος: ", "From : ": "Από: ", "To : ": "Προς: ", "Add Promo": "Προσθήκη Προσφοράς", "Confirm Selection": "Επιβεβαίωση", "distance is": "απόσταση είναι", "Privacy Policy": "Πολιτική Απορρήτου", "Intaleq LLC": "Intaleq LLC", "Syria's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "Πρωτοποριακή υπηρεσία στην Ελλάδα.", "Intaleq is the first ride-sharing app in Syria, designed to connect you with the nearest drivers for a quick and convenient travel experience.": "Το Intaleq συνδέει με τους κοντινότερους οδηγούς.", "Why Choose Intaleq?": "Γιατί Intaleq;", "Closest to You": "Δίπλα σας", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "Γρηγορότερη εξυπηρέτηση.", "Uncompromising Security": "Ασφάλεια", "Lady Captains Available": "Γυναίκες Οδηγοί", "Recorded Trips (Voice & AI Analysis)": "Καταγεγραμμένες Διαδρομές", "Fastest Complaint Response": "Άμεση Ανταπόκριση", "Our dedicated customer service team ensures swift resolution of any issues.": "Επίλυση θεμάτων άμεσα.", "Affordable for Everyone": "Οικονομικό", "Frequently Asked Questions": "Συχνές Ερωτήσεις", "Getting Started": "Ξεκινώντας", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "Ανοίξτε την εφαρμογή, εισάγετε προορισμό, πατήστε Αίτημα.", "Vehicle Options": "Επιλογές Οχήματος", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "Economy, Comfort, Luxury.", "Payments": "Πληρωμές", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "Μετρητά ή Κάρτα.", "Ride Management": "Διαχείριση", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "Ναι, μπορείτε να ακυρώσετε (ενδέχεται να υπάρξει χρέωση).", "For Drivers": "Για Οδηγούς", "Driver Registration": "Εγγραφή", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "Επικοινωνήστε για εγγραφή.", "Visit Website/Contact Support": "Ιστοσελίδα/Υποστήριξη", "Close": "Κλείσιμο", "We are searching for the nearest driver": "Αναζήτηση οδηγού", "Communication": "Επικοινωνία", "How do I communicate with the other party (passenger/driver)?": "Πώς επικοινωνώ;", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "Μέσω chat.", "Safety & Security": "Ασφάλεια", "What safety measures does Intaleq offer?": "Μέτρα ασφαλείας;", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "Επαλήθευση, παρακολούθηση, επαφές έκτακτης ανάγκης.", "Enjoy competitive prices across all trip options, making travel accessible.": "Ανταγωνιστικές τιμές.", "Variety of Trip Choices": "Ποικιλία", "Choose the trip option that perfectly suits your needs and preferences.": "Επιλέξτε ό,τι σας ταιριάζει.", "Your Choice, Our Priority": "Προτεραιότητά μας", "Because we are near, you have the flexibility to choose the ride that works best for you.": "Ευελιξία επιλογής.", "duration is": "διάρκεια είναι", "Setting": "Ρύθμιση", "Find answers to common questions": "Απαντήσεις", "I don't need a ride anymore": "Δεν χρειάζομαι διαδρομή", "I was just trying the application": "Δοκίμαζα την εφαρμογή", "No driver accepted my request": "Κανείς δεν αποδέχτηκε", "I added the wrong pick-up/drop-off location": "Λάθος τοποθεσία", "I don't have a reason": "Κανένας λόγος", "Can we know why you want to cancel Ride ?": "Γιατί ακυρώνετε;", "Cancel Ride": "Ακύρωση", "Add Payment Method": "Προσθήκη Τρόπου Πληρωμής", "Ride Wallet": "Πορτοφόλι", "Payment Method": "Τρόπος Πληρωμής", "Type here Place": "Πληκτρολογήστε μέρος", "Are You sure to ride to": "Σίγουρα προς", "Confirm": "Επιβεβαίωση", "You are Delete": "Διαγραφή", "Deleted": "Διαγράφηκε", "You Dont Have Any places yet !": "Κανένα μέρος ακόμα!", "From : Current Location": "Από: Τρέχουσα Τοποθεσία", "My Cared": "Οι Κάρτες Μου", "Add Card": "Προσθήκη Κάρτας", "Add Credit Card": "Προσθήκη Πιστωτικής", "Please enter the cardholder name": "Όνομα κατόχου", "Please enter the expiry date": "Ημερομηνία λήξης", "Please enter the CVV code": "Κωδικός CVV", "Go To Favorite Places": "Μετάβαση στα Αγαπημένα", "Go to this Target": "Μετάβαση στον Προορισμό", "My Profile": "Το Προφίλ μου", "Are you want to go to this site": "Θέλετε να πάτε εδώ;", "MyLocation": "Η Τοποθεσία Μου", "my location": "τοποθεσία μου", "Target": "Στόχος", "You Should choose rate figure": "Επιλέξτε βαθμολογία", "Login Captin": "Είσοδος Οδηγού", "Register Captin": "Εγγραφή Οδηγού", "Send Verfication Code": "Αποστολή Κωδικού", "KM": "Χλμ", "End Ride": "Τέλος Διαδρομής", "Minute": "Λεπτό", "Go to passenger Location now": "Πηγαίνετε στον Επιβάτη", "Duration of the Ride is ": "Διάρκεια: ", "Distance of the Ride is ": "Απόσταση: ", "Name of the Passenger is ": "Όνομα Επιβάτη: ", "Hello this is Captain": "Γεια σας, ο Οδηγός", "Start the Ride": "Έναρξη", "Please Wait If passenger want To Cancel!": "Περιμένετε μήπως ακυρώσει ο επιβάτης!", "Total Duration:": "Συνολική Διάρκεια:", "Active Duration:": "Ενεργή Διάρκεια:", "Waiting for Captin ...": "Αναμονή Οδηγού...", "Age is ": "Ηλικία: ", "Rating is ": "Βαθμολογία: ", " to arrive you.": " για να φτάσει.", "Tariff": "Τιμοκατάλογος", "Settings": "Ρυθμίσεις", "Feed Back": "Σχόλια", "Please enter a valid 16-digit card number": "Εισάγετε έγκυρο αριθμό κάρτας", "Add Phone": "Προσθήκη Τηλεφώνου", "Please enter a phone number": "Εισάγετε τηλέφωνο", "You dont Add Emergency Phone Yet!": "Δεν προσθέσατε τηλέφωνο έκτακτης ανάγκης!", "You will arrive to your destination after ": "Άφιξη σε ", "You can cancel Ride now": "Μπορείτε να ακυρώσετε", "You Can cancel Ride After Captain did not come in the time": "Ακύρωση αν ο οδηγός αργήσει", "If you in Car Now. Press Start The Ride": "Αν είστε στο όχημα, πατήστε Έναρξη", "You Dont Have Any amount in": "Δεν έχετε υπόλοιπο στο", "Wallet!": "Πορτοφόλι!", "You Have": "Έχετε", "Save Credit Card": "Αποθήκευση Κάρτας", "Show Promos": "Εμφάνιση Προσφορών", "10 and get 4% discount": "10 και κερδίστε 4% έκπτωση", "20 and get 6% discount": "20 και κερδίστε 6% έκπτωση", "40 and get 8% discount": "40 και κερδίστε 8% έκπτωση", "100 and get 11% discount": "100 και κερδίστε 11% έκπτωση", "Pay with Your PayPal": "Πληρωμή με PayPal", "You will choose one of above !": "Επιλέξτε ένα!", "Edit Profile": "Επεξεργασία", "Copy this Promo to use it in your Ride!": "Αντιγράψτε τον κωδικό!", "To change some Settings": "Αλλαγή Ρυθμίσεων", "Order Request Page": "Σελίδα Αιτήματος", "Rouats of Trip": "Διαδρομές", "Passenger Name is ": "Όνομα Επιβάτη: ", "Total From Passenger is ": "Σύνολο από Επιβάτη: ", "Duration To Passenger is ": "Διάρκεια προς Επιβάτη: ", "Distance To Passenger is ": "Απόσταση προς Επιβάτη: ", "Total For You is ": "Σύνολο για Εσάς: ", "Distance is ": "Απόσταση: ", " KM": " Χλμ", "Duration of Trip is ": "Διάρκεια: ", " Minutes": " Λεπτά", "Apply Order": "Αποδοχή", "Refuse Order": "Απόρριψη", "Rate Captain": "Βαθμολογία Οδηγού", "Enter your Note": "Σχόλιο", "Type something...": "Γράψτε κάτι...", "Submit rating": "Υποβολή", "Rate Passenger": "Βαθμολογία Επιβάτη", "Ride Summary": "Σύνοψη", "welcome_message": "Καλώς ήρθατε στο Intaleq!", "app_description": "Ασφαλής μετακίνηση.", "get_to_destination": "Φτάστε στον προορισμό.", "get_a_ride": "Βρείτε διαδρομή.", "safe_and_comfortable": "Ασφάλεια και άνεση.", "committed_to_safety": "Δέσμευση στην ασφάλεια.", "your ride is Accepted": "Η διαδρομή έγινε δεκτή", "Driver is waiting at pickup.": "Ο οδηγός περιμένει.", "Driver is on the way": "Ο οδηγός έρχεται", "Contact Options": "Επικοινωνία", "Send a custom message": "Προσαρμοσμένο μήνυμα", "Type your message": "Γράψτε μήνυμα", "I will go now": "Πηγαίνω τώρα", "You Have Tips": "Έχετε φιλοδώρημα", " tips\nTotal is": " φιλοδώρημα\nΣύνολο", "Your fee is ": "Η χρέωση είναι ", "Do you want to pay Tips for this Driver": "Θέλετε να δώσετε φιλοδώρημα;", "Tip is ": "Φιλοδώρημα: ", "Are you want to wait drivers to accept your order": "Θέλετε να περιμένετε;", "This price is fixed even if the route changes for the driver.": "Σταθερή τιμή.", "The price may increase if the route changes.": "Η τιμή μπορεί να αυξηθεί.", "The captain is responsible for the route.": "Ο οδηγός είναι υπεύθυνος για τη διαδρομή.", "We are search for nearst driver": "Αναζήτηση οδηγού", "Your order is being prepared": "Προετοιμασία", "The drivers are reviewing your request": "Εξέταση αιτήματος", "Your order sent to drivers": "Απεστάλη στους οδηγούς", "You can call or record audio of this trip": "Μπορείτε να καλέσετε ή να ηχογραφήσετε", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "Η διαδρομή ξεκίνησε! Μοιραστείτε την ή ηχογραφήστε.", "Camera Access Denied.": "Άρνηση Πρόσβασης Κάμερας.", "Open Settings": "Ρυθμίσεις", "GPS Required Allow !.": "Απαιτείται GPS!", "Your Account is Deleted": "Ο Λογαριασμός Διαγράφηκε", "Are you sure to delete your account?": "Σίγουρα διαγραφή;", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "Τα δεδομένα θα διαγραφούν σε 2 εβδομάδες.", "Enter Your First Name": "Εισάγετε Όνομα", "Are you Sure to LogOut?": "Σίγουρα Αποσύνδεση;", "Email Wrong": "Λάθος Email", "Email you inserted is Wrong.": "Το email είναι λάθος.", "You have finished all times ": "Τέλος προσπαθειών", "if you want help you can email us here": "Στείλτε μας email για βοήθεια", "Thanks": "Ευχαριστώ", "Email Us": "Στείλτε Email", "I cant register in your app in face detection ": "Πρόβλημα με ανίχνευση προσώπου", "Hi": "Γεια", "No face detected": "Δεν ανιχνεύτηκε πρόσωπο", "Image detecting result is ": "Αποτέλεσμα: ", "from 3 times Take Attention": "από 3 φορές, Προσοχή", "Be sure for take accurate images please\nYou have": "Βγάλτε καθαρές φωτογραφίες\nΈχετε", "image verified": "επαληθεύτηκε", "Next": "Επόμενο", "There is no help Question here": "Δεν υπάρχει ερώτηση βοήθειας", "You dont have Points": "Δεν έχετε Πόντους", "You Are Stopped For this Day !": "Αποκλεισμός για σήμερα!", "You must be charge your Account": "Φορτίστε τον λογαριασμό", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "Απορρίψατε 3 διαδρομές.\nΤα λέμε αύριο!", "Recharge my Account": "Φόρτιση", "Ok , See you Tomorrow": "ΟΚ, τα λέμε αύριο", "You are Stopped": "Αποκλεισμός", "Connected": "Συνδέθηκε", "Not Connected": "Δεν συνδέθηκε", "Your are far from passenger location": "Είστε μακριά από τον επιβάτη", "go to your passenger location before\nPassenger cancel trip": "Πηγαίνετε στον επιβάτη πριν ακυρώσει", "You will get cost of your work for this trip": "Θα πληρωθείτε για τη διαδρομή", " in your wallet": " στο πορτοφόλι", "you gain": "κερδίσατε", "Order Cancelled by Passenger": "Ακύρωση από Επιβάτη", "Feedback data saved successfully": "Αποθηκεύτηκε", "No Promo for today .": "Καμία Προσφορά σήμερα.", "Select your destination": "Επιλογή προορισμού", "Search for your Start point": "Σημείο εκκίνησης", "Search for waypoint": "Στάση", "Current Location": "Τρέχουσα Τοποθεσία", "Add Location 1": "Προσθήκη Τοποθεσίας 1", "You must Verify email !.": "Επαληθεύστε το email!", "Cropper": "Περικοπή", "Saved Sucssefully": "Αποθηκεύτηκε Επιτυχώς", "Select Date": "Επιλογή Ημερομηνίας", "Birth Date": "Ημ. Γέννησης", "Ok": "ΟΚ", "the 500 points equal 30 JOD": "500 πόντοι ισούνται με 30 €", "the 500 points equal 30 JOD for you \nSo go and gain your money": "500 πόντοι = 30 €\nΚερδίστε χρήματα", "token updated": "token ενημερώθηκε", "Add Location 2": "Προσθήκη Τοποθεσίας 2", "Add Location 3": "Προσθήκη Τοποθεσίας 3", "Add Location 4": "Προσθήκη Τοποθεσίας 4", "Waiting for your location": "Αναμονή τοποθεσίας", "Search for your destination": "Αναζήτηση προορισμού", "Hi! This is": "Γεια! Είμαι", " I am using": " χρησιμοποιώ", " to ride with": " για διαδρομή με", " as the driver.": " ως οδηγό.", "is driving a ": "οδηγεί ", " with license plate ": " με πινακίδα ", " I am currently located at ": " Βρίσκομαι στο ", "Please go to Car now ": "Πηγαίνετε στο όχημα τώρα ", "You will receive a code in WhatsApp Messenger": "Θα λάβετε κωδικό στο WhatsApp", "If you need assistance, contact us": "Επικοινωνήστε για βοήθεια", "Promo Ended": "Η Προσφορά Έληξε", "Enter the promo code and get": "Εισάγετε κωδικό και κερδίστε", "DISCOUNT": "ΕΚΠΤΩΣΗ", "No wallet record found": "Δεν βρέθηκε πορτοφόλι", "for": "για", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "Το Intaleq είναι η ασφαλέστερη εφαρμογή. Χαμηλή προμήθεια 8%. Ασφάλεια και συντήρηση.", "You can contact us during working hours from 12:00 - 19:00.": "Επικοινωνήστε 12:00 - 19:00.", "Choose a contact option": "Επιλογή επικοινωνίας", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "Ώρες 12:00 - 19:00.\nΣτείλτε WhatsApp ή email.", "Promo code copied to clipboard!": "Αντιγράφηκε!", "Copy Code": "Αντιγραφή", "Your invite code was successfully applied!": "Εφαρμόστηκε επιτυχώς!", "Payment Options": "Επιλογές Πληρωμής", "wait 1 minute to receive message": "περιμένετε 1 λεπτό", "You have copied the promo code.": "Αντιγράψατε τον κωδικό.", "Select Payment Amount": "Επιλογή Ποσού", "The promotion period has ended.": "Η προσφορά έληξε.", "Promo Code Accepted": "Κωδικός Δεκτός", "Tap on the promo code to copy it!": "Πατήστε για αντιγραφή!", "Lowest Price Achieved": "Χαμηλότερη Τιμή", "Cannot apply further discounts.": "Δεν υπάρχουν άλλες εκπτώσεις.", "Promo Already Used": "Χρησιμοποιήθηκε ήδη", "Invitation Used": "Πρόσκληση Χρησιμοποιήθηκε", "You have already used this promo code.": "Χρησιμοποιήσατε τον κωδικό.", "Insert Your Promo Code": "Εισαγωγή Κωδικού", "Enter promo code here": "Εισάγετε κωδικό εδώ", "Please enter a valid promo code": "Εισάγετε έγκυρο κωδικό", "Awfar Car": "Οικονομικό Όχημα", "Old and affordable, perfect for budget rides.": "Οικονομικό και προσιτό.", " If you need to reach me, please contact the driver directly at": " Επικοινωνήστε με τον οδηγό στο", "No Car or Driver Found in your area.": "Δεν βρέθηκε όχημα ή οδηγός.", "Please Try anther time ": "Προσπαθήστε ξανά ", "There no Driver Aplly your order sorry for that ": "Κανείς δεν δέχτηκε, συγγνώμη ", "Trip Cancelled": "Διαδρομή Ακυρώθηκε", "The Driver Will be in your location soon .": "Ο Οδηγός φτάνει σύντομα.", "The distance less than 500 meter.": "Απόσταση κάτω από 500μ.", "Promo End !": "Τέλος Προσφοράς!", "There is no notification yet": "Καμία ειδοποίηση", "Use Touch ID or Face ID to confirm payment": "Χρήση Touch ID ή Face ID", "Contact us for any questions on your order.": "Επικοινωνήστε για ερωτήσεις.", "Pyament Cancelled .": "Πληρωμή Ακυρώθηκε.", "type here": "γράψτε εδώ", "Scan Driver License": "Σάρωση Διπλώματος", "Please put your licence in these border": "Τοποθετήστε το δίπλωμα στο πλαίσιο", "Camera not initialized yet": "Η κάμερα δεν άνοιξε", "Take Image": "Λήψη Φωτογραφίας", "AI Page": "Σελίδα AI", "Take Picture Of ID Card": "Φωτογραφία Ταυτότητας", "Take Picture Of Driver License Card": "Φωτογραφία Διπλώματος", "We are process picture please wait ": "Επεξεργασία εικόνας, περιμένετε ", "There is no data yet.": "Δεν υπάρχουν δεδομένα.", "Name :": "Όνομα :", "Drivers License Class: ": "Κατηγορία Διπλώματος: ", "Document Number: ": "Αριθμός Εγγράφου: ", "Address: ": "Διεύθυνση: ", "Height: ": "Ύψος: ", "Expiry Date: ": "Λήξη: ", "Date of Birth: ": "Ημ. Γέννησης: ", "You can't continue with us .\nYou should renew Driver license": "Πρέπει να ανανεώσετε το δίπλωμα", "Detect Your Face ": "Ανίχνευση Προσώπου ", "Go to next step\nscan Car License.": "Επόμενο βήμα\nσάρωση Άδειας.", "Name in arabic": "Όνομα (Τοπικό)", "Drivers License Class": "Κατηγορία", "Selected Date": "Επιλεγμένη Ημερομηνία", "Select Time": "Επιλογή Ώρας", "Selected Time": "Επιλεγμένη Ώρα", "Selected Date and Time": "Επιλογή", "Lets check Car license ": "Έλεγχος Άδειας ", "Car": "Όχημα", "Plate": "Πινακίδα", "Rides": "Διαδρομές", "Selected driver": "Επιλεγμένος οδηγός", "Lets check License Back Face": "Έλεγχος Πίσω Όψης", "Car License Card": "Άδεια Κυκλοφορίας", "No image selected yet": "Δεν επιλέχθηκε εικόνα", "Made :": "Κατασκευαστής :", "model :": "Μοντέλο :", "VIN :": "Πλαίσιο :", "year :": "Έτος :", "ُExpire Date": "Ημ. Λήξης", "Login Driver": "Είσοδος Οδηγού", "Password must br at least 6 character.": "Τουλάχιστον 6 χαρακτήρες.", "if you don't have account": "αν δεν έχετε λογαριασμό", "Here recorded trips audio": "Ηχογραφήσεις διαδρομών", "Register as Driver": "Εγγραφή ως Οδηγός", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "Επιλέγοντας \"Συμφωνώ\", αποδέχομαι τους Όρους Χρήσης και ", "Log Out Page": "Αποσύνδεση", "Log Off": "Αποσύνδεση", "Register Driver": "Εγγραφή Οδηγού", "Verify Email For Driver": "Επαλήθευση Email Οδηγού", "Admin DashBoard": "Πίνακας Ελέγχου", "Your name": "Το όνομά σας", "your ride is applied": "η διαδρομή καταχωρήθηκε", "H and": "H και", "JOD": "€", "m": "λ", "We search nearst Driver to you": "Αναζήτηση κοντινού οδηγού", "please wait till driver accept your order": "περιμένετε την αποδοχή", "No accepted orders? Try raising your trip fee to attract riders.": "Αυξήστε την προσφορά σας.", "You should select one": "Επιλέξτε ένα", "The driver accept your order for": "Ο οδηγός δέχτηκε για", "The driver on your way": "Ο οδηγός έρχεται", "Total price from ": "Συνολική τιμή από ", "Order Details Intaleq": "Λεπτομέρειες", "Selected file:": "Επιλεγμένο αρχείο:", "Your trip cost is": "Κόστος διαδρομής", "this will delete all files from your device": "διαγραφή όλων των αρχείων", "Exclusive offers and discounts always with the Intaleq app": "Αποκλειστικές προσφορές", "Submit Question": "Υποβολή Ερώτησης", "Please enter your Question.": "Εισάγετε Ερώτηση.", "Help Details": "Λεπτομέρειες Βοήθειας", "No trip yet found": "Δεν βρέθηκε διαδρομή", "No Response yet.": "Καμία απάντηση.", " You Earn today is ": " Κέρδος σήμερα: ", " You Have in": " Έχετε στο", "Total points is ": "Σύνολο πόντων: ", "Total Connection Duration:": "Διάρκεια Σύνδεσης:", "Passenger name : ": "Όνομα Επιβάτη: ", "Cost Of Trip IS ": "Κόστος Διαδρομής: ", "Arrival time": "Ώρα άφιξης", "arrival time to reach your point": "ώρα άφιξης στο σημείο", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Τιμή βάσει χρόνου και απόστασης.", "Hello this is Driver": "Γεια σας, ο Οδηγός", "Is the Passenger in your Car ?": "Είναι ο Επιβάτης στο Όχημα;", "Please wait for the passenger to enter the car before starting the trip.": "Περιμένετε να μπει ο επιβάτης.", "No ,still Waiting.": "Όχι, αναμονή.", "I arrive you": "Έφτασα", "I Arrive your site": "Έφτασα στο σημείο", "You are not in near to passenger location": "Δεν είστε κοντά στον επιβάτη", "please go to picker location exactly": "πηγαίνετε ακριβώς στο σημείο παραλαβής", "You Can Cancel Trip And get Cost of Trip From": "Ακύρωση και λήψη κόστους από", "Are you sure to cancel?": "Σίγουρα ακύρωση;", "Insert Emergincy Number": "Εισαγωγή SOS Αριθμού", "Best choice for comfort car and flexible route and stops point": "Άνετο αμάξι, ευέλικτη διαδρομή", "Insert": "Εισαγωγή", "This is for scooter or a motorcycle.": "Για σκούτερ ή μοτοσυκλέτα.", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "Απευθείας διαδρομή, σταθερή τιμή.", "You can decline a request without any cost": "Απόρριψη χωρίς χρέωση", "Perfect for adventure seekers who want to experience something new and exciting": "Για όσους ψάχνουν περιπέτεια", "My current location is:": "Η τοποθεσία μου:", "and I have a trip on": "και έχω διαδρομή στο", "App with Passenger": "Εφαρμογή με Επιβάτη", "You will be pay the cost to driver or we will get it from you on next trip": "Πληρωμή στον οδηγό ή στην επόμενη διαδρομή", "Trip has Steps": "Διαδρομή με Στάσεις", "Distance from Passenger to destination is ": "Απόσταση Επιβάτη από προορισμό: ", "price is": "τιμή είναι", "This ride type does not allow changes to the destination or additional stops": "Χωρίς αλλαγές/στάσεις", "This price may be changed": "Η τιμή μπορεί να αλλάξει", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "Χωρίς SIM; Καλέστε μέσω εφαρμογής.", "This ride type allows changes, but the price may increase": "Αλλαγές επιτρέπονται, η τιμή ίσως αυξηθεί", "Select one message": "Επιλογή μηνύματος", "I'm waiting for you": "Σας περιμένω", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "Υπερβολική ταχύτητα (>100 χλμ/ώ). Παρακαλώ επιβραδύνετε.", "Warning: Intaleqing detected!": "Προειδοποίηση: Υπερβολική ταχύτητα!", "Please help! Contact me as soon as possible.": "Βοήθεια! Επικοινωνήστε άμεσα.", "Share Trip Details": "Κοινοποίηση Λεπτομερειών", "Car Plate is ": "Πινακίδα: ", "the 300 points equal 300 L.E for you \nSo go and gain your money": "300 πόντοι = 300 €\nΚερδίστε χρήματα", "the 300 points equal 300 L.E": "300 πόντοι = 300 €", "The payment was not approved. Please try again.": "Η πληρωμή δεν εγκρίθηκε. Προσπαθήστε ξανά.", "Payment Failed": "Αποτυχία Πληρωμής", "This is a scheduled notification.": "Προγραμματισμένη ειδοποίηση.", "An error occurred during the payment process.": "Σφάλμα πληρωμής.", "The payment was approved.": "Εγκρίθηκε.", "Payment Successful": "Επιτυχής Πληρωμή", "No ride found yet": "Δεν βρέθηκε διαδρομή", "Accept Order": "Αποδοχή", "Bottom Bar Example": "Παράδειγμα", "Driver phone": "Τηλέφωνο Οδηγού", "Statistics": "Στατιστικά", "Origin": "Αφετηρία", "Destination": "Προορισμός", "Driver Name": "Όνομα Οδηγού", "Driver Car Plate": "Πινακίδα Οδηγού", "Available for rides": "Διαθέσιμος", "Scan Id": "Σάρωση Ταυτότητας", "Camera not initilaized yet": "Κάμερα μη έτοιμη", "Scan ID MklGoogle": "Σάρωση Ταυτότητας", "Language": "Γλώσσα", "Jordan": "Ιορδανία", "USA": "ΗΠΑ", "Egypt": "Αίγυπτος", "Turkey": "Τουρκία", "Saudi Arabia": "Σαουδική Αραβία", "Qatar": "Κατάρ", "Bahrain": "Μπαχρέιν", "Kuwait": "Κουβέιτ", "But you have a negative salary of": "Αρνητικό υπόλοιπο:", "Promo Code": "Κωδικός Προσφοράς", "Your trip distance is": "Απόσταση διαδρομής:", "Enter promo code": "Εισάγετε κωδικό", "You have promo!": "Έχετε προσφορά!", "Cost Duration": "Κόστος Διάρκειας", "Duration is": "Διάρκεια:", "Leave": "Αποχώρηση", "Join": "Συμμετοχή", "Heading your way now. Please be ready.": "Έρχομαι. Να είστε έτοιμοι.", "Approaching your area. Should be there in 3 minutes.": "Πλησιάζω. Εκεί σε 3 λεπτά.", "There's heavy traffic here. Can you suggest an alternate pickup point?": "Κίνηση. Άλλο σημείο παραλαβής;", "This ride is already taken by another driver.": "Η διαδρομή αναλήφθηκε.", "You Should be select reason.": "Επιλέξτε λόγο.", "Waiting for Driver ...": "Αναμονή Οδηγού...", "Latest Recent Trip": "Τελευταία Διαδρομή", "from your list": "από τη λίστα", "Do you want to change Work location": "Αλλαγή τοποθεσίας Εργασίας;", "Do you want to change Home location": "Αλλαγή τοποθεσίας Σπιτιού;", "We Are Sorry That we dont have cars in your Location!": "Λυπούμαστε, κανένα όχημα στην περιοχή!", "Choose from Map": "Επιλογή από Χάρτη", "Pick your ride location on the map - Tap to confirm": "Επιλέξτε σημείο στον χάρτη - Πατήστε για επιβεβαίωση", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "Το Intaleq είναι ασφαλές και αξιόπιστο.", "With Intaleq, you can get a ride to your destination in minutes.": "Βρείτε διαδρομή σε λεπτά.", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "Δέσμευση στην ασφάλεια, ελεγμένοι οδηγοί.", "Pick from map": "Επιλογή από χάρτη", "No Car in your site. Sorry!": "Κανένα όχημα. Συγγνώμη!", "Nearest Car for you about ": "Κοντινότερο όχημα σε περίπου ", "From :": "Από:", "Get Details of Trip": "Λεπτομέρειες", "If you want add stop click here": "Για προσθήκη στάσης πατήστε εδώ", "Where you want go ": "Πού θέλετε να πάτε ", "My Card": "Η Κάρτα Μου", "Start Record": "Έναρξη Εγγραφής", "History of Trip": "Ιστορικό", "Helping Center": "Κέντρο Βοήθειας", "Record saved": "Αποθηκεύτηκε", "Trips recorded": "Καταγεγραμμένες", "Select Your Country": "Επιλογή Χώρας", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "Επιλέξτε χώρα για ακριβείς πληροφορίες.", "Are you sure to delete recorded files": "Διαγραφή αρχείων;", "Select recorded trip": "Επιλογή διαδρομής", "Card Number": "Αριθμός Κάρτας", "Hi, Where to ": "Γεια, Πού πάτε ", "Pick your destination from Map": "Προορισμός από Χάρτη", "Add Stops": "Προσθήκη Στάσεων", "Get Direction": "Οδηγίες", "Add Location": "Προσθήκη Τοποθεσίας", "Switch Rider": "Αλλαγή Επιβάτη", "You will arrive to your destination after timer end.": "Άφιξη μετά το πέρας του χρόνου.", "You can cancel trip": "Μπορείτε να ακυρώσετε", "The driver waitting you in picked location .": "Ο οδηγός περιμένει.", "Pay with Your": "Πληρωμή με", "Pay with Credit Card": "Πληρωμή με Κάρτα", "Show Promos to Charge": "Προσφορές Φόρτισης", "Point": "Πόντος", "How many hours would you like to wait?": "Πόσες ώρες αναμονής;", "Driver Wallet": "Πορτοφόλι Οδηγού", "Choose between those Type Cars": "Επιλογή Τύπου Οχήματος", "hour": "ώρα", "Select Waiting Hours": "Ώρες Αναμονής", "Total Points is": "Σύνολο Πόντων", "You will receive a code in SMS message": "Θα λάβετε SMS", "Done": "Τέλος", "Total Budget from trips is ": "Σύνολο εσόδων: ", "Total Amount:": "Συνολικό Ποσό:", "Total Budget from trips by\nCredit card is ": "Σύνολο εσόδων (Κάρτα): ", "This amount for all trip I get from Passengers": "Ποσό από Επιβάτες", "Pay from my budget": "Πληρωμή από υπόλοιπο", "This amount for all trip I get from Passengers and Collected For me in": "Ποσό που εισπράχθηκε", "You can buy points from your budget": "Αγορά πόντων από υπόλοιπο", "insert amount": "εισαγωγή ποσού", "You can buy Points to let you online\nby this list below": "Αγορά Πόντων για online", "Create Wallet to receive your money": "Δημιουργία Πορτοφολιού", "Enter your feedback here": "Εισάγετε σχόλια", "Please enter your feedback.": "Παρακαλώ εισάγετε σχόλια.", "Feedback": "Σχόλια", "Submit ": "Υποβολή ", "Click here to Show it in Map": "Προβολή στον Χάρτη", "Canceled": "Ακυρώθηκε", "No I want": "Όχι θέλω", "Email is": "Email:", "Phone Number is": "Τηλέφωνο:", "Date of Birth is": "Ημ. Γέννησης:", "Sex is ": "Φύλο: ", "Car Details": "Στοιχεία Οχήματος", "VIN is": "Πλαίσιο:", "Color is ": "Χρώμα: ", "Make is ": "Μάρκα: ", "Model is": "Μοντέλο:", "Year is": "Έτος:", "Expiration Date ": "Λήξη: ", "Edit Your data": "Επεξεργασία", "write vin for your car": "εισάγετε πλαίσιο", "VIN": "Πλαίσιο", "Device Change Detected": "Αλλαγή Συσκευής", "Please verify your identity": "Επαλήθευση ταυτότητας", "write Color for your car": "εισάγετε χρώμα", "write Make for your car": "εισάγετε μάρκα", "write Model for your car": "εισάγετε μοντέλο", "write Year for your car": "εισάγετε έτος", "write Expiration Date for your car": "εισάγετε ημερομηνία λήξης", "Tariffs": "Χρεώσεις", "Minimum fare": "Ελάχιστη χρέωση", "Maximum fare": "Μέγιστη χρέωση", "Flag-down fee": "Σημαία", "Including Tax": "Με ΦΠΑ", "BookingFee": "Κόστος Κράτησης", "Morning": "Πρωί", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "07:30 - 10:30", "Evening": "Απόγευμα", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "12:00 - 15:00", "Night": "Βράδυ", "You have in account": "Έχετε στον λογαριασμό", "Select Country": "Επιλογή Χώρας", "Ride Today : ": "Διαδρομή Σήμερα: ", "After this period\nYou can't cancel!": "Μετά από αυτό\nΔεν μπορείτε να ακυρώσετε!", "from 23:59 till 05:30": "23:59 - 05:30", "Rate Driver": "Βαθμολογία Οδηγού", "Total Cost is ": "Συνολικό Κόστος: ", "Write note": "Σημείωση", "Time to arrive": "Ώρα άφιξης", "Ride Summaries": "Συνόψεις", "Total Cost": "Συνολικό Κόστος", "Average of Hours of": "Μέσος όρος ωρών", " is ON for this month": " είναι ON αυτόν τον μήνα", "Days": "Ημέρες", "Total Hours on month": "Σύνολο Ωρών μήνα", "Counts of Hours on days": "Ώρες ανά ημέρα", "OrderId": "ID Παραγγελίας", "created time": "ώρα δημιουργίας", "Intaleq Over": "Τέλος Intaleq", "I will slow down": "Θα επιβραδύνω", "Map Passenger": "Χάρτης Επιβάτη", "Be Slowly": "Πιο αργά", "If you want to make Google Map App run directly when you apply order": "Άμεσο άνοιγμα Google Maps", "You can change the language of the app": "Αλλαγή γλώσσας εφαρμογής", "Your Budget less than needed": "Υπόλοιπο χαμηλότερο του απαιτούμενου", "You can change the Country to get all features": "Αλλάξτε Χώρα για όλα τα χαρακτηριστικά", "Change Country": "Αλλαγή Χώρας" }, "ur": { "Order": "آرڈر", "OrderVIP": "VIP آرڈر", "Cancel Trip": "سفر منسوخ کریں", "Passenger Cancel Trip": "مسافر نے سفر منسوخ کر دیا", "VIP Order": "VIP آرڈر", "Hi ,I Arrive your site": "سلام، میں آپ کی لوکیشن پر پہنچ گیا ہوں", "The driver accepted your trip": "ڈرائیور نے آپ کا سفر قبول کر لیا ہے", "message From passenger": "مسافر کا پیغام", "Cancel": "منسوخ کریں", "Trip Cancelled. The cost of the trip will be added to your wallet.": "سفر منسوخ ہو گیا۔ سفر کی لاگت آپ کے والٹ میں شامل کر دی جائے گی۔", "token change": "ٹوکن کی تبدیلی", "face detect": "چہرے کی شناخت", "Face Detection Result": "چہرے کی شناخت کا نتیجہ", "similar": "ملتا جلتا", "not similar": "مختلف", "Hi ,I will go now": "سلام، میں اب جا رہا ہوں", "Passenger come to you": "مسافر آپ کی طرف آ رہا ہے", "Call Income": "آنے والی کال", "Call Income from Passenger": "مسافر کی طرف سے کال", "Criminal Document Required": "پولیس کلیئرنس درکار ہے", "You should have upload it .": "آپ کو اسے اپ لوڈ کرنا چاہیے۔", "Call End": "کال ختم", "The order has been accepted by another driver.": "آرڈر دوسرے ڈرائیور نے قبول کر لیا ہے۔", "The order Accepted by another Driver": "آرڈر دوسرے ڈرائیور نے قبول کر لیا", "We regret to inform you that another driver has accepted this order.": "ہمیں افسوس ہے کہ کسی اور ڈرائیور نے یہ آرڈر قبول کر لیا ہے۔", "Driver Applied the Ride for You": "ڈرائیور نے آپ کے لیے سفر کی درخواست دی", "Applied": "درخواست دی گئی", "Pay by Sham Cash": "Sham Cash کے ذریعے ادائیگی", "Pay with Debit Card": "ڈیبٹ کارڈ سے ادائیگی", "Please go to Car Driver": "براہ کرم ڈرائیور کے پاس جائیں", "Ok I will go now.": "ٹھیک ہے، میں اب جا رہا ہوں۔", "Accepted Ride": "قبول شدہ سفر", "Driver Accepted the Ride for You": "ڈرائیور نے آپ کے لیے سفر قبول کر لیا", "Promo": "پرومو", "Show latest promo": "تازہ ترین پرومو دکھائیں", "Trip Monitoring": "سفر کی نگرانی", "Driver Is Going To Passenger": "ڈرائیور مسافر کی طرف جا رہا ہے", "Please stay on the picked point.": "براہ کرم منتخب کردہ مقام پر رہیں۔", "message From Driver": "ڈرائیور کا پیغام", "Trip is Begin": "سفر شروع ہو گیا", "Cancel Trip from driver": "ڈرائیور کی طرف سے منسوخی", "We will look for a new driver.\nPlease wait.": "ہم نئے ڈرائیور کی تلاش کر رہے ہیں۔\nبراہ کرم انتظار کریں۔", "The driver canceled your ride.": "ڈرائیور نے آپ کا سفر منسوخ کر دیا۔", "Driver Finish Trip": "ڈرائیور نے سفر مکمل کر لیا", "you will pay to Driver": "آپ ڈرائیور کو ادا کریں گے", "Don’t forget your personal belongings.": "اپنا ذاتی سامان نہ بھولیں۔", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "براہ کرم یقینی بنائیں کہ آپ کے پاس اپنا تمام سامان موجود ہے اور اگر کوئی بقایا رقم ہے تو وہ آپ کے والٹ میں شامل کر دی گئی ہے۔ Intaleq ایپ منتخب کرنے کا شکریہ۔", "Finish Monitor": "نگرانی ختم کریں", "Trip finished": "سفر مکمل ہو گیا", "Call Income from Driver": "ڈرائیور کی طرف سے کال", "Driver Cancelled Your Trip": "ڈرائیور نے آپ کا سفر منسوخ کر دیا", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "آپ ڈرائیور کے وقت کی قیمت ادا کریں گے، اپنا Intaleq والٹ دیکھیں", "Order Applied": "آرڈر لاگو ہو گیا", "welcome to intaleq": "Intaleq میں خوش آمدید", "login or register subtitle": "لاگ ان یا رجسٹر کرنے کے لیے اپنا موبائل نمبر درج کریں", "An application error occurred.": "ایپلیکیشن میں خرابی پیش آ گئی۔", "Submission Failed": "جمع کرانا ناکام ہو گیا", "Your complaint has been submitted.": "آپ کی شکایت جمع کر دی گئی ہے۔", "Failed to connect to the server. Please try again.": "سرور سے رابطہ کرنے میں ناکامی۔ براہ کرم دوبارہ کوشش کریں۔", "Ride information not found. Please refresh the page.": "سفر کی معلومات نہیں ملیں۔ براہ کرم صفحہ ریفریش کریں۔", "Please describe your issue before submitting.": "جمع کرانے سے پہلے براہ کرم اپنا مسئلہ بیان کریں۔", "An application error occurred during upload.": "اپ لوڈ کے دوران ایپلیکیشن میں خرابی پیش آ گئی۔", "Failed to upload audio file.": "آڈیو فائل اپ لوڈ کرنے میں ناکامی۔", "Audio uploaded successfully.": "آڈیو کامیابی سے اپ لوڈ ہو گئی۔", "Complaint cannot be filed for this ride. It may not have been completed or started.": "اس سفر کے لیے شکایت درج نہیں کی جا سکتی۔ ہو سکتا ہے یہ مکمل یا شروع نہ ہوا ہو۔", "2. Attach Recorded Audio (Optional)": "2. ریکارڈ شدہ آڈیو منسلک کریں (اختیاری)", "Please enter a description of the issue.": "براہ کرم مسئلے کی تفصیل درج کریں۔", "phone number label": "فون نمبر", "phone number required": "فون نمبر درکار ہے", "send otp button": "او ٹی پی (OTP) بھیجیں", "verify your number title": "اپنے نمبر کی تصدیق کریں", "otp sent subtitle": "ایک 5 ہندسوں کا کوڈ بھیجا گیا\n@phoneNumber", "verify and continue button": "تصدیق کریں اور جاری رکھیں", "enter otp validation": "براہ کرم 5 ہندسوں کا او ٹی پی درج کریں", "one last step title": "ایک آخری قدم", "complete profile subtitle": "شروع کرنے کے لیے پروفایل مکمل کریں", "first name label": "پہلا نام", "first name required": "پہلا نام درکار ہے", "last name label": "آخری نام", "Verify OTP": "او ٹی پی کی تصدیق کریں", "Verification Code": "تصدیقی کوڈ", "We have sent a verification code to your mobile number:": "ہم نے آپ کے موبائل نمبر پر تصدیقی کوڈ بھیج دیا ہے:", "Verify": "تصدیق کریں", "Resend Code": "کوڈ دوبارہ بھیجیں", "You can resend in": "دوبارہ بھیج سکتے ہیں", "seconds": "سیکنڈز", "Error": "خرابی", "Please enter the complete 6-digit code.": "براہ کرم مکمل 6 ہندسوں کا کوڈ درج کریں۔", "last name required": "آخری نام درکار ہے", "email optional label": "ای میل (اختیاری)", "complete registration button": "رجسٹریشن مکمل کریں", "User with this phone number or email already exists.": "اس فون نمبر یا ای میل کے ساتھ صارف پہلے سے موجود ہے۔", "otp sent success": "او ٹی پی کامیابی سے واٹس ایپ پر بھیج دیا گیا۔", "failed to send otp": "او ٹی پی بھیجنے میں ناکامی۔", "server error try again": "سرور کی خرابی، دوبارہ کوشش کریں۔", "an error occurred": "ایک خرابی پیش آ گئی: @error", "otp verification failed": "او ٹی پی کی تصدیق ناکام ہو گئی۔", "registration failed": "رجسٹریشن ناکام ہو گئی۔", "welcome user": "خوش آمدید، @firstName!", "Cancel Trip from driver": "ڈرائیور کی طرف سے سفر منسوخ", "We will look for a new driver.\nPlease wait.": "ہم نئے ڈرائیور کی تلاش کریں گے۔\nبراہ کرم انتظار کریں۔", "The driver canceled your ride.": "ڈرائیور نے آپ کی سواری منسوخ کر دی۔", "Driver Finish Trip": "ڈرائیور نے سفر ختم کر دیا", "you will pay to Driver": "آپ ڈرائیور کو ادا کریں گے", "Don't forget your personal belongings.": "اپنا ذاتی سامان نہ بھولیں۔", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "براہ کرم یقینی بنائیں کہ آپ کے پاس اپنا تمام سامان موجود ہے اور اگر کوئی بقایا کرایہ ہے تو وہ آپ کے والٹ میں شامل کر دیا گیا ہے۔ Intaleq ایپ منتخب کرنے کا شکریہ۔", "Finish Monitor": "نگرانی ختم کریں", "Trip finished": "سفر ختم ہو گیا", "Call Income from Driver": "ڈرائیور کی طرف سے کال", "Driver Cancelled Your Trip": "ڈرائیور نے آپ کا سفر منسوخ کر دیا", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "آپ ڈرائیور کے وقت کی قیمت ادا کریں گے، اپنا Intaleq والٹ دیکھیں", "Order Applied": "آرڈر لاگو ہو گیا", "Share App": "ایپ شیئر کریں", "Wallet": "والٹ", "Balance": "بیلنس", "Don’t forget your personal belongings.": "اپنا ذاتی سامان نہ بھولیں۔", "Profile": "پروفائل", "Contact Support": "سپورٹ سے رابطہ کریں", "Session expired. Please log in again.": "سیشن ختم ہو گیا۔ براہ کرم دوبارہ لاگ ان کریں۔", "Security Warning": "⚠️ سیکیورٹی وارننگ", "Potential security risks detected. The application may not function correctly.": "ممکنہ سیکیورٹی خطرات کا پتہ چلا۔ ہو سکتا ہے ایپلیکیشن صحیح کام نہ کرے۔", "please order now": "ابھی آرڈر کریں", "Where to": "کہاں جانا ہے؟", "Where are you going?": "آپ کہاں جا رہے ہیں؟", "Quick Actions": "فوری اقدامات", "My Balance": "میرا بیلنس", "Order History": "آرڈر ہسٹری", "Contact Us": "ہم سے رابطہ کریں", "Driver": "ڈرائیور", "Complaint": "شکایت", "Promos": "پروموز", "Recent Places": "حالیہ مقامات", "From": "سے", "WhatsApp Location Extractor": "واٹس ایپ لوکیشن ایکسٹریکٹر", "Location Link": "لوکیشن لنک", "Paste location link here": "لوکیشن لنک یہاں پیسٹ کریں", "Go to this location": "اس لوکیشن پر جائیں", "Paste WhatsApp location link": "واٹس ایپ لوکیشن لنک پیسٹ کریں", "Select Order Type": "آرڈر کی قسم منتخب کریں", "Choose who this order is for": "منتخب کریں کہ یہ آرڈر کس کے لیے ہے", "I want to order for myself": "میں اپنے لیے آرڈر کرنا چاہتا ہوں", "I want to order for someone else": "میں کسی اور کے لیے آرڈر کرنا چاہتا ہوں", "Order for someone else": "کسی اور کے لیے آرڈر", "Order for myself": "اپنے لیے آرڈر", "Are you want to go this site": "کیا آپ اس جگہ جانا چاہتے ہیں", "No": "نہیں", "Pay by Sham Cash": "Sham Cash کے ذریعے ادائیگی", "Intaleq Wallet": "Intaleq والٹ", "Have a promo code?": "کیا آپ کے پاس پرومو کوڈ ہے؟", "Your Wallet balance is ": "آپ کا والٹ بیلنس ہے: ", "Cash": "نقد", "Phone Number": "فون نمبر", "Search country": "ملک تلاش کریں", "Payment Successful!": "ادائیگی کامیاب!", "Your payment was successful.": "آپ کی ادائیگی کامیاب رہی۔", "Pay directly to the captain": "کپتان کو براہ راست ادائیگی کریں", "Top up Wallet to continue": "جاری رکھنے کے لیے والٹ ٹاپ اپ کریں", "Or pay with Cash instead": "یا اس کے بجائے نقد ادائیگی کریں", "Confirm & Find a Ride": "تصدیق کریں اور سواری تلاش کریں", "Balance:": "بیلنس:", "Alerts": "الرٹس", "Welcome Back!": "خوش آمدید!", "Current Balance": "موجودہ بیلنس", "Set Wallet Phone Number": "والٹ فون نمبر سیٹ کریں", "Link a phone number for transfers": "ٹرانسفر کے لیے فون نمبر لنک کریں", "Payment History": "ادائیگی کی تاریخ", "View your past transactions": "اپنی پرانی ٹرانزیکشنز دیکھیں", "Top up Wallet": "والٹ ٹاپ اپ کریں", "Add funds using our secure methods": "ہمارے محفوظ طریقوں سے فنڈز شامل کریں", "Driver is waiting": "ڈرائیور انتظار کر رہا ہے", "Type your message...": "اپنا پیغام لکھیں...", "Driver Accepted Request": "ڈرائیور نے درخواست قبول کر لی", "Message": "پیغام", "Call": "کال", "Set Phone Number": "فون نمبر سیٹ کریں", "Select This Ride": "یہ سواری منتخب کریں", "Call Driver": "ڈرائیور کو کال کریں", "Increase Fare": "کرایہ بڑھائیں", "Stop": "رکیں", "Record": "ریکارڈ", "Share": "شیئر", "WhatsApp": "واٹس ایپ", "SOS": "SOS", "No drivers accepted your request yet": "ابھی تک کسی ڈرائیور نے آپ کی درخواست قبول نہیں کی", "Increasing the fare might attract more drivers. Would you like to increase the price?": "کرایہ بڑھانے سے مزید ڈرائیور متوجہ ہو سکتے ہیں۔ کیا آپ قیمت بڑھانا چاہیں گے؟", "Please make sure not to leave any personal belongings in the car.": "براہ کرم یقینی بنائیں کہ گاڑی میں کوئی ذاتی سامان نہ چھوڑیں۔", "Cancel Ride": "سفر منسوخ کریں", "Route Not Found": "روٹ نہیں ملا", "We couldn't find a valid route to this destination. Please try selecting a different point.": "ہمیں اس منزل کے لیے کوئی درست راستہ نہیں ملا۔ براہ کرم کوئی اور پوائنٹ منتخب کریں۔", "alert": "انتباہ", "You can call or record audio during this trip.": "آپ اس سفر کے دوران کال یا آڈیو ریکارڈ کر سکتے ہیں۔", "Warning: Speeding detected!": "انتباہ: تیز رفتاری کا پتہ چلا!", "Fixed Price": "فکسڈ قیمت", "Report": "رپورٹ", "Comfort": "آرام دہ (Comfort)", "Intaleq Balance": "Intaleq بیلنس", "Search for a starting point": "نقطہ آغاز تلاش کریں", "Top up Balance to continue": "جاری رکھنے کے لیے بیلنس ٹاپ اپ کریں", "Electric": "الیکٹرک", "Lady": "خواتین", "Van": "وین", "Rayeh Gai": "آنا جانا (Round Trip)", "Join Intaleq as a driver using my referral code!": "میرے ریفرل کوڈ کا استعمال کرتے ہوئے بطور ڈرائیور Intaleq میں شامل ہوں!", "Use code:": "کوڈ استعمال کریں:", "Download the Intaleq Driver app now and earn rewards!": "ابھی Intaleq ڈرائیور ایپ ڈاؤن لوڈ کریں اور انعامات حاصل کریں!", "Get a discount on your first Intaleq ride!": "اپنی پہلی Intaleq سواری پر رعایت حاصل کریں!", "Use my referral code:": "میرا ریفرل کوڈ استعمال کریں:", "Download the Intaleq app now and enjoy your ride!": "ابھی Intaleq ایپ ڈاؤن لوڈ کریں اور اپنی سواری کا لطف اٹھائیں!", "Contacts Loaded": "رابطے لوڈ ہو گئے", "Showing": "دکھا رہا ہے", "of": "میں سے", "Pay by MTN Wallet": "MTN والٹ سے ادائیگی کریں", "Pay by Syriatel Wallet": "Syriatel والٹ سے ادائیگی کریں", "Customer not found": "کسٹمر نہیں ملا", "Wallet is blocked": "والٹ بلاک ہے", "Customer phone is not active": "کسٹمر کا فون ایکٹو نہیں ہے", "Balance not enough": "بیلنس کافی نہیں ہے", "Balance limit exceeded": "بیلنس کی حد سے تجاوز", "Incorrect sms code": "⚠️ غلط SMS کوڈ۔ براہ کرم دوبارہ کوشش کریں۔", "contacts. Others were hidden because they don't have a phone number.": "رابطے۔ دیگر چھپا دیے گئے کیونکہ ان کا فون نمبر نہیں ہے۔", "No contacts found": "کوئی رابطہ نہیں ملا", "No contacts with phone numbers were found on your device.": "آپ کے آلے پر فون نمبرز کے ساتھ کوئی رابطہ نہیں ملا۔", "Permission denied": "اجازت مسترد کر دی گئی", "Contact permission is required to pick contacts": "رابطے منتخب کرنے کے لیے رابطے کی اجازت درکار ہے۔", "An error occurred while picking contacts:": "رابطے منتخب کرتے وقت ایک خرابی پیش آ گئی:", "Please enter a correct phone": "براہ کرم درست فون نمبر درج کریں", "Success": "کامیابی", "Invite sent successfully": "دعوت نامہ کامیابی سے بھیج دیا گیا", "Hello! I'm inviting you to try Intaleq.": "ہیلو! میں آپ کو Intaleq آزمانے کی دعوت دے رہا ہوں۔", "Use my invitation code to get a special gift on your first ride!": "اپنی پہلی سواری پر خصوصی تحفہ حاصل کرنے کے لیے میرا دعوتی کوڈ استعمال کریں!", "Your personal invitation code is:": "آپ کا ذاتی دعوتی کوڈ ہے:", "Be sure to use it quickly! This code expires at": "اسے جلدی استعمال کرنا یقینی بنائیں! یہ کوڈ ختم ہو جائے گا", "Download the app now:": "ابھی ایپ ڈاؤن لوڈ کریں:", "See you on the road!": "راستے میں ملتے ہیں!", "This phone number has already been invited.": "اس فون نمبر کو پہلے ہی مدعو کیا جا چکا ہے۔", "An unexpected error occurred. Please try again.": "ایک غیر متوقع خرابی پیش آ گئی۔ براہ کرم دوبارہ کوشش کریں۔", "You deserve the gift": "آپ تحفے کے مستحق ہیں", "Claim your 20 LE gift for inviting": "دعوت دینے پر اپنا 20 روپے کا تحفہ حاصل کریں", "You have got a gift for invitation": "آپ کو دعوت دینے پر تحفہ ملا ہے", "You have earned 20": "آپ نے 20 کمائے ہیں", "LE": "روپیہ", "Vibration feedback for all buttons": "تمام بٹنوں کے لیے وائبریشن فیڈبیک", "Share with friends and earn rewards": "دوستوں کے ساتھ شیئر کریں اور انعامات حاصل کریں", "Gift Already Claimed": "تحفہ پہلے ہی حاصل کیا جا چکا ہے", "You have already received your gift for inviting": "آپ دعوت دینے کے لیے اپنا تحفہ پہلے ہی وصول کر چکے ہیں", "Keep it up!": "جاری رکھیں!", "has completed": "مکمل کر لیا ہے", "trips": "سفر", "Personal Information": "ذاتی معلومات", "Name": "نام", "Not set": "سیٹ نہیں", "Gender": "جنس", "Education": "تعلیم", "Work & Contact": "کام اور رابطہ", "Employment Type": "روزگار کی قسم", "Marital Status": "ازدواجی حیثیت", "SOS Phone": "SOS فون", "Sign Out": "سائن آؤٹ", "Delete My Account": "میرا اکاؤنٹ ڈیلیٹ کریں", "Update Gender": "جنس اپ ڈیٹ کریں", "Update": "اپ ڈیٹ", "Update Education": "تعلیم اپ ڈیٹ کریں", "Are you sure? This action cannot be undone.": "کیا آپ کو یقین ہے؟ یہ عمل واپس نہیں کیا جا سکتا۔", "Confirm your Email": "اپنے ای میل کی تصدیق کریں", "Type your Email": "اپنا ای میل لکھیں", "Delete Permanently": "مستقل طور پر ڈیلیٹ کریں", "Male": "مرد", "Female": "عورت", "Other": "دیگر", "High School Diploma": "ہائی اسکول ڈپلومہ", "Associate Degree": "ایسوسی ایٹ ڈگری", "Bachelor's Degree": "بیچلر ڈگری", "Master's Degree": "ماسٹر ڈگری", "Doctoral Degree": "ڈاکٹریٹ ڈگری", "Select your preferred language for the app interface.": "ایپ انٹرفیس کے لیے اپنی پسندیدہ زبان منتخب کریں۔", "Language Options": "زبان کے اختیارات", "You can claim your gift once they complete 2 trips.": "جب وہ 2 سفر مکمل کر لیں تو آپ اپنا تحفہ حاصل کر سکتے ہیں۔", "Closest & Cheapest": "سب سے قریب اور سستا", "Comfort choice": "آرام دہ انتخاب", "Travel in a modern, silent electric car. A premium, eco-friendly choice for a smooth ride.": "جدید، خاموش الیکٹرک کار میں سفر کریں۔ ایک پریمیم، ماحول دوست انتخاب۔", "Spacious van service ideal for families and groups. Comfortable, safe, and cost-effective travel together.": "خاندانوں اور گروپوں کے لیے کشادہ وین سروس۔ آرام دہ، محفوظ اور کم خرچ۔", "Quiet & Eco-Friendly": "خاموش اور ماحول دوست", "Lady Captain for girls": "خواتین کے لیے لیڈی کیپٹن", "Van for familly": "فیملی کے لیے وین", "Are you sure to delete this location?": "کیا آپ واقعی اس لوکیشن کو ڈیلیٹ کرنا چاہتے ہیں؟", "Change Work location?": "کام کی جگہ تبدیل کریں؟", "Change Home location?": "گھر کی لوکیشن تبدیل کریں؟", "Submit a Complaint": "شکایت درج کریں", "Submit Complaint": "شکایت جمع کرائیں", "No trip history found": "کوئی سفری تاریخ نہیں ملی", "Your past trips will appear here.": "آپ کے پچھلے سفر یہاں ظاہر ہوں گے۔", "1. Describe Your Issue": "1. اپنا مسئلہ بیان کریں", "Enter your complaint here...": "اپنی شکایت یہاں لکھیں...", "2. Attach Recorded Audio": "2. ریکارڈ شدہ آڈیو منسلک کریں", "No audio files found.": "کوئی آڈیو فائل نہیں ملی۔", "Confirm Attachment": "منسلک کرنے کی تصدیق کریں", "Attach this audio file?": "کیا یہ آڈیو فائل منسلک کریں؟", "Uploaded": "اپ لوڈ ہو گیا", "3. Review Details & Response": "3. تفصیلات اور جواب کا جائزہ لیں", "Date": "تاریخ", "Today's Promos": "آج کے پروموز", "No promos available right now.": "ابھی کوئی پرومو دستیاب نہیں ہے۔", "Check back later for new offers!": "نئی پیشکشوں کے لیے بعد میں دوبارہ چیک کریں!", "Valid Until:": "تک درست:", "CODE": "کوڈ", "Login": "لاگ ان", "Sign in for a seamless experience": "بہترین تجربے کے لیے سائن ان کریں", "Sign In with Google": "گوگل کے ساتھ سائن ان کریں", "Sign in with Apple": "ایپل کے ساتھ سائن ان کریں", "User not found": "صارف نہیں ملا", "Need assistance? Contact us": "مدد چاہیے؟ ہم سے رابطہ کریں", "Email": "ای میل", "Your email address": "آپ کا ای میل ایڈریس", "Enter a valid email": "ایک درست ای میل درج کریں", "Password": "پاس ورڈ", "Your password": "آپ کا پاس ورڈ", "Enter your password": "اپنا پاس ورڈ درج کریں", "Submit": "جمع کرائیں", "Terms of Use & Privacy Notice": "استعمال کی شرائط اور رازداری کا نوٹس", "By selecting \"I Agree\" below, I confirm that I have read and agree to the ": "نیچے \"میں متفق ہوں\" کو منتخب کر کے، میں تصدیق کرتا ہوں کہ میں نے پڑھ لیا ہے اور اتفاق کرتا ہوں ", "Terms of Use": "استعمال کی شرائط", " and acknowledge the ": " اور تسلیم کرتا ہوں ", "Privacy Notice": "رازداری کا نوٹس", " . I am at least 18 years old.": " ۔ میری عمر کم از کم 18 سال ہے۔", "I Agree": "میں متفق ہوں", "Continue": "جاری رکھیں", "Enable Location": "لوکیشن آن کریں", "To give you the best experience, we need to know where you are. Your location is used to find nearby captains and for pickups.": "بہترین تجربہ دینے کے لیے ہمیں آپ کی لوکیشن جاننے کی ضرورت ہے۔ آپ کی لوکیشن قریبی کپتانوں کو تلاش کرنے کے لیے استعمال ہوتی ہے۔", "Allow Location Access": "لوکیشن تک رسائی کی اجازت دیں", "Welcome to Intaleq!": "Intaleq میں خوش آمدید!", "Before we start, please review our terms.": "شروع کرنے سے پہلے، براہ کرم ہماری شرائط کا جائزہ لیں۔", "Your journey starts here": "آپ کا سفر یہاں سے شروع ہوتا ہے", "Cancel Search": "تلاش منسوخ کریں", "Set pickup location": "پک اپ لوکیشن سیٹ کریں", "Move the map to adjust the pin": "پن کو ایڈجسٹ کرنے کے لیے نقشہ منتقل کریں", "Searching for the nearest captain...": "قریب ترین کپتان کی تلاش جاری ہے...", "No one accepted? Try increasing the fare.": "کسی نے قبول نہیں کیا؟ کرایہ بڑھانے کی کوشش کریں۔", "Increase Your Trip Fee (Optional)": "اپنی ٹرپ فیس بڑھائیں (اختیاری)", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "ہمیں ابھی تک کوئی ڈرائیور نہیں ملا۔ اپنی پیشکش کو ڈرائیوروں کے لیے پرکشش بنانے کے لیے ٹرپ فیس بڑھانے پر غور کریں۔", "No, thanks": "نہیں، شکریہ", "Increase Fee": "فیس بڑھائیں", "Copy": "کاپی", "Promo Copied!": "پرمو کاپی ہو گیا!", "Code": "کوڈ", "copied to clipboard": "کلپ بورڈ پر کاپی ہو گیا", "Price": "قیمت", "Intaleq's Response": "Intaleq کا جواب", "Awaiting response...": "جواب کا انتظار ہے...", "Audio file not attached": "آڈیو فائل منسلک نہیں ہے", "The audio file is not uploaded yet.\\nDo you want to submit without it?": "آڈیو فائل ابھی تک اپ لوڈ نہیں ہوئی ہے۔\\nکیا آپ اس کے بغیر جمع کرانا چاہتے ہیں؟", "deleted": "حذف کر دیا گیا", "To Work": "کام پر", "Work Saved": "کام محفوظ ہو گیا", "To Home": "گھر پر", "Home Saved": "گھر محفوظ ہو گیا", "Destination selected": "منزل منتخب ہو گئی", "Now select start pick": "اب پک اپ پوائنٹ منتخب کریں", "OK": "ٹھیک ہے", "Confirm Pick-up Location": "پک اپ لوکیشن کی تصدیق کریں", "Set Location on Map": "نقشے پر لوکیشن سیٹ کریں", "Leave a detailed comment (Optional)": "تفصیلی تبصرہ چھوڑیں (اختیاری)", "Share your experience to help us improve...": "بہتر بنانے میں ہماری مدد کے لیے اپنا تجربہ شیئر کریں...", "Your valuable feedback helps us improve our service quality.": "آپ کی قیمتی رائے ہماری سروس کے معیار کو بہتر بنانے میں مدد کرتی ہے۔", "witout zero": "صفر کے بغیر", "Top up Balance": "بیلنس ٹاپ اپ کریں", "An error occurred": "ایک خرابی پیش آ گئی", "Send WhatsApp Message": "واٹس ایپ پیغام بھیجیں", "How was your trip with": "آپ کا سفر کیسا رہا", "Drawing route on map...": "نقشے پر راستہ بنایا جا رہا ہے...", "Please wait while we prepare your trip.": "براہ کرم انتظار کریں جب تک ہم آپ کا سفر تیار کرتے ہیں۔", "Submit Rating": "ریٹنگ جمع کرائیں", "Call Support": "سپورٹ کو کال کریں", "You can contact us during working hours from 10:00 - 16:00.": "آپ ہم سے دفتری اوقات 10:00 - 16:00 کے دوران رابطہ کر سکتے ہیں۔", "Intaleq is the safest and most reliable ride-sharing app designed especially for passengers in Syria. We provide a comfortable, respectful, and affordable riding experience with features that prioritize your safety and convenience. Our trusted captains are verified, insured, and supported by regular car maintenance carried out by top engineers. We also offer on-road support services to make sure every trip is smooth and worry-free. With Intaleq, you enjoy quality, safety, and peace of mind—every time you ride.": "Intaleq سب سے محفوظ اور قابل اعتماد رائیڈ شیئرنگ ایپ ہے جو خاص طور پر مسافروں کے لیے بنائی گئی ہے۔ ہم ایک آرام دہ، باوقار اور سستا سفر فراہم کرتے ہیں۔ ہمارے قابل اعتماد کپتان تصدیق شدہ ہیں۔ Intaleq کے ساتھ، آپ ہر بار معیار، حفاظت اور ذہنی سکون کا لطف اٹھاتے ہیں۔", "Work time is from 10:00 AM to 16:00 PM.\nYou can send a WhatsApp message or email.": "کام کا وقت صبح 10:00 بجے سے شام 4:00 بجے تک ہے۔\nآپ واٹس ایپ پیغام یا ای میل بھیج سکتے ہیں۔", "Sorry": "معذرت", "Customer MSISDN doesn’t have customer wallet": "کسٹمر نمبر کا والٹ نہیں ہے", "Please enter the number without the leading 0": "براہ کرم شروع میں 0 کے بغیر نمبر درج کریں", "Please enter your phone number": "براہ کرم اپنا فون نمبر درج کریں", "Phone number seems too short": "فون نمبر بہت چھوٹا معلوم ہوتا ہے", "No cars are available at the moment. Please try again later.": "اس وقت کوئی کار دستیاب نہیں ہے۔ براہ کرم بعد میں کوشش کریں۔", "Nearest Car: ~": "قریب ترین کار: ~", "Nearest Car": "قریب ترین کار", "No cars nearby": "قریب میں کوئی کار نہیں", "Favorite Places": "پسندیدہ مقامات", "No favorite places yet!": "ابھی تک کوئی پسندیدہ مقام نہیں!", "from your favorites": "آپ کے پسندیدہ سے", "Back": "واپس", "Enter your code below to apply the discount.": "رعایت حاصل کرنے کے لیے اپنا کوڈ نیچے درج کریں۔", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "نیچے \"میں متفق ہوں\" کو منتخب کر کے، میں تصدیق کرتا ہوں کہ میں نے پڑھ لیا ہے اور اتفاق کرتا ہوں", "and acknowledge the": "اور تسلیم کرتا ہوں", "Enable Location Access": "لوکیشن تک رسائی فعال کریں", "We need your location to find nearby drivers for pickups and drop-offs.": "پک اپ اور ڈراپ آف کے لیے قریبی ڈرائیوروں کو تلاش کرنے کے لیے ہمیں آپ کی لوکیشن کی ضرورت ہے۔", "You should restart app to change language": "زبان تبدیل کرنے کے لیے آپ کو ایپ کو دوبارہ شروع کرنا چاہیے", "Home Page": "ہوم پیج", "To change Language the App": "ایپ کی زبان تبدیل کرنے کے لیے", "Learn more about our app and mission": "ہماری ایپ اور مشن کے بارے میں مزید جانیں", "Promos For Today": "آج کے پروموز", "Choose your ride": "اپنی سواری کا انتخاب کریں", "Your Journey Begins Here": "آپ کا سفر یہاں سے شروع ہوتا ہے", "Bonus gift": "بونس تحفہ", "Pay": "ادائیگی", "Get": "حاصل کریں", "Send to Driver Again": "ڈرائیور کو دوبارہ بھیجیں", "Driver Name:": "ڈرائیور کا نام:", "No trip data available": "کوئی ٹرپ ڈیٹا دستیاب نہیں", "Car Plate:": "کار کی پلیٹ:", "remaining": "باقی", "Order Cancelled": "آرڈر منسوخ", "You canceled VIP trip": "آپ نے VIP ٹرپ منسوخ کر دیا", "Passenger cancelled order": "مسافر نے آرڈر منسوخ کر دیا", "Your trip is scheduled": "آپ کا سفر شیڈول ہے", "Don't forget your ride!": "اپنی سواری نہ بھولیں!", "Trip updated successfully": "سفر کامیابی سے اپ ڈیٹ ہو گیا", "Car Make:": "کار کی ساخت:", "Car Model:": "کار کا ماڈل:", "Car Color:": "کار کا رنگ:", "Driver Phone:": "ڈرائیور کا فون:", "Pre-booking": "پری بکنگ", "Waiting VIP": "VIP کا انتظار", "Driver List": "ڈرائیور لسٹ", "Confirm Trip": "سفر کی تصدیق کریں", "Select date and time of trip": "سفر کی تاریخ اور وقت منتخب کریں", "Date and Time Picker": "تاریخ اور وقت چننے والا", "Trip Status:": "سفر کی حیثیت:", "pending": "زیر التواء", "accepted": "قبول شدہ", "rejected": "مسترد", "Apply": "لاگو کریں", "Enter your promo code": "اپنا پرومو کوڈ درج کریں", "Apply Promo Code": "پرومو کوڈ لاگو کریں", "Scheduled Time:": "شیڈول ٹائم:", "No drivers available": "کوئی ڈرائیور دستیاب نہیں", "No drivers available at the moment. Please try again later.": "اس وقت کوئی ڈرائیور دستیاب نہیں ہے۔ براہ کرم بعد میں کوشش کریں۔", "you have a negative balance of": "آپ کا منفی بیلنس ہے", "Please try again in a few moments": "براہ کرم کچھ لمحوں میں دوبارہ کوشش کریں", "Unknown Driver": "نامعلوم ڈرائیور", "in your": "آپ کے میں", "The driver accepted your order for": "ڈرائیور نے آپ کا آرڈر قبول کر لیا برائے", "wallet due to a previous trip.": "پچھلے سفر کی وجہ سے والٹ۔", "rides": "سواریاں", "Add Work": "کام شامل کریں", "The reason is": "وجہ یہ ہے", "User does not have a wallet #1652": "صارف کے پاس والٹ نہیں ہے #1652", "Price of trip": "سفر کی قیمت", "From:": "سے:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Intaleq اور ڈیلیوری ٹرپس کے لیے، قیمت کا حساب متحرک طور پر لگایا جاتا ہے۔ کمفرٹ ٹرپس کے لیے، قیمت وقت اور فاصلے پر مبنی ہوتی ہے۔", "Phone Wallet Saved Successfully": "فون والٹ کامیابی سے محفوظ ہو گیا", "Add wallet phone you use": "اپنا استعمال شدہ والٹ فون شامل کریں", "Update Available": "اپ ڈیٹ دستیاب ہے", "Phone number must be exactly 11 digits long": "فون نمبر بالکل 11 ہندسوں کا ہونا چاہیے", "Insert Wallet phone number": "والٹ فون نمبر درج کریں", "Phone number isn't an Egyptian phone number": "فون نمبر درست نہیں ہے", "A new version of the app is available. Please update to the latest version.": "ایپ کا نیا ورژن دستیاب ہے۔ براہ کرم تازہ ترین ورژن پر اپ ڈیٹ کریں۔", "We use location to get accurate and nearest passengers for you": "ہم آپ کے لیے درست اور قریبی مسافروں کو حاصل کرنے کے لیے لوکیشن کا استعمال کرتے ہیں", "This ride is already applied by another driver.": "یہ سواری پہلے ہی کسی اور ڈرائیور نے لے لی ہے۔", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "ہم قریبی دستیاب ڈرائیور کو تلاش کرنے اور درست پک اپ اور ڈراپ آف معلومات فراہم کرنے کے لیے آپ کی دقیق لوکیشن کا استعمال کرتے ہیں۔ آپ ترتیبات میں اس کا انتظام کر سکتے ہیں۔", "Where are you, sir?": "جناب آپ کہاں ہیں؟", "I've been trying to reach you but your phone is off.": "میں آپ سے رابطہ کرنے کی کوشش کر رہا ہوں لیکن آپ کا فون بند ہے۔", "Please don't be late": "براہ کرم دیر نہ کریں", "Please don't be late, I'm waiting for you at the specified location.": "براہ کرم دیر نہ کریں، میں مقررہ جگہ پر آپ کا انتظار کر رہا ہوں۔", "My location is correct. You can search for me using the navigation app": "میری لوکیشن درست ہے۔ آپ نیویگیشن ایپ کا استعمال کرتے ہوئے مجھے تلاش کر سکتے ہیں", "Hello, I'm at the agreed-upon location": "ہیلو، میں طے شدہ جگہ پر ہوں", "How much longer will you be?": "آپ کو اور کتنا وقت لگے گا؟", "Phone number is verified before": "فون نمبر پہلے ہی تصدیق شدہ ہے", "Change Ride": "سواری تبدیل کریں", "You can change the destination by long-pressing any point on the map": "آپ نقشے پر کسی بھی نقطہ کو طویل دبا کر منزل تبدیل کر سکتے ہیں", "Pick from map destination": "نقشے سے منزل کا انتخاب کریں", "Pick or Tap to confirm": "منتخب کریں یا تصدیق کے لیے ٹیپ کریں", "Accepted your order": "آپ کا آرڈر قبول کر لیا", "Order Accepted": "آرڈر قبول ہو گیا", "with type": "قسم کے ساتھ", "accepted your order at price": "اس قیمت پر آپ کا آرڈر قبول کیا", "you canceled order": "آپ نے آرڈر منسوخ کر دیا", "If you want order to another person": "اگر آپ کسی اور شخص کو آرڈر کرنا چاہتے ہیں", "upgrade price": "قیمت بڑھائیں", "airport": "ایئرپورٹ", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "لچکدار راستے اور اسٹاپ پوائنٹس والی آرام دہ کار کے لیے بہترین انتخاب۔", "You can upgrade price to may driver accept your order": "آپ قیمت بڑھا سکتے ہیں تاکہ ڈرائیور آپ کا آرڈر قبول کر لے", "Change Route": "راستہ تبدیل کریں", "No Captain Accepted Your Order": "کسی کپتان نے آپ کا آرڈر قبول نہیں کیا", "We are looking for a captain but the price may increase to let a captain accept": "ہم کپتان کی تلاش کر رہے ہیں لیکن قیمت بڑھ سکتی ہے", "No, I want to cancel this trip": "نہیں، میں یہ سفر منسوخ کرنا چاہتا ہوں", "Attention": "توجہ", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "سفر منسوخ ہو گیا۔ سفر کی قیمت آپ کے والٹ سے کاٹ لی جائے گی۔", "You will be charged for the cost of the driver coming to your location.": "ڈرائیور کے آپ کی لوکیشن پر آنے کی قیمت آپ سے وصول کی جائے گی۔", "reject your order.": "آپ کا آرڈر مسترد کریں۔", "Order Under Review": "آرڈر زیر جائزہ", "is reviewing your order. They may need more information or a higher price.": "آپ کے آرڈر کا جائزہ لے رہا ہے۔ انہیں مزید معلومات یا زیادہ قیمت کی ضرورت ہو سکتی ہے۔", "Vibration": "وائبریشن", "Resend code": "کوڈ دوبارہ بھیجیں", "change device": "ڈیوائس تبدیل کریں", "Device Change Detected": "ڈیوائس کی تبدیلی کا پتہ چلا", "You can only use one device at a time. This device will now be set as your active device.": "آپ ایک وقت میں صرف ایک ڈیوائس استعمال کر سکتے ہیں۔ اب یہ ڈیوائس آپ کی فعال ڈیوائس کے طور پر سیٹ ہو جائے گی۔", "Click here point": "یہاں کلک کریں", "Are you want to change": "کیا آپ تبدیل کرنا چاہتے ہیں", "by": "بذریعہ", "Enter your complaint here": "اپنی شکایت یہاں درج کریں", "Please enter your complaint.": "براہ کرم اپنی شکایت درج کریں۔", "Complaint data saved successfully": "شکایت کا ڈیٹا کامیابی سے محفوظ ہو گیا", "Trip Monitor": "سفر مانیٹر", "Insert SOS Phone": "SOS فون درج کریں", "Add SOS Phone": "SOS فون شامل کریں", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "پیارے ،\n\n🚀 میں نے ابھی ایک دلچسپ سفر شروع کیا ہے اور میں اپنے سفر کی تفصیلات اور اپنی موجودہ لوکیشن آپ کے ساتھ ریئل ٹائم میں شیئر کرنا چاہتا ہوں! براہ کرم Intaleq ایپ ڈاؤن لوڈ کریں۔ یہ آپ کو میرے سفر کی تفصیلات اور میری تازہ ترین لوکیشن دیکھنے کی اجازت دے گی۔\n\n👉 ڈاؤن لوڈ لنک: \nAndroid [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\niOS [https://getapp.cc/app/6458734951]\n\nمیں اپنے ایڈونچر کے دوران آپ کو قریب رکھنے کا منتظر ہوں!\n\nIntaleq ،", "Send Intaleq app to him": "اسے Intaleq ایپ بھیجیں", "No passenger found for the given phone number": "دیے گئے فون نمبر کے لیے کوئی مسافر نہیں ملا", "No user found for the given phone number": "دیے گئے فون نمبر کے لیے کوئی صارف نہیں ملا", "This price is": "یہ قیمت ہے", "Work": "کام", "Add Home": "گھر شامل کریں", "Notifications": "اطلاعات", "💳 Pay with Credit Card": "💳 کریڈٹ کارڈ سے ادائیگی کریں", "⚠️ You need to choose an amount!": "⚠️ آپ کو ایک رقم منتخب کرنے کی ضرورت ہے!", "💰 Pay with Wallet": "💰 والٹ سے ادائیگی کریں", "You must restart the app to change the language.": "زبان تبدیل کرنے کے لیے آپ کو ایپ دوبارہ شروع کرنی چاہیے۔", "joined": "شامل ہوا", "Driver joined the channel": "ڈرائیور چینل میں شامل ہو گیا", "Driver left the channel": "ڈرائیور نے چینل چھوڑ دیا", "Call Page": "کال پیج", "Call Left": "بقیہ کالز", " Next as Cash !": " اگلا نقد کے طور پر!", "To use Wallet charge it": "والٹ استعمال کرنے کے لیے اسے چارج کریں", "We are searching for the nearest driver to you": "ہم آپ کے قریب ترین ڈرائیور کو تلاش کر رہے ہیں", "Best choice for cities": "شہروں کے لیے بہترین انتخاب", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "آنا جانا: شہروں کے درمیان آسان سفر کے لیے راؤنڈ ٹرپ سروس، آسان اور قابل اعتماد۔", "This trip is for women only": "یہ سفر صرف خواتین کے لیے ہے", "Total budgets on month": "مہینے کا کل بجٹ", "You have call from driver": "ڈرائیور کی کال ہے", "Intaleq": "Intaleq", "passenger agreement": "مسافر معاہدہ", "To become a passenger, you must review and agree to the ": "مسافر بننے کے لیے، آپ کو جائزہ لینا ہوگا اور اتفاق کرنا ہوگا ", "agreement subtitle": "جاری رکھنے کے لیے، آپ کو استعمال کی شرائط اور رازداری کی پالیسی کا جائزہ لینا اور اتفاق کرنا چاہیے۔", "terms of use": "استعمال کی شرائط", " and acknowledge our Privacy Policy.": " اور ہماری رازداری کی پالیسی کو تسلیم کریں۔", "and acknowledge our": "اور تسلیم کریں ہماری", "privacy policy": "رازداری کی پالیسی۔", "i agree": "میں متفق ہوں", "Driver already has 2 trips within the specified period.": "مقررہ مدت میں ڈرائیور کے پاس پہلے ہی 2 سفر ہیں۔", "The invitation was sent successfully": "دعوت نامہ کامیابی سے بھیج دیا گیا", "You should select your country": "آپ کو اپنا ملک منتخب کرنا چاہیے", "Scooter": "سکوٹر", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "پیشگی ریزرویشن کے ساتھ سفر، جو آپ کو بہترین کپتانوں اور کاروں کا انتخاب کرنے کی اجازت دیتا ہے۔", "Mishwar Vip": "مشوار VIP", "The driver waiting you in picked location .": "ڈرائیور منتخب جگہ پر آپ کا انتظار کر رہا ہے۔", "About Us": "ہمارے بارے میں", "You can change the vibration feedback for all buttons": "آپ تمام بٹنوں کے لیے وائبریشن فیڈبیک تبدیل کر سکتے ہیں", "Most Secure Methods": "انتہائی محفوظ طریقے", "In-App VOIP Calls": "ان-ایپ VOIP کالز", "Recorded Trips for Safety": "حفاظت کے لیے ریکارڈ شدہ سفر", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nہم سستی کو بھی ترجیح دیتے ہیں، مسابقتی قیمتوں کی پیشکش کرتے ہیں تاکہ آپ کی سواریوں کو قابل رسائی بنایا جا سکے۔", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "Intaleq ایک رائیڈ شیئرنگ ایپ ہے جو آپ کی حفاظت اور سستی کو مدنظر رکھتے ہوئے ڈیزائن کی گئی ہے۔ ہم آپ کو آپ کے علاقے میں قابل اعتماد ڈرائیوروں سے جوڑتے ہیں۔", "Sign In by Apple": "ایپل کے ذریعے سائن ان کریں", "Sign In by Google": "گوگل کے ذریعے سائن ان کریں", "How do I request a ride?": "میں سواری کی درخواست کیسے کروں؟", "Step-by-step instructions on how to request a ride through the Intaleq app.": "Intaleq ایپ کے ذریعے سواری کی درخواست کرنے کے طریقے پر مرحلہ وار ہدایات۔", "What types of vehicles are available?": "کس قسم کی گاڑیاں دستیاب ہیں؟", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "Intaleq آپ کی ضروریات کے مطابق گاڑیوں کے مختلف آپشنز پیش کرتا ہے۔", "How can I pay for my ride?": "میں اپنی سواری کے لیے ادائیگی کیسے کر سکتا ہوں؟", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "Intaleq آپ کی سہولت کے لیے ادائیگی کے متعدد طریقے پیش کرتا ہے۔", "Can I cancel my ride?": "کیا میں اپنی سواری منسوخ کر سکتا ہوں؟", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "ہاں، آپ اپنی سواری منسوخ کر سکتے ہیں، لیکن براہ کرم نوٹ کریں کہ منسوخی کی فیس لاگو ہو سکتی ہے۔", "Driver Registration & Requirements": "ڈرائیور رجسٹریشن اور تقاضے", "How can I register as a driver?": "میں بطور ڈرائیور کیسے رجسٹر ہو سکتا ہوں؟", "What are the requirements to become a driver?": "ڈرائیور بننے کے لیے کیا تقاضے ہیں؟", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "ڈرائیور رجسٹریشن اور تقاضوں کے بارے میں معلومات کے لیے ہماری ویب سائٹ ملاحظہ کریں یا سپورٹ سے رابطہ کریں۔", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "Intaleq ان-ایپ چیٹ کی فعالیت فراہم کرتا ہے۔", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "Intaleq آپ کی حفاظت کو ترجیح دیتا ہے۔", "Frequently Questions": "اکثر پوچھے گئے سوالات", "User does not exist.": "صارف موجود نہیں ہے۔", "We need your phone number to contact you and to help you.": "ہمیں آپ سے رابطہ کرنے اور آپ کی مدد کرنے کے لیے آپ کے فون نمبر کی ضرورت ہے۔", "You will recieve code in sms message": "آپ کو SMS پیغام میں کوڈ موصول ہوگا", "Please enter": "براہ کرم درج کریں", "We need your phone number to contact you and to help you receive orders.": "ہمیں آپ سے رابطہ کرنے اور آرڈرز وصول کرنے میں آپ کی مدد کرنے کے لیے آپ کے فون نمبر کی ضرورت ہے۔", "The full name on your criminal record does not match the one on your driver's license. Please verify and provide the correct documents.": "آپ کے پولیس ریکارڈ پر موجود پورا نام آپ کے ڈرائیونگ لائسنس سے میل نہیں کھاتا۔", "The national number on your driver's license does not match the one on your ID document. Please verify and provide the correct documents.": "آپ کے ڈرائیونگ لائسنس پر قومی نمبر آپ کے شناختی کارڈ سے میل نہیں کھاتا۔", "Capture an Image of Your Criminal Record": "اپنے پولیس کلیئرنس کی تصویر لیں", "IssueDate": "اجراء کی تاریخ", "Capture an Image of Your car license front": "اپنی گاڑی کی رجسٹریشن کے سامنے کی تصویر لیں", "Capture an Image of Your ID Document front": "اپنے شناختی کارڈ کے سامنے کی تصویر لیں", "NationalID": "شناختی کارڈ نمبر", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "آپ Intaleq ایپ کو اپنے دوستوں کے ساتھ شیئر کر سکتے ہیں اور انعامات حاصل کر سکتے ہیں", "FullName": "پورا نام", "No invitation found yet!": "ابھی تک کوئی دعوت نامہ نہیں ملا!", "InspectionResult": "معائنے کا نتیجہ", "Criminal Record": "پولیس کلیئرنس", "The email or phone number is already registered.": "ای میل یا فون نمبر پہلے سے رجسٹرڈ ہے۔", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "ڈرائیور بننے کے لیے، آپ کو اپنا ڈرائیونگ لائسنس، شناختی دستاویز، اور گاڑی کی رجسٹریشن دستاویز اپ لوڈ کرنے کی ضرورت ہے۔", "Documents check": "دستاویزات کی جانچ", "Driver's License": "ڈرائیونگ لائسنس", "for your first registration!": "آپ کی پہلی رجسٹریشن کے لیے!", "Get it Now!": "ابھی حاصل کریں!", "before": "پہلے", "Code not approved": "کوڈ منظور نہیں ہوا", "3000 LE": "3000 روپیہ", "Do you have an invitation code from another driver?": "کیا آپ کے پاس کسی دوسرے ڈرائیور کا دعوتی کوڈ ہے؟", "Paste the code here": "کوڈ یہاں پیسٹ کریں", "No, I don't have a code": "نہیں، میرے پاس کوڈ نہیں ہے", "Code approved": "کوڈ منظور ہو گیا", "Install our app:": "ہماری ایپ انسٹال کریں:", "Invite another driver and both get a gift after he completes 100 trips!": "دوسرے ڈرائیور کو مدعو کریں اور اس کے 100 سفر مکمل کرنے کے بعد دونوں تحفہ حاصل کریں!", "Invite": "دعوت دیں", "Are you sure?": "کیا آپ کو یقین ہے؟", "This will delete all recorded files from your device.": "یہ آپ کے آلے سے تمام ریکارڈ شدہ فائلیں حذف کر دے گا۔", "Select a file": "فائل منتخب کریں", "Select a File": "ایک فائل منتخب کریں", "Delete": "حذف کریں", "attach audio of complain": "شکایت کی آڈیو منسلک کریں", "Phone Number Check": "فون نمبر چیک", "Drivers received orders": "ڈرائیوروں کو آرڈر موصول ہوئے", "No audio files recorded.": "کوئی آڈیو فائل ریکارڈ نہیں ہوئی۔", "This is for delivery or a motorcycle.": "یہ ڈیلیوری یا موٹر سائیکل کے لیے ہے۔", "Intaleq Reminder": "Intaleq یاد دہانی", "It's time to check the Intaleq app!": "Intaleq ایپ چیک کرنے کا وقت ہے!", "you must insert token code": "آپ کو ٹوکن کوڈ داخل کرنا ہوگا", "Something went wrong. Please try again.": "کچھ غلط ہو گیا۔ براہ کرم دوبارہ کوشش کریں۔", "Trip Details": "سفر کی تفصیلات", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "سیاق و سباق کوئی شکایت کی تفصیلات فراہم نہیں کرتا۔", "Submit Your Complaint": "اپنی شکایت جمع کرائیں", "Status": "حیثیت", "Choose from contact": "رابطے سے منتخب کریں", "attach correct audio": "درست آڈیو منسلک کریں", "be sure": "یقینی بنائیں", "Audio uploaded successfully.": "آڈیو کامیابی سے اپ لوڈ ہو گئی۔", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "جدید ترین کار ماڈلز کے متلاشی مسافروں کے لیے بہترین", "Share this code with your friends and earn rewards when they use it!": "اس کوڈ کو اپنے دوستوں کے ساتھ شیئر کریں اور انعامات حاصل کریں!", "Enter phone": "فون درج کریں", "complete, you can claim your gift": "مکمل، آپ اپنا تحفہ حاصل کر سکتے ہیں", "When": "جب", "Enter driver's phone": "ڈرائیور کا فون درج کریں", "Send Invite": "دعوت نامہ بھیجیں", "Show Invitations": "دعوت نامے دکھائیں", "License Type": "لائسنس کی قسم", "National Number": "قومی نمبر", "Name (Arabic)": "نام (اردو)", "Name (English)": "نام (انگریزی)", "Address": "پتہ", "Issue Date": "اجراء کی تاریخ", "Expiry Date": "میعاد ختم ہونے کی تاریخ", "License Categories": "لائسنس کے زمرے", "driver_license": "ڈرائیونگ لائسنس", "Capture an Image of Your Driver License": "اپنے ڈرائیونگ لائسنس کی تصویر لیں", "ID Documents Back": "شناختی دستاویزات کی پشت", "National ID": "شناختی کارڈ", "Occupation": "پیشہ", "Religion": "مذہب", "Full Name (Marital)": "پورا نام", "Expiration Date": "میعاد ختم ہونے کی تاریخ", "Capture an Image of Your ID Document Back": "اپنے شناختی کارڈ کی پشت کی تصویر لیں", "ID Documents Front": "شناختی دستاویزات کا سامنے کا حصہ", "First Name": "پہلا نام", "CardID": "کارڈ آئی ڈی", "Vehicle Details Front": "گاڑی کی تفصیلات سامنے", "Plate Number": "پلیٹ نمبر", "Owner Name": "مالک کا نام", "Vehicle Details Back": "گاڑی کی تفصیلات پیچھے", "Make": "میک", "Model": "ماڈل", "Year": "سال", "Chassis": "چیسس", "Color": "رنگ", "Displacement": "ڈسپلیسمنٹ", "Fuel": "ایندھن", "Tax Expiry Date": "ٹیکس کی میعاد ختم ہونے کی تاریخ", "Inspection Date": "معائنے کی تاریخ", "Capture an Image of Your car license back": "اپنی گاڑی کے لائسنس کی پشت کی تصویر لیں", "Capture an Image of Your Driver's License": "اپنے ڈرائیونگ لائسنس کی تصویر لیں", "Sign in with Google for easier email and name entry": "آسان ای میل اور نام کے اندراج کے لیے گوگل کے ساتھ سائن ان کریں", "You will choose allow all the time to be ready receive orders": "آپ آرڈرز وصول کرنے کے لیے ہر وقت اجازت کا انتخاب کریں گے", "Get to your destination quickly and easily.": "اپنی منزل پر تیزی اور آسانی سے پہنچیں۔", "Enjoy a safe and comfortable ride.": "محفوظ اور آرام دہ سواری کا لطف اٹھائیں۔", "Choose Language": "زبان منتخب کریں", "Pay with Wallet": "والٹ سے ادائیگی کریں", "Invalid MPIN": "غلط MPIN", "Invalid OTP": "غلط OTP", "Enter your email address": "اپنا ای میل ایڈریس درج کریں", "Please enter Your Email.": "براہ کرم اپنا ای میل درج کریں۔", "Enter your phone number": "اپنا فون نمبر درج کریں", "Please enter your phone number.": "براہ کرم اپنا فون نمبر درج کریں۔", "Please enter Your Password.": "براہ کرم اپنا پاس ورڈ درج کریں۔", "if you dont have account": "اگر آپ کا اکاؤنٹ نہیں ہے", "Register": "رجسٹر کریں", "Accept Ride's Terms & Review Privacy Notice": "سفر کی شرائط قبول کریں اور رازداری کا نوٹس دیکھیں", "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "نیچے 'میں متفق ہوں' کو منتخب کر کے، میں نے استعمال کی شرائط کا جائزہ لیا ہے اور ان سے اتفاق کرتا ہوں۔", "First name": "پہلا نام", "Enter your first name": "اپنا پہلا نام درج کریں", "Please enter your first name.": "براہ کرم اپنا پہلا نام درج کریں۔", "Last name": "آخری نام", "Enter your last name": "اپنا آخری نام درج کریں", "Please enter your last name.": "براہ کرم اپنا آخری نام درج کریں۔", "City": "شہر", "Please enter your City.": "براہ کرم اپنا شہر درج کریں۔", "Verify Email": "ای میل کی تصدیق کریں", "We sent 5 digit to your Email provided": "ہم نے آپ کے فراہم کردہ ای میل پر 5 ہندسے بھیجے ہیں", "5 digit": "5 ہندسے", "Send Verification Code": "تصدیقی کوڈ بھیجیں", "Your Ride Duration is ": "آپ کی سواری کا دورانیہ ہے ", "You will be thier in": "آپ وہاں ہوں گے میں", "You trip distance is": "آپ کے سفر کا فاصلہ ہے", "Fee is": "فیس ہے", "From : ": "سے: ", "To : ": "تک: ", "Add Promo": "پرومو شامل کریں", "Confirm Selection": "انتخاب کی تصدیق کریں", "distance is": "فاصلہ ہے", "Privacy Policy": "رازداری کی پالیسی", "Intaleq LLC": "Intaleq LLC", "Syria's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "پاکستان کی صف اول کی رائیڈ شیئرنگ سروس۔", "Intaleq is the first ride-sharing app in Syria, designed to connect you with the nearest drivers for a quick and convenient travel experience.": "Intaleq پہلی رائیڈ شیئرنگ ایپ ہے جو آپ کو قریب ترین ڈرائیوروں سے جوڑتی ہے۔", "Why Choose Intaleq?": "Intaleq کا انتخاب کیوں کریں؟", "Closest to You": "آپ کے قریب ترین", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "ہم آپ کو تیز تر پک اپ کے لیے قریب ترین ڈرائیوروں سے جوڑتے ہیں۔", "Uncompromising Security": "غیر متزلزل سیکیورٹی", "Lady Captains Available": "خواتین کپتان دستیاب ہیں", "Recorded Trips (Voice & AI Analysis)": "ریکارڈ شدہ سفر (آواز اور AI تجزیہ)", "Fastest Complaint Response": "تیز ترین شکایت کا جواب", "Our dedicated customer service team ensures swift resolution of any issues.": "ہماری کسٹمر سروس ٹیم مسائل کے فوری حل کو یقینی بناتی ہے۔", "Affordable for Everyone": "ہر ایک کے لیے سستا", "Frequently Asked Questions": "اکثر پوچھے گئے سوالات", "Getting Started": "شروع کرنا", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "بس ایپ کھولیں، منزل درج کریں اور 'سواری کی درخواست کریں' پر ٹیپ کریں۔", "Vehicle Options": "گاڑی کے اختیارات", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "Intaleq اکانومی، کمفرٹ اور لگژری سمیت مختلف آپشنز پیش کرتا ہے۔", "Payments": "ادائیگیاں", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "آپ نقد یا کارڈ کے ذریعے ادائیگی کر سکتے ہیں۔", "Ride Management": "سفر کا انتظام", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "جی ہاں، آپ منسوخ کر سکتے ہیں، لیکن منسوخی کی فیس لاگو ہو سکتی ہے۔", "For Drivers": "ڈرائیوروں کے لیے", "Driver Registration": "ڈرائیور رجسٹریشن", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "رجسٹر کرنے کے لیے ویب سائٹ ملاحظہ کریں یا سپورٹ سے رابطہ کریں۔", "Visit Website/Contact Support": "ویب سائٹ ملاحظہ کریں / سپورٹ سے رابطہ کریں", "Close": "بند کریں", "We are searching for the nearest driver": "ہم قریب ترین ڈرائیور تلاش کر رہے ہیں", "Communication": "مواصلات", "How do I communicate with the other party (passenger/driver)?": "میں دوسرے فریق سے کیسے بات کروں؟", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "سفر کی تصدیق ہونے پر آپ ایپ میں چیٹ کر سکتے ہیں۔", "Safety & Security": "حفاظت اور سیکیورٹی", "What safety measures does Intaleq offer?": "Intaleq کون سے حفاظتی اقدامات پیش کرتا ہے؟", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "Intaleq ڈرائیور کی تصدیق اور ٹرپ ٹریکنگ پیش کرتا ہے۔", "Enjoy competitive prices across all trip options, making travel accessible.": "مسابقتی قیمتوں کا لطف اٹھائیں۔", "Variety of Trip Choices": "سفر کے انتخاب کی اقسام", "Choose the trip option that perfectly suits your needs and preferences.": "وہ آپشن منتخب کریں جو آپ کے لیے موزوں ہو۔", "Your Choice, Our Priority": "آپ کا انتخاب، ہماری ترجیح", "Because we are near, you have the flexibility to choose the ride that works best for you.": "چونکہ ہم قریب ہیں، آپ کے پاس انتخاب کی لچک ہے۔", "duration is": "دورانیہ ہے", "Setting": "سیٹنگ", "Find answers to common questions": "عام سوالات کے جوابات تلاش کریں", "I don't need a ride anymore": "مجھے اب سواری کی ضرورت نہیں ہے", "I was just trying the application": "میں صرف ایپلیکیشن آزما رہا تھا", "No driver accepted my request": "کسی ڈرائیور نے میری درخواست قبول نہیں کی", "I added the wrong pick-up/drop-off location": "میں نے غلط لوکیشن شامل کی", "I don't have a reason": "میرے پاس کوئی وجہ نہیں ہے", "Can we know why you want to cancel Ride ?": "کیا ہم جان سکتے ہیں کہ آپ کیوں منسوخ کرنا چاہتے ہیں؟", "Add Payment Method": "ادائیگی کا طریقہ شامل کریں", "Ride Wallet": "سفر والٹ", "Payment Method": "ادائیگی کا طریقہ", "Type here Place": "یہاں جگہ لکھیں", "Are You sure to ride to": "کیا آپ واقعی جانا چاہتے ہیں", "Confirm": "تصدیق کریں", "You are Delete": "آپ حذف کر رہے ہیں", "Deleted": "حذف کر دیا گیا", "You Dont Have Any places yet !": "ابھی تک آپ کے پاس کوئی جگہ نہیں ہے!", "From : Current Location": "سے: موجودہ لوکیشن", "My Cared": "میرے کارڈز", "Add Card": "کارڈ شامل کریں", "Add Credit Card": "کریڈٹ کارڈ شامل کریں", "Please enter the cardholder name": "براہ کرم کارڈ ہولڈر کا نام درج کریں", "Please enter the expiry date": "براہ کرم میعاد ختم ہونے کی تاریخ درج کریں", "Please enter the CVV code": "براہ کرم CVV کوڈ درج کریں", "Go To Favorite Places": "پسندیدہ مقامات پر جائیں", "Go to this Target": "اس ہدف پر جائیں", "My Profile": "میرا پروفائل", "Are you want to go to this site": "کیا آپ اس جگہ جانا چاہتے ہیں", "MyLocation": "میری لوکیشن", "my location": "میری لوکیشن", "Target": "ہدف", "You Should choose rate figure": "آپ کو ریٹنگ کا انتخاب کرنا چاہیے", "Login Captin": "کپتان لاگ ان", "Register Captin": "کپتان رجسٹر", "Send Verfication Code": "تصدیقی کوڈ بھیجیں", "KM": "کلو میٹر", "End Ride": "سفر ختم کریں", "Minute": "منٹ", "Go to passenger Location now": "اب مسافر کی لوکیشن پر جائیں", "Duration of the Ride is ": "سفر کا دورانیہ ہے ", "Distance of the Ride is ": "سفر کا فاصلہ ہے ", "Name of the Passenger is ": "مسافر کا نام ہے ", "Hello this is Captain": "ہیلو یہ کپتان ہے", "Start the Ride": "سفر شروع کریں", "Please Wait If passenger want To Cancel!": "براہ کرم انتظار کریں اگر مسافر منسوخ کرنا چاہے!", "Total Duration:": "کل دورانیہ:", "Active Duration:": "فعال دورانیہ:", "Waiting for Captin ...": "کپتان کا انتظار...", "Age is ": "عمر ہے ", "Rating is ": "ریٹنگ ہے ", " to arrive you.": " آپ تک پہنچنے کے لیے۔", "Tariff": "ٹیرف", "Settings": "ترتیبات", "Feed Back": "فیڈ بیک", "Please enter a valid 16-digit card number": "براہ کرم درست 16 ہندسوں کا کارڈ نمبر درج کریں", "Add Phone": "فون شامل کریں", "Please enter a phone number": "براہ کرم فون نمبر درج کریں", "You dont Add Emergency Phone Yet!": "آپ نے ابھی تک ایمرجنسی فون شامل نہیں کیا!", "You will arrive to your destination after ": "آپ اپنی منزل پر پہنچیں گے بعد از ", "You can cancel Ride now": "آپ اب سواری منسوخ کر سکتے ہیں", "You Can cancel Ride After Captain did not come in the time": "اگر کپتان وقت پر نہیں آیا تو آپ سواری منسوخ کر سکتے ہیں", "If you in Car Now. Press Start The Ride": "اگر آپ کار میں ہیں تو سفر شروع کریں دبائیں", "You Dont Have Any amount in": "آپ کے پاس کوئی رقم نہیں ہے میں", "Wallet!": "والٹ!", "You Have": "آپ کے پاس ہے", "Save Credit Card": "کریڈٹ کارڈ محفوظ کریں", "Show Promos": "پروموز دکھائیں", "10 and get 4% discount": "10 اور 4% ڈسکاؤنٹ حاصل کریں", "20 and get 6% discount": "20 اور 6% ڈسکاؤنٹ حاصل کریں", "40 and get 8% discount": "40 اور 8% ڈسکاؤنٹ حاصل کریں", "100 and get 11% discount": "100 اور 11% ڈسکاؤنٹ حاصل کریں", "Pay with Your PayPal": "اپنے پے پال سے ادائیگی کریں", "You will choose one of above !": "آپ کو اوپر والوں میں سے ایک کا انتخاب کرنا ہوگا!", "Edit Profile": "پروفائل میں ترمیم کریں", "Copy this Promo to use it in your Ride!": "اپنی سواری میں استعمال کرنے کے لیے اس پرومو کو کاپی کریں!", "To change some Settings": "کچھ ترتیبات تبدیل کرنے کے لیے", "Order Request Page": "آرڈر کی درخواست کا صفحہ", "Rouats of Trip": "سفر کے راستے", "Passenger Name is ": "مسافر کا نام ہے ", "Total From Passenger is ": "مسافر سے کل: ", "Duration To Passenger is ": "مسافر تک دورانیہ ہے ", "Distance To Passenger is ": "مسافر تک فاصلہ ہے ", "Total For You is ": "آپ کے لیے کل: ", "Distance is ": "فاصلہ ہے ", " KM": " کلو میٹر", "Duration of Trip is ": "سفر کا دورانیہ ہے ", " Minutes": " منٹ", "Apply Order": "آرڈر لاگو کریں", "Refuse Order": "آرڈر مسترد کریں", "Rate Captain": "کپتان کو ریٹ کریں", "Enter your Note": "اپنا نوٹ درج کریں", "Type something...": "کچھ لکھیں...", "Submit rating": "ریٹنگ جمع کرائیں", "Rate Passenger": "مسافر کو ریٹ کریں", "Ride Summary": "سواری کا خلاصہ", "welcome_message": "Intaleq میں خوش آمدید!", "app_description": "Intaleq ایک محفوظ، قابل اعتماد، اور قابل رسائی رائیڈ ہیلنگ ایپ ہے۔", "get_to_destination": "اپنی منزل پر تیزی اور آسانی سے پہنچیں۔", "get_a_ride": "Intaleq کے ساتھ، آپ منٹوں میں منزل تک سواری حاصل کر سکتے ہیں۔", "safe_and_comfortable": "محفوظ اور آرام دہ سواری کا لطف اٹھائیں۔", "committed_to_safety": "Intaleq حفاظت کے لیے پرعزم ہے۔", "your ride is Accepted": "آپ کی سواری قبول کر لی گئی ہے", "Driver is waiting at pickup.": "ڈرائیور پک اپ پر انتظار کر رہا ہے۔", "Driver is on the way": "ڈرائیور راستے میں ہے", "Contact Options": "رابطے کے اختیارات", "Send a custom message": "حسب ضرورت پیغام بھیجیں", "Type your message": "اپنا پیغام ٹائپ کریں", "I will go now": "میں اب جاؤں گا", "You Have Tips": "آپ کے پاس ٹپس ہیں", " tips\nTotal is": " ٹپس\nکل ہے", "Your fee is ": "آپ کی فیس ہے ", "Do you want to pay Tips for this Driver": "کیا آپ اس ڈرائیور کے لیے ٹپ ادا کرنا چاہتے ہیں", "Tip is ": "ٹپ ہے ", "Are you want to wait drivers to accept your order": "کیا آپ چاہتے ہیں کہ ڈرائیورز آپ کا آرڈر قبول کرنے کا انتظار کریں", "This price is fixed even if the route changes for the driver.": "یہ قیمت مقررہ ہے چاہے ڈرائیور کا راستہ بدل جائے۔", "The price may increase if the route changes.": "اگر راستہ بدل گیا تو قیمت بڑھ سکتی ہے۔", "The captain is responsible for the route.": "کپتان راستے کا ذمہ دار ہے۔", "We are search for nearst driver": "ہم قریبی ڈرائیور تلاش کر رہے ہیں", "Your order is being prepared": "آپ کا آرڈر تیار ہو رہا ہے", "The drivers are reviewing your request": "ڈرائیورز آپ کی درخواست کا جائزہ لے رہے ہیں", "Your order sent to drivers": "آپ کا آرڈر ڈرائیورز کو بھیج دیا گیا", "You can call or record audio of this trip": "آپ اس سفر کی کال یا آڈیو ریکارڈ کر سکتے ہیں", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "سفر شروع ہو گیا ہے! بلا جھجھک ایمرجنسی نمبرز سے رابطہ کریں، اپنا سفر شیئر کریں، یا سفر کے لیے وائس ریکارڈنگ فعال کریں۔", "Camera Access Denied.": "کیمرے تک رسائی مسترد کر دی گئی۔", "Open Settings": "ترتیبات کھولیں", "GPS Required Allow !.": "GPS کی اجازت درکار ہے!.", "Your Account is Deleted": "آپ کا اکاؤنٹ حذف کر دیا گیا ہے", "Are you sure to delete your account?": "کیا آپ واقعی اپنا اکاؤنٹ حذف کرنا چاہتے ہیں؟", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "آپ کا ڈیٹا 2 ہفتوں بعد مٹا دیا جائے گا\nاور آپ 1 ماہ بعد ایپ استعمال کرنے کے لیے واپس نہیں آ سکیں گے ", "Enter Your First Name": "اپنا پہلا نام درج کریں", "Are you Sure to LogOut?": "کیا آپ واقعی لاگ آؤٹ کرنا چاہتے ہیں؟", "Email Wrong": "ای میل غلط ہے", "Email you inserted is Wrong.": "جو ای میل آپ نے درج کیا ہے وہ غلط ہے۔", "You have finished all times ": "آپ نے تمام اوقات ختم کر دیے ہیں ", "if you want help you can email us here": "اگر آپ مدد چاہتے ہیں تو آپ ہمیں یہاں ای میل کر سکتے ہیں", "Thanks": "شکریہ", "Email Us": "ہمیں ای میل کریں", "I cant register in your app in face detection ": "میں چہرے کی شناخت میں آپ کی ایپ میں رجسٹر نہیں ہو سکتا ", "Hi": "ہیلو", "No face detected": "کوئی چہرہ شناخت نہیں ہوا", "Image detecting result is ": "تصویر کی شناخت کا نتیجہ ہے ", "from 3 times Take Attention": "3 بار سے توجہ دیں", "Be sure for take accurate images please\nYou have": "براہ کرم درست تصاویر لینے کا یقین کریں\nآپ کے پاس ہے", "image verified": "تصویر کی تصدیق ہو گئی", "Next": "اگلا", "There is no help Question here": "یہاں کوئی مدد کا سوال نہیں ہے", "You dont have Points": "آپ کے پاس پوائنٹس نہیں ہیں", "You Are Stopped For this Day !": "آپ اس دن کے لیے روک دیے گئے ہیں!", "You must be charge your Account": "آپ کو اپنا اکاؤنٹ چارج کرنا ہوگا", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "آپ نے اس دن 3 سواریوں سے انکار کر دیا یہی وجہ ہے \nکل ملتے ہیں!", "Recharge my Account": "میرا اکاؤنٹ ریچارج کریں", "Ok , See you Tomorrow": "ٹھیک ہے، کل ملتے ہیں", "You are Stopped": "آپ رکے ہوئے ہیں", "Connected": "منسلک", "Not Connected": "منسلک نہیں", "Your are far from passenger location": "آپ مسافر کی لوکیشن سے دور ہیں", "go to your passenger location before\nPassenger cancel trip": "مسافر کے سفر منسوخ کرنے سے پہلے\nاپنی مسافر کی لوکیشن پر جائیں", "You will get cost of your work for this trip": "آپ کو اس سفر کے لیے اپنے کام کی قیمت ملے گی", " in your wallet": " آپ کے والٹ میں", "you gain": "آپ نے حاصل کیا", "Order Cancelled by Passenger": "آرڈر مسافر کی طرف سے منسوخ کر دیا گیا", "Feedback data saved successfully": "فیڈ بیک ڈیٹا کامیابی سے محفوظ ہو گیا", "No Promo for today .": "آج کے لیے کوئی پرومو نہیں ہے۔", "Select your destination": "اپنی منزل منتخب کریں", "Search for your Start point": "اپنا نقطہ آغاز تلاش کریں", "Search for waypoint": "راستے کا نقطہ تلاش کریں", "Current Location": "موجودہ لوکیشن", "Add Location 1": "لوکیشن 1 شامل کریں", "You must Verify email !.": "آپ کو ای میل کی تصدیق کرنی ہوگی!", "Cropper": "کروپر", "Saved Sucssefully": "کامیابی سے محفوظ ہو گیا", "Select Date": "تاریخ منتخب کریں", "Birth Date": "پیدائش کی تاریخ", "Ok": "ٹھیک ہے", "the 500 points equal 30 JOD": "500 پوائنٹس 30 روپے کے برابر ہیں", "the 500 points equal 30 JOD for you \nSo go and gain your money": "500 پوائنٹس آپ کے لیے 30 روپے کے برابر ہیں \nتو جائیں اور اپنے پیسے کمائیں", "token updated": "ٹوکن اپ ڈیٹ ہو گیا", "Add Location 2": "لوکیشن 2 شامل کریں", "Add Location 3": "لوکیشن 3 شامل کریں", "Add Location 4": "لوکیشن 4 شامل کریں", "Waiting for your location": "آپ کی لوکیشن کا انتظار ہے", "Search for your destination": "اپنی منزل تلاش کریں", "Hi! This is": "ہیلو! یہ ہے", " I am using": " میں استعمال کر رہا ہوں", " to ride with": " سواری کرنے کے لیے ساتھ", " as the driver.": " بطور ڈرائیور۔", "is driving a ": "چلا رہا ہے ایک ", " with license plate ": " لائسنس پلیٹ کے ساتھ ", " I am currently located at ": " میں فی الحال یہاں واقع ہوں ", "Please go to Car now ": "براہ کرم اب کار کے پاس جائیں ", "You will receive a code in WhatsApp Messenger": "آپ کو واٹس ایپ میسنجر میں ایک کوڈ موصول ہوگا", "If you need assistance, contact us": "اگر آپ کو مدد کی ضرورت ہو تو ہم سے رابطہ کریں", "Promo Ended": "پرومو ختم ہو گیا", "Enter the promo code and get": "پرومو کوڈ درج کریں اور حاصل کریں", "DISCOUNT": "ڈسکاؤنٹ", "No wallet record found": "کوئی والٹ ریکارڈ نہیں ملا", "for": "کے لیے", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "Intaleq سب سے محفوظ رائیڈ شیئرنگ ایپ ہے جو کپتانوں اور مسافروں دونوں کے لیے بہت سی خصوصیات متعارف کراتی ہے۔", "You can contact us during working hours from 12:00 - 19:00.": "آپ ہم سے دفتری اوقات 12:00 - 19:00 کے دوران رابطہ کر سکتے ہیں۔", "Choose a contact option": "رابطے کا اختیار منتخب کریں", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "کام کا وقت 12:00 - 19:00 ہے۔\nآپ واٹس ایپ پیغام یا ای میل بھیج سکتے ہیں۔", "Promo code copied to clipboard!": "پرومو کوڈ کلپ بورڈ پر کاپی ہو گیا!", "Copy Code": "کوڈ کاپی کریں", "Your invite code was successfully applied!": "آپ کا دعوتی کوڈ کامیابی سے لاگو ہو گیا!", "Payment Options": "ادائیگی کے اختیارات", "wait 1 minute to receive message": "پیغام موصول ہونے کے لیے 1 منٹ انتظار کریں", "You have copied the promo code.": "آپ نے پرومو کوڈ کاپی کر لیا ہے۔", "Select Payment Amount": "ادائیگی کی رقم منتخب کریں", "The promotion period has ended.": "پروموشن کی مدت ختم ہو گئی ہے۔", "Promo Code Accepted": "پرومو کوڈ قبول ہو گیا", "Tap on the promo code to copy it!": "اسے کاپی کرنے کے لیے پرومو کوڈ پر ٹیپ کریں!", "Lowest Price Achieved": "کم ترین قیمت حاصل کی گئی", "Cannot apply further discounts.": "مزید چھوٹ لاگو نہیں کی جا سکتی۔", "Promo Already Used": "پرومو پہلے ہی استعمال ہو چکا ہے", "Invitation Used": "دعوت نامہ استعمال ہو چکا ہے", "You have already used this promo code.": "آپ پہلے ہی یہ پرومو کوڈ استعمال کر چکے ہیں۔", "Insert Your Promo Code": "اپنا پرومو کوڈ درج کریں", "Enter promo code here": "پرومو کوڈ یہاں درج کریں", "Please enter a valid promo code": "براہ کرم ایک درست پرومو کوڈ درج کریں", "Awfar Car": "سستی کار", "Old and affordable, perfect for budget rides.": "پرانی اور سستی، بجٹ سواریوں کے لیے بہترین۔", " If you need to reach me, please contact the driver directly at": " اگر آپ کو مجھ تک پہنچنے کی ضرورت ہو تو براہ کرم ڈرائیور سے براہ راست رابطہ کریں", "No Car or Driver Found in your area.": "آپ کے علاقے میں کوئی کار یا ڈرائیور نہیں ملا۔", "Please Try anther time ": "براہ کرم کسی اور وقت کوشش کریں ", "There no Driver Aplly your order sorry for that ": "کوئی ڈرائیور آپ کا آرڈر اپلائی نہیں کر رہا اس کے لیے معذرت ", "Trip Cancelled": "سفر منسوخ ہو گیا", "The Driver Will be in your location soon .": "ڈرائیور جلد ہی آپ کی لوکیشن پر ہوگا۔", "The distance less than 500 meter.": "فاصلہ 500 میٹر سے کم ہے۔", "Promo End !": "پرومو ختم!", "There is no notification yet": "ابھی تک کوئی اطلاع نہیں ہے", "Use Touch ID or Face ID to confirm payment": "ادائیگی کی تصدیق کے لیے ٹچ آئی ڈی یا فیس آئی ڈی استعمال کریں", "Contact us for any questions on your order.": "اپنے آرڈر پر کسی بھی سوال کے لیے ہم سے رابطہ کریں۔", "Pyament Cancelled .": "ادائیگی منسوخ ہو گئی۔", "type here": "یہاں ٹائپ کریں", "Scan Driver License": "ڈرائیونگ لائسنس اسکین کریں", "Please put your licence in these border": "براہ کرم اپنا لائسنس ان حدود میں رکھیں", "Camera not initialized yet": "کیمرہ ابھی تک شروع نہیں ہوا", "Take Image": "تصویر لیں", "AI Page": "AI صفحہ", "Take Picture Of ID Card": "شناختی کارڈ کی تصویر لیں", "Take Picture Of Driver License Card": "ڈرائیونگ لائسنس کارڈ کی تصویر لیں", "We are process picture please wait ": "ہم تصویر پر کارروائی کر رہے ہیں براہ کرم انتظار کریں ", "There is no data yet.": "ابھی تک کوئی ڈیٹا نہیں ہے۔", "Name :": "نام :", "Drivers License Class: ": "ڈرائیونگ لائسنس کلاس: ", "Document Number: ": "دستاویز نمبر: ", "Address: ": "پتہ: ", "Height: ": "اونچائی: ", "Expiry Date: ": "میعاد ختم ہونے کی تاریخ: ", "Date of Birth: ": "پیدائش کی تاریخ: ", "You can't continue with us .\nYou should renew Driver license": "آپ ہمارے ساتھ جاری نہیں رہ سکتے ۔\nآپ کو ڈرائیور لائسنس کی تجدید کرنی چاہیے", "Detect Your Face ": "اپنا چہرہ شناخت کریں ", "Go to next step\nscan Car License.": "اگلے قدم پر جائیں\nکار لائسنس اسکین کریں۔", "Name in arabic": "عربی میں نام", "Drivers License Class": "ڈرائیونگ لائسنس کلاس", "Selected Date": "منتخب کردہ تاریخ", "Select Time": "وقت منتخب کریں", "Selected Time": "منتخب کردہ وقت", "Selected Date and Time": "منتخب کردہ تاریخ اور وقت", "Lets check Car license ": "آئیے کار لائسنس چیک کریں ", "Car": "کار", "Plate": "پلیٹ", "Rides": "سواریاں", "Selected driver": "منتخب ڈرائیور", "Lets check License Back Face": "آئیے لائسنس کے پچھلے حصے کو چیک کریں", "Car License Card": "کار لائسنس کارڈ", "No image selected yet": "ابھی تک کوئی تصویر منتخب نہیں کی گئی", "Made :": "بنایا گیا :", "model :": "ماڈل :", "VIN :": "VIN :", "year :": "سال :", "ُExpire Date": "میعاد ختم ہونے کی تاریخ", "Login Driver": "لاگ ان ڈرائیور", "Password must br at least 6 character.": "پاس ورڈ کم از کم 6 حروف کا ہونا چاہیے۔", "if you don't have account": "اگر آپ کا اکاؤنٹ نہیں ہے", "Here recorded trips audio": "یہاں ریکارڈ شدہ دوروں کی آڈیو", "Register as Driver": "بطور ڈرائیور رجسٹر کریں", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "نیچے \"میں متفق ہوں\" کو منتخب کر کے، میں نے جائزہ لیا ہے اور استعمال کی شرائط سے اتفاق کرتا ہوں اور تسلیم کرتا ہوں ", "Log Out Page": "لاگ آؤٹ صفحہ", "Log Off": "لاگ آف", "Register Driver": "ڈرائیور رجسٹر کریں", "Verify Email For Driver": "ڈرائیور کے لیے ای میل کی تصدیق کریں", "Admin DashBoard": "ایڈمن ڈیش بورڈ", "Your name": "آپ کا نام", "your ride is applied": "آپ کی سواری لاگو ہو گئی ہے", "H and": "H اور", "JOD": "روپیہ", "m": "منٹ", "We search nearst Driver to you": "ہم آپ کے قریب ترین ڈرائیور کو تلاش کرتے ہیں", "please wait till driver accept your order": "براہ کرم انتظار کریں جب تک ڈرائیور آپ کا آرڈر قبول نہ کرے", "No accepted orders? Try raising your trip fee to attract riders.": "کوئی قبول شدہ آرڈر نہیں؟ سواروں کو راغب کرنے کے لیے اپنی ٹرپ فیس بڑھانے کی کوشش کریں۔", "You should select one": "آپ کو ایک منتخب کرنا چاہیے", "The driver accept your order for": "ڈرائیور آپ کا آرڈر قبول کرتا ہے برائے", "The driver on your way": "ڈرائیور آپ کے راستے میں ہے", "Total price from ": "سے کل قیمت ", "Order Details Intaleq": "آرڈر کی تفصیلات Intaleq", "Selected file:": "منتخب کردہ فائل:", "Your trip cost is": "آپ کے سفر کی قیمت ہے", "this will delete all files from your device": "یہ آپ کے آلے سے تمام فائلیں حذف کر دے گا", "Exclusive offers and discounts always with the Intaleq app": "Intaleq ایپ کے ساتھ ہمیشہ خصوصی پیشکشیں اور چھوٹ", "Submit Question": "سوال جمع کرائیں", "Please enter your Question.": "براہ کرم اپنا سوال درج کریں۔", "Help Details": "مدد کی تفصیلات", "No trip yet found": "ابھی تک کوئی سفر نہیں ملا", "No Response yet.": "ابھی تک کوئی جواب نہیں ملا۔", " You Earn today is ": " آپ کی آج کی کمائی ہے ", " You Have in": " آپ کے پاس ہے میں", "Total points is ": "کل پوائنٹس ہیں ", "Total Connection Duration:": "کل کنکشن کا دورانیہ:", "Passenger name : ": "مسافر کا نام : ", "Cost Of Trip IS ": "سفر کی قیمت ہے ", "Arrival time": "پہنچنے کا وقت", "arrival time to reach your point": "آپ کے پوائنٹ تک پہنچنے کا وقت", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Intaleq اور سکوٹر کے دوروں کے لیے، قیمت کا حساب متحرک طور پر لگایا جاتا ہے۔ کمفرٹ ٹرپس کے لیے، قیمت وقت اور فاصلے پر مبنی ہوتی ہے۔", "Hello this is Driver": "ہیلو یہ ڈرائیور ہے", "Is the Passenger in your Car ?": "کیا مسافر آپ کی کار میں ہے؟", "Please wait for the passenger to enter the car before starting the trip.": "براہ کرم سفر شروع کرنے سے پہلے مسافر کے کار میں داخل ہونے کا انتظار کریں۔", "No ,still Waiting.": "نہیں، ابھی بھی انتظار کر رہا ہوں۔", "I arrive you": "میں آپ کے پاس پہنچ گیا", "I Arrive your site": "میں آپ کی لوکیشن پر پہنچ گیا", "You are not in near to passenger location": "آپ مسافر کی لوکیشن کے قریب نہیں ہیں", "please go to picker location exactly": "براہ کرم بالکل اسی لوکیشن پر جائیں جہاں سے اٹھانا ہے", "You Can Cancel Trip And get Cost of Trip From": "آپ سفر منسوخ کر سکتے ہیں اور سفر کی قیمت حاصل کر سکتے ہیں سے", "Are you sure to cancel?": "کیا آپ منسوخ کرنے کے لیے یقینی ہیں؟", "Insert Emergincy Number": "ایمرجنسی نمبر درج کریں", "Best choice for comfort car and flexible route and stops point": "آرام دہ کار اور لچکدار راستے اور اسٹاپس پوائنٹ کے لیے بہترین انتخاب", "Insert": "درج کریں", "This is for scooter or a motorcycle.": "یہ سکوٹر یا موٹر سائیکل کے لیے ہے۔", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "یہ سفر آپ کے نقطہ آغاز سے سیدھا آپ کی منزل تک ایک مقررہ قیمت پر جاتا ہے۔ ڈرائیور کو منصوبہ بند راستے کی پیروی کرنی چاہیے۔", "You can decline a request without any cost": "آپ بغیر کسی قیمت کے درخواست مسترد کر سکتے ہیں", "Perfect for adventure seekers who want to experience something new and exciting": "ان مہم جوئی کرنے والوں کے لیے بہترین جو کچھ نیا اور دلچسپ تجربہ کرنا چاہتے ہیں", "My current location is:": "میری موجودہ لوکیشن ہے:", "and I have a trip on": "اور میرے پاس ایک سفر ہے پر", "App with Passenger": "مسافر کے ساتھ ایپ", "You will be pay the cost to driver or we will get it from you on next trip": "آپ ڈرائیور کو قیمت ادا کریں گے یا ہم اگلے سفر پر آپ سے لے لیں گے", "Trip has Steps": "سفر کے مراحل ہیں", "Distance from Passenger to destination is ": "مسافر سے منزل تک کا فاصلہ ہے ", "price is": "قیمت ہے", "This ride type does not allow changes to the destination or additional stops": "اس قسم کی سواری منزل میں تبدیلیوں یا اضافی اسٹاپس کی اجازت نہیں دیتی", "This price may be changed": "یہ قیمت تبدیل ہو سکتی ہے", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "کوئی سم کارڈ نہیں، کوئی مسئلہ نہیں! ہماری ایپ کے ذریعے براہ راست اپنے ڈرائیور کو کال کریں۔", "This ride type allows changes, but the price may increase": "اس قسم کی سواری تبدیلیوں کی اجازت دیتی ہے، لیکن قیمت بڑھ سکتی ہے", "Select one message": "ایک پیغام منتخب کریں", "I'm waiting for you": "میں آپ کا انتظار کر رہا ہوں", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "ہم نے محسوس کیا کہ Intaleq 100 کلومیٹر فی گھنٹہ سے تجاوز کر رہا ہے۔ براہ کرم اپنی حفاظت کے لیے رفتار کم کریں۔", "Warning: Intaleqing detected!": "انتباہ: تیز رفتاری کا پتہ چلا!", "Please help! Contact me as soon as possible.": "براہ کرم مدد کریں! جتنی جلدی ہو سکے مجھ سے رابطہ کریں۔", "Share Trip Details": "سفر کی تفصیلات شیئر کریں", "Car Plate is ": "کار پلیٹ ہے ", "the 300 points equal 300 L.E for you \nSo go and gain your money": "300 پوائنٹس آپ کے لیے 300 روپے کے برابر ہیں \nتو جائیں اور اپنے پیسے کمائیں", "the 300 points equal 300 L.E": "300 پوائنٹس 300 روپے کے برابر ہیں", "The payment was not approved. Please try again.": "ادائیگی منظور نہیں ہوئی۔ براہ کرم دوبارہ کوشش کریں۔", "Payment Failed": "ادائیگی ناکام ہو گئی", "This is a scheduled notification.": "یہ ایک طے شدہ اطلاع ہے۔", "An error occurred during the payment process.": "ادائیگی کے عمل کے دوران ایک خرابی پیش آ گئی۔", "The payment was approved.": "ادائیگی منظور ہو گئی۔", "Payment Successful": "ادائیگی کامیاب", "No ride found yet": "ابھی تک کوئی سواری نہیں ملی", "Accept Order": "آرڈر قبول کریں", "Bottom Bar Example": "باٹم بار مثال", "Driver phone": "ڈرائیور کا فون", "Statistics": "شماریات", "Origin": "اصل", "Destination": "منزل", "Driver Name": "ڈرائیور کا نام", "Driver Car Plate": "ڈرائیور کار پلیٹ", "Available for rides": "سواریوں کے لیے دستیاب", "Scan Id": "آئی ڈی اسکین کریں", "Camera not initilaized yet": "کیمرہ ابھی تک شروع نہیں ہوا", "Scan ID MklGoogle": "آئی ڈی MklGoogle اسکین کریں", "Language": "زبان", "Jordan": "اردن", "USA": "امریکہ", "Egypt": "مصر", "Turkey": "ترکی", "Saudi Arabia": "سعودی عرب", "Qatar": "قطر", "Bahrain": "بحرین", "Kuwait": "کویت", "But you have a negative salary of": "لیکن آپ کی منفی تنخواہ ہے", "Promo Code": "پرومو کوڈ", "Your trip distance is": "آپ کے سفر کا فاصلہ ہے", "Enter promo code": "پرومو کوڈ درج کریں", "You have promo!": "آپ کے پاس پرومو ہے!", "Cost Duration": "لاگت کا دورانیہ", "Duration is": "دورانیہ ہے", "Leave": "چھوڑیں", "Join": "شامل ہوں", "Heading your way now. Please be ready.": "اب آپ کے راستے کی طرف بڑھ رہا ہوں۔ براہ کرم تیار رہیں۔", "Approaching your area. Should be there in 3 minutes.": "آپ کے علاقے کے قریب پہنچ رہا ہوں۔ 3 منٹ میں وہاں ہونا چاہیے۔", "There's heavy traffic here. Can you suggest an alternate pickup point?": "یہاں ٹریفک بہت زیادہ ہے۔ کیا آپ متبادل پک اپ پوائنٹ تجویز کر سکتے ہیں؟", "This ride is already taken by another driver.": "یہ سواری پہلے ہی کسی اور ڈرائیور نے لے لی ہے۔", "You Should be select reason.": "آپ کو وجہ منتخب کرنی چاہیے۔", "Waiting for Driver ...": "ڈرائیور کا انتظار...", "Latest Recent Trip": "تازہ ترین حالیہ سفر", "from your list": "آپ کی فہرست سے", "Do you want to change Work location": "کیا آپ کام کی جگہ تبدیل کرنا چاہتے ہیں", "Do you want to change Home location": "کیا آپ گھر کی لوکیشن تبدیل کرنا چاہتے ہیں", "We Are Sorry That we dont have cars in your Location!": "ہم معذرت خواہ ہیں کہ ہمارے پاس آپ کی لوکیشن میں کاریں نہیں ہیں!", "Choose from Map": "نقشے سے منتخب کریں", "Pick your ride location on the map - Tap to confirm": "نقشے پر اپنی سواری کی لوکیشن منتخب کریں - تصدیق کے لیے ٹیپ کریں", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "Intaleq ایک رائیڈ ہیلنگ ایپ ہے جو محفوظ، قابل اعتماد اور قابل رسائی ہے۔", "With Intaleq, you can get a ride to your destination in minutes.": "Intaleq کے ساتھ، آپ منٹوں میں اپنی منزل تک سواری حاصل کر سکتے ہیں۔", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "Intaleq حفاظت کے لیے پرعزم ہے، اور ہمارے تمام کپتانوں کی احتیاط سے جانچ پڑتال کی جاتی ہے اور پس منظر کی جانچ کی جاتی ہے۔", "Pick from map": "نقشے سے منتخب کریں", "No Car in your site. Sorry!": "آپ کی جگہ پر کوئی کار نہیں۔ معذرت!", "Nearest Car for you about ": "آپ کے لیے قریب ترین کار تقریباً ", "From :": "سے :", "Get Details of Trip": "سفر کی تفصیلات حاصل کریں", "If you want add stop click here": "اگر آپ اسٹاپ شامل کرنا چاہتے ہیں تو یہاں کلک کریں", "Where you want go ": "آپ کہاں جانا چاہتے ہیں ", "My Card": "میرا کارڈ", "Start Record": "ریکارڈ شروع کریں", "History of Trip": "سفر کی تاریخ", "Helping Center": "ہیلپنگ سینٹر", "Record saved": "ریکارڈ محفوظ ہو گیا", "Trips recorded": "دورے ریکارڈ کیے گئے", "Select Your Country": "اپنا ملک منتخب کریں", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "یہ یقینی بنانے کے لیے کہ آپ کو اپنی لوکیشن کے لیے درست ترین معلومات ملیں، براہ کرم نیچے اپنا ملک منتخب کریں۔", "Are you sure to delete recorded files": "کیا آپ واقعی ریکارڈ شدہ فائلیں حذف کرنا چاہتے ہیں", "Select recorded trip": "ریکارڈ شدہ سفر منتخب کریں", "Card Number": "کارڈ نمبر", "Hi, Where to ": "ہیلو، کہاں جانا ہے ", "Pick your destination from Map": "نقشے سے اپنی منزل منتخب کریں", "Add Stops": "اسٹاپس شامل کریں", "Get Direction": "سمت حاصل کریں", "Add Location": "لوکیشن شامل کریں", "Switch Rider": "رائیڈر تبدیل کریں", "You will arrive to your destination after timer end.": "ٹائمر ختم ہونے کے بعد آپ اپنی منزل پر پہنچ جائیں گے۔", "You can cancel trip": "آپ سفر منسوخ کر سکتے ہیں", "The driver waitting you in picked location .": "ڈرائیور منتخب جگہ پر آپ کا انتظار کر رہا ہے۔", "Pay with Your": "اپنے ساتھ ادا کریں", "Pay with Credit Card": "کریڈٹ کارڈ سے ادائیگی کریں", "Show Promos to Charge": "چارج کرنے کے لیے پروموز دکھائیں", "Point": "پوائنٹ", "How many hours would you like to wait?": "آپ کتنے گھنٹے انتظار کرنا چاہیں گے؟", "Driver Wallet": "ڈرائیور والٹ", "Choose between those Type Cars": "ان قسم کی کاروں کے درمیان انتخاب کریں", "hour": "گھنٹہ", "Select Waiting Hours": "انتظار کے اوقات منتخب کریں", "Total Points is": "کل پوائنٹس ہیں", "You will receive a code in SMS message": "آپ کو ایس ایم ایس پیغام میں ایک کوڈ موصول ہوگا", "Done": "ہو گیا", "Total Budget from trips is ": "سفروں سے کل بجٹ ہے ", "Total Amount:": "کل رقم:", "Total Budget from trips by\nCredit card is ": "کریڈٹ کارڈ کے ذریعے سفروں سے\nکل بجٹ ہے ", "This amount for all trip I get from Passengers": "یہ رقم تمام سفر کے لیے جو مجھے مسافروں سے ملتی ہے", "Pay from my budget": "میرے بجٹ سے ادا کریں", "This amount for all trip I get from Passengers and Collected For me in": "یہ رقم تمام سفر کے لیے جو مجھے مسافروں سے ملتی ہے اور میرے لیے جمع کی گئی ہے", "You can buy points from your budget": "آپ اپنے بجٹ سے پوائنٹس خرید سکتے ہیں", "insert amount": "رقم درج کریں", "You can buy Points to let you online\nby this list below": "آپ آن لائن رہنے کے لیے پوائنٹس خرید سکتے ہیں\nنیچے دی گئی اس فہرست کے ذریعے", "Create Wallet to receive your money": "اپنے پیسے وصول کرنے کے لیے والٹ بنائیں", "Enter your feedback here": "اپنا فیڈ بیک یہاں درج کریں", "Please enter your feedback.": "براہ کرم اپنا فیڈ بیک درج کریں۔", "Feedback": "فیڈ بیک", "Submit ": "جمع کرائیں ", "Click here to Show it in Map": "اسے نقشے میں دکھانے کے لیے یہاں کلک کریں", "Canceled": "منسوخ", "No I want": "نہیں میں چاہتا ہوں", "Email is": "ای میل ہے:", "Phone Number is": "فون نمبر ہے:", "Date of Birth is": "پیدائش کی تاریخ ہے:", "Sex is ": "جنس ہے: ", "Car Details": "کار کی تفصیلات", "VIN is": "VIN ہے:", "Color is ": "رنگ ہے: ", "Make is ": "میک ہے: ", "Model is": "ماڈل ہے:", "Year is": "سال ہے:", "Expiration Date ": "میعاد ختم ہونے کی تاریخ: ", "Edit Your data": "اپنے ڈیٹا میں ترمیم کریں", "write vin for your car": "اپنی کار کے لیے vin لکھیں", "VIN": "VIN", "Device Change Detected": "ڈیوائس کی تبدیلی کا پتہ چلا", "Please verify your identity": "براہ کرم اپنی شناخت کی تصدیق کریں", "write Color for your car": "اپنی کار کے لیے رنگ لکھیں", "write Make for your car": "اپنی کار کے لیے میک لکھیں", "write Model for your car": "اپنی کار کے لیے ماڈل لکھیں", "write Year for your car": "اپنی کار کے لیے سال لکھیں", "write Expiration Date for your car": "اپنی کار کے لیے میعاد ختم ہونے کی تاریخ لکھیں", "Tariffs": "ٹیرف", "Minimum fare": "کم از کم کرایہ", "Maximum fare": "زیادہ سے زیادہ کرایہ", "Flag-down fee": "فلیگ ڈاؤن فیس", "Including Tax": "ٹیکس سمیت", "BookingFee": "بکنگ فیس", "Morning": "صبح", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "07:30 سے 10:30 تک (جمعرات، جمعہ، ہفتہ، پیر)", "Evening": "شام", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "12:00 سے 15:00 تک (جمعرات، جمعہ، ہفتہ، پیر)", "Night": "رات", "You have in account": "آپ کے اکاؤنٹ میں ہے", "Select Country": "ملک منتخب کریں", "Ride Today : ": "آج کی سواری: ", "After this period\nYou can't cancel!": "اس مدت کے بعد\nآپ منسوخ نہیں کر سکتے!", "from 23:59 till 05:30": "23:59 سے 05:30 تک", "Rate Driver": "ڈرائیور کو ریٹ کریں", "Total Cost is ": "کل قیمت ہے ", "Write note": "نوٹ لکھیں", "Time to arrive": "پہنچنے کا وقت", "Ride Summaries": "سواری کے خلاصے", "Total Cost": "کل قیمت", "Average of Hours of": "گھنٹوں کی اوسط", " is ON for this month": " اس مہینے کے لیے آن ہے", "Days": "دن", "Total Hours on month": "مہینے میں کل گھنٹے", "Counts of Hours on days": "دنوں میں گھنٹوں کی گنتی", "OrderId": "آرڈر آئی ڈی", "created time": "تخلیق کا وقت", "Intaleq Over": "Intaleq ختم", "I will slow down": "میں رفتار کم کروں گا", "Map Passenger": "نقشہ مسافر", "Be Slowly": "آہستہ رہیں", "If you want to make Google Map App run directly when you apply order": "اگر آپ چاہتے ہیں کہ جب آپ آرڈر لاگو کریں تو گوگل میپ ایپ براہ راست چلے", "You can change the language of the app": "آپ ایپ کی زبان تبدیل کر سکتے ہیں", "Your Budget less than needed": "آپ کا بجٹ ضرورت سے کم ہے", "You can change the Country to get all features": "آپ تمام خصوصیات حاصل کرنے کے لیے ملک تبدیل کر سکتے ہیں", "Change Country": "ملک تبدیل کریں" }, "hi": { "Order": "आदेश", "OrderVIP": "वीआईपी आदेश", "Cancel Trip": "यात्रा रद्द करें", "Passenger Cancel Trip": "यात्री ने यात्रा रद्द कर दी", "VIP Order": "वीआईपी आदेश", "The driver accepted your trip": "ड्राइवर ने आपकी यात्रा स्वीकार कर ली", "message From passenger": "यात्री से संदेश", "Cancel": "रद्द करें", "Trip Cancelled. The cost of the trip will be added to your wallet.": "यात्रा रद्द कर दी गई। यात्रा की लागत आपके वॉलेट में जोड़ दी जाएगी।", "token change": "टोकन बदलें", "face detect": "चेहरा पहचान", "Face Detection Result": "चेहरा पहचान परिणाम", "similar": "समान", "not similar": "समान नहीं", "Hi ,I will go now": "हाय, मैं अब जाऊंगा", "Passenger come to you": "यात्री आपके पास आ रहा है", "Call Income": "कॉल आय", "Call Income from Passenger": "यात्री से कॉल आय", "Criminal Document Required": "आपराधिक दस्तावेज़ आवश्यक", "You should have upload it .": "आपको इसे अपलोड करना चाहिए था।", "Call End": "कॉल समाप्त", "The order has been accepted by another driver.": "आदेश को एक अन्य ड्राइवर ने स्वीकार कर लिया है।", "The order Accepted by another Driver": "आदेश को एक अन्य ड्राइवर ने स्वीकार कर लिया", "We regret to inform you that another driver has accepted this order.": "हमें खेद है कि एक अन्य ड्राइवर ने इस आदेश को स्वीकार कर लिया है।", "Driver Applied the Ride for You": "ड्राइवर ने आपके लिए यात्रा लागू की", "Applied": "लागू", "Hi ,I Arrive your site": "हाय, मैं आपकी साइट पर पहुंच गया हूं", "Please go to Car Driver": "कृपया कार ड्राइवर के पास जाएं", "Ok I will go now.": "ठीक है, मैं अब जाऊंगा।", "Accepted Ride": "स्वीकृत यात्रा", "Driver Accepted the Ride for You": "ड्राइवर ने आपके लिए यात्रा स्वीकार कर ली", "Promo": "प्रोमो", "Show latest promo": "नवीनतम प्रोमो दिखाएं", "Trip Monitoring": "यात्रा निगरानी", "Driver Is Going To Passenger": "ड्राइवर यात्री के पास जा रहा है", "Please stay on the picked point.": "कृपया चुने हुए बिंदु पर रहें।", "message From Driver": "ड्राइवर से संदेश", "Trip is Begin": "यात्रा शुरू हो गई है", "Cancel Trip from driver": "ड्राइवर से यात्रा रद्द करें", "We will look for a new driver.\nPlease wait.": "हम एक नए ड्राइवर की तलाश करेंगे।\nकृपया प्रतीक्षा करें।", "The driver canceled your ride.": "ड्राइवर ने आपकी यात्रा रद्द कर दी।", "Driver Finish Trip": "ड्राइवर ने यात्रा समाप्त की", "you will pay to Driver": "आप ड्राइवर को भुगतान करेंगे", "Don’t forget your personal belongings.": "अपने निजी सामान को न भूलें।", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "कृपया सुनिश्चित करें कि आपके पास आपका सारा निजी सामान है और कोई भी शेष किराया, यदि लागू हो, आपके वॉलेट में जोड़ दिया गया है। Intaleq ऐप चुनने के लिए धन्यवाद।", "Finish Monitor": "निगरानी समाप्त", "Trip finished": "यात्रा समाप्त", "Call Income from Driver": "ड्राइवर से कॉल आय", "Driver Cancelled Your Trip": "ड्राइवर ने आपकी यात्रा रद्द कर दी", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "आप ड्राइवर को भुगतान करेंगे, आप ड्राइवर के समय की लागत का भुगतान करेंगे, अपने Intaleq वॉलेट को देखें", "Order Applied": "आदेश लागू", //firebase above // "Where to": "कहां जाना है", "Where are you going?": "आप कहां जा रहे हैं?", "Quick Actions": "त्वरित कार्रवाई", "My Wallet": "मेरा वॉलेट", "Order History": "आदेश इतिहास", "Contact Us": "हमसे संपर्क करें", "Driver": "ड्राइवर", "Complaint": "शिकायत", "Promos": "प्रोमो", "Recent Places": "हाल के स्थान", "From": "से", "WhatsApp Location Extractor": "WhatsApp स्थान निकालने वाला", "Location Link": "स्थान लिंक", "Paste location link here": "स्थान लिंक यहां पेस्ट करें", "Go to this location": "इस स्थान पर जाएं", "Paste WhatsApp location link": "WhatsApp स्थान लिंक पेस्ट करें", "Select Order Type": "आदेश प्रकार चुनें", "Choose who this order is for": "चुनें कि यह आदेश किसके लिए है", "I want to order for myself": "मैं अपने लिए आदेश देना चाहता हूं", "I want to order for someone else": "मैं किसी और के लिए आदेश देना चाहता हूं", // "Cancel": "रद्द करें", "Order for someone else": "किसी और के लिए आदेश", "Order for myself": "अपने लिए आदेश", "Are you want to go this site": "क्या आप इस साइट पर जाना चाहते हैं?", // "Yes": "हां", "No": "नहीं", "Are you sure to delete this location?": "क्या आप वाकई इस स्थान को हटाना चाहते हैं?", "deleted": "हटाया गया", "To Work": "काम पर", "Work Saved": "काम की जगह सहेजी गई", "To Home": "घर पर", "Home Saved": "घर की जगह सहेजी गई", "Destination selected": "गंतव्य चुना गया", "Now select start pick": "अब शुरुआती स्थान चुनें", "OK": "ठीक है", "Confirm Pick-up Location": "पिक-अप स्थान की पुष्टि करें", "Set Location on Map": "मानचित्र पर स्थान सेट करें", "Nearest Car: ~": "निकटतम कार: ~", "Nearest Car": "निकटतम कार", "No cars nearby": "आस-पास कोई कार नहीं", "Favorite Places": "पसंदीदा स्थान", "No favorite places yet!": "अभी तक कोई पसंदीदा स्थान नहीं!", "from your favorites": "आपके पसंदीदा से", "Back": "पीछे", "Sign in for a seamless experience": "एक सहज अनुभव के लिए साइन इन करें", "Sign In with Google": "Google के साथ साइन इन करें", "Sign in with Apple": "Apple के साथ साइन इन करें", "Need assistance? Contact us": "सहायता चाहिए? हमसे संपर्क करें", "User not found": "उपयोगकर्ता नहीं मिला", "Email": "ईमेल", "Your email address": "आपका ईमेल पता", "Enter a valid email": "एक वैध ईमेल दर्ज करें", "Password": "पासवर्ड", // "Your password": "आपका पासवर्ड", "Enter your password": "अपना पासवर्ड दर्ज करें", "Submit": "जमा करें", "Terms of Use & Privacy Notice": "उपयोग की शर्तें और गोपनीयता नीति", "Terms of Use": "उपयोग की शर्तें", "Privacy Notice": "गोपनीयता नीति", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "नीचे \"मैं सहमत हूं\" चुनकर, मैं पुष्टि करता हूं कि मैंने पढ़ लिया है और सहमत हूं", "and acknowledge the": "और स्वीकार करता हूं", ". I am at least 18 years old.": ". मैं कम से कम 18 वर्ष का हूं।", "Continue": "जारी रखें", "Enable Location Access": "स्थान पहुंच सक्षम करें", "We need your location to find nearby drivers for pickups and drop-offs.": "हमें पिकअप और ड्रॉप-ऑफ के लिए निकटतम ड्राइवर खोजने के लिए आपका स्थान चाहिए।", "Allow Location Access": "स्थान पहुंच की अनुमति दें", "You should restart app to change language": "भाषा बदलने के लिए आपको ऐप को पुनः आरंभ करना चाहिए", "Home Page": "मुखपृष्ठ", "To change Language the App": "ऐप की भाषा बदलने के लिए", "Learn more about our app and mission": "हमारे ऐप और मिशन के बारे में अधिक जानें", "Promos For Today": "आज के लिए प्रोमो", "Choose your ride": "अपनी यात्रा चुनें", "Your Journey Begins Here": "आपकी यात्रा यहां से शुरू होती है", "Bonus gift": "बोनस उपहार", "Pay": "भुगतान", "Get": "प्राप्त करें", "Send to Driver Again": "ड्राइवर को फिर से भेजें", "Driver Name:": "ड्राइवर का नाम:", "No trip data available": "कोई यात्रा डेटा उपलब्ध नहीं", "Car Plate:": "कार नंबर:", "remaining": "शेष", "Order Cancelled": "आदेश रद्द", "You canceled VIP trip": "आपने वीआईपी यात्रा रद्द कर दी", "Passenger cancelled order": "यात्री ने आदेश रद्द कर दिया", "Your trip is scheduled": "आपकी यात्रा निर्धारित है", "Don't forget your ride!": "अपनी यात्रा न भूलें!", "Trip updated successfully": "यात्रा सफलतापूर्वक अद्यतन", "Car Make:": "कार निर्माता:", "Car Model:": "कार मॉडल:", "Car Color:": "कार का रंग:", "Driver Phone:": "ड्राइवर का फोन:", "Pre-booking": "पूर्व बुकिंग", "Waiting VIP": "वीआईपी की प्रतीक्षा", "Driver List": "ड्राइवर सूची", "Confirm Trip": "यात्रा की पुष्टि करें", "Select date and time of trip": "यात्रा की तारीख और समय चुनें", "Date and Time Picker": "तारीख और समय चयनकर्ता", "Trip Status:": "यात्रा स्थिति:", "pending": "लंबित", "accepted": "स्वीकृत", "rejected": "अस्वीकृत", "Apply": "लागू करें", "Enter your promo code": "अपना प्रोमो कोड दर्ज करें", "Apply Promo Code": "प्रोमो कोड लागू करें", "Scheduled Time:": "निर्धारित समय:", "No drivers available": "कोई ड्राइवर उपलब्ध नहीं", "No drivers available at the moment. Please try again later.": "फिलहाल कोई ड्राइवर उपलब्ध नहीं है। कृपया बाद में पुनः प्रयास करें।", "you have a negative balance of": "आपका नकारात्मक शेष है", "Please try again in a few moments": "कृपया कुछ क्षणों में पुनः प्रयास करें", "Unknown Driver": "अज्ञात ड्राइवर", "in your": "आपके", "The driver accepted your order for": "ड्राइवर ने आपका आदेश स्वीकार कर लिया", "wallet due to a previous trip.": "पिछली यात्रा के कारण वॉलेट।", "rides": "यात्राएं", "Add Work": "काम जोड़ें", "The reason is": "कारण है", "User does not have a wallet #1652": "उपयोगकर्ता के पास वॉलेट नहीं है", "Price of trip": "यात्रा की कीमत", "From:": "से:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "स्पीड और डिलीवरी यात्राओं के लिए, कीमत गतिशील रूप से गणना की जाती है। कम्फर्ट यात्राओं के लिए, कीमत समय और दूरी पर आधारित है।", "Phone Wallet Saved Successfully": "फोन वॉलेट सफलतापूर्वक सहेजा गया", "Add wallet phone you use": "जो फोन वॉलेट आप उपयोग करते हैं उसे जोड़ें", "Update Available": "अद्यतन उपलब्ध", "Phone number must be exactly 11 digits long": "फोन नंबर ठीक 11 अंकों का होना चाहिए", "Insert Wallet phone number": "वॉलेट फोन नंबर डालें", "Phone number isn't an Egyptian phone number": "फोन नंबर मिस्र का फोन नंबर नहीं है", "A new version of the app is available. Please update to the latest version.": "ऐप का एक नया संस्करण उपलब्ध है। कृपया नवीनतम संस्करण पर अपडेट करें।", "We use location to get accurate and nearest passengers for you": "हम सटीक और निकटतम यात्रियों को प्राप्त करने के लिए स्थान का उपयोग करते हैं", "This ride is already applied by another driver.": "यह यात्रा पहले से ही एक अन्य ड्राइवर द्वारा लागू की गई है।", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "हम निकटतम उपलब्ध ड्राइवर खोजने और सटीक पिकअप और ड्रॉपऑफ जानकारी प्रदान करने के लिए आपके सटीक स्थान का उपयोग करते हैं। आप इसे सेटिंग्स में प्रबंधित कर सकते हैं।", "Where are you, sir?": "आप कहां हैं, सर?", "I've been trying to reach you but your phone is off.": "मैं आपसे संपर्क करने की कोशिश कर रहा था लेकिन आपका फोन बंद है।", "Please don't be late": "कृपया देर न करें", "Please don't be late, I'm waiting for you at the specified location.": "कृपया देर न करें, मैं आपका निर्दिष्ट स्थान पर इंतज़ार कर रहा हूं।", "My location is correct. You can search for me using the navigation app": "मेरा स्थान सही है। आप नेविगेशन ऐप का उपयोग करके मुझे खोज सकते हैं", "Hello, I'm at the agreed-upon location": "हैलो, मैं सहमत स्थान पर हूं", "How much longer will you be?": "आपको और कितना समय लगेगा?", "Phone number is verified before": "फोन नंबर पहले सत्यापित किया गया है", "Change Ride": "यात्रा बदलें", "You can change the destination by long-pressing any point on the map": "आप मानचित्र पर किसी भी बिंदु को लंबे समय तक दबाकर गंतव्य बदल सकते हैं", "Pick from map destination": "मानचित्र से गंतव्य चुनें", "Pick or Tap to confirm": "पुष्टि करने के लिए चुनें या टैप करें", "Accepted your order": "आपका आदेश स्वीकार कर लिया गया", "Order Accepted": "आदेश स्वीकृत", "with type": "प्रकार के साथ", "accepted your order at price": "कीमत पर आपका आदेश स्वीकार कर लिया", "you canceled order": "आपने आदेश रद्द कर दिया", "If you want order to another person": "यदि आप किसी अन्य व्यक्ति के लिए आदेश देना चाहते हैं", // "Ok I will go now.": "ठीक है, मैं अब जाऊंगा।", // "Hi, I will go now": "हाय, मैं अब जाऊंगा", "upgrade price": "मूल्य उन्नयन", "Please enter a correct phone": "कृपया एक सही फोन दर्ज करें", "airport": "हवाई अड्डा", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "लचीले मार्ग और स्टॉप पॉइंट्स के साथ आरामदायक कार के लिए सबसे अच्छा विकल्प। यह हवाई अड्डा इस कीमत पर वीजा प्रवेश प्रदान करता है।", "You can upgrade price to may driver accept your order": "आप कीमत बढ़ाकर ड्राइवर को अपना आदेश स्वीकार करने के लिए प्रेरित कर सकते हैं", "Change Route": "मार्ग बदलें", "No Captain Accepted Your Order": "किसी कप्तान ने आपका आदेश स्वीकार नहीं किया", "We are looking for a captain but the price may increase to let a captain accept": "हम एक कप्तान की तलाश कर रहे हैं लेकिन कीमत बढ़ सकती है ताकि एक कप्तान स्वीकार कर सके", "No, I want to cancel this trip": "नहीं, मैं इस यात्रा को रद्द करना चाहता हूं", // "Trip Cancelled. The cost of the trip will be added to your wallet.": "यात्रा रद्द कर दी गई। यात्रा की लागत आपके वॉलेट में जोड़ दी जाएगी।", "Attention": "ध्यान", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "यात्रा रद्द कर दी गई। यात्रा की लागत आपके वॉलेट से काट ली जाएगी।", "You will be charged for the cost of the driver coming to your location.": "आपसे ड्राइवर के आपके स्थान पर आने की लागत ली जाएगी।", "reject your order.": "आपका आदेश अस्वीकार करें।", "Order Under Review": "आदेश समीक्षा के अधीन", "is reviewing your order. They may need more information or a higher price.": "आपके आदेश की समीक्षा कर रहा है। उन्हें अधिक जानकारी या उच्च कीमत की आवश्यकता हो सकती है।", // "The driver canceled your ride.": "ड्राइवर ने आपकी यात्रा रद्द कर दी।", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "हमें अभी तक कोई ड्राइवर नहीं मिला है। अपने प्रस्ताव को ड्राइवरों के लिए अधिक आकर्षक बनाने के लिए अपनी यात्रा शुल्क बढ़ाने पर विचार करें।", "Increase Your Trip Fee (Optional)": "अपना यात्रा शुल्क बढ़ाएं (वैकल्पिक)", "Vibration": "कंपन", "Resend code": "कोड फिर से भेजें", // "token change": "टोकन बदलें", "change device": "डिवाइस बदलें", "Device Change Detected": "डिवाइस परिवर्तन का पता चला", "You can only use one device at a time. This device will now be set as your active device.": "आप एक समय में केवल एक डिवाइस का उपयोग कर सकते हैं। यह डिवाइस अब आपके सक्रिय डिवाइस के रूप में सेट हो जाएगी।", "Click here point": "यहां क्लिक करें", "Are you want to change": "क्या आप बदलना चाहते हैं", "by": "द्वारा", "Enter your complaint here": "अपनी शिकायत यहां दर्ज करें", "Please enter your complaint.": "कृपया अपनी शिकायत दर्ज करें।", "Complaint data saved successfully": "शिकायत डेटा सफलतापूर्वक सहेजा गया", "Trip Monitor": "यात्रा निगरानी", "Insert SOS Phone": "SOS फोन डालें", "Add SOS Phone": "SOS फोन जोड़ें", // "Trip Monitoring": "यात्रा निगरानी", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "प्रिय ,\n\n🚀 मैंने अभी एक रोमांचक यात्रा शुरू की है और मैं अपनी यात्रा के विवरण और अपनी वर्तमान स्थिति को आपके साथ वास्तविक समय में साझा करना चाहता हूं! कृपया Intaleq ऐप डाउनलोड करें। यह आपको मेरी यात्रा के विवरण और मेरी नवीनतम स्थिति देखने की अनुमति देगा।\n\n👈 डाउनलोड लिंक:\nAndroid [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\niOS [https://getapp.cc/app/6458734951]\n\nमैं अपनी यात्रा के दौरान आपको करीब रखने की आशा करता हूं!\n\nIntaleq ,", "Send Intaleq app to him": "उसे Intaleq ऐप भेजें", "No passenger found for the given phone number": "दिए गए फोन नंबर के लिए कोई यात्री नहीं मिला", "No user found for the given phone number": "दिए गए फोन नंबर के लिए कोई उपयोगकर्ता नहीं मिला", "This price is": "यह कीमत है", "Work": "काम", "Add Home": "घर जोड़ें", "Notifications": "सूचनाएं", "💳 Pay with Credit Card": "💳 क्रेडिट कार्ड से भुगतान करें", "⚠️ You need to choose an amount!": "⚠️ आपको एक राशि चुनने की आवश्यकता है!", "💰 Pay with Wallet": "💰 वॉलेट से भुगतान करें", "You must restart the app to change the language.": "भाषा बदलने के लिए आपको ऐप को पुनः आरंभ करना होगा।", "joined": "शामिल हो गए", "Driver joined the channel": "ड्राइवर चैनल में शामिल हो गया", "Driver left the channel": "ड्राइवर ने चैनल छोड़ दिया", "Call Page": "कॉल पेज", // "Call End": "कॉल समाप्त", "Call Left": "कॉल शेष", r"$ Next as Cash $!": "अगला नकद के रूप में!", "To use Wallet charge it": "वॉलेट का उपयोग करने के लिए इसे चार्ज करें", "We are searching for the nearest driver to you": "हम आपके निकटतम ड्राइवर की तलाश कर रहे हैं", "Best choice for cities": "शहरों के लिए सबसे अच्छा विकल्प", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "राये गई: शहरों के बीच सुविधाजनक यात्रा के लिए राउंड ट्रिप सेवा, आसान और विश्वसनीय।", "Rayeh Gai": "राये गई", "This trip is for women only": "यह यात्रा केवल महिलाओं के लिए है", "Total budgets on month": "महीने पर कुल बजट", "You have call from driver": "आपको ड्राइवर से कॉल आई है", "Comfort": "आराम", "Intaleq": "गति", "Driver already has 2 trips within the specified period.": "ड्राइवर के पास निर्दिष्ट अवधि के भीतर पहले से ही 2 यात्राएं हैं।", "The invitation was sent successfully": "आमंत्रण सफलतापूर्वक भेजा गया", "Lady": "महिला", "You should select your country": "आपको अपना देश चुनना चाहिए", "Scooter": "स्कूटर", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "पूर्व आरक्षण के साथ एक यात्रा, जो आपको सर्वश्रेष्ठ कप्तान और कार चुनने की अनुमति देती है।", "Mishwar Vip": "मिश्वर वीआईपी", "The driver waiting you in picked location .": "ड्राइवर आपका चुने हुए स्थान पर इंतज़ार कर रहा है।", "About Us": "हमारे बारे में", "You can change the vibration feedback for all buttons": "आप सभी बटनों के लिए कंपन प्रतिक्रिया बदल सकते हैं", "Most Secure Methods": "सबसे सुरक्षित तरीके", "In-App VOIP Calls": "इन-ऐप VOIP कॉल", "Recorded Trips for Safety": "सुरक्षा के लिए रिकॉर्ड की गई यात्राएं", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nहम सस्ती कीमत को प्राथमिकता देते हैं, आपकी यात्राओं को सुलभ बनाने के लिए प्रतिस्पर्धी मूल्य प्रदान करते हैं।", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "Intaleq एक राइड-शेयरिंग ऐप है जो आपकी सुरक्षा और सस्ती कीमत को ध्यान में रखकर डिज़ाइन किया गया है। हम आपको आपके क्षेत्र में विश्वसनीय ड्राइवरों से जोड़ते हैं, एक सुविधाजनक और तनावमुक्त यात्रा अनुभव सुनिश्चित करते हैं।\n\nयहां कुछ प्रमुख विशेषताएं हैं जो हमें अलग बनाती हैं:", "Sign In by Apple": "Apple के साथ साइन इन करें", "Sign In by Google": "Google के साथ साइन इन करें", "How do I request a ride?": "मैं यात्रा कैसे अनुरोध करूं?", "Step-by-step instructions on how to request a ride through the Intaleq app.": "Intaleq ऐप के माध्यम से यात्रा अनुरोध करने के लिए चरण-दर-चरण निर्देश।", "What types of vehicles are available?": "किस प्रकार के वाहन उपलब्ध हैं?", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "Intaleq आपकी आवश्यकताओं के अनुरूप विभिन्न प्रकार के वाहन विकल्प प्रदान करता है, जिसमें इकोनॉमी, कम्फर्ट और लग्ज़री शामिल हैं। वह विकल्प चुनें जो आपके बजट और यात्री संख्या के लिए सबसे उपयुक्त हो।", "How can I pay for my ride?": "मैं अपनी यात्रा के लिए भुगतान कैसे कर सकता हूं?", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "Intaleq आपकी सुविधा के लिए कई भुगतान विधियां प्रदान करता है। यात्रा की पुष्टि के दौरान नकद भुगतान या क्रेडिट/डेबिट कार्ड भुगतान के बीच चुनें।", "Can I cancel my ride?": "क्या मैं अपनी यात्रा रद्द कर सकता हूं?", "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Intaleq cancellation policy for details.": "हां, आप कुछ शर्तों के तहत अपनी यात्रा रद्द कर सकते हैं (जैसे, ड्राइवर नियुक्त होने से पहले)। विवरण के लिए Intaleq रद्दीकरण नीति देखें।", "Driver Registration & Requirements": "ड्राइवर पंजीकरण और आवश्यकताएं", "How can I register as a driver?": "मैं ड्राइवर के रूप में कैसे पंजीकृत कर सकता हूं?", "What are the requirements to become a driver?": "ड्राइवर बनने के लिए क्या आवश्यकताएं हैं?", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "ड्राइवर पंजीकरण और आवश्यकताओं के बारे में जानकारी के लिए हमारी वेबसाइट पर जाएं या Intaleq समर्थन से संपर्क करें।", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "Intaleq आपको अपनी यात्रा के दौरान ड्राइवर या यात्री के साथ संवाद करने की अनुमति देने के लिए इन-ऐप चैट कार्यक्षमता प्रदान करता है।", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "Intaleq आपकी सुरक्षा को प्राथमिकता देता है। हम ड्राइवर सत्यापन, इन-ऐप यात्रा ट्रैकिंग और आपातकालीन संपर्क विकल्प जैसी सुविधाएं प्रदान करते हैं।", "Frequently Questions": "अक्सर पूछे जाने वाले प्रश्न", "User does not exist.": "उपयोगकर्ता मौजूद नहीं है।", "We need your phone number to contact you and to help you.": "हमें आपसे संपर्क करने और आपकी मदद करने के लिए आपका फोन नंबर चाहिए।", "You will recieve code in sms message": "आपको एसएमएस संदेश में कोड प्राप्त होगा", "Please enter": "कृपया दर्ज करें", "We need your phone number to contact you and to help you receive orders.": "हमें आपसे संपर्क करने और आपको आदेश प्राप्त करने में मदद करने के लिए आपका फोन नंबर चाहिए।", "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": "आपके आपराधिक रिकॉर्ड पर पूरा नाम आपके ड्राइविंग लाइसेंस पर नाम से मेल नहीं खाता है। कृपया सत्यापित करें और सही दस्तावेज़ प्रदान करें।", "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": "आपके ड्राइविंग लाइसेंस पर राष्ट्रीय संख्या आपके पहचान दस्तावेज़ पर संख्या से मेल नहीं खाती है। कृपया सत्यापित करें और सही दस्तावेज़ प्रदान करें।", "Capture an Image of Your Criminal Record": "अपने आपराधिक रिकॉर्ड की एक छवि कैप्चर करें", "IssueDate": "जारी करने की तारीख", "Capture an Image of Your car license front ": "अपने कार लाइसेंस के सामने की एक छवि कैप्चर करें", "Capture an Image of Your ID Document front": "अपने पहचान दस्तावेज़ के सामने की एक छवि कैप्चर करें", "NationalID": "राष्ट्रीय पहचान", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "आप Intaleq ऐप को अपने दोस्तों के साथ साझा कर सकते हैं और उनके द्वारा आपके कोड का उपयोग करके की गई यात्राओं के लिए पुरस्कार अर्जित कर सकते हैं।", "FullName": "पूरा नाम", "No invitation found yet!": "अभी तक कोई आमंत्रण नहीं मिला!", "InspectionResult": "निरीक्षण परिणाम", "Criminal Record": "आपराधिक रिकॉर्ड", "Share App": "ऐप साझा करें", "The email or phone number is already registered.": "ईमेल या फोन नंबर पहले से ही पंजीकृत है।", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "Intaleq ऐप पर राइड-शेयरिंग ड्राइवर बनने के लिए, आपको अपना ड्राइविंग लाइसेंस, पहचान दस्तावेज़ और कार पंजीकरण दस्तावेज़ अपलोड करने की आवश्यकता है। हमारी AI प्रणाली उनकी प्रामाणिकता की तुरंत समीक्षा और सत्यापन करेगी। यदि आपके दस्तावेज़ स्वीकृत होते हैं, तो आप Intaleq ऐप पर ड्राइवर के रूप में काम शुरू कर सकते हैं। कृपया ध्यान दें, जाली दस्तावेज़ जमा करना एक गंभीर अपराध है और इसके परिणामस्वरूप तत्काल समाप्ति और कानूनी परिणाम हो सकते हैं।", "Documents check": "दस्तावेज़ जांच", "Driver's License": "ड्राइविंग लाइसेंस", "for your first registration!": "आपके पहले पंजीकरण के लिए!", "Get it Now!": "अभी प्राप्त करें!", "before": "पहले", "Code not approved": "कोड स्वीकृत नहीं", "3000 LE": "3000 एलई", "Do you have an invitation code from another driver?": "क्या आपके पास किसी अन्य ड्राइवर से आमंत्रण कोड है?", "Paste the code here": "कोड यहां पेस्ट करें", "No, I don't have a code": "नहीं, मेरे पास कोड नहीं है", "Code approved": "कोड स्वीकृत", "Install our app:": "हमारा ऐप इंस्टॉल करें:", "Invite another driver and both get a gift after he completes 100 trips!": "एक अन्य ड्राइवर को आमंत्रित करें और जब वह 100 यात्राएं पूरी करे तो दोनों को उपहार मिलेगा!", "Invite": "आमंत्रित करें", "Are you sure?": "क्या आप सुनिश्चित हैं?", "This will delete all recorded files from your device.": "यह आपके डिवाइस से सभी रिकॉर्ड की गई फ़ाइलों को हटा देगा।", "Select a file": "एक फ़ाइल चुनें", "Select a File": "एक फ़ाइल चुनें", "Delete": "हटाएं", "attach audio of complain": "शिकायत का ऑडियो संलग्न करें", "Phone Number Check": "फोन नंबर जांच", "Drivers received orders": "ड्राइवरों को आदेश प्राप्त हुए", "No audio files recorded.": "कोई ऑडियो फ़ाइल रिकॉर्ड नहीं की गई।", "This is for delivery or a motorcycle.": "यह डिलीवरी या मोटरसाइकिल के लिए है।", // "We will look for a new driver.\nPlease wait.": "हम एक नए ड्राइवर की तलाश करेंगे।\nकृपया प्रतीक्षा करें।", "Intaleq Reminder": "Intaleq अनुस्मारक", "It's time to check the Intaleq app!": "Intaleq ऐप की जांच करने का समय आ गया है!", "you must insert token code": "आपको टोकन कोड डालना होगा", "Something went wrong. Please try again.": "कुछ गलत हो गया। कृपया पुनः प्रयास करें।", "Trip Details": "यात्रा विवरण", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "संदर्भ में कोई शिकायत विवरण नहीं है, इसलिए मैं इस मुद्दे का समाधान प्रदान नहीं कर सकता। कृपया आवश्यक जानकारी प्रदान करें, और मैं आपकी सहायता करने में प्रसन्न हूंगा।", "Submit Your Complaint": "अपनी शिकायत जमा करें", "Date": "तारीख", "Price": "कीमत", "Status": "स्थिति", "Choose from contact": "संपर्क से चुनें", "attach correct audio": "सही ऑडियो संलग्न करें", "be sure": "सुनिश्चित करें", "Audio uploaded successfully.": "ऑडियो सफलतापूर्वक अपलोड किया गया।", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "नवीनतम कार मॉडल की तलाश करने वाले यात्रियों के लिए आदर्श, जो किसी भी मार्ग को चुनने की स्वतंत्रता चाहते हैं।", "Share this code with your friends and earn rewards when they use it!": "इस कोड को अपने दोस्तों के साथ साझा करें और जब वे इसका उपयोग करें तो पुरस्कार अर्जित करें!", "Enter phone": "फोन दर्ज करें", "You deserve the gift": "आप उपहार के हकदार हैं", "complete, you can claim your gift": "पूरा करें, आप अपना उपहार दावा कर सकते हैं", "When": "कब", "Enter driver's phone": "ड्राइवर का फोन दर्ज करें", "Send Invite": "आमंत्रण भेजें", "Show Invitations": "आमंत्रण दिखाएं", "License Type": "लाइसेंस प्रकार", "National Number": "राष्ट्रीय संख्या", "Name (Arabic)": "नाम (अरबी)", "Name (English)": "नाम (अंग्रेजी)", "Address": "पता", "Issue Date": "जारी करने की तारीख", "Expiry Date": "समाप्ति तिथि", "License Categories": "लाइसेंस श्रेणियां", "driver_license": "ड्राइविंग लाइसेंस", "Capture an Image of Your Driver License": "अपने ड्राइविंग लाइसेंस की एक छवि कैप्चर करें", "ID Documents Back": "पहचान दस्तावेज़ पीछे", "National ID": "राष्ट्रीय पहचान", "Occupation": "पेशा", "Gender": "लिंग", "Religion": "धर्म", "Marital Status": "वैवाहिक स्थिति", "Full Name (Marital)": "पूरा नाम (वैवाहिक)", "Expiration Date": "समाप्ति तिथि", "Capture an Image of Your ID Document Back": "अपने पहचान दस्तावेज़ के पीछे की एक छवि कैप्चर करें", "ID Documents Front": "पहचान दस्तावेज़ सामने", "First Name": "पहला नाम", "CardID": "कार्ड आईडी", "Vehicle Details Front": "वाहन विवरण सामने", "Plate Number": "प्लेट नंबर", "Owner Name": "मालिक का नाम", "Vehicle Details Back": "वाहन विवरण पीछे", "Make": "निर्माता", "Model": "मॉडल", "Year": "वर्ष", "Chassis": "चेसिस", "Color": "रंग", "Displacement": "विस्थापन", "Fuel": "ईंधन", "Tax Expiry Date": "कर समाप्ति तिथि", "Inspection Date": "निरीक्षण तिथि", "Capture an Image of Your car license back": "अपने कार लाइसेंस के पीछे की एक छवि कैप्चर करें", "Capture an Image of Your Driver’s License": "अपने ड्राइविंग लाइसेंस की एक छवि कैप्चर करें", "Sign in with Google for easier email and name entry": "ईमेल और नाम प्रविष्टि को आसान बनाने के लिए Google के साथ साइन इन करें", "You will choose allow all the time to be ready receive orders": "आप हर समय आदेश प्राप्त करने के लिए तैयार रहने की अनुमति चुनेंगे", "Welcome to Intaleq!": "Intaleq में आपका स्वागत है!", "Get to your destination quickly and easily.": "अपने गंतव्य तक तेजी से और आसानी से पहुंचें।", "Enjoy a safe and comfortable ride.": "एक सुरक्षित और आरामदायक यात्रा का आनंद लें।", "Choose Language": "भाषा चुनें", "Login": "लॉगिन", "Pay with Wallet": "वॉलेट से भुगतान करें", "Invalid MPIN": "अमान्य MPIN", "Invalid OTP": "अमान्य OTP", // "Driver Accepted the Ride for You": "ड्राइवर ने आपके लिए यात्रा स्वीकार कर ली", "Enter your email address": "अपना ईमेल पता दर्ज करें", "Please enter Your Email.": "कृपया अपना ईमेल दर्ज करें।", "Enter your phone number": "अपना फोन नंबर दर्ज करें", "Please enter your phone number.": "कृपया अपना फोन नंबर दर्ज करें।", "Please enter Your Password.": "कृपया अपना पासवर्ड दर्ज करें।", "if you dont have account": "यदि आपके पास खाता नहीं है", "Register": "पंजीकरण", "Accept Ride's Terms & Review Privacy Notice": "यात्रा की शर्तें स्वीकार करें और गोपनीयता नीति की समीक्षा करें", "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "नीचे 'मैं सहमत हूं' चुनकर, मैंने उपयोग की शर्तों की समीक्षा की है और उनसे सहमत हूं और गोपनीयता नीति को स्वीकार करता हूं। मैं कम से कम 18 वर्ष का हूं।", "I Agree": "मैं सहमत हूं", // "Finish Monitor": "निगरानी समाप्त", "First name": "पहला नाम", "Enter your first name": "अपना पहला नाम दर्ज करें", "Please enter your first name.": "कृपया अपना पहला नाम दर्ज करें।", "Last name": "अंतिम नाम", "Enter your last name": "अपना अंतिम नाम दर्ज करें", "Please enter your last name.": "कृपया अपना अंतिम नाम दर्ज करें।", "City": "शहर", "Please enter your City.": "कृपया अपना शहर दर्ज करें।", "Male": "पुरुष", "Female": "महिला", "Verify Email": "ईमेल सत्यापित करें", "We sent 5 digit to your Email provided": "हमने आपके प्रदान किए गए ईमेल पर 5 अंक भेजे हैं", "5 digit": "5 अंक", "Send Verification Code": "सत्यापन कोड भेजें", "Your Ride Duration is ": "आपकी यात्रा की अवधि है ", "You will be thier in": "आप वहां होंगे", "You trip distance is": "आपकी यात्रा की दूरी है", "Fee is": "शुल्क है", "From : ": "से: ", "To : ": "को: ", "Add Promo": "प्रोमो जोड़ें", "Confirm Selection": "चयन की पुष्टि करें", "distance is": "दूरी है", "Intaleq LLC": "Intaleq LLC", "Egypt's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "मिस्र की अग्रणी राइड-शेयरिंग सेवा, जिसे अरब और स्थानीय मालिकों द्वारा गर्व से विकसित किया गया है। हम आपके निकट होने को प्राथमिकता देते हैं – हमारे मूल्यवान यात्रियों और समर्पित कप्तानों दोनों के लिए।", "Why Choose Intaleq?": "Intaleq क्यों चुनें?", "Closest to You": "आपके निकटतम", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "हम आपको तेज पिकअप और तेज यात्राओं के लिए निकटतम ड्राइवरों से जोड़ते हैं।", "Uncompromising Security": "अटल सुरक्षा", "Lady Captains Available": "महिला कप्तान उपलब्ध", "Recorded Trips (Voice & AI Analysis)": "रिकॉर्ड की गई यात्राएं (वॉयस और AI विश्लेषण)", "Fastest Complaint Response": "सबसे तेज शिकायत प्रतिक्रिया", "Our dedicated customer service team ensures swift resolution of any issues.": "हमारी समर्पित ग्राहक सेवा टीम किसी भी मुद्दे का त्वरित समाधान सुनिश्चित करती है।", "Affordable for Everyone": "सभी के लिए सस्ती", "Frequently Asked Questions": "अक्सर पूछे जाने वाले प्रश्न", "Getting Started": "शुरुआत करना", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "बस Intaleq ऐप खोलें, अपना गंतव्य दर्ज करें और \"यात्रा अनुरोध\" टैप करें। ऐप आपको निकटतम ड्राइवर से जोड़ देगा।", "Vehicle Options": "वाहन विकल्प", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "Intaleq आपकी आवश्यकताओं और बजट के अनुरूप इकोनॉमी, कम्फर्ट और लग्ज़री सहित विभिन्न विकल्प प्रदान करता है।", "Payments": "भुगतान", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "आप नकद या क्रेडिट/डेबिट कार्ड का उपयोग करके अपनी यात्रा के लिए भुगतान कर सकते हैं। आप अपनी यात्रा की पुष्टि करने से पहले अपनी पसंदीदा भुगतान विधि चुन सकते हैं।", "Ride Management": "यात्रा प्रबंधन", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "हां, आप अपनी यात्रा रद्द कर सकते हैं, लेकिन कृपया ध्यान दें कि रद्दीकरण शुल्क लागू हो सकता है, यह इस बात पर निर्भर करता है कि आप कितने समय पहले रद्द करते हैं।", "For Drivers": "ड्राइवरों के लिए", // "Driver Registration & Requirements": "ड्राइवर पंजीकरण और आवश्यकताएं", "Driver Registration": "ड्राइवर पंजीकरण", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "ड्राइवर के रूप में पंजीकृत करने या आवश्यकताओं के बारे में जानने के लिए, कृपया हमारी वेबसाइट पर जाएं या सीधे Intaleq समर्थन से संपर्क करें।", "Visit Website/Contact Support": "वेबसाइट पर जाएं/समर्थन से संपर्क करें", "Close": "बंद करें", "We are searching for the nearest driver": "हम निकटतम ड्राइवर की तलाश कर रहे हैं", "Communication": "संचार", "How do I communicate with the other party (passenger/driver)?": "मैं दूसरे पक्ष (यात्री/ड्राइवर) के साथ कैसे संवाद करूं?", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "एक बार यात्रा की पुष्टि हो जाने पर आप इन-ऐप चैट सुविधा के माध्यम से अपने ड्राइवर या यात्री के साथ संवाद कर सकते हैं।", "Safety & Security": "सुरक्षा और सुरक्षा", "What safety measures does Intaleq offer?": "Intaleq कौन से सुरक्षा उपाय प्रदान करता है?", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "Intaleq ड्राइवर सत्यापन, इन-ऐप यात्रा ट्रैकिंग, आपातकालीन संपर्क विकल्प और विश्वसनीय संपर्कों के साथ अपनी यात्रा स्थिति साझा करने की क्षमता सहित विभिन्न सुरक्षा सुविधाएं प्रदान करता है।", "Enjoy competitive prices across all trip options, making travel accessible.": "सभी यात्रा विकल्पों में प्रतिस्पर्धी कीमतों का आनंद लें, यात्रा को सुलभ बनाएं।", "Variety of Trip Choices": "यात्रा विकल्पों की विविधता", "Choose the trip option that perfectly suits your needs and preferences.": "वह यात्रा विकल्प चुनें जो आपकी आवश्यकताओं और प्राथमिकताओं के अनुरूप हो।", "Your Choice, Our Priority": "आपकी पसंद, हमारी प्राथमिकता", "Because we are near, you have the flexibility to choose the ride that works best for you.": "क्योंकि हम निकट हैं, आपके पास उस यात्रा को चुनने की लचीलापन है जो आपके लिए सबसे अच्छा काम करती है।", "duration is": "अवधि है", "Setting": "सेटिंग", "Find answers to common questions": "सामान्य प्रश्नों के उत्तर खोजें", "I don't need a ride anymore": "मुझे अब यात्रा की आवश्यकता नहीं है", "I was just trying the application": "मैं सिर्फ एप्लिकेशन आज़मा रहा था", "No driver accepted my request": "किसी ड्राइवर ने मेरा अनुरोध स्वीकार नहीं किया", "I added the wrong pick-up/drop-off location": "मैंने गलत पिक-अप/ड्रॉप-ऑफ स्थान जोड़ा", "I don't have a reason": "मेरे पास कोई कारण नहीं है", "Other": "अन्य", "Can we know why you want to cancel Ride ?": "क्या हम जान सकते हैं कि आप यात्रा क्यों रद्द करना चाहते हैं?", "Cancel Ride": "यात्रा रद्द करें", "Add Payment Method": "भुगतान विधि जोड़ें", "Your Wallet balance is ": "आपके वॉलेट का शेष है ", "Ride Wallet": "यात्रा वॉलेट", "Payment Method": "भुगतान विधि", "Type here Place": "यहां स्थान टाइप करें", "Are You sure to ride to": "क्या आप वाकई यात्रा करना चाहते हैं", "Confirm": "पुष्टि करें", // "Back": "पीछे", "You are Delete": "आप हटा रहे हैं", "Deleted": "हटाया गया", "You Dont Have Any places yet !": "आपके पास अभी तक कोई स्थान नहीं है!", // "Favorite Places": "पसंदीदा स्थान", "From : Current Location": "से: वर्तमान स्थान", // "Where to": "कहां जाना है", "Profile": "प्रोफ़ाइल", "Home": "घर", "My Cared": "मेरी देखभाल", "Add Card": "कार्ड जोड़ें", "Add Credit Card": "क्रेडिट कार्ड जोड़ें", "Please enter the cardholder name": "कृपया कार्डधारक का नाम दर्ज करें", "Please enter the expiry date": "कृपया समाप्ति तिथि दर्ज करें", "Please enter the CVV code": "कृपया CVV कोड दर्ज करें", "Go To Favorite Places": "पसंदीदा स्थानों पर जाएं", "Go to this Target": "इस लक्ष्य पर जाएं", "My Profile": "मेरी प्रोफ़ाइल", "Sign Out": "साइन आउट", "Are you want to go to this site": "क्या आप इस साइट पर जाना चाहते हैं", "MyLocation": "मेरा स्थान", "my location": "मेरा स्थान", "Target": "लक्ष्य", "Update": "अद्यतन", "You Should choose rate figure": "आपको रेट फिगर चुनना चाहिए", "Login Captin": "कप्तान लॉगिन", "Register Captin": "कप्तान पंजीकरण", "Send Verfication Code": "सत्यापन कोड भेजें", "KM": "किमी", "End Ride": "यात्रा समाप्त", "Minute": "मिनट", "Go to passenger Location now": "अब यात्री के स्थान पर जाएं", "Duration of the Ride is ": "यात्रा की अवधि है ", "Distance of the Ride is ": "यात्रा की दूरी है", "Name of the Passenger is ": "यात्री का नाम है", "Hello this is Captain": "हैलो, यह कप्तान है", "Start the Ride": "यात्रा शुरू करें", "Please Wait If passenger want To Cancel!": "कृपया प्रतीक्षा करें यदि यात्री रद्द करना चाहता है!", "Total Duration:": "कुल अवधि:", "Active Duration:": "सक्रिय अवधि:", "Waiting for Captin ...": "कप्तान की प्रतीक्षा ...", "Age is ": "उम्र है ", "Rating is ": "रेटिंग है ", " to arrive you.": "आप तक पहुंचने के लिए।", "Tariff": "टैरिफ", "Settings": "सेटिंग्स", "Feed Back": "प्रतिक्रिया", "Please enter a valid 16-digit card number": "कृपया एक वैध 16-अंकीय कार्ड नंबर दर्ज करें", "Add Phone": "फोन जोड़ें", "Please enter a phone number": "कृपया एक फोन नंबर दर्ज करें", "You dont Add Emergency Phone Yet!": "आपने अभी तक आपातकालीन फोन नहीं जोड़ा है!", "You will arrive to your destination after ": "आप अपने गंतव्य पर पहुंचेंगे", "You can cancel Ride now": "आप अब यात्रा रद्द कर सकते हैं", "You Can cancel Ride After Captain did not come in the time": "आप यात्रा रद्द कर सकते हैं यदि कप्तान समय पर नहीं आया", "If you in Car Now. Press Start The Ride": "यदि आप अब कार में हैं। यात्रा शुरू करें दबाएं", "You Dont Have Any amount in": "आपके पास कोई राशि नहीं है", "Wallet!": "वॉलेट!", "You Have": "आपके पास है", "Save Credit Card": "क्रेडिट कार्ड सहेजें", "Show Promos": "प्रोमो दिखाएं", "10 and get 4% discount": "10 और 4% छूट प्राप्त करें", "20 and get 6% discount": "20 और 6% छूट प्राप्त करें", "40 and get 8% discount": "40 और 8% छूट प्राप्त करें", "100 and get 11% discount": "100 और 11% छूट प्राप्त करें", "Pay with Your PayPal": "अपने PayPal से भुगतान करें", "You will choose one of above !": "आप ऊपर में से एक चुनेंगे!", "Delete My Account": "मेरा खाता हटाएं", "Edit Profile": "प्रोफ़ाइल संपादित करें", "Name": "नाम", "Update Gender": "लिंग अद्यतन करें", "Education": "शिक्षा", "Update Education": "शिक्षा अद्यतन करें", "Employment Type": "रोजगार प्रकार", "SOS Phone": "SOS फोन", "High School Diploma": "हाई स्कूल डिप्लोमा", "Associate Degree": "एसोसिएट डिग्री", "Bachelor's Degree": "स्नातक डिग्री", "Master's Degree": "मास्टर डिग्री", "Doctoral Degree": "डॉक्टरेट डिग्री", "Copy this Promo to use it in your Ride!": "इस प्रोमो को कॉपी करें और अपनी यात्रा में उपयोग करें!", "To change some Settings": "कुछ सेटिंग्स बदलने के लिए", "Order Request Page": "आदेश अनुरोध पृष्ठ", "Rouats of Trip": "यात्रा के मार्ग", "Passenger Name is ": "यात्री का नाम है ", "Total From Passenger is ": "यात्री से कुल है ", "Duration To Passenger is ": "यात्री तक की अवधि है ", "Distance To Passenger is ": "यात्री तक की दूरी है ", "Total For You is ": "आपके लिए कुल है ", "Distance is ": "दूरी है ", " KM": " किमी", "Duration of Trip is ": "यात्रा की अवधि है ", " Minutes": " मिनट", "Apply Order": "आदेश लागू करें", "Refuse Order": "आदेश अस्वीकार करें", "Rate Captain": "कप्तान को रेट करें", "Enter your Note": "अपनी नोट दर्ज करें", "Type something...": "कुछ टाइप करें...", "Submit rating": "रेटिंग जमा करें", "Rate Passenger": "यात्री को रेट करें", "Ride Summary": "यात्रा सारांश", "welcome_message": "Intaleq में आपका स्वागत है!", "app_description": "Intaleq एक विश्वसनीय, सुरक्षित और सस्ती राइड-शेयरिंग एप्लिकेशन है।", "get_to_destination": "अपने गंतव्य तक तेजी से और आसानी से पहुंचें।", "get_a_ride": "Intaleq के साथ, आप अपने गंतव्य तक कुछ ही मिनटों में यात्रा कर सकते हैं।", "safe_and_comfortable": "एक सुरक्षित और आरामदायक यात्रा का आनंद लें।", "committed_to_safety": "Intaleq सुरक्षा के लिए प्रतिबद्ध है, और हमारे सभी कप्तानों की सावधानीपूर्वक जांच और पृष्ठभूमि जांच की जाती है।", // "Driver Applied the Ride for You": "ड्राइवर ने आपके लिए यात्रा लागू की", // "Show latest promo": "नवीनतम प्रोमो दिखाएं", // "Cancel Trip": "यात्रा रद्द करें", // "Passenger Cancel Trip": "यात्री ने यात्रा रद्द कर दी", // "Accepted Ride": "स्वीकृत यात्रा", "your ride is Accepted": "आपकी यात्रा स्वीकृत हो गई है", // "Trip is Begin": "यात्रा शुरू हो गई है", "Driver is waiting at pickup.": "ड्राइवर पिकअप पर इंतज़ार कर रहा है।", "Driver is on the way": "ड्राइवर रास्ते में है", "Contact Options": "संपर्क विकल्प", "Send a custom message": "एक कस्टम संदेश भेजें", "Type your message": "अपना संदेश टाइप करें", // "Hi ,I will go now": "हाय, मैं अब जाऊंगा", // "Passenger come to you": "यात्री आपके पास आ रहा है", // "Hi ,I Arrive your site": "हाय, मैं आपकी साइट पर पहुंच गया हूं", // "Driver Finish Trip": "ड्राइवर ने यात्रा समाप्त की", // "you will pay to Driver": "आप ड्राइवर को भुगतान करेंगे", // "Driver Cancel Your Trip": "ड्राइवर ने आपकी यात्रा रद्द कर दी", // "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "आप ड्राइवर को भुगतान करेंगे, आप ड्राइवर के समय की लागत का भुगतान करेंगे, अपने Intaleq वॉलेट को देखें", // "I will go now": "मैं अब जाऊंगा", "You Have Tips": "आपके पास टिप्स हैं", " tips\nTotal is": " टिप्स\nकुल है", // "No,I want": "नहीं, मैं चाहता हूं", "Your fee is ": "आपका शुल्क है ", // "Do you want to pay Tips for this Driver": "क्या आप इस ड्राइवर के लिए टिप्स देना चाहते हैं?", "Tip is ": "टिप है ", "Are you want to wait drivers to accept your order": "क्या आप ड्राइवरों के आदेश स्वीकार करने की प्रतीक्षा करना चाहते हैं?", "This price is fixed even if the route changes for the driver.": "यह कीमत निश्चित है भले ही ड्राइवर के लिए मार्ग बदल जाए।", "The price may increase if the route changes.": "यदि मार्ग बदलता है तो कीमत बढ़ सकती है।", "The captain is responsible for the route.": "कप्तान मार्ग के लिए जिम्मेदार है।", "We are search for nearst driver": "हम निकटतम ड्राइवर की तलाश कर रहे हैं", "Your order is being prepared": "आपका आदेश तैयार किया जा रहा है", "The drivers are reviewing your request": "ड्राइवर आपके अनुरोध की समीक्षा कर रहे हैं", "Your order sent to drivers": "आपका आदेश ड्राइवरों को भेज दिया गया है", "You can call or record audio of this trip": "आप इस यात्रा का ऑडियो कॉल या रिकॉर्ड कर सकते हैं", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "यात्रा शुरू हो गई है! आपातकालीन नंबरों से संपर्क करने, अपनी यात्रा साझा करने या यात्रा के लिए वॉयस रिकॉर्डिंग सक्रिय करने के लिए स्वतंत्र महसूस करें", // "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "कृपया सुनिश्चित करें कि आपके पास आपका सारा निजी सामान है और कोई भी शेष किराया, यदि लागू हो, आपके वॉलेट में जोड़ दिया गया है। Intaleq ऐप चुनने के लिए धन्यवाद।", // "Don’t forget your personal belongings.": "अपने निजी सामान को न भूलें।", "Camera Access Denied.": "कैमरा पहुंच अस्वीकृत।", "Open Settings": "सेटिंग्स खोलें", "GPS Required Allow !.": "GPS की आवश्यकता है!", "Your Account is Deleted": "आपका खाता हटा दिया गया है", "Are you sure to delete your account?": "क्या आप वाकई अपना खाता हटाना चाहते हैं?", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "आपका डेटा 2 सप्ताह के बाद मिटा दिया जाएगा\nऔर आप 1 महीने के बाद ऐप का उपयोग करने के लिए वापस नहीं आ सकते हैं", "Enter Your First Name": "अपना पहला नाम दर्ज करें", "Are you Sure to LogOut?": "क्या आप वाकई लॉगआउट करना चाहते हैं?", "Email Wrong": "ईमेल गलत", "Email you inserted is Wrong.": "आपके द्वारा दर्ज किया गया ईमेल गलत है।", "You have finished all times ": "आपने सभी बार समाप्त कर दिया है", "if you want help you can email us here": "यदि आप मदद चाहते हैं तो आप हमें यहां ईमेल कर सकते हैं", "Thanks": "धन्यवाद", "Email Us": "हमें ईमेल करें", "I cant register in your app in face detection ": "मैं आपके ऐप में चेहरा पहचान में पंजीकृत नहीं कर सकता", "Hi": "हाय", "No face detected": "कोई चेहरा पहचाना नहीं गया", "Image detecting result is ": "छवि पहचान परिणाम है ", "from 3 times Take Attention": "3 बार से ध्यान दें", "Be sure for take accurate images please\nYou have": "कृपया सटीक छवियां लेने के लिए सुनिश्चित करें\nआपके पास है", "image verified": "छवि सत्यापित", "Next": "अगला", "There is no help Question here": "यहां कोई मदद प्रश्न नहीं है", "You dont have Points": "आपके पास पॉइंट्स नहीं हैं", "You Are Stopped For this Day !": "आप इस दिन के लिए रोक दिए गए हैं!", "You must be charge your Account": "आपको अपना खाता चार्ज करना होगा", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "आपने इस दिन 3 यात्राओं को अस्वीकार कर दिया है, यही कारण है\nकल मिलते हैं!", "Recharge my Account": "मेरा खाता रिचार्ज करें", "Ok , See you Tomorrow": "ठीक है, कल मिलते हैं", "You are Stopped": "आप रोक दिए गए हैं", "Connected": "जुड़ा हुआ", "Not Connected": "जुड़ा नहीं है", "Your are far from passenger location": "आप यात्री के स्थान से दूर हैं", "go to your passenger location before\nPassenger cancel trip": "यात्री के स्थान पर जाएं इससे पहले कि\nयात्री यात्रा रद्द कर दे", "You will get cost of your work for this trip": "आपको इस यात्रा के लिए अपने काम की लागत मिलेगी", " in your wallet": "आपके वॉलेट में", "you gain": "आप कमाते हैं", "Order Cancelled by Passenger": "यात्री द्वारा आदेश रद्द", "Success": "सफलता", "Feedback data saved successfully": "प्रतिक्रिया डेटा सफलतापूर्वक सहेजा गया", "No Promo for today .": "आज के लिए कोई प्रोमो नहीं।", "Select your destination": "अपना गंतव्य चुनें", "Search for your Start point": "अपने शुरुआती बिंदु की खोज करें", "Search for waypoint": "वेपॉइंट की खोज करें", "Current Location": "वर्तमान स्थान", "Add Location 1": "स्थान 1 जोड़ें", "You must Verify email !.": "आपको ईमेल सत्यापित करना होगा!", "Cropper": "क्रॉपर", "Saved Sucssefully": "सफलतापूर्वक सहेजा गया", "Select Date": "तारीख चुनें", "Birth Date": "जन्म तिथि", "Ok": "ठीक है", "the 500 points equal 30 JOD": "500 पॉइंट्स 30 JOD के बराबर हैं", "the 500 points equal 30 JOD for you \nSo go and gain your money": "500 पॉइंट्स आपके लिए 30 JOD के बराबर हैं\nतो जाएं और अपना पैसा कमाएं", "token updated": "टोकन अद्यतन", "Add Location 2": "स्थान 2 जोड़ें", "Add Location 3": "स्थान 3 जोड़ें", "Add Location 4": "स्थान 4 जोड़ें", "Waiting for your location": "आपके स्थान की प्रतीक्षा", "Search for your destination": "अपने गंतव्य की खोज करें", "Hi! This is": "हाय! यह है", " I am using": " मैं उपयोग कर रहा हूं", " to ride with": " के साथ यात्रा करने के लिए", " as the driver.": " ड्राइवर के रूप में।", "is driving a ": "ड्राइविंग कर रहा है ", " with license plate ": " लाइसेंस प्लेट के साथ ", " I am currently located at ": " मैं वर्तमान में स्थित हूं ", "Please go to Car now ": "कृपया अब कार पर जाएं ", "You will receive a code in WhatsApp Messenger": "आपको WhatsApp Messenger में एक कोड प्राप्त होगा", "If you need assistance, contact us": "यदि आपको सहायता की आवश्यकता है, तो हमसे संपर्क करें", "Promo Ended": "प्रोमो समाप्त", "Enter the promo code and get": "प्रोमो कोड दर्ज करें और प्राप्त करें", "DISCOUNT": "छूट", "No wallet record found": "कोई वॉलेट रिकॉर्ड नहीं मिला", "for": "के लिए", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "Intaleq सबसे सुरक्षित राइड-शेयरिंग ऐप है जो कप्तानों और यात्रियों दोनों के लिए कई सुविधाएं प्रदान करता है। हम सिर्फ 8% की सबसे कम कमीशन दर प्रदान करते हैं, यह सुनिश्चित करते हुए कि आपको अपनी यात्राओं के लिए सर्वोत्तम मूल्य मिले। हमारा ऐप सर्वश्रेष्ठ कप्तानों के लिए बीमा, शीर्ष इंजीनियरों के साथ कारों का नियमित रखरखाव और सभी उपयोगकर्ताओं के लिए सम्मानजनक और उच्च गुणवत्ता वाले अनुभव सुनिश्चित करने के लिए सड़क सेवाएं शामिल करता है।", "You can contact us during working hours from 12:00 - 19:00.": "आप काम के घंटों के दौरान 12:00 - 19:00 बजे के बीच हमसे संपर्क कर सकते हैं।", "Choose a contact option": "संपर्क विकल्प चुनें", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "काम का समय 12:00 - 19:00 बजे के बीच है।\nआप WhatsApp संदेश या ईमेल भेज सकते हैं।", "Promo code copied to clipboard!": "प्रोमो कोड क्लिपबोर्ड पर कॉपी किया गया!", "Copy Code": "कोड कॉपी करें", "Your invite code was successfully applied!": "आपका आमंत्रण कोड सफलतापूर्वक लागू किया गया!", "Payment Options": "भुगतान विकल्प", "wait 1 minute to receive message": "संदेश प्राप्त करने के लिए 1 मिनट प्रतीक्षा करें", "Promo Copied!": "प्रोमो कॉपी किया गया!", "You have copied the promo code.": "आपने प्रोमो कोड कॉपी कर लिया है।", "Valid Until:": "मान्य है:", "Select Payment Amount": "भुगतान राशि चुनें", "The promotion period has ended.": "प्रोमोशन अवधि समाप्त हो गई है।", "Promo Code Accepted": "प्रोमो कोड स्वीकृत", "Tap on the promo code to copy it!": "प्रोमो कोड को कॉपी करने के लिए उस पर टैप करें!", "Lowest Price Achieved": "सबसे कम कीमत प्राप्त", "Cannot apply further discounts.": "आगे की छूट लागू नहीं की जा सकती।", "Promo Already Used": "प्रोमो पहले से ही उपयोग किया गया", "Invitation Used": "आमंत्रण उपयोग किया गया", "You have already used this promo code.": "आपने पहले से ही इस प्रोमो कोड का उपयोग कर लिया है।", "Insert Your Promo Code": "अपना प्रोमो कोड डालें", "Enter promo code here": "प्रोमो कोड यहां दर्ज करें", "Please enter a valid promo code": "कृपया एक वैध प्रोमो कोड दर्ज करें", "Awfar Car": "अवफार कार", "Old and affordable, perfect for budget rides.": "पुरानी और सस्ती, बजट यात्राओं के लिए आदर्श।", " If you need to reach me, please contact the driver directly at": " यदि आपको मुझसे संपर्क करने की आवश्यकता है, तो कृपया सीधे ड्राइवर से संपर्क करें", "No Car or Driver Found in your area.": "आपके क्षेत्र में कोई कार या ड्राइवर नहीं मिला।", "Please Try anther time ": "कृपया किसी अन्य समय प्रयास करें ", "There no Driver Aplly your order sorry for that ": "कोई ड्राइवर आपके आदेश को लागू नहीं करता है, इसके लिए खेद है ", "Trip Cancelled": "यात्रा रद्द", "The Driver Will be in your location soon .": "ड्राइवर जल्द ही आपके स्थान पर होगा।", "The distance less than 500 meter.": "दूरी 500 मीटर से कम है।", "Promo End !": "प्रोमो समाप्त!", "There is no notification yet": "अभी तक कोई सूचना नहीं है", "Use Touch ID or Face ID to confirm payment": "भुगतान की पुष्टि करने के लिए Touch ID या Face ID का उपयोग करें", "Contact us for any questions on your order.": "अपने आदेश पर किसी भी प्रश्न के लिए हमसे संपर्क करें।", "Pyament Cancelled .": "भुगतान रद्द।", "type here": "यहां टाइप करें", "Scan Driver License": "ड्राइवर लाइसेंस स्कैन करें", "Please put your licence in these border": "कृपया अपना लाइसेंस इन सीमाओं में रखें", "Camera not initialized yet": "कैमरा अभी तक आरंभ नहीं किया गया है", "Take Image": "छवि लें", "AI Page": "AI पेज", "Take Picture Of ID Card": "पहचान पत्र की तस्वीर लें", "Take Picture Of Driver License Card": "ड्राइवर लाइसेंस कार्ड की तस्वीर लें", "We are process picture please wait ": "हम छवि प्रसंस्करण कर रहे हैं कृपया प्रतीक्षा करें ", "There is no data yet.": "अभी तक कोई डेटा नहीं है।", "Name :": "नाम:", "Drivers License Class: ": "ड्राइवर लाइसेंस वर्ग:", "Document Number: ": "दस्तावेज़ संख्या:", "Address: ": "पता:", "Height: ": "ऊंचाई:", "Expiry Date: ": "समाप्ति तिथि:", "Date of Birth: ": "जन्म तिथि:", "You can\'t continue with us .\nYou should renew Driver license": "आप हमारे साथ जारी नहीं रख सकते हैं।\nआपको ड्राइवर लाइसेंस नवीनीकृत करना चाहिए", "Detect Your Face ": "अपना चेहरा पहचानें", "Go to next step\nscan Car License.": "अगले चरण पर जाएं\nकार लाइसेंस स्कैन करें।", "Name in arabic": "अरबी में नाम", "Drivers License Class": "ड्राइवर लाइसेंस वर्ग", "Date of Birth": "जन्म तिथि", // "Select date and time of trip": "यात्रा की तारीख और समय चुनें", "Selected Date": "चयनित तारीख", "Select Time": "समय चुनें", "Selected Time": "चयनित समय", // "OK": "ठीक है", // "Cancel": "रद्द करें", "Selected Date and Time": "चयनित तारीख और समय", "Lets check Car license ": "कार लाइसेंस की जांच करें", "Car": "कार", "Plate": "प्लेट", "N/A": "N/A", "Rides": "यात्राएं", "Age": "उम्र", // "Education": "शिक्षा", // "Color": "रंग", // "Displacement": "विस्थापन", // "Fuel": "ईंधन", "Selected driver": "चयनित ड्राइवर", "Lets check License Back Face": "लाइसेंस की पीठ की जांच करें", "Car License Card": "कार लाइसेंस कार्ड", "No image selected yet": "अभी तक कोई छवि चयनित नहीं है", "Made :": "निर्माता:", "model :": "मॉडल:", "VIN :": "VIN:", "year :": "वर्ष:", "ُExpire Date": "समाप्ति तिथि", "Login Driver": "ड्राइवर लॉगिन", "Password must br at least 6 character.": "पासवर्ड कम से कम 6 अक्षरों का होना चाहिए।", "if you don\'t have account": "यदि आपके पास खाता नहीं है", "Here recorded trips audio": "यहां रिकॉर्ड की गई यात्राओं का ऑडियो है", "Register as Driver": "ड्राइवर के रूप में पंजीकरण", // "Privacy Notice": "गोपनीयता नीति", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "नीचे \"मैं सहमत हूं\" चुनकर, मैंने उपयोग की शर्तों की समीक्षा की है और उनसे सहमत हूं और स्वीकार करता हूं ", ". I am at least 18 years of age.": ". मैं कम से कम 18 वर्ष का हूं।", "Log Out Page": "लॉग आउट पेज", "Log Off": "लॉग ऑफ", "Register Driver": "ड्राइवर पंजीकरण", "Verify Email For Driver": "ड्राइवर के लिए ईमेल सत्यापित करें", "Admin DashBoard": "व्यवस्थापक डैशबोर्ड", "Your name": "आपका नाम", "your ride is applied": "आपकी यात्रा लागू हो गई है", "Your password": "आपका पासवर्ड", "H and": "घंटे और", "LE": "एलई", "JOD": "JOD", "m": "मी", "We search nearst Driver to you": "हम आपके निकटतम ड्राइवर की तलाश करते हैं", "please wait till driver accept your order": "कृपया प्रतीक्षा करें जब तक ड्राइवर आपका आदेश स्वीकार नहीं करता", "No accepted orders? Try raising your trip fee to attract riders.": "कोई स्वीकृत आदेश नहीं? सवारों को आकर्षित करने के लिए अपनी यात्रा शुल्क बढ़ाने का प्रयास करें।", "You should select one": "आपको एक चुनना चाहिए", "The driver accept your order for": "ड्राइवर ने आपका आदेश स्वीकार कर लिया", "Increase Fee": "शुल्क बढ़ाएं", "No, thanks": "नहीं, धन्यवाद", "The driver on your way": "ड्राइवर आपके रास्ते में है", "Total price from ": "से कुल कीमत ", "Order Details Intaleq": "आदेश विवरण गति", // "Order Applied": "आदेश लागू", "accepted your order": "आपका आदेश स्वीकार कर लिया", // "We regret to inform you that another driver has accepted this order.": "हमें खेद है कि एक अन्य ड्राइवर ने इस आदेश को स्वीकार कर लिया है", "Selected file:": "चयनित फ़ाइल:", "Your trip cost is": "आपकी यात्रा की लागत है", "this will delete all files from your device": "यह आपके डिवाइस से सभी फ़ाइलों को हटा देगा", " in your": "आपके", "Exclusive offers and discounts always with the Intaleq app": "Intaleq ऐप के साथ हमेशा विशेष ऑफ़र और छूट", // "Please go to Car Driver": "कृपया कार ड्राइवर के पास जाएं", " wallet due to a previous trip.": "पिछली यात्रा के कारण वॉलेट।", "Submit Question": "प्रश्न जमा करें", "Please enter your Question.": "कृपया अपना प्रश्न दर्ज करें।", "Help Details": "मदद विवरण", "No trip yet found": "अभी तक कोई यात्रा नहीं मिली", "No Response yet.": "अभी तक कोई प्रतिक्रिया नहीं।", " You Earn today is ": " आप आज कमाते हैं ", " You Have in": " आपके पास है", "Total points is ": "कुल पॉइंट्स हैं ", "Total Connection Duration:": "कुल कनेक्शन अवधि:", " H and": " घंटे और", "Passenger name : ": "यात्री का नाम: ", "Cost Of Trip IS ": "यात्रा की लागत है ", "Arrival time": "आगमन समय", "arrival time to reach your point": "आपके बिंदु तक पहुंचने का आगमन समय", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "स्पीड और स्कूटर यात्राओं के लिए, कीमत गतिशील रूप से गणना की जाती है। कम्फर्ट यात्राओं के लिए, कीमत समय और दूरी पर आधारित है।", "Hello this is Driver": "हैलो, यह ड्राइवर है", "Is the Passenger in your Car ?": "क्या यात्री आपकी कार में है?", "Please wait for the passenger to enter the car before starting the trip.": "यात्रा शुरू करने से पहले यात्री के कार में प्रवेश करने की प्रतीक्षा करें।", "No ,still Waiting.": "नहीं, अभी भी प्रतीक्षा कर रहा हूं।", "I arrive you": "मैं आप तक पहुंच गया हूं", "I Arrive your site": "मैं आपकी साइट पर पहुंच गया हूं", "You are not in near to passenger location": "आप यात्री के स्थान के निकट नहीं हैं", "please go to picker location exactly": "कृपया पिकर स्थान पर ठीक से जाएं", "You Can Cancel Trip And get Cost of Trip From": "आप यात्रा रद्द कर सकते हैं और यात्रा की लागत प्राप्त कर सकते हैं", "Are you sure to cancel?": "क्या आप रद्द करना चाहते हैं?", // "Yes": "हां", "Insert Emergincy Number": "आपातकालीन नंबर डालें", "Best choice for comfort car and flexible route and stops point": "आरामदायक कार और लचीले मार्ग और स्टॉप पॉइंट के लिए सबसे अच्छा विकल्प", "Insert": "डालें", "This is for scooter or a motorcycle.": "यह स्कूटर या मोटरसाइकिल के लिए है।", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "यह यात्रा सीधे आपके शुरुआती बिंदु से आपके गंतव्य तक एक निश्चित कीमत पर जाती है। ड्राइवर को नियोजित मार्ग का पालन करना चाहिए", "You can decline a request without any cost": "आप बिना किसी लागत के अनुरोध को अस्वीकार कर सकते हैं", "Perfect for adventure seekers who want to experience something new and exciting": "उन साहसिक खोजकर्ताओं के लिए आदर्श जो कुछ नया और रोमांचक अनुभव करना चाहते हैं", "My current location is:": "मेरा वर्तमान स्थान है:", "and I have a trip on": "और मेरी यात्रा है", "App with Passenger": "यात्री के साथ ऐप", "You will be pay the cost to driver or we will get it from you on next trip": "आप ड्राइवर को लागत का भुगतान करेंगे या हम इसे अगली यात्रा में आपसे प्राप्त करेंगे", "Trip has Steps": "यात्रा में कदम हैं", "Distance from Passenger to destination is ": "यात्री से गंतव्य तक की दूरी है ", "price is": "कीमत है", "This ride type does not allow changes to the destination or additional stops": "इस यात्रा प्रकार में गंतव्य या अतिरिक्त स्टॉप में परिवर्तन की अनुमति नहीं है", "This price may be changed": "यह कीमत बदल सकती है", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "कोई SIM कार्ड नहीं, कोई समस्या नहीं! हमारे ऐप के माध्यम से सीधे अपने ड्राइवर को कॉल करें। हम आपकी गोपनीयता सुनिश्चित करने के लिए उन्नत तकनीक का उपयोग करते हैं।", "This ride type allows changes, but the price may increase": "इस यात्रा प्रकार में परिवर्तन की अनुमति है, लेकिन कीमत बढ़ सकती है", "Select one message": "एक संदेश चुनें", "I'm waiting for you": "मैं आपका इंतज़ार कर रहा हूं", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "हमने देखा कि गति 100 किमी/घंटा से अधिक है। कृपया अपनी सुरक्षा के लिए गति कम करें। यदि आप असुरक्षित महसूस करते हैं, तो आप अपनी यात्रा विवरण एक संपर्क के साथ साझा कर सकते हैं या लाल SOS बटन का उपयोग करके पुलिस को कॉल कर सकते हैं।", "Warning: Intaleqing detected!": "चेतावनी: अत्यधिक गति का पता चला!", "Please help! Contact me as soon as possible.": "कृपया मदद करें! जितनी जल्दी हो सके मुझसे संपर्क करें।", "Share Trip Details": "यात्रा विवरण साझा करें", "Car Plate is ": "कार प्लेट है ", "VIP Order": "वीआईपी आदेश", "the 300 points equal 300 L.E for you \nSo go and gain your money": "300 पॉइंट्स आपके लिए 300 एल.ई. के बराबर हैं\nतो जाएं और अपना पैसा कमाएं", "the 300 points equal 300 L.E": "300 पॉइंट्स 300 एल.ई. के बराबर हैं", "The payment was not approved. Please try again.": "भुगतान स्वीकृत नहीं हुआ। कृपया पुनः प्रयास करें।", "Payment Failed": "भुगतान विफल", "Error": "त्रुटि", "This is a scheduled notification.": "यह एक निर्धारित सूचना है।", "An error occurred during the payment process.": "भुगतान प्रक्रिया के दौरान एक त्रुटि हुई।", "The payment was approved.": "भुगतान स्वीकृत हो गया।", "Payment Successful": "भुगतान सफल", "No ride found yet": "अभी तक कोई यात्रा नहीं मिली", "Accept Order": "आदेश स्वीकार करें", // "reject your order.": "आपका आदेश अस्वीकार करें।", "Bottom Bar Example": "बॉटम बार उदाहरण", "Driver phone": "ड्राइवर फोन", "Statistics": "सांख्यिकी", "Origin": "मूल", "Destination": "गंतव्य", "Driver Name": "ड्राइवर का नाम", "Driver Car Plate": "ड्राइवर कार प्लेट", "Available for rides": "यात्राओं के लिए उपलब्ध", "Scan Id": "आईडी स्कैन करें", "Camera not initilaized yet": "कैमरा अभी तक आरंभ नहीं किया गया है", "Scan ID MklGoogle": "आईडी स्कैन MklGoogle", "Language": "भाषा", "Jordan": "जॉर्डन", "USA": "यूएसए", "Egypt": "मिस्र", "Turkey": "तुर्की", "Saudi Arabia": "सऊदी अरब", "Qatar": "कतर", "Bahrain": "बहरीन", "Kuwait": "कुवैत", "But you have a negative salary of": "लेकिन आपका नकारात्मक वेतन है", "Promo Code": "प्रोमो कोड", "Your trip distance is": "आपकी यात्रा की दूरी है", "Enter promo code": "प्रोमो कोड दर्ज करें", "You have promo!": "आपके पास प्रोमो है!", "Cost Duration": "लागत अवधि", "Duration is": "अवधि है", "Leave": "छोड़ें", "Join": "शामिल हों", "Heading your way now. Please be ready.": "अब आपके रास्ते में। कृपया तैयार रहें।", "Approaching your area. Should be there in 3 minutes.": "आपके क्षेत्र के निकट। 3 मिनट में वहां होना चाहिए।", "There's heavy traffic here. Can you suggest an alternate pickup point?": "यहां भारी यातायात है। क्या आप एक वैकल्पिक पिकअप बिंदु सुझा सकते हैं?", "This ride is already taken by another driver.": "यह यात्रा पहले से ही एक अन्य ड्राइवर द्वारा ली जा चुकी है।", "You Should be select reason.": "आपको कारण चुनना चाहिए।", " \$": " \$", "Waiting for Driver ...": "ड्राइवर की प्रतीक्षा ...", "Latest Recent Trip": "नवीनतम हाल की यात्रा", "from your list": "आपकी सूची से", "Do you want to change Work location": "क्या आप कार्य स्थान बदलना चाहते हैं?", "Do you want to change Home location": "क्या आप घर का स्थान बदलना चाहते हैं?", "We Are Sorry That we dont have cars in your Location!": "हमें खेद है कि हमारे पास आपके स्थान पर कारें नहीं हैं!", "Choose from Map": "मानचित्र से चुनें", "Pick your ride location on the map - Tap to confirm": "मानचित्र पर अपनी यात्रा स्थान चुनें - पुष्टि करने के लिए टैप करें", // "To Work": "काम पर", // "Are you want to go this site": "क्या आप इस साइट पर जाना चाहते हैं?", "Closest & Cheapest": "निकटतम और सबसे सस्ता", // "Work Saved": "काम की जगह सहेजी गई", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "Intaleq एक राइड-हेलिंग ऐप है जो सुरक्षित, विश्वसनीय और सुलभ है।", "With Intaleq, you can get a ride to your destination in minutes.": "Intaleq के साथ, आप अपने गंतव्य तक कुछ ही मिनटों में यात्रा कर सकते हैं।", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "Intaleq सुरक्षा के लिए प्रतिबद्ध है, और हमारे सभी कप्तानों की सावधानीपूर्वक जांच और पृष्ठभूमि जांच की जाती है।", // "To Home": "घर पर", // "Home Saved": "घर की जगह सहेजी गई", // "Destination selected": "गंतव्य चुना गया:", // "Now select start pick": "अब शुरुआती स्थान चुनें:", "Pick from map": "मानचित्र से चुनें", // "Click here point": "यहां क्लिक करें", "No Car in your site. Sorry!": "आपके स्थान पर कोई कार नहीं है। खेद है!", "Nearest Car for you about ": "आपके लिए निकटतम कार लगभग ", // "N/A": "N/A", "From :": "से:", "Get Details of Trip": "यात्रा का विवरण प्राप्त करें", "If you want add stop click here": "यदि आप स्टॉप जोड़ना चाहते हैं तो यहां क्लिक करें", // "Driver": "ड्राइवर", "Where you want go ": "आप कहां जाना चाहते हैं ", "My Card": "मेरी कार्ड", "Start Record": "रिकॉर्ड शुरू करें", "Wallet": "वॉलेट", "History of Trip": "यात्रा का इतिहास", "Helping Center": "सहायता केंद्र", "Record saved": "रिकॉर्ड सहेजा गया", "Trips recorded": "यात्राएं रिकॉर्ड की गईं", "Select Your Country": "अपना देश चुनें", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "यह सुनिश्चित करने के लिए कि आप अपने स्थान के लिए सबसे सटीक जानकारी प्राप्त करें, कृपया नीचे अपना देश चुनें। यह ऐप अनुभव और सामग्री को आपके देश के अनुरूप बनाने में मदद करेगा।", "Are you sure to delete recorded files": "क्या आप वाकई रिकॉर्ड की गई फ़ाइलों को हटाना चाहते हैं?", "Select recorded trip": "रिकॉर्ड की गई यात्रा चुनें", "Card Number": "कार्ड नंबर", "Hi, Where to ": "हाय, कहां जाना है ", "Pick your destination from Map": "मानचित्र से अपना गंतव्य चुनें", "Add Stops": "स्टॉप जोड़ें", "Get Direction": "दिशा प्राप्त करें", "Add Location": "स्थान जोड़ें", "Switch Rider": "सवार बदलें", "You will arrive to your destination after timer end.": "टाइमर समाप्त होने के बाद आप अपने गंतव्य पर पहुंचेंगे।", "You can cancel trip": "आप यात्रा रद्द कर सकते हैं", "The driver waitting you in picked location .": "ड्राइवर आपका चुने हुए स्थान पर इंतज़ार कर रहा है।", "10\$ and get 3% discount": "10\$ और 3% छूट प्राप्त करें", "20\$ and get 4% discount": "20\$ और 4% छूट प्राप्त करें", "40\$ and get 6% discount": "40\$ और 6% छूट प्राप्त करें", "100\$ and get 9% discount": "100\$ और 9% छूट प्राप्त करें", "Pay with Your": "अपने साथ भुगतान करें", "Pay with Credit Card": "क्रेडिट कार्ड से भुगतान करें", "Payment History": "भुगतान इतिहास", "Show Promos to Charge": "चार्ज करने के लिए प्रोमो दिखाएं", "Point": "पॉइंट", "How many hours would you like to wait?": "आप कितने घंटे प्रतीक्षा करना चाहेंगे?", "Driver Wallet": "ड्राइवर वॉलेट", "Choose between those Type Cars": "उन प्रकार की कारों के बीच चुनें", "hour": "घंटा", "Select Waiting Hours": "प्रतीक्षा घंटे चुनें", "Total Points is": "कुल पॉइंट्स हैं", "You will receive a code in SMS message": "आपको एसएमएस संदेश में एक कोड प्राप्त होगा", "Done": "हो गया", "Total Budget from trips is ": "यात्राओं से कुल बजट है ", "Total Amount:": "कुल राशि:", "Total Budget from trips by\nCredit card is ": "क्रेडिट कार्ड द्वारा यात्राओं से कुल बजट है ", "This amount for all trip I get from Passengers": "यह राशि सभी यात्राओं के लिए है जो मुझे यात्रियों से मिलती है", "Pay from my budget": "मेरे बजट से भुगतान करें", "This amount for all trip I get from Passengers and Collected For me in": "यह राशि सभी यात्राओं के लिए है जो मुझे यात्रियों से मिलती है और मेरे लिए एकत्र की जाती है", "You can buy points from your budget": "आप अपने बजट से पॉइंट्स खरीद सकते हैं", "insert amount": "राशि डालें", "You can buy Points to let you online\nby this list below": "आप पॉइंट्स खरीद सकते हैं ताकि आप ऑनलाइन रह सकें\nनीचे दी गई सूची से", "Create Wallet to receive your money": "अपना पैसा प्राप्त करने के लिए वॉलेट बनाएं", "Enter your feedback here": "अपनी प्रतिक्रिया यहां दर्ज करें", "Please enter your feedback.": "कृपया अपनी प्रतिक्रिया दर्ज करें।", "Feedback": "प्रतिक्रिया", "Submit ": "जमा करें ", "Click here to Show it in Map": "इसे मानचित्र में दिखाने के लिए यहां क्लिक करें", "Canceled": "रद्द", "Type your Email": "अपना ईमेल टाइप करें", "No I want": "नहीं मैं चाहता हूं", "Email is": "ईमेल है", "Phone Number is": "फोन नंबर है", "Date of Birth is": "जन्म तिथि है", "Sex is ": "लिंग है ", "Car Details": "कार विवरण", "VIN is": "VIN है", "Color is ": "रंग है ", "Make is ": "निर्माता है ", "Model is": "मॉडल है", "Year is": "वर्ष है", "Expiration Date ": "समाप्ति तिथि ", "Edit Your data": "अपना डेटा संपादित करें", "write vin for your car": "अपनी कार के लिए VIN लिखें", "VIN": "VIN", "write Color for your car": "अपनी कार के लिए रंग लिखें", "write Make for your car": "अपनी कार के लिए निर्माता लिखें", // "Make": "निर्माता", "write Model for your car": "अपनी कार के लिए मॉडल लिखें", // "Model": "मॉडल", "write Year for your car": "अपनी कार के लिए वर्ष लिखें", // "Expiration Date": "समाप्ति तिथि", "write Expiration Date for your car": "अपनी कार के लिए समाप्ति तिथि लिखें", "Tariffs": "टैरिफ", "Minimum fare": "न्यूनतम किराया", "Maximum fare": "अधिकतम किराया", "Flag-down fee": "फ्लैग-डाउन शुल्क", "Including Tax": "कर सहित", "BookingFee": "बुकिंग शुल्क", "Morning": "सुबह", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "07:30 से 10:30 तक (गुरुवार, शुक्रवार, शनिवार, सोमवार)", "Evening": "शाम", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "12:00 से 15:00 तक (गुरुवार, शुक्रवार, शनिवार, सोमवार)", "Night": "रात", "You have in account": "आपके खाते में है", "Select Country": "देश चुनें", "Ride Today : ": "आज की यात्रा: ", "After this period\nYou can\'t cancel!": "इस अवधि के बाद\nआप रद्द नहीं कर सकते!", "from 23:59 till 05:30": "23:59 से 05:30 तक", "Rate Driver": "ड्राइवर को रेट करें", "Total Cost is ": "कुल लागत है ", "Write note": "नोट लिखें", "Time to arrive": "आगमन समय", "Ride Summaries": "यात्रा सारांश", "Total Cost": "कुल लागत", "Average of Hours of": "घंटों का औसत", " is ON for this month": " इस महीने के लिए चालू है", "Days": "दिन", "Total Hours on month": "महीने पर कुल घंटे", "Counts of Hours on days": "दिनों पर घंटों की संख्या", "OrderId": "आदेश आईडी", "created time": "बनाया गया समय", "Intaleq Over": "अत्यधिक गति", "I will slow down": "मैं गति कम करूंगा", "Map Passenger": "मानचित्र यात्री", "Be Slowly": "धीरे-धीरे", "If you want to make Google Map App run directly when you apply order": "यदि आप Google Map ऐप को सीधे चलाना चाहते हैं जब आप आदेश लागू करते हैं", "You can change the language of the app": "आप ऐप की भाषा बदल सकते हैं", "Your Budget less than needed": "आपका बजट आवश्यकता से कम है", "You can change the Country to get all features": "सभी सुविधाएं प्राप्त करने के लिए आप देश बदल सकते हैं", "Change Country": "देश बदलें" }, // "ru": { "Order": "Заказ", "OrderVIP": "VIP Заказ", "Cancel Trip": "Отменить поездку", "Passenger Cancel Trip": "Пассажир отменил поездку", "VIP Order": "VIP Заказ", "The driver accepted your trip": "Водитель принял вашу поездку", "message From passenger": "Сообщение от пассажира", "Cancel": "Отменить", "Trip Cancelled. The cost of the trip will be added to your wallet.": "Поездка отменена. Стоимость поездки будет добавлена на ваш кошелек.", "token change": "Смена токена", "face detect": "Обнаружение лица", "Face Detection Result": "Результат обнаружения лица", "similar": "похоже", "not similar": "не похоже", "Hi ,I will go now": "Привет, я пойду сейчас", "Passenger come to you": "Пассажир идет к вам", "Call Income": "Доход от звонка", "Call Income from Passenger": "Доход от звонка от пассажира", "Criminal Document Required": "Требуется криминальный документ", "You should have upload it .": "Вы должны были загрузить его.", "Call End": "Звонок завершен", "The order has been accepted by another driver.": "Заказ был принят другим водителем.", "The order Accepted by another Driver": "Заказ принят другим водителем", "We regret to inform you that another driver has accepted this order.": "С сожалением сообщаем, что другой водитель принял этот заказ.", "Driver Applied the Ride for You": "Водитель применил поездку для вас", "Applied": "Применено", "Hi ,I Arrive your site": "Привет, я прибыл на ваше место", "Please go to Car Driver": "Пожалуйста, подойдите к водителю машины", "Ok I will go now.": "Хорошо, я пойду сейчас.", "Accepted Ride": "Принятая поездка", "Driver Accepted the Ride for You": "Водитель принял поездку для вас", "Promo": "Промо", "Show latest promo": "Показать последние промо", "Trip Monitoring": "Мониторинг поездки", "Driver Is Going To Passenger": "Водитель едет к пассажиру", "Please stay on the picked point.": "Пожалуйста, оставайтесь на выбранной точке.", "message From Driver": "Сообщение от водителя", "Trip is Begin": "Поездка началась", "Cancel Trip from driver": "Отменить поездку от водителя", "We will look for a new driver.\nPlease wait.": "Мы найдем нового водителя.\nПожалуйста, подождите.", "The driver canceled your ride.": "Водитель отменил вашу поездку.", "Driver Finish Trip": "Водитель завершил поездку", "you will pay to Driver": "вы заплатите водителю", "Don’t forget your personal belongings.": "Не забудьте свои личные вещи.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "Пожалуйста, убедитесь, что у вас есть все ваши личные вещи и что любой оставшийся тариф, если применимо, был добавлен на ваш кошелек перед уходом. Спасибо за выбор приложения Intaleq.", "Finish Monitor": "Завершить мониторинг", "Trip finished": "Поездка завершена", "Call Income from Driver": "Доход от звонка от водителя", "Driver Cancelled Your Trip": "Водитель отменил вашу поездку", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "вы заплатите водителю, вы заплатите стоимость времени водителя, посмотрите на ваш кошелек Intaleq", "Order Applied": "Заказ применен", //firebase above // "Where to": "Куда", "Where are you going?": "Куда вы направляетесь?", "Quick Actions": "Быстрые действия", "My Wallet": "Мой кошелек", "Order History": "История заказов", "Contact Us": "Свяжитесь с нами", "Driver": "Водитель", "Complaint": "Жалоба", "Promos": "Промо", "Recent Places": "Недавние места", "From": "От", "WhatsApp Location Extractor": "Извлечение местоположения WhatsApp", "Location Link": "Ссылка на местоположение", "Paste location link here": "Вставьте ссылку на местоположение здесь", "Go to this location": "Перейти к этому местоположению", "Paste WhatsApp location link": "Вставьте ссылку на местоположение WhatsApp", "Select Order Type": "Выберите тип заказа", "Choose who this order is for": "Выберите, для кого этот заказ", "I want to order for myself": "Я хочу заказать для себя", "I want to order for someone else": "Я хочу заказать для кого-то другого", // "Cancel": "Отменить", "Order for someone else": "Заказ для кого-то другого", "Order for myself": "Заказ для себя", "Are you want to go this site": "Вы хотите перейти на этот сайт?", // "Yes": "Да", "No": "Нет", "Are you sure to delete this location?": "Вы уверены, что хотите удалить это местоположение?", "deleted": "удалено", "To Work": "На работу", "Work Saved": "Место работы сохранено", "To Home": "Домой", "Home Saved": "Домашнее местоположение сохранено", "Destination selected": "Место назначения выбрано", "Now select start pick": "Теперь выберите начальную точку", "OK": "ОК", "Confirm Pick-up Location": "Подтвердите место встречи", "Set Location on Map": "Установить местоположение на карте", "Nearest Car: ~": "Ближайшая машина: ~", "Nearest Car": "Ближайшая машина", "No cars nearby": "Поблизости нет машин", "Favorite Places": "Избранные места", "No favorite places yet!": "Пока нет избранных мест!", "from your favorites": "из ваших избранных", "Back": "Назад", "Sign in for a seamless experience": "Войдите для бесперебойного опыта", "Sign In with Google": "Войти через Google", "Sign in with Apple": "Войти через Apple", "Need assistance? Contact us": "Нужна помощь? Свяжитесь с нами", "User not found": "Пользователь не найден", "Email": "Электронная почта", "Your email address": "Ваш адрес электронной почты", "Enter a valid email": "Введите действительный адрес электронной почты", "Password": "Пароль", // "Your password": "Ваш пароль", "Enter your password": "Введите ваш пароль", "Submit": "Отправить", "Terms of Use & Privacy Notice": "Условия использования и уведомление о конфиденциальности", "Terms of Use": "Условия использования", "Privacy Notice": "Уведомление о конфиденциальности", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "Выбирая \"Я согласен\" ниже, я подтверждаю, что прочитал и согласен с", "and acknowledge the": "и признаю", ". I am at least 18 years old.": ". Мне не менее 18 лет.", "Continue": "Продолжить", "Enable Location Access": "Включить доступ к местоположению", "We need your location to find nearby drivers for pickups and drop-offs.": "Нам нужно ваше местоположение, чтобы найти ближайших водителей для посадки и высадки.", "Allow Location Access": "Разрешить доступ к местоположению", "You should restart app to change language": "Вы должны перезапустить приложение, чтобы изменить язык", "Home Page": "Главная страница", "To change Language the App": "Чтобы изменить язык приложения", "Learn more about our app and mission": "Узнайте больше о нашем приложении и миссии", "Promos For Today": "Промо на сегодня", "Choose your ride": "Выберите свою поездку", "Your Journey Begins Here": "Ваше путешествие начинается здесь", "Bonus gift": "Бонусный подарок", "Pay": "Оплатить", "Get": "Получить", "Send to Driver Again": "Отправить водителю снова", "Driver Name:": "Имя водителя:", "No trip data available": "Нет данных о поездках", "Car Plate:": "Номер машины:", "remaining": "осталось", "Order Cancelled": "Заказ отменен", "You canceled VIP trip": "Вы отменили VIP поездку", "Passenger cancelled order": "Пассажир отменил заказ", "Your trip is scheduled": "Ваша поездка запланирована", "Don't forget your ride!": "Не забудьте о своей поездке!", "Trip updated successfully": "Поездка успешно обновлена", "Car Make:": "Марка машины:", "Car Model:": "Модель машины:", "Car Color:": "Цвет машины:", "Driver Phone:": "Телефон водителя:", "Pre-booking": "Предварительное бронирование", "Waiting VIP": "Ожидание VIP", "Driver List": "Список водителей", "Confirm Trip": "Подтвердить поездку", "Select date and time of trip": "Выберите дату и время поездки", "Date and Time Picker": "Выбор даты и времени", "Trip Status:": "Статус поездки:", "pending": "в ожидании", "accepted": "принято", "rejected": "отклонено", "Apply": "Применить", "Enter your promo code": "Введите ваш промо-код", "Apply Promo Code": "Применить промо-код", "Scheduled Time:": "Запланированное время:", "No drivers available": "Нет доступных водителей", "No drivers available at the moment. Please try again later.": "В данный момент нет доступных водителей. Пожалуйста, попробуйте позже.", "you have a negative balance of": "у вас отрицательный баланс", "Please try again in a few moments": "Пожалуйста, попробуйте снова через несколько мгновений", "Unknown Driver": "Неизвестный водитель", "in your": "в вашем", "The driver accepted your order for": "Водитель принял ваш заказ на", "wallet due to a previous trip.": "кошелек из-за предыдущей поездки.", "rides": "поездки", "Add Work": "Добавить работу", "The reason is": "Причина в", "User does not have a wallet #1652": "У пользователя нет кошелька #1652", "Price of trip": "Стоимость поездки", "From:": "От:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Для поездок Intaleq и Delivery цена рассчитывается динамически. Для поездок Comfort цена основана на времени и расстоянии.", "Phone Wallet Saved Successfully": "Телефонный кошелек успешно сохранен", "Add wallet phone you use": "Добавьте телефонный кошелек, который вы используете", "Update Available": "Доступно обновление", "Phone number must be exactly 11 digits long": "Номер телефона должен состоять ровно из 11 цифр", "Insert Wallet phone number": "Введите номер телефона кошелька", "Phone number isn't an Egyptian phone number": "Номер телефона не является египетским номером", "A new version of the app is available. Please update to the latest version.": "Доступна новая версия приложения. Пожалуйста, обновитесь до последней версии.", "We use location to get accurate and nearest passengers for you": "Мы используем местоположение, чтобы найти точных и ближайших пассажиров для вас", "This ride is already applied by another driver.": "Эта поездка уже применена другим водителем.", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "Мы используем ваше точное местоположение, чтобы найти ближайшего доступного водителя и предоставить точную информацию о посадке и высадке. Вы можете управлять этим в настройках.", "Where are you, sir?": "Где вы, сэр?", "I've been trying to reach you but your phone is off.": "Я пытался связаться с вами, но ваш телефон выключен.", "Please don't be late": "Пожалуйста, не опаздывайте", "Please don't be late, I'm waiting for you at the specified location.": "Пожалуйста, не опаздывайте, я жду вас в указанном месте.", "My location is correct. You can search for me using the navigation app": "Мое местоположение верно. Вы можете найти меня с помощью навигационного приложения", "Hello, I'm at the agreed-upon location": "Привет, я на согласованном месте", "How much longer will you be?": "Сколько еще вам потребуется?", "Phone number is verified before": "Номер телефона уже проверен", "Change Ride": "Изменить поездку", "You can change the destination by long-pressing any point on the map": "Вы можете изменить место назначения, долго нажимая на любую точку на карте", "Pick from map destination": "Выбрать место назначения на карте", "Pick or Tap to confirm": "Выберите или нажмите, чтобы подтвердить", "Accepted your order": "Ваш заказ принят", "Order Accepted": "Заказ принят", "with type": "с типом", "accepted your order at price": "принял ваш заказ по цене", "you canceled order": "вы отменили заказ", "If you want order to another person": "Если вы хотите заказать для другого человека", // "Ok I will go now.": "Хорошо, я пойду сейчас.", // "Hi, I will go now": "Привет, я пойду сейчас", "upgrade price": "повышение цены", "Please enter a correct phone": "Пожалуйста, введите правильный телефон", "airport": "аэропорт", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "Лучший выбор для комфортной машины с гибким маршрутом и остановками. Этот аэропорт предлагает визовый въезд по этой цене.", "You can upgrade price to may driver accept your order": "Вы можете повысить цену, чтобы водитель принял ваш заказ", "Change Route": "Изменить маршрут", "No Captain Accepted Your Order": "Ни один капитан не принял ваш заказ", "We are looking for a captain but the price may increase to let a captain accept": "Мы ищем капитана, но цена может увеличиться, чтобы капитан принял", "No, I want to cancel this trip": "Нет, я хочу отменить эту поездку", // "Trip Cancelled. The cost of the trip will be added to your wallet.": "Поездка отменена. Стоимость поездки будет добавлена на ваш кошелек.", "Attention": "Внимание", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "Поездка отменена. Стоимость поездки будет вычтена из вашего кошелька.", "You will be charged for the cost of the driver coming to your location.": "С вас будет взиматься плата за стоимость прибытия водителя к вашему местоположению.", "reject your order.": "отклонить ваш заказ.", "Order Under Review": "Заказ на рассмотрении", "is reviewing your order. They may need more information or a higher price.": "рассматривает ваш заказ. Им может потребоваться дополнительная информация или более высокая цена.", // "The driver canceled your ride.": "Водитель отменил вашу поездку.", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "Мы еще не нашли водителей. Подумайте о повышении стоимости поездки, чтобы сделать ваше предложение более привлекательным для водителей.", "Increase Your Trip Fee (Optional)": "Увеличьте стоимость поездки (по желанию)", "Vibration": "Вибрация", "Resend code": "Отправить код снова", // "token change": "Смена токена", "change device": "Сменить устройство", "Device Change Detected": "Обнаружена смена устройства", "You can only use one device at a time. This device will now be set as your active device.": "Вы можете использовать только одно устройство одновременно. Это устройство теперь будет установлено как ваше активное устройство.", "Click here point": "Нажмите здесь", "Are you want to change": "Вы хотите изменить", "by": "на", "Enter your complaint here": "Введите вашу жалобу здесь", "Please enter your complaint.": "Пожалуйста, введите вашу жалобу.", "Complaint data saved successfully": "Данные жалобы успешно сохранены", "Trip Monitor": "Мониторинг поездки", "Insert SOS Phone": "Введите телефон SOS", "Add SOS Phone": "Добавить телефон SOS", // "Trip Monitoring": "Мониторинг поездки", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "Уважаемый ,\n\n🚀 Я только что начал увлекательное путешествие и хотел бы поделиться с вами деталями моей поездки и моим текущим местоположением в реальном времени! Пожалуйста, скачайте приложение Intaleq. Оно позволит вам просматривать детали моей поездки и мое последнее местоположение.\n\n👈 Ссылка для скачивания:\nAndroid [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\niOS [https://getapp.cc/app/6458734951]\n\nЯ с нетерпением жду возможности держать вас рядом во время моего приключения!\n\nIntaleq ,", "Send Intaleq app to him": "Отправить ему приложение Intaleq", "No passenger found for the given phone number": "Для указанного номера телефона пассажир не найден", "No user found for the given phone number": "Для указанного номера телефона пользователь не найден", "This price is": "Эта цена", "Work": "Работа", "Add Home": "Добавить дом", "Notifications": "Уведомления", "💳 Pay with Credit Card": "💳 Оплатить кредитной картой", "⚠️ You need to choose an amount!": "⚠️ Вам нужно выбрать сумму!", "💰 Pay with Wallet": "💰 Оплатить с кошелька", "You must restart the app to change the language.": "Вы должны перезапустить приложение, чтобы изменить язык.", "joined": "присоединился", "Driver joined the channel": "Водитель присоединился к каналу", "Driver left the channel": "Водитель покинул канал", "Call Page": "Страница звонка", // "Call End": "Звонок завершен", "Call Left": "Оставшийся звонок", r"$ Next as Cash $!": "Следующий как наличные!", "To use Wallet charge it": "Чтобы использовать кошелек, пополните его", "We are searching for the nearest driver to you": "Мы ищем ближайшего к вам водителя", "Best choice for cities": "Лучший выбор для городов", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "Rayeh Gai: Услуга круглосуточного путешествия между городами, удобно и надежно.", "Rayeh Gai": "Rayeh Gai", "This trip is for women only": "Эта поездка только для женщин", "Total budgets on month": "Общий бюджет за месяц", "You have call from driver": "У вас звонок от водителя", "Comfort": "Комфорт", "Intaleq": "Скорость", "Driver already has 2 trips within the specified period.": "У водителя уже есть 2 поездки в указанный период.", "The invitation was sent successfully": "Приглашение успешно отправлено", "Lady": "Леди", "You should select your country": "Вы должны выбрать свою страну", "Scooter": "Скутер", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "Поездка с предварительным бронированием, позволяющая выбрать лучших капитанов и машины.", "Mishwar Vip": "Mishwar Vip", "The driver waiting you in picked location .": "Водитель ждет вас в выбранном месте.", "About Us": "О нас", "You can change the vibration feedback for all buttons": "Вы можете изменить вибрацию для всех кнопок", "Most Secure Methods": "Самые безопасные методы", "In-App VOIP Calls": "Внутриприложенные VOIP звонки", "Recorded Trips for Safety": "Записанные поездки для безопасности", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nМы также уделяем внимание доступности, предлагая конкурентоспособные цены, чтобы сделать ваши поездки доступными.", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "Intaleq — это приложение для совместных поездок, разработанное с учетом вашей безопасности и доступности. Мы связываем вас с надежными водителями в вашем районе, обеспечивая удобный и беззаботный опыт путешествий.\n\nВот некоторые ключевые особенности, которые выделяют нас:", "Sign In by Apple": "Войти через Apple", "Sign In by Google": "Войти через Google", "How do I request a ride?": "Как заказать поездку?", "Step-by-step instructions on how to request a ride through the Intaleq app.": "Пошаговые инструкции по заказу поездки через приложение Intaleq.", "What types of vehicles are available?": "Какие типы транспортных средств доступны?", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "Intaleq предлагает различные варианты транспортных средств, включая эконом, комфорт и люкс. Выберите вариант, который лучше всего соответствует вашему бюджету и количеству пассажиров.", "How can I pay for my ride?": "Как я могу оплатить поездку?", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "Intaleq предлагает несколько способов оплаты для вашего удобства. Выберите между оплатой наличными или кредитной/дебетовой картой при подтверждении поездки.", "Can I cancel my ride?": "Могу ли я отменить поездку?", "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Intaleq cancellation policy for details.": "Да, вы можете отменить поездку при определенных условиях (например, до назначения водителя). Подробности см. в политике отмены Intaleq.", "Driver Registration & Requirements": "Регистрация и требования для водителей", "How can I register as a driver?": "Как я могу зарегистрироваться как водитель?", "What are the requirements to become a driver?": "Каковы требования для того, чтобы стать водителем?", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "Посетите наш сайт или свяжитесь с поддержкой Intaleq для получения информации о регистрации и требованиях для водителей.", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "Intaleq предоставляет функцию чата в приложении, чтобы вы могли общаться с водителем или пассажиром во время поездки.", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "Intaleq уделяет приоритетное внимание вашей безопасности. Мы предлагаем такие функции, как проверка водителя, отслеживание поездок в приложении и варианты экстренного контакта.", "Frequently Questions": "Часто задаваемые вопросы", "User does not exist.": "Пользователь не существует.", "We need your phone number to contact you and to help you.": "Нам нужен ваш номер телефона, чтобы связаться с вами и помочь вам.", "You will recieve code in sms message": "Вы получите код в SMS-сообщении", "Please enter": "Пожалуйста, введите", "We need your phone number to contact you and to help you receive orders.": "Нам нужен ваш номер телефона, чтобы связаться с вами и помочь вам получать заказы.", "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": "Полное имя в вашем криминальном досье не совпадает с именем в вашем водительском удостоверении. Пожалуйста, проверьте и предоставьте правильные документы.", "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": "Национальный номер в вашем водительском удостоверении не совпадает с номером в вашем документе, удостоверяющем личность. Пожалуйста, проверьте и предоставьте правильные документы.", "Capture an Image of Your Criminal Record": "Сделайте снимок вашего криминального досье", "IssueDate": "Дата выдачи", "Capture an Image of Your car license front ": "Сделайте снимок передней части вашего автомобильного удостоверения", "Capture an Image of Your ID Document front": "Сделайте снимок передней части вашего документа, удостоверяющего личность", "NationalID": "Национальный идентификатор", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "Вы можете поделиться приложением Intaleq с друзьями и зарабатывать вознаграждения за поездки, которые они совершают, используя ваш код.", "FullName": "Полное имя", "No invitation found yet!": "Приглашений пока не найдено!", "InspectionResult": "Результат проверки", "Criminal Record": "Криминальное досье", "Share App": "Поделиться приложением", "The email or phone number is already registered.": "Электронная почта или номер телефона уже зарегистрированы.", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "Чтобы стать водителем совместных поездок в приложении Intaleq, вам нужно загрузить ваше водительское удостоверение, документ, удостоверяющий личность, и документ о регистрации автомобиля. Наша система ИИ мгновенно проверит и подтвердит их подлинность всего за 2-3 минуты. Если ваши документы будут одобрены, вы сможете начать работать водителем в приложении Intaleq. Обратите внимание, что предоставление поддельных документов является серьезным правонарушением и может привести к немедленному прекращению и юридическим последствиям.", "Documents check": "Проверка документов", "Driver's License": "Водительское удостоверение", "for your first registration!": "для вашей первой регистрации!", "Get it Now!": "Получите это сейчас!", "before": "до", "Code not approved": "Код не одобрен", "3000 LE": "3000 LE", "Do you have an invitation code from another driver?": "У вас есть пригласительный код от другого водителя?", "Paste the code here": "Вставьте код здесь", "No, I don't have a code": "Нет, у меня нет кода", "Code approved": "Код одобрен", "Install our app:": "Установите наше приложение:", "Invite another driver and both get a gift after he completes 100 trips!": "Пригласите другого водителя, и оба получите подарок после того, как он завершит 100 поездок!", "Invite": "Пригласить", "Are you sure?": "Вы уверены?", "This will delete all recorded files from your device.": "Это удалит все записанные файлы с вашего устройства.", "Select a file": "Выберите файл", "Select a File": "Выберите файл", "Delete": "Удалить", "attach audio of complain": "прикрепить аудио жалобы", "Phone Number Check": "Проверка номера телефона", "Drivers received orders": "Водители получили заказы", "No audio files recorded.": "Нет записанных аудиофайлов.", "This is for delivery or a motorcycle.": "Это для доставки или мотоцикла.", // "We will look for a new driver.\nPlease wait.": "Мы найдем нового водителя.\nПожалуйста, подождите.", "Intaleq Reminder": "Напоминание Intaleq", "It's time to check the Intaleq app!": "Время проверить приложение Intaleq!", "you must insert token code": "вы должны вставить токен-код", "Something went wrong. Please try again.": "Что-то пошло не так. Пожалуйста, попробуйте снова.", "Trip Details": "Детали поездки", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "Контекст не предоставляет никаких деталей жалобы, поэтому я не могу предложить решение этой проблемы. Пожалуйста, предоставьте необходимую информацию, и я с радостью помогу вам.", "Submit Your Complaint": "Отправить вашу жалобу", "Date": "Дата", "Price": "Цена", "Status": "Статус", "Choose from contact": "Выбрать из контактов", "attach correct audio": "прикрепить правильное аудио", "be sure": "будьте уверены", "Audio uploaded successfully.": "Аудио успешно загружено.", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "Идеально для пассажиров, ищущих последние модели автомобилей с возможностью выбора любого маршрута по своему желанию.", "Share this code with your friends and earn rewards when they use it!": "Поделитесь этим кодом с друзьями и зарабатывайте вознаграждения, когда они его используют!", "Enter phone": "Введите телефон", "You deserve the gift": "Вы заслуживаете подарок", "complete, you can claim your gift": "завершено, вы можете получить свой подарок", "When": "Когда", "Enter driver's phone": "Введите телефон водителя", "Send Invite": "Отправить приглашение", "Show Invitations": "Показать приглашения", "License Type": "Тип лицензии", "National Number": "Национальный номер", "Name (Arabic)": "Имя (арабское)", "Name (English)": "Имя (английское)", "Address": "Адрес", "Issue Date": "Дата выдачи", "Expiry Date": "Срок действия", "License Categories": "Категории лицензии", "driver_license": "водительское удостоверение", "Capture an Image of Your Driver License": "Сделайте снимок вашего водительского удостоверения", "ID Documents Back": "Обратная сторона документа, удостоверяющего личность", "National ID": "Национальный идентификатор", "Occupation": "Род занятий", "Gender": "Пол", "Religion": "Религия", "Marital Status": "Семейное положение", "Full Name (Marital)": "Полное имя (семейное)", "Expiration Date": "Срок действия", "Capture an Image of Your ID Document Back": "Сделайте снимок обратной стороны вашего документа, удостоверяющего личность", "ID Documents Front": "Лицевая сторона документа, удостоверяющего личность", "First Name": "Имя", "CardID": "Идентификатор карты", "Vehicle Details Front": "Лицевая сторона деталей транспортного средства", "Plate Number": "Номерной знак", "Owner Name": "Имя владельца", "Vehicle Details Back": "Обратная сторона деталей транспортного средства", "Make": "Марка", "Model": "Модель", "Year": "Год", "Chassis": "Шасси", "Color": "Цвет", "Displacement": "Объем двигателя", "Fuel": "Топливо", "Tax Expiry Date": "Срок действия налога", "Inspection Date": "Дата проверки", "Capture an Image of Your car license back": "Сделайте снимок обратной стороны вашего автомобильного удостоверения", "Capture an Image of Your Driver’s License": "Сделайте снимок вашего водительского удостоверения", "Sign in with Google for easier email and name entry": "Войдите через Google для более простого ввода электронной почты и имени", "You will choose allow all the time to be ready receive orders": "Вы будете выбирать разрешение все время, чтобы быть готовым получать заказы", "Welcome to Intaleq!": "Добро пожаловать в Intaleq!", "Get to your destination quickly and easily.": "Доберитесь до места назначения быстро и легко.", "Enjoy a safe and comfortable ride.": "Наслаждайтесь безопасной и комфортной поездкой.", "Choose Language": "Выберите язык", "Login": "Войти", "Pay with Wallet": "Оплатить с кошелька", "Invalid MPIN": "Неверный MPIN", "Invalid OTP": "Неверный OTP", // "Driver Accepted the Ride for You": "Водитель принял поездку для вас", "Enter your email address": "Введите ваш адрес электронной почты", "Please enter Your Email.": "Пожалуйста, введите вашу электронную почту.", "Enter your phone number": "Введите ваш номер телефона", "Please enter your phone number.": "Пожалуйста, введите ваш номер телефона.", "Please enter Your Password.": "Пожалуйста, введите ваш пароль.", "if you dont have account": "если у вас нет аккаунта", "Register": "Зарегистрироваться", "Accept Ride's Terms & Review Privacy Notice": "Примите условия поездки и ознакомьтесь с уведомлением о конфиденциальности", "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "Выбирая \"Я согласен\" ниже, я подтверждаю, что прочитал и согласен с Условиями использования и признаю Уведомление о конфиденциальности. Мне не менее 18 лет.", "I Agree": "Я согласен", // "Finish Monitor": "Завершить мониторинг", "First name": "Имя", "Enter your first name": "Введите ваше имя", "Please enter your first name.": "Пожалуйста, введите ваше имя.", "Last name": "Фамилия", "Enter your last name": "Введите вашу фамилию", "Please enter your last name.": "Пожалуйста, введите вашу фамилию.", "City": "Город", "Please enter your City.": "Пожалуйста, введите ваш город.", "Male": "Мужчина", "Female": "Женщина", "Verify Email": "Подтвердите электронную почту", "We sent 5 digit to your Email provided": "Мы отправили 5 цифр на вашу электронную почту", "5 digit": "5 цифр", "Send Verification Code": "Отправить код подтверждения", "Your Ride Duration is ": "Продолжительность вашей поездки ", "You will be thier in": "Вы будете там через", "You trip distance is": "Расстояние вашей поездки", "Fee is": "Плата составляет", "From : ": "От: ", "To : ": "До: ", "Add Promo": "Добавить промо", "Confirm Selection": "Подтвердить выбор", "distance is": "расстояние составляет", "Intaleq LLC": "Intaleq LLC", "Egypt's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "Пионерский сервис совместных поездок в Египте, с гордостью разработанный арабскими и местными владельцами. Мы уделяем приоритетное внимание близости к вам — как к нашим ценным пассажирам, так и к нашим преданным капитанам.", "Why Choose Intaleq?": "Почему выбирают Intaleq?", "Closest to You": "Ближе всего к вам", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "Мы связываем вас с ближайшими водителями для более быстрой посадки и более быстрых поездок.", "Uncompromising Security": "Непреклонная безопасность", "Lady Captains Available": "Доступны женщины-капитаны", "Recorded Trips (Voice & AI Analysis)": "Записанные поездки (голосовой и AI анализ)", "Fastest Complaint Response": "Самый быстрый ответ на жалобы", "Our dedicated customer service team ensures swift resolution of any issues.": "Наша преданная команда обслуживания клиентов обеспечивает быстрое решение любых проблем.", "Affordable for Everyone": "Доступно для всех", "Frequently Asked Questions": "Часто задаваемые вопросы", "Getting Started": "Начало работы", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "Просто откройте приложение Intaleq, введите место назначения и нажмите \"Заказать поездку\". Приложение свяжет вас с ближайшим водителем.", "Vehicle Options": "Варианты транспортных средств", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "Intaleq предлагает различные варианты, включая Эконом, Комфорт и Люкс, чтобы соответствовать вашим потребностям и бюджету.", "Payments": "Платежи", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "Вы можете оплатить поездку наличными или кредитной/дебетовой картой. Вы можете выбрать предпочтительный способ оплаты перед подтверждением поездки.", "Ride Management": "Управление поездками", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "Да, вы можете отменить поездку, но обратите внимание, что могут применяться сборы за отмену в зависимости от того, насколько заранее вы отменяете.", "For Drivers": "Для водителей", // "Driver Registration & Requirements": "Регистрация и требования для водителей", "Driver Registration": "Регистрация водителя", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "Чтобы зарегистрироваться в качестве водителя или узнать о требованиях, посетите наш сайт или свяжитесь напрямую с поддержкой Intaleq.", "Visit Website/Contact Support": "Посетите сайт/Свяжитесь с поддержкой", "Close": "Закрыть", "We are searching for the nearest driver": "Мы ищем ближайшего водителя", "Communication": "Связь", "How do I communicate with the other party (passenger/driver)?": "Как я могу связаться с другой стороной (пассажир/водитель)?", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "Вы можете общаться с вашим водителем или пассажиром через функцию чата в приложении после подтверждения поездки.", "Safety & Security": "Безопасность и защита", "What safety measures does Intaleq offer?": "Какие меры безопасности предлагает Intaleq?", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "Intaleq предлагает различные функции безопасности, включая проверку водителя, отслеживание поездок в приложении, варианты экстренного контакта и возможность делиться статусом поездки с доверенными контактами.", "Enjoy competitive prices across all trip options, making travel accessible.": "Наслаждайтесь конкурентоспособными ценами на все варианты поездок, делая путешествия доступными.", "Variety of Trip Choices": "Разнообразие вариантов поездок", "Choose the trip option that perfectly suits your needs and preferences.": "Выберите вариант поездки, который идеально соответствует вашим потребностям и предпочтениям.", "Your Choice, Our Priority": "Ваш выбор, наш приоритет", "Because we are near, you have the flexibility to choose the ride that works best for you.": "Поскольку мы рядом, у вас есть гибкость в выборе поездки, которая лучше всего подходит для вас.", "duration is": "продолжительность составляет", "Setting": "Настройка", "Find answers to common questions": "Найдите ответы на распространенные вопросы", "I don't need a ride anymore": "Мне больше не нужна поездка", "I was just trying the application": "Я просто пробовал приложение", "No driver accepted my request": "Ни один водитель не принял мой запрос", "I added the wrong pick-up/drop-off location": "Я добавил неправильное место посадки/высадки", "I don't have a reason": "У меня нет причины", "Other": "Другое", "Can we know why you want to cancel Ride ?": "Можем ли мы узнать, почему вы хотите отменить поездку?", "Cancel Ride": "Отменить поездку", "Add Payment Method": "Добавить способ оплаты", "Your Wallet balance is ": "Баланс вашего кошелька ", "Ride Wallet": "Кошелек поездок", "Payment Method": "Способ оплаты", "Type here Place": "Введите место здесь", "Are You sure to ride to": "Вы уверены, что хотите поехать в", "Confirm": "Подтвердить", // "Back": "Назад", "You are Delete": "Вы удаляете", "Deleted": "Удалено", "You Dont Have Any places yet !": "У вас пока нет мест!", // "Favorite Places": "Избранные места", "From : Current Location": "От: Текущее местоположение", // "Where to": "Куда", "Profile": "Профиль", "Home": "Дом", "My Cared": "Моя забота", "Add Card": "Добавить карту", "Add Credit Card": "Добавить кредитную карту", "Please enter the cardholder name": "Пожалуйста, введите имя владельца карты", "Please enter the expiry date": "Пожалуйста, введите срок действия", "Please enter the CVV code": "Пожалуйста, введите CVV-код", "Go To Favorite Places": "Перейти к избранным местам", "Go to this Target": "Перейти к этой цели", "My Profile": "Мой профиль", "Sign Out": "Выйти", "Are you want to go to this site": "Вы хотите перейти на этот сайт", "MyLocation": "Мое местоположение", "my location": "мое местоположение", "Target": "Цель", "Update": "Обновить", "You Should choose rate figure": "Вы должны выбрать рейтинг", "Login Captin": "Войти как капитан", "Register Captin": "Зарегистрироваться как капитан", "Send Verfication Code": "Отправить код подтверждения", "KM": "Км", "End Ride": "Завершить поездку", "Minute": "Минута", "Go to passenger Location now": "Перейти к местоположению пассажира сейчас", "Duration of the Ride is ": "Продолжительность поездки ", "Distance of the Ride is ": "Расстояние поездки ", "Name of the Passenger is ": "Имя пассажира ", "Hello this is Captain": "Привет, это капитан", "Start the Ride": "Начать поездку", "Please Wait If passenger want To Cancel!": "Пожалуйста, подождите, если пассажир хочет отменить!", "Total Duration:": "Общая продолжительность:", "Active Duration:": "Активная продолжительность:", "Waiting for Captin ...": "Ожидание капитана ...", "Age is ": "Возраст ", "Rating is ": "Рейтинг ", " to arrive you.": "чтобы прибыть к вам.", "Tariff": "Тариф", "Settings": "Настройки", "Feed Back": "Обратная связь", "Please enter a valid 16-digit card number": "Пожалуйста, введите действительный 16-значный номер карты", "Add Phone": "Добавить телефон", "Please enter a phone number": "Пожалуйста, введите номер телефона", "You dont Add Emergency Phone Yet!": "Вы еще не добавили экстренный телефон!", "You will arrive to your destination after ": "Вы прибудете к месту назначения через ", "You can cancel Ride now": "Вы можете отменить поездку сейчас", "You Can cancel Ride After Captain did not come in the time": "Вы можете отменить поездку, если капитан не пришел вовремя", "If you in Car Now. Press Start The Ride": "Если вы в машине сейчас. Нажмите \"Начать поездку\"", "You Dont Have Any amount in": "У вас нет суммы в", "Wallet!": "Кошелек!", "You Have": "У вас есть", "Save Credit Card": "Сохранить кредитную карту", "Show Promos": "Показать промо", "10 and get 4% discount": "10 и получите 4% скидку", "20 and get 6% discount": "20 и получите 6% скидку", "40 and get 8% discount": "40 и получите 8% скидку", "100 and get 11% discount": "100 и получите 11% скидку", "Pay with Your PayPal": "Оплатите с помощью PayPal", "You will choose one of above !": "Вы выберете один из вышеперечисленных!", "Delete My Account": "Удалить мой аккаунт", "Edit Profile": "Редактировать профиль", "Name": "Имя", "Update Gender": "Обновить пол", "Education": "Образование", "Update Education": "Обновить образование", "Employment Type": "Тип занятости", "SOS Phone": "Телефон SOS", "High School Diploma": "Диплом средней школы", "Associate Degree": "Диплом младшего специалиста", "Bachelor's Degree": "Степень бакалавра", "Master's Degree": "Степень магистра", "Doctoral Degree": "Докторская степень", "Copy this Promo to use it in your Ride!": "Скопируйте этот промо, чтобы использовать его в вашей поездке!", "To change some Settings": "Чтобы изменить некоторые настройки", "Order Request Page": "Страница запроса заказа", "Rouats of Trip": "Маршруты поездки", "Passenger Name is ": "Имя пассажира ", "Total From Passenger is ": "Всего от пассажира ", "Duration To Passenger is ": "Продолжительность до пассажира ", "Distance To Passenger is ": "Расстояние до пассажира ", "Total For You is ": "Всего для вас ", "Distance is ": "Расстояние ", " KM": " Км", "Duration of Trip is ": "Продолжительность поездки ", " Minutes": " Минут", "Apply Order": "Применить заказ", "Refuse Order": "Отклонить заказ", "Rate Captain": "Оценить капитана", "Enter your Note": "Введите вашу заметку", "Type something...": "Введите что-нибудь...", "Submit rating": "Отправить рейтинг", "Rate Passenger": "Оценить пассажира", "Ride Summary": "Сводка поездки", "welcome_message": "Добро пожаловать в Intaleq!", "app_description": "Intaleq — это надежное, безопасное и доступное приложение для совместных поездок.", "get_to_destination": "Доберитесь до места назначения быстро и легко.", "get_a_ride": "С Intaleq вы можете добраться до места назначения за считанные минуты.", "safe_and_comfortable": "Наслаждайтесь безопасной и комфортной поездкой.", "committed_to_safety": "Intaleq уделяет приоритетное внимание безопасности, и все наши капитаны тщательно проверяются и проверяются на благонадежность.", // "Driver Applied the Ride for You": "Водитель применил поездку для вас", // "Show latest promo": "Показать последние промо", // "Cancel Trip": "Отменить поездку", // "Passenger Cancel Trip": "Пассажир отменил поездку", // "Accepted Ride": "Принятая поездка", "your ride is Accepted": "ваша поездка принята", // "Trip is Begin": "Поездка началась", "Driver is waiting at pickup.": "Водитель ждет на месте посадки.", "Driver is on the way": "Водитель в пути", "Contact Options": "Варианты связи", "Send a custom message": "Отправить пользовательское сообщение", "Type your message": "Введите ваше сообщение", // "Hi ,I will go now": "Привет, я пойду сейчас", // "Passenger come to you": "Пассажир идет к вам", // "Hi ,I Arrive your site": "Привет, я прибыл на ваше место", // "Driver Finish Trip": "Водитель завершил поездку", // "you will pay to Driver": "вы заплатите водителю", // "Driver Cancel Your Trip": "Водитель отменил вашу поездку", // "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "вы заплатите водителю, вы заплатите стоимость времени водителя, посмотрите на ваш кошелек Intaleq", // "I will go now": "Я пойду сейчас", "You Have Tips": "У вас есть чаевые", " tips\nTotal is": " чаевые\nВсего", // "No,I want": "Нет, я хочу", "Your fee is ": "Ваша плата ", // "Do you want to pay Tips for this Driver": "Вы хотите дать чаевые этому водителю?", "Tip is ": "Чаевые ", "Are you want to wait drivers to accept your order": "Вы хотите подождать, пока водители примут ваш заказ?", "This price is fixed even if the route changes for the driver.": "Эта цена фиксирована, даже если маршрут изменится для водителя.", "The price may increase if the route changes.": "Цена может увеличиться, если маршрут изменится.", "The captain is responsible for the route.": "Капитан отвечает за маршрут.", "We are search for nearst Driver": "Мы ищем ближайшего водителя", "Your order is being prepared": "Ваш заказ готовится", "The drivers are reviewing your request": "Водители рассматривают ваш запрос", "Your order sent to drivers": "Ваш заказ отправлен водителям", "You can call or record audio of this trip": "Вы можете позвонить или записать аудио этой поездки", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "Поездка началась! Не стесняйтесь связываться с экстренными номерами, делиться своей поездкой или активировать запись голоса для путешествия", // "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "Пожалуйста, убедитесь, что у вас есть все ваши личные вещи и что любой оставшийся тариф, если применимо, был добавлен на ваш кошелек перед уходом. Спасибо за выбор приложения Intaleq.", // "Don’t forget your personal belongings.": "Не забудьте свои личные вещи.", "Camera Access Denied.": "Доступ к камере запрещен.", "Open Settings": "Открыть настройки", "GPS Required Allow !.": "Требуется GPS!", "Your Account is Deleted": "Ваш аккаунт удален", "Are you sure to delete your account?": "Вы уверены, что хотите удалить свой аккаунт?", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "Ваши данные будут удалены через 2 недели\nИ вы не сможете вернуться к использованию приложения через 1 месяц", "Enter Your First Name": "Введите ваше имя", "Are you Sure to LogOut?": "Вы уверены, что хотите выйти?", "Email Wrong": "Неверная электронная почта", "Email you inserted is Wrong.": "Введенная вами электронная почта неверна.", "You have finished all times ": "Вы завершили все времена", "if you want help you can email us here": "если вам нужна помощь, вы можете написать нам здесь", "Thanks": "Спасибо", "Email Us": "Напишите нам", "I cant register in your app in face detection ": "Я не могу зарегистрироваться в вашем приложении с обнаружением лица", "Hi": "Привет", "No face detected": "Лицо не обнаружено", "Image detecting result is ": "Результат обнаружения изображения ", "from 3 times Take Attention": "с 3 раз обратите внимание", "Be sure for take accurate images please\nYou have": "Убедитесь, что вы делаете точные изображения, пожалуйста\nУ вас есть", "image verified": "изображение проверено", "Next": "Далее", "There is no help Question here": "Здесь нет вопроса о помощи", "You dont have Points": "У вас нет очков", "You Are Stopped For this Day !": "Вы остановлены на этот день!", "You must be charge your Account": "Вы должны пополнить свой аккаунт", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "Вы отказались от 3 поездок в этот день, это причина\nУвидимся завтра!", "Recharge my Account": "Пополнить мой аккаунт", "Ok , See you Tomorrow": "Хорошо, увидимся завтра", "You are Stopped": "Вы остановлены", "Connected": "Подключено", "Not Connected": "Не подключено", "Your are far from passenger location": "Вы далеко от местоположения пассажира", "go to your passenger location before\nPassenger cancel trip": "перейдите к местоположению пассажира до того, как\nпассажир отменит поездку", "You will get cost of your work for this trip": "Вы получите стоимость вашей работы за эту поездку", " in your wallet": "в вашем кошельке", "you gain": "вы получаете", "Order Cancelled by Passenger": "Заказ отменен пассажиром", "Success": "Успех", "Feedback data saved successfully": "Данные обратной связи успешно сохранены", "No Promo for today .": "Сегодня нет промо.", "Select your destination": "Выберите место назначения", "Search for your Start point": "Найдите вашу начальную точку", "Search for waypoint": "Найдите промежуточную точку", "Current Location": "Текущее местоположение", "Add Location 1": "Добавить местоположение 1", "You must Verify email !.": "Вы должны подтвердить электронную почту!", "Cropper": "Обрезка", "Saved Sucssefully": "Успешно сохранено", "Select Date": "Выберите дату", "Birth Date": "Дата рождения", "Ok": "ОК", "the 500 points equal 30 JOD": "500 очков равны 30 JOD", "the 500 points equal 30 JOD for you \nSo go and gain your money": "500 очков равны 30 JOD для вас\nТак что идите и зарабатывайте свои деньги", "token updated": "токен обновлен", "Add Location 2": "Добавить местоположение 2", "Add Location 3": "Добавить местоположение 3", "Add Location 4": "Добавить местоположение 4", "Waiting for your location": "Ожидание вашего местоположения", "Search for your destination": "Найдите ваше место назначения", "Hi! This is": "Привет! Это", " I am using": " Я использую", " to ride with": " чтобы поехать с", " as the driver.": " как водитель.", "is driving a ": "ведет ", " with license plate ": " с номерным знаком ", " I am currently located at ": " Я сейчас нахожусь в ", "Please go to Car now ": "Пожалуйста, перейдите к машине сейчас ", "You will receive a code in WhatsApp Messenger": "Вы получите код в WhatsApp Messenger", "If you need assistance, contact us": "Если вам нужна помощь, свяжитесь с нами", "Promo Ended": "Промо завершено", "Enter the promo code and get": "Введите промо-код и получите", "DISCOUNT": "СКИДКА", "No wallet record found": "Запись кошелька не найдена", "for": "для", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "Intaleq — самое безопасное приложение для совместных поездок, которое предлагает множество функций как для капитанов, так и для пассажиров. Мы предлагаем самую низкую комиссию в размере всего 8%, гарантируя, что вы получите лучшее соотношение цены и качества для ваших поездок. Наше приложение включает страховку для лучших капитанов, регулярное техническое обслуживание автомобилей с лучшими инженерами и услуги на дороге, чтобы обеспечить уважительный и качественный опыт для всех пользователей.", "You can contact us during working hours from 12:00 - 19:00.": "Вы можете связаться с нами в рабочее время с 12:00 до 19:00.", "Choose a contact option": "Выберите вариант связи", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "Рабочее время с 12:00 до 19:00.\nВы можете отправить сообщение WhatsApp или электронную почту.", "Promo code copied to clipboard!": "Промо-код скопирован в буфер обмена!", "Copy Code": "Скопировать код", "Your invite code was successfully applied!": "Ваш пригласительный код успешно применен!", "Payment Options": "Варианты оплаты", "wait 1 minute to receive message": "подождите 1 минуту, чтобы получить сообщение", "Promo Copied!": "Промо скопировано!", "You have copied the promo code.": "Вы скопировали промо-код.", "Valid Until:": "Действителен до:", "Select Payment Amount": "Выберите сумму оплаты", "The promotion period has ended.": "Период акции завершен.", "Promo Code Accepted": "Промо-код принят", "Tap on the promo code to copy it!": "Нажмите на промо-код, чтобы скопировать его!", "Lowest Price Achieved": "Самая низкая цена достигнута", "Cannot apply further discounts.": "Нельзя применить дополнительные скидки.", "Promo Already Used": "Промо уже использовано", "Invitation Used": "Приглашение использовано", "You have already used this promo code.": "Вы уже использовали этот промо-код.", "Insert Your Promo Code": "Введите ваш промо-код", "Enter promo code here": "Введите промо-код здесь", "Please enter a valid promo code": "Пожалуйста, введите действительный промо-код", "Awfar Car": "Awfar Car", "Old and affordable, perfect for budget rides.": "Старый и доступный, идеально подходит для бюджетных поездок.", " If you need to reach me, please contact the driver directly at": " Если вам нужно связаться со мной, пожалуйста, свяжитесь с водителем напрямую по", "No Car or Driver Found in your area.": "В вашем районе не найдено ни одной машины или водителя.", "Please Try anther time ": "Пожалуйста, попробуйте в другое время ", "There no Driver Aplly your order sorry for that ": "Нет водителя, который применил бы ваш заказ, извините за это ", "Trip Cancelled": "Поездка отменена", "The Driver Will be in your location soon .": "Водитель скоро будет на вашем месте.", "The distance less than 500 meter.": "Расстояние менее 500 метров.", "Promo End !": "Промо завершено!", "There is no notification yet": "Пока нет уведомлений", "Use Touch ID or Face ID to confirm payment": "Используйте Touch ID или Face ID для подтверждения оплаты", "Contact us for any questions on your order.": "Свяжитесь с нами по любым вопросам о вашем заказе.", "Pyament Cancelled .": "Оплата отменена.", "type here": "введите здесь", "Scan Driver License": "Сканировать водительское удостоверение", "Please put your licence in these border": "Пожалуйста, поместите ваше удостоверение в эти границы", "Camera not initialized yet": "Камера еще не инициализирована", "Take Image": "Сделать снимок", "AI Page": "Страница ИИ", "Take Picture Of ID Card": "Сделать снимок удостоверения личности", "Take Picture Of Driver License Card": "Сделать снимок водительского удостоверения", "We are process picture please wait ": "Мы обрабатываем изображение, пожалуйста, подождите ", "There is no data yet.": "Пока нет данных.", "Name :": "Имя:", "Drivers License Class: ": "Класс водительского удостоверения:", "Document Number: ": "Номер документа:", "Address: ": "Адрес:", "Height: ": "Рост:", "Expiry Date: ": "Срок действия:", "Date of Birth: ": "Дата рождения:", "You can\'t continue with us .\nYou should renew Driver license": "Вы не можете продолжать с нами.\nВам следует обновить водительское удостоверение", "Detect Your Face ": "Обнаружьте ваше лицо", "Go to next step\nscan Car License.": "Перейдите к следующему шагу\nсканируйте автомобильное удостоверение.", "Name in arabic": "Имя на арабском", "Drivers License Class": "Класс водительского удостоверения", "Date of Birth": "Дата рождения", // "Select date and time of trip": "Выберите дату и время поездки", "Selected Date": "Выбранная дата", "Select Time": "Выберите время", "Selected Time": "Выбранное время", // "OK": "ОК", // "Cancel": "Отменить", "Selected Date and Time": "Выбранная дата и время", "Lets check Car license ": "Давайте проверим автомобильное удостоверение", "Car": "Машина", "Plate": "Номерной знак", "N/A": "N/A", "Rides": "Поездки", "Age": "Возраст", // "Education": "Образование", // "Color": "Цвет", // "Displacement": "Объем двигателя", // "Fuel": "Топливо", "Selected driver": "Выбранный водитель", "Lets check License Back Face": "Давайте проверим обратную сторону удостоверения", "Car License Card": "Автомобильное удостоверение", "No image selected yet": "Изображение еще не выбрано", "Made :": "Сделано:", "model :": "модель:", "VIN :": "VIN:", "year :": "год:", "ُExpire Date": "Срок действия", "Login Driver": "Войти как водитель", "Password must br at least 6 character.": "Пароль должен состоять не менее чем из 6 символов.", "if you don\'t have account": "если у вас нет аккаунта", "Here recorded trips audio": "Здесь записано аудио поездок", "Register as Driver": "Зарегистрироваться как водитель", // "Privacy Notice": "Уведомление о конфиденциальности", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "Выбирая \"Я согласен\" ниже, я подтверждаю, что прочитал и согласен с Условиями использования и признаю ", ". I am at least 18 years of age.": ". Мне не менее 18 лет.", "Log Out Page": "Страница выхода", "Log Off": "Выйти", "Register Driver": "Зарегистрировать водителя", "Verify Email For Driver": "Подтвердить электронную почту для водителя", "Admin DashBoard": "Панель администратора", "Your name": "Ваше имя", "your ride is applied": "ваша поездка применена", "Your password": "Ваш пароль", "H and": "Ч и", "LE": "LE", "JOD": "JOD", "m": "м", "We search nearst Driver to you": "Мы ищем ближайшего к вам водителя", "please wait till driver accept your order": "пожалуйста, подождите, пока водитель примет ваш заказ", "No accepted orders? Try raising your trip fee to attract riders.": "Нет принятых заказов? Попробуйте повысить стоимость поездки, чтобы привлечь водителей.", "You should select one": "Вы должны выбрать один", "The driver accept your order for": "Водитель принимает ваш заказ на", "Increase Fee": "Увеличить плату", "No, thanks": "Нет, спасибо", "The driver on your way": "Водитель в пути", "Total price from ": "Общая цена от ", "Order Details Intaleq": "Детали заказа Скорость", // "Order Applied": "Заказ применен", "accepted your order": "принял ваш заказ", // "We regret to inform you that another driver has accepted this order.": "С сожалением сообщаем, что другой водитель принял этот заказ", "Selected file:": "Выбранный файл:", "Your trip cost is": "Стоимость вашей поездки", "this will delete all files from your device": "это удалит все файлы с вашего устройства", " in your": "в вашем", "Exclusive offers and discounts always with the Intaleq app": "Эксклюзивные предложения и скидки всегда с приложением Intaleq", // "Please go to Car Driver": "Пожалуйста, подойдите к водителю машины", " wallet due to a previous trip.": "кошелек из-за предыдущей поездки.", "Submit Question": "Отправить вопрос", "Please enter your Question.": "Пожалуйста, введите ваш вопрос.", "Help Details": "Детали помощи", "No trip yet found": "Пока не найдено поездок", "No Response yet.": "Пока нет ответа.", " You Earn today is ": " Вы заработали сегодня ", " You Have in": " У вас есть в", "Total points is ": "Всего очков ", "Total Connection Duration:": "Общая продолжительность соединения:", " H and": " Ч и", "Passenger name : ": "Имя пассажира: ", "Cost Of Trip IS ": "Стоимость поездки ", "Arrival time": "Время прибытия", "arrival time to reach your point": "время прибытия до вашей точки", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Для поездок на скутере и скорости цена рассчитывается динамически. Для комфортных поездок цена основана на времени и расстоянии.", "Hello this is Driver": "Привет, это водитель", "Is the Passenger in your Car ?": "Пассажир в вашей машине?", "Please wait for the passenger to enter the car before starting the trip.": "Пожалуйста, подождите, пока пассажир войдет в машину, прежде чем начать поездку.", "No ,still Waiting.": "Нет, все еще жду.", "I arrive you": "Я прибыл к вам", "I Arrive your site": "Я прибыл на ваше место", "You are not in near to passenger location": "Вы не близко к местоположению пассажира", "please go to picker location exactly": "пожалуйста, точно перейдите к месту выбора", "You Can Cancel Trip And get Cost of Trip From": "Вы можете отменить поездку и получить стоимость поездки от", "Are you sure to cancel?": "Вы уверены, что хотите отменить?", // "Yes": "Да", "Insert Emergincy Number": "Введите номер экстренной службы", "Best choice for comfort car and flexible route and stops point": "Лучший выбор для комфортной машины и гибкого маршрута с остановками", "Insert": "Вставить", "This is for scooter or a motorcycle.": "Это для скутера или мотоцикла.", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "Эта поездка идет напрямую от вашей начальной точки до места назначения по фиксированной цене. Водитель должен следовать запланированному маршруту", "You can decline a request without any cost": "Вы можете отклонить запрос без каких-либо затрат", "Perfect for adventure seekers who want to experience something new and exciting": "Идеально для искателей приключений, которые хотят испытать что-то новое и захватывающее", "My current location is:": "Мое текущее местоположение:", "and I have a trip on": "и у меня поездка на", "App with Passenger": "Приложение с пассажиром", "You will be pay the cost to driver or we will get it from you on next trip": "Вы заплатите стоимость водителю, или мы получим ее от вас в следующей поездке", "Trip has Steps": "Поездка имеет шаги", "Distance from Passenger to destination is ": "Расстояние от пассажира до места назначения ", "price is": "цена", "This ride type does not allow changes to the destination or additional stops": "Этот тип поездки не позволяет изменять место назначения или добавлять остановки", "This price may be changed": "Эта цена может быть изменена", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "Нет SIM-карты? Не проблема! Звоните своему водителю напрямую через наше приложение. Мы используем передовые технологии, чтобы обеспечить вашу конфиденциальность.", "This ride type allows changes, but the price may increase": "Этот тип поездки позволяет изменения, но цена может увеличиться", "Select one message": "Выберите одно сообщение", "I'm waiting for you": "Я жду вас", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "Мы заметили, что скорость превышает 100 км/ч. Пожалуйста, снизьте скорость для вашей безопасности. Если вы чувствуете себя небезопасно, вы можете поделиться деталями поездки с контактом или вызвать полицию, используя красную кнопку SOS.", "Warning: Intaleqing detected!": "Предупреждение: Обнаружено превышение скорости!", "Please help! Contact me as soon as possible.": "Пожалуйста, помогите! Свяжитесь со мной как можно скорее.", "Share Trip Details": "Поделиться деталями поездки", "Car Plate is ": "Номерной знак машины ", "VIP Order": "VIP Заказ", "the 300 points equal 300 L.E for you \nSo go and gain your money": "300 очков равны 300 L.E для вас\nТак что идите и зарабатывайте свои деньги", "the 300 points equal 300 L.E": "300 очков равны 300 L.E", "The payment was not approved. Please try again.": "Оплата не была одобрена. Пожалуйста, попробуйте снова.", "Payment Failed": "Оплата не удалась", "Error": "Ошибка", "This is a scheduled notification.": "Это запланированное уведомление.", "An error occurred during the payment process.": "Произошла ошибка во время процесса оплаты.", "The payment was approved.": "Оплата была одобрена.", "Payment Successful": "Оплата успешна", "No ride found yet": "Пока не найдено поездок", "Accept Order": "Принять заказ", // "reject your order.": "отклонить ваш заказ.", "Bottom Bar Example": "Пример нижней панели", "Driver phone": "Телефон водителя", "Statistics": "Статистика", "Origin": "Начало", "Destination": "Место назначения", "Driver Name": "Имя водителя", "Driver Car Plate": "Номерной знак машины водителя", "Available for rides": "Доступен для поездок", "Scan Id": "Сканировать ID", "Camera not initilaized yet": "Камера еще не инициализирована", "Scan ID MklGoogle": "Сканировать ID MklGoogle", "Language": "Язык", "Jordan": "Иордания", "USA": "США", "Egypt": "Египет", "Turkey": "Турция", "Saudi Arabia": "Саудовская Аравия", "Qatar": "Катар", "Bahrain": "Бахрейн", "Kuwait": "Кувейт", "But you have a negative salary of": "Но у вас отрицательная зарплата", "Promo Code": "Промо-код", "Your trip distance is": "Расстояние вашей поездки", "Enter promo code": "Введите промо-код", "You have promo!": "У вас есть промо!", "Cost Duration": "Стоимость продолжительности", "Duration is": "Продолжительность", "Leave": "Покинуть", "Join": "Присоединиться", "Heading your way now. Please be ready.": "Сейчас направляюсь к вам. Пожалуйста, будьте готовы.", "Approaching your area. Should be there in 3 minutes.": "Приближаюсь к вашему району. Должен быть там через 3 минуты.", "There's heavy traffic here. Can you suggest an alternate pickup point?": "Здесь сильное движение. Можете предложить альтернативное место встречи?", "This ride is already taken by another driver.": "Эта поездка уже занята другим водителем.", "You Should be select reason.": "Вы должны выбрать причину.", " \$": " \$", "Waiting for Driver ...": "Ожидание водителя ...", "Latest Recent Trip": "Последняя недавняя поездка", "from your list": "из вашего списка", "Do you want to change Work location": "Вы хотите изменить место работы?", "Do you want to change Home location": "Вы хотите изменить домашнее местоположение?", "We Are Sorry That we dont have cars in your Location!": "Нам жаль, что у нас нет машин в вашем местоположении!", "Choose from Map": "Выбрать из карты", "Pick your ride location on the map - Tap to confirm": "Выберите место поездки на карте - Нажмите, чтобы подтвердить", // "To Work": "На работу", // "Are you want to go this site": "Вы хотите перейти на этот сайт?", "Closest & Cheapest": "Ближайший и самый дешевый", // "Work Saved": "Место работы сохранено", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "Intaleq — это приложение для вызова поездок, которое безопасно, надежно и доступно.", "With Intaleq, you can get a ride to your destination in minutes.": "С Intaleq вы можете добраться до места назначения за считанные минуты.", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "Intaleq уделяет приоритетное внимание безопасности, и все наши капитаны тщательно проверяются и проверяются на благонадежность.", // "To Home": "Домой", // "Home Saved": "Домашнее местоположение сохранено", // "Destination selected": "Место назначения выбрано:", // "Now select start pick": "Теперь выберите начальную точку:", "Pick from map": "Выбрать из карты", // "Click here point": "Нажмите здесь", "No Car in your site. Sorry!": "В вашем местоположении нет машин. Извините!", "Nearest Car for you about ": "Ближайшая машина для вас примерно ", // "N/A": "N/A", "From :": "От:", "Get Details of Trip": "Получить детали поездки", "If you want add stop click here": "Если вы хотите добавить остановку, нажмите здесь", // "Driver": "Водитель", "Where you want go ": "Куда вы хотите поехать ", "My Card": "Моя карта", "Start Record": "Начать запись", "Wallet": "Кошелек", "History of Trip": "История поездки", "Helping Center": "Центр помощи", "Record saved": "Запись сохранена", "Trips recorded": "Поездки записаны", "Select Your Country": "Выберите вашу страну", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "Чтобы убедиться, что вы получаете наиболее точную информацию для вашего местоположения, пожалуйста, выберите вашу страну ниже. Это поможет адаптировать опыт использования приложения и контент под вашу страну.", "Are you sure to delete recorded files": "Вы уверены, что хотите удалить записанные файлы?", "Select recorded trip": "Выбрать записанную поездку", "Card Number": "Номер карты", "Hi, Where to ": "Привет, куда ", "Pick your destination from Map": "Выберите место назначения на карте", "Add Stops": "Добавить остановки", "Get Direction": "Получить направление", "Add Location": "Добавить местоположение", "Switch Rider": "Сменить водителя", "You will arrive to your destination after timer end.": "Вы прибудете к месту назначения после завершения таймера.", "You can cancel trip": "Вы можете отменить поездку", "The driver waitting you in picked location .": "Водитель ждет вас в выбранном месте.", "10\$ and get 3% discount": "10\$ и получите 3% скидку", "20\$ and get 4% discount": "20\$ и получите 4% скидку", "40\$ and get 6% discount": "40\$ и получите 6% скидку", "100\$ and get 9% discount": "100\$ и получите 9% скидку", "Pay with Your": "Оплатите с помощью", "Pay with Credit Card": "Оплатить кредитной картой", "Payment History": "История платежей", "Show Promos to Charge": "Показать промо для пополнения", "Point": "Очко", "How many hours would you like to wait?": "Сколько часов вы хотите подождать?", "Driver Wallet": "Кошелек водителя", "Choose between those Type Cars": "Выберите между этими типами машин", "hour": "час", "Select Waiting Hours": "Выберите часы ожидания", "Total Points is": "Всего очков", "You will receive a code in SMS message": "Вы получите код в SMS-сообщении", "Done": "Готово", "Total Budget from trips is ": "Общий бюджет от поездок ", "Total Amount:": "Общая сумма:", "Total Budget from trips by\nCredit card is ": "Общий бюджет от поездок по\nкредитной карте ", "This amount for all trip I get from Passengers": "Эта сумма за все поездки, которые я получаю от пассажиров", "Pay from my budget": "Оплатить из моего бюджета", "This amount for all trip I get from Passengers and Collected For me in": "Эта сумма за все поездки, которые я получаю от пассажиров и собираю для себя в", "You can buy points from your budget": "Вы можете купить очки из своего бюджета", "insert amount": "введите сумму", "You can buy Points to let you online\nby this list below": "Вы можете купить очки, чтобы оставаться онлайн\nпо этому списку ниже", "Create Wallet to receive your money": "Создайте кошелек, чтобы получать свои деньги", "Enter your feedback here": "Введите вашу обратную связь здесь", "Please enter your feedback.": "Пожалуйста, введите вашу обратную связь.", "Feedback": "Обратная связь", "Submit ": "Отправить ", "Click here to Show it in Map": "Нажмите здесь, чтобы показать это на карте", "Canceled": "Отменено", "Type your Email": "Введите вашу электронную почту", "No I want": "Нет, я хочу", "Email is": "Электронная почта", "Phone Number is": "Номер телефона", "Date of Birth is": "Дата рождения", "Sex is ": "Пол ", "Car Details": "Детали машины", "VIN is": "VIN", "Color is ": "Цвет ", "Make is ": "Марка ", "Model is": "Модель", "Year is": "Год", "Expiration Date ": "Срок действия ", "Edit Your data": "Редактировать ваши данные", "write vin for your car": "напишите VIN для вашей машины", "VIN": "VIN", "write Color for your car": "напишите цвет для вашей машины", "write Make for your car": "напишите марку для вашей машины", // "Make": "Марка", "write Model for your car": "напишите модель для вашей машины", // "Model": "Модель", "write Year for your car": "напишите год для вашей машины", // "Expiration Date": "Срок действия", "write Expiration Date for your car": "напишите срок действия для вашей машины", "Tariffs": "Тарифы", "Minimum fare": "Минимальный тариф", "Maximum fare": "Максимальный тариф", "Flag-down fee": "Плата за остановку", "Including Tax": "Включая налог", "BookingFee": "Плата за бронирование", "Morning": "Утро", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "с 07:30 до 10:30 (четверг, пятница, суббота, понедельник)", "Evening": "Вечер", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "с 12:00 до 15:00 (четверг, пятница, суббота, понедельник)", "Night": "Ночь", "You have in account": "У вас на счету", "Select Country": "Выберите страну", "Ride Today : ": "Поездка сегодня: ", "After this period\nYou can\'t cancel!": "После этого периода\nВы не можете отменить!", "from 23:59 till 05:30": "с 23:59 до 05:30", "Rate Driver": "Оценить водителя", "Total Cost is ": "Общая стоимость ", "Write note": "Написать заметку", "Time to arrive": "Время прибытия", "Ride Summaries": "Сводки поездок", "Total Cost": "Общая стоимость", "Average of Hours of": "Среднее количество часов", " is ON for this month": " включен на этот месяц", "Days": "Дни", "Total Hours on month": "Общее количество часов в месяце", "Counts of Hours on days": "Количество часов в днях", "OrderId": "ID заказа", "created time": "время создания", "Intaleq Over": "Превышение скорости", "I will slow down": "Я снижу скорость", "Map Passenger": "Карта пассажира", "Be Slowly": "Будьте медленнее", "If you want to make Google Map App run directly when you apply order": "Если вы хотите, чтобы приложение Google Map запускалось напрямую при применении заказа", "You can change the language of the app": "Вы можете изменить язык приложения", "Your Budget less than needed": "Ваш бюджет меньше необходимого", "You can change the Country to get all features": "Вы можете изменить страну, чтобы получить все функции", "Change Country": "Изменить страну" }, "it": { "Order": "Ordine", "OrderVIP": "Ordine VIP", "Cancel Trip": "Annulla viaggio", "Passenger Cancel Trip": "Passeggero ha annullato il viaggio", "VIP Order": "Ordine VIP", "The driver accepted your trip": "Il conducente ha accettato il tuo viaggio", "message From passenger": "Messaggio dal passeggero", "Cancel": "Annulla", "Trip Cancelled. The cost of the trip will be added to your wallet.": "Viaggio annullato. Il costo del viaggio verrà aggiunto al tuo portafoglio.", "token change": "Cambio token", "face detect": "Rilevamento volto", "Face Detection Result": "Risultato rilevamento volto", "similar": "simile", "not similar": "non simile", "Hi ,I will go now": "Ciao, vado ora", "Passenger come to you": "Il passeggero sta venendo da te", "Call Income": "Reddito da chiamata", "Call Income from Passenger": "Reddito da chiamata dal passeggero", "Criminal Document Required": "Documento penale richiesto", "You should have upload it .": "Avresti dovuto caricarlo.", "Call End": "Chiamata terminata", "The order has been accepted by another driver.": "L'ordine è stato accettato da un altro conducente.", "The order Accepted by another Driver": "L'ordine accettato da un altro conducente", "We regret to inform you that another driver has accepted this order.": "Ci dispiace informarti che un altro conducente ha accettato questo ordine.", "Driver Applied the Ride for You": "Il conducente ha applicato la corsa per te", "Applied": "Applicato", "Hi ,I Arrive your site": "Ciao, sono arrivato sul posto", "Please go to Car Driver": "Per favore, vai dal conducente", "Ok I will go now.": "Ok, vado ora.", "Accepted Ride": "Corsa accettata", "Driver Accepted the Ride for You": "Il conducente ha accettato la corsa per te", "Promo": "Promozione", "Show latest promo": "Mostra le ultime promozioni", "Trip Monitoring": "Monitoraggio viaggio", "Driver Is Going To Passenger": "Il conducente sta andando dal passeggero", "Please stay on the picked point.": "Per favore, rimani nel punto selezionato.", "message From Driver": "Messaggio dal conducente", "Trip is Begin": "Il viaggio è iniziato", "Cancel Trip from driver": "Annulla viaggio dal conducente", "We will look for a new driver.\nPlease wait.": "Cercheremo un nuovo conducente.\nPer favore, attendi.", "The driver canceled your ride.": "Il conducente ha annullato la tua corsa.", "Driver Finish Trip": "Il conducente ha terminato il viaggio", "you will pay to Driver": "pagherai il conducente", "Don’t forget your personal belongings.": "Non dimenticare i tuoi effetti personali.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "Assicurati di avere tutti i tuoi effetti personali e che eventuali tariffe residue, se applicabili, siano state aggiunte al tuo portafoglio prima di partire. Grazie per aver scelto l'app Intaleq.", "Finish Monitor": "Termina monitoraggio", "Trip finished": "Viaggio terminato", "Call Income from Driver": "Reddito da chiamata dal conducente", "Driver Cancelled Your Trip": "Il conducente ha annullato il tuo viaggio", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "pagherai il conducente, pagherai il costo del tempo del conducente, controlla il tuo portafoglio Intaleq", "Order Applied": "Ordine applicato", //firebase above // "Where to": "Dove", "Where are you going?": "Dove stai andando?", "Quick Actions": "Azioni rapide", "My Wallet": "Il mio portafoglio", "Order History": "Cronologia ordini", "Contact Us": "Contattaci", "Driver": "Conducente", "Complaint": "Reclamo", "Promos": "Promozioni", "Recent Places": "Luoghi recenti", "From": "Da", "WhatsApp Location Extractor": "Estrazione posizione WhatsApp", "Location Link": "Link posizione", "Paste location link here": "Incolla il link della posizione qui", "Go to this location": "Vai a questa posizione", "Paste WhatsApp location link": "Incolla il link della posizione WhatsApp", "Select Order Type": "Seleziona tipo ordine", "Choose who this order is for": "Scegli per chi è questo ordine", "I want to order for myself": "Voglio ordinare per me", "I want to order for someone else": "Voglio ordinare per qualcun altro", // "Cancel": "Annulla", "Order for someone else": "Ordine per qualcun altro", "Order for myself": "Ordine per me", "Are you want to go this site": "Vuoi andare su questo sito?", // "Yes": "Sì", "No": "No", "Are you sure to delete this location?": "Sei sicuro di voler eliminare questa posizione?", "deleted": "eliminato", "To Work": "Al lavoro", "Work Saved": "Posizione lavoro salvata", "To Home": "A casa", "Home Saved": "Posizione casa salvata", "Destination selected": "Destinazione selezionata", "Now select start pick": "Ora seleziona il punto di partenza", "OK": "OK", "Confirm Pick-up Location": "Conferma punto di ritiro", "Set Location on Map": "Imposta posizione sulla mappa", "Nearest Car: ~": "Auto più vicina: ~", "Nearest Car": "Auto più vicina", "No cars nearby": "Nessuna auto nelle vicinanze", "Favorite Places": "Luoghi preferiti", "No favorite places yet!": "Nessun luogo preferito ancora!", "from your favorites": "dai tuoi preferiti", "Back": "Indietro", "Sign in for a seamless experience": "Accedi per un'esperienza senza interruzioni", "Sign In with Google": "Accedi con Google", "Sign in with Apple": "Accedi con Apple", "Need assistance? Contact us": "Hai bisogno di aiuto? Contattaci", "User not found": "Utente non trovato", "Email": "Email", "Your email address": "Il tuo indirizzo email", "Enter a valid email": "Inserisci un'email valida", "Password": "Password", // "Your password": "La tua password", "Enter your password": "Inserisci la tua password", "Submit": "Invia", "Terms of Use & Privacy Notice": "Termini di utilizzo e Informativa sulla privacy", "Terms of Use": "Termini di utilizzo", "Privacy Notice": "Informativa sulla privacy", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "Selezionando \"Accetto\" qui sotto, confermo di aver letto e accettato i", "and acknowledge the": "e riconosco la", ". I am at least 18 years old.": ". Ho almeno 18 anni.", "Continue": "Continua", "Enable Location Access": "Abilita accesso alla posizione", "We need your location to find nearby drivers for pickups and drop-offs.": "Abbiamo bisogno della tua posizione per trovare i conducenti vicini per ritiri e consegne.", "Allow Location Access": "Consenti accesso alla posizione", "You should restart app to change language": "Dovresti riavviare l'app per cambiare lingua", "Home Page": "Pagina iniziale", "To change Language the App": "Per cambiare la lingua dell'app", "Learn more about our app and mission": "Scopri di più sulla nostra app e missione", "Promos For Today": "Promozioni per oggi", "Choose your ride": "Scegli la tua corsa", "Your Journey Begins Here": "Il tuo viaggio inizia qui", "Bonus gift": "Regalo bonus", "Pay": "Paga", "Get": "Ottieni", "Send to Driver Again": "Invia di nuovo al conducente", "Driver Name:": "Nome conducente:", "No trip data available": "Nessun dato di viaggio disponibile", "Car Plate:": "Targa auto:", "remaining": "rimanente", "Order Cancelled": "Ordine annullato", "You canceled VIP trip": "Hai annullato il viaggio VIP", "Passenger cancelled order": "Il passeggero ha annullato l'ordine", "Your trip is scheduled": "Il tuo viaggio è programmato", "Don't forget your ride!": "Non dimenticare la tua corsa!", "Trip updated successfully": "Viaggio aggiornato con successo", "Car Make:": "Marca auto:", "Car Model:": "Modello auto:", "Car Color:": "Colore auto:", "Driver Phone:": "Telefono conducente:", "Pre-booking": "Prenotazione anticipata", "Waiting VIP": "In attesa VIP", "Driver List": "Lista conducenti", "Confirm Trip": "Conferma viaggio", "Select date and time of trip": "Seleziona data e ora del viaggio", "Date and Time Picker": "Selettore data e ora", "Trip Status:": "Stato viaggio:", "pending": "in attesa", "accepted": "accettato", "rejected": "rifiutato", "Apply": "Applica", "Enter your promo code": "Inserisci il tuo codice promozionale", "Apply Promo Code": "Applica codice promozionale", "Scheduled Time:": "Orario programmato:", "No drivers available": "Nessun conducente disponibile", "No drivers available at the moment. Please try again later.": "Nessun conducente disponibile al momento. Riprova più tardi.", "you have a negative balance of": "hai un saldo negativo di", "Please try again in a few moments": "Riprova tra qualche istante", "Unknown Driver": "Conducente sconosciuto", "in your": "nel tuo", "The driver accepted your order for": "Il conducente ha accettato il tuo ordine per", "wallet due to a previous trip.": "portafoglio a causa di un viaggio precedente.", "rides": "corse", "Add Work": "Aggiungi lavoro", "The reason is": "La ragione è", "User does not have a wallet #1652": "L'utente non ha un portafoglio #1652", "Price of trip": "Prezzo del viaggio", "From:": "Da:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Per i viaggi Intaleq e Delivery, il prezzo è calcolato dinamicamente. Per i viaggi Comfort, il prezzo è basato su tempo e distanza.", "Phone Wallet Saved Successfully": "Portafoglio telefonico salvato con successo", "Add wallet phone you use": "Aggiungi il telefono del portafoglio che usi", "Update Available": "Aggiornamento disponibile", "Phone number must be exactly 11 digits long": "Il numero di telefono deve essere esattamente di 11 cifre", "Insert Wallet phone number": "Inserisci il numero di telefono del portafoglio", "Phone number isn't an Egyptian phone number": "Il numero di telefono non è un numero egiziano", "A new version of the app is available. Please update to the latest version.": "È disponibile una nuova versione dell'app. Aggiorna all'ultima versione.", "We use location to get accurate and nearest passengers for you": "Usiamo la posizione per ottenere passeggeri accurati e più vicini per te", "This ride is already applied by another driver.": "Questa corsa è già stata applicata da un altro conducente.", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "Usiamo la tua posizione precisa per trovare il conducente disponibile più vicino e fornire informazioni accurate su ritiro e consegna. Puoi gestire questo nelle Impostazioni.", "Where are you, sir?": "Dove sei, signore?", "I've been trying to reach you but your phone is off.": "Ho cercato di contattarti ma il tuo telefono è spento.", "Please don't be late": "Per favore, non fare tardi", "Please don't be late, I'm waiting for you at the specified location.": "Per favore, non fare tardi, ti aspetto nel luogo specificato.", "My location is correct. You can search for me using the navigation app": "La mia posizione è corretta. Puoi cercarmi usando l'app di navigazione", "Hello, I'm at the agreed-upon location": "Ciao, sono nel luogo concordato", "How much longer will you be?": "Quanto ci metterai ancora?", "Phone number is verified before": "Il numero di telefono è già stato verificato", "Change Ride": "Cambia corsa", "You can change the destination by long-pressing any point on the map": "Puoi cambiare la destinazione premendo a lungo qualsiasi punto sulla mappa", "Pick from map destination": "Scegli la destinazione dalla mappa", "Pick or Tap to confirm": "Scegli o tocca per confermare", "Accepted your order": "Il tuo ordine è stato accettato", "Order Accepted": "Ordine accettato", "with type": "con tipo", "accepted your order at price": "ha accettato il tuo ordine al prezzo di", "you canceled order": "hai annullato l'ordine", "If you want order to another person": "Se vuoi ordinare per un'altra persona", // "Ok I will go now.": "Ok, vado ora.", // "Hi, I will go now": "Ciao, vado ora", "upgrade price": "prezzo aggiornato", "Please enter a correct phone": "Per favore, inserisci un telefono corretto", "airport": "aeroporto", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "Scelta migliore per un'auto comoda con un percorso flessibile e punti di sosta. Questo aeroporto offre l'ingresso con visto a questo prezzo.", "You can upgrade price to may driver accept your order": "Puoi aggiornare il prezzo per far accettare l'ordine al conducente", "Change Route": "Cambia percorso", "No Captain Accepted Your Order": "Nessun capitano ha accettato il tuo ordine", "We are looking for a captain but the price may increase to let a captain accept": "Stiamo cercando un capitano ma il prezzo potrebbe aumentare per far accettare l'ordine", "No, I want to cancel this trip": "No, voglio annullare questo viaggio", // "Trip Cancelled. The cost of the trip will be added to your wallet.": "Viaggio annullato. Il costo del viaggio verrà aggiunto al tuo portafoglio.", "Attention": "Attenzione", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "Viaggio annullato. Il costo del viaggio verrà detratto dal tuo portafoglio.", "You will be charged for the cost of the driver coming to your location.": "Ti verrà addebitato il costo del conducente che viene alla tua posizione.", "reject your order.": "rifiuta il tuo ordine.", "Order Under Review": "Ordine in revisione", "is reviewing your order. They may need more information or a higher price.": "sta revisionando il tuo ordine. Potrebbero aver bisogno di maggiori informazioni o di un prezzo più alto.", // "The driver canceled your ride.": "Il conducente ha annullato la tua corsa.", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "Non abbiamo ancora trovato nessun conducente. Considera di aumentare la tariffa del viaggio per rendere la tua offerta più attraente per i conducenti.", "Increase Your Trip Fee (Optional)": "Aumenta la tariffa del viaggio (opzionale)", "Vibration": "Vibrazione", "Resend code": "Rinvia codice", // "token change": "Cambio token", "change device": "Cambia dispositivo", "Device Change Detected": "Cambio dispositivo rilevato", "You can only use one device at a time. This device will now be set as your active device.": "Puoi usare solo un dispositivo alla volta. Questo dispositivo sarà ora impostato come dispositivo attivo.", "Click here point": "Clicca qui", "Are you want to change": "Vuoi cambiare", "by": "da", "Enter your complaint here": "Inserisci il tuo reclamo qui", "Please enter your complaint.": "Per favore, inserisci il tuo reclamo.", "Complaint data saved successfully": "Dati del reclamo salvati con successo", "Trip Monitor": "Monitoraggio viaggio", "Insert SOS Phone": "Inserisci telefono SOS", "Add SOS Phone": "Aggiungi telefono SOS", // "Trip Monitoring": "Monitoraggio viaggio", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "Caro ,\n\n🚀 Ho appena iniziato un viaggio emozionante e vorrei condividere con te in tempo reale i dettagli del mio viaggio e la mia posizione attuale! Scarica l'app Intaleq. Ti permetterà di visualizzare i dettagli del mio viaggio e la mia ultima posizione.\n\n👈 Link di download:\nAndroid [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\niOS [https://getapp.cc/app/6458734951]\n\nNon vedo l'ora di tenerti vicino durante la mia avventura!\n\nIntaleq ,", "Send Intaleq app to him": "Inviagli l'app Intaleq", "No passenger found for the given phone number": "Nessun passeggero trovato per il numero di telefono fornito", "No user found for the given phone number": "Nessun utente trovato per il numero di telefono fornito", "This price is": "Questo prezzo è", "Work": "Lavoro", "Add Home": "Aggiungi casa", "Notifications": "Notifiche", "💳 Pay with Credit Card": "💳 Paga con carta di credito", "⚠️ You need to choose an amount!": "⚠️ Devi scegliere un importo!", "💰 Pay with Wallet": "💰 Paga con portafoglio", "You must restart the app to change the language.": "Devi riavviare l'app per cambiare lingua.", "joined": "unito", "Driver joined the channel": "Il conducente si è unito al canale", "Driver left the channel": "Il conducente ha lasciato il canale", "Call Page": "Pagina chiamata", // "Call End": "Chiamata terminata", "Call Left": "Chiamata rimanente", r"$ Next as Cash $!": "Prossimo come contanti!", "To use Wallet charge it": "Per usare il portafoglio, ricaricalo", "We are searching for the nearest driver to you": "Stiamo cercando il conducente più vicino a te", "Best choice for cities": "Scelta migliore per le città", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "Rayeh Gai: Servizio di viaggio di andata e ritorno per viaggi convenienti tra città, facile e affidabile.", "Rayeh Gai": "Rayeh Gai", "This trip is for women only": "Questo viaggio è solo per donne", "Total budgets on month": "Budget totale del mese", "You have call from driver": "Hai una chiamata dal conducente", "Comfort": "Comfort", "Intaleq": "Velocità", "Driver already has 2 trips within the specified period.": "Il conducente ha già 2 viaggi nel periodo specificato.", "The invitation was sent successfully": "L'invito è stato inviato con successo", "Lady": "Signora", "You should select your country": "Dovresti selezionare il tuo paese", "Scooter": "Scooter", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "Un viaggio con prenotazione anticipata, che ti permette di scegliere i migliori capitani e auto.", "Mishwar Vip": "Mishwar Vip", "The driver waiting you in picked location .": "Il conducente ti aspetta nel luogo selezionato.", "About Us": "Chi siamo", "You can change the vibration feedback for all buttons": "Puoi cambiare il feedback di vibrazione per tutti i pulsanti", "Most Secure Methods": "Metodi più sicuri", "In-App VOIP Calls": "Chiamate VOIP in-app", "Recorded Trips for Safety": "Viaggi registrati per sicurezza", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nDiamo anche priorità alla convenienza, offrendo prezzi competitivi per rendere le tue corse accessibili.", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "Intaleq è un'app di ride-sharing progettata pensando alla tua sicurezza e convenienza. Ti colleghiamo a conducenti affidabili nella tua zona, garantendo un'esperienza di viaggio comoda e senza stress.\n\nEcco alcune delle caratteristiche principali che ci distinguono:", "Sign In by Apple": "Accedi con Apple", "Sign In by Google": "Accedi con Google", "How do I request a ride?": "Come posso richiedere una corsa?", "Step-by-step instructions on how to request a ride through the Intaleq app.": "Istruzioni passo-passo su come richiedere una corsa tramite l'app Intaleq.", "What types of vehicles are available?": "Quali tipi di veicoli sono disponibili?", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "Intaleq offre una varietà di opzioni di veicoli per soddisfare le tue esigenze, inclusi economia, comfort e lusso. Scegli l'opzione che meglio si adatta al tuo budget e al numero di passeggeri.", "How can I pay for my ride?": "Come posso pagare la mia corsa?", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "Intaleq offre più metodi di pagamento per tua comodità. Scegli tra pagamento in contanti o con carta di credito/debito durante la conferma della corsa.", "Can I cancel my ride?": "Posso annullare la mia corsa?", "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Intaleq cancellation policy for details.": "Sì, puoi annullare la tua corsa a determinate condizioni (ad esempio, prima che il conducente sia assegnato). Vedi la politica di cancellazione di Intaleq per i dettagli.", "Driver Registration & Requirements": "Registrazione e requisiti per i conducenti", "How can I register as a driver?": "Come posso registrarmi come conducente?", "What are the requirements to become a driver?": "Quali sono i requisiti per diventare un conducente?", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "Visita il nostro sito web o contatta il supporto Intaleq per informazioni sulla registrazione e i requisiti dei conducenti.", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "Intaleq fornisce una funzionalità di chat in-app per permetterti di comunicare con il tuo conducente o passeggero durante il viaggio.", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "Intaleq dà priorità alla tua sicurezza. Offriamo funzionalità come la verifica del conducente, il tracciamento del viaggio in-app e opzioni di contatto di emergenza.", "Frequently Questions": "Domande frequenti", "User does not exist.": "L'utente non esiste.", "We need your phone number to contact you and to help you.": "Abbiamo bisogno del tuo numero di telefono per contattarti e aiutarti.", "You will recieve code in sms message": "Riceverai il codice in un messaggio SMS", "Please enter": "Per favore, inserisci", "We need your phone number to contact you and to help you receive orders.": "Abbiamo bisogno del tuo numero di telefono per contattarti e aiutarti a ricevere ordini.", "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": "Il nome completo sul tuo casellario giudiziale non corrisponde a quello sulla tua patente di guida. Verifica e fornisci i documenti corretti.", "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": "Il numero nazionale sulla tua patente di guida non corrisponde a quello sul tuo documento d'identità. Verifica e fornisci i documenti corretti.", "Capture an Image of Your Criminal Record": "Cattura un'immagine del tuo casellario giudiziale", "IssueDate": "Data di emissione", "Capture an Image of Your car license front ": "Cattura un'immagine della parte anteriore della tua patente auto", "Capture an Image of Your ID Document front": "Cattura un'immagine della parte anteriore del tuo documento d'identità", "NationalID": "ID nazionale", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "Puoi condividere l'app Intaleq con i tuoi amici e guadagnare ricompense per le corse che fanno usando il tuo codice", "FullName": "Nome completo", "No invitation found yet!": "Nessun invito trovato ancora!", "InspectionResult": "Risultato ispezione", "Criminal Record": "Casellario giudiziale", "Share App": "Condividi app", "The email or phone number is already registered.": "L'email o il numero di telefono è già registrato.", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "Per diventare un conducente di ride-sharing sull'app Intaleq, devi caricare la tua patente di guida, il documento d'identità e il documento di registrazione dell'auto. Il nostro sistema AI esaminerà e verificherà istantaneamente la loro autenticità in soli 2-3 minuti. Se i tuoi documenti sono approvati, puoi iniziare a lavorare come conducente sull'app Intaleq. Nota che la presentazione di documenti fraudolenti è un reato grave e può comportare la risoluzione immediata e conseguenze legali.", "Documents check": "Controllo documenti", "Driver's License": "Patente di guida", "for your first registration!": "per la tua prima registrazione!", "Get it Now!": "Ottienilo ora!", "before": "prima", "Code not approved": "Codice non approvato", "3000 LE": "3000 LE", "Do you have an invitation code from another driver?": "Hai un codice di invito da un altro conducente?", "Paste the code here": "Incolla il codice qui", "No, I don't have a code": "No, non ho un codice", "Code approved": "Codice approvato", "Install our app:": "Installa la nostra app:", "Invite another driver and both get a gift after he completes 100 trips!": "Invita un altro conducente e entrambi riceverete un regalo dopo che avrà completato 100 viaggi!", "Invite": "Invita", "Are you sure?": "Sei sicuro?", "This will delete all recorded files from your device.": "Questo cancellerà tutti i file registrati dal tuo dispositivo.", "Select a file": "Seleziona un file", "Select a File": "Seleziona un file", "Delete": "Elimina", "attach audio of complain": "allega audio del reclamo", "Phone Number Check": "Controllo numero di telefono", "Drivers received orders": "I conducenti hanno ricevuto ordini", "No audio files recorded.": "Nessun file audio registrato.", "This is for delivery or a motorcycle.": "Questo è per la consegna o una moto.", // "We will look for a new driver.\nPlease wait.": "Cercheremo un nuovo conducente.\nPer favore, attendi.", "Intaleq Reminder": "Promemoria Intaleq", "It's time to check the Intaleq app!": "È ora di controllare l'app Intaleq!", "you must insert token code": "devi inserire il codice token", "Something went wrong. Please try again.": "Qualcosa è andato storto. Riprova.", "Trip Details": "Dettagli viaggio", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "Il contesto non fornisce dettagli sul reclamo, quindi non posso fornire una soluzione a questo problema. Fornisci le informazioni necessarie e sarò felice di aiutarti.", "Submit Your Complaint": "Invia il tuo reclamo", "Date": "Data", "Price": "Prezzo", "Status": "Stato", "Choose from contact": "Scegli dai contatti", "attach correct audio": "allega audio corretto", "be sure": "assicurati", "Audio uploaded successfully.": "Audio caricato con successo.", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "Perfetto per i passeggeri che cercano le ultime modelli di auto con la libertà di scegliere qualsiasi percorso desiderino", "Share this code with your friends and earn rewards when they use it!": "Condividi questo codice con i tuoi amici e guadagna ricompense quando lo usano!", "Enter phone": "Inserisci telefono", "You deserve the gift": "Ti meriti il regalo", "complete, you can claim your gift": "completo, puoi richiedere il tuo regalo", "When": "Quando", "Enter driver's phone": "Inserisci il telefono del conducente", "Send Invite": "Invia invito", "Show Invitations": "Mostra inviti", "License Type": "Tipo di licenza", "National Number": "Numero nazionale", "Name (Arabic)": "Nome (arabo)", "Name (English)": "Nome (inglese)", "Address": "Indirizzo", "Issue Date": "Data di emissione", "Expiry Date": "Data di scadenza", "License Categories": "Categorie di licenza", "driver_license": "patente di guida", "Capture an Image of Your Driver License": "Cattura un'immagine della tua patente di guida", "ID Documents Back": "Retro del documento d'identità", "National ID": "ID nazionale", "Occupation": "Occupazione", "Gender": "Genere", "Religion": "Religione", "Marital Status": "Stato civile", "Full Name (Marital)": "Nome completo (matrimoniale)", "Expiration Date": "Data di scadenza", "Capture an Image of Your ID Document Back": "Cattura un'immagine del retro del tuo documento d'identità", "ID Documents Front": "Fronte del documento d'identità", "First Name": "Nome", "CardID": "ID carta", "Vehicle Details Front": "Dettagli veicolo fronte", "Plate Number": "Numero di targa", "Owner Name": "Nome proprietario", "Vehicle Details Back": "Dettagli veicolo retro", "Make": "Marca", "Model": "Modello", "Year": "Anno", "Chassis": "Telaio", "Color": "Colore", "Displacement": "Cilindrata", "Fuel": "Carburante", "Tax Expiry Date": "Data di scadenza tasse", "Inspection Date": "Data di ispezione", "Capture an Image of Your car license back": "Cattura un'immagine del retro della tua patente auto", "Capture an Image of Your Driver’s License": "Cattura un'immagine della tua patente di guida", "Sign in with Google for easier email and name entry": "Accedi con Google per un inserimento più semplice di email e nome", "You will choose allow all the time to be ready receive orders": "Sceglierai di consentire tutto il tempo per essere pronto a ricevere ordini", "Welcome to Intaleq!": "Benvenuto in Intaleq!", "Get to your destination quickly and easily.": "Raggiungi la tua destinazione in modo rapido e semplice.", "Enjoy a safe and comfortable ride.": "Goditi un viaggio sicuro e confortevole.", "Choose Language": "Scegli lingua", "Login": "Accedi", "Pay with Wallet": "Paga con portafoglio", "Invalid MPIN": "MPIN non valido", "Invalid OTP": "OTP non valido", // "Driver Accepted the Ride for You": "Il conducente ha accettato la corsa per te", "Enter your email address": "Inserisci il tuo indirizzo email", "Please enter Your Email.": "Per favore, inserisci la tua email.", "Enter your phone number": "Inserisci il tuo numero di telefono", "Please enter your phone number.": "Per favore, inserisci il tuo numero di telefono.", "Please enter Your Password.": "Per favore, inserisci la tua password.", "if you dont have account": "se non hai un account", "Register": "Registrati", "Accept Ride's Terms & Review Privacy Notice": "Accetta i termini della corsa e rivedi l'informativa sulla privacy", "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "Selezionando 'Accetto' qui sotto, confermo di aver letto e accettato i Termini di utilizzo e riconosco l'Informativa sulla privacy. Ho almeno 18 anni.", "I Agree": "Accetto", // "Finish Monitor": "Termina monitoraggio", "First name": "Nome", "Enter your first name": "Inserisci il tuo nome", "Please enter your first name.": "Per favore, inserisci il tuo nome.", "Last name": "Cognome", "Enter your last name": "Inserisci il tuo cognome", "Please enter your last name.": "Per favore, inserisci il tuo cognome.", "City": "Città", "Please enter your City.": "Per favore, inserisci la tua città.", "Male": "Maschio", "Female": "Femmina", "Verify Email": "Verifica email", "We sent 5 digit to your Email provided": "Abbiamo inviato 5 cifre alla tua email fornita", "5 digit": "5 cifre", "Send Verification Code": "Invia codice di verifica", "Your Ride Duration is ": "La durata della tua corsa è ", "You will be thier in": "Sarai lì tra", "You trip distance is": "La distanza del tuo viaggio è", "Fee is": "La tariffa è", "From : ": "Da: ", "To : ": "A: ", "Add Promo": "Aggiungi promozione", "Confirm Selection": "Conferma selezione", "distance is": "la distanza è", "Intaleq LLC": "Intaleq LLC", "Egypt's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "Il servizio pionieristico di ride-sharing in Egitto, sviluppato con orgoglio da proprietari arabi e locali. Diamo priorità alla vicinanza a te – sia ai nostri preziosi passeggeri che ai nostri dedicati capitani.", "Why Choose Intaleq?": "Perché scegliere Intaleq?", "Closest to You": "Più vicino a te", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "Ti colleghiamo ai conducenti più vicini per ritiri più veloci e viaggi più rapidi.", "Uncompromising Security": "Sicurezza senza compromessi", "Lady Captains Available": "Capitani donna disponibili", "Recorded Trips (Voice & AI Analysis)": "Viaggi registrati (analisi vocale e AI)", "Fastest Complaint Response": "Risposta ai reclami più veloce", "Our dedicated customer service team ensures swift resolution of any issues.": "Il nostro team dedicato al servizio clienti garantisce una risoluzione rapida di qualsiasi problema.", "Affordable for Everyone": "Accessibile per tutti", "Frequently Asked Questions": "Domande frequenti", "Getting Started": "Per iniziare", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "Apri semplicemente l'app Intaleq, inserisci la tua destinazione e tocca \"Richiedi corsa\". L'app ti collegherà a un conducente vicino.", "Vehicle Options": "Opzioni veicolo", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "Intaleq offre una varietà di opzioni tra cui Economia, Comfort e Lusso per soddisfare le tue esigenze e il tuo budget.", "Payments": "Pagamenti", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "Puoi pagare la tua corsa in contanti o con carta di credito/debito. Puoi selezionare il metodo di pagamento preferito prima di confermare la corsa.", "Ride Management": "Gestione corse", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "Sì, puoi annullare la tua corsa, ma tieni presente che potrebbero essere applicate commissioni di cancellazione a seconda di quanto in anticipo annulli.", "For Drivers": "Per i conducenti", // "Driver Registration & Requirements": "Registrazione e requisiti per i conducenti", "Driver Registration": "Registrazione conducente", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "Per registrarti come conducente o conoscere i requisiti, visita il nostro sito web o contatta direttamente il supporto Intaleq.", "Visit Website/Contact Support": "Visita il sito/Contatta il supporto", "Close": "Chiudi", "We are searching for the nearest driver": "Stiamo cercando il conducente più vicino", "Communication": "Comunicazione", "How do I communicate with the other party (passenger/driver)?": "Come posso comunicare con l'altra parte (passeggero/conducente)?", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "Puoi comunicare con il tuo conducente o passeggero tramite la funzione di chat in-app una volta confermata la corsa.", "Safety & Security": "Sicurezza e protezione", "What safety measures does Intaleq offer?": "Quali misure di sicurezza offre Intaleq?", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "Intaleq offre varie funzionalità di sicurezza tra cui verifica del conducente, tracciamento del viaggio in-app, opzioni di contatto di emergenza e la possibilità di condividere lo stato del viaggio con contatti fidati.", "Enjoy competitive prices across all trip options, making travel accessible.": "Goditi prezzi competitivi su tutte le opzioni di viaggio, rendendo i viaggi accessibili.", "Variety of Trip Choices": "Varietà di scelte di viaggio", "Choose the trip option that perfectly suits your needs and preferences.": "Scegli l'opzione di viaggio che si adatta perfettamente alle tue esigenze e preferenze.", "Your Choice, Our Priority": "La tua scelta, la nostra priorità", "Because we are near, you have the flexibility to choose the ride that works best for you.": "Poiché siamo vicini, hai la flessibilità di scegliere la corsa che funziona meglio per te.", "duration is": "la durata è", "Setting": "Impostazione", "Find answers to common questions": "Trova risposte a domande comuni", "I don't need a ride anymore": "Non ho più bisogno di una corsa", "I was just trying the application": "Stavo solo provando l'applicazione", "No driver accepted my request": "Nessun conducente ha accettato la mia richiesta", "I added the wrong pick-up/drop-off location": "Ho aggiunto il luogo di ritiro/consegna sbagliato", "I don't have a reason": "Non ho una ragione", "Other": "Altro", "Can we know why you want to cancel Ride ?": "Possiamo sapere perché vuoi annullare la corsa?", "Cancel Ride": "Annulla corsa", "Add Payment Method": "Aggiungi metodo di pagamento", "Your Wallet balance is ": "Il saldo del tuo portafoglio è ", "Ride Wallet": "Portafoglio corse", "Payment Method": "Metodo di pagamento", "Type here Place": "Digita qui il luogo", "Are You sure to ride to": "Sei sicuro di voler andare a", "Confirm": "Conferma", // "Back": "Indietro", "You are Delete": "Stai eliminando", "Deleted": "Eliminato", "You Dont Have Any places yet !": "Non hai ancora nessun luogo!", // "Favorite Places": "Luoghi preferiti", "From : Current Location": "Da: Posizione attuale", // "Where to": "Dove", "Profile": "Profilo", "Home": "Casa", "My Cared": "La mia cura", "Add Card": "Aggiungi carta", "Add Credit Card": "Aggiungi carta di credito", "Please enter the cardholder name": "Per favore, inserisci il nome del titolare della carta", "Please enter the expiry date": "Per favore, inserisci la data di scadenza", "Please enter the CVV code": "Per favore, inserisci il codice CVV", "Go To Favorite Places": "Vai ai luoghi preferiti", "Go to this Target": "Vai a questo obiettivo", "My Profile": "Il mio profilo", "Sign Out": "Esci", "Are you want to go to this site": "Vuoi andare su questo sito", "MyLocation": "La mia posizione", "my location": "la mia posizione", "Target": "Obiettivo", "Update": "Aggiorna", "You Should choose rate figure": "Dovresti scegliere una valutazione", "Login Captin": "Accedi come capitano", "Register Captin": "Registrati come capitano", "Send Verfication Code": "Invia codice di verifica", "KM": "Km", "End Ride": "Termina corsa", "Minute": "Minuto", "Go to passenger Location now": "Vai alla posizione del passeggero ora", "Duration of the Ride is ": "La durata della corsa è ", "Distance of the Ride is ": "La distanza della corsa è ", "Name of the Passenger is ": "Il nome del passeggero è ", "Hello this is Captain": "Ciao, sono il capitano", "Start the Ride": "Inizia la corsa", "Please Wait If passenger want To Cancel!": "Per favore, aspetta se il passeggero vuole annullare!", "Total Duration:": "Durata totale:", "Active Duration:": "Durata attiva:", "Waiting for Captin ...": "In attesa del capitano ...", "Age is ": "L'età è ", "Rating is ": "La valutazione è ", " to arrive you.": "per arrivare da te.", "Tariff": "Tariffa", "Settings": "Impostazioni", "Feed Back": "Feedback", "Please enter a valid 16-digit card number": "Per favore, inserisci un numero di carta valido di 16 cifre", "Add Phone": "Aggiungi telefono", "Please enter a phone number": "Per favore, inserisci un numero di telefono", "You dont Add Emergency Phone Yet!": "Non hai ancora aggiunto un telefono di emergenza!", "You will arrive to your destination after ": "Arriverai a destinazione dopo ", "You can cancel Ride now": "Puoi annullare la corsa ora", "You Can cancel Ride After Captain did not come in the time": "Puoi annullare la corsa se il capitano non è arrivato in tempo", "If you in Car Now. Press Start The Ride": "Se sei in macchina ora. Premi Inizia la corsa", "You Dont Have Any amount in": "Non hai alcun importo in", "Wallet!": "Portafoglio!", "You Have": "Hai", "Save Credit Card": "Salva carta di credito", "Show Promos": "Mostra promozioni", "10 and get 4% discount": "10 e ottieni il 4% di sconto", "20 and get 6% discount": "20 e ottieni il 6% di sconto", "40 and get 8% discount": "40 e ottieni il 8% di sconto", "100 and get 11% discount": "100 e ottieni l'11% di sconto", "Pay with Your PayPal": "Paga con il tuo PayPal", "You will choose one of above !": "Sceglierai uno dei precedenti!", "Delete My Account": "Elimina il mio account", "Edit Profile": "Modifica profilo", "Name": "Nome", "Update Gender": "Aggiorna genere", "Education": "Istruzione", "Update Education": "Aggiorna istruzione", "Employment Type": "Tipo di occupazione", "SOS Phone": "Telefono SOS", "High School Diploma": "Diploma di scuola superiore", "Associate Degree": "Diploma di laurea breve", "Bachelor's Degree": "Laurea triennale", "Master's Degree": "Laurea magistrale", "Doctoral Degree": "Dottorato", "Copy this Promo to use it in your Ride!": "Copia questa promozione per usarla nella tua corsa!", "To change some Settings": "Per cambiare alcune impostazioni", "Order Request Page": "Pagina richiesta ordine", "Rouats of Trip": "Percorsi del viaggio", "Passenger Name is ": "Il nome del passeggero è ", "Total From Passenger is ": "Totale dal passeggero è ", "Duration To Passenger is ": "Durata fino al passeggero è ", "Distance To Passenger is ": "Distanza fino al passeggero è ", "Total For You is ": "Totale per te è ", "Distance is ": "La distanza è ", " KM": " Km", "Duration of Trip is ": "La durata del viaggio è ", " Minutes": " Minuti", "Apply Order": "Applica ordine", "Refuse Order": "Rifiuta ordine", "Rate Captain": "Valuta capitano", "Enter your Note": "Inserisci la tua nota", "Type something...": "Scrivi qualcosa...", "Submit rating": "Invia valutazione", "Rate Passenger": "Valuta passeggero", "Ride Summary": "Riepilogo corsa", "welcome_message": "Benvenuto in Intaleq!", "app_description": "Intaleq è un'app affidabile, sicura e accessibile per il ride-sharing.", "get_to_destination": "Raggiungi la tua destinazione in modo rapido e semplice.", "get_a_ride": "Con Intaleq puoi raggiungere la tua destinazione in pochi minuti.", "safe_and_comfortable": "Goditi un viaggio sicuro e confortevole.", "committed_to_safety": "Intaleq dà priorità alla sicurezza e tutti i nostri capitani sono accuratamente controllati e verificati.", // "Driver Applied the Ride for You": "Il conducente ha applicato la corsa per te", // "Show latest promo": "Mostra le ultime promozioni", // "Cancel Trip": "Annulla viaggio", // "Passenger Cancel Trip": "Passeggero ha annullato il viaggio", // "Accepted Ride": "Corsa accettata", "your ride is Accepted": "la tua corsa è stata accettata", // "Trip is Begin": "Il viaggio è iniziato", "Driver is waiting at pickup.": "Il conducente sta aspettando al punto di ritiro.", "Driver is on the way": "Il conducente è in arrivo", "Contact Options": "Opzioni di contatto", "Send a custom message": "Invia un messaggio personalizzato", "Type your message": "Scrivi il tuo messaggio", // "Hi ,I will go now": "Ciao, vado ora", // "Passenger come to you": "Il passeggero sta venendo da te", // "Hi ,I Arrive your site": "Ciao, sono arrivato sul posto", // "Driver Finish Trip": "Il conducente ha terminato il viaggio", // "you will pay to Driver": "pagherai il conducente", // "Driver Cancel Your Trip": "Il conducente ha annullato il tuo viaggio", // "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "pagherai il conducente, pagherai il costo del tempo del conducente, controlla il tuo portafoglio Intaleq", // "I will go now": "Vado ora", "You Have Tips": "Hai mance", " tips\nTotal is": " mance\nTotale", // "No,I want": "No, voglio", "Your fee is ": "La tua tariffa è ", // "Do you want to pay Tips for this Driver": "Vuoi dare una mancia a questo conducente?", "Tip is ": "La mancia è ", "Are you want to wait drivers to accept your order": "Vuoi aspettare che i conducenti accettino il tuo ordine?", "This price is fixed even if the route changes for the driver.": "Questo prezzo è fisso anche se il percorso cambia per il conducente.", "The price may increase if the route changes.": "Il prezzo potrebbe aumentare se il percorso cambia.", "The captain is responsible for the route.": "Il capitano è responsabile del percorso.", "We are search for nearst Driver": "Stiamo cercando il conducente più vicino", "Your order is being prepared": "Il tuo ordine è in preparazione", "The drivers are reviewing your request": "I conducenti stanno rivedendo la tua richiesta", "Your order sent to drivers": "Il tuo ordine è stato inviato ai conducenti", "You can call or record audio of this trip": "Puoi chiamare o registrare l'audio di questo viaggio", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "Il viaggio è iniziato! Sentiti libero di contattare i numeri di emergenza, condividere il tuo viaggio o attivare la registrazione vocale per il viaggio", // "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "Assicurati di avere tutti i tuoi effetti personali e che eventuali tariffe residue, se applicabili, siano state aggiunte al tuo portafoglio prima di partire. Grazie per aver scelto l'app Intaleq.", // "Don’t forget your personal belongings.": "Non dimenticare i tuoi effetti personali.", "Camera Access Denied.": "Accesso alla camera negato.", "Open Settings": "Apri impostazioni", "GPS Required Allow !.": "GPS richiesto!", "Your Account is Deleted": "Il tuo account è stato eliminato", "Are you sure to delete your account?": "Sei sicuro di voler eliminare il tuo account?", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "I tuoi dati verranno cancellati dopo 2 settimane\nE non potrai tornare a usare l'app dopo 1 mese", "Enter Your First Name": "Inserisci il tuo nome", "Are you Sure to LogOut?": "Sei sicuro di voler uscire?", "Email Wrong": "Email errata", "Email you inserted is Wrong.": "L'email che hai inserito è errata.", "You have finished all times ": "Hai finito tutti i tempi", "if you want help you can email us here": "se hai bisogno di aiuto puoi scriverci qui", "Thanks": "Grazie", "Email Us": "Scrivici", "I cant register in your app in face detection ": "Non riesco a registrarmi nella tua app con il rilevamento del volto", "Hi": "Ciao", "No face detected": "Nessun volto rilevato", "Image detecting result is ": "Il risultato del rilevamento dell'immagine è ", "from 3 times Take Attention": "da 3 volte presta attenzione", "Be sure for take accurate images please\nYou have": "Assicurati di scattare immagini accurate per favore\nHai", "image verified": "immagine verificata", "Next": "Avanti", "There is no help Question here": "Non c'è una domanda di aiuto qui", "You dont have Points": "Non hai punti", "You Are Stopped For this Day !": "Sei fermo per oggi!", "You must be charge your Account": "Devi ricaricare il tuo account", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "Hai rifiutato 3 corse oggi, questo è il motivo\nCi vediamo domani!", "Recharge my Account": "Ricarica il mio account", "Ok , See you Tomorrow": "Ok, ci vediamo domani", "You are Stopped": "Sei fermo", "Connected": "Connesso", "Not Connected": "Non connesso", "Your are far from passenger location": "Sei lontano dalla posizione del passeggero", "go to your passenger location before\nPassenger cancel trip": "vai alla posizione del passeggero prima che\nil passeggero annulli il viaggio", "You will get cost of your work for this trip": "Otterrai il costo del tuo lavoro per questo viaggio", " in your wallet": "nel tuo portafoglio", "you gain": "guadagni", "Order Cancelled by Passenger": "Ordine annullato dal passeggero", "Success": "Successo", "Feedback data saved successfully": "Dati del feedback salvati con successo", "No Promo for today .": "Nessuna promozione per oggi.", "Select your destination": "Seleziona la tua destinazione", "Search for your Start point": "Cerca il tuo punto di partenza", "Search for waypoint": "Cerca un punto intermedio", "Current Location": "Posizione attuale", "Add Location 1": "Aggiungi posizione 1", "You must Verify email !.": "Devi verificare l'email!", "Cropper": "Ritaglio", "Saved Sucssefully": "Salvato con successo", "Select Date": "Seleziona data", "Birth Date": "Data di nascita", "Ok": "OK", "the 500 points equal 30 JOD": "500 punti equivalgono a 30 JOD", "the 500 points equal 30 JOD for you \nSo go and gain your money": "500 punti equivalgono a 30 JOD per te\nQuindi vai e guadagna i tuoi soldi", "token updated": "token aggiornato", "Add Location 2": "Aggiungi posizione 2", "Add Location 3": "Aggiungi posizione 3", "Add Location 4": "Aggiungi posizione 4", "Waiting for your location": "In attesa della tua posizione", "Search for your destination": "Cerca la tua destinazione", "Hi! This is": "Ciao! Questo è", " I am using": " Sto usando", " to ride with": " per viaggiare con", " as the driver.": " come conducente.", "is driving a ": "sta guidando un ", " with license plate ": " con targa ", " I am currently located at ": " Mi trovo attualmente a ", "Please go to Car now ": "Per favore, vai alla macchina ora ", "You will receive a code in WhatsApp Messenger": "Riceverai un codice su WhatsApp Messenger", "If you need assistance, contact us": "Se hai bisogno di assistenza, contattaci", "Promo Ended": "Promozione terminata", "Enter the promo code and get": "Inserisci il codice promozionale e ottieni", "DISCOUNT": "SCONTO", "No wallet record found": "Nessun record del portafoglio trovato", "for": "per", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "Intaleq è l'app di ride-sharing più sicura che introduce molte funzionalità sia per i capitani che per i passeggeri. Offriamo la commissione più bassa, solo l'8%, garantendo il miglior valore per le tue corse. La nostra app include assicurazione per i migliori capitani, manutenzione regolare delle auto con i migliori ingegneri e servizi su strada per garantire un'esperienza rispettosa e di alta qualità per tutti gli utenti.", "You can contact us during working hours from 12:00 - 19:00.": "Puoi contattarci durante l'orario di lavoro dalle 12:00 alle 19:00.", "Choose a contact option": "Scegli un'opzione di contatto", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "L'orario di lavoro è dalle 12:00 alle 19:00.\nPuoi inviare un messaggio WhatsApp o un'email.", "Promo code copied to clipboard!": "Codice promozionale copiato negli appunti!", "Copy Code": "Copia codice", "Your invite code was successfully applied!": "Il tuo codice di invito è stato applicato con successo!", "Payment Options": "Opzioni di pagamento", "wait 1 minute to receive message": "aspetta 1 minuto per ricevere il messaggio", "Promo Copied!": "Promozione copiata!", "You have copied the promo code.": "Hai copiato il codice promozionale.", "Valid Until:": "Valido fino:", "Select Payment Amount": "Seleziona l'importo del pagamento", "The promotion period has ended.": "Il periodo della promozione è terminato.", "Promo Code Accepted": "Codice promozionale accettato", "Tap on the promo code to copy it!": "Tocca il codice promozionale per copiarlo!", "Lowest Price Achieved": "Prezzo più basso raggiunto", "Cannot apply further discounts.": "Non è possibile applicare ulteriori sconti.", "Promo Already Used": "Promozione già utilizzata", "Invitation Used": "Invito utilizzato", "You have already used this promo code.": "Hai già utilizzato questo codice promozionale.", "Insert Your Promo Code": "Inserisci il tuo codice promozionale", "Enter promo code here": "Inserisci il codice promozionale qui", "Please enter a valid promo code": "Per favore, inserisci un codice promozionale valido", "Awfar Car": "Auto Awfar", "Old and affordable, perfect for budget rides.": "Vecchia e conveniente, perfetta per corse economiche.", " If you need to reach me, please contact the driver directly at": " Se hai bisogno di contattarmi, contatta direttamente il conducente al", "No Car or Driver Found in your area.": "Nessuna auto o conducente trovato nella tua zona.", "Please Try anther time ": "Per favore, prova un'altra volta ", "There no Driver Aplly your order sorry for that ": "Nessun conducente ha applicato il tuo ordine, scusa per questo ", "Trip Cancelled": "Viaggio annullato", "The Driver Will be in your location soon .": "Il conducente sarà nella tua posizione presto.", "The distance less than 500 meter.": "La distanza è inferiore a 500 metri.", "Promo End !": "Promozione terminata!", "There is no notification yet": "Non ci sono ancora notifiche", "Use Touch ID or Face ID to confirm payment": "Usa Touch ID o Face ID per confermare il pagamento", "Contact us for any questions on your order.": "Contattaci per qualsiasi domanda sul tuo ordine.", "Pyament Cancelled .": "Pagamento annullato.", "type here": "scrivi qui", "Scan Driver License": "Scansiona la patente di guida", "Please put your licence in these border": "Per favore, metti la tua patente in questi bordi", "Camera not initialized yet": "La fotocamera non è ancora inizializzata", "Take Image": "Scatta immagine", "AI Page": "Pagina AI", "Take Picture Of ID Card": "Scatta una foto della carta d'identità", "Take Picture Of Driver License Card": "Scatta una foto della patente di guida", "We are process picture please wait ": "Stiamo elaborando l'immagine, per favore aspetta ", "There is no data yet.": "Non ci sono ancora dati.", "Name :": "Nome:", "Drivers License Class: ": "Classe patente di guida:", "Document Number: ": "Numero documento:", "Address: ": "Indirizzo:", "Height: ": "Altezza:", "Expiry Date: ": "Data di scadenza:", "Date of Birth: ": "Data di nascita:", "You can\'t continue with us .\nYou should renew Driver license": "Non puoi continuare con noi.\nDovresti rinnovare la patente di guida", "Detect Your Face ": "Rileva il tuo volto ", "Go to next step\nscan Car License.": "Vai al prossimo passo\nscansiona la patente auto.", "Name in arabic": "Nome in arabo", "Drivers License Class": "Classe patente di guida", "Date of Birth": "Data di nascita", // "Select date and time of trip": "Seleziona data e ora del viaggio", "Selected Date": "Data selezionata", "Select Time": "Seleziona ora", "Selected Time": "Ora selezionata", // "OK": "OK", // "Cancel": "Annulla", "Selected Date and Time": "Data e ora selezionate", "Lets check Car license ": "Controlliamo la patente auto ", "Car": "Auto", "Plate": "Targa", "N/A": "N/A", "Rides": "Corse", "Age": "Età", // "Education": "Istruzione", // "Color": "Colore", // "Displacement": "Cilindrata", // "Fuel": "Carburante", "Selected driver": "Conducente selezionato", "Lets check License Back Face": "Controlliamo il retro della patente", "Car License Card": "Carta patente auto", "No image selected yet": "Nessuna immagine selezionata ancora", "Made :": "Fatto:", "model :": "modello:", "VIN :": "VIN:", "year :": "anno:", "ُExpire Date": "Data di scadenza", "Login Driver": "Accedi come conducente", "Password must br at least 6 character.": "La password deve essere di almeno 6 caratteri.", "if you don\'t have account": "se non hai un account", "Here recorded trips audio": "Qui è registrato l'audio dei viaggi", "Register as Driver": "Registrati come conducente", // "Privacy Notice": "Informativa sulla privacy", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "Selezionando \"Accetto\" qui sotto, confermo di aver letto e accettato i Termini di utilizzo e riconosco l'", ". I am at least 18 years of age.": ". Ho almeno 18 anni.", "Log Out Page": "Pagina di uscita", "Log Off": "Esci", "Register Driver": "Registra conducente", "Verify Email For Driver": "Verifica email per il conducente", "Admin DashBoard": "Pannello di amministrazione", "Your name": "Il tuo nome", "your ride is applied": "la tua corsa è stata applicata", "Your password": "La tua password", "H and": "H e", "LE": "LE", "JOD": "JOD", "m": "m", "We search nearst Driver to you": "Cerchiamo il conducente più vicino a te", "please wait till driver accept your order": "per favore aspetta che il conducente accetti il tuo ordine", "No accepted orders? Try raising your trip fee to attract riders.": "Nessun ordine accettato? Prova ad aumentare la tariffa del viaggio per attirare i conducenti.", "You should select one": "Dovresti selezionarne uno", "The driver accept your order for": "Il conducente accetta il tuo ordine per", "Increase Fee": "Aumenta la tariffa", "No, thanks": "No, grazie", "The driver on your way": "Il conducente è in arrivo", "Total price from ": "Prezzo totale da ", "Order Details Intaleq": "Dettagli ordine Velocità", // "Order Applied": "Ordine applicato", "accepted your order": "ha accettato il tuo ordine", // "We regret to inform you that another driver has accepted this order.": "Ci dispiace informarti che un altro conducente ha accettato questo ordine", "Selected file:": "File selezionato:", "Your trip cost is": "Il costo del tuo viaggio è", "this will delete all files from your device": "questo cancellerà tutti i file dal tuo dispositivo", " in your": "nel tuo", "Exclusive offers and discounts always with the Intaleq app": "Offerte e sconti esclusivi sempre con l'app Intaleq", // "Please go to Car Driver": "Per favore, vai dal conducente", " wallet due to a previous trip.": "portafoglio a causa di un viaggio precedente.", "Submit Question": "Invia domanda", "Please enter your Question.": "Per favore, inserisci la tua domanda.", "Help Details": "Dettagli aiuto", "No trip yet found": "Nessun viaggio trovato ancora", "No Response yet.": "Nessuna risposta ancora.", " You Earn today is ": " Hai guadagnato oggi ", " You Have in": " Hai in", "Total points is ": "Totale punti è ", "Total Connection Duration:": "Durata totale connessione:", " H and": " H e", "Passenger name : ": "Nome passeggero: ", "Cost Of Trip IS ": "Il costo del viaggio è ", "Arrival time": "Tempo di arrivo", "arrival time to reach your point": "tempo di arrivo per raggiungere il tuo punto", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "Per i viaggi in scooter e velocità, il prezzo è calcolato dinamicamente. Per i viaggi Comfort, il prezzo è basato su tempo e distanza.", "Hello this is Driver": "Ciao, sono il conducente", "Is the Passenger in your Car ?": "Il passeggero è nella tua auto?", "Please wait for the passenger to enter the car before starting the trip.": "Per favore, aspetta che il passeggero entri in auto prima di iniziare il viaggio.", "No ,still Waiting.": "No, sto ancora aspettando.", "I arrive you": "Sono arrivato da te", "I Arrive your site": "Sono arrivato sul posto", "You are not in near to passenger location": "Non sei vicino alla posizione del passeggero", "please go to picker location exactly": "per favore vai esattamente alla posizione di ritiro", "You Can Cancel Trip And get Cost of Trip From": "Puoi annullare il viaggio e ottenere il costo del viaggio da", "Are you sure to cancel?": "Sei sicuro di voler annullare?", // "Yes": "Sì", "Insert Emergincy Number": "Inserisci numero di emergenza", "Best choice for comfort car and flexible route and stops point": "Scelta migliore per auto comoda e percorso flessibile con punti di sosta", "Insert": "Inserisci", "This is for scooter or a motorcycle.": "Questo è per uno scooter o una moto.", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "Questo viaggio va direttamente dal tuo punto di partenza alla tua destinazione per un prezzo fisso. Il conducente deve seguire il percorso pianificato", "You can decline a request without any cost": "Puoi rifiutare una richiesta senza alcun costo", "Perfect for adventure seekers who want to experience something new and exciting": "Perfetto per chi cerca avventure e vuole provare qualcosa di nuovo ed emozionante", "My current location is:": "La mia posizione attuale è:", "and I have a trip on": "e ho un viaggio su", "App with Passenger": "App con passeggero", "You will be pay the cost to driver or we will get it from you on next trip": "Pagherai il costo al conducente o lo prenderemo da te nel prossimo viaggio", "Trip has Steps": "Il viaggio ha passaggi", "Distance from Passenger to destination is ": "La distanza dal passeggero alla destinazione è ", "price is": "il prezzo è", "This ride type does not allow changes to the destination or additional stops": "Questo tipo di corsa non consente cambiamenti alla destinazione o fermate aggiuntive", "This price may be changed": "Questo prezzo potrebbe cambiare", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "Nessuna SIM card? Nessun problema! Chiama direttamente il tuo conducente tramite la nostra app. Usiamo tecnologia avanzata per garantire la tua privacy.", "This ride type allows changes, but the price may increase": "Questo tipo di corsa consente cambiamenti, ma il prezzo potrebbe aumentare", "Select one message": "Seleziona un messaggio", "I'm waiting for you": "Ti sto aspettando", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "Abbiamo notato che la velocità supera i 100 km/h. Per favore, rallenta per la tua sicurezza. Se ti senti in pericolo, puoi condividere i dettagli del tuo viaggio con un contatto o chiamare la polizia usando il pulsante rosso SOS.", "Warning: Intaleqing detected!": "Avviso: Rilevato eccesso di velocità!", "Please help! Contact me as soon as possible.": "Per favore, aiuto! Contattami il prima possibile.", "Share Trip Details": "Condividi dettagli del viaggio", "Car Plate is ": "La targa dell'auto è ", "VIP Order": "Ordine VIP", "the 300 points equal 300 L.E for you \nSo go and gain your money": "300 punti equivalgono a 300 L.E per te\nQuindi vai e guadagna i tuoi soldi", "the 300 points equal 300 L.E": "300 punti equivalgono a 300 L.E", "The payment was not approved. Please try again.": "Il pagamento non è stato approvato. Riprova.", "Payment Failed": "Pagamento fallito", "Error": "Errore", "This is a scheduled notification.": "Questa è una notifica programmata.", "An error occurred during the payment process.": "Si è verificato un errore durante il processo di pagamento.", "The payment was approved.": "Il pagamento è stato approvato.", "Payment Successful": "Pagamento riuscito", "No ride found yet": "Nessuna corsa trovata ancora", "Accept Order": "Accetta ordine", // "reject your order.": "rifiuta il tuo ordine.", "Bottom Bar Example": "Esempio barra inferiore", "Driver phone": "Telefono conducente", "Statistics": "Statistiche", "Origin": "Origine", "Destination": "Destinazione", "Driver Name": "Nome conducente", "Driver Car Plate": "Targa auto conducente", "Available for rides": "Disponibile per corse", "Scan Id": "Scansiona ID", "Camera not initilaized yet": "La fotocamera non è ancora inizializzata", "Scan ID MklGoogle": "Scansiona ID MklGoogle", "Language": "Lingua", "Jordan": "Giordania", "USA": "USA", "Egypt": "Egitto", "Turkey": "Turchia", "Saudi Arabia": "Arabia Saudita", "Qatar": "Qatar", "Bahrain": "Bahrain", "Kuwait": "Kuwait", "But you have a negative salary of": "Ma hai uno stipendio negativo di", "Promo Code": "Codice promozionale", "Your trip distance is": "La distanza del tuo viaggio è", "Enter promo code": "Inserisci codice promozionale", "You have promo!": "Hai una promozione!", "Cost Duration": "Costo durata", "Duration is": "La durata è", "Leave": "Lascia", "Join": "Unisciti", "Heading your way now. Please be ready.": "Sto venendo da te. Per favore, sii pronto.", "Approaching your area. Should be there in 3 minutes.": "Mi sto avvicinando alla tua zona. Dovrei essere lì in 3 minuti.", "There's heavy traffic here. Can you suggest an alternate pickup point?": "C'è molto traffico qui. Puoi suggerire un punto di ritiro alternativo?", "This ride is already taken by another driver.": "Questa corsa è già stata presa da un altro conducente.", "You Should be select reason.": "Dovresti selezionare una ragione.", " \$": " \$", "Waiting for Driver ...": "In attesa del conducente ...", "Latest Recent Trip": "Ultimo viaggio recente", "from your list": "dalla tua lista", "Do you want to change Work location": "Vuoi cambiare la posizione di lavoro?", "Do you want to change Home location": "Vuoi cambiare la posizione di casa?", "We Are Sorry That we dont have cars in your Location!": "Ci dispiace che non abbiamo auto nella tua posizione!", "Choose from Map": "Scegli dalla mappa", "Pick your ride location on the map - Tap to confirm": "Scegli la posizione della tua corsa sulla mappa - Tocca per confermare", // "To Work": "Al lavoro", // "Are you want to go this site": "Vuoi andare su questo sito?", "Closest & Cheapest": "Più vicino e più economico", // "Work Saved": "Posizione lavoro salvata", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "Intaleq è l'app di ride-sharing che è sicura, affidabile e accessibile.", "With Intaleq, you can get a ride to your destination in minutes.": "Con Intaleq, puoi raggiungere la tua destinazione in pochi minuti.", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "Intaleq si impegna per la sicurezza e tutti i nostri capitani sono accuratamente controllati e verificati.", // "To Home": "A casa", // "Home Saved": "Posizione casa salvata", // "Destination selected": "Destinazione selezionata:", // "Now select start pick": "Ora seleziona il punto di partenza:", "Pick from map": "Scegli dalla mappa", // "Click here point": "Clicca qui", "No Car in your site. Sorry!": "Nessuna auto nella tua posizione. Scusa!", "Nearest Car for you about ": "Auto più vicina per te circa ", // "N/A": "N/A", "From :": "Da:", "Get Details of Trip": "Ottieni dettagli del viaggio", "If you want add stop click here": "Se vuoi aggiungere una fermata, clicca qui", // "Driver": "Conducente", "Where you want go ": "Dove vuoi andare ", "My Card": "La mia carta", "Start Record": "Inizia registrazione", "Wallet": "Portafoglio", "History of Trip": "Cronologia viaggio", "Helping Center": "Centro di aiuto", "Record saved": "Registrazione salvata", "Trips recorded": "Viaggi registrati", "Select Your Country": "Seleziona il tuo paese", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "Per assicurarti di ricevere le informazioni più accurate per la tua posizione, seleziona il tuo paese qui sotto. Questo aiuterà a personalizzare l'esperienza e i contenuti dell'app per il tuo paese.", "Are you sure to delete recorded files": "Sei sicuro di voler eliminare i file registrati?", "Select recorded trip": "Seleziona viaggio registrato", "Card Number": "Numero carta", "Hi, Where to ": "Ciao, dove ", "Pick your destination from Map": "Scegli la tua destinazione dalla mappa", "Add Stops": "Aggiungi fermate", "Get Direction": "Ottieni direzione", "Add Location": "Aggiungi posizione", "Switch Rider": "Cambia conducente", "You will arrive to your destination after timer end.": "Arriverai a destinazione dopo la fine del timer.", "You can cancel trip": "Puoi annullare il viaggio", "The driver waitting you in picked location .": "Il conducente ti aspetta nel luogo selezionato.", "10\$ and get 3% discount": "10\$ e ottieni il 3% di sconto", "20\$ and get 4% discount": "20\$ e ottieni il 4% di sconto", "40\$ and get 6% discount": "40\$ e ottieni il 6% di sconto", "100\$ and get 9% discount": "100\$ e ottieni il 9% di sconto", "Pay with Your": "Paga con il tuo", "Pay with Credit Card": "Paga con carta di credito", "Payment History": "Cronologia pagamenti", "Show Promos to Charge": "Mostra promozioni per ricaricare", "Point": "Punto", "How many hours would you like to wait?": "Quante ore vuoi aspettare?", "Driver Wallet": "Portafoglio conducente", "Choose between those Type Cars": "Scegli tra questi tipi di auto", "hour": "ora", "Select Waiting Hours": "Seleziona ore di attesa", "Total Points is": "Totale punti è", "You will receive a code in SMS message": "Riceverai un codice in un messaggio SMS", "Done": "Fatto", "Total Budget from trips is ": "Budget totale dai viaggi è ", "Total Amount:": "Importo totale:", "Total Budget from trips by\nCredit card is ": "Budget totale dai viaggi con\ncarta di credito è ", "This amount for all trip I get from Passengers": "Questo importo per tutti i viaggi che ottengo dai passeggeri", "Pay from my budget": "Paga dal mio budget", "This amount for all trip I get from Passengers and Collected For me in": "Questo importo per tutti i viaggi che ottengo dai passeggeri e raccolti per me in", "You can buy points from your budget": "Puoi acquistare punti dal tuo budget", "insert amount": "inserisci importo", "You can buy Points to let you online\nby this list below": "Puoi acquistare punti per rimanere online\ncon questa lista qui sotto", "Create Wallet to receive your money": "Crea un portafoglio per ricevere i tuoi soldi", "Enter your feedback here": "Inserisci il tuo feedback qui", "Please enter your feedback.": "Per favore, inserisci il tuo feedback.", "Feedback": "Feedback", "Submit ": "Invia ", "Click here to Show it in Map": "Clicca qui per mostrarlo sulla mappa", "Canceled": "Annullato", "Type your Email": "Scrivi la tua email", "No I want": "No, voglio", "Email is": "L'email è", "Phone Number is": "Il numero di telefono è", "Date of Birth is": "La data di nascita è", "Sex is ": "Il sesso è ", "Car Details": "Dettagli auto", "VIN is": "Il VIN è", "Color is ": "Il colore è ", "Make is ": "La marca è ", "Model is": "Il modello è", "Year is": "L'anno è", "Expiration Date ": "Data di scadenza ", "Edit Your data": "Modifica i tuoi dati", "write vin for your car": "scrivi il VIN per la tua auto", "VIN": "VIN", "write Color for your car": "scrivi il colore per la tua auto", "write Make for your car": "scrivi la marca per la tua auto", // "Make": "Marca", "write Model for your car": "scrivi il modello per la tua auto", // "Model": "Modello", "write Year for your car": "scrivi l'anno per la tua auto", // "Expiration Date": "Data di scadenza", "write Expiration Date for your car": "scrivi la data di scadenza per la tua auto", "Tariffs": "Tariffe", "Minimum fare": "Tariffa minima", "Maximum fare": "Tariffa massima", "Flag-down fee": "Tariffa di fermata", "Including Tax": "Inclusa tassa", "BookingFee": "Tariffa di prenotazione", "Morning": "Mattina", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "dalle 07:30 alle 10:30 (giovedì, venerdì, sabato, lunedì)", "Evening": "Sera", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "dalle 12:00 alle 15:00 (giovedì, venerdì, sabato, lunedì)", "Night": "Notte", "You have in account": "Hai nel conto", "Select Country": "Seleziona paese", "Ride Today : ": "Corsa oggi: ", "After this period\nYou can\'t cancel!": "Dopo questo periodo\nNon puoi annullare!", "from 23:59 till 05:30": "dalle 23:59 alle 05:30", "Rate Driver": "Valuta conducente", "Total Cost is ": "Costo totale è ", "Write note": "Scrivi nota", "Time to arrive": "Tempo di arrivo", "Ride Summaries": "Riepiloghi corse", "Total Cost": "Costo totale", "Average of Hours of": "Media di ore di", " is ON for this month": " è acceso per questo mese", "Days": "Giorni", "Total Hours on month": "Ore totali nel mese", "Counts of Hours on days": "Conteggio ore nei giorni", "OrderId": "ID ordine", "created time": "tempo di creazione", "Intaleq Over": "Eccesso di velocità", "I will slow down": "Rallenterò", "Map Passenger": "Mappa passeggero", "Be Slowly": "Sii lento", "If you want to make Google Map App run directly when you apply order": "Se vuoi che l'app Google Map si avvii direttamente quando applichi l'ordine", "You can change the language of the app": "Puoi cambiare la lingua dell'app", "Your Budget less than needed": "Il tuo budget è inferiore al necessario", "You can change the Country to get all features": "Puoi cambiare il paese per ottenere tutte le funzionalità", "Change Country": "Cambia paese" }, "zh": { "Order": "订单", "OrderVIP": "VIP订单", "Cancel Trip": "取消行程", "Passenger Cancel Trip": "乘客取消行程", "VIP Order": "VIP订单", "The driver accepted your trip": "司机已接受您的行程", "message From passenger": "乘客的消息", "Cancel": "取消", "Trip Cancelled. The cost of the trip will be added to your wallet.": "行程已取消。行程费用将添加到您的钱包中。", "token change": "令牌更改", "face detect": "人脸检测", "Face Detection Result": "人脸检测结果", "similar": "相似", "not similar": "不相似", "Hi ,I will go now": "嗨,我现在要走了", "Passenger come to you": "乘客来找您", "Call Income": "通话收入", "Call Income from Passenger": "来自乘客的通话收入", "Criminal Document Required": "需要犯罪记录文件", "You should have upload it .": "您应该已经上传了。", "Call End": "通话结束", "The order has been accepted by another driver.": "订单已被其他司机接受。", "The order Accepted by another Driver": "订单被其他司机接受", "We regret to inform you that another driver has accepted this order.": "我们遗憾地通知您,其他司机已接受此订单。", "Driver Applied the Ride for You": "司机已为您申请行程", "Applied": "已申请", "Hi ,I Arrive your site": "嗨,我到达您的位置了", "Please go to Car Driver": "请前往司机处", "Ok I will go now.": "好的,我现在就去。", "Accepted Ride": "已接受的行程", "Driver Accepted the Ride for You": "司机已接受您的行程", "Promo": "促销", "Show latest promo": "显示最新促销", "Trip Monitoring": "行程监控", "Driver Is Going To Passenger": "司机正在前往乘客处", "Please stay on the picked point.": "请留在指定地点。", "message From Driver": "司机的消息", "Trip is Begin": "行程开始", "Cancel Trip from driver": "司机取消行程", "We will look for a new driver.\nPlease wait.": "我们将寻找新的司机。\n请稍候。", "The driver canceled your ride.": "司机取消了您的行程。", "Driver Finish Trip": "司机完成行程", "you will pay to Driver": "您将支付给司机", "Don’t forget your personal belongings.": "请不要忘记您的个人物品。", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "请确保您带上了所有个人物品,并在离开前将任何剩余费用(如适用)添加到您的钱包中。感谢您选择Intaleq应用。", "Finish Monitor": "结束监控", "Trip finished": "行程结束", "Call Income from Driver": "来自司机的通话收入", "Driver Cancelled Your Trip": "司机取消了您的行程", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "您将支付给司机,您将支付司机的时间费用,请查看您的Intaleq钱包", "Order Applied": "订单已申请", //firebase above // "Where to": "去哪里", "Where are you going?": "您要去哪里?", "Quick Actions": "快速操作", "My Wallet": "我的钱包", "Order History": "订单历史", "Contact Us": "联系我们", "Driver": "司机", "Complaint": "投诉", "Promos": "促销", "Recent Places": "最近的地点", "From": "从", "WhatsApp Location Extractor": "WhatsApp位置提取器", "Location Link": "位置链接", "Paste location link here": "在此处粘贴位置链接", "Go to this location": "前往此位置", "Paste WhatsApp location link": "粘贴WhatsApp位置链接", "Select Order Type": "选择订单类型", "Choose who this order is for": "选择此订单是为谁", "I want to order for myself": "我想为自己下单", "I want to order for someone else": "我想为别人下单", // "Cancel": "取消", "Order for someone else": "为别人下单", "Order for myself": "为自己下单", "Are you want to go this site": "您想去这个网站吗?", // "Yes": "是", "No": "否", "Are you sure to delete this location?": "您确定要删除此位置吗?", "deleted": "已删除", "To Work": "去工作", "Work Saved": "工作地点已保存", "To Home": "回家", "Home Saved": "家已保存", "Destination selected": "目的地已选择", "Now select start pick": "现在选择起点", "OK": "确定", "Confirm Pick-up Location": "确认接载地点", "Set Location on Map": "在地图上设置位置", "Nearest Car: ~": "最近的车:~", "Nearest Car": "最近的车", "No cars nearby": "附近没有车", "Favorite Places": "收藏的地点", "No favorite places yet!": "还没有收藏的地点!", "from your favorites": "从您的收藏中", "Back": "返回", "Sign in for a seamless experience": "登录以获得无缝体验", "Sign In with Google": "使用Google登录", "Sign in with Apple": "使用Apple登录", "Need assistance? Contact us": "需要帮助?联系我们", "User not found": "用户未找到", "Email": "电子邮件", "Your email address": "您的电子邮件地址", "Enter a valid email": "请输入有效的电子邮件", "Password": "密码", // "Your password": "您的密码", "Enter your password": "请输入您的密码", "Submit": "提交", "Terms of Use & Privacy Notice": "使用条款和隐私声明", "Terms of Use": "使用条款", "Privacy Notice": "隐私声明", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "通过在下方选择“我同意”,我确认我已阅读并同意", "and acknowledge the": "并承认", ". I am at least 18 years old.": "。我至少18岁。", "Continue": "继续", "Enable Location Access": "启用位置访问", "We need your location to find nearby drivers for pickups and drop-offs.": "我们需要您的位置以找到附近的司机进行接送。", "Allow Location Access": "允许位置访问", "You should restart app to change language": "您应重新启动应用以更改语言", "Home Page": "主页", "To change Language the App": "更改应用语言", "Learn more about our app and mission": "了解更多关于我们的应用和使命", "Promos For Today": "今日促销", "Choose your ride": "选择您的行程", "Your Journey Begins Here": "您的旅程从这里开始", "Bonus gift": "奖励礼物", "Pay": "支付", "Get": "获得", "Send to Driver Again": "再次发送给司机", "Driver Name:": "司机姓名:", "No trip data available": "没有可用的行程数据", "Car Plate:": "车牌号:", "remaining": "剩余", "Order Cancelled": "订单已取消", "You canceled VIP trip": "您取消了VIP行程", "Passenger cancelled order": "乘客取消了订单", "Your trip is scheduled": "您的行程已安排", "Don't forget your ride!": "别忘了您的行程!", "Trip updated successfully": "行程更新成功", "Car Make:": "汽车品牌:", "Car Model:": "汽车型号:", "Car Color:": "汽车颜色:", "Driver Phone:": "司机电话:", "Pre-booking": "提前预订", "Waiting VIP": "等待VIP", "Driver List": "司机列表", "Confirm Trip": "确认行程", "Select date and time of trip": "选择行程的日期和时间", "Date and Time Picker": "日期和时间选择器", "Trip Status:": "行程状态:", "pending": "待定", "accepted": "已接受", "rejected": "已拒绝", "Apply": "应用", "Enter your promo code": "输入您的促销代码", "Apply Promo Code": "应用促销代码", "Scheduled Time:": "预定时间:", "No drivers available": "没有可用的司机", "No drivers available at the moment. Please try again later.": "目前没有可用的司机。请稍后再试。", "you have a negative balance of": "您的余额为负", "Please try again in a few moments": "请稍后再试", "Unknown Driver": "未知司机", "in your": "在您的", "The driver accepted your order for": "司机已接受您的订单", "wallet due to a previous trip.": "由于之前的行程,钱包。", "rides": "行程", "Add Work": "添加工作", "The reason is": "原因是", "User does not have a wallet #1652": "用户没有钱包 #1652", "Price of trip": "行程价格", "From:": "从:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "对于速度和送货行程,价格是动态计算的。对于舒适行程,价格基于时间和距离。", "Phone Wallet Saved Successfully": "手机钱包保存成功", "Add wallet phone you use": "添加您使用的钱包手机", "Update Available": "有更新可用", "Phone number must be exactly 11 digits long": "电话号码必须正好是11位数字", "Insert Wallet phone number": "插入钱包电话号码", "Phone number isn't an Egyptian phone number": "电话号码不是埃及电话号码", "A new version of the app is available. Please update to the latest version.": "有新版本的应用可用。请更新到最新版本。", "We use location to get accurate and nearest passengers for you": "我们使用位置为您获取准确且最近的乘客", "This ride is already applied by another driver.": "此行程已被其他司机申请。", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "我们使用您的精确位置来找到最近的可用司机并提供准确的接送信息。您可以在设置中管理此功能。", "Where are you, sir?": "先生,您在哪里?", "I've been trying to reach you but your phone is off.": "我一直在尝试联系您,但您的电话已关机。", "Please don't be late": "请不要迟到", "Please don't be late, I'm waiting for you at the specified location.": "请不要迟到,我在指定地点等您。", "My location is correct. You can search for me using the navigation app": "我的位置是正确的。您可以使用导航应用搜索我。", "Hello, I'm at the agreed-upon location": "您好,我在约定的地点", "How much longer will you be?": "您还要多久?", "Phone number is verified before": "电话号码之前已验证", "Change Ride": "更改行程", "You can change the destination by long-pressing any point on the map": "您可以通过长按地图上的任何点来更改目的地", "Pick from map destination": "从地图中选择目的地", "Pick or Tap to confirm": "选择或点击确认", "Accepted your order": "已接受您的订单", "Order Accepted": "订单已接受", "with type": "类型为", "accepted your order at price": "以价格接受了您的订单", "you canceled order": "您取消了订单", "If you want order to another person": "如果您想为其他人下单", // "Ok I will go now.": "好的,我现在就去。", // "Hi, I will go now": "嗨,我现在要走了", "upgrade price": "升级价格", "Please enter a correct phone": "请输入正确的电话", "airport": "机场", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "选择舒适的车,路线灵活且有停靠点。此机场以此价格提供签证入境。", "You can upgrade price to may driver accept your order": "您可以升级价格以使司机接受您的订单", "Change Route": "更改路线", "No Captain Accepted Your Order": "没有船长接受您的订单", "We are looking for a captain but the price may increase to let a captain accept": "我们正在寻找船长,但价格可能会上涨以使船长接受", "No, I want to cancel this trip": "不,我想取消此行程", // "Trip Cancelled. The cost of the trip will be added to your wallet.": "行程已取消。行程费用将添加到您的钱包中。", "Attention": "注意", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "行程已取消。行程费用将从您的钱包中扣除。", "You will be charged for the cost of the driver coming to your location.": "您将被收取司机前往您位置的费用。", "reject your order.": "拒绝您的订单。", "Order Under Review": "订单正在审核中", "is reviewing your order. They may need more information or a higher price.": "正在审核您的订单。他们可能需要更多信息或更高的价格。", // "The driver canceled your ride.": "司机取消了您的行程。", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "我们还没有找到任何司机。考虑增加您的行程费用以使您的报价对司机更具吸引力。", "Increase Your Trip Fee (Optional)": "增加您的行程费用(可选)", "Vibration": "振动", "Resend code": "重新发送代码", // "token change": "令牌更改", "change device": "更改设备", "Device Change Detected": "检测到设备更改", "You can only use one device at a time. This device will now be set as your active device.": "您一次只能使用一个设备。此设备现在将被设置为您的活动设备。", "Click here point": "点击这里", "Are you want to change": "您想更改", "by": "由", "Enter your complaint here": "在此处输入您的投诉", "Please enter your complaint.": "请输入您的投诉。", "Complaint data saved successfully": "投诉数据保存成功", "Trip Monitor": "行程监控", "Insert SOS Phone": "插入SOS电话", "Add SOS Phone": "添加SOS电话", // "Trip Monitoring": "行程监控", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "亲爱的,\n\n🚀 我刚刚开始了一次激动人心的旅行,我想与您实时分享我的旅程详情和当前位置!请下载Intaleq应用。它将允许您查看我的行程详情和最新位置。\n\n👈 下载链接:\nAndroid [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\niOS [https://getapp.cc/app/6458734951]\n\n我期待在冒险中与您保持联系!\n\nIntaleq,", "Send Intaleq app to him": "发送Intaleq应用给他", "No passenger found for the given phone number": "未找到给定电话号码的乘客", "No user found for the given phone number": "未找到给定电话号码的用户", "This price is": "此价格为", "Work": "工作", "Add Home": "添加家", "Notifications": "通知", "💳 Pay with Credit Card": "💳 使用信用卡支付", "⚠️ You need to choose an amount!": "⚠️ 您需要选择一个金额!", "💰 Pay with Wallet": "💰 使用钱包支付", "You must restart the app to change the language.": "您必须重新启动应用以更改语言。", "joined": "已加入", "Driver joined the channel": "司机已加入频道", "Driver left the channel": "司机已离开频道", "Call Page": "通话页面", // "Call End": "通话结束", "Call Left": "剩余通话", r"$ Next as Cash $!": "下一个作为现金!", "To use Wallet charge it": "要使用钱包,请充值", "We are searching for the nearest driver to you": "我们正在为您寻找最近的司机", "Best choice for cities": "城市的最佳选择", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "Rayeh Gai:往返服务,方便城市间旅行,简单可靠。", "Rayeh Gai": "Rayeh Gai", "This trip is for women only": "此行程仅限女性", "Total budgets on month": "本月总预算", "You have call from driver": "您有来自司机的电话", "Comfort": "舒适", "Intaleq": "速度", "Driver already has 2 trips within the specified period.": "司机在指定时间内已经有2次行程。", "The invitation was sent successfully": "邀请已成功发送", "Lady": "女士", "You should select your country": "您应选择您的国家", "Scooter": "滑板车", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "提前预订的行程,允许您选择最好的船长和汽车。", "Mishwar Vip": "Mishwar Vip", "The driver waiting you in picked location .": "司机在指定地点等您。", "About Us": "关于我们", "You can change the vibration feedback for all buttons": "您可以更改所有按钮的振动反馈", "Most Secure Methods": "最安全的方法", "In-App VOIP Calls": "应用内VOIP通话", "Recorded Trips for Safety": "为安全记录的行程", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\n我们还优先考虑 affordability,提供有竞争力的价格以使您的行程更易获得。", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "Intaleq是一款专为您的安全和 affordability 设计的拼车应用。我们将您与您所在地区的可靠司机联系起来,确保便捷且无压力的旅行体验。\n\n以下是一些使我们与众不同的关键功能:", "Sign In by Apple": "使用Apple登录", "Sign In by Google": "使用Google登录", "How do I request a ride?": "如何请求行程?", "Step-by-step instructions on how to request a ride through the Intaleq app.": "通过Intaleq应用请求行程的逐步说明。", "What types of vehicles are available?": "有哪些类型的车辆可用?", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "Intaleq提供多种车辆选项以满足您的需求,包括经济型、舒适型和豪华型。选择最适合您预算和乘客数量的选项。", "How can I pay for my ride?": "如何支付我的行程?", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "Intaleq提供多种支付方式以方便您。在行程确认期间选择现金支付或信用卡/借记卡支付。", "Can I cancel my ride?": "我可以取消我的行程吗?", "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Intaleq cancellation policy for details.": "是的,您可以在某些条件下取消行程(例如,在分配司机之前)。有关详细信息,请参阅Intaleq取消政策。", "Driver Registration & Requirements": "司机注册和要求", "How can I register as a driver?": "如何注册为司机?", "What are the requirements to become a driver?": "成为司机的要求是什么?", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "访问我们的网站或联系Intaleq支持以获取有关司机注册和要求的信息。", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "Intaleq提供应用内聊天功能,允许您在行程期间与司机或乘客沟通。", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "Intaleq优先考虑您的安全。我们提供司机验证、应用内行程跟踪和紧急联系人选项等功能。", "Frequently Questions": "常见问题", "User does not exist.": "用户不存在。", "We need your phone number to contact you and to help you.": "我们需要您的电话号码以联系您并帮助您。", "You will recieve code in sms message": "您将在短信中收到代码", "Please enter": "请输入", "We need your phone number to contact you and to help you receive orders.": "我们需要您的电话号码以联系您并帮助您接收订单。", "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": "您的犯罪记录上的全名与驾驶执照上的不匹配。请验证并提供正确的文件。", "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": "您的驾驶执照上的国家号码与身份证件上的不匹配。请验证并提供正确的文件。", "Capture an Image of Your Criminal Record": "拍摄您的犯罪记录图像", "IssueDate": "签发日期", "Capture an Image of Your car license front ": "拍摄您的汽车驾照正面图像", "Capture an Image of Your ID Document front": "拍摄您的身份证件正面图像", "NationalID": "国家ID", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "您可以与朋友分享Intaleq应用,并通过他们使用您的代码乘坐行程赚取奖励", "FullName": "全名", "No invitation found yet!": "尚未找到邀请!", "InspectionResult": "检查结果", "Criminal Record": "犯罪记录", "Share App": "分享应用", "The email or phone number is already registered.": "电子邮件或电话号码已注册。", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "要在Intaleq应用上成为拼车司机,您需要上传您的驾驶执照、身份证件和汽车注册文件。我们的AI系统将在2-3分钟内即时审查并验证其真实性。如果您的文件获得批准,您可以开始在Intaleq应用上作为司机工作。请注意,提交欺诈性文件是严重违法行为,可能导致立即终止和法律后果。", "Documents check": "文件检查", "Driver's License": "驾驶执照", "for your first registration!": "用于您的首次注册!", "Get it Now!": "立即获取!", "before": "之前", "Code not approved": "代码未批准", "3000 LE": "3000 LE", "Do you have an invitation code from another driver?": "您有其他司机的邀请代码吗?", "Paste the code here": "在此处粘贴代码", "No, I don't have a code": "不,我没有代码", "Code approved": "代码已批准", "Install our app:": "安装我们的应用:", "Invite another driver and both get a gift after he completes 100 trips!": "邀请另一位司机,并在他完成100次行程后双方都获得礼物!", "Invite": "邀请", "Are you sure?": "您确定吗?", "This will delete all recorded files from your device.": "这将删除您设备上的所有记录文件。", "Select a file": "选择一个文件", "Select a File": "选择一个文件", "Delete": "删除", "attach audio of complain": "附加投诉音频", "Phone Number Check": "电话号码检查", "Drivers received orders": "司机已收到订单", "No audio files recorded.": "没有录制的音频文件。", "This is for delivery or a motorcycle.": "这是用于送货或摩托车。", // "We will look for a new driver.\nPlease wait.": "我们将寻找新的司机。\n请稍候。", "Intaleq Reminder": "Intaleq提醒", "It's time to check the Intaleq app!": "是时候检查Intaleq应用了!", "you must insert token code": "您必须插入令牌代码", "Something went wrong. Please try again.": "出了点问题。请再试一次。", "Trip Details": "行程详情", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "上下文未提供任何投诉详情,因此我无法提供此问题的解决方案。请提供必要的信息,我将很乐意帮助您。", "Submit Your Complaint": "提交您的投诉", "Date": "日期", "Price": "价格", "Status": "状态", "Choose from contact": "从联系人中选择", "attach correct audio": "附加正确的音频", "be sure": "确保", "Audio uploaded successfully.": "音频上传成功。", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "非常适合寻求最新车型并希望自由选择任何路线的乘客", "Share this code with your friends and earn rewards when they use it!": "与朋友分享此代码,并在他们使用时赚取奖励!", "Enter phone": "输入电话", "You deserve the gift": "您应得的礼物", "complete, you can claim your gift": "完成,您可以领取您的礼物", "When": "何时", "Enter driver's phone": "输入司机的电话", "Send Invite": "发送邀请", "Show Invitations": "显示邀请", "License Type": "执照类型", "National Number": "国家号码", "Name (Arabic)": "姓名(阿拉伯语)", "Name (English)": "姓名(英语)", "Address": "地址", "Issue Date": "签发日期", "Expiry Date": "到期日期", "License Categories": "执照类别", "driver_license": "驾驶执照", "Capture an Image of Your Driver License": "拍摄您的驾驶执照图像", "ID Documents Back": "身份证件背面", "National ID": "国家ID", "Occupation": "职业", "Gender": "性别", "Religion": "宗教", "Marital Status": "婚姻状况", "Full Name (Marital)": "全名(婚姻)", "Expiration Date": "到期日期", "Capture an Image of Your ID Document Back": "拍摄您的身份证件背面图像", "ID Documents Front": "身份证件正面", "First Name": "名字", "CardID": "卡ID", "Vehicle Details Front": "车辆详情正面", "Plate Number": "车牌号", "Owner Name": "车主姓名", "Vehicle Details Back": "车辆详情背面", "Make": "品牌", "Model": "型号", "Year": "年份", "Chassis": "底盘", "Color": "颜色", "Displacement": "排量", "Fuel": "燃料", "Tax Expiry Date": "税务到期日期", "Inspection Date": "检查日期", "Capture an Image of Your car license back": "拍摄您的汽车驾照背面图像", "Capture an Image of Your Driver’s License": "拍摄您的驾驶执照图像", "Sign in with Google for easier email and name entry": "使用Google登录以便更轻松地输入电子邮件和姓名", "You will choose allow all the time to be ready receive orders": "您将选择始终允许以准备接收订单", "Welcome to Intaleq!": "欢迎来到Intaleq!", "Get to your destination quickly and easily.": "快速轻松地到达您的目的地。", "Enjoy a safe and comfortable ride.": "享受安全舒适的行程。", "Choose Language": "选择语言", "Login": "登录", "Pay with Wallet": "使用钱包支付", "Invalid MPIN": "无效的MPIN", "Invalid OTP": "无效的OTP", // "Driver Accepted the Ride for You": "司机已接受您的行程", "Enter your email address": "输入您的电子邮件地址", "Please enter Your Email.": "请输入您的电子邮件。", "Enter your phone number": "输入您的电话号码", "Please enter your phone number.": "请输入您的电话号码。", "Please enter Your Password.": "请输入您的密码。", "if you dont have account": "如果您没有账户", "Register": "注册", "Accept Ride's Terms & Review Privacy Notice": "接受行程条款并查看隐私声明", "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "通过在下方选择“我同意”,我确认我已阅读并同意使用条款并承认隐私声明。我至少18岁。", "I Agree": "我同意", // "Finish Monitor": "结束监控", "First name": "名字", "Enter your first name": "输入您的名字", "Please enter your first name.": "请输入您的名字。", "Last name": "姓氏", "Enter your last name": "输入您的姓氏", "Please enter your last name.": "请输入您的姓氏。", "City": "城市", "Please enter your City.": "请输入您的城市。", "Male": "男性", "Female": "女性", "Verify Email": "验证电子邮件", "We sent 5 digit to your Email provided": "我们向您提供的电子邮件发送了5位数字", "5 digit": "5位数字", "Send Verification Code": "发送验证码", "Your Ride Duration is ": "您的行程时长为 ", "You will be thier in": "您将在", "You trip distance is": "您的行程距离为", "Fee is": "费用为", "From : ": "从:", "To : ": "到:", "Add Promo": "添加促销", "Confirm Selection": "确认选择", "distance is": "距离为", "Intaleq LLC": "Intaleq有限责任公司", "Egypt's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "埃及的先锋拼车服务,由阿拉伯和本地业主自豪地开发。我们优先考虑靠近您——无论是我们宝贵的乘客还是我们敬业的船长。", "Why Choose Intaleq?": "为什么选择Intaleq?", "Closest to You": "离您最近", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "我们将您与最近的司机联系起来,以便更快地接送和更快的旅程。", "Uncompromising Security": "不妥协的安全", "Lady Captains Available": "女船长可用", "Recorded Trips (Voice & AI Analysis)": "记录的行程(语音和AI分析)", "Fastest Complaint Response": "最快的投诉响应", "Our dedicated customer service team ensures swift resolution of any issues.": "我们专门的客户服务团队确保快速解决任何问题。", "Affordable for Everyone": "人人可负担", "Frequently Asked Questions": "常见问题", "Getting Started": "入门", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "只需打开Intaleq应用,输入您的目的地,然后点击“请求行程”。应用将为您联系附近的司机。", "Vehicle Options": "车辆选项", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "Intaleq提供多种选项,包括经济型、舒适型和豪华型,以满足您的需求和预算。", "Payments": "支付", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "您可以使用现金或信用卡/借记卡支付您的行程。您可以在确认行程前选择您喜欢的支付方式。", "Ride Management": "行程管理", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "是的,您可以取消您的行程,但请注意,根据您取消的时间,可能会收取取消费用。", "For Drivers": "对于司机", // "Driver Registration & Requirements": "司机注册和要求", "Driver Registration": "司机注册", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "要注册为司机或了解要求,请访问我们的网站或直接联系Intaleq支持。", "Visit Website/Contact Support": "访问网站/联系支持", "Close": "关闭", "We are searching for the nearest driver": "我们正在寻找最近的司机", "Communication": "沟通", "How do I communicate with the other party (passenger/driver)?": "我如何与另一方(乘客/司机)沟通?", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "一旦行程确认,您可以通过应用内聊天功能与司机或乘客沟通。", "Safety & Security": "安全与保障", "What safety measures does Intaleq offer?": "Intaleq提供哪些安全措施?", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "Intaleq提供各种安全功能,包括司机验证、应用内行程跟踪、紧急联系人选项以及与可信联系人共享行程状态的能力。", "Enjoy competitive prices across all trip options, making travel accessible.": "享受所有行程选项的竞争价格,使旅行更易获得。", "Variety of Trip Choices": "多种行程选择", "Choose the trip option that perfectly suits your needs and preferences.": "选择最适合您需求和偏好的行程选项。", "Your Choice, Our Priority": "您的选择,我们的优先", "Because we are near, you have the flexibility to choose the ride that works best for you.": "因为我们离您近,您可以灵活选择最适合您的行程。", "duration is": "时长为", "Setting": "设置", "Find answers to common questions": "找到常见问题的答案", "I don't need a ride anymore": "我不再需要行程", "I was just trying the application": "我只是在试用应用", "No driver accepted my request": "没有司机接受我的请求", "I added the wrong pick-up/drop-off location": "我添加了错误的接载/下车地点", "I don't have a reason": "我没有理由", "Other": "其他", "Can we know why you want to cancel Ride ?": "我们可以知道您为什么想取消行程吗?", "Cancel Ride": "取消行程", "Add Payment Method": "添加支付方式", "Your Wallet balance is ": "您的钱包余额为 ", "Ride Wallet": "行程钱包", "Payment Method": "支付方式", "Type here Place": "在此处输入地点", "Are You sure to ride to": "您确定要去", "Confirm": "确认", // "Back": "返回", "You are Delete": "您正在删除", "Deleted": "已删除", "You Dont Have Any places yet !": "您还没有任何地点!", // "Favorite Places": "收藏的地点", "From : Current Location": "从:当前位置", // "Where to": "去哪里", "Profile": "个人资料", "Home": "家", "My Cared": "我的关心", "Add Card": "添加卡片", "Add Credit Card": "添加信用卡", "Please enter the cardholder name": "请输入持卡人姓名", "Please enter the expiry date": "请输入到期日期", "Please enter the CVV code": "请输入CVV代码", "Go To Favorite Places": "前往收藏的地点", "Go to this Target": "前往此目标", "My Profile": "我的个人资料", "Sign Out": "登出", "Are you want to go to this site": "您想去这个网站吗", "MyLocation": "我的位置", "my location": "我的位置", "Target": "目标", "Update": "更新", "You Should choose rate figure": "您应选择评分", "Login Captin": "登录船长", "Register Captin": "注册船长", "Send Verfication Code": "发送验证码", "KM": "公里", "End Ride": "结束行程", "Minute": "分钟", "Go to passenger Location now": "现在前往乘客位置", "Duration of the Ride is ": "行程时长为 ", "Distance of the Ride is ": "行程距离为 ", "Name of the Passenger is ": "乘客姓名为 ", "Hello this is Captain": "您好,我是船长", "Start the Ride": "开始行程", "Please Wait If passenger want To Cancel!": "如果乘客想取消,请稍候!", "Total Duration:": "总时长:", "Active Duration:": "活动时长:", "Waiting for Captin ...": "等待船长...", "Age is ": "年龄为 ", "Rating is ": "评分为 ", " to arrive you.": "到达您。", "Tariff": "关税", "Settings": "设置", "Feed Back": "反馈", "Please enter a valid 16-digit card number": "请输入有效的16位卡号", "Add Phone": "添加电话", "Please enter a phone number": "请输入电话号码", "You dont Add Emergency Phone Yet!": "您还没有添加紧急电话!", "You will arrive to your destination after ": "您将在之后到达目的地", "You can cancel Ride now": "您现在可以取消行程", "You Can cancel Ride After Captain did not come in the time": "如果船长没有按时到达,您可以取消行程", "If you in Car Now. Press Start The Ride": "如果您现在在车里。按下开始行程", "You Dont Have Any amount in": "您没有任何金额在", "Wallet!": "钱包!", "You Have": "您有", "Save Credit Card": "保存信用卡", "Show Promos": "显示促销", "10 and get 4% discount": "10并获得4%折扣", "20 and get 6% discount": "20并获得6%折扣", "40 and get 8% discount": "40并获得8%折扣", "100 and get 11% discount": "100并获得11%折扣", "Pay with Your PayPal": "使用您的PayPal支付", "You will choose one of above !": "您将选择上述之一!", "Delete My Account": "删除我的账户", "Edit Profile": "编辑个人资料", "Name": "姓名", "Update Gender": "更新性别", "Education": "教育", "Update Education": "更新教育", "Employment Type": "就业类型", "SOS Phone": "SOS电话", "High School Diploma": "高中文凭", "Associate Degree": "副学士学位", "Bachelor's Degree": "学士学位", "Master's Degree": "硕士学位", "Doctoral Degree": "博士学位", "Copy this Promo to use it in your Ride!": "复制此促销以在您的行程中使用!", "To change some Settings": "更改一些设置", "Order Request Page": "订单请求页面", "Rouats of Trip": "行程路线", "Passenger Name is ": "乘客姓名为 ", "Total From Passenger is ": "乘客总金额为 ", "Duration To Passenger is ": "到达乘客的时长为 ", "Distance To Passenger is ": "到达乘客的距离为 ", "Total For You is ": "您的总金额为 ", "Distance is ": "距离为 ", " KM": " 公里", "Duration of Trip is ": "行程时长为 ", " Minutes": " 分钟", "Apply Order": "应用订单", "Refuse Order": "拒绝订单", "Rate Captain": "评分船长", "Enter your Note": "输入您的备注", "Type something...": "输入一些内容...", "Submit rating": "提交评分", "Rate Passenger": "评分乘客", "Ride Summary": "行程摘要", "welcome_message": "欢迎来到Intaleq!", "app_description": "Intaleq是一款可靠、安全且易于使用的拼车应用。", "get_to_destination": "快速轻松地到达您的目的地。", "get_a_ride": "使用Intaleq,您可以在几分钟内到达目的地。", "safe_and_comfortable": "享受安全舒适的行程。", "committed_to_safety": "Intaleq致力于安全,我们所有的船长都经过仔细筛选和背景调查。", // "Driver Applied the Ride for You": "司机已为您申请行程", // "Show latest promo": "显示最新促销", // "Cancel Trip": "取消行程", // "Passenger Cancel Trip": "乘客取消行程", // "Accepted Ride": "已接受的行程", "your ride is Accepted": "您的行程已被接受", // "Trip is Begin": "行程开始", "Driver is waiting at pickup.": "司机在接载点等待。", "Driver is on the way": "司机正在路上", "Contact Options": "联系选项", "Send a custom message": "发送自定义消息", "Type your message": "输入您的消息", // "Hi ,I will go now": "嗨,我现在要走了", // "Passenger come to you": "乘客来找您", // "Hi ,I Arrive your site": "嗨,我到达您的位置了", // "Driver Finish Trip": "司机完成行程", // "you will pay to Driver": "您将支付给司机", // "Driver Cancel Your Trip": "司机取消了您的行程", // "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "您将支付给司机,您将支付司机的时间费用,请查看您的Intaleq钱包", // "I will go now": "我现在要走了", "You Have Tips": "您有小费", " tips\nTotal is": " 小费\n总计", // "No,I want": "不,我想", "Your fee is ": "您的费用为 ", // "Do you want to pay Tips for this Driver": "您想给这位司机小费吗?", "Tip is ": "小费为 ", "Are you want to wait drivers to accept your order": "您想等待司机接受您的订单吗?", "This price is fixed even if the route changes for the driver.": "即使司机的路线改变,此价格也是固定的。", "The price may increase if the route changes.": "如果路线改变,价格可能会上涨。", "The captain is responsible for the route.": "船长负责路线。", "We are search for nearst Driver": "我们正在寻找最近的司机", "Your order is being prepared": "您的订单正在准备中", "The drivers are reviewing your request": "司机们正在审查您的请求", "Your order sent to drivers": "您的订单已发送给司机", "You can call or record audio of this trip": "您可以打电话或录制此行程的音频", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "行程已开始!随时联系紧急号码,分享您的行程,或激活语音录制以记录旅程", // "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "请确保您带上了所有个人物品,并在离开前将任何剩余费用(如适用)添加到您的钱包中。感谢您选择Intaleq应用。", // "Don’t forget your personal belongings.": "请不要忘记您的个人物品。", "Camera Access Denied.": "相机访问被拒绝。", "Open Settings": "打开设置", "GPS Required Allow !.": "需要GPS允许!", "Your Account is Deleted": "您的账户已被删除", "Are you sure to delete your account?": "您确定要删除您的账户吗?", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "您的数据将在2周后删除\n并且您将无法在1个月后返回使用应用", "Enter Your First Name": "输入您的名字", "Are you Sure to LogOut?": "您确定要登出吗?", "Email Wrong": "电子邮件错误", "Email you inserted is Wrong.": "您输入的电子邮件错误。", "You have finished all times ": "您已完成所有时间", "if you want help you can email us here": "如果您需要帮助,可以在这里给我们发电子邮件", "Thanks": "谢谢", "Email Us": "给我们发电子邮件", "I cant register in your app in face detection ": "我无法在您的应用中进行人脸检测注册", "Hi": "嗨", "No face detected": "未检测到人脸", "Image detecting result is ": "图像检测结果为 ", "from 3 times Take Attention": "从3次开始注意", "Be sure for take accurate images please\nYou have": "请确保拍摄准确的图像\n您有", "image verified": "图像已验证", "Next": "下一步", "There is no help Question here": "这里没有帮助问题", "You dont have Points": "您没有积分", "You Are Stopped For this Day !": "您今天被停止了!", "You must be charge your Account": "您必须为您的账户充值", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "您今天拒绝了3次行程,这是原因\n明天见!", "Recharge my Account": "为我的账户充值", "Ok , See you Tomorrow": "好的,明天见", "You are Stopped": "您被停止了", "Connected": "已连接", "Not Connected": "未连接", "Your are far from passenger location": "您离乘客位置很远", "go to your passenger location before\nPassenger cancel trip": "在乘客取消行程之前前往乘客位置", "You will get cost of your work for this trip": "您将获得此行程的工作费用", " in your wallet": "在您的钱包中", "you gain": "您获得", "Order Cancelled by Passenger": "乘客取消订单", "Success": "成功", "Feedback data saved successfully": "反馈数据保存成功", "No Promo for today .": "今天没有促销。", "Select your destination": "选择您的目的地", "Search for your Start point": "搜索您的起点", "Search for waypoint": "搜索途径点", "Current Location": "当前位置", "Add Location 1": "添加位置1", "You must Verify email !.": "您必须验证电子邮件!", "Cropper": "裁剪", "Saved Sucssefully": "保存成功", "Select Date": "选择日期", "Birth Date": "出生日期", "Ok": "确定", "the 500 points equal 30 JOD": "500点等于30 JOD", "the 500 points equal 30 JOD for you \nSo go and gain your money": "500点等于30 JOD\n所以去赚取您的钱", "token updated": "令牌已更新", "Add Location 2": "添加位置2", "Add Location 3": "添加位置3", "Add Location 4": "添加位置4", "Waiting for your location": "等待您的位置", "Search for your destination": "搜索您的目的地", "Hi! This is": "嗨!这是", " I am using": " 我正在使用", " to ride with": " 与", " as the driver.": " 作为司机。", "is driving a ": "正在驾驶一辆 ", " with license plate ": " 车牌号为 ", " I am currently located at ": " 我目前位于 ", "Please go to Car now ": "请现在去车里 ", "You will receive a code in WhatsApp Messenger": "您将在WhatsApp Messenger中收到代码", "If you need assistance, contact us": "如果您需要帮助,请联系我们", "Promo Ended": "促销结束", "Enter the promo code and get": "输入促销代码并获得", "DISCOUNT": "折扣", "No wallet record found": "未找到钱包记录", "for": "为", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "Intaleq是最安全的拼车应用,为船长和乘客引入了许多功能。我们提供最低的佣金率,仅为8%,确保您获得最佳的行程价值。我们的应用包括为最佳船长提供的保险,由顶级工程师定期维护汽车,以及道路服务,以确保所有用户的尊重和高质量体验。", "You can contact us during working hours from 12:00 - 19:00.": "您可以在工作时间内联系我们,时间为12:00 - 19:00。", "Choose a contact option": "选择联系选项", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "工作时间为12:00 - 19:00。\n您可以发送WhatsApp消息或电子邮件。", "Promo code copied to clipboard!": "促销代码已复制到剪贴板!", "Copy Code": "复制代码", "Your invite code was successfully applied!": "您的邀请代码已成功应用!", "Payment Options": "支付选项", "wait 1 minute to receive message": "等待1分钟以接收消息", "Promo Copied!": "促销已复制!", "You have copied the promo code.": "您已复制促销代码。", "Valid Until:": "有效期至:", "Select Payment Amount": "选择支付金额", "The promotion period has ended.": "促销期已结束。", "Promo Code Accepted": "促销代码已接受", "Tap on the promo code to copy it!": "点击促销代码以复制它!", "Lowest Price Achieved": "达到最低价格", "Cannot apply further discounts.": "无法应用更多折扣。", "Promo Already Used": "促销已使用", "Invitation Used": "邀请已使用", "You have already used this promo code.": "您已经使用过此促销代码。", "Insert Your Promo Code": "插入您的促销代码", "Enter promo code here": "在此处输入促销代码", "Please enter a valid promo code": "请输入有效的促销代码", "Awfar Car": "Awfar汽车", "Old and affordable, perfect for budget rides.": "老旧且价格实惠,非常适合预算行程。", " If you need to reach me, please contact the driver directly at": " 如果您需要联系我,请直接联系司机", "No Car or Driver Found in your area.": "在您所在地区未找到汽车或司机。", "Please Try anther time ": "请再试一次 ", "There no Driver Aplly your order sorry for that ": "没有司机申请您的订单,对此表示抱歉 ", "Trip Cancelled": "行程已取消", "The Driver Will be in your location soon .": "司机将很快到达您的位置。", "The distance less than 500 meter.": "距离小于500米。", "Promo End !": "促销结束!", "There is no notification yet": "还没有通知", "Use Touch ID or Face ID to confirm payment": "使用Touch ID或Face ID确认支付", "Contact us for any questions on your order.": "如有任何订单问题,请联系我们。", "Pyament Cancelled .": "支付已取消。", "type here": "在此处输入", "Scan Driver License": "扫描驾驶执照", "Please put your licence in these border": "请将您的执照放在这些边框内", "Camera not initialized yet": "相机尚未初始化", "Take Image": "拍摄图像", "AI Page": "AI页面", "Take Picture Of ID Card": "拍摄身份证照片", "Take Picture Of Driver License Card": "拍摄驾驶执照照片", "We are process picture please wait ": "我们正在处理图片,请稍候 ", "There is no data yet.": "还没有数据。", "Name :": "姓名:", "Drivers License Class: ": "驾驶执照类别:", "Document Number: ": "文件编号:", "Address: ": "地址:", "Height: ": "身高:", "Expiry Date: ": "到期日期:", "Date of Birth: ": "出生日期:", "You can\'t continue with us .\nYou should renew Driver license": "您无法继续与我们合作。\n您应更新驾驶执照", "Detect Your Face ": "检测您的脸 ", "Go to next step\nscan Car License.": "进入下一步\n扫描汽车执照。", "Name in arabic": "阿拉伯语姓名", "Drivers License Class": "驾驶执照类别", "Date of Birth": "出生日期", // "Select date and time of trip": "选择行程的日期和时间", "Selected Date": "选择的日期", "Select Time": "选择时间", "Selected Time": "选择的时间", // "OK": "确定", // "Cancel": "取消", "Selected Date and Time": "选择的日期和时间", "Lets check Car license ": "让我们检查汽车执照 ", "Car": "汽车", "Plate": "车牌", "N/A": "不适用", "Rides": "行程", "Age": "年龄", // "Education": "教育", // "Color": "颜色", // "Displacement": "排量", // "Fuel": "燃料", "Selected driver": "选择的司机", "Lets check License Back Face": "让我们检查执照背面", "Car License Card": "汽车执照卡", "No image selected yet": "尚未选择图像", "Made :": "制造:", "model :": "型号:", "VIN :": "VIN:", "year :": "年份:", "ُExpire Date": "到期日期", "Login Driver": "登录司机", "Password must br at least 6 character.": "密码必须至少6个字符。", "if you don\'t have account": "如果您没有账户", "Here recorded trips audio": "这里记录了行程音频", "Register as Driver": "注册为司机", // "Privacy Notice": "隐私声明", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "通过在下方选择“我同意”,我确认我已阅读并同意使用条款并承认", ". I am at least 18 years of age.": "。我至少18岁。", "Log Out Page": "登出页面", "Log Off": "登出", "Register Driver": "注册司机", "Verify Email For Driver": "为司机验证电子邮件", "Admin DashBoard": "管理员仪表板", "Your name": "您的姓名", "your ride is applied": "您的行程已申请", "Your password": "您的密码", "H and": "H 和", "LE": "LE", "JOD": "JOD", "m": "米", "We search nearst Driver to you": "我们为您寻找最近的司机", "please wait till driver accept your order": "请等待司机接受您的订单", "No accepted orders? Try raising your trip fee to attract riders.": "没有接受的订单?尝试提高您的行程费用以吸引司机。", "You should select one": "您应选择一个", "The driver accept your order for": "司机接受了您的订单", "Increase Fee": "增加费用", "No, thanks": "不,谢谢", "The driver on your way": "司机正在路上", "Total price from ": "总价格从 ", "Order Details Intaleq": "订单详情速度", // "Order Applied": "订单已申请", "accepted your order": "接受了您的订单", // "We regret to inform you that another driver has accepted this order.": "我们遗憾地通知您,其他司机已接受此订单", "Selected file:": "选择的文件:", "Your trip cost is": "您的行程费用为", "this will delete all files from your device": "这将删除您设备上的所有文件", " in your": "在您的", "Exclusive offers and discounts always with the Intaleq app": "独家优惠和折扣始终与Intaleq应用相伴", // "Please go to Car Driver": "请前往司机处", " wallet due to a previous trip.": "由于之前的行程,钱包。", "Submit Question": "提交问题", "Please enter your Question.": "请输入您的问题。", "Help Details": "帮助详情", "No trip yet found": "尚未找到行程", "No Response yet.": "尚未有回应。", " You Earn today is ": " 您今天赚取的是 ", " You Have in": " 您有在", "Total points is ": "总积分为 ", "Total Connection Duration:": "总连接时长:", " H and": " H 和", "Passenger name : ": "乘客姓名: ", "Cost Of Trip IS ": "行程费用为 ", "Arrival time": "到达时间", "arrival time to reach your point": "到达您地点的到达时间", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "对于速度和滑板车行程,价格是动态计算的。对于舒适行程,价格基于时间和距离。", "Hello this is Driver": "您好,这是司机", "Is the Passenger in your Car ?": "乘客在您的车里吗?", "Please wait for the passenger to enter the car before starting the trip.": "请等待乘客进入车内后再开始行程。", "No ,still Waiting.": "不,仍在等待。", "I arrive you": "我到达您", "I Arrive your site": "我到达您的位置", "You are not in near to passenger location": "您离乘客位置不远", "please go to picker location exactly": "请准确前往接载地点", "You Can Cancel Trip And get Cost of Trip From": "您可以取消行程并从以下获取行程费用", "Are you sure to cancel?": "您确定要取消吗?", // "Yes": "是", "Insert Emergincy Number": "插入紧急号码", "Best choice for comfort car and flexible route and stops point": "舒适汽车和灵活路线及停靠点的最佳选择", "Insert": "插入", "This is for scooter or a motorcycle.": "这是用于滑板车或摩托车。", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "此行程直接从您的起点到目的地,价格固定。司机必须遵循计划的路线", "You can decline a request without any cost": "您可以免费拒绝请求", "Perfect for adventure seekers who want to experience something new and exciting": "非常适合想要体验新鲜刺激的冒险者", "My current location is:": "我的当前位置是:", "and I have a trip on": "我有一个行程在", "App with Passenger": "与乘客的应用", "You will be pay the cost to driver or we will get it from you on next trip": "您将支付给司机费用,或者我们将在下次行程中从您那里收取", "Trip has Steps": "行程有步骤", "Distance from Passenger to destination is ": "乘客到目的地的距离为 ", "price is": "价格为", "This ride type does not allow changes to the destination or additional stops": "此行程类型不允许更改目的地或额外停靠点", "This price may be changed": "此价格可能会更改", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "没有SIM卡?没问题!通过我们的应用直接呼叫司机。我们使用先进技术确保您的隐私。", "This ride type allows changes, but the price may increase": "此行程类型允许更改,但价格可能会上涨", "Select one message": "选择一个消息", "I'm waiting for you": "我在等您", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "我们注意到速度超过100公里/小时。为了您的安全,请减速。如果您感到不安全,可以与联系人分享行程详情或使用红色SOS按钮呼叫警察。", "Warning: Intaleqing detected!": "警告:检测到超速!", "Please help! Contact me as soon as possible.": "请帮忙!尽快联系我。", "Share Trip Details": "分享行程详情", "Car Plate is ": "车牌号为 ", "VIP Order": "VIP订单", "the 300 points equal 300 L.E for you \nSo go and gain your money": "300点等于300 L.E\n所以去赚取您的钱", "the 300 points equal 300 L.E": "300点等于300 L.E", "The payment was not approved. Please try again.": "支付未获批准。请再试一次。", "Payment Failed": "支付失败", "Error": "错误", "This is a scheduled notification.": "这是计划的通知。", "An error occurred during the payment process.": "支付过程中发生错误。", "The payment was approved.": "支付已获批准。", "Payment Successful": "支付成功", "No ride found yet": "尚未找到行程", "Accept Order": "接受订单", // "reject your order.": "拒绝您的订单。", "Bottom Bar Example": "底部栏示例", "Driver phone": "司机电话", "Statistics": "统计", "Origin": "起点", "Destination": "目的地", "Driver Name": "司机姓名", "Driver Car Plate": "司机车牌", "Available for rides": "可用于行程", "Scan Id": "扫描ID", "Camera not initilaized yet": "相机尚未初始化", "Scan ID MklGoogle": "扫描ID MklGoogle", "Language": "语言", "Jordan": "约旦", "USA": "美国", "Egypt": "埃及", "Turkey": "土耳其", "Saudi Arabia": "沙特阿拉伯", "Qatar": "卡塔尔", "Bahrain": "巴林", "Kuwait": "科威特", "But you have a negative salary of": "但您的工资为负", "Promo Code": "促销代码", "Your trip distance is": "您的行程距离为", "Enter promo code": "输入促销代码", "You have promo!": "您有促销!", "Cost Duration": "费用时长", "Duration is": "时长为", "Leave": "离开", "Join": "加入", "Heading your way now. Please be ready.": "正在前往您处。请准备好。", "Approaching your area. Should be there in 3 minutes.": "正在接近您所在区域。应该会在3分钟内到达。", "There's heavy traffic here. Can you suggest an alternate pickup point?": "这里交通拥堵。您能建议一个替代的接载点吗?", "This ride is already taken by another driver.": "此行程已被其他司机接单。", "You Should be select reason.": "您应选择原因。", " \$": " \$", "Waiting for Driver ...": "等待司机...", "Latest Recent Trip": "最近的行程", "from your list": "从您的列表中", "Do you want to change Work location": "您想更改工作地点吗?", "Do you want to change Home location": "您想更改家庭地点吗?", "We Are Sorry That we dont have cars in your Location!": "很抱歉,您所在位置没有汽车!", "Choose from Map": "从地图中选择", "Pick your ride location on the map - Tap to confirm": "在地图上选择您的行程位置 - 点击确认", // "To Work": "去工作", // "Are you want to go this site": "您想去这个网站吗?", "Closest & Cheapest": "最近且最便宜", // "Work Saved": "工作地点已保存", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "Intaleq是一款安全、可靠且易于使用的打车应用。", "With Intaleq, you can get a ride to your destination in minutes.": "使用Intaleq,您可以在几分钟内到达目的地。", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "Intaleq致力于安全,我们所有的船长都经过仔细筛选和背景调查。", // "To Home": "回家", // "Home Saved": "家已保存", // "Destination selected": "目的地已选择:", // "Now select start pick": "现在选择起点:", "Pick from map": "从地图中选择", // "Click here point": "点击这里", "No Car in your site. Sorry!": "您的位置没有汽车。抱歉!", "Nearest Car for you about ": "您最近的汽车大约 ", // "N/A": "不适用", "From :": "从:", "Get Details of Trip": "获取行程详情", "If you want add stop click here": "如果您想添加停靠点,请点击这里", // "Driver": "司机", "Where you want go ": "您想去哪里 ", "My Card": "我的卡片", "Start Record": "开始记录", "Wallet": "钱包", "History of Trip": "行程历史", "Helping Center": "帮助中心", "Record saved": "记录已保存", "Trips recorded": "行程已记录", "Select Your Country": "选择您的国家", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "为确保您收到最准确的位置信息,请在下方选择您的国家。这将有助于根据您的国家定制应用体验和内容。", "Are you sure to delete recorded files": "您确定要删除记录的文件吗?", "Select recorded trip": "选择记录的行程", "Card Number": "卡号", "Hi, Where to ": "嗨,去哪里 ", "Pick your destination from Map": "从地图中选择您的目的地", "Add Stops": "添加停靠点", "Get Direction": "获取方向", "Add Location": "添加位置", "Switch Rider": "切换司机", "You will arrive to your destination after ": "您将在之后到达目的地", "You can cancel trip": "您可以取消行程", "The driver waitting you in picked location .": "司机在指定地点等您。", "10\$ and get 3% discount": "10\$并获得3%折扣", "20\$ and get 4% discount": "20\$并获得4%折扣", "40\$ and get 6% discount": "40\$并获得6%折扣", "100\$ and get 9% discount": "100\$并获得9%折扣", "Pay with Your": "使用您的", "Pay with Credit Card": "使用信用卡支付", "Payment History": "支付历史", "Show Promos to Charge": "显示促销以充值", "Point": "点", "How many hours would you like to wait?": "您想等待多少小时?", "Driver Wallet": "司机钱包", "Choose between those Type Cars": "在这些类型的汽车之间选择", "hour": "小时", "Select Waiting Hours": "选择等待小时", "Total Points is": "总积分为", "You will receive a code in SMS message": "您将在短信中收到代码", "Done": "完成", "Total Budget from trips is ": "行程总预算为 ", "Total Amount:": "总金额:", "Total Budget from trips by\nCredit card is ": "通过信用卡的行程总预算为 ", "This amount for all trip I get from Passengers": "我从乘客那里获得的所有行程的金额", "Pay from my budget": "从我的预算中支付", "This amount for all trip I get from Passengers and Collected For me in": "我从乘客那里获得的所有行程的金额并为我收集在", "You can buy points from your budget": "您可以从预算中购买积分", "insert amount": "插入金额", "You can buy Points to let you online\nby this list below": "您可以购买积分以让您在线\n通过以下列表", "Create Wallet to receive your money": "创建钱包以接收您的钱", "Enter your feedback here": "在此处输入您的反馈", "Please enter your feedback.": "请输入您的反馈。", "Feedback": "反馈", "Submit ": "提交 ", "Click here to Show it in Map": "点击此处在地图上显示", "Canceled": "已取消", "Type your Email": "输入您的电子邮件", "No I want": "不,我想", "Email is": "电子邮件是", "Phone Number is": "电话号码是", "Date of Birth is": "出生日期是", "Sex is ": "性别是 ", "Car Details": "汽车详情", "VIN is": "VIN是", "Color is ": "颜色是 ", "Make is ": "品牌是 ", "Model is": "型号是", "Year is": "年份是", "Expiration Date ": "到期日期 ", "Edit Your data": "编辑您的数据", "write vin for your car": "为您的汽车写VIN", "VIN": "VIN", "write Color for your car": "为您的汽车写颜色", "write Make for your car": "为您的汽车写品牌", // "Make": "品牌", "write Model for your car": "为您的汽车写型号", // "Model": "型号", "write Year for your car": "为您的汽车写年份", // "Expiration Date": "到期日期", "write Expiration Date for your car": "为您的汽车写到期日期", "Tariffs": "关税", "Minimum fare": "最低费用", "Maximum fare": "最高费用", "Flag-down fee": "招手费", "Including Tax": "含税", "BookingFee": "预订费", "Morning": "早上", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "从07:30到10:30(星期四、星期五、星期六、星期一)", "Evening": "晚上", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "从12:00到15:00(星期四、星期五、星期六、星期一)", "Night": "晚上", "You have in account": "您有在账户中", "Select Country": "选择国家", "Ride Today : ": "今天的行程: ", "After this period\nYou can\'t cancel!": "在此期限后\n您不能取消!", "from 23:59 till 05:30": "从23:59到05:30", "Rate Driver": "评分司机", "Total Cost is ": "总费用为 ", "Write note": "写备注", "Time to arrive": "到达时间", "Ride Summaries": "行程摘要", "Total Cost": "总费用", "Average of Hours of": "平均小时数", " is ON for this month": " 本月开启", "Days": "天", "Total Hours on month": "本月总小时数", "Counts of Hours on days": "每天的小时数", "OrderId": "订单ID", "created time": "创建时间", "Intaleq Over": "超速", "I will slow down": "我会减速", "Map Passenger": "地图乘客", "Be Slowly": "慢慢来", "If you want to make Google Map App run directly when you apply order": "如果您想在申请订单时直接运行Google地图应用", "You can change the language of the app": "您可以更改应用的语言", "Your Budget less than needed": "您的预算低于所需", "You can change the Country to get all features": "您可以更改国家以获取所有功能", "Change Country": "更改国家" }, "ar-gulf": { "Order": "طلب", "OrderVIP": "طلب VIP", "Cancel Trip": "إلغاء الرحلة", "Passenger Cancel Trip": "الراكب ألغى الرحلة", "VIP Order": "طلب VIP", "The driver accepted your trip": "السائق قبل رحلتك", "message From passenger": "رسالة من الراكب", "Cancel": "إلغاء", "Trip Cancelled. The cost of the trip will be added to your wallet.": "تم إلغاء الرحلة. سيتم إضافة تكلفة الرحلة إلى محفظتك.", "token change": "تغيير الرمز", "face detect": "كشف الوجه", "Face Detection Result": "نتيجة كشف الوجه", "similar": "مشابه", "not similar": "غير مشابه", "Hi ,I will go now": "مرحبا، أنا بروح الحين", "Passenger come to you": "الراكب جاي لك", "Call Income": "مكالمة واردة", "Call Income from Passenger": "مكالمة واردة من الراكب", "Criminal Document Required": "مطلوب وثيقة جنائية", "You should have upload it .": "يفترض إنك حملتها.", "Call End": "انتهاء المكالمة", "The order has been accepted by another driver.": "الطلب تم قبوله من سائق آخر.", "The order Accepted by another Driver": "الطلب تم قبوله من سائق آخر", "We regret to inform you that another driver has accepted this order.": "نتأسف لإبلاغك بأن سائق آخر قد قبل هذا الطلب.", "Driver Applied the Ride for You": "السائق قدم الطلب لك", "Applied": "تم التقديم", "Hi ,I Arrive your site": "مرحبا، وصلت موقعك", "Please go to Car Driver": "لو سمحت روح لسائق السيارة", "Ok I will go now.": "اوكي بروح الحين.", "Accepted Ride": "تم قبول الرحلة", "Driver Accepted the Ride for You": "السائق قبل الرحلة لك", "Promo": "عرض ترويجي", "Show latest promo": "عرض أحدث عرض ترويجي", "Trip Monitoring": "مراقبة الرحلة", "Driver Is Going To Passenger": "السائق في طريقه إليك", "Please stay on the picked point.": "لو سمحت خليك في نقطة الالتقاط المحددة.", "message From Driver": "رسالة من السائق", "Trip is Begin": "بدأت الرحلة", "Cancel Trip from driver": "إلغاء الرحلة من السائق", "We will look for a new driver.\nPlease wait.": "بندور على سائق جديد.\nلو سمحت انتظر.", "The driver canceled your ride.": "السائق ألغى رحلتك.", "Driver Finish Trip": "السائق أنهى الرحلة", "you will pay to Driver": "بتدفع للسائق", "Don’t forget your personal belongings.": "لا تنسى أغراضك الشخصية.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "لو سمحت تأكد إن معاك كل أغراضك الشخصية وإن أي مبلغ متبقي، إذا فيه، تم إضافته لمحفظتك قبل لا تمشي. شكراً لاستخدامك تطبيق Intaleq", "Finish Monitor": "إنهاء المراقبة", "Trip finished": "الرحلة انتهت", "Call Income from Driver": "مكالمة واردة من السائق", "Driver Cancelled Your Trip": "السائق ألغى رحلتك", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "بتدفع للسائق بتدفع تكلفة وقت السائق شوف محفظة Intaleq مالتك", "Order Applied": "تم تطبيق الطلب", //firebase above // "Where to": "وين تبي تروح؟", "Where are you going?": "وين بتروح؟", "Quick Actions": "إجراءات سريعة", "My Wallet": "محفظتي", "Order History": "سجل الطلبات", "Contact Us": "اتصل بنا", "Driver": "السائق", "Complaint": "شكوى", "Promos": "العروض", "Recent Places": "الأماكن الأخيرة", "From": "من", "WhatsApp Location Extractor": "مستخرج موقع واتساب", "Location Link": "رابط الموقع", "Paste location link here": "الصق رابط الموقع هنا", "Go to this location": "انتقل إلى هذا الموقع", "Paste WhatsApp location link": "الصق رابط موقع واتساب", "Select Order Type": "اختر نوع الطلب", "Choose who this order is for": "اختر الطلب هذا حق منو؟", "I want to order for myself": "أبي أطلب لنفسي", "I want to order for someone else": "أبي أطلب لشخص ثاني", // "Cancel": "إلغاء", "Order for someone else": "اطلب لشخص آخر", "Order for myself": "اطلب لنفسي", "Are you want to go this site": "تبغي تروح هالمكان؟", // "Yes": "أيوة", "No": "لا", "Are you sure to delete this location?": "متأكد إنك تبي تحذف هالموقع؟", "deleted": "تم الحذف", "To Work": "للشغل", "Work Saved": "تم حفظ مكان الشغل", "To Home": "للبيت", "Home Saved": "تم حفظ مكان البيت", "Destination selected": "تم اختيار الوجهة", "Now select start pick": "الحين اختار نقطة البداية", "OK": "تمام", "Confirm Pick-up Location": "تأكيد موقع الالتقاء", "Set Location on Map": "حدد الموقع على الخريطة", "Nearest Car: ~": "أقرب سيارة: ~", "Nearest Car": "أقرب سيارة", "No cars nearby": "ما فيه سيارات قريبة", "Favorite Places": "الأماكن المفضلة", "No favorite places yet!": "ما فيه أماكن مفضلة للحين!", "from your favorites": "من مفضلتك", "Back": "رجوع", "Sign in for a seamless experience": "سجل الدخول لتجربة أفضل", "Sign In with Google": "تسجيل الدخول باستخدام جوجل", "Sign in with Apple": "تسجيل الدخول باستخدام آبل", "Need assistance? Contact us": "محتاج مساعدة؟ كلمنا", "User not found": "المستخدم مو موجود", "Email": "البريد الإلكتروني", "Your email address": "عنوان بريدك الإلكتروني", "Enter a valid email": "أدخل بريد إلكتروني صحيح", "Password": "كلمة المرور", // "Your password": "كلمة مرورك", "Enter your password": "أدخل كلمة المرور", "Submit": "إرسال", "Terms of Use & Privacy Notice": "شروط الاستخدام وإشعار الخصوصية", "Terms of Use": "شروط الاستخدام", "Privacy Notice": "سياسة الخصوصية", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "بالنقر على \"أوافق\" أدناه، أؤكد أنني قرأت ووافقت على", "and acknowledge the": "وأقر بـ", ". I am at least 18 years old.": ". أنا عمري 18 سنة على الأقل.", "Continue": "متابعة", "Enable Location Access": "تفعيل الوصول للموقع", "We need your location to find nearby drivers for pickups and drop-offs.": "نحتاج موقعك عشان نلاقي سواقين قريبين للاستلام والتوصيل.", "Allow Location Access": "السماح بالوصول للموقع", "You should restart app to change language": "يفترض تقفل التطبيق وتفتحه مرة ثانية عشان اللغة تتغير", "Home Page": "الرئيسية", "To change Language the App": "لتغيير لغة التطبيق", "Learn more about our app and mission": "اعرف أكثر عن تطبيقنا ورسالتنا", "Promos For Today": "عروض اليوم", "Choose your ride": "اختار مشوارك", "Your Journey Begins Here": "رحلتك تبدأ هنا", "Bonus gift": "هدية إضافية", "Pay": "ادفع", "Get": "احصل على", "Send to Driver Again": "إرسال للسواق مرة ثانية", "Driver Name:": "اسم السائق:", "No trip data available": "ما فيه بيانات للرحلة متوفرة", "Car Plate:": "رقم اللوحة:", "remaining": "متبقي", "Order Cancelled": "تم إلغاء الطلب", "You canceled VIP trip": "ألغيت مشوار VIP", "Passenger cancelled order": "الراكب ألغى الطلب", "Your trip is scheduled": "رحلتك مجدولة", "Don't forget your ride!": "لا تنسى مشوارك!", "Trip updated successfully": "تم تحديث الرحلة بنجاح", "Car Make:": "ماركة السيارة:", "Car Model:": "موديل السيارة:", "Car Color:": "لون السيارة:", "Driver Phone:": "رقم تلفون السواق:", "Pre-booking": "حجز مسبق", "Waiting VIP": "انتظار VIP", "Driver List": "قائمة السائقين", "Confirm Trip": "تأكيد المشوار", "Select date and time of trip": "حدد تاريخ ووقت المشوار", "Date and Time Picker": "اختيار التاريخ والوقت", "Trip Status:": "حالة المشوار:", "pending": "قيد الانتظار", "accepted": "تم القبول", "rejected": "تم الرفض", "Apply": "تطبيق", "Enter your promo code": "أدخل رمز الترويج الخاص بك", "Apply Promo Code": "تطبيق رمز الترويج", "Scheduled Time:": "الوقت المحدد:", "No drivers available": "ما فيه سواقين متوفرين", "No drivers available at the moment. Please try again later.": "ما فيه سواقين متوفرين الحين. حاول مرة ثانية بعدين.", "you have a negative balance of": "عندك رصيد سلبي قدره", "Please try again in a few moments": "حاول مرة ثانية بعد لحظات قليلة", "Unknown Driver": "سائق غير معروف", "in your": "في محفظتك", "The driver accepted your order for": "السائق قبل طلبك مقابل", "wallet due to a previous trip.": "بسبب رحلة سابقة.", "rides": "مشاوير", "Add Work": "أضف مكان الشغل", "The reason is": "السبب هو", "User does not have a wallet #1652": "المستخدم ما عنده محفظة #1652", "Price of trip": "سعر المشوار", "From:": "من:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "بالنسبة لمشاوير Intaleq والتوصيل، السعر ينحسب بشكل تلقائي. أما مشاوير كمفورت، السعر يكون على حسب الوقت والمسافة", "Phone Wallet Saved Successfully": "تم حفظ محفظة الهاتف بنجاح", "Add wallet phone you use": "ضيف رقم محفظة هاتفك اللي تستخدمها", "Update Available": "تحديث متوفر", "Phone number must be exactly 11 digits long": "رقم التلفون لازم يكون 11 رقم بالضبط", "Insert Wallet phone number": "أدخل رقم محفظة هاتفك", "Phone number isn't an Egyptian phone number": "رقم التلفون هذا مو رقم مصري", "A new version of the app is available. Please update to the latest version.": "فيه نسخة جديدة من التطبيق متوفرة. يرجى التحديث لآخر نسخة.", "We use location to get accurate and nearest passengers for you": "نستخدم الموقع عشان نوصلك بأقرب ركاب وأدقهم ليك", "This ride is already applied by another driver.": "المشوار هذا اتقبل من سواق ثاني خلاص.", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "نستخدم موقعك بالتحديد عشان نلاقي أقرب سواق متوفر ونعطيك معلومات دقيقة عن مكان الاستلام والوصول. ممكن تتحكم في هذا من الإعدادات.", "Where are you, sir?": "وين مكانك يا طويل العمر؟", "I've been trying to reach you but your phone is off.": "أحاول أتصل فيك بس تلفونك مسكر.", "Please don't be late": "لو سمحت لا تتأخر", "Please don't be late, I'm waiting for you at the specified location.": "لو سمحت لا تتأخر، أنا أنتظرك في المكان اللي محدد.", "My location is correct. You can search for me using the navigation app": "موقعي صحيح. ممكن تدور علي باستخدام تطبيق الملاحة", "Hello, I'm at the agreed-upon location": "مرحبا، أنا في المكان المتفق عليه", "How much longer will you be?": "شقد باقي لك وتوصل؟", "Phone number is verified before": "تم التحقق من رقم الهاتف قبل", "Change Ride": "تغيير المشوار", "You can change the destination by long-pressing any point on the map": "ممكن تغير الوجهة بالضغط مطولاً على أي نقطة في الخريطة", "Pick from map destination": "اختار وجهتك من الخريطة", "Pick or Tap to confirm": "اختار أو اضغط للتأكيد", "Accepted your order": "تم قبول طلبك", "Order Accepted": "تم قبول الطلب", "with type": "مع نوع", "accepted your order at price": "تم قبول طلبك بسعر", "you canceled order": "أنت ألغيت الطلب", "If you want order to another person": "إذا تبي تطلب لشخص ثاني", // "Ok I will go now.": "تمام، أنا ماشي الحين.", // "Hi, I will go now": "مرحبا، أنا ماشي الحين", "upgrade price": "رفع السعر", "Please enter a correct phone": "يرجى إدخال رقم هاتف صحيح", "airport": "مطار", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "أفضل اختيار لسيارة مريحة بمسار مرن ونقاط توقف. هالمطار يقدم دخول فيزا بهالسعر.", "You can upgrade price to may driver accept your order": "ممكن تزيد السعر عشان السواق يقبل طلبك", "Change Route": "تغيير المسار", "No Captain Accepted Your Order": "ما فيه كابتن قبل طلبك", "We are looking for a captain but the price may increase to let a captain accept": "بندور على كابتن بس ممكن السعر يزيد عشان كابتن يقبل", "No, I want to cancel this trip": "لا، أبي ألغي المشوار هذا", // "Trip Cancelled. The cost of the trip will be added to your wallet.": // "تم إلغاء الرحلة. سيتم إضافة تكلفة الرحلة لمحفظتك.", "Attention": "تنبيه", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "تم إلغاء الرحلة. سيتم خصم تكلفة الرحلة من محفظتك.", "You will be charged for the cost of the driver coming to your location.": "راح تتحاسب على تكلفة مجيء السواق لموقعك.", "reject your order.": "رفض طلبك.", "Order Under Review": "الطلب قيد المراجعة", "is reviewing your order. They may need more information or a higher price.": "يراجع طلبك. ممكن يحتاجون معلومات أكثر أو سعر أعلى.", // "The driver canceled your ride.": "السواق ألغى مشوارك.", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "ما لقينا أي سواقين للحين. فكر تزيد سعر المشوار عشان عرضك يكون جذاب أكثر للسواقين.", "Increase Your Trip Fee (Optional)": "زيد سعر مشوارك (اختياري)", "Vibration": "اهتزاز", "Resend code": "إعادة إرسال الرمز", // "token change": "تغيير الرمز", "change device": "تغيير الجهاز", "Device Change Detected": "تم اكتشاف تغيير الجهاز", "You can only use one device at a time. This device will now be set as your active device.": "ممكن تستخدم جهاز واحد بس في المرة الواحدة. الجهاز هذا راح يتعين الحين كجهازك النشط.", "Click here point": "اضغط هنا", "Are you want to change": "تبي تغير؟", "by": "بواسطة", "Enter your complaint here": "اكتب شكوتك هنا", "Please enter your complaint.": "يرجى إدخال شكواك.", "Complaint data saved successfully": "تم حفظ بيانات الشكوى بنجاح", "Trip Monitor": "مراقبة الرحلة", "Insert SOS Phone": "أدخل رقم طوارئ", "Add SOS Phone": "أضف رقم طوارئ", // "Trip Monitoring": "مراقبة الرحلة", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "عزيزي،\n\n🚀 توني بديت رحلة مثيرة وأبي أشارك تفاصيل رحلتي وموقعي الحالي معك في الوقت الفعلي! يرجى تنزيل تطبيق Intaleq. راح يسمح لك تشوف تفاصيل رحلتي وموقعي الأخير.\n\n👈 رابط التحميل:\nAndroid [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\niOS [https://getapp.cc/app/6458734951]\n\nأتطلع إني أبقيك قريب خلال مغامرتي!\n\nIntaleq،", "Send Intaleq app to him": "ارسله تطبيق Intaleq", "No passenger found for the given phone number": "ما فيه راكب بالرقم هذا", "No user found for the given phone number": "ما فيه مستخدم بالرقم هذا", "This price is": "السعر هذا", "Work": "شغل", "Add Home": "أضف بيت", "Notifications": "الإشعارات", "💳 Pay with Credit Card": "ادفع بالبطاقة الائتمانية 💳", "⚠️ You need to choose an amount!": "⚠️ لازم تختار مبلغ!", "💰 Pay with Wallet": "ادفع من المحفظة", "You must restart the app to change the language.": "لازم تقفل التطبيق وتفتحه مرة ثانية عشان اللغة تتغير.", "joined": "انضم", "Driver joined the channel": "السائق انضم للقناة", "Driver left the channel": "السائق غادر القناة", "Call Page": "صفحة الاتصال", // "Call End": "انتهاء المكالمة", "Call Left": "مكالمات متبقية", "To use Wallet charge it": "عشان تستخدم المحفظة اشحنها", "We are searching for the nearest driver to you": "بندور لك على أقرب سواق ليك", "Best choice for cities": "أفضل اختيار للمدن", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "رايح جاي: خدمة للذهاب والعودة لـ Intaleq مريح بين المدن، سهلة وموثوقة.", "Rayeh Gai": "رايح جاي", "This trip is for women only": "المشوار هذا للسيدات فقط", "Total budgets on month": "إجمالي الميزانية الشهرية", "You have call from driver": "عندك مكالمة من السواق", "Comfort": "كمفورت", "Intaleq": "Intaleq", "Driver already has 2 trips within the specified period.": "السائق عنده بالفعل مشوارين خلال الفترة المحددة.", "The invitation was sent successfully": "تم إرسال الدعوة بنجاح", "Lady": "ليدي", "You should select your country": "يجب عليك اختيار بلدك", "Scooter": "سكوتر", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "مشوار بحجز مسبق، تقدر تختار فيه أفضل الكباتن والسيارات.", "Mishwar Vip": "مشوار VIP", "The driver waiting you in picked location .": "السائق ينتظرك في مكان الالتقاء اللي اخترته.", "About Us": "عن التطبيق", "You can change the vibration feedback for all buttons": "ممكن تغير اهتزاز الأزرار", "Most Secure Methods": "أكثر طرق الأمان", "In-App VOIP Calls": "مكالمات صوتية داخل التطبيق", "Recorded Trips for Safety": "تسجيل الرحلات للأمان", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nكما نولي أهمية كبيرة للأسعار المناسبة، ونقدم أسعارًا تنافسية لجعل مشاويرك في متناول الجميع.", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "Intaleq هو تطبيق لمشاركة المشاوير مصمم مع وضع سلامتك وتكلفة المشوار في الاعتبار. نوصلك بسواقين موثوقين في منطقتك، ونضمن لك تجربة Intaleq مريحة وبدون قلق.\n\nإليك بعض المميزات الأساسية اللي تميزنا:", "Sign In by Apple": "تسجيل الدخول باستخدام Apple", "Sign In by Google": "تسجيل الدخول باستخدام Google", "How do I request a ride?": "شلون أطلب مشوار؟", "Step-by-step instructions on how to request a ride through the Intaleq app.": "تعليمات خطوة بخطوة عن كيفية طلب مشوار من خلال تطبيق Intaleq.", "What types of vehicles are available?": "إيش أنواع السيارات المتاحة؟", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "Intaleq يقدم لك اختيارات متنوعة للسيارات تناسب احتياجاتك، منها اقتصادي ومريح وفاخر. اختار اللي يناسب ميزانيتك وعدد الركاب.", "How can I pay for my ride?": "شلون أدفع ثمن المشوار؟", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "Intaleq يقدم لك طرق دفع متعددة لراحتك. اختار بين الدفع كاش أو ببطاقة الائتمان/الخصم وأنت تأكد المشوار.", "Can I cancel my ride?": "ممكن ألغي المشوار؟", "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Intaleq cancellation policy for details.": "نعم، ممكن تلغي رحلتك في ظل ظروف معينة (مثل قبل تعيين السائق). اطلع على سياسة الإلغاء في Intaleq للحصول على التفاصيل.", "Driver Registration & Requirements": "تسجيل السائقين والمتطلبات", "How can I register as a driver?": "كيف ممكن أسجل كسائق؟", "What are the requirements to become a driver?": "ما هي المتطلبات عشان أصير سائق؟", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "تفضل بزيارة موقعنا الإلكتروني أو اتصل بدعم Intaleq للحصول على معلومات حول تسجيل السائقين والمتطلبات.", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "Intaleq يوفر ميزة الدردشة داخل التطبيق عشان يسمح لك تتواصل مع سائقك أو راكبك أثناء الرحلة.", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "Intaleq يعطي أهمية كبيرة لسلامتك. نقدم ميزات مثل التحقق من هوية السائق، وتتبع الرحلات داخل التطبيق، وخيارات الاتصال في حالات الطوارئ.", "Frequently Questions": "الأسئلة الشائعة", "User does not exist.": "المستخدم مو موجود.", "We need your phone number to contact you and to help you.": "نحتاج رقم تلفونك عشان نتصل فيك ونساعدك", "You will recieve code in sms message": "راح تستلم رمز في رسالة SMS", "Please enter": "يرجى إدخال", "We need your phone number to contact you and to help you receive orders.": "نحتاج رقم تلفونك عشان نتصل فيك ونساعدك تستقبل الطلبات.", "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": "الاسم الكامل في سجلك الجنائي ما يطابق الاسم اللي في رخصة القيادة الخاصة بك. يرجى التحقق وتقديم الوثائق الصحيحة.", "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": "الرقم الوطني في رخصة القيادة الخاصة بك ما يطابق الرقم اللي في وثيقة الهوية الخاصة بك. يرجى التحقق وتقديم الوثائق الصحيحة.", "Capture an Image of Your Criminal Record": "صور سجلك الجنائي", "IssueDate": "تاريخ الإصدار", "Capture an Image of Your car license front ": "صور الواجهة الأمامية لرخصة سيارتك", "Capture an Image of Your ID Document front": "صور الواجهة الأمامية لوثيقة هويتك", "NationalID": "الرقم القومي", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "ممكن تشارك تطبيق Intaleq مع أصدقائك وتربح مكافآت من الرحلات اللي يسوونها باستخدام كودك.", "FullName": "الاسم الكامل", "No invitation found yet!": "ما فيه دعوات للحين!", "InspectionResult": "نتيجة الفحص", "Criminal Record": "السجل الجنائي", "Share App": "شارك التطبيق", "The email or phone number is already registered.": "البريد الإلكتروني أو رقم التلفون مسجل بالفعل.", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "عشان تصير سائق مشاركة ركوب في تطبيق Intaleq، لازم تحمل رخصة القيادة الخاصة بك، وثيقة الهوية، ووثيقة تسجيل السيارة. نظام الذكاء الاصطناعي الخاص بنا راح يراجع ويتحقق من صحة الوثائق في غضون 2-3 دقائق فقط. إذا الوثائق الخاصة بك اتقبلت، ممكن تبدأ تشتغل كسائق في تطبيق Intaleq. يرجى الملاحظة، تقديم وثائق مزورة يعتبر جريمة خطيرة وممكن يترتب عليها إنهاء الحساب فورا وعواقب قانونية.", "Documents check": "فحص الوثائق", "Driver's License": "رخصة القيادة", "for your first registration!": "لتسجيلك الأول!", "Get it Now!": "احصل عليه الحين!", "before": "قبل", "Code not approved": "الرمز مو مقبول", "3000 LE": "3000 جنيه مصري", "Do you have an invitation code from another driver?": "عندك كود دعوة من سائق ثاني؟", "Paste the code here": "الصق الكود هنا", "No, I don't have a code": "لا، ما عندي كود", "Code approved": "تمت الموافقة على الكود", "Install our app:": "ثبت تطبيقنا:", "Invite another driver and both get a gift after he completes 100 trips!": "ادع صديق عشان يصير سائق واثنينكم تحصلون على هدية بعد ما يكمل 100 مشوار!", "Invite": "دعوة", "Are you sure?": "متأكد؟", "This will delete all recorded files from your device.": "هذا راح يحذف كل الملفات المسجلة من جهازك.", "Select a file": "اختار ملف", "Select a File": "اختار ملف", "Delete": "حذف", "attach audio of complain": "أرفق صوت الشكوى", "Phone Number Check": "فحص رقم الهاتف", "Drivers received orders": "السائقون استقبلوا الطلبات", "No audio files recorded.": "ما فيه ملفات صوتية مسجلة.", "This is for delivery or a motorcycle.": "هذا للتوصيل أو للدراجة النارية.", // "We will look for a new driver.\nPlease wait.": // "سوف نبحث عن سائق جديد.\nيرجى الانتظار", "Intaleq Reminder": "تذكير Intaleq", "It's time to check the Intaleq app!": "حان وقت استخدام تطبيق Intaleq", "you must insert token code": "لازم تدخل رمز التحقق.", "Something went wrong. Please try again.": "حدث خطأ ما. يرجى المحاولة مرة ثانية.", "Trip Details": "تفاصيل الرحلة", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "السياق ما يوفر تفاصيل الشكوى، عشان كذا ما أقدر أقدم حل لهالمشكلة. يرجى تقديم المعلومات اللازمة، وراح أكون سعيد أساعدك", "Submit Your Complaint": "أرسل شكواك", "Date": "التاريخ", "Price": "السعر", "Status": "الحالة", "Choose from contact": "اختار من جهات الاتصال", "attach correct audio": "أرفق صوت الشكوى الصحيح", "be sure": "تأكد", "Audio uploaded successfully.": "تم رفع الصوت بنجاح", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "مثالي للركاب اللي يبحثون عن أحدث موديلات السيارات مع حرية اختيار أي طريق يبغونه", "Share this code with your friends and earn rewards when they use it!": "شارك هالكود مع أصدقائك واحصل على مكافآت لما يستخدمونه!", "Enter phone": "أدخل رقم الهاتف", "You deserve the gift": "أنت تستحق الهدية", "complete, you can claim your gift": " ممكن تطالب بهديتك", "When": "عندما يكمل", "Enter driver's phone": "أدخل رقم هاتف السائق", "Send Invite": "أرسل الدعوة", "Show Invitations": "عرض الدعوات", "License Type": "نوع الرخصة", "National Number": "الرقم الوطني", "Name (Arabic)": "الاسم بالعربي", "Name (English)": "الاسم بالإنجليزية", "Address": "العنوان", "Issue Date": "تاريخ الإصدار", "Expiry Date": "تاريخ الانتهاء", "License Categories": "فئات الرخصة", "driver_license": "رخصة القيادة", "Capture an Image of Your Driver License": "صور رخصة قيادتك", "ID Documents Back": "الوجه الخلفي لوثائق الهوية", "National ID": "البطاقة الوطنية", "Occupation": "المهنة", "Gender": "الجنس", "Religion": "الديانة", "Marital Status": "الحالة الاجتماعية", "Full Name (Marital)": "الاسم الكامل (حسب الحالة الاجتماعية)", "Expiration Date": "تاريخ الانتهاء", "Capture an Image of Your ID Document Back": "صور الوجه الخلفي لوثيقة الهوية الخاصة بك", "ID Documents Front": "الوجه الأمامي لوثائق الهوية", "First Name": "الاسم الأول", "CardID": "رقم البطاقة", "Vehicle Details Front": "تفاصيل المركبة ‏الوجه الأمامية", "Plate Number": "رقم اللوحة", "Owner Name": "اسم المالك", "Vehicle Details Back": "تفاصيل المركبة ‏الوجه الخلفي", "Make": "المصنع", "Model": "الطراز", "Year": "السنة", "Chassis": "الشاسيه", "Color": "اللون", "Displacement": "السعة", "Fuel": "الوقود", "Tax Expiry Date": "تاريخ انتهاء الضريبة", "Inspection Date": "تاريخ الفحص", "Capture an Image of Your car license back": "صور الوجه الخلفي لرخصة سيارتك", "Capture an Image of Your Driver’s License": "صور رخصة قيادتك", "Sign in with Google for easier email and name entry": "سجل دخولك باستخدام جوجل لتسجيل بريدك الإلكتروني واسمك بسهولة", "You will choose allow all the time to be ready receive orders": "راح تختار السماح دايما عشان تكون جاهز لاستقبال الطلبات", "Welcome to Intaleq!": "مرحبا بكم في Intaleq!", "Get to your destination quickly and easily.": "وصول إلى وجهتك بسرعة وسهولة.", "Enjoy a safe and comfortable ride.": "استمتع برحلة آمنة ومريحة.", "Choose Language": "اختر اللغة", "Login": "تسجيل الدخول", "Pay with Wallet": "ادفع باستخدام المحفظة", "Invalid MPIN": "رمز PIN غير صحيح", "Invalid OTP": "كود التحقق خاطئ", // "Driver Accepted the Ride for You": "السائق قبل الرحلة لك", "Enter your email address": "أدخل عنوان بريدك الإلكتروني", "Please enter Your Email.": "يرجى إدخال بريدك الإلكتروني.", "Enter your phone number": "أدخل رقم هاتفك", "Please enter your phone number.": "يرجى إدخال رقم هاتفك.", "Please enter Your Password.": "يرجى إدخال كلمة المرور.", "if you dont have account": "إذا ما عندك حساب", "Register": "تسجيل", "Accept Ride's Terms & Review Privacy Notice": "قبول شروط الاستخدام ومراجعة إشعار الخصوصية", "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "من خلال اختيار 'أوافق' أدناه، قمت بمراجعة وقبول شروط الاستخدام وأقر بإشعار الخصوصية. أنا عمري 18 سنة على الأقل.", "I Agree": "أوافق", // "Finish Monitor": " إنهاء مراقبة الرحلة ", "First name": "الاسم الأول", "Enter your first name": "أدخل اسمك الأول", "Please enter your first name.": "يرجى إدخال اسمك الأول.", "Last name": "اسم العائلة", "Enter your last name": "أدخل اسمك الأخير", "Please enter your last name.": "يرجى إدخال اسمك الأخير.", "City": "المدينة", "Please enter your City.": "يرجى إدخال اسم مدينتك.", "Male": "ذكر", "Female": "أنثى", "Verify Email": "تحقق من البريد الإلكتروني", "We sent 5 digit to your Email provided": "لقد أرسلنا رمزًا مؤلفًا من 5 أرقام إلى بريدك الإلكتروني المدخل", "5 digit": "5 أرقام", "Send Verification Code": "إرسال رمز التحقق", "Your Ride Duration is ": "مُدَّة رِحْلَتِكَ ", "You will be thier in": "راح تكون هناك في", "You trip distance is": "مَسَافَة الرِّحْلَة", "Fee is": "الرُّسُوم", "From : ": "مِنْ: ", "To : ": "إِلَى: ", "Add Promo": "إضَافَة بَرُومُو", "Confirm Selection": "تَأْكِيد الاخْتِيَار", "distance is": "المَسَافَة", "Intaleq LLC": "شركة Intaleq", "Egypt's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "أول خدمة مشاركة ركوب في مصر، تم تطويرها بفخر من قبل مالكين عرب ومحليين. نركز على أن نكون قريبين منك - سواء كنت راكبًا قيمًا أو قائدًا مخلصًا.", "Why Choose Intaleq?": "ليش تختار Intaleq؟", "Closest to You": "الأقرب إليك", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "نربطك بأقرب السائقين لضمان وصول سريع ورحلات أسرع.", "Uncompromising Security": "أعلى مستويات الأمان", "Lady Captains Available": "قائدات سيارات متاحات", "Recorded Trips (Voice & AI Analysis)": "الرحلات المسجلة (تحليل صوتي بالذكاء الاصطناعي)", "Fastest Complaint Response": "أسرع استجابة للشكاوى", "Our dedicated customer service team ensures swift resolution of any issues.": "فريق خدمة العملاء لدينا يضمن حل أي مشكلة بسرعة.", "Affordable for Everyone": "في متناول الجميع", "Frequently Asked Questions": "الأسئلة الشائعة", "Getting Started": "البدء", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "افتح تطبيق Intaleq، وأدخل وجهتك، واضغط على \"طلب رحلة\". راح يقوم التطبيق بتوصيلك بأقرب سائق.", "Vehicle Options": "خيارات المركبات", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "Intaleq يوفر مجموعة متنوعة من الخيارات بما في ذلك الاقتصادية، المريحة، والفاخرة لتلبية احتياجاتك وميزانيتك.", "Payments": "المدفوعات", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "ممكن تدفع ثمن مشوارك كاش أو ببطاقة الائتمان/الخصم. تقدر تختار طريقة الدفع اللي تفضلها قبل ما تأكد مشوارك.", "Ride Management": "إدارة الرحلات", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "أيوة، ممكن تلغي مشوارك، بس يرجى ملاحظة إن فيه رسوم إلغاء ممكن تتطبق على حسب الوقت اللي تلغي فيه قبلها بقد إيش.", "For Drivers": "للسواقين", // "Driver Registration & Requirements": "تسجيل ومتطلبات السواقين", "Driver Registration": "تسجيل السواق", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "عشان تسجل كسواق أو تعرف المتطلبات، يرجى زيارة موقعنا الإلكتروني أو الاتصال بدعم Intaleq مباشرةً.", "Visit Website/Contact Support": "زيارة الموقع/الاتصال بالدعم", "Close": "إغلاق", "We are searching for the nearest driver": "بندور على أقرب سواق", "Communication": "التواصل", "How do I communicate with the other party (passenger/driver)?": "شلون أتواصل مع الطرف الثاني (الراكب/السواق)؟", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "ممكن تتواصل مع السواق أو الراكب من خلال خاصية الشات داخل التطبيق أول ما المشوار يتأكد.", "Safety & Security": "الأمان والحماية", "What safety measures does Intaleq offer?": "إيش إجراءات الأمان اللي يقدمها Intaleq؟", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "Intaleq يقدم مميزات أمان متنوعة زي التحقق من السواق، تتبع الرحلة داخل التطبيق، خيارات الاتصال في حالات الطوارئ، وإمكانية مشاركة حالة رحلتك مع جهات اتصال موثوقة.", "Enjoy competitive prices across all trip options, making travel accessible.": "استمتع بأسعار تنافسية على كل خيارات الرحلات، وهذا يخلي الIntaleq سهل الوصول ليه.", "Variety of Trip Choices": "خيارات رحلات متنوعة", "Choose the trip option that perfectly suits your needs and preferences.": "اختار خيار الرحلة اللي يناسب احتياجاتك وتفضيلاتك بالضبط.", "Your Choice, Our Priority": "اختيارك هو أولويتنا", "Because we are near, you have the flexibility to choose the ride that works best for you.": "عشان إحنا قراب، عندك المرونة تختار المشوار اللي يناسبك.", "duration is": "المدة هي", "Setting": "الإعدادات", "Find answers to common questions": "اعثر على إجابات للأسئلة الشائعة", "I don't need a ride anymore": "أنا مو محتاج مشوار ثاني", "I was just trying the application": "كنت بجرب التطبيق بس", "No driver accepted my request": "ما فيه سواق قبل الطلب بتاعي", "I added the wrong pick-up/drop-off location": "أنا ضفت مكان استلام/توصيل غلط", "I don't have a reason": "ما لي سبب", "Other": "أخرى", "Can we know why you want to cancel Ride ?": "ممكن نعرف ليش تبي تلغي المشوار؟", "Cancel Ride": "إلغاء المشوار", "Add Payment Method": "إضافة طريقة الدفع", "Your Wallet balance is ": "رصيد محفظتك هو ", "Ride Wallet": "محفظة الرحلة", "Payment Method": "طريقة الدفع", "Type here Place": "اكتب هنا المكان", "Are You sure to ride to": "أنت متأكد إنك تبي تروح", "Confirm": "تأكيد", // "Back": "رجوع", "You are Delete": "أنت على وشك الحذف", "Deleted": "تم الحذف", "You Dont Have Any places yet !": "للحين ما عندك أي أماكن!", // "Favorite Places": "الأماكن المفضلة", "From : Current Location": "من: الموقع الحالي", // "Where to": "إلى أين", "Profile": "الملف الشخصي", "Home": "الصفحة الرئيسية", "My Cared": "بطاقاتي", "Add Card": "إضافة بطاقة", "Add Credit Card": "إضافة بطاقة ائتمان", "Please enter the cardholder name": "يرجى إدخال اسم حامل البطاقة", "Please enter the expiry date": "يرجى إدخال تاريخ انتهاء الصلاحية", "Please enter the CVV code": "يرجى إدخال رمز CVV", "Go To Favorite Places": "الذهاب إلى الأماكن المفضلة", "Go to this Target": "الذهاب إلى هذا الهدف", "My Profile": "ملفي الشخصي", "Sign Out": "تسجيل الخروج", "Are you want to go to this site": "هل ترغب في الذهاب إلى هذا الموقع", "MyLocation": "موقعي", "my location": "موقعي", "Target": "هدف", "Update": "تحديث", "You Should choose rate figure": "يجب عليك اختيار تقييم", "Login Captin": "تسجيل دخول الكابتن", "Register Captin": "تسجيل كابتن جديد", "Send Verfication Code": "إرسال رمز التحقق", "KM": "كم", "End Ride": "إنهاء الرحلة", "Minute": "دقيقة", "Go to passenger Location now": "اذهب إلى موقع الراكب الآن", "Duration of the Ride is ": "مدة الرحلة هي ", "Distance of the Ride is ": "المسافة للرحلة هي", "Name of the Passenger is ": "اسم الراكب هو", "Hello this is Captain": "مرحباً، أنا الكابتن", "Start the Ride": "بدء الرحلة", "Please Wait If passenger want To Cancel!": "الرجاء الانتظار إذا أراد الراكب الإلغاء!", "Total Duration:": "المدة الإجمالية:", "Active Duration:": "المدة الفعلية:", "Waiting for Captin ...": "في انتظار الكابتن...", "Age is ": "العمر هو", "Rating is ": "التقييم هو", " to arrive you.": "للوصول إليك.", "Tariff": "تعريفة", "Settings": "الإعدادات", "Feed Back": "اقتراحات", "Please enter a valid 16-digit card number": "يرجى إدخال رقم بطاقة صالح مكون من 16 رقم", "Add Phone": "إضافة هاتف", "Please enter a phone number": "يرجى إدخال رقم هاتف", "You dont Add Emergency Phone Yet!": "للحين ما ضفت رقم هاتف طوارئ!", "You will arrive to your destination after ": "راح توصل وجهتك بعد", "You can cancel Ride now": "ممكن تلغي المشوار الحين", "You Can cancel Ride After Captain did not come in the time": "ممكن تلغي المشوار بعد ما الكابتن ما يوصل في الوقت المحدد", "If you in Car Now. Press Start The Ride": "إذا أنت في السيارة الحين. اضغط على بدء الرحلة", "You Dont Have Any amount in": "ما عندك أي مبلغ في", "Wallet!": "المحفظة!", "You Have": "لديك", "Save Credit Card": "حفظ بطاقة الائتمان", "Show Promos": "إظهار العروض الترويجية", "10 and get 4% discount": "10 واحصل على خصم 4%", "20 and get 6% discount": "20 واحصل على خصم 6%", "40 and get 8% discount": "40 واحصل على خصم 8%", "100 and get 11% discount": "100 واحصل على خصم 11%", "Pay with Your PayPal": "ادفع باستخدام PayPal", "You will choose one of above !": "راح تختار واحد من اللي فوق!", "Delete My Account": "حذف حسابي", "Edit Profile": "تعديل الملف الشخصي", "Name": "الاسم", "Update Gender": "تحديث الجنس", "Education": "التعليم", "Update Education": "تحديث التعليم", "Employment Type": "نوع التوظيف", "SOS Phone": "هاتف الطوارئ", "High School Diploma": "شهادة الثانوية العامة", "Associate Degree": "درجة الدبلوم", "Bachelor's Degree": "بكالوريوس", "Master's Degree": "ماجستير", "Doctoral Degree": "دكتوراه", "Copy this Promo to use it in your Ride!": "انسخ العرض هذا عشان تستخدمه في مشوارك!", "To change some Settings": "لتغيير بعض الإعدادات", "Order Request Page": "صفحة طلب الطلب", "Rouats of Trip": "طرق الرحلة", "Passenger Name is ": "اسم الراكب هو ", "Total From Passenger is ": "المبلغ الإجمالي من الراكب هو ", "Duration To Passenger is ": "المدة للوصول للراكب هي ", "Distance To Passenger is ": "المسافة للوصول للراكب هي ", "Total For You is ": "المبلغ الإجمالي ليك هو ", "Distance is ": "المسافة هي ", " KM": " كيلومتر", "Duration of Trip is ": "مدة الرحلة هي ", " Minutes": " دقائق", "Apply Order": "قبول الطلب", "Refuse Order": "رفض الطلب", "Rate Captain": "تقييم الكابتن", "Enter your Note": "أدخل ملاحظتك", "Type something...": "اكتب شي...", "Submit rating": "إرسال التقييم", "Rate Passenger": "تقييم الراكب", "Ride Summary": "ملخص الرحلة", "welcome_message": "مرحباً بك في Intaleq!", "app_description": "Intaleq هو تطبيق موثوق وآمن وسهل الوصول إليه لمشاركة الركوب.", "get_to_destination": "اذهب إلى وجهتك بسرعة وسهولة.", "get_a_ride": "مع Intaleq، تقدر تحصل على رحلة لوجهتك في دقايق.", "safe_and_comfortable": "استمتع برحلة آمنة ومريحة.", "committed_to_safety": "Intaleq ملتزمة بالسلامة، وكل الكباتن عندنا يتم فحصهم زين ويتعمل لهم فحص خلفية.", // "Driver Applied the Ride for You": "السواق طلب المشوار ليك", // "Show latest promo": "أظهر آخر عرض ترويجي", // "Cancel Trip": "إلغاء الرحلة", // "Passenger Cancel Trip": "الراكب ألغى الرحلة", // "Accepted Ride": "تم قبول الرحلة", "your ride is Accepted": "تم قبول رحلتك", // "Trip is Begin": "بدأت الرحلة", "Driver is waiting at pickup.": "السائق ينتظرك عند نقطة الاستلام.", "Driver is on the way": "السائق في الطريق", "Contact Options": "خيارات الاتصال", "Send a custom message": "أرسل رسالة مخصصة", "Type your message": "اكتب رسالتك", // "Hi ,I will go now": "مرحبا، أنا بتحرك الحين", // "Passenger come to you": "الراكب جاي لك", // "Hi ,I Arrive your site": "مرحبا، وصلت مكانك", // "Driver Finish Trip": "السواق أنهى الرحلة", // "you will pay to Driver": "بتدفع للسواق", // "Driver Cancel Your Trip": "السواق ألغى رحلتك", // "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": // "بتدفع للسواق تكلفة وقته، شوف محفظتك في Intaleq", // "I will go now": "أنا بتحرك الحين", "You Have Tips": "عندك بقشيش", " tips\nTotal is": " بقشيش\nالمجموع هو", // "No,I want": "لا، أبي", "Your fee is ": "الأجرة بتاعتك هي ", // "Do you want to pay Tips for this Driver": // "هل تريد دفع بقشيش للسواق هذا؟", "Tip is ": " مبلغ البقشيش هو", "Are you want to wait drivers to accept your order": "تبي تنتظر لحد ما السواقين يقبلون طلبك؟", "This price is fixed even if the route changes for the driver.": "السعر هذا ثابت حتى لو المسار تغير للسواق.", "The price may increase if the route changes.": "احتمالية زيادة السعر عند تغيير المسار", "The captain is responsible for the route.": "الكابتن مسؤول عن المسار", "We are search for nearst driver": "بندور على أقرب سواق", "Your order is being prepared": "جاري تجهيز الطلب بتاعك", "The drivers are reviewing your request": "السواقين يدرسون طلبك", "Your order sent to drivers": "تم إرسال طلبك للسواقين", "You can call or record audio of this trip": "ممكن تتصل أو تسجل صوت للرحلة هذه", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "بدأت الرحلة! براحتك تتصل بأرقام الطوارئ، تشارك رحلتك، أو تفعل التسجيل الصوتي للرحلة", // "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": // "الرجاء التأكد من جميع أغراضك الشخصية وإضافة باقي الأجرة في محفظتك قبل النزول. شكراً لاختيارك تطبيق Intaleq", // "Don’t forget your personal belongings.": "لا تنسى متعلقاتك الشخصية.", "Camera Access Denied.": "تم رفض الوصول للكاميرا.", "Open Settings": "افتح الإعدادات", "GPS Required Allow !.": "تفعيل GPS مطلوب!", "Your Account is Deleted": "تم حذف حسابك", "Are you sure to delete your account?": "أنت متأكد إنك تبي تحذف حسابك؟", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "بياناتك راح تتمسح بعد أسبوعين\nوما راح تقدر ترجع تستخدم التطبيق ثاني بعد شهر", "Enter Your First Name": "أدخل اسمك الأول", "Are you Sure to LogOut?": "أنت متأكد إنك تبي تسجل الخروج؟", "Email Wrong": "البريد الإلكتروني غلط", "Email you inserted is Wrong.": "البريد الإلكتروني اللي أدخلته غلط.", "You have finished all times ": "لقد استنفدت كل المحاولات", "if you want help you can email us here": "إذا تبي مساعدة ممكن تراسلنا إيميل هنا", "Thanks": "شكراً", "Email Us": "راسلنا إيميل", "I cant register in your app in face detection ": "مو قادر أسجل في تطبيقكم بسبب كشف الوجه", "Hi": "مرحباً", "No face detected": "لم يتم الكشف عن أي وجه", "Image detecting result is ": "نتيجة الكشف عن الصورة هي", "from 3 times Take Attention": "من 3 محاولات انتبه", "Be sure for take accurate images please\nYou have": "الرجاء التأكد من التقاط صور دقيقة\nعندك", "image verified": "الصورة موثقة", "Next": "التالي", "There is no help Question here": "ما فيه أسئلة مساعدة هنا", "You dont have Points": "ما عندك نقاط", "You Are Stopped For this Day !": "تم توقيفك لهاليوم!", "You must be charge your Account": "يجب إعادة شحن رصيد النقاط", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "رفضت 3 رحلات اليوم وهذا السبب\nنلتقي باكر!", "Recharge my Account": "ادفع رسوم من حسابي", "Ok , See you Tomorrow": "تمام، نلتقي باكر", "You are Stopped": "تم توقيفك", "Connected": "متصل", "Not Connected": "غير متصل", "Your are far from passenger location": "أنت بعيد عن مكان الراكب", "go to your passenger location before\nPassenger cancel trip": "اذهب إلى مكان الراكب قبل ما\nيلغي الراكب الرحلة", "You will get cost of your work for this trip": "راح تحصل على تكاليف عملك لهذه الرحلة", " in your wallet": "في محفظتك", "you gain": "ربحت", "Order Cancelled by Passenger": "تم إلغاء الطلب من قبل الراكب", "Success": "نجاح", "Feedback data saved successfully": "تم حفظ بيانات التعليقات بنجاح", "No Promo for today .": "ما فيه عروض ترويجية اليوم.", "Select your destination": "اختار وجهتك", "Search for your Start point": "ابحث عن نقطة الانطلاق", "Search for waypoint": "ابحث عن النقطة الآلية", "Current Location": "الموقع الحالي", "Add Location 1": "إضافة الموقع 1", "You must Verify email !.": "يجب التحقق من البريد الإلكتروني!", "Cropper": "القاصة", "Saved Sucssefully": "تم الحفظ بنجاح", "Select Date": "اختر التاريخ", "Birth Date": "تاريخ الميلاد", "Ok": "موافق", "the 500 points equal 30 JOD": "الـ 500 نقطة تساوي 30 دينار أردني", "the 500 points equal 30 JOD for you \nSo go and gain your money": "الـ 500 نقطة تساوي 30 دينار أردني\nفاستحق فلوسك واكسب النقاط", "token updated": "تم تحديث الرمز", "Add Location 2": "إضافة الموقع 2", "Add Location 3": "إضافة الموقع 3", "Add Location 4": "إضافة الموقع 4", "Waiting for your location": "في انتظار موقعك", "Search for your destination": "ابحث عن وجهتك", "Hi! This is": "مرحباً! أنا", " I am using": " أنا أستخدم", " to ride with": " للركوب مع", " as the driver.": " كسائق.", "is driving a ": "يقود", " with license plate ": "بلوحة ترخيص", " I am currently located at ": "أنا حالياً في", "Please go to Car now ": "الرجاء التحرك إلى السيارة الآن", "You will receive a code in WhatsApp Messenger": "سوف تتلقى رمزًا في واتساب ماسنجر", "If you need assistance, contact us": "إذا كنت بحاجة إلى المساعدة، تواصل معنا", "Promo Ended": "انتهى العرض", "Enter the promo code and get": "أدخل رمز الترويج واحصل على", "DISCOUNT": "خصم", "No wallet record found": "لم يتم العثور على سجل محفظة", "for": "لمدة", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "Intaleq هو أكثر تطبيق آمن لمشاركة الركوب ويقدم مميزات كثيرة للكباتن والركاب. إحنا نقدم أقل نسبة عمولة وهي 8% بس، وهذا يضمن إنك تاخذ أحسن قيمة لمشاويرك. تطبيقنا فيه تأمين لأحسن الكباتن، صيانة دورية للسيارات مع أحسن المهندسين، وخدمات على الطريق لضمان تجربة محترمة وعالية الجودة لكل المستخدمين.", "You can contact us during working hours from 12:00 - 19:00.": "ممكن تتصل بينا في مواعيد العمل من الساعة 12:00 للساعة 7:00 مساءً.", "Choose a contact option": "اختر طريقة الاتصال", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "مواعيد العمل من الساعة 12:00 للساعة 7:00 مساءً.\nممكن تبعت رسالة واتساب أو إيميل.", "Promo code copied to clipboard!": "تم نسخ رمز العرض إلى الحافظة!", "Copy Code": "نسخ الرمز", "Your invite code was successfully applied!": "تم تطبيق رمز الدعوة بنجاح!", "Payment Options": "خيارات الدفع", "wait 1 minute to receive message": "انتظر دقيقة واحدة لاستلام الرسالة", "Promo Copied!": "تم نسخ العرض!", "You have copied the promo code.": "تم نسخ رمز العرض.", "Valid Until:": "صالح حتى:", "Select Payment Amount": "اختر مبلغ الدفع", "The promotion period has ended.": "انتهت فترة العرض.", "Promo Code Accepted": "تم قبول كود العرض", "Tap on the promo code to copy it!": "اضغط على رمز العرض لنسخه!", "Lowest Price Achieved": "تم الوصول إلى أقل سعر", "Cannot apply further discounts.": "لا يمكن تطبيق المزيد من الخصومات.", "Promo Already Used": "تم استخدام كود العرض بالفعل", "Invitation Used": "تم استخدام الدعوة", "You have already used this promo code.": "لقد استخدمت هذا الكود بالفعل.", "Insert Your Promo Code": "أدخل كود العرض الخاص بك", "Enter promo code here": "أدخل كود العرض هنا", "Please enter a valid promo code": "يرجى إدخال كود عرض صالح", "Awfar Car": "أوفر كار", "Old and affordable, perfect for budget rides.": "سيارة قديمة وبسعر معقول، مثالية للمشاوير الاقتصادية.", " If you need to reach me, please contact the driver directly at": "إذا محتاج تتواصل معاي، يرجى التواصل مع السواق مباشرة على", "No Car or Driver Found in your area.": "لم يتم العثور على سيارة أو سواق في منطقتك.", "Please Try anther time ": "الرجاء المحاولة في وقت آخر", "There no Driver Aplly your order sorry for that ": "ما فيه سواق قبل طلبك، آسفين على كده", "Trip Cancelled": "تم إلغاء الرحلة", "The Driver Will be in your location soon .": "السواق بيكون في موقعك قريبًا.", "The distance less than 500 meter.": "المسافة أقل من 500 متر.", "Promo End !": "انتهاء العرض!", "There is no notification yet": "لا توجد إشعارات بعد", "Use Touch ID or Face ID to confirm payment": "استخدم Touch ID أو Face ID لتأكيد الدفع", "Contact us for any questions on your order.": "تواصل معانا لو عندك أي استفسارات بخصوص طلبك.", "Pyament Cancelled .": "تم إلغاء الدفع.", "type here": "اكتب هنا", "Scan Driver License": "مسح رخصة القيادة", "Please put your licence in these border": "الرجاء وضع رخصتك داخل هذا الإطار", "Camera not initialized yet": "الكاميرا لم يتم تشغيلها بعد", "Take Image": "التقاط الصورة", "AI Page": "صفحة الذكاء الاصطناعي", "Take Picture Of ID Card": "التقاط صورة لبطاقة الهوية", "Take Picture Of Driver License Card": "التقاط صورة لبطاقة رخصة القيادة", "We are process picture please wait ": "نقوم بمعالجة الصورة، الرجاء الانتظار", "There is no data yet.": "لا توجد بيانات بعد.", "Name :": "الاسم:", "Drivers License Class: ": "فئة رخصة القيادة:", "Document Number: ": "رقم المستند:", "Address: ": "العنوان:", "Height: ": "الطول:", "Expiry Date: ": "تاريخ الانتهاء:", "Date of Birth: ": "تاريخ الميلاد:", "You can\'t continue with us .\nYou should renew Driver license": "لا يمكنك الاستمرار معانا. يجب تجديد رخصة القيادة", "Detect Your Face ": "التعرف على وجهك", "Go to next step\nscan Car License.": "اذهب للخطوة اللي بعدها\nوامسح رخصة السيارة.", "Name in arabic": "الاسم باللغة العربية", "Drivers License Class": "فئة رخصة القيادة", "Date of Birth": "تاريخ الميلاد", // "Select date and time of trip": "اختر تاريخ ووقت الرحلة", "Selected Date": "التاريخ المحدد", "Select Time": "اختر الوقت", "Selected Time": "الوقت المحدد", // "OK": "موافق", // "Cancel": "إلغاء", "Selected Date and Time": "التاريخ والوقت المحددين", "Lets check Car license ": "يلا نفحص رخصة السيارة", "Car": "السيارة", "Plate": "لوحة السيارة", "N/A": "غير متوفر", "Rides": "الرحلات", "Age": "العمر", // "Education": "التعليم", // "Color": "اللون", // "Displacement": "السعة", // "Fuel": "الوقود", "Selected driver": "السائق اللي اخترته", "Lets check License Back Face": "يلا نفحص الوجه الخلفي للرخصة", "Car License Card": "بطاقة رخصة السيارة", "No image selected yet": "لم يتم اختيار أي صورة بعد", "Made :": "الصنع:", "model :": "الموديل:", "VIN :": "رقم الشاسيه:", "year :": "السنة:", "ُExpire Date": "تاريخ الانتهاء", "Login Driver": "تسجيل دخول السائق", "Password must br at least 6 character.": "كلمة المرور لازم تكون 6 حروف على الأقل.", "if you don\'t have account": "إذا ما عندك حساب", "Here recorded trips audio": "هنا تسجيلات صوتية للرحلات", "Register as Driver": "التسجيل كسائق", // "Privacy Notice": "إخطار الخصوصية", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "باختياري 'أوافق' أدناه، قمت بمراجعة والموافقة على شروط الاستخدام والإقرار بـ", ". I am at least 18 years of age.": ". أنا عمري 18 سنة على الأقل.", "Log Out Page": "صفحة تسجيل الخروج", "Log Off": "تسجيل الخروج", "Register Driver": "تسجيل سائق جديد", "Verify Email For Driver": "التحقق من البريد الإلكتروني للسائق", "Admin DashBoard": "لوحة تحكم المدير", "Your name": "اسمك", "your ride is applied": "تم قبول الطلب بتاعك", "Your password": "كلمة المرور بتاعتك", "H and": "ساعة و", "LE": "جنيه", "JOD": "دينار", "m": "دقيقة", "We search nearst Driver to you": "بندور على أقرب سواق ليك", "please wait till driver accept your order": "الرجاء الانتظار لحد ما السواق يقبل طلبك", "No accepted orders? Try raising your trip fee to attract riders.": "ما فيه طلبات مقبولة؟ حاول تزيد أجرة المشوار لجذب الركاب.", "You should select one": "لازم تختار واحد", "The driver accept your order for": "السواق قبل طلبك بمبلغ", "Increase Fee": "زيد الأجرة", "No, thanks": "لا، شكرا", "The driver on your way": "الكابتن في طريقه إليك", "Total price from ": "السعر الإجمالي من ", "Order Details Intaleq": "طلب سريع", // "Order Applied": "تم قبول الطلب", "accepted your order": "قبل طلبك", // "We regret to inform you that another driver has accepted this order.": // "نأسف لإبلاغك بأن سائق آخر قد قبل هذا الطلب", "Selected file:": "الملف المختار:", "Your trip cost is": "تكلفة رحلتك هي", "this will delete all files from your device": "حذف هذا راح يمسح كل الملفات من جهازك", " in your": "في محفظتك", "Exclusive offers and discounts always with the Intaleq app": "عروض وخصومات حصرية دائمًا مع تطبيق Intaleq", // "Please go to Car Driver": "الرجاء التوجه إلى سائق السيارة", " wallet due to a previous trip.": "بسبب رحلة سابقة.", "Submit Question": "اطرح سؤال", "Please enter your Question.": "الرجاء إدخال سؤالك.", "Help Details": "تفاصيل المساعدة", "No trip yet found": "لم يتم حجز أي رحلة بعد", "No Response yet.": "ما فيه رد للحين.", " You Earn today is ": "اللي كسبته اليوم هو", " You Have in": "عندك في", "Total points is ": "إجمالي النقاط هو", "Total Connection Duration:": "إجمالي مدة الاتصال:", " H and": "ساعة و", "Passenger name : ": "اسم الراكب", "Cost Of Trip IS ": "تكلفة الرحلة هي", "Arrival time": "وقت الوصول", "arrival time to reach your point": "الوقت المتوقع للوصول إلى وجهتك", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "بالنسبة لمشاوير Intaleq والسكوتر، السعر ينحسب بشكل تلقائي. أما مشاوير الراحة، فالسعر يكون حسب الوقت والمسافة.", "Hello this is Driver": "مرحباً، أنا السواق", "Is the Passenger in your Car ?": "هل الراكب معاك في السيارة؟", "Please wait for the passenger to enter the car before starting the trip.": "الرجاء الانتظار لحد ما الراكب يركب السيارة قبل ما تبدأ المشوار.", "No ,still Waiting.": "لا، للحين أنتظر.", "I arrive you": "أنا وصلت لك", "I Arrive your site": "أنا وصلت مكانك", "You are not in near to passenger location": "أنت مو قريب من مكان الراكب", "please go to picker location exactly": "الرجاء الذهاب إلى موقع الراكب بالضبط", "You Can Cancel Trip And get Cost of Trip From": "ممكن تلغي المشوار وتاخذ التكلفة من", "Are you sure to cancel?": "أنت متأكد إنك تبي تلغي؟", // "Yes": "نعم", "Insert Emergincy Number": "أدخل رقم الطوارئ", "Best choice for comfort car and flexible route and stops point": "أفضل اختيار لسيارة مريحة ومسار مرن ونقط وقوف", "Insert": "إدخال", "This is for scooter or a motorcycle.": "هذا للتوصيل أو للموتوسيكل", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "المشوار هذا يروح مباشرة من نقطة البداية لنقطة النهاية بسعر ثابت. والسواق لازم يلتزم بالمسار المحدد.", "You can decline a request without any cost": "تقدر ترفض الطلب بدون أي تكلفة", "Perfect for adventure seekers who want to experience something new and exciting": "مثالي لمحبي المغامرة اللي يبون يجربون أشياء جديدة ومثيرة", "My current location is:": "موقعي الحالي هو:", "and I have a trip on": "وعندي مشوار على", "App with Passenger": "التطبيق\nمع الراكب", "You will be pay the cost to driver or we will get it from you on next trip": "راح تدفع التكلفة للسواق أو راح ناخذها منك في المشوار اللي جاي", "Trip has Steps": "الرحلة لها خطوات", "Distance from Passenger to destination is ": "المسافة من الراكب للوجهة هي", "price is": "التكلفة", "This ride type does not allow changes to the destination or additional stops": "نوع المشوار هذا ما يسمح بتغيير الوجهة ولا إضافة وقفات.", "This price may be changed": "خلي بالك السعر ممكن يتغير", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "حتى لو ما فيه خط، لا تقلق! كلم السواق بتاعك من خلال التطبيق بتاعنا. نستخدم تكنولوجيا حديثة عشان نحافظ على خصوصيتك.", "This ride type allows changes, but the price may increase": "نوع المشوار هذا يسمح بالتغييرات، بس السعر ممكن يزيد", "Select one message": "اختار رسالة", "I'm waiting for you": "أنا في انتظارك", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "لاحظنا إن السرعة تزيد عن 100 كم/ساعة. يرجى التباطؤ حفاظًا على سلامتك. لو حسيت بعدم الأمان، ممكن تشارك تفاصيل رحلتك مع حد تثق فيه أو تتصل بالشرطة عن طريق زر الطوارئ الأحمر.", "Warning: Intaleqing detected!": "تحذير: تم رصد السرعة الزائدة!", "Please help! Contact me as soon as possible.": "الرجاء المساعدة! اتصل بي في أقرب وقت ممكن", "Share Trip Details": "مشاركة تفاصيل الرحلة", "Car Plate is ": "رقم اللوحة", "VIP Order": "طلب VIP", "the 300 points equal 300 L.E for you \nSo go and gain your money": "اكسب 300 جنيه! كل 300 نقطة تساوي 300 جنيه. يلا استغل نقاطك!", "the 300 points equal 300 L.E": "الـ 300 نقطة تساوي 300 جنيه ليك", "The payment was not approved. Please try again.": "الدفع ما اتقبل. يرجى المحاولة مرة ثانية.", "Payment Failed": "فشل الدفع", "Error": "خطأ", "This is a scheduled notification.": "هذا إشعار مجدول.", "An error occurred during the payment process.": "حدث خطأ أثناء عملية الدفع.", "The payment was approved.": "تمت الموافقة على الدفع.", "Payment Successful": "نجح الدفع", "No ride found yet": "ما فيه طلبات متاحة حاليًا", "Accept Order": "اقبل الطلب", // "reject your order.": "رفض طلبك.", "Bottom Bar Example": "مثال لشريط التنقل السفلي", "Driver phone": "رقم السواق", "Statistics": "الإحصائيات", "Origin": "نقطة الانطلاق", "Destination": "الوجهة", "Driver Name": "اسم السائق", "Driver Car Plate": "لوحة السيارة", "Available for rides": "متاح للمشاوير", "Scan Id": "مسح الهوية", "Camera not initilaized yet": "الكاميرا ما اشتغلت للحين", "Scan ID MklGoogle": "مسح هوية MklGoogle", "Language": "اللغة", "Jordan": "الأردن", "USA": "الولايات المتحدة الأمريكية", "Egypt": "مصر", "Turkey": "تركيا", "Saudi Arabia": "المملكة العربية السعودية", "Qatar": "قطر", "Bahrain": "البحرين", "Kuwait": "الكويت", "But you have a negative salary of": "لكن عندك رصيد سالب بقيمة", "Promo Code": "كود ترويجي", "Your trip distance is": "مسافة رحلتك هي", "Enter promo code": "أدخل كود ترويجي", "You have promo!": "عندك عرض ترويجي!", "Cost Duration": "تكلفة المدة", "Duration is": "المدة هي", "Leave": "مغادرة", "Join": "انضمام", "Heading your way now. Please be ready.": "أنا في طريقي إليك الحين. يرجى الاستعداد.", "Approaching your area. Should be there in 3 minutes.": "أقترب من منطقتك. يفترض أوصل خلال 3 دقايق.", "There's heavy traffic here. Can you suggest an alternate pickup point?": "فيه زحمة مرور شديدة هنا. ممكن تقترح مكان ثاني للاستلام؟", "This ride is already taken by another driver.": "المشوار هذا أخذه سواق ثاني خلاص.", "You Should be select reason.": "يجب أن تختار سبب.", "Waiting for Driver ...": "في انتظار السواق...", "Latest Recent Trip": "آخر مشوار سويته", "from your list": "من قائمتك", "Do you want to change Work location": "تبي تغير مكان شغلك؟", "Do you want to change Home location": "تبي تغير مكان بيتك؟", "We Are Sorry That we dont have cars in your Location!": "نعتذر لعدم وجود سيارات في موقعك!", "Choose from Map": "اختر من الخريطة", "Pick your ride location on the map - Tap to confirm": "حدد مكان الالتقاء على الخريطة - اضغط للتأكيد", // "To Work": "إلى العمل", // "Are you want to go this site": "عايز تروح المكان ده؟", "Closest & Cheapest": "الأقرب والأرخص", // "Work Saved": "تم حفظ مكان الشغل", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "Intaleq هو تطبيق توصيل آمن وموثوق وسهل الاستخدام.", "With Intaleq, you can get a ride to your destination in minutes.": "مع Intaleq، تقدر توصل لوجهتك في دقايق.", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "Intaleq ملتزمة بالأمان، وكل الكباتن يتم فحصهم بدقة والتحقق من خلفيتهم.", // "To Home": "إلى المنزل", // "Home Saved": "تم حفظ مكان البيت", // "Destination selected": "تم اختيار الوجهة:", // "Now select start pick": "اختار مكان الانطلاق الحين:", "Pick from map": "اختيار من الخريطة", // "Click here point": "حدد هذه النقطة", "No Car in your site. Sorry!": "ما فيه سيارة في موقعك. آسف!", "Nearest Car for you about ": "أقرب سيارة ليك على بعد حوالي ", // "N/A": "غير متوفر", "From :": "من:", "Get Details of Trip": "عرض تفاصيل الرحلة", "If you want add stop click here": "إذا تبي تضيف وقفة اضغط هنا", // "Driver": "السائق", "Where you want go ": "وين تبي تروح؟", "My Card": "بطاقتي", "Start Record": "بدء التسجيل", "Wallet": "المحفظة", "History of Trip": "سجل الرحلات", "Helping Center": "مركز المساعدة", "Record saved": "تم حفظ التسجيل", "Trips recorded": "الرحلات المسجلة", "Select Your Country": "اختر بلدك", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "لتلقي أدق المعلومات لموقعك، يرجى اختيار بلدك أدناه. هذا راح يساعد على تخصيص تجربة التطبيق والمحتوى لبلدك.", "Are you sure to delete recorded files": "أكيد تبي تمسح الملفات الصوتية المسجلة؟", "Select recorded trip": "اختر الملف الصوتي المسجل", "Card Number": "رقم البطاقة", "Hi, Where to ": "مرحبا، وين تبي تروح؟", "Pick your destination from Map": "اختار وجهتك من الخريطة", "Add Stops": "إضافة محطات", "Get Direction": "عرض الاتجاهات", "Add Location": "إضافة موقع", "Switch Rider": "تبديل الراكب", "You will arrive to your destination after timer end.": "راح توصل وجهتك بعد انتهاء العداد.", "You can cancel trip": "تقدر تلغي الرحلة", "The driver waitting you in picked location .": "السواق ينتظرك في المكان اللي اخترته.", "Pay with Your": "ادفع بـ", "Pay with Credit Card": "ادفع ببطاقة الائتمان", "Payment History": "سجل المدفوعات", "Show Promos to Charge": "عرض العروض للشحن", "Point": "نقطة", "How many hours would you like to wait?": "كم ساعة تبي تنتظر؟", "Driver Wallet": "محفظة السائق", "Choose between those Type Cars": "اختار من بين أنواع السيارات هذي", "hour": "ساعة", "Select Waiting Hours": "اختر ساعات الانتظار", "Total Points is": "إجمالي النقاط هو", "You will receive a code in SMS message": "سوف تتلقى رمزًا في رسالة نصية", "Done": "تم", "Total Budget from trips is ": "إجمالي المبلغ المستحق من الرحلات هو", "Total Amount:": "المبلغ الإجمالي:", "Total Budget from trips by\nCredit card is ": "إجمالي المبلغ المستحق من الرحلات عن طريق\nبطاقة الائتمان هو", "This amount for all trip I get from Passengers": "هذا المبلغ اللي حصلت عليه من كل الرحلات من الركاب", "Pay from my budget": "ادفع من رصيدي", "This amount for all trip I get from Passengers and Collected For me in": "هذا المبلغ اللي حصلت عليه من كل الرحلات من الركاب وتم تجميعه لي في", "You can buy points from your budget": "تقدر تشتري نقاط من رصيدك", "insert amount": "أدخل المبلغ", "You can buy Points to let you online\nby this list below": "تقدر تشتري نقاط عشان تبقى متصل\nمن القائمة هذه تحت", "Create Wallet to receive your money": "إنشاء محفظة لاستقبال أموالك", "Enter your feedback here": "اكتب ملاحظاتك هنا", "Please enter your feedback.": "يرجى إدخال ملاحظاتك.", "Feedback": "ملاحظات", "Submit ": "إرسال", "Click here to Show it in Map": "اضغط هنا لعرضه على الخريطة", "Canceled": "تم الإلغاء", "Type your Email": "اكتب بريدك الإلكتروني", "No I want": "لا أريد", "Email is": "البريد الإلكتروني هو", "Phone Number is": "رقم الهاتف هو", "Date of Birth is": "تاريخ الميلاد هو", "Sex is ": "النوع هو ", "Car Details": "تفاصيل السيارة", "VIN is": "رقم الشاسيه هو", "Color is ": "اللون هو ", "Make is ": "الشركة المصنعة", "Model is": "الموديل هو", "Year is": "السنة هي", "Expiration Date ": "تاريخ الانتهاء ", "Edit Your data": "تعديل بياناتك", "write vin for your car": "اكتب رقم الشاسيه لسيارتك", "VIN": "رقم الشاسيه", "write Color for your car": "اكتب لون سيارتك", "write Make for your car": "اكتب الشركة المصنعة لسيارتك", // "Make": "الشركة المصنعة", "write Model for your car": "اكتب موديل سيارتك", // "Model": "الموديل", "write Year for your car": "اكتب سنة صنع سيارتك", // "Expiration Date": "تاريخ الانتهاء", "write Expiration Date for your car": "اكتب تاريخ انتهاء رخصة سيارتك", "Tariffs": "التعريفات", "Minimum fare": "الحد الأدنى للأجرة", "Maximum fare": "الحد الأقصى للأجرة", "Flag-down fee": "رسوم فتح العداد", "Including Tax": "شامل الضريبة", "BookingFee": "رسوم الحجز", "Morning": "الصباح", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "من 07:30 حتى 10:30 (الخميس، الجمعة، السبت، الاثنين)", "Evening": "المساء", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "من 12:00 حتى 15:00 (الخميس، الجمعة، السبت، الاثنين)", "Night": "الليل", "You have in account": "عندك في الحساب", "Select Country": "اختر الدولة", "Ride Today : ": "عدد رحلات اليوم: ", "After this period\nYou can\'t cancel!": "بعد الفترة هذه\nما تقدر تلغي!", "from 23:59 till 05:30": "من 23:59 حتى 05:30", "Rate Driver": "تقييم السائق", "Total Cost is ": "صافي الربح", "Write note": "اكتب ملاحظة", "Time to arrive": "وقت الوصول", "Ride Summaries": "ملخصات الرحلات", "Total Cost": "المبلغ الإجمالي", "Average of Hours of": "متوسط ساعات", " is ON for this month": "في هذا الشهر", "Days": "أيام", "Total Hours on month": "إجمالي الساعات في الشهر", "Counts of Hours on days": "عدد ساعات الأيام", "OrderId": "رقم الرحلة", "created time": "وقت الرحلة", "Intaleq Over": "سرعة عالية", "I will slow down": "حاضر بهدي السرعة", "Map Passenger": "خريطة الراكب", "Be Slowly": "بالراحة شوية في السرعة", "If you want to make Google Map App run directly when you apply order": "لو تبي تطبيق خرائط جوجل يشتغل تلقائي لما تطلب الخدمة", "You can change the language of the app": "تقدر تغير لغة التطبيق", "Your Budget less than needed": "القيمة المدخلة أقل من رصيدك", "You can change the Country to get all features": "تقدر تغير الدولة عشان تحصل على كل المميزات", "Change Country": "تغيير الدولة" }, "ar-ma": { "Order": "طلب", "OrderVIP": "طلب VIP", "Cancel Trip": "إلغي الرحلة", "Passenger Cancel Trip": "الزبون ألغى الرحلة", "VIP Order": "طلب VIP", "The driver accepted your trip": "السائق قبل الرحلة ديالك", "message From passenger": "رسالة من الزبون", "Cancel": "إلغاء", "Trip Cancelled. The cost of the trip will be added to your wallet.": "الرحلة ملغية. الفلوس ديال الرحلة غادي تزاد في الجيب ديالك.", "token change": "تبديل الرمز", "face detect": "كشف الوجه", "Face Detection Result": "نتيجة كشف الوجه", "similar": "مشابه", "not similar": "ماشي مشابه", "Hi ,I will go now": "مرحبا، أنا غادي نمشي دابا", "Passenger come to you": "الزبون جاي عندك", "Call Income": "مكالمة واردة", "Call Income from Passenger": "مكالمة واردة من الزبون", "Criminal Document Required": "مطلوب وثيقة جنائية", "You should have upload it .": "خاصك تكون حملتيها.", "Call End": "نهاية المكالمة", "The order has been accepted by another driver.": "الطلب تقبل من عند سائق آخر.", "The order Accepted by another Driver": "الطلب تقبل من عند سائق آخر", "We regret to inform you that another driver has accepted this order.": "كنتأسفوا نبلغوك باللي سائق آخر قبل هذا الطلب.", "Driver Applied the Ride for You": "السائق قدم الطلب ليك", "Applied": "تطبق", "Hi ,I Arrive your site": "مرحبا، وصلت للموقع ديالك", "Please go to Car Driver": "الله يرحم الوالدين سير عند سائق السيارة", "Ok I will go now.": "واخا، غادي نمشي دابا.", "Accepted Ride": "الرحلة مقبولة", "Driver Accepted the Ride for You": "السائق قبل الرحلة ليك", "Promo": "عرض ترويجي", "Show latest promo": "عرض آخر عرض ترويجي", "Trip Monitoring": "مراقبة الرحلة", "Driver Is Going To Passenger": "السائق غادي في الطريق ليك", "Please stay on the picked point.": "الله يرحم الوالدين بقا في نقطة الالتقاط اللي تحددات.", "message From Driver": "رسالة من السائق", "Trip is Begin": "الرحلة بدات", "Cancel Trip from driver": "إلغاء الرحلة من السائق", "We will look for a new driver.\nPlease wait.": "غادي نقلبوا على سائق جديد.\nالله يرحم الوالدين تسنى.", "The driver canceled your ride.": "السائق ألغى الرحلة ديالك.", "Driver Finish Trip": "السائق سالا الرحلة", "you will pay to Driver": "غادي تخلص السائق", "Don’t forget your personal belongings.": "متنساش حوايجك الشخصية.", "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": "الله يرحم الوالدين تأكد باللي معاك كل حوايجك الشخصية وباللي أي مبلغ باقي، إلا كان، تزاد في الجيب ديالك قبل ما تمشي. شكرا لاستعمالك تطبيق Intaleq", "Finish Monitor": "سالي المراقبة", "Trip finished": "الرحلة سالات", "Call Income from Driver": "مكالمة واردة من السائق", "Driver Cancelled Your Trip": "السائق ألغى الرحلة ديالك", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": "غادي تخلص السائق غادي تخلص تكلفة وقت السائق شوف الجيب ديال Intaleq ديالك", "Order Applied": "الطلب طبق", //firebase above // "Where to": "فين غادي؟", "Where are you going?": "فين غادي؟", "Quick Actions": "إجراءات سريعة", "My Wallet": "جيبي", "Order History": "تاريخ الطلبات", "Contact Us": "اتصل بنا", "Driver": "السائق", "Complaint": "شكاية", "Promos": "العروض", "Recent Places": "الأماكن الأخيرة", "From": "من", "WhatsApp Location Extractor": "مستخرج موقع واتساب", "Location Link": "رابط الموقع", "Paste location link here": "لصق رابط الموقع هنا", "Go to this location": "سير لهذا الموقع", "Paste WhatsApp location link": "لصق رابط موقع واتساب", "Select Order Type": "اختار نوع الطلب", "Choose who this order is for": "اختار الطلب هذا ديال من؟", "I want to order for myself": "بغيت نطلب ليا", "I want to order for someone else": "بغيت نطلب لواحد آخر", // "Cancel": "إلغاء", "Order for someone else": "طلب لشخص آخر", "Order for myself": "طلب ليا", "Are you want to go this site": "واش باغي تمشي لهذا المكان؟", // "Yes": "أيوة", "No": "لا", "Are you sure to delete this location?": "متأكد باللي باغي تمسح هذا الموقع؟", "deleted": "تمسح", "To Work": "للخدمة", "Work Saved": "مكان الخدمة تسجل", "To Home": "للدار", "Home Saved": "مكان الدار تسجل", "Destination selected": "الوجهة مختارة", "Now select start pick": "دابا اختار نقطة البداية", "OK": "واخا", "Confirm Pick-up Location": "تأكيد موقع الالتقاء", "Set Location on Map": "حدد الموقع على الخريطة", "Nearest Car: ~": "أقرب طوموبيل: ~", "Nearest Car": "أقرب طوموبيل", "No cars nearby": "ماكاينش طوموبيلات قريبة", "Favorite Places": "الأماكن المفضلة", "No favorite places yet!": "مازال ماكاينش أماكن مفضلة!", "from your favorites": "من المفضلة ديالك", "Back": "رجوع", "Sign in for a seamless experience": "تسجل الدخول باش تكون تجربة أحسن", "Sign In with Google": "تسجيل الدخول بجوجل", "Sign in with Apple": "تسجيل الدخول بآبل", "Need assistance? Contact us": "محتاج مساعدة؟ عيط لينا", "User not found": "المستخدم مالقيناهش", "Email": "البريد الإلكتروني", "Your email address": "عنوان البريد الإلكتروني ديالك", "Enter a valid email": "دخل بريد إلكتروني صحيح", "Password": "كلمة السر", // "Your password": "كلمة مرورك", "Enter your password": "دخل كلمة السر ديالك", "Submit": "إرسال", "Terms of Use & Privacy Notice": "شروط الاستخدام وإشعار الخصوصية", "Terms of Use": "شروط الاستخدام", "Privacy Notice": "سياسة الخصوصية", "By selecting \"I Agree\" below, I confirm that I have read and agree to the": "بالضغط على \"موافق\" لتحت، كنأكد باللي قريت ووافقت على", "and acknowledge the": "وكنقر بـ", ". I am at least 18 years old.": ". أنا عندي 18 عام ولا كثر.", "Continue": "كمل", "Enable Location Access": "فعل الوصول للموقع", "We need your location to find nearby drivers for pickups and drop-offs.": "محتاجين الموقع ديالك باش نلقاو سواقين قرابين للاستلام والتوصيل.", "Allow Location Access": "السماح بالوصول للموقع", "You should restart app to change language": "خاصك تسد التطبيق وتعاود تفتحو باش اللغة تبدل", "Home Page": "الصفحة الرئيسية", "To change Language the App": "باش تبدل لغة التطبيق", "Learn more about our app and mission": "عرف كثر على التطبيق ديالنا والمهمة ديالنا", "Promos For Today": "عروض اليوم", "Choose your ride": "اختار مشوارك", "Your Journey Begins Here": "الرحلة ديالك كتبدا هنا", "Bonus gift": "هدية إضافية", "Pay": "خلص", "Get": "حصل على", "Send to Driver Again": "عاود صيفط للسائق", "Driver Name:": "اسم السائق:", "No trip data available": "ماكاينش بيانات للرحلة متوفرة", "Car Plate:": "نمرة الطوموبيل:", "remaining": "باقي", "Order Cancelled": "الطلب ملغي", "You canceled VIP trip": "لغيتي مشوار VIP", "Passenger cancelled order": "الزبون ألغى الطلب", "Your trip is scheduled": "الرحلة ديالك مجدولة", "Don't forget your ride!": "متنساش مشوارك!", "Trip updated successfully": "الرحلة تحدتات بنجاح", "Car Make:": "ماركة الطوموبيل:", "Car Model:": "موديل الطوموبيل:", "Car Color:": "لون الطوموبيل:", "Driver Phone:": "نمرة تيليفون السائق:", "Pre-booking": "حجز مسبق", "Waiting VIP": "انتظار VIP", "Driver List": "قائمة السائقين", "Confirm Trip": "أكد المشوار", "Select date and time of trip": "حدد التاريخ والوقت ديال المشوار", "Date and Time Picker": "اختيار التاريخ والوقت", "Trip Status:": "حالة المشوار:", "pending": "قيد الانتظار", "accepted": "مقبول", "rejected": "مرفوض", "Apply": "تطبيق", "Enter your promo code": "دخل رمز الترويج الخاص بك", "Apply Promo Code": "تطبيق رمز الترويج", "Scheduled Time:": "الوقت المحدد:", "No drivers available": "ماكاينش سواقين متوفرين", "No drivers available at the moment. Please try again later.": "ماكاينش سواقين متوفرين دابا. حاول مرة أخرى من بعد.", "you have a negative balance of": "عندك رصيد ناقص ديال", "Please try again in a few moments": "حاول مرة أخرى بعد لحظات قليلة", "Unknown Driver": "سائق غير معروف", "in your": "في الجيب ديالك", "The driver accepted your order for": "السائق قبل الطلب ديالك بـ", "wallet due to a previous trip.": "في الجيب ديالك بسبب رحلة سابقة.", "rides": "مشاوير", "Add Work": "زيد مكان الخدمة", "The reason is": "السبب هو", "User does not have a wallet #1652": "المستخدم معندوش جيب #1652", "Price of trip": "ثمن المشوار", "From:": "من:", "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "بالنسبة لمشاوير السرعة والتوصيل، الثمن كيتحسب تلقائيا. أما مشاوير الكمفورت، الثمن كيكون على حساب الوقت والمسافة", "Phone Wallet Saved Successfully": "جيب التيليفون تسجل بنجاح", "Add wallet phone you use": "زيد نمرة جيب التيليفون اللي كتستعمل", "Update Available": "تحديث متوفر", "Phone number must be exactly 11 digits long": "نمرة التيليفون خاصها تكون 11 رقم بالضبط", "Insert Wallet phone number": "دخل نمرة جيب التيليفون ديالك", "Phone number isn't an Egyptian phone number": "نمرة التيليفون هادي ماشي نمرة مصرية", "A new version of the app is available. Please update to the latest version.": "كاين نسخة جديدة من التطبيق متوفرة. الله يرحم الوالدين دير التحديث لآخر نسخة.", "We use location to get accurate and nearest passengers for you": "كنستعملو الموقع باش نوصلوك بأقرب ركاب وأدقهم ليك", "This ride is already applied by another driver.": "المشوار هذا تقبل من عند سائق آخر خلاص.", "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": "كنستعملو الموقع ديالك بالضبط باش نلقاو أقرب سائق متوفر ونديوك معلومات دقيقة على مكان الاستلام والوصول. ممكن تتحكم في هذا من الإعدادات.", "Where are you, sir?": "فين وصلتي أسي؟", "I've been trying to reach you but your phone is off.": "كنحاول نعيط ليك والتيليفون مسدود.", "Please don't be late": "الله يرحم الوالدين متأخرش", "Please don't be late, I'm waiting for you at the specified location.": "الله يرحم الوالدين متأخرش، أنا كنتسناك في المكان اللي محدد.", "My location is correct. You can search for me using the navigation app": "الموقع ديالي مزيان. ممكن تقلب عليا باستعمال تطبيق الملاحة", "Hello, I'm at the agreed-upon location": "أهلا، أنا في المكان المتفق عليه", "How much longer will you be?": "شحال باقي ليك باش توصل؟", "Phone number is verified before": "نمرة التيليفون مأكدة من قبل", "Change Ride": "بدل المشوار", "You can change the destination by long-pressing any point on the map": "ممكن تبدل الوجهة بالضغط مطولاً على أي نقطة في الخريطة", "Pick from map destination": "اختار الوجهة ديالك من الخريطة", "Pick or Tap to confirm": "اختار أو ضغط باش تأكد", "Accepted your order": "الطلب ديالك تقبل", "Order Accepted": "الطلب مقبول", "with type": "مع نوع", "accepted your order at price": "الطلب ديالك تقبل بثمن", "you canceled order": "أنت لغيتي الطلب", "If you want order to another person": "إلا بغيتي تطلب لشخص آخر", // "Ok I will go now.": "واخا، أنا غادي دابا.", // "Hi, I will go now": "أهلا، أنا غادي دابا", "upgrade price": "طلع الثمن", "Please enter a correct phone": "الله يرحم الوالدين دخل نمرة تيليفون صحيحة", "airport": "مطار", "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": "أحسن اختيار لطوموبيل مريحة بمسار مرن ونقط توقف. المطار هذا كيقدم دخول فيزا بهذا الثمن.", "You can upgrade price to may driver accept your order": "ممكن تزيد في الثمن باش السائق يقبل الطلب ديالك", "Change Route": "بدل المسار", "No Captain Accepted Your Order": "ماكاينش كابيتان قبل الطلب ديالك", "We are looking for a captain but the price may increase to let a captain accept": "كنقلبوا على كابيتان ولكن ممكن الثمن يزيد باش كابيتان يقبل", "No, I want to cancel this trip": "لا، بغيت نلغي المشوار هذا", // "Trip Cancelled. The cost of the trip will be added to your wallet.": // "الرحلة ملغية. هيتزاد الثمن ديال الرحلة في الجيب ديالك.", "Attention": "تنبيه", "Trip Cancelled. The cost of the trip will be deducted from your wallet.": "الرحلة ملغية. هيتخصم الثمن ديال الرحلة من الجيب ديالك.", "You will be charged for the cost of the driver coming to your location.": "غادي تتحسب عليك تكلفة مجيئ السائق للموقع ديالك.", "reject your order.": "رفض الطلب ديالك.", "Order Under Review": "الطلب قيد المراجعة", "is reviewing your order. They may need more information or a higher price.": "كيراجع الطلب ديالك. ممكن يحتاجو معلومات كثر أو ثمن أعلى.", // "The driver canceled your ride.": "السائق ألغى المشوار ديالك.", "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": "مالقيناش أي سواقين حتى دابا. فكر تزيد في ثمن المشوار باش العرض ديالك يكون جذاب كثر للسواقين.", "Increase Your Trip Fee (Optional)": "زيد في ثمن المشوار ديالك (اختياري)", "Vibration": "اهتزاز", "Resend code": "عاود صيفط الرمز", // "token change": "تبديل الرمز", "change device": "بدل الجهاز", "Device Change Detected": "تغير الجهاز تم الكشف عليه", "You can only use one device at a time. This device will now be set as your active device.": "ممكن تستعمل جهاز واحد فقط في المرة الوحدة. الجهاز هذا غادي يتعين دابا كجهازك النشط.", "Click here point": "ضغط هنا", "Are you want to change": "واش باغي تبدل؟", "by": "بواسطة", "Enter your complaint here": "كتب الشكاية ديالك هنا", "Please enter your complaint.": "الله يرحم الوالدين دخل الشكاية ديالك.", "Complaint data saved successfully": "بيانات الشكاية تسجلات بنجاح", "Trip Monitor": "مراقبة الرحلة", "Insert SOS Phone": "دخل نمرة طوارئ", "Add SOS Phone": "زيد نمرة طوارئ", // "Trip Monitoring": "مراقبة الرحلة", "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": "عزيزي،\n\n🚀 يلاه بديت رحلة مشوقة وبغيت نشارك معاك تفاصيل الرحلة ديالي والموقع الحالي ديالي في الوقت الفعلي! الله يرحم الوالدين نزل تطبيق Intaleq. غادي يسمح ليك تشوف تفاصيل الرحلة ديالي والموقع الأخير ديالي.\n\n👈 رابط التحميل:\nAndroid [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\niOS [https://getapp.cc/app/6458734951]\n\nكنتسنى نبقيك قريب مني خلال المغامرة ديالي!\n\nIntaleq،", "Send Intaleq app to him": "صيفط ليه تطبيق Intaleq", "No passenger found for the given phone number": "مالقيناش زبون بالنمرة التيليفون هادي", "No user found for the given phone number": "مالقيناش مستخدم بالنمرة التيليفون هادي", "This price is": "الثمن هذا", "Work": "خدمة", "Add Home": "زيد دار", "Notifications": "الإشعارات", "💳 Pay with Credit Card": "خلص بالبطاقة الائتمانية 💳", "⚠️ You need to choose an amount!": "⚠️ خاصك تختار مبلغ!", "💰 Pay with Wallet": "خلص من الجيب", "You must restart the app to change the language.": "خاصك تسد التطبيق وتعاود تفتحو باش اللغة تبدل.", "joined": "انضم", "Driver joined the channel": "السائق انضم للقناة", "Driver left the channel": "السائق غادر القناة", "Call Page": "صفحة الاتصال", // "Call End": "نهاية المكالمة", "Call Left": "مكالمات باقية", "To use Wallet charge it": "باش تستعمل الجيب شحنو", "We are searching for the nearest driver to you": "كنقلبوا ليك على أقرب سائق ليك", "Best choice for cities": "أحسن اختيار للمدن", "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": "رايح جاي: خدمة للذهاب والعودة لـ Intaleq مريح بين المدن، ساهلة وموثوقة.", "Rayeh Gai": "رايح جاي", "This trip is for women only": "المشوار هذا خاص بالعيالات فقط", "Total budgets on month": "إجمالي الميزانية الشهرية", "You have call from driver": "عندك مكالمة من السائق", "Comfort": "كمفورت", "Intaleq": "Intaleq", "Driver already has 2 trips within the specified period.": "السائق عندو ديجا جوج مشاوير خلال الفترة المحددة.", "The invitation was sent successfully": "الدعوة تصيفطات بنجاح", "Lady": "ليدي", "You should select your country": "خاصك تختار البلد ديالك", "Scooter": "سكوتر", "A trip with a prior reservation, allowing you to choose the best captains and cars.": "مشوار بحجز مسبق، تقدر تختار فيه أحسن الكباتن والطوموبيلات.", "Mishwar Vip": "مشوار VIP", "The driver waiting you in picked location .": "السائق كيتسناك في مكان الالتقاء اللي اختاريتي.", "About Us": "على التطبيق", "You can change the vibration feedback for all buttons": "ممكن تبدل اهتزاز الأزرار", "Most Secure Methods": "أكثر طرق الأمان", "In-App VOIP Calls": "مكالمات صوتية داخل التطبيق", "Recorded Trips for Safety": "تسجيل الرحلات للأمان", "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": "\nكما أننا كنعطيو الأولوية للأسعار المناسبة، وكنقدمو أسعار تنافسية باش المشاوير ديالك تكون في المتناول.", "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": "Intaleq هو تطبيق لمشاركة المشاوير مصمم مع وضع السلامة ديالك وتكلفة المشوار في الاعتبار. كنوصلوك بسواقين موثوقين في المنطقة ديالك، وكنضمنو ليك تجربة Intaleq مريحة وبلا ستريس.\n\nها بعض المميزات الأساسية اللي كتميزنا:", "Sign In by Apple": "تسجيل الدخول بـ Apple", "Sign In by Google": "تسجيل الدخول بـ Google", "How do I request a ride?": "كيفاش نطلب مشوار؟", "Step-by-step instructions on how to request a ride through the Intaleq app.": "تعليمات خطوة بخطوة على كيفية طلب مشوار من خلال تطبيق Intaleq.", "What types of vehicles are available?": "شنو أنواع الطوموبيلات اللي متوفرة؟", "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": "Intaleq كتقدم ليك اختيارات متنوعة ديال الطوموبيلات تناسب الاحتياجات ديالك، منها اقتصادي ومريح وفاخر. اختار اللي كيناسب الميزانية ديالك وعدد الركاب.", "How can I pay for my ride?": "كيفاش نخلص ثمن المشوار ديالي؟", "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": "Intaleq كتقدم ليك طرق دفع متعددة للراحة ديالك. اختار بين الدفع كاش ولا ببطاقة الائتمان/الخصم وأنت كتأكد المشوار.", "Can I cancel my ride?": "واش ممكن نلغي المشوار ديالي؟", "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Intaleq cancellation policy for details.": "أه، ممكن تلغي الرحلة ديالك في ظروف معينة (بحال قبل ما يتعين السائق). شوف سياسة الإلغاء في Intaleq باش تعرف التفاصيل.", "Driver Registration & Requirements": "تسجيل السائقين والمتطلبات", "How can I register as a driver?": "كيفاش ممكن نسجل كسائق؟", "What are the requirements to become a driver?": "شنو هما المتطلبات باش نخدم كسائق؟", "Visit our website or contact Intaleq support for information on driver registration and requirements.": "الله يرحم الوالدين زور الموقع الإلكتروني ديالنا ولا عيط لدعم Intaleq باش تعرف معلومات على تسجيل السائقين والمتطلبات.", "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": "Intaleq كتوفر ميزة الدردشة داخل التطبيق باش تسمح ليك تتواصل مع السائق ديالك أو الراكب ديالك أثناء الرحلة.", "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": "Intaleq كتعطي الأولوية للسلامة ديالك. كنقدمو مميزات بحال التحقق من هوية السائق، وتتبع الرحلات داخل التطبيق، وخيارات الاتصال في حالات الطوارئ.", "Frequently Questions": "الأسئلة الشائعة", "User does not exist.": "المستخدم ما كاينش.", "We need your phone number to contact you and to help you.": "محتاجين نمرة التيليفون ديالك باش نتصلو بيك ونعاونوك", "You will recieve code in sms message": "غادي توصلك رمز في رسالة SMS", "Please enter": "الله يرحم الوالدين دخل", "We need your phone number to contact you and to help you receive orders.": "محتاجين نمرة التيليفون ديالك باش نتصلو بيك ونعاونوك تستقبل الطلبات.", "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": "الاسم الكامل في السجل الجنائي ديالك ماكيطابقش مع الاسم اللي في رخصة السياقة ديالك. الله يرحم الوالدين تحقق وقدم الوثائق الصحيحة.", "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": "الرقم الوطني في رخصة السياقة ديالك ماكيطابقش مع الرقم اللي في وثيقة الهوية ديالك. الله يرحم الوالدين تحقق وقدم الوثائق الصحيحة.", "Capture an Image of Your Criminal Record": "صور السجل الجنائي ديالك", "IssueDate": "تاريخ الإصدار", "Capture an Image of Your car license front ": "صور الواجهة الأمامية لرخصة الطوموبيل ديالك", "Capture an Image of Your ID Document front": "صور الواجهة الأمامية لوثيقة الهوية ديالك", "NationalID": "الرقم القومي", "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": "ممكن تشارك تطبيق Intaleq مع صحابك وتربح مكافآت على المشاوير اللي كيديرو باستعمال الكود ديالك.", "FullName": "الاسم الكامل", "No invitation found yet!": "مازال مالقيناش دعوات!", "InspectionResult": "نتيجة الفحص", "Criminal Record": "السجل الجنائي", "Share App": "شارك التطبيق", "The email or phone number is already registered.": "البريد الإلكتروني أو نمرة التيليفون مسجلين ديجا.", "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": "باش تولي سائق ديال الركوب المشترك في تطبيق Intaleq، خاصك تحمل رخصة السياقة ديالك، وثيقة الهوية، ووثيقة تسجيل الطوموبيل. النظام ديال الذكاء الاصطناعي ديالنا غادي يراجع ويتحقق من صحة الوثائق ديالك في غضون 2-3 دقائق فقط. إلا الوثائق ديالك تقبلو، ممكن تبدا تخدم كسائق في تطبيق Intaleq. الله يرحم الوالدين لاحظ، تقديم وثائق مزورة كيتعتبر جريمة خطيرة وممكن يترتب عليها إنهاء الحساب فورا وعواقب قانونية.", "Documents check": "فحص الوثائق", "Driver's License": "رخصة السياقة", "for your first registration!": "للتسجيل الأول ديالك!", "Get it Now!": "حصل عليه دابا!", "before": "قبل", "Code not approved": "الرمز ما مقبولش", "3000 LE": "3000 جنيه مصري", "Do you have an invitation code from another driver?": "واش عندك كود دعوة من سائق آخر؟", "Paste the code here": "لصق الكود هنا", "No, I don't have a code": "لا، معنديش كود", "Code approved": "الكود مقبول", "Install our app:": "نزل التطبيق ديالنا:", "Invite another driver and both get a gift after he completes 100 trips!": "عيط لصاحبك باش يولي سائق و بجوج تربحو هدية من بعد ما يسالي 100 مشوار!", "Invite": "دعوة", "Are you sure?": "متأكد؟", "This will delete all recorded files from your device.": "هذا غادي يمسح كل الملفات المسجلة من الجهاز ديالك.", "Select a file": "اختار ملف", "Select a File": "اختار ملف", "Delete": "مسح", "attach audio of complain": "رفق صوت الشكاية", "Phone Number Check": "فحص نمرة التيليفون", "Drivers received orders": "السائقون استقبلو الطلبات", "No audio files recorded.": "ماكاينش ملفات صوتية مسجلة.", "This is for delivery or a motorcycle.": "هذا خاص بالتوصيل ولا الموطور.", // "We will look for a new driver.\nPlease wait.": // "غادي نقلبو على سائق جديد.\nالله يرحم الوالدين تسنى", "Intaleq Reminder": "تذكير Intaleq", "It's time to check the Intaleq app!": "الوقت باش تشوف تطبيق Intaleq!", "you must insert token code": "خاصك تدخل رمز التحقق.", "Something went wrong. Please try again.": "وقع شي مشكل. الله يرحم الوالدين حاول مرة أخرى.", "Trip Details": "تفاصيل الرحلة", "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": "السياق ما كيوفرش تفاصيل الشكاية، داكشي علاش مايمكنش نقدم حل لهذا المشكل. الله يرحم الوالدين قدم المعلومات الضرورية، وغادي نكون سعيد نعاونك", "Submit Your Complaint": "صيفط الشكاية ديالك", "Date": "التاريخ", "Price": "الثمن", "Status": "الحالة", "Choose from contact": "اختار من جهات الاتصال", "attach correct audio": "رفق صوت الشكاية الصحيح", "be sure": "تأكد", "Audio uploaded successfully.": "الصوت ترفع بنجاح", "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": "مثالي للركاب اللي كيقلبوا على أحدث موديلات الطوموبيلات مع حرية اختيار أي طريق بغاو", "Share this code with your friends and earn rewards when they use it!": "شارك الكود هذا مع صحابك وربح مكافآت فاش كيستعملوه!", "Enter phone": "دخل نمرة التيليفون", "You deserve the gift": "أنت كتستحق الهدية", "complete, you can claim your gift": " ممكن تطلب الهدية ديالك", "When": "فاش يسالي", "Enter driver's phone": "دخل نمرة تيليفون السائق", "Send Invite": "صيفط الدعوة", "Show Invitations": "عرض الدعوات", "License Type": "نوع الرخصة", "National Number": "الرقم الوطني", "Name (Arabic)": "الاسم بالعربية", "Name (English)": "الاسم بالإنجليزية", "Address": "العنوان", "Issue Date": "تاريخ الإصدار", "Expiry Date": "تاريخ الانتهاء", "License Categories": "فئات الرخصة", "driver_license": "رخصة السياقة", "Capture an Image of Your Driver License": "صور رخصة السياقة ديالك", "ID Documents Back": "الوجه الخلفي لوثائق الهوية", "National ID": "البطاقة الوطنية", "Occupation": "المهنة", "Gender": "الجنس", "Religion": "الدين", "Marital Status": "الحالة الاجتماعية", "Full Name (Marital)": "الاسم الكامل (حسب الحالة الاجتماعية)", "Expiration Date": "تاريخ الانتهاء", "Capture an Image of Your ID Document Back": "صور الوجه الخلفي لوثيقة الهوية ديالك", "ID Documents Front": "الوجه الأمامي لوثائق الهوية", "First Name": "الاسم الأول", "CardID": "رقم البطاقة", "Vehicle Details Front": "تفاصيل المركبة ‏الوجه الأمامي", "Plate Number": "نمرة اللوحة", "Owner Name": "اسم المالك", "Vehicle Details Back": "تفاصيل المركبة ‏الوجه الخلفي", "Make": "المصنع", "Model": "الطراز", "Year": "السنة", "Chassis": "الشاسي", "Color": "اللون", "Displacement": "السعة", "Fuel": "الوقود", "Tax Expiry Date": "تاريخ انتهاء الضريبة", "Inspection Date": "تاريخ الفحص", "Capture an Image of Your car license back": "صور الوجه الخلفي لرخصة الطوموبيل ديالك", "Capture an Image of Your Driver’s License": "صور رخصة السياقة ديالك", "Sign in with Google for easier email and name entry": "تسجل الدخول بجوجل باش تسجل البريد الإلكتروني والاسم ديالك بسهولة", "You will choose allow all the time to be ready receive orders": "غادي تختار السماح ديما باش تكون مستعد تستقبل الطلبات", "Welcome to Intaleq!": "مرحبا بك في Intaleq!", "Get to your destination quickly and easily.": "وصل للوجهة ديالك بسرعة وسهولة.", "Enjoy a safe and comfortable ride.": "استمتع برحلة آمنة ومريحة.", "Choose Language": "اختار اللغة", "Login": "تسجيل الدخول", "Pay with Wallet": "خلص بالجيب", "Invalid MPIN": "رمز PIN غير صحيح", "Invalid OTP": "كود التحقق خاطئ", // "Driver Accepted the Ride for You": "السائق قبل الرحلة ليك", "Enter your email address": "دخل عنوان البريد الإلكتروني ديالك", "Please enter Your Email.": "الله يرحم الوالدين دخل البريد الإلكتروني ديالك.", "Enter your phone number": "دخل نمرة التيليفون ديالك", "Please enter your phone number.": "الله يرحم الوالدين دخل نمرة التيليفون ديالك.", "Please enter Your Password.": "الله يرحم الوالدين دخل كلمة السر ديالك.", "if you dont have account": "إلا ماكانش عندك حساب", "Register": "تسجيل", "Accept Ride's Terms & Review Privacy Notice": "قبل شروط الاستخدام وراجع إشعار الخصوصية", "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": "بالاختيار ديال 'موافق' لتحت، راجعت ووافقت على شروط الاستخدام وكنقر بإشعار الخصوصية. عندي على الأقل 18 عام.", "I Agree": "موافق", // "Finish Monitor": " إنهاء مراقبة الرحلة ", "First name": "الاسم الشخصي", "Enter your first name": "دخل اسمك الشخصي", "Please enter your first name.": "الله يرحم الوالدين دخل اسمك الشخصي.", "Last name": "الاسم العائلي", "Enter your last name": "دخل اسمك العائلي", "Please enter your last name.": "الله يرحم الوالدين دخل اسمك العائلي.", "City": "المدينة", "Please enter your City.": "الله يرحم الوالدين دخل اسم المدينة ديالك.", "Male": "ذكر", "Female": "أنثى", "Verify Email": "تأكيد البريد الإلكتروني", "We sent 5 digit to your Email provided": "صيفطنا رمز من 5 أرقام للبريد الإلكتروني اللي عطيتي", "5 digit": "5 أرقام", "Send Verification Code": "صيفط رمز التحقق", "Your Ride Duration is ": "المدة ديال الرحلة ديالك هي ", "You will be thier in": "غادي تكون تما في", "You trip distance is": "المسافة ديال الرحلة ديالك هي", "Fee is": "الرسوم هي", "From : ": "من: ", "To : ": "إلى: ", "Add Promo": "زيد برومو", "Confirm Selection": "أكد الاختيار", "distance is": "المسافة هي", "Intaleq LLC": "شركة Intaleq", "Egypt's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": "أول خدمة مشاركة الركوب في مصر، مطورة بكل فخر من طرف مالكين عرب ومحليين. كنعطيو الأولوية نكونو قراب ليك - سواء كنتي راكب قيم ولا كابتن مخلص.", "Why Choose Intaleq?": "علاش تختار Intaleq؟", "Closest to You": "الأقرب ليك", "We connect you with the nearest drivers for faster pickups and quicker journeys.": "كنربطوك بأقرب السائقين باش يكون الاستلام أسرع والرحلات أقصر.", "Uncompromising Security": "أعلى مستويات الأمان", "Lady Captains Available": "كابتانات متوفرات", "Recorded Trips (Voice & AI Analysis)": "الرحلات المسجلة (تحليل صوتي بالذكاء الاصطناعي)", "Fastest Complaint Response": "أسرع استجابة للشكايات", "Our dedicated customer service team ensures swift resolution of any issues.": "فريق خدمة العملاء ديالنا مكلف كيضمن حل سريع لأي مشكل.", "Affordable for Everyone": "في المتناول ديال كلشي", "Frequently Asked Questions": "الأسئلة الشائعة", "Getting Started": "البدء", "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": "حل تطبيق Intaleq، دخل الوجهة ديالك، وضغط على \"طلب رحلة\". التطبيق غادي يوصلك بأقرب سائق.", "Vehicle Options": "خيارات المركبات", "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": "Intaleq كتوفر مجموعة متنوعة من الخيارات منها اقتصادي، مريح، وفاخر باش تناسب الاحتياجات والميزانية ديالك.", "Payments": "المدفوعات", "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": "ممكن تخلص ثمن المشوار ديالك كاش ولا ببطاقة الائتمان/الخصم. ممكن تختار طريقة الدفع اللي كتفضل قبل ما تأكد المشوار ديالك.", "Ride Management": "إدارة الرحلات", "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": "أه، ممكن تلغي المشوار ديالك، ولكن الله يرحم الوالدين لاحظ باللي رسوم الإلغاء ممكن تطبق على حساب شحال قبل لغيتي المشوار.", "For Drivers": "للسواقين", // "Driver Registration & Requirements": "تسجيل ومتطلبات السواقين", "Driver Registration": "تسجيل السائق", "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": "باش تسجل كسائق ولا تعرف المتطلبات، الله يرحم الوالدين زور الموقع الإلكتروني ديالنا ولا اتصل بدعم Intaleq مباشرةً.", "Visit Website/Contact Support": "زور الموقع/اتصل بالدعم", "Close": "سد", "We are searching for the nearest driver": "كنقلبوا على أقرب سائق", "Communication": "التواصل", "How do I communicate with the other party (passenger/driver)?": "كيفاش نتواصل مع الطرف الآخر (الزبون/السائق)؟", "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": "ممكن تتواصل مع السائق ديالك ولا الراكب ديالك من خلال ميزة الشات داخل التطبيق فاش كيتأكد المشوار.", "Safety & Security": "الأمان والحماية", "What safety measures does Intaleq offer?": "شنو هما إجراءات الأمان اللي كيقدم Intaleq؟", "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": "Intaleq كيقدم مميزات أمان متنوعة منها التحقق من السائق، تتبع الرحلة داخل التطبيق، خيارات الاتصال في حالات الطوارئ، وإمكانية مشاركة حالة الرحلة ديالك مع جهات اتصال موثوقة.", "Enjoy competitive prices across all trip options, making travel accessible.": "استمتع بأسعار تنافسية على كل خيارات الرحلات، وهذا كيخلي Intaleq سهل الوصول ليه.", "Variety of Trip Choices": "خيارات رحلات متنوعة", "Choose the trip option that perfectly suits your needs and preferences.": "اختار خيار الرحلة اللي كيناسب الاحتياجات والتفضيلات ديالك بالضبط.", "Your Choice, Our Priority": "الاختيار ديالك هو الأولوية ديالنا", "Because we are near, you have the flexibility to choose the ride that works best for you.": "حيت احنا قراب، عندك المرونة تختار المشوار اللي كيناسبك.", "duration is": "المدة هي", "Setting": "الإعدادات", "Find answers to common questions": "لقا أجوبة للأسئلة الشائعة", "I don't need a ride anymore": "مابغيتش مشوار آخر", "I was just trying the application": "كنت غير كنجرب التطبيق", "No driver accepted my request": "ماكاينش سائق قبل الطلب ديالي", "I added the wrong pick-up/drop-off location": "زديت موقع الالتقاء/الوصول غالط", "I don't have a reason": "ما عندي حتى سبب", "Other": "آخر", "Can we know why you want to cancel Ride ?": "واش ممكن نعرفو علاش باغي تلغي المشوار؟", "Cancel Ride": "إلغاء المشوار", "Add Payment Method": "زيد طريقة الدفع", "Your Wallet balance is ": "الرصيد ديال الجيب ديالك هو ", "Ride Wallet": "جيب الرحلة", "Payment Method": "طريقة الدفع", "Type here Place": "كتب هنا المكان", "Are You sure to ride to": "متأكد باللي باغي تمشي لـ", "Confirm": "أكد", // "Back": "رجوع", "You are Delete": "أنت غادي تمسح", "Deleted": "تمسح", "You Dont Have Any places yet !": "مازال ماعندك حتى أماكن!", // "Favorite Places": "الأماكن المفضلة", "From : Current Location": "من: الموقع الحالي", // "Where to": "إلى أين", "Profile": "الملف الشخصي", "Home": "الصفحة الرئيسية", "My Cared": "البطاقات ديالي", "Add Card": "زيد بطاقة", "Add Credit Card": "زيد بطاقة ائتمان", "Please enter the cardholder name": "الله يرحم الوالدين دخل اسم صاحب البطاقة", "Please enter the expiry date": "الله يرحم الوالدين دخل تاريخ الانتهاء", "Please enter the CVV code": "الله يرحم الوالدين دخل رمز CVV", "Go To Favorite Places": "سير للأماكن المفضلة", "Go to this Target": "سير لهذا الهدف", "My Profile": "الملف الشخصي ديالي", "Sign Out": "تسجيل الخروج", "Are you want to go to this site": "واش باغي تمشي لهذا الموقع", "MyLocation": "الموقع ديالي", "my location": "الموقع ديالي", "Target": "هدف", "Update": "تحديث", "You Should choose rate figure": "خاصك تختار تقييم", "Login Captin": "تسجيل دخول الكابتن", "Register Captin": "تسجيل كابتن جديد", "Send Verfication Code": "صيفط رمز التحقق", "KM": "كم", "End Ride": "سالي الرحلة", "Minute": "دقيقة", "Go to passenger Location now": "سير لموقع الزبون دابا", "Duration of the Ride is ": "المدة ديال الرحلة هي ", "Distance of the Ride is ": "المسافة ديال الرحلة هي", "Name of the Passenger is ": "اسم الزبون هو", "Hello this is Captain": "مرحبا هذا الكابتن", "Start the Ride": "بدا الرحلة", "Please Wait If passenger want To Cancel!": "الله يرحم الوالدين تسنى إلا الزبون بغا يلغي!", "Total Duration:": "المدة الإجمالية:", "Active Duration:": "المدة الفعلية:", "Waiting for Captin ...": "كنتسناو الكابتن...", "Age is ": "العمر هو", "Rating is ": "التقييم هو", " to arrive you.": "باش يوصل عندك.", "Tariff": "تعريفة", "Settings": "الإعدادات", "Feed Back": "اقتراحات", "Please enter a valid 16-digit card number": "الله يرحم الوالدين دخل رقم بطاقة صحيح مكون من 16 رقم", "Add Phone": "زيد تيليفون", "Please enter a phone number": "الله يرحم الوالدين دخل نمرة تيليفون", "You dont Add Emergency Phone Yet!": "مازال مازتي نمرة تيليفون طوارئ!", "You will arrive to your destination after ": "غادي توصل للوجهة ديالك من بعد", "You can cancel Ride now": "ممكن تلغي المشوار دابا", "You Can cancel Ride After Captain did not come in the time": "ممكن تلغي المشوار من بعد ما الكابتن ما يوصلش في الوقت المحدد", "If you in Car Now. Press Start The Ride": "إلا كنتي في الطوموبيل دابا. ضغط على بدا الرحلة", "You Dont Have Any amount in": "ماعندك حتى مبلغ في", "Wallet!": "الجيب!", "You Have": "عندك", "Save Credit Card": "حفظ بطاقة الائتمان", "Show Promos": "عرض العروض الترويجية", "10 and get 4% discount": "10 وربح خصم 4%", "20 and get 6% discount": "20 وربح خصم 6%", "40 and get 8% discount": "40 وربح خصم 8%", "100 and get 11% discount": "100 وربح خصم 11%", "Pay with Your PayPal": "خلص بـ PayPal ديالك", "You will choose one of above !": "غادي تختار وحدة من هادو لفوق!", "Delete My Account": "مسح الحساب ديالي", "Edit Profile": "تعديل الملف الشخصي", "Name": "الاسم", "Update Gender": "تحديث الجنس", "Education": "التعليم", "Update Education": "تحديث التعليم", "Employment Type": "نوع التوظيف", "SOS Phone": "تيليفون الطوارئ", "High School Diploma": "شهادة الباكالوريا", "Associate Degree": "دبلوم جامعي", "Bachelor's Degree": "إجازة جامعية", "Master's Degree": "ماستر", "Doctoral Degree": "دكتوراه", "Copy this Promo to use it in your Ride!": "نسخ العرض هذا باش تستعملو في المشوار ديالك!", "To change some Settings": "باش تبدل شي إعدادات", "Order Request Page": "صفحة طلب الطلب", "Rouats of Trip": "طرق الرحلة", "Passenger Name is ": "اسم الراكب هو ", "Total From Passenger is ": "المبلغ الإجمالي من الراكب هو ", "Duration To Passenger is ": "المدة باش توصل للراكب هي ", "Distance To Passenger is ": "المسافة باش توصل للراكب هي ", "Total For You is ": "المبلغ الإجمالي ليك هو ", "Distance is ": "المسافة هي ", " KM": " كيلومتر", "Duration of Trip is ": "المدة ديال الرحلة هي ", " Minutes": " دقائق", "Apply Order": "قبل الطلب", "Refuse Order": "رفض الطلب", "Rate Captain": "قيم الكابتن", "Enter your Note": "دخل الملاحظة ديالك", "Type something...": "كتب شي حاجة...", "Submit rating": "صيفط التقييم", "Rate Passenger": "قيم الراكب", "Ride Summary": "ملخص الرحلة", "welcome_message": "مرحبا بك في Intaleq!", "app_description": "Intaleq هو تطبيق موثوق وآمن وسهل الوصول ليه لمشاركة الركوب.", "get_to_destination": "سير للوجهة ديالك بسرعة وسهولة.", "get_a_ride": "مع Intaleq، ممكن تحصل على رحلة للوجهة ديالك في دقائق.", "safe_and_comfortable": "استمتع برحلة آمنة ومريحة.", "committed_to_safety": "Intaleq ملتزمة بالسلامة، وكل الكباتن عندنا كيتفحصو مزيان وكيديرو ليهم فحص الخلفية.", // "Driver Applied the Ride for You": "السائق طلب المشوار ليك", // "Show latest promo": "أظهر آخر عرض ترويجي", // "Cancel Trip": "إلغاء الرحلة", // "Passenger Cancel Trip": "الزبون ألغى الرحلة", // "Accepted Ride": "الرحلة مقبولة", "your ride is Accepted": "الرحلة ديالك مقبولة", // "Trip is Begin": "الرحلة بدات", "Driver is waiting at pickup.": "السائق كيتسناك في نقطة الاستلام.", "Driver is on the way": "السائق في الطريق", "Contact Options": "خيارات الاتصال", "Send a custom message": "صيفط رسالة مخصصة", "Type your message": "كتب الرسالة ديالك", // "Hi ,I will go now": "مرحبا، أنا غادي نتحرك دابا", // "Passenger come to you": "الزبون جاي عندك", // "Hi ,I Arrive your site": "مرحبا، وصلت للمكان ديالك", // "Driver Finish Trip": "السائق سالا الرحلة", // "you will pay to Driver": "غادي تخلص السائق", // "Driver Cancel Your Trip": "السائق ألغى الرحلة ديالك", // "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": // "غادي تخلص السائق تكلفة الوقت ديالو، شوف الجيب ديالك في Intaleq", // "I will go now": "أنا غادي نتحرك دابا", "You Have Tips": "عندك زيادة فلوس", " tips\nTotal is": " زيادة مال\nالمجموع هو", // "No,I want": "لا، بغيت", "Your fee is ": "الأجرة ديالك هي ", // "Do you want to pay Tips for this Driver": // "واش باغي تخلص البقشيش للسائق هذا؟", "Tip is ": " مبلغ البقشيش هو", "Are you want to wait drivers to accept your order": "واش باغي تسنى حتى السائقين يقبلو الطلب ديالك؟", "This price is fixed even if the route changes for the driver.": "الثمن هذا ثابت حتى إلا المسار تبدل للسائق.", "The price may increase if the route changes.": "احتمالية زيادة الثمن إلى المسار تبدل.", "The captain is responsible for the route.": "الكابتن مسؤول على المسار", "We are search for nearst driver": "كنقلبو على أقرب سائق", "Your order is being prepared": "جاري تجهيز الطلب ديالك", "The drivers are reviewing your request": "السائقين كيدرسو الطلب ديالك", "Your order sent to drivers": "الطلب ديالك تصيفط للسائقين", "You can call or record audio of this trip": "ممكن تعيط ولا تسجل صوت للرحلة هادي", "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": "الرحلة بدات! براحتك تعيط لأرقام الطوارئ، شارك الرحلة ديالك، ولا فعل التسجيل الصوتي للرحلة", // "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": // "الرجاء التأكد من جميع أغراضك الشخصية وإضافة باقي الأجرة في الجيب ديالك قبل النزول. شكرا لاختيارك تطبيق Intaleq", // "Don’t forget your personal belongings.": "متنساش متعلقاتك الشخصية.", "Camera Access Denied.": "الوصول للكاميرا مرفوض.", "Open Settings": "فتح الإعدادات", "GPS Required Allow !.": "تفعيل GPS مطلوب!", "Your Account is Deleted": "الحساب ديالك تمسح", "Are you sure to delete your account?": "متأكد باللي باغي تمسح الحساب ديالك؟", "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": "البيانات ديالك غادي يتمسحو من بعد أسبوعين\nومغاديش تقدر ترجع تستعمل التطبيق من بعد شهر", "Enter Your First Name": "دخل اسمك الشخصي", "Are you Sure to LogOut?": "متأكد باللي باغي تسجل الخروج؟", "Email Wrong": "البريد الإلكتروني غالط", "Email you inserted is Wrong.": "البريد الإلكتروني اللي دخلتي غالط.", "You have finished all times ": "ساليتي كل المحاولات", "if you want help you can email us here": "إلا بغيتي مساعدة ممكن تصيفط لينا إيميل هنا", "Thanks": "شكرا", "Email Us": "صيفط لينا إيميل", "I cant register in your app in face detection ": "ماعرفتش نسجل في التطبيق ديالكم بسبب كشف الوجه", "Hi": "مرحبا", "No face detected": "ماكاينش وجه مكشوف", "Image detecting result is ": "النتيجة ديال كشف الصورة هي", "from 3 times Take Attention": "من 3 مرات رد البال", "Be sure for take accurate images please\nYou have": "الله يرحم الوالدين تأكد تلتقط صور دقيقة\nعندك", "image verified": "الصورة مأكدة", "Next": "التالي", "There is no help Question here": "ماكاينش أسئلة مساعدة هنا", "You dont have Points": "ماعندكش نقاط", "You Are Stopped For this Day !": "توقفتي هذا النهار!", "You must be charge your Account": "خاصك تعاود تشحن رصيد النقاط", "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": "رفضتي 3 رحلات اليوم هذا هو السبب\nنتلاقاو غدا!", "Recharge my Account": "خلص رسوم من الحساب ديالي", "Ok , See you Tomorrow": "واخا، نتلاقاو غدا", "You are Stopped": "توقفتي", "Connected": "متصل", "Not Connected": "غير متصل", "Your are far from passenger location": "أنت بعيد على مكان الراكب", "go to your passenger location before\nPassenger cancel trip": "سير لمكان الراكب قبل ما\nالراكب يلغي الرحلة", "You will get cost of your work for this trip": "غادي تاخد تكاليف الخدمة ديالك على الرحلة هادي", " in your wallet": "في الجيب ديالك", "you gain": "ربحتي", "Order Cancelled by Passenger": "الطلب تلغى من عند الراكب", "Success": "نجاح", "Feedback data saved successfully": "بيانات التعليقات تسجلات بنجاح", "No Promo for today .": "ماكاينش عروض ترويجية اليوم.", "Select your destination": "اختار الوجهة ديالك", "Search for your Start point": "قلب على نقطة الانطلاق ديالك", "Search for waypoint": "قلب على النقطة الآلية", "Current Location": "الموقع الحالي", "Add Location 1": "زيد الموقع 1", "You must Verify email !.": "خاصك تأكد البريد الإلكتروني!", "Cropper": "القاصة", "Saved Sucssefully": "تسجل بنجاح", "Select Date": "اختار التاريخ", "Birth Date": "تاريخ الميلاد", "Ok": "موافق", "the 500 points equal 30 JOD": "500 نقطة كتساوي 30 دينار أردني", "the 500 points equal 30 JOD for you \nSo go and gain your money": "500 نقطة كتساوي 30 دينار أردني ليك\nفستاهل فلوسك وربح النقاط", "token updated": "الرمز تحدت", "Add Location 2": "زيد الموقع 2", "Add Location 3": "زيد الموقع 3", "Add Location 4": "زيد الموقع 4", "Waiting for your location": "كنتسناو الموقع ديالك", "Search for your destination": "قلب على الوجهة ديالك", "Hi! This is": "مرحبا! أنا", " I am using": " أنا كنستعمل", " to ride with": " باش نركب مع", " as the driver.": " كسائق.", "is driving a ": "كيسوق", " with license plate ": "بلوحة ترخيص", " I am currently located at ": "أنا دابا كاين في", "Please go to Car now ": "الله يرحم الوالدين سير للطوموبيل دابا", "You will receive a code in WhatsApp Messenger": "غادي توصل برمز في واتساب ماسنجر", "If you need assistance, contact us": "إلا محتاج مساعدة، تواصل معنا", "Promo Ended": "العرض سالا", "Enter the promo code and get": "دخل رمز الترويج وربح", "DISCOUNT": "خصم", "No wallet record found": "ماكاينش سجل الجيب", "for": "لمدة", "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": "Intaleq هو أكثر تطبيق آمن لمشاركة الركوب وكيدخل مميزات بزاف للكباتن والركاب بجوج. كنقدمو أقل نسبة عمولة وهي 8% فقط، وهذا كيضمن ليك تاخد أحسن قيمة للمشاوير ديالك. التطبيق ديالنا فيه تأمين لأحسن الكباتن، صيانة دورية للطوموبيلات مع أحسن المهندسين، وخدمات على الطريق لضمان تجربة محترمة وعالية الجودة لكل المستخدمين.", "You can contact us during working hours from 12:00 - 19:00.": "ممكن تعيط لينا في مواعيد العمل من 12:00 - 19:00.", "Choose a contact option": "اختار طريقة الاتصال", "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": "مواعيد العمل من 12:00 - 19:00.\nممكن تصيفط رسالة واتساب ولا إيميل.", "Promo code copied to clipboard!": "رمز العرض تنساخ للحافظة!", "Copy Code": "نسخ الرمز", "Your invite code was successfully applied!": "رمز الدعوة ديالك طبق بنجاح!", "Payment Options": "خيارات الدفع", "wait 1 minute to receive message": "تسنى دقيقة واحدة باش توصلك الرسالة", "Promo Copied!": "العرض تنساخ!", "You have copied the promo code.": "نسختي رمز العرض.", "Valid Until:": "صالح حتى:", "Select Payment Amount": "اختار مبلغ الدفع", "The promotion period has ended.": "فترة العرض سالات.", "Promo Code Accepted": "كود العرض مقبول", "Tap on the promo code to copy it!": "ضغط على رمز العرض باش تنسخو!", "Lowest Price Achieved": "أقل ثمن تحقق", "Cannot apply further discounts.": "مايمكنش نطبقو تخفيضات أخرى.", "Promo Already Used": "كود العرض مستعمل ديجا", "Invitation Used": "الدعوة مستعملة", "You have already used this promo code.": "استعملتي الكود هذا ديجا.", "Insert Your Promo Code": "دخل كود العرض ديالك", "Enter promo code here": "دخل كود العرض هنا", "Please enter a valid promo code": "الله يرحم الوالدين دخل كود عرض صحيح", "Awfar Car": "أوفر كار", "Old and affordable, perfect for budget rides.": "طوموبيل قديمة وبثمن معقول، مثالية للمشاوير الاقتصادية.", " If you need to reach me, please contact the driver directly at": "إلا كنتي محتاج توصل ليا، الله يرحم الوالدين تواصل مع السائق مباشرة على", "No Car or Driver Found in your area.": "مالقيناش لا طوموبيل لا سائق في المنطقة ديالك.", "Please Try anther time ": "الله يرحم الوالدين حاول وقت آخر", "There no Driver Aplly your order sorry for that ": "ماكاينش سائق قبل الطلب ديالك كنتأسفوا على هذا", "Trip Cancelled": "الرحلة ملغية", "The Driver Will be in your location soon .": "السائق غادي يكون في الموقع ديالك قريبًا.", "The distance less than 500 meter.": "المسافة قل من 500 متر.", "Promo End !": "العرض سالا!", "There is no notification yet": "ماكاينش إشعارات حتى دابا", "Use Touch ID or Face ID to confirm payment": "استعمل Touch ID ولا Face ID باش تأكد الدفع", "Contact us for any questions on your order.": "تواصل معنا إلا عندك أي استفسارات بخصوص الطلب ديالك.", "Pyament Cancelled .": "الدفع ملغي.", "type here": "كتب هنا", "Scan Driver License": "مسح رخصة السياقة", "Please put your licence in these border": "الله يرحم الوالدين حط الرخصة ديالك في هذا الإطار", "Camera not initialized yet": "الكاميرا مازال ماخدماتش", "Take Image": "صور", "AI Page": "صفحة الذكاء الاصطناعي", "Take Picture Of ID Card": "صور بطاقة الهوية", "Take Picture Of Driver License Card": "صور بطاقة رخصة السياقة", "We are process picture please wait ": "كنعالج الصورة الله يرحم الوالدين تسنى", "There is no data yet.": "ماكاينش بيانات حتى دابا.", "Name :": "الاسم:", "Drivers License Class: ": "فئة رخصة السياقة:", "Document Number: ": "رقم الوثيقة:", "Address: ": "العنوان:", "Height: ": "الطول:", "Expiry Date: ": "تاريخ الانتهاء:", "Date of Birth: ": "تاريخ الميلاد:", "You can\'t continue with us .\nYou should renew Driver license": "مايمكنش تكمل معنا. خاصك تجدد رخصة السياقة", "Detect Your Face ": "كشف الوجه ديالك", "Go to next step\nscan Car License.": "سير للخطوة اللي جاية\nومسح رخصة الطوموبيل.", "Name in arabic": "الاسم بالعربية", "Drivers License Class": "فئة رخصة السياقة", "Date of Birth": "تاريخ الميلاد", // "Select date and time of trip": "اختار تاريخ ووقت الرحلة", "Selected Date": "التاريخ المحدد", "Select Time": "اختار الوقت", "Selected Time": "الوقت المحدد", // "OK": "موافق", // "Cancel": "إلغاء", "Selected Date and Time": "التاريخ والوقت المحددين", "Lets check Car license ": "يلا نفحصو رخصة الطوموبيل", "Car": "الطوموبيل", "Plate": "اللوحة ديال الطوموبيل", "N/A": "غير متوفر", "Rides": "الرحلات", "Age": "العمر", // "Education": "التعليم", // "Color": "اللون", // "Displacement": "السعة", // "Fuel": "الوقود", "Selected driver": "السائق اللي اختاريتي", "Lets check License Back Face": "يلا نفحصو الوجه الخلفي للرخصة", "Car License Card": "بطاقة رخصة الطوموبيل", "No image selected yet": "مازال ما اختاريتي صورة", "Made :": "الصنع:", "model :": "الموديل:", "VIN :": "رقم الشاسي:", "year :": "السنة:", "ُExpire Date": "تاريخ الانتهاء", "Login Driver": "تسجيل دخول السائق", "Password must br at least 6 character.": "كلمة السر خاصها تكون 6 حروف على الأقل.", "if you don\'t have account": "إلا ماكانش عندك حساب", "Here recorded trips audio": "هنا تسجيلات صوتية ديال الرحلات", "Register as Driver": "تسجيل كسائق", // "Privacy Notice": "إخطار الخصوصية", "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": "بالاختيار ديال 'موافق' لتحت، راجعت ووافقت على شروط الاستخدام وكنقر بـ", ". I am at least 18 years of age.": ". أنا عمري 18 عام على الأقل.", "Log Out Page": "صفحة تسجيل الخروج", "Log Off": "تسجيل الخروج", "Register Driver": "تسجيل سائق جديد", "Verify Email For Driver": "تأكيد البريد الإلكتروني للسائق", "Admin DashBoard": "لوحة تحكم المدير", "Your name": "الاسم ديالك", "your ride is applied": "الطلب ديالك تقبل", "Your password": "كلمة السر ديالك", "H and": "ساعة و", "LE": "جنيه", "JOD": "دينار", "m": "دقيقة", "We search nearst Driver to you": "كنقلبو على أقرب سائق ليك", "please wait till driver accept your order": "الله يرحم الوالدين تسنى حتى السائق يقبل الطلب ديالك", "No accepted orders? Try raising your trip fee to attract riders.": "ماكاينش طلبات مقبولة؟ حاول تطلع في أجرة المشوار باش تجذب الركاب.", "You should select one": "خاصك تختار واحد", "The driver accept your order for": "السائق قبل الطلب ديالك بـ", "Increase Fee": "زيد في الأجرة", "No, thanks": "لا، شكرا", "The driver on your way": "الكابتن في الطريق ليك", "Total price from ": "الثمن الإجمالي من ", "Order Details Intaleq": "طلب سريع", // "Order Applied": "الطلب مقبول", "accepted your order": "قبل الطلب ديالك", // "We regret to inform you that another driver has accepted this order.": // "كنتأسفوا نبلغوك باللي سائق آخر قبل هذا الطلب", "Selected file:": "الملف المختار:", "Your trip cost is": "تكلفة الرحلة ديالك هي", "this will delete all files from your device": "المسح هذا غادي يمسح كل الملفات من الجهاز ديالك", " in your": "في الجيب ديالك", "Exclusive offers and discounts always with the Intaleq app": "عروض وخصومات حصرية ديما مع تطبيق Intaleq", // "Please go to Car Driver": "الرجاء التوجه إلى سائق السيارة", " wallet due to a previous trip.": "بسبب رحلة سابقة.", "Submit Question": "طرح سؤال", "Please enter your Question.": "الله يرحم الوالدين دخل السؤال ديالك.", "Help Details": "تفاصيل المساعدة", "No trip yet found": "مازال ما تحجزات حتى رحلة", "No Response yet.": "مازال ماكاينش رد.", " You Earn today is ": "اللي ربحتي اليوم هو", " You Have in": "عندك في", "Total points is ": "إجمالي النقاط هو", "Total Connection Duration:": "إجمالي مدة الاتصال:", " H and": "ساعة و", "Passenger name : ": "اسم الراكب", "Cost Of Trip IS ": "تكلفة الرحلة هي", "Arrival time": "وقت الوصول", "arrival time to reach your point": "الوقت المتوقع للوصول للوجهة ديالك", "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": "بالنسبة لمشاوير السرعة والسكوتر، الثمن كيتحسب تلقائيا. أما مشاوير الراحة، فالثمن كيكون على حساب الوقت والمسافة.", "Hello this is Driver": "مرحبا هذا السائق", "Is the Passenger in your Car ?": "واش الراكب معاك في الطوموبيل؟", "Please wait for the passenger to enter the car before starting the trip.": "الله يرحم الوالدين تسنى حتى الراكب يركب الطوموبيل قبل ما تبدا المشوار.", "No ,still Waiting.": "لا، مازال كنتسنى.", "I arrive you": "أنا وصلت عندك", "I Arrive your site": "أنا وصلت للمكان ديالك", "You are not in near to passenger location": "أنت ماشي قريب من مكان الراكب", "please go to picker location exactly": "الله يرحم الوالدين سير لموقع الراكب بالضبط", "You Can Cancel Trip And get Cost of Trip From": "ممكن تلغي المشوار وتاخد التكلفة من", "Are you sure to cancel?": "متأكد باللي باغي تلغي؟", // "Yes": "أيوة", "Insert Emergincy Number": "دخل نمرة الطوارئ", "Best choice for comfort car and flexible route and stops point": "أحسن اختيار لطوموبيل مريحة ومسار مرن ونقط وقوف", "Insert": "إدخال", "This is for scooter or a motorcycle.": "هذا خاص بالتوصيل ولا الموطور", "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": "المشوار هذا كيمشي نيشان من نقطة البداية لنقطة النهاية بثمن ثابت. والسائق خاصو يتبع المسار المحدد.", "You can decline a request without any cost": "تقدر ترفض الطلب بلا حتى تكلفة", "Perfect for adventure seekers who want to experience something new and exciting": "مثالي لعشاق المغامرة اللي باغين يجربو حوايج جديدة ومثيرة", "My current location is:": "الموقع الحالي ديالي هو:", "and I have a trip on": "وعندي مشوار على", "App with Passenger": "التطبيق\nمع الراكب", "You will be pay the cost to driver or we will get it from you on next trip": "غادي تخلص التكلفة للسائق ولا غادي ناخدوها منك في المشوار اللي جاي", "Trip has Steps": "الرحلة فيها خطوات", "Distance from Passenger to destination is ": "المسافة من الراكب للوجهة هي", "price is": "التكلفة هي", "This ride type does not allow changes to the destination or additional stops": "نوع المشوار هذا ما كيسمحش بتغيير الوجهة ولا زيادة وقفات.", "This price may be changed": "الله يرحم الوالدين البال الثمن ممكن يتبدل", "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": "حتى إلا ماكانش خط، ماعليش! عيط للسائق ديالك مباشرة من خلال التطبيق ديالنا. كنستعملو تكنولوجيا حديثة باش نحافظو على الخصوصية ديالك.", "This ride type allows changes, but the price may increase": "نوع المشوار هذا كيسمح بالتغييرات، ولكن الثمن ممكن يزيد", "Select one message": "اختار رسالة", "I'm waiting for you": "كنتسناك", "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": "لاحظنا باللي السرعة كتفوت 100 كم/ساعة. الله يرحم الوالدين نقص السرعة حفاظًا على السلامة ديالك. إلا حسيتي براسك ماشي آمن، ممكن تشارك تفاصيل الرحلة ديالك مع شي حد كتثيق فيه ولا تعيط للبوليس بالزر الأحمر SOS.", "Warning: Intaleqing detected!": "تحذير: السرعة الزائدة مرصودة!", "Please help! Contact me as soon as possible.": "الله يرحم الوالدين عاونوني! عيطو بيا في أقرب وقت ممكن", "Share Trip Details": "شارك تفاصيل الرحلة", "Car Plate is ": "نمرة الطوموبيل هي", "VIP Order": "طلب VIP", "the 300 points equal 300 L.E for you \nSo go and gain your money": "ربح 300 جنيه! كل 300 نقطة كتساوي 300 جنيه. يلا استغل النقاط ديالك!", "the 300 points equal 300 L.E": "300 نقطة كتساوي 300 جنيه ليك", "The payment was not approved. Please try again.": "الدفع ما تقبلش. الله يرحم الوالدين حاول مرة أخرى.", "Payment Failed": "فشل الدفع", "Error": "خطأ", "This is a scheduled notification.": "هذا إشعار مجدول.", "An error occurred during the payment process.": "وقع خطأ أثناء عملية الدفع.", "The payment was approved.": "الدفع تقبل.", "Payment Successful": "الدفع ناجح", "No ride found yet": "ماكاينش طلبات متوفرة حاليًا", "Accept Order": "قبل الطلب", // "reject your order.": "رفض الطلب ديالك.", "Bottom Bar Example": "مثال لشريط التنقل السفلي", "Driver phone": "نمرة تيليفون السائق", "Statistics": "الإحصائيات", "Origin": "نقطة الانطلاق", "Destination": "الوجهة", "Driver Name": "اسم السائق", "Driver Car Plate": "لوحة الطوموبيل", "Available for rides": "متوفر للمشاوير", "Scan Id": "مسح الهوية", "Camera not initilaized yet": "الكاميرا مازال ماخدماتش", "Scan ID MklGoogle": "مسح هوية MklGoogle", "Language": "اللغة", "Jordan": "الأردن", "USA": "الولايات المتحدة الأمريكية", "Egypt": "مصر", "Turkey": "تركيا", "Saudi Arabia": "المملكة العربية السعودية", "Qatar": "قطر", "Bahrain": "البحرين", "Kuwait": "الكويت", "But you have a negative salary of": "ولكن عندك رصيد ناقص بقيمة", "Promo Code": "كود ترويجي", "Your trip distance is": "المسافة ديال الرحلة ديالك هي", "Enter promo code": "دخل كود ترويجي", "You have promo!": "عندك عرض ترويجي!", "Cost Duration": "تكلفة المدة", "Duration is": "المدة هي", "Leave": "مغادرة", "Join": "انضمام", "Heading your way now. Please be ready.": "أنا جاي في الطريق ليك دابا. الله يرحم الوالدين وجد.", "Approaching your area. Should be there in 3 minutes.": "كنقرب من المنطقة ديالك. خاصني نكون تما في 3 دقائق.", "There's heavy traffic here. Can you suggest an alternate pickup point?": "كاين زحام كثير هنا. ممكن تقترح نقطة التقاء بديلة؟", "This ride is already taken by another driver.": "المشوار هذا خداه سائق آخر خلاص.", "You Should be select reason.": "خاصك تختار سبب.", "Waiting for Driver ...": "كنتسناو السائق...", "Latest Recent Trip": "آخر مشوار درت", "from your list": "من اللائحة ديالك", "Do you want to change Work location": "واش باغي تبدل مكان الخدمة؟", "Do you want to change Home location": "واش باغي تبدل مكان الدار؟", "We Are Sorry That we dont have cars in your Location!": "كنتأسفوا باللي ما عندناش طوموبيلات في الموقع ديالك!", "Choose from Map": "اختار من الخريطة", "Pick your ride location on the map - Tap to confirm": "حدد مكان الالتقاء ديال المشوار ديالك على الخريطة - ضغط باش تأكد", // "To Work": "إلى الخدمة", // "Are you want to go this site": "عايز تروح المكان ده؟", "Closest & Cheapest": "الأقرب والأرخص", // "Work Saved": "مكان الخدمة تسجل", "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": "Intaleq هو تطبيق التوصيل اللي آمن وموثوق وسهل الاستعمال.", "With Intaleq, you can get a ride to your destination in minutes.": "مع Intaleq، ممكن توصل للوجهة ديالك في دقائق.", "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": "Intaleq ملتزمة بالأمان، وكل الكباتن ديالنا كيتفحصو مزيان وكيديرو ليهم فحص الخلفية.", // "To Home": "إلى الدار", // "Home Saved": "مكان الدار تسجل", // "Destination selected": "الوجهة مختارة:", // "Now select start pick": "اختار مكان الانطلاق دابا:", "Pick from map": "اختيار من الخريطة", // "Click here point": "حدد هذه النقطة", "No Car in your site. Sorry!": "ماكاينش طوموبيل في الموقع ديالك. آسف!", "Nearest Car for you about ": "أقرب طوموبيل ليك على بعد تقريبا ", // "N/A": "غير متوفر", "From :": "من:", "Get Details of Trip": "عرض تفاصيل الرحلة", "If you want add stop click here": "إلا بغيتي تزيد وقفة ضغط هنا", // "Driver": "السائق", "Where you want go ": "فين باغي تمشي؟", "My Card": "البطاقة ديالي", "Start Record": "بدا التسجيل", "Wallet": "الجيب", "History of Trip": "سجل الرحلات", "Helping Center": "مركز المساعدة", "Record saved": "التسجيل تسجل", "Trips recorded": "الرحلات المسجلة", "Select Your Country": "اختار البلد ديالك", "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": "باش تضمن توصلك أدق المعلومات للموقع ديالك، الله يرحم الوالدين اختار البلد ديالك لتحت. هذا غادي يساعد نخصو تجربة التطبيق والمحتوى للبلد ديالك.", "Are you sure to delete recorded files": "متأكد باللي باغي تمسح الملفات الصوتية المسجلة؟", "Select recorded trip": "اختار الملف الصوتي المسجل", "Card Number": "رقم البطاقة", "Hi, Where to ": "مرحبا، فين غادي؟", "Pick your destination from Map": "اختار الوجهة ديالك من الخريطة", "Add Stops": "زيد محطات", "Get Direction": "عرض الاتجاهات", "Add Location": "زيد موقع", "Switch Rider": "بدل الراكب", "You will arrive to your destination after timer end.": "غادي توصل للوجهة ديالك من بعد ما يسالي العداد.", "You can cancel trip": "تقدر تلغي الرحلة", "The driver waitting you in picked location .": "السائق كيتسناك في المكان اللي اختاريتي.", "Pay with Your": "خلص بـ", "Pay with Credit Card": "خلص ببطاقة الائتمان", "Payment History": "سجل المدفوعات", "Show Promos to Charge": "عرض العروض باش تشحن", "Point": "نقطة", "How many hours would you like to wait?": "شحال من ساعة باغي تسنى؟", "Driver Wallet": "جيب السائق", "Choose between those Type Cars": "اختار من بين أنواع الطوموبيلات هادو", "hour": "ساعة", "Select Waiting Hours": "اختار ساعات الانتظار", "Total Points is": "إجمالي النقاط هو", "You will receive a code in SMS message": "غادي توصل برمز في رسالة نصية", "Done": "تم", "Total Budget from trips is ": "إجمالي المبلغ المستحق من الرحلات هو", "Total Amount:": "المبلغ الإجمالي:", "Total Budget from trips by\nCredit card is ": "إجمالي المبلغ المستحق من الرحلات عن طريق\nبطاقة الائتمان هو", "This amount for all trip I get from Passengers": "هذا المبلغ اللي حصلت عليه من كل الرحلات من الركاب", "Pay from my budget": "خلص من الرصيد ديالي", "This amount for all trip I get from Passengers and Collected For me in": "هذا المبلغ اللي حصلت عليه من كل الرحلات من الركاب وتجمع ليا في", "You can buy points from your budget": "ممكن تشري نقاط من الرصيد ديالك", "insert amount": "دخل المبلغ", "You can buy Points to let you online\nby this list below": "ممكن تشري نقاط باش تبقى متصل\nمن اللائحة هادي لتحت", "Create Wallet to receive your money": "إنشاء جيب لاستقبال الفلوس ديالك", "Enter your feedback here": "كتب الملاحظات ديالك هنا", "Please enter your feedback.": "الله يرحم الوالدين دخل الملاحظات ديالك.", "Feedback": "ملاحظات", "Submit ": "إرسال", "Click here to Show it in Map": "ضغط هنا باش تعرضو في الخريطة", "Canceled": "ملغي", "Type your Email": "كتب البريد الإلكتروني ديالك", "No I want": "لا مابغيتش", "Email is": "البريد الإلكتروني هو", "Phone Number is": "نمرة التيليفون هي", "Date of Birth is": "تاريخ الميلاد هو", "Sex is ": "النوع هو ", "Car Details": "تفاصيل الطوموبيل", "VIN is": "رقم الشاسي هو", "Color is ": "اللون هو ", "Make is ": "الشركة المصنعة هي", "Model is": "الموديل هو", "Year is": "السنة هي", "Expiration Date ": "تاريخ الانتهاء ", "Edit Your data": "تعديل البيانات ديالك", "write vin for your car": "كتب رقم الشاسي ديال الطوموبيل ديالك", "VIN": "رقم الشاسي", "write Color for your car": "كتب لون الطوموبيل ديالك", "write Make for your car": "كتب الشركة المصنعة ديال الطوموبيل ديالك", // "Make": "الشركة المصنعة", "write Model for your car": "كتب موديل الطوموبيل ديالك", // "Model": "الموديل", "write Year for your car": "كتب سنة صنع الطوموبيل ديالك", // "Expiration Date": "تاريخ الانتهاء", "write Expiration Date for your car": "كتب تاريخ انتهاء رخصة الطوموبيل ديالك", "Tariffs": "التعريفات", "Minimum fare": "الحد الأدنى للأجرة", "Maximum fare": "الحد الأقصى للأجرة", "Flag-down fee": "رسوم فتح العداد", "Including Tax": "شامل الضريبة", "BookingFee": "رسوم الحجز", "Morning": "الصباح", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": "من 07:30 حتى 10:30 (الخميس، الجمعة، السبت، الاثنين)", "Evening": "المساء", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": "من 12:00 حتى 15:00 (الخميس، الجمعة، السبت، الاثنين)", "Night": "الليل", "You have in account": "عندك في الحساب", "Select Country": "اختار الدولة", "Ride Today : ": "عدد رحلات اليوم: ", "After this period\nYou can\'t cancel!": "من بعد الفترة هادي\nمايمكنش تلغي!", "from 23:59 till 05:30": "من 23:59 حتى 05:30", "Rate Driver": "قيم السائق", "Total Cost is ": "صافي الربح", "Write note": "كتب ملاحظة", "Time to arrive": "وقت الوصول", "Ride Summaries": "ملخصات الرحلات", "Total Cost": "المبلغ الإجمالي", "Average of Hours of": "متوسط ساعات", " is ON for this month": "في هذا الشهر", "Days": "أيام", "Total Hours on month": "إجمالي الساعات في الشهر", "Counts of Hours on days": "عدد ساعات الأيام", "OrderId": "رقم الرحلة", "created time": "وقت الرحلة", "Intaleq Over": "سرعة عالية", "I will slow down": "واخا غادي نقص السرعة", "Map Passenger": "خريطة الراكب", "Be Slowly": "بالمهل شوية في السرعة", "If you want to make Google Map App run directly when you apply order": "إلا بغيتي تطبيق خرائط جوجل يخدم تلقائي فاش كتطلب الخدمة", "You can change the language of the app": "تقدر تبدل لغة التطبيق", "Your Budget less than needed": "القيمة المدخلة قل من الرصيد ديالك", "You can change the Country to get all features": "تقدر تبدل الدولة باش تحصل على كل المميزات", "Change Country": "تبديل الدولة" } }; } ================================================== FILE PATH: ./lib/controller/local/phone_intel/helpers.dart ================================================== import 'countries.dart'; bool isNumeric(String s) => s.isNotEmpty && int.tryParse(s.replaceAll("+", "")) != null; String removeDiacritics(String str) { var withDia = 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñŠšŸÿýŽž'; var withoutDia = 'AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZz'; for (int i = 0; i < withDia.length; i++) { str = str.replaceAll(withDia[i], withoutDia[i]); } return str; } extension CountryExtensions on List { List stringSearch(String search) { search = removeDiacritics(search.toLowerCase()); return where( (country) => isNumeric(search) || search.startsWith("+") ? country.dialCode.contains(search) : removeDiacritics(country.name.replaceAll("+", "").toLowerCase()) .contains(search) || country.nameTranslations.values.any((element) => removeDiacritics(element.toLowerCase()).contains(search)), ).toList(); } } ================================================== FILE PATH: ./lib/controller/local/phone_intel/intl_phone_field.dart ================================================== library intl_phone_field; import 'dart:async'; import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import './countries.dart'; import './phone_number.dart'; import 'country_picker_dialog.dart'; import 'helpers.dart'; class IntlPhoneField extends StatefulWidget { /// The TextFormField key. final GlobalKey? formFieldKey; /// Whether to hide the text being edited (e.g., for passwords). final bool obscureText; /// How the text should be aligned horizontally. final TextAlign textAlign; /// How the text should be aligned vertically. final TextAlignVertical? textAlignVertical; final VoidCallback? onTap; /// {@macro flutter.widgets.editableText.readOnly} final bool readOnly; final FormFieldSetter? onSaved; /// {@macro flutter.widgets.editableText.onChanged} /// /// See also: /// /// * [inputFormatters], which are called before [onChanged] /// runs and can validate and change ("format") the input value. /// * [onEditingComplete], [onSubmitted], [onSelectionChanged]: /// which are more specialized input change notifications. final ValueChanged? onChanged; final ValueChanged? onCountryChanged; /// An optional method that validates an input. Returns an error string to display if the input is invalid, or null otherwise. /// /// A [PhoneNumber] is passed to the validator as argument. /// The validator can handle asynchronous validation when declared as a [Future]. /// Or run synchronously when declared as a [Function]. /// /// By default, the validator checks whether the input number length is between selected country's phone numbers min and max length. /// If `disableLengthCheck` is not set to `true`, your validator returned value will be overwritten by the default validator. /// But, if `disableLengthCheck` is set to `true`, your validator will have to check phone number length itself. final FutureOr Function(PhoneNumber?)? validator; /// {@macro flutter.widgets.editableText.keyboardType} final TextInputType keyboardType; /// Controls the text being edited. /// /// If null, this widget will create its own [TextEditingController]. final TextEditingController? controller; /// Defines the keyboard focus for this widget. /// /// The [focusNode] is a long-lived object that's typically managed by a /// [StatefulWidget] parent. See [FocusNode] for more information. /// /// To give the keyboard focus to this widget, provide a [focusNode] and then /// use the current [FocusScope] to request the focus: /// /// ```dart /// FocusScope.of(context).requestFocus(myFocusNode); /// ``` /// /// This happens automatically when the widget is tapped. /// /// To be notified when the widget gains or loses the focus, add a listener /// to the [focusNode]: /// /// ```dart /// focusNode.addListener(() { print(myFocusNode.hasFocus); }); /// ``` /// /// If null, this widget will create its own [FocusNode]. /// /// ## Keyboard /// /// Requesting the focus will typically cause the keyboard to be shown /// if it's not showing already. /// /// On Android, the user can hide the keyboard - without changing the focus - /// with the system back button. They can restore the keyboard's visibility /// by tapping on a text field. The user might hide the keyboard and /// switch to a physical keyboard, or they might just need to get it /// out of the way for a moment, to expose something it's /// obscuring. In this case requesting the focus again will not /// cause the focus to change, and will not make the keyboard visible. /// /// This widget builds an [EditableText] and will ensure that the keyboard is /// showing when it is tapped by calling [EditableTextState.requestKeyboard()]. final FocusNode? focusNode; /// {@macro flutter.widgets.editableText.onSubmitted} /// /// See also: /// /// * [EditableText.onSubmitted] for an example of how to handle moving to /// the next/previous field when using [TextInputAction.next] and /// [TextInputAction.previous] for [textInputAction]. final void Function(String)? onSubmitted; /// If false the widget is "disabled": it ignores taps, the [TextFormField]'s /// [decoration] is rendered in grey, /// [decoration]'s [InputDecoration.counterText] is set to `""`, /// and the drop down icon is hidden no matter [showDropdownIcon] value. /// /// If non-null this property overrides the [decoration]'s /// [Decoration.enabled] property. final bool enabled; /// The appearance of the keyboard. /// /// This setting is only honored on iOS devices. /// /// If unset, defaults to the brightness of [ThemeData.brightness]. final Brightness? keyboardAppearance; /// Initial Value for the field. /// This property can be used to pre-fill the field. final String? initialValue; final String languageCode; /// 2 letter ISO Code or country dial code. /// /// ```dart /// initialCountryCode: 'IN', // India /// initialCountryCode: '+225', // Côte d'Ivoire /// ``` final String? initialCountryCode; /// List of Country to display see countries.dart for format final List? countries; /// The decoration to show around the text field. /// /// By default, draws a horizontal line under the text field but can be /// configured to show an icon, label, hint text, and error text. /// /// Specify null to remove the decoration entirely (including the /// extra padding introduced by the decoration to save space for the labels). final InputDecoration decoration; /// The style to use for the text being edited. /// /// This text style is also used as the base style for the [decoration]. /// /// If null, defaults to the `subtitle1` text style from the current [Theme]. final TextStyle? style; /// Disable view Min/Max Length check final bool disableLengthCheck; /// Won't work if [enabled] is set to `false`. final bool showDropdownIcon; final BoxDecoration dropdownDecoration; /// The style use for the country dial code. final TextStyle? dropdownTextStyle; /// {@macro flutter.widgets.editableText.inputFormatters} final List? inputFormatters; /// The text that describes the search input field. /// /// When the input field is empty and unfocused, the label is displayed on top of the input field (i.e., at the same location on the screen where text may be entered in the input field). /// When the input field receives focus (or if the field is non-empty), the label moves above (i.e., vertically adjacent to) the input field. final String searchText; /// Position of an icon [leading, trailing] final IconPosition dropdownIconPosition; /// Icon of the drop down button. /// /// Default is [Icon(Icons.arrow_drop_down)] final Icon dropdownIcon; /// Whether this text field should focus itself if nothing else is already focused. final bool autofocus; /// Autovalidate mode for text form field. /// /// If [AutovalidateMode.onUserInteraction], this FormField will only auto-validate after its content changes. /// If [AutovalidateMode.always], it will auto-validate even without user interaction. /// If [AutovalidateMode.disabled], auto-validation will be disabled. /// /// Defaults to [AutovalidateMode.onUserInteraction]. final AutovalidateMode? autovalidateMode; /// Whether to show or hide country flag. /// /// Default value is `true`. final bool showCountryFlag; /// Message to be displayed on autoValidate error /// /// Default value is `Invalid Mobile Number`. final String? invalidNumberMessage; /// The color of the cursor. final Color? cursorColor; /// How tall the cursor will be. final double? cursorHeight; /// How rounded the corners of the cursor should be. final Radius? cursorRadius; /// How thick the cursor will be. final double cursorWidth; /// Whether to show cursor. final bool? showCursor; /// The padding of the Flags Button. /// /// The amount of insets that are applied to the Flags Button. /// /// If unset, defaults to [EdgeInsets.zero]. final EdgeInsetsGeometry flagsButtonPadding; /// The type of action button to use for the keyboard. final TextInputAction? textInputAction; /// Optional set of styles to allow for customizing the country search /// & pick dialog final PickerDialogStyle? pickerDialogStyle; /// The margin of the country selector button. /// /// The amount of space to surround the country selector button. /// /// If unset, defaults to [EdgeInsets.zero]. final EdgeInsets flagsButtonMargin; /// Enable the autofill hint for phone number. final bool disableAutoFillHints; /// If null, default magnification configuration will be used. final TextMagnifierConfiguration? magnifierConfiguration; const IntlPhoneField({ Key? key, this.formFieldKey, this.initialCountryCode, this.languageCode = 'en', this.disableAutoFillHints = false, this.obscureText = false, this.textAlign = TextAlign.left, this.textAlignVertical, this.onTap, this.readOnly = false, this.initialValue, this.keyboardType = TextInputType.phone, this.controller, this.focusNode, this.decoration = const InputDecoration(), this.style, this.dropdownTextStyle, this.onSubmitted, this.validator, this.onChanged, this.countries, this.onCountryChanged, this.onSaved, this.showDropdownIcon = true, this.dropdownDecoration = const BoxDecoration(), this.inputFormatters, this.enabled = true, this.keyboardAppearance, @Deprecated('Use searchFieldInputDecoration of PickerDialogStyle instead') this.searchText = 'Search country', this.dropdownIconPosition = IconPosition.leading, this.dropdownIcon = const Icon(Icons.arrow_drop_down), this.autofocus = false, this.textInputAction, this.autovalidateMode = AutovalidateMode.onUserInteraction, this.showCountryFlag = true, this.cursorColor, this.disableLengthCheck = false, this.flagsButtonPadding = EdgeInsets.zero, this.invalidNumberMessage = 'Invalid Mobile Number', this.cursorHeight, this.cursorRadius = Radius.zero, this.cursorWidth = 2.0, this.showCursor = true, this.pickerDialogStyle, this.flagsButtonMargin = EdgeInsets.zero, this.magnifierConfiguration, }) : super(key: key); @override State createState() => _IntlPhoneFieldState(); } class _IntlPhoneFieldState extends State { late List _countryList; late Country _selectedCountry; late List filteredCountries; late String number; String? validatorMessage; @override void initState() { super.initState(); _countryList = widget.countries ?? countries; filteredCountries = _countryList; number = widget.initialValue ?? ''; if (widget.initialCountryCode == null && number.startsWith('+')) { number = number.substring(1); // parse initial value _selectedCountry = countries.firstWhere( (country) => number.startsWith(country.fullCountryCode), orElse: () => _countryList.first); // remove country code from the initial number value number = number.replaceFirst( RegExp("^${_selectedCountry.fullCountryCode}"), ""); } else { _selectedCountry = _countryList.firstWhere( (item) => item.code == (widget.initialCountryCode ?? 'US'), orElse: () => _countryList.first); // remove country code from the initial number value if (number.startsWith('+')) { number = number.replaceFirst( RegExp("^\\+${_selectedCountry.fullCountryCode}"), ""); } else { number = number.replaceFirst( RegExp("^${_selectedCountry.fullCountryCode}"), ""); } } if (widget.autovalidateMode == AutovalidateMode.always) { final initialPhoneNumber = PhoneNumber( countryISOCode: _selectedCountry.code, countryCode: '+${_selectedCountry.dialCode}', number: widget.initialValue ?? '', ); final value = widget.validator?.call(initialPhoneNumber); if (value is String) { validatorMessage = value; } else { (value as Future).then((msg) { validatorMessage = msg; }); } } } Future _changeCountry() async { filteredCountries = _countryList; await showDialog( context: context, useRootNavigator: false, builder: (context) => StatefulBuilder( builder: (ctx, setState) => CountryPickerDialog( languageCode: widget.languageCode.toLowerCase(), style: widget.pickerDialogStyle, filteredCountries: filteredCountries, searchText: widget.searchText, countryList: _countryList, selectedCountry: _selectedCountry, onCountryChanged: (Country country) { _selectedCountry = country; widget.onCountryChanged?.call(country); setState(() {}); }, ), ), ); if (mounted) setState(() {}); } @override Widget build(BuildContext context) { return TextFormField( key: widget.formFieldKey, initialValue: (widget.controller == null) ? number : null, autofillHints: widget.disableAutoFillHints ? null : [AutofillHints.telephoneNumberNational], readOnly: widget.readOnly, obscureText: widget.obscureText, textAlign: widget.textAlign, textAlignVertical: widget.textAlignVertical, cursorColor: widget.cursorColor, onTap: widget.onTap, controller: widget.controller, focusNode: widget.focusNode, cursorHeight: widget.cursorHeight, cursorRadius: widget.cursorRadius, cursorWidth: widget.cursorWidth, showCursor: widget.showCursor, onFieldSubmitted: widget.onSubmitted, magnifierConfiguration: widget.magnifierConfiguration, decoration: widget.decoration.copyWith( prefixIcon: _buildFlagsButton(), counterText: !widget.enabled ? '' : null, ), style: widget.style, onSaved: (value) { widget.onSaved?.call( PhoneNumber( countryISOCode: _selectedCountry.code, countryCode: '+${_selectedCountry.dialCode}${_selectedCountry.regionCode}', number: value!, ), ); }, onChanged: (value) async { final phoneNumber = PhoneNumber( countryISOCode: _selectedCountry.code, countryCode: '+${_selectedCountry.fullCountryCode}', number: value, ); if (widget.autovalidateMode != AutovalidateMode.disabled) { validatorMessage = await widget.validator?.call(phoneNumber); } widget.onChanged?.call(phoneNumber); }, validator: (value) { if (value == null || !isNumeric(value)) return validatorMessage; if (!widget.disableLengthCheck) { return value.length >= _selectedCountry.minLength && value.length <= _selectedCountry.maxLength ? null : widget.invalidNumberMessage; } return validatorMessage; }, maxLength: widget.disableLengthCheck ? null : _selectedCountry.maxLength, keyboardType: widget.keyboardType, inputFormatters: widget.inputFormatters, enabled: widget.enabled, keyboardAppearance: widget.keyboardAppearance, autofocus: widget.autofocus, textInputAction: widget.textInputAction, autovalidateMode: widget.autovalidateMode, ); } Container _buildFlagsButton() { return Container( margin: widget.flagsButtonMargin, child: DecoratedBox( decoration: widget.dropdownDecoration, child: InkWell( borderRadius: widget.dropdownDecoration.borderRadius as BorderRadius?, onTap: widget.enabled ? _changeCountry : null, child: Padding( padding: widget.flagsButtonPadding, child: Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ const SizedBox( width: 4, ), if (widget.enabled && widget.showDropdownIcon && widget.dropdownIconPosition == IconPosition.leading) ...[ widget.dropdownIcon, const SizedBox(width: 4), ], if (widget.showCountryFlag) ...[ kIsWeb ? Image.asset( 'assets/flags/${_selectedCountry.code.toLowerCase()}.png', package: 'intl_phone_field', width: 32, ) : Text( _selectedCountry.flag, style: const TextStyle(fontSize: 18), ), const SizedBox(width: 8), ], FittedBox( child: Text( '+${_selectedCountry.dialCode}', style: widget.dropdownTextStyle, ), ), if (widget.enabled && widget.showDropdownIcon && widget.dropdownIconPosition == IconPosition.trailing) ...[ const SizedBox(width: 4), widget.dropdownIcon, ], const SizedBox(width: 8), ], ), ), ), ), ); } } enum IconPosition { leading, trailing, } ================================================== FILE PATH: ./lib/controller/local/phone_intel/country_picker_dialog.dart ================================================== import 'package:Intaleq/controller/local/phone_intel/helpers.dart'; import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/material.dart'; import 'countries.dart'; class PickerDialogStyle { final Color? backgroundColor; final TextStyle? countryCodeStyle; final TextStyle? countryNameStyle; final Widget? listTileDivider; final EdgeInsets? listTilePadding; final EdgeInsets? padding; final Color? searchFieldCursorColor; final InputDecoration? searchFieldInputDecoration; final EdgeInsets? searchFieldPadding; final double? width; PickerDialogStyle({ this.backgroundColor, this.countryCodeStyle, this.countryNameStyle, this.listTileDivider, this.listTilePadding, this.padding, this.searchFieldCursorColor, this.searchFieldInputDecoration, this.searchFieldPadding, this.width, }); } class CountryPickerDialog extends StatefulWidget { final List countryList; final Country selectedCountry; final ValueChanged onCountryChanged; final String searchText; final List filteredCountries; final PickerDialogStyle? style; final String languageCode; const CountryPickerDialog({ Key? key, required this.searchText, required this.languageCode, required this.countryList, required this.onCountryChanged, required this.selectedCountry, required this.filteredCountries, this.style, }) : super(key: key); @override State createState() => _CountryPickerDialogState(); } class _CountryPickerDialogState extends State { late List _filteredCountries; late Country _selectedCountry; @override void initState() { _selectedCountry = widget.selectedCountry; _filteredCountries = widget.filteredCountries.toList() ..sort( (a, b) => a .localizedName(widget.languageCode) .compareTo(b.localizedName(widget.languageCode)), ); super.initState(); } @override Widget build(BuildContext context) { final mediaWidth = MediaQuery.of(context).size.width; final width = widget.style?.width ?? mediaWidth; const defaultHorizontalPadding = 40.0; const defaultVerticalPadding = 24.0; return Dialog( insetPadding: EdgeInsets.symmetric( vertical: defaultVerticalPadding, horizontal: mediaWidth > (width + defaultHorizontalPadding * 2) ? (mediaWidth - width) / 2 : defaultHorizontalPadding), backgroundColor: widget.style?.backgroundColor, child: Container( padding: widget.style?.padding ?? const EdgeInsets.all(10), child: Column( children: [ Padding( padding: widget.style?.searchFieldPadding ?? const EdgeInsets.all(0), child: TextField( cursorColor: widget.style?.searchFieldCursorColor, decoration: widget.style?.searchFieldInputDecoration ?? InputDecoration( suffixIcon: const Icon(Icons.search), labelText: widget.searchText, ), onChanged: (value) { _filteredCountries = widget.countryList.stringSearch(value) ..sort( (a, b) => a .localizedName(widget.languageCode) .compareTo(b.localizedName(widget.languageCode)), ); if (mounted) setState(() {}); }, ), ), const SizedBox(height: 20), Expanded( child: ListView.builder( shrinkWrap: true, itemCount: _filteredCountries.length, itemBuilder: (ctx, index) => Column( children: [ ListTile( leading: kIsWeb ? Image.asset( 'assets/flags/${_filteredCountries[index].code.toLowerCase()}.png', package: 'intl_phone_field', width: 32, ) : Text( _filteredCountries[index].flag, style: const TextStyle(fontSize: 18), ), contentPadding: widget.style?.listTilePadding, title: Text( _filteredCountries[index] .localizedName(widget.languageCode), style: widget.style?.countryNameStyle ?? const TextStyle(fontWeight: FontWeight.w700), ), trailing: Text( '+${_filteredCountries[index].dialCode}', style: widget.style?.countryCodeStyle ?? const TextStyle(fontWeight: FontWeight.w700), ), onTap: () { _selectedCountry = _filteredCountries[index]; widget.onCountryChanged(_selectedCountry); Navigator.of(context).pop(); }, ), widget.style?.listTileDivider ?? const Divider(thickness: 1), ], ), ), ), ], ), ), ); } } ================================================== FILE PATH: ./lib/controller/local/phone_intel/countries.dart ================================================== // see: https://en.wikipedia.org/wiki/List_of_country_calling_codes // for list of country/calling codes const List countries = [ Country( name: "Afghanistan", nameTranslations: { "sk": "Afganistan", "se": "Afghanistan", "pl": "Afganistan", "no": "Afghanistan", "ja": "アフガニスタン", "it": "Afghanistan", "zh": "阿富汗", "nl": "Afghanistan", "de": "Afghanistan", "fr": "Afghanistan", "es": "Afganistán", "en": "Afghanistan", "pt_BR": "Afeganistão", "sr-Cyrl": "Авганистан", "sr-Latn": "Avganistan", "zh_TW": "阿富汗", "tr": "Afganistan", "ro": "Afganistan", "ar": "أفغانستان", "fa": "افغانستان", "yue": "阿富汗" }, flag: "🇦🇫", code: "AF", dialCode: "93", minLength: 9, maxLength: 9, ), Country( name: "Åland Islands", nameTranslations: { "sk": "Alandy", "se": "Ålánda", "pl": "Wyspy Alandzkie", "no": "Åland", "ja": "オーランド諸島", "it": "Isole Åland", "zh": "奥兰群岛", "nl": "Åland", "de": "Ålandinseln", "fr": "Îles Åland", "es": "Islas Åland", "en": "Åland Islands", "pt_BR": "Ilhas Aland", "sr-Cyrl": "Аландска Острва", "sr-Latn": "Alandska Ostrva", "zh_TW": "奧蘭群島", "tr": "Åland", "ro": "Insulele Åland", "ar": "جزر أولاند", "fa": "جزیره اولاند", "yue": "奧蘭群島" }, flag: "🇦🇽", code: "AX", dialCode: "358", minLength: 15, maxLength: 15, ), Country( name: "Albania", nameTranslations: { "sk": "Albánsko", "se": "Albánia", "pl": "Albania", "no": "Albania", "ja": "アルバニア", "it": "Albania", "zh": "阿尔巴尼亚", "nl": "Albanië", "de": "Albanien", "fr": "Albanie", "es": "Albania", "en": "Albania", "pt_BR": "Albânia", "sr-Cyrl": "Албанија", "sr-Latn": "Albanija", "zh_TW": "阿爾巴尼亞", "tr": "Arnavutluk", "ro": "Albania", "ar": "ألبانيا", "fa": "آلبانی", "yue": "阿爾巴尼亞" }, flag: "🇦🇱", code: "AL", dialCode: "355", minLength: 9, maxLength: 9, ), Country( name: "Algeria", nameTranslations: { "sk": "Alžírsko", "se": "Algeria", "pl": "Algieria", "no": "Algerie", "ja": "アルジェリア", "it": "Algeria", "zh": "阿尔及利亚", "nl": "Algerije", "de": "Algerien", "fr": "Algérie", "es": "Argelia", "en": "Algeria", "pt_BR": "Argélia", "sr-Cyrl": "Аргентина", "sr-Latn": "Argentina", "zh_TW": "阿爾及利亞", "tr": "Cezayir", "ro": "Algeria", "ar": "الجزائر", "fa": "الجزیره", "yue": "阿爾及利亞" }, flag: "🇩🇿", code: "DZ", dialCode: "213", minLength: 9, maxLength: 9, ), Country( name: "American Samoa", nameTranslations: { "sk": "Americká Samoa", "se": "Amerihká Samoa", "pl": "Samoa Amerykańskie", "no": "Amerikansk Samoa", "ja": "米領サモア", "it": "Samoa americane", "zh": "美属萨摩亚", "nl": "Amerikaans-Samoa", "de": "Amerikanisch-Samoa", "fr": "Samoa américaines", "es": "Samoa Americana", "en": "American Samoa", "pt_BR": "Samoa Americana", "sr-Cyrl": "Америчка Самоа", "sr-Latn": "Američka Samoa", "zh_TW": "美屬薩摩亞", "tr": "Amerikan Samoası", "ro": "Samoa Americană", "ar": "ساموا الأمريكية", "fa": "ساموا آمریکا", "yue": "美屬薩摩亞" }, flag: "🇦🇸", code: "AS", dialCode: "1684", minLength: 7, maxLength: 7, ), Country( name: "Andorra", nameTranslations: { "sk": "Andorra", "se": "Andorra", "pl": "Andora", "no": "Andorra", "ja": "アンドラ", "it": "Andorra", "zh": "安道尔", "nl": "Andorra", "de": "Andorra", "fr": "Andorre", "es": "Andorra", "en": "Andorra", "pt_BR": "Andorra", "sr-Cyrl": "Андора", "sr-Latn": "Andora", "zh_TW": "安道爾", "tr": "Andora", "ro": "Andorra", "ar": "أندورا", "fa": "آندورا", "yue": "安道爾" }, flag: "🇦🇩", code: "AD", dialCode: "376", minLength: 6, maxLength: 6, ), Country( name: "Angola", nameTranslations: { "sk": "Angola", "se": "Angola", "pl": "Angola", "no": "Angola", "ja": "アンゴラ", "it": "Angola", "zh": "安哥拉", "nl": "Angola", "de": "Angola", "fr": "Angola", "es": "Angola", "en": "Angola", "pt_BR": "Angola", "sr-Cyrl": "Ангола", "sr-Latn": "Angola", "zh_TW": "安哥拉", "tr": "Angola", "ro": "Angola", "ar": "أنغولا", "fa": "آنگولا", "yue": "安哥拉" }, flag: "🇦🇴", code: "AO", dialCode: "244", minLength: 9, maxLength: 9, ), Country( name: "Anguilla", nameTranslations: { "sk": "Anguilla", "se": "Anguilla", "pl": "Anguilla", "no": "Anguilla", "ja": "アンギラ", "it": "Anguilla", "zh": "安圭拉", "nl": "Anguilla", "de": "Anguilla", "fr": "Anguilla", "es": "Anguila", "en": "Anguilla", "pt_BR": "Anguilla", "sr-Cyrl": "Ангвила", "sr-Latn": "Angvila", "zh_TW": "安圭拉", "tr": "Anguilla", "ro": "Anguilla", "ar": "أنغويلا", "fa": "آنگولیا", "yue": "安圭拉" }, flag: "🇦🇮", code: "AI", dialCode: "1264", minLength: 7, maxLength: 7, ), Country( name: "Antarctica", nameTranslations: { "sk": "Antarktída", "se": "Antárktis", "pl": "Antarktyda", "no": "Antarktis", "ja": "南極", "it": "Antartide", "zh": "南极洲", "nl": "Antarctica", "de": "Antarktis", "fr": "Antarctique", "es": "Antártida", "en": "Antarctica", "pt_BR": "Antártica", "sr-Cyrl": "Антарктик", "sr-Latn": "Antarktik", "zh_TW": "南極", "tr": "Antarktika", "ro": "Antarctica", "ar": "القارة القطبية الجنوبية", "fa": "قطب جنوب", "yue": "南极洲" }, flag: "🇦🇶", code: "AQ", dialCode: "672", minLength: 6, maxLength: 6, ), Country( name: "Antigua and Barbuda", nameTranslations: { "sk": "Antigua a Barbuda", "se": "Antigua ja Barbuda", "pl": "Antigua i Barbuda", "no": "Antigua og Barbuda", "ja": "アンティグア・バーブーダ", "it": "Antigua e Barbuda", "zh": "安提瓜和巴布达", "nl": "Antigua en Barbuda", "de": "Antigua und Barbuda", "fr": "Antigua-et-Barbuda", "es": "Antigua y Barbuda", "en": "Antigua & Barbuda", "pt_BR": "Antigua e Barbuda", "sr-Cyrl": "Антигва и Барбуда", "sr-Latn": "Antigva i Barbuda", "zh_TW": "安提瓜和巴布達", "tr": "Antigua ve Barbuda", "ro": "Antigua şi Barbuda", "ar": "أنتيغوا وباربودا", "fa": "آنتیگوآ و باربودا", "yue": "安提瓜同巴布达" }, flag: "🇦🇬", code: "AG", dialCode: "1268", minLength: 7, maxLength: 7, ), Country( name: "Argentina", nameTranslations: { "sk": "Argentína", "se": "Argentina", "pl": "Argentyna", "no": "Argentina", "ja": "アルゼンチン", "it": "Argentina", "zh": "阿根廷", "nl": "Argentinië", "de": "Argentinien", "fr": "Argentine", "es": "Argentina", "en": "Argentina", "pt_BR": "Argentina", "sr-Cyrl": "Аргентина", "sr-Latn": "Argentina", "zh_TW": "阿根廷", "tr": "Arjantin", "ro": "Argentina", "ar": "الأرجنتين", "fa": "آرژانتین", "yue": "阿根廷" }, flag: "🇦🇷", code: "AR", dialCode: "54", minLength: 12, maxLength: 12, ), Country( name: "Armenia", nameTranslations: { "sk": "Arménsko", "se": "Armenia", "pl": "Armenia", "no": "Armenia", "ja": "アルメニア", "it": "Armenia", "zh": "亚美尼亚", "nl": "Armenië", "de": "Armenien", "fr": "Arménie", "es": "Armenia", "en": "Armenia", "pt_BR": "Armênia", "sr-Cyrl": "Јерменија", "sr-Latn": "Jermenija", "zh_TW": "亞美尼亞", "tr": "Ermenistan", "ro": "Armenia", "ar": "أرمينيا", "fa": "ارمنستان", "yue": "亞美尼亞" }, flag: "🇦🇲", code: "AM", dialCode: "374", minLength: 8, maxLength: 8, ), Country( name: "Aruba", nameTranslations: { "sk": "Aruba", "se": "Aruba", "pl": "Aruba", "no": "Aruba", "ja": "アルバ", "it": "Aruba", "zh": "阿鲁巴", "nl": "Aruba", "de": "Aruba", "fr": "Aruba", "es": "Aruba", "en": "Aruba", "pt_BR": "Aruba", "sr-Cyrl": "Аруба", "sr-Latn": "Aruba", "zh_TW": "阿魯巴", "tr": "Aruba", "ro": "Aruba", "ar": "أروبا", "fa": "آروبا", "yue": "阿魯巴島" }, flag: "🇦🇼", code: "AW", dialCode: "297", minLength: 7, maxLength: 7, ), Country( name: "Australia", nameTranslations: { "sk": "Austrália", "se": "Austrália", "pl": "Australia", "no": "Australia", "ja": "オーストラリア", "it": "Australia", "zh": "澳大利亚", "nl": "Australië", "de": "Australien", "fr": "Australie", "es": "Australia", "en": "Australia", "pt_BR": "Austrália", "sr-Cyrl": "Аустралија", "sr-Latn": "Australija", "zh_TW": "澳州", "tr": "Avustralya", "ro": "Australia", "ar": "أستراليا", "fa": "استرالیا", "yue": "澳洲" }, flag: "🇦🇺", code: "AU", dialCode: "61", minLength: 9, maxLength: 9, ), Country( name: "Austria", nameTranslations: { "sk": "Rakúsko", "se": "Nuortariika", "pl": "Austria", "no": "Østerrike", "ja": "オーストリア", "it": "Austria", "zh": "奥地利", "nl": "Oostenrijk", "de": "Österreich", "fr": "Autriche", "es": "Austria", "en": "Austria", "pt_BR": "Áustria", "sr-Cyrl": "Аустрија", "sr-Latn": "Austrija", "zh_TW": "奥地利", "tr": "Avusturya", "ro": "Austria", "ar": "النمسا", "fa": "اتریش", "yue": "奧地利" }, flag: "🇦🇹", code: "AT", dialCode: "43", minLength: 13, maxLength: 13, ), Country( name: "Azerbaijan", nameTranslations: { "sk": "Azerbajdžan", "se": "Aserbaižan", "pl": "Azerbejdżan", "no": "Aserbajdsjan", "ja": "アゼルバイジャン", "it": "Azerbaigian", "zh": "阿塞拜疆", "nl": "Azerbeidzjan", "de": "Aserbaidschan", "fr": "Azerbaïdjan", "es": "Azerbaiyán", "en": "Azerbaijan", "pt_BR": "Azerbaijão", "sr-Cyrl": "Азербејџан", "sr-Latn": "Azerbejdžan", "zh_TW": "亞塞拜然", "tr": "Azerbaycan", "ro": "Azerbaidjan", "ar": "أذربيجان", "fa": "آذربایجان", "yue": "阿塞拜疆" }, flag: "🇦🇿", code: "AZ", dialCode: "994", minLength: 9, maxLength: 9, ), Country( name: "Bahamas", nameTranslations: { "sk": "Bahamy", "se": "Bahamas", "pl": "Bahamy", "no": "Bahamas", "ja": "バハマ", "it": "Bahamas", "zh": "巴哈马", "nl": "Bahama's", "de": "Bahamas", "fr": "Bahamas", "es": "Bahamas", "en": "Bahamas", "pt_BR": "Bahamas", "sr-Cyrl": "Бахаме", "sr-Latn": "Bahame", "zh_TW": "巴哈馬", "tr": "Bahama", "ro": "Bahamas", "ar": "باهاماس", "fa": "باهاماس", "yue": "巴哈馬" }, flag: "🇧🇸", code: "BS", dialCode: "1242", minLength: 7, maxLength: 7, ), Country( name: "Bahrain", nameTranslations: { "sk": "Bahrajn", "se": "Bahrain", "pl": "Bahrajn", "no": "Bahrain", "ja": "バーレーン", "it": "Bahrein", "zh": "巴林", "nl": "Bahrein", "de": "Bahrain", "fr": "Bahreïn", "es": "Baréin", "en": "Bahrain", "pt_BR": "Bahrain", "sr-Cyrl": "Бахреин", "sr-Latn": "Bahrein", "zh_TW": "巴林", "tr": "Bahreyn", "ro": "Bahrein", "ar": "البحرين", "fa": "بحرین", "yue": "巴林" }, flag: "🇧🇭", code: "BH", dialCode: "973", minLength: 8, maxLength: 8, ), Country( name: "Bangladesh", nameTranslations: { "sk": "Bangladéš", "se": "Bangladesh", "pl": "Bangladesz", "no": "Bangladesh", "ja": "バングラデシュ", "it": "Bangladesh", "zh": "孟加拉国", "nl": "Bangladesh", "de": "Bangladesch", "fr": "Bangladesh", "es": "Bangladés", "en": "Bangladesh", "pt_BR": "Bangladesh", "sr-Cyrl": "Бангладеш", "sr-Latn": "Bangladeš", "zh_TW": "孟加拉", "tr": "Bangladeş", "ro": "Bangladesh", "ar": "بنغلاديش", "fa": "بنگلادش", "yue": "孟加拉囯" }, flag: "🇧🇩", code: "BD", dialCode: "880", minLength: 10, maxLength: 10, ), Country( name: "Barbados", nameTranslations: { "sk": "Barbados", "se": "Barbados", "pl": "Barbados", "no": "Barbados", "ja": "バルバドス", "it": "Barbados", "zh": "巴巴多斯", "nl": "Barbados", "de": "Barbados", "fr": "Barbade", "es": "Barbados", "en": "Barbados", "pt_BR": "Barbados", "sr-Cyrl": "Барбадос", "sr-Latn": "Barbados", "zh_TW": "巴巴多斯", "tr": "Barbados", "ro": "Barbados", "ar": "باربادوس", "fa": "باربادوس", "yue": "巴巴多斯" }, flag: "🇧🇧", code: "BB", dialCode: "1246", minLength: 7, maxLength: 7, ), Country( name: "Belarus", nameTranslations: { "sk": "Bielorusko", "se": "Vilges-Ruošša", "pl": "Białoruś", "no": "Hviterussland", "ja": "ベラルーシ", "it": "Bielorussia", "zh": "白俄罗斯", "nl": "Belarus", "de": "Belarus", "fr": "Biélorussie", "es": "Bielorrusia", "en": "Belarus", "pt_BR": "Bielo-Rússia", "sr-Cyrl": "Белорусија", "sr-Latn": "Belorusija", "zh_TW": "白俄羅斯", "tr": "Belarus", "ro": "Belarus", "ar": "بيلاروس", "fa": "بلاروس", "yue": "白俄羅斯" }, flag: "🇧🇾", code: "BY", dialCode: "375", minLength: 10, maxLength: 10, ), Country( name: "Belgium", nameTranslations: { "sk": "Belgicko", "se": "Belgia", "pl": "Belgia", "no": "Belgia", "ja": "ベルギー", "it": "Belgio", "zh": "比利时", "nl": "België", "de": "Belgien", "fr": "Belgique", "es": "Bélgica", "en": "Belgium", "pt_BR": "Bélgica", "sr-Cyrl": "Белгија", "sr-Latn": "Belgija", "zh_TW": "比利時", "tr": "Belçika", "ro": "Belgia", "ar": "بلجيكا", "fa": "بلژیک", "yue": "比利時" }, flag: "🇧🇪", code: "BE", dialCode: "32", minLength: 9, maxLength: 9, ), Country( name: "Belize", nameTranslations: { "sk": "Belize", "se": "Belize", "pl": "Belize", "no": "Belize", "ja": "ベリーズ", "it": "Belize", "zh": "伯利兹", "nl": "Belize", "de": "Belize", "fr": "Belize", "es": "Belice", "en": "Belize", "pt_BR": "Belize", "sr-Cyrl": "Белизе", "sr-Latn": "Belize", "zh_TW": "伯利茲", "tr": "Belize", "ro": "Belize", "ar": "بليز", "fa": "بليز", "yue": "伯利茲" }, flag: "🇧🇿", code: "BZ", dialCode: "501", minLength: 7, maxLength: 7, ), Country( name: "Benin", nameTranslations: { "sk": "Benin", "se": "Benin", "pl": "Benin", "no": "Benin", "ja": "ベナン", "it": "Benin", "zh": "贝宁", "nl": "Benin", "de": "Benin", "fr": "Bénin", "es": "Benín", "en": "Benin", "pt_BR": "Benin", "sr-Cyrl": "Бенин", "sr-Latn": "Benin", "zh_TW": "貝南", "tr": "Benin", "ro": "Benin", "ar": "بنين", "fa": "بنين", "yue": "貝寧" }, flag: "🇧🇯", code: "BJ", dialCode: "229", minLength: 8, maxLength: 8, ), Country( name: "Bermuda", nameTranslations: { "sk": "Bermudy", "se": "Bermuda", "pl": "Bermudy", "no": "Bermuda", "ja": "バミューダ", "it": "Bermuda", "zh": "百慕大", "nl": "Bermuda", "de": "Bermuda", "fr": "Bermudes", "es": "Bermudas", "en": "Bermuda", "pt_BR": "Bermudas", "sr-Cyrl": "Бермуда", "sr-Latn": "Bermuda", "zh_TW": "百慕達", "tr": "Bermuda", "ro": "Insulele Bermude", "ar": "برمودا", "fa": "برمودا", "yue": "百慕大" }, flag: "🇧🇲", code: "BM", dialCode: "1441", minLength: 7, maxLength: 7, ), Country( name: "Bhutan", nameTranslations: { "sk": "Bhután", "se": "Bhutan", "pl": "Bhutan", "no": "Bhutan", "ja": "ブータン", "it": "Bhutan", "zh": "不丹", "nl": "Bhutan", "de": "Bhutan", "fr": "Bhoutan", "es": "Bután", "en": "Bhutan", "pt_BR": "Butão", "sr-Cyrl": "Бутан", "sr-Latn": "Butan", "zh_TW": "不丹", "tr": "Bhutan", "ro": "Bhutan", "ar": "بوتان", "fa": "بوتان", "yue": "不丹" }, flag: "🇧🇹", code: "BT", dialCode: "975", minLength: 8, maxLength: 8, ), Country( name: "Bolivia, Plurinational State of bolivia", nameTranslations: { "sk": "Bolívia", "se": "Bolivia", "pl": "Boliwia", "no": "Bolivia", "ja": "ボリビア", "it": "Bolivia", "zh": "玻利维亚", "nl": "Bolivia", "de": "Bolivien", "fr": "Bolivie", "es": "Bolivia", "en": "Bolivia", "pt_BR": "Bolívia", "sr-Cyrl": "Боливија", "sr-Latn": "Bolivija", "zh_TW": "玻利維亞", "tr": "Bolivya", "ro": "Bolivia", "ar": "بوليفيا", "fa": "بولیوی", "yue": "玻利維亞(多民族國家)" }, flag: "🇧🇴", code: "BO", dialCode: "591", minLength: 8, maxLength: 8, ), Country( name: "Bosnia and Herzegovina", nameTranslations: { "sk": "Bosna a Hercegovina", "se": "Bosnia-Hercegovina", "pl": "Bośnia i Hercegowina", "no": "Bosnia-Hercegovina", "ja": "ボスニア・ヘルツェゴビナ", "it": "Bosnia ed Erzegovina", "zh": "波斯尼亚和黑塞哥维那", "nl": "Bosnië en Herzegovina", "de": "Bosnien und Herzegowina", "fr": "Bosnie-Herzégovine", "es": "Bosnia y Herzegovina", "en": "Bosnia & Herzegovina", "pt_BR": "Bósnia e Herzegovina", "sr-Cyrl": "Босна и Херцеговина", "sr-Latn": "Bosna i Hercegovina", "zh_TW": "波士尼亞和黑塞哥維那", "tr": "Bosna Hersek", "ro": "Bosnia și Herțegovina", "ar": "البوسنة والهرسك", "fa": "بوسنی و هرزگوین", "yue": "波斯尼亞黑塞哥維那" }, flag: "🇧🇦", code: "BA", dialCode: "387", minLength: 9, maxLength: 9, ), Country( name: "Botswana", nameTranslations: { "sk": "Botswana", "se": "Botswana", "pl": "Botswana", "no": "Botswana", "ja": "ボツワナ", "it": "Botswana", "zh": "博茨瓦纳", "nl": "Botswana", "de": "Botsuana", "fr": "Botswana", "es": "Botsuana", "en": "Botswana", "pt_BR": "Botswana", "sr-Cyrl": "Боцвана", "sr-Latn": "Bocvana", "zh_TW": "博茨瓦納", "tr": "Botsvana", "ro": "Botswana", "ar": "بوتسوانا", "fa": "بوتسوانا", "yue": "博茨瓦納" }, flag: "🇧🇼", code: "BW", dialCode: "267", minLength: 8, maxLength: 8, ), Country( name: "Bouvet Island", nameTranslations: { "sk": "Bouvetov ostrov", "se": "Bouvet-sullot", "pl": "Wyspa Bouveta", "no": "Bouvetøya", "ja": "ブーベ島", "it": "Isola Bouvet", "zh": "布韦岛", "nl": "Bouveteiland", "de": "Bouvetinsel", "fr": "Île Bouvet", "es": "Isla Bouvet", "en": "Bouvet Island", "pt_BR": "Ilha Bouvet", "sr-Cyrl": "Острво Буве", "sr-Latn": "Ostrvo Buve", "zh_TW": "布維特島", "tr": "Bouvet Adası", "ro": "Insula Bouvet", "ar": "جزيرة بوفيه", "fa": "جزیره بووه", "yue": "布维特岛" }, flag: "🇧🇻", code: "BV", dialCode: "47", minLength: 15, maxLength: 15, ), Country( name: "Brazil", nameTranslations: { "sk": "Brazília", "se": "Brasil", "pl": "Brazylia", "no": "Brasil", "ja": "ブラジル", "it": "Brasile", "zh": "巴西", "nl": "Brazilië", "de": "Brasilien", "fr": "Brésil", "es": "Brasil", "en": "Brazil", "pt_BR": "Brasil", "sr-Cyrl": "Бразил", "sr-Latn": "Brazil", "zh_TW": "巴西", "tr": "Brezilya", "ro": "Brazilia", "ar": "البرازيل", "fa": "برزیل", "yue": "巴西" }, flag: "🇧🇷", code: "BR", dialCode: "55", minLength: 11, maxLength: 11, ), Country( name: "British Indian Ocean Territory", nameTranslations: { "sk": "Britské indickooceánske územie", "se": "British Indian Ocean Territory", "pl": "Brytyjskie Terytorium Oceanu Indyjskiego", "no": "Det britiske territoriet i Indiahavet", "ja": "英領インド洋地域", "it": "Territorio britannico dell'Oceano Indiano", "zh": "英属印度洋领地", "nl": "Brits Indische Oceaanterritorium", "de": "Britisches Territorium im Indischen Ozean", "fr": "Territoire britannique de l'océan Indien", "es": "Territorio Británico del Océano Índico", "en": "British Indian Ocean Territory", "pt_BR": "Território Britânico do Oceano Índico", "sr-Cyrl": "Британска територија Индијског океана", "sr-Latn": "Britanska teritorija Indijskog okeana", "zh_TW": "英屬印度洋領地", "tr": "Britanya Hint Okyanusu Toprakları", "ro": "Teritoriul Britanic din Oceanul Indian", "ar": "إقليم المحيط الهندي البريطاني", "fa": "سرزمین دریایی هند - بریتانیا", "yue": "英屬印度洋領土" }, flag: "🇮🇴", code: "IO", dialCode: "246", minLength: 7, maxLength: 7, ), Country( name: "Brunei Darussalam", nameTranslations: { "sk": "Brunej", "se": "Brunei", "pl": "Brunei", "no": "Brunei", "ja": "ブルネイ", "it": "Brunei", "zh": "文莱", "nl": "Brunei", "de": "Brunei Darussalam", "fr": "Brunéi Darussalam", "es": "Brunéi", "en": "Brunei", "pt_BR": "Brunei", "sr-Cyrl": "Брунеј", "sr-Latn": "Brunej", "zh_TW": "汶萊", "tr": "Bruney", "ro": "Brunei", "ar": "بروناي", "fa": "برونئی", "yue": "文萊達魯薩蘭國" }, flag: "🇧🇳", code: "BN", dialCode: "673", minLength: 7, maxLength: 7, ), Country( name: "Bulgaria", nameTranslations: { "sk": "Bulharsko", "se": "Bulgária", "pl": "Bułgaria", "no": "Bulgaria", "ja": "ブルガリア", "it": "Bulgaria", "zh": "保加利亚", "nl": "Bulgarije", "de": "Bulgarien", "fr": "Bulgarie", "es": "Bulgaria", "en": "Bulgaria", "pt_BR": "Bulgária", "sr-Cyrl": "Бугарска", "sr-Latn": "Bugarska", "zh_TW": "保加利亞", "tr": "Bulgaristan", "ro": "Bulgaria", "ar": "بلغاريا", "fa": "بلغارستان", "yue": "保加利亞" }, flag: "🇧🇬", code: "BG", dialCode: "359", minLength: 9, maxLength: 9, ), Country( name: "Burkina Faso", nameTranslations: { "sk": "Burkina Faso", "se": "Burkina Faso", "pl": "Burkina Faso", "no": "Burkina Faso", "ja": "ブルキナファソ", "it": "Burkina Faso", "zh": "布基纳法索", "nl": "Burkina Faso", "de": "Burkina Faso", "fr": "Burkina Faso", "es": "Burkina Faso", "en": "Burkina Faso", "pt_BR": "Burkina Faso", "sr-Cyrl": "Буркина Фасо", "sr-Latn": "Burkina Faso", "zh_TW": "布吉納法索", "tr": "Burkina Faso", "ro": "Burkina Faso", "ar": "بوركينا فاسو", "fa": "بورکینافاسو", "yue": "布基納法索" }, flag: "🇧🇫", code: "BF", dialCode: "226", minLength: 8, maxLength: 8, ), Country( name: "Burundi", nameTranslations: { "sk": "Burundi", "se": "Burundi", "pl": "Burundi", "no": "Burundi", "ja": "ブルンジ", "it": "Burundi", "zh": "布隆迪", "nl": "Burundi", "de": "Burundi", "fr": "Burundi", "es": "Burundi", "en": "Burundi", "pt_BR": "Burundi", "sr-Cyrl": "Бурунди", "sr-Latn": "Burundi", "zh_TW": "蒲隆地", "tr": "Burundi", "ro": "Burundi", "ar": "بوروندي", "fa": "بوروندی", "yue": "蒲隆地" }, flag: "🇧🇮", code: "BI", dialCode: "257", minLength: 8, maxLength: 8, ), Country( name: "Cambodia", nameTranslations: { "sk": "Kambodža", "se": "Kambodža", "pl": "Kambodża", "no": "Kambodsja", "ja": "カンボジア", "it": "Cambogia", "zh": "柬埔寨", "nl": "Cambodja", "de": "Kambodscha", "fr": "Cambodge", "es": "Camboya", "en": "Cambodia", "pt_BR": "Camboja", "sr-Cyrl": "Камбоџа", "sr-Latn": "Kambodža", "zh_TW": "柬埔寨", "tr": "Kamboçya", "ro": "Cambogia", "ar": "كمبوديا", "fa": "کامبوج", "yue": "柬埔寨" }, flag: "🇰🇭", code: "KH", dialCode: "855", minLength: 9, maxLength: 9, ), Country( name: "Cameroon", nameTranslations: { "sk": "Kamerun", "se": "Kamerun", "pl": "Kamerun", "no": "Kamerun", "ja": "カメルーン", "it": "Camerun", "zh": "喀麦隆", "nl": "Kameroen", "de": "Kamerun", "fr": "Cameroun", "es": "Camerún", "en": "Cameroon", "pt_BR": "Camarões", "sr-Cyrl": "Камерун", "sr-Latn": "Kamerun", "zh_TW": "喀麥隆", "tr": "Kamerun", "ro": "Camerun", "ar": "الكاميرون", "fa": "کامرون", "yue": "喀 麥 隆" }, flag: "🇨🇲", code: "CM", dialCode: "237", minLength: 9, maxLength: 9, ), Country( name: "Canada", nameTranslations: { "sk": "Kanada", "se": "Kanáda", "pl": "Kanada", "no": "Canada", "ja": "カナダ", "it": "Canada", "zh": "加拿大", "nl": "Canada", "de": "Kanada", "fr": "Canada", "es": "Canadá", "en": "Canada", "pt_BR": "Canadá", "sr-Cyrl": "Канада", "sr-Latn": "Kanada", "zh_TW": "加拿大", "tr": "Kanada", "ro": "Canada", "ar": "كندا", "fa": "کانادا", "yue": "加拿大" }, flag: "🇨🇦", code: "CA", dialCode: "1", minLength: 10, maxLength: 10, ), Country( name: "Cayman Islands", nameTranslations: { "sk": "Kajmanie ostrovy", "se": "Cayman-sullot", "pl": "Kajmany", "no": "Caymanøyene", "ja": "ケイマン諸島", "it": "Isole Cayman", "zh": "开曼群岛", "nl": "Kaaimaneilanden", "de": "Kaimaninseln", "fr": "Îles Caïmans", "es": "Islas Caimán", "en": "Cayman Islands", "pt_BR": "Ilhas Cayman", "sr-Cyrl": "Кајманска Острва", "sr-Latn": "Kajmanska Ostrva", "zh_TW": "開曼群島", "tr": "Cayman Adaları", "ro": "Insulele Cayman", "ar": "جزر كايمان", "fa": "جزایر کیمن", "yue": "開曼群島" }, flag: "🇰🇾", code: "KY", dialCode: "345", minLength: 7, maxLength: 7, ), Country( name: "Central African Republic", nameTranslations: { "sk": "Stredoafrická republika", "se": "Gaska-Afrihká dásseváldi", "pl": "Republika Środkowoafrykańska", "no": "Den sentralafrikanske republikk", "ja": "中央アフリカ共和国", "it": "Repubblica Centrafricana", "zh": "中非共和国", "nl": "Centraal-Afrikaanse Republiek", "de": "Zentralafrikanische Republik", "fr": "République centrafricaine", "es": "República Centroafricana", "en": "Central African Republic", "pt_BR": "República Centro-Africana", "sr-Cyrl": "Централноафричка Република", "sr-Latn": "Centralnoafrička Republika", "zh_TW": "中非共和國", "tr": "Orta Afrika Cumhuriyeti", "ro": "Republica Centrafricană", "ar": "جمهورية أفريقيا الوسطى", "fa": "جمهوری افریقای مرکزی", "yue": "中非共和國" }, flag: "🇨🇫", code: "CF", dialCode: "236", minLength: 8, maxLength: 8, ), Country( name: "Chad", nameTranslations: { "sk": "Čad", "se": "Tčad", "pl": "Czad", "no": "Tsjad", "ja": "チャド", "it": "Ciad", "zh": "乍得", "nl": "Tsjaad", "de": "Tschad", "fr": "Tchad", "es": "Chad", "en": "Chad", "pt_BR": "Chade", "sr-Cyrl": "Чад", "sr-Latn": "Čad", "zh_TW": "查德", "tr": "Çad", "ro": "Ciad", "ar": "تشاد", "fa": "چاد", "yue": "乍得" }, flag: "🇹🇩", code: "TD", dialCode: "235", minLength: 7, maxLength: 7, ), Country( name: "Chile", nameTranslations: { "sk": "Čile", "se": "Čiile", "pl": "Chile", "no": "Chile", "ja": "チリ", "it": "Cile", "zh": "智利", "nl": "Chili", "de": "Chile", "fr": "Chili", "es": "Chile", "en": "Chile", "pt_BR": "Chile", "sr-Cyrl": "Чиле", "sr-Latn": "Čile", "zh_TW": "智利", "tr": "Şili", "ro": "Chile", "ar": "تشيلي", "fa": "شیلی", "yue": "智利" }, flag: "🇨🇱", code: "CL", dialCode: "56", minLength: 9, maxLength: 9, ), Country( name: "China", nameTranslations: { "sk": "Čína", "se": "Kiinná", "pl": "Chiny", "no": "Kina", "ja": "中国", "it": "Cina", "zh": "中国", "nl": "China", "de": "China", "fr": "Chine", "es": "China", "en": "China", "pt_BR": "China", "sr-Cyrl": "Кина", "sr-Latn": "Kina", "zh_TW": "中國", "tr": "Çin", "ro": "China", "ar": "الصين", "fa": "چین", "yue": "中國" }, flag: "🇨🇳", code: "CN", dialCode: "86", minLength: 11, maxLength: 12, ), Country( name: "Christmas Island", nameTranslations: { "sk": "Vianočný ostrov", "se": "Juovllat-sullot", "pl": "Wyspa Bożego Narodzenia", "no": "Christmasøya", "ja": "クリスマス島", "it": "Isola Christmas", "zh": "圣诞岛", "nl": "Christmaseiland", "de": "Weihnachtsinsel", "fr": "Île Christmas", "es": "Isla de Navidad", "en": "Christmas Island", "pt_BR": "Ilha do Natal", "sr-Cyrl": "Ускршња Острва", "sr-Latn": "Uskršnja Ostrva", "zh_TW": "聖誕島", "tr": "Christmas Adası", "ro": "Insula Crăciunului", "ar": "جزيرة عيد الميلاد", "fa": "جزیره کریسمس", "yue": "聖誕島" }, flag: "🇨🇽", code: "CX", dialCode: "61", minLength: 15, maxLength: 15, ), Country( name: "Cocos (Keeling) Islands", nameTranslations: { "sk": "Kokosové ostrovy", "se": "Cocos-sullot", "pl": "Wyspy Kokosowe", "no": "Kokosøyene", "ja": "ココス(キーリング)諸島", "it": "Isole Cocos (Keeling)", "zh": "科科斯(基林)群岛", "nl": "Cocoseilanden", "de": "Kokosinseln", "fr": "Îles Cocos", "es": "Islas Cocos", "en": "Cocos (Keeling) Islands", "pt_BR": "Ilhas Cocos (Keeling)", "sr-Cyrl": "Кокосова Острва", "sr-Latn": "Kokosova Ostrva", "zh_TW": "科科斯(基林)群島", "tr": "Cocos (Keyling) Adaları", "ro": "Insulele Cocos", "ar": "جزر كوكوس", "fa": "جزایر کوکوس", "yue": "可可島(基林)群島" }, flag: "🇨🇨", code: "CC", dialCode: "61", minLength: 15, maxLength: 15, ), Country( name: "Colombia", nameTranslations: { "sk": "Kolumbia", "se": "Kolombia", "pl": "Kolumbia", "no": "Colombia", "ja": "コロンビア", "it": "Colombia", "zh": "哥伦比亚", "nl": "Colombia", "de": "Kolumbien", "fr": "Colombie", "es": "Colombia", "en": "Colombia", "pt_BR": "Colômbia", "sr-Cyrl": "Колумбија", "sr-Latn": "Kolumbija", "zh_TW": "哥倫比亞", "tr": "Kolombiya", "ro": "Columbia", "ar": "كولومبيا", "fa": "کلمبیا", "yue": "哥倫比亞" }, flag: "🇨🇴", code: "CO", dialCode: "57", minLength: 10, maxLength: 10, ), Country( name: "Comoros", nameTranslations: { "sk": "Komory", "se": "Komoros", "pl": "Komory", "no": "Komorene", "ja": "コモロ", "it": "Comore", "zh": "科摩罗", "nl": "Comoren", "de": "Komoren", "fr": "Comores", "es": "Comoras", "en": "Comoros", "pt_BR": "Comores", "sr-Cyrl": "Комори", "sr-Latn": "Komori", "zh_TW": "科摩羅", "tr": "Komor Adaları", "ro": "Comore", "ar": "جزر القمر", "fa": "جزیره کومور", "yue": "科摩羅" }, flag: "🇰🇲", code: "KM", dialCode: "269", minLength: 7, maxLength: 7, ), Country( name: "Congo", nameTranslations: { "sk": "Konžská republika", "se": "Kongo-Brazzaville", "pl": "Kongo", "no": "Kongo-Brazzaville", "ja": "コンゴ共和国(ブラザビル)", "it": "Congo-Brazzaville", "zh": "刚果(布)", "nl": "Congo-Brazzaville", "de": "Kongo-Brazzaville", "fr": "Congo-Brazzaville", "es": "Congo", "en": "Congo - Brazzaville", "pt_BR": "República do Congo", "sr-Cyrl": "Република Конго", "sr-Latn": "Republika Kongo", "zh_TW": "剛果共和國(布拉柴維爾)", "tr": "Kongo Cumhuriyeti", "ro": "Republica Congo", "ar": "جمهورية الكونغو", "fa": "جمهوری کنگو", "yue": "剛果(共和國)" }, flag: "🇨🇬", code: "CG", dialCode: "242", minLength: 7, maxLength: 7, ), Country( name: "Congo, The Democratic Republic of the Congo", nameTranslations: { "sk": "Konžská demokratická republika", "se": "Kongo-Kinshasa", "pl": "Demokratyczna Republika Konga", "no": "Kongo-Kinshasa", "ja": "コンゴ民主共和国(キンシャサ)", "it": "Congo - Kinshasa", "zh": "刚果(金)", "nl": "Congo-Kinshasa", "de": "Kongo-Kinshasa", "fr": "Congo-Kinshasa", "es": "República Democrática del Congo", "en": "Congo - Kinshasa", "pt_BR": "República Democrática do Congo", "sr-Cyrl": "Демократска Република Конго", "sr-Latn": "Demokratska Republika Kongo", "zh_TW": "剛果民主共和國(金沙薩)", "tr": "Kongo Demokratik Cumhuriyeti", "ro": "Republica Democrată Congo", "ar": "جمهورية الكونغو الديمقراطية", "fa": "جمهوری دموکراتیک کنگو", "yue": "剛果(金)" }, flag: "🇨🇩", code: "CD", dialCode: "243", minLength: 9, maxLength: 9, ), Country( name: "Cook Islands", nameTranslations: { "sk": "Cookove ostrovy", "se": "Cook-sullot", "pl": "Wyspy Cooka", "no": "Cookøyene", "ja": "クック諸島", "it": "Isole Cook", "zh": "库克群岛", "nl": "Cookeilanden", "de": "Cookinseln", "fr": "Îles Cook", "es": "Islas Cook", "en": "Cook Islands", "pt_BR": "Ilhas Cook", "sr-Cyrl": "Кукова Острва", "sr-Latn": "Kukova Ostrva", "zh_TW": "庫克群島", "tr": "Cook Adaları", "ro": "Insulele Cook", "ar": "جزر كوك", "fa": "جزایر کوک", "yue": "庫克群島" }, flag: "🇨🇰", code: "CK", dialCode: "682", minLength: 5, maxLength: 5, ), Country( name: "Costa Rica", nameTranslations: { "sk": "Kostarika", "se": "Costa Rica", "pl": "Kostaryka", "no": "Costa Rica", "ja": "コスタリカ", "it": "Costa Rica", "zh": "哥斯达黎加", "nl": "Costa Rica", "de": "Costa Rica", "fr": "Costa Rica", "es": "Costa Rica", "en": "Costa Rica", "pt_BR": "Costa Rica", "sr-Cyrl": "Коста Рика", "sr-Latn": "Kosta Rika", "zh_TW": "哥斯大黎加", "tr": "Kosta Rika", "ro": "Costa Rica", "ar": "كوستاريكا", "fa": "کاستاریکا", "yue": "哥斯達黎加" }, flag: "🇨🇷", code: "CR", dialCode: "506", minLength: 8, maxLength: 8, ), Country( name: "Côte d'Ivoire", nameTranslations: { "sk": "Pobrežie Slonoviny", "se": "Elfenbenariddu", "pl": "Côte d'Ivoire", "no": "Elfenbenskysten", "ja": "コートジボワール", "it": "Costa d'Avorio", "zh": "科特迪瓦", "nl": "Ivoorkust", "de": "Côte d'Ivoire", "fr": "Côte d'Ivoire", "es": "Côte d'Ivoire", "en": "Côte d'Ivoire", "pt_BR": "Côte d'Ivoire", "sr-Cyrl": "Обала Слоноваче", "sr-Latn": "Obala Slonovače", "zh_TW": "象牙海岸", "tr": "Fildişi Kıyısı", "ro": "Coasta de fildeș", "ar": "ساحل العاج", "fa": "ساحل عاج", "yue": "科特迪瓦" }, flag: "🇨🇮", code: "CI", dialCode: "225", minLength: 10, maxLength: 10, ), Country( name: "Croatia", nameTranslations: { "sk": "Chorvátsko", "se": "Kroátia", "pl": "Chorwacja", "no": "Kroatia", "ja": "クロアチア", "it": "Croazia", "zh": "克罗地亚", "nl": "Kroatië", "de": "Kroatien", "fr": "Croatie", "es": "Croacia", "en": "Croatia", "pt_BR": "Croácia", "sr-Cyrl": "Хрватска", "sr-Latn": "Hrvatska", "zh_TW": "克羅埃西亞", "tr": "Hırvatistan", "ro": "Croația", "ar": "كرواتيا", "fa": "کرواسی", "yue": "克羅地亞" }, flag: "🇭🇷", code: "HR", dialCode: "385", minLength: 12, maxLength: 12, ), Country( name: "Cuba", nameTranslations: { "sk": "Kuba", "se": "Kuba", "pl": "Kuba", "no": "Cuba", "ja": "キューバ", "it": "Cuba", "zh": "古巴", "nl": "Cuba", "de": "Kuba", "fr": "Cuba", "es": "Cuba", "en": "Cuba", "pt_BR": "Cuba", "sr-Cyrl": "Куба", "sr-Latn": "Kuba", "zh_TW": "古巴", "tr": "Küba", "ro": "Cuba", "ar": "كوبا", "fa": "كوبا", "yue": "古巴" }, flag: "🇨🇺", code: "CU", dialCode: "53", minLength: 8, maxLength: 8, ), Country( name: "Cyprus", nameTranslations: { "sk": "Cyprus", "se": "Kypros", "pl": "Cypr", "no": "Kypros", "ja": "キプロス", "it": "Cipro", "zh": "塞浦路斯", "nl": "Cyprus", "de": "Zypern", "fr": "Chypre", "es": "Chipre", "en": "Cyprus", "pt_BR": "Chipre", "sr-Cyrl": "Кипар", "sr-Latn": "Kipar", "zh_TW": "塞普勒斯", "tr": "Kıbrıs", "ro": "Cipru", "ar": "قبرص", "fa": "قبرس", "yue": "塞浦路斯" }, flag: "🇨🇾", code: "CY", dialCode: "357", minLength: 8, maxLength: 8, ), Country( name: "Czech Republic", nameTranslations: { "sk": "Česko", "se": "Čeahkka", "pl": "Czechy", "no": "Tsjekkia", "ja": "チェコ", "it": "Cechia", "zh": "捷克", "nl": "Tsjechië", "de": "Tschechien", "fr": "Tchéquie", "es": "Chequia", "en": "Czechia", "pt_BR": "Czechia", "sr-Cyrl": "Чешка", "sr-Latn": "Češka", "zh_TW": "捷克", "tr": "Çek Cumhuriyeti", "ro": "Cehia", "ar": "جمهورية التشيك", "fa": "جمهوری چک", "yue": "捷克共和國" }, flag: "🇨🇿", code: "CZ", dialCode: "420", minLength: 9, maxLength: 9, ), Country( name: "Denmark", nameTranslations: { "sk": "Dánsko", "se": "Dánmárku", "pl": "Dania", "no": "Danmark", "ja": "デンマーク", "it": "Danimarca", "zh": "丹麦", "nl": "Denemarken", "de": "Dänemark", "fr": "Danemark", "es": "Dinamarca", "en": "Denmark", "pt_BR": "Dinamarca", "sr-Cyrl": "Данска", "sr-Latn": "Danska", "zh_TW": "丹麥", "tr": "Danimarka", "ro": "Danemarca", "ar": "الدنمارك", "fa": "دانمارک", "yue": "丹麥" }, flag: "🇩🇰", code: "DK", dialCode: "45", minLength: 8, maxLength: 8, ), Country( name: "Djibouti", nameTranslations: { "sk": "Džibutsko", "se": "Djibouti", "pl": "Dżibuti", "no": "Djibouti", "ja": "ジブチ", "it": "Gibuti", "zh": "吉布提", "nl": "Djibouti", "de": "Dschibuti", "fr": "Djibouti", "es": "Yibuti", "en": "Djibouti", "pt_BR": "Djibouti", "sr-Cyrl": "Џибути", "sr-Latn": "Džibuti", "zh_TW": "吉布地", "tr": "Cibuti", "ro": "Djibouti", "ar": "جيبوتي", "fa": "جیبوتی", "yue": "吉布提" }, flag: "🇩🇯", code: "DJ", dialCode: "253", minLength: 6, maxLength: 6, ), Country( name: "Dominica", nameTranslations: { "sk": "Dominika", "se": "Dominica", "pl": "Dominika", "no": "Dominica", "ja": "ドミニカ国", "it": "Dominica", "zh": "多米尼克", "nl": "Dominica", "de": "Dominica", "fr": "Dominique", "es": "Dominica", "en": "Dominica", "pt_BR": "Dominica", "sr-Cyrl": "Доминика", "sr-Latn": "Dominika", "zh_TW": "多明尼加", "tr": "Dominika", "ro": "Dominica", "ar": "دومينيكا", "fa": "دومينيكا", "yue": "多米尼加" }, flag: "🇩🇲", code: "DM", dialCode: "1767", minLength: 7, maxLength: 7, ), Country( name: "Dominican Republic", nameTranslations: { "sk": "Dominikánska republika", "se": "Dominikána dásseváldi", "pl": "Dominikana", "no": "Den dominikanske republikk", "ja": "ドミニカ共和国", "it": "Repubblica Dominicana", "zh": "多米尼加共和国", "nl": "Dominicaanse Republiek", "de": "Dominikanische Republik", "fr": "République dominicaine", "es": "República Dominicana", "en": "Dominican Republic", "pt_BR": "República Dominicana", "sr-Cyrl": "Доминиканска Република", "sr-Latn": "Dominikanska Republika", "zh_TW": "多明尼加共和國", "tr": "Dominik Cumhuriyeti", "ro": "Republica Dominicană", "ar": "جمهورية الدومينيكان", "fa": "جمهوری دومنیکن", "yue": "多明尼加共和國" }, flag: "🇩🇴", code: "DO", dialCode: "1", minLength: 10, maxLength: 10, ), Country( name: "Ecuador", nameTranslations: { "sk": "Ekvádor", "se": "Ecuador", "pl": "Ekwador", "no": "Ecuador", "ja": "エクアドル", "it": "Ecuador", "zh": "厄瓜多尔", "nl": "Ecuador", "de": "Ecuador", "fr": "Équateur", "es": "Ecuador", "en": "Ecuador", "pt_BR": "Equador", "sr-Cyrl": "Еквадор", "sr-Latn": "Ekvador", "zh_TW": "厄瓜多", "tr": "Ekvador", "ro": "Ecuador", "ar": "الإكوادور", "fa": "اكوادور", "yue": "厄瓜多爾" }, flag: "🇪🇨", code: "EC", dialCode: "593", minLength: 8, maxLength: 9, ), Country( name: "Egypt", nameTranslations: { "sk": "Egypt", "se": "Egypt", "pl": "Egipt", "no": "Egypt", "ja": "エジプト", "it": "Egitto", "zh": "埃及", "nl": "Egypt", "de": "Ägypt", "fr": "Égypte", "es": "Egipt", "en": "Egypt", "pt_BR": "Egito", "sr-Cyrl": "Египат", "sr-Latn": "Egipat", "zh_TW": "埃及", "tr": "Mısır", "ro": "Egipt", "ar": "مصر", "fa": "مصر", "yue": "埃及" }, flag: "🇪🇬", code: "EG", dialCode: "2", minLength: 11, maxLength: 11, ), Country( name: "El Salvador", nameTranslations: { "sk": "Salvádor", "se": "El Salvador", "pl": "Salwador", "no": "El Salvador", "ja": "エルサルバドル", "it": "El Salvador", "zh": "萨尔瓦多", "nl": "El Salvador", "de": "El Salvador", "fr": "Salvador", "es": "El Salvador", "en": "El Salvador", "pt_BR": "El Salvador", "sr-Cyrl": "Салвадор", "sr-Latn": "Salvador", "zh_TW": "薩爾瓦多", "tr": "El Salvador", "ro": "Salvador", "ar": "السلفادور", "fa": "ال سالوادور", "yue": "薩爾瓦多" }, flag: "🇸🇻", code: "SV", dialCode: "503", minLength: 11, maxLength: 11, ), Country( name: "Equatorial Guinea", nameTranslations: { "sk": "Rovníková Guinea", "se": "Ekvatoriála Guinea", "pl": "Gwinea Równikowa", "no": "Ekvatorial-Guinea", "ja": "赤道ギニア", "it": "Guinea Equatoriale", "zh": "赤道几内亚", "nl": "Equatoriaal-Guinea", "de": "Äquatorialguinea", "fr": "Guinée équatoriale", "es": "Guinea Ecuatorial", "en": "Equatorial Guinea", "pt_BR": "Guiné Equatorial", "sr-Cyrl": "Екваторијална Гвинеја", "sr-Latn": "Ekvatorijalna Gvineja", "zh_TW": "赤道幾內亞", "tr": "Ekvator Ginesi", "ro": "Guineea Ecuatorială", "ar": "غينيا الاستوائية", "fa": "گینه استوایی", "yue": "赤道幾內亞" }, flag: "🇬🇶", code: "GQ", dialCode: "240", minLength: 6, maxLength: 6, ), Country( name: "Eritrea", nameTranslations: { "sk": "Eritrea", "se": "Eritrea", "pl": "Erytrea", "no": "Eritrea", "ja": "エリトリア", "it": "Eritrea", "zh": "厄立特里亚", "nl": "Eritrea", "de": "Eritrea", "fr": "Érythrée", "es": "Eritrea", "en": "Eritrea", "pt_BR": "Eritreia", "sr-Cyrl": "Еритреја", "sr-Latn": "Eritreja", "zh_TW": "厄立特裡亞", "tr": "Eritre", "ro": "Eritreea", "ar": "إريتريا", "fa": "اریتره", "yue": "厄立特里亞" }, flag: "🇪🇷", code: "ER", dialCode: "291", minLength: 7, maxLength: 7, ), Country( name: "Estonia", nameTranslations: { "sk": "Estónsko", "se": "Estlánda", "pl": "Estonia", "no": "Estland", "ja": "エストニア", "it": "Estonia", "zh": "爱沙尼亚", "nl": "Estland", "de": "Estland", "fr": "Estonie", "es": "Estonia", "en": "Estonia", "pt_BR": "Estônia", "sr-Cyrl": "Естонија", "sr-Latn": "Estonija", "zh_TW": "愛沙尼亞", "tr": "Estonya", "ro": "Estonia", "ar": "إستونيا", "fa": "استونی", "yue": "愛沙尼亞" }, flag: "🇪🇪", code: "EE", dialCode: "372", minLength: 10, maxLength: 10, ), Country( name: "Ethiopia", nameTranslations: { "sk": "Etiópia", "se": "Etiopia", "pl": "Etiopia", "no": "Etiopia", "ja": "エチオピア", "it": "Etiopia", "zh": "埃塞俄比亚", "nl": "Ethiopië", "de": "Äthiopien", "fr": "Éthiopie", "es": "Etiopía", "en": "Ethiopia", "pt_BR": "Etiópia", "sr-Cyrl": "Етиопија", "sr-Latn": "Etiopija", "zh_TW": "伊索比亞", "tr": "Etiyopya", "ro": "Etiopia", "ar": "إثيوبيا", "fa": "اتیوپی", "yue": "埃塞俄比亞" }, flag: "🇪🇹", code: "ET", dialCode: "251", minLength: 9, maxLength: 9, ), Country( name: "Falkland Islands (Malvinas)", nameTranslations: { "sk": "Falklandy", "se": "Falklandsullot", "pl": "Falklandy", "no": "Falklandsøyene", "ja": "フォークランド諸島", "it": "Isole Falkland", "zh": "福克兰群岛", "nl": "Falklandeilanden", "de": "Falklandinseln", "fr": "Îles Malouines", "es": "Islas Malvinas", "en": "Falkland Islands", "pt_BR": "Ilhas Falkland", "sr-Cyrl": "Фокландска Острва", "sr-Latn": "Foklandska Ostrva", "zh_TW": "福克蘭群島", "tr": "Falkland Adaları", "ro": "Insulele Falklands", "ar": "جزر فوكلاند", "fa": "جزایر فالکلند", "yue": "福克蘭群島(馬爾維納斯群島)" }, flag: "🇫🇰", code: "FK", dialCode: "500", minLength: 5, maxLength: 5, ), Country( name: "Faroe Islands", nameTranslations: { "sk": "Faerské ostrovy", "se": "Fearsullot", "pl": "Wyspy Owcze", "no": "Færøyene", "ja": "フェロー諸島", "it": "Isole Fær Øer", "zh": "法罗群岛", "nl": "Faeröer", "de": "Färöer", "fr": "Îles Féroé", "es": "Islas Feroe", "en": "Faroe Islands", "pt_BR": "ilhas Faroe", "sr-Cyrl": "Фарска Острва", "sr-Latn": "Farska Ostrva", "zh_TW": "法羅群島", "tr": "Faroe Adaları", "ro": "Insulele Feroe", "ar": "جزر فارو", "fa": "جزایر فارو", "yue": "法羅群島" }, flag: "🇫🇴", code: "FO", dialCode: "298", minLength: 6, maxLength: 6, ), Country( name: "Fiji", nameTranslations: { "sk": "Fidži", "se": "Fijisullot", "pl": "Fidżi", "no": "Fiji", "ja": "フィジー", "it": "Figi", "zh": "斐济", "nl": "Fiji", "de": "Fidschi", "fr": "Fidji", "es": "Fiyi", "en": "Fiji", "pt_BR": "Fiji", "sr-Cyrl": "Фиџи", "sr-Latn": "Fidži", "zh_TW": "斐濟", "tr": "Fiji", "ro": "Fiji", "ar": "فيجي", "fa": "فيجي", "yue": "斐濟" }, flag: "🇫🇯", code: "FJ", dialCode: "679", minLength: 7, maxLength: 7, ), Country( name: "Finland", nameTranslations: { "sk": "Fínsko", "se": "Suopma", "pl": "Finlandia", "no": "Finland", "ja": "フィンランド", "it": "Finlandia", "zh": "芬兰", "nl": "Finland", "de": "Finnland", "fr": "Finlande", "es": "Finlandia", "en": "Finland", "pt_BR": "Finlândia", "sr-Cyrl": "Финска", "sr-Latn": "Finska", "zh_TW": "芬蘭", "tr": "Finlandiya", "ro": "Finlanda", "ar": "فنلندا", "fa": "فنلاند", "yue": "芬蘭" }, flag: "🇫🇮", code: "FI", dialCode: "358", minLength: 12, maxLength: 12, ), Country( name: "France", nameTranslations: { "sk": "Francúzsko", "se": "Frankriika", "pl": "Francja", "no": "Frankrike", "ja": "フランス", "it": "Francia", "zh": "法国", "nl": "Frankrijk", "de": "Frankreich", "fr": "France", "es": "Francia", "en": "France", "pt_BR": "França", "sr-Cyrl": "Француска", "sr-Latn": "Francuska", "zh_TW": "法國", "tr": "Fransa", "ro": "Franța", "ar": "فرنسا", "fa": "فرانسه", "yue": "法國" }, flag: "🇫🇷", code: "FR", dialCode: "33", minLength: 9, maxLength: 9, ), Country( name: "French Guiana", nameTranslations: { "sk": "Francúzska Guyana", "se": "Frankriikka Guayana", "pl": "Gujana Francuska", "no": "Fransk Guyana", "ja": "仏領ギアナ", "it": "Guyana francese", "zh": "法属圭亚那", "nl": "Frans-Guyana", "de": "Französisch-Guayana", "fr": "Guyane française", "es": "Guayana Francesa", "en": "French Guiana", "pt_BR": "Guiana Francesa", "sr-Cyrl": "Француска Гвајана", "sr-Latn": "Francuska Gvajana", "zh_TW": "法屬蓋亞那", "tr": "Fransız Guyanası", "ro": "Guiana Franceză", "ar": "غويانا الفرنسية", "fa": "گویان فرانسه", "yue": "法屬圭亞那" }, flag: "🇬🇫", code: "GF", dialCode: "594", minLength: 15, maxLength: 15, ), Country( name: "French Polynesia", nameTranslations: { "sk": "Francúzska Polynézia", "se": "Frankriikka Polynesia", "pl": "Polinezja Francuska", "no": "Fransk Polynesia", "ja": "仏領ポリネシア", "it": "Polinesia francese", "zh": "法属波利尼西亚", "nl": "Frans-Polynesië", "de": "Französisch-Polynesien", "fr": "Polynésie française", "es": "Polinesia Francesa", "en": "French Polynesia", "pt_BR": "Polinésia Francesa", "sr-Cyrl": "Француска Полинезија", "sr-Latn": "Francuska Polinezija", "zh_TW": "法屬玻里尼西亞", "tr": "Fransız Polinezyası", "ro": "Polinezia Franceză", "ar": "بولينزيا الفرنسية", "fa": "پلی‌نزی فرانسه", "yue": "法屬波利尼西亞" }, flag: "🇵🇫", code: "PF", dialCode: "689", minLength: 6, maxLength: 6, ), Country( name: "French Southern Territories", nameTranslations: { "sk": "Francúzske južné a antarktické územia", "se": "French Southern Territories", "pl": "Francuskie Terytoria Południowe i Antarktyczne", "no": "De franske sørterritorier", "ja": "仏領極南諸島", "it": "Terre australi francesi", "zh": "法属南部领地", "nl": "Franse Gebieden in de zuidelijke Indische Oceaan", "de": "Französische Süd- und Antarktisgebiete", "fr": "Terres australes françaises", "es": "Territorios Australes Franceses", "en": "French Southern Territories", "pt_BR": "Territórios Franceses do Sul", "sr-Cyrl": "Француске јужне и антарктичке земље", "sr-Latn": "Francuske južne i antarktičke zemlje", "zh_TW": "法屬南部屬地", "tr": "Fransız Güney ve Antarktika Toprakları", "ro": "Teritoriile australe și antarctice franceze", "ar": "أراض فرنسية جنوبية وأنتارتيكية", "fa": "سرزمین‌های جنوبی فرانسه", "yue": "法國南部領土" }, flag: "🇹🇫", code: "TF", dialCode: "262", minLength: 15, maxLength: 15, ), Country( name: "Gabon", nameTranslations: { "sk": "Gabon", "se": "Gabon", "pl": "Gabon", "no": "Gabon", "ja": "ガボン", "it": "Gabon", "zh": "加蓬", "nl": "Gabon", "de": "Gabun", "fr": "Gabon", "es": "Gabón", "en": "Gabon", "pt_BR": "Gabão", "sr-Cyrl": "Габон", "sr-Latn": "Gabon", "zh_TW": "加彭", "tr": "Gabon", "ro": "Gabon", "ar": "الغابون", "fa": "گابن", "yue": "加蓬" }, flag: "🇬🇦", code: "GA", dialCode: "241", minLength: 9, maxLength: 9, ), Country( name: "Gambia", nameTranslations: { "sk": "Gambia", "se": "Gámbia", "pl": "Gambia", "no": "Gambia", "ja": "ガンビア", "it": "Gambia", "zh": "冈比亚", "nl": "Gambia", "de": "Gambia", "fr": "Gambie", "es": "Gambia", "en": "Gambia", "pt_BR": "Gâmbia", "sr-Cyrl": "Гамбија", "sr-Latn": "Gambija", "zh_TW": "岡比亞", "tr": "Gambiya", "ro": "Gambia", "ar": "غامبيا", "fa": "گامبیا", "yue": "岡比亞" }, flag: "🇬🇲", code: "GM", dialCode: "220", minLength: 7, maxLength: 7, ), Country( name: "Georgia", nameTranslations: { "sk": "Gruzínsko", "se": "Georgia", "pl": "Gruzja", "no": "Georgia", "ja": "ジョージア", "it": "Georgia", "zh": "格鲁吉亚", "nl": "Georgië", "de": "Georgien", "fr": "Géorgie", "es": "Georgia", "en": "Georgia", "pt_BR": "Georgia", "sr-Cyrl": "Грузија", "sr-Latn": "Gruzija", "zh_TW": "喬治亞", "tr": "Gürcistan", "ro": "Georgia", "ar": "جورجيا", "fa": "گرجستان", "yue": "格魯吉亞" }, flag: "🇬🇪", code: "GE", dialCode: "995", minLength: 8, maxLength: 9, ), Country( name: "Germany", nameTranslations: { "sk": "Nemecko", "se": "Duiska", "pl": "Niemcy", "no": "Tyskland", "ja": "ドイツ", "it": "Germania", "zh": "德国", "nl": "Duitsland", "de": "Deutschland", "fr": "Allemagne", "es": "Alemania", "en": "Germany", "pt_BR": "Alemanha", "sr-Cyrl": "Немачка", "sr-Latn": "Nemačka", "zh_TW": "德國", "tr": "Almanya", "ro": "Germania", "ar": "ألمانيا", "fa": "آلمان", "yue": "德國" }, flag: "🇩🇪", code: "DE", dialCode: "49", minLength: 9, maxLength: 13, ), Country( name: "Ghana", nameTranslations: { "sk": "Ghana", "se": "Ghana", "pl": "Ghana", "no": "Ghana", "ja": "ガーナ", "it": "Ghana", "zh": "加纳", "nl": "Ghana", "de": "Ghana", "fr": "Ghana", "es": "Ghana", "en": "Ghana", "pt_BR": "Gana", "sr-Cyrl": "Гана", "sr-Latn": "Gana", "zh_TW": "迦納", "tr": "Gana", "ro": "Ghana", "ar": "غانا", "fa": "غنا", "yue": "加納" }, flag: "🇬🇭", code: "GH", dialCode: "233", minLength: 9, maxLength: 9, ), Country( name: "Gibraltar", nameTranslations: { "sk": "Gibraltár", "se": "Gibraltar", "pl": "Gibraltar", "no": "Gibraltar", "ja": "ジブラルタル", "it": "Gibilterra", "zh": "直布罗陀", "nl": "Gibraltar", "de": "Gibraltar", "fr": "Gibraltar", "es": "Gibraltar", "en": "Gibraltar", "pt_BR": "Gibraltar", "sr-Cyrl": "Гибралтар", "sr-Latn": "Gibraltar", "zh_TW": "直布羅陀", "tr": "Cebelitarık", "ro": "Gibraltar", "ar": "جبل طارق", "fa": "جبل الطارق", "yue": "直布羅陀" }, flag: "🇬🇮", code: "GI", dialCode: "350", minLength: 8, maxLength: 8, ), Country( name: "Greece", nameTranslations: { "sk": "Grécko", "se": "Greika", "pl": "Grecja", "no": "Hellas", "ja": "ギリシャ", "it": "Grecia", "zh": "希腊", "nl": "Griekenland", "de": "Griechenland", "fr": "Grèce", "es": "Grecia", "en": "Greece", "pt_BR": "Grécia", "sr-Cyrl": "Грчка", "sr-Latn": "Grčka", "zh_TW": "希臘", "tr": "Yunanistan", "ro": "Grecia", "ar": "اليونان", "fa": "یونان", "yue": "希臘" }, flag: "🇬🇷", code: "GR", dialCode: "30", minLength: 10, maxLength: 10, ), Country( name: "Greenland", nameTranslations: { "sk": "Grónsko", "se": "Kalaallit Nunaat", "pl": "Grenlandia", "no": "Grønland", "ja": "グリーンランド", "it": "Groenlandia", "zh": "格陵兰", "nl": "Groenland", "de": "Grönland", "fr": "Groenland", "es": "Groenlandia", "en": "Greenland", "pt_BR": "Groenlândia", "sr-Cyrl": "Гренланд", "sr-Latn": "Grenland", "zh_TW": "格陵蘭", "tr": "Grönland", "ro": "Groenlanda", "ar": "جرينلاند", "fa": "گرینلند", "yue": "格陵蘭" }, flag: "🇬🇱", code: "GL", dialCode: "299", minLength: 6, maxLength: 6, ), Country( name: "Grenada", nameTranslations: { "sk": "Grenada", "se": "Grenada", "pl": "Grenada", "no": "Grenada", "ja": "グレナダ", "it": "Grenada", "zh": "格林纳达", "nl": "Grenada", "de": "Grenada", "fr": "Grenade", "es": "Granada", "en": "Grenada", "pt_BR": "Grenada", "sr-Cyrl": "Гренада", "sr-Latn": "Grenada", "zh_TW": "格林納達", "tr": "Grenada", "ro": "Grenada", "ar": "غرينادا", "fa": "گرنادا", "yue": "格林納達" }, flag: "🇬🇩", code: "GD", dialCode: "1473", minLength: 7, maxLength: 7, ), Country( name: "Guadeloupe", nameTranslations: { "sk": "Guadeloupe", "se": "Guadeloupe", "pl": "Gwadelupa", "no": "Guadeloupe", "ja": "グアドループ", "it": "Guadalupa", "zh": "瓜德罗普", "nl": "Guadeloupe", "de": "Guadeloupe", "fr": "Guadeloupe", "es": "Guadalupe", "en": "Guadeloupe", "pt_BR": "Guadalupe", "sr-Cyrl": "Гваделуп", "sr-Latn": "Gvadelup", "zh_TW": "瓜地洛普", "tr": "Guadeloupe", "ro": "Guadelupa", "ar": "غوادلوب", "fa": "گوادلوپ", "yue": "瓜德罗普" }, flag: "🇬🇵", code: "GP", dialCode: "590", minLength: 15, maxLength: 15, ), Country( name: "Guam", nameTranslations: { "sk": "Guam", "se": "Guam", "pl": "Guam", "no": "Guam", "ja": "グアム", "it": "Guam", "zh": "关岛", "nl": "Guam", "de": "Guam", "fr": "Guam", "es": "Guam", "en": "Guam", "pt_BR": "Guam", "sr-Cyrl": "Гвам", "sr-Latn": "Gvam", "zh_TW": "關島", "tr": "Guam", "ro": "Guam", "ar": "غوام", "fa": "گوام", "yue": "關島" }, flag: "🇬🇺", code: "GU", dialCode: "1671", minLength: 7, maxLength: 7, ), Country( name: "Guatemala", nameTranslations: { "sk": "Guatemala", "se": "Guatemala", "pl": "Gwatemala", "no": "Guatemala", "ja": "グアテマラ", "it": "Guatemala", "zh": "危地马拉", "nl": "Guatemala", "de": "Guatemala", "fr": "Guatemala", "es": "Guatemala", "en": "Guatemala", "pt_BR": "Guatemala", "sr-Cyrl": "Гватемала", "sr-Latn": "Gvatemala", "zh_TW": "瓜地馬拉", "tr": "Guatemala", "ro": "Guatemala", "ar": "غواتيمالا", "fa": "گواتمالا", "yue": "危地馬拉" }, flag: "🇬🇹", code: "GT", dialCode: "502", minLength: 8, maxLength: 8, ), Country( name: "Guernsey", nameTranslations: { "sk": "Guernsey", "se": "Guernsey", "pl": "Guernsey", "no": "Guernsey", "ja": "ガーンジー", "it": "Guernsey", "zh": "根西岛", "nl": "Guernsey", "de": "Guernsey", "fr": "Guernesey", "es": "Guernsey", "en": "Guernsey", "pt_BR": "Guernsey", "sr-Cyrl": "Гернзи", "sr-Latn": "Gernzi", "zh_TW": "根息島", "tr": "Guernsey", "ro": "Guernsey", "ar": "غيرنزي", "fa": "گرنزی", "yue": "格恩西島" }, flag: "🇬🇬", code: "GG", dialCode: "44", minLength: 6, maxLength: 6, ), Country( name: "Guinea", nameTranslations: { "sk": "Guinea", "se": "Guinea", "pl": "Gwinea", "no": "Guinea", "ja": "ギニア", "it": "Guinea", "zh": "几内亚", "nl": "Guinee", "de": "Guinea", "fr": "Guinée", "es": "Guinea", "en": "Guinea", "pt_BR": "Guiné", "sr-Cyrl": "Гвинеја", "sr-Latn": "Gvineja", "zh_TW": "幾內亞", "tr": "Gine", "ro": "Guinea", "ar": "غينيا", "fa": "گینه", "yue": "幾內亞" }, flag: "🇬🇳", code: "GN", dialCode: "224", minLength: 8, maxLength: 9, ), Country( name: "Guinea-Bissau", nameTranslations: { "sk": "Guinea-Bissau", "se": "Guinea-Bissau", "pl": "Gwinea Bissau", "no": "Guinea-Bissau", "ja": "ギニアビサウ", "it": "Guinea-Bissau", "zh": "几内亚比绍", "nl": "Guinee-Bissau", "de": "Guinea-Bissau", "fr": "Guinée-Bissau", "es": "Guinea-Bisáu", "en": "Guinea-Bissau", "pt_BR": "Guiné-bissau", "sr-Cyrl": "Гвинеја Бисао", "sr-Latn": "Gvineja Bisao", "zh_TW": "幾內亞比索", "tr": "Gine-Bissau", "ro": "Guineea-Bissau", "ar": "غينيا بيساو", "fa": "گینه بیسائو", "yue": "幾內亞比紹" }, flag: "🇬🇼", code: "GW", dialCode: "245", minLength: 7, maxLength: 7, ), Country( name: "Guyana", nameTranslations: { "sk": "Guyana", "se": "Guyana", "pl": "Gujana", "no": "Guyana", "ja": "ガイアナ", "it": "Guyana", "zh": "圭亚那", "nl": "Guyana", "de": "Guyana", "fr": "Guyana", "es": "Guyana", "en": "Guyana", "pt_BR": "Guiana", "sr-Cyrl": "Гвајана", "sr-Latn": "Gvajana", "zh_TW": "蓋亞那", "tr": "Guyana", "ro": "Guyana", "ar": "غيانا", "fa": "گویان", "yue": "圭亞那" }, flag: "🇬🇾", code: "GY", dialCode: "592", minLength: 7, maxLength: 7, ), Country( name: "Haiti", nameTranslations: { "sk": "Haiti", "se": "Haiti", "pl": "Haiti", "no": "Haiti", "ja": "ハイチ", "it": "Haiti", "zh": "海地", "nl": "Haïti", "de": "Haiti", "fr": "Haïti", "es": "Haití", "en": "Haiti", "pt_BR": "Haiti", "sr-Cyrl": "Хаити", "sr-Latn": "Haiti", "zh_TW": "海地", "tr": "Haiti", "ro": "Haiti", "ar": "هايتي", "fa": "هائیتی", "yue": "海地" }, flag: "🇭🇹", code: "HT", dialCode: "509", minLength: 8, maxLength: 8, ), Country( name: "Heard Island and Mcdonald Islands", nameTranslations: { "sk": "Heardov ostrov a Macdonaldove ostrovy", "se": "Heard- ja McDonald-sullot", "pl": "Wyspy Heard i McDonalda", "no": "Heard- og McDonaldøyene", "ja": "ハード島・マクドナルド諸島", "it": "Isole Heard e McDonald", "zh": "赫德岛和麦克唐纳群岛", "nl": "Heard en McDonaldeilanden", "de": "Heard und McDonaldinseln", "fr": "Îles Heard et McDonald", "es": "Islas Heard y McDonald", "en": "Heard & McDonald Islands", "pt_BR": "Ilhas Heard e McDonald", "sr-Cyrl": "Острва Херд и Макдоналд", "sr-Latn": "Ostrva Herd i Makdonald", "zh_TW": "赫德暨麥當勞群島", "tr": "Heard Adası ve McDonald Adaları", "ro": "Insula Heard și Insulele McDonald", "ar": "جزيرة هيرد وجزر ماكدونالد", "fa": "جزیره هرد و جزایر مک‌دونالد", "yue": "赫德岛同麦克唐纳群岛" }, flag: "🇭🇲", code: "HM", dialCode: "672", minLength: 15, maxLength: 15, ), Country( name: "Holy See (Vatican City State)", nameTranslations: { "sk": "Vatikán", "se": "Vatikána", "pl": "Watykan", "no": "Vatikanstaten", "ja": "バチカン市国", "it": "Città del Vaticano", "zh": "梵蒂冈", "nl": "Vaticaanstad", "de": "Vatikanstadt", "fr": "État de la Cité du Vatican", "es": "Ciudad del Vaticano", "en": "Vatican City", "pt_BR": "Cidade do Vaticano", "sr-Cyrl": "Ватикан", "sr-Latn": "Vatikan", "zh_TW": "梵蒂岡", "tr": "Vatikan", "ro": "Vatican", "ar": "الفاتيكان", "fa": "واتیکان", "yue": "梵蒂岡城國" }, flag: "🇻🇦", code: "VA", dialCode: "379", minLength: 10, maxLength: 10, ), Country( name: "Honduras", nameTranslations: { "sk": "Honduras", "se": "Honduras", "pl": "Honduras", "no": "Honduras", "ja": "ホンジュラス", "it": "Honduras", "zh": "洪都拉斯", "nl": "Honduras", "de": "Honduras", "fr": "Honduras", "es": "Honduras", "en": "Honduras", "pt_BR": "Honduras", "sr-Cyrl": "Хондурас", "sr-Latn": "Honduras", "zh_TW": "宏都拉斯", "tr": "Honduras", "ro": "Honduras", "ar": "هندوراس", "fa": "هندوراس", "yue": "洪都拉斯" }, flag: "🇭🇳", code: "HN", dialCode: "504", minLength: 8, maxLength: 8, ), Country( name: "Hong Kong", nameTranslations: { "sk": "Hongkong – OAO Číny", "se": "Hongkong", "pl": "SRA Hongkong (Chiny)", "no": "Hongkong S.A.R. Kina", "ja": "中華人民共和国香港特別行政区", "it": "RAS di Hong Kong", "zh": "中国香港特别行政区", "nl": "Hongkong SAR van China", "de": "Sonderverwaltungsregion Hongkong", "fr": "R.A.S. chinoise de Hong Kong", "es": "RAE de Hong Kong (China)", "en": "Hong Kong SAR China", "pt_BR": "RAE de Hong Kong China", "sr-Cyrl": "Хонг Конг", "sr-Latn": "Hong Kong", "zh_TW": "香港", "tr": "Hong Kong", "ro": "Hong Kong", "ar": "هونغ كونغ", "fa": "هنگ کنگ", "yue": "香港" }, flag: "🇭🇰", code: "HK", dialCode: "852", minLength: 8, maxLength: 8, ), Country( name: "Hungary", nameTranslations: { "sk": "Maďarsko", "se": "Ungár", "pl": "Węgry", "no": "Ungarn", "ja": "ハンガリー", "it": "Ungheria", "zh": "匈牙利", "nl": "Hongarije", "de": "Ungarn", "fr": "Hongrie", "es": "Hungría", "en": "Hungary", "pt_BR": "Hungria", "sr-Cyrl": "Мађарска", "sr-Latn": "Mađarska", "zh_TW": "匈牙利", "tr": "Macaristan", "ro": "Ungaria", "ar": "المجر", "fa": "مجارستان", "yue": "匈牙利" }, flag: "🇭🇺", code: "HU", dialCode: "36", minLength: 9, maxLength: 9, ), Country( name: "Iceland", nameTranslations: { "sk": "Island", "se": "Islánda", "pl": "Islandia", "no": "Island", "ja": "アイスランド", "it": "Islanda", "zh": "冰岛", "nl": "IJsland", "de": "Island", "fr": "Islande", "es": "Islandia", "en": "Iceland", "pt_BR": "Islândia", "sr-Cyrl": "Исланд", "sr-Latn": "Island", "zh_TW": "冰島", "tr": "İzlanda", "ro": "Islanda", "ar": "آيسلندا", "fa": "ایسلند", "yue": "冰島" }, flag: "🇮🇸", code: "IS", dialCode: "354", minLength: 7, maxLength: 9, ), Country( name: "India", nameTranslations: { "sk": "India", "se": "India", "pl": "Indie", "no": "India", "ja": "インド", "it": "India", "zh": "印度", "nl": "India", "de": "Indien", "fr": "Inde", "es": "India", "en": "India", "pt_BR": "Índia", "sr-Cyrl": "Индија", "sr-Latn": "Indija", "zh_TW": "印度", "tr": "Hindistan", "ro": "India", "ar": "الهند", "fa": "هند", "yue": "印度" }, flag: "🇮🇳", code: "IN", dialCode: "91", minLength: 10, maxLength: 10, ), Country( name: "Indonesia", nameTranslations: { "sk": "Indonézia", "se": "Indonesia", "pl": "Indonezja", "no": "Indonesia", "ja": "インドネシア", "it": "Indonesia", "zh": "印度尼西亚", "nl": "Indonesië", "de": "Indonesien", "fr": "Indonésie", "es": "Indonesia", "en": "Indonesia", "pt_BR": "Indonésia", "sr-Cyrl": "Индонезија", "sr-Latn": "Indonezija", "zh_TW": "印尼", "tr": "Endonezya", "ro": "Indonezia", "ar": "إندونيسيا", "fa": "اندونزی", "yue": "印尼" }, flag: "🇮🇩", code: "ID", dialCode: "62", minLength: 10, maxLength: 13, ), Country( name: "Iran, Islamic Republic of Persian Gulf", nameTranslations: { "sk": "Irán", "se": "Iran", "pl": "Iran", "no": "Iran", "ja": "イラン", "it": "Iran", "zh": "伊朗", "nl": "Iran", "de": "Iran", "fr": "Iran", "es": "Irán", "en": "Iran", "pt_BR": "Irã", "sr-Cyrl": "Иран", "sr-Latn": "Iran", "zh_TW": "伊朗", "tr": "İran", "ro": "Iran", "ar": "إيران", "fa": "ایران", "yue": "伊朗" }, flag: "🇮🇷", code: "IR", dialCode: "98", minLength: 10, maxLength: 10, ), Country( name: "Iraq", nameTranslations: { "sk": "Irak", "se": "Irak", "pl": "Irak", "no": "Irak", "ja": "イラク", "it": "Iraq", "zh": "伊拉克", "nl": "Irak", "de": "Irak", "fr": "Irak", "es": "Irak", "en": "Iraq", "pt_BR": "Iraque", "sr-Cyrl": "Ирак", "sr-Latn": "Irak", "zh_TW": "伊拉克", "tr": "Irak", "ro": "Irak", "ar": "العراق", "fa": "عراق", "yue": "伊拉克" }, flag: "🇮🇶", code: "IQ", dialCode: "964", minLength: 10, maxLength: 10, ), Country( name: "Ireland", nameTranslations: { "sk": "Írsko", "se": "Irlánda", "pl": "Irlandia", "no": "Irland", "ja": "アイルランド", "it": "Irlanda", "zh": "爱尔兰", "nl": "Ierland", "de": "Irland", "fr": "Irlande", "es": "Irlanda", "en": "Ireland", "pt_BR": "Irlanda", "sr-Cyrl": "Ирска", "sr-Latn": "Irska", "zh_TW": "愛爾蘭", "tr": "İrlanda", "ro": "Irlanda", "ar": "أيرلندا", "fa": "ایرلند", "yue": "愛爾蘭" }, flag: "🇮🇪", code: "IE", dialCode: "353", minLength: 7, maxLength: 9, ), Country( name: "Isle of Man", nameTranslations: { "sk": "Ostrov Man", "se": "Mann-sullot", "pl": "Wyspa Man", "no": "Man", "ja": "マン島", "it": "Isola di Man", "zh": "马恩岛", "nl": "Isle of Man", "de": "Isle of Man", "fr": "Île de Man", "es": "Isla de Man", "en": "Isle of Man", "pt_BR": "Ilha de Man", "sr-Cyrl": "Острво Мен", "sr-Latn": "Ostrvo Men", "zh_TW": "曼島", "tr": "Man Adası", "ro": "Insula Man", "ar": "جزيرة مان", "fa": "جزیره مان", "yue": "马伊岛" }, flag: "🇮🇲", code: "IM", dialCode: "44", minLength: 6, maxLength: 6, ), Country( name: "Israel", nameTranslations: { "sk": "Izrael", "se": "Israel", "pl": "Izrael", "no": "Israel", "ja": "イスラエル", "it": "Israele", "zh": "以色列", "nl": "Israël", "de": "Israel", "fr": "Israël", "es": "Israel", "en": "Israel", "pt_BR": "Israel", "sr-Cyrl": "Израел", "sr-Latn": "Izrael", "zh_TW": "以色列", "tr": "İsrail", "ro": "Israel", "ar": "إسرائيل", "fa": "إسرائيل", "yue": "以色列" }, flag: "🇮🇱", code: "IL", dialCode: "972", minLength: 9, maxLength: 9, ), Country( name: "Campione d'Italia", nameTranslations: { "sk": "Taliansko", "se": "Itália", "pl": "Włochy", "no": "Italia", "ja": "イタリア", "it": "Italia", "zh": "意大利", "nl": "Italië", "de": "Italien", "fr": "Italie", "es": "Italia", "en": "Italy", "pt_BR": "Itália", "sr-Cyrl": "Италија", "sr-Latn": "Italija", "zh_TW": "義大利", "tr": "İtalya", "ro": "Italia", "ar": "إيطاليا", "fa": "ایتالیا", "yue": "意大利" }, flag: "🇮🇹", code: "IT", dialCode: "39", minLength: 9, maxLength: 10, ), Country( name: "Jamaica", nameTranslations: { "sk": "Jamajka", "se": "Jamaica", "pl": "Jamajka", "no": "Jamaica", "ja": "ジャマイカ", "it": "Giamaica", "zh": "牙买加", "nl": "Jamaica", "de": "Jamaika", "fr": "Jamaïque", "es": "Jamaica", "en": "Jamaica", "pt_BR": "Jamaica", "sr-Cyrl": "Јамајка", "sr-Latn": "Jamajka", "zh_TW": "牙買加", "tr": "Jamaika", "ro": "Jamaica", "ar": "جامايكا", "fa": "جامائیکا", "yue": "牙買加" }, flag: "🇯🇲", code: "JM", dialCode: "1876", minLength: 7, maxLength: 7, ), Country( name: "Japan", nameTranslations: { "sk": "Japonsko", "se": "Japána", "pl": "Japonia", "no": "Japan", "ja": "日本", "it": "Giappone", "zh": "日本", "nl": "Japan", "de": "Japan", "fr": "Japon", "es": "Japón", "en": "Japan", "pt_BR": "Japão", "sr-Cyrl": "Јапан", "sr-Latn": "Japan", "zh_TW": "日本", "tr": "Japonya", "ro": "Japonia", "ar": "اليابان", "fa": "ژاپن", "yue": "日本" }, flag: "🇯🇵", code: "JP", dialCode: "81", minLength: 10, maxLength: 10, ), Country( name: "Jersey", nameTranslations: { "sk": "Jersey", "se": "Jersey", "pl": "Jersey", "no": "Jersey", "ja": "ジャージー", "it": "Jersey", "zh": "泽西岛", "nl": "Jersey", "de": "Jersey", "fr": "Jersey", "es": "Jersey", "en": "Jersey", "pt_BR": "Jersey", "sr-Cyrl": "Џерзи", "sr-Latn": "Džerzi", "zh_TW": "澤西", "tr": "Jersey", "ro": "Jersey", "ar": "جيرزي", "fa": "جرزی", "yue": "澤西" }, flag: "🇯🇪", code: "JE", dialCode: "44", minLength: 6, maxLength: 6, ), Country( name: "Jordan", nameTranslations: { "sk": "Jordánsko", "se": "Jordánia", "pl": "Jordania", "no": "Jordan", "ja": "ヨルダン", "it": "Giordania", "zh": "约旦", "nl": "Jordanië", "de": "Jordanien", "fr": "Jordanie", "es": "Jordania", "en": "Jordan", "pt_BR": "Jordânia", "sr-Cyrl": "Јордан", "sr-Latn": "Jordan", "zh_TW": "約旦", "tr": "Mavera-i Ürdün", "ro": "Iordania", "ar": "الأردن", "fa": "اردن", "yue": "約旦" }, flag: "🇯🇴", code: "JO", dialCode: "962", minLength: 9, maxLength: 9, ), Country( name: "Kazakhstan", nameTranslations: { "sk": "Kazachstan", "se": "Kasakstan", "pl": "Kazachstan", "no": "Kasakhstan", "ja": "カザフスタン", "it": "Kazakistan", "zh": "哈萨克斯坦", "nl": "Kazachstan", "de": "Kasachstan", "fr": "Kazakhstan", "es": "Kazajistán", "en": "Kazakhstan", "pt_BR": "Cazaquistão", "sr-Cyrl": "Казахстан", "sr-Latn": "Kazahstan", "zh_TW": "哈薩克", "tr": "Kazakistan", "ro": "Kazahstan", "ar": "كازاخستان", "fa": "قزاقستان", "yue": "哈薩克斯坦" }, flag: "🇰🇿", code: "KZ", dialCode: "7", minLength: 10, maxLength: 10, ), Country( name: "Kenya", nameTranslations: { "sk": "Keňa", "se": "Kenia", "pl": "Kenia", "no": "Kenya", "ja": "ケニア", "it": "Kenya", "zh": "肯尼亚", "nl": "Kenia", "de": "Kenia", "fr": "Kenya", "es": "Kenia", "en": "Kenya", "pt_BR": "Quênia", "sr-Cyrl": "Кенија", "sr-Latn": "Kenija", "zh_TW": "肯亞", "tr": "Kenya", "ro": "Kenya", "ar": "كينيا", "fa": "كنيا", "yue": "肯雅" }, flag: "🇰🇪", code: "KE", dialCode: "254", minLength: 10, maxLength: 10, ), Country( name: "Kiribati", nameTranslations: { "sk": "Kiribati", "se": "Kiribati", "pl": "Kiribati", "no": "Kiribati", "ja": "キリバス", "it": "Kiribati", "zh": "基里巴斯", "nl": "Kiribati", "de": "Kiribati", "fr": "Kiribati", "es": "Kiribati", "en": "Kiribati", "pt_BR": "Kiribati", "sr-Cyrl": "Кирибати", "sr-Latn": "Kiribati", "zh_TW": "吉里巴斯", "tr": "Kiribati", "ro": "Kiribati", "ar": "كيريباتي", "fa": "کیریباتی", "yue": "基里巴斯" }, flag: "🇰🇮", code: "KI", dialCode: "686", minLength: 5, maxLength: 5, ), Country( name: "Korea, Democratic People's Republic of Korea", nameTranslations: { "sk": "Severná Kórea", "se": "Davvi-Korea", "pl": "Korea Północna", "no": "Nord-Korea", "ja": "北朝鮮", "it": "Corea del Nord", "zh": "朝鲜", "nl": "Noord-Korea", "de": "Nordkorea", "fr": "Corée du Nord", "es": "Corea del Norte", "en": "North Korea", "pt_BR": "Coreia do Norte", "sr-Cyrl": "Северна Кореја", "sr-Latn": "Severna Koreja", "zh_TW": "北韓", "tr": "Kuzey Kore", "ro": "Coreea de Nord", "ar": "كوريا الشمالية", "fa": "کره شمالی", "yue": "朝鮮(朝鮮民主主義人民共咊囯)" }, flag: "🇰🇵", code: "KP", dialCode: "850", minLength: 10, maxLength: 10, ), Country( name: "Korea, Republic of South Korea", nameTranslations: { "sk": "Južná Kórea", "se": "Mátta-Korea", "pl": "Korea Południowa", "no": "Sør-Korea", "ja": "韓国", "it": "Corea del Sud", "zh": "韩国", "nl": "Zuid-Korea", "de": "Südkorea", "fr": "Corée du Sud", "es": "Corea del Sur", "en": "South Korea", "pt_BR": "Coreia do Sul", "sr-Cyrl": "Јужна Кореја", "sr-Latn": "Južna Koreja", "zh_TW": "南韓", "tr": "Güney Kore", "ro": "Coreea de Sud", "ar": "كوريا الجنوبية", "fa": "کره جنوبی", "yue": "韓國(大韓民國)" }, flag: "🇰🇷", code: "KR", dialCode: "82", minLength: 11, maxLength: 11, ), Country( name: "Kuwait", nameTranslations: { "sk": "Kuvajt", "se": "Kuwait", "pl": "Kuwejt", "no": "Kuwait", "ja": "クウェート", "it": "Kuwait", "zh": "科威特", "nl": "Koeweit", "de": "Kuwait", "fr": "Koweït", "es": "Kuwait", "en": "Kuwait", "pt_BR": "Kuwait", "sr-Cyrl": "Кувајт", "sr-Latn": "Kuvajt", "zh_TW": "科威特", "tr": "Kuveyt", "ro": "Kuweit", "ar": "الكويت", "fa": "کویت", "yue": "科威特" }, flag: "🇰🇼", code: "KW", dialCode: "965", minLength: 8, maxLength: 8, ), Country( name: "Kyrgyzstan", nameTranslations: { "sk": "Kirgizsko", "se": "Kirgisistan", "pl": "Kirgistan", "no": "Kirgisistan", "ja": "キルギス", "it": "Kirghizistan", "zh": "吉尔吉斯斯坦", "nl": "Kirgizië", "de": "Kirgisistan", "fr": "Kirghizistan", "es": "Kirguistán", "en": "Kyrgyzstan", "pt_BR": "Quirguistão", "sr-Cyrl": "Киргистан", "sr-Latn": "Kirgistan", "zh_TW": "吉爾吉斯", "tr": "Kırgızistan", "ro": "Kîrgîzstan", "ar": "قيرغيزستان", "fa": "قرقیزستان", "yue": "吉爾吉斯斯坦" }, flag: "🇰🇬", code: "KG", dialCode: "996", minLength: 9, maxLength: 9, ), Country( name: "Laos", nameTranslations: { "sk": "Laos", "se": "Laos", "pl": "Laos", "no": "Laos", "ja": "ラオス", "it": "Laos", "zh": "老挝", "nl": "Laos", "de": "Laos", "fr": "Laos", "es": "Laos", "en": "Laos", "pt_BR": "Laos", "sr-Cyrl": "Лаос", "sr-Latn": "Laos", "zh_TW": "寮國", "tr": "Laos", "ro": "Laos", "ar": "لاوس", "fa": "لائوس", "yue": "老撾人民民主共和國" }, flag: "🇱🇦", code: "LA", dialCode: "856", minLength: 10, maxLength: 10, ), Country( name: "Latvia", nameTranslations: { "sk": "Lotyšsko", "se": "Látvia", "pl": "Łotwa", "no": "Latvia", "ja": "ラトビア", "it": "Lettonia", "zh": "拉脱维亚", "nl": "Letland", "de": "Lettland", "fr": "Lettonie", "es": "Letonia", "en": "Latvia", "pt_BR": "Letônia", "sr-Cyrl": "Летонија", "sr-Latn": "Letonija", "zh_TW": "拉托維亞", "tr": "Letonya", "ro": "Letonia", "ar": "لاتفيا", "fa": "لتونی", "yue": "拉脫維亞" }, flag: "🇱🇻", code: "LV", dialCode: "371", minLength: 8, maxLength: 8, ), Country( name: "Lebanon", nameTranslations: { "sk": "Libanon", "se": "Libanon", "pl": "Liban", "no": "Libanon", "ja": "レバノン", "it": "Libano", "zh": "黎巴嫩", "nl": "Libanon", "de": "Libanon", "fr": "Liban", "es": "Líbano", "en": "Lebanon", "pt_BR": "Líbano", "sr-Cyrl": "Либан", "sr-Latn": "Liban", "zh_TW": "黎巴嫩", "tr": "Lübnan", "ro": "Liban", "ar": "لبنان", "fa": "لبنان", "yue": "黎巴嫩" }, flag: "🇱🇧", code: "LB", dialCode: "961", minLength: 8, maxLength: 8, ), Country( name: "Lesotho", nameTranslations: { "sk": "Lesotho", "se": "Lesotho", "pl": "Lesotho", "no": "Lesotho", "ja": "レソト", "it": "Lesotho", "zh": "莱索托", "nl": "Lesotho", "de": "Lesotho", "fr": "Lesotho", "es": "Lesoto", "en": "Lesotho", "pt_BR": "Lesoto", "sr-Cyrl": "Лесото", "sr-Latn": "Lesoto", "zh_TW": "賴索托", "tr": "Lesotho", "ro": "Lesotho", "ar": "ليسوتو", "fa": "لسوتو", "yue": "萊索托" }, flag: "🇱🇸", code: "LS", dialCode: "266", minLength: 8, maxLength: 8, ), Country( name: "Liberia", nameTranslations: { "sk": "Libéria", "se": "Liberia", "pl": "Liberia", "no": "Liberia", "ja": "リベリア", "it": "Liberia", "zh": "利比里亚", "nl": "Liberia", "de": "Liberia", "fr": "Libéria", "es": "Liberia", "en": "Liberia", "pt_BR": "Libéria", "sr-Cyrl": "Либерија", "sr-Latn": "Liberija", "zh_TW": "賴比瑞亞", "tr": "Liberya", "ro": "Liberia", "ar": "ليبيريا", "fa": "لیبریا", "yue": "利比里亞" }, flag: "🇱🇷", code: "LR", dialCode: "231", minLength: 8, maxLength: 8, ), Country( name: "Libyan Arab Jamahiriya", nameTranslations: { "sk": "Líbya", "se": "Libya", "pl": "Libia", "no": "Libya", "ja": "リビア", "it": "Libia", "zh": "利比亚", "nl": "Libië", "de": "Libyen", "fr": "Libye", "es": "Libia", "en": "Libya", "pt_BR": "Líbia", "sr-Cyrl": "Либија", "sr-Latn": "Libija", "zh_TW": "利比亞", "tr": "Libya", "ro": "Libia", "ar": "ليبيا", "fa": "لیبی", "yue": "利比亞" }, flag: "🇱🇾", code: "LY", dialCode: "218", minLength: 9, maxLength: 9, ), Country( name: "Liechtenstein", nameTranslations: { "sk": "Lichtenštajnsko", "se": "Liechtenstein", "pl": "Liechtenstein", "no": "Liechtenstein", "ja": "リヒテンシュタイン", "it": "Liechtenstein", "zh": "列支敦士登", "nl": "Liechtenstein", "de": "Liechtenstein", "fr": "Liechtenstein", "es": "Liechtenstein", "en": "Liechtenstein", "pt_BR": "Liechtenstein", "sr-Cyrl": "Лихтенштајн", "sr-Latn": "Lihtenštajn", "zh_TW": "列支敦斯登", "tr": "Lihtenştayn", "ro": "Liechtenstein", "ar": "ليختنشتاين", "fa": "لیختن‌اشتاین", "yue": "列支敦士登" }, flag: "🇱🇮", code: "LI", dialCode: "423", minLength: 9, maxLength: 9, ), Country( name: "Lithuania", nameTranslations: { "sk": "Litva", "se": "Lietuva", "pl": "Litwa", "no": "Litauen", "ja": "リトアニア", "it": "Lituania", "zh": "立陶宛", "nl": "Litouwen", "de": "Litauen", "fr": "Lituanie", "es": "Lituania", "en": "Lithuania", "pt_BR": "Lituânia", "sr-Cyrl": "Литванија", "sr-Latn": "Litvanija", "zh_TW": "立陶宛", "tr": "Litvanya", "ro": "Lituania", "ar": "ليتوانيا", "fa": "لیتوانی", "yue": "立陶宛" }, flag: "🇱🇹", code: "LT", dialCode: "370", minLength: 8, maxLength: 8, ), Country( name: "Luxembourg", nameTranslations: { "sk": "Luxembursko", "se": "Luxembourg", "pl": "Luksemburg", "no": "Luxemburg", "ja": "ルクセンブルク", "it": "Lussemburgo", "zh": "卢森堡", "nl": "Luxemburg", "de": "Luxemburg", "fr": "Luxembourg", "es": "Luxemburgo", "en": "Luxembourg", "pt_BR": "Luxemburgo", "sr-Cyrl": "Луксенбург", "sr-Latn": "Luksenburg", "zh_TW": "盧森堡", "tr": "Lüksemburg", "ro": "Luxemburg", "ar": "لوكسمبورغ", "fa": "لوکزامبورگ", "yue": "盧森堡" }, flag: "🇱🇺", code: "LU", dialCode: "352", minLength: 11, maxLength: 11, ), Country( name: "Macao", nameTranslations: { "sk": "Macao – OAO Číny", "se": "Makáo", "pl": "SRA Makau (Chiny)", "no": "Macao S.A.R. Kina", "ja": "中華人民共和国マカオ特別行政区", "it": "RAS di Macao", "zh": "中国澳门特别行政区", "nl": "Macau SAR van China", "de": "Sonderverwaltungsregion Macau", "fr": "R.A.S. chinoise de Macao", "es": "RAE de Macao (China)", "en": "Macao SAR China", "pt_BR": "RAE de Macau China", "sr-Cyrl": "Макао", "sr-Latn": "Makao", "zh_TW": "澳門", "tr": "Makao", "ro": "Macao", "ar": "ماكاو", "fa": "ماكائو", "yue": "澳門" }, flag: "🇲🇴", code: "MO", dialCode: "853", minLength: 8, maxLength: 8, ), Country( name: "Macedonia", nameTranslations: { "sk": "Severné Macedónsko", "se": "North Macedonia", "pl": "Macedonia Północna", "no": "Nord-Makedonia", "ja": "北マケドニア", "it": "Macedonia del Nord", "zh": "北马其顿", "nl": "Noord-Macedonië", "de": "Nordmazedonien", "fr": "Macédoine du Nord", "es": "Macedonia del Norte", "en": "North Macedonia", "pt_BR": "Macedônia do Norte", "sr-Cyrl": "Северна Македонија", "sr-Latn": "Severna Makedonija", "zh_TW": "北馬其頓", "tr": "Kuzey Makedonya", "ro": "Macedonia de Nord", "ar": "مقدونيا", "fa": "مقدونیه", "yue": "馬其頓(前南斯拉夫共和國)" }, flag: "🇲🇰", code: "MK", dialCode: "389", minLength: 8, maxLength: 8, ), Country( name: "Madagascar", nameTranslations: { "sk": "Madagaskar", "se": "Madagaskar", "pl": "Madagaskar", "no": "Madagaskar", "ja": "マダガスカル", "it": "Madagascar", "zh": "马达加斯加", "nl": "Madagaskar", "de": "Madagaskar", "fr": "Madagascar", "es": "Madagascar", "en": "Madagascar", "pt_BR": "Madagáscar", "sr-Cyrl": "Мадагаскар", "sr-Latn": "Madagaskar", "zh_TW": "馬達加斯加", "tr": "Madagaskar", "ro": "Madagascar", "ar": "مدغشقر", "fa": "ماداگاسکار", "yue": "馬達加斯加" }, flag: "🇲🇬", code: "MG", dialCode: "261", minLength: 10, maxLength: 10, ), Country( name: "Malawi", nameTranslations: { "sk": "Malawi", "se": "Malawi", "pl": "Malawi", "no": "Malawi", "ja": "マラウイ", "it": "Malawi", "zh": "马拉维", "nl": "Malawi", "de": "Malawi", "fr": "Malawi", "es": "Malaui", "en": "Malawi", "pt_BR": "Malawi", "sr-Cyrl": "Малави", "sr-Latn": "Malavi", "zh_TW": "馬拉威", "tr": "Malavi", "ro": "Malawi", "ar": "مالاوي", "fa": "مالاوی", "yue": "馬拉維" }, flag: "🇲🇼", code: "MW", dialCode: "265", minLength: 7, maxLength: 9, ), Country( name: "Malaysia", nameTranslations: { "sk": "Malajzia", "se": "Malesia", "pl": "Malezja", "no": "Malaysia", "ja": "マレーシア", "it": "Malaysia", "zh": "马来西亚", "nl": "Maleisië", "de": "Malaysia", "fr": "Malaisie", "es": "Malasia", "en": "Malaysia", "pt_BR": "Malásia", "sr-Cyrl": "Малезија", "sr-Latn": "Malezija", "zh_TW": "馬來西亞", "tr": "Malezya", "ro": "Malaezia", "ar": "ماليزيا", "fa": "مالزی", "yue": "馬來西亞" }, flag: "🇲🇾", code: "MY", dialCode: "60", minLength: 9, maxLength: 10, ), Country( name: "Maldives", nameTranslations: { "sk": "Maldivy", "se": "Malediivvat", "pl": "Malediwy", "no": "Maldivene", "ja": "モルディブ", "it": "Maldive", "zh": "马尔代夫", "nl": "Maldiven", "de": "Malediven", "fr": "Maldives", "es": "Maldivas", "en": "Maldives", "pt_BR": "Maldivas", "sr-Cyrl": "Малдиви", "sr-Latn": "Maldivi", "zh_TW": "馬爾地夫", "tr": "Maldivler", "ro": "Maldive", "ar": "جزر المالديف", "fa": "مالدیو", "yue": "馬爾代夫" }, flag: "🇲🇻", code: "MV", dialCode: "960", minLength: 7, maxLength: 7, ), Country( name: "Mali", nameTranslations: { "sk": "Mali", "se": "Mali", "pl": "Mali", "no": "Mali", "ja": "マリ", "it": "Mali", "zh": "马里", "nl": "Mali", "de": "Mali", "fr": "Mali", "es": "Mali", "en": "Mali", "pt_BR": "Mali", "sr-Cyrl": "Мали", "sr-Latn": "Mali", "zh_TW": "馬里", "tr": "Mali", "ro": "Mali", "ar": "مالي", "fa": "مالی", "yue": "馬里" }, flag: "🇲🇱", code: "ML", dialCode: "223", minLength: 8, maxLength: 8, ), Country( name: "Malta", nameTranslations: { "sk": "Malta", "se": "Málta", "pl": "Malta", "no": "Malta", "ja": "マルタ", "it": "Malta", "zh": "马耳他", "nl": "Malta", "de": "Malta", "fr": "Malte", "es": "Malta", "en": "Malta", "pt_BR": "Malta", "sr-Cyrl": "Малта", "sr-Latn": "Malta", "zh_TW": "馬爾他", "tr": "Malta", "ro": "Malta", "ar": "مالطا", "fa": "مالت", "yue": "馬耳他" }, flag: "🇲🇹", code: "MT", dialCode: "356", minLength: 8, maxLength: 8, ), Country( name: "Marshall Islands", nameTranslations: { "sk": "Marshallove ostrovy", "se": "Marshallsullot", "pl": "Wyspy Marshalla", "no": "Marshalløyene", "ja": "マーシャル諸島", "it": "Isole Marshall", "zh": "马绍尔群岛", "nl": "Marshalleilanden", "de": "Marshallinseln", "fr": "Îles Marshall", "es": "Islas Marshall", "en": "Marshall Islands", "pt_BR": "Ilhas Marshall", "sr-Cyrl": "Маршалска Острва", "sr-Latn": "Maršalska Ostrva", "zh_TW": "馬紹爾群島", "tr": "Marshall Adaları", "ro": "Insulele Marshall", "ar": "جزر مارشال", "fa": "جزایر مارشال", "yue": "馬紹爾群島" }, flag: "🇲🇭", code: "MH", dialCode: "692", minLength: 7, maxLength: 7, ), Country( name: "Martinique", nameTranslations: { "sk": "Martinik", "se": "Martinique", "pl": "Martynika", "no": "Martinique", "ja": "マルティニーク", "it": "Martinica", "zh": "马提尼克", "nl": "Martinique", "de": "Martinique", "fr": "Martinique", "es": "Martinica", "en": "Martinique", "pt_BR": "Martinica", "sr-Cyrl": "Мартиник", "sr-Latn": "Martinik", "zh_TW": "馬丁尼克", "tr": "Martinique", "ro": "Martinica", "ar": "مارتينيك", "fa": "مارتینیک", "yue": "马提尼克" }, flag: "🇲🇶", code: "MQ", dialCode: "596", minLength: 15, maxLength: 15, ), Country( name: "Mauritania", nameTranslations: { "sk": "Mauritánia", "se": "Mauretánia", "pl": "Mauretania", "no": "Mauritania", "ja": "モーリタニア", "it": "Mauritania", "zh": "毛里塔尼亚", "nl": "Mauritanië", "de": "Mauretanien", "fr": "Mauritanie", "es": "Mauritania", "en": "Mauritania", "pt_BR": "Mauritânia", "sr-Cyrl": "Мауританија", "sr-Latn": "Mauritanija", "zh_TW": "茅利塔尼亞", "tr": "Moritanya", "ro": "Mauritania", "ar": "موريتانيا", "fa": "موریتانی", "yue": "毛里塔尼亞" }, flag: "🇲🇷", code: "MR", dialCode: "222", minLength: 8, maxLength: 8, ), Country( name: "Mauritius", nameTranslations: { "sk": "Maurícius", "se": "Mauritius", "pl": "Mauritius", "no": "Mauritius", "ja": "モーリシャス", "it": "Mauritius", "zh": "毛里求斯", "nl": "Mauritius", "de": "Mauritius", "fr": "Maurice", "es": "Mauricio", "en": "Mauritius", "pt_BR": "Maurício", "sr-Cyrl": "Маурицијус", "sr-Latn": "Mauricijus", "zh_TW": "模里西斯", "tr": "Mauritius", "ro": "Mauritius", "ar": "موريشيوس", "fa": "موریس", "yue": "毛里求斯" }, flag: "🇲🇺", code: "MU", dialCode: "230", minLength: 7, maxLength: 8, ), Country( name: "Mayotte", nameTranslations: { "sk": "Mayotte", "se": "Mayotte", "pl": "Majotta", "no": "Mayotte", "ja": "マヨット", "it": "Mayotte", "zh": "马约特", "nl": "Mayotte", "de": "Mayotte", "fr": "Mayotte", "es": "Mayotte", "en": "Mayotte", "pt_BR": "Mayotte", "sr-Cyrl": "Мајота", "sr-Latn": "Majota", "zh_TW": "馬約特", "tr": "Mayotte", "ro": "Mayotte", "ar": "مايوت", "fa": "مایوت", "yue": "馬約特" }, flag: "🇾🇹", code: "YT", dialCode: "262", minLength: 9, maxLength: 9, ), Country( name: "Mexico", nameTranslations: { "sk": "Mexiko", "se": "Meksiko", "pl": "Meksyk", "no": "Mexico", "ja": "メキシコ", "it": "Messico", "zh": "墨西哥", "nl": "Mexico", "de": "Mexiko", "fr": "Mexique", "es": "México", "en": "Mexico", "pt_BR": "México", "sr-Cyrl": "Мексико", "sr-Latn": "Meksiko", "zh_TW": "墨西哥", "tr": "Meksika", "ro": "Mexic", "ar": "المكسيك", "fa": "مکزیک", "yue": "墨西哥" }, flag: "🇲🇽", code: "MX", dialCode: "52", minLength: 10, maxLength: 10, ), Country( name: "Micronesia, Federated States of Micronesia", nameTranslations: { "sk": "Mikronézia", "se": "Mikronesia", "pl": "Mikronezja", "no": "Mikronesiaføderasjonen", "ja": "ミクロネシア連邦", "it": "Micronesia", "zh": "密克罗尼西亚", "nl": "Micronesia", "de": "Mikronesien", "fr": "États fédérés de Micronésie", "es": "Micronesia", "en": "Micronesia", "pt_BR": "Micronésia", "sr-Cyrl": "Микронезија", "sr-Latn": "Mikronezija", "zh_TW": "密克羅尼西亞", "tr": "Mikronezya", "ro": "Micronezia", "ar": "ولايات ميكرونيسيا المتحدة", "fa": "ایالات فدرال میکرونزی", "yue": "密克罗尼西亚(聯邦)" }, flag: "🇫🇲", code: "FM", dialCode: "691", minLength: 7, maxLength: 7, ), Country( name: "Moldova", nameTranslations: { "sk": "Moldavsko", "se": "Moldávia", "pl": "Mołdawia", "no": "Moldova", "ja": "モルドバ", "it": "Moldavia", "zh": "摩尔多瓦", "nl": "Moldavië", "de": "Republik Moldau", "fr": "Moldavie", "es": "Moldavia", "en": "Moldova", "pt_BR": "Moldova", "sr-Cyrl": "Молдавија", "sr-Latn": "Moldavija", "zh_TW": "摩爾多瓦", "tr": "Moldova", "ro": "Moldova", "ar": "مولدوفا", "fa": "مولداوی", "yue": "摩爾多瓦(共和國)" }, flag: "🇲🇩", code: "MD", dialCode: "373", minLength: 8, maxLength: 8, ), Country( name: "Monaco", nameTranslations: { "sk": "Monako", "se": "Monaco", "pl": "Monako", "no": "Monaco", "ja": "モナコ", "it": "Monaco", "zh": "摩纳哥", "nl": "Monaco", "de": "Monaco", "fr": "Monaco", "es": "Mónaco", "en": "Monaco", "pt_BR": "Mônaco", "sr-Cyrl": "Монако", "sr-Latn": "Monako", "zh_TW": "摩納哥", "tr": "Monako", "ro": "Monaco", "ar": "موناكو", "fa": "موناكو", "yue": "摩納哥" }, flag: "🇲🇨", code: "MC", dialCode: "377", minLength: 9, maxLength: 9, ), Country( name: "Mongolia", nameTranslations: { "sk": "Mongolsko", "se": "Mongolia", "pl": "Mongolia", "no": "Mongolia", "ja": "モンゴル", "it": "Mongolia", "zh": "蒙古", "nl": "Mongolië", "de": "Mongolei", "fr": "Mongolie", "es": "Mongolia", "en": "Mongolia", "pt_BR": "Mongólia", "sr-Cyrl": "Монголија", "sr-Latn": "Mongolija", "zh_TW": "蒙古", "tr": "Moğolistan", "ro": "Mongolia", "ar": "منغوليا", "fa": "مغولستان", "yue": "蒙古" }, flag: "🇲🇳", code: "MN", dialCode: "976", minLength: 8, maxLength: 8, ), Country( name: "Montenegro", nameTranslations: { "sk": "Čierna Hora", "se": "Montenegro", "pl": "Czarnogóra", "no": "Montenegro", "ja": "モンテネグロ", "it": "Montenegro", "zh": "黑山", "nl": "Montenegro", "de": "Montenegro", "fr": "Monténégro", "es": "Montenegro", "en": "Montenegro", "pt_BR": "Montenegro", "sr-Cyrl": "Црна Гора", "sr-Latn": "Crna Gora", "zh_TW": "蒙特內哥羅", "tr": "Karadağ", "ro": "Muntenegru", "ar": "الجبل الأسود", "fa": "مونته‌نگرو", "yue": "黑山" }, flag: "🇲🇪", code: "ME", dialCode: "382", minLength: 12, maxLength: 12, ), Country( name: "Montserrat", nameTranslations: { "sk": "Montserrat", "se": "Montserrat", "pl": "Montserrat", "no": "Montserrat", "ja": "モントセラト", "it": "Montserrat", "zh": "蒙特塞拉特", "nl": "Montserrat", "de": "Montserrat", "fr": "Montserrat", "es": "Montserrat", "en": "Montserrat", "pt_BR": "Montserrat", "sr-Cyrl": "Монтсерат", "sr-Latn": "Montserat", "zh_TW": "蒙哲臘", "tr": "Montserrat", "ro": "Montserrat", "ar": "مونتسرات", "fa": "مونتسرات", "yue": "蒙特塞拉特" }, flag: "🇲🇸", code: "MS", dialCode: "1664", minLength: 7, maxLength: 7, ), Country( name: "Morocco", nameTranslations: { "sk": "Maroko", "se": "Marokko", "pl": "Maroko", "no": "Marokko", "ja": "モロッコ", "it": "Marocco", "zh": "摩洛哥", "nl": "Marokko", "de": "Marokko", "fr": "Maroc", "es": "Marruecos", "en": "Morocco", "pt_BR": "Marrocos", "sr-Cyrl": "Мароко", "sr-Latn": "Maroko", "zh_TW": "摩洛哥", "tr": "Fas", "ro": "Maroc", "ar": "المغرب", "fa": "مراکش", "yue": "摩洛哥" }, flag: "🇲🇦", code: "MA", dialCode: "212", minLength: 9, maxLength: 9, ), Country( name: "Mozambique", nameTranslations: { "sk": "Mozambik", "se": "Mosambik", "pl": "Mozambik", "no": "Mosambik", "ja": "モザンビーク", "it": "Mozambico", "zh": "莫桑比克", "nl": "Mozambique", "de": "Mosambik", "fr": "Mozambique", "es": "Mozambique", "en": "Mozambique", "pt_BR": "Moçambique", "sr-Cyrl": "Мозамбик", "sr-Latn": "Mozambik", "zh_TW": "莫三比克", "tr": "Mozambik", "ro": "Mozambic", "ar": "موزمبيق", "fa": "موزامبیک", "yue": "莫桑比克" }, flag: "🇲🇿", code: "MZ", dialCode: "258", minLength: 9, maxLength: 9, ), Country( name: "Myanmar", nameTranslations: { "sk": "Mjanmarsko", "se": "Burma", "pl": "Mjanma (Birma)", "no": "Myanmar (Burma)", "ja": "ミャンマー (ビルマ)", "it": "Myanmar (Birmania)", "zh": "缅甸", "nl": "Myanmar (Birma)", "de": "Myanmar", "fr": "Myanmar (Birmanie)", "es": "Myanmar (Birmania)", "en": "Myanmar (Burma)", "pt_BR": "Mianmar (Birmânia)", "sr-Cyrl": "Мјанмар (Бурма)", "sr-Latn": "Mjanmar (Burma)", "zh_TW": "緬甸", "tr": "Myanmar", "ro": "Myanmar", "ar": "ميانمار", "fa": "میانمار", "yue": "緬甸" }, flag: "🇲🇲", code: "MM", dialCode: "95", minLength: 9, maxLength: 9, ), Country( name: "Namibia", nameTranslations: { "sk": "Namíbia", "se": "Namibia", "pl": "Namibia", "no": "Namibia", "ja": "ナミビア", "it": "Namibia", "zh": "纳米比亚", "nl": "Namibië", "de": "Namibia", "fr": "Namibie", "es": "Namibia", "en": "Namibia", "pt_BR": "Namibia", "sr-Cyrl": "Намибија", "sr-Latn": "Namibija", "zh_TW": "納米比亞", "tr": "Namibya", "ro": "Namibia", "ar": "ناميبيا", "fa": "نامیبیا", "yue": "納米比亞" }, flag: "🇳🇦", code: "NA", dialCode: "264", minLength: 10, maxLength: 10, ), Country( name: "Nauru", nameTranslations: { "sk": "Nauru", "se": "Nauru", "pl": "Nauru", "no": "Nauru", "ja": "ナウル", "it": "Nauru", "zh": "瑙鲁", "nl": "Nauru", "de": "Nauru", "fr": "Nauru", "es": "Nauru", "en": "Nauru", "pt_BR": "Nauru", "sr-Cyrl": "Науру", "sr-Latn": "Nauru", "zh_TW": "諾魯", "tr": "Nauru", "ro": "Nauru", "ar": "ناورو", "fa": "نائورو", "yue": "瑙魯" }, flag: "🇳🇷", code: "NR", dialCode: "674", minLength: 7, maxLength: 7, ), Country( name: "Nepal", nameTranslations: { "sk": "Nepál", "se": "Nepal", "pl": "Nepal", "no": "Nepal", "ja": "ネパール", "it": "Nepal", "zh": "尼泊尔", "nl": "Nepal", "de": "Nepal", "fr": "Népal", "es": "Nepal", "en": "Nepal", "pt_BR": "Nepal", "sr-Cyrl": "Непал", "sr-Latn": "Nepal", "zh_TW": "尼泊爾", "tr": "Nepal", "ro": "Nepal", "ar": "نيبال", "fa": "نپال", "yue": "尼泊爾" }, flag: "🇳🇵", code: "NP", dialCode: "977", minLength: 10, maxLength: 10, ), Country( name: "Netherlands", nameTranslations: { "sk": "Holandsko", "se": "Vuolleeatnamat", "pl": "Holandia", "no": "Nederland", "ja": "オランダ", "it": "Paesi Bassi", "zh": "荷兰", "nl": "Nederland", "de": "Niederlande", "fr": "Pays-Bas", "es": "Países Bajos", "en": "Netherlands", "pt_BR": "Países Baixos", "sr-Cyrl": "Холандија", "sr-Latn": "Holandija", "zh_TW": "荷蘭", "tr": "Hollanda", "ro": "Olanda", "ar": "هولندا", "fa": "هلند", "yue": "荷蘭" }, flag: "🇳🇱", code: "NL", dialCode: "31", minLength: 9, maxLength: 9, ), Country( name: "New Caledonia", nameTranslations: { "sk": "Nová Kaledónia", "se": "Ođđa-Kaledonia", "pl": "Nowa Kaledonia", "no": "Ny-Caledonia", "ja": "ニューカレドニア", "it": "Nuova Caledonia", "zh": "新喀里多尼亚", "nl": "Nieuw-Caledonië", "de": "Neukaledonien", "fr": "Nouvelle-Calédonie", "es": "Nueva Caledonia", "en": "New Caledonia", "pt_BR": "Nova Caledônia", "sr-Cyrl": "Нова Каледонија", "sr-Latn": "Nova Kaledonija", "zh_TW": "新喀里多尼亞", "tr": "Yeni Kaledonya", "ro": "Noua Caledonie", "ar": "كاليدونيا الجديدة", "fa": "کالدونیای جدید", "yue": "新喀里多尼亚" }, flag: "🇳🇨", code: "NC", dialCode: "687", minLength: 6, maxLength: 6, ), Country( name: "New Zealand", nameTranslations: { "sk": "Nový Zéland", "se": "Ođđa-Selánda", "pl": "Nowa Zelandia", "no": "New Zealand", "ja": "ニュージーランド", "it": "Nuova Zelanda", "zh": "新西兰", "nl": "Nieuw-Zeeland", "de": "Neuseeland", "fr": "Nouvelle-Zélande", "es": "Nueva Zelanda", "en": "New Zealand", "pt_BR": "Nova Zelândia", "sr-Cyrl": "Нови Зеланд", "sr-Latn": "Novi Zeland", "zh_TW": "紐西蘭", "tr": "Yeni Zelanda", "ro": "Noua Zeelandă", "ar": "نيوزيلندا", "fa": "نیوزلند", "yue": "紐西蘭" }, flag: "🇳🇿", code: "NZ", dialCode: "64", minLength: 10, maxLength: 10, ), Country( name: "Nicaragua", nameTranslations: { "sk": "Nikaragua", "se": "Nicaragua", "pl": "Nikaragua", "no": "Nicaragua", "ja": "ニカラグア", "it": "Nicaragua", "zh": "尼加拉瓜", "nl": "Nicaragua", "de": "Nicaragua", "fr": "Nicaragua", "es": "Nicaragua", "en": "Nicaragua", "pt_BR": "Nicarágua", "sr-Cyrl": "Никарагва", "sr-Latn": "Nikaragva", "zh_TW": "尼加拉瓜", "tr": "Nikaragua", "ro": "Nicaragua", "ar": "نيكاراغوا", "fa": "نیکاراگوئه", "yue": "尼加拉瓜" }, flag: "🇳🇮", code: "NI", dialCode: "505", minLength: 8, maxLength: 8, ), Country( name: "Niger", nameTranslations: { "sk": "Niger", "se": "Niger", "pl": "Niger", "no": "Niger", "ja": "ニジェール", "it": "Niger", "zh": "尼日尔", "nl": "Niger", "de": "Niger", "fr": "Niger", "es": "Níger", "en": "Niger", "pt_BR": "Níger", "sr-Cyrl": "Нигер", "sr-Latn": "Niger", "zh_TW": "尼日爾", "tr": "Nijer", "ro": "Niger", "ar": "النيجر", "fa": "نیجر", "yue": "尼日爾" }, flag: "🇳🇪", code: "NE", dialCode: "227", minLength: 8, maxLength: 8, ), Country( name: "Nigeria", nameTranslations: { "sk": "Nigéria", "se": "Nigeria", "pl": "Nigeria", "no": "Nigeria", "ja": "ナイジェリア", "it": "Nigeria", "zh": "尼日利亚", "nl": "Nigeria", "de": "Nigeria", "fr": "Nigéria", "es": "Nigeria", "en": "Nigeria", "pt_BR": "Nigéria", "sr-Cyrl": "Нигерија", "sr-Latn": "Nigerija", "zh_TW": "奈及利亞", "tr": "Nijerya", "ro": "Nigeria", "ar": "نيجيريا", "fa": "نیجریه", "yue": "尼日利亞" }, flag: "🇳🇬", code: "NG", dialCode: "234", minLength: 10, maxLength: 11, ), Country( name: "Niue", nameTranslations: { "sk": "Niue", "se": "Niue", "pl": "Niue", "no": "Niue", "ja": "ニウエ", "it": "Niue", "zh": "纽埃", "nl": "Niue", "de": "Niue", "fr": "Niue", "es": "Niue", "en": "Niue", "pt_BR": "Niue", "sr-Cyrl": "Нијуе", "sr-Latn": "Nijue", "zh_TW": "紐埃", "tr": "Niue", "ro": "Niue", "ar": "نييوي", "fa": "نیووی", "yue": "紐埃" }, flag: "🇳🇺", code: "NU", dialCode: "683", minLength: 4, maxLength: 4, ), Country( name: "Norfolk Island", nameTranslations: { "sk": "Norfolk", "se": "Norfolksullot", "pl": "Norfolk", "no": "Norfolkøya", "ja": "ノーフォーク島", "it": "Isola Norfolk", "zh": "诺福克岛", "nl": "Norfolk", "de": "Norfolkinsel", "fr": "Île Norfolk", "es": "Isla Norfolk", "en": "Norfolk Island", "pt_BR": "Ilha Norfolk", "sr-Cyrl": "Острво Норфок", "sr-Latn": "Ostrvo Norfok", "zh_TW": "諾福克島", "tr": "Norfolk Adası", "ro": "Insulele Norfolk", "ar": "جزيرة نورفولك", "fa": "جزیره نورفک", "yue": "诺福克岛" }, flag: "🇳🇫", code: "NF", dialCode: "672", minLength: 15, maxLength: 15, ), Country( name: "Northern Mariana Islands", nameTranslations: { "sk": "Severné Mariány", "se": "Davvi-Mariánat", "pl": "Mariany Północne", "no": "Nord-Marianene", "ja": "北マリアナ諸島", "it": "Isole Marianne settentrionali", "zh": "北马里亚纳群岛", "nl": "Noordelijke Marianen", "de": "Nördliche Marianen", "fr": "Îles Mariannes du Nord", "es": "Islas Marianas del Norte", "en": "Northern Mariana Islands", "pt_BR": "Ilhas Marianas do Norte", "sr-Cyrl": "Северна Маријанска Острва", "sr-Latn": "Severna Marijanska Ostrva", "zh_TW": "北馬利安納群島", "tr": "Kuzey Mariana Adaları", "ro": "Insulelor Mariane de Nord", "ar": "جزر ماريانا الشمالية", "fa": "جزایر ماریانای شمالی", "yue": "北馬里亞納群島" }, flag: "🇲🇵", code: "MP", dialCode: "1670", minLength: 7, maxLength: 7, ), Country( name: "Norway", nameTranslations: { "sk": "Nórsko", "se": "Norga", "pl": "Norwegia", "no": "Norge", "ja": "ノルウェー", "it": "Norvegia", "zh": "挪威", "nl": "Noorwegen", "de": "Norwegen", "fr": "Norvège", "es": "Noruega", "en": "Norway", "pt_BR": "Noruega", "sr-Cyrl": "Норвешка", "sr-Latn": "Norveška", "zh_TW": "挪威", "tr": "Norveç", "ro": "Norvegia", "ar": "النرويج", "fa": "نروژ", "yue": "挪威" }, flag: "🇳🇴", code: "NO", dialCode: "47", minLength: 8, maxLength: 8, ), Country( name: "Oman", nameTranslations: { "sk": "Omán", "se": "Oman", "pl": "Oman", "no": "Oman", "ja": "オマーン", "it": "Oman", "zh": "阿曼", "nl": "Oman", "de": "Oman", "fr": "Oman", "es": "Omán", "en": "Oman", "pt_BR": "Omã", "sr-Cyrl": "Оман", "sr-Latn": "Oman", "zh_TW": "阿曼", "tr": "Umman", "ro": "Oman", "ar": "عمان", "fa": "عمان", "yue": "阿曼" }, flag: "🇴🇲", code: "OM", dialCode: "968", minLength: 8, maxLength: 8, ), Country( name: "Pakistan", nameTranslations: { "sk": "Pakistan", "se": "Pakistan", "pl": "Pakistan", "no": "Pakistan", "ja": "パキスタン", "it": "Pakistan", "zh": "巴基斯坦", "nl": "Pakistan", "de": "Pakistan", "fr": "Pakistan", "es": "Pakistán", "en": "Pakistan", "pt_BR": "Paquistão", "sr-Cyrl": "Пакистан", "sr-Latn": "Pakistan", "zh_TW": "巴基斯坦", "tr": "Pakistan", "ro": "Pakistan", "ar": "باكستان", "fa": "پاکستان", "yue": "巴基斯坦" }, flag: "🇵🇰", code: "PK", dialCode: "92", minLength: 10, maxLength: 10, ), Country( name: "Palau", nameTranslations: { "sk": "Palau", "se": "Palau", "pl": "Palau", "no": "Palau", "ja": "パラオ", "it": "Palau", "zh": "帕劳", "nl": "Palau", "de": "Palau", "fr": "Palaos", "es": "Palaos", "en": "Palau", "pt_BR": "Palau", "sr-Cyrl": "Палау", "sr-Latn": "Palau", "zh_TW": "帛琉", "tr": "Palau", "ro": "Palau", "ar": "بالاو", "fa": "پالائو", "yue": "帕劳" }, flag: "🇵🇼", code: "PW", dialCode: "680", minLength: 7, maxLength: 7, ), Country( name: "Palestinian Territory, Occupied", nameTranslations: { "sk": "Palestínske územia", "se": "Palestina", "pl": "Terytoria Palestyńskie", "no": "Det palestinske området", "ja": "パレスチナ自治区", "it": "Territori palestinesi", "zh": "巴勒斯坦领土", "nl": "Palestijnse gebieden", "de": "Palästinensische Autonomiegebiete", "fr": "Territoires palestiniens", "es": "Territorios Palestinos", "en": "Palestinian Territories", "pt_BR": "Territórios Palestinos", "sr-Cyrl": "Палестина", "sr-Latn": "Palestina", "zh_TW": "巴勒斯坦", "tr": "Filistin", "ro": "Palestina", "ar": "فلسطين", "fa": "فلسطین", "yue": "巴勒斯坦,国" }, flag: "🇵🇸", code: "PS", dialCode: "970", minLength: 9, maxLength: 9, ), Country( name: "Panama", nameTranslations: { "sk": "Panama", "se": "Panama", "pl": "Panama", "no": "Panama", "ja": "パナマ", "it": "Panamá", "zh": "巴拿马", "nl": "Panama", "de": "Panama", "fr": "Panama", "es": "Panamá", "en": "Panama", "pt_BR": "Panamá", "sr-Cyrl": "Панама", "sr-Latn": "Panama", "zh_TW": "巴拿馬", "tr": "Panama", "ro": "Panama", "ar": "بنما", "fa": "پاناما", "yue": "巴拿馬" }, flag: "🇵🇦", code: "PA", dialCode: "507", minLength: 8, maxLength: 8, ), Country( name: "Papua New Guinea", nameTranslations: { "sk": "Papua-Nová Guinea", "se": "Papua-Ođđa-Guinea", "pl": "Papua-Nowa Gwinea", "no": "Papua Ny-Guinea", "ja": "パプアニューギニア", "it": "Papua Nuova Guinea", "zh": "巴布亚新几内亚", "nl": "Papoea-Nieuw-Guinea", "de": "Papua-Neuguinea", "fr": "Papouasie-Nouvelle-Guinée", "es": "Papúa Nueva Guinea", "en": "Papua New Guinea", "pt_BR": "Papua Nova Guiné", "sr-Cyrl": "Папуа Нова Гвинеја", "sr-Latn": "Papua Nova Gvineja", "zh_TW": "巴布亞新幾內亞", "tr": "Papua Yeni Gine", "ro": "Papua Noua Guinee", "ar": "بابوا غينيا الجديدة", "fa": "پاپوآ گینه نو", "yue": "巴布亚新几内亚" }, flag: "🇵🇬", code: "PG", dialCode: "675", minLength: 11, maxLength: 11, ), Country( name: "Paraguay", nameTranslations: { "sk": "Paraguaj", "se": "Paraguay", "pl": "Paragwaj", "no": "Paraguay", "ja": "パラグアイ", "it": "Paraguay", "zh": "巴拉圭", "nl": "Paraguay", "de": "Paraguay", "fr": "Paraguay", "es": "Paraguay", "en": "Paraguay", "pt_BR": "Paraguai", "sr-Cyrl": "Парагвај", "sr-Latn": "Paragvaj", "zh_TW": "巴拉圭", "tr": "Paraguay", "ro": "Paraguay", "ar": "باراغواي", "fa": "پاراگوئه", "yue": "巴拉圭" }, flag: "🇵🇾", code: "PY", dialCode: "595", minLength: 10, maxLength: 10, ), Country( name: "Peru", nameTranslations: { "sk": "Peru", "se": "Peru", "pl": "Peru", "no": "Peru", "ja": "ペルー", "it": "Perù", "zh": "秘鲁", "nl": "Peru", "de": "Peru", "fr": "Pérou", "es": "Perú", "en": "Peru", "pt_BR": "Peru", "sr-Cyrl": "Перу", "sr-Latn": "Peru", "zh_TW": "秘鲁", "tr": "Peru", "ro": "Peru", "ar": "بيرو", "fa": "پرو", "yue": "秘魯" }, flag: "🇵🇪", code: "PE", dialCode: "51", minLength: 9, maxLength: 9, ), Country( name: "Philippines", nameTranslations: { "sk": "Filipíny", "se": "Filippiinnat", "pl": "Filipiny", "no": "Filippinene", "ja": "フィリピン", "it": "Filippine", "zh": "菲律宾", "nl": "Filipijnen", "de": "Philippinen", "fr": "Philippines", "es": "Filipinas", "en": "Philippines", "pt_BR": "Filipinas", "sr-Cyrl": "Филипини", "sr-Latn": "Filipini", "zh_TW": "菲律賓", "tr": "Filipinler", "ro": "Filipine", "ar": "الفلبين", "fa": "فیلیپین", "yue": "菲律賓" }, flag: "🇵🇭", code: "PH", dialCode: "63", minLength: 10, maxLength: 10, ), Country( name: "Pitcairn", nameTranslations: { "sk": "Pitcairnove ostrovy", "se": "Pitcairn", "pl": "Pitcairn", "no": "Pitcairnøyene", "ja": "ピトケアン諸島", "it": "Isole Pitcairn", "zh": "皮特凯恩群岛", "nl": "Pitcairneilanden", "de": "Pitcairninseln", "fr": "Îles Pitcairn", "es": "Islas Pitcairn", "en": "Pitcairn Islands", "pt_BR": "Ilhas Pitcairn", "sr-Cyrl": "Острва Питкерн", "sr-Latn": "Ostrva Pitkern", "zh_TW": "皮特肯群島", "tr": "Pitcairn Adaları", "ro": "Insulele Pitcairn", "ar": "جزر بيتكيرن", "fa": "جزایر پیت‌کرن", "yue": "皮特凱恩" }, flag: "🇵🇳", code: "PN", dialCode: "64", minLength: 10, maxLength: 10, ), Country( name: "Poland", nameTranslations: { "sk": "Poľsko", "se": "Polen", "pl": "Polska", "no": "Polen", "ja": "ポーランド", "it": "Polonia", "zh": "波兰", "nl": "Polen", "de": "Polen", "fr": "Pologne", "es": "Polonia", "en": "Poland", "pt_BR": "Polônia", "sr-Cyrl": "Пољска", "sr-Latn": "Poljska", "zh_TW": "波蘭", "tr": "Polonya", "ro": "Polonia", "ar": "بولندا", "fa": "لهستان", "yue": "波蘭" }, flag: "🇵🇱", code: "PL", dialCode: "48", minLength: 9, maxLength: 9, ), Country( name: "Portugal", nameTranslations: { "sk": "Portugalsko", "se": "Portugála", "pl": "Portugalia", "no": "Portugal", "ja": "ポルトガル", "it": "Portogallo", "zh": "葡萄牙", "nl": "Portugal", "de": "Portugal", "fr": "Portugal", "es": "Portugal", "en": "Portugal", "pt_BR": "Portugal", "sr-Cyrl": "Португалија", "sr-Latn": "Portugalija", "zh_TW": "葡萄牙", "tr": "Portekiz", "ro": "Portugalia", "ar": "البرتغال", "fa": "پرتغال", "yue": "葡萄牙" }, flag: "🇵🇹", code: "PT", dialCode: "351", minLength: 9, maxLength: 9, ), Country( name: "Puerto Rico", nameTranslations: { "sk": "Portoriko", "se": "Puerto Rico", "pl": "Portoryko", "no": "Puerto Rico", "ja": "プエルトリコ", "it": "Portorico", "zh": "波多黎各", "nl": "Puerto Rico", "de": "Puerto Rico", "fr": "Porto Rico", "es": "Puerto Rico", "en": "Puerto Rico", "pt_BR": "Porto Rico", "sr-Cyrl": "Порто Рико", "sr-Latn": "Porto Riko", "zh_TW": "波多黎各", "tr": "Porto Riko", "ro": "Puerto Rico", "ar": "بورتوريكو", "fa": "پورتوریکو", "yue": "波多黎各" }, flag: "🇵🇷", code: "PR", dialCode: "1939", minLength: 15, maxLength: 15, ), Country( name: "Qatar", nameTranslations: { "sk": "Katar", "se": "Qatar", "pl": "Katar", "no": "Qatar", "ja": "カタール", "it": "Qatar", "zh": "卡塔尔", "nl": "Qatar", "de": "Katar", "fr": "Qatar", "es": "Catar", "en": "Qatar", "pt_BR": "Catar", "sr-Cyrl": "Катар", "sr-Latn": "Katar", "zh_TW": "卡達", "tr": "Katar", "ro": "Qatar", "ar": "قطر", "fa": "قطر", "yue": "卡塔爾" }, flag: "🇶🇦", code: "QA", dialCode: "974", minLength: 8, maxLength: 8, ), Country( name: "Romania", nameTranslations: { "sk": "Rumunsko", "se": "Románia", "pl": "Rumunia", "no": "Romania", "ja": "ルーマニア", "it": "Romania", "zh": "罗马尼亚", "nl": "Roemenië", "de": "Rumänien", "fr": "Roumanie", "es": "Rumanía", "en": "Romania", "pt_BR": "Romênia", "sr-Cyrl": "Румунија", "sr-Latn": "Rumunija", "zh_TW": "羅馬尼亞", "tr": "Romanya", "ro": "România", "ar": "رومانيا", "fa": "رومانی", "yue": "羅馬尼亞" }, flag: "🇷🇴", code: "RO", dialCode: "40", minLength: 9, maxLength: 9, ), Country( name: "Russia", nameTranslations: { "sk": "Rusko", "se": "Ruošša", "pl": "Rosja", "no": "Russland", "ja": "ロシア", "it": "Russia", "zh": "俄罗斯", "nl": "Rusland", "de": "Russland", "fr": "Russie", "es": "Rusia", "en": "Russia", "pt_BR": "Rússia", "sr-Cyrl": "Русија", "sr-Latn": "Rusija", "zh_TW": "俄羅斯", "tr": "Rusya", "ro": "Rusia", "ar": "روسيا", "fa": "روسیه", "yue": "俄儸斯聯邦" }, flag: "🇷🇺", code: "RU", dialCode: "7", minLength: 10, maxLength: 10, ), Country( name: "Rwanda", nameTranslations: { "sk": "Rwanda", "se": "Rwanda", "pl": "Rwanda", "no": "Rwanda", "ja": "ルワンダ", "it": "Ruanda", "zh": "卢旺达", "nl": "Rwanda", "de": "Ruanda", "fr": "Rwanda", "es": "Ruanda", "en": "Rwanda", "pt_BR": "Ruanda", "sr-Cyrl": "Руанда", "sr-Latn": "Ruanda", "zh_TW": "盧安達", "tr": "Ruanda", "ro": "Rwanda", "ar": "رواندا", "fa": "رواندا", "yue": "盧旺達" }, flag: "🇷🇼", code: "RW", dialCode: "250", minLength: 9, maxLength: 9, ), Country( name: "Reunion", nameTranslations: { "sk": "Réunion", "se": "Réunion", "pl": "Reunion", "no": "Réunion", "ja": "レユニオン", "it": "Riunione", "zh": "留尼汪", "nl": "Réunion", "de": "Réunion", "fr": "La Réunion", "es": "Reunión", "en": "Réunion", "pt_BR": "Reunião", "sr-Cyrl": "Реинион", "sr-Latn": "Reinion", "zh_TW": "留尼旺", "tr": "La Réunion", "ro": "La Réunion", "ar": "لا ريونيون", "fa": "رئونیون", "yue": "留尼汪" }, flag: "🇷🇪", code: "RE", dialCode: "262", minLength: 9, maxLength: 9, ), Country( name: "Saint Barthelemy", nameTranslations: { "sk": "Svätý Bartolomej", "se": "Saint Barthélemy", "pl": "Saint-Barthélemy", "no": "Saint-Barthélemy", "ja": "サン・バルテルミー", "it": "Saint-Barthélemy", "zh": "圣巴泰勒米", "nl": "Saint-Barthélemy", "de": "St. Barthélemy", "fr": "Saint-Barthélemy", "es": "San Bartolomé", "en": "St. Barthélemy", "pt_BR": "São Bartolomeu", "sr-Cyrl": "Сент Бартелеми", "sr-Latn": "Sent Bartelemi", "zh_TW": "聖巴瑟米", "tr": "Saint Barthélemy", "ro": "Saint Barthélemy", "ar": "سان بارتيلمي", "fa": "سن بارتلمی", "yue": "聖巴泰勒米" }, flag: "🇧🇱", code: "BL", dialCode: "590", minLength: 9, maxLength: 9, ), Country( name: "Saint Helena, Ascension and Tristan Da Cunha", nameTranslations: { "sk": "Svätá Helena", "se": "Saint Helena", "pl": "Wyspa Świętej Heleny", "no": "St. Helena", "ja": "セントヘレナ", "it": "Sant'Elena", "zh": "圣赫勒拿", "nl": "Sint-Helena", "de": "St. Helena", "fr": "Sainte-Hélène", "es": "Santa Elena", "en": "St. Helena", "pt_BR": "Santa Helena", "sr-Cyrl": "Света Јелена, Асенсион и Тристан да Куња", "sr-Latn": "Sveta Jelena, Asension i Tristan de Kunja", "zh_TW": "聖凱倫拿島", "tr": "Saint Helena", "ro": "Sfânta Elena", "ar": "سانت هيلانة وأسينشين وتريستان دا كونا", "fa": "سنت هلن", "yue": "圣赫勒拿、阿森松同特里斯坦·达库尼亚" }, flag: "🇸🇭", code: "SH", dialCode: "290", minLength: 4, maxLength: 4, ), Country( name: "Saint Kitts and Nevis", nameTranslations: { "sk": "Svätý Krištof a Nevis", "se": "Saint Kitts ja Nevis", "pl": "Saint Kitts i Nevis", "no": "Saint Kitts og Nevis", "ja": "セントクリストファー・ネーヴィス", "it": "Saint Kitts e Nevis", "zh": "圣基茨和尼维斯", "nl": "Saint Kitts en Nevis", "de": "St. Kitts und Nevis", "fr": "Saint-Christophe-et-Niévès", "es": "San Cristóbal y Nieves", "en": "St. Kitts & Nevis", "pt_BR": "São Cristóvão e Nevis", "sr-Cyrl": "Сент Китс и Невис", "sr-Latn": "Sent Kits i Nevis", "zh_TW": "聖克里斯多福及尼維斯", "tr": "Saint Kitts ve Nevis", "ro": "Sfântul Kitts și Nevis", "ar": "سانت كيتس ونيفيس", "fa": "سنت کیتس و نویس", "yue": "圣基茨同尼维斯" }, flag: "🇰🇳", code: "KN", dialCode: "1869", minLength: 7, maxLength: 7, ), Country( name: "Saint Lucia", nameTranslations: { "sk": "Svätá Lucia", "se": "Saint Lucia", "pl": "Saint Lucia", "no": "St. Lucia", "ja": "セントルシア", "it": "Saint Lucia", "zh": "圣卢西亚", "nl": "Saint Lucia", "de": "St. Lucia", "fr": "Sainte-Lucie", "es": "Santa Lucía", "en": "St. Lucia", "pt_BR": "Santa Lúcia", "sr-Cyrl": "Света Луција", "sr-Latn": "Sveta Lucija", "zh_TW": "聖露西亞", "tr": "Saint Lucia", "ro": "Sfânta Elena", "ar": "سانت لوسيا", "fa": "سنت لوسیا", "yue": "聖盧西亞" }, flag: "🇱🇨", code: "LC", dialCode: "1758", minLength: 7, maxLength: 7, ), Country( name: "Saint Martin", nameTranslations: { "sk": "Svätý Martin (fr.)", "se": "Frankriikka Saint Martin", "pl": "Saint-Martin", "no": "Saint-Martin", "ja": "サン・マルタン", "it": "Saint Martin", "zh": "法属圣马丁", "nl": "Saint-Martin", "de": "St. Martin", "fr": "Saint-Martin", "es": "San Martín", "en": "St. Martin", "pt_BR": "São Martinho", "sr-Cyrl": "Свети Мартин", "sr-Latn": "Sveti Martin", "zh_TW": "聖馬丁", "tr": "Saint Martin", "ro": "Sfântul Martin", "ar": "تجمع سان مارتين", "fa": "سن مارتن", "yue": "聖馬丁(法國部分)" }, flag: "🇲🇫", code: "MF", dialCode: "590", minLength: 9, maxLength: 9, ), Country( name: "Saint Pierre and Miquelon", nameTranslations: { "sk": "Saint Pierre a Miquelon", "se": "Saint Pierre ja Miquelon", "pl": "Saint-Pierre i Miquelon", "no": "Saint-Pierre-et-Miquelon", "ja": "サンピエール島・ミクロン島", "it": "Saint-Pierre e Miquelon", "zh": "圣皮埃尔和密克隆群岛", "nl": "Saint-Pierre en Miquelon", "de": "St. Pierre und Miquelon", "fr": "Saint-Pierre-et-Miquelon", "es": "San Pedro y Miquelón", "en": "St. Pierre & Miquelon", "pt_BR": "São Pedro e Miquelon", "sr-Cyrl": "Сен Пјер и Микелон", "sr-Latn": "Sen Pjer i Mikelon", "zh_TW": "聖皮埃與密克隆群島", "tr": "Saint Pierre ve Miquelon", "ro": "Saint Pierre și Miquelon", "ar": "سان بيير وميكلون", "fa": "سن-پیر و میکلون", "yue": "聖皮埃尔同米克隆" }, flag: "🇵🇲", code: "PM", dialCode: "508", minLength: 6, maxLength: 6, ), Country( name: "Saint Vincent and the Grenadines", nameTranslations: { "sk": "Svätý Vincent a Grenadíny", "se": "Saint Vincent ja Grenadine", "pl": "Saint Vincent i Grenadyny", "no": "St. Vincent og Grenadinene", "ja": "セントビンセント及びグレナディーン諸島", "it": "Saint Vincent e Grenadine", "zh": "圣文森特和格林纳丁斯", "nl": "Saint Vincent en de Grenadines", "de": "St. Vincent und die Grenadinen", "fr": "Saint-Vincent-et-les-Grenadines", "es": "San Vicente y las Granadinas", "en": "St. Vincent & Grenadines", "pt_BR": "São Vicente e Granadinas", "sr-Cyrl": "Свети Винсент и Гренадини", "sr-Latn": "Sveti Vinsent i Grenadini", "zh_TW": "聖文森及格瑞那丁", "tr": "Saint Vincent ve Grenadinler", "ro": "Sfântul Vincențiu și Grenadinele", "ar": "سانت فينسنت والغرينادين", "fa": "سنت وینسنت و گرنادین‌ها", "yue": "聖文森特同格林纳丁斯" }, flag: "🇻🇨", code: "VC", dialCode: "1784", minLength: 7, maxLength: 7, ), Country( name: "Samoa", nameTranslations: { "sk": "Samoa", "se": "Samoa", "pl": "Samoa", "no": "Samoa", "ja": "サモア", "it": "Samoa", "zh": "萨摩亚", "nl": "Samoa", "de": "Samoa", "fr": "Samoa", "es": "Samoa", "en": "Samoa", "pt_BR": "Samoa", "sr-Cyrl": "Самоа", "sr-Latn": "Samoa", "zh_TW": "薩摩亞", "tr": "Samoa", "ro": "Samoa", "ar": "ساموا", "fa": "ساموآ", "yue": "薩摩亞" }, flag: "🇼🇸", code: "WS", dialCode: "685", minLength: 7, maxLength: 7, ), Country( name: "San Marino", nameTranslations: { "sk": "San Maríno", "se": "San Marino", "pl": "San Marino", "no": "San Marino", "ja": "サンマリノ", "it": "San Marino", "zh": "圣马力诺", "nl": "San Marino", "de": "San Marino", "fr": "Saint-Marin", "es": "San Marino", "en": "San Marino", "pt_BR": "San Marino", "sr-Cyrl": "Сан Марино", "sr-Latn": "San Marino", "zh_TW": "聖馬利諾", "tr": "San Marino", "ro": "San Marino", "ar": "سان مارينو", "fa": "سان مارینو", "yue": "聖馬力諾" }, flag: "🇸🇲", code: "SM", dialCode: "378", minLength: 10, maxLength: 10, ), Country( name: "Sao Tome and Principe", nameTranslations: { "sk": "Svätý Tomáš a Princov ostrov", "se": "São Tomé ja Príncipe", "pl": "Wyspy Świętego Tomasza i Książęca", "no": "São Tomé og Príncipe", "ja": "サントメ・プリンシペ", "it": "São Tomé e Príncipe", "zh": "圣多美和普林西比", "nl": "Sao Tomé en Principe", "de": "São Tomé und Príncipe", "fr": "Sao Tomé-et-Principe", "es": "Santo Tomé y Príncipe", "en": "São Tomé & Príncipe", "pt_BR": "São Tomé e Príncipe", "sr-Cyrl": "Сао Томе и Принсипе", "sr-Latn": "Sao Tome i Prinsipe", "zh_TW": "聖多美普林西比", "tr": "São Tomé ve Príncipe", "ro": "Sao Tome şi Principe", "ar": "ساو تومي وبرينسيب", "fa": "سائوتومه و پرنسیپ", "yue": "聖多美和普林西比" }, flag: "🇸🇹", code: "ST", dialCode: "239", minLength: 7, maxLength: 7, ), Country( name: "Saudi Arabia", nameTranslations: { "sk": "Saudská Arábia", "se": "Saudi-Arábia", "pl": "Arabia Saudyjska", "no": "Saudi-Arabia", "ja": "サウジアラビア", "it": "Arabia Saudita", "zh": "沙特阿拉伯", "nl": "Saoedi-Arabië", "de": "Saudi-Arabien", "fr": "Arabie saoudite", "es": "Arabia Saudí", "en": "Saudi Arabia", "pt_BR": "Arábia Saudita", "sr-Cyrl": "Саудијска Арабија", "sr-Latn": "Saudijska Arabija", "zh_TW": "沙烏地阿拉", "tr": "Suudi Arabistan", "ro": "Arabia Saudită", "ar": "السعودية", "fa": "عربستان سعودی", "yue": "沙地阿拉伯" }, flag: "🇸🇦", code: "SA", dialCode: "966", minLength: 9, maxLength: 9, ), Country( name: "Senegal", nameTranslations: { "sk": "Senegal", "se": "Senegal", "pl": "Senegal", "no": "Senegal", "ja": "セネガル", "it": "Senegal", "zh": "塞内加尔", "nl": "Senegal", "de": "Senegal", "fr": "Sénégal", "es": "Senegal", "en": "Senegal", "pt_BR": "Senegal", "sr-Cyrl": "Сенегал", "sr-Latn": "Senegal", "zh_TW": "塞內加爾", "tr": "Senegal", "ro": "Senegal", "ar": "السنغال", "fa": "سنگال", "yue": "塞內加爾" }, flag: "🇸🇳", code: "SN", dialCode: "221", minLength: 9, maxLength: 9, ), Country( name: "Serbia", nameTranslations: { "sk": "Srbsko", "se": "Serbia", "pl": "Serbia", "no": "Serbia", "ja": "セルビア", "it": "Serbia", "zh": "塞尔维亚", "nl": "Servië", "de": "Serbien", "fr": "Serbie", "es": "Serbia", "en": "Serbia", "pt_BR": "Sérvia", "sr-Cyrl": "Србија", "sr-Latn": "Srbija", "zh_TW": "塞爾維亞", "tr": "Sırbistan", "ro": "Serbia", "ar": "صربيا", "fa": "صربستان", "yue": "塞爾維亞" }, flag: "🇷🇸", code: "RS", dialCode: "381", minLength: 12, maxLength: 12, ), Country( name: "Seychelles", nameTranslations: { "sk": "Seychely", "se": "Seychellsullot", "pl": "Seszele", "no": "Seychellene", "ja": "セーシェル", "it": "Seychelles", "zh": "塞舌尔", "nl": "Seychellen", "de": "Seychellen", "fr": "Seychelles", "es": "Seychelles", "en": "Seychelles", "pt_BR": "Seychelles", "sr-Cyrl": "Сејшели", "sr-Latn": "Sejšeli", "zh_TW": "塞席爾", "tr": "Seyşeller", "ro": "Seychelles", "ar": "سيشل", "fa": "سیشل", "yue": "塞舌爾" }, flag: "🇸🇨", code: "SC", dialCode: "248", minLength: 6, maxLength: 6, ), Country( name: "Sierra Leone", nameTranslations: { "sk": "Sierra Leone", "se": "Sierra Leone", "pl": "Sierra Leone", "no": "Sierra Leone", "ja": "シエラレオネ", "it": "Sierra Leone", "zh": "塞拉利昂", "nl": "Sierra Leone", "de": "Sierra Leone", "fr": "Sierra Leone", "es": "Sierra Leona", "en": "Sierra Leone", "pt_BR": "Serra Leoa", "sr-Cyrl": "Сијера Леоне", "sr-Latn": "Sijera Leone", "zh_TW": "獅子山", "tr": "Sierra Leone", "ro": "Sierra Leone", "ar": "سيراليون", "fa": "سیرالئون", "yue": "塞拉利昂" }, flag: "🇸🇱", code: "SL", dialCode: "232", minLength: 8, maxLength: 8, ), Country( name: "Singapore", nameTranslations: { "sk": "Singapur", "se": "Singapore", "pl": "Singapur", "no": "Singapore", "ja": "シンガポール", "it": "Singapore", "zh": "新加坡", "nl": "Singapore", "de": "Singapur", "fr": "Singapour", "es": "Singapur", "en": "Singapore", "pt_BR": "Cingapura", "sr-Cyrl": "Сингапур", "sr-Latn": "Singapur", "zh_TW": "新加坡", "tr": "Singapur", "ro": "Singapore", "ar": "سنغافورة", "fa": "سنگاپور", "yue": "星架坡" }, flag: "🇸🇬", code: "SG", dialCode: "65", minLength: 8, maxLength: 8, ), Country( name: "Slovakia", nameTranslations: { "sk": "Slovensko", "se": "Slovákia", "pl": "Słowacja", "no": "Slovakia", "ja": "スロバキア", "it": "Slovacchia", "zh": "斯洛伐克", "nl": "Slowakije", "de": "Slowakei", "fr": "Slovaquie", "es": "Eslovaquia", "en": "Slovakia", "pt_BR": "Eslováquia", "sr-Cyrl": "Словачка", "sr-Latn": "Slovačka", "zh_TW": "斯洛伐克", "tr": "Slovakya", "ro": "Slovacia", "ar": "سلوفاكيا", "fa": "اسلواکی", "yue": "斯洛伐克" }, flag: "🇸🇰", code: "SK", dialCode: "421", minLength: 9, maxLength: 9, ), Country( name: "Slovenia", nameTranslations: { "sk": "Slovinsko", "se": "Slovenia", "pl": "Słowenia", "no": "Slovenia", "ja": "スロベニア", "it": "Slovenia", "zh": "斯洛文尼亚", "nl": "Slovenië", "de": "Slowenien", "fr": "Slovénie", "es": "Eslovenia", "en": "Slovenia", "pt_BR": "Eslovênia", "sr-Cyrl": "Словеније", "sr-Latn": "Slovenija", "zh_TW": "斯洛維尼亞", "tr": "Slovenya", "ro": "Slovenia", "ar": "سلوفينيا", "fa": "اسلوونی", "yue": "斯洛文尼亞" }, flag: "🇸🇮", code: "SI", dialCode: "386", minLength: 8, maxLength: 8, ), Country( name: "Solomon Islands", nameTranslations: { "sk": "Šalamúnove ostrovy", "se": "Salomon-sullot", "pl": "Wyspy Salomona", "no": "Salomonøyene", "ja": "ソロモン諸島", "it": "Isole Salomone", "zh": "所罗门群岛", "nl": "Salomonseilanden", "de": "Salomonen", "fr": "Îles Salomon", "es": "Islas Salomón", "en": "Solomon Islands", "pt_BR": "Ilhas Salomão", "sr-Cyrl": "Соломонска Острва", "sr-Latn": "Solomonska Ostrva", "zh_TW": "所羅門群島", "tr": "Solomon Adaları", "ro": "Insulele Solomon", "ar": "جزر سليمان", "fa": "جزایر سلیمان", "yue": "所羅門群島" }, flag: "🇸🇧", code: "SB", dialCode: "677", minLength: 5, maxLength: 5, ), Country( name: "Somalia", nameTranslations: { "sk": "Somálsko", "se": "Somália", "pl": "Somalia", "no": "Somalia", "ja": "ソマリア", "it": "Somalia", "zh": "索马里", "nl": "Somalië", "de": "Somalia", "fr": "Somalie", "es": "Somalia", "en": "Somalia", "pt_BR": "Somália", "sr-Cyrl": "Сомалија", "sr-Latn": "Somalija", "zh_TW": "索馬利亞", "tr": "Somali", "ro": "Somalia", "ar": "الصومال", "fa": "سومالی", "yue": "索馬里" }, flag: "🇸🇴", code: "SO", dialCode: "252", minLength: 8, maxLength: 8, ), Country( name: "South Africa", nameTranslations: { "sk": "Južná Afrika", "se": "Mátta-Afrihká", "pl": "Republika Południowej Afryki", "no": "Sør-Afrika", "ja": "南アフリカ", "it": "Sudafrica", "zh": "南非", "nl": "Zuid-Afrika", "de": "Südafrika", "fr": "Afrique du Sud", "es": "Sudáfrica", "en": "South Africa", "pt_BR": "África do Sul", "sr-Cyrl": "Јужноафричка Република", "sr-Latn": "Južnoafrička Republika", "zh_TW": "南非", "tr": "Güney Afrika", "ro": "Africa de Sud", "ar": "جنوب أفريقيا", "fa": "آفریقای جنوبی", "yue": "南非" }, flag: "🇿🇦", code: "ZA", dialCode: "27", minLength: 9, maxLength: 9, ), Country( name: "South Sudan", nameTranslations: { "sk": "Južný Sudán", "se": "Máttasudan", "pl": "Sudan Południowy", "no": "Sør-Sudan", "ja": "南スーダン", "it": "Sud Sudan", "zh": "南苏丹", "nl": "Zuid-Soedan", "de": "Südsudan", "fr": "Soudan du Sud", "es": "Sudán del Sur", "en": "South Sudan", "pt_BR": "Sudão do Sul", "sr-Cyrl": "Јужни Судан", "sr-Latn": "Južni Sudan", "zh_TW": "南蘇丹", "tr": "Güney Sudan", "ro": "Sudanul de Sud", "ar": "جنوب السودان", "fa": "سودان جنوبی", "yue": "南蘇丹" }, flag: "🇸🇸", code: "SS", dialCode: "211", minLength: 9, maxLength: 9, ), Country( name: "South Georgia and the South Sandwich Islands", nameTranslations: { "sk": "Južná Georgia a Južné Sandwichove ostrovy", "se": "Lulli Georgia ja Lulli Sandwich-sullot", "pl": "Georgia Południowa i Sandwich Południowy", "no": "Sør-Georgia og Sør-Sandwichøyene", "ja": "サウスジョージア・サウスサンドウィッチ諸島", "it": "Georgia del Sud e Sandwich australi", "zh": "南乔治亚和南桑威奇群岛", "nl": "Zuid-Georgia en Zuidelijke Sandwicheilanden", "de": "Südgeorgien und die Südlichen Sandwichinseln", "fr": "Géorgie du Sud et îles Sandwich du Sud", "es": "Islas Georgia del Sur y Sandwich del Sur", "en": "South Georgia & South Sandwich Islands", "pt_BR": "Geórgia do Sul e Ilhas Sandwich do Sul", "sr-Cyrl": "Јужна Џорџија и Јужна Сендвичка Острва", "sr-Latn": "Južna Džordžija i Južna Sendvička Ostrva", "zh_TW": "南喬治亞與南三明治群島 ", "tr": "Güney Georgia ve Güney Sandwich Adaları", "ro": "Georgia de Sud și Insulele Sandwich de Sud", "ar": "جورجيا الجنوبية وجزر ساندويتش الجنوبية", "fa": "جزایر جورجیای جنوبی و ساندویچ جنوبی", "yue": "南喬治亞州同南桑威奇群島" }, flag: "🇬🇸", code: "GS", dialCode: "500", minLength: 15, maxLength: 15, ), Country( name: "Spain", nameTranslations: { "sk": "Španielsko", "se": "Spánia", "pl": "Hiszpania", "no": "Spania", "ja": "スペイン", "it": "Spagna", "zh": "西班牙", "nl": "Spanje", "de": "Spanien", "fr": "Espagne", "es": "España", "en": "Spain", "pt_BR": "Espanha", "sr-Cyrl": "Шпанија", "sr-Latn": "Španija", "zh_TW": "西班牙", "tr": "İspanya", "ro": "Spania", "ar": "إسبانيا", "fa": "اسپانیا", "yue": "西班牙" }, flag: "🇪🇸", code: "ES", dialCode: "34", minLength: 9, maxLength: 9, ), Country( name: "Sri Lanka", nameTranslations: { "sk": "Srí Lanka", "se": "Sri Lanka", "pl": "Sri Lanka", "no": "Sri Lanka", "ja": "スリランカ", "it": "Sri Lanka", "zh": "斯里兰卡", "nl": "Sri Lanka", "de": "Sri Lanka", "fr": "Sri Lanka", "es": "Sri Lanka", "en": "Sri Lanka", "pt_BR": "Sri Lanka", "sr-Cyrl": "Шри Ланка", "sr-Latn": "Šri Lanka", "zh_TW": "斯里蘭卡", "tr": "Sri Lanka", "ro": "Sri Lanka", "ar": "سريلانكا", "fa": "سریلانکا", "yue": "斯里蘭卡" }, flag: "🇱🇰", code: "LK", dialCode: "94", minLength: 9, maxLength: 9, ), Country( name: "Sudan", nameTranslations: { "sk": "Sudán", "se": "Davvisudan", "pl": "Sudan", "no": "Sudan", "ja": "スーダン", "it": "Sudan", "zh": "苏丹", "nl": "Soedan", "de": "Sudan", "fr": "Soudan", "es": "Sudán", "en": "Sudan", "pt_BR": "Sudão", "sr-Cyrl": "Судан", "sr-Latn": "Sudan", "zh_TW": "蘇丹", "tr": "Sudan", "ro": "Sudan", "ar": "السودان", "fa": "سودان", "yue": "蘇丹" }, flag: "🇸🇩", code: "SD", dialCode: "249", minLength: 9, maxLength: 9, ), Country( name: "Suriname", nameTranslations: { "sk": "Surinam", "se": "Surinam", "pl": "Surinam", "no": "Surinam", "ja": "スリナム", "it": "Suriname", "zh": "苏里南", "nl": "Suriname", "de": "Suriname", "fr": "Suriname", "es": "Surinam", "en": "Suriname", "pt_BR": "Suriname", "sr-Cyrl": "Суринам", "sr-Latn": "Surinam", "zh_TW": "蘇利南", "tr": "Surinam", "ro": "Surinam", "ar": "سورينام", "fa": "سورینام", "yue": "蘇里南" }, flag: "🇸🇷", code: "SR", dialCode: "597", minLength: 7, maxLength: 7, ), Country( name: "Svalbard and Jan Mayen", nameTranslations: { "sk": "Svalbard a Jan Mayen", "se": "Svalbárda ja Jan Mayen", "pl": "Svalbard i Jan Mayen", "no": "Svalbard og Jan Mayen", "ja": "スバールバル諸島・ヤンマイエン島", "it": "Svalbard e Jan Mayen", "zh": "斯瓦尔巴和扬马延", "nl": "Spitsbergen en Jan Mayen", "de": "Spitzbergen und Jan Mayen", "fr": "Svalbard et Jan Mayen", "es": "Svalbard y Jan Mayen", "en": "Svalbard & Jan Mayen", "pt_BR": "Svalbard e Jan Mayen", "sr-Cyrl": "Свалбард", "sr-Latn": "Svalbard", "zh_TW": "斯瓦巴及尖棉", "tr": "Svalbard ve Jan Mayen", "ro": "Svalbard și Jan Mayen", "ar": "سفالبارد ويان ماين", "fa": "سوالبارد و یان ماین", "yue": "斯瓦尔巴德同扬·马延" }, flag: "🇸🇯", code: "SJ", dialCode: "47", minLength: 8, maxLength: 8, ), Country( name: "Eswatini", nameTranslations: { "sk": "Eswatini", "se": "Svazieana", "pl": "Eswatini", "no": "Eswatini", "ja": "エスワティニ", "it": "Swaziland", "zh": "斯威士兰", "nl": "eSwatini", "de": "Eswatini", "fr": "Eswatini", "es": "Esuatini", "en": "Eswatini", "pt_BR": "Eswatini", "sr-Cyrl": "Свазиланд", "sr-Latn": "Svaziland", "zh_TW": "史瓦帝尼", "tr": "Esvatini", "ro": "Eswatini", "ar": "إسواتيني", "fa": "اسواتینی", "yue": "斯威士蘭" }, flag: "🇸🇿", code: "SZ", dialCode: "268", minLength: 8, maxLength: 8, ), Country( name: "Sweden", nameTranslations: { "sk": "Švédsko", "se": "Ruoŧŧa", "pl": "Szwecja", "no": "Sverige", "ja": "スウェーデン", "it": "Svezia", "zh": "瑞典", "nl": "Zweden", "de": "Schweden", "fr": "Suède", "es": "Suecia", "en": "Sweden", "pt_BR": "Suécia", "sr-Cyrl": "Шведска", "sr-Latn": "Švedska", "zh_TW": "瑞典", "tr": "İsveç", "ro": "Suedia", "ar": "السويد", "fa": "سوئد", "yue": "瑞典" }, flag: "🇸🇪", code: "SE", dialCode: "46", minLength: 7, maxLength: 13, ), Country( name: "Switzerland", nameTranslations: { "sk": "Švajčiarsko", "se": "Šveica", "pl": "Szwajcaria", "no": "Sveits", "ja": "スイス", "it": "Svizzera", "zh": "瑞士", "nl": "Zwitserland", "de": "Schweiz", "fr": "Suisse", "es": "Suiza", "en": "Switzerland", "pt_BR": "Suíça", "sr-Cyrl": "Швајцарска", "sr-Latn": "Švajcarska", "zh_TW": "瑞士", "tr": "İsviçre", "ro": "Elveţia", "ar": "سويسرا", "fa": "سوئیس", "yue": "瑞士" }, flag: "🇨🇭", code: "CH", dialCode: "41", minLength: 9, maxLength: 12, ), Country( name: "Syrian Arab Republic", nameTranslations: { "sk": "Sýria", "se": "Syria", "pl": "Syria", "no": "Syria", "ja": "シリア", "it": "Siria", "zh": "叙利亚", "nl": "Syrië", "de": "Syrien", "fr": "Syrie", "es": "Siria", "en": "Syria", "pt_BR": "Síria", "sr-Cyrl": "Сирија", "sr-Latn": "Sirija", "zh_TW": "敘利亞", "tr": "Suriye", "ro": "Siria", "ar": "سوريا", "fa": "سوریه", "yue": "阿拉伯敘利亞共和國" }, flag: "🇸🇾", code: "SY", dialCode: "963", minLength: 9, maxLength: 10, ), Country( name: "Taiwan", nameTranslations: { "sk": "Taiwan", "se": "Taiwan", "pl": "Tajwan", "no": "Taiwan", "ja": "台湾", "it": "Taiwan", "zh": "台湾", "nl": "Taiwan", "de": "Taiwan", "fr": "Taïwan", "es": "Taiwán", "en": "Taiwan", "pt_BR": "Taiwan", "sr-Cyrl": "Тајван", "sr-Latn": "Tajvan", "zh_TW": "台灣", "tr": "Tayvan", "ro": "Taiwan", "ar": "تايوان", "fa": "تایوان", "yue": "台灣" }, flag: "🇹🇼", code: "TW", dialCode: "886", minLength: 9, maxLength: 9, ), Country( name: "Tajikistan", nameTranslations: { "sk": "Tadžikistan", "se": "Tažikistan", "pl": "Tadżykistan", "no": "Tadsjikistan", "ja": "タジキスタン", "it": "Tagikistan", "zh": "塔吉克斯坦", "nl": "Tadzjikistan", "de": "Tadschikistan", "fr": "Tadjikistan", "es": "Tayikistán", "en": "Tajikistan", "pt_BR": "Tajiquistão", "sr-Cyrl": "Таџикистан", "sr-Latn": "Tadžikistan", "zh_TW": "塔吉克", "tr": "Tacikistan", "ro": "Tadiquistão", "ar": "طاجيكستان", "fa": "تاجیکستان", "yue": "塔吉克斯坦" }, flag: "🇹🇯", code: "TJ", dialCode: "992", minLength: 9, maxLength: 9, ), Country( name: "Tanzania, United Republic of Tanzania", nameTranslations: { "sk": "Tanzánia", "se": "Tanzánia", "pl": "Tanzania", "no": "Tanzania", "ja": "タンザニア", "it": "Tanzania", "zh": "坦桑尼亚", "nl": "Tanzania", "de": "Tansania", "fr": "Tanzanie", "es": "Tanzania", "en": "Tanzania", "pt_BR": "Tanzânia", "sr-Cyrl": "Танзанија", "sr-Latn": "Tanzanija", "zh_TW": "坦尚尼亞", "tr": "Tanzanya", "ro": "Tanzania", "ar": "تنزانيا", "fa": "تانزانیا", "yue": "坦桑尼亞,聯合共和國" }, flag: "🇹🇿", code: "TZ", dialCode: "255", minLength: 9, maxLength: 9, ), Country( name: "Thailand", nameTranslations: { "sk": "Thajsko", "se": "Thaieana", "pl": "Tajlandia", "no": "Thailand", "ja": "タイ", "it": "Thailandia", "zh": "泰国", "nl": "Thailand", "de": "Thailand", "fr": "Thaïlande", "es": "Tailandia", "en": "Thailand", "pt_BR": "Tailândia", "sr-Cyrl": "Тајланд", "sr-Latn": "Tajland", "zh_TW": "泰國", "tr": "Tayland", "ro": "Tailanda", "ar": "تايلاند", "fa": "تایلند", "yue": "泰國" }, flag: "🇹🇭", code: "TH", dialCode: "66", minLength: 9, maxLength: 9, ), Country( name: "Timor-Leste", nameTranslations: { "sk": "Východný Timor", "se": "Nuorta-Timor", "pl": "Timor Wschodni", "no": "Øst-Timor", "ja": "東ティモール", "it": "Timor Est", "zh": "东帝汶", "nl": "Oost-Timor", "de": "Timor-Leste", "fr": "Timor oriental", "es": "Timor-Leste", "en": "Timor-Leste", "pt_BR": "Timor-Leste", "sr-Cyrl": "Источни Тимор", "sr-Latn": "Istočni Timor", "zh_TW": "東帝汶", "tr": "Doğu Timor", "ro": "Timorul de Est", "ar": "تيمور الشرقية", "fa": "تیمور شرقی", "yue": "東帝汶" }, flag: "🇹🇱", code: "TL", dialCode: "670", minLength: 7, maxLength: 7, ), Country( name: "Togo", nameTranslations: { "sk": "Togo", "se": "Togo", "pl": "Togo", "no": "Togo", "ja": "トーゴ", "it": "Togo", "zh": "多哥", "nl": "Togo", "de": "Togo", "fr": "Togo", "es": "Togo", "en": "Togo", "pt_BR": "Ir", "sr-Cyrl": "Того", "sr-Latn": "Togo", "zh_TW": "多哥", "tr": "Togo", "ro": "Togo", "ar": "توغو", "fa": "توگو", "yue": "多哥" }, flag: "🇹🇬", code: "TG", dialCode: "228", minLength: 8, maxLength: 8, ), Country( name: "Tokelau", nameTranslations: { "sk": "Tokelau", "se": "Tokelau", "pl": "Tokelau", "no": "Tokelau", "ja": "トケラウ", "it": "Tokelau", "zh": "托克劳", "nl": "Tokelau", "de": "Tokelau", "fr": "Tokelau", "es": "Tokelau", "en": "Tokelau", "pt_BR": "Tokelau", "sr-Cyrl": "Токелау", "sr-Latn": "Tokelau", "zh_TW": "托克勞", "tr": "Tokelau", "ro": "Tokelau", "ar": "توكيلاو", "fa": "توکلائو", "yue": "托克劳" }, flag: "🇹🇰", code: "TK", dialCode: "690", minLength: 4, maxLength: 4, ), Country( name: "Tonga", nameTranslations: { "sk": "Tonga", "se": "Tonga", "pl": "Tonga", "no": "Tonga", "ja": "トンガ", "it": "Tonga", "zh": "汤加", "nl": "Tonga", "de": "Tonga", "fr": "Tonga", "es": "Tonga", "en": "Tonga", "pt_BR": "Tonga", "sr-Cyrl": "Тонга", "sr-Latn": "Tonga", "zh_TW": "東加", "tr": "Tonga", "ro": "Tonga", "ar": "تونغا", "fa": "تونگا", "yue": "湯加" }, flag: "🇹🇴", code: "TO", dialCode: "676", minLength: 7, maxLength: 7, ), Country( name: "Trinidad and Tobago", nameTranslations: { "sk": "Trinidad a Tobago", "se": "Trinidad ja Tobago", "pl": "Trynidad i Tobago", "no": "Trinidad og Tobago", "ja": "トリニダード・トバゴ", "it": "Trinidad e Tobago", "zh": "特立尼达和多巴哥", "nl": "Trinidad en Tobago", "de": "Trinidad und Tobago", "fr": "Trinité-et-Tobago", "es": "Trinidad y Tobago", "en": "Trinidad & Tobago", "pt_BR": "Trinidad e Tobago", "sr-Cyrl": "Тринидад и Тобаго", "sr-Latn": "Trinidad i Tobago", "zh_TW": "千里達及托巴哥", "tr": "Trinidad ve Tobago", "ro": "Trinidad şi Tobago", "ar": "ترينيداد وتوباغو", "fa": "ترینیداد و توباگو", "yue": "特立尼達和多巴哥" }, flag: "🇹🇹", code: "TT", dialCode: "1868", minLength: 7, maxLength: 7, ), Country( name: "Tunisia", nameTranslations: { "sk": "Tunisko", "se": "Tunisia", "pl": "Tunezja", "no": "Tunisia", "ja": "チュニジア", "it": "Tunisia", "zh": "突尼斯", "nl": "Tunesië", "de": "Tunesien", "fr": "Tunisie", "es": "Túnez", "en": "Tunisia", "pt_BR": "Tunísia", "sr-Cyrl": "Тунис", "sr-Latn": "Tunis", "zh_TW": "突尼西亞", "tr": "Tunus", "ro": "Tunisia", "ar": "تونس", "fa": "تونس", "yue": "突尼斯" }, flag: "🇹🇳", code: "TN", dialCode: "216", minLength: 8, maxLength: 8, ), Country( name: "Turkey", nameTranslations: { "sk": "Turecko", "se": "Durka", "pl": "Turcja", "no": "Tyrkia", "ja": "トルコ", "it": "Turchia", "zh": "土耳其", "nl": "Turkije", "de": "Türkei", "fr": "Turquie", "es": "Turquía", "en": "Turkey", "pt_BR": "Peru", "sr-Cyrl": "Турска", "sr-Latn": "Turska", "zh_TW": "土耳其", "tr": "Türkiye", "ro": "Turcia", "ar": "تركيا", "fa": "ترکیه", "yue": "土耳其" }, flag: "🇹🇷", code: "TR", dialCode: "90", minLength: 10, maxLength: 10, ), Country( name: "Turkmenistan", nameTranslations: { "sk": "Turkménsko", "se": "Turkmenistan", "pl": "Turkmenistan", "no": "Turkmenistan", "ja": "トルクメニスタン", "it": "Turkmenistan", "zh": "土库曼斯坦", "nl": "Turkmenistan", "de": "Turkmenistan", "fr": "Turkménistan", "es": "Turkmenistán", "en": "Turkmenistan", "pt_BR": "Turcomenistão", "sr-Cyrl": "Туркменистан", "sr-Latn": "Turkmenistan", "zh_TW": "土庫曼", "tr": "Türkmenistan", "ro": "Turkmenistan", "ar": "تركمانستان", "fa": "ترکمنستان", "yue": "土庫曼斯坦" }, flag: "🇹🇲", code: "TM", dialCode: "993", minLength: 8, maxLength: 8, ), Country( name: "Turks and Caicos Islands", nameTranslations: { "sk": "Turks a Caicos", "se": "Turks ja Caicos-sullot", "pl": "Turks i Caicos", "no": "Turks- og Caicosøyene", "ja": "タークス・カイコス諸島", "it": "Isole Turks e Caicos", "zh": "特克斯和凯科斯群岛", "nl": "Turks- en Caicoseilanden", "de": "Turks- und Caicosinseln", "fr": "Îles Turques-et-Caïques", "es": "Islas Turcas y Caicos", "en": "Turks & Caicos Islands", "pt_BR": "Ilhas Turks e Caicos", "sr-Cyrl": "Туркс и Кајкос", "sr-Latn": "Turks i Kajkos", "zh_TW": "土克斯及開科斯群島", "tr": "Turks ve Caicos Adaları", "ro": "Insulele Turks și Caicos", "ar": "جزر توركس وكايكوس", "fa": "جزایر تورکس و کایکوس", "yue": "特克斯同凯科斯群岛" }, flag: "🇹🇨", code: "TC", dialCode: "1649", minLength: 7, maxLength: 7, ), Country( name: "Tuvalu", nameTranslations: { "sk": "Tuvalu", "se": "Tuvalu", "pl": "Tuvalu", "no": "Tuvalu", "ja": "ツバル", "it": "Tuvalu", "zh": "图瓦卢", "nl": "Tuvalu", "de": "Tuvalu", "fr": "Tuvalu", "es": "Tuvalu", "en": "Tuvalu", "pt_BR": "Tuvalu", "sr-Cyrl": "Тувалу", "sr-Latn": "Tuvalu", "zh_TW": "圖瓦盧", "tr": "Tuvalu", "ro": "Tuvalu", "ar": "توفالو", "fa": "تووالو", "yue": "圖瓦盧" }, flag: "🇹🇻", code: "TV", dialCode: "688", minLength: 6, maxLength: 6, ), Country( name: "Uganda", nameTranslations: { "sk": "Uganda", "se": "Uganda", "pl": "Uganda", "no": "Uganda", "ja": "ウガンダ", "it": "Uganda", "zh": "乌干达", "nl": "Oeganda", "de": "Uganda", "fr": "Ouganda", "es": "Uganda", "en": "Uganda", "pt_BR": "Uganda", "sr-Cyrl": "Уганда", "sr-Latn": "Uganda", "zh_TW": "烏干達", "tr": "Uganda", "ro": "Uganda", "ar": "أوغندا", "fa": "اوگاندا", "yue": "烏干達" }, flag: "🇺🇬", code: "UG", dialCode: "256", minLength: 9, maxLength: 9, ), Country( name: "Ukraine", nameTranslations: { "sk": "Ukrajina", "se": "Ukraina", "pl": "Ukraina", "no": "Ukraina", "ja": "ウクライナ", "it": "Ucraina", "zh": "乌克兰", "nl": "Oekraïne", "de": "Ukraine", "fr": "Ukraine", "es": "Ucrania", "en": "Ukraine", "pt_BR": "Ucrânia", "sr-Cyrl": "Украјина", "sr-Latn": "Ukrajina", "zh_TW": "烏克蘭", "tr": "Ukrayna", "ro": "Ucraína", "ar": "أوكرانيا", "fa": "اوکراین", "yue": "烏克蘭" }, flag: "🇺🇦", code: "UA", dialCode: "380", minLength: 9, maxLength: 9, ), Country( name: "United Arab Emirates", nameTranslations: { "sk": "Spojené arabské emiráty", "se": "Ovttastuvvan Arábaemiráhtat", "pl": "Zjednoczone Emiraty Arabskie", "no": "De forente arabiske emirater", "ja": "アラブ首長国連邦", "it": "Emirati Arabi Uniti", "zh": "阿拉伯联合酋长国", "nl": "Verenigde Arabische Emiraten", "de": "Vereinigte Arabische Emirate", "fr": "Émirats arabes unis", "es": "Emiratos Árabes Unidos", "en": "United Arab Emirates", "pt_BR": "Emirados Árabes Unidos", "sr-Cyrl": "Уједињени Арапски Емирати", "sr-Latn": "Ujedinjeni Arapski Emirati", "zh_TW": "阿拉伯聯合大公國", "tr": "Birleşik Arap Emirlikleri", "ro": "Emiratele Arabe Unite", "ar": "الإمارات العربية المتحدة", "fa": "امارات متحده عربی", "yue": "阿拉伯聯合酋長國" }, flag: "🇦🇪", code: "AE", dialCode: "971", minLength: 9, maxLength: 9, ), Country( name: "United Kingdom", nameTranslations: { "sk": "Spojené kráľovstvo", "se": "Stuorra-Británnia", "pl": "Wielka Brytania", "no": "Storbritannia", "ja": "イギリス", "it": "Regno Unito", "zh": "英国", "nl": "Verenigd Koninkrijk", "de": "Vereinigtes Königreich", "fr": "Royaume-Uni", "es": "Reino Unido", "en": "United Kingdom", "pt_BR": "Reino Unido", "sr-Cyrl": "Уједињено Краљевство", "sr-Latn": "Ujedinjeno Kraljevstvo", "zh_TW": "英國", "tr": "Büyük Britanya ve Kuzey İrlanda Birleşik Krallığ", "ro": "Regatul Unit al Marii Britanii și Irlandei de Nord", "ar": "المملكة المتحدة", "fa": "بریتانیا", "yue": "大不列顛及北愛爾蘭聯合王國" }, flag: "🇬🇧", code: "GB", dialCode: "44", minLength: 10, maxLength: 10, ), Country( name: "United States", nameTranslations: { "sk": "Spojené štáty", "se": "Amerihká ovttastuvvan stáhtat", "pl": "Stany Zjednoczone", "no": "USA", "ja": "アメリカ合衆国", "it": "Stati Uniti", "zh": "美国", "nl": "Verenigde Staten", "de": "Vereinigte Staaten", "fr": "États-Unis", "es": "Estados Unidos", "en": "United States", "pt_BR": "Estados Unidos", "sr-Cyrl": "Сједињене Америчке Државе", "sr-Latn": "Sjedinjene Američke Države", "zh_TW": "美國", "tr": "Amerika Birleşik Devletleri", "ro": "Statele Unite ale Americii", "ar": "الولايات المتحدة", "fa": "ایالات متحده آمریکا", "yue": "美利堅郃眾囯" }, flag: "🇺🇸", code: "US", dialCode: "1", minLength: 10, maxLength: 10, ), Country( name: "Uruguay", nameTranslations: { "sk": "Uruguaj", "se": "Uruguay", "pl": "Urugwaj", "no": "Uruguay", "ja": "ウルグアイ", "it": "Uruguay", "zh": "乌拉圭", "nl": "Uruguay", "de": "Uruguay", "fr": "Uruguay", "es": "Uruguay", "en": "Uruguay", "pt_BR": "Uruguai", "sr-Cyrl": "Уругвај", "sr-Latn": "Urugvaj", "zh_TW": "烏拉圭", "tr": "Uruguay", "ro": "Uruguay", "ar": "الأوروغواي", "fa": "اروگوئه", "yue": "烏拉圭" }, flag: "🇺🇾", code: "UY", dialCode: "598", minLength: 9, maxLength: 9, ), Country( name: "Uzbekistan", nameTranslations: { "sk": "Uzbekistan", "se": "Usbekistan", "pl": "Uzbekistan", "no": "Usbekistan", "ja": "ウズベキスタン", "it": "Uzbekistan", "zh": "乌兹别克斯坦", "nl": "Oezbekistan", "de": "Usbekistan", "fr": "Ouzbékistan", "es": "Uzbekistán", "en": "Uzbekistan", "pt_BR": "Uzbequistão", "sr-Cyrl": "Узбекистан", "sr-Latn": "Uzbekistan", "zh_TW": "烏玆別克", "tr": "Özbekistan", "ro": "Uzbekistan", "ar": "أوزبكستان", "fa": "ازبکستان", "yue": "月即別" }, flag: "🇺🇿", code: "UZ", dialCode: "998", minLength: 9, maxLength: 9, ), Country( name: "Vanuatu", nameTranslations: { "sk": "Vanuatu", "se": "Vanuatu", "pl": "Vanuatu", "no": "Vanuatu", "ja": "バヌアツ", "it": "Vanuatu", "zh": "瓦努阿图", "nl": "Vanuatu", "de": "Vanuatu", "fr": "Vanuatu", "es": "Vanuatu", "en": "Vanuatu", "pt_BR": "Vanuatu", "sr-Cyrl": "Вануату", "sr-Latn": "Vanuatu", "zh_TW": "瓦努阿圖", "tr": "Vanuatu", "ro": "Vanuatu", "ar": "فانواتو", "fa": "وانواتو", "yue": "瓦努阿圖" }, flag: "🇻🇺", code: "VU", dialCode: "678", minLength: 7, maxLength: 7, ), Country( name: "Venezuela, Bolivarian Republic of Venezuela", nameTranslations: { "sk": "Venezuela", "se": "Venezuela", "pl": "Wenezuela", "no": "Venezuela", "ja": "ベネズエラ", "it": "Venezuela", "zh": "委内瑞拉", "nl": "Venezuela", "de": "Venezuela", "fr": "Venezuela", "es": "Venezuela", "en": "Venezuela", "pt_BR": "Venezuela", "sr-Cyrl": "Венецуела", "sr-Latn": "Venecuela", "zh_TW": "委內瑞拉", "tr": "Venezuela", "ro": "Venezuela", "ar": "فنزويلا", "fa": "ونزوئلا", "yue": "委內瑞拉(玻利瓦爾共和國)" }, flag: "🇻🇪", code: "VE", dialCode: "58", minLength: 10, maxLength: 10, ), Country( name: "Vietnam", nameTranslations: { "sk": "Vietnam", "se": "Vietnam", "pl": "Wietnam", "no": "Vietnam", "ja": "ベトナム", "it": "Vietnam", "zh": "越南", "nl": "Vietnam", "de": "Vietnam", "fr": "Vietnam", "es": "Vietnam", "en": "Vietnam", "pt_BR": "Vietnã", "sr-Cyrl": "Вијетнам", "sr-Latn": "Vijetnam", "zh_TW": "越南", "tr": "Vietnam", "ro": "Vietnam", "ar": "فيتنام", "fa": "ویتنام", "yue": "越南" }, flag: "🇻🇳", code: "VN", dialCode: "84", minLength: 11, maxLength: 11, ), Country( name: "Virgin Islands, British", nameTranslations: { "sk": "Britské Panenské ostrovy", "se": "Brittania Virgin-sullot", "pl": "Brytyjskie Wyspy Dziewicze", "no": "De britiske jomfruøyene", "ja": "英領ヴァージン諸島", "it": "Isole Vergini Britanniche", "zh": "英属维尔京群岛", "nl": "Britse Maagdeneilanden", "de": "Britische Jungferninseln", "fr": "Îles Vierges britanniques", "es": "Islas Vírgenes Británicas", "en": "British Virgin Islands", "pt_BR": "Ilhas Virgens Britânicas", "sr-Cyrl": "Британска Девичанска Острва", "sr-Latn": "Britanska Devičanska Ostrva", "zh_TW": "英屬維京群島", "tr": "Britanya Virjin Adaları", "ro": "Insulele Virgine Britanice", "ar": "جزر العذراء البريطانية", "fa": "جزایر ویرجین بریتانیا", "yue": "維爾京群島(英國)" }, flag: "🇻🇬", code: "VG", dialCode: "1284", minLength: 7, maxLength: 7, ), Country( name: "Virgin Islands, U.S.", nameTranslations: { "sk": "Americké Panenské ostrovy", "se": "AOS Virgin-sullot", "pl": "Wyspy Dziewicze Stanów Zjednoczonych", "no": "De amerikanske jomfruøyene", "ja": "米領ヴァージン諸島", "it": "Isole Vergini Americane", "zh": "美属维尔京群岛", "nl": "Amerikaanse Maagdeneilanden", "de": "Amerikanische Jungferninseln", "fr": "Îles Vierges des États-Unis", "es": "Islas Vírgenes de EE. UU.", "en": "U.S. Virgin Islands", "pt_BR": "Ilhas Virgens Americanas", "sr-Cyrl": "Амепичка Девичанска Острва", "sr-Latn": "Američka Devičanska Ostrva", "zh_TW": "美屬維京群島", "tr": "Amerika Birleşik Devletleri Virjin Adaları", "ro": "Insulele Virgine Americane", "ar": "جزر العذراء الأمريكية", "fa": "جزایر ویرجین ایالات متحده آمریکا", "yue": "維爾京群島(美國)" }, flag: "🇻🇮", code: "VI", dialCode: "1340", minLength: 7, maxLength: 7, ), Country( name: "Wallis and Futuna", nameTranslations: { "sk": "Wallis a Futuna", "se": "Wallis ja Futuna", "pl": "Wallis i Futuna", "no": "Wallis og Futuna", "ja": "ウォリス・フツナ", "it": "Wallis e Futuna", "zh": "瓦利斯和富图纳", "nl": "Wallis en Futuna", "de": "Wallis und Futuna", "fr": "Wallis-et-Futuna", "es": "Wallis y Futuna", "en": "Wallis & Futuna", "pt_BR": "Wallis e Futuna", "sr-Cyrl": "Валис и Футуна", "sr-Latn": "Valis i Futuna", "zh_TW": "瓦利斯和富圖那", "tr": "Wallis ve Futuna", "ro": "Wallis și Futuna", "ar": "والس وفوتونا", "fa": "والیس و فوتونا", "yue": "瓦利斯同富图纳" }, flag: "🇼🇫", code: "WF", dialCode: "681", minLength: 6, maxLength: 6, ), Country( name: "Yemen", nameTranslations: { "sk": "Jemen", "se": "Jemen", "pl": "Jemen", "no": "Jemen", "ja": "イエメン", "it": "Yemen", "zh": "也门", "nl": "Jemen", "de": "Jemen", "fr": "Yémen", "es": "Yemen", "en": "Yemen", "pt_BR": "Iémen", "sr-Cyrl": "Јемен", "sr-Latn": "Jemen", "zh_TW": "葉門", "tr": "Yemen", "ro": "Yemen", "ar": "اليمن", "fa": "یمن", "yue": "也門" }, flag: "🇾🇪", code: "YE", dialCode: "967", minLength: 9, maxLength: 9, ), Country( name: "Zambia", nameTranslations: { "sk": "Zambia", "se": "Zambia", "pl": "Zambia", "no": "Zambia", "ja": "ザンビア", "it": "Zambia", "zh": "赞比亚", "nl": "Zambia", "de": "Sambia", "fr": "Zambie", "es": "Zambia", "en": "Zambia", "pt_BR": "Zâmbia", "sr-Cyrl": "Замбија", "sr-Latn": "Zambija", "zh_TW": "贊比亞", "tr": "Zambiya", "ro": "Zambia", "ar": "زامبيا", "fa": "زامبیا", "yue": "贊比亞" }, flag: "🇿🇲", code: "ZM", dialCode: "260", minLength: 9, maxLength: 9, ), Country( name: "Zimbabwe", nameTranslations: { "sk": "Zimbabwe", "se": "Zimbabwe", "pl": "Zimbabwe", "no": "Zimbabwe", "ja": "ジンバブエ", "it": "Zimbabwe", "zh": "津巴布韦", "nl": "Zimbabwe", "de": "Simbabwe", "fr": "Zimbabwe", "es": "Zimbabue", "en": "Zimbabwe", "pt_BR": "Zimbábue", "sr-Cyrl": "Зимбабве", "sr-Latn": "Zimbabve", "zh_TW": "辛巴威", "tr": "Zimbabve", "ro": "Zimbabwe", "ar": "زيمبابوي", "fa": "زیمبابوه", "yue": "津巴布韋" }, flag: "🇿🇼", code: "ZW", dialCode: "263", minLength: 9, maxLength: 9) ]; class Country { final String name; final Map nameTranslations; final String flag; final String code; final String dialCode; final String regionCode; final int minLength; final int maxLength; const Country({ required this.name, required this.flag, required this.code, required this.dialCode, required this.nameTranslations, required this.minLength, required this.maxLength, this.regionCode = "", }); String get fullCountryCode { return dialCode + regionCode; } String get displayCC { if (regionCode != "") { return "$dialCode $regionCode"; } return dialCode; } String localizedName(String languageCode) { return nameTranslations[languageCode] ?? name; } } ================================================== FILE PATH: ./lib/controller/local/phone_intel/phone_number.dart ================================================== import 'countries.dart'; class NumberTooLongException implements Exception {} class NumberTooShortException implements Exception {} class InvalidCharactersException implements Exception {} class PhoneNumber { String countryISOCode; String countryCode; String number; PhoneNumber({ required this.countryISOCode, required this.countryCode, required this.number, }); factory PhoneNumber.fromCompleteNumber({required String completeNumber}) { if (completeNumber == "") { return PhoneNumber(countryISOCode: "", countryCode: "", number: ""); } try { Country country = getCountry(completeNumber); String number; if (completeNumber.startsWith('+')) { number = completeNumber.substring(1 + country.dialCode.length + country.regionCode.length); } else { number = completeNumber.substring(country.dialCode.length + country.regionCode.length); } return PhoneNumber( countryISOCode: country.code, countryCode: country.dialCode + country.regionCode, number: number); } on InvalidCharactersException { rethrow; // ignore: unused_catch_clause } on Exception catch (e) { return PhoneNumber(countryISOCode: "", countryCode: "", number: ""); } } bool isValidNumber() { Country country = getCountry(completeNumber); if (number.length < country.minLength) { throw NumberTooShortException(); } if (number.length > country.maxLength) { throw NumberTooLongException(); } return true; } String get completeNumber { return countryCode + number; } static Country getCountry(String phoneNumber) { if (phoneNumber == "") { throw NumberTooShortException(); } final validPhoneNumber = RegExp(r'^[+0-9]*[0-9]*$'); if (!validPhoneNumber.hasMatch(phoneNumber)) { throw InvalidCharactersException(); } if (phoneNumber.startsWith('+')) { return countries .firstWhere((country) => phoneNumber.substring(1).startsWith(country.dialCode + country.regionCode)); } return countries.firstWhere((country) => phoneNumber.startsWith(country.dialCode + country.regionCode)); } @override String toString() => 'PhoneNumber(countryISOCode: $countryISOCode, countryCode: $countryCode, number: $number)'; } ================================================== FILE PATH: ./lib/controller/firebase/access_token.dart ================================================== import 'dart:convert'; import 'package:googleapis_auth/auth_io.dart'; class AccessTokenManager { static final AccessTokenManager _instance = AccessTokenManager._internal(); late final String serviceAccountJsonKey; AccessToken? _accessToken; DateTime? _expiryDate; AccessTokenManager._internal(); factory AccessTokenManager(String jsonKey) { if (_instance._isServiceAccountKeyInitialized()) { // Prevent re-initialization return _instance; } _instance.serviceAccountJsonKey = jsonKey; return _instance; } bool _isServiceAccountKeyInitialized() { try { serviceAccountJsonKey; // Access to check if initialized return true; } catch (e) { return false; } } Future getAccessToken() async { if (_accessToken != null && DateTime.now().isBefore(_expiryDate!)) { return _accessToken!.data; } try { final serviceAccountCredentials = ServiceAccountCredentials.fromJson( json.decode(serviceAccountJsonKey)); final client = await clientViaServiceAccount( serviceAccountCredentials, ['https://www.googleapis.com/auth/firebase.messaging'], ); _accessToken = client.credentials.accessToken; _expiryDate = client.credentials.accessToken.expiry; client.close(); return _accessToken!.data; } catch (e) { throw Exception('Failed to obtain access token'); } } } ================================================== FILE PATH: ./lib/controller/firebase/firbase_messge.dart ================================================== import 'dart:convert'; import 'dart:io'; import 'package:Intaleq/views/home/HomePage/trip_monitor/trip_link_monitor.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/controller/functions/toast.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import '../../constant/box_name.dart'; import '../../constant/colors.dart'; import '../../constant/style.dart'; import '../../main.dart'; import '../../print.dart'; import '../../views/Rate/rate_captain.dart'; import '../../views/home/map_page_passenger.dart'; import '../../views/home/profile/promos_passenger_page.dart'; import '../auth/google_sign.dart'; import '../functions/audio_record1.dart'; import '../home/map_passenger_controller.dart'; import 'local_notification.dart'; class FirebaseMessagesController extends GetxController { final fcmToken = FirebaseMessaging.instance; List tokens = []; List dataTokens = []; late String driverID; late String driverToken; NotificationSettings? notificationSettings; Future getNotificationSettings() async { // Get the current notification settings NotificationSettings? notificationSettings = await FirebaseMessaging.instance.getNotificationSettings(); 'Notification authorization status: ${notificationSettings.authorizationStatus}'; // Call the update function if needed update(); } Future requestFirebaseMessagingPermission() async { FirebaseMessaging messaging = FirebaseMessaging.instance; // Check if the platform is Android if (Platform.isAndroid) { // Request permission for Android await messaging.requestPermission(); } else if (Platform.isIOS) { // Request permission for iOS NotificationSettings settings = await messaging.requestPermission( alert: true, announcement: true, badge: true, carPlay: true, criticalAlert: true, provisional: false, sound: true, ); messaging.setForegroundNotificationPresentationOptions( alert: true, badge: true, sound: true); } } NotificationController notificationController = Get.isRegistered() ? Get.find() : Get.put(NotificationController()); Future getToken() async { fcmToken.getToken().then((token) { Log.print('fcmToken: ${token}'); box.write(BoxName.tokenFCM, (token.toString())); }); // 🔹 الاشتراك في topic await fcmToken .subscribeToTopic("passengers"); // أو "users" حسب نوع المستخدم print("Subscribed to 'passengers' topic ✅"); FirebaseMessaging.onMessage.listen((RemoteMessage message) { // If the app is in the background or terminated, show a system tray message RemoteNotification? notification = message.notification; AndroidNotification? android = notification?.android; // if (notification != null && android != null) { if (message.data.isNotEmpty && message.notification != null) { fireBaseTitles(message); } }); FirebaseMessaging.onBackgroundMessage((RemoteMessage message) async { // Handle background message if (message.data.isNotEmpty && message.notification != null) { fireBaseTitles(message); } }); FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { if (message.data.isNotEmpty && message.notification != null) { fireBaseTitles(message); } }); } Future fireBaseTitles(RemoteMessage message) async { // [!! تعديل !!] // اقرأ "النوع" من حمولة البيانات، وليس من العنوان String category = message.data['category'] ?? ''; // اقرأ العنوان (للعرض) String title = message.notification?.title ?? ''; String body = message.notification?.body ?? ''; if (category == 'ORDER') { // <-- مثال: كان 'Order'.tr Log.print('message: ${message}'); if (Platform.isAndroid) { notificationController.showNotification(title, body, 'Order'); } } // ... داخل معالج الإشعارات في تطبيق الراكب ... else if (category == 'Accepted Ride') { // <-- كان 'Accepted Ride' var driverListJson = message.data['driverList']; if (driverListJson != null) { var myList = jsonDecode(driverListJson) as List; final controller = Get.find(); // controller.currentRideState.value = RideState.driverApplied; await controller.processRideAcceptance( driverIdFromFCM: myList[0].toString(), rideIdFromFCM: myList[3].toString()); } else { Log.print('❌ خطأ: RIDE_ACCEPTED وصل بدون driverList'); } } else if (category == 'Promo') { // <-- كان 'Promo'.tr if (Platform.isAndroid) { notificationController.showNotification(title, body, 'promo'); } Get.to(const PromosPassengerPage()); } else if (category == 'Trip Monitoring') { // <-- كان 'Trip Monitoring'.tr if (Platform.isAndroid) { notificationController.showNotification(title, body, 'iphone_ringtone'); } var myListString = message.data['DriverList']; var myList = jsonDecode(myListString) as List; Get.to(() => TripMonitor(), arguments: { 'rideId': myList[0].toString(), 'driverId': myList[1].toString(), }); } else if (category == 'token change') { // <-- كان 'token change'.tr if (Platform.isAndroid) { notificationController.showNotification(title, body, 'cancel'); } GoogleSignInHelper.signOut(); } else if (category == 'Driver Is Going To Passenger') { // <-- كان 'Driver Is Going To Passenger' Get.find().isDriverInPassengerWay = true; Get.find().update(); if (Platform.isAndroid) { notificationController.showNotification(title, body, 'tone1'); } } else if (category == 'message From passenger') { // <-- كان 'message From passenger' if (Platform.isAndroid) { notificationController.showNotification(title, body, 'ding'); } passengerDialog(body); update(); } else if (category == 'message From Driver') { // <-- كان 'message From Driver' if (Platform.isAndroid) { notificationController.showNotification(title, body, 'ding'); } passengerDialog(body); update(); } else if (category == 'Trip is Begin') { // <-- كان 'Trip is Begin' Log.print('[FCM] استقبل إشعار "TRIP_BEGUN".'); final controller = Get.find(); controller.processRideBegin(); } else if (category == 'Hi ,I will go now') { // <-- كان 'Hi ,I will go now'.tr if (Platform.isAndroid) { notificationController.showNotification(title, body, 'ding'); } update(); } else if (category == 'Hi ,I Arrive your site') { // <-- كان 'Hi ,I Arrive your site'.tr final controller = Get.find(); // if (controller.currentRideState.value == RideState.driverApplied) { Log.print('[FCM] السائق وصل. تغيير الحالة إلى driverArrived'); controller.currentRideState.value = RideState.driverArrived; // } } else if (category == 'Cancel Trip from driver') { // <-- كان "Cancel Trip from driver" Get.back(); if (Platform.isAndroid) { notificationController.showNotification(title, body, 'cancel'); } Get.defaultDialog( title: "The driver canceled your ride.".tr, // العنوان المترجم للعرض middleText: "We will look for a new driver.\nPlease wait.".tr, confirm: MyElevatedButton( kolor: AppColor.greenColor, title: 'Ok'.tr, onPressed: () async { Get.back(); await Get.find() .reSearchAfterCanceledFromDriver(); }, ), cancel: MyElevatedButton( title: 'Cancel'.tr, kolor: AppColor.redColor, onPressed: () { Get.offAll(() => const MapPagePassenger()); }, )); } else if (category == 'Driver Finish Trip') { // 1. محاولة استخراج البيانات بمرونة (سواء كانت نص أو ليست نص) final rawData = message.data['DriverList']; List driverList = []; if (rawData != null) { if (rawData is String) { try { driverList = jsonDecode(rawData); } catch (e) { Log.print('Error decoding DriverList JSON: $e'); } } else if (rawData is List) { // في بعض الأحيان المكتبة تحولها لقائمة تلقائياً driverList = rawData; } } // 2. إشعار "لا تنسى أغراضك" (يعمل دائماً) notificationController.showNotification( 'Alert'.tr, "Please make sure not to leave any personal belongings in the car.".tr, 'tone1', ); // 3. التصحيح هنا: التأكد أن القائمة تحتوي على 4 عناصر على الأقل لتجنب RangeError // العناصر هي: [0:Id, 1:RideId, 2:Token, 3:Price] if (driverList.length >= 4) { // استخراج السعر بأمان String price = driverList[3].toString(); // استخراج العنوان بأمان (إذا كان title غير معرف سابقاً نستخدم نص افتراضي) String notificationTitle = message.notification?.title ?? "Trip Finished".tr; if (Platform.isAndroid) { notificationController.showNotification(notificationTitle, '${'you will pay to Driver'.tr} $price \$', 'tone1'); } // الانتقال لصفحة التقييم Get.to(() => RateDriverFromPassenger(), arguments: { 'driverId': driverList[0].toString(), 'rideId': driverList[1].toString(), 'price': price }); try { if (Get.isRegistered()) { Get.find().stopRecording(); } Get.find().tripFinishedFromDriver(); } catch (e) { Log.print("Error stopping logic: $e"); } } else { Log.print( 'Error: TRIP_FINISHED list is incomplete. Length is: ${driverList.length}'); } } else if (category == 'Finish Monitor') { // <-- كان "Finish Monitor".tr Get.defaultDialog( titleStyle: AppStyle.title, title: 'Trip finished '.tr, middleText: '', confirm: MyElevatedButton( title: 'Ok'.tr, onPressed: () { Get.offAll(() => const MapPagePassenger()); })); } else if (category == 'Driver Cancelled Your Trip') { if (Platform.isAndroid) { notificationController.showNotification( 'Driver Cancelled Your Trip'.tr, 'you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet' .tr, 'cancel'); } box.write(BoxName.parentTripSelected, false); box.remove(BoxName.tokenParent); Get.find().restCounter(); Get.offAll(() => const MapPagePassenger()); } // ... (باقي الحالات مثل Call Income, Call End, إلخ) ... // ... بنفس الطريقة ... else if (category == 'Order Applied') { if (Platform.isAndroid) { notificationController.showNotification( 'The order Accepted by another Driver'.tr, 'We regret to inform you that another driver has accepted this order.' .tr, 'order'); } } } // Future fireBaseTitles(RemoteMessage message) async { // if (message.notification!.title! == 'Order'.tr) { // Log.print('message: ${message}'); // if (Platform.isAndroid) { // notificationController.showNotification( // 'Order'.tr, message.notification!.body!, 'Order'); // } // } else // ... داخل معالج الإشعارات في تطبيق الراكب ... // if (message.notification!.title! == 'Accepted Ride') { // // ... // // انظر هنا: قمنا بتغيير "passengerList" إلى "driverList" // var driverListJson = message.data['driverList']; // // تأكد من أن البيانات ليست null قبل المتابعة // if (driverListJson != null) { // var myList = jsonDecode(driverListJson) as List; // Log.print('myList: ${myList}'); // final controller = Get.find(); // // استدعاء الدالة الموحدة الجديدة التي أنشأناها // await controller.processRideAcceptance( // driverIdFromFCM: myList[0].toString(), // rideIdFromFCM: myList[3].toString()); // } else { // Log.print( // '❌ خطأ فادح: إشعار "Accepted Ride" وصل بدون بيانات (driverList is null)'); // } // } else if (message.notification!.title! == 'Promo'.tr) { // if (Platform.isAndroid) { // notificationController.showNotification( // 'Promo', 'Show latest promo'.tr, 'promo'); // } // Get.to(const PromosPassengerPage()); // } else if (message.notification!.title! == 'Trip Monitoring'.tr) { // if (Platform.isAndroid) { // notificationController.showNotification( // 'Trip Monitoring'.tr, '', 'iphone_ringtone'); // } // var myListString = message.data['DriverList']; // var myList = jsonDecode(myListString) as List; // Get.toNamed('/tripmonitor', arguments: { // 'rideId': myList[0].toString(), // 'driverId': myList[1].toString(), // }); // } else if (message.notification!.title! == 'token change'.tr) { // if (Platform.isAndroid) { // notificationController.showNotification( // 'token change'.tr, 'token change'.tr, 'cancel'); // } // GoogleSignInHelper.signOut(); // } else if (message.notification!.title! == 'Driver Is Going To Passenger') { // Get.find().isDriverInPassengerWay = true; // Get.find().update(); // if (Platform.isAndroid) { // notificationController.showNotification('Driver is Going To You'.tr, // 'Please stay on the picked point.'.tr, 'tone1'); // } // // Get.snackbar('Driver is Going To Passenger', '', // // backgroundColor: AppColor.greenColor); // } else if (message.notification!.title! == 'message From passenger') { // if (Platform.isAndroid) { // notificationController.showNotification( // 'message From passenger'.tr, ''.tr, 'ding'); // } // passengerDialog(message.notification!.body!); // update(); // } else if (message.notification!.title! == 'message From Driver') { // if (Platform.isAndroid) { // notificationController.showNotification( // 'message From Driver'.tr, ''.tr, 'ding'); // } // passengerDialog(message.notification!.body!); // update(); // } else // (هذا الكود في معالج الإشعارات لديك) // if (message.notification!.title! == 'Trip is Begin') { // Log.print('[FCM] استقبل إشعار "Trip is Begin".'); // // (تم حذف الإشعار المحلي من هنا، نُقل إلى الدالة الموحدة) // final controller = Get.find(); // // استدعاء حارس البوابة الجديد والآمن // controller.processRideBegin(); // // (تم حذف كل الأوامر التالية من هنا) // // Get.find().getBeginRideFromDriver(); // // box.write(BoxName.passengerWalletTotal, '0'); // // update(); // } else if (message.notification!.title! == 'Hi ,I will go now'.tr) { // // Get.snackbar('Hi ,I will go now', '', // // backgroundColor: AppColor.greenColor); // if (Platform.isAndroid) { // notificationController.showNotification( // 'Passenger come to you'.tr, 'Hi ,I will go now'.tr, 'ding'); // } // update(); // } // ... داخل معالج الإشعارات (FCM Handler) ... // if (message.notification!.title! == 'Hi ,I Arrive your site'.tr) { // final controller = Get.find(); // // 1. التأكد أننا في الحالة الصحيحة (السائق كان في الطريق) // if (controller.currentRideState.value == RideState.driverApplied) { // Log.print('[FCM] السائق وصل. تغيير الحالة إلى driverArrived'); // // 2. تغيير الحالة فقط! // controller.currentRideState.value = RideState.driverArrived; // } // } else if (message.notification!.title! == "Cancel Trip from driver") { // Get.back(); // if (Platform.isAndroid) { // notificationController.showNotification("Cancel Trip from driver".tr, // "We will look for a new driver.\nPlease wait.".tr, 'cancel'); // } // Get.defaultDialog( // title: "The driver canceled your ride.".tr, // middleText: "We will look for a new driver.\nPlease wait.".tr, // confirm: MyElevatedButton( // kolor: AppColor.greenColor, // title: 'Ok'.tr, // onPressed: () async { // Get.back(); // await Get.find() // .reSearchAfterCanceledFromDriver(); // }, // ), // cancel: MyElevatedButton( // title: 'Cancel'.tr, // kolor: AppColor.redColor, // onPressed: () { // Get.offAll(() => const MapPagePassenger()); // }, // ) // // Get.find() // // .searchNewDriverAfterRejectingFromDriver(); // ); // } else if (message.notification!.title! == 'Driver Finish Trip'.tr) { // // الخطوة 1: استقبل البيانات وتحقق من وجودها // final rawData = message.data['DriverList']; // List driverList = []; // ابدأ بقائمة فارغة كإجراء وقائي // // الخطوة 2: قم بفك تشفير البيانات بأمان // if (rawData != null && rawData is String) { // try { // driverList = jsonDecode(rawData); // Log.print('Successfully decoded DriverList: $driverList'); // } catch (e) { // Log.print('Error decoding DriverList JSON: $e'); // // اترك القائمة فارغة في حالة حدوث خطأ // } // } else { // Log.print('Error: DriverList data is null or not a String.'); // } // // الخطوة 3: استخدم البيانات فقط إذا كانت القائمة تحتوي على العناصر المطلوبة // // هذا يمنع خطأ "RangeError" إذا كانت القائمة أقصر من المتوقع // if (driverList.length >= 4) { // if (Platform.isAndroid) { // notificationController.showNotification( // "Driver Finish Trip".tr, // '${'you will pay to Driver'.tr} ${driverList[3].toString()} \$', // تم تحسين طريقة عرض النص // 'tone1'); // } // Get.find().stopRecording(); // if ((double.tryParse( // box.read(BoxName.passengerWalletTotal).toString()) ?? // 0) < // 0) { // box.write(BoxName.passengerWalletTotal, 0); // } // Get.find().tripFinishedFromDriver(); // NotificationController().showNotification( // 'Don’t forget your personal belongings.'.tr, // 'Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app' // .tr, // 'ding'); // Get.to(() => RateDriverFromPassenger(), arguments: { // 'driverId': driverList[0].toString(), // 'rideId': driverList[1].toString(), // 'price': driverList[3].toString() // }); // } else { // Log.print( // 'Error: Decoded driverList does not have enough elements. Received: $driverList'); // // هنا يمكنك عرض رسالة خطأ للمستخدم إذا لزم الأمر // } // } else if (message.notification!.title! == "Finish Monitor".tr) { // Get.defaultDialog( // titleStyle: AppStyle.title, // title: 'Trip finished '.tr, // middleText: '', // confirm: MyElevatedButton( // title: 'Ok'.tr, // onPressed: () { // Get.offAll(() => const MapPagePassenger()); // })); // } // // else if (message.notification!.title! == "Trip Monitoring".tr) { // // Get.to(() => const TripMonitor()); // // } // else if (message.notification!.title! == 'Call Income') { // try { // var myListString = message.data['DriverList']; // var driverList = jsonDecode(myListString) as List; // // if (Platform.isAndroid) { // if (Platform.isAndroid) { // notificationController.showNotification( // 'Call Income'.tr, // message.notification!.body!, // 'iphone_ringtone', // ); // } // // } // // Assuming GetMaterialApp is initialized and context is valid for navigation // // Get.to(() => PassengerCallPage( // // channelName: driverList[1].toString(), // // token: driverList[0].toString(), // // remoteID: driverList[2].toString(), // // )); // } catch (e) {} // } else if (message.notification!.title! == 'Call Income from Driver'.tr) { // try { // var myListString = message.data['DriverList']; // var driverList = jsonDecode(myListString) as List; // // if (Platform.isAndroid) { // if (Platform.isAndroid) { // notificationController.showNotification( // 'Call Income'.tr, // message.notification!.body!, // 'iphone_ringtone', // ); // } // // Assuming GetMaterialApp is initialized and context is valid for navigation // // Get.to(() => PassengerCallPage( // // channelName: driverList[1].toString(), // // token: driverList[0].toString(), // // remoteID: driverList[2].toString(), // // )); // } catch (e) {} // } else if (message.notification!.title! == 'Call End'.tr) { // try { // var myListString = message.data['DriverList']; // var driverList = jsonDecode(myListString) as List; // if (Platform.isAndroid) { // notificationController.showNotification( // 'Call End'.tr, // message.notification!.body!, // 'ding', // ); // } // // Assuming GetMaterialApp is initialized and context is valid for navigation // // Get.off(const CallPage()); // } catch (e) {} // } else if (message.notification!.title! == 'Driver Cancelled Your Trip') { // // Get.snackbar( // // 'You will be pay the cost to driver or we will get it from you on next trip' // // .tr, // // 'message', // // backgroundColor: AppColor.redColor); // if (Platform.isAndroid) { // notificationController.showNotification( // 'Driver Cancelled Your Trip'.tr, // 'you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet' // .tr, // 'cancel'); // } // box.write(BoxName.parentTripSelected, false); // box.remove(BoxName.tokenParent); // Get.find().restCounter(); // Get.offAll(() => const MapPagePassenger()); // } // // else if (message.notification!.title! == 'Order Applied') { // // Get.snackbar( // // "The order has been accepted by another driver." // // .tr, // Corrected grammar // // "Be more mindful next time to avoid dropping orders." // // .tr, // Improved sentence structure // // backgroundColor: AppColor.yellowColor, // // snackPosition: SnackPosition.BOTTOM, // // ); // // } // else if (message.notification!.title! == 'Order Applied'.tr) { // if (Platform.isAndroid) { // notificationController.showNotification( // 'The order Accepted by another Driver'.tr, // 'We regret to inform you that another driver has accepted this order.' // .tr, // 'order'); // } // } // } SnackbarController driverAppliedTripSnakBar() { return Get.snackbar( 'Driver Applied the Ride for You'.tr, '', colorText: AppColor.greenColor, duration: const Duration(seconds: 3), snackPosition: SnackPosition.TOP, titleText: Text( 'Applied'.tr, style: const TextStyle(color: AppColor.redColor), ), messageText: Text( 'Driver Applied the Ride for You'.tr, style: AppStyle.title, ), icon: const Icon(Icons.approval), shouldIconPulse: true, margin: const EdgeInsets.all(16), padding: const EdgeInsets.all(16), ); } Future passengerDialog(String message) { return Get.defaultDialog( barrierDismissible: false, title: 'message From Driver'.tr, titleStyle: AppStyle.title, middleTextStyle: AppStyle.title, middleText: message.tr, confirm: MyElevatedButton( title: 'Ok'.tr, onPressed: () { // Get.find().sendNotificationToPassengerToken( // 'Hi ,I will go now'.tr, // 'I will go now'.tr, // Get.find().driverToken, []); // Get.find() // .startTimerDriverWaitPassenger5Minute(); Get.back(); })); } Future driverFinishTripDialoge(List driverList) { return Get.defaultDialog( title: 'Driver Finish Trip'.tr, content: const DriverTipWidget(), confirm: MyElevatedButton( title: 'Yes'.tr, onPressed: () async { Get.to(() => RateDriverFromPassenger(), arguments: { 'driverId': driverList[0].toString(), 'rideId': driverList[1].toString(), 'price': driverList[3].toString() }); }, kolor: AppColor.greenColor, ), cancel: MyElevatedButton( title: 'No,I want'.tr, onPressed: () { Get.to(() => RateDriverFromPassenger(), arguments: { 'driverId': driverList[0].toString(), 'rideId': driverList[1].toString(), 'price': driverList[3].toString() }); }, kolor: AppColor.redColor, )); } } class DriverTipWidget extends StatelessWidget { const DriverTipWidget({ super.key, }); @override Widget build(BuildContext context) { return GetBuilder(builder: (controller) { return Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ // Text( // '${'Your fee is '.tr}${Get.find().totalPassenger.toStringAsFixed(2)}'), Text( 'Do you want to pay Tips for this Driver'.tr, textAlign: TextAlign.center, ), Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ InkWell( onTap: () { box.write(BoxName.tipPercentage, '0.05'); Toast.show( context, '${'Tip is '.tr}${(controller.totalPassenger) * (double.parse(box.read(BoxName.tipPercentage.toString())))}', AppColor.blueColor); controller.update(); }, child: Container( decoration: BoxDecoration(border: Border.all()), child: const Padding( padding: EdgeInsets.all(4), child: Center( child: Text('5%'), ), ), ), ), InkWell( onTap: () { box.write(BoxName.tipPercentage, '0.10'); Toast.show( context, '${'Tip is'.tr} ${(controller.totalPassenger) * (double.parse(box.read(BoxName.tipPercentage.toString())))}', AppColor.blueColor); controller.update(); }, child: Container( decoration: BoxDecoration(border: Border.all()), child: const Center( child: Padding( padding: EdgeInsets.all(5), child: Text('10%'), ), ), ), ), InkWell( onTap: () { box.write(BoxName.tipPercentage, '0.15'); Toast.show( context, '${'Tip is'.tr} ${(controller.totalPassenger) * (double.parse(box.read(BoxName.tipPercentage.toString())))}', AppColor.blueColor); controller.update(); }, child: Container( decoration: BoxDecoration(border: Border.all()), child: const Center( child: Padding( padding: EdgeInsets.all(5), child: Text('15%'), ), ), ), ), InkWell( onTap: () { box.write(BoxName.tipPercentage, '0.20'); Toast.show( context, '${'Tip is'.tr} ${(controller.totalPassenger) * (double.parse(box.read(BoxName.tipPercentage.toString())))}', AppColor.blueColor); controller.update(); }, child: Container( decoration: BoxDecoration(border: Border.all()), child: const Center( child: Padding( padding: EdgeInsets.all(5), child: Text('20%'), ), ), ), ), ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ MyElevatedButton( kolor: AppColor.redColor, title: 'No i want'.tr, onPressed: () { box.write(BoxName.tipPercentage, '0'); controller.update(); }), Container( decoration: AppStyle.boxDecoration1, child: Padding( padding: const EdgeInsets.all(6), child: Text( '${(controller.totalPassenger) * (double.parse(box.read(BoxName.tipPercentage.toString())))} ${box.read(BoxName.countryCode) == 'Egypt' ? 'LE'.tr : 'JOD'.tr}', style: AppStyle.title, ), ), ), ], ) ], ); }); } } ================================================== FILE PATH: ./lib/controller/firebase/local_notification.dart ================================================== import 'dart:async'; import 'dart:io'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:timezone/data/latest.dart' as tz; import 'package:timezone/timezone.dart' as tz; import '../../main.dart'; class NotificationController extends GetxController { final FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); @override void onInit() { super.onInit(); initNotifications(); } // Initializes the local notifications plugin Future initNotifications() async { const AndroidInitializationSettings android = AndroidInitializationSettings('@mipmap/launcher_icon'); DarwinInitializationSettings ios = DarwinInitializationSettings( requestAlertPermission: true, requestBadgePermission: true, requestSoundPermission: true, // onDidReceiveLocalNotification: // (int id, String? title, String? body, String? payload) async {}, ); InitializationSettings initializationSettings = InitializationSettings(android: android, iOS: ios); await _flutterLocalNotificationsPlugin.initialize(initializationSettings); tz.initializeTimeZones(); print('Notifications initialized'); } // Displays a notification with the given title and message void showNotification(String title, String message, String tone) async { final AndroidNotificationDetails android = AndroidNotificationDetails( 'high_importance_channel', 'High Importance Notifications', importance: Importance.max, priority: Priority.high, showWhen: false, sound: RawResourceAndroidNotificationSound(tone), ); const DarwinNotificationDetails ios = DarwinNotificationDetails( sound: 'default', presentAlert: true, presentBadge: true, presentSound: true, ); final NotificationDetails details = NotificationDetails(android: android, iOS: ios); await _flutterLocalNotificationsPlugin.show(0, title, message, details); print('Notification shown: $title - $message'); } // /Users/hamzaaleghwairyeen/development/App/ride 2/lib/controller/firebase/local_notification.dart // Assume _flutterLocalNotificationsPlugin is initialized somewhere in your code // void scheduleNotificationsForSevenDays( // String title, String message, String tone) async { // final AndroidNotificationDetails android = AndroidNotificationDetails( // 'high_importance_channel', // 'High Importance Notifications', // importance: Importance.max, // priority: Priority.high, // sound: RawResourceAndroidNotificationSound(tone), // ); // const DarwinNotificationDetails ios = DarwinNotificationDetails( // sound: 'default', // presentAlert: true, // presentBadge: true, // presentSound: true, // ); // final NotificationDetails details = // NotificationDetails(android: android, iOS: ios); // // Check for the exact alarm permission on Android 12 and above // if (Platform.isAndroid) { // if (await Permission.scheduleExactAlarm.isDenied) { // if (await Permission.scheduleExactAlarm.request().isGranted) { // print('SCHEDULE_EXACT_ALARM permission granted'); // } else { // print('SCHEDULE_EXACT_ALARM permission denied'); // return; // } // } // } // // Schedule notifications for the next 7 days // for (int day = 0; day < 7; day++) { // // Schedule for 8:00 AM // await _scheduleNotificationForTime( // day, 8, 0, title, message, details, day * 1000 + 1); // // Schedule for 3:00 PM // await _scheduleNotificationForTime( // day, 15, 0, title, message, details, day * 1000 + 2); // Unique ID // // Schedule for 8:00 PM // await _scheduleNotificationForTime( // day, 20, 0, title, message, details, day * 1000 + 3); // Unique ID // } // print('Notifications scheduled successfully for the next 7 days'); // } void scheduleNotificationsForSevenDays( String title, String message, String tone) async { final AndroidNotificationDetails android = AndroidNotificationDetails( 'high_importance_channel', 'High Importance Notifications', importance: Importance.max, priority: Priority.high, sound: RawResourceAndroidNotificationSound(tone), ); const DarwinNotificationDetails ios = DarwinNotificationDetails( sound: 'default', presentAlert: true, presentBadge: true, presentSound: true, ); final NotificationDetails details = NotificationDetails(android: android, iOS: ios); // Check for the exact alarm permission on Android 12 and above if (Platform.isAndroid) { if (await Permission.scheduleExactAlarm.isDenied) { if (await Permission.scheduleExactAlarm.request().isGranted) { print('SCHEDULE_EXACT_ALARM permission granted'); } else { print('SCHEDULE_EXACT_ALARM permission denied'); return; } } } // Schedule notifications for the next 7 days for (int day = 0; day < 7; day++) { // List of notification times final notificationTimes = [ {'hour': 8, 'minute': 0, 'id': day * 1000 + 1}, // 8:00 AM {'hour': 15, 'minute': 0, 'id': day * 1000 + 2}, // 3:00 PM {'hour': 20, 'minute': 0, 'id': day * 1000 + 3}, // 8:00 PM ]; for (var time in notificationTimes) { final notificationId = time['id'] as int; // Check if this notification ID is already stored bool isScheduled = box.read('notification_$notificationId') ?? false; if (!isScheduled) { // Schedule the notification if not already scheduled await _scheduleNotificationForTime( day, time['hour'] as int, time['minute'] as int, title, message, details, notificationId, ); // Mark this notification ID as scheduled in GetStorage box.write('notification_$notificationId', true); } else { print('Notification with ID $notificationId is already scheduled.'); } } } print('Notifications scheduled successfully for the next 7 days'); } void scheduleNotificationsForTimeSelected( String title, String message, String tone, DateTime timeSelected) async { final AndroidNotificationDetails android = AndroidNotificationDetails( 'high_importance_channel', 'High Importance Notifications', importance: Importance.max, priority: Priority.high, sound: RawResourceAndroidNotificationSound(tone), ); const DarwinNotificationDetails ios = DarwinNotificationDetails( sound: 'default', presentAlert: true, presentBadge: true, presentSound: true, ); final NotificationDetails details = NotificationDetails(android: android, iOS: ios); // Check for the exact alarm permission on Android 12 and above if (Platform.isAndroid) { if (await Permission.scheduleExactAlarm.isDenied) { if (await Permission.scheduleExactAlarm.request().isGranted) { print('SCHEDULE_EXACT_ALARM permission granted'); } else { print('SCHEDULE_EXACT_ALARM permission denied'); return; } } } // Schedule notifications for 10 and 30 minutes before the timeSelected await _scheduleNotificationForTimeVIP( timeSelected.subtract(const Duration(minutes: 10)), // 10 minutes before title, message, details, 1, // Unique ID for 10-minute before notification ); await _scheduleNotificationForTimeVIP( timeSelected.subtract(const Duration(minutes: 30)), // 30 minutes before title, message, details, 2, // Unique ID for 30-minute before notification ); print('Notifications scheduled successfully for the time selected'); } Future _scheduleNotificationForTimeVIP( DateTime scheduledDate, String title, String message, NotificationDetails details, int notificationId, ) async { // Initialize and set Cairo timezone tz.initializeTimeZones(); var cairoLocation = tz.getLocation('Africa/Cairo'); final now = tz.TZDateTime.now(cairoLocation); // Convert to Cairo time tz.TZDateTime scheduledTZDateTime = tz.TZDateTime.from(scheduledDate, cairoLocation); // Check if 10 minutes before the scheduled time is in the past if (scheduledTZDateTime .subtract(const Duration(minutes: 10)) .isBefore(now)) { // If the 10 minutes before the scheduled time is in the past, don't schedule print( 'Scheduled time minus 10 minutes is in the past. Skipping notification.'); return; // Skip this notification } print('Current time (Cairo): $now'); print('Scheduling notification for: $scheduledTZDateTime'); await _flutterLocalNotificationsPlugin.zonedSchedule( notificationId, // Unique ID for each notification title, message, scheduledTZDateTime, details, androidScheduleMode: AndroidScheduleMode.exact, // uiLocalNotificationDateInterpretation: // UILocalNotificationDateInterpretation.absoluteTime, matchDateTimeComponents: null, // Don't repeat automatically; we handle manually ); print('Notification scheduled successfully for: $scheduledTZDateTime'); } Future _scheduleNotificationForTime( int dayOffset, int hour, int minute, String title, String message, NotificationDetails details, int notificationId, ) async { // Initialize and set Cairo timezone tz.initializeTimeZones(); var cairoLocation = tz.getLocation('Africa/Cairo'); final now = tz.TZDateTime.now(cairoLocation); tz.TZDateTime scheduledDate = tz.TZDateTime( cairoLocation, now.year, now.month, now.day + dayOffset, // Add offset to schedule for the next days hour, minute, ); // If the scheduled time is in the past, move it to the next day if (scheduledDate.isBefore(now)) { scheduledDate = scheduledDate.add(const Duration(days: 1)); } print('Current time (Cairo): $now'); print('Scheduling notification for: $scheduledDate'); await _flutterLocalNotificationsPlugin.zonedSchedule( notificationId, // Unique ID for each notification title, message, scheduledDate, details, androidScheduleMode: AndroidScheduleMode.exact, // uiLocalNotificationDateInterpretation: // UILocalNotificationDateInterpretation.absoluteTime, matchDateTimeComponents: null, // Don't repeat automatically; we handle 7 days manually ); print('Notification scheduled successfully for: $scheduledDate'); } } ================================================== FILE PATH: ./lib/controller/firebase/notification_service.dart ================================================== import 'package:Intaleq/print.dart'; import 'package:http/http.dart' as http; import 'dart:convert'; class NotificationService { // استبدل هذا الرابط بالرابط الصحيح لملف PHP على السيرفر الخاص بك static const String _serverUrl = 'https://syria.intaleq.xyz/intaleq/fcm/send_fcm.php'; static const String _batchServerUrl = 'https://syria.intaleq.xyz/intaleq/fcm/send_fcm_batch.php'; static Future sendNotification({ required String target, required String title, required String body, required String? category, // <-- [الإضافة الأولى] String? tone, List? driverList, // <-- [تعديل 1] : إضافة المتغير الجديد bool isTopic = false, }) async { try { final Map payload = { 'target': target, 'title': title, 'body': body, 'isTopic': isTopic, }; if (category != null) { payload['category'] = category; // <-- [الإضافة الثانية] (النص الثابت للتحكم) } // نضيف النغمة فقط إذا لم تكن فارغة if (tone != null) { payload['tone'] = tone; } // <-- [تعديل 2] : نضيف قائمة البيانات بعد تشفيرها إلى JSON if (driverList != null) { payload['driverList'] = jsonEncode(driverList); } final response = await http.post( Uri.parse(_serverUrl), headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: jsonEncode(payload), ); if (response.statusCode == 200) { print('✅ Notification sent successfully.'); print('Server Response: ${response.body}'); } else { print( '❌ Failed to send notification. Status code: ${response.statusCode}'); print('Server Error: ${response.body}'); } } catch (e) { print('❌ An error occurred while sending notification: $e'); } } /// [4] !! دالة جديدة مضافة !! /// ترسل إشعاراً "مجمعاً" إلى قائمة من السائقين static Future sendBatchNotification({ required List targets, // <-- قائمة التوكينز required String title, required String body, String? tone, List? driverList, // <-- بيانات الرحلة (نفسها للجميع) }) async { // لا ترسل شيئاً إذا كانت القائمة فارغة if (targets.isEmpty) { Log.print('⚠️ [Batch] No targets to send to. Skipped.'); return; } try { final Map payload = { // "targets" بدلاً من "target" 'targets': jsonEncode(targets), // تشفير قائمة التوكينز 'title': title, 'body': body, }; if (tone != null) { payload['tone'] = tone; } // بيانات الرحلة (DriverList) if (driverList != null) { payload['driverList'] = jsonEncode(driverList); } final response = await http.post( Uri.parse(_batchServerUrl), // <-- !! تستخدم الرابط الجديد headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: jsonEncode(payload), ); if (response.statusCode == 200) { Log.print('✅ [Batch] Notifications sent successfully.'); Log.print('Server Response: ${response.body}'); } else { Log.print('❌ [Batch] Failed to send. Status: ${response.statusCode}'); Log.print('Server Error: ${response.body}'); } } catch (e) { Log.print('❌ [Batch] An error occurred: $e'); } } } ================================================== FILE PATH: ./lib/controller/firebase/live_activity.dart ================================================== import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class LiveActivityScreen extends StatefulWidget { @override _LiveActivityScreenState createState() => _LiveActivityScreenState(); } class _LiveActivityScreenState extends State { static const platform = MethodChannel('live_activity_channel'); Future _startLiveActivity() async { try { await platform.invokeMethod('startLiveActivity'); } on PlatformException catch (e) { print("Failed to start Live Activity: '${e.message}'."); } } Future _updateLiveActivity(double progress) async { try { await platform.invokeMethod('updateLiveActivity', {"progress": progress}); } on PlatformException catch (e) { print("Failed to update Live Activity: '${e.message}'."); } } Future _endLiveActivity() async { try { await platform.invokeMethod('endLiveActivity'); } on PlatformException catch (e) { print("Failed to end Live Activity: '${e.message}'."); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("Live Activity Test")), body: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ ElevatedButton( onPressed: _startLiveActivity, child: Text("Start Live Activity"), ), ElevatedButton( onPressed: () => _updateLiveActivity(0.5), child: Text("Update Progress to 50%"), ), ElevatedButton( onPressed: _endLiveActivity, child: Text("End Live Activity"), ), ], ), ); } } ================================================== FILE PATH: ./lib/controller/profile/setting_controller.dart ================================================== import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/main.dart'; import 'package:get/get.dart'; class SettingController extends GetxController { bool isGoogleMapsEnabled = false; void onChangMapApp() { if (!isGoogleMapsEnabled) { isGoogleMapsEnabled = true; box.write(BoxName.googlaMapApp, true); update(); } else { isGoogleMapsEnabled = false; box.write(BoxName.googlaMapApp, false); update(); } } @override void onInit() { if (box.read(BoxName.googlaMapApp) != null) { isGoogleMapsEnabled = box.read(BoxName.googlaMapApp); } update(); super.onInit(); } } ================================================== FILE PATH: ./lib/controller/profile/profile_controller.dart ================================================== import 'dart:convert'; import 'package:Intaleq/constant/colors.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:Intaleq/main.dart'; class ProfileController extends GetxController { bool isloading = false; Map prfoileData = {}; TextEditingController txtController = TextEditingController(); List genders = ['Male', 'Female', 'Other']; String gender = 'Male'; void setGender(String value) { gender = value; update(); } String? selectedDegree; void setDegree(String? degree) { selectedDegree = degree; update(); } String? selectedCountry; void setCountry(String? country) { selectedCountry = country; // box.write(BoxName.countryCode, country); update(); } updateColumn(Map payload) async { isloading = true; update(); await CRUD().post(link: AppLink.updateprofile, payload: payload); await getProfile(); isloading = false; update(); } updatField(String columnName, TextInputType type) async { Get.dialog( CupertinoAlertDialog( title: Text('${'Update'.tr} $columnName'), content: Column( children: [ const SizedBox(height: 16), // Add spacing between title and input CupertinoTextField( controller: txtController, placeholder: 'type here'.tr, keyboardType: type, padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), decoration: BoxDecoration( border: Border.all(color: CupertinoColors.lightBackgroundGray), borderRadius: BorderRadius.circular(8), ), ), const SizedBox(height: 20), CupertinoButton( color: AppColor.blueColor, onPressed: () async { Get.back(); await updateColumn({ 'id': box.read(BoxName.passengerID), columnName: (txtController.text), }); if (columnName == 'first_name') { box.write(BoxName.name, (txtController.text)); } txtController.clear(); }, child: Text('Update'.tr), ), ], ), ), ); } getProfile() async { isloading = true; update(); var res = await CRUD().get(link: AppLink.getprofile, payload: { 'id': box.read(BoxName.passengerID).toString(), }); if (res.toString() == 'failure') { // Get.snackbar('failure', 'message'); isloading = false; update(); } else { var jsonDecoded = jsonDecode(res); prfoileData = jsonDecoded['data']; box.write(BoxName.sosPhonePassenger, prfoileData['sosPhone'].toString()); box.write(BoxName.gender, prfoileData['gender'].toString()); box.write(BoxName.name, '${prfoileData['first_name']} ${prfoileData['last_name']}'); isloading = false; update(); } } @override void onInit() { getProfile(); super.onInit(); } } ================================================== FILE PATH: ./lib/controller/profile/captain_profile_controller.dart ================================================== import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:Intaleq/main.dart'; class CaptainProfileController extends GetxController { bool isLoading = false; TextEditingController vin = TextEditingController(); TextEditingController color = TextEditingController(); TextEditingController make = TextEditingController(); TextEditingController model = TextEditingController(); TextEditingController year = TextEditingController(); TextEditingController expirationDate = TextEditingController(); Future updateFields() async { var payload = { 'driverID': box.read(BoxName.driverID), }; if (vin.text.isNotEmpty) { payload['vin'] = vin.text; } if (color.text.isNotEmpty) { payload['color'] = color.text; } if (model.text.isNotEmpty) { payload['model'] = model.text; } if (make.text.isNotEmpty) { payload['make'] = make.text; } if (year.text.isNotEmpty) { payload['year'] = year.text; } if (expirationDate.text.isNotEmpty) { payload['expiration_date'] = expirationDate.text; } var res = await CRUD().post(link: AppLink.updateRegisrationCar, payload: payload); if (jsonDecode(res)['status'] == 'success') { box.write(BoxName.vin, vin.text); box.write(BoxName.color, color.text); box.write(BoxName.model, model.text); box.write(BoxName.make, make.text); box.write(BoxName.year, year.text); box.write(BoxName.expirationDate, expirationDate.text); update(); Get.back(); } } Map captainProfileData = {}; Future getProfileData() async { var res = await CRUD().get( link: AppLink.getCaptainProfile, payload: {'id': box.read(BoxName.driverID)}); if (res != 'failure') { var d = jsonDecode(res); captainProfileData = d['message']; update(); box.write(BoxName.sexDriver, d['message']['gender']); box.write(BoxName.dobDriver, d['message']['birthdate']); box.write(BoxName.vin, d['message']['vin']); box.write(BoxName.color, d['message']['color']); box.write(BoxName.model, d['message']['model']); box.write(BoxName.carPlate, d['message']['car_plate']); box.write(BoxName.make, d['message']['make']); box.write(BoxName.year, d['message']['year']); box.write(BoxName.expirationDate, d['message']['expiration_date']); // box.write(BoxName.acc, d['message']['accountBank']); update(); } } @override void onInit() { // if (box.read(BoxName.dobDriver) == null) { getProfileData(); // } super.onInit(); } } ================================================== FILE PATH: ./lib/controller/functions/add_error.dart ================================================== import '../../constant/box_name.dart'; import '../../constant/links.dart'; import '../../main.dart'; import 'crud.dart'; addError(String error, where) async { CRUD().post(link: AppLink.addError, payload: { 'error': error.toString(), // Example error description 'userId': box.read(BoxName.driverID) ?? box.read(BoxName.passengerID), // Example user ID 'userType': box.read(BoxName.driverID) != null ? 'Driver' : 'passenger', // Example user type 'phone': box.read(BoxName.phone) ?? box.read(BoxName.phoneDriver), // Example phone number 'device': where }); } ================================================== FILE PATH: ./lib/controller/functions/sss.dart ================================================== import 'package:secure_string_operations/secure_string_operations.dart'; import '../../constant/char_map.dart'; import '../../main.dart'; class Sss { static read(String boxname) async { return box.read(X.r(X.r(X.r(boxname, cn), cC), cs)); } static write(String boxname, value) async { return box.write(boxname, X.c(X.c(X.c(value, cn), cC), cs)); } static delete(String boxname) async { return box.remove(boxname); } } ================================================== FILE PATH: ./lib/controller/functions/twilio_service.dart ================================================== // import 'package:ride/constant/credential.dart'; // import 'package:twilio_flutter/twilio_flutter.dart'; // // class TwilioSMS { // TwilioFlutter twilioFlutter = TwilioFlutter( // accountSid: AppCredintials.accountSIDTwillo, // authToken: AppCredintials.authTokenTwillo, // twilioNumber: '+962 7 9858 3052'); // // Future sendSMS({ // required String recipientPhoneNumber, // required String message, // }) async { // try { // await twilioFlutter.sendSMS( // toNumber: recipientPhoneNumber, // messageBody: message, // ); // } catch (e) { // } // } // } ================================================== FILE PATH: ./lib/controller/functions/launch.dart ================================================== import 'package:url_launcher/url_launcher.dart'; import 'dart:io'; void showInBrowser(String url) async { if (await canLaunchUrl(Uri.parse(url))) { launchUrl(Uri.parse(url)); } else {} } Future makePhoneCall(String phoneNumber) async { // 1. تنظيف الرقم (إزالة المسافات والفواصل) String formattedNumber = phoneNumber.replaceAll(RegExp(r'\s+'), ''); // 2. منطق التنسيق (مع الحفاظ على الأرقام القصيرة مثل 112 كما هي) if (formattedNumber.length > 6) { if (formattedNumber.startsWith('09')) { // إذا كان يبدأ بـ 09 (رقم موبايل سوري محلي) -> +963 formattedNumber = '+963${formattedNumber.substring(1)}'; } else if (!formattedNumber.startsWith('+')) { // إذا لم يكن دولياً ولا محلياً معروفاً -> إضافة + فقط formattedNumber = '+$formattedNumber'; } } // ملاحظة: الأرقام القصيرة (مثل 112) ستتجاوز الشرط أعلاه وتبقى "112" وهو الصحيح // 3. التنفيذ (Launch) final Uri launchUri = Uri( scheme: 'tel', path: formattedNumber, ); try { // استخدام LaunchMode.externalApplication هو الحل الجذري لمشاكل الـ Intent // لأنه يجبر النظام على تسليم الرابط لتطبيق الهاتف بدلاً من محاولة فتحه داخل تطبيقك if (await canLaunchUrl(launchUri)) { await launchUrl(launchUri, mode: LaunchMode.externalApplication); } else { // في بعض الأجهزة canLaunchUrl تعود بـ false مع الـ tel ومع ذلك يعمل launchUrl // لذا نجرب الإطلاق المباشر كاحتياط await launchUrl(launchUri, mode: LaunchMode.externalApplication); } } catch (e) { // طباعة الخطأ في حال الفشل التام print("Error launching call: $e"); } } void launchCommunication( String method, String contactInfo, String message) async { String url; if (Platform.isIOS) { switch (method) { case 'phone': url = 'tel:$contactInfo'; break; case 'sms': url = 'sms:$contactInfo?body=${Uri.encodeComponent(message)}'; break; case 'whatsapp': url = 'https://api.whatsapp.com/send?phone=$contactInfo&text=${Uri.encodeComponent(message)}'; break; case 'email': url = 'mailto:$contactInfo?subject=Subject&body=${Uri.encodeComponent(message)}'; break; default: return; } } else if (Platform.isAndroid) { switch (method) { case 'phone': url = 'tel:$contactInfo'; break; case 'sms': url = 'sms:$contactInfo?body=${Uri.encodeComponent(message)}'; break; case 'whatsapp': // Check if WhatsApp is installed final bool whatsappInstalled = await canLaunchUrl(Uri.parse('whatsapp://')); if (whatsappInstalled) { url = 'whatsapp://send?phone=$contactInfo&text=${Uri.encodeComponent(message)}'; } else { // Provide an alternative action, such as opening the WhatsApp Web API url = 'https://api.whatsapp.com/send?phone=$contactInfo&text=${Uri.encodeComponent(message)}'; } break; case 'email': url = 'mailto:$contactInfo?subject=Subject&body=${Uri.encodeComponent(message)}'; break; default: return; } } else { return; } if (await canLaunchUrl(Uri.parse(url))) { await launchUrl(Uri.parse(url)); } else {} } ================================================== FILE PATH: ./lib/controller/functions/device_info.dart ================================================== import 'dart:io'; import 'package:device_info_plus/device_info_plus.dart'; import '../../print.dart'; class DeviceInfoPlus { static List> deviceDataList = []; static Future>> getDeviceInfo() async { final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin(); try { if (Platform.isAndroid) { AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo; Map deviceData = { 'platform': 'Android', 'brand': androidInfo.brand, 'model': androidInfo.model, 'androidId': androidInfo.device, 'versionRelease': androidInfo.version.release, 'sdkVersion': androidInfo.version.sdkInt, 'manufacturer': androidInfo.manufacturer, 'isPhysicalDevice': androidInfo.isPhysicalDevice, 'serialNumber': androidInfo.fingerprint, 'fingerprint': androidInfo.fingerprint, 'type': androidInfo.type, 'data': androidInfo.data, 'version': androidInfo.version, 'tags': androidInfo.tags, 'display': androidInfo.display, }; // Log.print('deviceData: ${deviceData}'); deviceDataList.add(deviceData); } else if (Platform.isIOS) { IosDeviceInfo iosInfo = await deviceInfoPlugin.iosInfo; Map deviceData = { 'brand': 'Apple', 'model': iosInfo.model, 'systemName': iosInfo.systemName, 'systemVersion': iosInfo.systemVersion, 'utsname': iosInfo.utsname, 'isPhysicalDevice': iosInfo.isPhysicalDevice, 'identifierForVendor': iosInfo.identifierForVendor, 'name': iosInfo.name, 'localizedModel': iosInfo.localizedModel, }; deviceDataList.add(deviceData); } else if (Platform.isMacOS) { MacOsDeviceInfo macInfo = await deviceInfoPlugin.macOsInfo; Map deviceData = { 'platform': 'macOS', 'model': macInfo.model, 'version': macInfo.systemGUID, }; deviceDataList.add(deviceData); } else if (Platform.isWindows) { WindowsDeviceInfo windowsInfo = await deviceInfoPlugin.windowsInfo; Map deviceData = { 'platform': 'Windows', 'manufacturer': windowsInfo.computerName, 'version': windowsInfo.majorVersion, 'deviceId': windowsInfo.deviceId, 'userName': windowsInfo.userName, 'productName': windowsInfo.productName, 'installDate': windowsInfo.installDate, 'productId': windowsInfo.productId, 'numberOfCores': windowsInfo.numberOfCores, 'systemMemoryInMegabytes': windowsInfo.systemMemoryInMegabytes, }; deviceDataList.add(deviceData); } else if (Platform.isLinux) { LinuxDeviceInfo linuxInfo = await deviceInfoPlugin.linuxInfo; Map deviceData = { 'platform': 'Linux', 'manufacturer': linuxInfo.name, 'version': linuxInfo.version, }; deviceDataList.add(deviceData); } } catch (e) {} return deviceDataList; } // Method to print all device data static void printDeviceInfo() { for (Map deviceData in deviceDataList) { 'Version: ${deviceData['version'] ?? deviceData['versionRelease'] ?? 'N/A'}'; } } } ================================================== FILE PATH: ./lib/controller/functions/audio_record1.dart ================================================== import 'dart:io'; // import 'package:flutter_sound/flutter_sound.dart'; import 'package:path_provider/path_provider.dart'; import 'package:get/get.dart'; import 'package:just_audio/just_audio.dart'; import 'package:record/record.dart'; class AudioRecorderController extends GetxController { AudioPlayer audioPlayer = AudioPlayer(); AudioRecorder recorder = AudioRecorder(); bool isRecording = false; bool isPlaying = false; bool isPaused = false; String filePath = ''; String? selectedFilePath; double currentPosition = 0; double totalDuration = 0; Future playSoundFromAssets(String sound) async { try { await audioPlayer.setAsset(sound); audioPlayer.play(); } catch (e) { print("Error playing sound: $e"); } } // Start recording Future startRecording() async { final bool isPermissionGranted = await recorder.hasPermission(); if (!isPermissionGranted) { // RecordingPermissionException('l'); return; } final directory = await getApplicationDocumentsDirectory(); // Generate a unique file name using the current timestamp String fileName = // '${DateTime.now().year}-${DateTime.now().month}-${DateTime.now().day}_${Get.find().rideId}.m4a'; '${DateTime.now().year}-${DateTime.now().month}-${DateTime.now().day}.m4a'; filePath = '${directory.path}/$fileName'; // Define the configuration for the recording const config = RecordConfig( // Specify the format, encoder, sample rate, etc., as needed encoder: AudioEncoder.aacLc, // For example, using AAC codec sampleRate: 44100, // Sample rate bitRate: 128000, // Bit rate ); // Start recording to file with the specified configuration await recorder.start(config, path: filePath); isRecording = true; update(); } // Pause recording Future pauseRecording() async { if (isRecording && !isPaused) { await recorder.pause(); isPaused = true; update(); } } // Resume recording Future resumeRecording() async { if (isRecording && isPaused) { await recorder.resume(); isPaused = false; update(); } } // Stop recording Future stopRecording() async { recorder.stop(); isRecording = false; isPaused = false; update(); } // Play the selected recorded file Future playRecordedFile(String filePath) async { await audioPlayer.setFilePath(filePath); totalDuration = audioPlayer.duration?.inSeconds.toDouble() ?? 0; audioPlayer.play(); isPlaying = true; isPaused = false; audioPlayer.positionStream.listen((position) { currentPosition = position.inSeconds.toDouble(); update(); }); selectedFilePath = filePath; update(); } // Pause playback Future pausePlayback() async { if (isPlaying && !isPaused) { await audioPlayer.pause(); isPaused = true; update(); } } // Resume playback Future resumePlayback() async { if (isPlaying && isPaused) { await audioPlayer.play(); isPaused = false; update(); } } // Stop playback Future stopPlayback() async { await audioPlayer.stop(); isPlaying = false; isPaused = false; currentPosition = 0; update(); } // Get a list of recorded files Future> getRecordedFiles() async { final directory = await getApplicationDocumentsDirectory(); final files = await directory.list().toList(); return files .map((file) => file.path) .where((path) => path.endsWith('.m4a')) .toList(); } // Delete a specific recorded file Future deleteRecordedFile(String filePath) async { final file = File(filePath); if (await file.exists()) { await file.delete(); update(); } } // Delete all recorded files Future deleteAllRecordedFiles() async { final directory = await getApplicationDocumentsDirectory(); final files = await directory.list().toList(); for (final file in files) { if (file.path.endsWith('.m4a')) { await deleteRecordedFile(file.path); } } } @override void onClose() { audioPlayer.dispose(); recorder.dispose(); super.onClose(); } } ================================================== FILE PATH: ./lib/controller/functions/secure_storage.dart ================================================== import 'dart:convert'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/info.dart'; import 'package:Intaleq/controller/auth/login_controller.dart'; import 'package:jwt_decoder/jwt_decoder.dart'; import 'package:secure_string_operations/secure_string_operations.dart'; import '../../constant/char_map.dart'; import '../../constant/links.dart'; import '../../main.dart'; import '../../print.dart'; import 'crud.dart'; import 'encrypt_decrypt.dart'; class SecureStorage { void saveData(String key, value) async { await storage.write(key: key, value: value); } Future readData(String boxName) async { final String? value = await storage.read(key: boxName); return value.toString(); } } const List keysToFetch = [ 'serverPHP', // 'seferAlexandriaServer', // 'seferPaymentServer', // 'seferCairoServer', // 'seferGizaServer', ]; class AppInitializer { List> links = []; Future initializeApp() async { if (box.read(BoxName.jwt) == null) { await LoginController().getJWT(); } else { bool isTokenExpired = JwtDecoder.isExpired( r(box.read(BoxName.jwt)).toString().split(AppInformation.addd)[0]); if (isTokenExpired) { await LoginController().getJWT(); } } // await getKey(); } getAIKey(String key1) async { if (box.read(BoxName.firstTimeLoadKey) == null) { var res = await CRUD().get(link: AppLink.getapiKey, payload: {"keyName": key1}); if (res != 'failure') { var d = jsonDecode(res)['message']; storage.write(key: key1, value: d[key1].toString()); } else {} } } Future getKey() async { try { var res = await CRUD().get(link: AppLink.getLocationAreaLinks, payload: {}); if (res != 'failure') { links = List>.from(jsonDecode(res)['message']); await box.remove(BoxName.locationName); await box.remove(BoxName.basicLink); await box.remove(links[4]['name']); await box.remove(links[1]['name']); await box.remove(links[2]['name']); await box.write(BoxName.locationName, links); await box.write(BoxName.basicLink, (links[0]['server_link'])); await box.write(links[2]['name'], (links[2]['server_link'])); await box.write(links[1]['name'], (links[3]['server_link'])); await box.write(links[3]['name'], (links[1]['server_link'])); await box.write(BoxName.paymentLink, (links[4]['server_link'])); } } catch (e) {} } } ================================================== FILE PATH: ./lib/controller/functions/location_permission.dart ================================================== import 'package:location/location.dart'; import 'package:get/get.dart'; class LocationPermissions { late Location location; Future locationPermissions() async { location = Location(); var permissionStatus = await location.requestPermission(); if (permissionStatus == PermissionStatus.denied) { // The user denied the location permission. Get.defaultDialog(title: 'GPS Required Allow !.'.tr, middleText: ''); return null; } } } ================================================== FILE PATH: ./lib/controller/functions/sms_controller.dart ================================================== import 'dart:convert'; import 'package:Intaleq/constant/api_key.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/info.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/auth/login_controller.dart'; import 'package:Intaleq/env/env.dart'; import 'package:Intaleq/main.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:get/get.dart'; import 'package:http/http.dart' as http; import '../../print.dart'; import '../auth/register_controller.dart'; import 'crud.dart'; class SmsEgyptController extends GetxController { var headers = {'Content-Type': 'application/json'}; Future getSender() async { var res = await CRUD().get(link: AppLink.getSender, payload: {}); if (res != 'failure') { var d = jsonDecode(res)['message'][0]['senderId'].toString(); return d; } else { return "Sefer Egy"; } } Future sendSmsEgypt(String phone, otp) async { // String sender = await getSender(); // var body = jsonEncode({ // "username": 'Sefer', // "password": AK.smsPasswordEgypt, // "message": "${AppInformation.appName} app code is $otp\ncopy it to app", // "language": box.read(BoxName.lang) == 'en' ? "e" : 'r', // "sender": sender, //"Sefer Egy", // "receiver": phone // }); var res = await CRUD().post(link: AppLink.sendSmsFromPHP, payload: { "language": box.read(BoxName.lang) == 'en' ? "e" : 'r', "receiver": phone, }); if (res != 'failure') { // var res = await http.post( // Uri.parse(AppLink.sendSms), // body: body, // headers: headers, // ); // else if (jsonDecode(res)['message'].toString() == // "Invalid Sender with Connection") { // // } // else { Get.defaultDialog( title: 'You will receive a code in SMS message'.tr, middleText: '', confirm: MyElevatedButton( title: 'OK'.tr, onPressed: () { Get.back(); })); } else { await CRUD().post(link: AppLink.updatePhoneInvalidSMSPassenger, payload: { "phone_number": '+2${Get.find().phoneController.text}' }); box.write(BoxName.phoneDriver, '+2${Get.find().phoneController.text}'); box.write(BoxName.isVerified, '1'); await Get.put(LoginController()).loginUsingCredentials( box.read(BoxName.driverID).toString(), box.read(BoxName.emailDriver).toString(), ); } } Future checkCredit(String phone, otp) async { var res = await http.post( Uri.parse(AppLink.checkCredit), body: { "username": AppInformation.appName, "password": AK.smsPasswordEgypt, }, headers: headers, ); } Future sendSmsWithValidaty(String phone, otp) async { var res = await http.post( Uri.parse(AppLink.checkCredit), body: { "username": AppInformation.appName, "password": AK.smsPasswordEgypt, "message": "This is an example SMS message.", "language": box.read(BoxName.lang) == 'en' ? "e" : 'r', "sender": "Kazumi", // todo add sefer sender name "receiver": "2$phone", "validity": "10", "StartTime": DateTime.now().toString() // "1/1/2024 10:00:00" }, headers: headers, ); } Future sendSmsStatus(String smsid) async { var res = await http.post( Uri.parse(AppLink.checkCredit), body: { "username": AppInformation.appName, "password": AK.smsPasswordEgypt, "smsid": smsid //"00b77dfc-5b8f-474d-9def-9f0158b70f98" }, headers: headers, ); } Future sendWhatsAppAuth(String to, String token) async { var headers = { 'Authorization': 'Bearer ${Env.whatsapp}', 'Content-Type': 'application/json' }; var request = http.Request( 'POST', Uri.parse( 'https://graph.facebook.com/v20.0/${Env.whatappID}/messages')); request.body = json.encode({ "messaging_product": "whatsapp", "to": to, //"962798583052", "type": "template", "template": { "name": "sefer1", "language": {"code": "en"}, "components": [ { "type": "body", "parameters": [ { "type": "text", "text": token, } ] } ] } }); request.headers.addAll(headers); http.StreamedResponse response = await request.send(); if (response.statusCode == 200) { print(await response.stream.bytesToString()); Get.defaultDialog( title: 'You will receive a code in WhatsApp Messenger'.tr, middleText: '', confirm: MyElevatedButton( title: 'OK'.tr, onPressed: () { Get.back(); })); } else { print(response.reasonPhrase); } } } ================================================== FILE PATH: ./lib/controller/functions/location_controller.dart ================================================== // import 'dart:async'; // import 'package:get/get.dart'; // import 'package:google_maps_flutter/google_maps_flutter.dart'; // import 'package:location/location.dart'; // import 'package:Intaleq/constant/box_name.dart'; // import 'package:Intaleq/constant/links.dart'; // import 'package:Intaleq/controller/functions/crud.dart'; // import 'package:Intaleq/controller/home/payment/captain_wallet_controller.dart'; // import 'package:Intaleq/main.dart'; // // LocationController.dart // class LocationController extends GetxController { // LocationData? _currentLocation; // late Location location; // bool isLoading = false; // late double heading = 0; // late double accuracy = 0; // late double previousTime = 0; // late double latitude; // late double totalDistance = 0; // late double longitude; // late DateTime time; // late double speed = 0; // late double speedAccuracy = 0; // late double headingAccuracy = 0; // bool isActive = false; // late LatLng myLocation; // String totalPoints = '0'; // LocationData? get currentLocation => _currentLocation; // Timer? _locationTimer; // @override // void onInit() async { // super.onInit(); // location = Location(); // getLocation(); // // startLocationUpdates(); // totalPoints = Get.put(CaptainWalletController()).totalPoints; // } // Future startLocationUpdates() async { // if (box.read(BoxName.driverID) != null) { // _locationTimer = // Timer.periodic(const Duration(seconds: 5), (timer) async { // try { // totalPoints = Get.find().totalPoints; // // if (isActive) { // if (double.parse(totalPoints) > -300) { // await getLocation(); // // if (box.read(BoxName.driverID) != null) { // await CRUD() // .post(link: AppLink.addCarsLocationByPassenger, payload: { // 'driver_id': box.read(BoxName.driverID).toString(), // 'latitude': myLocation.latitude.toString(), // 'longitude': myLocation.longitude.toString(), // 'heading': heading.toString(), // 'speed': (speed * 3.6).toStringAsFixed(1), // 'distance': totalDistance == 0 // ? '0' // : totalDistance < 1 // ? totalDistance.toStringAsFixed(3) // : totalDistance.toStringAsFixed(1), // 'status': box.read(BoxName.statusDriverLocation).toString() // }); // } // // } // } catch (e) { // // Handle the error gracefully // } // }); // } // } // void stopLocationUpdates() { // _locationTimer?.cancel(); // } // Future getLocation() async { // // isLoading = true; // // update(); // bool serviceEnabled; // PermissionStatus permissionGranted; // // Check if location services are enabled // serviceEnabled = await location.serviceEnabled(); // if (!serviceEnabled) { // serviceEnabled = await location.requestService(); // if (!serviceEnabled) { // // Location services are still not enabled, handle the error // return; // } // } // // Check if the app has permission to access location // permissionGranted = await location.hasPermission(); // if (permissionGranted == PermissionStatus.denied) { // permissionGranted = await location.requestPermission(); // if (permissionGranted != PermissionStatus.granted) { // // Location permission is still not granted, handle the error // return; // } // } // // Configure location accuracy // // LocationAccuracy desiredAccuracy = LocationAccuracy.high; // // Get the current location // LocationData _locationData = await location.getLocation(); // myLocation = // (_locationData.latitude != null && _locationData.longitude != null // ? LatLng(_locationData.latitude!, _locationData.longitude!) // : null)!; // speed = _locationData.speed!; // heading = _locationData.heading!; // // Calculate the distance between the current location and the previous location // // if (Get.find().rideId == 'rideId') { // // if (previousTime > 0) { // // double distance = calculateDistanceInKmPerHour( // // previousTime, _locationData.time, speed); // // totalDistance += distance; // // } // // previousTime = _locationData.time!; // // } // // Print location details // // isLoading = false; // update(); // } // double calculateDistanceInKmPerHour( // double? startTime, double? endTime, double speedInMetersPerSecond) { // // Calculate the time difference in hours // double timeDifferenceInHours = (endTime! - startTime!) / 1000 / 3600; // // Convert speed to kilometers per hour // double speedInKmPerHour = speedInMetersPerSecond * 3.6; // // Calculate the distance in kilometers // double distanceInKilometers = speedInKmPerHour * timeDifferenceInHours; // return distanceInKilometers; // } // } ================================================== FILE PATH: ./lib/controller/functions/securty_check.dart ================================================== import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; class SecurityChecks { static const platform = MethodChannel( 'com.Intaleq.intaleq/security'); // Choose a unique channel name static Future isDeviceCompromised() async { try { final bool result = await platform .invokeMethod('isNativeRooted'); // Invoke the native method return result; } on PlatformException catch (e) { print("Failed to check security status: ${e.message}"); return true; // Treat platform errors as a compromised device (for safety) } } static isDeviceRootedFromNative(BuildContext context) async { bool compromised = await isDeviceCompromised(); if (compromised) { showDialog( barrierDismissible: false, context: context, builder: (context) => AlertDialog( title: Text("Security Warning".tr), content: Text( "Your device appears to be compromised. The app will now close." .tr), actions: [ TextButton( onPressed: () { SystemNavigator.pop(); // Close the app }, child: Text("OK"), ), ], ), ); } else { // Continue with normal app flow print("Device is secure."); } } } ================================================== FILE PATH: ./lib/controller/functions/scan_id_card.dart ================================================== // import 'package:credit_card_scanner/credit_card_scanner.dart'; // import 'package:get/get.dart'; // // class ScanIdCard extends GetxController { // CardDetails? _cardDetails; // CardScanOptions scanOptions = const CardScanOptions( // scanCardHolderName: true, // enableDebugLogs: true, // validCardsToScanBeforeFinishingScan: 5, // possibleCardHolderNamePositions: [ // CardHolderNameScanPosition.aboveCardNumber, // ], // ); // // Future scanCard() async { // final CardDetails? cardDetails = // await CardScanner.scanCard(scanOptions: scanOptions); // if (cardDetails == null) { // return; // } // // _cardDetails = cardDetails; // update(); // } // } ================================================== FILE PATH: ./lib/controller/functions/call_controller.dart ================================================== // import 'package:SEFER/constant/api_key.dart'; // import 'package:SEFER/controller/functions/crud.dart'; // import 'package:SEFER/controller/home/map_passenger_controller.dart'; // import 'package:agora_rtc_engine/agora_rtc_engine.dart'; // import 'package:get/get.dart'; // import 'package:permission_handler/permission_handler.dart'; // import '../../constant/box_name.dart'; // import '../firebase/firbase_messge.dart'; // import '../../main.dart'; // class CallController extends GetxController { // String channelName = ''; // Get.find().rideId; // String token = ''; // // int uid = int.parse(box.read(BoxName.phoneDriver)); // uid of the local user // int uid = 0; // int? remoteUid; // uid of the remote user // bool _isJoined = false; // Indicates if the local user has joined the channel // String status = ''; // late RtcEngine agoraEngine; // Agora engine instance // @override // void onInit() { // super.onInit(); // // if (box.read(BoxName.passengerID) != null) { // channelName = Get.find().rideId; // 'sefer300'; // // remoteUid = int.parse(Get.find().driverPhone); // uid = int.parse(box.read(BoxName.phone)); // // } else { // // channelName = Get.find().rideId; // 'sefer300'; // // // remoteUid = int.parse(Get.find().passengerPhone); // // uid = int.parse(box.read(BoxName.phoneDriver)); // // } // initAgoraFull(); // } // initAgoraFull() async { // await fetchToken(); // // Set up an instance of Agora engine // setupVoiceSDKEngine(); // // join(); // FirebaseMessagesController().sendNotificationToPassengerToken( // 'Call Income from Passenger', // '${'You have call from Passenger'.tr} ${box.read(BoxName.name)}', // Get.find().driverToken, // [ // token, // channelName, // uid.toString(), // remoteUid.toString(), // ], // 'iphone_ringtone.wav', // ); // join(); // } // @override // void onClose() { // agoraEngine.leaveChannel(); // super.onClose(); // } // Future setupVoiceSDKEngine() async { // // retrieve or request microphone permission // await [Permission.microphone].request(); // //create an instance of the Agora engine // agoraEngine = createAgoraRtcEngine(); // await agoraEngine.initialize(RtcEngineContext(appId: AK.agoraAppId)); // // Register the event handler // agoraEngine.registerEventHandler( // RtcEngineEventHandler( // onJoinChannelSuccess: (RtcConnection connection, int elapsed) { // // Get.snackbar( // // "Local user uid:${connection.localUid} joined the channel", ''); // status = 'joined'.tr; // _isJoined = true; // update(); // }, // onUserJoined: (RtcConnection connection, int remoteUid, int elapsed) { // // Get.snackbar("Remote user uid:$remoteUid joined the channel", ''); // status = Get.find().driverName.toString(); // ' joined'.tr; // remoteUid = remoteUid; // update(); // }, // onUserOffline: (RtcConnection connection, int? remoteUid, // UserOfflineReasonType reason) { // // Get.snackbar("Remote user uid:$remoteUid left the channel", ''); // status = 'Call left'.tr; // remoteUid = null; // update(); // }, // ), // ); // } // void join() async { // // Set channel options including the client role and channel profile // ChannelMediaOptions options = const ChannelMediaOptions( // clientRoleType: ClientRoleType.clientRoleBroadcaster, // channelProfile: ChannelProfileType.channelProfileCommunication, // ); // await agoraEngine.joinChannel( // token: token, // channelId: channelName, // options: options, // uid: uid, // ); // } // void leave() { // _isJoined = false; // remoteUid = null; // update(); // agoraEngine.leaveChannel(); // } // // Clean up the resources when you leave // @override // void dispose() async { // await agoraEngine.leaveChannel(); // super.dispose(); // } // fetchToken() async { // var res = await CRUD() // .getAgoraToken(channelName: channelName, uid: uid.toString()); // token = res; // update(); // } // } ================================================== FILE PATH: ./lib/controller/functions/encrypt_decrypt.dart ================================================== import 'package:Intaleq/env/env.dart'; import 'package:encrypt/encrypt.dart' as encrypt; import 'package:flutter/foundation.dart'; import 'package:secure_string_operations/secure_string_operations.dart'; import '../../constant/char_map.dart'; class EncryptionHelper { static EncryptionHelper? _instance; late final encrypt.Key key; late final encrypt.IV iv; EncryptionHelper._(this.key, this.iv); static EncryptionHelper get instance { if (_instance == null) { throw Exception( "EncryptionHelper is not initialized. Call `await EncryptionHelper.initialize()` in main."); } return _instance!; } /// Initializes and stores the instance globally static Future initialize() async { if (_instance != null) { debugPrint("EncryptionHelper is already initialized."); return; // Prevent re-initialization } debugPrint("Initializing EncryptionHelper..."); var keyOfApp = r(Env.keyOfApp).toString().split(Env.addd)[0]; var initializationVector = r(Env.initializationVector).toString().split(Env.addd)[0]; // Set the global instance _instance = EncryptionHelper._( encrypt.Key.fromUtf8(keyOfApp!), encrypt.IV.fromUtf8(initializationVector!), ); debugPrint("EncryptionHelper initialized successfully."); } /// Encrypts a string String encryptData(String plainText) { try { final encrypter = encrypt.Encrypter(encrypt.AES(key, mode: encrypt.AESMode.cbc)); final encrypted = encrypter.encrypt(plainText, iv: iv); return encrypted.base64; } catch (e) { debugPrint('Encryption Error: $e'); return ''; } } /// Decrypts a string String decryptData(String encryptedText) { try { final encrypter = encrypt.Encrypter(encrypt.AES(key, mode: encrypt.AESMode.cbc)); final encrypted = encrypt.Encrypted.fromBase64(encryptedText); return encrypter.decrypt(encrypted, iv: iv); } catch (e) { debugPrint('Decryption Error: $e'); return ''; } } } r(String string) { return X.r(X.r(X.r(string, cn), cC), cs).toString(); } c(String string) { return X.c(X.c(X.c(string, cn), cC), cs).toString(); } ================================================== FILE PATH: ./lib/controller/functions/tts.dart ================================================== import 'package:Intaleq/constant/box_name.dart'; import 'package:flutter/material.dart'; import 'package:flutter_tts/flutter_tts.dart'; import 'package:get/get.dart'; import '../../main.dart'; class TextToSpeechController extends GetxController { final flutterTts = FlutterTts(); @override void onInit() { super.onInit(); initTts(); } @override void onClose() { flutterTts.stop(); // Stop any ongoing TTS super.onClose(); } // Initialize TTS engine with language check Future initTts() async { try { String langCode = box.read(BoxName.lang) ?? 'en-US'; bool isAvailable = await flutterTts.isLanguageAvailable(langCode); // If language is unavailable, default to 'en-US' if (!isAvailable) { langCode = 'en-US'; } await flutterTts.setLanguage(langCode); await flutterTts.setSpeechRate(0.5); // Adjust speech rate await flutterTts.setVolume(1.0); // Set volume } catch (error) { Get.snackbar('Error', 'Failed to initialize TTS: $error'); } } // Function to speak the given text Future speakText(String text) async { try { await flutterTts.awaitSpeakCompletion(true); await flutterTts.speak(text); } catch (error) { Get.snackbar('Error', 'Failed to speak text: $error'); } } } ================================================== FILE PATH: ./lib/controller/functions/upload_image.dart ================================================== import 'dart:convert'; import 'dart:io'; import 'package:Intaleq/constant/api_key.dart'; import 'package:get/get.dart'; import 'package:http/http.dart' as http; import 'package:image_cropper/image_cropper.dart'; import 'package:image_picker/image_picker.dart'; import 'package:path/path.dart'; import 'package:secure_string_operations/secure_string_operations.dart'; import '../../constant/box_name.dart'; import '../../constant/char_map.dart'; import '../../constant/colors.dart'; import '../../constant/info.dart'; import '../../main.dart'; class ImageController extends GetxController { File? myImage; bool isloading = false; CroppedFile? croppedFile; final picker = ImagePicker(); var image; choosImage(String link, String imageType) async { final pickedImage = await picker.pickImage(source: ImageSource.gallery); image = File(pickedImage!.path); croppedFile = await ImageCropper().cropImage( sourcePath: image!.path, uiSettings: [ AndroidUiSettings( toolbarTitle: 'Cropper'.tr, toolbarColor: AppColor.blueColor, toolbarWidgetColor: AppColor.yellowColor, initAspectRatio: CropAspectRatioPreset.original, lockAspectRatio: false), IOSUiSettings( title: 'Cropper'.tr, ), ], ); myImage = File(pickedImage.path); isloading = true; update(); // Save the cropped image File savedCroppedImage = File(croppedFile!.path); try { await uploadImage( savedCroppedImage, { 'driverID': box.read(BoxName.driverID) ?? box.read(BoxName.passengerID), 'imageType': imageType }, link, ); } catch (e) { Get.snackbar('Image Upload Failed'.tr, e.toString(), backgroundColor: AppColor.redColor); } finally { isloading = false; update(); } } uploadImage(File file, Map data, String link) async { var request = http.MultipartRequest( 'POST', Uri.parse(link), //'https://ride.mobile-app.store/uploadImage1.php' ); var length = await file.length(); var stream = http.ByteStream(file.openRead()); var multipartFile = http.MultipartFile( 'image', stream, length, filename: basename(file.path), ); request.headers.addAll({ 'Authorization': 'Bearer ${X.r(X.r(X.r(box.read(BoxName.jwt), cn), cC), cs).toString().split(AppInformation.addd)[0]}' }); // Set the file name to the driverID request.files.add( http.MultipartFile( 'image', stream, length, filename: '${box.read(BoxName.driverID)}.jpg', ), ); data.forEach((key, value) { request.fields[key] = value; }); var myrequest = await request.send(); var res = await http.Response.fromStream(myrequest); if (res.statusCode == 200) { return jsonDecode(res.body); } else { throw Exception( 'Failed to upload image: ${res.statusCode} - ${res.body}'); } } } ================================================== FILE PATH: ./lib/controller/functions/custom_pant.dart ================================================== import 'package:flutter/material.dart'; class LineChartPainter extends CustomPainter { final List data; LineChartPainter(this.data); @override void paint(Canvas canvas, Size size) { // Calculate the scale factor. final scaleFactor = size.height / 240; // Draw the line chart. for (var i = 0; i < data.length - 1; i++) { final x1 = i * size.width / data.length; final y1 = data[i] * scaleFactor; final x2 = (i + 1) * size.width / data.length; final y2 = data[i + 1] * scaleFactor; canvas.drawLine(Offset(x1, y1), Offset(x2, y2), Paint()); } } @override bool shouldRepaint(LineChartPainter oldDelegate) => false; } ================================================== FILE PATH: ./lib/controller/functions/remove_account.dart ================================================== // import 'package:ride/controller/functions/crud.dart'; // class RemoveAccount { // void removeAccount()async{ // var res=await CRUD().post(link: link) // } // } ================================================== FILE PATH: ./lib/controller/functions/crud.dart ================================================== import 'dart:async'; import 'dart:convert'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/auth/login_controller.dart'; import 'package:Intaleq/main.dart'; import 'package:get/get.dart'; import 'package:http/http.dart' as http; import 'package:Intaleq/env/env.dart'; import '../../constant/api_key.dart'; import '../../print.dart'; import '../../views/widgets/elevated_btn.dart'; import '../../views/widgets/error_snakbar.dart'; import 'encrypt_decrypt.dart'; import 'upload_image.dart'; import 'dart:io'; import 'network/net_guard.dart'; class CRUD { final NetGuard _netGuard = NetGuard(); final _client = http.Client(); /// Stores the signature of the last logged error to prevent duplicates. static String _lastErrorSignature = ''; /// Stores the timestamp of the last logged error. static DateTime _lastErrorTimestamp = DateTime(2000); /// The minimum time that must pass before logging the same error again. static const Duration _errorLogDebounceDuration = Duration(minutes: 1); /// Asynchronously logs an error to the server with debouncing to prevent log flooding. static Future addError( String error, String details, String where) async { try { final currentErrorSignature = '$where-$error'; final now = DateTime.now(); if (currentErrorSignature == _lastErrorSignature && now.difference(_lastErrorTimestamp) < _errorLogDebounceDuration) { return; } _lastErrorSignature = currentErrorSignature; _lastErrorTimestamp = now; final userId = box.read(BoxName.driverID) ?? box.read(BoxName.passengerID); final userType = box.read(BoxName.driverID) != null ? 'Driver' : 'Passenger'; final phone = box.read(BoxName.phone) ?? box.read(BoxName.phoneDriver); // Fire-and-forget call to prevent infinite loops if the logger itself fails. CRUD().post( link: AppLink.addError, payload: { 'error': error.toString(), 'userId': userId.toString(), 'userType': userType, 'phone': phone.toString(), 'device': where, 'details': details, }, ); } catch (e) {} } /// Centralized private method to handle all API requests. /// Includes retry logic, network checking, and standardized error handling. Future _makeRequest({ required String link, Map? payload, required Map headers, }) async { // timeouts أقصر const connectTimeout = Duration(seconds: 6); const receiveTimeout = Duration(seconds: 10); Future doPost() { final url = Uri.parse(link); // استخدم _client بدل http.post return _client .post(url, body: payload, headers: headers) .timeout(connectTimeout + receiveTimeout); } http.Response response; try { // retry ذكي: محاولة واحدة إضافية فقط لأخطاء شبكة/5xx try { response = await doPost(); } on SocketException catch (_) { // محاولة ثانية واحدة فقط response = await doPost(); } on TimeoutException catch (_) { response = await doPost(); } final sc = response.statusCode; final body = response.body; Log.print('request: ${response.request}'); Log.print('body: ${body}'); // 2xx if (sc >= 200 && sc < 300) { try { final jsonData = jsonDecode(body); return jsonData; // لا تعيد 'success' فقط؛ أعِد الجسم كله } catch (e, st) { // لا تسجّل كخطأ شبكي لكل حالة؛ فقط معلومات addError('JSON Decode Error', 'Body: $body\n$st', 'CRUD._makeRequest $link'); return 'failure'; } } // 401 → دع الطبقة العليا تتعامل مع التجديد if (sc == 401) { await Get.put(LoginController()).getJWT(); // لا تستدع getJWT هنا كي لا نضاعف الرحلات return 'token_expired'; } // 5xx: لا تعِد المحاولة هنا (حاولنا مرة ثانية فوق) if (sc >= 500) { addError( 'Server 5xx', 'SC: $sc\nBody: $body', 'CRUD._makeRequest $link'); return 'failure'; } // 4xx أخرى: أعد الخطأ بدون تسجيل مكرر return 'failure'; } on SocketException { _netGuard.notifyOnce((title, msg) => mySnackeBarError(msg)); return 'no_internet'; } on TimeoutException { return 'failure'; } catch (e, st) { addError('HTTP Request Exception: $e', 'Stack: $st', 'CRUD._makeRequest $link'); return 'failure'; } } /// Performs a standard authenticated POST request. /// Automatically handles token renewal. Future post({ required String link, Map? payload, }) async { String token = r(box.read(BoxName.jwt)).toString().split(Env.addd)[0]; // if (JwtDecoder.isExpired(token)) { // await Get.put(LoginController()).getJWT(); // token = r(box.read(BoxName.jwt)).toString().split(Env.addd)[0]; // } final headers = { "Content-Type": "application/x-www-form-urlencoded", 'Authorization': 'Bearer $token' }; return await _makeRequest( link: link, payload: payload, headers: headers, ); } /// Performs a standard authenticated GET request (using POST method as per original code). /// Automatically handles token renewal. Future get({ required String link, Map? payload, }) async { var url = Uri.parse( link, ); var response = await http.post( url, body: payload, headers: { "Content-Type": "application/x-www-form-urlencoded", 'Authorization': 'Bearer ${r(box.read(BoxName.jwt)).toString().split(Env.addd)[0]}' }, ); Log.print('request: ${response.request}'); Log.print('body: ${response.body}'); Log.print('payload: ${payload}'); if (response.statusCode == 200) { var jsonData = jsonDecode(response.body); if (jsonData['status'] == 'success') { return response.body; } return jsonData['status']; } else if (response.statusCode == 401) { // Specifically handle 401 Unauthorized var jsonData = jsonDecode(response.body); if (jsonData['error'] == 'Token expired') { // Show snackbar prompting to re-login await Get.put(LoginController()).getJWT(); // mySnackbarSuccess('please order now'.tr); return 'token_expired'; // Return a specific value for token expiration } else { // Other 401 errors // addError('Unauthorized: ${jsonData['error']}', 'crud().post - 401', // url.toString()); return 'failure'; } } else { addError('Non-200 response code: ${response.statusCode}', 'crud().post - Other', url.toString()); return 'failure'; } } /// Performs an authenticated POST request to wallet endpoints. Future postWallet({ required String link, Map? payload, }) async { var jwt = await LoginController().getJwtWallet(); final hmac = box.read(BoxName.hmac); final headers = { "Content-Type": "application/x-www-form-urlencoded", 'Authorization': 'Bearer $jwt', 'X-HMAC-Auth': hmac.toString(), }; return await _makeRequest( link: link, payload: payload, headers: headers, ); } /// Performs an authenticated GET request to wallet endpoints (using POST). Future getWallet({ required String link, Map? payload, }) async { var s = await LoginController().getJwtWallet(); final hmac = box.read(BoxName.hmac); var url = Uri.parse( link, ); var response = await http.post( url, body: payload, headers: { "Content-Type": "application/x-www-form-urlencoded", 'Authorization': 'Bearer $s', 'X-HMAC-Auth': hmac.toString(), }, ); if (response.statusCode == 200) { var jsonData = jsonDecode(response.body); if (jsonData['status'] == 'success') { return response.body; } return jsonData['status']; } else if (response.statusCode == 401) { // Specifically handle 401 Unauthorized var jsonData = jsonDecode(response.body); if (jsonData['error'] == 'Token expired') { // Show snackbar prompting to re-login await Get.put(LoginController()).getJwtWallet(); return 'token_expired'; // Return a specific value for token expiration } else { // Other 401 errors addError('Unauthorized: ${jsonData['error']}', 'crud().post - 401', url.toString()); return 'failure'; } } else { addError('Non-200 response code: ${response.statusCode}', 'crud().post - Other', url.toString()); return 'failure'; } } // ======================================================================= // All other specialized methods remain below. // They are kept separate because they interact with external third-party APIs // and have unique authentication, body structures, or error handling logic // that doesn't fit the standardized `_makeRequest` helper. // ======================================================================= Future postWalletMtn( {required String link, Map? payload}) async { // This method has a very custom response-wrapping logic, so it's kept separate. final s = await LoginController().getJwtWallet(); final hmac = box.read(BoxName.hmac); final url = Uri.parse(link); try { final response = await http.post( url, body: payload, headers: { "Content-Type": "application/x-www-form-urlencoded", "Authorization": "Bearer $s", "X-HMAC-Auth": hmac.toString(), }, ); Map wrap(String status, {Object? message, int? code}) { return { 'status': status, 'message': message, 'code': code ?? response.statusCode, }; } if (response.statusCode == 200) { try { return jsonDecode(response.body); } catch (e) { return wrap('failure', message: 'JSON decode error', code: response.statusCode); } } else if (response.statusCode == 401) { try { final jsonData = jsonDecode(response.body); if (jsonData is Map && jsonData['error'] == 'Token expired') { await Get.put(LoginController()).getJWT(); return { 'status': 'failure', 'message': 'token_expired', 'code': 401 }; } return wrap('failure', message: jsonData); } catch (_) { return wrap('failure', message: response.body); } } else { try { final jsonData = jsonDecode(response.body); return wrap('failure', message: jsonData); } catch (_) { return wrap('failure', message: response.body); } } } catch (e) { return { 'status': 'failure', 'message': 'HTTP request error: $e', 'code': -1 }; } } // Future getTokenParent({ // required String link, // Map? payload, // }) async { // // Uses Basic Auth, so it's a separate implementation. // var url = Uri.parse( // link, // ); // var response = await http.post( // url, // body: payload, // headers: { // "Content-Type": "application/x-www-form-urlencoded", // 'Authorization': // 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}', // }, // ); // if (response.statusCode == 200) { // return jsonDecode(response.body); // } // // Consider adding error handling here. // return null; // } Future sendWhatsAppAuth(String to, String token) async { var res = await CRUD() .get(link: AppLink.getApiKey, payload: {'keyName': 'whatsapp_key'}); var accesstoken = jsonDecode(res)['message']['whatsapp_key']; var headers = { 'Authorization': 'Bearer $accesstoken', 'Content-Type': 'application/json' }; var url = 'https://graph.facebook.com/v20.0/${Env.whatappID}/messages'; var request = http.Request('POST', Uri.parse(url)); var body = json.encode({ "messaging_product": "whatsapp", "to": to, "type": "template", "template": { "name": "sefer1", "language": {"code": "en"}, "components": [ { "type": "body", "parameters": [ { "type": "text", "text": token, } ] } ] } }); request.body = body; request.headers.addAll(headers); try { http.StreamedResponse response = await request.send(); if (response.statusCode == 200) { String responseBody = await response.stream.bytesToString(); Get.defaultDialog( title: 'You will receive a code in WhatsApp Messenger'.tr, middleText: 'wait 1 minute to recive message'.tr, confirm: MyElevatedButton( title: 'OK'.tr, onPressed: () { Get.back(); }, ), ); } else { String errorBody = await response.stream.bytesToString(); } } catch (e) {} } Future getAgoraToken({ required String channelName, required String uid, }) async { var uid = box.read(BoxName.phone) ?? box.read(BoxName.phoneDriver); var res = await http.get(Uri.parse( // 'https://repulsive-pig-rugby-shirt.cyclic.app/token?channelName=$channelName'), 'https://orca-app-b2i85.ondigitalocean.app/token?channelName=$channelName'), headers: {'Authorization': 'Bearer ${AK.agoraAppCertificate}'}); if (res.statusCode == 200) { var response = jsonDecode(res.body); return response['token']; } else {} } Future getLlama({ required String link, required String payload, required String prompt, }) async { var url = Uri.parse( link, ); var headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer LL-X5lJ0Px9CzKK0HTuVZ3u2u4v3tGWkImLTG7okGRk4t25zrsLqJ0qNoUzZ2x4ciPy' // 'Authorization': 'Bearer ${Env.llamaKey}' }; var data = json.encode({ "model": "Llama-3-70b-Inst-FW", // "model": "llama-13b-chat", "messages": [ { "role": "user", "content": "Extract the desired information from the following passage as json decoded like $prompt just in this:\n\n$payload" } ], "temperature": 0.9 }); var response = await http.post( url, body: data, headers: headers, ); if (response.statusCode == 200) { return response.body; } return response.statusCode; } Future allMethodForAI(String prompt, linkPHP, imagePath) async { await ImageController().choosImage(linkPHP, imagePath); Future.delayed(const Duration(seconds: 2)); String extracted = await arabicTextExtractByVisionAndAI(imagePath: imagePath); // await AI().geminiAiExtraction(prompt, extracted); } Future arabicTextExtractByVisionAndAI({ required String imagePath, }) async { var headers = { 'Content-Type': 'application/json', 'Ocp-Apim-Subscription-Key': '21010e54b50f41a4904708c526e102df' }; var url = Uri.parse( 'https://ocrhamza.cognitiveservices.azure.com/vision/v2.1/ocr?language=ar', ); String imagePathFull = '${AppLink.server}card_image/$imagePath-${box.read(BoxName.driverID) ?? box.read(BoxName.passengerID)}.jpg'; var requestBody = {"url": imagePathFull}; var response = await http.post( url, body: jsonEncode(requestBody), // Encode the JSON object to a string headers: headers, ); if (response.statusCode == 200) { var responseBody = jsonDecode(response.body); return responseBody.toString(); } return response.statusCode; } Future getChatGPT({ required String link, required String payload, }) async { var url = Uri.parse( link, ); var headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer ${Env.chatGPTkeySeferNew}' }; var data = json.encode({ "model": "gpt-3.5-turbo", "messages": [ { "role": "user", "content": "Extract the desired information from the following passage as json decoded like vin,make,made,year,expiration_date,color,owner,registration_date just in this:\n\n$payload" } ], "temperature": 0.9 }); var response = await http.post( url, body: data, headers: headers, ); if (response.statusCode == 200) { return response.body; } return response.statusCode; } Future postStripe({ required String link, Map? payload, }) async { // String? secretKey = await storage.read(key: BoxName.secretKey); var url = Uri.parse( link, ); var response = await http.post( url, body: payload, headers: { "Content-Type": "application/x-www-form-urlencoded", 'Authorization': 'Bearer ${AK.secretKey}', }, ); if (response.statusCode == 200) { return response.body; } else {} } // Future post({ // required String link, // Map? payload, // }) async { // // String? basicAuthCredentials = // // await storage.read(key: BoxName.basicAuthCredentials); // var url = Uri.parse( // link, // ); // var response = await http.post( // url, // body: payload, // headers: { // "Content-Type": "application/x-www-form-urlencoded", // 'Authorization': // 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}', // }, // ); // var jsonData = jsonDecode(response.body); // if (response.statusCode == 200) { // if (jsonData['status'] == 'success') { // return response.body; // } else { // return (jsonData['status']); // } // } else { // return response.statusCode; // } // } Future postPayMob({ required String link, Map? payload, }) async { // String? basicAuthCredentials = // await storage.read(key: BoxName.basicAuthCredentials); var url = Uri.parse( link, ); var response = await http.post(url, body: payload, headers: {'Content-Type': 'application/json'}); var jsonData = jsonDecode(response.body); if (response.statusCode == 200) { if (jsonData['status'] == 'success') { return response.body; } else { return (jsonData['status']); } } else { return response.statusCode; } } sendEmail( String link, Map? payload, ) async { var headers = { "Content-Type": "application/x-www-form-urlencoded", 'Authorization': 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}', }; var request = http.Request('POST', Uri.parse(link)); request.bodyFields = payload!; request.headers.addAll(headers); http.StreamedResponse response = await request.send(); if (response.statusCode == 200) { } else {} } Future postFromDialogue({ required String link, Map? payload, }) async { // String? basicAuthCredentials = // await storage.read(key: BoxName.basicAuthCredentials); var url = Uri.parse( link, ); var response = await http.post( url, body: payload, headers: { "Content-Type": "application/x-www-form-urlencoded", 'Authorization': 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}', }, ); if (response.body.isNotEmpty) { var jsonData = jsonDecode(response.body); if (response.statusCode == 200) { if (jsonData['status'] == 'success') { Get.back(); // Get.snackbar( // jsonData['status'], // jsonData['message'], // ); return response.body; } } return (jsonData['status']); } } Future sendVerificationRequest(String phoneNumber) async { final accountSid = AK.accountSIDTwillo; final authToken = AK.authTokenTwillo; final verifySid = AK.twilloRecoveryCode; final Uri verificationUri = Uri.parse( 'https://verify.twilio.com/v2/Services/$verifySid/Verifications'); // Send the verification request final response = await http.post( verificationUri, headers: { 'Authorization': 'Basic ' + base64Encode(utf8.encode('$accountSid:$authToken')), 'Content-Type': 'application/x-www-form-urlencoded', }, body: { 'To': phoneNumber, 'Channel': 'sms', }, ); if (response.statusCode == 201) { } else {} // Prompt the user to enter the OTP final otpCode = "123456"; // Replace with user input // Check the verification code final checkUri = Uri.parse( 'https://verify.twilio.com/v2/Services/$verifySid/VerificationCheck'); final checkResponse = await http.post( checkUri, headers: { 'Authorization': 'Basic ' + base64Encode(utf8.encode('$accountSid:$authToken')), 'Content-Type': 'application/x-www-form-urlencoded', }, body: { 'To': phoneNumber, 'Code': otpCode, }, ); if (checkResponse.statusCode == 201) { } else {} } Future getGoogleApi({ required String link, Map? payload, }) async { var url = Uri.parse( link, ); var response = await http.post( url, body: payload, ); var jsonData = jsonDecode(response.body); if (jsonData['status'] == 'OK') { return jsonData; } return (jsonData['status']); } Future getHereMap({ required String link, }) async { var url = Uri.parse(link); try { var response = await http.get(url); if (response.statusCode == 200) { // Ensure the response body is decoded as UTF-8 var decodedBody = utf8.decode(response.bodyBytes); var data = jsonDecode(decodedBody); return data; } else { return null; } } catch (e) { return null; } } // Future update({ // required String endpoint, // required Map data, // required String id, // }) async { // // String? basicAuthCredentials = // // await storage.read(key: BoxName.basicAuthCredentials); // var url = Uri.parse('$endpoint/$id'); // var response = await http.put( // url, // body: json.encode(data), // headers: { // 'Authorization': // 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}', // }, // ); // return json.decode(response.body); // } Future delete({ required String endpoint, required String id, }) async { // String? basicAuthCredentials = // await storage.read(key: BoxName.basicAuthCredentials); var url = Uri.parse('$endpoint/$id'); var response = await http.delete( url, headers: { 'Authorization': 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}', }, ); return json.decode(response.body); } // ... [Other methods like sendWhatsAppAuth, getAgoraToken, getLlama, etc., would remain here as they are] ... // For brevity, I am omitting the rest of the third-party API methods as they would not change. } ================================================== FILE PATH: ./lib/controller/functions/digit_obsecur_formate.dart ================================================== // import 'package:flutter/services.dart'; // class DigitObscuringFormatter extends TextInputFormatter { // @override // TextEditingValue formatEditUpdate( // TextEditingValue oldValue, TextEditingValue newValue) { // final maskedText = maskDigits(newValue.text); // return newValue.copyWith( // text: maskedText, // selection: updateCursorPosition(maskedText, newValue.selection)); // } // String maskDigits(String text) { // final totalDigits = text.length; // final visibleDigits = 4; // final hiddenDigits = totalDigits - visibleDigits * 2; // final firstVisibleDigits = text.substring(0, visibleDigits); // final lastVisibleDigits = text.substring(totalDigits - visibleDigits); // final maskedDigits = List.filled(hiddenDigits, '*').join(); // return '$firstVisibleDigits$maskedDigits$lastVisibleDigits'; // } // TextSelection updateCursorPosition( // String maskedText, TextSelection currentSelection) { // final cursorPosition = currentSelection.baseOffset; // final cursorOffset = // currentSelection.extentOffset - currentSelection.baseOffset; // final totalDigits = maskedText.length; // const visibleDigits = 4; // final hiddenDigits = totalDigits - visibleDigits * 2; // final updatedPosition = cursorPosition <= visibleDigits // ? cursorPosition // : hiddenDigits + visibleDigits + (cursorPosition - visibleDigits); // return TextSelection.collapsed( // offset: updatedPosition, affinity: currentSelection.affinity); // } // } ================================================== FILE PATH: ./lib/controller/functions/toast.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; class Toast { static void show(BuildContext context, String message, Color color) { final snackBar = SnackBar( clipBehavior: Clip.antiAliasWithSaveLayer, backgroundColor: color, elevation: 3, content: Text( message, style: AppStyle.title.copyWith(color: AppColor.secondaryColor), ), behavior: SnackBarBehavior.floating, animation: const AlwaysStoppedAnimation(1.0), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10.0), // Custom border radius ), width: Get.width * .8, // shape: const StadiumBorder( // side: BorderSide( // color: AppColor.secondaryColor, // width: 1.0, // style: BorderStyle.solid, // )), duration: const Duration(seconds: 2), ); ScaffoldMessenger.of(context).showSnackBar( snackBar, ); } } ================================================== FILE PATH: ./lib/controller/functions/geolocation.dart ================================================== import 'package:geolocator/geolocator.dart'; class GeoLocation { Future getCurrentLocation() async { bool serviceEnabled; LocationPermission permission; // Check if location services are enabled. serviceEnabled = await Geolocator.isLocationServiceEnabled(); if (!serviceEnabled) { // Location services are not enabled, so we request the user to enable it. return Future.error('Location services are disabled.'); } permission = await Geolocator.checkPermission(); if (permission == LocationPermission.denied) { permission = await Geolocator.requestPermission(); if (permission == LocationPermission.denied) { // Permissions are denied, we cannot fetch the location. return Future.error('Location permissions are denied'); } } if (permission == LocationPermission.deniedForever) { // Permissions are denied forever, we cannot request permissions. return Future.error( 'Location permissions are permanently denied, we cannot request permissions.'); } // When we reach here, permissions are granted and we can fetch the location. return await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high); } } ================================================== FILE PATH: ./lib/controller/functions/log_out.dart ================================================== import 'dart:io'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/controller/functions/crud.dart'; import 'package:Intaleq/main.dart'; import 'package:Intaleq/onbording_page.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:Intaleq/views/widgets/my_textField.dart'; import '../../constant/style.dart'; class LogOutController extends GetxController { TextEditingController checkTxtController = TextEditingController(); final formKey = GlobalKey(); final formKey1 = GlobalKey(); final emailTextController = TextEditingController(); Future deleteMyAccountDriver(String id) async { await CRUD().post(link: AppLink.removeUser, payload: {'id': id}).then( (value) => Get.snackbar('Deleted'.tr, 'Your Account is Deleted', backgroundColor: AppColor.redColor)); } checkBeforeDelete() async { var res = await CRUD().post( link: AppLink.deletecaptainAccounr, payload: {'id': box.read(BoxName.driverID)}).then((value) => exit(0)); } deletecaptainAccount() { Get.defaultDialog( backgroundColor: AppColor.yellowColor, title: 'Are you sure to delete your account?'.tr, middleText: 'Your data will be erased after 2 weeks\nAnd you will can\'t return to use app after 1 month ', titleStyle: AppStyle.title, content: Column( children: [ Container( width: Get.width, decoration: AppStyle.boxDecoration, child: Padding( padding: const EdgeInsets.all(8.0), child: Text( 'Your data will be erased after 2 weeks\nAnd you will can\'t return to use app after 1 month' .tr, style: AppStyle.title.copyWith(color: AppColor.redColor), ), ), ), const SizedBox( height: 20, ), Form( key: formKey, child: SizedBox( width: Get.width, child: MyTextForm( controller: checkTxtController, label: 'Enter Your First Name'.tr, hint: 'Enter Your First Name'.tr, type: TextInputType.name, ), )) ], ), confirm: MyElevatedButton( title: 'Delete'.tr, onPressed: () { if (checkTxtController.text == box.read(BoxName.nameDriver)) { deletecaptainAccount(); } })); } Future logOutPassenger() async { Get.defaultDialog( title: 'Are you Sure to LogOut?'.tr, content: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ MyElevatedButton( title: 'Cancel'.tr, onPressed: () => Get.back(), ), ElevatedButton( style: ButtonStyle( backgroundColor: MaterialStateProperty.all(AppColor.redColor), ), onPressed: () { // box.remove(BoxName.agreeTerms); box.remove(BoxName.passengerPhotoUrl); box.remove(BoxName.driverID); box.remove(BoxName.email); box.remove(BoxName.lang); box.remove(BoxName.name); box.remove(BoxName.passengerID); box.remove(BoxName.phone); box.remove(BoxName.tokenFCM); box.remove(BoxName.tokens); box.remove(BoxName.addHome); box.remove(BoxName.addWork); box.remove(BoxName.agreeTerms); box.remove(BoxName.apiKeyRun); box.remove(BoxName.countryCode); box.remove(BoxName.accountIdStripeConnect); box.remove(BoxName.passengerWalletTotal); box.remove(BoxName.isVerified); Get.offAll(OnBoardingPage()); }, child: Text( 'Sign Out'.tr, style: AppStyle.title.copyWith(color: AppColor.secondaryColor), )) ], )); } Future logOutCaptain() async { Get.defaultDialog( title: 'Are you Sure to LogOut?'.tr, titleStyle: AppStyle.title, content: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ MyElevatedButton( title: 'Cancel'.tr, onPressed: () => Get.back(), ), ElevatedButton( style: ButtonStyle( backgroundColor: MaterialStateProperty.all(AppColor.redColor), ), onPressed: () { // box.remove(BoxName.agreeTerms); box.remove(BoxName.driverID); box.remove(BoxName.sexDriver); box.remove(BoxName.dobDriver); box.remove(BoxName.nameDriver); box.remove(BoxName.emailDriver); box.remove(BoxName.phoneDriver); box.remove(BoxName.statusDriverLocation); box.remove(BoxName.cvvCodeDriver); box.remove(BoxName.lastNameDriver); box.remove(BoxName.passwordDriver); box.remove(BoxName.cardNumberDriver); box.remove(BoxName.expiryDateDriver); box.remove(BoxName.cardHolderNameDriver); box.remove(BoxName.vin); box.remove(BoxName.make); box.remove(BoxName.year); box.remove(BoxName.owner); box.remove(BoxName.onBoarding); box.remove(BoxName.agreeTerms); Get.offAll(OnBoardingPage()); }, child: Text( 'Sign Out'.tr, style: AppStyle.title.copyWith(color: AppColor.secondaryColor), )) ], )); } deletePassengerAccount() async { if (formKey1.currentState!.validate()) { if (box.read(BoxName.email).toString() == emailTextController.text) { await CRUD().post(link: AppLink.passengerRemovedAccountEmail, payload: { 'email': box.read(BoxName.email), }); } else { Get.snackbar('Email Wrong'.tr, 'Email you inserted is Wrong.'.tr, snackPosition: SnackPosition.BOTTOM, backgroundColor: AppColor.redColor); } } } } ================================================== FILE PATH: ./lib/controller/functions/package_info.dart ================================================== import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'dart:ui'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:jailbreak_root_detection/jailbreak_root_detection.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../constant/box_name.dart'; import '../../constant/colors.dart'; import '../../main.dart'; import '../../print.dart'; import 'encrypt_decrypt.dart'; Future checkForUpdate(BuildContext context) async { final packageInfo = await PackageInfo.fromPlatform(); final currentVersion = packageInfo.buildNumber; final version = packageInfo.version; print('currentVersion is : $currentVersion'); // Fetch the latest version from your server String latestVersion = box.read(BoxName.package); box.write(BoxName.packagInfo, version); if (latestVersion.isNotEmpty && latestVersion != currentVersion) { showUpdateDialog(context); } } checkForBounusInvitation() { if (box.read(BoxName.inviteCode) != null) {} } // Future getPackageInfo() async { // final response = await CRUD().get(link: AppLink.packageInfo, payload: { // "platform": Platform.isAndroid ? 'android' : 'ios', // "appName": AppInformation.appName, // }); // if (response != 'failure') { // return jsonDecode(response)['message'][0]['version']; // } // return ''; // } // getDeviceFingerprint() async { // final deviceInfo = await DeviceInfoPlugin().deviceInfo; // var deviceData; // if (Platform.isAndroid) { // deviceData = deviceInfo.data; // Log.print('deviceData: ${jsonEncode(deviceData)}'); // } else if (Platform.isIOS) { // deviceData = deviceInfo.data; // } // final String deviceId = // deviceData['device'] ?? deviceData['identifierForVendor']; // final String deviceModel = deviceData['model']; // final String osVersion = deviceData['systemVersion']; // Log.print('fingr: ${'${deviceId}_${deviceModel}_$osVersion'}'); // Log.print('deviceModel: ${deviceModel}'); // Log.print('osVersion: ${osVersion}'); // return EncryptionHelper.instance // .encryptData('${deviceId}_${deviceModel}_$osVersion'); // } void showUpdateDialog(BuildContext context) { final String storeUrl = Platform.isAndroid ? 'https://play.google.com/store/apps/details?id=com.Intaleq.intaleq' : 'https://apps.apple.com/jo/app/intaleq-rider/id6748075179'; showGeneralDialog( context: context, barrierDismissible: false, barrierColor: Colors.black.withOpacity(0.5), pageBuilder: (_, __, ___) { return BackdropFilter( filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), child: Center( child: AlertDialog( // Using AlertDialog for a more Material Design look shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16)), // More rounded corners elevation: 4, // Add a bit more elevation contentPadding: EdgeInsets.zero, // Remove default content padding content: Column( mainAxisSize: MainAxisSize.min, children: [ Padding( padding: const EdgeInsets.only(top: 20.0), child: Image.asset( 'assets/images/logo.png', height: 72, // Slightly larger logo width: 72, ), ), const SizedBox(height: 16), Padding( padding: const EdgeInsets.symmetric(horizontal: 24.0), child: Text( 'Update Available'.tr, textAlign: TextAlign.center, style: Theme.of(context).textTheme.titleLarge?.copyWith( // Use theme's title style fontWeight: FontWeight.bold, ), ), ), Padding( padding: const EdgeInsets.all(24.0), child: Text( 'A new version of the app is available. Please update to the latest version.' .tr, // More encouraging message textAlign: TextAlign.center, style: Theme.of(context).textTheme.bodyMedium?.copyWith( // Use theme's body style color: Colors.black87, ), ), ), const Divider(height: 0), Row( children: [ Expanded( child: TextButton( // Using TextButton for "Cancel" onPressed: () => Navigator.pop(context), style: TextButton.styleFrom( foregroundColor: Colors.grey, shape: const RoundedRectangleBorder( borderRadius: BorderRadius.only( bottomLeft: Radius.circular(16), ), ), ), child: Text('Cancel'.tr), ), ), const SizedBox( height: 48, child: VerticalDivider(width: 0), // Using VerticalDivider ), Expanded( child: ElevatedButton( // Using ElevatedButton for "Update" onPressed: () async { if (await canLaunchUrl(Uri.parse(storeUrl))) { await launchUrl(Uri.parse(storeUrl)); } if (context.mounted) Navigator.pop(context); }, style: ElevatedButton.styleFrom( backgroundColor: AppColor .primaryColor, // Use theme's primary color foregroundColor: Theme.of(context) .colorScheme .onPrimary, // Use theme's onPrimary color shape: const RoundedRectangleBorder( borderRadius: BorderRadius.only( bottomRight: Radius.circular(16), ), ), ), child: Text('Update'.tr), ), ), ], ), ], ), ), ), ); }, transitionBuilder: (_, animation, __, child) { return ScaleTransition( scale: CurvedAnimation( parent: animation, curve: Curves.easeOutCubic, // More natural curve ), child: child, ); }, ); } class SecurityHelper { /// Performs security checks and handles potential risks static Future performSecurityChecks() async { bool isNotTrust = false; bool isJailBroken = false; bool isRealDevice = true; bool isOnExternalStorage = false; bool checkForIssues = false; bool isDevMode = false; bool isTampered = false; String bundleId = ""; try { isNotTrust = await JailbreakRootDetection.instance.isNotTrust; isJailBroken = await JailbreakRootDetection.instance.isJailBroken; isRealDevice = await JailbreakRootDetection.instance.isRealDevice; isOnExternalStorage = await JailbreakRootDetection.instance.isOnExternalStorage; List issues = await JailbreakRootDetection.instance.checkForIssues; checkForIssues = issues.isNotEmpty; isDevMode = await JailbreakRootDetection.instance.isDevMode; // Get Bundle ID PackageInfo packageInfo = await PackageInfo.fromPlatform(); bundleId = packageInfo.packageName; if (bundleId.isNotEmpty) { // Pass the CORRECT bundle ID to isTampered isTampered = await JailbreakRootDetection.instance.isTampered(bundleId); } } catch (e) { debugPrint("Error during security checks: $e"); // Consider handling specific exceptions, not just general errors. } // Save values to storage (using GetStorage) await box.write('isNotTrust', isNotTrust); // Use await for write operations await box.write('isTampered', isTampered); // Use await await box.write('isJailBroken', isJailBroken); // Use await debugPrint("Security Check Results:"); debugPrint("isNotTrust: $isNotTrust"); debugPrint("isJailBroken: $isJailBroken"); debugPrint("isRealDevice: $isRealDevice"); debugPrint("isOnExternalStorage: $isOnExternalStorage"); debugPrint("checkForIssues: $checkForIssues"); debugPrint("isDevMode: $isDevMode"); debugPrint("isTampered: $isTampered"); debugPrint("Bundle ID: $bundleId"); // Print the bundle ID // Check for security risks and potentially show a warning if (isJailBroken || isRealDevice == false || isTampered) { // print("security_warning".tr); //using easy_localization // Use a more robust approach to show a warning, like a dialog: _showSecurityWarning(); } } /// Deletes all app data static void _showSecurityWarning() { // Use an RxInt to track the remaining seconds. This is the KEY! RxInt secondsRemaining = 10.obs; Get.dialog( CupertinoAlertDialog( title: Text("Security Warning".tr), content: Column( mainAxisSize: MainAxisSize.min, children: [ Obx(() => Text( "Potential security risks detected. The application will close in @seconds seconds." .trParams({ // Use trParams for placeholders 'seconds': secondsRemaining.value.toString(), }), // Wrap the Text widget in Obx )), SizedBox(height: 24), // More spacing before the progress bar Obx(() => SizedBox( width: double.infinity, // Make progress bar full width child: CupertinoActivityIndicator( // in case of loading radius: 15, animating: true, ))), SizedBox(height: 8), Obx(() => ClipRRect( borderRadius: BorderRadius.circular(8), // Rounded corners child: LinearProgressIndicator( value: secondsRemaining.value / 10, backgroundColor: Colors.grey.shade300, // Lighter background valueColor: AlwaysStoppedAnimation( CupertinoColors.systemRed), // iOS-style red minHeight: 8, // Slightly thicker progress bar ), )), ], ), ), barrierDismissible: false, ); Timer.periodic(Duration(seconds: 1), (timer) { secondsRemaining.value--; if (secondsRemaining.value <= 0) { timer.cancel(); // Get.back(); _clearDataAndExit(); } }); } static Future _clearDataAndExit() async { await storage.deleteAll(); await box.erase(); exit(0); // Exit the app print('exit'); } } class DeviceHelper { static Future getDeviceFingerprint() async { final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin(); var deviceData; try { if (Platform.isAndroid) { // Fetch Android-specific device information AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo; deviceData = androidInfo.toMap(); // Convert to a map for easier access // Log.print('deviceData: ${jsonEncode(deviceData)}'); } else if (Platform.isIOS) { // Fetch iOS-specific device information IosDeviceInfo iosInfo = await deviceInfoPlugin.iosInfo; deviceData = iosInfo.toMap(); // Convert to a map for easier access } else { throw UnsupportedError('Unsupported platform'); } // Extract relevant device information final String deviceId = Platform.isAndroid ? deviceData['androidId'] ?? deviceData['fingerprint'] ?? 'unknown' : deviceData['identifierForVendor'] ?? 'unknown'; final String deviceModel = deviceData['model'] ?? 'unknown'; final String osVersion = Platform.isAndroid ? deviceData['version']['release'] ?? 'unknown' : deviceData['systemVersion'] ?? 'unknown'; // Log the extracted information // Generate and return the encrypted fingerprint final String fingerprint = '${deviceId}_${deviceModel}_$osVersion'; // print(EncryptionHelper.instance.encryptData(fingerprint)); return EncryptionHelper.instance.encryptData(fingerprint); } catch (e) { throw Exception('Failed to generate device fingerprint'); } } } ================================================== FILE PATH: ./lib/controller/functions/network/connection_check.dart ================================================== import 'dart:async'; import 'dart:io'; import 'package:http/http.dart' as http; import 'net_guard.dart'; typedef BodyEncoder = Future Function(); class HttpRetry { /// ريتراي لـ network/transient errors فقط. static Future sendWithRetry( BodyEncoder send, { int maxRetries = 3, Duration baseDelay = const Duration(milliseconds: 400), Duration timeout = const Duration(seconds: 12), }) async { // ✅ Pre-flight check for internet connection if (!await NetGuard().hasInternet()) { // Immediately throw a specific exception if there's no internet. // This avoids pointless retries. throw const SocketException("No internet connection"); } int attempt = 0; while (true) { attempt++; try { final res = await send().timeout(timeout); return res; } on TimeoutException catch (_) { if (attempt >= maxRetries) rethrow; } on SocketException catch (_) { if (attempt >= maxRetries) rethrow; } on HandshakeException catch (_) { if (attempt >= maxRetries) rethrow; } on http.ClientException catch (e) { // مثال: Connection reset by peer final msg = e.message.toLowerCase(); final transient = msg.contains('connection reset') || msg.contains('broken pipe') || msg.contains('timed out'); if (!transient || attempt >= maxRetries) rethrow; } // backoff: 0.4s, 0.8s, 1.6s final delay = baseDelay * (1 << (attempt - 1)); await Future.delayed(delay); } } } ================================================== FILE PATH: ./lib/controller/functions/network/net_guard.dart ================================================== import 'dart:async'; import 'dart:io'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:internet_connection_checker/internet_connection_checker.dart'; class NetGuard { static final NetGuard _i = NetGuard._(); NetGuard._(); factory NetGuard() => _i; bool _notified = false; /// فحص: (أ) فيه شبكة؟ (ب) فيه انترنت؟ (ج) السيرفر نفسه reachable؟ Future hasInternet({Uri? mustReach}) async { final connectivity = await Connectivity().checkConnectivity(); if (connectivity == ConnectivityResult.none) return false; final hasNet = await InternetConnectionChecker.createInstance().hasConnection; if (!hasNet) return false; if (mustReach != null) { try { final host = mustReach.host; final result = await InternetAddress.lookup(host); if (result.isEmpty || result.first.rawAddress.isEmpty) return false; // اختباري خفيف عبر TCP (80/443) — 400ms timeout final port = mustReach.scheme == 'http' ? 80 : 443; final socket = await Socket.connect(host, port, timeout: const Duration(milliseconds: 400)); socket.destroy(); } catch (_) { return false; } } return true; } /// إظهار إشعار مرة واحدة ثم إسكات التكرارات void notifyOnce(void Function(String title, String msg) show) { if (_notified) return; _notified = true; show('لا يوجد اتصال بالإنترنت', 'تحقق من الشبكة ثم حاول مجددًا.'); // إعادة السماح بعد 15 ثانية Future.delayed(const Duration(seconds: 15), () => _notified = false); } } ================================================== FILE PATH: ./lib/controller/themes/themes.dart ================================================== import 'package:flutter/material.dart'; import 'package:Intaleq/constant/style.dart'; import '../../constant/colors.dart'; ThemeData lightThemeEnglish = ThemeData( brightness: Brightness.light, fontFamily: "SFPro", textTheme: TextTheme( displaySmall: AppStyle.title, displayLarge: AppStyle.headTitle, displayMedium: AppStyle.headTitle2, bodyLarge: AppStyle.title, bodyMedium: AppStyle.subtitle, ), primarySwatch: Colors.blue, dialogTheme: DialogThemeData( backgroundColor: AppColor.secondaryColor, contentTextStyle: AppStyle.title, titleTextStyle: AppStyle.headTitle2, ), appBarTheme: AppBarTheme( elevation: 0, color: AppColor.secondaryColor, centerTitle: true, iconTheme: const IconThemeData( color: AppColor.primaryColor, ), toolbarTextStyle: TextTheme( titleSmall: AppStyle.subtitle, headlineSmall: AppStyle.title, titleLarge: AppStyle.headTitle2, ).bodyMedium, titleTextStyle: TextTheme( titleSmall: AppStyle.subtitle, headlineSmall: AppStyle.title, titleLarge: AppStyle.headTitle2, ).titleLarge, ), ); ThemeData darkThemeEnglish = ThemeData( brightness: Brightness.dark, fontFamily: "SFPro", textTheme: TextTheme( displaySmall: AppStyle.title, displayLarge: AppStyle.headTitle, displayMedium: AppStyle.headTitle2, bodyLarge: AppStyle.title, bodyMedium: AppStyle.subtitle, ), primarySwatch: Colors.blue, dialogTheme: DialogThemeData( backgroundColor: AppColor.secondaryColor, contentTextStyle: AppStyle.title, titleTextStyle: AppStyle.headTitle2, ), appBarTheme: AppBarTheme( elevation: 0, color: AppColor.secondaryColor, centerTitle: true, iconTheme: const IconThemeData( color: AppColor.primaryColor, ), toolbarTextStyle: TextTheme( titleSmall: AppStyle.subtitle, headlineSmall: AppStyle.title, titleLarge: AppStyle.headTitle2, ).bodyMedium, titleTextStyle: TextTheme( titleSmall: AppStyle.subtitle, headlineSmall: AppStyle.title, titleLarge: AppStyle.headTitle2, ).titleLarge, ), ); ThemeData lightThemeArabic = ThemeData( brightness: Brightness.light, fontFamily: 'SFArabic', textTheme: TextTheme( displaySmall: AppStyle.title, displayLarge: AppStyle.headTitle, displayMedium: AppStyle.headTitle2, bodyLarge: AppStyle.title, bodyMedium: AppStyle.subtitle, ), primarySwatch: Colors.blue, dialogTheme: DialogThemeData( backgroundColor: AppColor.secondaryColor, contentTextStyle: AppStyle.title, titleTextStyle: AppStyle.headTitle2, ), appBarTheme: AppBarTheme( elevation: 0, color: AppColor.secondaryColor, centerTitle: true, iconTheme: const IconThemeData( color: AppColor.primaryColor, ), toolbarTextStyle: TextTheme( titleSmall: AppStyle.subtitle, headlineSmall: AppStyle.title, titleLarge: AppStyle.headTitle2, ).bodyMedium, titleTextStyle: TextTheme( titleSmall: AppStyle.subtitle, headlineSmall: AppStyle.title, titleLarge: AppStyle.headTitle2, ).titleLarge, ), ); ThemeData darkThemeArabic = ThemeData( brightness: Brightness.dark, fontFamily: 'SFArabic', textTheme: TextTheme( displaySmall: AppStyle.title, displayLarge: AppStyle.headTitle, displayMedium: AppStyle.headTitle2, bodyLarge: AppStyle.title, bodyMedium: AppStyle.subtitle, ), primarySwatch: Colors.blue, dialogTheme: DialogThemeData( backgroundColor: AppColor.secondaryColor, contentTextStyle: AppStyle.title, titleTextStyle: AppStyle.headTitle2, ), appBarTheme: AppBarTheme( elevation: 0, color: AppColor.secondaryColor, centerTitle: true, iconTheme: const IconThemeData( color: AppColor.primaryColor, ), toolbarTextStyle: TextTheme( titleSmall: AppStyle.subtitle, headlineSmall: AppStyle.title, titleLarge: AppStyle.headTitle2, ).bodyMedium, titleTextStyle: TextTheme( titleSmall: AppStyle.subtitle, headlineSmall: AppStyle.title, titleLarge: AppStyle.headTitle2, ).titleLarge, ), ); ================================================== FILE PATH: ./lib/env/env.dart ================================================== import 'package:envied/envied.dart'; part 'env.g.dart'; @Envied() abstract class Env { @EnviedField(varName: 'basicAuthCredentials', obfuscate: true) static final String basicAuthCredentials = _Env.basicAuthCredentials; @EnviedField(varName: 'basicCompareFaces', obfuscate: true) static final String basicCompareFaces = _Env.basicCompareFaces; @EnviedField(varName: 'mapKeyOsm', obfuscate: true) static final String mapKeyOsm = _Env.mapKeyOsm; @EnviedField(varName: 'sss_encryptionSalt', obfuscate: true) static final String sss_encryptionSalt = _Env.sss_encryptionSalt; @EnviedField(varName: 'sss_pass', obfuscate: true) static final String sss_pass = _Env.sss_pass; @EnviedField(varName: 'addd', obfuscate: true) static final String addd = _Env.addd; @EnviedField(varName: 'passnpassenger', obfuscate: true) static final String passnpassenger = _Env.passnpassenger; @EnviedField(varName: 'newId', obfuscate: true) static final String newId = _Env.newId; @EnviedField(varName: 'allowed', obfuscate: true) static final String allowed = _Env.allowed; @EnviedField(varName: 'apiKeyHere', obfuscate: true) static final String apiKeyHere = _Env.apiKeyHere; @EnviedField(varName: 'getLocationAreaLinks', obfuscate: true) static final String getLocationAreaLinks = _Env.getLocationAreaLinks; @EnviedField(varName: 'initializationVector', obfuscate: true) static final String initializationVector = _Env.initializationVector; @EnviedField(varName: 'basicCompareFacesURL', obfuscate: true) static final String basicCompareFacesURL = _Env.basicCompareFacesURL; @EnviedField(varName: 'accountSIDTwillo', obfuscate: true) static final String accountSIDTwillo = _Env.accountSIDTwillo; @EnviedField(varName: 'serverAPI', obfuscate: true) static final String serverAPI = _Env.serverAPI; @EnviedField(varName: 'mapAPIKEY', obfuscate: true) static final String mapAPIKEY = _Env.mapAPIKEY; @EnviedField(varName: 'mapAPIKEYIOS', obfuscate: true) static final String mapAPIKEYIOS = _Env.mapAPIKEYIOS; @EnviedField(varName: 'twilloRecoveryCode', obfuscate: true) static final String twilloRecoveryCode = _Env.twilloRecoveryCode; @EnviedField(varName: 'authTokenTwillo', obfuscate: true) static final String authTokenTwillo = _Env.authTokenTwillo; @EnviedField(varName: 'chatGPTkey', obfuscate: true) static final String chatGPTkey = _Env.chatGPTkey; @EnviedField(varName: 'transactionCloude', obfuscate: true) static final String transactionCloude = _Env.transactionCloude; @EnviedField(varName: 'visionApi', obfuscate: true) static final String visionApi = _Env.visionApi; @EnviedField(varName: 'secretKey', obfuscate: true) static final String secretKey = _Env.secretKey; @EnviedField(varName: 'stripe_publishableKe', obfuscate: true) static final String stripePublishableKe = _Env.stripePublishableKe; @EnviedField(varName: 'chatGPTkeySefer', obfuscate: true) static final String chatGPTkeySefer = _Env.chatGPTkeySefer; @EnviedField(varName: 'llamaKey', obfuscate: true) static final String llamaKey = _Env.llamaKey; @EnviedField(varName: 'privateKeyFCM', obfuscate: true) static final String privateKeyFCM = _Env.privateKeyFCM; @EnviedField(varName: 'whatsapp', obfuscate: true) static final String whatsapp = _Env.whatsapp; @EnviedField(varName: 'whatappID', obfuscate: true) static final String whatappID = _Env.whatappID; @EnviedField(varName: 'serverPHP', obfuscate: true) static final String serverPHP = _Env.serverPHP; @EnviedField(varName: 'seferAlexandriaServer', obfuscate: true) static final String seferAlexandriaServer = _Env.seferAlexandriaServer; @EnviedField(varName: 'seferPaymentServer', obfuscate: true) static final String seferPaymentServer = _Env.seferPaymentServer; @EnviedField(varName: 'seferCairoServer', obfuscate: true) static final String seferCairoServer = _Env.seferCairoServer; @EnviedField(varName: 'seferGizaServer', obfuscate: true) static final String seferGizaServer = _Env.seferGizaServer; @EnviedField(varName: 'chatGPTkeySeferNew', obfuscate: true) static final String chatGPTkeySeferNew = _Env.chatGPTkeySeferNew; @EnviedField(varName: 'cohere', obfuscate: true) static final String cohere = _Env.cohere; @EnviedField(varName: 'claudeAiAPI', obfuscate: true) static final String claudeAiAPI = _Env.claudeAiAPI; @EnviedField(varName: 'payPalClientId', obfuscate: true) static final String payPalClientId = _Env.payPalClientId; @EnviedField(varName: 'payPalSecret', obfuscate: true) static final String payPalSecret = _Env.payPalSecret; @EnviedField(varName: 'geminiApi', obfuscate: true) static final String geminiApi = _Env.geminiApi; @EnviedField(varName: 'geminiApiMasa', obfuscate: true) static final String geminiApiMasa = _Env.geminiApiMasa; @EnviedField(varName: 'agoraAppId', obfuscate: true) static final String agoraAppId = _Env.agoraAppId; @EnviedField(varName: 'agoraAppCertificate', obfuscate: true) static final String agoraAppCertificate = _Env.agoraAppCertificate; @EnviedField(varName: 'payPalClientIdLive', obfuscate: true) static final String payPalClientIdLive = _Env.payPalClientIdLive; @EnviedField(varName: 'payPalSecretLive', obfuscate: true) static final String payPalSecretLive = _Env.payPalSecretLive; @EnviedField(varName: 'integrationIdPayMob', obfuscate: true) static final String integrationIdPayMob = _Env.integrationIdPayMob; @EnviedField(varName: 'passwordPayMob', obfuscate: true) static final String passwordPayMob = _Env.passwordPayMob; @EnviedField(varName: 'usernamePayMob', obfuscate: true) static final String usernamePayMob = _Env.usernamePayMob; @EnviedField(varName: 'payMobApikey', obfuscate: true) static final String payMobApikey = _Env.payMobApikey; @EnviedField(varName: 'integrationIdPayMobWallet', obfuscate: true) static final String integrationIdPayMobWallet = _Env.integrationIdPayMobWallet; @EnviedField(varName: 'smsPasswordEgypt', obfuscate: true) static final String smsPasswordEgypt = _Env.smsPasswordEgypt; @EnviedField(varName: 'ocpApimSubscriptionKey', obfuscate: true) static final String ocpApimSubscriptionKey = _Env.ocpApimSubscriptionKey; @EnviedField(varName: 'chatGPTkeySeferNew4', obfuscate: true) static final String chatGPTkeySeferNew4 = _Env.chatGPTkeySeferNew4; @EnviedField(varName: 'anthropicAIkeySeferNew', obfuscate: true) static final String anthropicAIkeySeferNew = _Env.anthropicAIkeySeferNew; @EnviedField(varName: 'llama3Key', obfuscate: true) static final String llama3Key = _Env.llama3Key; @EnviedField(varName: 'payMobOutClientSecrret', obfuscate: true) static final String payMobOutClientSecrret = _Env.payMobOutClientSecrret; @EnviedField(varName: 'payMobOutClient_id', obfuscate: true) static final String payMobOutClient_id = _Env.payMobOutClient_id; @EnviedField(varName: 'payMobOutPassword', obfuscate: true) static final String payMobOutPassword = _Env.payMobOutPassword; @EnviedField(varName: 'payMobOutUserName', obfuscate: true) static final String payMobOutUserName = _Env.payMobOutUserName; @EnviedField(varName: 'A', obfuscate: true) static final String A = _Env.A; @EnviedField(varName: 'B', obfuscate: true) static final String B = _Env.B; @EnviedField(varName: 'C', obfuscate: true) static final String C = _Env.C; @EnviedField(varName: 'D', obfuscate: true) static final String D = _Env.D; @EnviedField(varName: 'E', obfuscate: true) static final String E = _Env.E; @EnviedField(varName: 'F', obfuscate: true) static final String F = _Env.F; @EnviedField(varName: 'G', obfuscate: true) static final String G = _Env.G; @EnviedField(varName: 'H', obfuscate: true) static final String H = _Env.H; @EnviedField(varName: 'I', obfuscate: true) static final String I = _Env.I; @EnviedField(varName: 'J', obfuscate: true) static final String J = _Env.J; @EnviedField(varName: 'K', obfuscate: true) static final String K = _Env.K; @EnviedField(varName: 'L', obfuscate: true) static final String L = _Env.L; @EnviedField(varName: 'M', obfuscate: true) static final String M = _Env.M; @EnviedField(varName: 'N', obfuscate: true) static final String N = _Env.N; @EnviedField(varName: 'O', obfuscate: true) static final String O = _Env.O; @EnviedField(varName: 'P', obfuscate: true) static final String P = _Env.P; @EnviedField(varName: 'Q', obfuscate: true) static final String Q = _Env.Q; @EnviedField(varName: 'R', obfuscate: true) static final String R = _Env.R; @EnviedField(varName: 'S', obfuscate: true) static final String S = _Env.S; @EnviedField(varName: 'T', obfuscate: true) static final String T = _Env.T; @EnviedField(varName: 'U', obfuscate: true) static final String U = _Env.U; @EnviedField(varName: 'V', obfuscate: true) static final String V = _Env.V; @EnviedField(varName: 'W', obfuscate: true) static final String W = _Env.W; @EnviedField(varName: 'X', obfuscate: true) static final String X = _Env.X; @EnviedField(varName: 'Y', obfuscate: true) static final String Y = _Env.Y; @EnviedField(varName: 'Z', obfuscate: true) static final String Z = _Env.Z; @EnviedField(varName: 'a', obfuscate: true) static final String a = _Env.a; @EnviedField(varName: 'b', obfuscate: true) static final String b = _Env.b; @EnviedField(varName: 'c', obfuscate: true) static final String c = _Env.c; @EnviedField(varName: 'd', obfuscate: true) static final String d = _Env.d; @EnviedField(varName: 'e', obfuscate: true) static final String e = _Env.e; @EnviedField(varName: 'f', obfuscate: true) static final String f = _Env.f; @EnviedField(varName: 'g', obfuscate: true) static final String g = _Env.g; @EnviedField(varName: 'h', obfuscate: true) static final String h = _Env.h; @EnviedField(varName: 'i', obfuscate: true) static final String i = _Env.i; @EnviedField(varName: 'j', obfuscate: true) static final String j = _Env.j; @EnviedField(varName: 'k', obfuscate: true) static final String k = _Env.k; @EnviedField(varName: 'l', obfuscate: true) static final String l = _Env.l; @EnviedField(varName: 'm', obfuscate: true) static final String m = _Env.m; @EnviedField(varName: 'n', obfuscate: true) static final String n = _Env.n; @EnviedField(varName: 'o', obfuscate: true) static final String o = _Env.o; @EnviedField(varName: 'p', obfuscate: true) static final String p = _Env.p; @EnviedField(varName: 'q', obfuscate: true) static final String q = _Env.q; @EnviedField(varName: 'r', obfuscate: true) static final String r = _Env.r; @EnviedField(varName: 's', obfuscate: true) static final String s = _Env.s; @EnviedField(varName: 't', obfuscate: true) static final String t = _Env.t; @EnviedField(varName: 'u', obfuscate: true) static final String u = _Env.u; @EnviedField(varName: 'v', obfuscate: true) static final String v = _Env.v; @EnviedField(varName: 'w', obfuscate: true) static final String w = _Env.w; @EnviedField(varName: 'x', obfuscate: true) static final String x = _Env.x; @EnviedField(varName: 'y', obfuscate: true) static final String y = _Env.y; @EnviedField(varName: 'z', obfuscate: true) static final String z = _Env.z; @EnviedField(varName: 'keyOfApp', obfuscate: true) static final String keyOfApp = _Env.keyOfApp; } ================================================== FILE PATH: ./lib/env/env.g.dart ================================================== // GENERATED CODE - DO NOT MODIFY BY HAND part of 'env.dart'; // ************************************************************************** // EnviedGenerator // ************************************************************************** // coverage:ignore-file // ignore_for_file: type=lint // generated_from: .env final class _Env { static const List _enviedkeybasicAuthCredentials = [ 43044676, 864909550, 4242758126, 2514357568, 1555483995, 1142069238, 1205503833, 1967239324, 1860681093, 3229905743, 3243147856, 1002171964, 2971668333, 3009646440, 331994719, 3443456963, 813108254, 2398669640, 2665467623, 1880765956, 3552236665, 3431379130, 4129886444, 2497907908, 2195738790, 3192394429, 1329286224, 3931833945, 353914251, 1168254924, 1798346792, ]; static const List _envieddatabasicAuthCredentials = [ 43044659, 864909471, 4242758016, 2514357549, 1555483946, 1142069127, 1205503786, 1967239414, 1860681212, 3229905721, 3243147815, 1002171990, 2971668251, 3009646418, 331994673, 3443456946, 813108332, 2398669585, 2665467565, 1880766036, 3552236601, 3431379083, 4129886427, 2497907959, 2195738769, 3192394469, 1329286178, 3931833857, 353914343, 1168254862, 1798346820, ]; static final String basicAuthCredentials = String.fromCharCodes( List.generate( _envieddatabasicAuthCredentials.length, (int i) => i, growable: false, ).map((int i) => _envieddatabasicAuthCredentials[i] ^ _enviedkeybasicAuthCredentials[i])); static const List _enviedkeybasicCompareFaces = [ 3727333105, 1843694516, 3611997723, 2407362513, 1356628908, 2977101071, 1936901014, 2964813805, 197648233, 3590224812, 3940587702, 2375653923, 764212019, 500016560, 3035095344, 1159165809, 3677722776, 3500824290, 3405327942, 2095637207, 3941804910, 2161512590, 1479882886, 327839885, 153188006, 365671944, 436594973, 98326119, ]; static const List _envieddatabasicCompareFaces = [ 3727333003, 1843694558, 3611997806, 2407362491, 1356628928, 2977101178, 1936901095, 2964813707, 197648153, 3590224838, 3940587660, 2375653965, 764212034, 500016578, 3035095401, 1159165723, 3677722856, 3500824226, 3405327991, 2095637216, 3941804893, 2161512633, 1479882974, 327839999, 153188094, 365672036, 436595039, 98326027, ]; static final String basicCompareFaces = String.fromCharCodes( List.generate( _envieddatabasicCompareFaces.length, (int i) => i, growable: false, ).map((int i) => _envieddatabasicCompareFaces[i] ^ _enviedkeybasicCompareFaces[i])); static const List _enviedkeymapKeyOsm = [ 1880725877, 1912740320, 3266542548, 2054336914, 1379127872, 227009578, 1846478925, 2878974208, 3213278626, 1144816508, 2203359042, 735878522, 2466200304, 946402320, 879102837, 2671812745, 3872307814, 4055984631, 763879643, 2036980354, ]; static const List _envieddatamapKeyOsm = [ 1880725784, 1912740225, 3266542520, 2054337014, 1379127845, 227009628, 1846478861, 2878974322, 3213278669, 1144816393, 2203359030, 735878431, 2466200285, 946402420, 879102746, 2671812837, 3872307722, 4055984534, 763879593, 2036980465, ]; static final String mapKeyOsm = String.fromCharCodes(List.generate( _envieddatamapKeyOsm.length, (int i) => i, growable: false, ).map((int i) => _envieddatamapKeyOsm[i] ^ _enviedkeymapKeyOsm[i])); static const List _enviedkeysss_encryptionSalt = [ 2142255476, 284366874, 1270706260, 748215919, 3776340499, 2561096438, 2457298913, 2960978234, 3161273143, 3930985837, 1018819817, 2074811740, 3001526957, 4071104153, 2899558977, 2789268373, 2541058341, 1634579503, 997672564, 2969112716, 2447544998, 1502588636, 1988629125, 2924861119, 2138175500, 2187714698, 1601108451, 228144794, 2397079823, 3312472734, 2136600304, 998965048, 129266895, 4206281394, 1306643977, 3223055380, 1131453015, 1087145342, 259389477, 315073875, 112155829, 841060857, 3480083606, 3550310828, 1157550670, 3157014039, 2803451551, 3492161659, 296978924, 3653454494, 3228245663, 2933207844, 571656288, 748970365, 3674906033, 659647310, 2533357593, 2934855029, 11938227, 2934294970, 940307896, 2899367891, 1005948227, ]; static const List _envieddatasss_encryptionSalt = [ 2142255374, 284366973, 1270706297, 748215833, 3776340600, 2561096346, 2457298824, 2960978271, 3161273114, 3930985823, 1018819717, 2074811757, 3001527031, 4071104245, 2899558961, 2789268461, 2541058380, 1634579555, 997672510, 2969112762, 2447545041, 1502588557, 1988629194, 2924861129, 2138175598, 2187714792, 1601108439, 228144846, 2397079905, 3312472797, 2136600265, 998965088, 129266877, 4206281418, 1306644078, 3223055425, 1131452946, 1087145223, 259389555, 315073794, 112155900, 841060748, 3480083616, 3550310904, 1157550599, 3157014099, 2803451563, 3492161546, 296978876, 3653454506, 3228245721, 2933207921, 571656245, 748970252, 3674906078, 659647261, 2533357612, 2934854957, 11938241, 2934295010, 940307924, 2899367825, 1005948207, ]; static final String sss_encryptionSalt = String.fromCharCodes( List.generate( _envieddatasss_encryptionSalt.length, (int i) => i, growable: false, ).map((int i) => _envieddatasss_encryptionSalt[i] ^ _enviedkeysss_encryptionSalt[i])); static const List _enviedkeysss_pass = [ 2936667352, 876206380, 3186128085, 3644475235, 4171551389, 3935055651, 4185160202, 3383043288, 3512428989, 273877880, 2194175269, 1682477365, 3966359733, 1028886641, 3350459976, 4292396371, 3148371564, 710615900, 1115304974, 2505747022, 3041382642, 2936086504, 4085505205, 108362252, 2692491002, 2152838152, 3563449119, 2874766139, 555351262, 3788871382, 3226362165, 1225811350, ]; static const List _envieddatasss_pass = [ 2936667311, 876206429, 3186128059, 3644475150, 4171551468, 3935055698, 4185160313, 3383043250, 3512428996, 273877774, 2194175314, 1682477379, 3966359695, 1028886559, 3350459961, 4292396321, 3148371457, 710615813, 1115305028, 2505746974, 3041382578, 2936086489, 4085505154, 108362303, 2692490957, 2152838192, 3563449159, 2874766153, 555351174, 3788871354, 3226362231, 1225811450, ]; static final String sss_pass = String.fromCharCodes(List.generate( _envieddatasss_pass.length, (int i) => i, growable: false, ).map((int i) => _envieddatasss_pass[i] ^ _enviedkeysss_pass[i])); static const List _enviedkeyaddd = [ 856359347, 522158964, 1370037474, 3606466936, 960432668, 1732434775, ]; static const List _envieddataaddd = [ 856359409, 522158872, 1370037408, 3606466836, 960432722, 1732434747, ]; static final String addd = String.fromCharCodes(List.generate( _envieddataaddd.length, (int i) => i, growable: false, ).map((int i) => _envieddataaddd[i] ^ _enviedkeyaddd[i])); static const List _enviedkeypassnpassenger = [ 1792474850, 1924104668, 391311376, 1647542146, 668170995, 988459319, 1243891080, 2395250797, 2083894806, 163003598, 2320848855, 3562560371, 3133824981, ]; static const List _envieddatapassnpassenger = [ 1792474762, 1924104638, 391311479, 1647542240, 668170906, 988459331, 1243891178, 2395250741, 2083894884, 163003542, 2320848805, 3562560305, 3133824935, ]; static final String passnpassenger = String.fromCharCodes(List.generate( _envieddatapassnpassenger.length, (int i) => i, growable: false, ).map((int i) => _envieddatapassnpassenger[i] ^ _enviedkeypassnpassenger[i])); static const List _enviedkeynewId = [ 3220512096, 1148287903, 4066941307, ]; static const List _envieddatanewId = [ 3220512014, 1148287994, 4066941196, ]; static final String newId = String.fromCharCodes(List.generate( _envieddatanewId.length, (int i) => i, growable: false, ).map((int i) => _envieddatanewId[i] ^ _enviedkeynewId[i])); static const List _enviedkeyallowed = [ 1921270333, 2061111604, 3841100501, 4129347794, 1797614554, 2186603037, 2827436722, 1539632237, 3191692936, 736776115, 218392634, ]; static const List _envieddataallowed = [ 1921270352, 2061111643, 3841100471, 4129347771, 1797614518, 2186603128, 2827436703, 1539632140, 3191693048, 736776131, 218392576, ]; static final String allowed = String.fromCharCodes(List.generate( _envieddataallowed.length, (int i) => i, growable: false, ).map((int i) => _envieddataallowed[i] ^ _enviedkeyallowed[i])); static const List _enviedkeyapiKeyHere = [ 3817268896, 4161775699, 3301141030, 1134146372, 3857066077, 2722898092, 3934718659, 3063587468, 1822209404, 4077554629, 757295573, 976327143, 3144131708, 3652349276, 4136573864, 1630918124, 1883011707, 2138798218, 3463168398, 2798516309, 2130629731, 2691517471, 944278046, 1837676307, 3326908696, 3172767852, 2506241482, 4072360526, 2641044003, 2624375478, 1621395439, 1757597560, 2570551575, 2303844382, 1388240981, 545560487, 2022366108, 4107939182, 3708908872, 2921895529, 971259046, 1041402734, 1428626189, 1025360981, 2661920942, 2598284823, 4170160364, 3394231170, 108567072, ]; static const List _envieddataapiKeyHere = [ 3817268935, 4161775628, 3301141105, 1134146314, 3857065992, 2722898126, 3934718710, 3063587520, 1822209361, 4077554609, 757295527, 976327054, 3144131596, 3652349222, 4136573855, 1630918081, 1883011645, 2138798258, 3463168481, 2798516280, 2130629675, 2691517551, 944278091, 1837676414, 3326908799, 3172767781, 2506241456, 4072360454, 2641043988, 2624375539, 1621395387, 1757597469, 2570551647, 2303844391, 1388240941, 545560573, 2022366116, 4107939132, 3708908863, 2921895470, 971259105, 1041402711, 1428626258, 1025360914, 2661920918, 2598284909, 4170160308, 3394231227, 108567137, ]; static final String apiKeyHere = String.fromCharCodes(List.generate( _envieddataapiKeyHere.length, (int i) => i, growable: false, ).map((int i) => _envieddataapiKeyHere[i] ^ _enviedkeyapiKeyHere[i])); static const List _enviedkeygetLocationAreaLinks = [ 3404126900, 3635509459, 2760068551, 1135026344, 361014727, 2319372031, 2714864201, 3531563054, 1810411494, 3495896604, 3923131927, 3463236857, 4273060280, 3250330773, 3596924584, 2134775821, 760926808, 73878508, 1821638353, 582171256, 3456259047, 842584153, 4259212386, 3452581713, 596600050, 898075563, 2734934163, 626507477, 2488240861, 1729100675, 2304482244, 2116746605, 2229198287, 4054662819, 919217506, 3217274338, 87409090, 3028410396, 2357937549, 2039888758, 918643754, 676818405, 2278470455, 762101466, 703159238, 4078132155, 2102302303, 1758233505, 327406267, 2205087070, 3204855632, 3474242571, 576463225, 2529772108, 1816139063, 186395551, 170455642, 873083301, 406004334, 1746650876, 3404571507, 3278932612, 2364323337, 1029539922, 391278705, 943403502, 341044865, 1925641005, 708085454, 878870981, 406709643, 1348206451, 2204128571, 1007920868, 4073079278, ]; static const List _envieddatagetLocationAreaLinks = [ 3404126940, 3635509415, 2760068531, 1135026392, 361014708, 2319371973, 2714864230, 3531563009, 1810411399, 3495896684, 3923132030, 3463236823, 4273060300, 3250330855, 3596924609, 2134775933, 760926754, 73878465, 1821638324, 582171167, 3456258974, 842584105, 4259212310, 3452581759, 596599953, 898075588, 2734934270, 626507514, 2488240809, 1729100785, 2304482221, 2116746525, 2229198261, 4054662796, 919217424, 3217274251, 87409062, 3028410489, 2357937570, 2039888666, 918643781, 676818310, 2278470486, 762101422, 703159215, 4078132180, 2102302257, 1758233486, 327406300, 2205087035, 3204855588, 3474242644, 576463125, 2529772067, 1816139092, 186395646, 170455598, 873083340, 406004225, 1746650770, 3404571436, 3278932709, 2364323451, 1029539895, 391278608, 943403441, 341044973, 1925641028, 708085408, 878870958, 406709752, 1348206429, 2204128587, 1007920780, 4073079198, ]; static final String getLocationAreaLinks = String.fromCharCodes( List.generate( _envieddatagetLocationAreaLinks.length, (int i) => i, growable: false, ).map((int i) => _envieddatagetLocationAreaLinks[i] ^ _enviedkeygetLocationAreaLinks[i])); static const List _enviedkeyinitializationVector = [ 2201295168, 2446211413, 1881952212, 2993956456, 972975111, 3151220221, 1530369156, 2788019061, 326364544, 3044280583, 983993733, 1260359253, 3722860874, 3461661086, 667702118, 2522204854, 3330797164, 3115156146, 3573155996, 2827515416, 2004019848, 428764783, ]; static const List _envieddatainitializationVector = [ 2201295153, 2446211373, 1881952178, 2993956369, 972975213, 3151220104, 1530369263, 2788018946, 326364655, 3044280674, 983993826, 1260359207, 3722860836, 3461661180, 667702031, 2522204864, 3330797108, 3115156160, 3573156036, 2827515498, 2004019914, 428764701, ]; static final String initializationVector = String.fromCharCodes( List.generate( _envieddatainitializationVector.length, (int i) => i, growable: false, ).map((int i) => _envieddatainitializationVector[i] ^ _enviedkeyinitializationVector[i])); static const List _enviedkeybasicCompareFacesURL = [ 1330600922, 2887722883, 2311059944, 1416268531, 3823483437, 1178246148, 2679379553, 3811548580, 1911437534, 697424122, 3139472572, 2497341502, 2812690971, 2271326259, 1920762681, 2993486050, 1687020017, 3048008054, 2830274653, 62070531, 1614942967, 3087909243, 3525994045, 1276239452, 748595692, 32173991, 1537813415, 503865261, 1130536453, 48682119, 1829158149, 297207651, 2478383607, 2655797692, 450448992, 1384807967, 1659905640, 475498785, 3310131022, 1000386431, 1876247973, 1266592207, 2214694242, 3501035720, 2217940831, 4007139879, 635569862, 2304126238, 1402568687, 3524149872, 3624292399, 930448730, 4143781031, 3937919167, 577897467, 18660539, 792610170, 442906291, 2690221051, 2753670074, ]; static const List _envieddatabasicCompareFacesURL = [ 1330600882, 2887722999, 2311059868, 1416268419, 3823483486, 1178246206, 2679379534, 3811548555, 1911437496, 697424027, 3139472607, 2497341531, 2812690998, 2271326295, 1920762716, 2993485974, 1687019924, 3048007957, 2830274601, 62070574, 1614942865, 3087909197, 3525993988, 1276239470, 748595672, 32173972, 1537813406, 503865247, 1130536550, 48682163, 1829158246, 297207636, 2478383577, 2655797716, 450448901, 1384808045, 1659905543, 475498826, 3310131003, 1000386334, 1876248021, 1266592191, 2214694220, 3501035691, 2217940784, 4007139914, 635569897, 2304126333, 1402568576, 3524149789, 3624292447, 930448699, 4143781077, 3937919194, 577897380, 18660573, 792610075, 442906320, 2690220958, 2753670089, ]; static final String basicCompareFacesURL = String.fromCharCodes( List.generate( _envieddatabasicCompareFacesURL.length, (int i) => i, growable: false, ).map((int i) => _envieddatabasicCompareFacesURL[i] ^ _enviedkeybasicCompareFacesURL[i])); static const List _enviedkeyaccountSIDTwillo = [ 2843783092, 1674419346, 3803422258, 132889725, 1586455900, 3294810875, 2713641844, 719237140, 2160285213, 3355031642, 1044812735, 465231708, 2773128885, 2458872187, 1257532603, 2310638280, 311739674, 4045327999, 3499891219, 628184479, 4039907483, 2533330186, 1341177550, 1025907715, 509633930, 1553205648, 1248145143, 3082345651, 2221820334, 3094338270, 624605643, 2263308676, 3691275035, 383131392, 2080149801, 794174709, 2136872233, 468082603, 3193516271, 3874655752, 284351138, ]; static const List _envieddataaccountSIDTwillo = [ 2843783141, 1674419412, 3803422282, 132889677, 1586455853, 3294810754, 2713641792, 719237153, 2160285227, 3355031600, 1044812746, 465231670, 2773128838, 2458872131, 1257532552, 2310638246, 311739683, 4045327879, 3499891302, 628184550, 4039907497, 2533330235, 1341177591, 1025907767, 509634043, 1553205670, 1248145093, 3082345610, 2221820383, 3094338287, 624605613, 2263308782, 3691275051, 383131513, 2080149790, 794174637, 2136872283, 468082675, 3193516163, 3874655818, 284351182, ]; static final String accountSIDTwillo = String.fromCharCodes( List.generate( _envieddataaccountSIDTwillo.length, (int i) => i, growable: false, ).map((int i) => _envieddataaccountSIDTwillo[i] ^ _enviedkeyaccountSIDTwillo[i])); static const List _enviedkeyserverAPI = [ 3976340862, 876930661, 2754762348, 2464537893, 3707602655, 2489749710, 3424437440, 1372632324, 2975339402, 2676738093, 3221041012, 744897494, 1424458647, 1079081365, 3562411819, 4004226372, 2704808793, 1168829629, 1992531918, 3180887892, 1772554705, 4274017960, 263526825, 1684978867, 3658977582, 2764849002, 2435386837, 2434610909, 1238171864, 3938577549, 3000351850, 1398183753, 75887018, 774832896, 1523285360, 309110719, 858312180, 2818584421, 3270452275, 983656457, 1664075801, 2926896384, 769664241, 1537228947, 2075245662, 3146684998, 2628184795, 1239022201, 654943327, 1715476740, 1718664042, 2638834984, 4184911395, 489667049, 1830225181, 2640753699, 4200140839, 201082292, 701445777, 3501131445, 1086182735, 2058515131, 4059527038, 950334178, 587472557, 1704249165, 922220226, 1556517143, 1406823262, 2446727386, 2079624285, 37938373, 1344228475, 3910369000, 1492984777, 1437083473, 2842770769, 2576354000, 1864807939, 2895209442, 2917935409, 567043849, 576658584, 4104668683, 289522001, 3394727170, 3201674837, 1290177783, 3115294296, 4259693824, 3129141406, 325281440, 530300610, 415806151, 187464629, 530694302, 2938142458, 1021781952, 291246485, 3228999424, 3831388593, 2533438819, 2895384640, 3081205453, 2373368017, 2532170150, 3060366470, 4244026566, 1554490727, 3410670928, 960347257, 3614687388, 3705063013, 198619704, 705028789, 3504828489, 1242117333, 774908927, 3721749151, 4098061798, 942891585, 3861283949, 111830844, 3658249279, 446418689, 869497804, 1866712611, 1426830386, 2940675768, 3528266654, 331680518, 3378186940, 1334652234, 596949604, 1854281103, 2800667846, 476777023, 3236423334, 2603128686, 503959906, 3681931758, 2093974656, 2704910478, 2439513144, 3257918460, 2319599066, 1093709546, 3895079102, 2569178988, 3737864579, 839085567, 273990226, 2247636415, 1654429663, 3419379873, 3959242870, 3890025019, 3201343901, ]; static const List _envieddataserverAPI = [ 3976340783, 876930612, 2754762301, 2464537972, 3707602608, 2489749676, 3424437395, 1372632438, 2975339512, 2676738155, 3221040925, 744897516, 1424458694, 1079081411, 3562411898, 4004226428, 2704808814, 1168829637, 1992531867, 3180887907, 1772554667, 4274018015, 263526890, 1684978885, 3658977603, 2764848944, 2435386799, 2434610823, 1238171836, 3938577644, 3000351762, 1398183740, 75887097, 774832946, 1523285270, 309110669, 858312135, 2818584380, 3270452231, 983656548, 1664075875, 2926896439, 769664188, 1537229033, 2075245607, 3146684937, 2628184737, 1239022091, 654943335, 1715476843, 1718663950, 2638834970, 4184911425, 489666971, 1830225195, 2640753768, 4200140926, 201082317, 701445876, 3501131507, 1086182702, 2058515183, 4059526952, 950334126, 587472618, 1704249214, 922220169, 1556517156, 1406823222, 2446727330, 2079624296, 37938335, 1344228378, 3910368957, 1492984752, 1437083433, 2842770790, 2576353973, 1864808026, 2895209364, 2917935472, 567043920, 576658664, 4104668746, 289521927, 3394727270, 3201674782, 1290177692, 3115294325, 4259693874, 3129141414, 325281430, 530300556, 415806099, 187464679, 530694391, 2938142409, 1021781946, 291246566, 3228999481, 3831388632, 2533438768, 2895384591, 3081205411, 2373367945, 2532170194, 3060366558, 4244026516, 1554490670, 3410670888, 960347146, 3614687467, 3705062914, 198619659, 705028862, 3504828460, 1242117302, 774908861, 3721749234, 4098061717, 942891565, 3861283934, 111830890, 3658249287, 446418763, 869497845, 1866712660, 1426830461, 2940675733, 3528266728, 331680591, 3378186956, 1334652221, 596949521, 1854281147, 2800667798, 476777033, 3236423313, 2603128586, 503959817, 3681931686, 2093974763, 2704910550, 2439513174, 3257918357, 2319599023, 1093709458, 3895079155, 2569178943, 3737864647, 839085464, 273990149, 2247636455, 1654429613, 3419379961, 3959242778, 3890025081, 3201343985, ]; static final String serverAPI = String.fromCharCodes(List.generate( _envieddataserverAPI.length, (int i) => i, growable: false, ).map((int i) => _envieddataserverAPI[i] ^ _enviedkeyserverAPI[i])); static const List _enviedkeymapAPIKEY = [ 2247714160, 2560268629, 60973890, 4238015695, 3486272014, 4139058870, 3284541187, 1937795265, 4268641415, 3452889939, 3658126130, 253733115, 3331289064, 2627639475, 4246775286, 878786301, 3804413434, 2745587036, 1763947689, 295551841, 2115785072, 88958942, 1115480111, 3276376593, 4136534122, 1162804378, 14284426, 17535057, 2319425705, 1953711881, 3792644850, 1255190121, 514431811, 3899457619, 2021344858, 1913226202, 3546162315, 698376319, 2354027959, ]; static const List _envieddatamapAPIKEY = [ 2247714097, 2560268572, 60973880, 4238015662, 3486272093, 4139058895, 3284541250, 1937795217, 4268641473, 3452889857, 3658126189, 253733027, 3331288970, 2627639521, 4246775224, 878786253, 3804413346, 2745586950, 1763947676, 295551784, 2115784970, 88958957, 1115480174, 3276376648, 4136534062, 1162804464, 14284484, 17534984, 2319425761, 1953711950, 3792644792, 1255190062, 514431857, 3899457568, 2021344872, 1913226123, 3546162396, 698376200, 2354028026, ]; static final String mapAPIKEY = String.fromCharCodes(List.generate( _envieddatamapAPIKEY.length, (int i) => i, growable: false, ).map((int i) => _envieddatamapAPIKEY[i] ^ _enviedkeymapAPIKEY[i])); static const List _enviedkeymapAPIKEYIOS = [ 3242026595, 226759590, 3513945943, 1675836857, 2070623184, 1212962385, 2949685960, 2314727532, 4229834780, 2675409629, 4268245054, 2647028317, 1980982459, 2590627602, 4006411907, 740712139, 2498147417, 130942695, 3681207417, 3402766120, 3536327117, 3770297355, 2085970437, 566701769, 4055782816, 1608102648, 3393804425, 2100732790, 3315765567, 1614848706, 1829636998, 2806101795, 3386515473, 2410019939, 3104463353, 924278124, 6962405, 2844298305, 701510329, ]; static const List _envieddatamapAPIKEYIOS = [ 3242026530, 226759663, 3513945901, 1675836888, 2070623107, 1212962344, 2949685900, 2314727432, 4229834861, 2675409590, 4268245106, 2647028240, 1980982520, 2590627680, 4006412018, 740712097, 2498147343, 130942613, 3681207319, 3402766111, 3536327061, 3770297446, 2085970532, 566701741, 4055782889, 1608102537, 3393804528, 2100732696, 3315765574, 1614848685, 1829637060, 2806101826, 3386515494, 2410019891, 3104463307, 924278107, 6962346, 2844298276, 701510388, ]; static final String mapAPIKEYIOS = String.fromCharCodes(List.generate( _envieddatamapAPIKEYIOS.length, (int i) => i, growable: false, ).map((int i) => _envieddatamapAPIKEYIOS[i] ^ _enviedkeymapAPIKEYIOS[i])); static const List _enviedkeytwilloRecoveryCode = [ 2689140138, 1298299846, 2057967448, 2137865182, 2938356726, 1691312281, 2231705315, 59667461, 1041068572, 1212147038, 3924764144, 1831149843, 40385226, 1407278889, 3376967208, 2930603709, 2681028551, 325951936, 450904546, 1158123913, 3461876794, 4048211225, 3908777410, 1222192183, 3459582394, 3627977289, 1751140149, 3573607933, 3595094674, 3865880740, 714370723, ]; static const List _envieddatatwilloRecoveryCode = [ 2689140201, 1298299783, 2057967373, 2137865193, 2938356687, 1691312349, 2231705259, 59667541, 1041068628, 1212147055, 3924764082, 1831149945, 40385167, 1407278864, 3376967288, 2930603752, 2681028495, 325951988, 450904487, 1158123997, 3461876834, 4048211277, 3908777361, 1222192239, 3459582432, 3627977233, 1751140167, 3573607845, 3595094782, 3865880806, 714370767, ]; static final String twilloRecoveryCode = String.fromCharCodes( List.generate( _envieddatatwilloRecoveryCode.length, (int i) => i, growable: false, ).map((int i) => _envieddatatwilloRecoveryCode[i] ^ _enviedkeytwilloRecoveryCode[i])); static const List _enviedkeyauthTokenTwillo = [ 550160046, 2319335841, 1053614357, 3805976816, 2370913201, 1385227187, 1955262560, 3654581219, 3218643785, 3775928016, 1080892875, 1144318036, 1298398762, 3254180924, 4054769829, 576524082, 916329670, 4055003212, 986404453, 521422304, 1307751592, 641572031, 1969181429, 3951897168, 828310667, 3969389323, 1200210257, 3203333471, 2467733379, 917204918, 3855643778, 3370839775, 2467915783, 2462259520, 2536763376, 2301343237, 309682522, 1346811043, 9843013, ]; static const List _envieddataauthTokenTwillo = [ 550160025, 2319335825, 1053614432, 3805976777, 2370913161, 1385227225, 1955262485, 3654581203, 3218643835, 3775928033, 1080892927, 1144318011, 1298398802, 3254180932, 4054769809, 576524099, 916329718, 4055003193, 986404434, 521422292, 1307751576, 641571981, 1969181389, 3951897125, 828310715, 3969389369, 1200210272, 3203333418, 2467733431, 917204935, 3855643895, 3370839785, 2467915826, 2462259480, 2536763266, 2301343325, 309682486, 1346811105, 9842985, ]; static final String authTokenTwillo = String.fromCharCodes(List.generate( _envieddataauthTokenTwillo.length, (int i) => i, growable: false, ).map( (int i) => _envieddataauthTokenTwillo[i] ^ _enviedkeyauthTokenTwillo[i])); static const List _enviedkeychatGPTkey = [ 3411261939, 2148041557, 1239406863, 2505787222, 1026121752, 506996797, 1625950291, 2287542558, 1602415689, 3979349983, 3431506210, 2145365833, 1700889457, 2046901692, 1940607177, 3545010845, 1595543080, 51154378, 3799259360, 2429407672, 4164116956, 2680039016, 3275785567, 1250429927, 2147043762, 1486248192, 1272778244, 2987720676, 1957620816, 568908027, 2422341873, 2109254189, 2435992579, 3518627944, 1350420187, 2603668676, 3520694324, 799269050, 1126040433, 3973271653, 3874166578, 2691444775, 499201732, 1725502412, 512811952, 3550319764, 2791440863, 3370105785, 213525776, 3622779136, 3508089745, 3424172753, 2441788357, 1587664731, 3861880036, 3873561842, 3004624558, 3359940933, ]; static const List _envieddatachatGPTkey = [ 3411261833, 2148041522, 1239406882, 2505787234, 1026121819, 506996751, 1625950309, 2287542639, 1602415741, 3979349900, 3431506299, 2145365806, 1700889395, 2046901751, 1940607128, 3545010936, 1595543136, 51154320, 3799259300, 2429407689, 4164116919, 2680038975, 3275785520, 1250429840, 2147043825, 1486248249, 1272778332, 2987720598, 1957620776, 568907932, 2422341796, 2109254248, 2435992677, 3518627901, 1350420130, 2603668733, 3520694398, 799269096, 1126040326, 3973271639, 3874166592, 2691444810, 499201778, 1725502365, 512811906, 3550319861, 2791440827, 3370105819, 213525795, 3622779243, 3508089851, 3424172710, 2441788317, 1587664681, 3861879996, 3873561758, 3004624620, 3359940905, ]; static final String chatGPTkey = String.fromCharCodes(List.generate( _envieddatachatGPTkey.length, (int i) => i, growable: false, ).map((int i) => _envieddatachatGPTkey[i] ^ _enviedkeychatGPTkey[i])); static const List _enviedkeytransactionCloude = [ 3074221553, 3951058408, 4067445206, 4240864769, 3029822673, 338343838, 313992139, 177933594, 1201867745, 902478735, 2553476916, 257362754, 392548703, 2942901664, 3789213795, 3442876235, 1376555914, 647608357, 3179574741, 942544542, 1564366485, 1769541812, 3204174490, 3220680781, 2298243568, 3608817361, 1548501007, 1334349355, 1102447177, 1385255816, 3808195097, 883667915, 772327800, 3925076835, 3326689581, 516407938, 1753712902, 4211012475, 186284189, 2507991086, 2230197226, 1267305337, 3358179646, 1142302397, 3106352290, 1768862547, 4106756966, 2172865925, 480632436, 2351076572, 4283776158, 2544420734, 207632763, 3684204177, 1987313992, 2918435654, 203592029, 2106962387, 3721228987, 2850354239, 1310733976, 3623391472, ]; static const List _envieddatatransactionCloude = [ 3074221472, 3951058304, 4067445173, 4240864886, 3029822628, 338343927, 313992103, 177933685, 1201867660, 902478846, 2553476951, 257362733, 392548662, 2942901698, 3789213785, 3442876186, 1376555996, 647608426, 3179574666, 942544596, 1564366555, 1769541869, 3204174559, 3220680713, 2298243522, 3608817289, 1548501080, 1334349418, 1102447227, 1385255870, 3808195136, 883667859, 772327731, 3925076768, 3326689567, 516408022, 1753712982, 4211012417, 186284228, 2507991141, 2230197211, 1267305277, 3358179688, 1142302453, 3106352276, 1768862464, 4106756908, 2172865991, 480632391, 2351076589, 4283776208, 2544420685, 207632683, 3684204244, 1987314041, 2918435603, 203591941, 2106962337, 3721229027, 2850354259, 1310734042, 3623391388, ]; static final String transactionCloude = String.fromCharCodes( List.generate( _envieddatatransactionCloude.length, (int i) => i, growable: false, ).map((int i) => _envieddatatransactionCloude[i] ^ _enviedkeytransactionCloude[i])); static const List _enviedkeyvisionApi = [ 3449569445, 1424033417, 474964228, 2213678135, 567698513, 278969534, 144214055, 2659032685, 3925455488, 1622357700, 1136615058, 2580278842, 3675016836, 4191209896, 2524594001, 3838616617, 1876340672, 2111963964, 4288508606, 581945109, 3240508474, 1076307663, 3057404931, 782678162, 1629718417, 3313726635, 964809155, 1597079749, 3336087780, 1859779564, 1660419210, 2578934842, 4099186848, 2378904315, 2338194984, 881229155, 436842941, 3639724217, ]; static const List _envieddatavisionApi = [ 3449569430, 1424033529, 474964293, 2213678203, 567698466, 278969551, 144214132, 2659032638, 3925455577, 1622357648, 1136615140, 2580278848, 3675016948, 4191209886, 2524594024, 3838616696, 1876340725, 2111964026, 4288508659, 581945180, 3240508509, 1076307629, 3057405049, 782678264, 1629718486, 3313726621, 964809113, 1597079796, 3336087710, 1859779463, 1660419326, 2578934896, 4099186936, 2378904201, 2338195056, 881229071, 436843007, 3639724245, ]; static final String visionApi = String.fromCharCodes(List.generate( _envieddatavisionApi.length, (int i) => i, growable: false, ).map((int i) => _envieddatavisionApi[i] ^ _enviedkeyvisionApi[i])); static const List _enviedkeysecretKey = [ 4140745550, 3178408042, 1670814531, 3711282077, 1662128599, 2889772086, 1014452685, 3064053161, 3380164303, 1121077713, 3395820404, 3048260593, 2971600797, 1624369151, 564174429, 1994829589, 2238813768, 3856513925, 2474391362, 1671318605, 1275341974, 2433357473, 2300558167, 3502011188, 3045159025, 3673257124, 3784164155, 2921536830, 3053351981, 1709997607, 939033529, 2210749178, 1543708163, 3587197731, 522450157, 1494024919, 1215441420, 4032619068, 4178537696, 1895028211, 814537802, 3097838214, 3924531299, 1123669819, 2471307014, 903882385, 518508348, 2734682307, 1609277034, 2300250967, 457095514, 4234953889, 3319745839, 3982427809, 1770484065, 1929441996, 668317955, 2709879740, 1548907051, 2501230123, 906637839, 2421468484, 402638955, 1070192145, 3349225512, 1492212846, 269678157, 3904211919, 3200035485, 2869006894, 3610364665, 1788566239, 3206653378, 747661071, 1566895650, 3568568164, 3654832529, 3253616469, 2410231022, 2720063622, 1111909744, 3148038286, 778856656, 3884526090, 545658427, 2059041156, 2243131660, 450205184, 3076101930, 776895230, 1756916461, 1964317324, 1474443632, 4025902323, 4141291063, 3352169569, 3125356068, 3252599961, 3744929749, 774818637, 226178144, 1277440227, 633593715, 2779085681, 3252663185, 2579559376, 1983324010, 2710271075, 53403007, 325554330, 4073441341, 3337826937, 1408439834, 3775185935, ]; static const List _envieddatasecretKey = [ 4140745524, 3178407949, 1670814492, 3711282159, 1662128568, 2889772102, 1014452647, 3064053238, 3380164346, 1121077734, 3395820349, 3048260504, 2971600875, 1624369097, 564174381, 1994829656, 2238813710, 3856513990, 2474391296, 1671318539, 1275342055, 2433357458, 2300558100, 3502011142, 3045158943, 3673257106, 3784164210, 2921536870, 3053352001, 1709997642, 939033555, 2210749059, 1543708264, 3587197779, 522450069, 1494024851, 1215441505, 4032619115, 4178537689, 1895028160, 814537753, 3097838289, 3924531280, 1123669837, 2471307120, 903882441, 518508372, 2734682357, 1609277010, 2300250882, 457095451, 4234953880, 3319745915, 3982427796, 1770484007, 1929441923, 668318033, 2709879784, 1548907132, 2501230156, 906637912, 2421468471, 402638911, 1070192162, 3349225503, 1492212797, 269678137, 3904211844, 3200035566, 2869006945, 3610364585, 1788566203, 3206653365, 747661131, 1566895686, 3568568087, 3654832616, 3253616493, 2410230943, 2720063700, 1111909705, 3148038397, 778856610, 3884526151, 545658478, 2059041256, 2243131769, 450205281, 3076101954, 776895117, 1756916446, 1964317410, 1474443552, 4025902267, 4141291073, 3352169478, 3125356134, 3252600056, 3744929766, 774818686, 226178068, 1277440164, 633593624, 2779085640, 3252663201, 2579559334, 1983323964, 2710271062, 53402919, 325554408, 4073441381, 3337826837, 1408439896, 3775186019, ]; static final String secretKey = String.fromCharCodes(List.generate( _envieddatasecretKey.length, (int i) => i, growable: false, ).map((int i) => _envieddatasecretKey[i] ^ _enviedkeysecretKey[i])); static const List _enviedkeystripePublishableKe = [ 1131561294, 2711604043, 2145438534, 2360936889, 917884507, 943173038, 2049302825, 2388082498, 1714080331, 918934053, 1312375978, 1430083567, 3144177047, 753529424, 3600024350, 3533519459, 3393226149, 3034528707, 2274373170, 705124211, 3505652149, 3164031223, 2980824754, 4177489357, 2612244290, 380737404, 2073785079, 2028554690, 3637466038, 1326782093, 3714588566, 982432894, 1922869578, 1801151060, 1847673334, 2962612282, 4172865284, 2600285898, 3137668193, 1757787985, 2419940104, 3077560413, 2958385622, 1866645297, 1813098684, 2931437, 430881370, 3054916559, 3072068927, 2983391157, 537211855, 3016928490, 2932098291, 967822812, 2680842344, 349884289, 1918020125, 4181677295, 935528141, 98582932, 1580985494, 3131539899, 1625179159, 2225003075, 2057582527, 2841569269, 186929617, 3189508925, 1770763366, 353156279, 878542735, 3018827748, 2205537999, 544189314, 3077791291, 3905192562, 730377716, 1986075123, 197393759, 212586995, 1540211849, 4134830671, 1543569231, 2828495303, 2567308120, 1830630969, 3757512651, 2552828232, 695885796, 1231146981, 2871782048, 1453407665, 1681892297, 1140670313, 2344516727, 460245895, 3192034309, 3434432290, 2206422758, 1177540407, 919924075, 1753835819, 3003089654, 2783922040, 4124749669, 3899550883, 302065634, 3160408601, 4084296451, 416404171, 98095081, 115708127, 3379724151, 906566332, ]; static const List _envieddatastripePublishableKe = [ 1131561272, 2711604012, 2145438489, 2360936905, 917884457, 943173057, 2049302873, 2388082472, 1714080276, 918934032, 1312375965, 1430083494, 3144177150, 753529382, 3600024360, 3533519406, 3393226211, 3034528640, 2274373232, 705124149, 3505652164, 3164031172, 2980824817, 4177489407, 2612244268, 380737354, 2073784988, 2028554636, 3637466108, 1326782179, 3714588620, 982432828, 1922869555, 1801150978, 1847673280, 2962612308, 4172865393, 2600285838, 3137668117, 1757787913, 2419940205, 3077560420, 2958385567, 1866645339, 1813098745, 2931389, 430881301, 3054916521, 3072068951, 2983391192, 537211839, 3016928430, 2932098183, 967822731, 2680842245, 349884405, 1918020142, 4181677218, 935528065, 98582982, 1580985510, 3131539932, 1625179206, 2225003059, 2057582550, 2841569213, 186929586, 3189508972, 1770763275, 353156342, 878542793, 3018827689, 2205537946, 544189394, 3077791305, 3905192488, 730377623, 1986075072, 197393678, 212586906, 1540211914, 4134830603, 1543569189, 2828495295, 2567308058, 1830631011, 3757512583, 2552828202, 695885724, 1231146913, 2871782115, 1453407618, 1681892268, 1140670223, 2344516623, 460245968, 3192034429, 3434432344, 2206422741, 1177540356, 919923977, 1753835900, 3003089598, 2783921993, 4124749631, 3899550916, 302065552, 3160408682, 4084296539, 416404153, 98095025, 115708083, 3379724085, 906566352, ]; static final String stripePublishableKe = String.fromCharCodes( List.generate( _envieddatastripePublishableKe.length, (int i) => i, growable: false, ).map((int i) => _envieddatastripePublishableKe[i] ^ _enviedkeystripePublishableKe[i])); static const List _enviedkeychatGPTkeySefer = [ 1170213883, 1230796405, 2692608690, 586643958, 1444376389, 2665329816, 2520813035, 1892323135, 2615026508, 1821623105, 470915285, 2986511910, 1984021874, 2378608420, 4040076084, 1357339810, 786958546, 2745942755, 3001335999, 3616186175, 4272291956, 1508908783, 4257149852, 2993173190, 3400204933, 1967437533, 1568762336, 2145918089, 4214034336, 1367897060, 3851127028, 3108930351, 1212223174, 2320450111, 1310355215, 2550142673, 77649110, 2799649395, 968869800, 924457208, 4273065543, 845117018, 2884866301, 1074957533, 2383930581, 2489578455, 4022005017, 981527223, 514946709, 90417695, 284556780, 1287050855, 1681773132, 2288410432, 1165774811, 3493773321, 3160030646, 639429337, ]; static const List _envieddatachatGPTkeySefer = [ 1170213761, 1230796306, 2692608671, 586643903, 1444376364, 2665329866, 2520813016, 1892323158, 2615026552, 1821623086, 470915258, 2986511964, 1984021779, 2378608407, 4040076141, 1357339860, 786958522, 2745942677, 3001336029, 3616186118, 4272291846, 1508908725, 4257149943, 2993173239, 3400204998, 1967437540, 1568762296, 2145918203, 4214034392, 1367896963, 3851126945, 3108930410, 1212223222, 2320450131, 1310355255, 2550142651, 77649028, 2799649313, 968869874, 924457098, 4273065487, 845116976, 2884866254, 1074957452, 2383930544, 2489578466, 4022005064, 981527279, 514946757, 90417779, 284556701, 1287050801, 1681773076, 2288410418, 1165774723, 3493773413, 3160030708, 639429301, ]; static final String chatGPTkeySefer = String.fromCharCodes(List.generate( _envieddatachatGPTkeySefer.length, (int i) => i, growable: false, ).map( (int i) => _envieddatachatGPTkeySefer[i] ^ _enviedkeychatGPTkeySefer[i])); static const List _enviedkeyllamaKey = [ 2216994654, 4165720590, 2390816986, 2956800409, 2229394218, 967747776, 94923990, 343817980, 744985647, 3686941901, 1171660115, 3365633231, 4148699480, 3208172736, 1999091990, 521684559, 2316246415, 3823642181, 2869414779, 366505400, 1520105813, 2034625152, 1870663200, 729470607, 3908999355, 4085221290, 1497281490, 3213374705, 3043620130, 2328360698, 3378489523, 3120061209, 3360390810, 1054108641, 3498504396, 914607340, 2038771644, 2528646761, 2396923777, 3146042573, 280186846, 977954549, 995303269, 3809127322, 3447387968, 4210006039, 2032659889, 1067097282, 3998891546, 3195386803, 1828139144, 1327307609, 206086698, 2844558899, 229991343, 2606249556, 3543194086, 1263528290, 1426721303, 1658400226, 3147579068, 3409949773, 1538614711, 2565062690, 2007018161, 1405116349, 448046420, 3360054307, 49411291, 2622305860, 2198106288, 395273829, 1696907761, 3580203004, ]; static const List _envieddatallamaKey = [ 2216994572, 4165720668, 2390817015, 2956800476, 2229394271, 967747769, 94923961, 343817914, 744985707, 3686941848, 1171660069, 3365633193, 4148699402, 3208172676, 1999092052, 521684512, 2316246501, 3823642225, 2869414733, 366505438, 1520105743, 2034625227, 1870663265, 729470715, 3908999408, 4085221344, 1497281505, 3213374599, 3043620173, 2328360631, 3378489483, 3120061268, 3360390894, 1054108630, 3498504442, 914607316, 2038771679, 2528646713, 2396923876, 3146042503, 280186760, 977954498, 995303202, 3809127380, 3447387940, 4210006102, 2032659930, 1067097234, 3998891598, 3195386872, 1828139244, 1327307520, 206086674, 2844558972, 229991371, 2606249529, 3543194079, 1263528204, 1426721315, 1658400133, 3147579099, 3409949706, 1538614726, 2565062763, 2007018116, 1405116410, 448046381, 3360054348, 49411203, 2622305846, 2198106344, 395273737, 1696907699, 3580202896, ]; static final String llamaKey = String.fromCharCodes(List.generate( _envieddatallamaKey.length, (int i) => i, growable: false, ).map((int i) => _envieddatallamaKey[i] ^ _enviedkeyllamaKey[i])); static const List _enviedkeyprivateKeyFCM = [ 737108508, 573120338, 87095031, 3005608619, 2324184303, 319812, 2992299153, 1346659080, 2924955154, 62838611, 2170406324, 2505515809, 3735550956, 3806209478, 3398063631, 4084618736, 1378498819, 3623321480, 1059847717, 656736188, 1833632012, 2992399005, 3804747339, 3613930643, 364610222, 974429030, 1309336034, 1575179458, 589362886, 2939539774, 839258162, 66853677, 1800855274, 989131233, 1213040799, 991279817, 1644643465, 4139169443, 3747969893, 2280084727, 3433754513, 3069250459, 2150388496, 504933718, 1756200000, 1163653455, 1561342080, 957420387, 1499889787, 1738785616, 1142338960, 98655020, 1222420391, 3251658945, 1828673116, 2669757101, 1663890525, 4213198241, 1901515812, 2006237424, 3566990374, 432866887, 1264698320, 3101388361, 2703842830, 2049244912, 3628984175, 1832165781, 4205264615, 4014240891, 969864767, 703341982, 2882946897, 2360807110, 2781536977, 3050041755, 685806492, 1311138729, 3060249574, 1002363991, 1773186186, 850997462, 3999181183, 3970312693, 1035395438, 4109867875, 3639678784, 4268164630, 3408604790, 3354725165, 1327178068, 3339196999, 3402432680, 3411255658, 527910727, 3283055986, 3194268840, 1184094784, 3791630318, 3499230394, 2572662801, 2946226062, 2416566560, 440429692, 3966221448, 4121517506, 4232403026, 634559426, 175875236, 3055100647, 1446238432, 2098346578, 602461515, 1444886775, 435403627, 1988702943, 1905524171, 2737701185, 2042620012, 2832605364, 810205668, 2822943840, 4273478887, 2336637032, 1116549109, 876235429, 4220014655, 4176943484, 976927884, 584017154, 3546447020, 4242171676, 2638608556, 1952394712, 2917757340, 3707210940, 2461337446, 233635531, 1707193000, 2607604006, 4268905770, 3870067046, 3191750736, 2860161726, 346202625, 1644345478, 2250124580, 944391642, 3255524738, 892954419, 1808714419, 1390002373, 587678839, 2218828846, 3374471347, 1141500902, 1838733170, 2966644131, 880245722, 2087597934, 293704416, 978320167, 3978037520, 2180809218, 248819883, 1637697607, 2355943008, 1795956877, 3772518787, 3881755530, 4269727252, 2875576223, 3127537762, 4034453623, 2203270748, 34570445, 2396105344, 571104241, 475073527, 4159175048, 1027140149, 373649624, 1416965627, 504987029, 592068475, 2921450630, 3935163257, 1454349378, 656342480, 754900442, 1182580228, 1128670799, 89676618, 2402432183, 2014451494, 3489468502, 4013501671, 1653974719, 2887167246, 3893150706, 1533169037, 1164736734, 1780892227, 4014216560, 1358147922, 2337430013, 1741844150, 4102090228, 2748631274, 493501955, 1850086195, 1960883912, 3308646063, 38467718, 3028939472, 917717499, 2742103999, 1723815327, 2119841600, 3876374749, 1705086518, 2881525210, 1570309733, 4020838165, 4042003212, 3183612656, 1061776814, 464840108, 2286632549, 1917636967, 24591962, 1176332303, 477225995, 2125512648, 2725072293, 4100958052, 724903694, 2328117473, 763126139, 2374124356, 2956326092, 1671131017, 3720376838, 2502605733, 4144105348, 657115594, 799433316, 4278236939, 769817051, 3428656795, 3593147835, 1412960909, 2453315602, 3669869285, 1496696873, 2426769290, 1026625395, 3651924245, 2279303817, 2686506544, 1087789694, 601636723, 3613706545, 1825740751, 2450074753, 421625639, 1992538740, 895723198, 1259255899, 3722659894, 4013418838, 1562558351, 1632139253, 2991629749, 2273247995, 599051780, 1669649043, 568846846, 1494068229, 2739996413, 2779113522, 779098913, 3619089187, 3385785731, 1519618858, 953641745, 1721296229, 4044107066, 3004078488, 3009551678, 2517659741, 46896549, 2278016083, 647406909, 3288514709, 431566043, 2590570702, 1584893263, 2225661900, 260418302, 3321929698, 119911658, 1690775963, 4150474225, 3566955070, 549546159, 3176775036, 4174765343, 834562569, 15792934, 1553903139, 3210900562, 1589989155, 3760850120, 1094719765, 3518056714, 178402282, 826054878, 3928025223, 2810483389, 2685635791, 2372946117, 1313388299, 3488829322, 2825312391, 2681967164, 2805496622, 4084983424, 2657934618, 2021592252, 2915120957, 2962531015, 1722337676, 1280032280, 2548289251, 171511951, 415022382, 1189000272, 932422039, 3216734072, 341391577, 3047858348, 1651917881, 2277957490, 490984133, 4236650724, 304171102, 65598413, 3558705810, 1971557001, 171398204, 2394745268, 310403285, 2891827010, 1724246465, 2016263904, 3028194727, 1651520282, 3098360562, 3908082798, 1842511364, 2816161470, 3849091953, 2742832395, 790092614, 1390496218, 816088873, 3429482282, 461830516, 3199835900, 3686386062, 3979458454, 1170862496, 1979591381, 3166629024, 2643421316, 893273076, 1872015831, 217186267, 2396243201, 2114500105, 2929432768, 3286322993, 172230515, 3745091746, 2433348965, 2437658089, 280270945, 28997464, 1196313563, 275582724, 3333984396, 4164495252, 1044000849, 333220410, 1650095926, 2490214898, 1724270327, 2827910655, 504243810, 1584872463, 3188419011, 1245166968, 3263494297, 3798399279, 1988345126, 2727316013, 1196129747, 431024879, 1545774225, 4139702023, 374409265, 3588824839, 1492346082, 932072585, 3424993475, 2422754366, 998601680, 2521224794, 1072875324, 1159425289, 737029075, 3650336061, 1303107153, 2039781324, 2856489033, 3623638098, 3845037406, 2946816830, 3927059905, 1845338773, 1231510506, 2933439153, 683918580, 872778124, 2604776366, 1981900781, 3635907945, 1550897010, 3629184493, 1206118436, 3648149673, 727434716, 1602639726, 1780556341, 3850244527, 1323335048, 1108496685, 1157470000, 2772928365, 3452416260, 718494217, 3881102491, 215401665, 3798263247, 1615013368, 4035375785, 900559206, 1568113547, 749008281, 2897102640, 1614058632, 1758876724, 3653676490, 163972223, 882695078, 59167481, 1834379473, 2322546183, 2980393762, 1490232916, 4041737500, 3568989214, 699988833, 971275641, 1742513241, 1682423804, 3878685575, 4216770089, 226208992, 3348458910, 2196695664, 521500134, 4280698849, 1357611769, 3289541888, 3393910430, 2287883831, 4031431574, 2828012877, 3416437096, 121667562, 920735091, 2196578511, 2948310575, 248380011, 3891608726, 2234400771, 1770949553, 252910982, 152768081, 992190982, 4250800032, 1104665650, 1620460112, 910886375, 988589648, 2109982703, 2954961044, 2885572299, 3172494047, 3560837227, 2608909294, 716888483, 2465398108, 1517335489, 3736024899, 2771259711, 2061806890, 1417775752, 2999572845, 29999225, 4177180716, 2514305897, 1440587013, 3165606417, 2277946711, 3147469051, 2251725117, 2992871711, 2476340157, 1126230188, 39175539, 3398671674, 1736606847, 228199498, 2156353508, 26073285, 3799395509, 2325692300, 3791842104, 902520711, 2617319459, 4149280098, 1592411394, 1938317647, 240139609, 768338201, 2082924395, 530812431, 3998049412, 2081467991, 2314487964, 2586281339, 678618197, 2528282136, 451421623, 1097511910, 1917811767, 1394821074, 3613783713, 4020287465, 2271581618, 2092137012, 2084276535, 2554427534, 1800484963, 3233181901, 3031706316, 2720746266, 2758588661, 2813951483, 3907403596, 1207599635, 2169947936, 2378158479, 4117306363, 2977420137, 2226429496, 2243095694, 890007429, 3283153562, 2811967260, 872014127, 3556991083, 2961403593, 2229661479, 2904431980, 3855472067, 1371651097, 2933911223, 2739638134, 2908258650, 1882535407, 2431747602, 3494440069, 3560078145, 2160705027, 44081358, 3748888990, 4092449092, 1623245009, 2338635800, 2572708241, 2954676519, 444147035, 3344052727, 3517469182, 1471233591, 650354967, 3633282511, 4125039770, 2705400548, 1313620863, 3082416307, 3978062965, 279638977, 854836137, 4037337142, 3090453260, 4193697212, 4062362249, 1846808329, 2578093281, 4049164058, 2846163405, 1582371251, 2264731836, 366032606, 590114350, 3999681516, 2376085057, 820850321, 1018267856, 369940615, 3531233325, 4268864790, 3497986315, 2341486448, 4227911824, 2181113229, 1355479127, 2749160717, 3246985925, 3341528965, 2073181213, 699314014, 1199359806, 1884703566, 1550999136, 1482176013, 1300010586, 999931811, 2273329898, 2676099752, 3108976156, 1024613626, 1270967057, 2078640132, 2774447762, 3819528373, 2718802711, 494397542, 2530165843, 1204456198, 123347534, 1750412062, 2496052368, 4139143146, 2882254737, 85720860, 2519613776, 4102714487, 1945156607, 586502618, 2827709244, 2671446606, 3080614560, 584388351, 1498919328, 2296929519, 3086107889, 2976189208, 735158679, 4238520014, 4215975286, 254924375, 3680593173, 1793969614, 210479610, 265149446, 453475021, 3916600565, 2504430318, 115272910, 603683711, 1058652331, 3016477085, 3630690683, 3940171619, 235273795, 2312000813, 1769144434, 1983369480, 1210401977, 774429527, 2735389365, 3451516815, 2697681175, 2873966044, 107771890, 340153891, 3902757494, 3595538682, 1710448917, 789110533, 2226993021, 3853510958, 2412690304, 3867806110, 2133599140, 118636039, 1464073882, 1533404869, 829450745, 1864196201, 2173100295, 2241884490, 2351157253, 947820395, 3437489691, 3975263411, 1471809739, 1798150894, 1305861513, 2932005066, 3352365449, 4068857789, 3126210219, 1856052759, 390543120, 207370740, 2605083184, 148692290, 3652608071, 2309777504, 1201795662, 331100815, 999928362, 1977239666, 1611841523, 725679959, 2725432383, 1962919820, 3833271832, 1197493782, 3887581928, 2346764006, 2707146122, 2277292665, 358692238, 2638816175, 1205487518, 4238210704, 3610245619, 4128009742, 2554570374, 1067956320, 3837039785, 1107712321, 2083151010, 3841744080, 4169811655, 1076138161, 2352889067, 3282931048, 2323101680, 443842367, 2540039222, 2422063034, 1730525519, 2762219325, 3148840983, 3874209774, 196601397, 4074234285, 4062274235, 1880180572, 3875358394, 4013145833, 547311925, 2450684733, 2461043683, 4171289982, 1640138908, 1282371500, 17590684, 1087296399, 469602025, 3623122096, 747793869, 3896203969, 3999952150, 4190926131, 2519459794, 2168164444, 557626550, 880135470, 3187688392, 3813281250, 574556672, 3153433893, 2430581141, 2807013398, 152834970, 2135828491, 502818277, 1130118504, 4202838221, 1789641146, 1467085169, 396223144, 597493763, 1736613021, 1197732685, 836437136, 3465854683, 3700168912, 91762645, 2391202287, 295023822, 2581861205, 449024774, 3001822024, 2466418913, 2872346546, 300481715, 572637303, 1484271709, 726078579, 4039959954, 666631537, 1023898487, 1853351749, 3948710707, 439645115, 979350397, 2222951989, 2589438737, 1937329467, 1501831158, 2316802053, 372631927, 702808879, 3578596427, 2126623624, 2458752824, 591974828, 2339297450, 1288431087, 3134899097, 1829570731, 1748985463, 1532824309, 1262165961, 1620842260, 3834158622, 3207937693, 2620793381, 4217292006, 3277388845, 425428660, 2751160949, 56937876, 2669958664, 184488470, 29417658, 2042579986, 565191942, 4291650434, 3961586806, 1918052443, 2110155068, 4266271406, 1220892870, 2242469591, 3290204425, 724667407, 3770454219, 2387813055, 480452061, 2567603094, 2949949763, 2282276912, 1267200881, 953654159, 4034685237, 1216035564, 1909479177, 1058998664, 1366599365, 1253836179, 1360163121, 2167363261, 3193726845, 1179755768, 3433333284, 773380335, 3567753495, 1576466808, 3739894862, 2045959091, 3999190751, 3100414601, 2926965518, 3258699619, 383894937, 3934726680, 2488205526, 1498264025, 1161227547, 3127776177, 2220619538, 406109899, 2833378383, 2052513668, 1280065426, 2747083647, 1440776597, 363124222, 2717590284, 2092050036, 4211537666, 2081321006, 3920316579, 2554903412, 4234188134, 1395865732, 3656836441, 935516021, 3869038146, 4070759880, 3991091986, 2976518188, 2127252047, 1715179207, 3202801490, 3025431438, 928909809, 1546620296, 3318207810, 1054357827, 1212288271, 3277649527, 3553252595, 3936269711, 3001222140, 3103022786, 4170067321, 1626772232, 3277583984, 1160016141, 4044133250, 4131372905, 66760443, 3630089669, 1635899333, 502492080, 1312728592, 2800543548, 4218566229, 3255613742, 1595941176, 3058111293, 4042640544, 3127660476, 1422193398, 600918209, 2420093446, 4236433793, 747974874, 2886017697, 3114878858, 167931937, 1327836548, 3104741324, 2684527889, 1613037900, 1092139049, 2037389600, 3866448239, 3288595761, 4179522838, 171851053, 3390747309, 1957846235, 23954568, 1558940286, 3034700871, 3415480659, 31874120, 1522582913, 2856359821, 3377785531, 1500505280, 2357411074, 3800478749, 4101318918, 1803104233, 3217189798, 1959035055, 1183090872, 3885183854, 1832623879, 1205759224, 2056117810, 1299363468, 972370045, 2099975250, 4217065998, 4257348043, 418611142, 1655512169, 2417558657, 2909371272, 2656106451, 2715763522, 2079161048, 911449349, 1919205988, 1318085068, 2274121803, 3022121620, 1086658175, 2320667621, 838833674, 1260983287, 3660810140, 3113371403, 1356064041, 3093057820, 4073346200, 1315756395, 686757640, 3121357794, 1236500707, 3765722282, 2652649750, 3709236432, 3540803614, 3817916578, 3883188098, 3953988724, 543859401, 781311165, 2452456487, 2916550976, 2684750456, 892435042, 2949028583, 717754283, 1888475079, 1299906003, 3511116600, 126850201, 1270745562, 2783791148, 986369010, 608139713, 91067219, 1164090762, 457020967, 3861335863, 822290723, 1786969484, 4114107643, 1303132466, 518716490, 3816897171, 1577554041, 2339924357, 2891084300, 4111620052, 3322948639, 1539415787, 1548519233, 3926129564, 696176191, 925185431, 395062940, 3381587935, 3306889576, 899581582, 449788296, 1019594972, 1913865482, 203763988, 1755407500, 61297365, 675631477, 527690561, 1096593511, 2112238977, 787715666, 571860435, 2568655235, 1903106127, 2426624345, 1489747569, 2080869854, 1003709041, 3656976326, 3137952402, 3129839596, 2424355766, 1454318887, 3784378793, 2943475351, 2000379797, 1143833414, 774235851, 4066300097, 98194233, 1878191248, 2867373123, 522169991, 2685739569, 4256716450, 3325187370, 2235760853, 1640310346, 3318246218, 3423908467, 951516825, 2362245957, 3314963287, 4023177333, 381459942, 3542113435, 569408190, 1295185712, 3607258715, 1292661913, 247757194, 987131275, 2552584360, 2636622474, 1860546077, 2494312162, 2782351156, 2896368516, 838382320, 2007823094, 238508444, 2524339566, 2363415013, 2914138234, 3628020394, 956855823, 2261081192, 2228097171, 4177271318, 4158766735, 3572796950, 1430343560, 3441921890, 3454495262, 1182316596, 2269278379, 1077135908, 2953651496, 526971321, 2859895637, 3358886671, 4174772554, 1567842165, 251118008, 670301942, 3825963349, 3042555775, 1426858006, 1471961782, 217889906, 3702626458, 2455552095, 3555365240, 2593708682, 786674689, 402322780, 1874981423, 3407237843, 4114519660, 351189325, 3161005591, 150308336, 1879067335, 134237765, 2879585660, 762142372, 735835325, 1401753103, 398664220, 14875690, 4243747163, 936349311, 2941560796, 1819832225, 3360941066, 2101168559, 3516605739, 3182955717, 233125019, 97945065, 4099904870, 2261675179, 547900100, 2128456938, 2732575461, 87231801, 3385975847, 3482964761, 3121124802, 1597590321, 2958060603, 2312160825, 1250748769, 3020167481, 3371053442, 3126787605, 4053203213, 2924348123, 979929759, 2756455437, 148006320, 3383905452, 600443167, 2403008860, 2978733323, 928489282, 1780947185, 210481903, 323488255, 1615005026, 1406587679, 3950773997, 394274012, 3894535349, 919963673, 3631959377, 3527523437, 1657473608, 386182504, 2937059394, 1321489105, 3741745280, 3920310972, 3696070760, 2261738974, 1952926698, 225802290, 1195348745, 2965761565, 2056518620, 396407764, 956877131, 1875725986, 3097739097, 4101905068, 2699871357, 1413749666, 1109515490, 13462994, 3880381067, 2916419322, 328116183, 226106344, 2081329924, 1535097045, 2564774093, 261153752, 3399688227, 3761551783, 1004728373, 2532161257, 3255250062, 2428018453, 3469426376, 3004436359, 1739930729, 3599610239, 1267828660, 4098765701, 2386215404, 1505123847, 2142089888, 2321182915, 2881932175, 2615077004, 1415862358, 1168026497, 3645446514, 3372125962, 938799889, 1710103627, 255086590, 3674651304, 124795004, 3199066378, 3366934121, 2992417017, 3415524713, 2126893206, 704178108, 2185287323, 682500890, 3868817720, 3396196232, 3965823276, 3045211901, 1440582217, 4124975708, 3663042745, 958722551, 3582803003, 698410183, 1326584168, 883957682, 4041682102, 1483491300, 2209582450, 482929064, 3263992226, 1281004503, 2617265487, 2142447888, 1819676160, 1008729606, 4034822963, 3809141533, 2709813384, 67866807, 1557696127, 3761367730, 3374392519, 346552041, 1703846311, 3218328747, 3001103576, 3412946097, 2399822036, 2694597616, 3997488047, 1218196704, 3414355785, 2436806548, 2017963340, 725408394, 1615692731, 1087814103, 2697424351, 1458392249, 24065513, 1070411251, 447202720, 1571053203, 112625802, 118146864, 2474166716, 2842438865, 3534055229, 67689917, 1515927908, 2734103201, 1751644415, 3909275685, 3384879962, 3666017748, 1692475293, 4217449575, 3963510214, 2609960465, 1773019879, 1740638298, 3079688126, 825059366, 2525582253, 809173383, 2448899203, 2217736624, 2277520791, 1914224962, 829145164, 2188695753, 16465694, 3434611013, 3259469704, 1023650405, 2687217452, 761380722, 2737740268, 1279609669, 917421681, 4101602515, 3805311991, 88690492, 3188616163, 1894076295, 4293155904, 761188336, 1347314708, 2426965027, 1196224288, 2756209073, 3055959203, 689707034, 499604835, 2899737222, 1270153861, 3031332410, 3602089111, 3363204557, 2438482117, 3926141544, 673670532, 1197517520, 2178506629, 1165071025, 3459297880, 2491136398, 2100111560, 2499580939, 3129850684, 1561898561, 4222189335, 2858594911, 2452644462, 564650845, 4241715201, 3050183901, 3429249115, 1744088629, 3505491935, 1210719655, 899473164, 220101518, 2927579979, 2257482708, 3626306094, 2467319906, 2553372897, 2478778089, 1823007988, 365664256, 3933134839, 801172840, 1868036938, 378019419, 1035773600, 3525003728, 1873010767, 2342038560, 3993115804, 3075704627, 3990883732, 2838094948, 2098740841, 305999125, 831587975, 1355628682, 4022023860, 4287347855, 1442429211, 2559972308, 3460099817, 3553454924, 885235272, 3728279493, 1983042396, 1429545122, 913342015, 2367269965, 1544672492, 2388114674, 3250341216, 818693828, 2072485903, 4142497218, 1958958614, 1612361722, 2706445790, 978171912, 2084253816, 958314763, 2592481316, 2043038190, 2170464672, 4221314248, 887093129, 3453655083, 1854155212, 63867747, 116312548, 135403836, 1091665580, 3512840896, 323240053, 2474737633, 3832061396, 1311071742, 1638570649, 2974975999, 1478237231, 2326274480, 914336033, 1169484559, 4012288073, 2942417787, 360693785, 4286096455, 1425575245, 1127870535, 1619231999, 2603112489, 4222012819, 833564180, 330380982, 1779793167, 2025688161, 2561250724, 3393389550, 1048169470, 2471305892, 1174749206, 446098583, 2474897940, 2883114031, 3833127176, 2492943358, 1613051102, 811168361, 2431387582, 3553946610, 1570264805, 3123044116, 3901492289, 3235168185, 3470112902, 1881735798, 1685107906, 3987640058, 3586110152, 963626683, 1969775845, 2759373690, 646389819, 1541048599, 179753707, 1559193915, 2631429993, 2264097382, 526413453, 3415678409, 1512725176, 787218320, 75508960, 346272688, 2089974690, 2322990168, 3668388399, 270007621, 1454966087, 366506235, 4011835820, 4282907384, 962899261, 7953992, 1885674769, 4122477458, 478979518, 1470752794, 5233456, 621787137, 3389803770, 651426711, 1422549806, 960418404, 1888196357, 3380956448, 3068584, 4113639785, 560028865, 2491692851, 3993048966, 1300605056, 3918766673, 2841666712, 3817375337, 1686792805, 3106757569, 1982375920, 3615367808, 827914130, 476813543, 3891456498, 3621439766, 1963144944, 1794052985, 3430537391, 2467825840, 2395936451, 2598868089, 877982392, 882309317, 3944952157, 2433750346, 2918248908, 2553151756, 213845474, 3583080327, 2818841781, 2117778591, 281749132, 1684124194, 2678034393, 452324480, 152633409, 2970659676, 3596194198, 724922234, 1015624469, 1851498348, 267948356, 918220441, 2682008985, 2313014353, 4120956231, 2957427741, 3284133875, 1597303758, 1838259435, 4039263642, 3952562195, 1113742084, 1035117265, 1538807463, 3415876745, 4185266524, 2260658205, 3320051878, 1491398558, 2368326563, 3518122532, 557159606, 188220554, 728450273, 2669937361, 3944084932, 146185271, 3753049809, 654749166, 2548701163, 1492790078, 885159436, 2032180833, 185541083, 1408338135, 4177556901, 2799355718, 1962137425, 4060195839, 3886028009, 3062049221, 3640202633, 2215380570, 2851749466, 1604187894, 3333853758, 3308495490, 3884855944, 1330134302, 3860627584, 1487207126, 972927344, 3338038739, 1450672074, 3540760251, 2266667253, 3100933941, 1873295160, 326309452, 924886925, 862802014, 3215289878, 4164073953, 3139818106, 1910022282, 1288279712, 2990058922, 3800086005, 3739259520, 1659970167, 2420358523, 178844776, 824545594, 3630376942, 2877871673, 2543016416, 3154096241, 2495265942, 4180559181, 2935731231, 2765594424, 1610187670, 3518701025, 4142784444, 3054890357, 112345705, 1324268213, 2409064639, 32964358, 1335035866, 4270370491, 1861361973, 1723022102, 1009151923, 2162047271, 1267993893, 278717373, 1324613848, 3896145043, 934799488, 1513616344, 1207592915, 1971754670, 397023240, 3722562442, 3449169263, 2410482035, 3280773420, 615291146, 206999015, 4265620950, 891352110, 4046806586, 1116027327, 3524593186, 4187321562, 1961121785, 4073733746, 1090056247, 2485658783, 4204201438, 3276672999, 3761441831, 508897925, 1506802514, 1781099422, 653494937, 850676639, 1805005754, 3141555797, 676908582, 1803517501, 2611079747, 1564681518, 2825767216, 3682456965, 73543672, 3773697306, 1874869614, 4288118543, 2264388187, 716261797, 4213906212, 2330637413, 2636008824, 327609223, 3611718407, 3237500828, 2461606882, 1218773841, 3381243615, 3683127091, 180739774, 3540860418, 4210302593, 4255660573, 1101708331, 2275520458, 2956221658, 705091750, 128285119, 348025140, 3015879819, 4294433780, 2283013827, 2872091639, 1995514832, 3898335866, 369231877, 3134065288, 3785352366, 3449195521, 2349342163, 946546054, 1813497194, 171256487, 3632156745, 612524536, 269302038, 1879637666, 3974863517, 1839164500, 1519188293, 749291211, 3859073775, 1920085967, 348345041, 832069339, 2612864119, 1066316368, 2939433048, 4062582254, 1487983609, 117681181, 2292585491, 2035812192, 1057146609, 2115797024, 583238974, 2308649929, 255596716, 843085928, 105840604, 2542246419, 2300356691, 1637936571, 494605222, 862961433, 778282545, 28971885, 2211284115, 273242591, 3381041291, 510866997, 873890165, 1888519834, 1168926363, 2785290841, 1178329596, 475402216, 3152982868, 3322435169, 1126330723, 1966599271, 1984447370, 733013171, 3917577367, 2262567596, 3843711059, 2191985467, 3822513516, 1099306433, 1803887553, 1454209210, 609003286, 3839737322, 4019677114, 3252288430, 776485098, 1531519310, 1455211875, 952129344, 2759034510, 364205245, 1770711601, 951845063, 1215290123, 4084089504, 477941061, 2264074574, 2015479554, 1289454639, 2969428072, 2895626307, 3569496672, 3568383351, 3342545915, 2708719178, 1492005991, 3420172830, 2826721269, 2628372477, 1684037350, 1139606518, 3929018151, 3098455923, 186296217, 1811168242, 2284940997, 3742025144, 2429700032, 1801511958, 1165053060, 2641259009, 3658146352, 1645470446, 1217120055, 1920510494, 3516800778, 3305472259, 2054592050, 4063578358, 593666440, 1076195398, 2860686291, 1087373254, 1281209491, 1433086410, 58552541, 4012745489, 474610793, 709960614, 3960616745, 2635967364, 3050780856, 3121903516, 685939958, 2781278349, 3520536842, 523160525, 3543296627, 1588391733, 3903034586, 824621684, 124080467, 930236687, 3233189258, 2197305320, 699789197, 3696830151, 3011553708, 2829726216, 3622840010, 2127420462, 1200826818, 100174625, 3419024423, 2816514213, 1529054674, 1829765057, 3421549413, 3237053658, 2766857046, 3391000382, 900303648, 739008767, 124496053, 1723628191, 1633988332, 602847449, 2350559786, 1561895414, 98628964, 869557287, 3174432014, 2685076422, 2908904158, 1161633329, 190273391, 3540362039, 2126448741, 2297854532, 1342031747, 2305317969, 3685516741, 2322878667, 355614790, 1785502827, 3636545872, 1548295048, 1645576781, 782791020, 4179603951, 4163928832, 2661881448, 1234070201, 880831587, 2356023557, 2377661565, 2125832884, 2377522010, 3591637257, 928622845, 2253675010, 3153308400, 2383862582, 794868856, 966417220, 1813968216, 2982461149, 2409845479, 2387490767, 1122654867, 3175442033, 2000993418, 725670439, 1192129860, 1132129980, 1745208070, 2391341201, 3041728908, 2159426814, 1302004203, 1617459203, 1911768148, 476777400, 3180606824, 1248616377, 3928566530, 1850108970, 3502869434, 2739220178, 2952410190, 4210146922, 2238360923, 1038610832, 1605495355, 4163727637, 233525315, 1687242609, 3676168878, 740965605, 3346781024, 3363598671, 1069649518, 3663459067, 2771448169, 1018963616, 831487941, 4144016834, 3264560939, 751076954, 639736708, 861511578, 1059871732, 175859367, 811543104, 3661361784, 194965611, 3582278989, 632916676, 3739461337, 864289586, 3820973112, 1913974855, 1657081394, 657192957, 1101023031, 2874327524, 1168278160, 3093754513, 4205829771, 1749005270, 1052060195, 743611671, 3533429521, 3867604030, 4203833123, 323903819, 1070185509, 395653014, 3703661459, 2737722089, 2635756254, 169890506, 194909705, 2509036782, 4002461430, 581790067, 2801365610, 2184894333, 1495813188, 958922075, 4188590836, 3526773797, 4244824144, 3687154895, 1726700272, 3992371074, 2086690336, 1106859089, 3103616298, 3429869385, 861527161, 396196204, 432619913, 2829280502, 2784614857, 1343210775, 2412999924, 3104538665, 2805969251, 1481524270, 1809948259, 1304964239, 981654964, 3054769109, 3099781004, 3529798319, 3794356060, 1653832115, 1800861787, 3845574120, 867500634, 1733599597, 3264188362, 3837798787, 212765050, 3263781488, 1843586422, 2798258489, 179736818, 1333619755, 3465220937, 2098927980, 773090001, 2534516902, 3976028918, 4218099570, 2102132164, 349958245, 1275818492, 3643660222, 2044148648, 4033014278, 1571915587, 278661416, 4202882002, 1091713967, 3043118505, 1942530998, 3983613615, 1773332063, 3847568268, 2204552035, 661684914, 1789474512, 218465177, 4066014252, 4043422341, 466066968, 4285235649, 1362471588, 1459910018, 2048495197, 2292895974, 2287214387, 2467719787, 452202191, 561332838, 1506465554, 2716724265, 1625862669, 2978760393, 1749644375, 1660623568, 3390843917, 2774383551, 1943768826, 2872116418, 4291881297, 56892350, 2020945277, 3541739198, 804365932, 141617903, 3021370095, 3736298791, 2118840600, 1246547929, 3997734469, 3479572, 1671443415, 2847570642, 2438226091, 2772857050, 1966757129, 337494088, 1781021915, 4045923063, 2602228945, 4199435130, 348116742, 2288411135, 243501321, 856775941, 2043385542, 2807031976, 1099293477, 1506043577, 100599652, 1753555786, 530518633, 206163940, 3815848638, 1874846472, 2040312267, 3957908769, 2051469840, 1046873021, 3853268326, 1120770657, 608359198, 3650155525, 562008079, 3379898922, 2057937314, 2829495306, 1352423463, 1424167408, 487002809, 3206903943, 4037813154, 2054021679, 3918180328, 1314532147, 2332954764, 2755650147, 22869110, 2221675638, 529422952, 2216813559, 28460189, 1186371777, 419139358, 3666901497, 2293040387, 1227484898, 238501053, 2556841463, 1617308720, 803025343, 861238697, 119514264, 3229174143, 1987112011, 2865057429, 1112900447, 1407928884, 1900474977, 2768906643, 3671178356, 3970256532, 3057462887, 480340502, 1515289858, 1272730497, 1804059970, 1444028903, 447627905, 3993520546, 3303255701, 1533216601, 3530272608, 3547749415, 4008018797, 2909571964, 753947902, 544210023, 2373393245, 3710608871, 2422318272, 862834386, 2977678954, 1561615415, 877293941, 3376143881, 431649966, 643816384, 4012200797, 1243530181, 2522196700, 1308061688, 2327649160, 3364635784, 987491481, 2296524860, 3998836545, 3061738622, 2301057958, 2451877545, 2318043384, 3528951720, 3624140615, 77896408, 2242427079, 2592857474, 1554274825, 3689357916, 474505634, 3228566628, 3637164040, 242197890, 337516152, 422317770, 2725263333, 2476332659, 2254155961, 3281599173, 2527297814, 326609542, 3597550691, 3066376078, 1629799726, 3578675441, 3368771307, 2480119774, 4096332419, 2242369551, 733301417, 2336079280, 401665740, 46265531, 4106097814, 2010267197, 3626587265, 3530359458, 322636037, 852851961, 4032337673, 3773787547, 1065333391, 3308839744, 2275765169, 3599013970, 580370296, 769904862, 1990798107, 2195415657, 2713394321, 702265631, 754248649, 3753592131, 3297910203, 27447168, 638607870, 4153235966, 1541837747, 2444317264, 3696997815, 1960327965, 3469063468, 2741101681, 2197375464, 1675881674, 990815654, 1461054978, 3412711693, 1722005152, 2413609765, 2173530700, 1683043527, 3885063087, 2809478304, 207231789, 2040851763, 2913636631, 2705415885, 3377000576, 3996186714, 1807884677, 1374228809, 4191831456, 2351813194, 32879892, 898623490, 3536814887, 2238130323, 31776039, 1714925957, 4280395886, 320992657, 69054436, 1328560455, 3710506541, 2326583595, 2637876344, 3013094900, 1875933749, 3109302611, 4250050007, 2071860946, 1604167520, 2504576469, 2885110642, 314140346, 2835907504, 4021924325, 881595382, 2508450728, 3042598433, 3577228499, 3221797486, 316176502, 1612879805, 2047075112, 2160797133, 1776889792, 3403420203, 3485662133, 1375535023, 451062288, 3443563948, 3242854535, 3361300026, 1240080434, 2832104274, 649885340, 852039268, 753656803, 1814387483, 3500678549, 4246459931, 1019193347, 4168437065, 271266176, 3571555013, 1794098201, 3630587046, 1893193944, 543676696, 2922819465, 3605835612, 4259354786, 697495066, 1418050267, 358767164, 3641238744, 2240236069, 1193640740, 2532558438, 3162712899, 1154541657, 2951418312, 4248463261, 540429074, 1271556058, 2466175058, 3967140302, 746486868, 1926230165, 2313857212, 1746481008, 4049771007, 276819718, 1300410526, 858057278, 4159855216, 2007958802, 1458631060, 3011696811, 1237842519, 269825411, 2070571958, 1056523616, 4118799167, 2272898628, 1511813972, 220140022, 2402554623, 2119219342, 652198072, 3132014063, 867028654, 1529211883, 3427379980, 1851848807, 419142561, 3171492047, 3520737863, 3875333620, 3010227615, 3268216433, 1001804898, 2186578344, 1048133228, 999941173, 816741580, 3534386973, 3855162922, 4196200624, 3207822732, 3833859943, 135757702, 3391657400, 763171032, 2287109680, 3871343181, 877732000, 764395419, 439471433, 3796002044, 2793528188, 2392351897, 2035365002, 1223193382, 4129706955, 3036778681, 343996415, 4160658517, 1654591154, 4248047665, 2252070190, 2779121866, 1437154125, 2593929761, 3336273139, 3924543196, 3310087890, 3715870187, 1649871853, 273759252, 319291040, 4213854912, 723208195, 1736008610, 3429417077, 2166018101, 1451128230, 196521758, 3064637844, 1055394271, 1316527796, 2618766203, 4023720373, 4028106986, 1813236080, 4202998799, 1142002362, 2577236163, 4071117031, 902556451, 437864039, 3085657673, 669842288, 1795096631, 2911344726, 2170792561, 2234546397, 2690995763, 2676358759, 709149943, 1012312890, 3849027082, 1466015008, 3679555372, 2136425442, 3068280767, 1604393680, 1271239244, 2165911239, 3212576502, 4119568089, 4212440637, 3509698481, 433244020, 1198689033, 3803012383, 3831485936, 696582326, 1273056213, 4267629071, 1017357420, 1413334459, 3076505173, 3340334389, 2884945686, 2343498209, 186633817, 2376862992, 548323457, 1358195436, 2975710699, 2701493952, 371993266, 3071386261, 2940700998, 3459878016, 3873529290, 891054793, 2767893467, 3096804830, 453580791, 2803055095, 1428970493, 2310757201, 1807480102, 4142520804, 2418197685, 660457580, 3379726443, 1918748089, 3380544713, 805590200, 417915645, 2592658906, 2991229834, 4189616576, 2580956066, 2225901297, 606702186, 1686419986, 3555297525, 1503163476, 1822325093, 1325627042, 467095686, 1450795955, 2379131582, 4097768532, 1897967225, 2230833133, 1655003515, 1528706843, 2311482541, 3254169242, 618321406, 1129751153, 2163467091, 1131242386, 3580752534, 344260348, 1562907382, 2963068076, 1505018536, 2318526962, 3552091401, 1636935726, 2382887536, 4073024494, 604206665, 179337553, 3321588108, 384384652, 2216525144, 770124852, 1445246410, 3736321303, 344573115, 462212969, 4052963802, 3468036091, 1085346189, 2883315614, 3361670333, 1709505992, 3514670, 4133931679, 50927383, 475373344, 2445475375, 4162896623, 234388227, 3571053121, 3171699146, 3597597359, 623509604, 3253962117, 1905698487, 3262720417, 1391758329, 1196498293, 516427586, 3207779051, 1214752339, 4007349164, 2647594653, 1411353718, 1208595518, 2101685446, 1149330900, 963947695, 4131359946, 2690099763, 3413659715, 3204312604, 2445693581, 2260843692, 3167366059, 3653061237, 3254204110, 239819133, 2699859773, 4223884450, 1146977759, 991186934, 2364443582, 1316158362, 2418505597, 1820234209, 3287888021, 1018316196, 1868021467, 663786682, 848938475, 3244248876, 1012591774, 3103336081, 3575307952, 1659916481, 1131078749, 1987856229, 1724042654, 899857000, 1915782124, 1627955056, 2992643328, 2104408461, 1524318379, 984348781, 159697712, 34614736, 3645806616, 1627676776, 3109228302, 1370554154, 2040434315, 1553910911, 1026540458, 3867928459, 431000418, 152448043, 691960367, 4289891560, 1244496521, 1377202318, 3895899651, 2171093566, 1561992988, 2252110915, 1445096217, 754104836, 3619386089, 4050441378, 1185348651, 2627412500, 1407362265, 1298068069, 1430755464, 3844479895, 3618517022, 59736412, 552100264, 1115491274, 3654244247, 2173460403, 87368796, 15996738, 2475381667, 340016539, 2175403706, 4287126893, 3678850389, 1521285129, 3352740003, 431171835, 1917217131, 4121275216, 2395517170, 2907776642, 2660073619, 3305497766, 432211443, 1044661636, 4197390238, 2989717750, 3219938265, 1660173246, 1875513833, 3160138064, 1114180220, 1900942382, 2570014103, 24250575, 1793405122, 3135775104, 3691054363, 1788205993, 3020995842, 2777266347, 205746810, 3201465979, 3063789352, 3389233479, 271265688, 2424812677, 98503380, 78210431, 292284637, 484041607, 1787870899, 3590556653, 909930309, 3100227788, 3184061217, 2849511009, 4245099983, 4114171783, 912316613, 317027273, 2009246575, 2384701120, 4122715074, 3875346911, 942301007, 2733181543, 3989143902, 3592896189, 3414269848, 1576595578, 1232805803, 1325884808, 3728880276, 1830083556, 2629986692, 2504078327, 3144670934, 791765512, 3973341621, 727510202, 4124368023, 3483950645, 1873797351, 2232106889, 3290136317, 1671952923, 2602619349, 4279386338, 3213227055, 1133211744, 1346700000, 2482375216, 3120611154, 1382571007, 1392782475, 3601732108, 3556657898, 950094521, 309672136, 967236171, 1920432479, 4223184050, 52721480, 673995073, 2699926917, 709861124, 2067789480, 1883200737, 1801477455, 4141002550, 3228364895, 1983198415, 857706243, 2332825183, 4099244372, 2432098977, 2290443223, 2718865077, 2363532398, 353871707, 796248592, 3974305086, 3668153167, 3010220886, 2959066356, 3208768709, 2548031705, 3959972152, 3891484091, 1395441026, 1327188347, 2212970376, 104935482, 3907210745, 3979836769, 1561382556, 3948002582, 539174856, 3413985039, 1973453152, 3266894197, 3042039942, 3032792760, 2180991686, 4030410608, 3197502960, 2835948083, 516998978, 1663960567, 2267681531, 3353519247, 3822351886, 3257728881, 3696655968, 3335053992, 198379156, 1696585017, 3772977781, 3065480492, 2650933604, 1785757241, 3072962718, 4076518835, 148543993, 1352493878, 3427072025, 188342029, 3894678808, 4088737782, 3372313219, 3898295289, 3876976471, 4127834099, 420249418, 482409197, 3461256983, 3269303517, 2096686210, 690023618, 3839651000, 3364817826, 2369252370, 2103265256, 2910720334, 3109060832, 1467810115, 3251904271, 2354897991, 2142098206, 2204140353, 1742026742, 348325637, 2641698184, 877361616, 3661595675, 2821896091, 2676446548, 2486102911, 3130861206, 2322539475, 4064710158, 643945898, 789074879, 3220302062, 2585312561, 2766178036, 2144322290, 564971392, 1673385042, 2687000568, 1521458096, 1145728595, 1322176305, 1723255860, 2145650441, 629297718, 384473330, 218873679, 2716275836, 2903058153, 140212026, 2845868426, 3150674569, 3645483047, 137186379, 955484067, 2630986851, 2911774269, 1245825734, 2768219185, 3021370275, 457212471, 2193682090, 2336342758, 2681588123, 2026845002, 1842827079, 2441577285, 4065238976, 4059717959, 1630822024, 3375028927, 1697093999, 2055417175, 4109915499, 3942456819, 2683613011, 1774765807, 3082184868, 4100697789, 3298111565, 850022871, 2526040909, 3499006157, 785798133, 3015464099, 2431506293, 183695631, 2978011915, 2439793236, 1056650966, 1850520063, 191087962, 3382518053, 119623700, 1080030572, 2228599724, 2615684184, 1654047832, 965690922, 3349645992, 3575792007, 2805409655, 4276231298, 3400998476, 3994695711, 1518430905, 2194813207, 3438408598, 2398095237, 668507232, 1514840721, 2281009251, 659163436, 2373796001, 338144178, 1268347232, 1713458683, 151107739, 256716674, 2859653652, 3405980334, 486546124, 1584119571, 2597514969, 1468507195, 2000577736, 1843808045, 1988265849, 1026376241, 3277345568, 2678166464, 696164723, 3030809616, 3302361850, 2422323485, 936466401, 985571383, 1928548543, 827494749, 1670498593, 3418529383, 1163435623, 3716546717, 1735276449, 3909999989, 3682056837, 1420416230, 1172221989, 1189979089, 2180173803, 1337511419, 1981310147, 2745057916, 2311566543, 863237347, 1156374074, 3158497072, 3209643625, 4280019240, 632432014, 473685650, 481475417, 1791620933, 3733485419, 183631936, 1152014001, 210005650, 1546343676, 2672416368, 842247511, 3931493036, 46628612, 3955907689, 3226700419, 109755983, 2697267694, 71378308, 3654160173, 1323910007, 3041013517, 2102236205, 3264224022, 2497052598, 1482332770, 2755593383, 1647613701, 1079841219, 3898622647, 382553371, 1070663631, 3453507166, 3222582762, 2338624790, 874037591, 3363659527, 4081838842, 2035791334, 914705757, 2252036853, 348342028, 2273729455, 1998981920, 1550771241, 1989761566, 496642953, 269017530, 3396188728, 2632336744, 946110016, 3418015478, 3346831221, 2438544059, 591279900, 4114795117, 2370717586, 4095897209, 576788505, 3634120340, 2919133009, 245561815, 957213667, 1292236995, 2491904620, 2815239179, 3923024807, 1695656778, 4105132125, 2586670745, 485134428, 1054405090, 2674237313, 1776216389, 155456865, 700137022, 1084647028, 1539957484, 1554266451, 2879174926, ]; static const List _envieddataprivateKeyFCM = [ 737108555, 573120264, 87094948, 3005608675, 2324184216, 319752, 2992299204, 1346659142, 2924955227, 62838652, 2170406339, 2505515853, 3735550869, 3806209418, 3398063706, 4084618633, 1378498890, 3623321554, 1059847789, 656736229, 1833632106, 2992399026, 3804747323, 3613930740, 364610273, 974428937, 1309336020, 1575179400, 589362844, 2939539790, 839258206, 66853753, 1800855227, 989131152, 1213040852, 991279746, 1644643515, 4139169515, 3747969839, 2280084634, 3433754596, 3069250504, 2150388570, 504933757, 1756199986, 1163653499, 1561342153, 957420314, 1499889692, 1738785578, 1142339007, 98655099, 1222420364, 3251658993, 1828673135, 2669757144, 1663890459, 4213198321, 1901515874, 2006237347, 3566990354, 432866862, 1264698268, 3101388351, 2703842874, 2049244849, 3628984102, 1832165856, 4205264573, 4014240846, 969864724, 703342057, 2882946839, 2360807044, 2781536917, 3050041806, 685806501, 1311138766, 3060249472, 1002364005, 1773186238, 850997478, 3999181081, 3970312594, 1035395332, 4109867787, 3639678762, 4268164700, 3408604689, 3354725212, 1327178085, 3339196965, 3402432735, 3411255555, 527910672, 3283055942, 3194268924, 1184094770, 3791630210, 3499230446, 2572662905, 2946226106, 2416566649, 440429588, 3966221517, 4121517494, 4232402970, 634559400, 175875277, 3055100599, 1446238388, 2098346512, 602461448, 1444886686, 435403534, 1988702899, 1905524156, 2737701128, 2042619919, 2832605421, 810205602, 2822943762, 4273478799, 2336636954, 1116549017, 876235489, 4220014603, 4176943364, 976927936, 584017238, 3546447076, 4242171725, 2638608623, 1952394720, 2917757434, 3707210969, 2461337397, 233635473, 1707193053, 2607604092, 4268905758, 3870066962, 3191750755, 2860161737, 346202715, 1644345551, 2250124663, 944391560, 3255524836, 892954434, 1808714457, 1390002352, 587678782, 2218828887, 3374471366, 1141500883, 1838733130, 2966644186, 880245682, 2087597865, 293704405, 978320239, 3978037542, 2180809270, 248819961, 1637697582, 2355942918, 1795956975, 3772518855, 3881755583, 4269727345, 2875576313, 3127537672, 4034453517, 2203270681, 34570491, 2396105419, 571104187, 475073460, 4159175137, 1027140163, 373649584, 1416965554, 504987109, 592068387, 2921450725, 3935163186, 1454349431, 656342459, 754900459, 1182580336, 1128670844, 89676664, 2402432219, 2014451563, 3489468472, 4013501579, 1653974771, 2887167301, 3893150600, 1533169117, 1164736693, 1780892176, 4014216449, 1358147845, 2337429967, 1741844172, 4102090138, 2748631209, 493502043, 1850086250, 1960883872, 3308646141, 38467784, 3028939423, 917717418, 2742104058, 1723815379, 2119841643, 3876374702, 1705086583, 2881525174, 1570309641, 4020838264, 4042003293, 3183612606, 1061776862, 464840164, 2286632499, 1917636894, 24591981, 1176332355, 477226058, 2125512623, 2725072343, 4100958044, 724903740, 2328117464, 763126065, 2374124328, 2956326137, 1671131080, 3720376937, 2502605792, 4144105457, 657115522, 799433225, 4278237010, 769817022, 3428656894, 3593147896, 1412960961, 2453315677, 3669869228, 1496696915, 2426769372, 1026625350, 3651924346, 2279303876, 2686506580, 1087789622, 601636611, 3613706592, 1825740680, 2450074821, 421625699, 1992538677, 895723231, 1259255836, 3722659869, 4013418804, 1562558432, 1632139212, 2991629804, 2273247903, 599051877, 1669649063, 568846736, 1494068278, 2739996334, 2779113475, 779098991, 3619089275, 3385785805, 1519618923, 953641830, 1721296176, 4044107017, 3004078576, 3009551622, 2517659688, 46896626, 2278016032, 647406949, 3288514804, 431565978, 2590570630, 1584893212, 2225661949, 260418195, 3321929609, 119911565, 1690776057, 4150474181, 3566955015, 549546116, 3176774939, 4174765387, 834562627, 15793015, 1553903215, 3210900532, 1589989195, 3760850106, 1094719853, 3518056814, 178402176, 826054892, 3928025325, 2810483442, 2685635719, 2372946055, 1313388345, 3488829378, 2825312486, 2681967209, 2805496687, 4084983479, 2657934675, 2021592261, 2915120964, 2962530999, 1722337754, 1280032320, 2548289207, 171512011, 415022427, 1189000213, 932422093, 3216733954, 341391488, 3047858398, 1651917920, 2277957377, 490984170, 4236650703, 304171047, 65598342, 3558705824, 1971557057, 171398218, 2394745305, 310403219, 2891826990, 1724246437, 2016263887, 3028194785, 1651520363, 3098360454, 3908082777, 1842511466, 2816161498, 3849091878, 2742832506, 790092579, 1390496180, 816088911, 3429482310, 461830464, 3199835821, 3686386171, 3979458464, 1170862475, 1979591335, 3166629007, 2643421390, 893272993, 1872015762, 217186195, 2396243305, 2114500200, 2929432711, 3286323068, 172230453, 3745091820, 2433348878, 2437657984, 280270882, 28997424, 1196313517, 275582832, 3333984474, 4164495324, 1044000827, 333220470, 1650095998, 2490214838, 1724270264, 2827910589, 504243733, 1584872504, 3188418969, 1245166858, 3263494381, 3798399298, 1988345107, 2727316038, 1196129687, 431024789, 1545774310, 4139702133, 374409287, 3588824958, 1492345984, 932072650, 3424993429, 2422754404, 998601603, 2521224744, 1072875366, 1159425352, 737029028, 3650336119, 1303107111, 2039781305, 2856489005, 3623638022, 3845037417, 2946816859, 3927059867, 1845338879, 1231510456, 2933439197, 683918509, 872778238, 2604776394, 1981900672, 3635907931, 1550896897, 3629184454, 1206118482, 3648149660, 727434637, 1602639706, 1780556354, 3850244601, 1323335145, 1108496724, 1157470066, 2772928286, 3452416360, 718494283, 3881102540, 215401713, 3798263293, 1615013299, 4035375869, 900559177, 1568113629, 749008363, 2897102696, 1614058690, 1758876743, 3653676479, 163972143, 882695148, 59167410, 1834379429, 2322546254, 2980393749, 1490232888, 4041737518, 3568989300, 699988777, 971275523, 1742513168, 1682423722, 3878685617, 4216770148, 226208976, 3348458984, 2196695581, 521500075, 4280698809, 1357611692, 3289541944, 3393910508, 2287883867, 4031431671, 2828012837, 3416437082, 121667469, 920735008, 2196578457, 2948310595, 248379986, 3891608780, 2234400859, 1770949513, 252911083, 152768029, 992191102, 4250800067, 1104665699, 1620460093, 910886352, 988589625, 2109982648, 2954961142, 2885572231, 3172493990, 3560837180, 2608909238, 716888467, 2465398031, 1517335541, 3736024875, 2771259734, 2061806930, 1417775846, 2999572746, 29999118, 4177180703, 2514305831, 1440587054, 3165606523, 2277946720, 3147468940, 2251725137, 2992871787, 2476340220, 1126230228, 39175466, 3398671701, 1736606747, 228199468, 2156353423, 26073222, 3799395537, 2325692358, 3791842130, 902520759, 2617319521, 4149280006, 1592411495, 1938317575, 240139625, 768338243, 2082924328, 530812492, 3998049487, 2081467963, 2314488062, 2586281274, 678618139, 2528282219, 451421596, 1097511818, 1917811814, 1394821044, 3613783700, 4020287361, 2271581691, 2092137038, 2084276573, 2554427621, 1800484896, 3233181946, 3031706270, 2720746361, 2758588582, 2813951384, 3907403646, 1207599723, 2169948018, 2378158561, 4117306294, 2977420039, 2226429449, 2243095779, 890007526, 3283153635, 2811967341, 872014202, 3556990983, 2961403522, 2229661463, 2904431918, 3855472042, 1371651191, 2933911262, 2739638053, 2908258621, 1882535341, 2431747649, 3494440172, 3560078137, 2160705095, 44081405, 3748889044, 4092449056, 1623244961, 2338635871, 2572708265, 2954676594, 444146959, 3344052658, 3517469095, 1471233634, 650354978, 3633282465, 4125039868, 2705400496, 1313620777, 3082416343, 3978062866, 279638962, 854836177, 4037337117, 3090453354, 4193697247, 4062362367, 1846808419, 2578093188, 4049164079, 2846163337, 1582371295, 2264731859, 366032561, 590114328, 3999681430, 2376085027, 820850429, 1018267803, 369940709, 3531233380, 4268864832, 3497986401, 2341486357, 4227911848, 2181113339, 1355479103, 2749160760, 3246985864, 3341529046, 2073181275, 699313972, 1199359859, 1884703612, 1550999065, 1482176127, 1300010606, 999931853, 2273329829, 2676099800, 3108976254, 1024613547, 1270967140, 2078640189, 2774447783, 3819528387, 2718802776, 494397489, 2530165884, 1204456300, 123347485, 1750412103, 2496052421, 4139143040, 2882254844, 85720878, 2519613703, 4102714416, 1945156495, 586502570, 2827709311, 2671446563, 3080614608, 584388285, 1498919414, 2296929430, 3086107814, 2976189249, 735158768, 4238519970, 4215975174, 254924387, 3680593236, 1793969570, 210479508, 265149553, 453474953, 3916600507, 2504430248, 115272834, 603683663, 1058652314, 3016477165, 3630690632, 3940171529, 235273778, 2312000774, 1769144387, 1983369553, 1210402000, 774429487, 2735389413, 3451516891, 2697681229, 2873966006, 107771804, 340153939, 3902757442, 3595538616, 1710449016, 789110577, 2226992933, 3853511017, 2412690409, 3867806169, 2133599213, 118636114, 1464073972, 1533404840, 829450643, 1864196139, 2173100386, 2241884425, 2351157300, 947820371, 3437489752, 3975263458, 1471809790, 1798150877, 1305861627, 2932005037, 3352365474, 4068857820, 3126210300, 1856052833, 390543189, 207370691, 2605083237, 148692270, 3652608008, 2309777453, 1201795645, 331100896, 999928387, 1977239552, 1611841428, 725679874, 2725432334, 1962919893, 3833271859, 1197493858, 3887581865, 2346763934, 2707146224, 2277292571, 358692342, 2638816152, 1205487530, 4238210792, 3610245511, 4128009815, 2554570464, 1067956231, 3837039847, 1107712299, 2083151043, 3841744038, 4169811646, 1076138229, 2352889024, 3282930991, 2323101572, 443842410, 2540039265, 2422063057, 1730525440, 2762219367, 3148841031, 3874209690, 196601470, 4074234366, 4062274287, 1880180537, 3875358440, 4013145794, 547311877, 2450684744, 2461043617, 4171289868, 1640139002, 1282371576, 17590777, 1087296487, 469601967, 3623122171, 747793919, 3896204021, 3999952199, 4190926154, 2519459746, 2168164364, 557626499, 880135521, 3187688348, 3813281233, 574556772, 3153433975, 2430581239, 2807013463, 152835053, 2135828569, 502818227, 1130118406, 4202838184, 1789641155, 1467085090, 396223212, 597493833, 1736613074, 1197732669, 836437235, 3465854602, 3700168849, 91762668, 2391202199, 295023772, 2581861168, 449024863, 3001822008, 2466418859, 2872346581, 300481756, 572637216, 1484271727, 726078538, 4039960021, 666631435, 1023898425, 1853351689, 3948710781, 439645173, 979350290, 2222952048, 2589438790, 1937329424, 1501831104, 2316802096, 372631871, 702808934, 3578596410, 2126623697, 2458752873, 591974811, 2339297533, 1288430980, 3134899151, 1829570753, 1748985415, 1532824239, 1262166008, 1620842274, 3834158663, 3207937746, 2620793416, 4217291911, 3277388802, 425428707, 2751160861, 56937926, 2669958716, 184488539, 29417705, 2042580058, 565192017, 4291650546, 3961586745, 1918052406, 2110155085, 4266271446, 1220892816, 2242469526, 3290204496, 724667456, 3770454200, 2387813112, 480452013, 2567603148, 2949949748, 2282276873, 1267200800, 953654241, 4034685286, 1216035486, 1909479248, 1058998695, 1366599302, 1253836245, 1360163199, 2167363205, 3193726728, 1179755699, 3433333324, 773380278, 3567753543, 1576466747, 3739894906, 2045959137, 3999190680, 3100414662, 2926965568, 3258699563, 383895028, 3934726771, 2488205539, 1498263962, 1161227595, 3127776129, 2220619616, 406109855, 2833378305, 2052513733, 1280065442, 2747083532, 1440776684, 363124108, 2717590350, 2092049959, 4211537714, 2081321078, 3920316659, 2554903346, 4234188053, 1395865806, 3656836449, 935515907, 3869038122, 4070759855, 3991092056, 2976518209, 2127251981, 1715179253, 3202801445, 3025431524, 928909732, 1546620411, 3318207862, 1054357877, 1212288326, 3277649459, 3553252523, 3936269754, 3001222024, 3103022724, 4170067211, 1626772333, 3277583907, 1160016186, 4044133363, 4131372893, 66760346, 3630089661, 1635899318, 502492159, 1312728643, 2800543556, 4218566159, 3255613795, 1595941231, 3058111342, 4042640625, 3127660496, 1422193316, 600918153, 2420093541, 4236433913, 747974793, 2886017733, 3114878973, 167932007, 1327836626, 3104741261, 2684527988, 1613037884, 1092139115, 2037389673, 3866448137, 3288595806, 4179522897, 171851130, 3390747365, 1957846152, 23954653, 1558940179, 3034700802, 3415480675, 31874107, 1522583033, 2856359933, 3377785544, 1500505274, 2357411113, 3800478840, 4101319025, 1803104170, 3217189826, 1959035126, 1183090892, 3885183796, 1832623989, 1205759151, 2056117867, 1299363529, 972369997, 2099975224, 4217066105, 4257347982, 418611127, 1655512064, 2417558741, 2909371361, 2656106392, 2715763472, 2079161065, 911449416, 1919205968, 1318085028, 2274121787, 3022121722, 1086658118, 2320667573, 838833723, 1260983194, 3660810197, 3113371451, 1356064106, 3093057876, 4073346282, 1315756290, 686757694, 3121357719, 1236500657, 3765722367, 2652649807, 3709236450, 3540803671, 3817916623, 3883188154, 3953988674, 543859362, 781311176, 2452456546, 2916550919, 2684750393, 892435031, 2949028512, 717754350, 1888475134, 1299905926, 3511116554, 126850209, 1270745581, 2783791198, 986368957, 608139700, 91067185, 1164090844, 457021028, 3861335889, 822290784, 1786969511, 4114107570, 1303132490, 518716447, 3816897191, 1577553935, 2339924426, 2891084386, 4111619994, 3322948726, 1539415771, 1548519284, 3926129658, 696176241, 925185443, 395063024, 3381587861, 3306889501, 899581690, 449788396, 1019594884, 1913865568, 203764067, 1755407593, 61297309, 675631419, 527690614, 1096593451, 2112239024, 787715592, 571860377, 2568655287, 1903106055, 2426624361, 1489747504, 2080869805, 1003708983, 3656976288, 3137952481, 3129839572, 2424355815, 1454318868, 3784378849, 2943475396, 2000379869, 1143833357, 774235817, 4066300079, 98194188, 1878191325, 2867373079, 522170061, 2685739620, 4256716494, 3325187436, 2235760871, 1640310328, 3318246182, 3423908379, 951516887, 2362245930, 3314963258, 4023177272, 381459850, 3542113495, 569408244, 1295185758, 3607258633, 1292661995, 247757262, 987131377, 2552584433, 2636622563, 1860546126, 2494312104, 2782351106, 2896368627, 838382265, 2007822996, 238508510, 2524339510, 2363414943, 2914138158, 3628020370, 956855911, 2261081178, 2228097184, 4177271361, 4158766807, 3572796998, 1430343621, 3441921836, 3454495340, 1182316640, 2269278400, 1077135942, 2953651520, 526971265, 2859895554, 3358886756, 4174772506, 1567842048, 251118047, 670301875, 3825963269, 3042555661, 1426858086, 1471961734, 217889854, 3702626510, 2455552038, 3555365170, 2593708739, 786674739, 402322731, 1874981466, 3407237793, 4114519593, 351189285, 3161005695, 150308256, 1879067278, 134237737, 2879585549, 762142446, 735835338, 1401753161, 398664319, 14875738, 4243747121, 936349225, 2941560714, 1819832274, 3360941134, 2101168578, 3516605805, 3182955662, 233125110, 97945021, 4099904791, 2261675238, 547900065, 2128456845, 2732575407, 87231818, 3385975885, 3482964768, 3121124737, 1597590281, 2958060624, 2312160881, 1250748680, 3020167489, 3371053523, 3126787642, 4053203302, 2924348066, 979929803, 2756455485, 148006385, 3383905496, 600443214, 2403008879, 2978733434, 928489238, 1780947111, 210481815, 323488152, 1615004970, 1406587727, 3950773954, 394274021, 3894535387, 919963745, 3631959336, 3527523352, 1657473583, 386182404, 2937059348, 1321489067, 3741745380, 3920311001, 3696070674, 2261738927, 1952926598, 225802352, 1195348793, 2965761572, 2056518565, 396407707, 956877089, 1875726068, 3097739063, 4101905117, 2699871314, 1413749722, 1109515447, 13463033, 3880381157, 2916419220, 328116099, 226106256, 2081329974, 1535096967, 2564774037, 261153761, 3399688211, 3761551851, 1004728389, 2532161167, 3255250111, 2428018476, 3469426426, 3004436419, 1739930715, 3599610188, 1267828678, 4098765782, 2386215322, 1505123955, 2142089942, 2321182885, 2881932232, 2615077048, 1415862298, 1168026560, 3645446401, 3372126008, 938799975, 1710103591, 255086481, 3674651363, 124794896, 3199066464, 3366934050, 2992416958, 3415524697, 2126893295, 704178165, 2185287388, 682500980, 3868817740, 3396196302, 3965823334, 3045211807, 1440582176, 4124975671, 3663042810, 958722436, 3582803021, 698410230, 1326584074, 883957731, 4041682128, 1483491260, 2209582341, 482929097, 3263992214, 1281004468, 2617265431, 2142447986, 1819676214, 1008729704, 4034823002, 3809141622, 2709813499, 67866755, 1557696009, 3761367685, 3374392494, 346551963, 1703846372, 3218328769, 3001103508, 3412946123, 2399821969, 2694597508, 3997488086, 1218196649, 3414355725, 2436806638, 2017963302, 725408467, 1615692762, 1087814070, 2697424268, 1458392307, 24065418, 1070411203, 447202759, 1571053280, 112625852, 118146825, 2474166728, 2842438824, 3534055240, 67689936, 1515927843, 2734103185, 1751644317, 3909275718, 3384879981, 3666017685, 1692475383, 4217449517, 3963510183, 2609960485, 1773019814, 1740638252, 3079688140, 825059426, 2525582297, 809173441, 2448899296, 2217736664, 2277520857, 1914225008, 829145121, 2188695792, 16465742, 3434610973, 3259469775, 1023650339, 2687217475, 761380669, 2737740196, 1279609606, 917421633, 4101602486, 3805311923, 88690545, 3188616082, 1894076385, 4293155841, 761188286, 1347314807, 2426965009, 1196224374, 2756209099, 3055959255, 689707129, 499604794, 2899737322, 1270153923, 3031332479, 3602089178, 3363204485, 2438482165, 3926141486, 673670644, 1197517567, 2178506707, 1165071042, 3459297809, 2491136507, 2100111521, 2499581023, 3129850739, 1561898514, 4222189406, 2858594918, 2452644410, 564650798, 4241715299, 3050183909, 3429249068, 1744088671, 3505491853, 1210719691, 899473278, 220101611, 2927579964, 2257482725, 3626306077, 2467319847, 2553372816, 2478778046, 1823007905, 365664344, 3933134777, 801172828, 1868036978, 378019368, 1035773650, 3525003654, 1873010695, 2342038593, 3993115866, 3075704661, 3990883821, 2838094908, 2098740796, 305999190, 831588069, 1355628761, 4022023876, 4287347946, 1442429310, 2559972280, 3460099719, 3553454909, 885235211, 3728279456, 1983042414, 1429545107, 913342074, 2367269946, 1544672427, 2388114621, 3250341136, 818693794, 2072485992, 4142497203, 1958958705, 1612361647, 2706445757, 978172029, 2084253783, 958314814, 2592481395, 2043038090, 2170464724, 4221314193, 887093185, 3453655040, 1854155177, 63867732, 116312482, 135403788, 1091665654, 3512840947, 323239949, 2474737557, 3832061314, 1311071688, 1638570741, 2974975909, 1478237281, 2326274497, 914336119, 1169484600, 4012288036, 2942417708, 360693824, 4286096434, 1425575220, 1127870526, 1619231897, 2603112464, 4222012880, 833564205, 330381030, 1779793273, 2025688072, 2561250786, 3393389446, 1048169422, 2471305982, 1174749267, 446098644, 2474898015, 2883114103, 3833127265, 2492943240, 1613051065, 811168351, 2431387592, 3553946496, 1570264757, 3123044128, 3901492273, 3235168200, 3470112962, 1881735717, 1685107892, 3987639951, 3586110141, 963626636, 1969775836, 2759373600, 646389840, 1541048645, 179753691, 1559193946, 2631429949, 2264097280, 526413497, 3415678458, 1512725238, 787218368, 75508886, 346272759, 2089974768, 2322990097, 3668388454, 270007575, 1454966129, 366506163, 4011835854, 4282907282, 962899273, 7954019, 1885674844, 4122477537, 478979543, 1470752809, 5233523, 621787210, 3389803657, 651426757, 1422549826, 960418344, 1888196471, 3380956526, 3068560, 4113639706, 560028850, 2491692895, 3993049086, 1300605126, 3918766647, 2841666778, 3817375325, 1686792767, 3106757528, 1982375808, 3615367889, 827914225, 476813472, 3891456415, 3621439826, 1963144840, 1794052909, 3430537419, 2467825792, 2395936437, 2598867983, 877982422, 882309284, 3944952111, 2433750316, 2918248889, 2553151804, 213845383, 3583080445, 2818841807, 2117778602, 281749195, 1684124279, 2678034413, 452324545, 152633369, 2970659613, 3596194213, 724922175, 1015624567, 1851498328, 267948342, 918220480, 2682009085, 2313014320, 4120956200, 2957427807, 3284133824, 1597303683, 1838259385, 4039263714, 3952562277, 1113742182, 1035117187, 1538807521, 3415876774, 4185266542, 2260658259, 3320051947, 1491398650, 2368326610, 3518122566, 557159581, 188220615, 728450260, 2669937336, 3944084884, 146185315, 3753049735, 654749065, 2548701113, 1492790116, 885159483, 2032180759, 185541046, 1408338067, 4177556950, 2799355663, 1962137406, 4060195736, 3886027932, 3062049265, 3640202694, 2215380590, 2851749425, 1604187793, 3333853774, 3308495579, 3884856006, 1330134388, 3860627664, 1487207059, 972927298, 3338038673, 1450672124, 3540760205, 2266667172, 3100933967, 1873295127, 326309391, 924887023, 862801932, 3215289951, 4164073943, 3139818041, 1910022355, 1288279782, 2990058987, 3800085915, 3739259590, 1659970116, 2420358414, 178844699, 824545649, 3630376836, 2877871703, 2543016366, 3154096157, 2495265967, 4180559142, 2935731242, 2765594458, 1610187728, 3518700973, 4142784388, 3054890257, 112345695, 1324268237, 2409064596, 32964419, 1335035797, 4270370529, 1861362004, 1723022158, 1009151966, 2162047253, 1267993927, 278717415, 1324613808, 3896145118, 934799564, 1513616365, 1207592856, 1971754625, 397023271, 3722562558, 3449169197, 2410481985, 3280773496, 615291257, 206998944, 4265620922, 891352091, 4046806648, 1116027336, 3524593173, 4187321513, 1961121719, 4073733653, 1090056272, 2485658844, 4204201451, 3276672977, 3761441900, 508898036, 1506802461, 1781099483, 653494998, 850676728, 1805005708, 3141555714, 676908616, 1803517561, 2611079690, 1564681537, 2825767241, 3682457009, 73543606, 3773697376, 1874869524, 4288118598, 2264388150, 716261825, 4213906204, 2330637356, 2636008765, 327609318, 3611718506, 3237500905, 2461606840, 1218773813, 3381243572, 3683127130, 180739807, 3540860515, 4210302675, 4255660657, 1101708307, 2275520481, 2956221685, 705091830, 128285068, 348025209, 3015879921, 4294433759, 2283013793, 2872091588, 1995514850, 3898335823, 369231982, 3134065362, 3785352404, 3449195584, 2349342137, 946546100, 1813497103, 171256456, 3632156796, 612524446, 269302131, 1879637754, 3974863602, 1839164449, 1519188277, 749291251, 3859073721, 1920085984, 348344985, 832069359, 2612864018, 1066316340, 2939432977, 4062582173, 1487983536, 117681242, 2292585590, 2035812137, 1057146523, 2115797096, 583239024, 2308649916, 255596793, 843085891, 105840563, 2542246503, 2300356633, 1637936515, 494605290, 862961480, 778282504, 28971816, 2211284221, 273242514, 3381041357, 510867058, 873890068, 1888519872, 1168926461, 2785290802, 1178329493, 475402122, 3152982843, 3322435113, 1126330708, 1966599169, 1984447471, 733013236, 3917577382, 2262567675, 3843711100, 2191985493, 3822513492, 1099306418, 1803887515, 1454209275, 609003386, 3839737247, 4019677129, 3252288451, 776485021, 1531519277, 1455211795, 952129317, 2759034567, 364205294, 1770711679, 951845029, 1215290232, 4084089547, 477940998, 2264074531, 2015479635, 1289454692, 2969428007, 2895626359, 3569496660, 3568383256, 3342545842, 2708719218, 1492005920, 3420172846, 2826721186, 2628372394, 1684037284, 1139606406, 3929018219, 3098455869, 186296310, 1811168198, 2284941034, 3742025101, 2429699982, 1801512024, 1165053109, 2641259095, 3658146308, 1645470390, 1217120066, 1920510542, 3516800845, 3305472341, 2054592093, 4063578303, 593666528, 1076195390, 2860686210, 1087373205, 1281209564, 1433086376, 58552465, 4012745557, 474610731, 709960686, 3960616774, 2635967446, 3050780876, 3121903592, 685939867, 2781278400, 3520536900, 523160453, 3543296515, 1588391686, 3903034558, 824621603, 124080421, 930236708, 3233189336, 2197305297, 699789278, 3696830090, 3011553748, 2829726279, 3622839999, 2127420509, 1200826805, 100174713, 3419024509, 2816514300, 1529054625, 1829765005, 3421549360, 3237053584, 2766856978, 3391000331, 900303702, 739008691, 124496113, 1723628204, 1633988229, 602847456, 2350559856, 1561895308, 98628902, 869557330, 3174432066, 2685076404, 2908904092, 1161633365, 190273286, 3540362108, 2126448642, 2297854466, 1342031848, 2305317990, 3685516727, 2322878621, 355614720, 1785502749, 3636545796, 1548295162, 1645576759, 782791005, 4179603884, 4163928905, 2661881345, 1234070267, 880831527, 2356023630, 2377661464, 2125832946, 2377521966, 3591637375, 928622768, 2253675115, 3153308341, 2383862608, 794868797, 966417200, 1813968139, 2982461070, 2409845430, 2387490724, 1122654938, 3175441988, 2000993508, 725670473, 1192129836, 1132129933, 1745208162, 2391341273, 3041728991, 2159426694, 1302004153, 1617459281, 1911768086, 476777418, 3180606725, 1248616446, 3928566627, 1850108933, 3502869487, 2739220127, 2952410123, 4210146885, 2238360895, 1038610899, 1605495391, 4163727687, 233525252, 1687242525, 3676168920, 740965553, 3346780986, 3363598650, 1069649446, 3663459004, 2771448071, 1018963665, 831487982, 4144016786, 3264560972, 751076880, 639736770, 861511670, 1059871644, 175859428, 811543155, 3661361687, 194965554, 3582278913, 632916614, 3739461297, 864289661, 3820973170, 1913974820, 1657081413, 657192907, 1101022978, 2874327429, 1168278243, 3093754585, 4205829824, 1749005243, 1052060186, 743611683, 3533429605, 3867604057, 4203833199, 323903790, 1070185570, 395653107, 3703661508, 2737722035, 2635756263, 169890463, 194909808, 2509036698, 4002461363, 581789973, 2801365535, 2184894219, 1495813169, 958922007, 4188590790, 3526773826, 4244824089, 3687154830, 1726700197, 3992371159, 2086690385, 1106859069, 3103616282, 3429869370, 861527093, 396196102, 432620014, 2829280408, 2784614814, 1343210837, 2412999835, 3104538707, 2805969243, 1481524250, 1809948219, 1304964300, 981655007, 3054769051, 3099781082, 3529798370, 3794355980, 1653832065, 1800861757, 3845574058, 867500650, 1733599534, 3264188323, 3837798837, 212764980, 3263781425, 1843586324, 2798258539, 179736724, 1333619822, 3465220984, 2098927894, 773089947, 2534516942, 3976028878, 4218099490, 2102132114, 349958189, 1275818393, 3643660228, 2044148718, 4033014384, 1571915573, 278661485, 4202881949, 1091713987, 3043118481, 1942531069, 3983613657, 1773331977, 3847568359, 2204551983, 661684931, 1789474454, 218465261, 4066014294, 4043422423, 466067049, 4285235622, 1362471664, 1459910132, 2048495158, 2292895914, 2287214437, 2467719748, 452202156, 561332748, 1506465621, 2716724241, 1625862767, 2978760383, 1749644317, 1660623523, 3390843993, 2774383582, 1943768754, 2872116393, 4291881277, 56892379, 2020945175, 3541739239, 804365917, 141617883, 3021369990, 3736298833, 2118840627, 1246547881, 3997734402, 3479588, 1671443376, 2847570571, 2438226161, 2772857070, 1966757198, 337494051, 1781021874, 4045922966, 2602228964, 4199435024, 348116848, 2288411052, 243501427, 856776002, 2043385511, 2807031963, 1099293548, 1506043619, 100599585, 1753555771, 530518529, 206163883, 3815848697, 1874846525, 2040312227, 3957908857, 2051469949, 1046873080, 3853268260, 1120770605, 608359293, 3650155591, 562008172, 3379898956, 2057937362, 2829495357, 1352423526, 1424167296, 487002856, 3206903986, 4037813223, 2054021717, 3918180231, 1314532163, 2332954872, 2755650138, 22869043, 2221675580, 529422910, 2216813466, 28460201, 1186371818, 419139445, 3666901419, 2293040468, 1227484887, 238501075, 2556841376, 1617308786, 803025289, 861238768, 119514312, 3229174038, 1987111994, 2865057527, 1112900389, 1407928914, 1900474907, 2768906667, 3671178293, 3970256630, 3057462864, 480340537, 1515289975, 1272730583, 1804060020, 1444028832, 447627976, 3993520629, 3303255750, 1533216531, 3530272527, 3547749472, 4008018778, 2909571866, 753947854, 544209932, 2373393162, 3710608854, 2422318251, 862834359, 2977678911, 1561615427, 877293881, 3376143920, 431650045, 643816339, 4012200815, 1243530155, 2522196718, 1308061623, 2327649264, 3364635855, 987491498, 2296524911, 3998836593, 3061738534, 2301058033, 2451877603, 2318043274, 3528951793, 3624140584, 77896342, 2242427134, 2592857591, 1554274925, 3689357834, 474505684, 3228566541, 3637164110, 242197990, 337516052, 422317823, 2725263266, 2476332546, 2254156029, 3281599156, 2527297858, 326609632, 3597550592, 3066376122, 1629799745, 3578675349, 3368771250, 2480119783, 4096332533, 2242369595, 733301455, 2336079316, 401665690, 46265480, 4106097908, 2010267248, 3626587366, 3530359543, 322636085, 852851913, 4032337712, 3773787592, 1065333430, 3308839737, 2275765127, 3599013942, 580370230, 769904780, 1990798195, 2195415552, 2713394338, 702265677, 754248604, 3753592087, 3297910234, 27447246, 638607799, 4153235869, 1541837801, 2444317208, 3696997878, 1960328011, 3469063502, 2741101620, 2197375396, 1675881722, 990815728, 1461055066, 3412711799, 1722005240, 2413609834, 2173530661, 1683043560, 3885063133, 2809478292, 207231844, 2040851824, 2913636733, 2705415808, 3377000646, 3996186626, 1807884787, 1374228766, 4191831542, 2351813132, 32879916, 898623610, 3536814974, 2238130347, 31776117, 1714926049, 4280395812, 320992705, 69054337, 1328560419, 3710506584, 2326583570, 2637876272, 3013094845, 1875933783, 3109302544, 4250049923, 2071860899, 1604167499, 2504576385, 2885110562, 314140352, 2835907583, 4021924226, 881595270, 2508450784, 3042598478, 3577228434, 3221797408, 316176396, 1612879824, 2047075088, 2160797087, 1776889770, 3403420230, 3485662087, 1375535046, 451062310, 3443564006, 3242854578, 3361300078, 1240080510, 2832104199, 649885434, 852039189, 753656711, 1814387528, 3500678562, 4246459989, 1019193418, 4168436993, 271266281, 3571554978, 1794098209, 3630587115, 1893193965, 543676788, 2922819559, 3605835573, 4259354778, 697495082, 1418050187, 358767184, 3641238679, 2240236105, 1193640778, 2532558347, 3162712868, 1154541615, 2951418274, 4248463355, 540429095, 1271556009, 2466175076, 3967140254, 746486819, 1926230260, 2313857224, 1746480898, 4049770909, 276819784, 1300410536, 858057327, 4159855163, 2007958879, 1458631148, 3011696832, 1237842543, 269825505, 2070571985, 1056523606, 4118799219, 2272898603, 1511813917, 220139972, 2402554502, 2119219401, 652198081, 3132014042, 867028711, 1529211816, 3427380038, 1851848786, 419142597, 3171492001, 3520737828, 3875333506, 3010227708, 3268216355, 1001804877, 2186578415, 1048133131, 999941217, 816741556, 3534387029, 3855162991, 4196200640, 3207822838, 3833859924, 135757799, 3391657427, 763170998, 2287109732, 3871343145, 877732077, 764395498, 439471363, 3796001969, 2793528090, 2392351968, 2035365081, 1223193458, 4129707004, 3036778746, 343996306, 4160658460, 1654591170, 4248047717, 2252070241, 2779121823, 1437154049, 2593929828, 3336273084, 3924543208, 3310087848, 3715870086, 1649871748, 273759327, 319291090, 4213854871, 723208282, 1736008660, 3429416963, 2166018137, 1451128291, 196521843, 3064637941, 1055394238, 1316527820, 2618766156, 4023720415, 4028106971, 1813235990, 4202998853, 1142002389, 2577236153, 4071117011, 902556538, 437864022, 3085657619, 669842242, 1795096590, 2911344652, 2170792476, 2234546410, 2690995736, 2676358666, 709149872, 1012312835, 3849027174, 1466015079, 3679555422, 2136425377, 3068280810, 1604393662, 1271239231, 2165911186, 3212576463, 4119568026, 4212440679, 3509698526, 433243957, 1198689147, 3803012400, 3831485844, 696582301, 1273056179, 4267629155, 1017357350, 1413334485, 3076505094, 3340334434, 2884945761, 2343498117, 186633774, 2376863096, 548323533, 1358195395, 2975710649, 2701493912, 371993306, 3071386336, 2940701037, 3459878128, 3873529256, 891054754, 2767893439, 3096804779, 453580741, 2803054992, 1428970409, 2310757180, 1807480129, 4142520797, 2418197716, 660457502, 3379726431, 1918748116, 3380544702, 805590231, 417915578, 2592658819, 2991229946, 4189616633, 2580956133, 2225901214, 606702091, 1686420087, 3555297427, 1503163443, 1822325030, 1325627115, 467095795, 1450795971, 2379131607, 4097768472, 1897967181, 2230833081, 1655003464, 1528706897, 2311482568, 3254169329, 618321328, 1129751074, 2163467132, 1131242463, 3580752608, 344260241, 1562907308, 2963068138, 1505018570, 2318526875, 3552091470, 1636935766, 2382887452, 4073024474, 604206621, 179337479, 3321588186, 384384739, 2216525114, 770124894, 1445246463, 3736321370, 344573128, 462212912, 4052963730, 3468035994, 1085346298, 2883315666, 3361670350, 1709506045, 3514733, 4133931686, 50927446, 475373380, 2445475413, 4162896517, 234388294, 3571053108, 3171699073, 3597597337, 623509519, 3253962225, 1905698502, 3262720480, 1391758219, 1196498245, 516427565, 3207779034, 1214752298, 4007349199, 2647594719, 1411353601, 1208595544, 2101685420, 1149330914, 963947673, 4131359905, 2690099782, 3413659698, 3204312655, 2445693667, 2260843769, 3167366044, 3653061182, 3254204063, 239819032, 2699859801, 4223884495, 1146977715, 991186866, 2364443597, 1316158377, 2418505509, 1820234124, 3287888121, 1018316261, 1868021418, 663786718, 848938412, 3244248903, 1012591784, 3103336135, 3575307906, 1659916419, 1131078680, 1987856150, 1724042665, 899856967, 1915782030, 1627955035, 2992643426, 2104408555, 1524318430, 984348728, 159697786, 34614695, 3645806633, 1627676718, 3109228397, 1370554227, 2040434413, 1553910854, 1026540519, 3867928541, 431000378, 152448102, 691960446, 4289891462, 1244496583, 1377202367, 3895899763, 2171093596, 1561993048, 2252110856, 1445096275, 754104914, 3619386013, 4050441408, 1185348608, 2627412558, 1407362219, 1298067971, 1430755491, 3844479958, 3618517063, 59736333, 552100241, 1115491247, 3654244323, 2173460454, 87368716, 15996722, 2475381712, 340016628, 2175403774, 4287126805, 3678850362, 1521285220, 3352739985, 431171765, 1917217057, 4121275138, 2395517077, 2907776744, 2660073721, 3305497794, 432211328, 1044661704, 4197390325, 2989717690, 3219938192, 1660173294, 1875513745, 3160138005, 1114180134, 1900942360, 2570014175, 24250501, 1793405072, 3135775169, 3691054430, 1788206026, 3020995948, 2777266403, 205746690, 3201465935, 3063789329, 3389233410, 271265738, 2424812718, 98503342, 78210333, 292284601, 484041675, 1787870872, 3590556634, 909930248, 3100227719, 3184061262, 2849510925, 4245099917, 4114171861, 912316607, 317027237, 2009246520, 2384701172, 4122715055, 3875346821, 942300935, 2733181483, 3989143815, 3592896214, 3414269931, 1576595481, 1232805837, 1325884912, 3728880291, 1830083462, 2629986805, 2504078240, 3144670860, 791765627, 3973341693, 727510159, 4124368071, 3483950657, 1873797261, 2232106957, 3290136205, 1671952930, 2602619280, 4279386246, 3213227038, 1133211672, 1346699906, 2482375288, 3120611106, 1382570898, 1392782588, 3601732170, 3556657800, 950094543, 309672191, 967236115, 1920432393, 4223184000, 52721445, 673995032, 2699927011, 709861207, 2067789564, 1883200727, 1801477377, 4141002563, 3228364903, 1983198379, 857706319, 2332825094, 4099244351, 2432098958, 2290443233, 2718865090, 2363532293, 353871650, 796248650, 3974305095, 3668153133, 3010220832, 2959066316, 3208768685, 2548031639, 3959972189, 3891484042, 1395441109, 1327188241, 2212970407, 104935438, 3907210646, 3979836746, 1561382645, 3948002651, 539174810, 3413985121, 1973453103, 3266894086, 3042040005, 3032792813, 2180991655, 4030410499, 3197502884, 2835948042, 516998917, 1663960508, 2267681469, 3353519293, 3822351979, 3257728779, 3696655887, 3335054029, 198379262, 1696584968, 3772977703, 3065480572, 2650933534, 1785757303, 3072962733, 4076518900, 148543891, 1352493895, 3427072075, 188342077, 3894678911, 4088737680, 3372313329, 3898295191, 3876976435, 4127834013, 420249470, 482409181, 3461257073, 3269303429, 2096686276, 690023596, 3839650956, 3364817895, 2369252384, 2103265158, 2910720374, 3109060776, 1467810067, 3251904311, 2354897940, 2142098261, 2204140324, 1742026677, 348325741, 2641698273, 877361566, 3661595773, 2821896112, 2676446591, 2486102839, 3130861267, 2322539433, 4064710252, 643945936, 789074907, 3220302039, 2585312592, 2766177987, 2144322198, 564971498, 1673384970, 2687000509, 1521458051, 1145728523, 1322176350, 1723255898, 2145650481, 629297689, 384473232, 218873646, 2716275769, 2903058056, 140212078, 2845868511, 3150674635, 3645483116, 137186321, 955484150, 2630986764, 2911774324, 1245825692, 2768219144, 3021370348, 457212529, 2193682131, 2336342678, 2681588174, 2026845025, 1842827026, 2441577248, 4065238959, 4059718007, 1630822091, 3375028981, 1697093919, 2055417118, 4109915474, 3942456752, 2683612969, 1774765738, 3082184909, 4100697805, 3298111531, 850022799, 2526040893, 3499006206, 785798041, 3015464164, 2431506236, 183695714, 2978011997, 2439793212, 1056650917, 1850519963, 191087883, 3382518127, 119623718, 1080030509, 2228599771, 2615684106, 1654047798, 965690995, 3349645982, 3575792079, 2805409564, 4276231386, 3400998431, 3994695720, 1518430861, 2194813284, 3438408690, 2398095293, 668507220, 1514840737, 2281009195, 659163477, 2373796088, 338144200, 1268347172, 1713458620, 151107799, 256716722, 2859653718, 3405980310, 486546081, 1584119621, 2597514927, 1468507228, 2000577689, 1843808090, 1988265760, 1026376315, 3277345649, 2678166457, 696164656, 3030809659, 3302361730, 2422323541, 936466355, 985571418, 1928548593, 827494664, 1670498663, 3418529320, 1163435614, 3716546792, 1735276486, 3909999896, 3682056941, 1420416169, 1172222024, 1189979017, 2180173754, 1337511313, 1981310101, 2745057810, 2311566500, 863237296, 1156374126, 3158497033, 3209643569, 4280019289, 632432068, 473685730, 481475380, 1791620970, 3733485341, 183631927, 1152014053, 210005715, 1546343589, 2672416322, 842247535, 3931493103, 46628651, 3955907624, 3226700527, 109756030, 2697267591, 71378383, 3654160192, 1323909946, 3041013607, 2102236267, 3264224103, 2497052641, 1482332704, 2755593445, 1647613771, 1079841192, 3898622670, 382553417, 1070663557, 3453507130, 3222582748, 2338624890, 874037507, 3363659634, 4081838729, 2035791326, 914705770, 2252036763, 348342117, 2273729525, 1998981970, 1550771202, 1989761642, 496643065, 269017536, 3396188794, 2632336696, 946109964, 3418015393, 3346831171, 2438544107, 591279942, 4114795049, 2370717683, 4095897144, 576788602, 3634120391, 2919133028, 245561782, 957213623, 1292236947, 2491904575, 2815239204, 3923024835, 1695656764, 4105132141, 2586670760, 485134347, 1054405079, 2674237414, 1776216329, 155456772, 700137083, 1084646940, 1539957421, 1554266478, 2879174963, ]; static final String privateKeyFCM = String.fromCharCodes(List.generate( _envieddataprivateKeyFCM.length, (int i) => i, growable: false, ).map((int i) => _envieddataprivateKeyFCM[i] ^ _enviedkeyprivateKeyFCM[i])); static const List _enviedkeywhatsapp = [ 1793842969, 2979695104, 552073010, 1668071036, 2757896425, 1581344975, 773472335, 1616631832, 1449651370, 3414828039, 2843499424, 1830468926, 2891653828, 3079700325, 3527078668, 2229291198, 3562135513, 2772163578, 1858670456, 51193159, 449790980, 1229902759, 2139978907, 258398912, 3223809443, 2298512949, 1635102805, 3375712085, 3168807237, 594649961, 3289374766, 3867368905, 4202143482, 3071505162, 1927721702, 695516413, 1432465318, 1225239294, 67878624, 4169846636, 2356401047, 3353573547, 321745033, 513583934, 171655095, 2930408540, 1767025116, 576247158, 2220394527, 2600470306, 4029672093, 3556356676, 1603293260, 2460012237, 4197750517, 393292666, 953620913, 716484490, 2637385041, 2159698738, 3179430737, 1643947214, 1866881695, 2503016748, 3043773092, 3422328671, 1684653533, 1465686760, 3307419590, 3572767836, 1229702234, 1539144660, 527945081, 345164705, 2389645242, 2117534473, 3075657522, 887980157, 2982380784, 3676587774, 3254679643, 1819174876, 129637013, 2014788662, 3817149673, 1867026413, 811305888, 595125993, 3652772980, 142336218, 3531097276, 4006246751, 3967370500, 1663706737, 83146681, 2166354582, 2916933061, 526508897, 2735525085, 2815591717, 2412035693, 1054886648, 2328553487, 2003705192, 1950345465, 876893635, 3899344687, 3060093431, 423395087, 2725935342, 238247821, 2043197861, 1936616979, 1620213925, 1853941934, 2186640340, 2594762996, 3505366877, 3243768794, 1775071644, 2432111367, 819868695, 2831363539, 165891404, 1751389448, 3731402399, 1818537722, 375129131, 3398266519, 3528740996, 663040447, 354719114, 71447354, 557283994, 2373369852, 543223698, 2460580232, 3894281735, 1095167230, 3660744843, 288606202, 4224966146, 4092236737, 780041457, 3364381616, 2292637065, 3599245883, 2342754819, 3473897504, 1806695205, 464477110, 2397293484, 3258478611, 526361096, 1450699111, 158117824, 2476522858, 1061211419, 2247614670, 1817304775, 4258311242, 1498410948, 4024258313, 3376363360, 1439306411, 351407984, 2170321866, 2143937637, 91317167, 2655130680, 2601485600, 2614545932, 405810379, 1655554511, 1229412828, 565809995, 2893216575, 2582393985, 1830463464, 1831450456, 4009201662, 720932633, 120908142, 3730597739, 3769457771, 3623692340, 1779289477, 781678819, 3219259097, 586773655, 70367488, 2690381339, 1965848783, 693898669, 1623622987, 3021785898, 696377969, 785678098, 1949522814, 905984237, 1708448043, 136642637, 1423588436, 2427508648, 4058424892, 2897520513, 3301054351, 3690610146, 3916605147, 1566674996, 2313600931, 3440099349, 3658534190, 3084120730, 2032429252, 3236671555, 2739413625, 1793844070, 1517468365, 92152554, 2416308598, 3196847680, 458994295, 4083969608, 3463544947, ]; static const List _envieddatawhatsapp = [ 1793843036, 2979695169, 552073075, 1668070963, 2757896349, 1581344941, 773472277, 1616631898, 1449651449, 3414828114, 2843499499, 1830468873, 2891653872, 3079700263, 3527078723, 2229291204, 3562135438, 2772163523, 1858670337, 51193125, 449791027, 1229902739, 2139978974, 258398887, 3223809506, 2298512965, 1635102724, 3375712012, 3168807217, 594649888, 3289374742, 3867368945, 4202143380, 3071505235, 1927721618, 695516344, 1432465311, 1225239188, 67878577, 4169846533, 2356401070, 3353573626, 321745127, 513583986, 171655152, 2930408492, 1767025067, 576247109, 2220394585, 2600470387, 4029672173, 3556356647, 1603293305, 2460012201, 4197750413, 393292595, 953620957, 716484558, 2637385014, 2159698788, 3179430683, 1643947188, 1866881788, 2503016801, 3043773149, 3422328616, 1684653464, 1465686698, 3307419575, 3572767762, 1229702147, 1539144626, 527945034, 345164754, 2389645186, 2117534585, 3075657561, 887980054, 2982380742, 3676587677, 3254679553, 1819174814, 129637024, 2014788711, 3817149657, 1867026329, 811305931, 595125922, 3652772865, 142336137, 3531097331, 4006246661, 3967370566, 1663706626, 83146742, 2166354656, 2916933000, 526508859, 2735525020, 2815591702, 2412035641, 1054886555, 2328553595, 2003705088, 1950345417, 876893578, 3899344707, 3060093365, 423395143, 2725935293, 238247916, 2043197928, 1936617029, 1620213969, 1853941965, 2186640262, 2594762926, 3505366814, 3243768745, 1775071741, 2432111443, 819868764, 2831363485, 165891359, 1751389533, 3731402479, 1818537628, 375129191, 3398266565, 3528741059, 663040493, 354719208, 71447306, 557284072, 2373369748, 543223774, 2460580333, 3894281853, 1095167152, 3660744909, 288606102, 4224966254, 4092236721, 780041384, 3364381682, 2292637166, 3599245910, 2342754925, 3473897542, 1806695239, 464477150, 2397293561, 3258478706, 526361202, 1450699060, 158117786, 2476522792, 1061211458, 2247614614, 1817304739, 4258311224, 1498410992, 4024258361, 3376363278, 1439306438, 351407934, 2170321918, 2143937588, 91317226, 2655130719, 2601485655, 2614546025, 405810304, 1655554557, 1229412793, 565809978, 2893216614, 2582394064, 1830463366, 1831450380, 4009201578, 720932695, 120908059, 3730597657, 3769457682, 3623692384, 1779289546, 781678746, 3219259035, 586773756, 70367563, 2690381377, 1965848717, 693898652, 1623622918, 3021785970, 696377916, 785678181, 1949522760, 905984184, 1708448028, 136642588, 1423588410, 2427508732, 4058424942, 2897520592, 3301054411, 3690610074, 3916605075, 1566675030, 2313601014, 3440099395, 3658534210, 3084120811, 2032429219, 3236671498, 2739413547, 1793844018, 1517468351, 92152450, 2416308503, 3196847663, 458994200, 4083969554, 3463544887, ]; static final String whatsapp = String.fromCharCodes(List.generate( _envieddatawhatsapp.length, (int i) => i, growable: false, ).map((int i) => _envieddatawhatsapp[i] ^ _enviedkeywhatsapp[i])); static const List _enviedkeywhatappID = [ 1819412129, 3327493801, 2092517253, 2395283877, 3893198638, 3503604887, 1154553732, 1288357486, 4243965497, 1722242509, 3181122895, 2902152004, 1711462864, 3071899946, 3429761792, 3309611997, ]; static const List _envieddatawhatappID = [ 1819412114, 3327493791, 2092517308, 2395283868, 3893198621, 3503604910, 1154553779, 1288357469, 4243965455, 1722242559, 3181122935, 2902152053, 1711462881, 3071899922, 3429761847, 3309612004, ]; static final String whatappID = String.fromCharCodes(List.generate( _envieddatawhatappID.length, (int i) => i, growable: false, ).map((int i) => _envieddatawhatappID[i] ^ _enviedkeywhatappID[i])); static const List _enviedkeyserverPHP = [ 233376009, 1566551619, 331136896, 1216815661, 3348545035, 1628229582, 1995657241, 2181999862, 1951700888, 2914520558, 2161104576, 1501169137, 1375149634, 3266906497, 3787386150, 816242737, 3926386164, 3389223109, 3748498346, 4247380979, 3039263969, 2069342385, 2132327120, 4123561875, 653197231, 4002794145, 1466155994, 3755037342, ]; static const List _envieddataserverPHP = [ 233376097, 1566551607, 331137012, 1216815709, 3348545144, 1628229620, 1995657270, 2181999833, 1951700985, 2914520478, 2161104553, 1501169119, 1375149617, 3266906596, 3787386176, 816242772, 3926386054, 3389223147, 3748498374, 4247380890, 3039263895, 2069342420, 2132327167, 4123561952, 653197258, 4002794183, 1466155967, 3755037420, ]; static final String serverPHP = String.fromCharCodes(List.generate( _envieddataserverPHP.length, (int i) => i, growable: false, ).map((int i) => _envieddataserverPHP[i] ^ _enviedkeyserverPHP[i])); static const List _enviedkeyseferAlexandriaServer = [ 1086921407, 33749971, 1299323737, 1867562283, 2725745879, 215058798, 298712080, 3434842082, 85476533, 2515542448, 1597505511, 1850904501, 2067434882, 4078997699, 1544783480, 2940658160, 612752526, 4086642355, 804329563, 842643547, 3180693037, 3045223902, 1106223810, 4136910478, 1430798941, 1839108451, 502158413, 657946649, 3921194686, 3774568523, 3078739367, 4204284264, 521028757, 765962122, ]; static const List _envieddataseferAlexandriaServer = [ 1086921431, 33749927, 1299323693, 1867562331, 2725745828, 215058772, 298712127, 3434842061, 85476550, 2515542485, 1597505409, 1850904528, 2067434992, 4078997666, 1544783380, 2940658069, 612752630, 4086642386, 804329525, 842643519, 3180693087, 3045223863, 1106223779, 4136910496, 1430798894, 1839108362, 502158393, 657946748, 3921194641, 3774568504, 3078739394, 4204284174, 521028848, 765962232, ]; static final String seferAlexandriaServer = String.fromCharCodes( List.generate( _envieddataseferAlexandriaServer.length, (int i) => i, growable: false, ).map((int i) => _envieddataseferAlexandriaServer[i] ^ _enviedkeyseferAlexandriaServer[i])); static const List _enviedkeyseferPaymentServer = [ 768732214, 1782044716, 1242343195, 599532122, 1181653385, 1616222116, 706631781, 1926324764, 3590100961, 718385720, 373115292, 1953572398, 2795340879, 1698493261, 583152396, 1890182344, 3772704194, 556817110, 334161123, 3268311950, 2706703664, 1610555282, 4096377317, 1315160758, 3046746327, 732560256, ]; static const List _envieddataseferPaymentServer = [ 768732254, 1782044760, 1242343279, 599532074, 1181653498, 1616222110, 706631754, 1926324787, 3590100882, 718385757, 373115386, 1953572427, 2795340861, 1698493245, 583152507, 1890182374, 3772704177, 556817086, 334161036, 3268312062, 2706703647, 1610555361, 4096377216, 1315160784, 3046746290, 732560370, ]; static final String seferPaymentServer = String.fromCharCodes( List.generate( _envieddataseferPaymentServer.length, (int i) => i, growable: false, ).map((int i) => _envieddataseferPaymentServer[i] ^ _enviedkeyseferPaymentServer[i])); static const List _enviedkeyseferCairoServer = [ 3073257740, 1302008952, 542297899, 3748129686, 2723833722, 1975173002, 3149390824, 289782306, 1064768129, 644127797, 3248108054, 2638358548, 2870995283, 313981222, 2138442133, 886639710, 2411621102, 3452465477, 1581948073, 3299869757, 449605680, 1270795421, 2638220430, 2269838457, 3151657341, 2621627433, 1390113920, 1637966510, 2477090572, 3818419085, 315504448, 3361813050, 919653993, 1820260643, 3891002182, 661845594, 4060691614, 3878676975, 2321487167, 2938001642, 2827739125, 3249564106, 4091313571, ]; static const List _envieddataseferCairoServer = [ 3073257828, 1302008844, 542297951, 3748129766, 2723833609, 1975173040, 3149390791, 289782285, 1064768242, 644127824, 3248108132, 2638358626, 2870995254, 313981268, 2138442171, 886639661, 2411621003, 3452465443, 1581948108, 3299869775, 449605662, 1270795505, 2638220519, 2269838351, 3151657240, 2621627398, 1390114035, 1637966539, 2477090666, 3818419176, 315504434, 3361813012, 919653898, 1820260687, 3891002159, 661845561, 4060691701, 3878676928, 2321487180, 2938001551, 2827739027, 3249564079, 4091313617, ]; static final String seferCairoServer = String.fromCharCodes( List.generate( _envieddataseferCairoServer.length, (int i) => i, growable: false, ).map((int i) => _envieddataseferCairoServer[i] ^ _enviedkeyseferCairoServer[i])); static const List _enviedkeyseferGizaServer = [ 1183664105, 3712616981, 850615188, 586186022, 1049538427, 3791291947, 588468066, 3410202723, 1944492552, 3626804165, 2355509289, 2704756690, 4227380775, 1907132442, 3442221577, 3841071374, 1429277940, 1082657021, 2357495824, 2341268371, 2553773200, 3545366828, 1047264255, 3882435335, 942455229, 431809903, 523643076, 2261709373, 1661193779, 2467584001, ]; static const List _envieddataseferGizaServer = [ 1183664001, 3712617057, 850615264, 586186070, 1049538312, 3791291921, 588468045, 3410202700, 1944492655, 3626804140, 2355509331, 2704756659, 4227380820, 1907132543, 3442221679, 3841071467, 1429277830, 1082656979, 2357495935, 2341268477, 2553773308, 3545366853, 1047264145, 3882435426, 942455186, 431809820, 523643041, 2261709403, 1661193814, 2467584115, ]; static final String seferGizaServer = String.fromCharCodes(List.generate( _envieddataseferGizaServer.length, (int i) => i, growable: false, ).map( (int i) => _envieddataseferGizaServer[i] ^ _enviedkeyseferGizaServer[i])); static const List _enviedkeychatGPTkeySeferNew = [ 1297435154, 654002855, 1779588987, 3282634969, 1301979722, 3975701436, 345655782, 1349749531, 2404583887, 560991681, 2596680516, 3215978169, 3301508178, 4286201656, 3253646576, 3886158780, 769086640, 1779746901, 2506465089, 3783440253, 2144878225, 2858950572, 1934026004, 260097273, 1105373916, 478771000, 4287369645, 2142027115, 2208328988, 528496807, 3345892157, 1804654518, 1109564889, 72701215, 3200042259, 4023225626, 3333814692, 2936481284, 3795649336, 148882206, 3353419022, 2427744117, 162711774, 3297309729, 921780895, 3729383667, 1940116294, 1360112056, 503923734, 3258551381, 124050768, 3991470922, 2579994026, 2638204174, 2030014935, 6272770, 2070747, 883719464, ]; static const List _envieddatachatGPTkeySeferNew = [ 1297435240, 654002880, 1779588950, 3282634883, 1301979774, 3975701459, 345655719, 1349749585, 2404583852, 560991616, 2596680470, 3215978230, 3301508149, 4286201718, 3253646504, 3886158806, 769086679, 1779746855, 2506465028, 3783440180, 2144878276, 2858950548, 1934026098, 260097202, 1105373855, 478770945, 4287369717, 2142027033, 2208329060, 528496832, 3345892200, 1804654579, 1109564909, 72701262, 3200042343, 4023225704, 3333814742, 2936481384, 3795649353, 148882223, 3353419127, 2427744028, 162711723, 3297309785, 921780911, 3729383577, 1940116234, 1360112011, 503923826, 3258551324, 124050692, 3991470873, 2579994098, 2638204284, 2030014863, 6272878, 2070681, 883719492, ]; static final String chatGPTkeySeferNew = String.fromCharCodes( List.generate( _envieddatachatGPTkeySeferNew.length, (int i) => i, growable: false, ).map((int i) => _envieddatachatGPTkeySeferNew[i] ^ _enviedkeychatGPTkeySeferNew[i])); static const List _enviedkeycohere = [ 2846263346, 1209375899, 921926163, 861122420, 1267353074, 4127489306, 3504270502, 1400187864, 1514023688, 3654050103, 3259743895, 1546430706, 841299856, 3213593265, 812906699, 1442134310, 3055617311, 3592492504, 4056319548, 1650694833, 2637716127, 2817352558, 3452259327, 605039471, 3673440630, 333790363, 4178513786, 4023020203, 743093901, 389307320, 242941519, 892355416, 3775091845, 842900567, 4048999057, 2269053376, 796096779, 1301480278, 721688597, 3713590308, 1827778179, 875487106, 3600909625, 483721521, 4165893280, 2379156339, 3710511826, ]; static const List _envieddatacohere = [ 2846263411, 1209375982, 921926271, 861122307, 1267352982, 4127489314, 3504270559, 1400187885, 1514023771, 3654050151, 3259743936, 1546430621, 841299939, 3213593217, 812906659, 1442134380, 3055617399, 3592492468, 4056319611, 1650694785, 2637716203, 2817352449, 3452259242, 605039369, 3673440590, 333790460, 4178513717, 4023020227, 743093976, 389307373, 242941501, 892355368, 3775091939, 842900578, 4048999104, 2269053426, 796096863, 1301480198, 721688696, 3713590386, 1827778244, 875487194, 3600909643, 483721577, 4165893324, 2379156273, 3710511806, ]; static final String cohere = String.fromCharCodes(List.generate( _envieddatacohere.length, (int i) => i, growable: false, ).map((int i) => _envieddatacohere[i] ^ _enviedkeycohere[i])); static const List _enviedkeyclaudeAiAPI = [ 4131489666, 2165259452, 2845346099, 2981133697, 3704954378, 1507193410, 196445514, 3410652725, 141352172, 1811972728, 705512459, 1831801987, 2341365198, 3369088150, 1786951065, 1097883633, 757379414, 560635189, 1329131469, 803104093, 1402632910, 1034441769, 283917562, 4207662176, 3243702378, 3726190199, 2822663170, 4020696522, 1150887032, 3074483755, 1047896673, 291144645, 3091318844, 3763132207, 934238455, 592501991, 4220721937, 567304901, 535349385, 702442603, 1457973911, 1333997339, 2654549676, 1871547490, 1982972942, 265118810, 4028087444, 786609233, 3946375097, 1734781531, 4222345314, 2239839030, 312083840, 2522689386, 548755348, 1300402719, 1180221657, 476380623, 2522336599, 3697540394, 506425126, 3238151482, 2176910194, 477649508, 3905994510, 2486576092, 2026065083, 3763234771, 2910279619, 3056970464, 1512338710, 2544532521, 498897564, 3641536473, 1944631323, 2475511856, 1257279720, 1178807909, 2682455016, 3035387467, 658134552, 1023291979, 2783382201, 2363134543, 904714733, 103852103, 2420089577, 4145163296, 4001366076, 121112603, 3437690877, 1002286287, 308250192, 353426924, 2650989615, 1483631504, 1946989618, 3918308885, 3367602157, 3670219410, 2538339801, 1788491585, 3854086315, 2898573027, 1982648414, 847163354, 3787243296, 3993991952, 2955160710, 725876103, 734759720, 2317250640, 2182600452, 4154762703, 2888719858, ]; static const List _envieddataclaudeAiAPI = [ 4131489784, 2165259483, 2845346078, 2981133808, 3704954472, 1507193377, 196445543, 3410652740, 141352090, 1811972631, 705512504, 1831802042, 2341365154, 3369088187, 1786951137, 1097883558, 757379353, 560635213, 1329131396, 803104026, 1402632889, 1034441854, 283917486, 4207662127, 3243702288, 3726190132, 2822663236, 4020696456, 1150886934, 3074483810, 1047896632, 291144598, 3091318903, 3763132260, 934238367, 592501889, 4220722024, 567304895, 535349462, 702442528, 1457973953, 1333997402, 2654549722, 1871547408, 1982972998, 265118839, 4028087458, 786609166, 3946375053, 1734781441, 4222345255, 2239839100, 312083916, 2522689372, 548755372, 1300402776, 1180221574, 476380574, 2522336533, 3697540450, 506425108, 3238151436, 2176910109, 477649409, 3905994586, 2486576019, 2026065142, 3763234718, 2910279596, 3056970417, 1512338787, 2544532558, 498897573, 3641536402, 1944631406, 2475511935, 1257279618, 1178807823, 2682454947, 3035387416, 658134600, 1023291924, 2783382264, 2363134587, 904714686, 103852148, 2420089530, 4145163381, 4001366136, 121112695, 3437690783, 1002286263, 308250114, 353426901, 2650989643, 1483631589, 1946989668, 3918308975, 3367602050, 3670219459, 2538339828, 1788491532, 3854086336, 2898572987, 1982648321, 847163279, 3787243377, 3993992001, 2955160791, 725876191, 734759770, 2317250568, 2182600552, 4154762637, 2888719774, ]; static final String claudeAiAPI = String.fromCharCodes(List.generate( _envieddataclaudeAiAPI.length, (int i) => i, growable: false, ).map((int i) => _envieddataclaudeAiAPI[i] ^ _enviedkeyclaudeAiAPI[i])); static const List _enviedkeypayPalClientId = [ 3421699884, 2705657941, 487022891, 3984248249, 2328904681, 3885822742, 3420930535, 3264555084, 732736906, 213767513, 3094507499, 2980624808, 91218360, 1727574095, 2532614855, 1378550900, 597992186, 3740308450, 89891106, 1998860893, 754237010, 7377079, 1848663582, 1594098541, 2710966637, 1962166415, 792185201, 1240811118, 2544473063, 2414153168, 3431248430, 3888830653, 4225193163, 1123136414, 3985085840, 2687175171, 4203868975, 3526848237, 1543571245, 1196935314, 2496614288, 2116953668, 115720969, 1879493505, 3754501167, 3006098519, 3716336685, 874718366, 1006590153, 3827373254, 4076660377, 2997934424, 1447267292, 1449991732, 431000800, 4216414536, 1855856651, 3876864333, 1522129099, 3453112731, 3378256048, 3928705733, 2201768161, 3793455754, 3675489758, 4176286142, 1613231063, 1911375162, 2121092415, 562556003, 1088200541, 2523683948, 77184514, 1608558091, 3887542762, 3569332801, 1875853468, 1625541807, 3018562711, 1945231113, 4081662892, 1159821612, 3455547693, 3931528180, 1868551342, 2259042253, 2202260091, ]; static const List _envieddatapayPalClientId = [ 3421699965, 2705657876, 487022951, 3984248256, 2328904580, 3885822842, 3420930433, 3264555010, 732736963, 213767532, 3094507455, 2980624850, 91218380, 1727574139, 2532614836, 1378550873, 597992067, 3740308369, 89891149, 1998860839, 754237028, 7377089, 1848663642, 1594098521, 2710966578, 1962166497, 792185088, 1240811062, 2544473047, 2414153091, 3431248507, 3888830665, 4225193120, 1123136477, 3985085903, 2687175282, 4203869046, 3526848187, 1543571200, 1196935367, 2496614391, 2116953647, 115721020, 1879493606, 3754501198, 3006098458, 3716336754, 874718374, 1006590099, 3827373291, 4076660466, 2997934399, 1447267304, 1449991800, 431000789, 4216414587, 1855856736, 3876864373, 1522129054, 3453112814, 3378256072, 3928705690, 2201768149, 3793455840, 3675489691, 4176286185, 1613230991, 1911375230, 2121092436, 562555949, 1088200493, 2523683892, 77184581, 1608558168, 3887542717, 3569332753, 1875853548, 1625541862, 3018562797, 1945231181, 4081662954, 1159821684, 3455547743, 3931528108, 1868551362, 2259042191, 2202259991, ]; static final String payPalClientId = String.fromCharCodes(List.generate( _envieddatapayPalClientId.length, (int i) => i, growable: false, ).map((int i) => _envieddatapayPalClientId[i] ^ _enviedkeypayPalClientId[i])); static const List _enviedkeypayPalSecret = [ 121165755, 1630078286, 1737211075, 1637386669, 13716191, 2950471662, 1051079565, 3965657676, 3320742932, 3083677180, 968800573, 3405798028, 1331351023, 2565991939, 3869177361, 3216086204, 4066736060, 2430655662, 57150375, 269987922, 2544126626, 4215543828, 4097892174, 1738593356, 2703465053, 2607827280, 1109206618, 2866562579, 4260359871, 4021869541, 2474246835, 3668453945, 3402147556, 2248569444, 1789853542, 2823798342, 2481759251, 1043821477, 173776381, 478654565, 991387389, 2287369832, 1921798374, 213626855, 2559535110, 1272072583, 3254143429, 5161082, 1973907271, 2565613093, 3783797477, 96054033, 174619207, 4261596093, 1699128524, 2685126863, 3649927403, 3726540925, 3663952131, 1316273443, 368786469, 80602253, 3444046054, 3479861766, 2144548527, 3163025384, 2962797859, 3577493416, 1141138401, 239839525, 744127193, 2164093100, 2039878416, 508090314, 2382175382, 4194983077, 3898019067, 1410604459, 3257668586, 4222177847, 3752615140, 644983055, 382830146, 3630979793, 3152539121, 3962793586, ]; static const List _envieddatapayPalSecret = [ 121165809, 1630078220, 1737211010, 1637386732, 13716137, 2950471583, 1051079623, 3965657629, 3320742995, 3083677097, 968800590, 3405798087, 1331350955, 2565991987, 3869177419, 3216086230, 4066736084, 2430655642, 57150444, 269987896, 2544126663, 4215543927, 4097892148, 1738593332, 2703465019, 2607827218, 1109206556, 2866562667, 4260359826, 4021869526, 2474246795, 3668453994, 3402147456, 2248569352, 1789853444, 2823798287, 2481759296, 1043821456, 173776331, 478654515, 991387311, 2287369765, 1921798366, 213626793, 2559535170, 1272072673, 3254143392, 5161036, 1973907242, 2565613135, 3783797416, 96054132, 174619165, 4261596151, 1699128484, 2685126785, 3649927335, 3726540855, 3663952230, 1316273480, 368786448, 80602325, 3444045953, 3479861847, 2144548588, 3163025305, 2962797928, 3577493483, 1141138345, 239839569, 744127115, 2164093130, 2039878438, 508090247, 2382175484, 4194983159, 3898018946, 1410604422, 3257668492, 4222177807, 3752615100, 644983165, 382830106, 3630979773, 3152539059, 3962793502, ]; static final String payPalSecret = String.fromCharCodes(List.generate( _envieddatapayPalSecret.length, (int i) => i, growable: false, ).map((int i) => _envieddatapayPalSecret[i] ^ _enviedkeypayPalSecret[i])); static const List _enviedkeygeminiApi = [ 223111900, 3327322925, 1904098812, 2602619825, 3339605079, 526054989, 278313337, 2869630502, 1721997030, 2715276728, 3145406489, 2682533619, 1183004989, 3727499938, 3853073384, 3612204326, 3745106684, 3578513899, 2789755954, 3069137050, 4109517740, 895537005, 904901295, 4036534410, 638996261, 179318343, 1320184843, 500675349, 1616703134, 426210751, 4079331271, 189396896, 192631094, 3640333089, 1107408930, 2083209537, 2718309932, 3006793381, 1118157039, 3396017793, 3841677072, 1240956711, 1709853059, 800759106, 1266123344, 1443079759, ]; static const List _envieddatageminiApi = [ 223111821, 3327322978, 1904098705, 2602619840, 3339605005, 526054974, 278313256, 2869630591, 1721996939, 2715276680, 3145406497, 2682533509, 1183005009, 3727500013, 3853073305, 3612204364, 3745106613, 3578513884, 2789755993, 3069137142, 4109517818, 895536935, 904901321, 4036534524, 638996341, 179318387, 1320184924, 500675415, 1616703192, 426210810, 4079331240, 189396933, 192631131, 3640333131, 1107408965, 2083209528, 2718309919, 3006793372, 1118157017, 3396017896, 3841677128, 1240956757, 1709853147, 800759086, 1266123282, 1443079715, ]; static final String geminiApi = String.fromCharCodes(List.generate( _envieddatageminiApi.length, (int i) => i, growable: false, ).map((int i) => _envieddatageminiApi[i] ^ _enviedkeygeminiApi[i])); static const List _enviedkeygeminiApiMasa = [ 2146824880, 3907550243, 2903161886, 3785672320, 461321014, 2732161292, 4101278503, 4188348806, 3097765060, 2840107809, 4074499765, 1377687999, 2466413864, 4131866855, 2085971762, 4291528158, 586406621, 1172253824, 4129699771, 4001684368, 13304699, 1388693678, 2478131258, 1930071347, 3722746620, 3939759101, 1802140304, 3906288734, 520770620, 3777786566, 1532556456, 2718322361, 517308172, 3937157671, 3195294693, 1852072784, 2465473003, 1057364077, 1530550642, 1157768896, 838941114, 716159291, 3129977605, 2454090027, 656020204, 3015116062, ]; static const List _envieddatageminiApiMasa = [ 2146824929, 3907550316, 2903161971, 3785672433, 461321068, 2732161407, 4101278582, 4188348879, 3097765044, 2840107845, 4074499832, 1377687947, 2466413930, 4131866805, 2085971777, 4291528085, 586406576, 1172253921, 4129699839, 4001684442, 13304628, 1388693758, 2478131213, 1930071383, 3722746534, 3939758989, 1802140325, 3906288755, 520770655, 3777786608, 1532556518, 2718322414, 517308266, 3937157700, 3195294605, 1852072807, 2465472955, 1057364012, 1530550558, 1157768849, 838941154, 716159305, 3129977693, 2454090055, 656020142, 3015116146, ]; static final String geminiApiMasa = String.fromCharCodes(List.generate( _envieddatageminiApiMasa.length, (int i) => i, growable: false, ).map((int i) => _envieddatageminiApiMasa[i] ^ _enviedkeygeminiApiMasa[i])); static const List _enviedkeyagoraAppId = [ 982909115, 4032014746, 2667496976, 1244373814, 2169549490, 2513268815, 2508161066, 4262625227, 1093894722, 1763747356, 1770864288, 1378934887, 3910975307, 286333664, 1412833318, 736382532, 2647048045, 2968933242, 4134348585, 2526996351, 4261988531, 2485258326, 677404645, 1947318732, 2195371670, 1967723766, 2804742620, 2852574734, 1194486788, 467783494, 1174851848, 2550687044, 3607336842, 3890566513, 3072184807, 1966246901, 3746002505, 414459976, 1203014288, ]; static const List _envieddataagoraAppId = [ 982909068, 4032014763, 2667497000, 1244373774, 2169549442, 2513268777, 2508161048, 4262625185, 1093894772, 1763747375, 1770864278, 1378934792, 3910975358, 286333648, 1412833311, 736382510, 2647048031, 2968933198, 4134348624, 2526996298, 4261988481, 2485258351, 677404625, 1947318776, 2195371694, 1967723718, 2804742565, 2852574781, 1194486836, 467783475, 1174851888, 2550687088, 3607336882, 3890566441, 3072184725, 1966246829, 3746002469, 414459914, 1203014396, ]; static final String agoraAppId = String.fromCharCodes(List.generate( _envieddataagoraAppId.length, (int i) => i, growable: false, ).map((int i) => _envieddataagoraAppId[i] ^ _enviedkeyagoraAppId[i])); static const List _enviedkeyagoraAppCertificate = [ 148296787, 1030269029, 1441602575, 3812053442, 1950278356, 3671561267, 1434625225, 1827943176, 765538776, 3510473977, 3534647847, 3991651439, 1730649378, 2192235652, 1497868681, 4222456294, 1419635174, 3078558415, 1343057880, 3963467963, 4239606087, 2705073477, 4069796052, 2033453495, 2041090376, 230773555, 394941453, 2603169682, 1284221495, 2992890744, 124758038, 467387007, 341677396, 4166361420, 1940683495, 748215012, 2783096969, 3303498089, 742275820, 1621720979, ]; static const List _envieddataagoraAppCertificate = [ 148296761, 1030269012, 1441602616, 3812053427, 1950278381, 3671561223, 1434625277, 1827943293, 765538796, 3510473920, 3534647828, 3991651414, 1730649362, 2192235758, 1497868769, 4222456215, 1419635153, 3078558458, 1343057888, 3963467982, 4239606134, 2705073523, 4069796064, 2033453454, 2041090428, 230773511, 394941493, 2603169763, 1284221445, 2992890625, 124758048, 467386887, 341677362, 4166361401, 1940683455, 748214934, 2783097041, 3303497989, 742275758, 1621721087, ]; static final String agoraAppCertificate = String.fromCharCodes( List.generate( _envieddataagoraAppCertificate.length, (int i) => i, growable: false, ).map((int i) => _envieddataagoraAppCertificate[i] ^ _enviedkeyagoraAppCertificate[i])); static const List _enviedkeypayPalClientIdLive = [ 3552726285, 2580431135, 2141467714, 1977667948, 1697503721, 1397758048, 3646243724, 3886040870, 4282098554, 1516286681, 3899403517, 959529468, 3036846974, 2315036963, 3713426433, 2890887741, 2531903124, 721530673, 4108100855, 1158560523, 4215626327, 4086707267, 239381149, 4105735368, 1927091653, 192987965, 2662456065, 3161952659, 3814724116, 1538481867, 6275129, 2666158292, 52303665, 3064532886, 2887207556, 3853394648, 518755327, 1643163885, 882952186, 2614573476, 3823537516, 2867017412, 1374159785, 3975971167, 1231003132, 423235819, 2836549127, 2037589140, 600989228, 2723944530, 996747902, 2686676354, 3314504667, 3381757186, 1613617052, 539196595, 3246335736, 592746814, 2067366515, 1033116353, 2873721425, 2123513883, 3897157020, 4198928116, 3497306144, 1869438875, 3921661566, 1971604268, 452087330, 652709085, 530077752, 1788224811, 1599395528, 3396125369, 1044589359, 1172057857, 910407299, 2777323186, 2371455886, 2555785932, 2693487469, 1986233264, 3587400517, 2796334831, 1253728048, 1779876709, 3229508354, ]; static const List _envieddatapayPalClientIdLive = [ 3552726364, 2580431173, 2141467652, 1977667847, 1697503619, 1397757985, 3646243811, 3886040956, 4282098460, 1516286622, 3899403401, 959529362, 3036846873, 2315037037, 3713426546, 2890887768, 2531903206, 721530717, 4108100763, 1158560573, 4215626277, 4086707312, 239381246, 4105735307, 1927091696, 192987915, 2662456153, 3161952767, 3814724133, 1538481848, 6275183, 2666158232, 52303712, 3064532989, 2887207658, 3853394669, 518755227, 1643163808, 882952088, 2614573533, 3823537417, 2867017382, 1374159809, 3975971109, 1231003062, 423235762, 2836549170, 2037589165, 600989289, 2723944451, 996747853, 2686676458, 3314504609, 3381757237, 1613617093, 539196619, 3246335641, 592746875, 2067366402, 1033116292, 2873721365, 2123513922, 3897157068, 4198928032, 3497306229, 1869438941, 3921661469, 1971604349, 452087413, 652709036, 530077774, 1788224846, 1599395480, 3396125400, 1044589438, 1172057908, 910407382, 2777323256, 2371455940, 2555785882, 2693487423, 1986233320, 3587400503, 2796334775, 1253728092, 1779876647, 3229508462, ]; static final String payPalClientIdLive = String.fromCharCodes( List.generate( _envieddatapayPalClientIdLive.length, (int i) => i, growable: false, ).map((int i) => _envieddatapayPalClientIdLive[i] ^ _enviedkeypayPalClientIdLive[i])); static const List _enviedkeypayPalSecretLive = [ 2030481687, 2374296424, 1786325201, 3827900864, 2011755744, 1576804989, 4106065234, 151360359, 2017536624, 700557338, 675070335, 3432919210, 3698582474, 1171857885, 512505249, 4025333002, 2024742898, 2116895516, 547549038, 295363405, 2326440743, 4074596481, 1625411968, 1651924972, 2662701471, 1280423674, 2296129374, 496548526, 366509611, 2740563886, 2612163806, 427394664, 2491424604, 2951614831, 168838064, 54111290, 1090769287, 3530866617, 35882260, 18199976, 3463767436, 2943476326, 500035527, 1571743413, 992732431, 799490452, 2823646577, 40216469, 2940170304, 184954509, 4282949234, 2772598102, 558625554, 1849671575, 894050496, 36582234, 161552723, 2659773181, 3663862072, 2018359548, 587051423, 916894767, 4207278312, 3355701774, 2070950420, 531568126, 2134881064, 885934849, 3934990500, 993122391, 3529432859, 1535952155, 85660285, 973589799, 916107842, 2705808325, 3987642436, 1307329773, 1434021525, 248291006, 3625191388, 2496189146, 526077057, 1211805651, 979820799, 4115901212, 1029148217, 3290241584, ]; static const List _envieddatapayPalSecretLive = [ 2030481757, 2374296377, 1786325141, 3827900801, 2011755700, 1576804876, 4106065209, 151360268, 2017536542, 700557406, 675070233, 3432919235, 3698582412, 1171857837, 512505316, 4025333067, 2024742844, 2116895530, 547549022, 295363334, 2326440805, 4074596533, 1625412080, 1651924907, 2662701551, 1280423614, 2296129343, 496548580, 366509633, 2740563927, 2612163759, 427394602, 2491424541, 2951614731, 168838025, 54111312, 1090769407, 3530866676, 35882326, 18200056, 3463767548, 2943476252, 500035472, 1571743456, 992732478, 799490500, 2823646528, 40216574, 2940170355, 184954565, 4282949187, 2772598076, 558625608, 1849671679, 894050449, 36582192, 161552701, 2659773130, 3663862027, 2018359481, 587051479, 916894812, 4207278243, 3355701855, 2070950522, 531568031, 2134881055, 885934901, 3934990580, 993122415, 3529432939, 1535952162, 85660229, 973589839, 916107813, 2705808266, 3987642410, 1307329696, 1434021620, 248291049, 3625191308, 2496189069, 526077145, 1211805601, 979820711, 4115901296, 1029148283, 3290241628, ]; static final String payPalSecretLive = String.fromCharCodes( List.generate( _envieddatapayPalSecretLive.length, (int i) => i, growable: false, ).map((int i) => _envieddatapayPalSecretLive[i] ^ _enviedkeypayPalSecretLive[i])); static const List _enviedkeyintegrationIdPayMob = [ 3654573150, 1726293679, 2947676486, 2157023955, 377315424, 3751620473, 123442183, 781919614, 3351785447, 1189637498, 2610557485, 2489492130, 75344293, ]; static const List _envieddataintegrationIdPayMob = [ 3654573166, 1726293661, 2947676533, 2157023972, 377315414, 3751620426, 123442231, 781919526, 3351785365, 1189637410, 2610557505, 2489492192, 75344329, ]; static final String integrationIdPayMob = String.fromCharCodes( List.generate( _envieddataintegrationIdPayMob.length, (int i) => i, growable: false, ).map((int i) => _envieddataintegrationIdPayMob[i] ^ _enviedkeyintegrationIdPayMob[i])); static const List _enviedkeypasswordPayMob = [ 455586774, 1319198849, 2688367329, 4285093273, 3991230385, 1888169663, 3458283361, 2949993930, 485515189, 3920514897, 624344622, 1942465452, 650310738, 4021059774, 1090786964, 2184434844, 981635995, 2342210780, 3867561568, 1742253967, 2920680318, 2330572772, ]; static const List _envieddatapasswordPayMob = [ 455586737, 1319198913, 2688367247, 4285093362, 3991230453, 1888169613, 3458283330, 2949993971, 485515148, 3920514874, 624344591, 1942465476, 650310678, 4021059809, 1090787002, 2184434923, 981636035, 2342210734, 3867561528, 1742254051, 2920680252, 2330572680, ]; static final String passwordPayMob = String.fromCharCodes(List.generate( _envieddatapasswordPayMob.length, (int i) => i, growable: false, ).map((int i) => _envieddatapasswordPayMob[i] ^ _enviedkeypasswordPayMob[i])); static const List _enviedkeyusernamePayMob = [ 735226781, 3232807860, 604641465, 2603658497, 831960714, 2644715423, 3108564553, 888477117, 3400875144, 817901851, 484913884, 3270397590, 3527485519, 1372702805, 1936333875, 3970994750, 3167947641, ]; static const List _envieddatausernamePayMob = [ 735226798, 3232807811, 604641418, 2603658544, 831960755, 2644715438, 3108564601, 888477065, 3400875192, 817901870, 484913902, 3270397646, 3527485501, 1372702733, 1936333919, 3970994812, 3167947541, ]; static final String usernamePayMob = String.fromCharCodes(List.generate( _envieddatausernamePayMob.length, (int i) => i, growable: false, ).map((int i) => _envieddatausernamePayMob[i] ^ _enviedkeyusernamePayMob[i])); static const List _enviedkeypayMobApikey = [ 2288554765, 99021556, 1379082864, 3641224902, 1617390932, 2147021960, 785487333, 858280014, 737909779, 929875170, 3972756086, 485612469, 3421108523, 4010096243, 64260136, 1894613888, 3787149752, 3344674437, 854275289, 1976573742, 2270494605, 239810333, 4170960803, 2350926209, 2788073045, 2842168659, 1187478396, 2291877331, 1451515120, 976186188, 3288466792, 2918391322, 1054032172, 3631612848, 2570562905, 1507096279, 1568957329, 2861347782, 2126215707, 1271642600, 3009410419, 178493041, 620874867, 3711808171, 2493969056, 4030909934, 1350497437, 2734123054, 768645482, 3549580818, 2941994991, 3126483035, 1934726425, 909758111, 1492783858, 1103493827, 2098224472, 2944369037, 4029371986, 3788572137, 3141935863, 4131572112, 3331115354, 980222396, 1315356134, 3818998721, 2816648721, 2034937471, 160324387, 1976609508, 1213246212, 1910474542, 1177398683, 2157129451, 2431024978, 606165381, 4097525413, 3260187395, 2682525837, 2234868792, 1122049514, 3115849585, 3433788576, 3945226751, 3872653808, 3588345399, 44330722, 3148245917, 501421260, 4135023008, 3359995159, 1721403393, 1310284016, 1575584382, 4020185764, 3164585227, 904832103, 3737745846, 1721936888, 1964930153, 2309824574, 4018644885, 2347934267, 3302578110, 148693602, 2777360975, 1179923342, 582459283, 2605165049, 1508802989, 1150742329, 3442074447, 2136994736, 3137392863, 84173647, 2773779105, 4039649431, 3467094362, 914576556, 3420997411, 262365489, 424245432, 1933033876, 715206461, 2128227907, 3528523880, 655515621, 942302124, 3947702053, 2534699992, 2830377873, 1623889930, 2002636873, 4272113400, 394708502, 23811932, 490809059, 3334395671, 3319809835, 1013090730, 443348053, 1816356813, 72725651, 1150267119, 492520233, 911614955, 2617323322, 2438344147, 2359404232, 2278077740, 2491802776, 1706761179, 1996337518, 3564926735, 4022679790, 1311184514, 1952451092, 2883315381, 1343101584, 723275509, 1951539390, 1149312437, 1112938651, 4047981700, 1669035893, 2390525571, 3757106778, 2239198993, 3383702978, 908696099, 3709077244, 3560935101, 1459778206, 1056915818, 64064107, 3277119886, 1792052535, 2575453249, 3968966925, 1299377180, 2745550106, 2496848151, 1376586936, 1018852387, 1880066071, 586356832, 2156328563, 1846774569, 2440121465, 2323298114, 4200981759, 447629554, 4081049949, 3555810496, 1854698230, 2749732169, 1294011321, 2879684, 2628839113, 1745369115, 79000060, 4119961120, 2150275563, 178890822, 508194240, 1032693264, 1762091940, 3058168058, 2225041293, 3411953063, 256248766, 2662256645, 636293703, 2826287380, 2619048493, 3171863243, 4279962384, 276212829, 1984437294, 3180368442, 4150462732, 1807107120, 874527245, 3886933849, 2604832068, 1845087947, 191955219, 1935696233, 1839548663, 3304755351, 2780783422, 2995577488, 3479722691, 2412828850, 3983823882, 760349881, 3136216048, 1313286025, 820002687, 4218634656, 4156570742, 2317198155, 331974873, 4082744982, 2033334067, 1253887459, 3828824863, 1509681618, 2135130800, 244223328, 4243440203, 4170315033, 1753766115, 1010156976, 3376300731, 1973546264, 1387451528, 582839595, 2302013555, 632179390, 2067259020, 1826567799, 540364447, 1459916657, 1873122319, 1903890961, 2089439980, 987427398, 2405067238, 4080331041, 495170366, 269747709, 1562261480, 2732132835, 3369938925, 1438711953, 1349642243, 1911877160, 617763650, 3972169256, 2747361227, 3254961475, 2440869133, 2728150260, 1200952805, 3323860211, ]; static const List _envieddatapayMobApikey = [ 2288554816, 99021488, 1379082754, 3641224833, 1617390885, 2147022019, 785487264, 858279961, 737909824, 929875155, 3972755972, 485612515, 3421108570, 4010096155, 64260162, 1894613991, 3787149791, 3344674509, 854275247, 1976573803, 2270494685, 239810393, 4170960853, 2350926289, 2788073023, 2842168601, 1187478347, 2291877285, 1451515050, 976186120, 3288466730, 2918391391, 1054032212, 3631612866, 2570562838, 1507096288, 1568957378, 2861347829, 2126215769, 1271642541, 3009410353, 178492950, 620874753, 3711808199, 2493969094, 4030909883, 1350497514, 2734123130, 768645419, 3549580833, 2941994886, 3126483054, 1934726475, 909758193, 1492783778, 1103493878, 2098224386, 2944369123, 4029371940, 3788572038, 3141935803, 4131572131, 3331115287, 980222350, 1315356085, 3818998776, 2816648803, 2034937402, 160324449, 1976609411, 1213246326, 1910474562, 1177398741, 2157129407, 2431024950, 606165472, 4097525469, 3260187467, 2682525880, 2234868808, 1122049470, 3115849505, 3433788614, 3945226696, 3872653758, 3588345469, 44330640, 3148245995, 501421237, 4135022993, 3359995237, 1721403492, 1310283946, 1575584308, 4020185810, 3164585274, 904832051, 3737745880, 1721936847, 1964930067, 2309824600, 4018644898, 2347934285, 3302578154, 148693547, 2777360907, 1179923447, 582459364, 2605164947, 1508803045, 1150742366, 3442074494, 2136994803, 3137392872, 84173571, 2773779140, 4039649518, 3467094377, 914576532, 3420997483, 262365541, 424245500, 1933033965, 715206515, 2128227842, 3528523867, 655515539, 942302107, 3947702129, 2534699912, 2830377975, 1623890030, 2002636849, 4272113330, 394708580, 23811901, 490808987, 3334395686, 3319809881, 1013090781, 443347973, 1816356768, 72725699, 1150267035, 492520292, 911614881, 2617323331, 2438344105, 2359404217, 2278077799, 2491802845, 1706761090, 1996337460, 3564926826, 4022679689, 1311184618, 1952451173, 2883315334, 1343101661, 723275392, 1951539442, 1149312480, 1112938729, 4047981762, 1669035837, 2390525616, 3757106715, 2239199008, 3383702915, 908696132, 3709077172, 3560935134, 1459778262, 1056915803, 64064094, 3277119949, 1792052589, 2575453304, 3968967000, 1299377277, 2745550144, 2496848195, 1376586996, 1018852460, 1880066159, 586356750, 2156328452, 1846774553, 2440121403, 2323298070, 4200981659, 447629448, 4081049877, 3555810440, 1854698116, 2749732107, 1294011384, 2879670, 2628839072, 1745369192, 78999974, 4119961157, 2150275481, 178890771, 508194189, 1032693317, 1762092017, 3058167936, 2225041367, 3411953046, 256248828, 2662256747, 636293637, 2826287473, 2619048552, 3171863202, 4279962490, 276212757, 1984437336, 3180368500, 4150462822, 1807107177, 874527297, 3886933815, 2604832023, 1845087994, 191955281, 1935696188, 1839548606, 3304755412, 2780783475, 2995577592, 3479722640, 2412828895, 3983823962, 760349905, 3136215985, 1313286072, 820002634, 4218634697, 4156570640, 2317198083, 331974816, 4082745024, 2033334082, 1253887400, 3828824922, 1509681567, 2135130872, 244223287, 4243440178, 4170315090, 1753766063, 1010157010, 3376300738, 1973546349, 1387451585, 582839675, 2302013445, 632179421, 2067259076, 1826567758, 540364490, 1459916564, 1873122371, 1903890978, 2089439898, 987427356, 2405067167, 4080331109, 495170392, 269747648, 1562261387, 2732132757, 3369938830, 1438712009, 1349642353, 1911877232, 617763630, 3972169322, 2747361191, 3254961441, 2440869231, 2728150166, 1200952711, 3323860113, ]; static final String payMobApikey = String.fromCharCodes(List.generate( _envieddatapayMobApikey.length, (int i) => i, growable: false, ).map((int i) => _envieddatapayMobApikey[i] ^ _enviedkeypayMobApikey[i])); static const List _enviedkeyintegrationIdPayMobWallet = [ 1413137455, 898254321, 2177459705, 3072645458, 1820170071, 2197507912, 117696677, 1351150926, 3651392903, 3946798712, 928177752, 1620501515, 1162201864, ]; static const List _envieddataintegrationIdPayMobWallet = [ 1413137439, 898254275, 2177459662, 3072645477, 1820170080, 2197507963, 117696668, 1351150870, 3651393013, 3946798624, 928177716, 1620501577, 1162201956, ]; static final String integrationIdPayMobWallet = String.fromCharCodes( List.generate( _envieddataintegrationIdPayMobWallet.length, (int i) => i, growable: false, ).map((int i) => _envieddataintegrationIdPayMobWallet[i] ^ _enviedkeyintegrationIdPayMobWallet[i])); static const List _enviedkeysmsPasswordEgypt = [ 182877642, 162116053, 3144150019, 2192521632, 3078726239, 628617237, 3598374899, 1422188225, 2405592561, 2801136078, 4004604538, 1874426530, 1875960650, 3418924421, 876935509, 2604388168, ]; static const List _envieddatasmsPasswordEgypt = [ 182877568, 162116092, 3144150101, 2192521672, 3078726242, 628617316, 3598374801, 1422188270, 2405592497, 2801136003, 4004604450, 1874426576, 1875960594, 3418924521, 876935447, 2604388132, ]; static final String smsPasswordEgypt = String.fromCharCodes( List.generate( _envieddatasmsPasswordEgypt.length, (int i) => i, growable: false, ).map((int i) => _envieddatasmsPasswordEgypt[i] ^ _enviedkeysmsPasswordEgypt[i])); static const List _enviedkeyocpApimSubscriptionKey = [ 2414595069, 881357453, 2811886322, 3795850197, 1418919245, 3119792422, 186943801, 265664303, 1973937884, 3434198924, 3676058486, 2705361094, 3314588616, 1182082916, 2271931341, 1919957345, 1172116628, 1231830017, 862957600, 3141659494, 2386846607, 3726068195, 2750296861, 2555568196, 529987068, 113644863, 740301871, 631670019, 2211800778, 1751909562, 1566096200, 3834424971, ]; static const List _envieddataocpApimSubscriptionKey = [ 2414595021, 881357547, 2811886279, 3795850161, 1418919212, 3119792453, 186943834, 265664332, 1973937848, 3434199022, 3676058389, 2705361059, 3314588668, 1182082901, 2271931390, 1919957328, 1172116726, 1231830064, 862957633, 3141659475, 2386846697, 3726068186, 2750296872, 2555568246, 529987013, 113644806, 740301849, 631670064, 2211800826, 1751909512, 1566096173, 3834425016, ]; static final String ocpApimSubscriptionKey = String.fromCharCodes( List.generate( _envieddataocpApimSubscriptionKey.length, (int i) => i, growable: false, ).map((int i) => _envieddataocpApimSubscriptionKey[i] ^ _enviedkeyocpApimSubscriptionKey[i])); static const List _enviedkeychatGPTkeySeferNew4 = [ 1076556633, 2963087341, 3996850880, 736133229, 2083391885, 631860030, 3191908704, 3580038176, 3669196509, 3078267219, 2170935048, 3425289401, 1826201013, 1391964679, 4050338086, 2284609889, 272223768, 4034924380, 771773434, 691382098, 3384763695, 1210074658, 3737542700, 795874415, 2520481719, 2531161799, 1532035674, 3304479058, 142476670, 4254358635, 1807727471, 3356514599, 931112425, 1954700454, 3091208618, 3038959884, 566640323, 26573218, 1717059450, 2298525598, 1517625648, 4253189760, 700894011, 2924350747, 2138406976, 3025390544, 1698946599, 1379395357, 118566879, 231476294, 1479980332, 3169308695, 490528272, 725922310, 3086397863, 279991260, 402151131, 1754887422, 982253443, 3552655340, 371865671, 2689612609, 3470419031, ]; static const List _envieddatachatGPTkeySeferNew4 = [ 1076556579, 2963087242, 3996850925, 736133147, 2083391969, 631860055, 3191908613, 3580038157, 3669196527, 3078267199, 2170935097, 3425289443, 1826201049, 1391964791, 4050338142, 2284609800, 272223861, 4034924304, 771773360, 691382116, 3384763736, 1210074739, 3737542755, 795874329, 2520481749, 2531161765, 1532035694, 3304478982, 142476560, 4254358568, 1807727446, 3356514687, 931112347, 1954700510, 3091208653, 3038959961, 566640262, 26573275, 1717059372, 2298525647, 1517625721, 4253189877, 700893965, 2924350799, 2138406921, 3025390484, 1698946579, 1379395436, 118566799, 231476338, 1479980394, 3169308738, 490528325, 725922423, 3086397896, 279991183, 402151150, 1754887334, 982253553, 3552655284, 371865643, 2689612547, 3470419003, ]; static final String chatGPTkeySeferNew4 = String.fromCharCodes( List.generate( _envieddatachatGPTkeySeferNew4.length, (int i) => i, growable: false, ).map((int i) => _envieddatachatGPTkeySeferNew4[i] ^ _enviedkeychatGPTkeySeferNew4[i])); static const List _enviedkeyanthropicAIkeySeferNew = [ 3497607593, 2340598064, 1262607821, 565891647, 3746086673, 4226120506, 3533229263, 1265467964, 1805177012, 375206222, 1205414190, 1589033804, 2957731336, 251111401, 300352762, 971190292, 165378315, 180421589, 2498489434, 271619944, 4027613759, 3152936729, 4293000363, 4047303899, 721987091, 1945831717, 487668300, 958684386, 3048525290, 583914267, 3948826816, 1147224384, 11730391, 3408113444, 1165476622, 1324843187, 2904161174, 1066334824, 3472421579, 3866691095, 957207598, 1359260716, 898571805, 1658525385, 3476539724, 1854197051, 1927574239, 371396213, 2776052536, 501553212, 581863247, 4188546243, 2293407257, 3405259633, 463115780, 3470969446, 527942819, 1211438252, 1309032602, 375510161, 3051306551, 1665084745, 3666305438, 345147658, 2282310515, 1286203917, 2113155411, 4282979471, 394325385, 3992158732, 935801107, 346276638, 439947739, 1487007136, 1544596163, 1932454069, 3417583390, 2827628785, 1489482874, 2583490175, 2578164134, 3994046976, 2882095989, 2893788550, 3625013441, 1394658830, 2171262927, 1731894667, 1491221739, 4066090668, 210415079, 1347650176, 450661996, 3143646300, 3222623393, 496573453, 3636174320, 2816243210, 2023062957, 2555119348, 255887650, 768360210, 872971978, 2262564598, 3341469319, 3284443495, 3177589200, 692016282, 270380105, 3637537557, 1589396004, 3575714188, 3604479021, 2982744586, 1689906383, ]; static const List _envieddataanthropicAIkeySeferNew = [ 3497607635, 2340598103, 1262607840, 565891662, 3746086771, 4226120537, 3533229282, 1265467981, 1805177026, 375206177, 1205414173, 1589033845, 2957731365, 251111300, 300352660, 971190304, 165378397, 180421553, 2498489367, 271619897, 4027613706, 3152936823, 4293000414, 4047303825, 721987190, 1945831788, 487668245, 958684298, 3048525223, 583914325, 3948826868, 1147224336, 11730323, 3408113533, 1165476732, 1324843140, 2904161255, 1066334727, 3472421555, 3866691108, 957207555, 1359260760, 898571823, 1658525344, 3476539773, 1854197111, 1927574199, 371396162, 2776052569, 501553266, 581863195, 4188546183, 2293407359, 3405259560, 463115842, 3470969419, 527942884, 1211438282, 1309032610, 375510246, 3051306591, 1665084700, 3666305492, 345147728, 2282310448, 1286204030, 2113155431, 4282979512, 394325452, 3992158825, 935801206, 346276722, 439947664, 1487007182, 1544596219, 1932454122, 3417583435, 2827628690, 1489482775, 2583490090, 2578164203, 3994047085, 2882095900, 2893788629, 3625013389, 1394658927, 2171262889, 1731894715, 1491221694, 4066090726, 210414976, 1347650224, 450661928, 3143646250, 3222623476, 496573537, 3636174241, 2816243320, 2023063017, 2555119232, 255887631, 768360229, 872972028, 2262564533, 3341469397, 3284443413, 3177589179, 692016331, 270380056, 3637537613, 1589396054, 3575714260, 3604479041, 2982744648, 1689906339, ]; static final String anthropicAIkeySeferNew = String.fromCharCodes( List.generate( _envieddataanthropicAIkeySeferNew.length, (int i) => i, growable: false, ).map((int i) => _envieddataanthropicAIkeySeferNew[i] ^ _enviedkeyanthropicAIkeySeferNew[i])); static const List _enviedkeyllama3Key = [ 885088594, 2029043020, 471244066, 106289035, 4150241905, 2162869705, 2535617460, 2791378646, 3599865233, 11829306, 3723821367, 897214443, 2346921271, 620796019, 2157117439, 1088999473, 1355091641, 3547099981, 1805725306, 3681386991, 4237192823, 2429376902, 1329080405, 2547249326, 1586537703, 2923317113, 4289190607, 2652587145, 2323377003, 2865396422, 2052834529, 3754568014, 1627697854, 779921213, 3298031603, 333058013, 2244345759, 3388336537, 3040084026, 69525403, 2290723667, 3368367523, 2488957174, 4035197742, 1771564708, 2654793947, 2577738857, 3927374704, 476796961, 1808037711, 3139261084, 1092266942, 2441768177, 2389431230, 3749491302, 4022985518, 2208437853, 3340787371, 27458753, 1215398584, 865432840, 31304311, 57686919, ]; static const List _envieddatallama3Key = [ 885088569, 2029042998, 471244101, 106289108, 4150241796, 2162869661, 2535617516, 2791378607, 3599865250, 11829343, 3723821326, 897214383, 2346921333, 620795921, 2157117372, 1088999520, 1355091592, 3547099915, 1805725204, 3681386914, 4237192752, 2429377003, 1329080365, 2547249399, 1586537616, 2923317037, 4289190532, 2652587248, 2323376920, 2865396414, 2052834520, 3754567963, 1627697901, 779921164, 3298031505, 333057960, 2244345837, 3388336609, 3040084080, 69525489, 2290723687, 3368367557, 2488957104, 4035197785, 1771564779, 2654793905, 2577738764, 3927374660, 476797037, 1808037653, 3139261150, 1092266987, 2441768119, 2389431285, 3749491244, 4022985597, 2208437868, 3340787443, 27458739, 1215398624, 865432932, 31304245, 57687019, ]; static final String llama3Key = String.fromCharCodes(List.generate( _envieddatallama3Key.length, (int i) => i, growable: false, ).map((int i) => _envieddatallama3Key[i] ^ _enviedkeyllama3Key[i])); static const List _enviedkeypayMobOutClientSecrret = [ 4264988709, 3646168072, 3380432823, 1202916749, 188891197, 2348055028, 980374865, 691847699, 858619970, 236163923, 983512430, 1173363436, 2588752223, 1850955507, 2940315249, 3012903707, 3454704114, 3679631406, 1336038420, 1861903658, 1061219879, 3511339279, 465062838, 1995684868, 166723696, 2714471717, 2750986828, 3271474652, 453494562, 3134765296, 2961820378, 3255418231, 1527579838, 1503229545, 865486792, 4016651235, 1193085733, 4013525992, 3996077619, 987541940, 90574541, 1343106639, 4020388508, 738850202, 321279576, 2278021266, 964616123, 848235473, 2268364926, 628132074, 519294312, 851646420, 768312856, 2658302388, 1925598342, 2547803291, 3802816604, 991707138, 3036080356, 1794174250, 642074119, 69309849, 1079636780, 3185344540, 2412187710, 4131118941, 2720338736, 1171166020, 4284190285, 4293720329, 2949473096, 4012259445, 1771814354, 4253311796, 55319254, 1295125115, 3305444413, 1795046677, 799432192, 453289034, 1185735862, 4229905307, 3858769716, 198473083, 1396343935, 2889162676, 3788233503, 1272897642, 4072483666, 4139541119, 3224656612, 2978560105, 2199000949, 3875281074, 190782812, 81611089, 3335432250, 696827626, 312099149, 4261642655, 4052447067, 3435334467, 2730833303, 112962881, 3837714402, 2324184634, 3619344500, 711843341, 3625049384, 1378545021, 3368427889, 2585099402, 41176282, 328886374, 1501826592, 3092199643, 303692997, 2178944930, 2809314240, 4202936697, 2552084579, 2128830007, 2503255561, 1271344259, 4003981504, 2891561291, 2510780511, 3887504346, 2526998922, 2771081782, 3660656166, 1610615192, 2472001617, 4213066156, 3058810271, ]; static const List _envieddatapayMobOutClientSecrret = [ 4264988765, 3646168177, 3380432861, 1202916839, 188891247, 2348054936, 980374842, 691847794, 858619946, 236163865, 983512355, 1173363420, 2588752135, 1850955408, 2940315202, 3012903715, 3454704037, 3679631428, 1336038485, 1861903706, 1061219940, 3511339328, 465062878, 1995684924, 166723602, 2714471763, 2750986795, 3271474576, 453494555, 3134765187, 2961820342, 3255418161, 1527579854, 1503229479, 865486764, 4016651182, 1193085724, 4013525937, 3996077654, 987542007, 90574520, 1343106678, 4020388573, 738850290, 321279508, 2278021347, 964616153, 848235454, 2268364853, 628132007, 519294264, 851646368, 768312949, 2658302439, 1925598448, 2547803384, 3802816622, 991707212, 3036080349, 1794174309, 642074163, 69309933, 1079636852, 3185344612, 2412187768, 4131118865, 2720338790, 1171166070, 4284190215, 4293720392, 2949473054, 4012259395, 1771814305, 4253311808, 55319188, 1295125032, 3305444457, 1795046740, 799432263, 453288972, 1185735921, 4229905368, 3858769762, 198472974, 1396343837, 2889162739, 3788233594, 1272897628, 4072483615, 4139541041, 3224656532, 2978560010, 2199000898, 3875281151, 190782758, 81611035, 3335432276, 696827568, 312099198, 4261642700, 4052447026, 3435334423, 2730833313, 112962822, 3837714322, 2324184667, 3619344386, 711843407, 3625049415, 1378544958, 3368427837, 2585099485, 41176241, 328886323, 1501826646, 3092199565, 303692967, 2178944966, 2809314195, 4202936637, 2552084482, 2128830074, 2503255609, 1271344377, 4003981448, 2891561277, 2510780458, 3887504280, 2526998981, 2771081838, 3660656212, 1610615232, 2472001597, 4213066222, 3058810355, ]; static final String payMobOutClientSecrret = String.fromCharCodes( List.generate( _envieddatapayMobOutClientSecrret.length, (int i) => i, growable: false, ).map((int i) => _envieddatapayMobOutClientSecrret[i] ^ _enviedkeypayMobOutClientSecrret[i])); static const List _enviedkeypayMobOutClient_id = [ 1277710166, 3570887466, 3300596234, 3946106165, 2491202833, 1455847098, 3705885436, 209105712, 734539831, 2504601961, 3463065390, 24500048, 135958795, 3182539427, 2539508928, 926247052, 811539137, 3915063505, 1600374961, 1779440534, 1118002215, 1881039676, 2188534408, 1229554472, 3010114338, 637363783, 3231531923, 3202961066, 2261292633, 4151812925, 3752840036, 4215950647, 3121405040, 2089005472, 3542781189, 208084763, 3546830170, 1060027583, 1403716561, 2333828858, 4263593250, 3919363206, 1976159982, 799681614, 3137082410, 2016555878, 697118340, ]; static const List _envieddatapayMobOutClient_id = [ 1277710092, 3570887450, 3300596287, 3946106176, 2491202917, 1455847054, 3705885380, 209105748, 734539873, 2504601858, 3463065413, 24499971, 135958841, 3182539460, 2539508873, 926247102, 811539131, 3915063476, 1600375007, 1779440592, 1118002273, 1881039711, 2188534467, 1229554523, 3010114372, 637363715, 3231531992, 3202961100, 2261292561, 4151812988, 3752839985, 4215950599, 3121404967, 2089005541, 3542781257, 208084842, 3546830097, 1060027590, 1403716507, 2333828810, 4263593326, 3919363294, 1976159900, 799681558, 3137082438, 2016555812, 697118440, ]; static final String payMobOutClient_id = String.fromCharCodes( List.generate( _envieddatapayMobOutClient_id.length, (int i) => i, growable: false, ).map((int i) => _envieddatapayMobOutClient_id[i] ^ _enviedkeypayMobOutClient_id[i])); static const List _enviedkeypayMobOutPassword = [ 1706063984, 1969680724, 68062376, 2896156483, 1498432991, 4275012347, 965427005, 3081980774, 2457192874, 3211472108, 1543033645, 425244421, 1733608295, 3092152787, 3120368766, 3841960491, 2474388827, 4269766308, 3903459638, 460952430, 4193866642, 708981423, 2457676098, 1415795025, 459092326, 1283158809, 2410763725, 1200198681, 3508884257, 707325897, 174438679, 2666306102, ]; static const List _envieddatapayMobOutPassword = [ 1706063924, 1969680742, 68062418, 2896156425, 1498432921, 4275012227, 965427030, 3081980707, 2457192841, 3211472032, 1543033699, 425244526, 1733608276, 3092152741, 3120368644, 3841960472, 2474388835, 4269766366, 3903459588, 460952330, 4193866699, 708981463, 2457676082, 1415794975, 459092224, 1283158862, 2410763669, 1200198763, 3508884345, 707325861, 174438741, 2666306138, ]; static final String payMobOutPassword = String.fromCharCodes( List.generate( _envieddatapayMobOutPassword.length, (int i) => i, growable: false, ).map((int i) => _envieddatapayMobOutPassword[i] ^ _enviedkeypayMobOutPassword[i])); static const List _enviedkeypayMobOutUserName = [ 979111844, 855161253, 3547697110, 3333900560, 595342184, 3063681166, 3673923474, 1052959906, 2912271237, 2658978493, 4248499936, 2174942116, 182184572, 737370897, 2195848513, 731565787, 401446721, 3124102037, 1517816789, 4166303242, 3342050373, 3196365210, 3339925039, 3455638556, ]; static const List _envieddatapayMobOutUserName = [ 979111902, 855161295, 3547697059, 3333900666, 595342084, 3063681233, 3673923555, 1052959956, 2912271338, 2658978530, 4248499846, 2174942163, 182184471, 737371003, 2195848487, 731565756, 401446699, 3124102137, 1517816717, 4166303352, 3342050333, 3196365302, 3339925101, 3455638640, ]; static final String payMobOutUserName = String.fromCharCodes( List.generate( _envieddatapayMobOutUserName.length, (int i) => i, growable: false, ).map((int i) => _envieddatapayMobOutUserName[i] ^ _enviedkeypayMobOutUserName[i])); static const List _enviedkeyA = [4070300691]; static const List _envieddataA = [4070300738]; static final String A = String.fromCharCodes(List.generate( _envieddataA.length, (int i) => i, growable: false, ).map((int i) => _envieddataA[i] ^ _enviedkeyA[i])); static const List _enviedkeyB = [1084207557]; static const List _envieddataB = [1084207517]; static final String B = String.fromCharCodes(List.generate( _envieddataB.length, (int i) => i, growable: false, ).map((int i) => _envieddataB[i] ^ _enviedkeyB[i])); static const List _enviedkeyC = [3054985261]; static const List _envieddataC = [3054985323]; static final String C = String.fromCharCodes(List.generate( _envieddataC.length, (int i) => i, growable: false, ).map((int i) => _envieddataC[i] ^ _enviedkeyC[i])); static const List _enviedkeyD = [3115376077]; static const List _envieddataD = [3115376020]; static final String D = String.fromCharCodes(List.generate( _envieddataD.length, (int i) => i, growable: false, ).map((int i) => _envieddataD[i] ^ _enviedkeyD[i])); static const List _enviedkeyE = [6624674]; static const List _envieddataE = [6624744]; static final String E = String.fromCharCodes(List.generate( _envieddataE.length, (int i) => i, growable: false, ).map((int i) => _envieddataE[i] ^ _enviedkeyE[i])); static const List _enviedkeyF = [1354559357]; static const List _envieddataF = [1354559272]; static final String F = String.fromCharCodes(List.generate( _envieddataF.length, (int i) => i, growable: false, ).map((int i) => _envieddataF[i] ^ _enviedkeyF[i])); static const List _enviedkeyG = [3789449009]; static const List _envieddataG = [3789449082]; static final String G = String.fromCharCodes(List.generate( _envieddataG.length, (int i) => i, growable: false, ).map((int i) => _envieddataG[i] ^ _enviedkeyG[i])); static const List _enviedkeyH = [3797578577]; static const List _envieddataH = [3797578502]; static final String H = String.fromCharCodes(List.generate( _envieddataH.length, (int i) => i, growable: false, ).map((int i) => _envieddataH[i] ^ _enviedkeyH[i])); static const List _enviedkeyI = [2380101037]; static const List _envieddataI = [2380101090]; static final String I = String.fromCharCodes(List.generate( _envieddataI.length, (int i) => i, growable: false, ).map((int i) => _envieddataI[i] ^ _enviedkeyI[i])); static const List _enviedkeyJ = [1110014504]; static const List _envieddataJ = [1110014573]; static final String J = String.fromCharCodes(List.generate( _envieddataJ.length, (int i) => i, growable: false, ).map((int i) => _envieddataJ[i] ^ _enviedkeyJ[i])); static const List _enviedkeyK = [4173176877]; static const List _envieddataK = [4173176938]; static final String K = String.fromCharCodes(List.generate( _envieddataK.length, (int i) => i, growable: false, ).map((int i) => _envieddataK[i] ^ _enviedkeyK[i])); static const List _enviedkeyL = [1499334736]; static const List _envieddataL = [1499334658]; static final String L = String.fromCharCodes(List.generate( _envieddataL.length, (int i) => i, growable: false, ).map((int i) => _envieddataL[i] ^ _enviedkeyL[i])); static const List _enviedkeyM = [2674591645]; static const List _envieddataM = [2674591699]; static final String M = String.fromCharCodes(List.generate( _envieddataM.length, (int i) => i, growable: false, ).map((int i) => _envieddataM[i] ^ _enviedkeyM[i])); static const List _enviedkeyN = [304791608]; static const List _envieddataN = [304791674]; static final String N = String.fromCharCodes(List.generate( _envieddataN.length, (int i) => i, growable: false, ).map((int i) => _envieddataN[i] ^ _enviedkeyN[i])); static const List _enviedkeyO = [3693551577]; static const List _envieddataO = [3693551504]; static final String O = String.fromCharCodes(List.generate( _envieddataO.length, (int i) => i, growable: false, ).map((int i) => _envieddataO[i] ^ _enviedkeyO[i])); static const List _enviedkeyP = [4224688067]; static const List _envieddataP = [4224688021]; static final String P = String.fromCharCodes(List.generate( _envieddataP.length, (int i) => i, growable: false, ).map((int i) => _envieddataP[i] ^ _enviedkeyP[i])); static const List _enviedkeyQ = [2827380783]; static const List _envieddataQ = [2827380846]; static final String Q = String.fromCharCodes(List.generate( _envieddataQ.length, (int i) => i, growable: false, ).map((int i) => _envieddataQ[i] ^ _enviedkeyQ[i])); static const List _enviedkeyR = [582702531]; static const List _envieddataR = [582702479]; static final String R = String.fromCharCodes(List.generate( _envieddataR.length, (int i) => i, growable: false, ).map((int i) => _envieddataR[i] ^ _enviedkeyR[i])); static const List _enviedkeyS = [3082986447]; static const List _envieddataS = [3082986389]; static final String S = String.fromCharCodes(List.generate( _envieddataS.length, (int i) => i, growable: false, ).map((int i) => _envieddataS[i] ^ _enviedkeyS[i])); static const List _enviedkeyT = [1828852022]; static const List _envieddataT = [1828852085]; static final String T = String.fromCharCodes(List.generate( _envieddataT.length, (int i) => i, growable: false, ).map((int i) => _envieddataT[i] ^ _enviedkeyT[i])); static const List _enviedkeyU = [2605092056]; static const List _envieddataU = [2605091984]; static final String U = String.fromCharCodes(List.generate( _envieddataU.length, (int i) => i, growable: false, ).map((int i) => _envieddataU[i] ^ _enviedkeyU[i])); static const List _enviedkeyV = [566737383]; static const List _envieddataV = [566737335]; static final String V = String.fromCharCodes(List.generate( _envieddataV.length, (int i) => i, growable: false, ).map((int i) => _envieddataV[i] ^ _enviedkeyV[i])); static const List _enviedkeyW = [2482454634]; static const List _envieddataW = [2482454590]; static final String W = String.fromCharCodes(List.generate( _envieddataW.length, (int i) => i, growable: false, ).map((int i) => _envieddataW[i] ^ _enviedkeyW[i])); static const List _enviedkeyX = [2686680474]; static const List _envieddataX = [2686680542]; static final String X = String.fromCharCodes(List.generate( _envieddataX.length, (int i) => i, growable: false, ).map((int i) => _envieddataX[i] ^ _enviedkeyX[i])); static const List _enviedkeyY = [3902863251]; static const List _envieddataY = [3902863296]; static final String Y = String.fromCharCodes(List.generate( _envieddataY.length, (int i) => i, growable: false, ).map((int i) => _envieddataY[i] ^ _enviedkeyY[i])); static const List _enviedkeyZ = [2832255177]; static const List _envieddataZ = [2832255108]; static final String Z = String.fromCharCodes(List.generate( _envieddataZ.length, (int i) => i, growable: false, ).map((int i) => _envieddataZ[i] ^ _enviedkeyZ[i])); static const List _enviedkeya = [3933644150]; static const List _envieddataa = [3933644039]; static final String a = String.fromCharCodes(List.generate( _envieddataa.length, (int i) => i, growable: false, ).map((int i) => _envieddataa[i] ^ _enviedkeya[i])); static const List _enviedkeyb = [884281895]; static const List _envieddatab = [884281951]; static final String b = String.fromCharCodes(List.generate( _envieddatab.length, (int i) => i, growable: false, ).map((int i) => _envieddatab[i] ^ _enviedkeyb[i])); static const List _enviedkeyc = [4285848867]; static const List _envieddatac = [4285848901]; static final String c = String.fromCharCodes(List.generate( _envieddatac.length, (int i) => i, growable: false, ).map((int i) => _envieddatac[i] ^ _enviedkeyc[i])); static const List _enviedkeyd = [325872292]; static const List _envieddatad = [325872349]; static final String d = String.fromCharCodes(List.generate( _envieddatad.length, (int i) => i, growable: false, ).map((int i) => _envieddatad[i] ^ _enviedkeyd[i])); static const List _enviedkeye = [551888213]; static const List _envieddatae = [551888191]; static final String e = String.fromCharCodes(List.generate( _envieddatae.length, (int i) => i, growable: false, ).map((int i) => _envieddatae[i] ^ _enviedkeye[i])); static const List _enviedkeyf = [3390312645]; static const List _envieddataf = [3390312624]; static final String f = String.fromCharCodes(List.generate( _envieddataf.length, (int i) => i, growable: false, ).map((int i) => _envieddataf[i] ^ _enviedkeyf[i])); static const List _enviedkeyg = [1523644267]; static const List _envieddatag = [1523644160]; static final String g = String.fromCharCodes(List.generate( _envieddatag.length, (int i) => i, growable: false, ).map((int i) => _envieddatag[i] ^ _enviedkeyg[i])); static const List _enviedkeyh = [1027626612]; static const List _envieddatah = [1027626499]; static final String h = String.fromCharCodes(List.generate( _envieddatah.length, (int i) => i, growable: false, ).map((int i) => _envieddatah[i] ^ _enviedkeyh[i])); static const List _enviedkeyi = [3972156524]; static const List _envieddatai = [3972156419]; static final String i = String.fromCharCodes(List.generate( _envieddatai.length, (int i) => i, growable: false, ).map((int i) => _envieddatai[i] ^ _enviedkeyi[i])); static const List _enviedkeyj = [3652219750]; static const List _envieddataj = [3652219651]; static final String j = String.fromCharCodes(List.generate( _envieddataj.length, (int i) => i, growable: false, ).map((int i) => _envieddataj[i] ^ _enviedkeyj[i])); static const List _enviedkeyk = [1892242618]; static const List _envieddatak = [1892242653]; static final String k = String.fromCharCodes(List.generate( _envieddatak.length, (int i) => i, growable: false, ).map((int i) => _envieddatak[i] ^ _enviedkeyk[i])); static const List _enviedkeyl = [4139038360]; static const List _envieddatal = [4139038442]; static final String l = String.fromCharCodes(List.generate( _envieddatal.length, (int i) => i, growable: false, ).map((int i) => _envieddatal[i] ^ _enviedkeyl[i])); static const List _enviedkeym = [1935902723]; static const List _envieddatam = [1935902829]; static final String m = String.fromCharCodes(List.generate( _envieddatam.length, (int i) => i, growable: false, ).map((int i) => _envieddatam[i] ^ _enviedkeym[i])); static const List _enviedkeyn = [454391326]; static const List _envieddatan = [454391420]; static final String n = String.fromCharCodes(List.generate( _envieddatan.length, (int i) => i, growable: false, ).map((int i) => _envieddatan[i] ^ _enviedkeyn[i])); static const List _enviedkeyo = [1549454828]; static const List _envieddatao = [1549454725]; static final String o = String.fromCharCodes(List.generate( _envieddatao.length, (int i) => i, growable: false, ).map((int i) => _envieddatao[i] ^ _enviedkeyo[i])); static const List _enviedkeyp = [3208483522]; static const List _envieddatap = [3208483508]; static final String p = String.fromCharCodes(List.generate( _envieddatap.length, (int i) => i, growable: false, ).map((int i) => _envieddatap[i] ^ _enviedkeyp[i])); static const List _enviedkeyq = [227736950]; static const List _envieddataq = [227736855]; static final String q = String.fromCharCodes(List.generate( _envieddataq.length, (int i) => i, growable: false, ).map((int i) => _envieddataq[i] ^ _enviedkeyq[i])); static const List _enviedkeyr = [3723456175]; static const List _envieddatar = [3723456195]; static final String r = String.fromCharCodes(List.generate( _envieddatar.length, (int i) => i, growable: false, ).map((int i) => _envieddatar[i] ^ _enviedkeyr[i])); static const List _enviedkeys = [698669951]; static const List _envieddatas = [698669829]; static final String s = String.fromCharCodes(List.generate( _envieddatas.length, (int i) => i, growable: false, ).map((int i) => _envieddatas[i] ^ _enviedkeys[i])); static const List _enviedkeyt = [2925574026]; static const List _envieddatat = [2925574121]; static final String t = String.fromCharCodes(List.generate( _envieddatat.length, (int i) => i, growable: false, ).map((int i) => _envieddatat[i] ^ _enviedkeyt[i])); static const List _enviedkeyu = [766142683]; static const List _envieddatau = [766142643]; static final String u = String.fromCharCodes(List.generate( _envieddatau.length, (int i) => i, growable: false, ).map((int i) => _envieddatau[i] ^ _enviedkeyu[i])); static const List _enviedkeyv = [864666963]; static const List _envieddatav = [864666915]; static final String v = String.fromCharCodes(List.generate( _envieddatav.length, (int i) => i, growable: false, ).map((int i) => _envieddatav[i] ^ _enviedkeyv[i])); static const List _enviedkeyw = [2272854285]; static const List _envieddataw = [2272854393]; static final String w = String.fromCharCodes(List.generate( _envieddataw.length, (int i) => i, growable: false, ).map((int i) => _envieddataw[i] ^ _enviedkeyw[i])); static const List _enviedkeyx = [1538775448]; static const List _envieddatax = [1538775548]; static final String x = String.fromCharCodes(List.generate( _envieddatax.length, (int i) => i, growable: false, ).map((int i) => _envieddatax[i] ^ _enviedkeyx[i])); static const List _enviedkeyy = [1867877966]; static const List _envieddatay = [1867877949]; static final String y = String.fromCharCodes(List.generate( _envieddatay.length, (int i) => i, growable: false, ).map((int i) => _envieddatay[i] ^ _enviedkeyy[i])); static const List _enviedkeyz = [2379433934]; static const List _envieddataz = [2379433891]; static final String z = String.fromCharCodes(List.generate( _envieddataz.length, (int i) => i, growable: false, ).map((int i) => _envieddataz[i] ^ _enviedkeyz[i])); static const List _enviedkeykeyOfApp = [ 3703376563, 1126704269, 3589076024, 2257760945, 2714219593, 66002768, 2508345102, 2625987895, 1672280462, 1959184026, 4215276535, 1001843470, 4154811221, 1947813524, 4175333798, 4264094942, 2714313863, 28573172, 303569854, 2907929024, 1446736686, 1355382816, 1204633338, 335451250, 2458769150, 1798378055, 3766825897, 3448538967, 4175183517, 1408526284, 3775543911, 912105030, 1601117947, 2057204534, 1675599468, 279594428, 1171863592, 1279296811, ]; static const List _envieddatakeyOfApp = [ 3703376593, 1126704364, 3589076052, 2257760962, 2714219564, 66002726, 2508345166, 2625987840, 1672280504, 1959184035, 4215276481, 1001843578, 4154811188, 1947813622, 4175333832, 4264094911, 2714313958, 28573070, 303569883, 2907929011, 1446736707, 1355382853, 1204633234, 335451159, 2458769036, 1798378018, 3766825934, 3448538925, 4175183597, 1408526250, 3775543821, 912105001, 1601117859, 2057204548, 1675599412, 279594446, 1171863658, 1279296857, ]; static final String keyOfApp = String.fromCharCodes(List.generate( _envieddatakeyOfApp.length, (int i) => i, growable: false, ).map((int i) => _envieddatakeyOfApp[i] ^ _enviedkeykeyOfApp[i])); } ================================================== FILE PATH: ./lib/constant/char_map.dart ================================================== import '../env/env.dart'; Map cs = { "a": Env.a, "b": Env.b, "c": Env.c, "d": Env.d, "e": Env.e, "f": Env.f, "g": Env.g, "h": Env.h, "i": Env.i, "j": Env.j, "k": Env.k, "l": Env.l, "m": Env.m, "n": Env.n, "o": Env.o, "p": Env.p, "q": Env.q, "r": Env.r, "s": Env.s, "t": Env.t, "u": Env.u, "v": Env.v, "w": Env.w, "x": Env.x, "y": Env.y, "z": Env.z, }; Map cC = { "A": Env.A, "B": Env.B, "C": Env.C, "D": Env.D, "E": Env.E, "F": Env.F, "G": Env.G, "H": Env.H, "I": Env.I, "J": Env.J, "K": Env.K, "L": Env.L, "M": Env.M, "N": Env.N, "O": Env.O, "P": Env.P, "Q": Env.Q, "R": Env.R, "S": Env.S, "T": Env.T, "U": Env.U, "V": Env.V, "W": Env.W, "X": Env.X, "Y": Env.Y, "Z": Env.Z }; // // Map cn = { "0": "3", "1": "7", "2": "1", "3": "9", "4": "0", "5": "5", "6": "2", "7": "6", "8": "4", "9": "8" }; ================================================== FILE PATH: ./lib/constant/colors.dart ================================================== import 'package:flutter/material.dart'; /// A class that holds the color palette for the 'Intaleq' app. /// The palette is professionally designed to be modern, cohesive, and culturally /// relevant, inspired by the Syrian flag and the app's brand identity. class AppColor { // --- Core Brand Colors (Inspired by the Syrian Flag) --- /// **Primary Color:** A strong, modern green representing growth, safety, and movement. /// Ideal for app bars, primary buttons, and major UI elements. static const Color primaryColor = Color(0xFF108942); /// **Text/Write Color:** A very dark, near-black color for main text. /// It's softer on the eyes than pure black, improving readability. /// The variable name `writeColor` is kept as requested. static const Color writeColor = Color(0xFF1A1A1A); /// **Secondary Color:** Pure white, used for backgrounds to create a clean /// and spacious look, ensuring content stands out. static const Color secondaryColor = Colors.white; /// **Accent Color:** A vibrant, energetic red from the Syrian flag. /// Perfect for calls-to-action, highlights, icons, and notifications. static const Color accentColor = Color.fromARGB(255, 148, 140, 141); // --- Neutral & Status Colors --- /// **Grey Color:** A neutral grey for secondary text, borders, dividers, /// and disabled states. static const Color grayColor = Color(0xFF8E8E93); /// **Red Color (Error):** A clear, attention-grabbing red for error messages and alerts. static const Color redColor = Color(0xFFD32F2F); /// **Green Color (Success):** A positive green for success messages and confirmations. static const Color greenColor = Color(0xFF388E3C); /// **Blue Color (Info):** A standard blue for informational text, links, or icons. static const Color blueColor = Color(0xFF108942); /// **Yellow Color (Warning):** A warm yellow for warning messages or important highlights. static const Color yellowColor = Color(0xFFFFA000); // --- Tier & Social Colors --- /// **Gold Tier:** A bright gold for premium features, user ranks, or rewards. static const Color gold = Color(0xFFFFD700); /// **Bronze Tiers:** Classic bronze colors for other user tiers or levels. static const Color bronze = Color(0xFFCD7F32); static const Color goldenBronze = Color(0xFFB87333); // Kept from original /// **Twitter/X Color:** The official brand color for social login buttons. // --- Utility Colors --- /// **Accent Tint:** A transparent version of the red accent color. /// Useful for subtle backgrounds on selected items or highlighted areas. /// Replaces the old `deepPurpleAccent` to match the new brand palette. static Color deepPurpleAccent = const Color(0xFFCE1126).withOpacity(0.1); } ================================================== FILE PATH: ./lib/constant/notification.dart ================================================== List passengerMessages = [ // --- رسائل العروض والتوفير --- "وفر على حالك: 🚗 أسعار انطلق نازلة كتير! شوف العروض الجديدة وفوت هلأ قبل ما تخلص. 🌟", "خصم اليوم: 🤔 لا تفوّت الفرصة! افتح تطبيق انطلق وشوف الأسعار يلي ما بتنعاد.", "عروض نارية: 🎁 اليوم خصم خاص إلك، احجز مشوارك الجاي بسعر ولا أروع!", "مشاوير اقتصادية: 💸 مع انطلق بتتحرك براحتك وبتدفع أقل، جرب وشوف الفرق!", // --- رسائل السهولة والراحة --- "مشوار بكبسة زر: 📲 افتح تطبيق انطلق، وخلِّي السيارة توصلك لعندك بثواني.", "ارتاح من المواصلات: 🤔 خلّي انطلق يريحك من الانتظار والزحمة، وانطلق وين ما بدك.", "سيارتك جاهزة: 🚕 الكابتن ناطر طلبك، حدد وجهتك وخلّي الطريق علينا.", "رحلة مريحة: 🛣️ ارتاح بالكرسي، نحنا منهتم بكل التفاصيل من الباب للباب.", // --- رسائل الأمان والثقة --- "رحلتك بأمان: 🙏 كل كباتنّا مدرّبين وملتزمين، وسلامتك أولويتنا.", "سافر وانت مطمّن: 🔒 مع انطلق كل شي موثوق ومسجّل لتكون مرتاح البال.", "شارك رحلتك: ❤️ فيك تبعت تفاصيل المشوار لأهلك أو رفقاتك بخطوة وحدة.", "انطلق بثقة: ✅ كل الرحلات مراقبة لتضمن تجربة آمنة ومريحة 100%.", // --- رسائل تفاعلية ومناسبات --- "الويكند بلّش: 🥳 خلي مشاويرك مع الأصحاب علينا، وفر وقتك وفلوسك مع انطلق.", "رايح عالشغل: 💼 لا تتأخر، افتح التطبيق وخلي الكابتن يوصلك بلا تعب.", "الشمس مولّعة: ☀️ لا تمشي تحت الحر، خلي السيارة تجي لعندك.", "مستعجل: 🏃‍♂️ لا تقلق، انطلق أسرع طريق لتوصل عموعدك.", // --- رسائل تشجيعية عامة --- "وين رايح اليوم؟ 🗺️ وين ما كانت وجهتك، انطلق بيخدمك بكل مكان وبأي وقت.", "جرب شي جديد: 🚘 شوف فئات السيارات الجديدة وخلي رحلتك أريح وأجمل.", "شكراً لاختيارك: ⭐ وجودك معنا بيفرحنا، ونتمنى دايماً تكون رحلتك مريحة وسعيدة.", "كل يوم جديد: ✨ فوت عالتطبيق وتابع آخر التحديثات والعروض يلي نازلة خصيصاً إلك." ]; ================================================== FILE PATH: ./lib/constant/box_name.dart ================================================== class BoxName { static const String driverID = "driverID"; static const String countryCode = "countryCode"; static const String googlaMapApp = "googlaMapApp"; static const String tokenParent = "tokenParent"; static const String lang = "lang"; static const String serverChosen = "serverChosen"; static const String gender = "gender"; static const String jwt = "jwt"; static const String lowEndMode = "lowEndMode"; static const String appVersionChecked = "appVersionChecked"; static const String lastName = "lastName"; static const String fingerPrint = "fingerPrint"; static const String payMobApikey = "payMobApikey"; static const String refreshToken = "refreshToken"; static const String serverLocations = "serverLocations"; static const String carType = "carType"; static const String carPlate = "carPlate"; static const String basicLink = "basicLink"; static const String packagInfo = "packagInfo"; static const String paymentLink = "paymentLink"; static const String locationName = "locationName"; static const String isVerified = 'isVerified'; static const String isFirstTime = 'isFirstTime'; static const String firstTimeLoadKey = 'firstTimeLoadKey'; static const String isSavedPhones = 'isSavedPhones'; static const String statusDriverLocation = "statusDriverLocation"; static const String isTest = "isTest"; static const String hmac = "hmac"; static const String password = "password"; static const String validity = "validity"; static const String promo = "promo"; static const String discount = "discount"; static const String arrivalTime = "arrivalTime"; static const String passwordDriver = "passwordDriver"; static const String agreeTerms = "agreeTerms"; static const String addWork = 'addWork'; static const String addHome = 'addHome'; static const String placesDestination = 'placesDestination'; static const String tipPercentage = 'tipPercentage'; static const String accountIdStripeConnect = "accountIdStripeConnect"; static const String faceDetectTimes = "faceDetectTimes"; static const String sosPhonePassenger = "sosPhonePassenger"; static const String sosPhoneDriver = "sosPhoneDriver"; static const String passengerID = "pasengerID"; static const String phone = "phone"; static const String package = "package"; static const String isInstall = "isInstall"; static const String isGiftToken = "isGiftToken"; static const String inviteCode = "inviteCode"; static const String phoneWallet = "phoneWallet"; static const String phoneDriver = "phoneDriver"; static const String dobDriver = "dobDriver"; static const String sexDriver = "sexDriver"; static const String lastNameDriver = "lastNameDriver"; static const String name = "name"; static const String locationPermission = "locationPermission"; static const String nameDriver = "nameDriver"; static const String driverPhotoUrl = "driverPhotoUrl"; static const String passengerPhotoUrl = "passengerPhotoUrl"; static const String email = "email"; static const String emailDriver = "emailDriver"; static const String tokens = "tokens"; static const String tokenFCM = "tokenFCM"; static const String tokenDriver = "tokenDriver"; static const String cardNumber = "cardNumber"; static const String cardNumberDriver = "cardNumberDriver"; static const String cardHolderName = "cardHolderName"; static const String cardHolderNameDriver = "cardHolderNameDriver"; static const String expiryDate = "expiryDate"; static const String expiryDateDriver = "expiryDateDriver"; static const String cvvCode = "cvvCode"; static const String cvvCodeDriver = "cvvCodeDriver"; static const String passengerWalletDetails = "passengerWalletDetails"; static const String passengerWalletTotal = "passengerWalletTotal"; static const String passengerWalletFound = "passengerWalletFound"; static const String periods = 'periods'; static const String onBoarding = 'onBoarding'; static const String stripePublishableKey = 'stripe_publishableKe'; static const String apiKeyRun = 'apiKeyRun'; static const String keyOfApp = 'keyOfApp'; static const String initializationVector = 'initializationVector'; static const String serverAPI = 'serverAPI'; static const String secretKey = 'secretKey'; static const String basicAuthCredentials = 'basicAuthCredentials'; static const String mapAPIKEY = 'mapAPIKEY'; static const String twilloRecoveryCode = 'twilloRecoveryCode'; static const String accountSIDTwillo = 'accountSIDTwillo'; static const String authTokenTwillo = 'authTokenTwillo'; static const String chatGPTkey = 'chatGPTkey'; static const String chatGPTkeySefer = 'chatGPTkeySefer'; static const String transactionCloude = 'transactionCloude'; static const String visionApi = 'visionApi'; static const String vin = "vin"; static const String isvibrate = "isvibrate"; static const String make = "make"; static const String model = "model"; static const String year = "year"; static const String expirationDate = "expirationDate"; static const String color = "color"; static const String owner = "owner"; static const String registrationDate = "registrationDate"; static const String recentLocations = 'recentLocations'; static const String tripData = 'tripData'; static const String parentTripSelected = 'parentTripSelected'; } ================================================== FILE PATH: ./lib/constant/info.dart ================================================== class AppInformation { static const String companyName = 'Intaleq llc'; static const String appName = 'Intaleq'; static const String phoneNumber = '962798583052'; static const String linkedInProfile = 'https://www.linkedin.com/in/hamza-ayed/'; static const String website = 'https://intaleqapp.com'; static const String email = 'hamzaayed@intaleqapp.com'; static const String addd = 'BlBlNl'; static const String privacyPolicy = ''' Intaleq - Privacy Policy & Terms of Use

Privacy Policy & Terms of Use

Effective Date: August 9, 2025

Last Updated: August 9, 2025

1. Introduction and Acceptance

By downloading, registering, or using the Intaleq application ("App"), you agree to be bound by this Privacy Policy and our Terms of Use. If you do not agree, you must stop using the App immediately. Your continued use constitutes acceptance of these terms and any future updates.

2. Definitions

  • "Intaleq", "we", "us": Refers to the Intaleq for Ride Hailing company, Damascus – Syria (Owner & operator), which provides the technology platform.
  • "Driver": An independent service provider who uses the App to offer transportation services.
  • "Passenger", "you": An individual who uses the App to request transportation services.
  • "Services": The connection between Passengers and Drivers facilitated by our App.

3. Privacy Policy

3.1 Information We Collect

We collect information necessary to provide and improve our Services.

A. Information You Provide:

  • For Drivers: To ensure safety and compliance, we collect identity information, including your full name, phone number, personal photo, and official documents (e.g., driver's license, vehicle registration).
  • For Passengers: We only require a phone number for registration and communication. We are not authorized to request or view official identity documents for passengers.

B. Information Collected Automatically:

  • Location Data: We collect precise location data when the App is in use to facilitate ride matching, navigation, and for safety purposes.
  • Device Data: We collect information about your device, such as model, operating system, and unique identifiers, to ensure App functionality and for security verification.
  • Usage Data: We log how you interact with our App, including trip history and features used, to improve our services.

3.2 Payment Information

We do not collect, process, or store any sensitive payment information like credit/debit card numbers. We facilitate payments by connecting you to licensed, local third-party providers:

  • Mobile Carrier Billing: Payments via MTN and Syriatel are processed directly by them based on your registered phone number. A one-time password (OTP) sent by the carrier is required to confirm the transaction.
  • Bank Card Payments: We connect you with the Syrian company "eCash" to process card payments. They handle the transaction, and your bank will send an OTP to your phone to authorize it.

3.3 How We Use Your Information

  • To operate and maintain the Services (e.g., connect Drivers and Passengers).
  • To verify Driver identity and eligibility.
  • To improve App security and prevent fraud.
  • To provide customer support.
  • To comply with legal obligations.

3.4 Data Sharing

We do not sell your personal data. We only share it in the following limited circumstances:

  • Between Passenger and Driver: To facilitate a ride, we share necessary information like name, photo, and real-time location.
  • With Service Providers: For services like payment processing and mapping. These providers are contractually obligated to protect your data.
  • For Legal Reasons: If required by law or a valid legal order.

3.5 Policy for Minors

Our services are intended for individuals over the age of 18. For Drivers: We strictly verify the identity and age of all drivers to ensure no minors are operating on our platform. For Passengers: While we do not verify passenger identity, the service is not directed at children under 18. If a parent or guardian becomes aware that their child has provided us with information without their consent, they should contact us immediately.

4. User Obligations & Conduct

  • You must provide accurate and current information during registration.
  • You are responsible for maintaining the security of your account.
  • You agree not to use the App for any illegal activities, to harass others, or to cause damage to a Driver's vehicle.

5. Disclaimer of Liability

The App is provided "as is". Intaleq is an intermediary platform and is not liable for the actions of Drivers or Passengers, accidents, delays, or any disputes between users. Our liability is limited to the fullest extent permitted by law.

6. Policy Updates

We may update these terms. If we make significant changes, we will notify you within the App. You will be required to review and accept the new terms to continue using the Services, ensuring your consent is active and informed.

7. Account Deletion & Contact

You have the right to request the deletion of your account and personal data. To do so, or for any other questions, please contact us. We will respond to deletion requests within 30 days.

Email: support@intaleqapp.com

'''; static const String privacyPolicyArabic = ''' انطلق - سياسة الخصوصية وشروط الاستخدام

سياسة الخصوصية وشروط الاستخدام

تاريخ النفاذ: 9 أغسطس 2025

آخر تحديث: 9 أغسطس 2025

1. المقدمة والقبول

عبر تحميل أو تسجيل أو استخدام تطبيق "انطلق" ("التطبيق")، فإنك توافق على الالتزام بسياسة الخصوصية وشروط الاستخدام هذه. إذا كنت لا توافق، يجب عليك التوقف فورًا عن استخدام التطبيق. استمرارك في الاستخدام يُعد قبولاً لهذه الشروط وأي تحديثات مستقبلية لها.

2. التعريفات

  • "انطلق"، "نحن": تشير إلى شركة انطلق لنقل الركاب، دمشق – سوريا (مالك ومشغل التطبيق)، التي توفر المنصة التقنية.
  • "السائق": مقدم خدمة مستقل يستخدم التطبيق لتقديم خدمات النقل.
  • "الراكب"، "أنت": الفرد الذي يستخدم التطبيق لطلب خدمات النقل.
  • "الخدمات": عملية الربط بين الركاب والسائقين التي يسهلها تطبيقنا.

3. سياسة الخصوصية

3.1 المعلومات التي نجمعها

نحن نجمع المعلومات الضرورية لتقديم خدماتنا وتحسينها.

أ. المعلومات التي تقدمها بنفسك:

  • بالنسبة للسائقين: لضمان السلامة والامتثال للقوانين، نجمع بيانات الهوية الشخصية، بما في ذلك الاسم الكامل، رقم الهاتف، صورة شخصية، والوثائق الرسمية (مثل رخصة القيادة وتسجيل المركبة).
  • بالنسبة للركاب: نطلب فقط رقم هاتف للتسجيل والتواصل. نحن غير مخولين بطلب أو الاطلاع على وثائق الهوية الرسمية للركاب.

ب. المعلومات التي تُجمع تلقائيًا:

  • بيانات الموقع: نجمع بيانات الموقع الجغرافي الدقيقة عند استخدام التطبيق لتسهيل تحديد أماكن الانطلاق والوصول، الملاحة، ولأغراض السلامة.
  • بيانات الجهاز: نجمع معلومات عن جهازك (طراز، نظام تشغيل، معرفات فريدة) لضمان عمل التطبيق وللتحقق الأمني.
  • بيانات الاستخدام: نسجل كيفية تفاعلك مع التطبيق، بما في ذلك سجل الرحلات والميزات المستخدمة، بهدف تحسين خدماتنا.

3.2 معلومات الدفع

نحن لا نجمع أو نعالج أو نخزن أي معلومات دفع حساسة مثل أرقام بطاقات الائتمان/الخصم. نحن نسهل عمليات الدفع عبر ربطك بمزودي خدمات محليين مرخصين:

  • الدفع عبر رصيد الهاتف المحمول: تتم معالجة الدفعات عبر شركتي MTN و Syriatel مباشرة من خلالهما بناءً على رقم هاتفك المسجل لديهم. يتطلب تأكيد العملية إدخال رمز تحقق (OTP) يُرسل من قبل شركة الاتصالات.
  • الدفع عبر البطاقات البنكية: نربطك بشركة "eCash" السورية لمعالجة الدفعات بالبطاقات. هي التي تتولى المعاملة، وسيقوم البنك الذي تتعامل معه بإرسال رمز تحقق (OTP) إلى هاتفك لتفويض العملية.

3.3 كيف نستخدم معلوماتك

  • لتشغيل وصيانة الخدمات (مثل الربط بين السائقين والركاب).
  • للتحقق من هوية السائقين وأهليتهم.
  • لتحسين أمان التطبيق ومنع الاحتيال.
  • لتقديم الدعم الفني للعملاء.
  • للامتثال للالتزامات القانونية.

3.4 مشاركة البيانات

نحن لا نبيع بياناتك الشخصية. نشاركها فقط في الحالات المحدودة التالية:

  • بين الراكب والسائق: لتسهيل الرحلة، نشارك المعلومات الضرورية مثل الاسم، الصورة، والموقع المباشر.
  • مع مزودي الخدمات: مثل معالجي الدفع وخدمات الخرائط. هؤلاء المزودون ملزمون تعاقديًا بحماية بياناتك.
  • لأسباب قانونية: إذا طُلب ذلك بموجب القانون أو أمر قضائي ساري المفعول.

3.5 سياسة القاصرين

خدماتنا موجهة للأفراد الذين تزيد أعمارهم عن 18 عامًا. بالنسبة للسائقين: نحن نتحقق بدقة من هوية وعمر جميع السائقين لضمان عدم وجود قاصرين يعملون على منصتنا. بالنسبة للركاب: على الرغم من أننا لا نتحقق من هوية الركاب، فإن الخدمة غير موجهة للأطفال دون سن 18. إذا علم ولي الأمر أن طفله قد زودنا بمعلومات دون موافقته، فيجب عليه الاتصال بنا على الفور.

4. التزامات المستخدم وسلوكه

  • يجب عليك تقديم معلومات دقيقة وحديثة عند التسجيل.
  • أنت مسؤول عن الحفاظ على أمان حسابك.
  • أنت توافق على عدم استخدام التطبيق لأي أنشطة غير قانونية، أو لمضايقة الآخرين، أو التسبب في ضرر لمركبة السائق.

5. إخلاء المسؤولية

يتم تقديم التطبيق "كما هو". "انطلق" هي منصة وسيطة وليست مسؤولة عن تصرفات السائقين أو الركاب، أو الحوادث، أو التأخير، أو أي نزاعات بين المستخدمين. مسؤوليتنا محدودة إلى أقصى حد يسمح به القانون.

6. تحديثات السياسة

قد نقوم بتحديث هذه الشروط. في حال إجراء تغييرات جوهرية، سنقوم بإعلامك داخل التطبيق. سيُطلب منك مراجعة الشروط الجديدة وقبولها لمواصلة استخدام الخدمات، لضمان أن موافقتك فعالة ومبنية على معرفة.

7. حذف الحساب والتواصل

لديك الحق في طلب حذف حسابك وبياناتك الشخصية. للقيام بذلك، أو لأي استفسارات أخرى، يرجى التواصل معنا. سنرد على طلبات الحذف في غضون 30 يومًا.

البريد الإلكتروني: support@intaleqapp.com

'''; } ================================================== FILE PATH: ./lib/constant/links.dart ================================================== import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/main.dart'; class AppLink { static String serverPHP = box.read('serverPHP'); static String paymentServer = 'https://walletintaleq.intaleq.xyz/v1/main'; static String location = 'https://api.intaleq.xyz/intaleq/ride/location'; static String locationServer = 'https://location.intaleq.xyz/intaleq/ride/location'; static String seferPaymentServer0 = box.read('seferPaymentServer'); static final String endPoint = 'https://api.intaleq.xyz/intaleq'; static final String ride = 'https://rides.intaleq.xyz/intaleq'; // box.read(BoxName.serverChosen) ?? box.read(BoxName.basicLink); static final String server = 'https://api.intaleq.xyz/intaleq'; static String IntaleqSyriaServer = endPoint; static String IntaleqGizaServer = box.read('Giza'); static String IntaleqAlexandriaServer = box.read('Alexandria'); static String googleMapsLink = 'https://maps.googleapis.com/maps/api/'; static String searcMaps = 'https://autosuggest.search.hereapi.com/v1/autosuggest'; static String llama = 'https://api.llama-api.com/chat/completions'; static String gemini = 'https://generativelanguage.googleapis.com/v1beta3/models/text-bison-001:generateText'; static String test = "$server/test.php"; //===============firebase========================== static String getTokens = "$server/ride/firebase/get.php"; static String getTokenParent = "$server/ride/firebase/getTokenParent.php"; static String addTokens = "$server/ride/firebase/add.php"; static String addFingerPrint = "$paymentServer/ride/firebase/add.php"; static String addTokensDriver = "$server/ride/firebase/addDriver.php"; static String packageInfo = "$server/auth/packageInfo.php"; //=======================Wallet=================== static String wallet = '$paymentServer/ride/passengerWallet'; static String walletDriver = '$paymentServer/ride/driverWallet'; static String getAllPassengerTransaction = "$wallet/getAllPassengerTransaction.php"; static String getWalletByPassenger = "$wallet/getWalletByPassenger.php"; static String getPassengersWallet = "$wallet/get.php"; static String payWithPayMobWalletPasenger = '$paymentServer/ride/payMob/wallet/payWithPayMob.php'; static String payWithPayMobCardPassenger = '$paymentServer/ride/payMob/payWithPayMob.php'; static String payWithEcash = "$paymentServer/ecash/payWithEcash.php"; static String paymetVerifyPassenger = "$paymentServer/ride/payMob/paymet_verfy.php"; static String getPassengerWalletArchive = "$wallet/getPassengerWalletArchive.php"; static String addDrivePayment = "$paymentServer/ride/payment/add.php"; static String addSeferWallet = "$paymentServer/ride/seferWallet/add.php"; static String addPassengersWallet = "$wallet/add.php"; static String deletePassengersWallet = "$wallet/delete.php"; static String updatePassengersWallet = "$wallet/update.php"; static String getWalletByDriver = "$walletDriver/getWalletByDriver.php"; static String getDriversWallet = "$walletDriver/get.php"; static String addDriversWalletPoints = "$walletDriver/add.php"; static String deleteDriversWallet = "$walletDriver/delete.php"; static String updateDriversWallet = "$walletDriver/update.php"; //=======================promo===================ride.mobile-app.store/ride/promo/get.php static String promo = '$server/ride/promo'; static String getPassengersPromo = "$promo/get.php"; static String getPromoFirst = "$promo/getPromoFirst.php"; static String getPromoBytody = "$promo/getPromoBytody.php"; static String addPassengersPromo = "$promo/add.php"; static String deletePassengersPromo = "$promo/delete.php"; static String updatePassengersPromo = "$promo/update.php"; //===============contact========================== static String savePhones = "$server/ride/egyptPhones/add.php"; static String getPhones = "$server/ride/egyptPhones/get.php"; ////=======================cancelRide=================== // static String ride = '$server/ride'; static String addCancelRideFromPassenger = "$ride/cancelRide/add.php"; static String cancelRide = "$ride/cancelRide/get.php"; //-----------------ridessss------------------ static String addRides = "$ride/ride/rides/add.php"; static String getRides = "$ride/ride/rides/get.php"; static String getRideOrderID = "$ride/ride/rides/getRideOrderID.php"; static String getRideStatus = "$ride/ride/rides/getRideStatus.php"; static String getRideStatusBegin = "$ride/ride/rides/getRideStatusBegin.php"; static String getRideStatusFromStartApp = "$server/ride/rides/getRideStatusFromStartApp.php"; static String updateRides = "$ride/ride/rides/update.php"; static String updateStausFromSpeed = "$ride/ride/rides/updateStausFromSpeed.php"; static String deleteRides = "$ride/ride/rides/delete.php"; //-----------------DriverPayment------------------ static String adddriverScam = "$server/driver_scam/add.php"; static String getdriverScam = "$server/ride/driver_scam/get.php"; /////////---getKazanPercent===//////////// static String getKazanPercent = "$server/ride/kazan/get.php"; static String addKazanPercent = "$server/ride/kazan/add.php"; ////-----------------DriverPayment------------------ static String addDriverpayment = "$paymentServer/ride/payment/add.php"; static String addDriverPaymentPoints = "$paymentServer/ride/driverPayment/add.php"; static String addPaymentTokenPassenger = "$paymentServer/ride/passengerWallet/addPaymentTokenPassenger.php"; static String addPaymentTokenDriver = "$paymentServer/ride/driverWallet/addPaymentToken.php"; static String getDriverPaymentPoints = "$paymentServer/ride/driverWallet/get.php"; static String payWithEcashPassenger = "$paymentServer/ride/ecash/passenger/payWithEcash.php"; static String payWithMTNConfirm = "$paymentServer/ride/mtn/passenger/mtn_confirm.php"; static String payWithMTNStart = "$paymentServer/ride/mtn/passenger/mtn_start.php"; static String payWithSyriatelConfirm = "$paymentServer/ride/syriatel/passenger/confirm_payment.php"; static String payWithSyriatelStart = "$paymentServer/ride/syriatel/passenger/start_payment.php"; static String getDriverpaymentToday = "$paymentServer/ride/payment/get.php"; static String getCountRide = "$paymentServer/ride/payment/getCountRide.php"; static String getAllPaymentFromRide = "$paymentServer/ride/payment/getAllPayment.php"; static String getAllPaymentVisa = "$paymentServer/ride/payment/getAllPaymentVisa.php"; //-----------------Passenger NotificationCaptain------------------ static String addNotificationPassenger = "$server/ride/notificationPassenger/add.php"; static String getNotificationPassenger = "$server/ride/notificationPassenger/get.php"; static String updateNotificationPassenger = "$server/ride/notificationPassenger/update.php"; //-----------------Driver NotificationCaptain------------------ static String addNotificationCaptain = "$server/ride/notificationCaptain/add.php"; static String addWaitingRide = "$server/ride/notificationCaptain/addWaitingRide.php"; static String updateWaitingTrip = "$server/ride/notificationCaptain/updateWaitingTrip.php"; static String getRideWaiting = "$endPoint/ride/notificationCaptain/getRideWaiting.php"; static String getNotificationCaptain = "$server/ride/notificationCaptain/get.php"; static String updateNotificationCaptain = "$server/ride/notificationCaptain/update.php"; static String deleteNotificationCaptain = "$server/ride/notificationCaptain/delete.php"; //-----------------invitor------------------ static String addInviteDriver = "$server/ride/invitor/add.php"; static String addInvitationPassenger = "$server/ride/invitor/addInvitationPassenger.php"; static String getInviteDriver = "$server/ride/invitor/get.php"; static String getDriverInvitationToPassengers = "$server/ride/invitor/getDriverInvitationToPassengers.php"; static String updateInviteDriver = "$server/ride/invitor/update.php"; static String updatePassengerGift = "$server/ride/invitor/updatePassengerGift.php"; //-----------------Api Key------------------ static String addApiKey = "$server/ride/apiKey/add.php"; static String getApiKey = "$server/ride/apiKey/get.php"; static String getCnMap = "$server/auth/cnMap.php"; static String updateApiKey = "$server/ride/apiKey/update.php"; static String deleteApiKey = "$server/ride/apiKey/delete.php"; static String getPlacesSyria = "$server/ride/places_syria/get.php"; //-----------------Feed Back------------------ static String addFeedBack = "$server/ride/feedBack/add.php"; static String add_solve_all = "$server/ride/feedBack/add_solve_all.php"; static String uploadAudio = "$server/ride/feedBack/upload_audio.php"; static String getFeedBack = "$server/ride/feedBack/get.php"; static String updateFeedBack = "$server/ride/feedBack/updateFeedBack.php"; //-----------------Tips------------------ static String addTips = "$server/ride/tips/add.php"; static String getTips = "$server/ride/tips/get.php"; static String updateTips = "$server/ride/tips/update.php"; //-----------------Help Center------------------ static String addhelpCenter = "$server/ride/helpCenter/add.php"; static String gethelpCenter = "$server/ride/helpCenter/get.php"; static String getByIdhelpCenter = "$server/ride/helpCenter/getById.php"; static String updatehelpCenter = "$server/ride/helpCenter/update.php"; static String deletehelpCenter = "$server/ride/helpCenter/delete.php"; //-----------------license------------------ static String addLicense = "$server/ride/license/add.php"; static String getLicense = "$server/ride/license/get.php"; static String updateLicense = "$server/ride/license/updateFeedBack.php"; //-----------------RegisrationCar------------------ static String addRegisrationCar = "$server/ride/RegisrationCar/add.php"; static String getRegisrationCar = "${box.read(BoxName.serverChosen)}/server/ride/RegisrationCar/get.php"; static String selectDriverAndCarForMishwariTrip = "$server/ride/RegisrationCar/selectDriverAndCarForMishwariTrip.php"; static String updateRegisrationCar = "$server/ride/RegisrationCar/update.php"; //-----------------mishwari------------------ static String addMishwari = "$server/ride/mishwari/add.php"; static String cancelMishwari = "$server/ride/mishwari/cancel.php"; static String getMishwari = "$server/ride/mishwari/get.php"; //-----------------DriverOrder------------------ static String addDriverOrder = "$server/ride/driver_order/add.php"; static String getDriverOrder = "$server/ride/driver_order/get.php"; static String getOrderCancelStatus = "$server/ride/driver_order/getOrderCancelStatus.php"; static String updateDriverOrder = "$server/ride/driver_order/update.php"; static String deleteDriverOrder = "$server/ride/driver_order/delete.php"; // ===================================== static String addRateToPassenger = "$server/ride/rate/add.php"; static String savePlacesServer = "$server/ride/places/add.php"; static String getapiKey = "$server/ride/apiKey/get.php"; static String addRateToDriver = "$server/ride/rate/addRateToDriver.php"; static String getDriverRate = "$server/ride/rate/getDriverRate.php"; static String getPassengerRate = "$server/ride/rate/getPassengerRate.php"; ////////////////emails ============// static String sendEmailToPassengerForTripDetails = "$server/ride/rides/emailToPassengerTripDetail.php"; // =========================================== static String pathImage = "$server/upload/types/"; static String uploadImage = "$server/uploadImage.php"; static String uploadImage1 = "$server/uploadImage1.php"; static String uploadImagePortrate = "$server/uploadImagePortrate.php"; static String uploadImageType = "$server/uploadImageType.php"; //=============egypt documents ============== static String uploadEgyptidFront = "$server/EgyptDocuments/uploadEgyptidFront.php"; static String uploadEgypt = "$server/uploadEgypt.php"; //==================certifcate========== // static String location = '${box.read(BoxName.serverChosen)}/ride/location'; static String getCarsLocationByPassenger = "$location/get.php"; static String getLocationAreaLinks = '$server/ride/location/get_location_area_links.php'; static String addpassengerLocation = "$locationServer/addpassengerLocation.php"; static String getCarsLocationByPassengerSpeed = "$location/getSpeed.php"; static String getCarsLocationByPassengerComfort = "$location/getComfort.php"; static String getCarsLocationByPassengerBalash = "$location/getBalash.php"; static String getCarsLocationByPassengerElectric = "$location/getElectric.php"; static String getCarsLocationByPassengerPinkBike = "$location/getPinkBike.php"; static String getCarsLocationByPassengerVan = "$location/getCarsLocationByPassengerVan.php"; static String getCarsLocationByPassengerDelivery = "$location/getDelivery.php"; static String getLocationParents = "$location/getLocationParents.php"; static String getFemalDriverLocationByPassenger = "$location/getFemalDriver.php"; static String getDriverCarsLocationToPassengerAfterApplied = "$location/getDriverCarsLocationToPassengerAfterApplied.php"; // static String addCarsLocationByPassenger = "$location/add.php"; // static String deleteCarsLocationByPassenger = "$location/delete.php"; // static String updateCarsLocationByPassenger = "$location/update.php"; // static String getTotalDriverDuration = "$location/getTotalDriverDuration.php"; // static String getTotalDriverDurationToday = // "$location/getTotalDriverDurationToday.php"; //==================Blog============= static String profile = '$server/ride/profile'; static String getprofile = "$profile/get.php"; static String getCaptainProfile = "$profile/getCaptainProfile.php"; static String addprofile = "$profile/add.php"; static String deleteprofile = "$profile/delete.php"; static String updateprofile = "$profile/update.php"; //===================Auth============ static String auth = '$server/auth'; static String login = "$auth/login.php"; static String loginJwtRider = "$server/login.php"; static String loginJwtWalletRider = "$server/loginWallet.php"; static String loginFirstTime = "$server/loginFirstTime.php"; static String getTesterApp = "$auth/Tester/getTesterApp.php"; static String updateTesterApp = "$auth/Tester/updateTesterApp.php"; static String signUp = "$auth/signup.php"; static String sendVerifyEmail = "$auth/sendVerifyEmail.php"; static String loginFromGooglePassenger = "$auth/loginFromGooglePassenger.php"; static String checkPhoneNumberISVerfiedPassenger = "$auth/checkPhoneNumberISVerfiedPassenger.php"; static String passengerRemovedAccountEmail = "$auth/passengerRemovedAccountEmail.php"; static String verifyEmail = "$auth/verifyEmail.php"; //===================Auth Captin============ static String authCaptin = '$server/auth/captin'; static String loginCaptin = "$authCaptin/login.php"; static String loginFromGoogleCaptin = "$authCaptin/loginFromGoogle.php"; static String signUpCaptin = "$authCaptin/register.php"; static String sendVerifyEmailCaptin = "$authCaptin/sendVerifyEmail.php"; static String sendVerifyOtpMessage = "$server/auth/otpmessage.php"; static String verifyOtpMessage = "$server/auth/verifyOtpMessage.php"; static String verifyEmailCaptin = "$authCaptin/verifyEmail.php"; static String removeUser = "$authCaptin/removeAccount.php"; static String deletecaptainAccounr = "$authCaptin/deletecaptainAccounr.php"; static String updateAccountBank = "$authCaptin/updateAccountBank.php"; static String getAccount = "$authCaptin/getAccount.php"; static String updatePassengersInvitation = "$server/ride/invitor/updatePassengersInvitation.php"; static String updateDriverInvitationDirectly = "$server/ride/invitor/updateDriverInvitationDirectly.php"; //===================Admin Captin============ static String getPassengerDetailsByPassengerID = "$server/Admin/getPassengerDetailsByPassengerID.php"; static String getPassengerDetails = "$server/Admin/getPassengerDetails.php"; static String getPassengerbyEmail = "$server/Admin/getPassengerbyEmail.php"; static String addAdminUser = "$server/Admin/adminUser/add.php"; static String getAdminUser = "$server/Admin/adminUser/get.php"; static String addError = "$server/Admin/errorApp.php"; static String getCaptainDetailsByEmailOrIDOrPhone = "$server/Admin/AdminCaptain/getCaptainDetailsByEmailOrIDOrPhone.php"; static String getCaptainDetails = "$server/Admin/AdminCaptain/get.php"; static String getRidesPerMonth = "$server/Admin/AdminRide/getRidesPerMonth.php"; static String getRidesDetails = "$server/Admin/AdminRide/get.php"; //////////Sms egypt/////////// static String sendSms = "https://sms.kazumi.me/api/sms/send-sms"; static String sendSmsFromPHP = '$server/auth/sms_new_backend/sendOtpPassenger.php'; static String verifyOtpPassenger = '$server/auth/passengerOTP/verifyOtpPassenger.php'; static String senddlr = "https://sms.kazumi.me/api/sms/send-dlr"; static String sendvalidity = "https://sms.kazumi.me/api/sms/send-validity"; static String sendmany = "https://sms.kazumi.me/api/sms/send-many"; static String checkCredit = "https://sms.kazumi.me/api/sms/check-credit"; static String getSender = "$server/auth/sms/getSender.php"; static String checkStatus = "https://sms.kazumi.me/api/sms/check-status"; static String updatePhoneInvalidSMSPassenger = "$server/auth/sms/updatePhoneInvalidSMSPassenger.php"; } ================================================== FILE PATH: ./lib/constant/credential.dart ================================================== import 'dart:convert'; import 'package:crypto/crypto.dart'; import '../controller/functions/crud.dart'; import '../main.dart'; import 'box_name.dart'; import 'char_map.dart'; import 'links.dart'; class AC { gAK() async { if (box.read(BoxName.apiKeyRun).toString() != 'run') { var res = await CRUD().get(link: AppLink.getApiKey, payload: {}); var decod = jsonDecode(res); print(decod); Map jsonData = {}; for (var i = 0; i < decod['message'].length; i++) { String h = decod['message'][i]['hashed_key'].toString(); String retrievedString = r(r(r(h, cn), cC), cs); await storage.write( key: decod['message'][i]['name'].toString(), value: retrievedString.toString(), ); // String name = decod['message'][i]['name'].toString(); String value = decod['message'][i]['hashed_key'].toString(); jsonData[name] = value; } String jsonString = json.encode(jsonData); print(jsonString); box.write(BoxName.apiKeyRun, 'run'); } } String q(String b, String c) { final d = utf8.encode(c); final e = utf8.encode(b); final f = Hmac(sha256, d); final g = f.convert(e); final h = g.bytes; final i = base64Url.encode(h); return i; } String j(String k, String l) { final m = utf8.encode(l); final n = base64Url.decode(k); final o = Hmac(sha256, m); final p = o.convert(n); final q = utf8.decode(p.bytes); return q; } String a(String b, String c) { int d = b.length; int e = d ~/ 4; List f = []; for (int g = 0; g < d; g += e) { int h = g + e; if (h > d) { h = d; } String i = b.substring(g, h); f.add(i); } print(f); Map j = {}; j['birinci'] = f[4]; j['ikinci'] = f[2]; j['üçüncü'] = c + f[1]; j['dördüncü'] = f[0]; j['beş'] = f[3]; String k = ''; j.forEach((l, m) { k += m; }); return k; } Map n(String o, String c) { String p = o.replaceAll(c, ''); Map q = {}; q['birinci'] = p[p.length - 5] + p[p.length - 3]; q['ikinci'] = p[p.length - 1] + p[p.length - 15]; q['üçüncü'] = p[p.length - 9] + p[p.length - 12]; q['dördüncü'] = p[p.length - 11] + p[p.length - 6]; q['beş'] = p[p.length - 2] + p[p.length - 8]; return q; } String c(String a, Map b) { StringBuffer c = StringBuffer(); c.write(a); String d = "Bl"; c.write(b[d] ?? d); StringBuffer e = StringBuffer(); String f = c.toString(); for (int g = 0; g < f.length; g++) { String h = f[g]; e.write(b[h] ?? h); } return e.toString(); } String r(String a, Map b) { StringBuffer c = StringBuffer(); String d = "Bl"; int e = d.length; for (int f = 0; f < a.length; f++) { String g = a[f]; String h = b.keys.firstWhere( (i) => b[i] == g, orElse: () => g, ); c.write(h); } String j = c.toString(); if (j.endsWith(d)) { j = j.substring(0, j.length - e); } return j; } } ================================================== FILE PATH: ./lib/constant/api_key.dart ================================================== import 'package:Intaleq/main.dart'; import 'package:secure_string_operations/secure_string_operations.dart'; import '../env/env.dart'; import 'char_map.dart'; class AK { static final String publishableKey = X.r(X.r(X.r(Env.stripePublishableKe, cn), cC), cs); static final String sss_pass = X.r(X.r(X.r(Env.sss_pass, cn), cC), cs); static final String allowed = Env.allowed; static final String passnpassenger = X .r(X.r(X.r(Env.passnpassenger, cn), cC), cs) .toString() .split(Env.addd)[0]; static final String newId = Env.newId; static final String sss_encryptionSalt = X.r(X.r(X.r(Env.sss_encryptionSalt, cn), cC), cs); static final String secretKey = X.r(X.r(X.r(Env.secretKey, cn), cC), cs); static final String basicAuthCredentials = X.r(X.r(X.r(Env.basicAuthCredentials, cn), cC), cs); static final String accountSIDTwillo = X.r(X.r(X.r(Env.accountSIDTwillo, cn), cC), cs); static final String serverAPI = X.r(X.r(X.r(Env.serverAPI, cn), cC), cs); static final String mapAPIKEY = Env.mapAPIKEY; static final String mapAPIKEYIOS = Env.mapAPIKEYIOS; static final String twilloRecoveryCode = X.r(X.r(X.r(Env.twilloRecoveryCode, cn), cC), cs); static final String authTokenTwillo = X.r(X.r(X.r(Env.authTokenTwillo, cn), cC), cs); static final String chatGPTkey = X.r(X.r(X.r(Env.chatGPTkey, cn), cC), cs); static final String transactionCloude = X.r(X.r(X.r(Env.transactionCloude, cn), cC), cs); static final String visionApi = X.r(X.r(X.r(Env.visionApi, cn), cC), cs); static final String chatGPTkeySefer = X.r(X.r(X.r(Env.chatGPTkeySefer, cn), cC), cs); static final String chatGPTkeySeferNew = X.r(X.r(X.r(Env.chatGPTkeySeferNew, cn), cC), cs); static final String serverPHP = Env.serverPHP; static final String llamaKey = X.r(X.r(X.r(Env.llamaKey, cn), cC), cs); static final String cohere = X.r(X.r(X.r(Env.cohere, cn), cC), cs); static final String claudeAiAPI = X.r(X.r(X.r(Env.claudeAiAPI, cn), cC), cs); static final String payPalClientId = X.r(X.r(X.r(Env.payPalClientId, cn), cC), cs); static final String payPalSecret = X.r(X.r(X.r(Env.payPalSecret, cn), cC), cs); static final String geminiApi = X.r(X.r(X.r(Env.geminiApi, cn), cC), cs); static final String agoraAppId = X.r(X.r(X.r(Env.agoraAppId, cn), cC), cs); static final String agoraAppCertificate = X.r(X.r(X.r(Env.agoraAppCertificate, cn), cC), cs); static final String payPalClientIdLive = X.r(X.r(X.r(Env.payPalClientIdLive, cn), cC), cs); static final String payPalSecretLive = X.r(X.r(X.r(Env.payPalSecretLive, cn), cC), cs); static final String integrationIdPayMob = X.r(X.r(X.r(Env.integrationIdPayMob, cn), cC), cs); static final String passwordPayMob = X.r(X.r(X.r(Env.passwordPayMob, cn), cC), cs); static final String usernamePayMob = X.r(X.r(X.r(Env.usernamePayMob, cn), cC), cs); static final String payMobApikey = X.r(X.r(X.r(Env.payMobApikey, cn), cC), cs); static final String integrationIdPayMobWallet = X.r(X.r(X.r(Env.integrationIdPayMobWallet, cn), cC), cs); static final String apiKeyHere = Env.apiKeyHere; static final String smsPasswordEgypt = X.r(X.r(X.r(Env.smsPasswordEgypt, cn), cC), cs); static final String ocpApimSubscriptionKey = Env.ocpApimSubscriptionKey; static final String chatGPTkeySeferNew4 = X.r(X.r(X.r(Env.chatGPTkeySeferNew4, cn), cC), cs); static final String anthropicAIkeySeferNew = X.r(X.r(X.r(Env.anthropicAIkeySeferNew, cn), cC), cs); static final String llama3Key = X.r(X.r(X.r(Env.llama3Key, cn), cC), cs); static final String payMobOutClientSecrret = X.r(X.r(X.r(Env.payMobOutClientSecrret, cn), cC), cs); static final String payMobOutClient_id = X.r(X.r(X.r(Env.payMobOutClient_id, cn), cC), cs); static final String payMobOutPassword = X.r(X.r(X.r(Env.payMobOutPassword, cn), cC), cs); static final String payMobOutUserName = X.r(X.r(X.r(Env.payMobOutUserName, cn), cC), cs); /////////// static final String keyOfApp = X.r(X.r(X.r(Env.keyOfApp, cn), cC), cs); } ================================================== FILE PATH: ./lib/constant/table_names.dart ================================================== import 'package:Intaleq/env/env.dart'; class TableName { static const String placesFavorite = "placesFavorite"; static const String recentLocations = "recentLocations"; static const String carLocations = "carLocations"; static const String driverOrdersRefuse = "driverOrdersRefuse"; static const String rideLocation = "rideLocation"; static const String faceDetectTimes = "faceDetectTimes"; static const String captainNotification = "captainNotification"; } class Pasenger { static const String pasengerpas = 'MG6DEJZSczBT6Rx0jOlehQ=='; static const String payMobApikey = 'payMobApikey'; static const String initializationVector = 'initializationVector'; static const String keyOfApp = 'keyOfApp'; static const String FCM_PRIVATE_KEY_INTALEQ = 'FCM_PRIVATE_KEY_INTALEQ'; } ================================================== FILE PATH: ./lib/constant/univeries_polygon.dart ================================================== import 'package:google_maps_flutter/google_maps_flutter.dart'; class UniversitiesPolygons { // AUC polygon points static const List> universityPolygons = [ // AUC Polygon [ LatLng(30.013431, 31.502572), LatLng(30.018469, 31.497478), LatLng(30.023158, 31.495870), LatLng(30.025084, 31.496781), LatLng(30.018701, 31.511393), LatLng(30.015312, 31.508310), ], // Example polygon for University 'German University in Cairo (GUC)' [ LatLng(29.984554, 31.437829), LatLng(29.990363, 31.438390), LatLng(29.990560, 31.445643), LatLng(29.984436, 31.445825), ], //Future University in Egypt (FUE) [ LatLng(30.025794, 31.490946), LatLng(30.028341, 31.491014), LatLng(30.028341, 31.492586), LatLng(30.025844, 31.492491), ], //'British University in Egypt (BUE)' [ LatLng(30.117423, 31.605834), LatLng(30.118224, 31.605543), LatLng(30.118649, 31.607361), LatLng(30.118932, 31.608033), LatLng(30.119592, 31.612159), LatLng(30.119372, 31.612958), LatLng(30.120017, 31.617102), LatLng(30.119435, 31.617193), ], //Misr International University (MIU) [ LatLng(30.166498, 31.491663), LatLng(30.171956, 31.491060), LatLng(30.172212, 31.495754), LatLng(30.167112, 31.496108), ], // Canadian International College (CIC) [ LatLng(30.034312, 31.428963), LatLng(30.035661, 31.429037), LatLng(30.036074, 31.430522), LatLng(30.036017, 31.431146), LatLng(30.034580, 31.431117), ], // October 6 University (O6U) [ LatLng(29.974102, 30.946934), LatLng(29.976620, 30.944925), LatLng(29.979848, 30.949832), LatLng(29.977372, 30.951950), ], [ LatLng(30.029312, 31.210046), LatLng(30.027124, 31.201393), LatLng(30.014523, 31.205087), LatLng(30.015416, 31.212218), LatLng(30.027325, 31.210661), ], // Add polygons for 8 more universities... ]; static const List universityNames = [ "American University in Cairo (AUC)", 'German University in Cairo (GUC)', 'Future University in Egypt (FUE)', 'British University in Egypt (BUE)', 'Misr International University (MIU)', 'Canadian International College (CIC)', 'October 6 University (O6U)', "Cairo University", // Add names for 8 more universities... ]; } ================================================== FILE PATH: ./lib/constant/country_polygons.dart ================================================== // في ملف: constant/country_polygons.dart import 'package:google_maps_flutter/google_maps_flutter.dart'; class CountryPolygons { // ========================================================== // 1. الأردن: تغطية الممر الحضري الرئيسي (من إربد شمالاً حتى العقبة جنوباً) // حوالي 12 نقطة // ========================================================== static final List jordanBoundary = [ // شمال إربد (قرب الحدود) const LatLng(32.65, 35.80), // شمال شرق المفرق const LatLng(32.35, 37.00), // شرق الزرقاء / الأزرق const LatLng(31.85, 36.80), // جنوب شرق (نهاية الزحف السكاني) const LatLng(31.00, 36.50), // جنوب / معان const LatLng(30.30, 35.75), // العقبة const LatLng(29.50, 35.00), // البحر الأحمر / الحدود الغربية const LatLng(29.50, 34.85), // غرب وادي عربة const LatLng(30.80, 35.25), // منطقة البحر الميت / السلط const LatLng(32.00, 35.50), // العودة عبر وادي الأردن إلى الشمال const LatLng(32.45, 35.60), // العودة لنقطة إربد const LatLng(32.65, 35.80), ]; // ========================================================== // 2. سوريا: تغطية الممر الغربي والساحلي (درعا، دمشق، حمص، حماة، حلب، الساحل) // حوالي 14 نقطة // ========================================================== static final List syriaBoundary = [ // درعا / الجنوب const LatLng(32.65, 35.95), // شرق السويداء (حدود المنطقة المأهولة) const LatLng(32.85, 37.10), // أطراف دمشق الشرقية const LatLng(33.50, 36.65), // تدمر (أقصى امتداد شرقي للمضلع) const LatLng(34.50, 38.30), // الرقة (شمال شرق) const LatLng(35.95, 38.80), // حلب (الشمال) const LatLng(36.45, 37.15), // الحدود الشمالية الغربية (إدلب / تركيا) const LatLng(36.50, 36.50), // اللاذقية (الساحل) const LatLng(35.50, 35.75), // طرطوس (الساحل) const LatLng(34.80, 35.85), // حمص const LatLng(34.70, 36.70), // حماة const LatLng(35.10, 36.70), // العودة إلى منطقة دمشق const LatLng(33.40, 36.30), // العودة إلى درعا const LatLng(32.65, 35.95), ]; // ========================================================== // 3. مصر: تغطية القاهرة الكبرى، الدلتا، والإسكندرية والإسماعيلية // حوالي 10 نقاط // ========================================================== static final List egyptBoundary = [ // جنوب الفيوم (أقصى امتداد جنوبي غربي) const LatLng(29.20, 30.60), // جنوب القاهرة (العياط) const LatLng(29.80, 31.30), // شرق السويس const LatLng(29.95, 32.70), // الإسماعيلية / القناة const LatLng(30.60, 32.25), // بورسعيد / أطراف الدلتا الشمالية الشرقية const LatLng(31.30, 31.80), // دمياط / ساحل الدلتا const LatLng(31.50, 31.25), // الإسكندرية (أقصى الشمال الغربي) const LatLng(31.20, 29.80), // غرب الدلتا const LatLng(30.50, 30.20), // العودة لنقطة البداية const LatLng(29.20, 30.60), ]; // دالة تُرجع رابط API بناءً على اسم الدولة static String getRoutingApiUrl(String countryName) { switch (countryName) { case 'Jordan': return 'https://routec.intaleq.xyz/route-jo'; case 'Syria': return 'https://routec.intaleq.xyz/route'; case 'Egypt': return 'https://routec.intaleq.xyz/route-eg'; default: // الافتراضي في حالة لم يقع الموقع ضمن أي من المضلعات return 'https://routec.intaleq.xyz/route'; } } } ================================================== FILE PATH: ./lib/constant/style.dart ================================================== import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import '../main.dart'; import 'box_name.dart'; import 'colors.dart'; class AppStyle { static TextStyle headTitle = TextStyle( fontWeight: FontWeight.bold, fontSize: 36, color: AppColor.accentColor, fontFamily: box.read(BoxName.lang) == 'ar' // ?GoogleFonts.markaziText().fontFamily ? GoogleFonts.markaziText().fontFamily : GoogleFonts.inter().fontFamily); static TextStyle headTitle2 = TextStyle( fontWeight: FontWeight.bold, fontSize: 24, color: AppColor.writeColor, fontFamily: box.read(BoxName.lang) == 'ar' ? GoogleFonts.markaziText().fontFamily : GoogleFonts.inter().fontFamily); static TextStyle title = TextStyle( fontWeight: FontWeight.normal, fontSize: 16, color: AppColor.writeColor, fontFamily: box.read(BoxName.lang) == 'ar' ? GoogleFonts.markaziText().fontFamily : GoogleFonts.inter().fontFamily); static TextStyle subtitle = TextStyle( fontWeight: FontWeight.bold, fontSize: 12, color: AppColor.writeColor, fontFamily: box.read(BoxName.lang) == 'ar' ? GoogleFonts.markaziText().fontFamily : GoogleFonts.inter().fontFamily); static TextStyle number = const TextStyle( fontWeight: FontWeight.bold, fontSize: 14, color: AppColor.writeColor, fontFamily: 'digit'); static BoxDecoration boxDecoration = const BoxDecoration( boxShadow: [ BoxShadow( color: AppColor.accentColor, blurRadius: 5, offset: Offset(2, 4)), BoxShadow( color: AppColor.accentColor, blurRadius: 5, offset: Offset(-2, -2)) ], color: AppColor.secondaryColor, borderRadius: BorderRadius.all( Radius.elliptical(15, 30), )); static BoxDecoration boxDecoration1 = const BoxDecoration( boxShadow: [ BoxShadow( color: Color.fromARGB(255, 237, 230, 230), blurRadius: 5, offset: Offset(2, 4)), BoxShadow( color: Color.fromARGB(255, 242, 237, 237), blurRadius: 5, offset: Offset(-2, -2)) ], color: AppColor.secondaryColor, borderRadius: BorderRadius.all( Radius.elliptical(15, 30), ), ); } ================================================== FILE PATH: ./lib/views/home/setting_page.dart ================================================== import 'package:Intaleq/controller/home/home_page_controller.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/views/lang/languages.dart'; import 'HomePage/about_page.dart'; import 'HomePage/frequentlyQuestionsPage.dart'; import 'HomePage/share_app_page.dart'; import 'HomePage/trip_record_page.dart'; // NOTE: This is a placeholder for your actual CountryPickerFromSetting widget. // You should remove this and import your own widget. class CountryPickerFromSetting extends StatelessWidget { const CountryPickerFromSetting({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Change Country'.tr)), body: Center( child: Text('Country Picker Page Placeholder'.tr), ), ); } } class SettingPage extends StatelessWidget { const SettingPage({super.key}); @override Widget build(BuildContext context) { // Using lazyPut to ensure the controller is available when needed. Get.lazyPut(() => HomePageController()); return Scaffold( backgroundColor: const Color(0xFFF5F5F7), // A slightly off-white background appBar: AppBar( title: Text('Setting'.tr, style: const TextStyle( color: Colors.black87, fontWeight: FontWeight.bold)), backgroundColor: Colors.white, elevation: 0.5, leading: IconButton( icon: const Icon(Icons.arrow_back_ios_new, color: Colors.black87), onPressed: () => Get.back(), ), ), body: SafeArea( child: ListView( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 20.0), children: [ _buildSectionHeader('General'.tr), _buildSettingsCard( children: [ _buildSettingsTile( icon: Icons.language, color: Colors.blue, title: 'Language'.tr, subtitle: 'To change Language the App'.tr, onTap: () => Get.to(() => const Language()), ), // const Divider(height: 1, indent: 68, endIndent: 16), // _buildSettingsTile( // icon: Icons.map_outlined, // color: Colors.green, // title: 'Change Country'.tr, // subtitle: 'You can change the Country to get all features'.tr, // onTap: () => Get.to(() => const CountryPickerFromSetting()), // ), ], ), const SizedBox(height: 24), _buildSectionHeader('Preferences'.tr), _buildSettingsCard( children: [ GetBuilder( builder: (controller) { return _buildSettingsSwitchTile( icon: Icons.vibration, color: Colors.purple, title: 'Vibration'.tr, subtitle: 'Vibration feedback for all buttons'.tr, value: controller.isVibrate, onChanged: controller.changeVibrateOption, ); }, ), const Divider(height: 1, indent: 68, endIndent: 16), _buildSettingsTile( icon: Icons.mic_none, color: Colors.orange, title: 'Trips recorded'.tr, subtitle: 'Here recorded trips audio'.tr, onTap: () => Get.to(() => const TripsRecordedPage()), ), ], ), const SizedBox(height: 24), _buildSectionHeader('Support & Info'.tr), _buildSettingsCard( children: [ _buildSettingsTile( icon: Icons.help_outline, color: Colors.cyan, title: 'Frequently Questions'.tr, subtitle: 'Find answers to common questions'.tr, onTap: () => Get.to(() => const FrequentlyQuestionsPage()), ), const Divider(height: 1, indent: 68, endIndent: 16), _buildSettingsTile( icon: Icons.info_outline, color: Colors.indigo, title: 'About Us'.tr, subtitle: 'Learn more about our app and mission'.tr, onTap: () => Get.to(() => const AboutPage()), ), const Divider(height: 1, indent: 68, endIndent: 16), _buildSettingsTile( icon: Icons.share_outlined, color: Colors.redAccent, title: 'Share App'.tr, subtitle: 'Share with friends and earn rewards'.tr, onTap: () => Get.to(() => ShareAppPage()), ), ], ), ], ), ), ); } Widget _buildSectionHeader(String title) { return Padding( padding: const EdgeInsets.only(bottom: 12.0, left: 8.0), child: Text( title, style: TextStyle( color: Colors.grey[700], fontWeight: FontWeight.bold, fontSize: 15, ), ), ); } Widget _buildSettingsCard({required List children}) { return Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), ), clipBehavior: Clip.antiAlias, child: Column( children: children, ), ); } Widget _buildSettingsTile({ required IconData icon, required Color color, required String title, required String subtitle, required VoidCallback onTap, }) { return ListTile( onTap: onTap, leading: Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: color.withOpacity(0.1), borderRadius: BorderRadius.circular(10), ), child: Icon(icon, color: color, size: 22), ), title: Text(title, style: const TextStyle(fontWeight: FontWeight.w500, fontSize: 16)), subtitle: Text(subtitle, style: TextStyle(color: Colors.grey[600], fontSize: 13)), trailing: Icon(Icons.chevron_right, color: Colors.grey[400]), contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 6), ); } Widget _buildSettingsSwitchTile({ required IconData icon, required Color color, required String title, required String subtitle, required bool value, required ValueChanged onChanged, }) { return SwitchListTile( secondary: Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: color.withOpacity(0.1), borderRadius: BorderRadius.circular(10), ), child: Icon(icon, color: color, size: 22), ), title: Text(title, style: const TextStyle(fontWeight: FontWeight.w500, fontSize: 16)), subtitle: Text(subtitle, style: TextStyle(color: Colors.grey[600], fontSize: 13)), value: value, onChanged: onChanged, activeColor: const Color(0xFF007AFF), // iOS-like blue contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 6), ); } } ================================================== FILE PATH: ./lib/views/home/map_page_passenger.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../constant/box_name.dart'; import '../../constant/colors.dart'; import '../../controller/functions/crud.dart'; import '../../controller/functions/package_info.dart'; import '../../controller/home/map_passenger_controller.dart'; import '../../main.dart'; import '../../views/home/map_widget.dart/ride_begin_passenger.dart'; import '../../controller/home/menu_controller.dart'; import 'map_widget.dart/apply_order_widget.dart'; import 'map_widget.dart/buttom_sheet_map_show.dart'; import 'map_widget.dart/car_details_widget_to_go.dart'; import 'map_widget.dart/cash_confirm_bottom_page.dart'; import 'map_widget.dart/google_map_passenger_widget.dart'; import 'map_widget.dart/left_main_menu_icons.dart'; import 'map_widget.dart/main_bottom_menu_map.dart'; import 'map_widget.dart/map_menu_widget.dart'; import 'map_widget.dart/menu_map_page.dart'; import 'map_widget.dart/passengerRideLoctionWidget.dart'; import 'map_widget.dart/payment_method.page.dart'; import 'map_widget.dart/points_page_for_rider.dart'; import 'map_widget.dart/ride_from_start_app.dart'; import 'map_widget.dart/searching_captain_window.dart'; import 'map_widget.dart/vip_begin.dart'; class MapPagePassenger extends StatelessWidget { const MapPagePassenger({super.key}); @override Widget build(BuildContext context) { Get.put(MapPassengerController()); Get.put(MyMenuController()); Get.put(CRUD()); WidgetsBinding.instance.addPostFrameCallback((_) { checkForUpdate(context); }); return Scaffold( body: SafeArea( bottom: true, child: Stack( children: [ GoogleMapPassengerWidget(), // OsmMapPassengerWidget(), leftMainMenuIcons(), // PaymobPackage(), const PickerIconOnMap(), // PickerAnimtionContainerFormPlaces(), const MainBottomMenuMap(), // NewMainBottomSheet(), buttomSheetMapPage(), CarDetailsTypeToChoose(), // const HeaderDestination(), const BurcMoney(), // const PromoCode(), ApplyOrderWidget(), const MapMenuWidget(), // hexagonClipper(), const CancelRidePageShow(), CashConfirmPageShown(), const PaymentMethodPage(), const SearchingCaptainWindow(), // timerForCancelTripFromPassenger(), // const DriverTimeArrivePassengerPage(), // const TimerToPassengerFromDriver(), const PassengerRideLocationWidget(), const RideBeginPassenger(), const VipRideBeginPassenger(), const RideFromStartApp(), // cancelRidePage(), // const MenuIconMapPageWidget(), PointsPageForRider() ], ), ), ); } } class CancelRidePageShow extends StatelessWidget { const CancelRidePageShow({ super.key, }); @override Widget build(BuildContext context) { return GetBuilder( builder: (controller) { // نستخدم RideState Enum لأنه أدق، أو نصلح المنطق النصي // الشرط: // 1. يوجد خط مسار // 2. الحالة ليست "بدأت" // 3. الحالة ليست "انتهت" // 4. الحالة ليست "قيد التنفيذ" (لزيادة التأكيد) // bool showCancelButton = controller.polyLines.isNotEmpty && // controller.statusRide != 'Begin' && // استخدمنا && // controller.statusRide != 'inProgress' && // controller.statusRide != 'Finished'; // يمكنك أيضاً استخدام RideState ليكون أدق: bool showCancelButton = controller.polyLines.isNotEmpty && controller.currentRideState.value != RideState.inProgress && controller.currentRideState.value != RideState.finished; return showCancelButton ? Positioned( right: box.read(BoxName.lang) != 'ar' ? 10 : null, left: box.read(BoxName.lang) == 'ar' ? 10 : null, top: Get.height * .013, child: GestureDetector( onTap: () { // استدعاء دالة الإلغاء controller.changeCancelRidePageShow(); // ملاحظة: تأكد أن الدالة تظهر ديالوج للتأكيد أولاً ولا تلغي فوراً }, child: Container( decoration: BoxDecoration( color: AppColor.redColor, borderRadius: BorderRadius.circular(15)), child: const Padding( padding: EdgeInsets.all(3), child: Icon( Icons.clear, size: 40, color: AppColor.secondaryColor, ), ), ), )) : const SizedBox(); }, ); } } class PickerIconOnMap extends StatelessWidget { const PickerIconOnMap({ super.key, }); @override Widget build(BuildContext context) { return GetBuilder( builder: (controller) => controller.isPickerShown ? Positioned( bottom: Get.height * .2, top: 0, left: 0, right: 0, child: controller.isPickerShown ? const Icon( Icons.add_location, color: Colors.purple, ) : const SizedBox(), ) : const SizedBox()); } } ================================================== FILE PATH: ./lib/views/home/drawer_menu_page.dart ================================================== import 'package:flutter/material.dart'; import 'package:Intaleq/constant/colors.dart'; class DrawerMenuPage extends StatelessWidget { const DrawerMenuPage({super.key}); @override Widget build(BuildContext context) { return Container( height: 500, color: AppColor.secondaryColor.withOpacity(.5), child: Column( children: [ Container( height: 100, color: AppColor.secondaryColor, ), Container( color: Colors.transparent, ) ], ), ); } } ================================================== FILE PATH: ./lib/views/home/HomePage/contact_us.dart ================================================== import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; // ignore: unused_import import 'package:Intaleq/controller/functions/launch.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; import '../../../controller/functions/tts.dart'; import '../../../controller/home/contact_us_controller.dart'; class ContactUsPage extends StatelessWidget { ContactUsPage({super.key}); @override Widget build(BuildContext context) { Get.put(ContactUsController()); return GetBuilder(builder: (controller) { return MyScafolld( title: "Contact Us".tr, body: [ Padding( padding: const EdgeInsets.all(8.0), child: ListView( // crossAxisAlignment: CrossAxisAlignment.center, // mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( decoration: AppStyle.boxDecoration1, child: Column( children: [ ClipRRect( borderRadius: BorderRadius.circular(15), child: Image.asset('assets/images/logo.gif')), IconButton( onPressed: () async { Get.put(TextToSpeechController()).speakText( 'Intaleq is the safest and most reliable ride-sharing app designed especially for passengers in Syria. We provide a comfortable, respectful, and affordable riding experience with features that prioritize your safety and convenience. Our trusted captains are verified, insured, and supported by regular car maintenance carried out by top engineers. We also offer on-road support services to make sure every trip is smooth and worry-free. With Intaleq, you enjoy quality, safety, and peace of mind—every time you ride.' .tr); }, icon: const Icon(Icons.headphones), ), Padding( padding: const EdgeInsets.all(8.0), child: Text( 'Intaleq is the safest and most reliable ride-sharing app designed especially for passengers in Syria. We provide a comfortable, respectful, and affordable riding experience with features that prioritize your safety and convenience. Our trusted captains are verified, insured, and supported by regular car maintenance carried out by top engineers. We also offer on-road support services to make sure every trip is smooth and worry-free. With Intaleq, you enjoy quality, safety, and peace of mind—every time you ride.' .tr, style: AppStyle.title, textAlign: TextAlign.center, ), ), ], ), ), const SizedBox( height: 30, ), Container( decoration: AppStyle.boxDecoration1, child: Padding( padding: const EdgeInsets.all(8.0), child: Text( "You can contact us during working hours from 10:00 - 16:00." .tr, style: AppStyle.title, textAlign: TextAlign.center, ), ), ), InkWell( onTap: () => controller.showContactDialog(context), child: const Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Icon( Icons.phone, color: AppColor.blueColor, ), Icon( FontAwesome.whatsapp, color: AppColor.greenColor, ), Icon( Icons.email, color: AppColor.redColor, ), ], ), ), const SizedBox( height: 30, ) ], ), ) ], isleading: true); }); } } ================================================== FILE PATH: ./lib/views/home/HomePage/share_app_page.dart ================================================== import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../../constant/colors.dart'; import '../../../controller/home/profile/invit_controller.dart'; import '../../../print.dart'; class ShareAppPage extends StatelessWidget { final InviteController controller = Get.put(InviteController()); @override Widget build(BuildContext context) { return Scaffold( backgroundColor: CupertinoColors.systemBackground, appBar: AppBar( backgroundColor: CupertinoColors.systemBackground, elevation: 0, title: Text( 'Invite'.tr, style: const TextStyle(color: CupertinoColors.label), ), leading: IconButton( icon: const Icon(Icons.arrow_back_ios, color: AppColor.blueColor), onPressed: () => Get.back(), ), ), body: SafeArea( child: GetBuilder( builder: (controller) { return Column( children: [ Expanded( child: SingleChildScrollView( padding: const EdgeInsets.all(16), child: _buildPassengerTab(context), ), ), ], ); }, ), ), ); } Widget _buildPassengerTab(BuildContext context) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: CupertinoColors.systemGrey6, borderRadius: BorderRadius.circular(12), ), child: Column( children: [ Text( "Share this code with your friends and earn rewards when they use it!" .tr, textAlign: TextAlign.center, style: const TextStyle( color: CupertinoColors.secondaryLabel, fontSize: 13, ), ), ], ), ), const SizedBox(height: 20), _buildPhoneInput(), const SizedBox(height: 20), _buildActionButtonsPassengers(), const SizedBox(height: 20), const SizedBox(height: 20), _buildInvitationsListPassengers(context), ], ); } // Widget _buildPhoneInput() { // return Container( // decoration: BoxDecoration( // color: CupertinoColors.systemGrey6, // borderRadius: BorderRadius.circular(8), // ), // child: Row( // children: [ // Expanded( // child: CupertinoTextField.borderless( // controller: controller.invitePhoneController, // placeholder: 'Enter phone'.tr, // padding: const EdgeInsets.all(12), // keyboardType: TextInputType.phone, // ), // ), // CupertinoButton( // child: const Icon(CupertinoIcons.person_badge_plus, // color: AppColor.blueColor), // onPressed: () async { // await controller.pickContacts(); // if (controller.contacts.isNotEmpty) { // if (box.read(BoxName.isSavedPhones) == null) { // controller.savePhoneToServer(); // box.write(BoxName.isSavedPhones, true); // } // _showContactsDialog(Get.context!); // } // }, // ), // ], // ), // ); // } Widget _buildPhoneInput() { return Container( decoration: BoxDecoration( color: CupertinoColors.systemGrey6, borderRadius: BorderRadius.circular(8), ), child: Row( children: [ Expanded( child: CupertinoTextField.borderless( controller: controller.invitePhoneController, placeholder: 'Enter phone'.tr, padding: const EdgeInsets.all(12), keyboardType: TextInputType.phone, ), ), CupertinoButton( child: const Icon(CupertinoIcons.person_badge_plus, color: AppColor.blueColor), onPressed: () async { await controller.pickContacts(); Log.print('contacts: ${controller.contacts}'); if (controller.contacts.isNotEmpty) { _showContactsDialog(Get .context!); // Show contacts dialog after loading contacts } else { Get.snackbar( 'No contacts available'.tr, 'Please add contacts to your phone.'.tr, ); } }, ), ], ), ); } Widget _buildActionButtonsPassengers() { return Padding( padding: const EdgeInsets.symmetric(vertical: 20.0, horizontal: 16.0), child: Row( children: [ Expanded( child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 6, offset: const Offset(0, 3), ), ], ), child: CupertinoButton( color: AppColor.blueColor, borderRadius: BorderRadius.circular(10), padding: const EdgeInsets.symmetric(vertical: 14), onPressed: controller.sendInviteToPassenger, child: Text( 'Send Invite'.tr, style: const TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: CupertinoColors.white, ), ), ), ), ), const SizedBox(width: 16), Expanded( child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 6, offset: const Offset(0, 3), ), ], ), child: CupertinoButton( color: AppColor.blueColor, borderRadius: BorderRadius.circular(10), padding: const EdgeInsets.symmetric(vertical: 14), child: Text( 'Show Invitations'.tr, style: const TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: CupertinoColors.white, ), ), onPressed: () async { controller.fetchDriverStatsPassengers(); }, ), ), ), ], ), ); } Widget _buildInvitationsListPassengers(BuildContext context) { return SizedBox( height: Get.height * .4, child: controller.driverInvitationDataToPassengers.isEmpty ? Center( child: Text( "No invitation found yet!".tr, style: const TextStyle( color: CupertinoColors.secondaryLabel, fontSize: 17, ), ), ) : ListView.builder( itemCount: controller.driverInvitationDataToPassengers.length, itemBuilder: (context, index) { return _buildInvitationItemPassengers(context, index); }, ), ); } Widget _buildInvitationItemPassengers(BuildContext context, int index) { // Extracting the data from the sample JSON-like structure var invitation = controller.driverInvitationDataToPassengers[index]; int countOfInvitDriver = int.tryParse(invitation['countOfInvitDriver']?.toString() ?? '0') ?? 0; double progressValue = (countOfInvitDriver / 10.0).clamp(0.0, 1.0); return GestureDetector( onTap: () { controller.onSelectPassengerInvitation(index); }, child: Container( margin: const EdgeInsets.symmetric(vertical: 8.0), padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: CupertinoColors.systemGrey6, borderRadius: BorderRadius.circular(12), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( invitation['passengerName'] .toString(), // Handle null or missing data style: const TextStyle( fontSize: 17, fontWeight: FontWeight.w600, color: CupertinoColors.label, ), ), const SizedBox(height: 8), ClipRRect( borderRadius: BorderRadius.circular(4), child: LinearProgressIndicator( value: progressValue, backgroundColor: CupertinoColors.systemGrey4, valueColor: const AlwaysStoppedAnimation(AppColor.blueColor), minHeight: 6, ), ), const SizedBox(height: 4), Text( '$countOfInvitDriver / 2 ${'Trip'.tr}', // Show trips completed style: const TextStyle( fontSize: 13, color: CupertinoColors.secondaryLabel, ), ), ], ), ), ); } Widget _buildPassengerStats(BuildContext context) { return Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: CupertinoColors.systemGrey6, borderRadius: BorderRadius.circular(12), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "Your Rewards".tr, style: const TextStyle( fontSize: 17, fontWeight: FontWeight.w600, color: CupertinoColors.label, ), ), const SizedBox(height: 16), _buildStatItem( context, "Total Invites".tr, controller.driverInvitationDataToPassengers[0]['countOfInvitDriver'] .toString(), ), _buildStatItem( context, "Active Users".tr, controller.driverInvitationDataToPassengers[0]['passengerName'] .toString(), ), ], ), ); } Widget _buildStatItem(BuildContext context, String label, String value) { return Padding( padding: const EdgeInsets.symmetric(vertical: 8.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( label, style: const TextStyle( color: CupertinoColors.label, fontSize: 15, ), ), Text( value, style: const TextStyle( fontWeight: FontWeight.w600, color: AppColor.blueColor, fontSize: 15, ), ), ], ), ); } void _showContactsDialog(BuildContext context) { Get.defaultDialog( title: 'Choose from contact'.tr, content: SizedBox( height: 400, width: 400, child: Column( children: [ // Header with cancel and title // Container( // padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), // decoration: const BoxDecoration( // borderRadius: BorderRadius.vertical(top: Radius.circular(20)), // color: CupertinoColors.systemGrey6, // ), // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // CupertinoButton( // padding: EdgeInsets.zero, // child: Text( // 'Cancel'.tr, // style: const TextStyle(color: CupertinoColors.systemBlue), // ), // onPressed: () => Navigator.pop(context), // ), // Container( // child: Text('Choose from contact'.tr, // style: AppStyle.title)), // const SizedBox(width: 60), // Balance for Cancel button // ], // ), // ), // Contact list Expanded( child: ListView.builder( itemCount: controller.contactMaps.length, itemBuilder: (context, index) { final contact = controller.contactMaps[index]; return CupertinoButton( padding: EdgeInsets.zero, onPressed: () { controller.selectPhone(contact['phones'].toString()); }, child: Container( padding: const EdgeInsets.symmetric( horizontal: 16, vertical: 12), decoration: BoxDecoration( color: CupertinoColors.systemBackground, border: Border( bottom: BorderSide( color: CupertinoColors.separator.withOpacity(0.5), ), ), ), child: Row( children: [ // Display contact name and phone number Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( contact['name'], style: const TextStyle( color: CupertinoColors.label, fontSize: 17, fontWeight: FontWeight.w500, ), ), Text( (contact['phones'][0].toString()), style: const TextStyle( color: CupertinoColors.secondaryLabel, fontSize: 15, ), ), ], ), ), // Chevron icon for selection const Icon( CupertinoIcons.chevron_forward, color: CupertinoColors.systemGrey2, ), ], ), ), ); }, ), ), ], ), ), ); // showCupertinoModalPopup( // context: context, // builder: (BuildContext context) => Container( // height: 400, // decoration: BoxDecoration( // color: CupertinoColors.systemBackground, // borderRadius: const BorderRadius.vertical(top: Radius.circular(20)), // boxShadow: [ // BoxShadow( // color: CupertinoColors.black.withOpacity(0.2), // offset: const Offset(0, -4), // blurRadius: 10, // ), // ], // ), // child: Column( // children: [ // // Header with cancel and title // Container( // padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), // decoration: const BoxDecoration( // borderRadius: BorderRadius.vertical(top: Radius.circular(20)), // color: CupertinoColors.systemGrey6, // ), // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // CupertinoButton( // padding: EdgeInsets.zero, // child: Text( // 'Cancel'.tr, // style: const TextStyle(color: CupertinoColors.systemBlue), // ), // onPressed: () => Navigator.pop(context), // ), // Container( // child: Text('Choose from contact'.tr, // style: AppStyle.title)), // const SizedBox(width: 60), // Balance for Cancel button // ], // ), // ), // // Contact list // Expanded( // child: ListView.builder( // itemCount: controller.contactMaps.length, // itemBuilder: (context, index) { // final contact = controller.contactMaps[index]; // return CupertinoButton( // padding: EdgeInsets.zero, // onPressed: () { // controller.selectPhone(contact['phones'].toString()); // }, // child: Container( // padding: const EdgeInsets.symmetric( // horizontal: 16, vertical: 12), // decoration: BoxDecoration( // color: CupertinoColors.systemBackground, // border: Border( // bottom: BorderSide( // color: CupertinoColors.separator.withOpacity(0.5), // ), // ), // ), // child: Row( // children: [ // // Display contact name and phone number // Expanded( // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ // Text( // contact['name'], // style: const TextStyle( // color: CupertinoColors.label, // fontSize: 17, // fontWeight: FontWeight.w500, // ), // ), // Text( // controller.formatPhoneNumber( // contact['phones'][0].toString()), // style: const TextStyle( // color: CupertinoColors.secondaryLabel, // fontSize: 15, // ), // ), // ], // ), // ), // // Chevron icon for selection // const Icon( // CupertinoIcons.chevron_forward, // color: CupertinoColors.systemGrey2, // ), // ], // ), // ), // ); // }, // ), // ), // ], // ), // ), // ); } } ================================================== FILE PATH: ./lib/views/home/HomePage/about_page.dart ================================================== import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; class AboutPage extends StatelessWidget { const AboutPage({super.key}); @override Widget build(BuildContext context) { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( middle: Text('About Us'.tr), ), child: SafeArea( child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(20.0), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ // Company Logo Center( child: Image.asset( 'assets/images/logo.gif', // Replace with your logo image asset path height: 80.0, ), ), const SizedBox(height: 20), // Company Name and Introduction Text( 'Intaleq LLC', style: CupertinoTheme.of(context).textTheme.navTitleTextStyle, textAlign: TextAlign.center, ), const SizedBox(height: 8), Text( "Syria's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains." .tr, style: CupertinoTheme.of(context).textTheme.textStyle, textAlign: TextAlign.center, ), const SizedBox(height: 30), // Key Features Section Text( 'Why Choose Intaleq?'.tr, style: CupertinoTheme.of(context).textTheme.navTitleTextStyle, textAlign: TextAlign.center, ), const SizedBox(height: 15), // Nearest Availability Row( children: [ const Icon(CupertinoIcons.location_solid, color: CupertinoColors.activeBlue), const SizedBox(width: 10), Expanded( child: Text( 'Closest to You'.tr, style: CupertinoTheme.of(context).textTheme.textStyle, ), ), ], ), const SizedBox(height: 10), Text( 'We connect you with the nearest drivers for faster pickups and quicker journeys.' .tr, style: CupertinoTheme.of(context) .textTheme .textStyle .copyWith(color: CupertinoColors.secondaryLabel), ), const SizedBox(height: 20), // High-Level Security Row( children: [ const Icon(CupertinoIcons.shield_fill, color: CupertinoColors.activeGreen), const SizedBox(width: 10), Expanded( child: Text( 'Uncompromising Security'.tr, style: CupertinoTheme.of(context).textTheme.textStyle, ), ), ], ), const SizedBox(height: 10), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ const Icon(CupertinoIcons.person_2_fill, size: 18, color: CupertinoColors.activeGreen), const SizedBox(width: 5), Text( 'Lady Captains Available'.tr, style: CupertinoTheme.of(context) .textTheme .textStyle .copyWith(fontSize: 15), ), ], ), const SizedBox(height: 5), Row( children: [ const Icon(CupertinoIcons.recordingtape, size: 18, color: CupertinoColors.activeGreen), const SizedBox(width: 5), Text( 'Recorded Trips (Voice & AI Analysis)'.tr, style: CupertinoTheme.of(context) .textTheme .textStyle .copyWith(fontSize: 15), ), ], ), ], ), const SizedBox(height: 20), // Fast Support Row( children: [ const Icon(CupertinoIcons.bolt_horizontal_fill, color: CupertinoColors.systemOrange), const SizedBox(width: 10), Expanded( child: Text( 'Fastest Complaint Response'.tr, style: CupertinoTheme.of(context).textTheme.textStyle, ), ), ], ), const SizedBox(height: 10), Text( 'Our dedicated customer service team ensures swift resolution of any issues.' .tr, style: CupertinoTheme.of(context) .textTheme .textStyle .copyWith(color: CupertinoColors.secondaryLabel), ), const SizedBox(height: 20), // Affordable Pricing Row( children: [ const Icon(CupertinoIcons.money_dollar_circle_fill, color: CupertinoColors.activeBlue), const SizedBox(width: 10), Expanded( child: Text( 'Affordable for Everyone'.tr, style: CupertinoTheme.of(context).textTheme.textStyle, ), ), ], ), const SizedBox(height: 10), Text( 'Enjoy competitive prices across all trip options, making travel accessible.' .tr, style: CupertinoTheme.of(context) .textTheme .textStyle .copyWith(color: CupertinoColors.secondaryLabel), ), const SizedBox(height: 20), // Trip Options Row( children: [ const Icon(CupertinoIcons.car_detailed, color: CupertinoColors.systemPurple), const SizedBox(width: 10), Expanded( child: Text( 'Variety of Trip Choices'.tr, style: CupertinoTheme.of(context).textTheme.textStyle, ), ), ], ), const SizedBox(height: 10), Text( 'Choose the trip option that perfectly suits your needs and preferences.' .tr, style: CupertinoTheme.of(context) .textTheme .textStyle .copyWith(color: CupertinoColors.secondaryLabel), ), const SizedBox(height: 20), // Passenger Choice Row( children: [ Icon(CupertinoIcons.hand_draw_fill, color: CupertinoColors.systemGreen), const SizedBox(width: 10), Expanded( child: Text( 'Your Choice, Our Priority'.tr, style: CupertinoTheme.of(context).textTheme.textStyle, ), ), ], ), const SizedBox(height: 10), Text( 'Because we are near, you have the flexibility to choose the ride that works best for you.' .tr, style: CupertinoTheme.of(context) .textTheme .textStyle .copyWith(color: CupertinoColors.secondaryLabel), ), ], ), ), ), ), ); } } ================================================== FILE PATH: ./lib/views/home/HomePage/trip_record_page.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:path/path.dart' as path; import 'package:share_plus/share_plus.dart'; import '../../../controller/functions/audio_record1.dart'; class TripsRecordedPage extends StatelessWidget { const TripsRecordedPage({super.key}); @override Widget build(BuildContext context) { // Ensure the controller is available. // If it's not initialized elsewhere, you can use Get.put() or Get.lazyPut() here. // Get.lazyPut(() => AudioRecorderController()); return Scaffold( appBar: AppBar( title: Text('Trips recorded'.tr), backgroundColor: Colors.white, elevation: 1, actions: [ GetBuilder( builder: (controller) => IconButton( tooltip: 'Delete All'.tr, icon: const Icon(Icons.delete_sweep_outlined), onPressed: () { _showDeleteConfirmation(context, controller, isDeleteAll: true); }, ), ) ], ), body: GetBuilder( builder: (controller) { return Column( children: [ Expanded( child: _buildRecordingsList(controller), ), // Show player controls only when a file is selected if (controller.selectedFilePath != null) _buildPlayerControls(context, controller), ], ); }, ), ); } /// Builds the list of recorded audio files. Widget _buildRecordingsList(AudioRecorderController controller) { return FutureBuilder>( future: controller.getRecordedFiles(), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: CircularProgressIndicator()); } if (snapshot.hasError) { return Center(child: Text('Error: ${snapshot.error}'.tr)); } if (!snapshot.hasData || snapshot.data!.isEmpty) { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.mic_off_outlined, size: 80, color: Colors.grey[400]), const SizedBox(height: 16), Text( 'No Recordings Found'.tr, style: TextStyle(fontSize: 18, color: Colors.grey[600]), ), const SizedBox(height: 8), Padding( padding: const EdgeInsets.symmetric(horizontal: 40.0), child: Text( 'Record your trips to see them here.'.tr, textAlign: TextAlign.center, style: TextStyle(color: Colors.grey[500]), ), ), ], ), ); } final recordedFiles = snapshot.data!; return ListView.builder( padding: const EdgeInsets.only(top: 8, bottom: 8), itemCount: recordedFiles.length, itemBuilder: (context, index) { final file = recordedFiles[index]; final fileName = path.basename(file); final isSelected = controller.selectedFilePath == file; return Card( margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 6), elevation: isSelected ? 4 : 1, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12)), child: ListTile( leading: Icon( isSelected && controller.isPlaying ? Icons.pause_circle_filled : Icons.play_circle_fill, color: isSelected ? Theme.of(context).primaryColor : Colors.grey, size: 40, ), title: Text(fileName, style: const TextStyle(fontWeight: FontWeight.w500)), subtitle: Text("Audio Recording".tr), onTap: () { if (isSelected) { controller.isPlaying ? controller.pausePlayback() : controller.resumePlayback(); } else { controller.playRecordedFile(file); } }, selected: isSelected, selectedTileColor: Theme.of(context).primaryColor.withOpacity(0.1), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12)), ), ); }, ); }, ); } /// Builds the player UI at the bottom of the screen. Widget _buildPlayerControls( BuildContext context, AudioRecorderController controller) { final fileName = path.basename(controller.selectedFilePath!); final positionText = Duration(seconds: controller.currentPosition.toInt()) .toString() .split('.') .first .padLeft(8, '0') .substring(3); final durationText = Duration(seconds: controller.totalDuration.toInt()) .toString() .split('.') .first .padLeft(8, '0') .substring(3); return Material( elevation: 10, child: Container( padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 16.0), child: Column( mainAxisSize: MainAxisSize.min, children: [ Text(fileName, style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 16), textAlign: TextAlign.center), const SizedBox(height: 8), Row( children: [ Text(positionText), Expanded( child: Slider( value: (controller.totalDuration > 0) ? controller.currentPosition / controller.totalDuration : 0.0, onChanged: (value) { final newPosition = value * controller.totalDuration; controller.audioPlayer .seek(Duration(seconds: newPosition.toInt())); }, ), ), Text(durationText), ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ IconButton( icon: const Icon(Icons.share_outlined), tooltip: 'Share'.tr, onPressed: () { Share.shareXFiles([XFile(controller.selectedFilePath!)]); }, iconSize: 28, ), IconButton( icon: Icon(controller.isPlaying ? Icons.pause_circle_filled : Icons.play_circle_filled), onPressed: () { controller.isPlaying ? controller.pausePlayback() : controller.resumePlayback(); }, iconSize: 56, color: Theme.of(context).primaryColor, ), IconButton( icon: const Icon(Icons.delete_outline, color: Colors.redAccent), tooltip: 'Delete'.tr, onPressed: () { _showDeleteConfirmation(context, controller, isDeleteAll: false); }, iconSize: 28, ), ], ) ], ), ), ); } /// Shows a confirmation dialog for deleting one or all files. void _showDeleteConfirmation( BuildContext context, AudioRecorderController controller, { required bool isDeleteAll, }) { showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: Text(isDeleteAll ? 'Delete All Recordings?'.tr : 'Delete Recording?'.tr), content: Text(isDeleteAll ? 'This action cannot be undone.'.tr : 'Are you sure you want to delete this file?'.tr), actions: [ TextButton( child: Text('Cancel'.tr), onPressed: () => Navigator.of(context).pop(), ), TextButton( child: Text('Delete'.tr, style: const TextStyle(color: Colors.red)), onPressed: () async { if (isDeleteAll) { await controller.deleteAllRecordedFiles(); } else { // NOTE: You may need to add this method to your controller // if it doesn't exist. // await controller.deleteFile(controller.selectedFilePath!); } Navigator.of(context).pop(); }, ), ], ); }, ); } } ================================================== FILE PATH: ./lib/views/home/HomePage/frequentlyQuestionsPage.dart ================================================== import 'package:Intaleq/views/home/HomePage/contact_us.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; class FrequentlyQuestionsPage extends StatelessWidget { const FrequentlyQuestionsPage({super.key}); void _showAnswerDialog(BuildContext context, String question, String answer) { showCupertinoDialog( context: context, builder: (BuildContext context) => CupertinoAlertDialog( title: Text(question, style: const TextStyle( fontWeight: FontWeight.bold, color: Colors.indigo)), content: Text(answer), actions: [ CupertinoDialogAction( isDefaultAction: true, onPressed: () { Navigator.of(context).pop(); }, child: const Text('Close'), ), ], ), ); } @override Widget build(BuildContext context) { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( backgroundColor: Colors.indigo, middle: Text( 'Frequently Asked Questions'.tr, style: const TextStyle(color: Colors.white), ), ), child: SafeArea( child: ListView( children: [ CupertinoListSection.insetGrouped( header: Text( 'Getting Started'.tr, style: const TextStyle(fontWeight: FontWeight.bold), ), children: [ CupertinoListTile( leading: const Icon( CupertinoIcons.car_detailed, color: Colors.indigo, ), title: Text('How do I request a ride?'.tr), trailing: const CupertinoListTileChevron(), onTap: () => _showAnswerDialog( context, 'How do I request a ride?'.tr, 'Simply open the Intaleq app, enter your destination, and tap "Request Ride". The app will connect you with a nearby driver.' .tr, ), ), ], ), CupertinoListSection.insetGrouped( header: Text( 'Vehicle Options'.tr, style: const TextStyle(fontWeight: FontWeight.bold), ), children: [ CupertinoListTile( leading: const Icon( CupertinoIcons.car_fill, color: Colors.blue, ), title: Text('What types of vehicles are available?'.tr), trailing: const CupertinoListTileChevron(), onTap: () => _showAnswerDialog( context, 'What types of vehicles are available?'.tr, 'Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.' .tr, ), ), ], ), CupertinoListSection.insetGrouped( header: Text( 'Payments'.tr, style: const TextStyle(fontWeight: FontWeight.bold), ), children: [ CupertinoListTile( leading: const Icon( CupertinoIcons.creditcard, color: Colors.green, ), title: Text('How can I pay for my ride?'.tr), trailing: const CupertinoListTileChevron(), onTap: () => _showAnswerDialog( context, 'How can I pay for my ride?'.tr, 'You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.' .tr, ), ), ], ), CupertinoListSection.insetGrouped( header: Text( 'Ride Management'.tr, style: const TextStyle(fontWeight: FontWeight.bold), ), children: [ CupertinoListTile( leading: const Icon( CupertinoIcons.xmark_circle_fill, color: Colors.red, ), title: Text('Can I cancel my ride?'.tr), trailing: const CupertinoListTileChevron(), onTap: () => _showAnswerDialog( context, 'Can I cancel my ride?'.tr, 'Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.' .tr, ), ), ], ), CupertinoListSection.insetGrouped( header: Text( 'For Drivers'.tr, style: const TextStyle(fontWeight: FontWeight.bold), ), children: [ CupertinoListTile( leading: const Icon( CupertinoIcons.person_crop_circle_fill, color: Colors.orange, ), title: Text('Driver Registration & Requirements'.tr), trailing: const CupertinoListTileChevron(), onTap: () => showCupertinoDialog( context: context, builder: (BuildContext context) => CupertinoAlertDialog( title: Text('Driver Registration'.tr, style: const TextStyle( fontWeight: FontWeight.bold, color: Colors.indigo)), content: Text( 'To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.' .tr), actions: [ CupertinoDialogAction( isDefaultAction: true, onPressed: () { Get.to(() => ContactUsPage()); // Optionally, you can open a URL here }, child: Text('Visit Website/Contact Support'.tr), ), CupertinoDialogAction( onPressed: () { Navigator.of(context).pop(); }, child: Text('Close'.tr), ), ], ), ), ), ], ), CupertinoListSection.insetGrouped( header: Text( 'Communication'.tr, style: const TextStyle(fontWeight: FontWeight.bold), ), children: [ CupertinoListTile( leading: const Icon( CupertinoIcons.chat_bubble_2_fill, color: Colors.purple, ), title: Text( 'How do I communicate with the other party (passenger/driver)?' .tr), trailing: const CupertinoListTileChevron(), onTap: () => _showAnswerDialog( context, 'How do I communicate with the other party (passenger/driver)?' .tr, 'You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.' .tr, ), ), ], ), CupertinoListSection.insetGrouped( header: Text( 'Safety & Security'.tr, style: const TextStyle(fontWeight: FontWeight.bold), ), children: [ CupertinoListTile( leading: const Icon( CupertinoIcons.shield_fill, color: Colors.teal, ), title: Text('What safety measures does Intaleq offer?'.tr), trailing: const CupertinoListTileChevron(), onTap: () => _showAnswerDialog( context, 'What safety measures does Intaleq offer?'.tr, 'Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.' .tr, ), ), ], ), const SizedBox(height: 20), // Add some bottom padding ], ), ), ); } } ================================================== FILE PATH: ./lib/views/home/HomePage/trip_monitor/trip_monitor.dart ================================================== import 'dart:io'; import 'package:Intaleq/controller/home/trip_monitor_controller.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:vibration/vibration.dart'; import '../../../../constant/colors.dart'; import '../../../../constant/style.dart'; import '../../../widgets/elevated_btn.dart'; class TripMonitor extends StatelessWidget { const TripMonitor({super.key}); @override Widget build(BuildContext context) { final params = Get.parameters; final arguments = Get.arguments as Map?; // Use params or arguments to initialize your controller final controller = Get.put(TripMonitorController()); controller.init( rideId: params['rideId'] ?? arguments?['rideId'], driverId: params['driverId'] ?? arguments?['driverId'], ); return GetBuilder(builder: (tripMonitorController) { return MyScafolld( title: 'Trip Monitor'.tr, body: [ GoogleMap( onMapCreated: tripMonitorController.onMapCreated, initialCameraPosition: CameraPosition( // bearing: 45, target: tripMonitorController.parentLocation, zoom: 16, tilt: 40, ), // onCameraMove: (position) {}, markers: { Marker( markerId: MarkerId('start'.tr), position: tripMonitorController.parentLocation, draggable: true, icon: tripMonitorController.tripData['message'][0]['model'] .contains('دراجة') ? tripMonitorController.motoIcon : tripMonitorController.tripData['message'][0]['model'] ['gender'] == 'Male' ? tripMonitorController.carIcon : tripMonitorController.ladyIcon, rotation: tripMonitorController.rotation, ), }, ), speedCircle() ], isleading: true, ); }); } } GetBuilder speedCircle() { if (Get.find().speed > 100) { if (Platform.isIOS) { HapticFeedback.selectionClick(); } else { Vibration.vibrate(duration: 1000); } Get.defaultDialog( barrierDismissible: false, titleStyle: AppStyle.title, title: 'Speed Over'.tr, middleText: 'Please slow down'.tr, middleTextStyle: AppStyle.title, confirm: MyElevatedButton( title: 'I will slow down'.tr, onPressed: () => Get.back(), ), ); } return GetBuilder( builder: (tripMonitorController) { return Positioned( bottom: 25, right: 100, child: Container( decoration: BoxDecoration( shape: BoxShape.circle, color: tripMonitorController.speed > 100 ? Colors.red : AppColor.secondaryColor, border: Border.all(width: 3, color: AppColor.redColor), ), height: 60, width: 60, child: Center( child: Text( tripMonitorController.speed.toStringAsFixed(0), style: AppStyle.number, ), ), ), ); }, ); } ================================================== FILE PATH: ./lib/views/home/HomePage/trip_monitor/trip_link_monitor.dart ================================================== import 'dart:io'; import 'package:Intaleq/controller/home/trip_monitor_controller.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:vibration/vibration.dart'; import '../../../../constant/colors.dart'; import '../../../../constant/style.dart'; import '../../../widgets/elevated_btn.dart'; class TripMonitor extends StatelessWidget { const TripMonitor({super.key}); @override Widget build(BuildContext context) { final params = Get.parameters; // Use params to initialize your controller or pass data Get.put(TripMonitorController()).init(); return GetBuilder(builder: (tripMonitorController) { return MyScafolld( title: 'Trip Monitor'.tr, body: [ GoogleMap( onMapCreated: tripMonitorController.onMapCreated, initialCameraPosition: CameraPosition( // bearing: 45, target: tripMonitorController.parentLocation, zoom: 16, tilt: 40, ), // onCameraMove: (position) {}, markers: { Marker( markerId: MarkerId('start'.tr), position: tripMonitorController.parentLocation, draggable: true, icon: tripMonitorController.tripData['message'][0]['model'] .contains('دراجة') ? tripMonitorController.motoIcon : tripMonitorController.tripData['message'][0]['model'] ['gender'] == 'Male' ? tripMonitorController.carIcon : tripMonitorController.ladyIcon, rotation: tripMonitorController.rotation, ), }, ), speedCircle() ], isleading: true, ); }); } } GetBuilder speedCircle() { if (Get.find().speed > 100) { if (Platform.isIOS) { HapticFeedback.selectionClick(); } else { Vibration.vibrate(duration: 1000); } Get.defaultDialog( barrierDismissible: false, titleStyle: AppStyle.title, title: 'Speed Over'.tr, middleText: 'Please slow down'.tr, middleTextStyle: AppStyle.title, confirm: MyElevatedButton( title: 'I will slow down'.tr, onPressed: () => Get.back(), ), ); } return GetBuilder( builder: (tripMonitorController) { return Positioned( bottom: 25, right: 100, child: Container( decoration: BoxDecoration( shape: BoxShape.circle, color: tripMonitorController.speed > 100 ? Colors.red : AppColor.secondaryColor, border: Border.all(width: 3, color: AppColor.redColor), ), height: 60, width: 60, child: Center( child: Text( tripMonitorController.speed.toStringAsFixed(0), style: AppStyle.number, ), ), ), ); }, ); } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/form_search_start.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/home/map_passenger_controller.dart'; // --------------------------------------------------- // -- Widget for Start Point Search (Updated) -- // --------------------------------------------------- GetBuilder formSearchPlacesStart() { return GetBuilder( id: 'start_point_form', // إضافة معرف لتحديث هذا الجزء فقط عند الحاجة builder: (controller) => Column( children: [ Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), child: Row( children: [ // --- حقل البحث النصي --- Expanded( child: TextFormField( controller: controller.placeStartController, onChanged: (value) { if (controller.placeStartController.text.length > 2) { controller.getPlacesStart(); } else if (controller.placeStartController.text.isEmpty) { controller.clearPlacesStart(); } }, decoration: InputDecoration( hintText: 'Search for a starting point'.tr, hintStyle: AppStyle.subtitle.copyWith(color: Colors.grey[600]), prefixIcon: const Icon(Icons.search, color: AppColor.primaryColor), suffixIcon: controller.placeStartController.text.isNotEmpty ? IconButton( icon: Icon(Icons.clear, color: Colors.grey[400]), onPressed: () { controller.placeStartController.clear(); controller.clearPlacesStart(); }, ) : null, contentPadding: const EdgeInsets.symmetric( horizontal: 16.0, vertical: 10.0), border: OutlineInputBorder( borderRadius: BorderRadius.circular(8.0), borderSide: BorderSide.none, ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8.0), borderSide: BorderSide(color: AppColor.primaryColor), ), filled: true, fillColor: Colors.grey[50], ), ), ), const SizedBox(width: 8.0), // --- أيقونة اختيار الموقع من الخريطة (الجزء المضاف) --- IconButton( onPressed: () { // هذا السطر مهم جداً: نخبر الكونترولر أننا نحدد نقطة البداية الآن controller.passengerStartLocationFromMap = true; // إخفاء القائمة السفلية وفتح مؤشر الخريطة (Picker) controller.changeMainBottomMenuMap(); controller.changePickerShown(); }, icon: Icon(Icons.location_on_outlined, color: AppColor.accentColor, size: 30), tooltip: 'Pick start point on map'.tr, ), ], ), ), // --- قائمة نتائج البحث --- AnimatedContainer( duration: const Duration(milliseconds: 200), height: controller.placesStart.isNotEmpty ? 300 : 0, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(8.0), ), margin: const EdgeInsets.symmetric(horizontal: 16.0), child: ListView.separated( shrinkWrap: true, physics: const ClampingScrollPhysics(), itemCount: controller.placesStart.length, separatorBuilder: (context, index) => const Divider(height: 1, color: Colors.grey), itemBuilder: (BuildContext context, int index) { var res = controller.placesStart[index]; var title = res['name_ar'] ?? res['name'] ?? 'Unknown Place'; var address = res['address'] ?? 'Details not available'; return ListTile( leading: const Icon(Icons.place, size: 30, color: Colors.grey), title: Text(title, style: AppStyle.subtitle .copyWith(fontWeight: FontWeight.w500)), subtitle: Text(address, style: TextStyle(color: Colors.grey[600], fontSize: 12)), onTap: () { var latitude = res['latitude']; var longitude = res['longitude']; if (latitude != null && longitude != null) { // تحديث موقع الراكب (نقطة الانطلاق) بناءً على الاختيار controller.passengerLocation = LatLng(double.parse(latitude), double.parse(longitude)); // تحديث النص في الحقل controller.placeStartController.text = title; // مسح النتائج controller.clearPlacesStart(); // إغلاق القائمة والعودة للخريطة لرؤية النتيجة (اختياري حسب منطق تطبيقك) controller.changeMainBottomMenuMap(); controller.update(); } }, ); }, ), ), ], ), ); } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/timer_to_passenger_from_driver.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/home/map_passenger_controller.dart'; import 'ride_begin_passenger.dart'; class TimerToPassengerFromDriver extends StatelessWidget { const TimerToPassengerFromDriver({ super.key, }); @override Widget build(BuildContext context) { return GetBuilder(builder: (controller) { if (controller.remainingTime == 0 && (controller.isDriverInPassengerWay == true || controller.timeToPassengerFromDriverAfterApplied > 0)) { // ) { return Positioned( left: 10, right: 10, bottom: 5, child: Container( decoration: AppStyle.boxDecoration, height: controller.remainingTime == 0 && (controller.isDriverInPassengerWay == true || controller.timeToPassengerFromDriverAfterApplied > 0) ? 200 : 0, // width: 100, child: Padding( padding: const EdgeInsets.all(8.0), child: Column( children: [ Text( 'You Can cancel Ride After Captain did not come in the time' .tr, style: AppStyle.title, textAlign: TextAlign.center, ), Stack( children: [ LinearProgressIndicator( backgroundColor: AppColor.accentColor, color: controller .remainingTimeToPassengerFromDriverAfterApplied < 60 ? AppColor.redColor : AppColor.greenColor, minHeight: 25, borderRadius: BorderRadius.circular(15), value: controller .progressTimerToPassengerFromDriverAfterApplied .toDouble(), ), Center( child: Text( controller.stringRemainingTimeToPassenger, style: AppStyle.title, ), ) ], ), IconButton( onPressed: () {}, icon: const Icon( Icons.phone, color: AppColor.blueColor, ), ), controller.remainingTimeToPassengerFromDriverAfterApplied < 60 ? MyElevatedButton( title: 'You can cancel trip'.tr, onPressed: () async { await controller .calculateDistanceBetweenPassengerAndDriverBeforeCancelRide(); }) : const SizedBox() ], ), ), ), ); } else if (controller.remainingTime == 0 && controller.isDriverArrivePassenger == true) { return Positioned( left: 10, right: 10, bottom: 5, child: Container( decoration: AppStyle.boxDecoration, height: controller.remainingTime == 0 && controller.isDriverArrivePassenger == true ? 150 : 0, // width: 100, child: Padding( padding: const EdgeInsets.all(8.0), child: Column( children: [ Text( 'The driver waiting you in picked location .'.tr, style: AppStyle.title, textAlign: TextAlign.center, ), Stack( children: [ LinearProgressIndicator( backgroundColor: AppColor.accentColor, color: controller.remainingTimeDriverWaitPassenger5Minute < 60 ? AppColor.redColor : AppColor.greenColor, minHeight: 50, borderRadius: BorderRadius.circular(15), value: controller .progressTimerDriverWaitPassenger5Minute .toDouble(), ), Center( child: Text( controller .stringRemainingTimeDriverWaitPassenger5Minute, style: AppStyle.title, ), ) ], ), Text( 'Please go to Car now '.tr, style: AppStyle.title, textAlign: TextAlign.center, ), ], ), ), ), ); } else { return const RideBeginPassenger(); } }); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/map_menu_widget.dart ================================================== import 'dart:ui'; // مهم لإضافة تأثير الضبابية import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/main.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/views/home/my_wallet/passenger_wallet.dart'; import 'package:Intaleq/views/home/profile/complaint_page.dart'; import 'package:Intaleq/views/home/profile/order_history.dart'; import 'package:Intaleq/views/home/profile/promos_passenger_page.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../../constant/colors.dart'; import '../../../constant/links.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../notification/notification_page.dart'; import '../HomePage/contact_us.dart'; import '../HomePage/share_app_page.dart'; import '../setting_page.dart'; import '../profile/passenger_profile_page.dart'; // --- الويدجت الرئيسية بالتصميم الجديد --- class MapMenuWidget extends StatelessWidget { const MapMenuWidget({super.key}); @override Widget build(BuildContext context) { Get.lazyPut(() => MapPassengerController()); return GetBuilder( builder: (controller) => Stack( children: [ // --- خلفية معتمة عند فتح القائمة --- if (controller.widthMenu > 0) GestureDetector( onTap: controller.getDrawerMenu, child: Container( color: Colors.black.withOpacity(0.4), ), ), // --- القائمة الجانبية المنزلقة --- _buildSideMenu(controller), // --- زر القائمة العائم --- _buildMenuButton(controller), ], ), ); } // --- ويدجت لبناء زر القائمة --- Widget _buildMenuButton(MapPassengerController controller) { return Positioned( top: 45, left: 16, child: SafeArea( child: InkWell( onTap: controller.getDrawerMenu, borderRadius: BorderRadius.circular(50), child: ClipRRect( borderRadius: BorderRadius.circular(50), child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0), child: AnimatedContainer( duration: const Duration(milliseconds: 300), padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: AppColor.secondaryColor.withOpacity(0.8), shape: BoxShape.circle, border: Border.all(color: AppColor.writeColor.withOpacity(0.2)), ), child: Icon( controller.widthMenu > 0 ? Icons.close : Icons.menu, color: AppColor.writeColor, size: 26, ), ), ), ), ), ), ); } // --- ويدجت لبناء القائمة الجانبية --- Widget _buildSideMenu(MapPassengerController controller) { return AnimatedPositioned( duration: const Duration(milliseconds: 400), curve: Curves.fastOutSlowIn, top: 0, bottom: 0, left: controller.widthMenu > 0 ? 0 : -Get.width, child: ClipRRect( child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), child: Container( width: Get.width * 0.8, constraints: const BoxConstraints(maxWidth: 320), decoration: BoxDecoration( color: AppColor.secondaryColor.withOpacity(0.95), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.2), blurRadius: 20, ) ], ), child: SafeArea( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildMenuHeader(), _buildQuickActionButtons(), const Divider( color: Colors.white24, indent: 16, endIndent: 16, height: 24), Expanded( child: ListView( padding: const EdgeInsets.symmetric(horizontal: 8), children: [ MenuListItem( title: 'My Balance'.tr, icon: Icons.account_balance_wallet_outlined, onTap: () => Get.to(() => const PassengerWallet())), MenuListItem( title: 'Order History'.tr, icon: Icons.history_rounded, onTap: () => Get.to(() => const OrderHistory())), MenuListItem( title: 'Promos'.tr, icon: Icons.local_offer_outlined, onTap: () => Get.to(() => const PromosPassengerPage())), MenuListItem( title: 'Contact Us'.tr, icon: Icons.contact_support_outlined, onTap: () => Get.to(() => ContactUsPage())), MenuListItem( title: 'Complaint'.tr, icon: Icons.flag_outlined, onTap: () => Get.to(() => ComplaintPage())), MenuListItem( title: 'Driver'.tr, icon: Ionicons.car_sport_outline, onTap: () => _launchDriverAppUrl()), MenuListItem( title: 'Share App'.tr, icon: Icons.share_outlined, onTap: () => Get.to(() => ShareAppPage())), MenuListItem( title: 'Privacy Policy'.tr, icon: Icons.shield_outlined, onTap: () => launchUrl(Uri.parse( '${AppLink.server}/privacy_policy.php')), ), ], ), ), const Divider( color: Colors.white24, indent: 16, endIndent: 16, height: 1), Padding( padding: const EdgeInsets.all(8.0), child: MenuListItem( title: 'Logout'.tr, icon: Icons.logout_rounded, onTap: () { Get.defaultDialog( title: "Logout".tr, middleText: "Are you sure you want to logout?".tr, textConfirm: "Logout".tr, textCancel: "Cancel".tr, onConfirm: () { // controller.logout(); Get.back(); }, ); }, color: Colors.red.shade300, ), ), ], ), ), ), ), ), ); } // --- ويدجت رأس القائمة --- Widget _buildMenuHeader() { return Padding( padding: const EdgeInsets.fromLTRB(20, 30, 20, 16), child: Row( children: [ const CircleAvatar( radius: 30, backgroundColor: AppColor.primaryColor, child: Icon(Icons.person, color: AppColor.writeColor, size: 35), ), const SizedBox(width: 16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( box.read(BoxName.name) ?? 'Guest', style: AppStyle.headTitle.copyWith(fontSize: 20), overflow: TextOverflow.ellipsis, ), const SizedBox(height: 4), Text( "Intaleq Passenger".tr, style: AppStyle.title.copyWith( color: AppColor.writeColor.withOpacity(0.7), fontSize: 14), ), ], ), ), ], ), ); } // --- ويدجت الأزرار السريعة --- Widget _buildQuickActionButtons() { return Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ _buildSmallActionButton( icon: Icons.person_outline_rounded, label: 'Profile'.tr, onTap: () => Get.to(() => PassengerProfilePage())), _buildSmallActionButton( icon: Icons.notifications_none_rounded, label: 'Alerts'.tr, onTap: () => Get.to(() => const NotificationPage())), _buildSmallActionButton( icon: Icons.settings_outlined, label: 'Settings'.tr, onTap: () => Get.to(() => const SettingPage())), ], ), ); } Widget _buildSmallActionButton( {required IconData icon, required String label, required VoidCallback onTap}) { return InkWell( onTap: onTap, borderRadius: BorderRadius.circular(12), child: Padding( padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 12.0), child: Column( mainAxisSize: MainAxisSize.min, children: [ Icon(icon, color: AppColor.writeColor.withOpacity(0.9), size: 24), const SizedBox(height: 6), Text(label, style: AppStyle.subtitle.copyWith( fontSize: 12, color: AppColor.writeColor.withOpacity(0.9))), ], ), ), ); } void _launchDriverAppUrl() async { final String driverAppUrl; if (defaultTargetPlatform == TargetPlatform.android) { driverAppUrl = 'https://play.google.com/store/apps/details?id=com.intaleq_driver'; } else if (defaultTargetPlatform == TargetPlatform.iOS) { driverAppUrl = 'https://apps.apple.com/st/app/intaleq-driver/id6482995159'; } else { return; } try { final Uri url = Uri.parse(driverAppUrl); if (await canLaunchUrl(url)) { await launchUrl(url); } else { Get.snackbar('Error', 'Could not launch driver app store.'); } } catch (e) { Get.snackbar('Error', 'Could not open the link.'); } } } // --- ويدجت عناصر القائمة بتصميم محسن --- class MenuListItem extends StatelessWidget { const MenuListItem({ super.key, required this.title, required this.onTap, required this.icon, this.color, }); final String title; final IconData icon; final VoidCallback onTap; final Color? color; @override Widget build(BuildContext context) { return ListTile( onTap: onTap, leading: Icon( icon, size: 26, color: color ?? AppColor.writeColor.withOpacity(0.8), ), title: Text( title.tr, style: AppStyle.title.copyWith( fontSize: 16, color: color ?? AppColor.writeColor, ), ), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), splashColor: AppColor.primaryColor.withOpacity(0.2), ); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/main_bottom_Menu_map.dart ================================================== import 'package:Intaleq/views/widgets/my_textField.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/home/map_passenger_controller.dart'; import 'package:Intaleq/main.dart'; import 'package:Intaleq/views/home/map_widget.dart/form_search_places_destenation.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import '../../../constant/colors.dart'; import '../../../constant/table_names.dart'; import '../../../controller/functions/toast.dart'; import '../../../controller/functions/tts.dart'; import '../../widgets/error_snakbar.dart'; import '../../widgets/mydialoug.dart'; import 'form_search_start.dart'; class MainBottomMenuMap extends StatelessWidget { const MainBottomMenuMap({super.key}); @override Widget build(BuildContext context) { Get.put(MapPassengerController()); return GetBuilder( builder: (controller) => Positioned( bottom: Get.height * .04, // Increased bottom padding left: 16, right: 16, child: GestureDetector( onTap: controller .changeMainBottomMenuMap, // Make the whole area tappable child: AnimatedContainer( duration: const Duration( milliseconds: 300), // Reduced duration for smoother animation curve: Curves.easeInOut, // Added animation curve height: controller.mainBottomMenuMapHeight, decoration: BoxDecoration( color: AppColor.secondaryColor, // Use a solid background color borderRadius: BorderRadius.circular(16), // More rounded corners boxShadow: [ BoxShadow( color: Colors.black12, blurRadius: 10, offset: Offset(0, 5), ), ], ), child: SingleChildScrollView( physics: const BouncingScrollPhysics(), // Add bouncing effect child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment .stretch, // Stretch children to full width children: [ Padding( padding: const EdgeInsets.all(16.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( controller.isMainBottomMenuMap ? 'Where are you going?'.tr : 'Quick Actions'.tr, style: AppStyle.title .copyWith(fontWeight: FontWeight.bold), ), IconButton( onPressed: controller.changeMainBottomMenuMap, icon: Icon( controller.isMainBottomMenuMap ? Icons.keyboard_arrow_down_rounded : Icons.keyboard_arrow_up_rounded, size: 28, color: AppColor.primaryColor, ), ), ], ), ), if (controller.isMainBottomMenuMap) ...[ Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0), child: InkWell( onTap: () => controller.changeMainBottomMenuMap(), child: Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: AppColor.primaryColor .withOpacity(0.05), // Subtle background borderRadius: BorderRadius.circular(12), ), child: DefaultTextStyle( style: AppStyle.subtitle .copyWith(color: AppColor.writeColor), child: Center( child: controller.isPickerShown ? clickPointPosition(controller, context) : whereWidgetSmall(controller), ), ), ), ), ), const SizedBox(height: 8), if (controller.recentPlaces.isNotEmpty) Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Text('Recent Places'.tr, style: AppStyle.subtitle), SizedBox( height: 30, child: Center( child: ListView.separated( scrollDirection: Axis.horizontal, itemCount: controller.recentPlaces.length, separatorBuilder: (context, index) => const SizedBox(width: 8), itemBuilder: (context, index) => _buildRecentPlaceButton( controller, context, index), ), ), ), ], ), ), ] else ...[ if (!controller.isAnotherOreder) Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0), child: Text( '${'From:'.tr} ${controller.currentLocationString}' .tr, style: AppStyle.subtitle, ), ), const SizedBox(height: 8), Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0), child: !controller.isAnotherOreder ? const SizedBox() : formSearchPlacesStart(), ), Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0), child: formSearchPlacesDestenation(), ), const SizedBox(height: 16), Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0), child: GestureDetector( onTap: () { Get.dialog( AlertDialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16)), title: Text('WhatsApp Location Extractor'.tr), content: Form( key: controller.sosFormKey, child: Column( mainAxisSize: MainAxisSize.min, children: [ MyTextForm( controller: controller.whatsAppLocationText, label: 'Location Link'.tr, hint: 'Paste location link here'.tr, type: TextInputType.url, ), const SizedBox(height: 16), MyElevatedButton( title: 'Go to this location'.tr, onPressed: () async { controller.goToWhatappLocation(); }, ), ], ), ), ), ); }, child: Container( decoration: BoxDecoration( color: Colors.blue.shade100, // Lighter background borderRadius: BorderRadius.circular(12), border: Border.all( color: Colors.blue.shade400), // Add a border ), padding: const EdgeInsets.all(16), child: Row( children: [ Icon(Icons.link, color: Colors.blue.shade700), const SizedBox(width: 8), Expanded( child: Text( 'Paste WhatsApp location link'.tr, style: TextStyle(color: Colors.blue.shade700), ), ), const Icon(Icons.arrow_forward_ios_rounded, size: 16, color: Colors.blueGrey), ], ), ), ), ), const SizedBox(height: 16), Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0), child: OutlinedButton( onPressed: () { showCupertinoModalPopup( context: context, builder: (BuildContext context) => CupertinoActionSheet( title: Text('Select Order Type'.tr), message: Text('Choose who this order is for'.tr), actions: [ CupertinoActionSheetAction( child: Text('I want to order for myself'.tr), onPressed: () { controller.changeisAnotherOreder(false); Navigator.pop(context); }, ), CupertinoActionSheetAction( child: Text( 'I want to order for someone else'.tr), onPressed: () { controller.changeisAnotherOreder(true); Navigator.pop(context); }, ), ], cancelButton: CupertinoActionSheetAction( isDefaultAction: true, onPressed: () { Navigator.pop(context); }, child: Text('Cancel'.tr), ), ), ); }, child: Text( !controller.isAnotherOreder ? 'Order for someone else'.tr : 'Order for myself'.tr, ), ), ), ], const SizedBox(height: 8), ], ), ), ), ), ), ); } Widget _buildRecentPlaceButton( MapPassengerController controller, BuildContext context, int index) { final textToSpeechController = Get.find(); return InkWell( onTap: () { MyDialog().getDialog('Are you want to go this site'.tr, ' ', () async { Get.back(); await controller.getLocation(); await controller.getDirectionMap( '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}', '${controller.recentPlaces[index]['latitude']},${controller.recentPlaces[index]['longitude']}', ); controller.showBottomSheet1(); }); }, onLongPress: () { MyDialog().getDialog( "Are you sure to delete this location?".tr, '', () { sql.deleteData(TableName.recentLocations, controller.recentPlaces[index]['id']); controller.getFavioratePlaces(); controller.update(); Get.back(); mySnackbarSuccess('deleted'.tr); }, ); }, child: Container( decoration: BoxDecoration( color: AppColor.primaryColor.withOpacity(0.05), // Subtle background borderRadius: BorderRadius.circular(12), border: Border( bottom: BorderSide( color: AppColor.primaryColor.withOpacity(0.1), width: 1), ), ), child: Text(controller.recentPlaces[index]['name'], style: const TextStyle(fontSize: 14)), ), ); } Widget clickPointPosition( MapPassengerController controller, BuildContext context) { return TextButton( onPressed: () async { controller.clearPolyline(); controller.data = []; if (controller.passengerStartLocationFromMap == true) { controller.newMyLocation = controller.newStartPointLocation; controller.changeMainBottomMenuMap(); await controller.getDirectionMap( '${controller.newStartPointLocation.latitude},${controller.newStartPointLocation.longitude}', '${controller.myDestination.latitude},${controller.myDestination.longitude}', ); controller.currentLocationToFormPlaces = false; controller.placesDestination = []; controller.clearPlacesStart(); controller.clearPlacesDestination(); controller.passengerStartLocationFromMap = false; controller.isPickerShown = false; controller.showBottomSheet1(); } else if (controller.startLocationFromMap == true) { controller.newMyLocation = controller.newStartPointLocation; controller.hintTextStartPoint = '${controller.newStartPointLocation.latitude.toStringAsFixed(4)} , ${controller.newStartPointLocation.longitude.toStringAsFixed(4)}'; controller.startLocationFromMap = false; controller.isPickerShown = false; } else if (controller.workLocationFromMap == true) { controller.hintTextDestinationPoint = 'To Work'.tr; box.write(BoxName.addWork, '${controller.newMyLocation.latitude.toStringAsFixed(4)} , ${controller.newMyLocation.longitude.toStringAsFixed(4)}'); controller.newMyLocation = controller.newMyLocation; controller.isPickerShown = false; controller.workLocationFromMap = false; Get.snackbar('Work Saved'.tr, '', backgroundColor: AppColor.greenColor); } else if (controller.homeLocationFromMap == true) { controller.hintTextDestinationPoint = 'To Home'.tr; box.write(BoxName.addHome, '${controller.newMyLocation.latitude.toStringAsFixed(4)} , ${controller.newMyLocation.longitude.toStringAsFixed(4)}'); controller.newMyLocation = controller.newMyLocation; controller.isPickerShown = false; controller.homeLocationFromMap = false; controller.update(); Get.snackbar('Home Saved'.tr, '', backgroundColor: AppColor.greenColor); } else { controller.hintTextDestinationPoint = '${controller.newMyLocation.latitude.toStringAsFixed(4)} , ${controller.newMyLocation.longitude.toStringAsFixed(4)}'; controller.myDestination = controller.newMyLocation; controller.isPickerShown = false; controller.changeMainBottomMenuMap(); controller.passengerStartLocationFromMap = true; controller.isPickerShown = true; if (controller.isAnotherOreder == false) { await controller.mapController?.animateCamera( CameraUpdate.newLatLng(LatLng( controller.passengerLocation.latitude, controller.passengerLocation.longitude))); Get.defaultDialog( title: 'Destination selected'.tr, titleStyle: AppStyle.title, content: Text( 'Now select start pick'.tr, style: AppStyle.title, ), confirm: MyElevatedButton( title: 'OK'.tr, onPressed: () { Get.back(); })); } if (controller.isWhatsAppOrder == true) { Get.defaultDialog( title: 'Destination selected'.tr, titleStyle: AppStyle.title, content: Text( 'Now select start pick'.tr, style: AppStyle.title, ), confirm: MyElevatedButton( title: 'OK'.tr, onPressed: () { Get.back(); })); } } controller.placesDestination = []; controller.placeDestinationController.clear(); // controller.showBottomSheet1(); controller.changeMainBottomMenuMap(); }, child: Padding( padding: const EdgeInsets.symmetric(vertical: 8.0), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( controller.passengerStartLocationFromMap ? Icons.location_on : Icons.location_searching, size: 20, color: AppColor.primaryColor, ), const SizedBox(width: 8), Text( controller.passengerStartLocationFromMap ? 'Confirm Pick-up Location'.tr : "Set Location on Map".tr, style: AppStyle.subtitle.copyWith( fontWeight: FontWeight.bold, color: AppColor.primaryColor, ), ), ], ), ), ); } Widget whereWidgetSmall(MapPassengerController controller) { return Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.location_searching, color: AppColor.primaryColor), const SizedBox(width: 8), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '${'Where to'.tr} ${(box.read(BoxName.name).toString().split(' ')[0])} ', style: AppStyle.subtitle), // if (controller.noCarString) // Text('Nearest Car: ~'.tr, // style: TextStyle(color: Colors.grey.shade600)) // else // Text( // controller.nearestCar != null // ? 'Nearest Car: ${controller.nearestDistance.toStringAsFixed(0)} m' // : 'No cars nearby'.tr, // style: TextStyle(color: Colors.grey.shade600), // ), ], ), ], ); } } class FaviouratePlacesDialog extends StatelessWidget { const FaviouratePlacesDialog({super.key}); @override Widget build(BuildContext context) { Get.put(MapPassengerController()); return GetBuilder( builder: (controller) => Center( child: InkWell( onTap: () async { List favoritePlaces = await sql.getAllData(TableName.placesFavorite); Get.defaultDialog( title: 'Favorite Places'.tr, content: SizedBox( width: Get.width * .8, height: 300, child: favoritePlaces.isEmpty ? Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon( Icons.star_border_rounded, size: 99, color: AppColor.accentColor, ), Text( 'No favorite places yet!'.tr, style: AppStyle.title, ), ], ), ) : ListView.separated( itemCount: favoritePlaces.length, separatorBuilder: (context, index) => const Divider(), itemBuilder: (BuildContext context, int index) { return ListTile( leading: const Icon(Icons.star, color: Colors.amber), title: Text(favoritePlaces[index]['name'], style: AppStyle.title), trailing: IconButton( icon: const Icon(Icons.delete_outline, color: Colors.redAccent), onPressed: () async { await sql.deleteData(TableName.placesFavorite, favoritePlaces[index]['id']); Get.back(); Toast.show( context, '${'Deleted'.tr} ${favoritePlaces[index]['name']} from your favorites', AppColor.redColor); }, ), onTap: () async { Get.back(); await controller.getLocation(); await controller.getDirectionMap( '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}', '${favoritePlaces[index]['latitude']},${favoritePlaces[index]['longitude']}', ); controller.showBottomSheet1(); }, ); }, ), ), confirm: MyElevatedButton( title: 'Back'.tr, onPressed: () => Get.back()), ); }, child: Row( mainAxisSize: MainAxisSize.min, children: [ const Icon(Icons.star_border_rounded, color: AppColor.accentColor), const SizedBox(width: 8), Text('Favorite Places'.tr, style: AppStyle.title), ], ), ), ), ); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/hexegone_clipper.dart ================================================== import 'dart:math'; import 'package:flutter/material.dart'; class HexagonClipper extends CustomClipper { @override Path getClip(Size size) { final path = Path(); final height = size.height; final width = size.width; final centerX = width / 2; final centerY = height / 2; final radius = width / 2; const angle = 2 * pi / 10; // Angle between each side of the hexagon // Start at the top right vertex of the hexagon final startX = centerX + radius * cos(0); final startY = centerY + radius * sin(0); path.moveTo(startX, startY); // Draw the remaining sides of the hexagon for (int i = 1; i < 10; i++) { final x = centerX + radius * cos(angle * i); final y = centerY + radius * sin(angle * i); path.lineTo(x, y); } path.close(); return path; } @override bool shouldReclip(HexagonClipper oldClipper) => false; } class ArrowClipper extends CustomClipper { @override Path getClip(Size size) { final path = Path(); path.moveTo(0, size.height / 2); path.lineTo(size.width / 2, 0); path.lineTo(size.width, size.height / 2); path.lineTo(size.width / 2, size.height); path.close(); return path; } @override bool shouldReclip(ArrowClipper oldClipper) => false; } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/select_driver_mishwari.dart ================================================== import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/home/map_passenger_controller.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../../constant/links.dart'; import '../../../print.dart'; class CupertinoDriverListWidget extends StatelessWidget { MapPassengerController mapPassengerController = Get.put(MapPassengerController()); @override Widget build(BuildContext context) { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( middle: Text('Driver List'.tr), // Ensure text is properly localized ), child: SafeArea( child: mapPassengerController.driversForMishwari.isEmpty ? Center( child: Text( 'No drivers available at the moment. Please try again later.' .tr, style: const TextStyle( fontSize: 18, // Adjust the size as needed fontWeight: FontWeight.w600, color: CupertinoColors.inactiveGray, // Customize color ), textAlign: TextAlign.center, // Center-align the text ), ) : ListView.separated( itemCount: mapPassengerController.driversForMishwari.length, separatorBuilder: (context, index) => const Divider(height: 1), itemBuilder: (context, index) { var driver = mapPassengerController.driversForMishwari[index]; return Container( decoration: AppStyle.boxDecoration1, child: CupertinoListTile( padding: const EdgeInsets.symmetric( vertical: 4, horizontal: 8), leading: CircleAvatar( radius: 25, backgroundImage: NetworkImage( '${AppLink.IntaleqSyriaServer}/portrate_captain_image/${driver['id']}.jpg', ), child: Builder( builder: (context) { return Image.network( '${AppLink.IntaleqSyriaServer}/portrate_captain_image/${driver['id']}.jpg', fit: BoxFit.cover, loadingBuilder: (BuildContext context, Widget child, ImageChunkEvent? loadingProgress) { if (loadingProgress == null) { return child; // Image is loaded } else { return Center( child: CircularProgressIndicator( value: loadingProgress .expectedTotalBytes != null ? loadingProgress .cumulativeBytesLoaded / (loadingProgress .expectedTotalBytes ?? 1) : null, ), ); } }, errorBuilder: (BuildContext context, Object error, StackTrace? stackTrace) { return const Icon( Icons .person, // Icon to show when image fails to load size: 25, // Adjust the size as needed color: AppColor .blueColor, // Color for the error icon ); }, ); }, ), ), title: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( '${driver['NAME'].toString().split(' ')[0]} ${driver['NAME'].toString().split(' ')[1]}', style: const TextStyle(fontWeight: FontWeight.bold), ), Text('${'Age'.tr}: ${driver['age'].toString()}'), Row( children: [ const Icon(CupertinoIcons.star_fill, size: 16, color: CupertinoColors.systemYellow), const SizedBox(width: 4), Text(driver['rating']?.toStringAsFixed(1) ?? 'N/A'.tr), const SizedBox(width: 8), Text('${'Rides'.tr}: ${driver['ride_count']}'), ], ), ], ), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( '${'Car'.tr}: ${driver['make']} ${driver['model']} (${driver['year']})'), Text('${'Plate'.tr}: ${driver['car_plate']}'), ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SizedBox( // width: Get.width * .3, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('${'Color'.tr}: ${driver['color']}'), const SizedBox(width: 8), Container( width: 20, height: 20, decoration: BoxDecoration( color: driver['color_hex'] .toString() == 'null' ? Colors.amber : hexToColor(driver['color_hex'] .toString()), borderRadius: BorderRadius.circular(4), border: Border.all(), ), ), ], ), ), ], ), ], ), onTap: () { Log.print(' driver["id"]: ${driver['driver_id']}'); Get.find().driverIdVip = driver['driver_id']; // Handle driver selection Get.defaultDialog( title: '${'Selected driver'.tr}: ${driver['NAME']}', content: Column( children: [ Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( '${'Car'.tr}: ${driver['make']} ${driver['model']} (${driver['year']})'), Text( '${'Plate'.tr}: ${driver['car_plate']}'), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( '${'Color'.tr}: ${driver['color']}'), const SizedBox(width: 8), Container( width: 20, height: 20, decoration: BoxDecoration( color: driver['color_hex'] .toString() == 'null' ? Colors.amber : hexToColor( driver['color_hex'] .toString()), borderRadius: BorderRadius.circular(4), border: Border.all(), ), ), ], ), ], ), ], ), confirm: MyElevatedButton( title: 'OK'.tr, onPressed: () { Get.back(); showDateTimePickerDialog(driver); })); print('${'Selected driver'.tr}: ${driver['NAME']}'); // Get.back(); // Close the dialog }, ), ); }, )), ); } Color hexToColor(String hexColor) { hexColor = hexColor.replaceAll("#", ""); String colorString = "ff$hexColor"; return Color(int.parse(colorString, radix: 16)); } void showDriverSelectionDialog(Map driver) { Get.defaultDialog( title: '${'Selected driver'.tr}: ${driver['name']}', content: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( '${'Car'.tr}: ${driver['make']} ${driver['model']} (${driver['year']})'), Text('${'Plate'.tr}: ${driver['car_plate']}'), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text('${'Color'.tr}: ${driver['color']}'), const SizedBox(width: 8), Container( width: 20, height: 20, decoration: BoxDecoration( color: driver['color_hex'].toString() == 'null' ? Colors.amber : hexToColor(driver['color_hex'].toString()), borderRadius: BorderRadius.circular(4), border: Border.all(), ), ), ], ), ], ), confirm: MyElevatedButton( title: 'OK'.tr, onPressed: () { Get.back(); showDateTimePickerDialog(driver); }, ), ); } void showDateTimePickerDialog(Map driver) { DateTime selectedDateTime = DateTime.now(); Get.defaultDialog( barrierDismissible: false, title: "Select date and time of trip".tr, content: SizedBox( // height: 400, // Adjust height as needed width: double.maxFinite, child: Column( children: [ DateTimePickerWidget(), ], ), ), confirm: MyElevatedButton( title: 'Confirm Trip'.tr, onPressed: () async { DateTime selectedDateTime = mapPassengerController.selectedDateTime.value; // Save trip data and set up notifications Get.back(); await mapPassengerController.saveTripData(driver, selectedDateTime); }, ), cancel: MyElevatedButton( kolor: AppColor.redColor, title: 'Cancel'.tr, onPressed: () { Get.back(); }, ), ); } } class DateTimePickerWidget extends StatelessWidget { final MapPassengerController controller = Get.put(MapPassengerController()); @override Widget build(BuildContext context) { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( transitionBetweenRoutes: false, automaticallyImplyLeading: false, middle: Text('Date and Time Picker'.tr), ), child: SafeArea( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Obx(() => Text( '${'Selected Date and Time'.tr}: ${controller.selectedDateTime.value}', style: const TextStyle(fontSize: 18), textAlign: TextAlign.center, )), const SizedBox(height: 20), SizedBox( height: 200, child: CupertinoDatePicker( mode: CupertinoDatePickerMode.dateAndTime, initialDateTime: controller.selectedDateTime.value, onDateTimeChanged: (newDateTime) { controller.updateDateTime(newDateTime); }, ), ), ], ), ), ); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/apply_order_widget.dart ================================================== import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/home/map_passenger_controller.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; import '../../../constant/box_name.dart'; import '../../../controller/firebase/notification_service.dart'; import '../../../controller/functions/launch.dart'; import '../../../main.dart'; class ApplyOrderWidget extends StatelessWidget { const ApplyOrderWidget({super.key}); @override Widget build(BuildContext context) { Color parseColor(String colorHex) { if (colorHex.isEmpty) return Colors.grey; try { String processedHex = colorHex.replaceFirst('#', '').trim(); if (processedHex.length == 6) processedHex = 'FF$processedHex'; return Color(int.parse('0x$processedHex')); } catch (e) { return Colors.grey; } } return Obx(() { final controller = Get.find(); final bool isVisible = controller.currentRideState.value == RideState.driverApplied || controller.currentRideState.value == RideState.driverArrived; return AnimatedPositioned( duration: const Duration(milliseconds: 500), curve: Curves.elasticOut, // تغيير: جعلنا الإخفاء للأسفل أقل حدة ليكون التحريك أسرع bottom: isVisible ? 0 : -400, left: 0, right: 0, child: Container( decoration: BoxDecoration( color: Theme.of(context).cardColor, borderRadius: const BorderRadius.vertical(top: Radius.circular(25)), boxShadow: [ BoxShadow( blurRadius: 20, spreadRadius: 1, color: Colors.black.withOpacity(0.1), offset: const Offset(0, -3), ) ], ), // تغيير: تقليل الحواف الخارجية بشكل كبير padding: const EdgeInsets.fromLTRB(16, 8, 16, 16), child: GetBuilder( builder: (c) { return Column( mainAxisSize: MainAxisSize.min, // مهم جداً: يأخذ أقل مساحة ممكنة children: [ // مقبض صغير Container( width: 40, height: 4, decoration: BoxDecoration( color: Colors.grey.withOpacity(0.3), borderRadius: BorderRadius.circular(10), ), ), const SizedBox(height: 10), // تقليل المسافة // 1. [تغيير جوهري] دمج السعر مع الحالة في صف واحد لتوفير المساحة _buildCompactHeaderRow(context, c), const SizedBox(height: 10), // مسافة مضغوطة // 2. كرت المعلومات المضغوط _buildCompactInfoCard(context, c, parseColor), const SizedBox(height: 10), // مسافة مضغوطة // 3. أزرار الاتصال (Slim) _buildCompactButtonsRow(context, c), const SizedBox(height: 10), // مسافة مضغوطة // 4. شريط الوقت c.currentRideState.value == RideState.driverArrived ? const DriverArrivePassengerAndWaitMinute() : const TimeDriverToPassenger(), ], ); }, ), ), ); }); } // --------------------------------------------------------------------------- // [NEW] 1. صف الرأس المضغوط (يحتوي الحالة + الإحصائيات + السعر) // --------------------------------------------------------------------------- Widget _buildCompactHeaderRow( BuildContext context, MapPassengerController controller) { // تنسيق السعر final formatter = NumberFormat("#,###"); String formattedPrice = formatter.format(controller.totalPassenger); // حساب الدقائق int minutes = (controller.timeToPassengerFromDriverAfterApplied / 60).ceil(); if (minutes < 1) minutes = 1; // تنسيق المسافة String distanceDisplay = ""; try { double distMeters = double.parse(controller.distanceByPassenger); if (distMeters >= 1000) { distanceDisplay = "${(distMeters / 1000).toStringAsFixed(1)} km"; } else { distanceDisplay = "${distMeters.toInt()} m"; } } catch (e) { distanceDisplay = controller.distanceByPassenger; } return Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ // القسم الأيسر: الحالة + Chips Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Driver is on the way'.tr, style: AppStyle.subtitle.copyWith( color: Colors.grey[600], fontWeight: FontWeight.w600, fontSize: 13, // تصغير الخط ), ), const SizedBox(height: 6), Row( children: [ _buildMiniStatChip( icon: Icons.access_time_filled_rounded, text: "$minutes ${'min'.tr}", color: AppColor.primaryColor, bgColor: AppColor.primaryColor.withOpacity(0.1), ), const SizedBox(width: 8), _buildMiniStatChip( icon: Icons.near_me_rounded, text: distanceDisplay, color: Colors.orange[800]!, bgColor: Colors.orange.withOpacity(0.1), ), ], ), ], ), ), // القسم الأيمن: السعر (كبير وواضح في الزاوية) Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( formattedPrice, style: AppStyle.title.copyWith( fontSize: 24, // تصغير من 32 إلى 24 fontWeight: FontWeight.w900, color: AppColor.primaryColor, height: 1.0, ), ), Text( 'SYP'.tr, style: TextStyle( fontSize: 12, fontWeight: FontWeight.bold, color: Colors.grey[600], ), ), ], ), ], ); } Widget _buildMiniStatChip({ required IconData icon, required String text, required Color color, required Color bgColor, }) { return Container( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), decoration: BoxDecoration( color: bgColor, borderRadius: BorderRadius.circular(12), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon(icon, size: 12, color: color), // تصغير الأيقونة const SizedBox(width: 4), Text( text, style: TextStyle( color: color, fontWeight: FontWeight.bold, fontSize: 12, // تصغير الخط ), ), ], ), ); } // --------------------------------------------------------------------------- // [MODIFIED] 2. كرت المعلومات المضغوط جداً // --------------------------------------------------------------------------- Widget _buildCompactInfoCard(BuildContext context, MapPassengerController controller, Color Function(String) parseColor) { return Container( // تقليل الحواف الداخلية للكرت padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: Theme.of(context).scaffoldBackgroundColor, borderRadius: BorderRadius.circular(16), border: Border.all(color: Colors.grey.withOpacity(0.1)), ), child: Column( children: [ // الصف العلوي: سائق + سيارة Row( children: [ // صورة السائق (أصغر) Container( decoration: BoxDecoration( shape: BoxShape.circle, border: Border.all( color: AppColor.primaryColor.withOpacity(0.2), width: 2), ), child: CircleAvatar( radius: 22, // تصغير من 28 إلى 22 backgroundColor: Colors.grey[200], backgroundImage: NetworkImage( '${AppLink.server}/portrate_captain_image/${controller.driverId}.jpg'), onBackgroundImageError: (_, __) => const Icon(Icons.person, color: Colors.grey, size: 20), ), ), const SizedBox(width: 10), // معلومات نصية Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( controller.driverName, style: const TextStyle( fontSize: 15, // تصغير الخط fontWeight: FontWeight.bold, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), const SizedBox(height: 2), Row( children: [ const Icon(Icons.star_rounded, color: Colors.amber, size: 14), Text( " ${controller.driverRate} • ${controller.model}", style: TextStyle( fontSize: 12, color: Colors.grey[700], fontWeight: FontWeight.w500, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), ], ), ], ), ), // أيقونة السيارة (أصغر) _buildMicroCarIcon(controller, parseColor), ], ), const SizedBox(height: 8), // لوحة السيارة (شريط نحيف جداً) _buildSlimLicensePlate(controller.licensePlate), ], ), ); } Widget _buildMicroCarIcon( MapPassengerController controller, Color Function(String) parseColor) { Color carColor = parseColor(controller.colorHex); return Container( height: 40, // تصغير من 50 width: 40, decoration: BoxDecoration( color: carColor.withOpacity(0.1), borderRadius: BorderRadius.circular(8), ), padding: const EdgeInsets.all(4), child: ColorFiltered( colorFilter: ColorFilter.mode(carColor, BlendMode.srcIn), child: Image.asset( box.read(BoxName.carType) == 'Scooter' || box.read(BoxName.carType) == 'Pink Bike' ? 'assets/images/moto.png' : 'assets/images/car3.png', fit: BoxFit.contain, ), ), ); } Widget _buildSlimLicensePlate(String plateNumber) { return Container( width: double.infinity, padding: const EdgeInsets.symmetric(vertical: 2, horizontal: 8), decoration: BoxDecoration( color: const Color(0xFFF5F5F5), borderRadius: BorderRadius.circular(6), border: Border.all(color: Colors.grey.withOpacity(0.3)), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( plateNumber, style: const TextStyle( fontFamily: 'RobotoMono', fontSize: 18, // تصغير الرقم fontWeight: FontWeight.w900, color: Colors.black87, letterSpacing: 1.5, ), ), const Text("SYR", style: TextStyle( fontSize: 10, fontWeight: FontWeight.bold, color: Colors.black54)), ], ), ); } // --------------------------------------------------------------------------- // [MODIFIED] 3. أزرار الاتصال (Slim Buttons) // --------------------------------------------------------------------------- Widget _buildCompactButtonsRow( BuildContext context, MapPassengerController controller) { return SizedBox( height: 40, // تحديد ارتفاع ثابت وصغير للأزرار child: Row( children: [ Expanded( child: _buildSlimButton( label: 'Message'.tr, // اختصار الكلمة icon: Icons.chat_bubble_outline_rounded, color: AppColor.blueColor, bgColor: AppColor.blueColor.withOpacity(0.08), onTap: () => _showContactOptionsDialog(context, controller), ), ), const SizedBox(width: 10), // تقليل المسافة Expanded( child: _buildSlimButton( label: 'Call'.tr, // اختصار الكلمة icon: Icons.phone_rounded, color: Colors.white, bgColor: AppColor.greenColor, onTap: () { HapticFeedback.heavyImpact(); makePhoneCall(controller.driverPhone); }, isPrimary: true, ), ), ], ), ); } Widget _buildSlimButton({ required String label, required IconData icon, required Color color, required Color bgColor, required VoidCallback onTap, bool isPrimary = false, }) { return ElevatedButton( onPressed: onTap, style: ElevatedButton.styleFrom( backgroundColor: bgColor, foregroundColor: color, elevation: isPrimary ? 2 : 0, padding: EdgeInsets.zero, // إزالة الحواشي الداخلية shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(icon, size: 18, color: color), // تصغير الأيقونة const SizedBox(width: 6), Text( label, style: TextStyle( fontWeight: FontWeight.bold, fontSize: 14, // تصغير الخط color: color, ), ), ], ), ); } // --- النوافذ المنبثقة للرسائل (نفس الكود السابق مع تحسين بسيط) --- void _showContactOptionsDialog( BuildContext context, MapPassengerController controller) { Get.bottomSheet( Container( padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: Theme.of(context).cardColor, borderRadius: const BorderRadius.vertical(top: Radius.circular(20)), ), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('Quick Message'.tr, style: AppStyle.title.copyWith(fontSize: 16)), const SizedBox(height: 15), ..._buildPredefinedMessages(controller), const Divider(height: 20), _buildCustomMessageInput(controller, context), SizedBox(height: MediaQuery.of(context).viewInsets.bottom), ], ), ), isScrollControlled: true, ); } List _buildPredefinedMessages(MapPassengerController controller) { const messages = [ 'Hello, I\'m at the agreed-upon location', 'I\'m waiting for you', "How much longer will you be?", ]; return messages .map((message) => Padding( padding: const EdgeInsets.only(bottom: 8.0), child: InkWell( onTap: () { _sendMessage(controller, message.tr); Get.back(); }, child: Container( padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 12), decoration: BoxDecoration( color: Colors.grey.withOpacity(0.08), borderRadius: BorderRadius.circular(8), border: Border.all(color: Colors.grey.withOpacity(0.1)), ), child: Row( children: [ Icon(Icons.chat_bubble_outline, size: 16, color: AppColor.primaryColor), const SizedBox(width: 10), Expanded( child: Text(message.tr, style: AppStyle.subtitle.copyWith(fontSize: 13))), ], ), ), ), )) .toList(); } Widget _buildCustomMessageInput( MapPassengerController controller, BuildContext context) { return Row( children: [ Expanded( child: Container( height: 40, padding: const EdgeInsets.symmetric(horizontal: 12), decoration: BoxDecoration( color: Colors.grey.withOpacity(0.08), borderRadius: BorderRadius.circular(20), ), child: Form( key: controller.messagesFormKey, child: TextFormField( controller: controller.messageToDriver, decoration: InputDecoration( hintText: 'Type your message...'.tr, hintStyle: TextStyle(color: Colors.grey[500], fontSize: 13), border: InputBorder.none, contentPadding: const EdgeInsets.only(bottom: 10), ), ), ), ), ), const SizedBox(width: 8), InkWell( onTap: () { if (controller.messagesFormKey.currentState!.validate()) { _sendMessage(controller, controller.messageToDriver.text); controller.messageToDriver.clear(); Get.back(); } }, child: CircleAvatar( backgroundColor: AppColor.primaryColor, radius: 20, child: const Icon(Icons.send_rounded, color: Colors.white, size: 16), ), ), ], ); } void _sendMessage(MapPassengerController controller, String text) { NotificationService.sendNotification( category: 'message From passenger', target: controller.driverToken.toString(), title: 'Message From passenger'.tr, body: text, isTopic: false, tone: 'ding', driverList: [], ); } } // ----------------------------------------------------------------------------- // مؤشرات الانتظار والوقت (مضغوطة) // ----------------------------------------------------------------------------- class DriverArrivePassengerAndWaitMinute extends StatelessWidget { const DriverArrivePassengerAndWaitMinute({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return GetBuilder(builder: (controller) { return Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('Waiting...'.tr, style: const TextStyle( fontWeight: FontWeight.bold, fontSize: 12, color: Colors.orange)), Text( controller.stringRemainingTimeDriverWaitPassenger5Minute, style: const TextStyle( fontWeight: FontWeight.bold, color: Colors.orange, fontSize: 12), ), ], ), const SizedBox(height: 4), ClipRRect( borderRadius: BorderRadius.circular(2), child: LinearProgressIndicator( backgroundColor: Colors.orange.withOpacity(0.2), color: Colors.orange, minHeight: 4, value: controller.progressTimerDriverWaitPassenger5Minute.toDouble(), ), ), ], ); }); } } class TimeDriverToPassenger extends StatelessWidget { const TimeDriverToPassenger({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return GetBuilder(builder: (controller) { if (controller.timeToPassengerFromDriverAfterApplied <= 0) { return const SizedBox(); } return Column( children: [ // شريط التقدم فقط لأن الوقت والمسافة موجودان بالأعلى ClipRRect( borderRadius: BorderRadius.circular(2), child: LinearProgressIndicator( backgroundColor: AppColor.primaryColor.withOpacity(0.1), color: AppColor.primaryColor, minHeight: 4, value: controller.progressTimerToPassengerFromDriverAfterApplied .toDouble() .clamp(0.0, 1.0), ), ), ], ); }); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/ride_begin_passenger.dart ================================================== import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; // تأكد من المسارات import '../../../constant/box_name.dart'; import '../../../constant/colors.dart'; import '../../../constant/links.dart'; import '../../../constant/style.dart'; import '../../../controller/functions/audio_record1.dart'; import '../../../controller/functions/launch.dart'; import '../../../controller/functions/toast.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../../controller/profile/profile_controller.dart'; import '../../../main.dart'; import '../../../views/home/profile/complaint_page.dart'; class RideBeginPassenger extends StatelessWidget { const RideBeginPassenger({super.key}); @override Widget build(BuildContext context) { final ProfileController profileController = Get.put(ProfileController()); final AudioRecorderController audioController = Get.put(AudioRecorderController()); return Obx(() { final controller = Get.find(); // شرط الإظهار final bool isVisible = controller.currentRideState.value == RideState.inProgress && controller.isStartAppHasRide == false; return AnimatedPositioned( duration: const Duration(milliseconds: 500), curve: Curves.easeInOutCubic, // تم تقليل قيمة الإخفاء لأن الارتفاع الكلي للنافذة أصبح أصغر bottom: isVisible ? 0 : -300, left: 0, right: 0, child: Container( decoration: BoxDecoration( color: Colors.white, borderRadius: const BorderRadius.only( topLeft: Radius.circular(25), topRight: Radius.circular(25), ), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 20, spreadRadius: 2, offset: const Offset(0, -3), ), ], ), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10), child: Column( mainAxisSize: MainAxisSize.min, children: [ // 1. مقبض السحب Center( child: Container( width: 40, height: 4, decoration: BoxDecoration( color: Colors.grey[300], borderRadius: BorderRadius.circular(10), ), ), ), const SizedBox(height: 12), // 2. هيدر المعلومات (سائق + سيارة + سعر) _buildCompactHeader(controller), const SizedBox(height: 12), // خط فاصل خفيف const Divider( height: 1, thickness: 0.5, color: Color(0xFFEEEEEE)), const SizedBox(height: 12), // 3. الأزرار (إجراءات) _buildCompactActionButtons( context, controller, profileController, audioController), // إضافة هامش سفلي بسيط لرفع الأزرار عن حافة الشاشة const SizedBox(height: 5), ], ), ), ), ); }); } // --- الهيدر (بدون تغيير، ممتاز) --- Widget _buildCompactHeader(MapPassengerController controller) { return Row( children: [ // صورة السائق Container( decoration: BoxDecoration( shape: BoxShape.circle, border: Border.all( color: AppColor.primaryColor.withOpacity(0.5), width: 1.5), ), child: CircleAvatar( radius: 24, backgroundImage: NetworkImage( '${AppLink.server}/portrate_captain_image/${controller.driverId}.jpg'), onBackgroundImageError: (_, __) => const Icon(Icons.person), ), ), const SizedBox(width: 10), // الاسم ومعلومات السيارة Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Flexible( child: Text( controller.driverName, style: const TextStyle( fontWeight: FontWeight.bold, fontSize: 15, color: Colors.black87, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), ), const SizedBox(width: 4), const Icon(Icons.star, color: Colors.amber, size: 14), Text( controller.driverRate, style: const TextStyle( fontSize: 12, fontWeight: FontWeight.bold), ), ], ), const SizedBox(height: 2), Row( children: [ Flexible( child: Text( '${controller.model} • ', style: TextStyle(fontSize: 12, color: Colors.grey[700]), maxLines: 1, overflow: TextOverflow.ellipsis, ), ), Container( padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 1), decoration: BoxDecoration( color: Colors.grey[100], border: Border.all(color: Colors.black12), borderRadius: BorderRadius.circular(4), ), child: Text( controller.licensePlate, style: const TextStyle( fontFamily: 'monospace', fontSize: 11, fontWeight: FontWeight.w900, ), ), ), ], ), ], ), ), // السعر Container( padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6), decoration: BoxDecoration( color: AppColor.primaryColor.withOpacity(0.08), borderRadius: BorderRadius.circular(8), ), child: Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( NumberFormat('#,###').format(controller.totalPassenger), style: const TextStyle( fontWeight: FontWeight.w900, fontSize: 16, color: AppColor.primaryColor, ), ), Text('SYP', style: TextStyle(fontSize: 9, color: Colors.grey[600])), ], ), ), ], ); } // --- الأزرار (بدون تغيير) --- Widget _buildCompactActionButtons( BuildContext context, MapPassengerController controller, ProfileController profileController, AudioRecorderController audioController) { return SizedBox( height: 60, child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ _compactBtn( icon: Icons.sos_rounded, label: 'SOS'.tr, color: AppColor.redColor, bgColor: AppColor.redColor.withOpacity(0.1), onTap: () async { if (box.read(BoxName.sosPhonePassenger) == null) { await profileController.updatField( 'sosPhone', TextInputType.phone); box.write(BoxName.sosPhonePassenger, profileController.prfoileData['sosPhone']); } else { makePhoneCall('112'); } }, ), _compactBtn( icon: FontAwesome.whatsapp, label: 'WhatsApp'.tr, color: const Color(0xFF25D366), bgColor: const Color(0xFF25D366).withOpacity(0.1), onTap: () async { if (box.read(BoxName.sosPhonePassenger) == null) { await profileController.updatField( 'sosPhone', TextInputType.phone); } else { final phone = controller.formatSyrianPhoneNumber( box.read(BoxName.sosPhonePassenger).toString()); controller.sendWhatsapp(phone); } }, ), _compactBtn( icon: Icons.share, label: 'Share'.tr, color: AppColor.primaryColor, bgColor: AppColor.primaryColor.withOpacity(0.1), onTap: () async => await controller.shareTripWithFamily(), ), GetBuilder( init: audioController, builder: (audioCtx) { return _compactBtn( icon: audioCtx.isRecording ? Icons.stop_circle_outlined : Icons.mic_none_outlined, label: audioCtx.isRecording ? 'Stop'.tr : 'Record'.tr, color: audioCtx.isRecording ? AppColor.redColor : AppColor.primaryColor, bgColor: audioCtx.isRecording ? AppColor.redColor.withOpacity(0.1) : AppColor.primaryColor.withOpacity(0.1), onTap: () async { if (!audioCtx.isRecording) { await audioCtx.startRecording(); Toast.show(context, 'Start Record'.tr, AppColor.greenColor); } else { await audioCtx.stopRecording(); Toast.show(context, 'Record saved'.tr, AppColor.greenColor); } }, ); }, ), _compactBtn( icon: Icons.info_outline_rounded, label: 'Report'.tr, color: Colors.grey[700]!, bgColor: Colors.grey[200]!, onTap: () => Get.to(() => ComplaintPage()), ), ], ), ); } Widget _compactBtn({ required IconData icon, required String label, required Color color, required Color bgColor, required VoidCallback onTap, }) { return InkWell( onTap: onTap, borderRadius: BorderRadius.circular(10), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: bgColor, shape: BoxShape.circle, ), child: Icon(icon, size: 20, color: color), ), const SizedBox(height: 4), Text( label, style: TextStyle( fontSize: 10, color: Colors.grey[700], fontWeight: FontWeight.w500), ), ], ), ); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/cash_confirm_bottom_page.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/views/home/my_wallet/passenger_wallet.dart'; import '../../../constant/colors.dart'; import '../../../constant/info.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../../controller/payment/payment_controller.dart'; import '../../../main.dart'; import '../../widgets/elevated_btn.dart'; class CashConfirmPageShown extends StatelessWidget { CashConfirmPageShown({super.key}); final PaymentController paymentController = Get.put(PaymentController()); @override Widget build(BuildContext context) { return GetBuilder(builder: (controller) { // شرط الإظهار الرئيسي لم يتغير return Positioned( bottom: 0, left: 0, right: 0, child: AnimatedContainer( duration: const Duration(milliseconds: 300), curve: Curves.easeInOut, // التحكم في ظهور اللوحة لم يتغير transform: Matrix4.translationValues( 0, controller.isCashConfirmPageShown ? 0 : Get.height, 0), decoration: BoxDecoration( color: AppColor.secondaryColor, borderRadius: const BorderRadius.only( topLeft: Radius.circular(24), topRight: Radius.circular(24), ), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.2), blurRadius: 20, ), ], ), child: Padding( padding: const EdgeInsets.all(20.0), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ // --- 1. رأس الصفحة --- Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Payment Method'.tr, style: AppStyle.headTitle.copyWith(fontSize: 24), ), // زر الإغلاق (كان معلقاً في الكود القديم، تم تفعيله هنا) IconButton( onPressed: () => controller.changeCashConfirmPageShown(), icon: const Icon(Icons.close, color: AppColor.writeColor), ), ], ), const SizedBox(height: 16), // --- 2. بطاقات اختيار الدفع --- GetBuilder(builder: (paymentCtrl) { // نفس منطق تغيير اللون للسيارات النسائية final bool isLadyRide = box.read(BoxName.carType) == 'Lady' || box.read(BoxName.carType) == 'Pink Bike'; final Color selectedColor = isLadyRide ? Colors.pink.shade300 : AppColor.primaryColor; return Column( children: [ // بطاقة المحفظة _buildPaymentOptionCard( icon: Icons.account_balance_wallet_outlined, title: '${AppInformation.appName} Balance'.tr, subtitle: '${'Balance:'.tr} ${box.read(BoxName.passengerWalletTotal) ?? '0.0'} ${'SYP'.tr}', isSelected: paymentCtrl.isWalletChecked, selectedColor: selectedColor, onTap: () => paymentCtrl.onChangedPaymentMethodWallet(true), ), const SizedBox(height: 12), // بطاقة الكاش _buildPaymentOptionCard( icon: Icons.money_rounded, title: 'Cash'.tr, subtitle: 'Pay directly to the captain'.tr, isSelected: paymentCtrl.isCashChecked, selectedColor: selectedColor, onTap: () => paymentCtrl.onChangedPaymentMethodCash(true), ), ], ); }), const SizedBox(height: 24), // --- 3. أزرار التأكيد (بنفس منطقك القديم تماماً) --- GetBuilder(builder: (paymentCtrl) { final bool isWalletSufficient = (double.tryParse( box.read(BoxName.passengerWalletTotal) ?? '0') ?? 0) >= controller.totalPassenger; // إذا تم اختيار المحفظة والرصيد غير كافٍ if (paymentCtrl.isWalletChecked && !isWalletSufficient) { return Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ MyElevatedButton( title: 'Top up Balance to continue'.tr, onPressed: () => Get.to(() => const PassengerWallet()), kolor: AppColor.redColor, ), const SizedBox(height: 8), TextButton( onPressed: () => paymentCtrl.onChangedPaymentMethodCash(true), child: Text("Or pay with Cash instead".tr, style: TextStyle(color: AppColor.primaryColor)), ) ], ); } // في كل الحالات الأخرى (كاش، أو محفظة برصيد كافٍ) else { return MyElevatedButton( title: 'Confirm & Find a Ride'.tr, onPressed: () { // --- نفس منطقك القديم بالضبط --- controller.changeCashConfirmPageShown(); // controller.isSearchingWindow = true; controller.startSearchingForDriver(); // controller.update(); }, ); } }), ], ), ), ), ); }); } // --- ويدجت مساعدة لبناء بطاقة الدفع --- Widget _buildPaymentOptionCard({ required IconData icon, required String title, required String subtitle, required bool isSelected, required VoidCallback onTap, required Color selectedColor, }) { return GestureDetector( onTap: onTap, child: AnimatedContainer( duration: const Duration(milliseconds: 250), padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: isSelected ? selectedColor.withOpacity(0.1) : AppColor.writeColor.withOpacity(0.05), borderRadius: BorderRadius.circular(12), border: Border.all( color: isSelected ? selectedColor : AppColor.writeColor.withOpacity(0.2), width: isSelected ? 2.0 : 1.0, ), ), child: Row( children: [ Icon(icon, color: isSelected ? selectedColor : AppColor.writeColor, size: 28), const SizedBox(width: 16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(title, style: AppStyle.title.copyWith(fontWeight: FontWeight.bold)), Text(subtitle, style: AppStyle.subtitle.copyWith( color: AppColor.writeColor.withOpacity(0.7))), ], ), ), if (isSelected) Icon(Icons.check_circle_rounded, color: selectedColor, size: 24), ], ), ), ); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/vip_begin.dart ================================================== import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/views/home/profile/complaint_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/controller/profile/profile_controller.dart'; import 'package:Intaleq/main.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/functions/audio_record1.dart'; import '../../../controller/functions/launch.dart'; import '../../../controller/functions/toast.dart'; import '../../../controller/home/map_passenger_controller.dart'; class VipRideBeginPassenger extends StatelessWidget { const VipRideBeginPassenger({ super.key, }); @override Widget build(BuildContext context) { ProfileController profileController = Get.put(ProfileController()); AudioRecorderController audioController = Get.put(AudioRecorderController()); // Get.put(MapPassengerController()); return GetBuilder(builder: (controller) { if (controller.statusRideVip == 'Begin' || !controller.statusRideFromStart) { return Positioned( left: 10, right: 10, bottom: 10, child: Container( decoration: AppStyle.boxDecoration, height: controller.statusRideVip == 'Begin' ? Get.height * .33 : 0, // width: 100, child: Padding( padding: const EdgeInsets.all(8.0), child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ CircleAvatar( radius: 30, backgroundImage: NetworkImage( '${AppLink.server}/portrate_captain_image/${controller.driverId}.jpg', ), onBackgroundImageError: (_, __) { // Handle error here }, backgroundColor: Colors.grey, child: const Icon( Icons.person, // Default icon or placeholder size: 30, color: Colors.white, ), // Placeholder background color ), Column( children: [ Container( decoration: AppStyle.boxDecoration, child: Padding( padding: const EdgeInsets.symmetric( horizontal: 6, vertical: 2), child: Text( controller.driverName, style: AppStyle.title, ), ), ), const SizedBox( height: 10, ), Container( decoration: AppStyle.boxDecoration, child: Padding( padding: const EdgeInsets.symmetric( horizontal: 6, vertical: 2), child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Text( controller.make, style: AppStyle.title, ), const SizedBox( width: 10, ), Text( controller.model, style: AppStyle.title, ), ], ), ), ), ], ), Column( children: [ Container( decoration: AppStyle.boxDecoration, child: Padding( padding: const EdgeInsets.all(3), child: Text( 'vip', style: AppStyle.title, ), ), ), Text( '${controller.driverRate} 📈', style: AppStyle.title, ), ], ), ], ), // SizedBox( // height: 5, // ), Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Container( width: Get.width * .15, decoration: AppStyle.boxDecoration, child: IconButton( onPressed: () => Get.to( () => ComplaintPage(), transition: Transition.downToUp, ), icon: const Icon( Icons.note_add, color: AppColor.redColor, ), tooltip: ' Add Note', // Optional tooltip for clarity ), ), Container( width: Get.width * .15, decoration: AppStyle.boxDecoration, child: audioController.isRecording == false ? IconButton( onPressed: () async { await audioController.startRecording(); Toast.show(context, 'Start Record'.tr, AppColor.greenColor); }, icon: const Icon( Icons.play_circle_fill_outlined, color: AppColor.greenColor, ), tooltip: ' Add Note', // Optional tooltip for clarity ) : IconButton( onPressed: () async { await audioController.stopRecording(); Toast.show(context, 'Record saved'.tr, AppColor.greenColor); }, icon: const Icon( Icons.stop_circle, color: AppColor.greenColor, ), tooltip: ' Add Note', // Optional tooltip for clarity ), ), ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Container( decoration: AppStyle.boxDecoration, width: Get.width * .15, child: IconButton( onPressed: () async { if (box.read(BoxName.sosPhonePassenger) == null) { { await profileController.updatField( 'sosPhone', TextInputType.phone); box.write(BoxName.sosPhonePassenger, profileController.prfoileData['sosPhone']); } } else { makePhoneCall('122'); // box.read(BoxName.sosPhonePassenger)); } }, icon: const Icon( Icons.sos_rounded, color: AppColor.redColor, ), ), ), Container( decoration: AppStyle.boxDecoration, width: Get.width * .15, child: IconButton( onPressed: () async { if (box.read(BoxName.sosPhonePassenger) == null || box.read(BoxName.sosPhonePassenger) == 'sos') { { await profileController.updatField( 'sosPhone', TextInputType.phone); box.write(BoxName.sosPhonePassenger, profileController.prfoileData['sosPhone']); } } else { String phoneNumber = box .read(BoxName.sosPhonePassenger) .toString(); // phoneNumber = phoneNumber.replaceAll('0', ''); var phone = box.read(BoxName.countryCode) == 'Egypt' ? '+2${box.read(BoxName.sosPhonePassenger)}' : '+962${box.read(BoxName.sosPhonePassenger)}'; controller.sendWhatsapp(phone); } }, icon: const Icon( FontAwesome.whatsapp, color: AppColor.greenColor, ), ), ), Container( decoration: AppStyle.boxDecoration, width: Get.width * .15, child: IconButton( onPressed: () async { await controller.shareTripWithFamily(); }, icon: const Icon( AntDesign.Safety, color: AppColor.blueColor, ), ), ), ], ), Stack( children: [ // StreamCounter(), LinearProgressIndicator( backgroundColor: AppColor.accentColor, color: // controller.remainingTimeTimerRideBegin < 60 // ? AppColor.redColor // : AppColor.greenColor, minHeight: 25, borderRadius: BorderRadius.circular(15), value: 24 //controller.progressTimerRideBegin.toDouble(), ), Center( child: Text( controller.stringElapsedTimeRideBeginVip, style: AppStyle.title, ), ) ], ) ], ), ), ), ); } else { return const SizedBox(); } }); } } class StreamCounter extends StatelessWidget { const StreamCounter({Key? key}) : super(key: key); @override // Build the UI based on the timer value Widget build(BuildContext context) { Get.put(MapPassengerController()); return GetBuilder(builder: (controller) { return StreamBuilder( initialData: 0, stream: controller.timerController.stream, builder: (context, snapshot) { // Calculate the remaining time based on the current tick final remainingTime = controller.durationToRide - snapshot.data!; // Format the remaining time as a string final formattedRemainingTime = '${(remainingTime / 60).floor()}:${(remainingTime % 60).toString().padLeft(2, '0')}'; // Return the UI widgets based on the remaining time return Column( children: [ Text(formattedRemainingTime), // ElevatedButton( // onPressed: () { // // Handle button press here // }, // ), ], ); }, ); }); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/payment_method.page.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/controller/functions/secure_storage.dart'; import 'package:Intaleq/controller/home/payment/credit_card_controller.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/functions/digit_obsecur_formate.dart'; import '../../../controller/home/map_passenger_controller.dart'; class PaymentMethodPage extends StatelessWidget { const PaymentMethodPage({ super.key, }); @override Widget build(BuildContext context) { return GetBuilder( builder: (controller) => Positioned( right: 5, bottom: 5, left: 5, child: AnimatedContainer( duration: const Duration(milliseconds: 400), height: controller.isPaymentMethodPageShown ? controller.paymentPageShown : 0, decoration: BoxDecoration( color: AppColor.secondaryColor, borderRadius: BorderRadius.circular(15)), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'My Card'.tr, style: AppStyle.title.copyWith(fontSize: 22), ), IconButton( onPressed: () => controller.changePaymentMethodPageShown(), icon: const Icon(Icons.close), ), ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Add Card'.tr, style: AppStyle.title, ), // GetBuilder( // builder: (controller) => IconButton( // onPressed: () { // // controller.scanCard(); // // Get.defaultDialog(content: OptionConfigureWidget( // // initialOptions: scanOptions, // // onScanOptionChanged: (newOptions) => // // scanOptions = newOptions, // // ), // // ); // }, // icon: const Icon(Icons.contact_emergency_sharp), // ), // ) ], ), const SizedBox( height: 10, ), const MyCreditCardWidget(), const Spacer(), GetBuilder( builder: (controller) => Row( mainAxisAlignment: MainAxisAlignment.center, children: [ MyElevatedButton( title: 'Add Credit Card'.tr, onPressed: () async { if (controller.formKey.currentState! .validate()) { SecureStorage().saveData( BoxName.cardNumber, controller .cardNumberController.text); SecureStorage().saveData( BoxName.cardHolderName, controller .cardHolderNameController.text); SecureStorage().saveData( BoxName.cvvCode, controller.cvvCodeController.text); SecureStorage().saveData( BoxName.expiryDate, controller .expiryDateController.text); } }, ), ], )) ], ), ), ), )); } } class MyCreditCardWidget extends StatelessWidget { const MyCreditCardWidget({ super.key, }); @override Widget build(BuildContext context) { Get.put(CreditCardController()); return GetBuilder( builder: (controller) => Container( height: Get.height * .4, width: Get.width * .9, decoration: const BoxDecoration( color: AppColor.secondaryColor, borderRadius: BorderRadius.all(Radius.circular(15)), gradient: LinearGradient(colors: [ AppColor.secondaryColor, // AppColor.blueColor, // AppColor.greenColor, AppColor.accentColor, // AppColor.primaryColor, // AppColor.redColor, // AppColor.yellowColor ]), boxShadow: [ BoxShadow( spreadRadius: 3, offset: Offset(3, 3), blurRadius: 3, color: AppColor.redColor), BoxShadow( offset: Offset(-3, -3), blurRadius: 3, spreadRadius: 3, color: AppColor.redColor), ], ), child: Form( key: controller.formKey, child: Padding( padding: const EdgeInsets.all(8.0), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SizedBox( child: Row( children: [ getCardIcon(controller.cardNumberController .text), // Dynamic credit card icon SizedBox( width: Get.width * .03, ), SizedBox( width: Get.width * .25, child: Text( 'Card Number'.tr, style: AppStyle.title, ), ), SizedBox( width: Get.width * .03, ), SizedBox( width: Get.width * .4, height: 70, child: TextFormField( maxLength: 16, keyboardType: TextInputType.number, controller: controller.cardNumberController, style: const TextStyle( color: AppColor.blueColor, fontFamily: 'digital-counter-7', fontWeight: FontWeight.bold), decoration: const InputDecoration( helperStyle: TextStyle( fontFamily: 'digital-counter-7'), // labelText: 'Card Number', ), // inputFormatters: [DigitObscuringFormatter()], validator: (value) { if (value!.isEmpty || value.length != 16) { return 'Please enter a valid 16-digit card number' .tr; } return null; }, ), ), ], ), ), Row( children: [ const Icon(Icons.person), SizedBox( width: Get.width * .03, ), SizedBox( width: Get.width * .25, child: Text( 'Holder Name', style: AppStyle.title, ), ), SizedBox( width: Get.width * .03, ), SizedBox( width: Get.width * .3, child: SizedBox( // height: 50, child: TextFormField( style: AppStyle.title, keyboardType: TextInputType.text, // maxLength: 16, controller: controller.cardHolderNameController, decoration: const InputDecoration( // labelText: 'Cardholder Name', ), validator: (value) { if (value!.isEmpty) { return 'Please enter the cardholder name' .tr; } return null; }, ), ), ) ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SizedBox( width: Get.width * .4, child: Row( children: [ const Icon(Icons.date_range_outlined), SizedBox( width: Get.width * .03, ), Column( children: [ SizedBox( width: Get.width * .2, child: Text( 'Expiry Date', style: AppStyle.subtitle, ), ), SizedBox( width: Get.width * .1, child: SizedBox( height: 60, child: TextFormField( maxLength: 4, keyboardType: TextInputType.datetime, controller: controller.expiryDateController, style: AppStyle.title, decoration: const InputDecoration(), validator: (value) { if (value!.isEmpty) { return 'Please enter the expiry date' .tr; } return null; }, ), ), ) ], ), ], ), ), SizedBox( width: Get.width * .4, child: Row( children: [ const Icon(Icons.security), SizedBox( width: Get.width * .021, ), Column( children: [ SizedBox( width: Get.width * .2, child: Text( 'CVV Code', style: AppStyle.subtitle, ), ), SizedBox( width: Get.width * .2, child: SizedBox( height: 60, child: TextFormField( obscureText: true, keyboardType: TextInputType.number, style: const TextStyle( color: AppColor.primaryColor, fontFamily: 'digital-counter-7'), maxLength: 3, controller: controller.cvvCodeController, decoration: const InputDecoration( // labelText: 'CVV Code', ), validator: (value) { if (value!.isEmpty && value.length != 3) { return 'Please enter the CVV code' .tr; } return null; }, ), ), ), ], ) ], ), ), ], ), // const SizedBox( // height: 20, // ), MyElevatedButton( title: 'Save'.tr, onPressed: () { if (controller.formKey.currentState!.validate()) { // final creditCard = CreditCardModel( // cardNumber: controller.cardNumberController.text, // cardHolderName: // controller.cardHolderNameController.text, // expiryDate: controller.expiryDateController.text, // cvvCode: controller.cvvCodeController.text, // ); // Process the credit card details // You can use GetX to handle the logic here if (controller.formKey.currentState!.validate()) { SecureStorage().saveData(BoxName.cardNumber, controller.cardNumberController.text); SecureStorage().saveData(BoxName.cardHolderName, controller.cardHolderNameController.text); SecureStorage().saveData(BoxName.cvvCode, controller.cvvCodeController.text); SecureStorage().saveData(BoxName.expiryDate, controller.expiryDateController.text); } } }, ), ], ), )))); } Widget getCardIcon(String cardNumber) { String cardType = detectCardType( cardNumber); // Function to detect card type based on the first digit IconData iconData; Color iconColor; switch (cardType) { case 'Visa': iconData = Icons.credit_card_rounded; iconColor = Colors.blue; // Change color for Visa cards break; case 'Mastercard': iconData = Icons.credit_card_rounded; iconColor = Colors.red; // Change color for Mastercard cards break; default: iconData = Icons.credit_card_rounded; iconColor = Colors.black; // Default color for other card types break; } return Icon( iconData, color: iconColor, ); } String detectCardType(String cardNumber) { if (cardNumber.startsWith('4')) { return 'Visa'; } else if (cardNumber.startsWith('5')) { return 'Mastercard'; } else { return 'Other'; } } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/call_passenger_page.dart ================================================== // import 'dart:async'; // import 'package:SEFER/constant/box_name.dart'; // import 'package:SEFER/controller/home/map_passenger_controller.dart'; // import 'package:SEFER/main.dart'; // import 'package:SEFER/views/widgets/my_scafold.dart'; // import 'package:flutter/material.dart'; // import 'package:get/get.dart'; // import 'package:permission_handler/permission_handler.dart'; // import 'package:agora_rtc_engine/agora_rtc_engine.dart'; // import '../../../../constant/api_key.dart'; // import '../../../constant/colors.dart'; // import '../../../constant/style.dart'; // import '../../../controller/firebase/firbase_messge.dart'; // String appId = AK.agoraAppId; // class PassengerCallPage extends StatefulWidget { // const PassengerCallPage({ // super.key, // required this.channelName, // required this.token, // required this.remoteID, // }); // final String channelName, token, remoteID; // @override // State createState() => _PassengerCallPageState(); // } // class _PassengerCallPageState extends State { // int uid = 0; // int? _remoteUid = 0; // uid of the remote user // bool _isJoined = false; // Indicates if the local user has joined the channel // late RtcEngine agoraEngine; // Agora engine instance // String status = ''; // final GlobalKey scaffoldMessengerKey = // GlobalKey(); // Global key to access the scaffold // showMessage(String message) { // scaffoldMessengerKey.currentState?.showSnackBar(SnackBar( // content: Text(message), // )); // } // initAgora() async { // await setupVoiceSDKEngine(); // } // @override // void initState() { // super.initState(); // _remoteUid = int.parse(widget.remoteID); // uid = int.parse(box.read(BoxName.phone)); // // Set up an instance of Agora engine // initAgora(); // } // Future setupVoiceSDKEngine() async { // // retrieve or request microphone permission // await [Permission.microphone].request(); // //create an instance of the Agora engine // agoraEngine = createAgoraRtcEngine(); // await agoraEngine.initialize(RtcEngineContext(appId: AK.agoraAppId)); // // Register the event handler // agoraEngine.registerEventHandler( // RtcEngineEventHandler( // onJoinChannelSuccess: (RtcConnection connection, int elapsed) { // showMessage( // "Local user uid:${connection.localUid} joined the channel"); // setState(() { // _isJoined = true; // status = 'joined'.tr; // }); // }, // onUserJoined: (RtcConnection connection, int remoteUid, int elapsed) { // showMessage("Driver joined the channel".tr); // setState(() { // status = "Driver joined the channel".tr; // _remoteUid = remoteUid; // }); // }, // onUserOffline: (RtcConnection connection, int? remoteUid, // UserOfflineReasonType reason) { // showMessage("Driver left the channel".tr); // setState(() { // status = "Driver left the channel".tr; // _remoteUid = null; // }); // }, // ), // ); // } // void join() async { // // Set channel options including the client role and channel profile // ChannelMediaOptions options = const ChannelMediaOptions( // clientRoleType: ClientRoleType.clientRoleBroadcaster, // channelProfile: ChannelProfileType.channelProfileCommunication, // ); // await agoraEngine.joinChannel( // token: widget.token, // channelId: widget.channelName, // options: options, // uid: uid, // ); // } // //https://console.agora.io/invite?sign=5e9e22d06f22caeeada9954c9e908572%253A5ba8aed978a35eab5a5113742502ded2a41478b2a81cb19c71a30776e125b58a // void leave() { // setState(() { // _isJoined = false; // _remoteUid = null; // }); // agoraEngine.leaveChannel(); // } // // Clean up the resources when you leave // @override // void dispose() async { // await agoraEngine.leaveChannel(); // super.dispose(); // } // // Build UI // @override // Widget build(BuildContext context) { // return MaterialApp( // scaffoldMessengerKey: scaffoldMessengerKey, // home: MyScafolld( // // appBar: AppBar( // // title: const Text('Get started with Voice Calling'), // // ), // title: 'Call Page'.tr, // isleading: true, // body: [ // Positioned( // top: Get.height * .2, // child: Container( // height: 100, width: Get.width, // decoration: AppStyle.boxDecoration, // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceEvenly, // children: [ // GestureDetector( // onTap: () async { // // await callController.initAgoraFull(); // // callController.join(); // // FirebaseMessagesController().sendNotificationToPassengerToken( // // 'Call Income', // // '${'You have call from driver'.tr} ${box.read(BoxName.nameDriver)}', // // Get.find().tokenPassenger, // // [ // // callController.token, // // callController.channelName, // // callController.uid.toString(), // // callController.remoteUid.toString(), // // ], // // ); // join(); // // callController.fetchToken(); // }, // child: Container( // width: 50, // height: 50, // decoration: const BoxDecoration( // shape: BoxShape.circle, // color: AppColor.greenColor), // child: const Icon( // Icons.phone, // size: 35, // color: AppColor.secondaryColor, // )), // ), // Column( // children: [ // Text( // status, // style: AppStyle.title, // ), // Text('Driver Name'), // ], // ), // GestureDetector( // onTap: () async { // FirebaseMessagesController() // .sendNotificationToPassengerToken( // 'Call End'.tr, // 'Call End', // Get.find().driverToken, // [], // 'iphone_ringtone.wav', // ); // leave(); // Get.back(); // // }, // child: Container( // width: 50, // height: 50, // decoration: const BoxDecoration( // shape: BoxShape.circle, color: AppColor.redColor), // child: const Icon( // Icons.phone_disabled_sharp, // size: 35, // color: AppColor.secondaryColor, // )), // ) // ], // ), // // ignore: prefer_const_constructors // ), // ), // // ListView( // // padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), // // children: [ // // // Status text // // Container(height: 40, child: Center(child: _status())), // // // Button Row // // Row( // // children: [ // // Expanded( // // child: ElevatedButton( // // child: Text("Join".tr), // // onPressed: () => {join()}, // // ), // // ), // // const SizedBox(width: 10), // // Expanded( // // child: ElevatedButton( // // child: Text("Leave".tr), // // onPressed: () => {leave()}, // // ), // // ), // // ], // // ), // // ], // // ), // ]), // ); // } // // Widget _status() { // // String statusText; // // // // if (!_isJoined) { // // statusText = 'Join a channel'.tr; // // } else if (_remoteUid == null) // // statusText = 'Waiting for a remote user to join...'; // // else // // statusText = 'Connected to remote user, uid:$_remoteUid'; // // // // return Text( // // statusText, // // ); // // } // } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/left_main_menu_icons.dart ================================================== import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/controller/firebase/firbase_messge.dart'; import 'package:Intaleq/controller/firebase/notification_service.dart'; import 'package:Intaleq/main.dart'; import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'dart:ui'; // مهم لإضافة تأثير الضبابية import '../../../constant/colors.dart'; import '../../../controller/functions/encrypt_decrypt.dart'; import '../../../controller/functions/tts.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../../controller/home/vip_waitting_page.dart'; import '../../../env/env.dart'; import '../../../print.dart'; import '../../auth/otp_page.dart'; // --- الدالة الرئيسية بالتصميم الجديد --- GetBuilder leftMainMenuIcons() { Get.put(TextToSpeechController()); return GetBuilder( builder: (controller) => Positioned( // تم تعديل الموضع ليتناسب مع التصميم الجديد top: Get.height * .01, left: 0, right: 0, child: Center( child: ClipRRect( borderRadius: BorderRadius.circular(50.0), // لإنشاء شكل الكبسولة child: BackdropFilter( filter: ImageFilter.blur( sigmaX: 8.0, sigmaY: 8.0), // تأثير الزجاج المصنفر child: AnimatedContainer( duration: const Duration(milliseconds: 300), padding: const EdgeInsets.symmetric(horizontal: 8), decoration: BoxDecoration( color: AppColor.secondaryColor.withOpacity(0.4), // لون شبه شفاف borderRadius: BorderRadius.circular(50.0), border: Border.all(color: AppColor.secondaryColor), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, mainAxisSize: MainAxisSize.min, // ليأخذ الشريط حجم الأزرار فقط children: [ // --- تم استخدام دالة مساعدة جديدة للزر --- _buildMapActionButton( icon: Icons.satellite_alt_outlined, tooltip: 'Toggle Map Type', onPressed: () => controller.changeMapType(), ), // _buildVerticalDivider(), // _buildMapActionButton( // icon: Icons.traffic_outlined, // tooltip: 'Toggle Traffic', // onPressed: () => controller.changeMapTraffic(), // ), _buildVerticalDivider(), _buildMapActionButton( icon: Icons.my_location_rounded, tooltip: 'Go to My Location', onPressed: () { controller.mapController?.animateCamera( CameraUpdate.newLatLng( LatLng( controller.passengerLocation.latitude, controller.passengerLocation.longitude, ), ), ); }, ), _buildVerticalDivider(), _buildMapActionButton( icon: Octicons.watch, tooltip: 'VIP Waiting Page', onPressed: () => Get.to(() => VipWaittingPage()), ), // _buildMapActionButton( // icon: Octicons.ellipsis, // tooltip: 'test', // onPressed: () => Get.to(() => TestPage()), // ), ], ), ), ), ), ), ), ); } // --- دالة مساعدة جديدة لإنشاء الأزرار بشكل أنيق --- Widget _buildMapActionButton({ required IconData icon, required String tooltip, required VoidCallback onPressed, }) { return IconButton( onPressed: onPressed, icon: Icon(icon, color: AppColor.writeColor, size: 22), tooltip: tooltip, splashRadius: 22, padding: const EdgeInsets.all(12), constraints: const BoxConstraints(), // لإزالة المساحات الافتراضية ); } // --- ويدجت للفاصل الرأسي بين الأزرار --- Widget _buildVerticalDivider() { return Container( height: 20, width: 1, color: AppColor.writeColor.withOpacity(0.2), ); } // --- باقي الكود الخاص بك يبقى كما هو بدون تغيير --- class TestPage extends StatelessWidget { const TestPage({ super.key, }); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(), body: Center( child: TextButton( onPressed: () async { // print(box.read(BoxName.lowEndMode)); // box.read(BoxName.lowEndMode) Get.to(PhoneNumberScreen()); }, child: Text( "Text Button", ), ), ), ); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/new_main_bottom_sheet.dart ================================================== import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/main.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; class NewMainBottomSheet extends StatelessWidget { const NewMainBottomSheet({super.key}); @override Widget build(BuildContext context) { return Positioned( bottom: 0, left: 5, right: 5, child: Container( decoration: AppStyle.boxDecoration, width: Get.width, height: Get.height * .15, child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Container( decoration: BoxDecoration( border: Border.all(), borderRadius: BorderRadius.circular(15)), child: Padding( padding: const EdgeInsets.all(8.0), child: Row( children: [ Text('Home'.tr), const Icon(Icons.home), ], ), ), ), Container( decoration: BoxDecoration( border: Border.all(), borderRadius: BorderRadius.circular(15)), child: Padding( padding: const EdgeInsets.all(8.0), child: Row( children: [ Text('Work'.tr), const Icon(Icons.work_outline), ], ), ), ), ], ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( decoration: BoxDecoration( border: Border.all(), borderRadius: BorderRadius.circular(15), color: AppColor.blueColor.withOpacity(.5), ), child: Padding( padding: const EdgeInsets.all(12), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const Icon(Icons.search), Text( "${"Where you want go ".tr}${(box.read(BoxName.name).toString().split(' ')[0]).toString()} ?", ), ], ), ), ) ], ) ], ), ), ); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/driver_card_from_passenger.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../../constant/style.dart'; import '../../../controller/home/map_passenger_controller.dart'; import 'hexegone_clipper.dart'; GetBuilder hexagonClipper() { return GetBuilder( builder: ((controller) => controller.rideConfirm ? Positioned( top: Get.height * .1, left: Get.width * .1, right: Get.width * .1, child: ClipPath( clipper: HexagonClipper(), // CustomClipper to create a hexagon shape child: AnimatedContainer( duration: const Duration(microseconds: 300), height: 250, width: 250, // decoration: AppStyle.boxDecoration, // gradient: const LinearGradient( // colors: [AppColor.greenColor, AppColor.secondaryColor], // begin: Alignment.topLeft, // end: Alignment.bottomCenter, // ), // border: Border.all(), // color: AppColor.secondaryColor, // borderRadius: BorderRadius.circular(15)), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( 'Waiting for Driver ...'.tr, style: AppStyle.title, ), // IconButton( // onPressed: () { // }, // icon: const Icon(Icons.add), // ), // Text( // controller.dataCarsLocationByPassenger['message'] // [controller.carsOrder]['phone'] // .toString(), // style: AppStyle.title, // ), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Text( '${controller.dataCarsLocationByPassenger['message'][controller.carsOrder]['first_name']} ${controller.dataCarsLocationByPassenger['message'][controller.carsOrder]['last_name']}', style: AppStyle.title, ), Text( 'Age is '.tr + controller .dataCarsLocationByPassenger['message'] [controller.carsOrder]['age'] .toString(), style: AppStyle.title, ), ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Text( controller.dataCarsLocationByPassenger['message'] [controller.carsOrder]['make'] .toString(), style: AppStyle.title, ), Text( controller.dataCarsLocationByPassenger['message'] [controller.carsOrder]['model'] .toString(), style: AppStyle.title, ), ], ), Text( 'Rating is '.tr + controller.dataCarsLocationByPassenger['message'] [controller.carsOrder]['ratingDriver'] .toString(), style: AppStyle.title, ), Container( decoration: BoxDecoration(border: Border.all(width: 2)), child: Text( controller.dataCarsLocationByPassenger['message'] [controller.carsOrder]['car_plate'] .toString(), style: AppStyle.title, ), ), ], ), ), ), ) : const SizedBox())); } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/timer_for_cancell_trip_from_passenger.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../../constant/style.dart'; import '../../../controller/home/map_passenger_controller.dart'; GetBuilder timerForCancelTripFromPassenger() { return GetBuilder( builder: (controller) { final isNearEnd = controller.remainingTime <= 5; // Define a threshold for "near end" return controller.remainingTime > 0 && controller.remainingTime != 25 ? Positioned( bottom: 5, left: 10, right: 10, child: Container( height: 180, decoration: AppStyle.boxDecoration, child: Padding( padding: const EdgeInsets.all(8.0), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Stack( alignment: Alignment.center, children: [ CircularProgressIndicator( value: controller.progress, // Set the color based on the "isNearEnd" condition color: isNearEnd ? Colors.red : Colors.blue, ), Text( '${controller.remainingTime}', style: AppStyle.number, ), ], ), const SizedBox( width: 30, ), Text( 'You can cancel Ride now'.tr, style: AppStyle.title, ) ], ), Text( 'After this period\nYou can\'t cancel!'.tr, style: AppStyle.title, ) ], ), ), ), ) : const SizedBox(); }, ); } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/google_map_passenger_widget.dart ================================================== import 'dart:io'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:Intaleq/controller/home/points_for_rider_controller.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; // import '../../../controller/functions/location_controller.dart'; // Un-comment if needed // import '../../../controller/home/device_tier.dart'; // Removed to rely on Controller logic import '../../../controller/home/map_passenger_controller.dart'; import '../../widgets/mycircular.dart'; import '../../widgets/mydialoug.dart'; class GoogleMapPassengerWidget extends StatelessWidget { GoogleMapPassengerWidget({super.key}); final WayPointController wayPointController = Get.put(WayPointController()); @override Widget build(BuildContext context) { return GetBuilder( builder: (controller) => controller.isLoading ? const MyCircularProgressIndicator() : Positioned( bottom: Get.height * .2, top: 0, left: 0, right: 0, child: GoogleMap( onMapCreated: controller.onMapCreated, // ✅ Camera Bounds cameraTargetBounds: CameraTargetBounds(controller.boundsdata), // ✅ Performance: Smoother zoom limits for low-end devices minMaxZoomPreference: controller.lowPerf ? const MinMaxZoomPreference(6, 17) : const MinMaxZoomPreference(6, 18), // ✅ Destination Selection on Long Press onLongPress: (LatLng argument) { MyDialog().getDialog('Are you want to go to this site'.tr, '', () async { controller.clearPolyline(); // Ensure we have car data available before routing if (controller.dataCarsLocationByPassenger != null) { await controller.getDirectionMap( '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}', '${argument.latitude},${argument.longitude}', ); Get.back(); // Close Dialog await controller.bottomSheet(); controller.showBottomSheet1(); } else { Get.back(); Get.snackbar( 'We Are Sorry That we dont have cars in your Location!' .tr, '', colorText: AppColor.redColor, duration: const Duration(seconds: 5), backgroundColor: AppColor.secondaryColor, icon: const Icon(Icons.error, color: AppColor.redColor), titleText: Text('Error'.tr, style: const TextStyle(color: AppColor.redColor)), messageText: Text( 'We Are Sorry That we dont have cars in your Location!' .tr, style: AppStyle.title), ); } }); }, // ✅ Hide UI elements on tap onTap: (argument) { controller.hidePlaces(); }, initialCameraPosition: CameraPosition( target: controller.passengerLocation, zoom: controller.lowPerf ? 14.5 : 15, ), // ✅ Markers markers: controller.markers.toSet(), // ✅ Polygons (e.g., University/Country borders) polygons: controller.polygons, // ✅ Polylines: Switch to lighter version if lowPerf is detected polylines: controller.lowPerf ? controller.polyLinesLight.toSet() : controller.polyLines.toSet(), // ✅ Map Type: Switch to Normal map on low-end devices to save RAM mapType: controller.lowPerf ? MapType.normal : (controller.mapType ? MapType.satellite : MapType .normal), // Changed terrain default to normal for better performance // ✅ UI Settings for Performance myLocationButtonEnabled: false, mapToolbarEnabled: false, tiltGesturesEnabled: false, // Disable tilt to save GPU resources // Lite Mode (Static image) only on very low-end Androids if needed, // but usually handled by lowPerf logic in mapType/Traffic liteModeEnabled: Platform.isAndroid && controller.lowPerf, trafficEnabled: controller.mapTrafficON && !controller.lowPerf, buildingsEnabled: !controller.lowPerf, rotateGesturesEnabled: !controller.lowPerf, // Disable rotation on low-end // ✅ Camera Movement Logic onCameraMove: (CameraPosition position) { // 1. Always update current view target (for pickers) controller.newMyLocation = position.target; // 2. Handle Drag-to-Select for specific states if (controller.startLocationFromMap == true) { controller.newStartPointLocation = position.target; } else if (controller.passengerStartLocationFromMap == true) { controller.newStartPointLocation = position.target; } // 3. Handle Waypoints Dragging int waypointsLength = Get.find().wayPoints.length; if (waypointsLength > 0 && controller.wayPointIndex >= 0 && controller.wayPointIndex < controller.placesCoordinate.length) { controller.placesCoordinate[controller.wayPointIndex] = '${position.target.latitude},${position.target.longitude}'; } // 4. Throttle heavy calculations (Reverse Geocoding / API calls) if (controller.lowPerf) { controller.onCameraMoveThrottled(position); } }, myLocationEnabled: false, ), ), ); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/picker_animation_container.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/table_names.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../../main.dart'; import '../../widgets/elevated_btn.dart'; import 'form_search_places_destenation.dart'; class PickerAnimtionContainerFormPlaces extends StatelessWidget { PickerAnimtionContainerFormPlaces({ super.key, }); final controller = MapPassengerController(); @override Widget build(BuildContext context) { // DbSql sql = DbSql.instance; return GetBuilder( builder: (controller) => Positioned( bottom: 0, left: 0, right: 5, child: AnimatedContainer( duration: const Duration(milliseconds: 300), height: controller.heightPickerContainer, decoration: const BoxDecoration( boxShadow: [ BoxShadow( color: AppColor.accentColor, offset: Offset(2, 2)), BoxShadow( color: AppColor.accentColor, offset: Offset(-2, -2)) ], color: AppColor.secondaryColor, borderRadius: BorderRadius.only( topLeft: Radius.circular(15), topRight: Radius.circular(15), )), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ controller.isPickerShown ? const SizedBox() : Text( 'Hi, Where to '.tr, style: AppStyle.title, ), Column( mainAxisAlignment: MainAxisAlignment.start, children: [ const SizedBox( height: 5, ), controller.isPickerShown ? InkWell( onTapDown: (details) { controller.changePickerShown(); controller.changeHeightPlaces(); }, child: Container( height: 7, width: Get.width * .3, decoration: BoxDecoration( color: AppColor.accentColor, borderRadius: BorderRadius.circular(10), border: Border.all( color: AppColor.accentColor, )), ), ) : const SizedBox(), controller.isPickerShown ? InkWell( onTap: () {}, child: formSearchPlacesDestenation(), ) : Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ TextButton( onPressed: () { controller.changePickerShown(); }, child: Text( "Pick your destination from Map".tr, style: AppStyle.subtitle, ), ), TextButton( onPressed: () async { List favoritePlaces = await sql .getAllData(TableName.placesFavorite); Get.defaultDialog( title: 'Favorite Places'.tr, content: SizedBox( width: Get.width * .8, height: 300, child: favoritePlaces.isEmpty ? Center( child: Column( mainAxisAlignment: MainAxisAlignment .center, children: [ const Icon( Icons .hourglass_empty_rounded, size: 99, color: AppColor .primaryColor, ), Text( 'You Dont Have Any places yet !' .tr, style: AppStyle.title, ), ], ), ) : ListView.builder( itemCount: favoritePlaces.length, itemBuilder: (BuildContext context, int index) { return Row( mainAxisAlignment: MainAxisAlignment .spaceBetween, children: [ TextButton( onPressed: () async { await controller .getDirectionMap( '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}', '${favoritePlaces[index]['latitude']},${favoritePlaces[index]['longitude']}', ); controller .changePickerShown(); controller .changeBottomSheetShown(); controller .bottomSheet(); Get.back(); }, child: Text( favoritePlaces[ index]['name'], style: AppStyle.title, ), ), IconButton( onPressed: () async { await sql.deleteData( TableName .placesFavorite, favoritePlaces[ index] ['id']); Get.back(); Get.snackbar( 'Deleted ', '${'You are Delete'.tr} ${favoritePlaces[index]['name']} from your list', backgroundColor: AppColor .accentColor); }, icon: const Icon(Icons .favorite_outlined), ), ], ); }, ), ), onCancel: () {}, ); }, child: Text( "Go To Favorite Places".tr, style: AppStyle.subtitle, ), ), ], ), if (controller.isPickerShown && controller.placesDestination.isEmpty) MyElevatedButton( title: 'Go to this Target'.tr, onPressed: () async { await controller.getDirectionMap( '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}', '${controller.newMyLocation.latitude},${controller.newMyLocation.longitude}', ); controller.changePickerShown(); controller.changeBottomSheetShown(); controller.bottomSheet(); // await sql // .getAllData(TableName.placesFavorite) }, ), if (controller.isPickerShown && controller.placesDestination.isEmpty) const SizedBox(), ], ), ], ), ), )); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/driver_time_arrive_passenger.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; // import 'package:intl/intl.dart'; import '../../../constant/style.dart'; import '../../../controller/home/map_passenger_controller.dart'; class DriverTimeArrivePassengerPage extends StatelessWidget { const DriverTimeArrivePassengerPage({super.key}); @override Widget build(BuildContext context) { return GetBuilder( builder: (controller) { return controller.remainingTime == 0 ? Positioned( bottom: Get.height * .35, right: Get.width * .05, child: Stack( alignment: Alignment.center, children: [ Container( decoration: AppStyle.boxDecoration, // width: 50, // height: 50, child: Padding( padding: const EdgeInsetsDirectional.only( start: 5, end: 5), child: Column( children: [ Text( controller.durationByPassenger.toString() + ' to arrive you.'.tr, style: AppStyle.title, ), Text( " ${DateFormat('h:mm a').format(controller.newTime)}", style: AppStyle.title, ), ], ), )) ], ), ) : const SizedBox(); }, ); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/ride_from_start_app.dart ================================================== import 'package:Intaleq/controller/functions/launch.dart'; import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; // ... استيراد ملفاتك الأخرى ... import '../../../constant/box_name.dart'; import '../../../constant/colors.dart'; import '../../../constant/links.dart'; import '../../../constant/style.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../../controller/profile/profile_controller.dart'; import '../../../main.dart'; class RideFromStartApp extends StatelessWidget { const RideFromStartApp({super.key}); @override Widget build(BuildContext context) { final profileController = Get.put(ProfileController()); final MapPassengerController controller = Get.find(); return Obx(() { final bool isRideActive = controller.currentRideState.value == RideState.inProgress && controller.isStartAppHasRide == true; if (!isRideActive) return const SizedBox(); // قراءة البيانات final rideData = controller.rideStatusFromStartApp['data'] ?? {}; final driverId = rideData['driver_id']; final driverName = rideData['driverName'] ?? 'Captain'.tr; final driverRate = controller.driverRate; final carType = rideData['carType'] ?? 'Car'.tr; final carModel = controller.model ?? ''; final arrivalTime = box.read(BoxName.arrivalTime) ?? '--:--'; // تحديد البيانات للعرض final displayTime = controller.stringRemainingTimeRideBegin.isNotEmpty ? controller.stringRemainingTimeRideBegin : arrivalTime; final displayDistance = rideData['distance']?.toStringAsFixed(1) ?? 'N/A'; final displayPrice = rideData['price']?.toString() ?? 'N/A'; return Positioned( left: 0, right: 0, bottom: 0, // ملتصق بالأسفل تماماً child: Container( padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 15), decoration: const BoxDecoration( color: Colors.white, // خلفية بيضاء نظيفة borderRadius: BorderRadius.only( topLeft: Radius.circular(25), topRight: Radius.circular(25), ), boxShadow: [ BoxShadow( color: Colors.black12, blurRadius: 15.0, spreadRadius: 5.0, offset: Offset(0, -5), ), ], ), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ // 1. مقبض صغير للدلالة على السحب (تصميم جمالي) Center( child: Container( width: 40, height: 4, margin: const EdgeInsets.only(bottom: 15), decoration: BoxDecoration( color: Colors.grey[300], borderRadius: BorderRadius.circular(10), ), ), ), // 2. حالة الرحلة + معلومات السائق Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ // صورة السائق Container( padding: const EdgeInsets.all(2), decoration: BoxDecoration( shape: BoxShape.circle, border: Border.all(color: AppColor.primaryColor, width: 2), ), child: CircleAvatar( radius: 28, backgroundImage: NetworkImage( '${AppLink.server}/portrate_captain_image/$driverId.jpg'), ), ), const SizedBox(width: 12), // الاسم والسيارة Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( driverName, style: AppStyle.title.copyWith( fontSize: 16, fontWeight: FontWeight.bold, color: Colors.black87, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), const SizedBox(height: 4), Row( children: [ Icon(Icons.star, color: AppColor.yellowColor, size: 16), const SizedBox(width: 4), Text( driverRate, style: AppStyle.title.copyWith( fontSize: 13, fontWeight: FontWeight.bold), ), const SizedBox(width: 8), Container(width: 1, height: 12, color: Colors.grey), const SizedBox(width: 8), Text( "$carType - $carModel", style: AppStyle.title.copyWith( fontSize: 13, color: Colors.grey[600]), ), ], ), ], ), ), // حالة الرحلة (نص ملون) _buildStatusBadge(controller.currentRideState.value), ], ), const SizedBox(height: 20), // 3. شريط المعلومات (وقت، مسافة، سعر) Container( padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 10), decoration: BoxDecoration( color: AppColor.grayColor .withOpacity(0.1), // خلفية رمادية خفيفة جداً borderRadius: BorderRadius.circular(15), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ _buildInfoColumn( Icons.access_time_filled, displayTime, "Time".tr), _buildVerticalDivider(), _buildInfoColumn(Icons.location_on, "$displayDistance KM", "Distance".tr), _buildVerticalDivider(), _buildInfoColumn( Icons.attach_money, "$displayPrice SYP", "Price".tr), ], ), ), const SizedBox(height: 20), // 4. أزرار التحكم (SOS & Share) Row( children: [ // زر المشاركة (يأخذ مساحة أكبر) Expanded( flex: 2, child: ElevatedButton.icon( onPressed: () => _checkAndCall( controller.sendWhatsapp, profileController), icon: const Icon(FontAwesome.whatsapp, color: Colors.white), label: Text("Share Trip".tr, style: const TextStyle(color: Colors.white)), style: ElevatedButton.styleFrom( backgroundColor: AppColor.greenColor, padding: const EdgeInsets.symmetric(vertical: 12), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), elevation: 0, ), ), ), const SizedBox(width: 10), // زر الاستغاثة SOS Expanded( flex: 1, child: ElevatedButton.icon( onPressed: () => makePhoneCall(box.read(BoxName.sosPhonePassenger)), icon: const Icon(Icons.sos, color: Colors.white), label: Text("SOS".tr, style: const TextStyle(color: Colors.white)), style: ElevatedButton.styleFrom( backgroundColor: AppColor.redColor, padding: const EdgeInsets.symmetric(vertical: 12), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), elevation: 0, ), ), ), ], ), ], ), ), ); }); } // ------------------------- Widgets Helper Methods ------------------------- Widget _buildStatusBadge(RideState status) { String text; Color color; if (status == RideState.inProgress) { text = 'On Trip'.tr; color = AppColor.primaryColor; } else if (status == RideState.driverArrived) { text = 'Arrived'.tr; color = AppColor.greenColor; } else { text = 'Coming'.tr; color = AppColor.yellowColor; } return Container( padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 5), decoration: BoxDecoration( color: color.withOpacity(0.1), borderRadius: BorderRadius.circular(8), border: Border.all(color: color.withOpacity(0.5)), ), child: Text( text, style: TextStyle( color: color, fontWeight: FontWeight.bold, fontSize: 12, ), ), ); } Widget _buildInfoColumn(IconData icon, String value, String label) { return Column( children: [ Icon(icon, color: AppColor.secondaryColor, size: 22), // افترضت أن السكندري لون داكن، أو استخدم Primary const SizedBox(height: 4), Text( value, style: const TextStyle( fontWeight: FontWeight.w800, fontSize: 15, color: Colors.black87, ), ), Text( label, style: TextStyle( fontSize: 11, color: Colors.grey[600], ), ), ], ); } Widget _buildVerticalDivider() { return Container( height: 30, width: 1, color: Colors.grey[300], ); } // دالة المساعدة للمنطق (بقيت كما هي ولكن تم تمرير البروفايل كونترولر) Future _checkAndCall( Function(String) action, ProfileController profileController) async { String? sosPhone = box.read(BoxName.sosPhonePassenger); if (sosPhone == null || sosPhone == 'sos') { await profileController.updatField('sosPhone', TextInputType.phone); sosPhone = profileController.prfoileData['sosPhone']; } if (sosPhone != null && sosPhone != 'sos') { action(sosPhone); } else { Get.snackbar('Warning'.tr, 'Please set a valid SOS phone number.'.tr, backgroundColor: AppColor.redColor, colorText: Colors.white); } } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/form_search_places_destenation.dart ================================================== import 'dart:async'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/table_names.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/functions/toast.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../../main.dart'; // --------------------------------------------------- // -- Widget for Destination Point Search (Optimized) -- // --------------------------------------------------- /// A more optimized and cleaner implementation of the destination search form. /// /// Improvements: /// 1. **Widget Refactoring**: The UI is broken down into smaller, focused widgets /// (_SearchField, _QuickActions, _SearchResults) to prevent unnecessary rebuilds. /// 2. **State Management Scoping**: `GetBuilder` is used only on widgets that /// actually need to update, not the entire form. /// 3. **Reduced Build Logic**: Logic like reading from `box` is done once. /// 4. **Readability**: Code is cleaner and easier to follow. GetBuilder formSearchPlacesDestenation() { // --- [تحسين] قراءة القيم مرة واحدة في بداية البناء --- // Store box values in local variables to avoid repeated calls inside the build method. final String addWorkValue = box.read(BoxName.addWork)?.toString() ?? 'addWork'; final String addHomeValue = box.read(BoxName.addHome)?.toString() ?? 'addHome'; // --- [ملاحظة] تأكد من أن القيم الأولية موجودة --- // This initialization can be moved to your app's startup logic or a splash screen controller. if (addWorkValue.isEmpty || addHomeValue.isEmpty) { box.write(BoxName.addWork, 'addWork'); box.write(BoxName.addHome, 'addHome'); } return GetBuilder( id: 'destination_form', // Use an ID to allow targeted updates builder: (controller) { return Column( children: [ // --- Widget for the search text field --- _SearchField(controller: controller), // --- Widget for "Add Work" and "Add Home" buttons --- _QuickActions( controller: controller, addWorkValue: addWorkValue, addHomeValue: addHomeValue, ), // --- Widget for displaying search results, wrapped in its own GetBuilder --- _SearchResults(), ], ); }, ); } // --------------------------------------------------- // -- Private Helper Widgets for Cleaner Code -- // --------------------------------------------------- /// A dedicated widget for the search input field. class _SearchField extends StatefulWidget { final MapPassengerController controller; const _SearchField({required this.controller}); @override State<_SearchField> createState() => _SearchFieldState(); } class _SearchFieldState extends State<_SearchField> { Timer? _debounce; // --- [إصلاح] Listener لتحديث الواجهة عند تغيير النص لإظهار/إخفاء زر المسح --- void _onTextChanged() { if (mounted) { setState(() {}); } } @override void initState() { super.initState(); // Add listener to update the suffix icon when text changes widget.controller.placeDestinationController.addListener(_onTextChanged); } // --- [تحسين] إضافة Debouncer لتأخير البحث أثناء الكتابة --- void _onSearchChanged(String query) { if (_debounce?.isActive ?? false) _debounce!.cancel(); _debounce = Timer(const Duration(milliseconds: 500), () { if (query.length > 2) { widget.controller.getPlaces(); widget.controller.changeHeightPlaces(); } else if (query.isEmpty) { widget.controller.clearPlacesDestination(); widget.controller.changeHeightPlaces(); } }); } @override void dispose() { _debounce?.cancel(); // Remove the listener to prevent memory leaks widget.controller.placeDestinationController.removeListener(_onTextChanged); super.dispose(); } @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), child: Row( children: [ Expanded( child: TextFormField( controller: widget.controller.placeDestinationController, onChanged: _onSearchChanged, decoration: InputDecoration( hintText: widget.controller.hintTextDestinationPoint, hintStyle: AppStyle.subtitle.copyWith(color: Colors.grey[600]), prefixIcon: const Icon(Icons.search, color: AppColor.primaryColor), // --- [إصلاح] تم استبدال Obx بشرط بسيط لأن `setState` يعيد بناء الواجهة الآن --- suffixIcon: widget .controller.placeDestinationController.text.isNotEmpty ? IconButton( icon: Icon(Icons.clear, color: Colors.grey[400]), onPressed: () { widget.controller.placeDestinationController.clear(); // The listener will automatically handle the UI update // And _onSearchChanged will handle clearing the results }, ) : null, // Use null instead of SizedBox for better practice contentPadding: const EdgeInsets.symmetric( horizontal: 16.0, vertical: 10.0), border: OutlineInputBorder( borderRadius: BorderRadius.circular(8.0), borderSide: BorderSide.none, ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8.0), borderSide: BorderSide(color: AppColor.primaryColor), ), filled: true, fillColor: Colors.grey[50], ), ), ), const SizedBox(width: 8.0), IconButton( onPressed: () { widget.controller.changeMainBottomMenuMap(); widget.controller.changePickerShown(); }, icon: Icon(Icons.location_on_outlined, color: AppColor.accentColor, size: 30), tooltip: widget.controller.isAnotherOreder ? 'Pick destination on map'.tr : 'Pick on map'.tr, ), ], ), ); } } /// A dedicated widget for the quick action buttons (Work/Home). class _QuickActions extends StatelessWidget { final MapPassengerController controller; final String addWorkValue; final String addHomeValue; const _QuickActions({ required this.controller, required this.addWorkValue, required this.addHomeValue, }); @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ _buildQuickActionButton( icon: Icons.work_outline, text: addWorkValue == 'addWork' ? 'Add Work'.tr : 'To Work'.tr, onTap: () { if (addWorkValue == 'addWork') { controller.workLocationFromMap = true; controller.changeMainBottomMenuMap(); controller.changePickerShown(); } else { _handleQuickAction(controller, BoxName.addWork, 'To Work'); } }, onLongPress: () => _showChangeLocationDialog(controller, 'Work'), ), _buildQuickActionButton( icon: Icons.home_outlined, text: addHomeValue == 'addHome' ? 'Add Home'.tr : 'To Home'.tr, onTap: () { if (addHomeValue == 'addHome') { controller.homeLocationFromMap = true; controller.changeMainBottomMenuMap(); controller.changePickerShown(); } else { _handleQuickAction(controller, BoxName.addHome, 'To Home'); } }, onLongPress: () => _showChangeLocationDialog(controller, 'Home'), ), ], ), ); } } /// A dedicated widget for the search results list. /// It uses its own `GetBuilder` to only rebuild when the list of places changes. class _SearchResults extends StatelessWidget { @override Widget build(BuildContext context) { return GetBuilder( id: 'places_list', // Use a specific ID for targeted updates builder: (controller) { return AnimatedContainer( duration: const Duration(milliseconds: 200), height: controller.placesDestination.isNotEmpty ? 300 : 0, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(8.0), ), margin: const EdgeInsets.symmetric(horizontal: 16.0), child: ListView.separated( shrinkWrap: true, physics: const ClampingScrollPhysics(), itemCount: controller.placesDestination.length, separatorBuilder: (context, index) => const Divider(height: 1, color: Colors.grey), itemBuilder: (BuildContext context, int index) { final res = controller.placesDestination[index]; final title = res['name_ar'] ?? res['name'] ?? 'Unknown Place'; final address = res['address'] ?? 'Details not available'; final latitude = res['latitude']; final longitude = res['longitude']; return ListTile( leading: const Icon(Icons.place, size: 30, color: Colors.grey), title: Text( title, style: AppStyle.subtitle.copyWith(fontWeight: FontWeight.w500), ), subtitle: Text( address, style: TextStyle(color: Colors.grey[600], fontSize: 12), ), trailing: IconButton( icon: const Icon(Icons.favorite_border, color: Colors.grey), onPressed: () => _handleAddToFavorites( context, latitude, longitude, title), ), onTap: () => _handlePlaceSelection( controller, latitude, longitude, title, index), ); }, ), ); }, ); } // --- [تحسين] استخراج المنطق المعقد إلى دوال مساعدة --- Future _handleAddToFavorites(BuildContext context, dynamic latitude, dynamic longitude, String title) async { if (latitude != null && longitude != null) { await sql.insertMapLocation({ 'latitude': latitude, 'longitude': longitude, 'name': title, 'rate': 'N/A', }, TableName.placesFavorite); Toast.show( context, '$title ${'Saved Successfully'.tr}', AppColor.primaryColor, ); } else { Toast.show( context, 'Invalid location data', AppColor.redColor, ); } } Future _handlePlaceSelection(MapPassengerController controller, dynamic latitude, dynamic longitude, String title, int index) async { if (latitude == null || longitude == null) { Toast.show(Get.context!, 'Invalid location data', AppColor.redColor); return; } // Save to recent locations await sql.insertMapLocation({ 'latitude': latitude, 'longitude': longitude, 'name': title, 'rate': 'N/A', 'createdAt': DateTime.now().toIso8601String(), }, TableName.recentLocations); final destLatLng = LatLng( double.parse(latitude.toString()), double.parse(longitude.toString())); if (controller.isAnotherOreder) { // **Another Order Flow** await _handleAnotherOrderSelection(controller, destLatLng); } else { // **Regular Order Flow** _handleRegularOrderSelection(controller, destLatLng, index); } } Future _handleAnotherOrderSelection( MapPassengerController controller, LatLng destination) async { controller.myDestination = destination; controller.clearPlacesDestination(); // Helper method in controller await controller.getDirectionMap( '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}', '${controller.myDestination.latitude},${controller.myDestination.longitude}'); controller.isPickerShown = false; controller.passengerStartLocationFromMap = false; controller.changeMainBottomMenuMap(); controller.showBottomSheet1(); } void _handleRegularOrderSelection( MapPassengerController controller, LatLng destination, int index) { controller.passengerLocation = controller.newMyLocation; controller.myDestination = destination; controller.convertHintTextDestinationNewPlaces(index); controller.clearPlacesDestination(); // Helper method in controller controller.changeMainBottomMenuMap(); controller.passengerStartLocationFromMap = true; controller.isPickerShown = true; } } // --------------------------------------------------- // -- Helper Functions (kept from original code) -- // --------------------------------------------------- Widget _buildQuickActionButton({ required IconData icon, required String text, VoidCallback? onTap, VoidCallback? onLongPress, }) { return InkWell( onTap: onTap, onLongPress: onLongPress, child: Container( padding: const EdgeInsets.all(8.0), decoration: BoxDecoration( color: AppColor.blueColor.withOpacity(0.1), borderRadius: BorderRadius.circular(8.0), border: Border.all(color: AppColor.blueColor.withOpacity(0.3)), ), child: Column( mainAxisSize: MainAxisSize.min, children: [ Icon(icon, color: AppColor.blueColor), const SizedBox(height: 4.0), Text( text, textAlign: TextAlign.center, style: AppStyle.title.copyWith( color: AppColor.blueColor, fontWeight: FontWeight.w500), ), ], ), ), ); } void _showChangeLocationDialog( MapPassengerController controller, String locationType) { Get.defaultDialog( title: 'Change $locationType location?'.tr, middleText: '', confirm: MyElevatedButton( title: 'Yes'.tr, onPressed: () { Get.back(); if (locationType == 'Work') { controller.workLocationFromMap = true; } else { controller.homeLocationFromMap = true; } controller.changeMainBottomMenuMap(); controller.changePickerShown(); }, ), ); } void _handleQuickAction( MapPassengerController controller, String boxName, String hintText) async { // --- [تحسين] قراءة وتحويل الإحداثيات بأمان أكبر --- try { final locationString = box.read(boxName).toString(); final parts = locationString.split(','); final latLng = LatLng( double.parse(parts[0]), double.parse(parts[1]), ); controller.hintTextDestinationPoint = hintText; controller.changeMainBottomMenuMap(); await controller.getDirectionMap( '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}', '${latLng.latitude},${latLng.longitude}', ); controller.currentLocationToFormPlaces = false; controller.clearPlacesDestination(); // Helper method in controller controller.passengerStartLocationFromMap = false; controller.isPickerShown = false; controller.showBottomSheet1(); } catch (e) { // Handle error if parsing fails print("Error handling quick action: $e"); Toast.show(Get.context!, "Failed to get location".tr, AppColor.redColor); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/points_page_for_rider.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/style.dart'; import '../../../constant/colors.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../../controller/home/points_for_rider_controller.dart'; class PointsPageForRider extends StatelessWidget { PointsPageForRider({ super.key, }); MapPassengerController mapPassengerController = Get.put(MapPassengerController()); @override Widget build(BuildContext context) { Get.put(WayPointController()); return GetBuilder(builder: (controller) { return Positioned( bottom: 2, left: 2, right: 2, child: AnimatedContainer( duration: const Duration(milliseconds: 300), height: controller.wayPointSheetHeight, decoration: AppStyle.boxDecoration, child: ListView( children: [ // const AppBarPointsPageForRider(), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ IconButton( onPressed: () { mapPassengerController.downPoints(); }, icon: const Icon(Icons.arrow_drop_down_circle_outlined), ), GetBuilder(builder: (wayPointController) { return Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ ElevatedButton( onPressed: () { wayPointController.addWayPoints(); controller.isWayPointStopsSheetUtilGetMap = true; }, child: const Text('Add Stops'), ), wayPointController.wayPoints.length > 1 ? ElevatedButton( onPressed: () async { mapPassengerController .getMapPointsForAllMethods(); }, child: const Text('Get Direction'), ) : const SizedBox() ], ); }), ], ), SizedBox( height: Get.height * .36, child: GetBuilder( builder: (wayPointController) { return ReorderableListView( // The children of the list are the text fields children: wayPointController.wayPoints .asMap() .entries .map((entry) { final index = entry.key; final wayPoint = entry.value; return Padding( key: ValueKey(index), padding: const EdgeInsets.all(1), child: ListTile( leading: Container( decoration: BoxDecoration( color: AppColor.deepPurpleAccent, border: Border.all(), shape: BoxShape.rectangle), child: Padding( padding: const EdgeInsets.all(2), child: Text( index.toString(), style: AppStyle.title, ), )), title: InkWell( onTap: () { // showAddLocationDialog(context); Get.defaultDialog( content: SizedBox( width: Get.width, height: 400, child: mapPassengerController .placeListResponse[index]), ); }, child: Container( decoration: BoxDecoration( border: Border.all(), color: AppColor.accentColor.withOpacity(.5)), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text(index > 0 ? mapPassengerController .currentLocationStringAll[index] .toString() : ''), const Icon( Icons.reorder, size: 20, ), ], ), ), ), trailing: index > 0 ? IconButton( icon: const Icon(Icons.close), onPressed: () { wayPointController.removeTextField(index); }, ) : IconButton( icon: const Icon( Icons.close, color: AppColor.secondaryColor, ), onPressed: () {}, )), ); }).toList(), // The callback when the user reorders the text fields onReorder: (int oldIndex, int newIndex) { wayPointController.reorderTextFields(oldIndex, newIndex); }, ); }), ), ], ), ), ); }); } // GetBuilder( // builder: (controller) => Container( // decoration: AppStyle.boxDecoration, // height: Get.height * // .5, // height: controller.heightPointsPageForRider, // width: Get.width, // child: Column( // children: [ // SizedBox( // height: 300, // child: ReorderableListView( // onReorder: (oldIndex, newIndex) { // if (oldIndex < newIndex) { // newIndex -= 1; // } // pointsForRiderController.locations.insert( // newIndex, // pointsForRiderController.locations // .removeAt(oldIndex)); // }, // children: [ // for (int i = 0; // i < pointsForRiderController.locations.length; // i++) // ListTile( // key: Key('$i'), // title: DragTarget( // onAccept: (int data) { // pointsForRiderController.locations // .insert(i, 'New Text Field'); // }, // builder: (context, candidateData, rejectedData) { // return Row( // children: [ // SizedBox( // width: 300, // child: TextField( // controller: TextEditingController( // text: pointsForRiderController // .locations[i]), // onChanged: (value) { // pointsForRiderController // .locations[i] = value; // }, // decoration: InputDecoration( // prefixIcon: IconButton( // onPressed: () { // pointsForRiderController // .removeLocation(i); // }, // icon: const Icon(Icons.delete), // ), // labelText: 'Text Field ${i + 1}', // border: const OutlineInputBorder(), // ), // ), // ), // IconButton( // onPressed: () { // // pointsForRiderController.onReorder( // // index, newIndex); // }, // icon: const Icon(Icons.reorder), // ), // ], // ); // }, // ), // ), // ], // ), // ), // ElevatedButton( // onPressed: () { // pointsForRiderController.addLocation('location'); // }, // child: const Text('Add Text Field'), // ), // ], // ), // )); } void showAddLocationDialog(BuildContext context, int index) { final TextEditingController locationController = TextEditingController(); // Get.put(WayPointController()); showDialog( context: context, builder: (context) { return Dialog.fullscreen( // title: const Text('Add Location'), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ IconButton( onPressed: () { Get.back(); }, icon: const Icon( Icons.close, size: 40, ), ), Text( 'Add Location'.tr, style: AppStyle.title, ), const Icon( Icons.clear, color: AppColor.secondaryColor, ) ], ), // SizedBox( // width: Get.width, // child: formSearchCaptain(), // ), ], ), ); }, ); } class AppBarPointsPageForRider extends StatelessWidget { const AppBarPointsPageForRider({ super.key, }); @override Widget build(BuildContext context) { return Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ IconButton( onPressed: () {}, icon: const Icon( Icons.arrow_back_ios_new_rounded, color: AppColor.primaryColor, ), ), Container( child: Row( children: [ const CircleAvatar( backgroundColor: AppColor.primaryColor, maxRadius: 15, child: Icon( Icons.person, color: AppColor.secondaryColor, ), ), TextButton( onPressed: () {}, child: Text( "Switch Rider".tr, style: AppStyle.title, ), ), ], ), ), const Icon( Icons.clear, color: AppColor.secondaryColor, ) ], ); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/buttom_sheet_map_show.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/controller/payment/payment_controller.dart'; import '../../../constant/style.dart'; import '../../../controller/home/map_passenger_controller.dart'; GetBuilder buttomSheetMapPage() { Get.put(PaymentController()); return GetBuilder( builder: (controller) => controller.isBottomSheetShown && controller.rideConfirm == false ? const Positioned( left: 5, bottom: 0, right: 5, child: Column( // children: [ // Row( // mainAxisAlignment: MainAxisAlignment.end, // children: [ // double.parse(box.read(BoxName.passengerWalletTotal)) < // 0 && // controller.data.isNotEmpty // ? Container( // decoration: AppStyle.boxDecoration // .copyWith(color: AppColor.redColor), // height: 50, // width: Get.width * .94, // child: Padding( // padding: // const EdgeInsets.symmetric(horizontal: 8), // child: Text( // 'Your trip cost is'.tr + // ' ${controller.totalCostPassenger.toStringAsFixed(2)} ' // 'But you have a negative salary of' // .tr + // '${double.parse(box.read(BoxName.passengerWalletTotal)).toStringAsFixed(2)}' // ' in your' // .tr + // ' ${AppInformation.appName}' // ' wallet due to a previous trip.' // .tr, // style: AppStyle.subtitle, // ), // )) // : const SizedBox(), // ], // ), // const SizedBox( // height: 5, // ), // AnimatedContainer( // // clipBehavior: Clip.antiAliasWithSaveLayer, // curve: Curves.easeInCirc, // onEnd: () { // controller.height = 250; // }, // height: controller.heightBottomSheetShown, // duration: const Duration(seconds: 2), // child: Column( // children: [ // controller.data.isEmpty // ? const SizedBox() // : Container( // // width: Get.width * .9, // height: 100, // decoration: BoxDecoration( // color: AppColor.secondaryColor, // boxShadow: [ // const BoxShadow( // color: AppColor.accentColor, // offset: Offset(2, 2)), // BoxShadow( // color: AppColor.accentColor // .withOpacity(.4), // offset: const Offset(-2, -2)) // ], // borderRadius: const BorderRadius.all( // Radius.circular(15))), // child: ListView.builder( // scrollDirection: Axis.horizontal, // itemCount: controller // .dataCarsLocationByPassenger.length - // 1, // itemBuilder: // (BuildContext context, int index) { // return Container( // color: controller.gender == 'Female' // ? const Color.fromARGB( // 255, 246, 52, 181) // : AppColor.secondaryColor, // width: Get.width, // child: Row( // mainAxisAlignment: // MainAxisAlignment.spaceBetween, // children: [ // SizedBox( // width: Get.width * .15, // child: Padding( // padding: // const EdgeInsets.all(8.0), // child: Image.asset( // 'assets/images/jeep.png', // width: 50, // fit: BoxFit.fill, // repeat: ImageRepeat.repeatX, // ), // ), // ), // SizedBox( // width: Get.width * .55, // child: Column( // crossAxisAlignment: // CrossAxisAlignment.start, // mainAxisAlignment: // MainAxisAlignment.spaceEvenly, // children: [ // Text( // controller.hours > 0 // ? '${'Your Ride Duration is '.tr}${controller.hours} ${'H and'.tr} ${controller.minutes} ${'m'.tr}' // : '${'Your Ride Duration is '.tr} ${controller.minutes} m', // style: AppStyle.subtitle, // ), // // Text( // // '${'You will be thier in'.tr} ${DateFormat('h:mm a').format(controller.newTime)}', // // style: AppStyle.subtitle, // // ), // Text( // '${'Your trip distance is'.tr} ${controller.distance.toStringAsFixed(2)} ${'KM'.tr}', // style: AppStyle.subtitle, // ) // ], // ), // ), // SizedBox( // width: Get.width * .2, // child: Padding( // padding: const EdgeInsets.only( // right: 5, left: 5), // child: Column( // crossAxisAlignment: // CrossAxisAlignment.center, // children: [ // Container( // width: Get.width * .14, // height: Get.height * .06, // decoration: BoxDecoration( // color: AppColor // .secondaryColor, // shape: // BoxShape.rectangle, // border: Border.all( // width: 2, // color: AppColor // .greenColor)), // child: Center( // child: Text( // '${'Fee is'.tr} \n${controller.totalPassenger.toStringAsFixed(2)}', // style: // AppStyle.subtitle, // ), // ), // ), // controller.promoTaken // ? const Icon( // Icons // .filter_vintage_rounded, // color: // AppColor.redColor, // ) // : const SizedBox( // height: 0, // ) // ], // ), // ), // ), // ], // ), // ); // }, // ), // ), // const SizedBox( // height: 5, // ), // Container( // // height: 130, // decoration: BoxDecoration( // color: AppColor.secondaryColor, // boxShadow: [ // const BoxShadow( // color: AppColor.accentColor, // offset: Offset(2, 2)), // BoxShadow( // color: AppColor.accentColor.withOpacity(.4), // offset: const Offset(-2, -2)) // ], // borderRadius: // const BorderRadius.all(Radius.circular(15))), // child: controller.data.isEmpty // ? const SizedBox() // : Center( // child: Padding( // padding: const EdgeInsets.symmetric( // horizontal: 5), // child: Column( // children: [ // Row( // children: [ // const Icon( // Icons.location_on, // color: AppColor.redColor, // ), // const SizedBox( // width: 10, // ), // Text( // 'From : '.tr, // style: AppStyle.subtitle, // ), // Text( // controller.data[0] // ['start_address'] // .toString(), // style: AppStyle.subtitle, // ) // ], // ), // Row( // children: [ // const Icon(Icons // .location_searching_rounded), // const SizedBox( // width: 10, // ), // Text( // 'To : '.tr, // style: AppStyle.subtitle, // ), // Text( // controller.data[0]['end_address'], // style: AppStyle.subtitle, // ), // ], // ), // const Divider( // color: AppColor.accentColor, // thickness: 1, // height: 2, // indent: 1, // ), // SizedBox( // height: 40, // child: Row( // mainAxisAlignment: // MainAxisAlignment.center, // children: [ // Container( // decoration: BoxDecoration( // color: // AppColor.secondaryColor, // borderRadius: // BorderRadius.circular(12), // // border: Border.all(), // ), // child: Row( // children: [ // Icon( // Icons.monetization_on, // color: Colors.green[400], // ), // InkWell( // onTap: () async { // controller // .changeCashConfirmPageShown(); // Get.find< // PaymentController>() // .getPassengerWallet(); // }, // child: GetBuilder< // PaymentController>( // builder: (paymentController) => // paymentController // .isCashChecked // ? Text( // 'CASH', // style: AppStyle // .title, // ) // : Text( // '${AppInformation.appName} Wallet', // style: AppStyle // .title, // ), // ), // ), // ], // ), // ), // const SizedBox( // width: 40, // ), // GetBuilder( // builder: // (paymentController) => // Container( // decoration: // BoxDecoration( // color: AppColor // .secondaryColor, // borderRadius: // BorderRadius // .circular( // 12), // ), // child: Row( // children: [ // Icon( // Icons // .qr_code_2_rounded, // color: Colors // .green[ // 400], // ), // InkWell( // onTap: () { // if (controller // .promoTaken == // false) { // Get.defaultDialog( // title: 'Add Promo'.tr, // titleStyle: AppStyle.title, // content: Column( // children: [ // SizedBox( // width: Get.width * .7, // child: TextFormField( // controller: controller.promo, // decoration: InputDecoration( // labelText: 'Promo Code'.tr, // hintText: 'Enter promo code'.tr, // labelStyle: AppStyle.subtitle, // hintStyle: AppStyle.subtitle, // border: OutlineInputBorder( // borderRadius: BorderRadius.circular(10), // ), // filled: true, // fillColor: Colors.grey[200], // focusedBorder: OutlineInputBorder( // borderSide: const BorderSide( // color: AppColor.primaryColor, // width: 2.0, // ), // borderRadius: BorderRadius.circular(10), // ), // errorBorder: OutlineInputBorder( // borderSide: const BorderSide( // color: Colors.red, // width: 2.0, // ), // borderRadius: BorderRadius.circular(10), // ), // enabledBorder: OutlineInputBorder( // borderSide: const BorderSide( // color: Colors.grey, // width: 1.0, // ), // borderRadius: BorderRadius.circular(10), // ), // ), // ), // ), // MyElevatedButton( // title: 'Add Promo'.tr, // onPressed: () async { // controller.applyPromoCodeToPassenger(); // }, // ) // ], // )); // } else { // Get.snackbar( // 'You have promo!' // .tr, // '', // backgroundColor: // AppColor.redColor); // } // }, // child: Text( // 'Add Promo' // .tr, // style: AppStyle // .title, // ), // ), // ], // ), // )), // ], // ), // ), // SizedBox( // width: Get.width * .95, // child: Row( // mainAxisAlignment: // MainAxisAlignment.center, // children: [ // controller.isCashSelectedBeforeConfirmRide == // false // ? MyElevatedButton( // title: 'Next'.tr, // onPressed: () { // controller // .changeCashConfirmPageShown(); // }, // ) // : // // controller.isPassengerChosen == // // false // // ? MyElevatedButton( // // title: 'Next'.tr, // // onPressed: () { // // controller // // .onChangedPassengersChoose(); // // Get.defaultDialog( // // barrierDismissible: // // false, // // title: // // 'How Many Passengers?' // // .tr, // // titleStyle: // // AppStyle // // .title, // // content: // // Column( // // children: [ // // Text( // // 'Allowed up to 4 Passengers.' // // .tr, // // style: AppStyle // // .title, // // ), // // SizedBox( // // height: // // 200, // Set the desired height here // // child: // // CupertinoPicker( // // itemExtent: // // 32, // // onSelectedItemChanged: // // (index) { // // controller.onChangedPassengerCount(index + // // 1); // // }, // // children: [ // // Text('1 Passenger'.tr), // // Text('2 Passengers'.tr), // // Text('3 Passengers'.tr), // // Text('4 Passengers'.tr), // // ], // // ), // // ), // // MyElevatedButton( // // title: // // 'Back', // // onPressed: // // () => // // Get.back(), // // ) // // ], // // ), // // ); // // }, // // ) // // : // MyElevatedButton( // title: 'Confirm Selection' // .tr, // onPressed: () { // controller // .confirmRideForFirstDriver(); // }, // ), // ], // ), // ) // ], // ), // ), // ), // ), // ], // ), // ), // ], ), ) : const SizedBox()); } class Details extends StatelessWidget { const Details({ super.key, }); @override Widget build(BuildContext context) { return GetBuilder( builder: (controller) => Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Text( '${'Distance is'.tr} ${controller.distance.toStringAsFixed(2)} KM', style: AppStyle.title, ), Text( '${'Duration is'.tr} ${controller.data[0]['duration']['text']}', style: AppStyle.title, ), ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Text( 'Cost for .21/km ${controller.costDistance.toStringAsFixed(2)} ', style: AppStyle.title, ), Text( '${'Cost Duration'.tr} ${controller.averageDuration.toStringAsFixed(2)} is ${controller.costDuration.toStringAsFixed(2)} ', style: AppStyle.title, ), ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Text( 'Total Driver ${controller.totalDriver.toStringAsFixed(2)}', style: AppStyle.title, ), Text( 'totaME ${controller.totalME.toStringAsFixed(2)} ', style: AppStyle.title, ), ], ), Text( 'Cost for passenger ${controller.totalPassenger.toStringAsFixed(2)} ', style: AppStyle.title, ), ], )); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/searching_captain_window.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/home/map_passenger_controller.dart'; // --- الويدجت الرئيسية بالتصميم الجديد --- class SearchingCaptainWindow extends StatefulWidget { const SearchingCaptainWindow({super.key}); @override State createState() => _SearchingCaptainWindowState(); } class _SearchingCaptainWindowState extends State with SingleTickerProviderStateMixin { late AnimationController _animationController; @override void initState() { super.initState(); _animationController = AnimationController( vsync: this, duration: const Duration(seconds: 2), )..repeat(); } @override void dispose() { _animationController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { // [تعديل 1] نستخدم Obx للاستماع إلى التغييرات في حالة الرحلة return Obx(() { // ابحث عن الكنترولر مرة واحدة final controller = Get.find(); // [تعديل 2] شرط الإظهار يعتمد الآن على حالة الرحلة مباشرة final bool isVisible = controller.currentRideState.value == RideState.searching; return AnimatedPositioned( duration: const Duration(milliseconds: 300), curve: Curves.easeInOut, bottom: isVisible ? 0 : -Get.height * 0.45, // زيادة الارتفاع قليلاً left: 0, right: 0, child: Container( padding: const EdgeInsets.fromLTRB(20, 20, 20, 16), decoration: BoxDecoration( color: AppColor.secondaryColor, borderRadius: const BorderRadius.only( topLeft: Radius.circular(24), topRight: Radius.circular(24), ), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.2), blurRadius: 20, offset: const Offset(0, -5), ), ], ), child: Column( mainAxisSize: MainAxisSize.min, children: [ // --- 1. أنيميشن الرادار --- _buildRadarAnimation(controller), const SizedBox(height: 20), // --- 2. زر الإلغاء --- SizedBox( width: double.infinity, child: OutlinedButton( onPressed: () { // [تعديل 3] استدعاء دالة الإلغاء الموحدة controller.cancelRide(); }, style: OutlinedButton.styleFrom( foregroundColor: AppColor.writeColor, side: BorderSide(color: AppColor.writeColor.withOpacity(0.3)), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12)), padding: const EdgeInsets.symmetric(vertical: 12), ), child: Text('Cancel Search'.tr), ), ), ], ), ), ); }); } // --- ويدجت بناء أنيميشن الرادار --- Widget _buildRadarAnimation(MapPassengerController controller) { return SizedBox( height: 180, // ارتفاع ثابت لمنطقة الأنيميشن child: Stack( alignment: Alignment.center, children: [ // --- دوائر الرادار المتحركة (تبقى كما هي) --- ...List.generate(3, (index) { return FadeTransition( opacity: Tween(begin: 1.0, end: 0.0).animate( CurvedAnimation( parent: _animationController, curve: Interval((index) / 3, 1.0, curve: Curves.easeInOut), ), ), child: ScaleTransition( scale: Tween(begin: 0.3, end: 1.0).animate( CurvedAnimation( parent: _animationController, curve: Interval((index) / 3, 1.0, curve: Curves.easeInOut), ), ), child: Container( decoration: BoxDecoration( shape: BoxShape.circle, border: Border.all( color: AppColor.primaryColor.withOpacity(0.7), width: 2, ), ), ), ), ); }), // --- المحتوى في المنتصف --- Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( // [تعديل 4] النص يأتي مباشرة من الكنترولر controller.driversStatusForSearchWindow, style: AppStyle.headTitle.copyWith(fontSize: 20), textAlign: TextAlign.center, ), const SizedBox(height: 8), Text( 'Searching for the nearest captain...'.tr, style: AppStyle.subtitle .copyWith(color: AppColor.writeColor.withOpacity(0.7)), textAlign: TextAlign.center, ), const SizedBox(height: 16), // --- [!! تعديل جوهري !!] --- // لم نعد بحاجة لـ buildTimerForIncrease // المؤقت الرئيسي في الكنترولر هو من يقرر متى يعرض الحوار // وهذا الجزء من الواجهة أصبح "غبياً" (لا يحتوي على منطق) // الكنترولر سيستدعي _showIncreaseFeeDialog مباشرة SizedBox( height: 40, width: 40, child: Stack( fit: StackFit.expand, children: [ CircularProgressIndicator( strokeWidth: 3, color: AppColor.primaryColor, backgroundColor: AppColor.primaryColor.withOpacity(0.2), ), Center( child: Icon( Icons.search, color: AppColor.writeColor.withOpacity(0.8), ), ), ], ), ), ], ), ], ), ); } } // --- [!! تعديل جوهري !!] --- // تم حذف دالة `buildTimerForIncrease` بالكامل. // تم حذف دالة `_showIncreaseFeeDialog` من هذا الملف. // لماذا؟ لأن الكنترولر الآن هو المسؤول الوحيد عن إظهار الحوار. // دالة `_showIncreaseFeeDialog` موجودة بالفعل داخل `map_passenger_controller.dart` // وسيتم استدعاؤها من `_handleRideState` عند انتهاء مهلة الـ 90 ثانية. // // --- الويدجت الرئيسية بالتصميم الجديد --- // class SearchingCaptainWindow extends StatefulWidget { // const SearchingCaptainWindow({super.key}); // @override // State createState() => _SearchingCaptainWindowState(); // } // class _SearchingCaptainWindowState extends State // with SingleTickerProviderStateMixin { // late AnimationController _animationController; // @override // void initState() { // super.initState(); // _animationController = AnimationController( // vsync: this, // duration: const Duration(seconds: 2), // )..repeat(); // } // @override // void dispose() { // _animationController.dispose(); // super.dispose(); // } // @override // Widget build(BuildContext context) { // return GetBuilder( // builder: (controller) { // return AnimatedPositioned( // duration: const Duration(milliseconds: 300), // curve: Curves.easeInOut, // bottom: controller.isSearchingWindow ? 0 : -Get.height * 0.4, // left: 0, // right: 0, // child: Container( // padding: const EdgeInsets.fromLTRB(20, 20, 20, 16), // decoration: BoxDecoration( // color: AppColor.secondaryColor, // borderRadius: const BorderRadius.only( // topLeft: Radius.circular(24), // topRight: Radius.circular(24), // ), // boxShadow: [ // BoxShadow( // color: Colors.black.withOpacity(0.2), // blurRadius: 20, // offset: const Offset(0, -5), // ), // ], // ), // child: Column( // mainAxisSize: MainAxisSize.min, // children: [ // // --- 1. أنيميشن الرادار --- // _buildRadarAnimation(controller), // const SizedBox(height: 20), // // --- 2. زر الإلغاء --- // SizedBox( // width: double.infinity, // child: OutlinedButton( // onPressed: () { // // --- نفس منطقك للإلغاء --- // controller.changeCancelRidePageShow(); // }, // style: OutlinedButton.styleFrom( // foregroundColor: AppColor.writeColor, // side: BorderSide( // color: AppColor.writeColor.withOpacity(0.3)), // shape: RoundedRectangleBorder( // borderRadius: BorderRadius.circular(12)), // padding: const EdgeInsets.symmetric(vertical: 12), // ), // child: Text('Cancel Search'.tr), // ), // ), // ], // ), // ), // ); // }, // ); // } // // --- ويدجت بناء أنيميشن الرادار --- // Widget _buildRadarAnimation(MapPassengerController controller) { // return SizedBox( // height: 180, // ارتفاع ثابت لمنطقة الأنيميشن // child: Stack( // alignment: Alignment.center, // children: [ // // --- دوائر الرادار المتحركة --- // ...List.generate(3, (index) { // return FadeTransition( // opacity: Tween(begin: 1.0, end: 0.0).animate( // CurvedAnimation( // parent: _animationController, // curve: Interval((index) / 3, 1.0, curve: Curves.easeInOut), // ), // ), // child: ScaleTransition( // scale: Tween(begin: 0.3, end: 1.0).animate( // CurvedAnimation( // parent: _animationController, // curve: Interval((index) / 3, 1.0, curve: Curves.easeInOut), // ), // ), // child: Container( // decoration: BoxDecoration( // shape: BoxShape.circle, // border: Border.all( // color: AppColor.primaryColor.withOpacity(0.7), // width: 2, // ), // ), // ), // ), // ); // }), // // --- المحتوى في المنتصف --- // Column( // mainAxisAlignment: MainAxisAlignment.center, // children: [ // Text( // controller.driversStatusForSearchWindow, // style: AppStyle.headTitle.copyWith(fontSize: 20), // textAlign: TextAlign.center, // ), // const SizedBox(height: 8), // Text( // 'Searching for the nearest captain...'.tr, // style: AppStyle.subtitle // .copyWith(color: AppColor.writeColor.withOpacity(0.7)), // textAlign: TextAlign.center, // ), // const SizedBox(height: 16), // // --- استدعاء نفس دالة المؤقت الخاصة بك --- // buildTimerForIncrease(controller), // ], // ), // ], // ), // ); // } // } // // --- نفس دالة المؤقت الخاصة بك مع تعديلات شكلية بسيطة --- // Widget buildTimerForIncrease(MapPassengerController mapPassengerController) { // return StreamBuilder( // stream: Stream.periodic(const Duration(seconds: 1)) // .map((_) => ++mapPassengerController.currentTimeSearchingCaptainWindow), // initialData: 0, // builder: (context, snapshot) { // if (snapshot.hasData && snapshot.data! > 45) { // // --- عرض زر زيادة الأجرة بنفس منطقك القديم --- // return TextButton( // onPressed: () => // _showIncreaseFeeDialog(context, mapPassengerController), // child: Text( // "No one accepted? Try increasing the fare.".tr, // style: AppStyle.title.copyWith( // color: AppColor.primaryColor, // decoration: TextDecoration.underline), // textAlign: TextAlign.center, // ), // ); // } // final double progress = (snapshot.data ?? 0).toDouble() / 30.0; // return SizedBox( // height: 40, // width: 40, // child: Stack( // fit: StackFit.expand, // children: [ // CircularProgressIndicator( // value: progress, // strokeWidth: 3, // color: AppColor.primaryColor, // backgroundColor: AppColor.primaryColor.withOpacity(0.2), // ), // Center( // child: Text( // '${snapshot.data ?? 0}', // style: AppStyle.title.copyWith( // color: AppColor.writeColor, fontWeight: FontWeight.bold), // ), // ), // ], // ), // ); // }, // ); // } // // --- دالة لعرض نافذة زيادة الأجرة (مأخوذة من منطقك القديم) --- // void _showIncreaseFeeDialog( // BuildContext context, MapPassengerController mapPassengerController) { // Get.defaultDialog( // barrierDismissible: false, // title: "Increase Your Trip Fee (Optional)".tr, // titleStyle: AppStyle.title, // content: Column( // children: [ // Text( // "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers." // .tr, // style: AppStyle.subtitle, // textAlign: TextAlign.center, // ), // const SizedBox(height: 16), // Row( // mainAxisAlignment: MainAxisAlignment.center, // children: [ // IconButton( // onPressed: () { // mapPassengerController.increasFeeFromPassenger.text = // (mapPassengerController.totalPassenger + 3) // .toStringAsFixed(1); // mapPassengerController.update(); // }, // icon: const Icon(Icons.add_circle, // size: 40, color: AppColor.greenColor), // ), // SizedBox( // width: 100, // child: Form( // key: mapPassengerController.increaseFeeFormKey, // child: MyTextForm( // controller: mapPassengerController.increasFeeFromPassenger, // label: // mapPassengerController.totalPassenger.toStringAsFixed(2), // hint: // mapPassengerController.totalPassenger.toStringAsFixed(2), // type: TextInputType.number, // ), // ), // ), // IconButton( // onPressed: () { // mapPassengerController.increasFeeFromPassenger.text = // (mapPassengerController.totalPassenger - 3) // .toStringAsFixed(1); // mapPassengerController.update(); // }, // icon: const Icon(Icons.remove_circle, // size: 40, color: AppColor.redColor), // ), // ], // ), // ], // ), // actions: [ // TextButton( // child: Text("No, thanks".tr, // style: const TextStyle(color: AppColor.redColor)), // onPressed: () { // Get.back(); // // mapPassengerController.cancelRide(); // mapPassengerController.changeCancelRidePageShow(); // }, // ), // ElevatedButton( // style: ElevatedButton.styleFrom(backgroundColor: AppColor.greenColor), // child: Text("Increase Fee".tr), // onPressed: () => // mapPassengerController.increaseFeeByPassengerAndReOrder(), // ), // ], // ); // } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/passengerRideLoctionWidget.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'dart:ui'; // مهم لإضافة تأثير الضبابية import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/home/map_passenger_controller.dart'; // --- الويدجت الرئيسية بالتصميم الجديد --- class PassengerRideLocationWidget extends StatefulWidget { const PassengerRideLocationWidget({super.key}); @override State createState() => _PassengerRideLocationWidgetState(); } class _PassengerRideLocationWidgetState extends State with SingleTickerProviderStateMixin { late AnimationController _animationController; late Animation _animation; @override void initState() { super.initState(); // --- إعداد الأنيميشن للأيقونة --- _animationController = AnimationController( vsync: this, duration: const Duration(milliseconds: 1200), )..repeat(reverse: true); // التكرار بشكل عكسي لإنشاء تأثير النبض _animation = Tween(begin: 0.9, end: 1.1).animate( CurvedAnimation(parent: _animationController, curve: Curves.easeInOut), ); } @override void dispose() { _animationController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return GetBuilder(builder: (controller) { // --- نفس شرط الإظهار الخاص بك --- return AnimatedPositioned( duration: const Duration(milliseconds: 300), curve: Curves.easeOut, bottom: controller.isPassengerRideLocationWidget ? 20 : -100, // حركة دخول وخروج ناعمة left: 20, right: 20, child: ClipRRect( borderRadius: BorderRadius.circular(50.0), // حواف دائرية بالكامل child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 8.0, sigmaY: 8.0), // تأثير زجاجي child: Container( padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 14), decoration: BoxDecoration( color: AppColor.secondaryColor.withOpacity(0.85), borderRadius: BorderRadius.circular(50.0), border: Border.all(color: AppColor.writeColor.withOpacity(0.2)), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ // --- أيقونة متحركة لجذب الانتباه --- ScaleTransition( scale: _animation, child: Icon( Icons.location_on, color: AppColor.primaryColor, size: 28, ), ), const SizedBox(width: 12), // --- نص إرشادي واضح --- Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "Set pickup location".tr, style: AppStyle.title .copyWith(fontWeight: FontWeight.bold), ), Text( "Move the map to adjust the pin".tr, style: AppStyle.subtitle.copyWith( color: AppColor.writeColor.withOpacity(0.7), ), ), ], ), ], ), ), ), ), ); }); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/menu_map_page.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../../constant/box_name.dart'; import '../../../constant/colors.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../../main.dart'; class MenuIconMapPageWidget extends StatelessWidget { const MenuIconMapPageWidget({ super.key, }); @override Widget build(BuildContext context) { return GetBuilder( builder: (controller) => Positioned( top: Get.height * .008, left: box.read(BoxName.lang) != 'ar' ? 5 : null, right: box.read(BoxName.lang) == 'ar' ? 5 : null, child: Container( decoration: BoxDecoration( shape: BoxShape.circle, color: AppColor.secondaryColor, border: Border.all(color: AppColor.accentColor)), child: AnimatedCrossFade( sizeCurve: Curves.bounceOut, duration: const Duration( milliseconds: 300), // Adjust the duration as needed crossFadeState: controller.heightMenuBool ? CrossFadeState.showFirst : CrossFadeState.showSecond, firstChild: IconButton( onPressed: () { controller.getDrawerMenu(); }, icon: const Icon( Icons.close, color: AppColor.primaryColor, ), ), secondChild: IconButton( onPressed: () { controller.getDrawerMenu(); }, icon: const Icon( Icons.menu, color: AppColor.accentColor, ), ), ), ), )); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/car_details_widget_to_go.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/main.dart'; import 'package:Intaleq/views/home/profile/passenger_profile_page.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:Intaleq/views/widgets/my_textField.dart'; import 'package:intl/intl.dart'; import 'dart:ui'; import '../../../constant/info.dart'; import '../../../controller/functions/tts.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../../print.dart'; import '../../widgets/mydialoug.dart'; // --- CarType class (Unchanged) --- class CarType { final String carType; final String carDetail; final String image; bool isSelected = false; CarType( {required this.carType, required this.carDetail, required this.image}); } // --- List of Car Types (Unchanged) --- List carTypes = [ CarType( carType: 'Fixed Price', carDetail: 'Closest & Cheapest'.tr, image: 'assets/images/carspeed.png'), CarType( carType: 'Comfort', carDetail: 'Comfort choice'.tr, image: 'assets/images/blob.png'), CarType( carType: 'Electric', carDetail: 'Quiet & Eco-Friendly'.tr, image: 'assets/images/electric.png'), CarType( carType: 'Lady', carDetail: 'Lady Captain for girls'.tr, image: 'assets/images/lady.png'), CarType( carType: 'Van', carDetail: 'Van for familly'.tr, image: 'assets/images/bus.png'), CarType( carType: 'Rayeh Gai', carDetail: "Best choice for cities".tr, image: 'assets/images/roundtrip.png'), ]; // --- Main Widget --- class CarDetailsTypeToChoose extends StatelessWidget { CarDetailsTypeToChoose({super.key}); final textToSpeechController = Get.put(TextToSpeechController()); void _prepareCarTypes(MapPassengerController controller) { if (controller.distance > 23) { if (!carTypes.any((car) => car.carType == 'Rayeh Gai')) { carTypes.add(CarType( carType: 'Rayeh Gai', carDetail: "Best choice for cities".tr, image: 'assets/images/roundtrip.png')); } } else { carTypes.removeWhere((car) => car.carType == 'Rayeh Gai'); } } @override Widget build(BuildContext context) { return GetBuilder(builder: (controller) { _prepareCarTypes(controller); if (!(controller.isBottomSheetShown) && controller.rideConfirm == false) { return const SizedBox.shrink(); } // Main Bottom Sheet Design return Positioned( bottom: 0, left: 0, right: 0, child: Container( decoration: BoxDecoration( color: AppColor .secondaryColor, // Solid background for better performance borderRadius: const BorderRadius.only( topLeft: Radius.circular(30), topRight: Radius.circular(30), ), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.15), blurRadius: 20, spreadRadius: 5, offset: const Offset(0, -5), ), ], ), child: Column( mainAxisSize: MainAxisSize.min, children: [ // Drag Handle Center( child: Container( width: 50, height: 5, margin: const EdgeInsets.symmetric(vertical: 12), decoration: BoxDecoration( color: Colors.grey.withOpacity(0.3), borderRadius: BorderRadius.circular(10), ), ), ), // Header (Title + Trip Info) _buildModernHeader(controller), // Warning Message (if any) _buildNegativeBalanceWarning(controller), // Car List SizedBox( height: 165, // Fixed height for consistency child: ListView.separated( physics: const BouncingScrollPhysics(), scrollDirection: Axis.horizontal, padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), itemCount: carTypes.length, separatorBuilder: (context, index) => const SizedBox(width: 12), itemBuilder: (context, index) { final carType = carTypes[index]; final isSelected = controller.selectedIndex == index; return _buildVerticalCarCard( context, controller, carType, isSelected, index); }, ), ), // Promo Code Button _buildPromoButton(context, controller), // Safe Area spacing SizedBox(height: MediaQuery.of(context).padding.bottom + 10), ], ), ), ); }); } // --- UI Components --- Widget _buildModernHeader(MapPassengerController controller) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 5), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Text( 'Choose your ride'.tr, style: AppStyle.headTitle.copyWith( fontSize: 20, fontWeight: FontWeight.w800, letterSpacing: 0.5), ), ), // Trip Info Pill Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), decoration: BoxDecoration( color: AppColor.primaryColor.withOpacity(0.08), borderRadius: BorderRadius.circular(20), border: Border.all(color: AppColor.primaryColor.withOpacity(0.2)), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon(Icons.directions_car_filled_outlined, size: 16, color: AppColor.primaryColor), const SizedBox(width: 6), Text( '${controller.distance.toStringAsFixed(1)} ${'KM'.tr}', style: AppStyle.subtitle.copyWith( fontSize: 13, fontWeight: FontWeight.bold, color: AppColor.primaryColor), ), Container( margin: const EdgeInsets.symmetric(horizontal: 8), height: 12, width: 1, color: Colors.grey.shade400), Icon(Icons.access_time_filled_rounded, size: 16, color: AppColor.primaryColor), const SizedBox(width: 6), Text( controller.hours > 0 ? '${controller.hours}h ${controller.minutes}m' : '${controller.minutes} min', style: AppStyle.subtitle.copyWith( fontSize: 13, fontWeight: FontWeight.bold, color: AppColor.primaryColor), ), ], ), ) ], ), ); } Widget _buildVerticalCarCard( BuildContext context, MapPassengerController controller, CarType carType, bool isSelected, int index) { return GestureDetector( onTap: () { controller.selectCarFromList(index); _showCarDetailsDialog( context, controller, carType, textToSpeechController); }, child: AnimatedContainer( duration: const Duration(milliseconds: 250), curve: Curves.easeInOut, width: 110, decoration: BoxDecoration( color: isSelected ? AppColor.primaryColor.withOpacity(0.05) : Colors.white, borderRadius: BorderRadius.circular(18), border: Border.all( color: isSelected ? AppColor.primaryColor : Colors.grey.withOpacity(0.2), width: isSelected ? 2.0 : 1.0, ), boxShadow: isSelected ? [ BoxShadow( color: AppColor.primaryColor.withOpacity(0.2), blurRadius: 8, offset: const Offset(0, 4), ) ] : [ BoxShadow( color: Colors.grey.withOpacity(0.1), blurRadius: 4, offset: const Offset(0, 2), ) ], ), child: Stack( alignment: Alignment.center, children: [ Padding( padding: const EdgeInsets.all(8.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // Image with subtle scaling if selected AnimatedScale( scale: isSelected ? 1.1 : 1.0, duration: const Duration(milliseconds: 250), child: Image.asset( carType.image, height: 50, fit: BoxFit.contain, ), ), const SizedBox(height: 12), // Car Type Text FittedBox( fit: BoxFit.scaleDown, child: Text( carType.carType.tr, style: AppStyle.subtitle.copyWith( fontWeight: isSelected ? FontWeight.w800 : FontWeight.w600, fontSize: 14, color: isSelected ? AppColor.primaryColor : Colors.black87, ), maxLines: 1, ), ), const SizedBox(height: 6), // Price Tag Container( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), decoration: BoxDecoration( color: isSelected ? AppColor.primaryColor : Colors.grey.shade100, borderRadius: BorderRadius.circular(12), ), child: FittedBox( child: Text( '${_getPassengerPriceText(carType, controller)} ${'SYP'.tr}', style: TextStyle( fontSize: 12, fontWeight: FontWeight.bold, color: isSelected ? Colors.white : Colors.black87, ), ), ), ), ], ), ), // Checkmark Badge for Selected Item if (isSelected) Positioned( top: 8, right: 8, child: Container( padding: const EdgeInsets.all(2), decoration: const BoxDecoration( color: AppColor.primaryColor, shape: BoxShape.circle, ), child: const Icon(Icons.check, size: 12, color: Colors.white), ), ), ], ), ), ); } Widget _buildPromoButton( BuildContext context, MapPassengerController controller) { if (controller.promoTaken) return const SizedBox.shrink(); return Padding( padding: const EdgeInsets.fromLTRB(20, 10, 20, 5), child: Material( color: Colors.transparent, child: InkWell( onTap: () => _showPromoCodeDialog(context, controller), borderRadius: BorderRadius.circular(14), child: Container( padding: const EdgeInsets.symmetric(vertical: 14, horizontal: 16), decoration: BoxDecoration( color: Colors.grey.withOpacity(0.05), borderRadius: BorderRadius.circular(14), border: Border.all(color: Colors.grey.withOpacity(0.2)), ), child: Row( children: [ Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: AppColor.primaryColor.withOpacity(0.1), shape: BoxShape.circle), child: Icon(Icons.confirmation_number_outlined, color: AppColor.primaryColor, size: 20), ), const SizedBox(width: 14), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Promo Code'.tr, style: AppStyle.subtitle.copyWith( fontSize: 14, fontWeight: FontWeight.bold), ), Text( 'Have a promo code?'.tr, style: AppStyle.subtitle.copyWith( fontSize: 12, color: Colors.grey.shade600), ), ], ), ), Icon(Icons.arrow_forward_ios_rounded, size: 16, color: Colors.grey.shade400) ], ), ), ), ), ); } Widget _buildNegativeBalanceWarning(MapPassengerController controller) { final passengerWallet = double.tryParse(box.read(BoxName.passengerWalletTotal) ?? '0.0') ?? 0.0; if (passengerWallet < 0.0) { return Container( margin: const EdgeInsets.symmetric(horizontal: 20, vertical: 8), padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: AppColor.redColor.withOpacity(0.1), borderRadius: BorderRadius.circular(12), border: Border.all(color: AppColor.redColor.withOpacity(0.3)), ), child: Row( children: [ Icon(Icons.info_outline_rounded, color: AppColor.redColor, size: 24), const SizedBox(width: 12), Expanded( child: Text( '${'You have a negative balance of'.tr} ${passengerWallet.toStringAsFixed(2)} ${'SYP'.tr}.', style: AppStyle.subtitle.copyWith( color: AppColor.redColor, fontWeight: FontWeight.w600, fontSize: 13), ), ), ], ), ); } return const SizedBox.shrink(); } // --- Logic Helpers (Copied from your previous code to ensure functionality) --- String _getPassengerPriceText( CarType carType, MapPassengerController mapPassengerController) { double rawPrice; switch (carType.carType) { case 'Comfort': rawPrice = mapPassengerController.totalPassengerComfort; break; case 'Fixed Price': rawPrice = mapPassengerController.totalPassengerSpeed; break; case 'Electric': rawPrice = mapPassengerController.totalPassengerElectric; break; case 'Awfar Car': rawPrice = mapPassengerController.totalPassengerBalash; break; case 'Scooter': case 'Pink Bike': rawPrice = mapPassengerController.totalPassengerScooter; break; case 'Van': rawPrice = mapPassengerController.totalPassengerVan; break; case 'Lady': rawPrice = mapPassengerController.totalPassengerLady; break; case 'Rayeh Gai': rawPrice = mapPassengerController.totalPassengerRayehGai; break; default: return '...'; } final int roundedPrice = rawPrice.round(); final formatter = NumberFormat.decimalPattern(); return formatter.format(roundedPrice); } // --- Dialogs (Styled consistently) --- void _showPromoCodeDialog( BuildContext context, MapPassengerController controller) { Get.dialog( Dialog( shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0)), backgroundColor: AppColor.secondaryColor, elevation: 10, child: Padding( padding: const EdgeInsets.all(24.0), child: Form( key: controller.promoFormKey, child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Icon(Icons.local_activity_outlined, size: 40, color: AppColor.primaryColor), const SizedBox(height: 16), Text( 'Apply Promo Code'.tr, textAlign: TextAlign.center, style: AppStyle.headTitle.copyWith(fontSize: 20), ), const SizedBox(height: 8), Text( 'Enter your code below to apply the discount.'.tr, textAlign: TextAlign.center, style: AppStyle.subtitle .copyWith(color: Colors.grey.shade600, fontSize: 14), ), const SizedBox(height: 24), MyTextForm( controller: controller.promo, label: 'Promo Code'.tr, hint: 'Enter your promo code'.tr, type: TextInputType.text, ), const SizedBox(height: 24), Row( children: [ Expanded( child: TextButton( onPressed: () => Get.back(), style: TextButton.styleFrom( foregroundColor: Colors.grey, ), child: Text('Cancel'.tr), ), ), const SizedBox(width: 16), Expanded( child: MyElevatedButton( title: 'Apply'.tr, onPressed: () { if (controller.promoFormKey.currentState! .validate()) { controller.applyPromoCodeToPassenger(context); Get.back(); } }, ), ), ], ), ], ), ), ), ), barrierColor: Colors.black.withOpacity(0.5), ); } void _showCarDetailsDialog( BuildContext context, MapPassengerController mapPassengerController, CarType carType, TextToSpeechController textToSpeechController) { Get.dialog( Dialog( shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(28.0)), backgroundColor: Colors.transparent, child: Stack( clipBehavior: Clip.none, alignment: Alignment.topCenter, children: [ Container( margin: const EdgeInsets.only(top: 60), padding: const EdgeInsets.fromLTRB(24, 70, 24, 24), decoration: BoxDecoration( color: AppColor.secondaryColor, borderRadius: BorderRadius.circular(28.0), ), child: Column( mainAxisSize: MainAxisSize.min, children: [ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( carType.carType.tr, style: AppStyle.headTitle.copyWith(fontSize: 22), ), const SizedBox(width: 8), InkWell( onTap: () => textToSpeechController.speakText( _getCarDescription( mapPassengerController, carType)), borderRadius: BorderRadius.circular(20), child: Padding( padding: const EdgeInsets.all(4.0), child: Icon(Icons.volume_up_rounded, color: AppColor.primaryColor, size: 24), ), ) ], ), const SizedBox(height: 16), Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.grey.withOpacity(0.05), borderRadius: BorderRadius.circular(16)), child: Text( _getCarDescription(mapPassengerController, carType), textAlign: TextAlign.center, style: AppStyle.subtitle.copyWith( color: Colors.black87, fontSize: 15, height: 1.4, ), ), ), const SizedBox(height: 24), Row( children: [ Expanded( child: TextButton( onPressed: () => Get.back(), child: Text('Back'.tr, style: TextStyle(color: Colors.grey.shade600)), ), ), const SizedBox(width: 12), Expanded( flex: 2, child: MyElevatedButton( kolor: AppColor.greenColor, title: 'Select This Ride'.tr, onPressed: () { Get.back(); _handleCarSelection( context, mapPassengerController, carType); }, ), ), ], ), ], ), ), Positioned( top: 0, child: Hero( tag: 'car_${carType.carType}', child: Image.asset(carType.image, height: 130), ), ), ], ), ), barrierColor: Colors.black.withOpacity(0.6), ); } // --- Logic Helpers (Keep unchanged) --- String _getCarDescription( MapPassengerController mapPassengerController, CarType carType) { switch (carType.carType) { case 'Comfort': return mapPassengerController.endNameAddress .toLowerCase() .contains("airport".tr) ? "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price." .tr : 'Best choice for comfort car and flexible route and stops point' .tr; case 'Fixed Price': return 'This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route' .tr; case 'Electric': return 'Travel in a modern, silent electric car. A premium, eco-friendly choice for a smooth ride.' .tr; case 'Scooter': case 'Van': return "Spacious van service ideal for families and groups. Comfortable, safe, and cost-effective travel together." .tr; case 'Pink Bike': return 'This is for delivery or a motorcycle.'.tr; case 'Mishwar Vip': return "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire" .tr; case 'Awfar Car': return "Old and affordable, perfect for budget rides.".tr; case 'Lady': return "This trip is for women only".tr; case 'Rayeh Gai': return "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable." .tr; default: return ''; } } void _handleCarSelection(BuildContext context, MapPassengerController mapPassengerController, CarType carType) { box.write(BoxName.carType, carType.carType); mapPassengerController.totalPassenger = _getOriginalPrice(carType, mapPassengerController); if (carType.carType == 'Mishwar Vip') { Get.back(); mapPassengerController.mishwariOption(); } else if (carType.carType == 'Lady') { if (box.read(BoxName.gender).toString() != '') { mapPassengerController.isBottomSheetShown = false; mapPassengerController.update(); mapPassengerController.changeCashConfirmPageShown(); } else { MyDialog().getDialog('Idintify gender', 'You should ideintify your gender for this type of trip!'.tr, () { Get.to(() => PassengerProfilePage()); }); } } else if (carType.carType == 'Rayeh Gai') { Get.defaultDialog( barrierDismissible: false, title: "Select betweeen types".tr, content: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ _buildRayehGaiOption(mapPassengerController, 'Awfar Car', mapPassengerController.totalPassengerRayehGaiBalash), _buildRayehGaiOption(mapPassengerController, 'Fixed Price', mapPassengerController.totalPassengerRayehGai), _buildRayehGaiOption(mapPassengerController, 'Comfort', mapPassengerController.totalPassengerRayehGaiComfort) ]), cancel: MyElevatedButton( kolor: AppColor.redColor, title: 'Cancel'.tr, onPressed: () => Get.back()), confirm: MyElevatedButton( kolor: AppColor.greenColor, title: 'Next'.tr, onPressed: () { mapPassengerController.isBottomSheetShown = false; mapPassengerController.update(); mapPassengerController.changeCashConfirmPageShown(); })); } else { mapPassengerController.isBottomSheetShown = false; mapPassengerController.update(); mapPassengerController.changeCashConfirmPageShown(); } } double _getOriginalPrice( CarType carType, MapPassengerController mapPassengerController) { switch (carType.carType) { case 'Comfort': return mapPassengerController.totalPassengerComfort; case 'Fixed Price': return mapPassengerController.totalPassengerSpeed; case 'Electric': return mapPassengerController.totalPassengerElectric; case 'Awfar Car': return mapPassengerController.totalPassengerBalash; case 'Van': return mapPassengerController.totalPassengerVan; case 'Lady': return mapPassengerController.totalPassengerLady; default: return 0.0; } } Widget _buildRayehGaiOption(MapPassengerController mapPassengerController, String carTypeName, double price) { return GestureDetector( onTap: () { Get.back(); mapPassengerController.totalPassenger = price; mapPassengerController.isBottomSheetShown = false; mapPassengerController.update(); mapPassengerController.changeCashConfirmPageShown(); }, child: Container( decoration: AppStyle.boxDecoration1, padding: const EdgeInsets.all(8.0), child: Column(children: [ Text(carTypeName.tr), Text(price.toStringAsFixed(0)) ])), ); } } // --- BurcMoney Widget (Unchanged) --- class BurcMoney extends StatelessWidget { const BurcMoney({super.key}); @override Widget build(BuildContext context) { return GetBuilder( builder: (mapPassengerController) { final passengerWallet = double.tryParse(box.read(BoxName.passengerWalletTotal) ?? '0.0') ?? 0.0; return mapPassengerController.data.isNotEmpty && mapPassengerController.isBottomSheetShown && !mapPassengerController.rideConfirm && passengerWallet < 0.0 ? Positioned( bottom: Get.height * .41, left: 16, right: 16, child: Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: AppColor.redColor.withOpacity(0.8), borderRadius: BorderRadius.circular(8), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 4, offset: const Offset(0, 2), ), ], ), child: Row( children: [ const Icon( Icons.warning_amber_rounded, color: Colors.white, size: 24, ), const SizedBox(width: 8), Expanded( child: Text.rich( TextSpan( children: [ TextSpan( text: '${'Negative Balance:'.tr} ', style: AppStyle.subtitle.copyWith( color: Colors.white, fontWeight: FontWeight.bold, ), ), TextSpan( text: '${'You have a balance of'.tr} ${passengerWallet.toStringAsFixed(2)} ${box.read(BoxName.countryCode) == 'Egypt' ? 'LE'.tr : 'SYP'.tr} ${'due to a previous trip.'.tr}', style: AppStyle.subtitle.copyWith( color: Colors.white, ), ), ], ), textAlign: TextAlign.start, ), ), const SizedBox(width: 8), GestureDetector( onTap: () async => await Get.find().speakText( '${'you have a negative balance of'.tr}${passengerWallet.toStringAsFixed(2)}${' in your'.tr} ${AppInformation.appName}${' wallet due to a previous trip.'.tr}'), child: const Icon( Icons.headphones, color: Colors.white, ), ), ], ), ), ) : const SizedBox(); }, ); } } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/form_serch_multiy_point.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/table_names.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/functions/toast.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../../main.dart'; GetBuilder formSearchPlaces(int index) { // DbSql sql = DbSql.instance; return GetBuilder( builder: (controller) => Column( children: [ Padding( padding: const EdgeInsets.all(16), child: Container( decoration: const BoxDecoration(color: AppColor.secondaryColor), child: TextField( decoration: InputDecoration( border: const OutlineInputBorder( borderRadius: BorderRadius.only(), gapPadding: 4, borderSide: BorderSide( color: AppColor.redColor, width: 2, )), suffixIcon: const Icon(Icons.search), hintText: controller.hintTextwayPoint0.tr, hintStyle: AppStyle.title, hintMaxLines: 1, prefixIcon: IconButton( onPressed: () { controller.allTextEditingPlaces[index].clear(); controller.clearPlaces(index); }, icon: Icon( Icons.clear, color: Colors.red[300], ), ), ), controller: controller.allTextEditingPlaces[index], onChanged: (value) { if (controller.allTextEditingPlaces[index].text.length > 5) { controller.getPlacesListsWayPoint(index); controller.changeHeightPlacesAll(index); } }, // onEditingComplete: () => controller.changeHeight(), ), ), ), controller.placeListResponseAll[index].isEmpty ? InkWell( onTap: () { controller.startLocationFromMapAll[index] = true; controller.wayPointIndex = index; Get.back(); // controller.changeMainBottomMenuMap(); controller.changeWayPointStopsSheet(); controller.changePickerShown(); }, child: Text( 'Choose from Map'.tr + ' $index'.tr, style: AppStyle.title.copyWith(color: AppColor.blueColor), ), ) : const SizedBox(), Container( height: controller.placeListResponseAll[index].isNotEmpty ? controller.height : 0, color: AppColor.secondaryColor, child: ListView.builder( itemCount: controller.placeListResponseAll[index].length, itemBuilder: (BuildContext context, int i) { var res = controller.placeListResponseAll[index][i]; return InkWell( onTap: () async { controller.changeHeightPlaces(); if (controller.currentLocationToFormPlacesAll[index] == true) { controller.newStartPointLocation = controller.passengerLocation; } else { controller.passengerLocation = controller.newStartPointLocation; } controller.convertHintTextPlaces(index, res); }, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 10), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Column( children: [ Image.network( res['icon'], width: 20, ), IconButton( onPressed: () async { await sql.insertMapLocation({ 'latitude': res['geometry'] ['location']['lat'], 'longitude': res['geometry'] ['location']['lng'], 'name': res['name'].toString(), 'rate': res['rating'].toString(), }, TableName.placesFavorite); Toast.show( context, '${res['name']} ${'Saved Sucssefully'.tr}', AppColor.primaryColor); }, icon: const Icon(Icons.favorite_border), ), ], ), Column( children: [ Text( res['name'].toString(), style: AppStyle.title, ), Text( res['vicinity'].toString(), style: AppStyle.subtitle, ), ], ), Column( children: [ Text( 'rate', style: AppStyle.subtitle, ), Text( res['rating'].toString(), style: AppStyle.subtitle, ), ], ), ], ), const Divider( thickness: 1, ) ], ), ), ); }, ), ) ], )); } ================================================== FILE PATH: ./lib/views/home/map_widget.dart/cancel_raide_page.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/home/map_passenger_controller.dart'; import '../../widgets/elevated_btn.dart'; void showCancelRideBottomSheet() { Get.bottomSheet( cancelRidePage(), backgroundColor: Colors.transparent, isScrollControlled: true, ); } GetBuilder cancelRidePage() { Get.put(MapPassengerController()); final List reasons = [ "I don't need a ride anymore".tr, "I was just trying the application".tr, "No driver accepted my request".tr, "I added the wrong pick-up/drop-off location".tr, "I don't have a reason".tr, "Other".tr, ]; return GetBuilder( builder: (controller) => controller.isCancelRidePageShown ? Container( height: Get.height * 0.6, padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: Colors.white, boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.2), offset: const Offset(0, 8), blurRadius: 16, ), ], borderRadius: BorderRadius.circular(20), ), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Can we know why you want to cancel Ride ?'.tr, style: AppStyle.title .copyWith(fontSize: 18, fontWeight: FontWeight.bold), textAlign: TextAlign.center, ), const SizedBox(height: 20), Expanded( child: ListView.separated( itemCount: reasons.length, separatorBuilder: (context, index) => const Divider(), itemBuilder: (context, index) { return ListTile( title: Text( reasons[index], style: AppStyle.title.copyWith(fontSize: 16), ), leading: Radio( value: index, groupValue: controller.selectedReason, onChanged: (int? value) { controller.selectReason(value!, reasons[index]); }, activeColor: AppColor.primaryColor, ), onTap: () { controller.selectReason(index, reasons[index]); }, ); }, ), ), const SizedBox(height: 20), MyElevatedButton( title: 'Cancel Ride'.tr, onPressed: () { if (controller.selectedReason == -1) { Get.snackbar( 'You Should be select reason.'.tr, '', snackPosition: SnackPosition.BOTTOM, backgroundColor: AppColor.redColor, colorText: Colors.white, ); } else { controller.cancelRide(); } }, ), ], ), ) : const SizedBox(), ); } ================================================== FILE PATH: ./lib/views/home/profile/complaint_page.dart ================================================== import 'dart:io'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/home/profile/complaint_controller.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; // سنستخدم السكافولد الخاص بك import 'package:Intaleq/views/widgets/mycircular.dart'; import 'package:Intaleq/views/widgets/mydialoug.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; // سنستخدم الزر الخاص بك import '../../../constant/colors.dart'; import '../../../controller/functions/audio_record1.dart'; // --- الويدجت الرئيسية بالتصميم الجديد --- class ComplaintPage extends StatelessWidget { ComplaintPage({super.key}); final ComplaintController complaintController = Get.put(ComplaintController()); final AudioRecorderController audioRecorderController = Get.put(AudioRecorderController()); @override Widget build(BuildContext context) { return MyScafolld( title: 'Submit a Complaint'.tr, isleading: true, body: [ GetBuilder( builder: (controller) { if (controller.isLoading && controller.feedBack.isEmpty) { // عرض التحميل المبدئي فقط return const MyCircularProgressIndicator(); } return Stack( children: [ Form( key: controller.formKey, child: ListView( padding: const EdgeInsets.all(16.0), children: [ // --- 1. بطاقة إدخال نص الشكوى --- _buildSectionCard( title: '1. Describe Your Issue'.tr, child: TextFormField( controller: controller.complaintController, decoration: InputDecoration( hintText: 'Enter your complaint here...'.tr, filled: true, fillColor: AppColor.secondaryColor.withOpacity(0.5), border: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide.none, ), contentPadding: const EdgeInsets.all(16), ), maxLines: 6, style: AppStyle.subtitle, validator: (value) { if (value == null || value.isEmpty) { return 'Please enter a description of the issue.' .tr; } return null; }, ), ), // --- 2. بطاقة إرفاق التسجيل الصوتي --- _buildSectionCard( title: '2. Attach Recorded Audio (Optional)'.tr, child: FutureBuilder>( future: audioRecorderController.getRecordedFiles(), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center( child: CircularProgressIndicator()); } if (snapshot.hasError || !snapshot.hasData || snapshot.data!.isEmpty) { return Center( child: Text('No audio files found.'.tr, style: AppStyle.subtitle)); } return Column( children: snapshot.data!.map((audioFilePath) { final audioFile = File(audioFilePath); final isUploaded = controller.audioLink.isNotEmpty && controller.audioLink.contains( audioFilePath.split('/').last); return ListTile( leading: Icon( isUploaded ? Icons.check_circle : Icons.mic, color: isUploaded ? AppColor.greenColor : AppColor.redColor), title: Text(audioFilePath.split('/').last, style: AppStyle.subtitle, overflow: TextOverflow.ellipsis), subtitle: isUploaded ? Text('Uploaded'.tr, style: const TextStyle( color: AppColor.greenColor)) : null, onTap: isUploaded ? null : () { MyDialogContent().getDialog( 'Confirm Attachment'.tr, Text( 'Attach this audio file?'.tr), () async { await controller .uploadAudioFile(audioFile); }); }, ); }).toList(), ); }, ), ), // --- 3. بطاقة تفاصيل الرحلة والرد --- _buildSectionCard( title: '3. Review Details & Response'.tr, child: Column( children: [ if (controller.feedBack.isNotEmpty) ...[ _buildDetailRow(Icons.calendar_today_outlined, 'Date'.tr, controller.feedBack[0]['date']), _buildDetailRow( Icons.monetization_on_outlined, 'Price'.tr, '${controller.feedBack[0]['price']}'), ], const Divider(height: 24), ListTile( leading: const Icon(Icons.support_agent_outlined, color: AppColor.primaryColor), title: Text("Intaleq's Response".tr, style: AppStyle.title), subtitle: Text( // --- تعديل هنا لعرض الرد من الخادم --- controller.passengerReport?['body'] ?.toString() ?? 'Awaiting response...'.tr, style: AppStyle.subtitle.copyWith(height: 1.5), ), ), ], ), ), // --- 4. زر الإرسال --- const SizedBox(height: 24), MyElevatedButton( kolor: AppColor.blueColor, title: 'Submit Complaint'.tr, onPressed: () async { // --- تعديل: استدعاء الدالة الجديدة فقط --- await controller.submitComplaintToServer(); }, ), const SizedBox(height: 24), // مسافة إضافية بالأسفل ], ), ), // --- عرض مؤشر التحميل فوق كل شيء --- if (controller.isLoading) Container( color: Colors.black.withOpacity(0.5), child: const MyCircularProgressIndicator(), ), ], ); }, ), ], ); } // --- ويدجت مساعدة لبناء البطاقات --- Widget _buildSectionCard({required String title, required Widget child}) { return Card( margin: const EdgeInsets.only(bottom: 20), elevation: 4, shadowColor: Colors.black.withOpacity(0.1), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), child: Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(title, style: AppStyle.headTitle.copyWith(fontSize: 18)), const SizedBox(height: 12), child, ], ), ), ); } // --- ويدجت مساعدة لعرض صفوف التفاصيل --- Widget _buildDetailRow(IconData icon, String label, String value) { return Padding( padding: const EdgeInsets.symmetric(vertical: 4.0), child: Row( children: [ Icon(icon, color: AppColor.writeColor.withOpacity(0.6), size: 20), const SizedBox(width: 12), Text('${label.tr}:', style: AppStyle.subtitle .copyWith(color: AppColor.writeColor.withOpacity(0.7))), const Spacer(), Text(value, style: AppStyle.title.copyWith(fontWeight: FontWeight.bold)), ], ), ); } } ================================================== FILE PATH: ./lib/views/home/profile/profile_captain.dart ================================================== import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/profile/captain_profile_controller.dart'; import 'package:Intaleq/main.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; import '../../../constant/api_key.dart'; import '../../widgets/my_textField.dart'; class ProfileCaptain extends StatelessWidget { const ProfileCaptain({super.key}); @override Widget build(BuildContext context) { Get.put(CaptainProfileController()); return MyScafolld( title: 'My Profile'.tr, body: [ GetBuilder( builder: (controller) => Padding( padding: const EdgeInsets.all(16.0), child: SingleChildScrollView( child: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ CircleAvatar( radius: Get.width * 0.26, backgroundColor: Colors.white, backgroundImage: CachedNetworkImageProvider( '${AK.serverPHP}/portrate_captain_image/${box.read(BoxName.driverID)}.jpg', ), ), const SizedBox(height: 8.0), Text( box.read(BoxName.nameDriver) + ' ' + box.read(BoxName.lastNameDriver).toString(), style: AppStyle.title), const SizedBox(height: 8.0), Text('${'Email is'.tr} :${box.read(BoxName.emailDriver)}', style: AppStyle.title), const SizedBox(height: 8.0), Text( '${'Phone Number is'.tr} :${box.read(BoxName.phoneDriver)}', style: AppStyle.title), const SizedBox(height: 8.0), Text( '${'Date of Birth is'.tr} :${box.read(BoxName.dobDriver)}', style: AppStyle.title), const SizedBox(height: 8.0), Text('${'Sex is '.tr}:${box.read(BoxName.sexDriver)}', style: AppStyle.title), const SizedBox(height: 8.0), const Divider( // height: 2, endIndent: 1, indent: 2, thickness: 2, ), const SizedBox(height: 8.0), Text('Car Details'.tr, style: AppStyle.headTitle2), const SizedBox(height: 8.0), Text('${'VIN is'.tr} :${box.read(BoxName.vin)}', style: AppStyle.title), const SizedBox(height: 8.0), Text('${'Color is '.tr} :${box.read(BoxName.color)}', style: AppStyle.title), const SizedBox(height: 8.0), Text( '${'Car Plate is '.tr} :${box.read(BoxName.carPlate)}', style: AppStyle.title), const SizedBox(height: 8.0), Text('${'Make is '.tr}:${box.read(BoxName.make)}', style: AppStyle.title), const SizedBox(height: 8.0), Text('${'Model is'.tr} :${box.read(BoxName.model)}', style: AppStyle.title), const SizedBox(height: 8.0), Text('${'Year is'.tr} :${box.read(BoxName.year)}', style: AppStyle.title), const SizedBox(height: 8.0), Text( '${'Expiration Date '.tr} :${box.read(BoxName.expirationDate)}', style: AppStyle.title), const SizedBox(height: 8.0), ], ), ), ), ), ) ], isleading: true, action: GetBuilder( builder: (controller) => IconButton( onPressed: () { Get.defaultDialog( title: 'Edit Your data'.tr, titleStyle: AppStyle.title, content: SizedBox( height: Get.height * .4, child: SingleChildScrollView( child: Column( children: [ MyTextForm( controller: controller.vin, hint: 'write vin for your car'.tr, label: 'VIN'.tr, type: TextInputType.emailAddress, ), MyTextForm( controller: controller.color, hint: 'write Color for your car'.tr, label: 'Color'.tr, type: TextInputType.emailAddress, ), MyTextForm( controller: controller.make, hint: 'write Make for your car'.tr, label: 'Make'.tr, type: TextInputType.emailAddress, ), MyTextForm( controller: controller.model, hint: 'write Model for your car'.tr, label: 'Model'.tr, type: TextInputType.emailAddress, ), MyTextForm( controller: controller.year, hint: 'write Year for your car'.tr, label: 'Year'.tr, type: TextInputType.number, ), MyTextForm( controller: controller.expirationDate, hint: 'write Expiration Date for your car'.tr, label: 'Expiration Date'.tr, type: TextInputType.datetime), MyElevatedButton( title: 'Update'.tr, onPressed: () => controller.updateFields()) ], ), ), )); }, icon: const Icon(Icons.edit), ), )); } } ================================================== FILE PATH: ./lib/views/home/profile/taarif_page.dart ================================================== import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/main.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; class TaarifPage extends StatelessWidget { const TaarifPage({super.key}); @override Widget build(BuildContext context) { return MyScafolld(isleading: true, title: 'Tariffs'.tr, body: [ Padding( padding: const EdgeInsets.symmetric(horizontal: 4), child: ListView( // mainAxisAlignment: MainAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.stretch, clipBehavior: Clip.hardEdge, children: [ Table( defaultVerticalAlignment: TableCellVerticalAlignment.middle, border: TableBorder.symmetric(), textBaseline: TextBaseline.alphabetic, children: [ TableRow( // decoration: AppStyle.boxDecoration, children: [ Text('Minimum fare'.tr, style: AppStyle.title), box.read(BoxName.countryCode) == 'Jordan' ? Text('1 ${'JOD'.tr}', style: AppStyle.title) : Text('20 ${'LE'.tr}', style: AppStyle.title), ], ), TableRow( children: [ Text('Maximum fare'.tr, style: AppStyle.title), box.read(BoxName.countryCode) == 'Jordan' ? Text('200 ${'JOD'.tr}', style: AppStyle.title) : Text('15000 ${'LE'.tr}', style: AppStyle.title), ], ), TableRow( children: [ Text('Flag-down fee'.tr, style: AppStyle.title), box.read(BoxName.countryCode) == 'Jordan' ? Text('0.47 ${'JOD'.tr}', style: AppStyle.title) : Text('15 ${'LE'.tr}', style: AppStyle.title), ], ), TableRow( children: [ box.read(BoxName.countryCode) == 'Jordan' ? Text('0.05 ${'JOD'.tr}/min and 0.21 ${'JOD'.tr}/km', style: AppStyle.title) : Text('1 ${'LE'.tr}/min and 4 ${'LE'.tr}/km', style: AppStyle.title), Text('Including Tax'.tr, style: AppStyle.title), ], ), ], ), const SizedBox(height: 10), Text('BookingFee'.tr, style: AppStyle.headTitle2), const SizedBox(height: 10), Text('10%', style: AppStyle.title), const SizedBox(height: 20), Text('Morning'.tr, style: AppStyle.headTitle2), const SizedBox(height: 10), Text( 'from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)'.tr, style: AppStyle.title), const SizedBox(height: 20), Text('Evening'.tr, style: AppStyle.headTitle2), const SizedBox(height: 10), Text( 'from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)'.tr, style: AppStyle.title), const SizedBox(height: 20), Text('Night'.tr, style: AppStyle.headTitle2), const SizedBox(height: 10), Text('from 23:59 till 05:30'.tr, style: AppStyle.title), ], ), ), ]); } } ================================================== FILE PATH: ./lib/views/home/profile/promos_passenger_page.dart ================================================== import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:Intaleq/controller/home/profile/promos_controller.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; import 'dart:ui'; // لاستخدامه في الفاصل import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../widgets/mycircular.dart'; import 'package:dotted_line/dotted_line.dart'; // ستحتاج لإضافة هذا الباكج // ملاحظة: ستحتاج لإضافة هذا الباكج إلى ملف pubspec.yaml الخاص بك // flutter pub add dotted_line // --- الويدجت الرئيسية بالتصميم الجديد --- class PromosPassengerPage extends StatelessWidget { const PromosPassengerPage({super.key}); @override Widget build(BuildContext context) { Get.put(PromosController()); // نفس منطقك القديم return MyScafolld( title: "Today's Promos".tr, // عنوان أكثر جاذبية isleading: true, body: [ GetBuilder( builder: (controller) { if (controller.isLoading) { return const MyCircularProgressIndicator(); } if (controller.promoList.isEmpty) { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon(Icons.local_offer_outlined, size: 80, color: Colors.grey), const SizedBox(height: 16), Text("No promos available right now.".tr, style: AppStyle.headTitle2), Text("Check back later for new offers!".tr, style: AppStyle.subtitle), ], ), ); } return ListView.builder( padding: const EdgeInsets.all(16.0), itemCount: controller.promoList.length, itemBuilder: (BuildContext context, int index) { final promo = controller.promoList[index]; // --- استدعاء ويدجت الكوبون الجديدة --- return _buildPromoTicket(context, promo); }, ); }, ) ], ); } // --- ويدجت بناء كوبون الخصم --- Widget _buildPromoTicket(BuildContext context, Map promo) { return Padding( padding: const EdgeInsets.only(bottom: 20.0), child: Container( height: 140, // ارتفاع ثابت للكوبون decoration: BoxDecoration( boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.15), blurRadius: 12, offset: const Offset(0, 6), ), ], ), child: ClipPath( clipper: TicketClipper(), // Clipper مخصص لرسم شكل التذكرة child: Container( color: AppColor.secondaryColor, child: Row( children: [ // --- الجزء الأيسر: تفاصيل العرض --- Expanded( flex: 3, child: Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ Text( promo['description'], style: AppStyle.headTitle.copyWith(fontSize: 18), maxLines: 2, overflow: TextOverflow.ellipsis, ), const Spacer(), Row( children: [ const Icon(Icons.calendar_today_outlined, size: 14, color: Colors.grey), const SizedBox(width: 6), Text( '${'Valid Until:'.tr} ${promo['validity_end_date']}', style: AppStyle.subtitle .copyWith(fontSize: 12, color: Colors.grey), ), ], ), ], ), ), ), // --- الفاصل المنقط --- SizedBox( height: 110, child: DottedLine( direction: Axis.vertical, lineThickness: 2.0, dashLength: 8.0, dashColor: AppColor.writeColor.withOpacity(0.2), dashGapLength: 4.0, ), ), // --- الجزء الأيمن: كود الخصم وزر النسخ --- Expanded( flex: 2, child: GestureDetector( onTap: () { // --- نفس منطقك القديم للنسخ --- Clipboard.setData( ClipboardData(text: promo['promo_code'])); Get.snackbar( 'Promo Copied!'.tr, '${'Code'.tr} ${promo['promo_code']} ${'copied to clipboard'.tr}', snackPosition: SnackPosition.BOTTOM, backgroundColor: AppColor.greenColor, colorText: Colors.white, ); }, child: Container( color: AppColor.primaryColor.withOpacity(0.1), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'CODE'.tr, style: AppStyle.subtitle.copyWith( color: AppColor.primaryColor, letterSpacing: 2), ), const SizedBox(height: 8), Text( promo['promo_code'], style: AppStyle.headTitle.copyWith( fontSize: 24, color: AppColor.primaryColor), ), const SizedBox(height: 12), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon(Icons.copy, size: 14, color: AppColor.primaryColor), const SizedBox(width: 4), Text('Copy'.tr, style: AppStyle.subtitle .copyWith(color: AppColor.primaryColor)), ], ), ], ), ), ), ), ], ), ), ), ), ); } } // --- كلاس مخصص لرسم شكل التذكرة --- class TicketClipper extends CustomClipper { @override Path getClip(Size size) { Path path = Path(); path.lineTo(0.0, size.height); path.lineTo(size.width, size.height); path.lineTo(size.width, 0.0); double radius = 10; path.addOval( Rect.fromCircle(center: Offset(0, size.height / 2), radius: radius)); path.addOval(Rect.fromCircle( center: Offset(size.width, size.height / 2), radius: radius)); return path; } @override bool shouldReclip(CustomClipper oldClipper) => false; } ================================================== FILE PATH: ./lib/views/home/profile/passenger_profile_page.dart ================================================== import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/profile/profile_controller.dart'; import 'package:Intaleq/main.dart'; import 'package:Intaleq/views/auth/login_page.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:Intaleq/views/widgets/my_textField.dart'; import 'package:Intaleq/views/widgets/mycircular.dart'; import '../../../controller/auth/login_controller.dart'; import '../../../controller/functions/log_out.dart'; class PassengerProfilePage extends StatelessWidget { PassengerProfilePage({super.key}); final LogOutController logOutController = Get.put(LogOutController()); @override Widget build(BuildContext context) { Get.put(ProfileController()); return Scaffold( backgroundColor: Colors.grey[100], appBar: AppBar( title: Text('My Profile'.tr, style: const TextStyle(fontWeight: FontWeight.bold)), backgroundColor: Colors.grey[100], elevation: 0, centerTitle: true, ), body: GetBuilder( builder: (controller) { if (controller.isloading) { return const MyCircularProgressIndicator(); } return ListView( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 10.0), children: [ _buildProfileHeader(controller), const SizedBox(height: 24), _buildSectionCard( 'Personal Information'.tr, [ _buildProfileTile( icon: Icons.person_outline, color: Colors.blue, title: 'Name'.tr, subtitle: '${controller.prfoileData['first_name'] ?? ''} ${controller.prfoileData['last_name'] ?? ''}', onTap: () => controller.updatField('first_name', TextInputType.name), ), _buildProfileTile( icon: Icons.wc_outlined, color: Colors.pink, title: 'Gender'.tr, subtitle: controller.prfoileData['gender']?.toString() ?? 'Not set'.tr, onTap: () => _showGenderDialog(controller), ), _buildProfileTile( icon: Icons.school_outlined, color: Colors.orange, title: 'Education'.tr, subtitle: controller.prfoileData['education']?.toString() ?? 'Not set'.tr, onTap: () => _showEducationDialog(controller), ), ], ), const SizedBox(height: 24), _buildSectionCard( 'Work & Contact'.tr, [ _buildProfileTile( icon: Icons.work_outline, color: Colors.green, title: 'Employment Type'.tr, subtitle: controller.prfoileData['employmentType']?.toString() ?? 'Not set'.tr, onTap: () => controller.updatField( 'employmentType', TextInputType.name), ), _buildProfileTile( icon: Icons.favorite_border, color: Colors.purple, title: 'Marital Status'.tr, subtitle: controller.prfoileData['maritalStatus']?.toString() ?? 'Not set'.tr, onTap: () => controller.updatField( 'maritalStatus', TextInputType.name), ), _buildProfileTile( icon: Icons.sos_outlined, color: Colors.red, title: 'SOS Phone'.tr, subtitle: controller.prfoileData['sosPhone']?.toString() ?? 'Not set'.tr, onTap: () async { await controller.updatField( 'sosPhone', TextInputType.phone); box.write(BoxName.sosPhonePassenger, controller.prfoileData['sosPhone']); }, ), ], ), const SizedBox(height: 32), _buildAccountActions(context, logOutController), ], ); }, ), ); } Widget _buildProfileHeader(ProfileController controller) { String fullName = '${controller.prfoileData['first_name'] ?? ''} ${controller.prfoileData['last_name'] ?? ''}'; String initials = (fullName.isNotEmpty && fullName.contains(" ")) ? fullName.split(" ").map((e) => e.isNotEmpty ? e[0] : "").join() : (fullName.isNotEmpty ? fullName[0] : ""); // Logic to hide email if it contains 'intaleqapp.com' String email = box.read(BoxName.email) ?? ''; if (email.contains('intaleqapp.com')) { email = ''; // Clear the email if it contains the domain } return Center( child: Column( children: [ CircleAvatar( radius: 50, backgroundColor: AppColor.primaryColor.withOpacity(0.2), child: Text( initials, style: const TextStyle(fontSize: 40, color: AppColor.primaryColor), ), ), const SizedBox(height: 12), Text( fullName, style: const TextStyle(fontSize: 22, fontWeight: FontWeight.bold), ), if (email .isNotEmpty) // Only show the Text widget if the email is not empty Text( email, style: TextStyle(fontSize: 16, color: Colors.grey[600]), ), ], ), ); } Widget _buildSectionCard(String title, List children) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.only(left: 8.0, bottom: 8.0), child: Text( title, style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: Colors.grey[700]), ), ), Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), ), child: Column( children: children, ), ), ], ); } Widget _buildProfileTile({ required IconData icon, required Color color, required String title, required String subtitle, required VoidCallback onTap, }) { return ListTile( onTap: onTap, leading: Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: color.withOpacity(0.1), borderRadius: BorderRadius.circular(10), ), child: Icon(icon, color: color, size: 24), ), title: Text(title, style: const TextStyle(fontWeight: FontWeight.w500)), subtitle: Text(subtitle, style: TextStyle(color: Colors.grey[600])), trailing: Icon(Icons.arrow_forward_ios, size: 16, color: Colors.grey[400]), ); } Widget _buildAccountActions( BuildContext context, LogOutController logOutController) { return Column( children: [ SizedBox( width: double.infinity, child: TextButton.icon( icon: const Icon(Icons.logout), label: Text('Sign Out'.tr), style: TextButton.styleFrom( foregroundColor: Colors.blueGrey, padding: const EdgeInsets.symmetric(vertical: 12), ), onPressed: () { logOutController.logOutPassenger(); }, ), ), const SizedBox(height: 8), SizedBox( width: double.infinity, child: TextButton.icon( icon: const Icon(Icons.delete_forever_outlined), label: Text('Delete My Account'.tr), style: TextButton.styleFrom( foregroundColor: Colors.red, padding: const EdgeInsets.symmetric(vertical: 12), ), onPressed: () => _showDeleteAccountDialog(context, logOutController), ), ), ], ); } void _showGenderDialog(ProfileController controller) { Get.defaultDialog( title: 'Update Gender'.tr, content: Column( children: [ GenderPicker(), const SizedBox(height: 16), MyElevatedButton( title: 'Update'.tr, onPressed: () { controller.updateColumn({ 'id': controller.prfoileData['id'].toString(), 'gender': controller.gender, }); Get.back(); }, ) ], ), ); } void _showEducationDialog(ProfileController controller) { Get.defaultDialog( title: 'Update Education'.tr, content: Column( children: [ EducationDegreePicker(), const SizedBox(height: 16), MyElevatedButton( title: 'Update'.tr, onPressed: () { controller.updateColumn({ 'id': controller.prfoileData['id'].toString(), 'education': controller.selectedDegree, }); Get.back(); }, ), ], ), ); } void _showDeleteAccountDialog( BuildContext context, LogOutController logOutController) { Get.defaultDialog( title: 'Delete My Account'.tr, middleText: 'Are you sure? This action cannot be undone.'.tr, content: Form( key: logOutController.formKey1, child: MyTextForm( controller: logOutController.emailTextController, label: 'Confirm your Email'.tr, hint: 'Type your Email'.tr, type: TextInputType.emailAddress, ), ), confirm: MyElevatedButton( title: 'Delete Permanently'.tr, kolor: AppColor.redColor, onPressed: () async { await logOutController.deletePassengerAccount(); }, ), cancel: TextButton( child: Text('Cancel'.tr), onPressed: () { logOutController.emailTextController.clear(); Get.back(); }, ), ); } } // --- Helper Widgets for Pickers --- class GenderPicker extends StatelessWidget { final ProfileController controller = Get.find(); final List genderOptions = ['Male'.tr, 'Female'.tr, 'Other'.tr]; GenderPicker({super.key}); @override Widget build(BuildContext context) { return SizedBox( height: 150, child: CupertinoPicker( itemExtent: 40.0, onSelectedItemChanged: (int index) { controller.setGender(genderOptions[index]); }, children: genderOptions.map((String value) { return Center(child: Text(value)); }).toList(), ), ); } } class EducationDegreePicker extends StatelessWidget { final ProfileController controller = Get.find(); final List degreeOptions = [ 'High School Diploma'.tr, 'Associate Degree'.tr, "Bachelor's Degree".tr, "Master's Degree".tr, 'Doctoral Degree'.tr, ]; EducationDegreePicker({super.key}); @override Widget build(BuildContext context) { return SizedBox( height: 180, child: CupertinoPicker( itemExtent: 40.0, onSelectedItemChanged: (int index) { controller.setDegree(degreeOptions[index]); }, children: degreeOptions.map((String value) { return Center(child: Text(value)); }).toList(), ), ); } } // NOTE: The CountryPicker and CountryPickerFromSetting widgets were not part of the main // profile page UI, so they are excluded here to keep the file focused. // If they are needed elsewhere, they should be moved to their own files. ================================================== FILE PATH: ./lib/views/home/profile/order_history.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; import 'package:Intaleq/views/widgets/mycircular.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import '../../../constant/colors.dart'; import '../../../controller/functions/launch.dart'; import '../../../controller/home/profile/order_history_controller.dart'; // --- الويدجت الرئيسية بالتصميم الجديد --- class OrderHistory extends StatelessWidget { const OrderHistory({super.key}); @override Widget build(BuildContext context) { // نفس منطق استدعاء الكنترولر Get.put(OrderHistoryController()); return MyScafolld( title: 'Order History'.tr, isleading: true, body: [ GetBuilder( builder: (controller) { // --- نفس منطق التحميل والحالة الفارغة --- if (controller.isloading) { return const MyCircularProgressIndicator(); } if (controller.orderHistoryListPassenger.isEmpty) { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.map_outlined, size: 80, color: AppColor.writeColor.withOpacity(0.4)), const SizedBox(height: 16), Text('No trip history found'.tr, style: AppStyle.headTitle2), Text("Your past trips will appear here.".tr, style: AppStyle.subtitle), ], ), ); } // --- استخدام ListView.separated لفصل البطاقات --- return ListView.separated( padding: const EdgeInsets.all(16.0), itemCount: controller.orderHistoryListPassenger.length, separatorBuilder: (context, index) => const SizedBox(height: 16), itemBuilder: (BuildContext context, int index) { final ride = controller.orderHistoryListPassenger[index]; // --- استدعاء ويدجت البطاقة الجديدة --- return _buildHistoryCard(context, ride); }, ); }, ) ], ); } // --- ويدجت بناء بطاقة الرحلة --- Widget _buildHistoryCard(BuildContext context, Map ride) { // --- نفس منطق حساب إحداثيات الخريطة --- final LatLng startLocation = LatLng( double.parse(ride['start_location'].toString().split(',')[0]), double.parse(ride['start_location'].toString().split(',')[1]), ); final LatLng endLocation = LatLng( double.parse(ride['end_location'].toString().split(',')[0]), double.parse(ride['end_location'].toString().split(',')[1]), ); final LatLngBounds bounds = LatLngBounds( northeast: LatLng( startLocation.latitude > endLocation.latitude ? startLocation.latitude : endLocation.latitude, startLocation.longitude > endLocation.longitude ? startLocation.longitude : endLocation.longitude, ), southwest: LatLng( startLocation.latitude < endLocation.latitude ? startLocation.latitude : endLocation.latitude, startLocation.longitude < endLocation.longitude ? startLocation.longitude : endLocation.longitude, ), ); return InkWell( // --- نفس دالة onTap القديمة --- onTap: () { String mapUrl = 'https://www.google.com/maps/dir/${ride['start_location']}/${ride['end_location']}/'; showInBrowser(mapUrl); }, borderRadius: BorderRadius.circular(16), child: Container( decoration: BoxDecoration( color: AppColor.secondaryColor, borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.15), blurRadius: 8, offset: const Offset(0, 4), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // --- 1. قسم الخريطة --- ClipRRect( borderRadius: const BorderRadius.only( topLeft: Radius.circular(16), topRight: Radius.circular(16), ), child: SizedBox( height: 150, // ارتفاع ثابت للخريطة child: AbsorbPointer( // لمنع التفاعل المباشر مع الخريطة داخل القائمة child: GoogleMap( initialCameraPosition: CameraPosition(target: startLocation, zoom: 12), // --- نفس منطق الخريطة والخطوط --- onMapCreated: (GoogleMapController controller) { controller.animateCamera( CameraUpdate.newLatLngBounds(bounds, 60)); }, polylines: { Polyline( polylineId: const PolylineId('route'), points: [startLocation, endLocation], color: AppColor.primaryColor, width: 4, ), }, markers: { Marker( markerId: const MarkerId('start'), position: startLocation), Marker( markerId: const MarkerId('end'), position: endLocation), }, mapToolbarEnabled: false, zoomControlsEnabled: false, ), ), ), ), // --- 2. قسم تفاصيل الرحلة --- Padding( padding: const EdgeInsets.all(12.0), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( '${ride['date']} - ${ride['time']}', style: AppStyle.subtitle.copyWith( color: AppColor.writeColor.withOpacity(0.7)), ), // --- ويدجت جديدة لعرض حالة الرحلة --- _buildStatusChip(ride['status']), ], ), const Divider(height: 20), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('Total Price'.tr, style: AppStyle.title.copyWith(fontSize: 16)), Text( '${ride['price']} ${'SYP'.tr}', style: AppStyle.headTitle.copyWith( fontSize: 20, color: AppColor.primaryColor), ), ], ), ], ), ), ], ), ), ); } // --- ويدجت مساعدة لعرض حالة الرحلة بشكل أنيق --- Widget _buildStatusChip(String status) { Color chipColor; IconData chipIcon; // --- نفس منطق تحديد اللون --- if (status == 'Canceled'.tr) { chipColor = AppColor.redColor; chipIcon = Icons.cancel_outlined; } else if (status == 'Finished'.tr) { chipColor = AppColor.greenColor; chipIcon = Icons.check_circle_outline; } else { chipColor = AppColor.yellowColor; chipIcon = Icons.hourglass_empty_rounded; } return Container( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), decoration: BoxDecoration( color: chipColor.withOpacity(0.15), borderRadius: BorderRadius.circular(20), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon(chipIcon, color: chipColor, size: 16), const SizedBox(width: 6), Text( status, style: AppStyle.subtitle.copyWith( color: chipColor, fontWeight: FontWeight.bold, fontSize: 12), ), ], ), ); } } ================================================== FILE PATH: ./lib/views/home/profile/budgets_ads.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/payment/payment_controller.dart'; import '../../../constant/box_name.dart'; import '../../../main.dart'; import '../my_wallet/passenger_wallet.dart'; class PointsCaptain extends StatelessWidget { PaymentController paymentController = Get.put(PaymentController()); PointsCaptain({ super.key, required this.kolor, required this.countPoint, required this.pricePoint, }); final Color kolor; final String countPoint; double pricePoint; @override Widget build(BuildContext context) { return InkWell( onTap: () async { Get.to(() => const PassengerWallet()); paymentController.changePromoSheetDialogue(); }, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 3, vertical: 8), child: Container( width: Get.width * .21, height: Get.width * .29, margin: const EdgeInsets.all(4), decoration: BoxDecoration( gradient: LinearGradient( colors: [ kolor.withOpacity(0.3), kolor, kolor.withOpacity(0.7), kolor, ], begin: Alignment.topLeft, end: Alignment.bottomRight, ), border: Border.all(color: AppColor.accentColor), borderRadius: BorderRadius.circular(12), shape: BoxShape.rectangle, ), child: Center( child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Text( '$countPoint ${'LE'.tr}', style: AppStyle.subtitle, ), Text( '$pricePoint ${box.read(BoxName.countryCode) == 'Jordan' ? 'JOD'.tr : 'LE'.tr}', style: AppStyle.title, textAlign: TextAlign.center, ), ], ), )), ), ); } } ================================================== FILE PATH: ./lib/views/home/my_wallet/payment_history_passenger_page.dart ================================================== import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/payment/passenger_wallet_history_controller.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; import 'package:Intaleq/views/widgets/mycircular.dart'; class PaymentHistoryPassengerPage extends StatelessWidget { const PaymentHistoryPassengerPage({super.key}); @override Widget build(BuildContext context) { Get.put(PassengerWalletHistoryController()); return MyScafolld( title: 'Payment History'.tr, body: [ GetBuilder( builder: (controller) => controller.isLoading ? const MyCircularProgressIndicator() // iOS-style loading indicator : controller.archive.isEmpty ? Center( child: Text( 'No wallet record found'.tr, style: AppStyle.title, ), ) : CupertinoListSection.insetGrouped( children: List.generate( controller.archive.length, (index) { var list = controller.archive[index]; return CupertinoListTile( backgroundColor: double.parse(list['balance']) < 0 ? AppColor.redColor.withOpacity(.2) : AppColor.greenColor.withOpacity(.2), title: Text( list['balance'], style: AppStyle.title.copyWith( color: CupertinoColors.black, ), ), additionalInfo: Text( list['created_at'], style: AppStyle.title.copyWith( fontSize: 12, color: CupertinoColors.systemGrey, ), ), padding: const EdgeInsets.symmetric( vertical: 8, horizontal: 16), ); }, ), ), ) ], isleading: true); } } ================================================== FILE PATH: ./lib/views/home/my_wallet/payment_screen_sham.dart ================================================== import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; import '../../../constant/box_name.dart'; import '../../../constant/links.dart'; import '../../../controller/functions/crud.dart'; import '../../../main.dart'; // --- خدمة الدفع (نفس المنطق السابق) --- class PaymentService { final String _baseUrl = "${AppLink.paymentServer}/ride/shamcash/passenger"; Future createInvoice({required double amount}) async { final url = "$_baseUrl/create_invoice.php"; try { final response = await CRUD().postWallet( link: url, payload: { 'passengerID': box.read(BoxName.passengerID), 'amount': amount.toString(), }, ).timeout(const Duration(seconds: 15)); if (response != 'failure') { final data = response; if (data['status'] == 'success' && data['invoice_number'] != null) { return data['invoice_number'].toString(); } } return null; } catch (e) { debugPrint("Create Invoice Error: $e"); return null; } } Future checkInvoiceStatus(String invoiceNumber) async { final url = "$_baseUrl/check_status.php"; try { final response = await CRUD().postWallet(link: url, payload: { 'invoice_number': invoiceNumber, }).timeout(const Duration(seconds: 10)); if (response != 'failure') { final data = response; return data['status'] == 'success' && data['invoice_status'] == 'completed'; } return false; } catch (e) { return false; } } } enum PaymentStatus { creatingInvoice, waitingForPayment, paymentSuccess, paymentTimeout, paymentError } class PaymentScreenSmsProvider extends StatefulWidget { final double amount; final String providerName; final String providerLogo; final String qrImagePath; const PaymentScreenSmsProvider({ super.key, required this.amount, this.providerName = 'شام كاش', this.providerLogo = 'assets/images/shamCash.png', this.qrImagePath = 'assets/images/shamcashsend.png', }); @override _PaymentScreenSmsProviderState createState() => _PaymentScreenSmsProviderState(); } class _PaymentScreenSmsProviderState extends State with SingleTickerProviderStateMixin { final PaymentService _paymentService = PaymentService(); Timer? _pollingTimer; PaymentStatus _status = PaymentStatus.creatingInvoice; String? _invoiceNumber; // العنوان الثابت للدفع (المستخرج من الصورة) final String _paymentAddress = "80f23afe40499b02f49966c3340ae0fc"; // متحكم الأنيميشن للوميض late AnimationController _blinkController; late Animation _colorAnimation; late Animation _shadowAnimation; @override void initState() { super.initState(); // إعداد الأنيميشن (وميض أحمر) _blinkController = AnimationController( duration: const Duration(milliseconds: 800), vsync: this, )..repeat(reverse: true); // يكرر الحركة ذهاباً وإياباً _colorAnimation = ColorTween( begin: Colors.red.shade700, end: Colors.red.shade100, ).animate(_blinkController); _shadowAnimation = Tween(begin: 2.0, end: 15.0).animate( CurvedAnimation(parent: _blinkController, curve: Curves.easeInOut), ); _createAndPollInvoice(); } @override void dispose() { _pollingTimer?.cancel(); _blinkController.dispose(); super.dispose(); } void _createAndPollInvoice() async { setState(() => _status = PaymentStatus.creatingInvoice); final invoiceNumber = await _paymentService.createInvoice(amount: widget.amount); if (invoiceNumber != null && mounted) { setState(() { _invoiceNumber = invoiceNumber; _status = PaymentStatus.waitingForPayment; }); _startPolling(invoiceNumber); } else if (mounted) { setState(() => _status = PaymentStatus.paymentError); } } void _startPolling(String invoiceNumber) { const timeoutDuration = Duration(minutes: 5); var elapsed = Duration.zero; _pollingTimer = Timer.periodic(const Duration(seconds: 5), (timer) async { elapsed += const Duration(seconds: 5); if (elapsed >= timeoutDuration) { timer.cancel(); if (mounted) setState(() => _status = PaymentStatus.paymentTimeout); return; } final isCompleted = await _paymentService.checkInvoiceStatus(invoiceNumber); if (isCompleted && mounted) { timer.cancel(); setState(() => _status = PaymentStatus.paymentSuccess); } }); } Future _onPopInvoked() async { if (_status == PaymentStatus.waitingForPayment) { final shouldPop = await showDialog( context: context, builder: (context) => AlertDialog( title: const Text('إلغاء العملية؟', textAlign: TextAlign.right), content: const Text('الخروج الآن سيؤدي لإلغاء متابعة عملية الدفع.', textAlign: TextAlign.right), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(false), child: const Text('البقاء')), TextButton( onPressed: () => Navigator.of(context).pop(true), child: const Text('خروج', style: TextStyle(color: Colors.red))), ], ), ); return shouldPop ?? false; } return true; } @override Widget build(BuildContext context) { return WillPopScope( onWillPop: _onPopInvoked, child: Scaffold( backgroundColor: Colors.grey[50], appBar: AppBar( title: Text("دفع عبر ${widget.providerName}"), centerTitle: true, elevation: 0, backgroundColor: Colors.white, foregroundColor: Colors.black, ), body: SafeArea( child: Padding( padding: const EdgeInsets.all(20.0), child: Center(child: _buildContentByStatus()), ), ), ), ); } Widget _buildContentByStatus() { switch (_status) { case PaymentStatus.creatingInvoice: return const Column( mainAxisAlignment: MainAxisAlignment.center, children: [ CircularProgressIndicator(), SizedBox(height: 20), Text("جاري إنشاء رقم البيان...", style: TextStyle(fontSize: 16)), ], ); case PaymentStatus.waitingForPayment: return _buildWaitingForPaymentUI(); case PaymentStatus.paymentSuccess: return _buildSuccessUI(); case PaymentStatus.paymentTimeout: case PaymentStatus.paymentError: return _buildErrorUI(); } } Widget _buildWaitingForPaymentUI() { final currencyFormat = NumberFormat.decimalPattern('ar_SY'); final invoiceText = _invoiceNumber ?? '---'; return SingleChildScrollView( physics: const BouncingScrollPhysics(), child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ // 1. المبلغ Container( width: double.infinity, padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 15), decoration: BoxDecoration( gradient: LinearGradient( colors: [Colors.blue.shade800, Colors.blue.shade600]), borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: Colors.blue.withOpacity(0.25), blurRadius: 10, offset: const Offset(0, 5)) ], ), child: Column( children: [ const Text("المبلغ المطلوب", style: TextStyle(color: Colors.white70, fontSize: 14)), const SizedBox(height: 5), Text("${currencyFormat.format(widget.amount)} ل.س", style: const TextStyle( color: Colors.white, fontSize: 28, fontWeight: FontWeight.bold)), ], ), ), const SizedBox(height: 25), // 2. رقم البيان (هام جداً - وميض أحمر) AnimatedBuilder( animation: _blinkController, builder: (context, child) { return Container( padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16), border: Border.all( color: _colorAnimation.value ?? Colors.red, width: 3.0, // إطار سميك ), boxShadow: [ BoxShadow( color: (_colorAnimation.value ?? Colors.red) .withOpacity(0.4), blurRadius: _shadowAnimation.value, spreadRadius: 2, ) ], ), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.warning_rounded, color: Colors.red.shade800, size: 28), const SizedBox(width: 8), Text( "هام جداً: لا تنسَ!", style: TextStyle( color: Colors.red.shade900, fontWeight: FontWeight.bold, fontSize: 18), ), ], ), const SizedBox(height: 10), const Text( "يجب نسخ (رقم البيان) هذا ووضعه في تطبيق شام كاش لضمان نجاح العملية.", textAlign: TextAlign.center, style: TextStyle( fontSize: 15, color: Colors.black87, fontWeight: FontWeight.w600, ), ), const SizedBox(height: 15), InkWell( onTap: () { Clipboard.setData(ClipboardData(text: invoiceText)); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: const Text("تم نسخ رقم البيان ✅", textAlign: TextAlign.center), backgroundColor: Colors.red.shade700)); }, borderRadius: BorderRadius.circular(12), child: Container( padding: const EdgeInsets.symmetric( horizontal: 15, vertical: 12), decoration: BoxDecoration( color: Colors.red.shade50, borderRadius: BorderRadius.circular(12), border: Border.all( color: Colors.red.shade200, width: 1)), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text("رقم البيان (Invoice No)", style: TextStyle( fontSize: 12, color: Colors.grey)), Text(invoiceText, style: TextStyle( fontSize: 24, fontWeight: FontWeight.bold, letterSpacing: 2.0, color: Colors.red.shade900)), ], ), Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: Colors.red.shade100, borderRadius: BorderRadius.circular(8), ), child: Icon(Icons.copy_rounded, color: Colors.red.shade900, size: 24), ), ], ), ), ), ], ), ); }, ), const SizedBox(height: 25), // 3. عنوان الدفع (اختياري / عادي) Container( padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 15), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), border: Border.all(color: Colors.grey.shade300), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text("عنوان الدفع (Payment Address)", style: TextStyle(fontSize: 12, color: Colors.grey)), const SizedBox(height: 8), InkWell( onTap: () { Clipboard.setData(ClipboardData(text: _paymentAddress)); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: const Text("تم نسخ عنوان الدفع ✅", textAlign: TextAlign.center), backgroundColor: Colors.green.shade600)); }, child: Row( children: [ Expanded( child: Text(_paymentAddress, style: const TextStyle( fontSize: 14, fontWeight: FontWeight.bold, fontFamily: 'Courier', color: Colors.black87, ), overflow: TextOverflow.ellipsis), ), const SizedBox(width: 8), const Icon(Icons.copy, size: 18, color: Colors.grey), ], ), ), ], ), ), const SizedBox(height: 30), // 4. QR Code const Text("أو امسح الرمز للدفع", style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), const SizedBox(height: 10), GestureDetector( onTap: () { showDialog( context: context, builder: (ctx) => Dialog( backgroundColor: Colors.transparent, child: InteractiveViewer( child: Image.asset(widget.qrImagePath)))); }, child: Container( padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(15), border: Border.all(color: Colors.grey.shade300)), child: Image.asset(widget.qrImagePath, width: 150, height: 150, fit: BoxFit.contain, errorBuilder: (c, o, s) => const Icon(Icons.qr_code_2, size: 100, color: Colors.grey)), ), ), const SizedBox(height: 30), const LinearProgressIndicator(backgroundColor: Colors.white), const SizedBox(height: 10), const Text("جاري التحقق من الدفع تلقائياً...", style: TextStyle(color: Colors.grey, fontSize: 12)), const SizedBox(height: 20), ], ), ); } Widget _buildSuccessUI() { return Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon(Icons.verified_rounded, color: Colors.green, size: 100), const SizedBox(height: 20), const Text("تم الدفع بنجاح!", style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold)), const SizedBox(height: 40), SizedBox( width: double.infinity, child: ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: Colors.green, foregroundColor: Colors.white, padding: const EdgeInsets.symmetric(vertical: 16)), onPressed: () => Navigator.of(context).pop(), child: const Text("متابعة", style: TextStyle(fontSize: 18)), ), ), ], ); } Widget _buildErrorUI() { return Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.error_outline_rounded, color: Colors.red.shade400, size: 80), const SizedBox(height: 20), Text( _status == PaymentStatus.paymentTimeout ? "انتهى الوقت" : "لم يتم التحقق", style: const TextStyle(fontSize: 22, fontWeight: FontWeight.bold)), const SizedBox(height: 15), const Padding( padding: EdgeInsets.symmetric(horizontal: 30), child: Text("لم يصلنا إشعار الدفع خلال الوقت المحدد.", textAlign: TextAlign.center, style: TextStyle(color: Colors.grey))), const SizedBox(height: 40), SizedBox( width: double.infinity, child: ElevatedButton.icon( style: ElevatedButton.styleFrom( padding: const EdgeInsets.symmetric(vertical: 15)), onPressed: _createAndPollInvoice, icon: const Icon(Icons.refresh), label: const Text("حاول مرة أخرى"), ), ), const SizedBox(height: 15), TextButton( onPressed: () => Navigator.of(context).pop(), child: const Text("إلغاء", style: TextStyle(color: Colors.grey))) ], ); } } ================================================== FILE PATH: ./lib/views/home/my_wallet/passenger_wallet.dart ================================================== import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/views/home/my_wallet/payment_history_passenger_page.dart'; import 'dart:ui'; // لاستخدام تأثيرات متقدمة import '../../../constant/box_name.dart'; import '../../../constant/colors.dart'; import '../../../constant/info.dart'; import '../../../constant/style.dart'; import '../../../controller/functions/toast.dart'; import '../../../controller/home/payment/credit_card_controller.dart'; import '../../../controller/payment/payment_controller.dart'; import '../../../main.dart'; import '../../widgets/elevated_btn.dart'; import '../../widgets/my_scafold.dart'; import 'passenger_wallet_dialoge.dart'; // --- الويدجت الرئيسية بالتصميم الجديد --- class PassengerWallet extends StatelessWidget { const PassengerWallet({super.key}); @override Widget build(BuildContext context) { // نفس منطق استدعاء الكنترولرز Get.put(PaymentController()); Get.put(CreditCardController()); return MyScafolld( title: 'My Balance'.tr, isleading: true, body: [ // استخدام Stack فقط لعرض الـ Dialog فوق المحتوى عند الحاجة Stack( children: [ // استخدام Column لتنظيم المحتوى بشكل أفضل Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ const SizedBox(height: 16), // --- 1. بطاقة المحفظة العصرية --- _buildModernWalletCard(), const SizedBox(height: 32), Text("Actions".tr, style: AppStyle.title.copyWith( color: AppColor.writeColor.withOpacity(0.6))), const Divider(height: 24), // --- 2. قائمة الخيارات المنظمة --- _buildActionTile( icon: Icons.add_card_rounded, title: 'Top up Balance'.tr, subtitle: 'Add funds using our secure methods'.tr, onTap: () => showPaymentBottomSheet(context), // نفس دالتك القديمة ), _buildActionTile( icon: Icons.history_rounded, title: 'Payment History'.tr, subtitle: 'View your past transactions'.tr, onTap: () => Get.to( () => const PaymentHistoryPassengerPage(), transition: Transition.rightToLeftWithFade), ), _buildActionTile( icon: Icons.phone_iphone_rounded, title: 'Set Phone Number'.tr, subtitle: 'Link a phone number for transfers'.tr, onTap: () => _showWalletPhoneDialog(context, Get.find()), // نفس دالتك القديمة ), ], ), ), // --- عرض الـ Dialog بنفس طريقتك القديمة --- const PassengerWalletDialog(), ], ), ], ); } // --- ويدجت مساعدة لبناء بطاقة المحفظة --- Widget _buildModernWalletCard() { return GetBuilder( builder: (paymentController) { return Container( width: double.infinity, height: Get.height * 0.25, decoration: BoxDecoration( borderRadius: BorderRadius.circular(20), gradient: const LinearGradient( colors: [ AppColor.primaryColor, Color(0xFF1E3A8A) ], // تدرج لوني أنيق begin: Alignment.topLeft, end: Alignment.bottomRight, ), boxShadow: [ BoxShadow( color: AppColor.primaryColor.withOpacity(0.3), blurRadius: 25, offset: const Offset(0, 10), ), ], ), child: Stack( children: [ // --- عنصر تزييني (شكل موجة) --- Positioned( right: -100, bottom: -100, child: Icon( Icons.waves, size: 250, color: Colors.white.withOpacity(0.05), ), ), Padding( padding: const EdgeInsets.all(24.0), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( '${AppInformation.appName} ${'Balance'.tr}', style: AppStyle.headTitle.copyWith( color: Colors.white, fontSize: 20, fontWeight: FontWeight.bold, ), ), Icon(Icons.memory_rounded, color: Colors.white.withOpacity(0.7), size: 30), // أيقونة الشريحة ], ), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "Current Balance".tr, style: AppStyle.subtitle .copyWith(color: Colors.white.withOpacity(0.7)), ), Text( '${box.read(BoxName.passengerWalletTotal) ?? '0.0'} ${'SYP'.tr}', style: AppStyle.headTitle2.copyWith( color: Colors.white, fontSize: 28, fontWeight: FontWeight.w600, letterSpacing: 1.5, ), ), ], ), Row( mainAxisAlignment: MainAxisAlignment.end, children: [ Text( (box.read(BoxName.name) ?? "User Name").toString(), style: AppStyle.title.copyWith( color: Colors.white.withOpacity(0.8), fontSize: 16, ), ), ], ), ], ), ), ], ), ); }, ); } // --- ويدجت مساعدة لبناء عناصر القائمة --- Widget _buildActionTile({ required IconData icon, required String title, required String subtitle, required VoidCallback onTap, }) { return ListTile( onTap: onTap, contentPadding: const EdgeInsets.symmetric(vertical: 8, horizontal: 8), leading: Container( padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: AppColor.primaryColor.withOpacity(0.1), borderRadius: BorderRadius.circular(12), ), child: Icon(icon, color: AppColor.primaryColor, size: 24), ), title: Text(title.tr, style: AppStyle.title), subtitle: Text(subtitle.tr, style: AppStyle.subtitle .copyWith(color: AppColor.writeColor.withOpacity(0.6))), trailing: const Icon(Icons.arrow_forward_ios_rounded, size: 16, color: AppColor.writeColor), ); } // --- نفس دالة الـ Dialog الخاصة بك --- void _showWalletPhoneDialog( BuildContext context, PaymentController controller) { Get.dialog( CupertinoAlertDialog( title: Text('Insert Wallet phone number'.tr), content: Column( children: [ const SizedBox(height: 10), Form( key: controller.formKey, child: CupertinoTextField( controller: controller.walletphoneController, placeholder: 'Insert Wallet phone number'.tr, keyboardType: TextInputType.phone, padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 10), ), ), ], ), actions: [ CupertinoDialogAction( child: Text('Cancel'.tr, style: const TextStyle(color: CupertinoColors.destructiveRed)), onPressed: () => Get.back(), ), CupertinoDialogAction( child: Text('OK'.tr, style: const TextStyle(color: CupertinoColors.activeGreen)), onPressed: () { Get.back(); box.write( BoxName.phoneWallet, (controller.walletphoneController.text)); Toast.show(context, 'Phone Wallet Saved Successfully'.tr, AppColor.greenColor); }, ), ], ), barrierDismissible: false, ); } } // الكلاس القديم CardIntaleqWallet لم نعد بحاجة إليه لأنه تم دمجه وتطويره ================================================== FILE PATH: ./lib/views/home/my_wallet/passenger_wallet_dialoge.dart ================================================== import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/functions/encrypt_decrypt.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/controller/functions/toast.dart'; import 'package:Intaleq/controller/payment/payment_controller.dart'; import 'package:local_auth/local_auth.dart'; import '../../../main.dart'; import '../../widgets/elevated_btn.dart'; import '../../widgets/my_textField.dart'; import 'payment_screen_sham.dart'; class PassengerWalletDialog extends StatelessWidget { const PassengerWalletDialog({ super.key, }); @override Widget build(BuildContext context) { return GetBuilder( builder: (controller) => Positioned( top: Get.height * .1, right: Get.width * .15, left: Get.width * .15, bottom: Get.height * .1, child: controller.isPromoSheetDialogue ? CupertinoActionSheet( title: Text('Select Payment Amount'.tr), actions: [ CupertinoActionSheetAction( onPressed: () { controller.updateSelectedAmount( box.read(BoxName.countryCode) == 'Syria' ? 10000 : 10, ); showPaymentOptions(context, controller); }, child: Text( box.read(BoxName.countryCode) == 'Syria' ? '10000 ${'LE'.tr}' : '10 ${'SYP'.tr}', ), ), CupertinoActionSheetAction( onPressed: () { controller.updateSelectedAmount( box.read(BoxName.countryCode) == 'Syria' ? 20000 : 20, ); showPaymentOptions(context, controller); }, child: Text( box.read(BoxName.countryCode) == 'Syria' ? '20000 ${'LE'.tr} = 2050 ${'LE'.tr}' : '20 ${'SYP'.tr}', ), ), CupertinoActionSheetAction( onPressed: () { controller.updateSelectedAmount( box.read(BoxName.countryCode) == 'Syria' ? 40000 : 40, ); showPaymentOptions(context, controller); }, child: Text( box.read(BoxName.countryCode) == 'Syria' ? '40000 ${'LE'.tr} = 4150 ${'LE'.tr}' : '40 ${'SYP'.tr}', ), ), CupertinoActionSheetAction( onPressed: () { controller.updateSelectedAmount( box.read(BoxName.countryCode) == 'Syria' ? 100000 : 50, ); showPaymentOptions(context, controller); }, child: Text( box.read(BoxName.countryCode) == 'Syria' ? '100000 ${'LE'.tr} = 11000 ${'LE'.tr}' : '50 ${'SYP'.tr}', ), ), ], cancelButton: CupertinoActionSheetAction( onPressed: () { controller.changePromoSheetDialogue(); }, child: Text('Cancel'.tr), ), ) : const SizedBox(), ), ); } } // class PassengerWalletDialog extends StatelessWidget { // const PassengerWalletDialog({ // super.key, // }); // @override // Widget build(BuildContext context) { // return GetBuilder( // builder: (controller) { // return Positioned( // top: Get.height * .1, // right: Get.width * .15, // left: Get.width * .15, // bottom: Get.height * .1, // child: controller.isPromoSheetDialogue // ? Container() // : SizedBox // .shrink(), // If condition is false, return an empty widget // ); // }, // ); // } // } void showPaymentBottomSheet(BuildContext context) { final controller = Get.find(); showModalBottomSheet( context: context, isScrollControlled: true, shape: const RoundedRectangleBorder( borderRadius: BorderRadius.vertical(top: Radius.circular(15.0)), ), builder: (BuildContext context) { return WillPopScope( onWillPop: () async { Get.back(); return false; }, child: Container( padding: const EdgeInsets.all(16.0), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Text( 'Select Payment Amount'.tr, style: AppStyle.headTitle2, textAlign: TextAlign.center, ), const SizedBox(height: 16.0), // Payment Options List _buildPaymentOption( context: context, controller: controller, amount: 500, bonusAmount: 30, currency: 'SYP'.tr, ), const SizedBox(height: 8.0), _buildPaymentOption( context: context, controller: controller, amount: 1000, bonusAmount: 70, currency: 'SYP'.tr, ), const SizedBox(height: 8.0), _buildPaymentOption( context: context, controller: controller, amount: 2000, bonusAmount: 180, currency: 'SYP'.tr, ), const SizedBox(height: 8.0), _buildPaymentOption( context: context, controller: controller, amount: 5000, bonusAmount: 700, currency: 'SYP'.tr, ), const SizedBox(height: 16.0), TextButton( onPressed: () => Get.back(), child: Text('Cancel'.tr), ), ], ), ), ); }, ); } Widget _buildPaymentOption({ required BuildContext context, required PaymentController controller, required int amount, required double bonusAmount, required String currency, }) { return Material( color: Colors.transparent, child: InkWell( onTap: () { controller.updateSelectedAmount(amount); Get.back(); showPaymentOptions(context, controller); }, child: Container( padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 16.0), decoration: BoxDecoration( border: Border.all(color: Colors.grey[300]!), borderRadius: BorderRadius.circular(8.0), ), child: Text( bonusAmount > 0 ? '${'Pay'.tr} $amount $currency, ${'Get'.tr} ${amount + bonusAmount} $currency' : '$amount $currency', style: AppStyle.title, textAlign: TextAlign.center, ), ), ), ); } void showPaymentOptions(BuildContext context, PaymentController controller) { showCupertinoModalPopup( context: context, builder: (context) => CupertinoActionSheet( title: Text('Payment Options'.tr), actions: [ box.read(BoxName.countryCode) == 'Syria' ? CupertinoActionSheetAction( child: Text('💳 Pay with Credit Card'.tr), onPressed: () async { if (controller.selectedAmount != 0) { controller.payWithEcash( context, controller.selectedAmount.toString(), // () async { // await controller.addPassengerWallet(); // controller.changePromoSheetDialogue(); ); await controller.getPassengerWallet(); } else { Toast.show(context, '⚠️ You need to choose an amount!'.tr, AppColor.redColor); } }, ) : const SizedBox(), box.read(BoxName.countryCode) != 'Syria' ? CupertinoActionSheetAction( child: Text('Pay with PayPal'.tr), onPressed: () { if (controller.selectedAmount != 0) { controller.makePaymentPayPal(context); } else { Toast.show(context, 'You will choose one of above!'.tr, AppColor.redColor); } }, ) : const SizedBox(), // box.read(BoxName.phoneWallet) != null // ? CupertinoActionSheetAction( // child: Text('💰 Pay with Wallet'.tr), // onPressed: () async { // if (controller.selectedAmount != 0) { // controller.isLoading = true; // controller.update(); // controller.payWithMTNWallet( // context, // controller.selectedAmount.toString(), // 'SYP', // ); // await controller.getPassengerWallet(); // controller.isLoading = false; // controller.update(); // } else { // Toast.show(context, '⚠️ You need to choose an amount!'.tr, // AppColor.redColor); // } // }, // ) // : CupertinoActionSheetAction( // child: Text('Add wallet phone you use'.tr), // onPressed: () { // Get.dialog( // CupertinoAlertDialog( // title: Text('Insert Wallet phone number'.tr), // content: Column( // children: [ // const SizedBox(height: 10), // CupertinoTextField( // controller: controller.walletphoneController, // placeholder: 'Insert Wallet phone number'.tr, // keyboardType: TextInputType.phone, // padding: const EdgeInsets.symmetric( // vertical: 12, // horizontal: 10, // ), // ), // ], // ), // actions: [ // CupertinoDialogAction( // child: Text('Cancel'.tr, // style: const TextStyle( // color: CupertinoColors.destructiveRed)), // onPressed: () { // Get.back(); // }, // ), // CupertinoDialogAction( // child: Text('OK'.tr, // style: const TextStyle( // color: CupertinoColors.activeGreen)), // onPressed: () async { // Get.back(); // box.write(BoxName.phoneWallet, // (controller.walletphoneController.text)); // Toast.show( // context, // 'Phone Wallet Saved Successfully'.tr, // AppColor.greenColor); // }, // ), // ], // ), // barrierDismissible: false, // ); // }, // ), // GestureDetector( // onTap: () async { // Get.back(); // Get.defaultDialog( // barrierDismissible: false, // title: 'Insert Wallet phone number'.tr, // content: Form( // key: controller.formKey, // child: MyTextForm( // controller: controller.walletphoneController, // label: 'Insert Wallet phone number'.tr, // hint: '963941234567', // type: TextInputType.phone)), // confirm: MyElevatedButton( // title: 'OK'.tr, // onPressed: () async { // Get.back(); // if (controller.formKey.currentState!.validate()) { // if (controller.selectedAmount != 0) { // controller.isLoading = true; // controller.update(); // box.write(BoxName.phoneWallet, // (controller.walletphoneController.text)); // Get.back(); // await controller.payWithMTNWallet( // context, // controller.selectedAmount.toString(), // 'SYP', // ); // await controller.getPassengerWallet(); // controller.isLoading = false; // controller.update(); // } else { // Toast.show( // context, // '⚠️ You need to choose an amount!'.tr, // AppColor.redColor, // ); // } // } // })); // }, // child: Padding( // padding: const EdgeInsets.all(8.0), // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // Text( // 'Pay by MTN Wallet'.tr, // style: AppStyle.title, // ), // const SizedBox(width: 10), // Image.asset( // 'assets/images/cashMTN.png', // width: 70, // height: 70, // fit: BoxFit.contain, // ), // ], // ), // )), GestureDetector( onTap: () async { Get.back(); Get.defaultDialog( barrierDismissible: false, title: 'Insert Wallet phone number'.tr, content: Form( key: controller.formKey, child: MyTextForm( controller: controller.walletphoneController, label: 'Insert Wallet phone number'.tr, hint: '963941234567', type: TextInputType.phone)), confirm: MyElevatedButton( title: 'OK'.tr, onPressed: () async { Get.back(); if (controller.formKey.currentState!.validate()) { box.write(BoxName.phoneWallet, controller.walletphoneController.text); await controller.payWithSyriaTelWallet( controller.selectedAmount.toString(), 'SYP'); } })); }, child: Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Pay by Syriatel Wallet'.tr, style: AppStyle.title, ), const SizedBox(width: 10), Image.asset( 'assets/images/syriatel.png', width: 70, height: 70, fit: BoxFit.fill, ), ], ), )), GestureDetector( onTap: () async { // التحقق بالبصمة قبل أي شيء bool isAuthSupported = await LocalAuthentication().isDeviceSupported(); if (isAuthSupported) { bool didAuthenticate = await LocalAuthentication().authenticate( localizedReason: 'استخدم بصمة الإصبع أو الوجه لتأكيد الدفع', ); if (!didAuthenticate) { print("❌ User did not authenticate with biometrics"); return; } } // الانتقال مباشرة لإنشاء الفاتورة بعد النجاح بالبصمة Get.to(() => PaymentScreenSmsProvider( amount: double.parse(controller.selectedAmount.toString()))); }, child: Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Pay by Sham Cash'.tr, style: AppStyle.title, ), const SizedBox(width: 10), Image.asset( 'assets/images/shamCash.png', width: 70, height: 70, fit: BoxFit.fill, ), ], ), )), ], cancelButton: CupertinoActionSheetAction( child: Text('Cancel'.tr), onPressed: () { // controller.changePromoSheetDialogue(); Get.back(); }, ), ), ); } ================================================== FILE PATH: ./lib/views/home/my_wallet/payment_history_driver_page.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; import 'package:Intaleq/views/widgets/mycircular.dart'; import '../../../controller/payment/driver_payment_controller.dart'; class PaymentHistoryDriverPage extends StatelessWidget { const PaymentHistoryDriverPage({super.key}); @override Widget build(BuildContext context) { Get.put(DriverWalletHistoryController()); return MyScafolld( title: 'Payment History'.tr, body: [ GetBuilder( builder: (controller) => controller.isLoading ? const MyCircularProgressIndicator() : ListView.builder( itemCount: controller.archive.length, itemBuilder: (BuildContext context, int index) { var list = controller.archive[index]; return Padding( padding: const EdgeInsets.all(4), child: Container( decoration: BoxDecoration( color: double.parse(list['amount']) < 0 ? AppColor.redColor.withOpacity(.4) : AppColor.greenColor.withOpacity(.4)), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( list['amount'], style: AppStyle.title, ), Text( list['created_at'], style: AppStyle.title, ), ], ), ), ); }, ), ) ], isleading: true); } } ================================================== FILE PATH: ./lib/views/Rate/rating_driver_bottom.dart ================================================== import 'package:Intaleq/views/home/map_page_passenger.dart'; import 'package:flutter/material.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:get/get.dart'; import '../../constant/colors.dart'; import '../../constant/links.dart'; import '../../constant/style.dart'; import '../../controller/home/map_passenger_controller.dart'; import '../../controller/rate/rate_conroller.dart'; import '../widgets/elevated_btn.dart'; import '../widgets/my_scafold.dart'; // ملاحظة: تم حذف جميع الأكواد المتعلقة بالسعر والإكرامية كما طُلِب. // التركيز الآن على التقييم والملاحظات فقط. class RatingDriverBottomSheet extends StatelessWidget { RatingDriverBottomSheet({super.key}); final RateController controller = Get.put(RateController()); @override Widget build(BuildContext context) { // تم تبسيط استخدام MyScafolld لإزالة الـ Positioned واستخدام تصميم مركزي ونظيف. return MyScafolld( title: 'Rate Driver'.tr, body: [ Center( child: Container( width: Get.width * .85, padding: const EdgeInsets.all(24), // يفترض أن AppStyle.boxDecoration1 يوفر تصميمًا جميلاً مع حواف مدورة وظل. decoration: AppStyle.boxDecoration1, child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, children: [ // 1. قسم معلومات السائق والترحيب CircleAvatar( radius: 30, backgroundImage: NetworkImage( '${AppLink.server}/portrate_captain_image/${controller.driverId}.jpg'), onBackgroundImageError: (exception, stackTrace) => const Icon( Icons.person, size: 30, color: AppColor.blueColor), ), const SizedBox(height: 16), // رسالة ترحيب مركزة على تجربة الرحلة Text( '${'How was your trip with'.tr} ${controller.driverName}?', style: AppStyle.title .copyWith(fontSize: 20, fontWeight: FontWeight.bold), textAlign: TextAlign.center, ), const SizedBox(height: 12), // نص إرشادي يؤكد على أهمية التقييم لتحسين الجودة Text( 'Your valuable feedback helps us improve our service quality.' .tr, style: AppStyle.title .copyWith(color: Colors.grey.shade600, fontSize: 14), textAlign: TextAlign.center, ), const SizedBox(height: 32), // 2. شريط التقييم (النجمي) Center( child: RatingBar.builder( initialRating: 0, itemCount: 5, itemSize: 50, // حجم كبير لجعله النقطة البؤرية glow: true, glowColor: Colors.amber.shade200, itemPadding: const EdgeInsets.symmetric(horizontal: 4), itemBuilder: (context, index) { // استخدام أيقونات المشاعر مع أيقونة النجمة للحصول على مظهر أكثر جاذبية switch (index) { case 0: return const Icon(Icons.sentiment_very_dissatisfied, color: Colors.red); case 1: return const Icon(Icons.sentiment_dissatisfied, color: Colors.redAccent); case 2: return const Icon(Icons.sentiment_neutral, color: Colors.amber); case 3: return const Icon(Icons.sentiment_satisfied, color: Colors.lightGreen); case 4: return const Icon(Icons.sentiment_very_satisfied, color: Colors.green); default: return const Icon(Icons.star_rounded, color: Colors.amber); } }, onRatingUpdate: (rating) { controller.selectRateItem(rating); }, ), ), const SizedBox(height: 32), // 3. قسم التعليقات (الملاحظات) SizedBox( width: Get.width * .75, child: TextFormField( maxLines: 4, minLines: 1, keyboardType: TextInputType.multiline, controller: controller.comment, decoration: InputDecoration( labelText: 'Leave a detailed comment (Optional)'.tr, hintText: 'Share your experience to help us improve...'.tr, prefixIcon: const Icon(Icons.rate_review, color: Colors.blueGrey), suffixIcon: IconButton( icon: const Icon(Icons.clear, color: AppColor.redColor), onPressed: () { controller.comment.clear(); }, ), // تحسين شكل الحدود لتكون أكثر جمالية border: OutlineInputBorder( borderRadius: BorderRadius.circular(12)), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: const BorderSide(color: Colors.blueGrey, width: 1), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide( color: AppColor.greenColor, width: 2), // لون جذاب عند التركيز ), ), ), ), const SizedBox(height: 32), // 4. زر الإرسال MyElevatedButton( title: 'Submit Rating'.tr, onPressed: () async { await controller.addRateToDriver(); Get.offAll(() => MapPagePassenger()); // Get.find() // .getRideStatusFromStartApp(); }) ], ), ), ), ], isleading: false, ); } } ================================================== FILE PATH: ./lib/views/Rate/rate_captain.dart ================================================== import 'package:Intaleq/controller/home/map_passenger_controller.dart'; import 'package:flutter/material.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:get/get.dart'; import '../../constant/colors.dart'; import '../../constant/style.dart'; import '../../controller/firebase/firbase_messge.dart'; import '../../controller/payment/payment_controller.dart'; import '../../controller/rate/rate_conroller.dart'; import '../widgets/elevated_btn.dart'; import '../widgets/my_scafold.dart'; class RateDriverFromPassenger extends StatelessWidget { RateDriverFromPassenger({super.key}); final RateController controller = Get.put(RateController()); @override Widget build(BuildContext context) { return MyScafolld( title: 'Rate Driver'.tr, body: [ Positioned( top: 10, left: Get.width * .1, right: Get.width * .1, child: Container( // height: Get.height * 6, decoration: AppStyle.boxDecoration1, child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Padding( padding: const EdgeInsets.all(4), child: Container( height: Get.height * .5, decoration: AppStyle.boxDecoration1, child: Padding( padding: const EdgeInsets.all(8.0), child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Text( '${'Total price to '.tr}${Get.find().driverName}', style: AppStyle.title, ), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Container( decoration: BoxDecoration( border: Border.all( width: 2, color: AppColor.redColor, )), child: Padding( padding: const EdgeInsets.all(4), child: Text( (double.parse(controller.price .toString()) * .12 + double.parse(controller.price .toString())) .toStringAsFixed(2), style: AppStyle.number.copyWith( color: AppColor.redColor, textBaseline: TextBaseline.ideographic, decoration: TextDecoration.lineThrough, decorationColor: AppColor.redColor), ), ), ), const SizedBox( height: 10, ), Container( decoration: BoxDecoration( border: Border.all( width: 2, color: AppColor.greenColor, )), child: Padding( padding: const EdgeInsets.all(4), child: Text( controller.price.toString(), style: AppStyle.number, ), ), ), ], ), const SizedBox( height: 10, ), Padding( padding: const EdgeInsets.all(4.0), child: Text( 'Exclusive offers and discounts always with the Intaleq app' .tr, style: AppStyle.title.copyWith( color: AppColor.redColor, ), textAlign: TextAlign.center, ), ), (Get.find() .isWalletChecked == true) ? const DriverTipWidget() : const SizedBox(), ], ), )), ), Center( child: RatingBar.builder( initialRating: 0, itemCount: 5, itemSize: 50, itemPadding: const EdgeInsets.symmetric(horizontal: 2), itemBuilder: (context, index) { switch (index) { case 0: return const Icon( Icons.sentiment_very_dissatisfied, color: Colors.red, ); case 1: return const Icon( Icons.sentiment_dissatisfied, color: Colors.redAccent, ); case 2: return const Icon( Icons.sentiment_neutral, color: Colors.amber, ); case 3: return const Icon( Icons.sentiment_satisfied, color: Colors.lightGreen, ); case 4: return const Icon( Icons.sentiment_very_satisfied, color: Colors.green, ); default: return const Icon( Icons.sentiment_neutral, color: Colors.amber, ); } // }, onRatingUpdate: (rating) { controller.selectRateItem(rating); }, ), ), const SizedBox( height: 20, ), SizedBox( width: Get.width * .75, child: TextFormField( maxLines: 4, minLines: 1, keyboardType: TextInputType.multiline, controller: controller.comment, decoration: InputDecoration( labelText: 'Enter your Note'.tr, hintText: 'Type something...'.tr, prefixIcon: const Icon( Icons.rate_review), // Add an icon as a prefix suffixIcon: IconButton( icon: const Icon( Icons.clear, color: AppColor.redColor, ), // Add an icon as a suffix onPressed: () { controller.comment.clear(); }, ), border: const OutlineInputBorder(), // Add a border around the input field enabledBorder: const OutlineInputBorder( borderSide: BorderSide( color: Colors.blue), // Customize the border color ), focusedBorder: const OutlineInputBorder( borderSide: BorderSide( color: Colors .green), // Customize the border color when focused ), errorBorder: const OutlineInputBorder( borderSide: BorderSide( color: Colors .red), // Customize the border color when there's an error ), ), ), ), const SizedBox( height: 20, ), MyElevatedButton( title: 'Submit rating'.tr, onPressed: () => controller.addRateToDriver()) ], ), )), ], isleading: false); } } ================================================== FILE PATH: ./lib/views/auth/register_page.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/auth/register_controller.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; import '../../constant/colors.dart'; class RegisterPage extends StatelessWidget { const RegisterPage({super.key}); @override Widget build(BuildContext context) { Get.put(RegisterController()); return MyScafolld( title: 'Register'.tr, body: [ GetBuilder( builder: (controller) => Form( key: controller.formKey, child: Padding( padding: const EdgeInsets.all(16.0), child: SingleChildScrollView( child: Container( decoration: const BoxDecoration( boxShadow: [ BoxShadow( offset: Offset(3, 3), color: AppColor.accentColor, blurRadius: 3) ], color: AppColor.secondaryColor, ), child: Padding( padding: const EdgeInsets.all(16), child: Column(children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SizedBox( width: Get.width * .4, child: TextFormField( keyboardType: TextInputType.text, controller: controller.firstNameController, decoration: InputDecoration( focusedBorder: OutlineInputBorder( borderSide: const BorderSide( color: AppColor.primaryColor, width: 2.0, ), borderRadius: BorderRadius.circular(10), ), fillColor: AppColor.accentColor, hoverColor: AppColor.accentColor, focusColor: AppColor.accentColor, border: const OutlineInputBorder( borderRadius: BorderRadius.all( Radius.circular(12))), labelText: 'First name'.tr, hintText: 'Enter your first name'.tr, ), validator: (value) { if (value!.isEmpty) { return 'Please enter your first name.'.tr; } return null; }, ), ), SizedBox( width: Get.width * .4, child: TextFormField( keyboardType: TextInputType.text, controller: controller.lastNameController, decoration: InputDecoration( focusedBorder: OutlineInputBorder( borderSide: const BorderSide( color: AppColor.primaryColor, width: 2.0, ), borderRadius: BorderRadius.circular(10), ), focusColor: AppColor.accentColor, fillColor: AppColor.accentColor, border: const OutlineInputBorder( borderRadius: BorderRadius.all( Radius.circular(12))), labelText: 'Last name'.tr, hintText: 'Enter your last name'.tr, ), validator: (value) { if (value!.isEmpty) { return 'Please enter your last name.'.tr; } return null; }, ), ), ], ), const SizedBox( height: 15, ), TextFormField( keyboardType: TextInputType.emailAddress, controller: controller.emailController, decoration: InputDecoration( focusedBorder: OutlineInputBorder( borderSide: const BorderSide( color: AppColor.primaryColor, width: 2.0, ), borderRadius: BorderRadius.circular(10), ), fillColor: AppColor.accentColor, hoverColor: AppColor.accentColor, focusColor: AppColor.accentColor, border: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(12))), labelText: 'Email'.tr, hintText: 'Enter your email address'.tr, ), validator: (value) { if (value!.isEmpty || (!value.contains('@') || !value.contains('.'))) { return 'Please enter Your Email.'.tr; } return null; }, ), const SizedBox( height: 15, ), TextFormField( obscureText: true, keyboardType: TextInputType.emailAddress, controller: controller.passwordController, decoration: InputDecoration( focusedBorder: OutlineInputBorder( borderSide: const BorderSide( color: AppColor.primaryColor, width: 2.0, ), borderRadius: BorderRadius.circular(10), ), fillColor: AppColor.accentColor, hoverColor: AppColor.accentColor, focusColor: AppColor.accentColor, border: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(12))), labelText: 'Password'.tr, hintText: 'Enter your Password'.tr, ), validator: (value) { if (value!.isEmpty) { return 'Please enter Your Password.'.tr; } if (value.length < 6) { return 'Password must br at least 6 character.' .tr; } return null; }, ), const SizedBox( height: 15, ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SizedBox( width: Get.width * .4, child: TextFormField( keyboardType: TextInputType.phone, cursorColor: AppColor.accentColor, controller: controller.phoneController, decoration: InputDecoration( focusedBorder: OutlineInputBorder( borderSide: const BorderSide( color: AppColor.primaryColor, width: 2.0, ), borderRadius: BorderRadius.circular(10), ), focusColor: AppColor.accentColor, fillColor: AppColor.accentColor, border: const OutlineInputBorder( borderRadius: BorderRadius.all( Radius.circular(12))), labelText: 'Phone'.tr, hintText: 'Enter your phone number'.tr, ), validator: (value) { if (value!.isEmpty || value.length != 10) { return 'Please enter your phone number.'.tr; } return null; }, ), ), SizedBox( width: Get.width * .4, child: TextFormField( keyboardType: TextInputType.text, controller: controller.siteController, decoration: InputDecoration( focusedBorder: OutlineInputBorder( borderSide: const BorderSide( color: AppColor.primaryColor, width: 2.0, ), borderRadius: BorderRadius.circular(10), ), focusColor: AppColor.accentColor, fillColor: AppColor.accentColor, border: const OutlineInputBorder( borderRadius: BorderRadius.all( Radius.circular(12))), labelText: 'City'.tr, hintText: 'Enter your City'.tr, ), validator: (value) { if (value!.isEmpty) { return 'Please enter your City.'.tr; } return null; }, ), ), ], ), const SizedBox( height: 15, ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ InkWell( onTap: () => controller.getBirthDate(), child: Container( height: 50, width: Get.width * .4, decoration: BoxDecoration( border: Border.all(), borderRadius: BorderRadius.circular(13)), child: Padding( padding: const EdgeInsets.symmetric( horizontal: 20), child: Text( controller.birthDate, style: AppStyle.title, ), ), ), ), // DropdownButton( // value: controller.gender, // items: [ // DropdownMenuItem( // value: 'Male'.tr, // child: Text('Male'.tr), // ), // DropdownMenuItem( // value: 'Female'.tr, // child: Text('Female'.tr), // ), // DropdownMenuItem( // value: '--'.tr, // child: Text('--'.tr), // ), // ], // onChanged: (value) { // controller.changeGender(value!); // }, // ) ], ), MyElevatedButton( title: 'Register'.tr, onPressed: () => controller.register()) ]), ), ), ), ), ), ) ], isleading: true); } } ================================================== FILE PATH: ./lib/views/auth/verify_email_page.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/auth/register_controller.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; class VerifyEmailPage extends StatelessWidget { const VerifyEmailPage({super.key}); @override Widget build(BuildContext context) { Get.put(RegisterController()); return MyScafolld( title: 'Verify Email'.tr, body: [ Positioned( top: 10, left: 20, right: 20, child: Text( 'We sent 5 digit to your Email provided'.tr, style: AppStyle.title.copyWith(fontSize: 20), )), GetBuilder( builder: (controller) => Positioned( top: 100, left: 80, right: 80, child: Padding( padding: const EdgeInsets.all(10), child: Column( children: [ SizedBox( width: 100, child: TextField( controller: controller.verifyCode, decoration: InputDecoration( labelStyle: AppStyle.title, border: const OutlineInputBorder(), hintText: '5 digit'.tr, counterStyle: AppStyle.number, hintStyle: AppStyle.subtitle .copyWith(color: AppColor.accentColor), ), maxLength: 5, keyboardType: TextInputType.number, ), ), const SizedBox( height: 30, ), MyElevatedButton( title: 'Send Verfication Code'.tr, onPressed: () => controller.sendVerifications()) ], ), ), )), ], isleading: true, ); } Padding verifyEmail() { return Padding( padding: const EdgeInsets.symmetric(horizontal: 10), child: Container( decoration: BoxDecoration( border: Border.all( color: AppColor.accentColor, width: 2, ), borderRadius: BorderRadius.circular(8), ), child: const Padding( padding: EdgeInsets.all(10), child: SizedBox( width: 20, child: TextField( maxLength: 1, keyboardType: TextInputType.number, ), ), ), ), ); } } ================================================== FILE PATH: ./lib/views/auth/sms_verfy_page.dart ================================================== import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/auth/register_controller.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; import 'package:Intaleq/views/widgets/my_textField.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../controller/local/phone_intel/intl_phone_field.dart'; import '../../print.dart'; import '../widgets/mycircular.dart'; // import 'package:intl_phone_field/intl_phone_field.dart'; class SmsSignupEgypt extends StatelessWidget { SmsSignupEgypt({super.key}); @override Widget build(BuildContext context) { Get.put(RegisterController()); return MyScafolld( title: "Phone Number Check".tr, body: [ GetBuilder(builder: (registerController) { return ListView( children: [ // Logo at the top Padding( padding: const EdgeInsets.only(bottom: 20.0), child: Image.asset( 'assets/images/logo.png', // Make sure you have a logo image in your assets folder height: 100, ), ), // Message to the driver Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), child: Text( 'We need your phone number to contact you and to help you.' .tr, textAlign: TextAlign.center, style: AppStyle.title, ), ), // Phone number input field with country code dropdown Padding( padding: const EdgeInsets.all(16.0), child: IntlPhoneField( decoration: InputDecoration( labelText: 'Phone Number'.tr, border: const OutlineInputBorder( borderSide: BorderSide(), ), ), initialCountryCode: 'EG', onChanged: (phone) { // Properly concatenate country code and number registerController.phoneController.text = phone.completeNumber.toString(); Log.print(' phone.number: ${phone.number}'); print( "Formatted phone number: ${registerController.phoneController.text}"); }, validator: (phone) { // Check if the phone number is not null and is valid if (phone == null || phone.completeNumber.isEmpty) { return 'Please enter your phone number'; } // Extract the phone number (excluding the country code) final number = phone.completeNumber.toString(); // Check if the number length is exactly 11 digits if (number.length != 13) { return 'Phone number must be exactly 11 digits long'; } // If all validations pass, return null return null; }, ), ), const SizedBox( height: 10, ), if (registerController.isSent) Padding( padding: const EdgeInsets.all(16.0), child: Form( key: registerController.formKey3, child: MyTextForm( controller: registerController.verifyCode, label: '5 digit'.tr, hint: '5 digit'.tr, type: TextInputType.number), ), ), // Submit button registerController.isLoading ? const MyCircularProgressIndicator() : Padding( padding: const EdgeInsets.all(16.0), child: MyElevatedButton( onPressed: () async { !registerController.isSent ? await registerController.sendOtpMessage() : await registerController.verifySMSCode(); }, title: 'Submit'.tr, ), ), ], ); }), ], isleading: false, ); } } ================================================== FILE PATH: ./lib/views/auth/login_page.dart ================================================== import 'package:Intaleq/controller/functions/crud.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_widget_from_html/flutter_widget_from_html.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/main.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; import 'package:path/path.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../constant/info.dart'; import '../../controller/auth/apple_signin_controller.dart'; import '../../controller/auth/login_controller.dart'; import '../widgets/elevated_btn.dart'; import 'otp_page.dart'; class LoginPage extends StatelessWidget { final controller = Get.put(LoginController()); final AuthController authController = Get.put(AuthController()); LoginPage({super.key}); @override Widget build(BuildContext context) { Get.put(LoginController()); Get.put(CRUD()); return GetBuilder( builder: (controller) => MyScafolld( title: 'Login'.tr, isleading: false, body: [ if (box.read(BoxName.agreeTerms) != 'agreed') _buildAgreementPage(context, controller) else if (box.read(BoxName.locationPermission) != 'true') _buildLocationPermissionDialog(controller) // else if (box.read(BoxName.isTest).toString() == '0') // buildEmailPasswordForm(controller) else // _buildLoginContent(controller, authController), PhoneNumberScreen() ], ), ); } Widget _buildAgreementPage(BuildContext context, LoginController controller) { // This UI can be identical to the one in LoginPage for consistency. // I am reusing the improved design from the previous request. return Padding( padding: const EdgeInsets.all(24.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon(Icons.policy_outlined, size: 80, color: AppColor.primaryColor), const SizedBox(height: 20), Text("passenger agreement".tr, textAlign: TextAlign.center, style: AppStyle.headTitle2), const SizedBox(height: 30), RichText( textAlign: TextAlign.center, text: TextSpan( style: AppStyle.title.copyWith(height: 1.5), children: [ TextSpan( text: "To become a passenger, you must review and agree to the " .tr), TextSpan( text: 'Terms of Use'.tr, style: const TextStyle( decoration: TextDecoration.underline, color: AppColor.blueColor, fontWeight: FontWeight.bold), recognizer: TapGestureRecognizer() ..onTap = () { launchUrl(Uri.parse( 'https://intaleq.xyz/intaleq/privacy_policy.php')); }), TextSpan(text: " and acknowledge our Privacy Policy.".tr), ], ), ), Expanded( child: Container( decoration: BoxDecoration( border: Border.all(color: Colors.grey.shade300), borderRadius: BorderRadius.circular(8), ), child: SingleChildScrollView( padding: const EdgeInsets.all(12), child: HtmlWidget(box.read(BoxName.lang).toString() == 'ar' ? AppInformation.privacyPolicyArabic : AppInformation.privacyPolicy), ), ), ), CheckboxListTile( title: Text('I Agree'.tr, style: AppStyle.title), value: controller.isAgreeTerms, onChanged: (value) => controller.changeAgreeTerm(), activeColor: AppColor.primaryColor, controlAffinity: ListTileControlAffinity.leading, ), const SizedBox(height: 16), SizedBox( width: double.infinity, child: MyElevatedButton( title: 'Continue'.tr, onPressed: controller.isAgreeTerms ? () => controller.saveAgreementTerms() : () {}, ), ), ], ), ); } Widget buildEmailPasswordForm(LoginController controller) { return Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.2), spreadRadius: 2, blurRadius: 5, offset: const Offset(0, 3), ), ], ), child: Form( key: controller.formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ TextFormField( keyboardType: TextInputType.emailAddress, controller: controller.emailController, decoration: InputDecoration( labelText: 'Email'.tr, hintText: 'Your email address'.tr, border: const OutlineInputBorder(), ), validator: (value) => value == null || value.isEmpty || !value.contains('@') || !value.contains('.') ? 'Enter a valid email'.tr : null, ), const SizedBox(height: 16), TextFormField( obscureText: true, controller: controller.passwordController, decoration: InputDecoration( labelText: 'Password'.tr, hintText: 'Your password'.tr, border: const OutlineInputBorder(), ), validator: (value) => value == null || value.isEmpty ? 'Enter your password'.tr : null, ), const SizedBox(height: 24), GetBuilder( builder: (controller) => controller.isloading ? const Center(child: CircularProgressIndicator()) : ElevatedButton( onPressed: () { if (controller.formKey.currentState!.validate()) { controller.login(); } }, child: Text('Submit'.tr), ), ), ], ), ), ); } Widget _buildLocationPermissionDialog(LoginController controller) { return Padding( padding: const EdgeInsets.all(32), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon(Icons.location_on, size: 60, color: AppColor.primaryColor), const SizedBox(height: 20), Text( 'Enable Location Access'.tr, style: AppStyle.headTitle2, textAlign: TextAlign.center, ), const SizedBox(height: 10), Text( 'We need your location to find nearby drivers for pickups and drop-offs.' .tr, textAlign: TextAlign.center, style: AppStyle.title, ), const SizedBox(height: 20), ElevatedButton( onPressed: () async => await controller.getLocationPermission(), child: Text('Next'.tr), // child: Text('Allow Location Access'.tr), ), // TextButton( // onPressed: () => openAppSettings(), // child: Text('Open Settings'.tr), // ), ], ), ); } } ================================================== FILE PATH: ./lib/views/auth/otp_page.dart ================================================== import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; // --- placeholder imports --- // These are assumed to exist from your original code. // Make sure to have these files and controllers properly set up in your project. import 'package:Intaleq/controller/auth/login_controller.dart'; import '../../controller/auth/otp_controller.dart'; // Assumed to be PhoneAuthHelper import '../../controller/local/phone_intel/intl_phone_field.dart'; // --- end of placeholder imports --- /// A visually revamped authentication screen with a glassmorphism effect. /// It provides a consistent and beautiful UI for all authentication steps. /// /// A hidden feature for testers is included: a long-press on the logo /// will open a dialog for email/password login, suitable for app reviews. class AuthScreen extends StatelessWidget { final String title; final String subtitle; final Widget form; const AuthScreen({ super.key, required this.title, required this.subtitle, required this.form, }); /// Shows a dialog for testers to log in using email and password. /// This is triggered by a long-press on the logo or the explicit tester button. void _showTesterLoginDialog( BuildContext context, LoginController controller) { final testerEmailController = TextEditingController(); final testerPasswordController = TextEditingController(); final testerFormKey = GlobalKey(); // Brand Color for Logic (Cyan/Teal from the Arrow in the logo) const Color brandColor = Color(0xFF00E5FF); showDialog( context: context, barrierDismissible: true, builder: (BuildContext dialogContext) { return BackdropFilter( filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), child: AlertDialog( // Updated background to match new theme (Dark Purple/Indigo) backgroundColor: const Color(0xFF1A1A2E).withOpacity(0.90), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), title: const Text( 'App Tester Login', textAlign: TextAlign.center, style: TextStyle(fontWeight: FontWeight.bold, color: Colors.white), ), content: Form( key: testerFormKey, child: Column( mainAxisSize: MainAxisSize.min, children: [ TextFormField( controller: testerEmailController, keyboardType: TextInputType.emailAddress, style: const TextStyle(color: Colors.white), decoration: InputDecoration( labelText: 'Email', labelStyle: TextStyle(color: Colors.white.withOpacity(0.7)), prefixIcon: Icon(Icons.email_outlined, color: Colors.white.withOpacity(0.7)), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide(color: Colors.white.withOpacity(0.3)), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), // Changed to Brand Cyan borderSide: const BorderSide(color: brandColor), ), ), validator: (value) => value == null || !value.contains('@') ? 'Enter a valid email' : null, ), const SizedBox(height: 16), TextFormField( controller: testerPasswordController, obscureText: true, style: const TextStyle(color: Colors.white), decoration: InputDecoration( labelText: 'Password', labelStyle: TextStyle(color: Colors.white.withOpacity(0.7)), prefixIcon: Icon(Icons.lock_outline, color: Colors.white.withOpacity(0.7)), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide(color: Colors.white.withOpacity(0.3)), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), // Changed to Brand Cyan borderSide: const BorderSide(color: brandColor), ), ), validator: (value) => value == null || value.isEmpty ? 'Enter a password' : null, ), ], ), ), actions: [ TextButton( child: const Text('Cancel', style: TextStyle(color: Colors.white70)), onPressed: () => Navigator.of(dialogContext).pop(), ), ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: brandColor, // Updated Button Color shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), ), child: const Text('Login', style: TextStyle( color: Color(0xFF1A1A2E), fontWeight: FontWeight.bold)), onPressed: () { if (testerFormKey.currentState!.validate()) { // Use the main controller to perform login controller.emailController.text = testerEmailController.text; controller.passwordController.text = testerPasswordController.text; controller.login(); Navigator.of(dialogContext).pop(); } }, ), ], ), ); }, ); } @override Widget build(BuildContext context) { // We still need the controller for the hidden tester login final loginController = Get.find(); return Scaffold( body: Container( // NEW DESIGN: Deep Purple/Indigo Gradient to match the "N" body decoration: const BoxDecoration( gradient: LinearGradient( // Dark Indigo -> Deep Purple -> Dark Blue colors: [Color(0xFF2E1C59), Color(0xFF1A237E), Color(0xFF0D1117)], begin: Alignment.topLeft, end: Alignment.bottomRight, ), ), child: Stack( children: [ // Background shapes updated to match the Logo accents // Shape 1: The Orange/Red Swoosh color Positioned( top: -80, left: -80, child: Container( width: 250, height: 250, decoration: BoxDecoration( shape: BoxShape.circle, // Orange/Red from the swoosh lines color: const Color(0xFFFF5722).withOpacity(0.12), boxShadow: [ BoxShadow( color: const Color(0xFFFF5722).withOpacity(0.2), blurRadius: 50, spreadRadius: 10, ) ]), ), ), // Shape 2: The Cyan/Teal Arrow color Positioned( bottom: -100, right: -80, child: Container( width: 350, height: 350, decoration: BoxDecoration( shape: BoxShape.circle, // Cyan/Teal from the arrow tip color: const Color(0xFF00E5FF).withOpacity(0.08), boxShadow: [ BoxShadow( color: const Color(0xFF00E5FF).withOpacity(0.15), blurRadius: 60, spreadRadius: 5, ) ]), ), ), Center( child: SingleChildScrollView( padding: const EdgeInsets.symmetric(horizontal: 24.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // GestureDetector to handle long-press for tester login GestureDetector( onLongPress: () { _showTesterLoginDialog(context, loginController); }, child: Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( shape: BoxShape.circle, color: Colors.white.withOpacity(0.05), border: Border.all( // Gradient border for the logo container color: Colors.white.withOpacity(0.1), width: 1)), child: ClipRRect( borderRadius: BorderRadius.circular(50), child: Image.asset('assets/images/logo.gif', height: 100)), ), ), const SizedBox(height: 20), Text( title, textAlign: TextAlign.center, style: const TextStyle( fontSize: 28, fontWeight: FontWeight.bold, color: Colors.white, shadows: [ Shadow( blurRadius: 15.0, color: Color(0xFF000000), // Darker shadow offset: Offset(0, 4)), ]), ), const SizedBox(height: 10), Text( subtitle, textAlign: TextAlign.center, style: TextStyle( fontSize: 16, color: Colors.white.withOpacity(0.75), ), ), const SizedBox(height: 30), // Glassmorphism Container for the form ClipRRect( borderRadius: BorderRadius.circular(25.0), child: BackdropFilter( filter: ImageFilter.blur( sigmaX: 20, sigmaY: 20), // Increased blur child: Container( padding: const EdgeInsets.all(24.0), decoration: BoxDecoration( // Slightly darker tint for better contrast with Cyan inputs color: const Color(0xFF1A237E).withOpacity(0.2), borderRadius: BorderRadius.circular(25.0), border: Border.all( color: Colors.white.withOpacity(0.1), width: 1.0, ), ), child: form, // The form from the specific screen is placed here ), ), ), const SizedBox(height: 20), // A more distinct button for app testers Material( color: Colors.transparent, child: InkWell( onTap: () => _showTesterLoginDialog(context, loginController), borderRadius: BorderRadius.circular(12), child: Padding( padding: const EdgeInsets.symmetric( vertical: 10, horizontal: 16), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon(Icons.admin_panel_settings_outlined, color: Colors.white.withOpacity(0.5)), const SizedBox(width: 8), Text( 'For App Reviewers / Testers', style: TextStyle( color: Colors.white.withOpacity(0.5), fontWeight: FontWeight.w400, fontSize: 12), ), ], ), ), ), ), ], ), ), ), ], ), ), ); } } // --- UI Screens --- // Note: These screens now use the new AuthScreen wrapper and have updated styling // for their form elements to match the new design. class PhoneNumberScreen extends StatefulWidget { const PhoneNumberScreen({super.key}); @override State createState() => _PhoneNumberScreenState(); } class _PhoneNumberScreenState extends State { final _phoneController = TextEditingController(); final _formKey = GlobalKey(); bool _isLoading = false; // Brand Color for Focus (Cyan/Teal) final Color _focusColor = const Color(0xFF00E5FF); static String formatSyrianPhone(String phone) { // Remove spaces, symbols, +, -, () phone = phone.replaceAll(RegExp(r'[ \-\(\)\+]'), '').trim(); // Normalize 00963 → 963 if (phone.startsWith('00963')) { phone = phone.replaceFirst('00963', '963'); } // Normalize 0963 → 963 if (phone.startsWith('0963')) { phone = phone.replaceFirst('0963', '963'); } // NEW: Fix 96309xxxx → 9639xxxx if (phone.startsWith('96309')) { phone = '9639' + phone.substring(5); // remove the "0" after 963 } // If starts with 9630 → correct to 9639 if (phone.startsWith('9630')) { phone = '9639' + phone.substring(4); } // If already in correct format: 9639xxxxxxxx if (phone.startsWith('9639') && phone.length == 12) { return phone; } // If starts with 963 but missing the 9 if (phone.startsWith('963') && phone.length > 3) { // Ensure it begins with 9639 if (!phone.startsWith('9639')) { phone = '9639' + phone.substring(3); } return phone; } // If starts with 09xxxxxxxx → 9639xxxxxxxx if (phone.startsWith('09')) { return '963' + phone.substring(1); } // If 9xxxxxxxx (9 digits) if (phone.startsWith('9') && phone.length == 9) { return '963' + phone; } // If starts with incorrect 0xxxxxxx → assume Syrian and fix if (phone.startsWith('0') && phone.length == 10) { return '963' + phone.substring(1); } return phone; } void _submit() async { if (_formKey.currentState!.validate()) { setState(() => _isLoading = true); // PRODUCTION READY: Using the actual PhoneAuthHelper final rawPhone = _phoneController.text.trim().replaceFirst('+', ''); final success = await PhoneAuthHelper.sendOtp(rawPhone); if (success && mounted) { // Get.to(() => OtpVerificationScreen(phoneNumber: rawPhone)); await PhoneAuthHelper.verifyOtp( rawPhone, ); // For testing purposes, auto-verify with a dummy OTP } if (mounted) setState(() => _isLoading = false); } } @override Widget build(BuildContext context) { return AuthScreen( title: 'welcome to intaleq'.tr, subtitle: 'login or register subtitle'.tr, form: Form( key: _formKey, child: Column( mainAxisSize: MainAxisSize.min, children: [ Text( 'Enter your phone number'.tr, style: TextStyle(color: Colors.white.withOpacity(0.9), fontSize: 16), textAlign: TextAlign.center, ), const SizedBox(height: 20), IntlPhoneField( showCountryFlag: false, searchText: 'Search country'.tr, languageCode: 'ar', style: const TextStyle(color: Colors.white), dropdownTextStyle: const TextStyle( color: Colors .white), // Changed to White for visibility on dark BG decoration: InputDecoration( labelText: 'Phone Number'.tr, hintText: 'witout zero'.tr, labelStyle: TextStyle(color: Colors.white.withOpacity(0.7)), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide(color: Colors.white.withOpacity(0.3)), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), // Updated to Logo Cyan borderSide: BorderSide(color: _focusColor, width: 2), ), ), initialCountryCode: 'SY', onChanged: (phone) { _phoneController.text = phone.completeNumber; }, validator: (phone) { if (phone == null || phone.number.isEmpty) { return 'Please enter your phone number'.tr; } if (phone.number.startsWith('0')) { return 'Please enter the number without the leading 0'.tr; } if (phone.completeNumber.length < 10) { // Example validation return 'Phone number seems too short'.tr; } return null; }, ), const SizedBox(height: 24), _isLoading ? const CircularProgressIndicator(color: Colors.white) : SizedBox( width: double.infinity, child: ElevatedButton( onPressed: _submit, style: ElevatedButton.styleFrom( // Updated to Logo Cyan backgroundColor: _focusColor, padding: const EdgeInsets.symmetric(vertical: 16), elevation: 5, shadowColor: _focusColor.withOpacity(0.5), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12)), ), child: Text( 'send otp button'.tr, style: const TextStyle( fontSize: 16, fontWeight: FontWeight.bold, // Text is dark to contrast with bright Cyan color: Color(0xFF1A1A2E)), ), ), ), ], ), ), ); } } class OtpVerificationScreen extends StatefulWidget { final String phoneNumber; const OtpVerificationScreen({super.key, required this.phoneNumber}); @override State createState() => _OtpVerificationScreenState(); } class _OtpVerificationScreenState extends State { final _formKey = GlobalKey(); final _otpController = TextEditingController(); bool _isLoading = false; // Brand Color final Color _brandColor = const Color(0xFF00E5FF); void _submit() async { if (_formKey.currentState!.validate()) { setState(() => _isLoading = true); // PRODUCTION READY: Using the actual PhoneAuthHelper // await PhoneAuthHelper.verifyOtp(widget.phoneNumber, _otpController.text); if (mounted) setState(() => _isLoading = false); } } @override Widget build(BuildContext context) { return AuthScreen( title: 'verify your number title'.tr, subtitle: 'otp sent subtitle'.trParams({'phoneNumber': widget.phoneNumber}), form: Column( mainAxisSize: MainAxisSize.min, children: [ Text( 'Enter the 5-digit code'.tr, style: TextStyle(color: Colors.white.withOpacity(0.9), fontSize: 16), textAlign: TextAlign.center, ), const SizedBox(height: 20), Form( key: _formKey, child: TextFormField( controller: _otpController, textAlign: TextAlign.center, keyboardType: TextInputType.number, maxLength: 5, style: const TextStyle( fontSize: 28, fontWeight: FontWeight.bold, color: Colors.white, letterSpacing: 18, // Visually separates the digits ), decoration: InputDecoration( counterText: "", hintText: '-----', hintStyle: TextStyle( color: Colors.white.withOpacity(0.1), letterSpacing: 18, fontSize: 28), border: InputBorder.none, contentPadding: const EdgeInsets.symmetric(vertical: 10), // Add a subtle underline for the OTP area using brand color enabledBorder: UnderlineInputBorder( borderSide: BorderSide(color: Colors.white.withOpacity(0.2))), focusedBorder: UnderlineInputBorder( borderSide: BorderSide(color: _brandColor)), ), validator: (v) => v == null || v.length < 5 ? '' : null, ), ), const SizedBox(height: 30), _isLoading ? const CircularProgressIndicator(color: Colors.white) : SizedBox( width: double.infinity, child: ElevatedButton( onPressed: _submit, style: ElevatedButton.styleFrom( backgroundColor: _brandColor, // Updated padding: const EdgeInsets.symmetric(vertical: 16), elevation: 5, shadowColor: _brandColor.withOpacity(0.5), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12)), ), child: Text( 'verify and continue button'.tr, style: const TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: Color(0xFF1A1A2E)), ), ), ), ], ), ); } } class RegistrationScreen extends StatefulWidget { final String phoneNumber; const RegistrationScreen({super.key, required this.phoneNumber}); @override State createState() => _RegistrationScreenState(); } class _RegistrationScreenState extends State { final _formKey = GlobalKey(); final _firstNameController = TextEditingController(); final _lastNameController = TextEditingController(); final _emailController = TextEditingController(); bool _isLoading = false; // Brand Color final Color _brandColor = const Color(0xFF00E5FF); void _submit() async { if (_formKey.currentState!.validate()) { setState(() => _isLoading = true); // PRODUCTION READY: Using the actual PhoneAuthHelper await PhoneAuthHelper.registerUser( phoneNumber: widget.phoneNumber, firstName: _firstNameController.text.trim(), lastName: _lastNameController.text.trim(), email: _emailController.text.trim(), ); if (mounted) setState(() => _isLoading = false); } } // Helper to create styled text form fields Widget _buildTextFormField({ required TextEditingController controller, required String label, TextInputType keyboardType = TextInputType.text, String? Function(String?)? validator, }) { return TextFormField( controller: controller, style: const TextStyle(color: Colors.white), decoration: InputDecoration( labelText: label, labelStyle: TextStyle(color: Colors.white.withOpacity(0.7)), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide(color: Colors.white.withOpacity(0.3)), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), // Updated to Logo Cyan borderSide: BorderSide(color: _brandColor, width: 2), ), ), keyboardType: keyboardType, validator: validator, ); } @override Widget build(BuildContext context) { return AuthScreen( title: 'one last step title'.tr, subtitle: 'complete profile subtitle'.tr, form: Form( key: _formKey, child: Column( mainAxisSize: MainAxisSize.min, children: [ _buildTextFormField( controller: _firstNameController, label: 'first name label'.tr, validator: (v) => v!.isEmpty ? 'first name required'.tr : null, ), const SizedBox(height: 16), _buildTextFormField( controller: _lastNameController, label: 'last name label'.tr, validator: (v) => v!.isEmpty ? 'last name required'.tr : null, ), const SizedBox(height: 16), _buildTextFormField( controller: _emailController, label: 'email optional label'.tr, keyboardType: TextInputType.emailAddress, ), const SizedBox(height: 24), _isLoading ? const CircularProgressIndicator(color: Colors.white) : SizedBox( width: double.infinity, child: ElevatedButton( onPressed: _submit, style: ElevatedButton.styleFrom( backgroundColor: _brandColor, // Updated padding: const EdgeInsets.symmetric(vertical: 16), elevation: 5, shadowColor: _brandColor.withOpacity(0.5), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12)), ), child: Text( 'complete registration button'.tr, style: const TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: Color(0xFF1A1A2E)), ), ), ), ], ), ), ); } } ================================================== FILE PATH: ./lib/views/auth/otp_token_page.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../controller/auth/token_otp_change_controller.dart'; class OtpVerificationPage extends StatefulWidget { final String phone; final String deviceToken; final String token; final String ptoken; const OtpVerificationPage({ super.key, required this.phone, required this.deviceToken, required this.token, required this.ptoken, }); @override State createState() => _OtpVerificationPageState(); } class _OtpVerificationPageState extends State { late final OtpVerificationController controller; final List _focusNodes = List.generate(6, (index) => FocusNode()); final List _textControllers = List.generate(5, (index) => TextEditingController()); @override void initState() { super.initState(); controller = Get.put(OtpVerificationController( phone: widget.phone, deviceToken: widget.deviceToken, token: widget.token, )); } @override void dispose() { for (var node in _focusNodes) { node.dispose(); } for (var controller in _textControllers) { controller.dispose(); } super.dispose(); } void _onOtpChanged(String value, int index) { if (value.isNotEmpty) { if (index < 5) { _focusNodes[index + 1].requestFocus(); } else { _focusNodes[index].unfocus(); // إلغاء التركيز بعد آخر حقل } } else if (index > 0) { _focusNodes[index - 1].requestFocus(); } // تجميع نصوص كل الحقول لتكوين الرمز النهائي controller.otpCode.value = _textControllers.map((c) => c.text).join(); } Widget _buildOtpInputFields() { return Directionality( textDirection: TextDirection.ltr, // لضمان ترتيب الحقول من اليسار لليمين child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: List.generate(5, (index) { return SizedBox( width: 45, height: 55, child: TextFormField( controller: _textControllers[index], focusNode: _focusNodes[index], textAlign: TextAlign.center, keyboardType: TextInputType.number, maxLength: 1, style: const TextStyle(fontSize: 22, fontWeight: FontWeight.bold), decoration: InputDecoration( counterText: "", border: OutlineInputBorder( borderRadius: BorderRadius.circular(12), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide(color: Colors.grey.shade300), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide( color: Theme.of(context).primaryColor, width: 2), ), ), onChanged: (value) => _onOtpChanged(value, index), ), ); }), ), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Verify OTP'.tr), backgroundColor: Colors.transparent, elevation: 0, centerTitle: true, ), backgroundColor: Colors.grey[50], body: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(24.0), child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ const SizedBox(height: 20), Icon(Icons.phonelink_lock_rounded, size: 80, color: Theme.of(context).primaryColor), const SizedBox(height: 24), Text( 'Verification Code'.tr, style: const TextStyle(fontSize: 24, fontWeight: FontWeight.bold), ), const SizedBox(height: 12), Padding( padding: const EdgeInsets.symmetric(horizontal: 20.0), child: Text( '${'We have sent a verification code to your mobile number:'.tr} ${widget.phone}', textAlign: TextAlign.center, style: TextStyle( color: Colors.grey.shade600, fontSize: 16, height: 1.5), ), ), const SizedBox(height: 40), _buildOtpInputFields(), const SizedBox(height: 40), Obx(() => SizedBox( width: double.infinity, height: 50, child: controller.isVerifying.value ? const Center(child: CircularProgressIndicator()) : ElevatedButton( style: ElevatedButton.styleFrom( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12))), onPressed: () => controller.verifyOtp(widget.ptoken), child: Text('Verify'.tr, style: const TextStyle( fontSize: 18, fontWeight: FontWeight.w600)), ), )), const SizedBox(height: 24), Obx( () => controller.canResend.value ? TextButton( onPressed: controller.sendOtp, child: Text('Resend Code'.tr), ) : Text( '${'You can resend in'.tr} ${controller.countdown.value} ${'seconds'.tr}', style: const TextStyle(color: Colors.grey), ), ) ], ), ), ), ); } } ================================================== FILE PATH: ./lib/views/notification/notification_page.dart ================================================== import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import '../../controller/notification/passenger_notification_controller.dart'; import '../widgets/my_scafold.dart'; import '../widgets/mycircular.dart'; class NotificationPage extends StatelessWidget { const NotificationPage({super.key}); @override Widget build(BuildContext context) { Get.put(PassengerNotificationController()); return MyScafolld( isleading: true, title: 'Notifications', body: [ GetBuilder( builder: (notificationCaptainController) => notificationCaptainController .isloading ? const MyCircularProgressIndicator() // iOS-style loading indicator : SafeArea( child: ListView.builder( itemCount: notificationCaptainController .notificationData['message'].length, itemBuilder: (BuildContext context, int index) { if (notificationCaptainController .notificationData['message'] == "No notification data found") { Get.defaultDialog( title: 'No Notifications'.tr, content: Text( 'No notification data found.'.tr, ), ); } var res = notificationCaptainController .notificationData['message'][index]; return Padding( padding: const EdgeInsets.symmetric( horizontal: 8, vertical: 4), child: CupertinoListTile( backgroundColor: res['isShown'] == 'true' ? AppColor.secondaryColor.withOpacity(.2) : AppColor.secondaryColor.withOpacity(.8), leading: res['isShown'] == 'true' ? const Icon(CupertinoIcons.bell_slash_fill) : const Icon(CupertinoIcons.bell_fill), title: Text( res['title'], style: AppStyle.title.copyWith( color: CupertinoColors.black, ), ), subtitle: Text( res['body'], style: AppStyle.subtitle.copyWith( color: CupertinoColors.systemGrey, ), ), onTap: () { showCupertinoDialog( context: context, builder: (BuildContext context) { return CupertinoAlertDialog( title: Text( res['title'], style: AppStyle.title, ), content: Text( res['body'], style: AppStyle.subtitle, ), actions: [ CupertinoDialogAction( child: const Text('Ok'), onPressed: () { notificationCaptainController .updateNotification( res['id'].toString()); Get.back(); }, ), ], ); }, ); }, ), ); }, ), ), ) ], ); } } ================================================== FILE PATH: ./lib/views/notification/notification_captain.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/notification/notification_captain_controller.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:Intaleq/views/widgets/my_scafold.dart'; import 'package:Intaleq/views/widgets/mycircular.dart'; class NotificationCaptain extends StatelessWidget { const NotificationCaptain({super.key}); @override Widget build(BuildContext context) { Get.put(NotificationCaptainController()); return MyScafolld( title: 'Notifications'.tr, body: [ GetBuilder( builder: (notificationCaptainController) => notificationCaptainController.isLoading ? const MyCircularProgressIndicator() : SafeArea( child: ListView.builder( itemCount: notificationCaptainController .notificationData['message'].length, itemBuilder: (BuildContext context, int index) { if (notificationCaptainController .notificationData['message'] == "No notification data found") { Get.defaultDialog(); } var res = notificationCaptainController .notificationData['message'][index]; return Card( elevation: 4, child: ListTile( onTap: () { Get.defaultDialog( title: res['title'], titleStyle: AppStyle.title, content: SizedBox( width: Get.width * .8, height: Get.height * .4, child: Text( res['body'], style: AppStyle.title, ), ), confirm: MyElevatedButton( title: 'Ok', onPressed: () { //todo sql readen })); }, leading: const Icon(Icons.notification_important), title: Text( res['title'], style: AppStyle.title, ), subtitle: Text( res['body'], style: AppStyle.subtitle, ), ), ); }, ), )) ], isleading: true, ); } } ================================================== FILE PATH: ./lib/views/lang/languages.dart ================================================== import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../controller/local/local_controller.dart'; import '../home/map_page_passenger.dart'; class Language extends StatelessWidget { const Language({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( middle: Text('Choose Language'.tr), border: null, ), child: Material( // Wrap SafeArea with Material widget child: SafeArea( child: GetBuilder( builder: (controller) => Center( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildHeader(), const SizedBox(height: 20), Expanded( child: ListView( physics: const BouncingScrollPhysics(), children: [ _buildLanguageButton( 'العربية', 'ar', controller, context, '🇪🇬'), _buildLanguageButton('العربية (الخليج)', 'ar-gulf', controller, context, '🇸🇦'), _buildLanguageButton('العربية (المغرب)', 'ar-ma', controller, context, '🇲🇦'), _buildLanguageButton( 'English', 'en', controller, context, '🇺🇸'), _buildLanguageButton( 'Türkçe', 'tr', controller, context, '🇹🇷'), _buildLanguageButton( 'Français', 'fr', controller, context, '🇫🇷'), _buildLanguageButton( 'Italiano', 'it', controller, context, '🇮🇹'), _buildLanguageButton( 'Deutsch', 'de', controller, context, '🇩🇪'), _buildLanguageButton( 'Ελληνικά', 'el', controller, context, '🇬🇷'), _buildLanguageButton( 'Español', 'es', controller, context, '🇪🇸'), _buildLanguageButton( 'فارسی', 'fa', controller, context, '🇮🇷'), _buildLanguageButton( '中文', 'zh', controller, context, '🇨🇳'), _buildLanguageButton( 'Русский', 'ru', controller, context, '🇷🇺'), _buildLanguageButton( 'हिन्दी', 'hi', controller, context, '🇮🇳'), ], ), ), ], ), ), ), ), ), ), ); } Widget _buildHeader() { return Padding( padding: const EdgeInsets.only(top: 20, bottom: 10), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Language Options'.tr, style: const TextStyle( fontSize: 24, fontWeight: FontWeight.bold, color: CupertinoColors.black, // Or your theme primary color ), textAlign: TextAlign.start, ), const SizedBox(height: 8), Text( "Select your preferred language for the app interface.".tr, style: TextStyle( fontSize: 16, color: CupertinoColors.secondaryLabel, ), textAlign: TextAlign.start, ), ], ), ); } Widget _buildLanguageButton(String title, String langCode, LocaleController controller, BuildContext context, String flagIcon) { return Container( decoration: BoxDecoration( color: CupertinoColors.white, borderRadius: BorderRadius.circular(12), boxShadow: [ BoxShadow( color: CupertinoColors.systemGrey5.withOpacity(0.5), spreadRadius: 1, blurRadius: 3, offset: const Offset(0, 2), ), ], ), child: ListTile( leading: Text(flagIcon, style: const TextStyle(fontSize: 28)), // Using flag icon as leading title: Text( title, style: const TextStyle( fontWeight: FontWeight.w500, ), ), trailing: const Icon(CupertinoIcons.chevron_forward, color: CupertinoColors.inactiveGray), onTap: () async { controller.changeLang(langCode); showCupertinoDialog( context: context, builder: (context) => CupertinoAlertDialog( title: Text('You should restart app to change language'.tr), actions: [ CupertinoDialogAction( child: Text('Ok'.tr), onPressed: () { Get.offAll(() => MapPagePassenger()); }, ), ], ), ); }, ), ); } } ================================================== FILE PATH: ./lib/views/widgets/elevated_btn.dart ================================================== import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:vibration/vibration.dart'; import '../../constant/box_name.dart'; import '../../constant/colors.dart'; import '../../constant/style.dart'; import '../../main.dart'; class MyElevatedButton extends StatelessWidget { final String title; final VoidCallback onPressed; final Color kolor; final int vibrateDuration; const MyElevatedButton({ Key? key, required this.title, required this.onPressed, this.kolor = AppColor.primaryColor, this.vibrateDuration = 100, }) : super(key: key); @override Widget build(BuildContext context) { bool vibrate = box.read(BoxName.isvibrate) ?? true; return ElevatedButton( style: ButtonStyle( backgroundColor: WidgetStateProperty.all(kolor), shadowColor: WidgetStateProperty.all(Colors.transparent), shape: WidgetStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), ), onPressed: () async { // Handle haptic feedback for both iOS and Android if (vibrate == true) { if (Platform.isIOS) { HapticFeedback.selectionClick(); } else if (Platform.isAndroid) { await Vibration.vibrate(duration: vibrateDuration); } else {} } // Ensure the onPressed callback is called after haptic feedback onPressed(); }, child: Text( title, textAlign: TextAlign.center, style: AppStyle.title.copyWith(color: AppColor.secondaryColor), ), ); } } ================================================== FILE PATH: ./lib/views/widgets/my_textField.dart ================================================== import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import '../../constant/box_name.dart'; class MyTextForm extends StatelessWidget { const MyTextForm({ Key? key, required this.controller, required this.label, required this.hint, required this.type, }) : super(key: key); final TextEditingController controller; final String label, hint; final TextInputType type; @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.only(bottom: 10), child: SizedBox( width: Get.width * .8, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( label.tr, style: TextStyle( color: CupertinoColors.label, fontSize: 16, fontWeight: FontWeight.w600, ), ), const SizedBox(height: 8), CupertinoTextField( controller: controller, keyboardType: type, placeholder: hint.tr, padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), decoration: BoxDecoration( color: CupertinoColors.systemBackground, border: Border.all(color: CupertinoColors.systemGrey4), borderRadius: BorderRadius.circular(8), ), style: const TextStyle(color: CupertinoColors.label), placeholderStyle: const TextStyle(color: CupertinoColors.placeholderText), ), const SizedBox(height: 4), ValueListenableBuilder( valueListenable: controller, builder: (context, value, child) { String? errorText = _getErrorText(value.text); return errorText != null ? Text( errorText, style: const TextStyle( color: CupertinoColors.destructiveRed, fontSize: 12), ) : const SizedBox.shrink(); }, ), ], ), ), ); } String? _getErrorText(String value) { if (value.isEmpty) { return '${'Please enter'.tr} $label'.tr; } if (type == TextInputType.emailAddress) { if (!value.contains('@')) { return 'Please enter a valid email.'.tr; } } else if (type == TextInputType.phone) { final box = GetStorage(); if (box.read(BoxName.countryCode) == 'Egypt') { if (value.length != 11) { return 'Please enter a valid phone number.'.tr; } } else if (value.length != 10) { return 'Please enter a valid phone number.'.tr; } } return null; } } ================================================== FILE PATH: ./lib/views/widgets/my_circular_indicator_timer.dart ================================================== import 'package:flutter/material.dart'; import 'dart:async'; import '../../constant/style.dart'; class MyCircularProgressIndicatorWithTimer extends StatelessWidget { final Color backgroundColor; final bool isLoading; MyCircularProgressIndicatorWithTimer({ Key? key, this.backgroundColor = Colors.transparent, required this.isLoading, }) : super(key: key); final StreamController _streamController = StreamController(); void startTimer() { int _timeLeft = 60; Timer.periodic(const Duration(seconds: 1), (timer) { if (_timeLeft > 0 && isLoading) { _streamController.add(_timeLeft); _timeLeft--; } else { timer.cancel(); _streamController.close(); } }); } @override Widget build(BuildContext context) { if (isLoading) { startTimer(); } return Center( child: Container( width: 200, height: 200, decoration: BoxDecoration( color: backgroundColor, shape: BoxShape.circle, ), child: Stack( children: [ const Center(child: CircularProgressIndicator()), Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Align( alignment: Alignment.center, child: Image.asset( 'assets/images/logo.gif', width: 140, height: 140, ), ), const SizedBox(height: 10), StreamBuilder( stream: _streamController.stream, initialData: 60, builder: (context, snapshot) { return Text('${snapshot.data}', style: AppStyle.title); }, ), ], ), ], ), ), ); } } ================================================== FILE PATH: ./lib/views/widgets/circle_container.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../constant/colors.dart'; import 'mydialoug.dart'; class MyCircleContainer extends StatelessWidget { final Widget child; final Color backgroundColor; final Color borderColor; MyCircleContainer({ Key? key, required this.child, this.backgroundColor = AppColor.secondaryColor, this.borderColor = AppColor.accentColor, }) : super(key: key); final controller = Get.put(CircleController()); @override Widget build(BuildContext context) { return GetBuilder( builder: ((controller) => GestureDetector( onTap: () { controller.changeColor(); MyDialog().getDialog( 'Rejected Orders Count'.tr, 'This is the total number of rejected orders per day after accepting the orders' .tr, () { Get.back(); }); }, child: AnimatedContainer( onEnd: () { controller.onEnd(); }, duration: const Duration(milliseconds: 300), width: controller.size, height: controller.size, decoration: BoxDecoration( shape: BoxShape.circle, color: controller.backgroundColor, border: Border.all( color: borderColor, width: 1, ), ), child: Center(child: child), ), ))); } } class CircleController extends GetxController { Color backgroundColor = AppColor.secondaryColor; double size = 40; void changeColor() { backgroundColor = backgroundColor == AppColor.secondaryColor ? AppColor.accentColor : AppColor.secondaryColor; size = 60; update(); } void onEnd() { size = 40; update(); } } ================================================== FILE PATH: ./lib/views/widgets/error_snakbar.dart ================================================== import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'dart:ui'; import '../../constant/colors.dart'; class SnackbarConfig { static const duration = Duration(seconds: 4); static const animationDuration = Duration(milliseconds: 400); static const margin = EdgeInsets.symmetric(horizontal: 16, vertical: 12); static const borderRadius = 16.0; static const elevation = 0.0; // تقليل الارتفاع لأننا سنستخدم تأثيرات زجاجية // تأثير زجاجي static const double blurStrength = 15.0; static const double opacity = 0.85; // حدود شفافة static final Border glassBorder = Border.all( color: Colors.white.withOpacity(0.25), width: 1.5, ); // ظل أكثر نعومة وانتشار static final List shadows = [ BoxShadow( color: Colors.black.withOpacity(0.15), blurRadius: 12, spreadRadius: 1, offset: const Offset(0, 4), ), BoxShadow( color: Colors.black.withOpacity(0.08), blurRadius: 20, spreadRadius: 0, offset: const Offset(0, 2), ), ]; } // تطبيق تأثير زجاجي باستخدام Container مخصص class GlassSnackbar extends StatelessWidget { final Color baseColor; final Widget child; const GlassSnackbar({ required this.baseColor, required this.child, Key? key, }) : super(key: key); @override Widget build(BuildContext context) { return ClipRRect( borderRadius: BorderRadius.circular(SnackbarConfig.borderRadius), child: BackdropFilter( filter: ImageFilter.blur( sigmaX: SnackbarConfig.blurStrength, sigmaY: SnackbarConfig.blurStrength, ), child: Container( decoration: BoxDecoration( color: baseColor.withOpacity(SnackbarConfig.opacity), borderRadius: BorderRadius.circular(SnackbarConfig.borderRadius), border: SnackbarConfig.glassBorder, boxShadow: SnackbarConfig.shadows, gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [ baseColor.withOpacity(SnackbarConfig.opacity + 0.05), baseColor.withOpacity(SnackbarConfig.opacity - 0.05), ], ), ), child: child, ), ), ); } } SnackbarController mySnackeBarError(String message) { // تأثير اهتزاز للأخطاء HapticFeedback.mediumImpact(); final Color errorBaseColor = AppColor.redColor; return Get.snackbar( '', '', snackPosition: SnackPosition.TOP, margin: SnackbarConfig.margin, duration: SnackbarConfig.duration, animationDuration: SnackbarConfig.animationDuration, borderRadius: SnackbarConfig.borderRadius, backgroundColor: Colors.transparent, // شفاف لأننا سنستخدم حاوية مخصصة barBlur: 0, // إيقاف تشويش الخلفية الافتراضي لأننا سنستخدم BlurFilter overlayBlur: 1.5, overlayColor: Colors.black12, userInputForm: Form( child: GlassSnackbar( baseColor: errorBaseColor, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 14), child: Row( children: [ // أيقونة متحركة TweenAnimationBuilder( tween: Tween(begin: 0.0, end: 1.0), duration: const Duration(milliseconds: 500), curve: Curves.elasticOut, builder: (context, value, child) { return Transform.scale( scale: value, child: child, ); }, child: Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: Colors.white.withOpacity(0.25), shape: BoxShape.circle, ), child: const Icon( Icons.error_rounded, color: Colors.white, size: 26, ), ), ), const SizedBox(width: 16), // محتوى النص Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Text( 'Error'.tr, style: const TextStyle( fontWeight: FontWeight.w700, color: Colors.white, fontSize: 16, letterSpacing: 0.3, shadows: [ Shadow( color: Colors.black26, offset: Offset(0, 1), blurRadius: 2, ), ], ), ), const SizedBox(height: 4), Text( message, style: const TextStyle( color: Colors.white, fontSize: 14, height: 1.3, fontWeight: FontWeight.w400, ), ), ], ), ), // زر الإغلاق InkWell( onTap: () { HapticFeedback.lightImpact(); Get.closeCurrentSnackbar(); }, child: Container( padding: const EdgeInsets.all(4), decoration: BoxDecoration( color: Colors.white.withOpacity(0.2), shape: BoxShape.circle, ), child: const Icon( Icons.close_rounded, color: Colors.white, size: 18, ), ), ), ], ), ), ), ), isDismissible: true, dismissDirection: DismissDirection.horizontal, forwardAnimationCurve: Curves.easeOutBack, reverseAnimationCurve: Curves.easeInCubic, ); } SnackbarController mySnackbarSuccess(String message) { // تأثير اهتزاز للنجاح HapticFeedback.lightImpact(); final Color successBaseColor = AppColor.greenColor; return Get.snackbar( '', '', snackPosition: SnackPosition.TOP, margin: SnackbarConfig.margin, duration: SnackbarConfig.duration, animationDuration: SnackbarConfig.animationDuration, borderRadius: SnackbarConfig.borderRadius, backgroundColor: Colors.transparent, // شفاف لأننا سنستخدم حاوية مخصصة barBlur: 0, // إيقاف تشويش الخلفية الافتراضي لأننا سنستخدم BlurFilter overlayBlur: 1.5, overlayColor: Colors.black12, userInputForm: Form( child: GlassSnackbar( baseColor: successBaseColor, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 14), child: Row( children: [ // أيقونة متحركة TweenAnimationBuilder( tween: Tween(begin: 0.0, end: 1.0), duration: const Duration(milliseconds: 600), curve: Curves.elasticOut, builder: (context, value, child) { return Transform.scale( scale: value, child: child, ); }, child: Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: Colors.white.withOpacity(0.25), shape: BoxShape.circle, ), child: const Icon( Icons.check_circle_rounded, color: Colors.white, size: 26, ), ), ), const SizedBox(width: 16), // محتوى النص Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Text( 'Success'.tr, style: const TextStyle( fontWeight: FontWeight.w700, color: Colors.white, fontSize: 16, letterSpacing: 0.3, shadows: [ Shadow( color: Colors.black26, offset: Offset(0, 1), blurRadius: 2, ), ], ), ), const SizedBox(height: 4), Text( message, style: const TextStyle( color: Colors.white, fontSize: 14, height: 1.3, fontWeight: FontWeight.w400, ), ), ], ), ), // زر الإغلاق InkWell( onTap: () { HapticFeedback.lightImpact(); Get.closeCurrentSnackbar(); }, child: Container( padding: const EdgeInsets.all(4), decoration: BoxDecoration( color: Colors.white.withOpacity(0.2), shape: BoxShape.circle, ), child: const Icon( Icons.close_rounded, color: Colors.white, size: 18, ), ), ), ], ), ), ), ), isDismissible: true, dismissDirection: DismissDirection.horizontal, forwardAnimationCurve: Curves.easeOutBack, reverseAnimationCurve: Curves.easeInCubic, ); } // إضافة: دالة للمعلومات والتنبيهات SnackbarController mySnackbarInfo(String message) { // تأثير اهتزاز خفيف HapticFeedback.selectionClick(); final Color infoBaseColor = Colors.blue; return Get.snackbar( '', '', snackPosition: SnackPosition.TOP, margin: SnackbarConfig.margin, duration: SnackbarConfig.duration, animationDuration: SnackbarConfig.animationDuration, borderRadius: SnackbarConfig.borderRadius, backgroundColor: Colors.transparent, // شفاف لأننا سنستخدم حاوية مخصصة barBlur: 0, // إيقاف تشويش الخلفية الافتراضي لأننا سنستخدم BlurFilter overlayBlur: 1.5, overlayColor: Colors.black12, userInputForm: Form( child: GlassSnackbar( baseColor: infoBaseColor, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 14), child: Row( children: [ // أيقونة متحركة TweenAnimationBuilder( tween: Tween(begin: 0.0, end: 1.0), duration: const Duration(milliseconds: 500), curve: Curves.elasticOut, builder: (context, value, child) { return Transform.scale( scale: value, child: child, ); }, child: Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: Colors.white.withOpacity(0.25), shape: BoxShape.circle, ), child: const Icon( Icons.info_rounded, color: Colors.white, size: 26, ), ), ), const SizedBox(width: 16), // محتوى النص Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Text( 'Info'.tr, style: const TextStyle( fontWeight: FontWeight.w700, color: Colors.white, fontSize: 16, letterSpacing: 0.3, shadows: [ Shadow( color: Colors.black26, offset: Offset(0, 1), blurRadius: 2, ), ], ), ), const SizedBox(height: 4), Text( message, style: const TextStyle( color: Colors.white, fontSize: 14, height: 1.3, fontWeight: FontWeight.w400, ), ), ], ), ), // زر الإغلاق InkWell( onTap: () { HapticFeedback.lightImpact(); Get.closeCurrentSnackbar(); }, child: Container( padding: const EdgeInsets.all(4), decoration: BoxDecoration( color: Colors.white.withOpacity(0.2), shape: BoxShape.circle, ), child: const Icon( Icons.close_rounded, color: Colors.white, size: 18, ), ), ), ], ), ), ), ), isDismissible: true, dismissDirection: DismissDirection.horizontal, forwardAnimationCurve: Curves.easeOutBack, reverseAnimationCurve: Curves.easeInCubic, ); } // إضافة: دالة للتحذيرات SnackbarController mySnackbarWarning(String message) { // تأثير اهتزاز متوسط HapticFeedback.mediumImpact(); final Color warningBaseColor = Colors.orange; return Get.snackbar( '', '', snackPosition: SnackPosition.TOP, margin: SnackbarConfig.margin, duration: SnackbarConfig.duration, animationDuration: SnackbarConfig.animationDuration, borderRadius: SnackbarConfig.borderRadius, backgroundColor: Colors.transparent, // شفاف لأننا سنستخدم حاوية مخصصة barBlur: 0, // إيقاف تشويش الخلفية الافتراضي لأننا سنستخدم BlurFilter overlayBlur: 1.5, overlayColor: Colors.black12, userInputForm: Form( child: GlassSnackbar( baseColor: warningBaseColor, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 14), child: Row( children: [ // أيقونة متحركة TweenAnimationBuilder( tween: Tween(begin: 0.0, end: 1.0), duration: const Duration(milliseconds: 500), curve: Curves.elasticOut, builder: (context, value, child) { return Transform.scale( scale: value, child: child, ); }, child: Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: Colors.white.withOpacity(0.25), shape: BoxShape.circle, ), child: const Icon( Icons.warning_rounded, color: Colors.white, size: 26, ), ), ), const SizedBox(width: 16), // محتوى النص Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Text( 'Warning'.tr, style: const TextStyle( fontWeight: FontWeight.w700, color: Colors.white, fontSize: 16, letterSpacing: 0.3, shadows: [ Shadow( color: Colors.black26, offset: Offset(0, 1), blurRadius: 2, ), ], ), ), const SizedBox(height: 4), Text( message, style: const TextStyle( color: Colors.white, fontSize: 14, height: 1.3, fontWeight: FontWeight.w400, ), ), ], ), ), // زر الإغلاق InkWell( onTap: () { HapticFeedback.lightImpact(); Get.closeCurrentSnackbar(); }, child: Container( padding: const EdgeInsets.all(4), decoration: BoxDecoration( color: Colors.white.withOpacity(0.2), shape: BoxShape.circle, ), child: const Icon( Icons.close_rounded, color: Colors.white, size: 18, ), ), ), ], ), ), ), ), isDismissible: true, dismissDirection: DismissDirection.horizontal, forwardAnimationCurve: Curves.easeOutBack, reverseAnimationCurve: Curves.easeInCubic, ); } ================================================== FILE PATH: ./lib/views/widgets/mydialoug.dart ================================================== import 'dart:ui'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import '../../constant/colors.dart'; import '../../constant/style.dart'; import '../../controller/functions/tts.dart'; class DialogConfig { static const Duration animationDuration = Duration(milliseconds: 200); static const double blurStrength = 8.0; static const double cornerRadius = 14.0; static final BoxDecoration decoration = BoxDecoration( borderRadius: BorderRadius.circular(cornerRadius), boxShadow: [ BoxShadow( color: Colors.black.withAlpha(38), // 0.15 opacity blurRadius: 16, offset: const Offset(0, 8), ), ], ); } class MyDialog extends GetxController { void getDialog(String title, String? midTitle, VoidCallback onPressed) { final textToSpeechController = Get.put(TextToSpeechController()); HapticFeedback.mediumImpact(); Get.dialog( TweenAnimationBuilder( duration: DialogConfig.animationDuration, tween: Tween(begin: 0.0, end: 1.0), builder: (context, value, child) { return Transform.scale( scale: 0.95 + (0.05 * value), child: Opacity(opacity: value, child: child), ); }, child: BackdropFilter( filter: ImageFilter.blur( sigmaX: DialogConfig.blurStrength, sigmaY: DialogConfig.blurStrength, ), child: Theme( data: ThemeData.light().copyWith( dialogBackgroundColor: CupertinoColors.systemBackground, ), child: CupertinoAlertDialog( title: Column( children: [ Text( title, style: AppStyle.title.copyWith( fontSize: 20, fontWeight: FontWeight.w700, letterSpacing: -0.5, color: AppColor.primaryColor, ), ), const SizedBox(height: 8), ], ), content: Column( children: [ CupertinoButton( padding: const EdgeInsets.all(8), onPressed: () async { HapticFeedback.selectionClick(); await textToSpeechController.speakText(title); await textToSpeechController.speakText(midTitle!); }, child: Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: AppColor.primaryColor.withAlpha(26), // 0.1 opacity borderRadius: BorderRadius.circular(8), ), child: Icon( CupertinoIcons.speaker_2_fill, color: AppColor.primaryColor, size: 24, ), ), ), const SizedBox(height: 8), Text( midTitle!, style: AppStyle.title.copyWith( fontSize: 16, height: 1.3, color: Colors.black87, ), textAlign: TextAlign.center, ), ], ), actions: [ CupertinoDialogAction( onPressed: () { HapticFeedback.lightImpact(); Get.back(); }, child: Text( 'Cancel'.tr, style: TextStyle( color: AppColor.redColor, fontWeight: FontWeight.w600, fontSize: 17, ), ), ), CupertinoDialogAction( onPressed: () { HapticFeedback.mediumImpact(); onPressed(); }, child: Text( 'OK'.tr, style: TextStyle( color: AppColor.greenColor, fontWeight: FontWeight.w600, fontSize: 17, ), ), ), ], ), ), ), ), barrierDismissible: true, barrierColor: Colors.black.withAlpha(102), // 0.4 opacity ); } } class MyDialogContent extends GetxController { void getDialog(String title, Widget? content, VoidCallback onPressed) { final textToSpeechController = Get.put(TextToSpeechController()); HapticFeedback.mediumImpact(); Get.dialog( TweenAnimationBuilder( duration: DialogConfig.animationDuration, tween: Tween(begin: 0.0, end: 1.0), builder: (context, value, child) { return Transform.scale( scale: 0.95 + (0.05 * value), child: Opacity(opacity: value, child: child), ); }, child: BackdropFilter( filter: ImageFilter.blur( sigmaX: DialogConfig.blurStrength, sigmaY: DialogConfig.blurStrength, ), child: Theme( data: ThemeData.light().copyWith( dialogBackgroundColor: CupertinoColors.systemBackground, ), child: CupertinoAlertDialog( title: Column( children: [ Text( title, style: AppStyle.title.copyWith( fontSize: 20, fontWeight: FontWeight.w700, letterSpacing: -0.5, color: AppColor.primaryColor, ), ), const SizedBox(height: 8), ], ), content: Column( children: [ CupertinoButton( padding: const EdgeInsets.all(8), onPressed: () async { HapticFeedback.selectionClick(); await textToSpeechController.speakText(title); }, child: Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: AppColor.primaryColor.withAlpha(26), // 0.1 opacity borderRadius: BorderRadius.circular(8), ), child: Icon( CupertinoIcons.headphones, color: AppColor.primaryColor, size: 24, ), ), ), const SizedBox(height: 12), content!, ], ), actions: [ CupertinoDialogAction( onPressed: () { HapticFeedback.lightImpact(); Get.back(); }, child: Text( 'Cancel', style: TextStyle( color: AppColor.redColor, fontWeight: FontWeight.w600, fontSize: 17, ), ), ), CupertinoDialogAction( onPressed: () { HapticFeedback.mediumImpact(); onPressed(); }, child: Text( 'OK'.tr, style: TextStyle( color: AppColor.greenColor, fontWeight: FontWeight.w600, fontSize: 17, ), ), ), ], ), ), ), ), barrierDismissible: true, barrierColor: Colors.black.withAlpha(102), // 0.4 opacity ); } } ================================================== FILE PATH: ./lib/views/widgets/icon_widget_menu.dart ================================================== import 'package:flutter/material.dart'; import '../../constant/colors.dart'; import '../../constant/style.dart'; class IconWidgetMenu extends StatelessWidget { const IconWidgetMenu({ Key? key, required this.onpressed, required this.icon, required this.title, }) : super(key: key); final VoidCallback onpressed; final IconData icon; final String title; @override Widget build(BuildContext context) { return InkWell( onTap: onpressed, child: Padding( padding: const EdgeInsets.only(top: 25), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( width: 40, decoration: const BoxDecoration( color: AppColor.secondaryColor, shape: BoxShape.circle, boxShadow: [ BoxShadow( color: AppColor.secondaryColor, offset: Offset(-2, -2), blurRadius: 0, spreadRadius: 0, blurStyle: BlurStyle.outer, ), BoxShadow( color: AppColor.accentColor, offset: Offset(3, 3), blurRadius: 0, spreadRadius: 0, blurStyle: BlurStyle.outer, ), ], ), child: Center( child: Icon( icon, size: 30, color: AppColor.primaryColor, ), ), ), Text( title, style: AppStyle.subtitle, ) ], ), ), ); } } ================================================== FILE PATH: ./lib/views/widgets/my_scafold.dart ================================================== import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../constant/colors.dart'; import '../../constant/style.dart'; class MyScafolld extends StatelessWidget { const MyScafolld({ super.key, required this.title, required this.body, this.action = const Icon( Icons.clear, color: AppColor.secondaryColor, ), required this.isleading, }); final String title; final List body; final Widget action; final bool isleading; @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColor.secondaryColor, appBar: AppBar( backgroundColor: AppColor.secondaryColor, elevation: 0, leading: isleading ? IconButton( onPressed: () { Get.back(); }, icon: const Icon( Icons.arrow_back_ios_new, color: AppColor.primaryColor, ), ) : const SizedBox(), actions: [action], title: Text( title, style: AppStyle.title.copyWith(fontSize: 30), ), ), body: SafeArea(child: Stack(children: body))); } } ================================================== FILE PATH: ./lib/views/widgets/mycircular.dart ================================================== import 'package:flutter/material.dart'; class MyCircularProgressIndicator extends StatefulWidget { final Color backgroundColor; final double size; final Color progressColor; final double strokeWidth; const MyCircularProgressIndicator({ super.key, this.backgroundColor = Colors.transparent, this.size = 110, this.progressColor = Colors.blue, this.strokeWidth = 3.0, }); @override State createState() => _MyCircularProgressIndicatorState(); } class _MyCircularProgressIndicatorState extends State with SingleTickerProviderStateMixin { late AnimationController _controller; late Animation _scaleAnimation; late Animation _rotationAnimation; @override void initState() { super.initState(); _controller = AnimationController( duration: const Duration(seconds: 2), vsync: this, )..repeat(reverse: true); _scaleAnimation = Tween( begin: 0.95, end: 1.05, ).animate(CurvedAnimation( parent: _controller, curve: Curves.easeInOut, )); _rotationAnimation = Tween( begin: 0, end: 2, ).animate(CurvedAnimation( parent: _controller, curve: Curves.linear, )); } @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Center( child: AnimatedBuilder( animation: _controller, builder: (context, child) { return Transform.scale( scale: _scaleAnimation.value, child: Container( width: widget.size, height: widget.size, decoration: BoxDecoration( color: widget.backgroundColor, shape: BoxShape.circle, boxShadow: [ BoxShadow( color: widget.progressColor.withAlpha(30), blurRadius: 12, spreadRadius: 2, ), ], ), child: Stack( alignment: Alignment.center, children: [ // Outer rotating progress indicator Transform.rotate( angle: _rotationAnimation.value * 3.14, child: CircularProgressIndicator( strokeWidth: widget.strokeWidth, valueColor: AlwaysStoppedAnimation( widget.progressColor, ), ), ), // Inner static progress indicator CircularProgressIndicator( strokeWidth: widget.strokeWidth * 0.7, valueColor: AlwaysStoppedAnimation( widget.progressColor.withAlpha(150), ), ), // Logo container with scale animation ScaleTransition( scale: Tween( begin: 0.9, end: 1.0, ).animate(CurvedAnimation( parent: _controller, curve: Curves.easeInOut, )), child: Container( width: widget.size * 0.7, height: widget.size * 0.7, decoration: BoxDecoration( shape: BoxShape.circle, color: widget.backgroundColor, ), child: Image.asset( 'assets/images/logo.gif', fit: BoxFit.contain, ), ), ), ], ), ), ); }, ), ); } }