ماهي اسهل طريقة لانشاء موقع متعدد اللغات ؟

السلام عليكم

اريد توفير موقعي على اكثر من لغة وابحث عن اسهل طريقة لانشاء ترجمة لعبارات الموقع بدون تكرار تعديل الملفات

موقعي بالكامل مبرمج ب php

واريد انشاء نسخ متعددة /en مثلا

هل لديكم مقترحات ؟


وعليكم السلام ورحمة الله

دعنا نقسم الأمر إلى عدة نقاط حتى يسهل شرحه و يصبح أوضح :

النقطة الأولى - حفظ اللغة التي اختارها المستخدم :

يجب بداية إذا دخل الزائر لموقعي أول مرة أن أختار له اللغة الافتراضية و أخزنها بال Session أو بال Cookie وقد يكون اختيارها لعدة أسباب , مثلاً بلد المستخدم تستخدم هذه اللغة أو معظم زوار الموقع يستخدمون هذه اللغة أو أي طريقة تجدها مناسبة.

عند اختيار الزائر لأي لغة , يجب أن أعدل هذه القيمة في ال Session أو ال Cookie بناءً على اختيار الزائر .

من الممكن أيضاً إذا كان الشخص قد سجّل دخوله أن نحفظ له اللغة التي اختارها ضمن الداتابيز , حتى لا يضطر كل مرة لاختيار اللغة من جديد .

النقطة الثانية - حفظ الترجمات للبيانات الثابتة (Static) :

والبيانات الثابتة هي التي لا تتغير بشكل ما أو ضمن أي نشاط معين لأحد الأشخاص , مثل اسم الموقع أو ال Labels الخاصة بالموقع (تواصل معنا - اضغط هنا - الرئيسية الخ ... ))

وهذه البيانات من السهل التعامل معها , بجعل ملف json لكل لغة باسمها يحوي كل هذه ال labels و قبل استدعاء أي صفحة نستدعي ملف اللغة المناسب لنستخدمه

وكمثال على ذلك :

كما يمكن جعل ملف php يقوم بإرجاع مصفوفة تحوي هذه الأمور بدل ملف ال json .

النقطة الثالثة - حفظ الترجمات للبيانات المتغيرة (Dynamic) :

وهنا نقصد على الأغلب البيانات المخزنة في الداتابيز , وفي الحقيقة هي الأصعب في التعامل , الآن يأتي السؤال كيف نخزن الترجمات في الداتابيز و نستدعيها ؟

هناك طريقتين :

الطريقة الأولى :

هي جعل أسماء الحقول مرفقة باسم اللغة مثال ذلك :

لاحظ أننا أضفنا اسم اللغة كلاحقة لكل من ال summary وال title وهكذا ببساطة يمكنني عند جلب هذا السطر القيام بشيء مشابه لهذا :

 <?php echo $row->title_{$_SESSION["language"]} ?>

وهذه الطريقة جيدة إذا كان الموقع بسيط ولا يحتوي الكثير من الداتا أو اللغات , ولكن تخيل معي لو كان الموقع يحوي 10 لغات , هل من المعفول إضافة 10 حقول لكل جدول ؟! هنا نلجأ للطريقة الثانية .

الطريقة الثانية :

هي إضافة جدول ترجمة لكل جدول يحتاج هذه العملية , وجعل العلاقة one to many أي كل تصنيف مثلاً له عدة ترجمات :

نلاحظ أننا في الجدول الأساسي نضع كل شيء لا نحتاج ترجمته , وفي جدول الترجمة نضع حقل اللغة و حقل يرجعنا للجدول الرئيسي Foreign key بالإضافة لكل الحقول التي نحتاج ترجمتها , كما هو موضح في الصورة.

الآن لجلب هذه الترجمات نقوم بسطر Sql بسيط :

أهم ما يمكن ملاحظته ضمن هذه التعليمة أننا أدخلنا اللغة المختارة من المستخدم (ar) في نهاية التعليمة لجلب الترجمة المرادة.

مشكلة الطريقة الثانية أنها تكلفنا المزيد من SQL لجلب البيانات , ويمكن تجنب ذلك بعمل cache للترجمة وتحديثها كل مدة معينة , وال cache يمكن أن يكون ضمن ملفات json أو باستخدام أحد التقنيات الحديثة مثل redis .

تحياتي

ماشاء الله عليك

في ميزان حسناتك ان شاء الله