السلام عليكم
اريد توفير موقعي على اكثر من لغة وابحث عن اسهل طريقة لانشاء ترجمة لعبارات الموقع بدون تكرار تعديل الملفات
موقعي بالكامل مبرمج ب php
واريد انشاء نسخ متعددة /en مثلا
هل لديكم مقترحات ؟
وعليكم السلام ورحمة الله
دعنا نقسم الأمر إلى عدة نقاط حتى يسهل شرحه و يصبح أوضح :
يجب بداية إذا دخل الزائر لموقعي أول مرة أن أختار له اللغة الافتراضية و أخزنها بال Session أو بال Cookie وقد يكون اختيارها لعدة أسباب , مثلاً بلد المستخدم تستخدم هذه اللغة أو معظم زوار الموقع يستخدمون هذه اللغة أو أي طريقة تجدها مناسبة.
عند اختيار الزائر لأي لغة , يجب أن أعدل هذه القيمة في ال Session أو ال Cookie بناءً على اختيار الزائر .
من الممكن أيضاً إذا كان الشخص قد سجّل دخوله أن نحفظ له اللغة التي اختارها ضمن الداتابيز , حتى لا يضطر كل مرة لاختيار اللغة من جديد .
والبيانات الثابتة هي التي لا تتغير بشكل ما أو ضمن أي نشاط معين لأحد الأشخاص , مثل اسم الموقع أو ال Labels الخاصة بالموقع (تواصل معنا - اضغط هنا - الرئيسية الخ ... ))
وهذه البيانات من السهل التعامل معها , بجعل ملف json لكل لغة باسمها يحوي كل هذه ال labels و قبل استدعاء أي صفحة نستدعي ملف اللغة المناسب لنستخدمه
وكمثال على ذلك :
كما يمكن جعل ملف php يقوم بإرجاع مصفوفة تحوي هذه الأمور بدل ملف ال json .
وهنا نقصد على الأغلب البيانات المخزنة في الداتابيز , وفي الحقيقة هي الأصعب في التعامل , الآن يأتي السؤال كيف نخزن الترجمات في الداتابيز و نستدعيها ؟
هناك طريقتين :
هي جعل أسماء الحقول مرفقة باسم اللغة مثال ذلك :
لاحظ أننا أضفنا اسم اللغة كلاحقة لكل من ال summary وال title وهكذا ببساطة يمكنني عند جلب هذا السطر القيام بشيء مشابه لهذا :
<?php echo $row->title_{$_SESSION["language"]} ?>
وهذه الطريقة جيدة إذا كان الموقع بسيط ولا يحتوي الكثير من الداتا أو اللغات , ولكن تخيل معي لو كان الموقع يحوي 10 لغات , هل من المعفول إضافة 10 حقول لكل جدول ؟! هنا نلجأ للطريقة الثانية .
هي إضافة جدول ترجمة لكل جدول يحتاج هذه العملية , وجعل العلاقة one to many أي كل تصنيف مثلاً له عدة ترجمات :
نلاحظ أننا في الجدول الأساسي نضع كل شيء لا نحتاج ترجمته , وفي جدول الترجمة نضع حقل اللغة و حقل يرجعنا للجدول الرئيسي Foreign key بالإضافة لكل الحقول التي نحتاج ترجمتها , كما هو موضح في الصورة.
الآن لجلب هذه الترجمات نقوم بسطر Sql بسيط :
أهم ما يمكن ملاحظته ضمن هذه التعليمة أننا أدخلنا اللغة المختارة من المستخدم (ar) في نهاية التعليمة لجلب الترجمة المرادة.
مشكلة الطريقة الثانية أنها تكلفنا المزيد من SQL لجلب البيانات , ويمكن تجنب ذلك بعمل cache للترجمة وتحديثها كل مدة معينة , وال cache يمكن أن يكون ضمن ملفات json أو باستخدام أحد التقنيات الحديثة مثل redis .
تحياتي
نعم يمكنك إنشاء ذلك بسهولة عن طريق framework javascript وأيضاً عن طريق laravel framework :
framework javascript يمكنك عن طريق استخدام أي framework لعمل موقع متعدد اللغات تكون ليس فيها أي تكرار للأكواد ولكن عن طريق ترابط متغيرات مع محتوى الصفحة وتغير المتغير عن عمل حدث ما في الصفحة وهي طريقة بسيطة جداً ويستخدمها العديد من المطورين وإذا كنت تتعامل مع أframework سوف يكن ذلك سهل كثيراً عليك.
والطريقة الأخرى أيضاً عن طريق laravel framework ويوجد مكاتب تدعم ترجمة اللغات مثل مكتبة Dimsav ويمكنك التعامل مع المكتبة وفهمها من هنا :
التعليقات