مدونة سامي المحمدي

تقنية حاسوبية تدريبية

  • RSS
  • Delicious
  • Digg
  • Facebook
  • Twitter
  • Linkedin
  • Youtube


عند بناء مشاريعك البرمجية, كانت تطبيقات مكتبية أو ويب وتكون معدة للغة واحدة فقط مثل اللغة العربية أو الانجليزية, هذا ينتج عنه بأن المستفديون من مشروعك هم فقط الذين يستطيعون معرفة اللغة المستخدمة في التطبيق . و لكن في مشاريع التي ترجوا من ورأها الربح المادي أو تريد أن تفيد أكبر قدر ممكن من البشرية :) كالعمل على مشاريع مفتوحة المصدر, يفضل دائما أن تكون قابلة ﻷضافة أكثر من لغة بشرية و بأي وقت, وذلك مما يساعد في انتشار مشروعك و الحصول على الهدف المرجو منها (مادياً أو معنوياً) و اتساع دائرة المستفدين من مشروعك.


النقاط التي يجب مراعتها عند دعم عدة لغات في المشروع هي كالتالي:

  • اتجاه و محاذة النص للغة, وذلك مثل اللغة العربية يكون اتجاه النص من اليمن إلى اليسار (Right to Left) و محاذة النص تكون يمين و العكس لغات مثل الانجليزية و الفرنيسة و الالمانية … الخ.
  • اتجاه الصور المستخدمة في تصميم التطبيق بأن تكون مناسبة مع اتجاه نص اللغة.
  • عند تخزين النصوص في قاعدة البيانات المشروع, يجب مراعاة طريقة و ضع نفس البيانات بلغات مختلفة, وجهة نظري اذا كان موقعك يعتمد لغتين او ثلاث لغات كحد أقصى و تريد تبسيط عملية التكويد عليك, أن تجعل كل حقل نصي (مثل العناوين و المواضيع او التفاصيل) لكل لغة لها عامود مستقل في الجدول. اما غير ذلك هو أن تضع فاصل ما بين البيانات بلغات المختلفة و تتعامل معها برمجيا, مثل وضع تاج مخصص للغة :
$text = "[lang=ar]
النص بلغة العربية
[/lan]
[lang=en]
text in english language
[/lan]"

وهذه الطريقة تمكنك من إضافة عدة لغات دون الحاجة لتغير هيكلية قاعدة البيانات.

1/ طرق إعداد التطبيق لدعم تعدد اللغات:

أن عملية دعم المشروع ﻷكثر من لغة بشرية عملية بسيطة و ليست بمعقدة.و سوف نتطرق إلى ثلاث طرق لعمل ذلك وهي :

1. ملفات القواميس.
2. مشروع GUN gettext
3. خدمات ترجمة المواقع

سنتاول الطريقة اﻷولى في هذه التدوينة و الطرق اﻷخرى في تدوينة قادم أن شاء الله :) .

2- ملفات القواميس:

نقوم بإنشاء ملفات قواميس لمفردات الموجودة في التطبيق (الموقع) في ملفات PHP بحيث تكون صيغتها بأن كل جملة في التطبيق يتم إسنادها لمتغير, حيث أننا نستدعي هذا المتغير لعرض الجملة المسندة له وفقا للغة المختارة. مثال على ذلك نشئ ملف القاموس للغة ما مثل العربية باسم (ar.php) و نكتب فيه الكود التالي:

$WELCOME = "مرحبا"

لقد إنشاء متغير باسم (WELCOME) لجملة الترحيب بالموقع, و نستخدم ملف اللغة كالتالي:

include "ar.php"
echo($WELCOME);

2.1 – إنشاء ملفات القواميس:

يفضل دائما بإنشاء مجلد باسم (languages) و نضع فيه ملفات قواميس اللغة. و يكون اسم الملف باسم اللغة مثل :
- اللغة العربية (ar.php)
- اللغة الانجليزية (en.php)
- اللغة الفرنسية (fr.php)

و هيئة ملف اللغة ممكن نشئه بالطرق التالية:

1/ باستخدام الثوابت (constant):

// Language: English
define("BLOG", "Sami Al-Muhammady Blog");
define("LANG", "en-US");
define("DIR", "ltr");
define("ALIGN", "left");
define("WELCOME", "Welcome");
define("SIMPLE_TEXT", "Smiple text in english language");

2/ باستخدام مصفوفات ذات بعدين :

// Language: English
$text = array();
$text["HTML"]["BLOG"] = "Sami Al-Muhammady Blog";
$text["HTML"]["LANG"] = "en-US";
$text["HTML"]["DIR"] = "ltr";
$text["HTML"]["ALIGN"] = "left";
$text["Header"]["HELLO"] = "Welcome";
$text["Main-Page"]["Simple-Text"] = "Smiple text in english language";

حيث أن البعد اﻷول لمصفوفة يمثل اسم الصفحةو أو القالب , و البعد الثاني يسمى باسم متغير, تفيد هذه الطريقة عند التعامل مع القوالب بحيث يتم تمرير العنصر من البعد اﻷول لمصفوفة مثل (Header) لقالب رأس التطبيق دون الحاجة ﻹرسال كل متغير على حدة.

2.2 – لمعرفة اللغة المحددة من قبل المستخدم:

عند اختيار المستخدم أحد اللغات الموجودة في التطبيق, فأننا عند برمجة التطبيق نجعل من ضمن وسائط (URL) وسيط باسم (lan) مثلاً و نسد له اللغة التي تم اختيارها من قبل المستخدم, و من ثم عند إعادة تحميل الصفحة فأننا نستدعي ملف قاموس اللغة المحددة, يمكن عمل ذلك كما في الكود التالي:

