السلام عليكم,
ماهي الطريقة الصحيحة أو المناسبة لبرمجة موقع بعدة لغات؟
أيجب تخزين اللغة المختارة في ال cookies أو ال session أو ال url أو subdomain؟
شكراً مقدماً.
من الممكن للمستخدم تسجيل الدخول للموقع على أكثر من متصفح فلحفظ اللغة المختارة أنصح بوجودها في قاعدة البيانات
لأن ملفات ال cookies هي محلية للمتصفح أما session من الممكن أن تنتهي مدتها ..
المكان الرئيسي هو قاعدة البيانات ثم احفظ تفضيل اللغة بعدة مستويات و تستطيع اختبار القيمة اذا كانت موجودة أو لا في cookies او session .. واستدعائها بشكل اسرع وإلا ستكون في قاعدة البيانات ..
أين نحفظ ملفات الترجمة?.هذا يعتمد على المنصة التي تقوم بالبرمجة بها.
مثلا wordpress يوفر آلية سهلة للتحكم باللغة,
أما اذا كنت تبرمج باستخدام Laravel فلها طريقة معينة مثل تعريف ملفات الترجمة بوضع associative array
تحوي مفتاح مشترك في جميع اللغات (جميع ملفات اللغات) و تقابلها النص الذي نريد عرضة للمستخدم في كل ملف منها
أنصح باستخدام مكتبةmcamara:
كما يمكنك عن طريق ال URL ولكن لا أنصحك بالطريقة ال Static لأنه بهذه الحالة ستقوم بتكرار الملفات ..
مقال مفيد :
تقوم إطارات العمل على تخصيص مسار ضمن مجلد المشروع نضع فيه ترجمة للمفاتيح الخاصة بترجمة القوائم و رسائل النجاح و الخطأ و معظم النصوص الثابتة في المشروع التي تتطلب ترجمة.
يكون لكل لغة مجلد أو ملف باسم اختصار اللغة ليتم ربطه مع المشروع عند تغيير اللغة حيث يتم قراءة قيم الترجمة للنصوص و عرض اللغة التي يطلبها المستخدم... وإن افترضنا أن المجلد التالي خاص بتجميع ترجمة المشروع
resources/languages/
سنضع فيه عدة ملفات خاصة للغات مثل عربي و انكليزي و فرنسي و اسباني ..
resources/languages/ar.php resources/languages/en.php resources/languages/fr.php resources/languages/es.php
لكل ملف من السابق وإن افرضنا أن ملف PHP سيكون فيه مصفوفة ترابطية مفاتيحها هي أكواد للنصوص المراد ترجمتها
مثلاً في en.php
return [ "welcome" => "welcome to Hsoub" ]
العربي ar.php
return [ "welcome" => "أهلا بك في حسوب" ]
وضمن برمجة التطبيق، يتم تحديد رمز اللغة مثلاً en فيتم قراءة ملف en.php و عرض النص المقابل للمفتاح للمستخدم
load_translation_file('ar'); echo "translate('welcome)"; // => أهلا بك في حسوب
بالنسبة للغة، إما أن يؤسس الموقع على أساس أنه متعدد اللغات ويجري اعتماد وسائل لترجمة المحتوى عبر أطر عمل أشهرها إطار عمل i18next، طريقة عمله هي بوضع محتوى الموقع في ملفات JSON أو ملفات منفصلة ثم ترجمة تلك الملفات ليأخذ الإطار ملف اللغة المقابل للغة المختارة، أو الطريقة الثانية بإعادة تصميم صفحات الموقع وفقًا للغات المراد توفيرها للمستخدم ثم يجري إعطاء رابط مختلف لكل لغة مثل:
www.exapmle.com/ar للغة العربية و www.example.com/en للغة الإنجليزية وهكذا. بالنسبة لاكشتاف اللغة، فيمكن اكتشاف اللغة من المتصفح بآلية سهلة مع توفير خيار لتغيير اللغة في شريط التنقل طبعًا.
أفضل الطرق التي أراها لإنشاء موقع متعدد اللغات وهي استخدام framework والتعامل مع تغير البيانات فقط فيمكن عمل ذلك بخاصية routing في frameworks لن يتم تكرار الكود نهائياً ولن يتم عمل download للصفحة الجديدة من خلال المتصفح ولكن سوف يكون بنفس الكود وسوف تعطي أمر rtl علي المثال وتغير المحتوى بالكامل بدون تحميل أو أي شئ هذه الطريقة أراها المثالية .
بالإضافة إلى الشرح الوافي للأخ وائل, هناك إضافة واحدة بسيطة للمنطق الذي وضعه بخصوص تخزين اللغة المفضلة أرى أنه الأفضل أن تخزن كما قال في قاعدة البيانات وأيضا حتى في ال Cookie ليكون سهل جدا الوصول للغة المختارة بسرعة عوض في كل مرة الإتصال بقاعدة البيانات وجلب اللغة في كل Request أو من الممكن عدم إستعمال Cookie لكن اللغة المختارة من طرف المستخدم يتم الحصول عليها فقط في أول request وبعدها نخزن قيمة اللغة في Session وبذلك لن نكون قد إستعملنا resource كثيرة وحصلنا على ال optimization.
أيضا ستجد من هنا دورة كاملة للأستاذ أسامة الزيرو يشرح فيها طريقة multilingual website
التعليقات