Files
intaleq/inject_missing_translations.py

282 lines
15 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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()