< ?php
//file: langua.php
session_start();
 
/* you can make config for defualt language in config file or on Database
in your project.*/
$defualt_language = "ar";
 
//check for language in URL parameter or in session
if(isSet($_GET['lan'])){    
    $lang = $_GET['lan']; 
    $_SESSION['lan'] = $lang;   
 
}elseif(isSet($_SESSION['lan'])){ 
 
    $lang = $_SESSION['lan'];
 
}else{ // Get the defualt language	
	$lang = $defualt_language;
	$_SESSION['lan'] = $lang;
}
 
// setting the language file
if($lang == "ar" || $lang == "en"){
 
    $lang_file = "./languages/".$lang.".php";
 
} else{
    // the selected language is not correct, we will load defualt languae
    $lang_file = "./languages/".$defualt_language.".php";    
}
 
include $lang_file;
 
?>

و شرح الكود كالتالي:

session_start();

في هذا السطر لقد هيئنا الجلسة في التطبيق و ذلك ﻷستخدامها لحفظ اللغة المحددة من قبل المستخدم و ذلك لحفظ اﻹعداد أثناء تجول المستخدمة في التطبيق.

$defualt_language = "ar";

لقد هيئنا اللغة الافتراضية لتطبيق, و هذه الخطوة يفضل وضعها في ملف أو جدول إعدادت التطبيق.

if(isSet($_GET['lan'])){
$lang = $_GET['lan'];
$_SESSION['lan'] = $lang;

نقوم بفحص وسيط عنوان (URL) هل هو موجود اما لا, في حالة وجوده و ذلك يعني ان المستخدم حدد لغة آخرى, فأننا سوف نسند قيمة اللغة لمتغير (lang) و ذلك لكي يتم استخدام المتغير لاحقا بتحديد ملف اللغة , و أيضا لمتغير الجلسة و ذلك لكي نسنخدمه في الحالة الثانية كما يأتي لاحقا.

}elseif(isSet($_SESSION['lan'])){
 
$lang = $_SESSION['lan'];

في حالة اذا كان لا يوجد وسيط اللغة في عنوان URL, فأننا سوف نفحص متغير الجلسة هل تم اسناد له قيمة لغة اما لا, في حالة تغير المستخدم للغة التطبيق أو استمر في اللغة الافتراضية, فأننا سوف نسد قيمة متغير الجلسة لمتغير (lang) لكي نحدد ملف اللغة المطلوب كما يأتي لاحقا.

}else{ // Get the defualt language
$lang = $defualt_language;
}

في حالة دخول المستخدم ﻷول مرة في التطبيق, فاننا نقوم بإسناد اللغة الافتراضية لمتغير lang لكي نحدد ملف اللغة المطلوب كما يأتي اﻵن.

if($lang == "ar" || $lang == "en"){
 
$lang_file = "./languages/".$lang.".php";
} else{
// the selected language is not correct, we will load defualt languae
$lang_file = "./languages/".$defualt_language.".php";
}
include $lang_file;

هنا نقوم بفحص اللغة هل هي العربية أو الانجليزية, و يتم استدعاء ملف اللغة المطلوب, و في حالة عدم وجود اللغة فأننا نقوم باستدعاء ملغ اللغة الافتراضية لتطبيق. و كان ذلك لفقط لغتين, و لكن لو أن التطبيق الذي تعمل عليه بأكثر من لغة, فاستخدام (switch case) :) .

2.3 – استخدام ملفات القواميس داخل المشروع:

بعد ما تم تحديد اللغة, فأننا نقوم بوضع المتغيرات في المواقع المطلوبة, وهذا مثال يستخدم المثال الذي تم عمله في فقرة (إنشاء ملفات القواميس) و ذلك جعلت في ملف القاموس طريقتين المحددة بالفقرة, حيث أن تم استخدام طريقة الثواتب في كافة مواقع النصوص ما عدا في وسط الصفحة وذلك توضيحا ﻷستخدام الطريقتين :

 
< ?php
// index.php
include "langua.php";
?>
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" lang="<?php echo (LANG); ?>" xml:lang="< ?php echo (LANG); ?>" dir='< ?php echo(DIR);?>'>
 
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 
	<title>< ?php echo(BLOG);?></title>
 
</head>
 
<body>
 
	<h1>< ?php echo(WELCOME);?></h1>
 
	<hr />
	<p align="center">
		<a href="<?php echo($_SERVER['PHP_SELF'].'?lan=ar'); ?>">arabic</a> | <a href="<?php echo($_SERVER['PHP_SELF'].'?lan=en'); ?>">English</a>
	</p>
	<p dir='<?php echo(DIR);?>' align='< ?php echo(ALIGN);?>'>
	    < ?php echo($text["Main-Page"]["Simple-Text"]);?>
	</p>
 
< ?php echo ("Session: ".$_SESSION['lan']); ?>
</body>
 
</html>

الصور التوضيح ﻷمثلة:
التطبيق بلغة العربية:

مثال بالوجهة العربية

التطبيق بلغة الانجليزية:

مثال بالوجهة العربية

لتحميل المثال: phplang1.zip

إلى هنا نهاية الجزء اﻷول و سوف نتابع معكم في القريب العاجل.

و في الختام أسأل الله أن اكون وفقت في الشرح و أتمنى لكم التوفيق و النجاح

تدوينات مشابهة:

  1. بناء تطبيق ويب متعدد اللغات بلغة PHP – الجزء الثاني

:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!:
Get Adobe Flash playerPlugin by wpburn.com wordpress themes