feat: implement core architecture, design system, localization, and trip features for both driver and rider apps.

This commit is contained in:
Hamza-Ayed
2026-07-19 16:21:58 +03:00
parent 959e2fa758
commit c4dfeb4c6f
207 changed files with 14017 additions and 5567 deletions
+177
View File
@@ -0,0 +1,177 @@
{
"@@locale": "ar",
"appName": "Tripz",
"appTagline": "اسحب، وصل، وصل",
"phoneTitle": "أدخل رقم هاتفك للمتابعة",
"phoneLabel": "رقم الهاتف",
"phoneHint": "07XXXXXXXX",
"sendCode": "إرسال الرمز",
"otpTitle": "أدخل رمز التحقق",
"otpSentTo": "أُرسل إلى {phone}",
"@otpSentTo": {
"placeholders": {
"phone": {"type": "String"}
}
},
"otpLabel": "الرمز",
"confirm": "تأكيد",
"welcome": "مرحباً {name}",
"@welcome": {
"placeholders": {
"name": {"type": "String"}
}
},
"welcomeBack": "مرحباً بعودتك",
"whereTo": "إلى أين؟",
"setLocationOnMap": "تحديد الموقع على الخريطة",
"myTrips": "رحلاتي",
"wallet": "المحفظة",
"coupons": "الكوبونات والدعوات",
"settings": "الإعدادات",
"support": "الدعم",
"logout": "تسجيل الخروج",
"language": "اللغة",
"arabic": "العربية",
"english": "English",
"theme": "المظهر",
"lightMode": "الوضع النهاري",
"darkMode": "الوضع الليلي",
"systemMode": "تلقائي",
"errorGeneric": "حدث خطأ ما",
"retry": "أعد المحاولة",
"emptyGeneric": "لا توجد عناصر بعد",
"loading": "جارٍ التحميل...",
"cancel": "إلغاء",
"save": "حفظ",
"close": "إغلاق",
"next": "التالي",
"back": "رجوع",
"search": "بحث",
"noResults": "لا توجد نتائج",
"connectionError": "تحقق من اتصالك بالإنترنت",
"authError": "تعذّر إرسال الرمز",
"invalidOtp": "رمز غير صحيح",
"phoneEmpty": "أدخل رقم الهاتف",
"selectDestination": "اختر وجهتك",
"pickupLocation": "نقطة الانطلاق",
"dropoffLocation": "الوجهة",
"chooseOnMap": "اختر من الخريطة",
"favorites": "المفضلة",
"homePlace": "البيت",
"workPlace": "العمل",
"searchPlaces": "ابحث عن مكان...",
"recent": "الأخيرة",
"addStop": "إضافة توقف",
"removeStop": "إزالة التوقف",
"rideClasses": "فئة الرحلة",
"cash": "نقدي",
"walletPayment": "المحفظة",
"couponCode": "كود الخصم",
"scheduleRide": "جدولة رحلة",
"requestRide": "اطلب رحلة",
"searchingDriver": "جارٍ البحث عن سائق...",
"cancelSearch": "إلغاء البحث",
"driverAccepted": "قبل سائقك الرحلة",
"driverArriving": "السائق في طريقه إليك",
"driverArrived": "وصل سائقك",
"rideInProgress": "الرحلة جارية",
"rideCompleted": "انتهت الرحلة",
"rateDriver": "قيّم سائقك",
"tripFare": "أجرة الرحلة",
"waitingFee": "رسوم الانتظار",
"discount": "الخصم",
"paymentMethod": "طريقة الدفع",
"total": "المجموع",
"submitRating": "إرسال التقييم",
"skipRating": "تخطي",
"freeWaitMinutes": "دقائق انتظار مجانية",
"minutes": "دقائق",
"callDriver": "اتصل بالسائق",
"chatWithDriver": "دردشة مع السائق",
"shareTrip": "مشاركة الرحلة",
"emergencySOS": "طارئ SOS",
"plateNumber": "رقم اللوحة",
"vehicleInfo": "معلومات المركبة",
"driverRating": "تقييم السائق",
"eta": "الوصول المتوقع",
"km": "كم",
"min": "د",
"searchTimeout": "لم نجد سائقاً متاحاً حالياً. حاول مرة أخرى",
"priceEstimate": "تقدير السعر",
"perKm": "/كم",
"capacity": "{seats} مقاعد",
"@capacity": {
"placeholders": {
"seats": {"type": "int"}
}
},
"confirmPickup": "تأكيد نقطة الانطلاق",
"pickupSet": "تم تحديد نقطة الانطلاق",
"destinationSet": "تم تحديد الوجهة",
"routeSummary": "{distance} · {duration}",
"@routeSummary": {
"placeholders": {
"distance": {"type": "String"},
"duration": {"type": "String"}
}
},
"noPickupSet": "حدد نقطة انطلاقك",
"mapPinInstructions": "حرّك الخريطة لإظهار الدبوس",
"tripNoDrivers": "لم نجد سائقين بالقرب",
"tripCancelled": "تم إلغاء الرحلة",
"tripCancelledByDriver": "ألغى السائق الرحلة",
"cancelFee": "رسوم الإلغاء: {fee} {currency}",
"@cancelFee": {
"placeholders": {
"fee": {"type": "String"},
"currency": {"type": "String"}
}
},
"waitFreeMinutes": "{minutes} دقائق انتظار مجانية",
"@waitFreeMinutes": {
"placeholders": {
"minutes": {"type": "int"}
}
},
"waitingCharge": "رسوم الانتظار: {amount} {currency}",
"@waitingCharge": {
"placeholders": {
"amount": {"type": "String"},
"currency": {"type": "String"}
}
},
"driverEnRoute": "السائق في طريقه إليك",
"arrivingIn": "الوصول خلال {eta}",
"@arrivingIn": {
"placeholders": {
"eta": {"type": "String"}
}
},
"tripStarted": "بدأت الرحلة",
"tripEnd": "انتهت الرحلة",
"fareBreakdown": "تفاصيل الأجرة",
"baseFare": "الأجرة الأساسية",
"distanceFare": "المسافة",
"timeFare": "الوقت",
"surgeMultiplier": "الذروة",
"couponApplied": "تم تطبيق الكوبون",
"youPaid": "دفعت",
"payCash": "ادفع نقدي",
"rateYourTrip": "قيّم رحلتك",
"ratingComment": "أضف تعليقاً (اختياري)",
"thankYou": "شكراً على ملاحظاتك",
"tripDuration": "مدة الرحلة: {duration}",
"@tripDuration": {
"placeholders": {
"duration": {"type": "String"}
}
},
"tripDistance": "مسافة الرحلة: {distance}",
"@tripDistance": {
"placeholders": {
"distance": {"type": "String"}
}
},
"reconnect": "جارٍ إعادة الاتصال...",
"tripExpired": "انتهت صلاحية الرحلة"
}
+177
View File
@@ -0,0 +1,177 @@
{
"@@locale": "en",
"appName": "Tripz",
"appTagline": "Tap, ride, arrive",
"phoneTitle": "Enter your phone number to continue",
"phoneLabel": "Phone number",
"phoneHint": "07XXXXXXXX",
"sendCode": "Send code",
"otpTitle": "Enter verification code",
"otpSentTo": "Sent to {phone}",
"@otpSentTo": {
"placeholders": {
"phone": {"type": "String"}
}
},
"otpLabel": "Code",
"confirm": "Confirm",
"welcome": "Welcome {name}",
"@welcome": {
"placeholders": {
"name": {"type": "String"}
}
},
"welcomeBack": "Welcome back",
"whereTo": "Where to?",
"setLocationOnMap": "Set location on map",
"myTrips": "My trips",
"wallet": "Wallet",
"coupons": "Coupons & invites",
"settings": "Settings",
"support": "Support",
"logout": "Logout",
"language": "Language",
"arabic": "العربية",
"english": "English",
"theme": "Theme",
"lightMode": "Light",
"darkMode": "Dark",
"systemMode": "System",
"errorGeneric": "Something went wrong",
"retry": "Try again",
"emptyGeneric": "Nothing here yet",
"loading": "Loading...",
"cancel": "Cancel",
"save": "Save",
"close": "Close",
"next": "Next",
"back": "Back",
"search": "Search",
"noResults": "No results found",
"connectionError": "Check your internet connection",
"authError": "Failed to send code",
"invalidOtp": "Invalid code",
"phoneEmpty": "Enter your phone number",
"selectDestination": "Choose your destination",
"pickupLocation": "Pickup location",
"dropoffLocation": "Destination",
"chooseOnMap": "Choose on map",
"favorites": "Favorites",
"homePlace": "Home",
"workPlace": "Work",
"searchPlaces": "Search for a place...",
"recent": "Recent",
"addStop": "Add a stop",
"removeStop": "Remove stop",
"rideClasses": "Ride class",
"cash": "Cash",
"walletPayment": "Wallet",
"couponCode": "Coupon code",
"scheduleRide": "Schedule a ride",
"requestRide": "Request a ride",
"searchingDriver": "Looking for a driver...",
"cancelSearch": "Cancel search",
"driverAccepted": "Your driver accepted",
"driverArriving": "Driver is on the way",
"driverArrived": "Your driver has arrived",
"rideInProgress": "Ride in progress",
"rideCompleted": "Ride completed",
"rateDriver": "Rate your driver",
"tripFare": "Trip fare",
"waitingFee": "Waiting fee",
"discount": "Discount",
"paymentMethod": "Payment method",
"total": "Total",
"submitRating": "Submit rating",
"skipRating": "Skip",
"freeWaitMinutes": "Free wait minutes",
"minutes": "minutes",
"callDriver": "Call driver",
"chatWithDriver": "Chat with driver",
"shareTrip": "Share trip",
"emergencySOS": "Emergency SOS",
"plateNumber": "Plate number",
"vehicleInfo": "Vehicle info",
"driverRating": "Driver rating",
"eta": "Estimated arrival",
"km": "km",
"min": "min",
"searchTimeout": "No drivers available right now. Please try again",
"priceEstimate": "Price estimate",
"perKm": "/km",
"capacity": "{seats} seats",
"@capacity": {
"placeholders": {
"seats": {"type": "int"}
}
},
"confirmPickup": "Confirm pickup",
"pickupSet": "Pickup set",
"destinationSet": "Destination set",
"routeSummary": "{distance} · {duration}",
"@routeSummary": {
"placeholders": {
"distance": {"type": "String"},
"duration": {"type": "String"}
}
},
"noPickupSet": "Set your pickup location",
"mapPinInstructions": "Move the map to place the pin",
"tripNoDrivers": "No drivers found nearby",
"tripCancelled": "Trip cancelled",
"tripCancelledByDriver": "Driver cancelled the trip",
"cancelFee": "Cancellation fee: {fee} {currency}",
"@cancelFee": {
"placeholders": {
"fee": {"type": "String"},
"currency": {"type": "String"}
}
},
"waitFreeMinutes": "{minutes} min free wait",
"@waitFreeMinutes": {
"placeholders": {
"minutes": {"type": "int"}
}
},
"waitingCharge": "Waiting charge: {amount} {currency}",
"@waitingCharge": {
"placeholders": {
"amount": {"type": "String"},
"currency": {"type": "String"}
}
},
"driverEnRoute": "Driver is heading to you",
"arrivingIn": "Arriving in {eta}",
"@arrivingIn": {
"placeholders": {
"eta": {"type": "String"}
}
},
"tripStarted": "Ride started",
"tripEnd": "Trip ended",
"fareBreakdown": "Fare breakdown",
"baseFare": "Base fare",
"distanceFare": "Distance",
"timeFare": "Time",
"surgeMultiplier": "Surge",
"couponApplied": "Coupon applied",
"youPaid": "You paid",
"payCash": "Pay cash",
"rateYourTrip": "Rate your trip",
"ratingComment": "Add a comment (optional)",
"thankYou": "Thank you for your feedback",
"tripDuration": "Trip duration: {duration}",
"@tripDuration": {
"placeholders": {
"duration": {"type": "String"}
}
},
"tripDistance": "Trip distance: {distance}",
"@tripDistance": {
"placeholders": {
"distance": {"type": "String"}
}
},
"reconnect": "Reconnecting...",
"tripExpired": "Trip expired"
}
@@ -0,0 +1,859 @@
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:intl/intl.dart' as intl;
import 'app_localizations_ar.dart';
import 'app_localizations_en.dart';
// ignore_for_file: type=lint
/// Callers can lookup localized strings with an instance of AppLocalizations
/// returned by `AppLocalizations.of(context)`.
///
/// Applications need to include `AppLocalizations.delegate()` in their app's
/// `localizationDelegates` list, and the locales they support in the app's
/// `supportedLocales` list. For example:
///
/// ```dart
/// import 'l10n/app_localizations.dart';
///
/// return MaterialApp(
/// localizationsDelegates: AppLocalizations.localizationsDelegates,
/// supportedLocales: AppLocalizations.supportedLocales,
/// home: MyApplicationHome(),
/// );
/// ```
///
/// ## Update pubspec.yaml
///
/// Please make sure to update your pubspec.yaml to include the following
/// packages:
///
/// ```yaml
/// dependencies:
/// # Internationalization support.
/// flutter_localizations:
/// sdk: flutter
/// intl: any # Use the pinned version from flutter_localizations
///
/// # Rest of dependencies
/// ```
///
/// ## iOS Applications
///
/// iOS applications define key application metadata, including supported
/// locales, in an Info.plist file that is built into the application bundle.
/// To configure the locales supported by your app, you’ll need to edit this
/// file.
///
/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file.
/// Then, in the Project Navigator, open the Info.plist file under the Runner
/// project’s Runner folder.
///
/// Next, select the Information Property List item, select Add Item from the
/// Editor menu, then select Localizations from the pop-up menu.
///
/// Select and expand the newly-created Localizations item then, for each
/// locale your application supports, add a new item and select the locale
/// you wish to add from the pop-up menu in the Value field. This list should
/// be consistent with the languages listed in the AppLocalizations.supportedLocales
/// property.
abstract class AppLocalizations {
AppLocalizations(String locale)
: localeName = intl.Intl.canonicalizedLocale(locale.toString());
final String localeName;
static AppLocalizations? of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}
static const LocalizationsDelegate<AppLocalizations> delegate =
_AppLocalizationsDelegate();
/// A list of this localizations delegate along with the default localizations
/// delegates.
///
/// Returns a list of localizations delegates containing this delegate along with
/// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
/// and GlobalWidgetsLocalizations.delegate.
///
/// Additional delegates can be added by appending to this list in
/// MaterialApp. This list does not have to be used at all if a custom list
/// of delegates is preferred or required.
static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
<LocalizationsDelegate<dynamic>>[
delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
];
/// A list of this localizations delegate's supported locales.
static const List<Locale> supportedLocales = <Locale>[
Locale('ar'),
Locale('en')
];
/// No description provided for @appName.
///
/// In ar, this message translates to:
/// **'Tripz'**
String get appName;
/// No description provided for @appTagline.
///
/// In ar, this message translates to:
/// **'اسحب، وصل، وصل'**
String get appTagline;
/// No description provided for @phoneTitle.
///
/// In ar, this message translates to:
/// **'أدخل رقم هاتفك للمتابعة'**
String get phoneTitle;
/// No description provided for @phoneLabel.
///
/// In ar, this message translates to:
/// **'رقم الهاتف'**
String get phoneLabel;
/// No description provided for @phoneHint.
///
/// In ar, this message translates to:
/// **'07XXXXXXXX'**
String get phoneHint;
/// No description provided for @sendCode.
///
/// In ar, this message translates to:
/// **'إرسال الرمز'**
String get sendCode;
/// No description provided for @otpTitle.
///
/// In ar, this message translates to:
/// **'أدخل رمز التحقق'**
String get otpTitle;
/// No description provided for @otpSentTo.
///
/// In ar, this message translates to:
/// **'أُرسل إلى {phone}'**
String otpSentTo(String phone);
/// No description provided for @otpLabel.
///
/// In ar, this message translates to:
/// **'الرمز'**
String get otpLabel;
/// No description provided for @confirm.
///
/// In ar, this message translates to:
/// **'تأكيد'**
String get confirm;
/// No description provided for @welcome.
///
/// In ar, this message translates to:
/// **'مرحباً {name}'**
String welcome(String name);
/// No description provided for @welcomeBack.
///
/// In ar, this message translates to:
/// **'مرحباً بعودتك'**
String get welcomeBack;
/// No description provided for @whereTo.
///
/// In ar, this message translates to:
/// **'إلى أين؟'**
String get whereTo;
/// No description provided for @setLocationOnMap.
///
/// In ar, this message translates to:
/// **'تحديد الموقع على الخريطة'**
String get setLocationOnMap;
/// No description provided for @myTrips.
///
/// In ar, this message translates to:
/// **'رحلاتي'**
String get myTrips;
/// No description provided for @wallet.
///
/// In ar, this message translates to:
/// **'المحفظة'**
String get wallet;
/// No description provided for @coupons.
///
/// In ar, this message translates to:
/// **'الكوبونات والدعوات'**
String get coupons;
/// No description provided for @settings.
///
/// In ar, this message translates to:
/// **'الإعدادات'**
String get settings;
/// No description provided for @support.
///
/// In ar, this message translates to:
/// **'الدعم'**
String get support;
/// No description provided for @logout.
///
/// In ar, this message translates to:
/// **'تسجيل الخروج'**
String get logout;
/// No description provided for @language.
///
/// In ar, this message translates to:
/// **'اللغة'**
String get language;
/// No description provided for @arabic.
///
/// In ar, this message translates to:
/// **'العربية'**
String get arabic;
/// No description provided for @english.
///
/// In ar, this message translates to:
/// **'English'**
String get english;
/// No description provided for @theme.
///
/// In ar, this message translates to:
/// **'المظهر'**
String get theme;
/// No description provided for @lightMode.
///
/// In ar, this message translates to:
/// **'الوضع النهاري'**
String get lightMode;
/// No description provided for @darkMode.
///
/// In ar, this message translates to:
/// **'الوضع الليلي'**
String get darkMode;
/// No description provided for @systemMode.
///
/// In ar, this message translates to:
/// **'تلقائي'**
String get systemMode;
/// No description provided for @errorGeneric.
///
/// In ar, this message translates to:
/// **'حدث خطأ ما'**
String get errorGeneric;
/// No description provided for @retry.
///
/// In ar, this message translates to:
/// **'أعد المحاولة'**
String get retry;
/// No description provided for @emptyGeneric.
///
/// In ar, this message translates to:
/// **'لا توجد عناصر بعد'**
String get emptyGeneric;
/// No description provided for @loading.
///
/// In ar, this message translates to:
/// **'جارٍ التحميل...'**
String get loading;
/// No description provided for @cancel.
///
/// In ar, this message translates to:
/// **'إلغاء'**
String get cancel;
/// No description provided for @save.
///
/// In ar, this message translates to:
/// **'حفظ'**
String get save;
/// No description provided for @close.
///
/// In ar, this message translates to:
/// **'إغلاق'**
String get close;
/// No description provided for @next.
///
/// In ar, this message translates to:
/// **'التالي'**
String get next;
/// No description provided for @back.
///
/// In ar, this message translates to:
/// **'رجوع'**
String get back;
/// No description provided for @search.
///
/// In ar, this message translates to:
/// **'بحث'**
String get search;
/// No description provided for @noResults.
///
/// In ar, this message translates to:
/// **'لا توجد نتائج'**
String get noResults;
/// No description provided for @connectionError.
///
/// In ar, this message translates to:
/// **'تحقق من اتصالك بالإنترنت'**
String get connectionError;
/// No description provided for @authError.
///
/// In ar, this message translates to:
/// **'تعذّر إرسال الرمز'**
String get authError;
/// No description provided for @invalidOtp.
///
/// In ar, this message translates to:
/// **'رمز غير صحيح'**
String get invalidOtp;
/// No description provided for @phoneEmpty.
///
/// In ar, this message translates to:
/// **'أدخل رقم الهاتف'**
String get phoneEmpty;
/// No description provided for @selectDestination.
///
/// In ar, this message translates to:
/// **'اختر وجهتك'**
String get selectDestination;
/// No description provided for @pickupLocation.
///
/// In ar, this message translates to:
/// **'نقطة الانطلاق'**
String get pickupLocation;
/// No description provided for @dropoffLocation.
///
/// In ar, this message translates to:
/// **'الوجهة'**
String get dropoffLocation;
/// No description provided for @chooseOnMap.
///
/// In ar, this message translates to:
/// **'اختر من الخريطة'**
String get chooseOnMap;
/// No description provided for @favorites.
///
/// In ar, this message translates to:
/// **'المفضلة'**
String get favorites;
/// No description provided for @homePlace.
///
/// In ar, this message translates to:
/// **'البيت'**
String get homePlace;
/// No description provided for @workPlace.
///
/// In ar, this message translates to:
/// **'العمل'**
String get workPlace;
/// No description provided for @searchPlaces.
///
/// In ar, this message translates to:
/// **'ابحث عن مكان...'**
String get searchPlaces;
/// No description provided for @recent.
///
/// In ar, this message translates to:
/// **'الأخيرة'**
String get recent;
/// No description provided for @addStop.
///
/// In ar, this message translates to:
/// **'إضافة توقف'**
String get addStop;
/// No description provided for @removeStop.
///
/// In ar, this message translates to:
/// **'إزالة التوقف'**
String get removeStop;
/// No description provided for @rideClasses.
///
/// In ar, this message translates to:
/// **'فئة الرحلة'**
String get rideClasses;
/// No description provided for @cash.
///
/// In ar, this message translates to:
/// **'نقدي'**
String get cash;
/// No description provided for @walletPayment.
///
/// In ar, this message translates to:
/// **'المحفظة'**
String get walletPayment;
/// No description provided for @couponCode.
///
/// In ar, this message translates to:
/// **'كود الخصم'**
String get couponCode;
/// No description provided for @scheduleRide.
///
/// In ar, this message translates to:
/// **'جدولة رحلة'**
String get scheduleRide;
/// No description provided for @requestRide.
///
/// In ar, this message translates to:
/// **'اطلب رحلة'**
String get requestRide;
/// No description provided for @searchingDriver.
///
/// In ar, this message translates to:
/// **'جارٍ البحث عن سائق...'**
String get searchingDriver;
/// No description provided for @cancelSearch.
///
/// In ar, this message translates to:
/// **'إلغاء البحث'**
String get cancelSearch;
/// No description provided for @driverAccepted.
///
/// In ar, this message translates to:
/// **'قبل سائقك الرحلة'**
String get driverAccepted;
/// No description provided for @driverArriving.
///
/// In ar, this message translates to:
/// **'السائق في طريقه إليك'**
String get driverArriving;
/// No description provided for @driverArrived.
///
/// In ar, this message translates to:
/// **'وصل سائقك'**
String get driverArrived;
/// No description provided for @rideInProgress.
///
/// In ar, this message translates to:
/// **'الرحلة جارية'**
String get rideInProgress;
/// No description provided for @rideCompleted.
///
/// In ar, this message translates to:
/// **'انتهت الرحلة'**
String get rideCompleted;
/// No description provided for @rateDriver.
///
/// In ar, this message translates to:
/// **'قيّم سائقك'**
String get rateDriver;
/// No description provided for @tripFare.
///
/// In ar, this message translates to:
/// **'أجرة الرحلة'**
String get tripFare;
/// No description provided for @waitingFee.
///
/// In ar, this message translates to:
/// **'رسوم الانتظار'**
String get waitingFee;
/// No description provided for @discount.
///
/// In ar, this message translates to:
/// **'الخصم'**
String get discount;
/// No description provided for @paymentMethod.
///
/// In ar, this message translates to:
/// **'طريقة الدفع'**
String get paymentMethod;
/// No description provided for @total.
///
/// In ar, this message translates to:
/// **'المجموع'**
String get total;
/// No description provided for @submitRating.
///
/// In ar, this message translates to:
/// **'إرسال التقييم'**
String get submitRating;
/// No description provided for @skipRating.
///
/// In ar, this message translates to:
/// **'تخطي'**
String get skipRating;
/// No description provided for @freeWaitMinutes.
///
/// In ar, this message translates to:
/// **'دقائق انتظار مجانية'**
String get freeWaitMinutes;
/// No description provided for @minutes.
///
/// In ar, this message translates to:
/// **'دقائق'**
String get minutes;
/// No description provided for @callDriver.
///
/// In ar, this message translates to:
/// **'اتصل بالسائق'**
String get callDriver;
/// No description provided for @chatWithDriver.
///
/// In ar, this message translates to:
/// **'دردشة مع السائق'**
String get chatWithDriver;
/// No description provided for @shareTrip.
///
/// In ar, this message translates to:
/// **'مشاركة الرحلة'**
String get shareTrip;
/// No description provided for @emergencySOS.
///
/// In ar, this message translates to:
/// **'طارئ SOS'**
String get emergencySOS;
/// No description provided for @plateNumber.
///
/// In ar, this message translates to:
/// **'رقم اللوحة'**
String get plateNumber;
/// No description provided for @vehicleInfo.
///
/// In ar, this message translates to:
/// **'معلومات المركبة'**
String get vehicleInfo;
/// No description provided for @driverRating.
///
/// In ar, this message translates to:
/// **'تقييم السائق'**
String get driverRating;
/// No description provided for @eta.
///
/// In ar, this message translates to:
/// **'الوصول المتوقع'**
String get eta;
/// No description provided for @km.
///
/// In ar, this message translates to:
/// **'كم'**
String get km;
/// No description provided for @min.
///
/// In ar, this message translates to:
/// **'د'**
String get min;
/// No description provided for @searchTimeout.
///
/// In ar, this message translates to:
/// **'لم نجد سائقاً متاحاً حالياً. حاول مرة أخرى'**
String get searchTimeout;
/// No description provided for @priceEstimate.
///
/// In ar, this message translates to:
/// **'تقدير السعر'**
String get priceEstimate;
/// No description provided for @perKm.
///
/// In ar, this message translates to:
/// **'/كم'**
String get perKm;
/// No description provided for @capacity.
///
/// In ar, this message translates to:
/// **'{seats} مقاعد'**
String capacity(int seats);
/// No description provided for @confirmPickup.
///
/// In ar, this message translates to:
/// **'تأكيد نقطة الانطلاق'**
String get confirmPickup;
/// No description provided for @pickupSet.
///
/// In ar, this message translates to:
/// **'تم تحديد نقطة الانطلاق'**
String get pickupSet;
/// No description provided for @destinationSet.
///
/// In ar, this message translates to:
/// **'تم تحديد الوجهة'**
String get destinationSet;
/// No description provided for @routeSummary.
///
/// In ar, this message translates to:
/// **'{distance} · {duration}'**
String routeSummary(String distance, String duration);
/// No description provided for @noPickupSet.
///
/// In ar, this message translates to:
/// **'حدد نقطة انطلاقك'**
String get noPickupSet;
/// No description provided for @mapPinInstructions.
///
/// In ar, this message translates to:
/// **'حرّك الخريطة لإظهار الدبوس'**
String get mapPinInstructions;
/// No description provided for @tripNoDrivers.
///
/// In ar, this message translates to:
/// **'لم نجد سائقين بالقرب'**
String get tripNoDrivers;
/// No description provided for @tripCancelled.
///
/// In ar, this message translates to:
/// **'تم إلغاء الرحلة'**
String get tripCancelled;
/// No description provided for @tripCancelledByDriver.
///
/// In ar, this message translates to:
/// **'ألغى السائق الرحلة'**
String get tripCancelledByDriver;
/// No description provided for @cancelFee.
///
/// In ar, this message translates to:
/// **'رسوم الإلغاء: {fee} {currency}'**
String cancelFee(String fee, String currency);
/// No description provided for @waitFreeMinutes.
///
/// In ar, this message translates to:
/// **'{minutes} دقائق انتظار مجانية'**
String waitFreeMinutes(int minutes);
/// No description provided for @waitingCharge.
///
/// In ar, this message translates to:
/// **'رسوم الانتظار: {amount} {currency}'**
String waitingCharge(String amount, String currency);
/// No description provided for @driverEnRoute.
///
/// In ar, this message translates to:
/// **'السائق في طريقه إليك'**
String get driverEnRoute;
/// No description provided for @arrivingIn.
///
/// In ar, this message translates to:
/// **'الوصول خلال {eta}'**
String arrivingIn(String eta);
/// No description provided for @tripStarted.
///
/// In ar, this message translates to:
/// **'بدأت الرحلة'**
String get tripStarted;
/// No description provided for @tripEnd.
///
/// In ar, this message translates to:
/// **'انتهت الرحلة'**
String get tripEnd;
/// No description provided for @fareBreakdown.
///
/// In ar, this message translates to:
/// **'تفاصيل الأجرة'**
String get fareBreakdown;
/// No description provided for @baseFare.
///
/// In ar, this message translates to:
/// **'الأجرة الأساسية'**
String get baseFare;
/// No description provided for @distanceFare.
///
/// In ar, this message translates to:
/// **'المسافة'**
String get distanceFare;
/// No description provided for @timeFare.
///
/// In ar, this message translates to:
/// **'الوقت'**
String get timeFare;
/// No description provided for @surgeMultiplier.
///
/// In ar, this message translates to:
/// **'الذروة'**
String get surgeMultiplier;
/// No description provided for @couponApplied.
///
/// In ar, this message translates to:
/// **'تم تطبيق الكوبون'**
String get couponApplied;
/// No description provided for @youPaid.
///
/// In ar, this message translates to:
/// **'دفعت'**
String get youPaid;
/// No description provided for @payCash.
///
/// In ar, this message translates to:
/// **'ادفع نقدي'**
String get payCash;
/// No description provided for @rateYourTrip.
///
/// In ar, this message translates to:
/// **'قيّم رحلتك'**
String get rateYourTrip;
/// No description provided for @ratingComment.
///
/// In ar, this message translates to:
/// **'أضف تعليقاً (اختياري)'**
String get ratingComment;
/// No description provided for @thankYou.
///
/// In ar, this message translates to:
/// **'شكراً على ملاحظاتك'**
String get thankYou;
/// No description provided for @tripDuration.
///
/// In ar, this message translates to:
/// **'مدة الرحلة: {duration}'**
String tripDuration(String duration);
/// No description provided for @tripDistance.
///
/// In ar, this message translates to:
/// **'مسافة الرحلة: {distance}'**
String tripDistance(String distance);
/// No description provided for @reconnect.
///
/// In ar, this message translates to:
/// **'جارٍ إعادة الاتصال...'**
String get reconnect;
/// No description provided for @tripExpired.
///
/// In ar, this message translates to:
/// **'انتهت صلاحية الرحلة'**
String get tripExpired;
}
class _AppLocalizationsDelegate
extends LocalizationsDelegate<AppLocalizations> {
const _AppLocalizationsDelegate();
@override
Future<AppLocalizations> load(Locale locale) {
return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
}
@override
bool isSupported(Locale locale) =>
<String>['ar', 'en'].contains(locale.languageCode);
@override
bool shouldReload(_AppLocalizationsDelegate old) => false;
}
AppLocalizations lookupAppLocalizations(Locale locale) {
// Lookup logic when only language code is specified.
switch (locale.languageCode) {
case 'ar':
return AppLocalizationsAr();
case 'en':
return AppLocalizationsEn();
}
throw FlutterError(
'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely '
'an issue with the localizations generation tool. Please file an issue '
'on GitHub with a reproducible sample app and the gen-l10n configuration '
'that was used.');
}
@@ -0,0 +1,393 @@
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
// ignore_for_file: type=lint
/// The translations for Arabic (`ar`).
class AppLocalizationsAr extends AppLocalizations {
AppLocalizationsAr([String locale = 'ar']) : super(locale);
@override
String get appName => 'Tripz';
@override
String get appTagline => 'اسحب، وصل، وصل';
@override
String get phoneTitle => 'أدخل رقم هاتفك للمتابعة';
@override
String get phoneLabel => 'رقم الهاتف';
@override
String get phoneHint => '07XXXXXXXX';
@override
String get sendCode => 'إرسال الرمز';
@override
String get otpTitle => 'أدخل رمز التحقق';
@override
String otpSentTo(String phone) {
return 'أُرسل إلى $phone';
}
@override
String get otpLabel => 'الرمز';
@override
String get confirm => 'تأكيد';
@override
String welcome(String name) {
return 'مرحباً $name';
}
@override
String get welcomeBack => 'مرحباً بعودتك';
@override
String get whereTo => 'إلى أين؟';
@override
String get setLocationOnMap => 'تحديد الموقع على الخريطة';
@override
String get myTrips => 'رحلاتي';
@override
String get wallet => 'المحفظة';
@override
String get coupons => 'الكوبونات والدعوات';
@override
String get settings => 'الإعدادات';
@override
String get support => 'الدعم';
@override
String get logout => 'تسجيل الخروج';
@override
String get language => 'اللغة';
@override
String get arabic => 'العربية';
@override
String get english => 'English';
@override
String get theme => 'المظهر';
@override
String get lightMode => 'الوضع النهاري';
@override
String get darkMode => 'الوضع الليلي';
@override
String get systemMode => 'تلقائي';
@override
String get errorGeneric => 'حدث خطأ ما';
@override
String get retry => 'أعد المحاولة';
@override
String get emptyGeneric => 'لا توجد عناصر بعد';
@override
String get loading => 'جارٍ التحميل...';
@override
String get cancel => 'إلغاء';
@override
String get save => 'حفظ';
@override
String get close => 'إغلاق';
@override
String get next => 'التالي';
@override
String get back => 'رجوع';
@override
String get search => 'بحث';
@override
String get noResults => 'لا توجد نتائج';
@override
String get connectionError => 'تحقق من اتصالك بالإنترنت';
@override
String get authError => 'تعذّر إرسال الرمز';
@override
String get invalidOtp => 'رمز غير صحيح';
@override
String get phoneEmpty => 'أدخل رقم الهاتف';
@override
String get selectDestination => 'اختر وجهتك';
@override
String get pickupLocation => 'نقطة الانطلاق';
@override
String get dropoffLocation => 'الوجهة';
@override
String get chooseOnMap => 'اختر من الخريطة';
@override
String get favorites => 'المفضلة';
@override
String get homePlace => 'البيت';
@override
String get workPlace => 'العمل';
@override
String get searchPlaces => 'ابحث عن مكان...';
@override
String get recent => 'الأخيرة';
@override
String get addStop => 'إضافة توقف';
@override
String get removeStop => 'إزالة التوقف';
@override
String get rideClasses => 'فئة الرحلة';
@override
String get cash => 'نقدي';
@override
String get walletPayment => 'المحفظة';
@override
String get couponCode => 'كود الخصم';
@override
String get scheduleRide => 'جدولة رحلة';
@override
String get requestRide => 'اطلب رحلة';
@override
String get searchingDriver => 'جارٍ البحث عن سائق...';
@override
String get cancelSearch => 'إلغاء البحث';
@override
String get driverAccepted => 'قبل سائقك الرحلة';
@override
String get driverArriving => 'السائق في طريقه إليك';
@override
String get driverArrived => 'وصل سائقك';
@override
String get rideInProgress => 'الرحلة جارية';
@override
String get rideCompleted => 'انتهت الرحلة';
@override
String get rateDriver => 'قيّم سائقك';
@override
String get tripFare => 'أجرة الرحلة';
@override
String get waitingFee => 'رسوم الانتظار';
@override
String get discount => 'الخصم';
@override
String get paymentMethod => 'طريقة الدفع';
@override
String get total => 'المجموع';
@override
String get submitRating => 'إرسال التقييم';
@override
String get skipRating => 'تخطي';
@override
String get freeWaitMinutes => 'دقائق انتظار مجانية';
@override
String get minutes => 'دقائق';
@override
String get callDriver => 'اتصل بالسائق';
@override
String get chatWithDriver => 'دردشة مع السائق';
@override
String get shareTrip => 'مشاركة الرحلة';
@override
String get emergencySOS => 'طارئ SOS';
@override
String get plateNumber => 'رقم اللوحة';
@override
String get vehicleInfo => 'معلومات المركبة';
@override
String get driverRating => 'تقييم السائق';
@override
String get eta => 'الوصول المتوقع';
@override
String get km => 'كم';
@override
String get min => 'د';
@override
String get searchTimeout => 'لم نجد سائقاً متاحاً حالياً. حاول مرة أخرى';
@override
String get priceEstimate => 'تقدير السعر';
@override
String get perKm => '/كم';
@override
String capacity(int seats) {
return '$seats مقاعد';
}
@override
String get confirmPickup => 'تأكيد نقطة الانطلاق';
@override
String get pickupSet => 'تم تحديد نقطة الانطلاق';
@override
String get destinationSet => 'تم تحديد الوجهة';
@override
String routeSummary(String distance, String duration) {
return '$distance · $duration';
}
@override
String get noPickupSet => 'حدد نقطة انطلاقك';
@override
String get mapPinInstructions => 'حرّك الخريطة لإظهار الدبوس';
@override
String get tripNoDrivers => 'لم نجد سائقين بالقرب';
@override
String get tripCancelled => 'تم إلغاء الرحلة';
@override
String get tripCancelledByDriver => 'ألغى السائق الرحلة';
@override
String cancelFee(String fee, String currency) {
return 'رسوم الإلغاء: $fee $currency';
}
@override
String waitFreeMinutes(int minutes) {
return '$minutes دقائق انتظار مجانية';
}
@override
String waitingCharge(String amount, String currency) {
return 'رسوم الانتظار: $amount $currency';
}
@override
String get driverEnRoute => 'السائق في طريقه إليك';
@override
String arrivingIn(String eta) {
return 'الوصول خلال $eta';
}
@override
String get tripStarted => 'بدأت الرحلة';
@override
String get tripEnd => 'انتهت الرحلة';
@override
String get fareBreakdown => 'تفاصيل الأجرة';
@override
String get baseFare => 'الأجرة الأساسية';
@override
String get distanceFare => 'المسافة';
@override
String get timeFare => 'الوقت';
@override
String get surgeMultiplier => 'الذروة';
@override
String get couponApplied => 'تم تطبيق الكوبون';
@override
String get youPaid => 'دفعت';
@override
String get payCash => 'ادفع نقدي';
@override
String get rateYourTrip => 'قيّم رحلتك';
@override
String get ratingComment => 'أضف تعليقاً (اختياري)';
@override
String get thankYou => 'شكراً على ملاحظاتك';
@override
String tripDuration(String duration) {
return 'مدة الرحلة: $duration';
}
@override
String tripDistance(String distance) {
return 'مسافة الرحلة: $distance';
}
@override
String get reconnect => 'جارٍ إعادة الاتصال...';
@override
String get tripExpired => 'انتهت صلاحية الرحلة';
}
@@ -0,0 +1,394 @@
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
// ignore_for_file: type=lint
/// The translations for English (`en`).
class AppLocalizationsEn extends AppLocalizations {
AppLocalizationsEn([String locale = 'en']) : super(locale);
@override
String get appName => 'Tripz';
@override
String get appTagline => 'Tap, ride, arrive';
@override
String get phoneTitle => 'Enter your phone number to continue';
@override
String get phoneLabel => 'Phone number';
@override
String get phoneHint => '07XXXXXXXX';
@override
String get sendCode => 'Send code';
@override
String get otpTitle => 'Enter verification code';
@override
String otpSentTo(String phone) {
return 'Sent to $phone';
}
@override
String get otpLabel => 'Code';
@override
String get confirm => 'Confirm';
@override
String welcome(String name) {
return 'Welcome $name';
}
@override
String get welcomeBack => 'Welcome back';
@override
String get whereTo => 'Where to?';
@override
String get setLocationOnMap => 'Set location on map';
@override
String get myTrips => 'My trips';
@override
String get wallet => 'Wallet';
@override
String get coupons => 'Coupons & invites';
@override
String get settings => 'Settings';
@override
String get support => 'Support';
@override
String get logout => 'Logout';
@override
String get language => 'Language';
@override
String get arabic => 'العربية';
@override
String get english => 'English';
@override
String get theme => 'Theme';
@override
String get lightMode => 'Light';
@override
String get darkMode => 'Dark';
@override
String get systemMode => 'System';
@override
String get errorGeneric => 'Something went wrong';
@override
String get retry => 'Try again';
@override
String get emptyGeneric => 'Nothing here yet';
@override
String get loading => 'Loading...';
@override
String get cancel => 'Cancel';
@override
String get save => 'Save';
@override
String get close => 'Close';
@override
String get next => 'Next';
@override
String get back => 'Back';
@override
String get search => 'Search';
@override
String get noResults => 'No results found';
@override
String get connectionError => 'Check your internet connection';
@override
String get authError => 'Failed to send code';
@override
String get invalidOtp => 'Invalid code';
@override
String get phoneEmpty => 'Enter your phone number';
@override
String get selectDestination => 'Choose your destination';
@override
String get pickupLocation => 'Pickup location';
@override
String get dropoffLocation => 'Destination';
@override
String get chooseOnMap => 'Choose on map';
@override
String get favorites => 'Favorites';
@override
String get homePlace => 'Home';
@override
String get workPlace => 'Work';
@override
String get searchPlaces => 'Search for a place...';
@override
String get recent => 'Recent';
@override
String get addStop => 'Add a stop';
@override
String get removeStop => 'Remove stop';
@override
String get rideClasses => 'Ride class';
@override
String get cash => 'Cash';
@override
String get walletPayment => 'Wallet';
@override
String get couponCode => 'Coupon code';
@override
String get scheduleRide => 'Schedule a ride';
@override
String get requestRide => 'Request a ride';
@override
String get searchingDriver => 'Looking for a driver...';
@override
String get cancelSearch => 'Cancel search';
@override
String get driverAccepted => 'Your driver accepted';
@override
String get driverArriving => 'Driver is on the way';
@override
String get driverArrived => 'Your driver has arrived';
@override
String get rideInProgress => 'Ride in progress';
@override
String get rideCompleted => 'Ride completed';
@override
String get rateDriver => 'Rate your driver';
@override
String get tripFare => 'Trip fare';
@override
String get waitingFee => 'Waiting fee';
@override
String get discount => 'Discount';
@override
String get paymentMethod => 'Payment method';
@override
String get total => 'Total';
@override
String get submitRating => 'Submit rating';
@override
String get skipRating => 'Skip';
@override
String get freeWaitMinutes => 'Free wait minutes';
@override
String get minutes => 'minutes';
@override
String get callDriver => 'Call driver';
@override
String get chatWithDriver => 'Chat with driver';
@override
String get shareTrip => 'Share trip';
@override
String get emergencySOS => 'Emergency SOS';
@override
String get plateNumber => 'Plate number';
@override
String get vehicleInfo => 'Vehicle info';
@override
String get driverRating => 'Driver rating';
@override
String get eta => 'Estimated arrival';
@override
String get km => 'km';
@override
String get min => 'min';
@override
String get searchTimeout =>
'No drivers available right now. Please try again';
@override
String get priceEstimate => 'Price estimate';
@override
String get perKm => '/km';
@override
String capacity(int seats) {
return '$seats seats';
}
@override
String get confirmPickup => 'Confirm pickup';
@override
String get pickupSet => 'Pickup set';
@override
String get destinationSet => 'Destination set';
@override
String routeSummary(String distance, String duration) {
return '$distance · $duration';
}
@override
String get noPickupSet => 'Set your pickup location';
@override
String get mapPinInstructions => 'Move the map to place the pin';
@override
String get tripNoDrivers => 'No drivers found nearby';
@override
String get tripCancelled => 'Trip cancelled';
@override
String get tripCancelledByDriver => 'Driver cancelled the trip';
@override
String cancelFee(String fee, String currency) {
return 'Cancellation fee: $fee $currency';
}
@override
String waitFreeMinutes(int minutes) {
return '$minutes min free wait';
}
@override
String waitingCharge(String amount, String currency) {
return 'Waiting charge: $amount $currency';
}
@override
String get driverEnRoute => 'Driver is heading to you';
@override
String arrivingIn(String eta) {
return 'Arriving in $eta';
}
@override
String get tripStarted => 'Ride started';
@override
String get tripEnd => 'Trip ended';
@override
String get fareBreakdown => 'Fare breakdown';
@override
String get baseFare => 'Base fare';
@override
String get distanceFare => 'Distance';
@override
String get timeFare => 'Time';
@override
String get surgeMultiplier => 'Surge';
@override
String get couponApplied => 'Coupon applied';
@override
String get youPaid => 'You paid';
@override
String get payCash => 'Pay cash';
@override
String get rateYourTrip => 'Rate your trip';
@override
String get ratingComment => 'Add a comment (optional)';
@override
String get thankYou => 'Thank you for your feedback';
@override
String tripDuration(String duration) {
return 'Trip duration: $duration';
}
@override
String tripDistance(String distance) {
return 'Trip distance: $distance';
}
@override
String get reconnect => 'Reconnecting...';
@override
String get tripExpired => 'Trip expired';
}