اللغات
كيف يعمل المطعم بالإنجليزية والعربية، وكيف تغيّر أي نص، وما الذي تغيّره لإضافة لغة.
لحزمة الحزمة الكاملة
اللغات المتوفرة
الإنجليزية والعربية، في التطبيقات الثلاثة. تعرض العربية الواجهة كلها من اليمين إلى اليسار، مع خط IBM Plex Sans Arabic في الموقع، وتبقى الأرقام بالأرقام اللاتينية في اللغتين.
| التطبيق | الإنجليزية | العربية |
|---|---|---|
| موقع الطلبات | /en/… | /ar/… |
| لوحة تحكم الفريق | /en/… | /ar/… |
| API | Accept-Language: en | Accept-Language: ar |
الإنجليزية هي اللغة الافتراضية. تُحفظ الأطباق والفئات والكومبو والمطابخ وأقسام الصفحة الرئيسية بكل نصوصها باللغتين، وتُدخل جنبًا إلى جنب في لوحة التحكم، وتملأ تعبئة البيانات النص العربي لها جميعًا.
كيف تُختار اللغة
- اللغة هي الجزء الأول من العنوان. المسار الذي لا يحتوي لغة يذهب إلى
/en. - يبدّل محدد اللغة ذلك الجزء من العنوان ويُبقي الصفحة نفسها.
- في الموقع، يُضبط الاتجاه قبل أول عرض للصفحة، لذلك لا تومض الصفحة العربية أبدًا من اليسار إلى اليمين.
- ترسل الواجهتان الأماميتان لغة الصفحة إلى واجهة API، فتعود رسائلها باللغة نفسها. ويتذكر الطلب اللغة التي أُرسل بها.
غيّر نصًا
كل كلمة ظاهرة موجودة في messages/<namespace>/en.json وar.json، في مجلد كل واجهة أمامية. غيّر القيمة، وأبقِ المفتاح، وغيّرها في الملفين.
| التطبيق | مساحات الأسماء |
|---|---|
| موقع الطلبات | account, auth, cart, checkout, common, home, layouts, legal, locations, seo, store, support, tracking, wishlist |
| لوحة تحكم الفريق | ai-assistant، وauth، وcommon، وdashboard (مع مجلد لكل صفحة)، وdemo-credentials، وlayouts |
- المفتاح الناقص في
ar.jsonيظهر كرسالة ناقصة في الجهة العربية، لذلك أبقِ الملفين متطابقين. - النص داخل الأقواس
{curly}يملؤه التطبيق، مثل{count}أو{name}. أبقِ هذه الكلمات كما هي في اللغتين. - تسميات الشريط الجانبي في لوحة التحكم رسائل أيضًا، تحت
navفيmessages/dashboard/en.jsonوar.json.
ما تترجمه واجهة API
- تعود رسائل الأخطاء و
messageالخاصة بعمليات الكتابة الناجحة بلغة الترويسةAccept-Language. تُعامَلar-SAكعربية؛ وأي لغة لا تملكها واجهة API تعود إلى الإنجليزية. - الأخطاء التي يراها العميل، مثل مطبخ مغلق، تُرسل كمفاتيح مثل
errors.kitchen_closed، ويعرض الموقع جملته الخاصة لكل منها. - نصوصها الخاصة ملفات JSON في
back-end/src/i18n/translations/en/وar/، ملف لكل قسم:adminوauthوcategoryوcommonوmailوorderوproductوrolesوsettingsوusers. رسالة إعادة تعيين كلمة المرور موجودة فيmail. - تعود الأطباق وسجلات القائمة الأخرى باللغتين، بالشكل
{ "en": "…", "ar": "…" }، وتختار الواجهة الأمامية إحداهما.
أضف لغة إلى الموقع
اللغتان مكتوبتان في عدد قليل من الملفات، لذلك تتطلب إضافة لغة ثالثة تعديل كل منها. المسارات داخل storefront/.
- أضف الرمز إلى
localesفيsrc/config/i18n.ts، وفيsrc/proxy.ts، وفيsrc/app/[locale]/layout.tsx. - انسخ كل ملف
messages/<namespace>/en.jsonإلى ملف باسم الرمز الجديد، وترجم القيم. - إذا كانت اللغة تُكتب من اليمين إلى اليسار، وسّع فحص الاتجاه في
src/app/layout.tsx، الذي لا يعرف سوىar. - أضف الرمز الجديد إلى
src/components/LanguageSwitcher.tsx، ونصوصه إلىsrc/config/brand.config.ts، الذي يحتوي على الأسماء وعنوان الصفحة الرئيسية بـenوar. - المكوّنات التي تختار نص القائمة حسب اللغة، مثل نتائج البحث وشريط الفئات وخريطة المطابخ، تختار بين
enوar. ابحث فيsrc/عن"ar"وأضف الرمز الجديد هناك أيضًا.
أضف لغة إلى لوحة التحكم
- أضف الرمز إلى
localesفيsrc/config/i18n.tsوsrc/proxy.tsوsrc/app/[locale]/layout.tsx، وإلى قوائم اللغات فيsrc/components/LanguageSwitcher.tsx، وقائمة المستخدم، وإعداد اللغة. - انسخ كل ملف
messages/**/en.jsonإلى ملف باسم الرمز الجديد، وترجم القيم. - تُدخل النماذج كل نص في القائمة بالإنجليزية والعربية جنبًا إلى جنب (
src/components/ui/LanguageTabs.tsxوحقول الإدخال ثنائية اللغة). اللغة الثالثة هناك تحتاج أيضًا إلى أن تحفظها واجهة API.
أضف لغة إلى واجهة API
تعرف واجهة API en وar في back-end/src/i18n/i18n.service.ts وفي فحوص الطلبات والتواصل. أضف الرمز الجديد هناك، وانسخ src/i18n/translations/en/ إلى مجلد باسمه، وترجم الملفات. تحفظ سجلات القائمة زوجًا { en, ar }، لذلك تتطلب لغة ثالثة في البيانات تعديل هذه السجلات وتعبئة البيانات.