fix marker rendering & modernize riding widgets for dark mode - 2026-04-11

This commit is contained in:
Hamza-Ayed
2026-04-11 01:14:09 +03:00
parent 3f03f25142
commit 454276d1e0
88 changed files with 50376 additions and 23310 deletions

View File

@@ -0,0 +1,281 @@
import os
import re
import json
# Pre-defined mapping of English keys to standard Arabic translations.
# These represent the clean keys that were accidentally removed.
ARABIC_TRANS = {
"1 Passenger": "راكب واحد",
"2 Passengers": "راكبين",
"3 Passengers": "٣ ركاب",
"4 Passengers": "٤ ركاب",
"2. Attach Recorded Audio (Optional)": "٢. إرفاق تسجيل صوتي (اختياري)",
"Account": "الحساب",
"Actions": "الإجراءات",
"Active Users": "المستخدمين النشطين",
"Add a Stop": "إضافة نقطة توقف",
"Add a new waypoint stop": "إضافة نقطة توقف جديدة",
"After this period\\nYou can\\'t cancel!": "بعد هالوقت\\ا فيك تكنسل!",
"Age is": "العمر",
"Alert": "تنبيه",
"An OTP has been sent to your number.": "تم إرسال كود التأكيد لرقمك.",
"An error occurred": "حدث خطأ",
"Appearance": "المظهر",
"Are you sure you want to delete this file?": "متأكد بدك تحذف هالملف؟",
"Are you sure you want to logout?": "متأكد بدك تسجل خروج؟",
"Arrived": "وصلنا",
"Audio Recording": "تسجيل صوتي",
"Call": "اتصال",
"Call Support": "اتصل بالدعم",
"Call left": "مكالمات متبقية",
"Change Photo": "تغيير الصورة",
"Choose from Gallery": "اختر من المعرض",
"Choose from contact": "اختر من جهات الاتصال",
"Click to track the trip": "اضغط لتتبع المشوار",
"Close panel": "إغلاق اللوحة",
"Coming": "جايين",
"Complete Payment": "إتمام الدفع",
"Confirm Cancellation": "تأكيد الإلغاء",
"Confirm Pickup Location": "تأكيد موقع الانطلاق",
"Connection failed. Please try again.": "فشل الاتصال. جرب مرة تانية.",
"Could not create ride. Please try again.": "ما قدرنا نعمل مشوار. جرب مرة تانية.",
"Crop Photo": "قص الصورة",
"Dark Mode": "الوضع الليلي",
"Delete": "حذف",
"Delete Account": "حذف الحساب",
"Delete All": "حذف الكل",
"Delete All Recordings?": "حذف كل التسجيلات؟",
"Delete Recording?": "حذف التسجيل؟",
"Destination Set": "تم تحديد الوجهة",
"Distance": "المسافة",
"Double tap to open search or enter destination": "اضغط مرتين لتفتح البحث أو تدخل الوجهة",
"Double tap to set or change this waypoint on the map": "اضغط مرتين لتحديد أو تغيير هالنقطة عالخريطة",
"Drawing route on map...": "عم نرسم الطريق عالخريطة...",
"Driver Phone": "رقم الكابتن",
"Driver is Going To You": "الكابتن جاي لعندك",
"Emergency Mode Triggered": "تم تفعيل وضع الطوارئ",
"Emergency SOS": "طوارئ SOS",
"Enter the 5-digit code": "أدخل الكود المكون من ٥ أرقام",
"Enter your City": "أدخل مدينتك",
"Enter your Password": "أدخل كلمة السر",
"Failed to book trip: $e": "فشل حجز المشوار",
"Failed to get location": "فشل جلب الموقع",
"Failed to initiate payment. Please try again.": "فشل بدء الدفع. جرب مرة تانية.",
"Failed to send OTP": "فشل إرسال كود التأكيد",
"Failed to upload photo": "فشل رفع الصورة",
"Finished": "انتهى",
"Fixed Price": "سعر ثابت",
"General": "عام",
"Grant": "منح الإذن",
"Have a Promo Code?": "معك كود خصم؟",
"Hello! I\\'m inviting you to try Intaleq.": "أهلاً! بدعيك لتجربة تطبيق انطلق.",
"Hi ,I Arrive your site": "مرحباً، وصلت لموقعك",
"Hi, Where to": "مرحباً، لوين؟",
"Home": "الرئيسية",
"I am currently located at": "أنا حالياً موجود بـ",
"I'm Safe": "أنا بأمان",
"If you need to reach me, please contact the driver directly at": "إذا بدك تتواصل معي، حاكي الكابتن مباشرة على",
"Image Upload Failed": "فشل رفع الصورة",
"Intaleq Passenger": "راكب انطلق",
"Invite": "دعوة",
"Join a channel": "انضم للقناة",
"Last Name": "الاسم الأخير",
"Leave a detailed comment (Optional)": "اترك تعليق تفصيلي (اختياري)",
"Light Mode": "الوضع الفاتح",
"Listen": "استماع",
"Location": "الموقع",
"Location Received": "تم استلام الموقع",
"Logout": "تسجيل خروج",
"Map Error": "خطأ بالخريطة",
"Message": "رسالة",
"Move map to select destination": "حرك الخريطة لتحديد الوجهة",
"Move map to set start location": "حرك الخريطة لتحديد نقطة البداية",
"Move map to set stop": "حرك الخريطة لتحديد التوقف",
"Move map to your home location": "حرك الخريطة لموقع البيت",
"Move map to your pickup point": "حرك الخريطة لموقع الانطلاق",
"Move map to your work location": "حرك الخريطة لموقع الشغل",
"N/A": "غير متاح",
"No Notifications": "ما في إشعارات",
"No Recordings Found": "ما في تسجيلات",
"No Rides now!": "ما في مشاوير حالياً!",
"No contacts available": "ما في جهات اتصال",
"No i want": "لا بدي",
"No notification data found.": "ما في بيانات للإشعار.",
"No routes available for this destination.": "ما في طرق لهالوجهة.",
"No user found": "ما في مستخدم",
"No,I want": "لا، بدي",
"No.Iwant Cancel Trip.": "لا. بدي كنسل المشوار.",
"Now move the map to your pickup point": "الآن حرك الخريطة لمكان انطلاقك",
"Now set the pickup point for the other person": "الآن حدد مكان الانطلاق للشخص التاني",
"On Trip": "بالمشوار",
"Open": "فتح",
"Open destination search": "فتح بحث الوجهة",
"Open in Google Maps": "فتح بخرائط جوجل",
"Order VIP Canceld": "انلغى طلب VIP",
"Passenger": "الراكب",
"Passenger cancel order": "الراكب كنسل الطلب",
"Pay by MTN Wallet": "الدفع بمحفظة سيريتل كاش",
"Pay by Sham Cash": "الدفع بشام كاش",
"Pay by Syriatel Wallet": "الدفع بمحفظة سيريتل كاش",
"Pay with PayPal": "الدفع بـ PayPal",
"Phone": "الموبايل",
"Phone Number": "رقم الموبايل",
"Phone Number Check": "فحص رقم الموبايل",
"Phone number seems too short": "رقم الموبايل قصير كتير",
"Phone verified. Please complete registration.": "تأكد الرقم. يرجى إتمام التسجيل.",
"Pick destination on map": "اختر الوجهة عالخريطة",
"Pick location on map": "اختر الموقع عالخريطة",
"Pick on map": "اختر عالخريطة",
"Pick start point on map": "اختر نقطة البداية عالخريطة",
"Plan Your Route": "خطط مسارك",
"Please add contacts to your phone.": "يرجى إضافة أسماء لجوالك.",
"Please check your internet and try again.": "تأكد من النت وجرب مرة تانية.",
"Please enter a valid email.": "أدخل إيميل صحيح.",
"Please enter a valid phone number.": "أدخل رقم موبايل صحيح.",
"Please enter the number without the leading 0": "أدخل الرقم بدون 0 بالبداية",
"Please enter your phone number": "أدخل رقم موبايلك",
"Please go to Car now": "يا ريت تروح لعند السيارة هلا",
"Please select a reason first": "اختر السبب أول شي",
"Please set a valid SOS phone number.": "يا ريت تحط رقم طوارئ صح.",
"Please slow down": "يا ريت تخفف سرعة",
"Please wait while we prepare your trip.": "انتظر شوي عم نجهز المشوار.",
"Preferences": "التفضيلات",
"Profile photo updated": "تم تحديث صورة الغلاف",
"Quick Message": "رسالة سريعة",
"Rating is": "التقييم هو",
"Received empty route data.": "تم استلام بيانات طريق فارغة.",
"Record": "تسجيل",
"Record your trips to see them here.": "سجل مشاويرك لتشوفهم هون.",
"Rejected Orders Count": "عدد الطلبات المرفوضة",
"Remove waypoint": "حذف نقطة التوقف",
"Report": "الإبلاغ",
"Route and prices have been calculated successfully!": "تم حساب الطريق والأسعار بنجاح!",
"SOS": "نجدة SOS",
"Save": "حفظ",
"Save Changes": "حفظ التغييرات",
"Save Name": "حفظ الاسم",
"Search country": "البحث عن الدولة",
"Search for a starting point": "ابحث عن نقطة انطلاق",
"Select Appearance": "اختر المظهر",
"Select Education": "اختر مستوى التعليم",
"Select Gender": "اختر الجنس",
"Select This Ride": "اختر هالمشوار",
"Select betweeen types": "اختر بين الأنواع",
"Send Email": "إرسال إيميل",
"Send SOS": "إرسال نجدة",
"Send WhatsApp Message": "إرسال رسالة واتساب",
"Server Error": "خطأ بالسيرفر",
"Server error": "خطأ بالسيرفر",
"Server error. Please try again.": "خطأ بالسيرفر. جرب مرة تانية.",
"Set Destination": "تحديد الوجهة",
"Set Phone Number": "تعيين رقم الموبايل",
"Set as Home": "تحديد كالبيت",
"Set as Stop": "تحديد كنقطة توقف",
"Set as Work": "تحديد كالشغل",
"Share": "مشاركة",
"Share Trip": "مشاركة المشوار",
"Share your experience to help us improve...": "شاركنا تجربتك لنحسن خدمتنا...",
"Something went wrong. Please try again.": "صار غلط. جرب مرة تانية.",
"Speaking...": "عم يحكي...",
"Speed Over": "تجاوز السرعة",
"Start Point": "نقطة البداية",
"Stay calm. We are here to help.": "خليك هادي. نحن هون لمساعدتك.",
"Stop": "توقف",
"Submit Rating": "إرسال التقييم",
"Support & Info": "الدعم والمعلومات",
"System Default": "حسب النظام",
"Take a Photo": "التقاط صورة",
"Tap to apply your discount": "اضغط لتطبيق الخصم",
"Tap to search your destination": "اضغط للبحث عن وجهتك",
"The driver cancelled the trip.": "الكابتن كنسل المشوار.",
"This action cannot be undone.": "هالإجراء ما بيتراجع عنه.",
"This action is permanent and cannot be undone.": "هالإجراء دائم وما بيتراجع عنه.",
"This is for delivery or a motorcycle.": "هاد للتوصيل أو الدراجة النارية.",
"Time": "الوقت",
"To :": "إلى :",
"Top up Balance": "شحن الرصيد",
"Top up Balance to continue": "اشحن رصيدك لتكمل",
"Total Invites": "مجموع الدعوات",
"Total Price": "السعر الإجمالي",
"Trip booked successfully": "تم حجز المشوار بنجاح",
"Type your message...": "اكتب رسالتك...",
"Unknown Location": "موقع غير معروف",
"Update Name": "تحديث الاسم",
"Verified Passenger": "راكب موثق",
"View Map": "عرض الخريطة",
"Wait for the trip to start first": "استنى ليبلش المشوار أول",
"Waiting...": "بانتظار...",
"Warning": "تحذير",
"Waypoint has been set successfully": "تم تعيين نقطة التوقف بنجاح",
"We use location to get accurate and nearest driver for you": "منستخدم لوكيشنك لنلاقي أقرب كابتن إلك بدقة",
"WhatsApp": "واتساب",
"Why do you want to cancel?": "ليش بدك تكنسل؟",
"Yes": "إي",
"You should ideintify your gender for this type of trip!": "لازم تحدد جنسك لهالنوع من المشاوير!",
"You will choose one of above!": "لازم تختار واحد من فوق!",
"Your Rewards": "مكافآتك",
"Your complaint has been submitted.": "تم إرسال شكوتك.",
"and acknowledge our Privacy Policy.": "وأقر بسياسة الخصوصية الخاصة بنا.",
"as the driver.": "ككابتن.",
"cancelled": "تكنسل",
"due to a previous trip.": "عن مشوار قديم.",
"insert sos phone": "دخل رقم طوارئ",
"is driving a": "عم يسوق",
"min added to fare": "دقيقة نضافت للأجرة",
"phone not verified": "رقم الموبايل مو متأكد",
"to arrive you.": "ليوصلك.",
"unknown": "غير معروف",
"wait 1 minute to recive message": "استنى دقيقة لتستلم الرسالة",
"with license plate": "برقم اللوحة",
"witout zero": "بدون صفر",
"you must insert token code": "لازم تدخل الكود",
}
def inject():
# 1. Read the missing keys from JSON file outputted earlier
# We will just inject ALL these ARABIC_TRANS keys into the codebase if missing
file_path = 'lib/controller/local/translations.dart'
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
# Find locales using regex e.g. "ar": { or "ar_SA": { or "en": {
# It finds the locale name
pattern = re.compile(r'(\n\s*)"([a-zA-Z_]+)":\s*\{')
new_content = ""
last_idx = 0
for match in pattern.finditer(content):
# We append what we had before
new_content += content[last_idx:match.end()]
last_idx = match.end()
locale = match.group(2)
is_arabic = locale.startswith('ar')
# Determine the insertion string for this locale
addons = []
for key, ar_val in ARABIC_TRANS.items():
# If the exact key doesn't exist in the file (naively checking inside the whole file,
# or we can just inject avoiding duplicates if it is not in the remaining text section)
# A safer check: if f'"{key}"' not in content and f"'{key}'" not in content:
addon = ""
if is_arabic:
addon = f'\n "{key}": "{ar_val}",'
else:
addon = f'\n "{key}": "{key}",'
addons.append(addon)
new_content += "".join(addons)
new_content += content[last_idx:]
with open(file_path, 'w', encoding='utf-8') as f:
f.write(new_content)
print(f"Successfully injected {len(ARABIC_TRANS)} missing keys into all locales.")
if __name__ == "__main__":
inject()