السلام عليكم و رحمة الله.
انا في صدد عمل موقع متعدد اللغات بلغة بي اتش بي .
اعتمد على نظام ام في سي mvc . اريد عمل كونترولر ليقوم بجلب ملف اللغة المخزن سابقا . لكني لا اعرف كيف اقوم بالامر .
هل هناك طريقة عملية للقيام بالامر ؟
شكرا
يمكنك أن ترى كيف يتم الأمر في إطارات عمل معروفة مثل Laravel، يقوم Laravel بتخزين ملف اللغة (الملف الذي يحتوي على ترجمة النصوص) بصيغة php ويحتوي هذا الملف على جملة return فقط ويتم إرجاع مصفوفة مترابطة كالتالي:
<?php return [ 'hello, world' => 'أهلًا بالعالم', ];
ويمكنك أن تقوم بعمل متحكم بقوم بإستدعاء هذا الملف ويخزن قيمة الإستدعاء في متغير معين، كالتالي:
<?php $ar_lang = require('ar.php'); print_r($ar_lang);
كما يمكنك أن تقوم بعمل ملف واحد لكل لغة، ويتم معرفة لغة المستخدم من خلال Session أو إعداداته في قاعدة البيانات .. إلخ، وبالتالي يمكنك أن تقوم بإستدعاء ملف اللغة الصحيح.
لنقم بإستعارة منطق طريقة اللارافيل لعمل ذلك في مشروع Pure PHP .
لنقم أولا بإنشاء ملفات لغات و لتكن بداخل مجلد langs . هاته الملفات ستحمل أسماء من مثل : en.php , ar.php أو fr.php , بحيث أن كل منها سيحوي مصفوفة بهذا الشكل :
// ar.php [ 'welcome_text' => 'مرحبا بك في حسوب', ];
و :
// en.php [ 'welcome_text' => 'welcome in hsoub', ];
بحيث أن لكل مفتاح يشترك تعريفه في كامل الملفات , ترجمة معينة في كل ملف لغة معين .
يمكن إضافة الكثير من المفاتيح بتراجم تختلف من ملف لاخر .
نحتاج الان لدالة يتم تعريفها بشكل global , و تكون قابلة للإستدعاء من أي مكان من المشروع . بحيث تقوم بقراءة المرافق لكل مفتاح و إعادته بحسب اللغة و لتكن الدالة بإسم trans أو __ مثل طريقة اللارافيل :
function __($word) { $selected_locale = $_COOKIE['locale']; // يتم قراءة اللغة المحددة من ملفات تعريف الارتباط , يمكن إستعمال الجلسة لذلك أيضا // سيتم إعادة مفتاح اللغة. // يشترط أن يتم تعريف المفاتيح وفق أسماء ملفات اللغات // فإذا كان اسم الملف ar.php // يجب أن يكون مفتاح اللغة ar $target_file = file_get_content('langs/'.$selected_locale.'.php'); // تضمين الملف المستهدف بحسب مفتاح اللغة المخزن return $target_file[$word]; // إعادة القيمة المرافقة للمفتاح الذي يشترط وحوده في المصفوفة قبل إستعمال }
ثم إن إستدعاء هاته الدالة يكون على نحو مشابه بأي جزء من أجزاء التطبيق :
<title> <?php echo __('welcome_text') ?> </title>
و سيظهر هذا النص بالعربي إن تم تخزين القيمة ar في الـ cookie بالمفتاح locale , و سيظهر بالإنجليزي إن تم تخزين en في الـ cookie بالمفتاح locale .
و في مسار و متحكم اخر يمكنك التلاعب بقيمة المفتاح locale المخزن في الـ cookie لتغيير لغة التطبيق بشكل كامل و تغير ذلك تلقائيا .
و بمنطق مشابه يمكنك إضافة الكثير من الكلمات و الجمل بمفاتيح معبرة و قصيرة لترجمة موقعك كاملا , سيحافظ هذا من جهة على نظافة أكوادك من النصوص المطولة . كما أنه سيمكن مستقبلا العمل على تطوير جودة الترجمة و تحسينها دون التوغل في كامل ملفات المشروع , و إنما في ملفات الترجمة فقط .
التعليقات