282 lines
15 KiB
Python
282 lines
15 KiB
Python
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!": "بعد هالوقت\\nما فيك تكنسل!",
|
||
"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()
|