إنتقل إلى المحتوى الرئيسي

تعريب وترجمة تجربة العميل

النطاق الحالي

يدعم سطحا العميل العربية (ar) والإنجليزية (en):

السطحإطار الترجمةمصدر النصوصحفظ الاختيار
بوابة Next.jsnext-intlapps/customer/messages/{locale}.jsoncookie باسم shambus_locale لمدة سنة
تطبيق FlutterFlutter gen-l10napps/mobile/customer/lib/l10n/app_{locale}.arbHive داخل صندوق الإعدادات

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

بوابة العميل

  • تحدد src/i18n/config.ts اللغات المقبولة واللغة الافتراضية واتجاه النص.
  • يحل src/proxy.ts اللغة من ?lang= أو مسار /en أو cookie، ثم يمررها في ترويسة داخلية موثوقة إلى Server Components.
  • يحمّل src/i18n/request.ts كتالوج الطلب، ويضبط app/layout.tsx قيمتي lang وdir وموفر NextIntlClientProvider وبيانات SEO المطابقة للغة. يستخدم الموفر منطقة الأعمال Asia/Damascus نفسها على الخادم والمتصفح.
  • تمثل src/lib/calendar-date.ts قيم YYYY-MM-DD كتاريخ تقويمي عند ظهر UTC، لا كلحظة منتصف ليل محلية. يجب استخدامها في شرائط الأيام والتنسيق والمقارنة حتى لا يتغير اليوم بين Node ومتصفح موجود في منطقة زمنية أخرى.
  • يستخدم مفتاح اللغة router.refresh() بعد تحديث cookie، لذلك تبقى الصفحة الحالية ولا تُبنى نسختان متوازيتان من كل route.
  • لا تعرض الواجهة نص error القادم من API. تحول src/i18n/errors.ts errorCode والحالة إلى رسالة من الكتالوج حتى لا تتسرب تفاصيل داخلية أو تظهر العربية داخل واجهة إنجليزية.

يفرض اختبار __tests__/i18n/catalog-parity.test.ts تطابق شجرة كتالوجي العربية والإنجليزية، بما فيها أطوال المصفوفات وأنواع القيم، ويرفض النصوص الفارغة.

تطبيق العميل

  • يعرّف l10n.yaml مولد Flutter الرسمي، وتوفر AppLocalizations اللغات المدعومة وdelegates Material وCupertino.
  • يقرأ localeProvider اللغة المحفوظة ويتجاهل أي قيمة غير مدعومة، ثم يضبط MaterialApp.router.locale وDirectionality.
  • تعرض الإعدادات الخيارات مباشرة من AppLocalizations.supportedLocales حتى لا تنفصل القائمة عن الكتالوجات المشحونة.
  • تستخدم النماذج دوال nameFor(languageCode) للمدن والشركات والمكافآت، مع رجوع إلى النص المتاح عند نقص ترجمة بيانات قاعدة البيانات.
  • تهيأ بيانات التواريخ لكل لغة مشحونة عند الإقلاع، وتستخدم الشاشات Localizations.localeOf(context) بدلاً من افتراض العربية.

إضافة التركية لاحقاً

لا تضف شروط locale == 'tr' موزعة في الشاشات. اتبع هذا المسار:

  1. أضف tr إلى customerLocales وأنشئ apps/customer/messages/tr.json بنفس شكل الكتالوجين الحاليين.
  2. وسّع حل اللغة وبيانات SEO واختبارات التطابق، وأضف تسمية التركية إلى مفتاح اللغة.
  3. أنشئ apps/mobile/customer/lib/l10n/app_tr.arb كاملاً وشغّل flutter gen-l10n.
  4. أضف initializeDateFormatting('tr') واختبارات widget للاتجاه LTR والتواريخ والجمع والتنسيق الرقمي.
  5. اختبر البحث والحجز والتذكرة والدعم والولاء ومركز العرض بعرضي هاتف وسطح مكتب، ثم شغّل اختبارات الويب وFlutter الكاملة قبل النشر.

أي لغة جديدة لا تعتبر مدعومة لمجرد وجود كتالوج جزئي؛ يجب أن تنجح بوابات التطابق والبناء والاختبارات البصرية والوظيفية أولاً.