السلام عليكم ورحمة الله وبركاته
لقد قمت من فترة ببرمجة موقع يشمل 3 لغات , ونجحت تجربتي تماما في هذا السياق بشكل شبه مثالي من حيث التقنية والأسلوب الذي استخدمته , فرغبت بوضع تجربتي في منتداكم ليستفيد منها الآخرون .
كما نعلم , فإن برمجة موقع بثلاث لغات يتفرع منها شقان :
1: البرمجة بالأسلوب المتخلف – إن جاز التعبير – وذلك يعني بأن أبرمج الصفحات المتعلقة بكل لغة بشكل مستقل , يعني أصبح الموقع هنا يكافئ ثلاث مواقع .
2: الطريقة الصحيحة , وتكمن في استخدام بعض التقنيات التي عبرها ابرمج صفحة واحدة تعمل على اللغات الثلاث , اي كل 3 صفحات يتم اختصارها لصفحة واحدة تؤدي الغرض المطلوب منها في كل لغة من اللغات , مع العرض السليم للمعطيات فيها بما يوافق اللغة التي تم اختبارها .
3: الاستفادة من الدعم الذي تقدمة لغة بي اش بي للمواقع ذات اللغات المتعددة
الطريقة رقم 1 , تتمتع بكل المساؤى التي يمكن ان تتخيلها , مستهلكة للوقت , تستنزف الكثير من الجهد , بالإضافة إلى ان عملية التعديل تصبح مضنية للغاية , لأنك في هذه الحالة ستكون مضطرا ان تعدل الملفات الموافقة للغات الثلاث , وعسى الا تغفل شيئا , كما أن عملية توسعة الموقع ليشمل لغة رابعه سيصبح مكافئا لبرمجة موقع جديد , والتعديل سيصبح كارثيا , وسينتهي بك الوضع إلى الجنون , أو إلى الهرب من الشركة التي تعمل بها
أم الطريقة رقم 2 , فهي بسيطة وسهلة جداً ولا تتطلب سوى بعض التفكير المنطقي "صفتك كمبرمج " , كما أن التعديل فيها بغاية السهولة والبساطة , وإضافة لغة رابعة أو لغة عاشرة , لا تتطلب أكثر من إضافة ملف متعلق بتلك اللغة بالإضافة إلى بعض التعديلات التي لا غنى عنها .
أما الطريقة الثالثة , فهي رائعة , لكن الخوف يكمن في عدم دعم المخدم الذي تتواجد عليه ملفاتك لتلك التوابع التي تقدمها بي اش بي , وبالتالي , ستكون هنا الطامة الكبرى إذ أن تعبك وجهدك البرمجي كله لن يعمل عندما تحاول رفع الموقع على المخدم , وبعد شهر من العمل ستجد نفسك في الشارع , بدل المكتب الذي كان يستضيفك, " لا اتوقع من المدير أن يقبل منك أي عذر تقدمه"
بعد المقدمة السابقة سأشرع بشرح الطريقة الثانية :
ملاحظة : مع هذا الايميل هنالك ملف مرفق يحوي على مثال يطبق الموقع الحاوي على 3 لغات , وبإمكانك الاطلاع عليه وتنفيذه بكل بساطة , لتعلم بعد ذلك كم تبسط هذه التقنية الكثير من الجهد , وتجعل برمجة المواقع متعددة اللغات متعة رائعة بالإضافة إلى كونها فن .
- طبعا سيتم الشرح بالاعتماد على الملفات والمثال المرفق في الملف المرفق –
في البداية يوجد لديك ملف يدعى
index.php
وهو يحوي 3 كلمات تمثل 3 روابط كل رابط مرتبط بلغة معنية
رابط لصفحات الموقع بالانكليزية , ورابط للعربية , ورابط للألمانية , وبحسب اللغة التي ستختارها , سيتم توجيهك لصفحة اللغة التي تريد , حيث ستجد المعطيات المعروضة كلها موافقة للغة التي اخترتها , فعليا , في كل من الحالات الثلاث سيتم توجيهك لنفس الصفحة , ولكن الذي سيختلف المعاملات التي يتم تمريرها مع url حيث بحسب قيمة المعامل سيتم تحميل المعطيات المطلوبة والصحيحة والموافقة للخيار الذي اخترته .
بعد المقدمة السابقة لنوضح مالذي نحتاجه من ملفات :
الخطوة الأولى :
يوجد مجلد يدعى static_str
وهو يحوي عدد من الملفات يوافق عدد اللغات المطلوب منك دعمها في موقعك , وفي حالتنا يحوي ثلاث ملفات , ملف لدعم اللغة العربية وملف لدعم اللغة الانكليزية , وملف لدعم اللغة الالمانية.
بنية هذه الملفات ببساطة هي عبارة عن تعريف لثوابت ,
مثلا في الصفحة الهدف نرغب بتعريف عبارة صباح الخير , لذلك نعرف ثابت يدعى
define('GOOD_MORNING','صباح الخير');وذلك في كل من الملفات الثلاث المتعلقة بكل لغة من اللغات
ar_const.php en_const.php de_const.php
ونضع بدل صباح الخير الموضوعة في الملف الخاص بالترجمة العربية , الترجمة الموافقة للغة المرتبطة بذلك الملف, وهكذا دواليك , أي نقوم بجرد كل العبارات التي نريدها ان تظهر على صفحات موقعنا وتتغير بحسب اللغة المختارة ونعرفها على شكل ثوابت في الملفات الثلاث .
الخطوة الثانية :
نعلم بأنه بالنسبة العربية فإن العرض يتم من اليمين لليسار , أما بالنسبة للغة الانكليزية أو الألمانية فالعرض يتم من اليسار لليمين , وقد نرغب أثناء الاظهار بإعطاء تنسيقات محددة للغة العربية , وتنسيقات أخرى للنصوص المعروضة في اللغات الأخرى , لذلك هنا نجد أنفسنا بحاجة إلى تعريف ملفات تنسيق css
وفي المثال الذي طرحته ركزت على ناحية واحدة – بهدف التبسيط قدر الإمكان وتوصيل الفكرة الرئيسية بأقل قدر ممكن من الرماز – ألا وهي تنسيق العرض ( من اليمين أم من اليسا ر) لذلك في ملف التنسيق الذي يدعى directions.css والموجود في المجلد css سنجد الرماز التالي :
.en_Dir
{
direction:ltr;
}
.ar_Dir
{
direction:rtl;
}أي تنسيق متعلق بحالة الاظهار باللغة العربية , وآخر متعلق بالاظهار باللغات الاجنبية الاخرى .
الخطوة الثالثة :
نجد الملف الذي يدعى constants.php والموجود ضمن المجلد classes , ويحوي ببساطة بعض الثوابت التي سنستخدمها لتحديد اللغة التي تم اختيارها أثناء الانتقال للصفحة المطلوبة بلغة محددة (سيتوضح معنى هذا الجزء من الشرح في المقاطع القريبة القادمة )
الخطوة الرابعة :
والان سننتقل لشرح محتوى الصفحة الرئيسية في الموقع وهي صفحة index.php وهي التي يتم على اساسها اختيار اللغة وتظهر للمستخدم كما يلي :
English
Arabic
Deutsch
وتمثل كل كلمة من الكلمات الثلاث نظريا رابطا للصفحة المرتبطة باللغة الموافقة التي تم اختيارها , اما اذا القينا نظرة إلى الرماز الداخلي فسنجد ما يلي :
<p><a href="common/welcom.php?language=<?php echo ENGLISH ?>">English</a></p> <p><a href="common/welcom.php?language=<?php echo ARABIC ?>">Arabic</a></p> <p><a href="common/welcom.php?language=<?php echo DEUTSCH ?>">Deutsch</a></p>
من الرماز السابق نلاحظ بأن التوجيه يتم دوما لنفس الصفحة , ولكن الذي يختلف هو المعامل الممرر مع تلك الصفحة
language=<?php echo ENGLISH ?>
حيث نلاحظ هنا استفادنتا من الثوابت التي عرفناها سابقا, ولكن الذي يثير فضولنا هنا ...ماالذي يحدث فعليا في الصفحة التي يتم التوجيه إليها كل مرة ولكن مع معاملات مختلفة ؟
الذي يحدث هو التالي:
إذا اطلعنا على الرماز الموجود في تلك الصفحة سنجد مايلي:
<?php
require_once('../classes/constants.php');
?>
<?php
/* get the parameters that were passed by url */
if (isset($_GET['language']))
{//1
$language = $_GET['language'];
switch ($language)
{//2
case ENGLISH:
require_once('../static_str/en_const.php');
$direction ='en_Dir';
break;
case ARABIC:
require_once('../static_str/ar_const.php');
$direction ='ar_Dir';
break;
case DEUTSCH:
require_once('../static_str/de_const.php');
$direction ='en_Dir';
break;
}//2
}//1
?>
<title> <?php echo PAGE_TITLE ?></title>
<link href="../css/directions.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table width="100%" border="1" class="<?php echo $direction ?>">
<tr>
<td><?php echo GOOD_MORNING ?> </td>
</tr>
<tr>
<td><?php echo MY_NAME ?> </td>
</tr>
<tr>
<td><?php echo THE_FIRST_LETTER_IN_WORD_IS_ALWAYS_CAPITAL_LETTER ?> </td>
</tr>
</table>نلاحظ , وكما هو واضح في الرماز , بأنه يتم في البداية استقبال المعاملات الممرة لهذه الصفحة , واختبار ماهية قيمها , وعلى أساس القيمة – عربي أم انكليزي أم ألماني – يتم تحميل صفحة الثوابت المرتبطة باللغة الموافقة , ويتم أيضا تحميل التنيسقات المرتبطة باللغة المختارة ليتم إدارة العرض عبر تلك التنسيقات الموافقة , فيال السهولة والروعة ومتعة البرمجة ...
وكما هو واضح أصبح بإمكاننا تمديد المفهوم ليشمل المعطيات القادمة من قاعدة المعطيات لعرضها على الصفحة وغير ذلك .
وبهذا نكون قد أتممنا الشرح اللازم لتقينة برمجة موقع متعدد اللغات باستخدام أسلوب الثوابت
وعسى أن أكون قد قدمت عبر هذا الشرح البسيط المقتضب قدر الإمكان الفائدة الرجوة من تجربتي في هذا السياق
مع خالص تمنياتي لكم بالتوفيق والفائدة
والله ولي التوفيق
وأرجو منكم الدعاء
والسلام عليكم ورحمة الله وبركاته