إذا كنت تعمل على إضافة أو قالب ووردبريس فإن كتابة العمل بأكثر من لغة هو أمر جيد وخاصة إن كنت تهتم بأن يكون عملك مستخدم من عدة أشخاص ويتحدثون بمختلف لغات العالم فعلى الأقل ستحتاج توفير اللغة الإنجليزية بجانب اللغة العربية في أداة الووردبريس التي تعمل عليها سواء كانت هذه الأداة إضافة أو قالب للوردبريس.

يوفر الووردبريس عبر الوثائق المتعلقة به صفحة خاصة بترجمة البرنامج وأدواته، وسأعرض خلال هذا الموضوع طريقة ترجمة أدوات الووردبريس بأكثر من لغة حسب تجربتي مع إضافة ePermissions التي أنشأتها قبل أيام.

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

مطوري الووردبريس إختاروا أن يستخدموا إطار GNU gettext والذي يستخدم على نحو واسع في ترجمة برامج مفتوحة المصدر. ملفات gettext قسمة إلى ثلاثة أنواع وهي تمثل خطوات الترجمة أيضاً ويمكن أن تكون منشئة مسبقاً و مستخدمة في أدوات الترجمة المتاحة وهي:

  • POT: إختصار لـ Portable Object Template وهي الخطوة الأولى من عملية الترجمة، يتم البحث في الشفرة المصدرية Source Code الخاصة بأداة الووردبريس المراد ترجمتها وإلتقاط أي رسالة ممررة بإستخدام دالة __() و _e().
  • PO: إختصار لـ Portable Object الخطوة الثانية في عملية الترجمة يقوم البرنامج أو التقنية المستخدمة والتي تتعامل مع إطار GNU gettext بترجمة جميع الرسائل من ملف POT إلى اللغة المستهدفة وحفظ كل من اللغة الأصلية واللغة المراد إضافتها (المقترحة) في ملف واحد بصيغة PO.
  • MO: إختصار لـ Machine Object أما الخطوة الأخيرة في عملية الترجمة هي أن يتم إستخدام ملف PO (الملف الذي ستضيف فيه المفردات المترجمة) في عرضه إلى المرحلة النهائية لرؤية نتيجة الترجمة على أداة الووردبريس ولا يكون ذلك إلا بتحويله إلى ملف بصيغة MO وهي الصيغة التي نستخدمها في عرض المفردات بشكل مباشر على الصفحة.

البرامج المستخدمة في التعامل مع ملفات gettext

هناك عدة برامج تستخدم للتعامل مع أنواع ملفات gettext التي كتبتها في الأعلى، كمثال يمكن أيضاً التعامل مع ملف PO الخاص باللغة العربية لبرنامج الووردبريس للمساهمة في تعريب البرنامج في النسخ القادمة إذا إحتاج الأمر إلى ذلك بالتعاون مع موقع عرب ووردبريس، برامج مثل:

  • Launchpad
  • Pootle
  • poEdit (البرنامج الذي أستخدمه)
  • KBabel
  • GNU Gettext (أداة الرسمية للإطار وتحتوي على أداة سطر الأوامر لإنشاء ملفات POT و PO و MO)

العمل على الترجمة أثناء كتابة إضافة/قالب ووردبريس

في هذه الجزئية سأشرح بشكل عملي بسيط جداً كيفية ضمان وجود اللغة التي نريدها على أداة الووردبريس سواء كانت الأداة إضافة أو قالب.

في البداية، يجب الإعتماد على إسم معين يسمى النطاق أو domain في ترجمة الكلمات لتكون مرتبطة بملف أو ملفات الترجمة وإستدعائها إلى الأداة التي تريد ترجمتها، لتحميل ملفات الترجمة يجب تعريف مسارهم عبر أحد هذه الدوال التي توفرها الووردبريس:

  • load_plugin_textdomain($domain,$path): يستخدم في تحميل النصوص إلى الملف إذا كنت تعمل على إضافة ووردبريس.
  • load_theme_textdomain($domain,$path): يستخدم في تحميل النصوص إلى ملفات القالب إذا كنت تعمل على قالب ووردبريس.

لدينا متغيرين في كل دالة بحيث يكون المتغير $domain هو الإسم المعتمد في إستدعاء كافة النصوص أو المفردات المترجمة إلى الملف والآخر وهو المتغير $path وفيه نكتب عنوان مسار ملفات الترجمة. الدالتين السابقتين تحوي ثلاثة متغيرات ولكن نستطيع أن نكتفي بإثنين.

كما أن هناك دوال أخرى مثل load_textdomain و load_default_textdomain، لكني لم أجربها من قبل فالدوال الموجودة في القائمة السابقة خاصة بالإضافات والقوالب فقط.

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

  • __($message, $domain): يمكن تمرير الرسالة عبر أي متغير لإستخدامها لاحقاً، ويتم إستخدام دالة echo في لغة php لعرضها.
  • _e($message, $domain): يتم كتابة الرسالة دون إستخدام دالة echo، تعرض على الصفحة مباشرةً.

بالنسبة لمتغيرات الدوال السابقة لدينا متغير $message وهي المفردات أو النصوص التي تريد أن تترجمها سواء كانت جملة أو كلمة، أما متغير $domain فهو إسم النطاق الذي تم كتابته عن طريق دالة التحميل الخاصة بالترجمة (شرحتها قبل القائمة السابقة مثل دالة load_plugin_textdomain و load_theme_textdomain).

بعد تحديد النصوص بإستخدام الدوال موجودة في القائمة السابقة، وتحديد مسار ملفات، تأكد أن ملف الترجمة الذي ستصدره يبدأ بإسم النطاق أي يكون إسم الملف في البداية هو إسم النطاق، فإذا كان إسم النطاق abc وإستخدمت دالة مثل load_plugin_textdomain كما توضح الشفرة التالية:

<?php
load_plugin_textdomain('abc','/wp-content/plugins/ePermissions/lang/');
?>

فإن إسم الملف يجب أن يكون بهذه الطريقة

abc_x.mo

// ملف خاص باللغة الفرنسية:
abc_fr.mo

ولإستعمال إسم النطاق أثناء برمجة الإضافة أو تصميم القالب سيكون بهذا الشكل:

// _e() في حال إستخدام دالة
<span><?php _e('وصف خاص لشيء معين', 'abc'); ?></span>

// __() في حال إستخدام دالة
$description = __('وصف خاص لشيء معين','abc');

إستخدام برنامج poEdit لإنشاء ملف الترجمة

سأستخدم برنامج poEdit لشرح الخطوة الأخيرة من الترجمة وهي إنشاء ملفات gettext والوصول إلى الملف النهائي بصيغة MO الذي سنستخدمه في عرض المفردات على الصفحة مباشرةً. وبرنامج poEdit هو البرنامج الذي أستخدمه والمفضل لدي.

لنفرض أنك أكملت إضافة المفردات أو النصوص إلى دالة __() و _e() في ملف الإضافة أو ملفات القالب والإعتماد على إسم معين مرجعي يشير إلى الترجمة الخاصة بالأداة، في البداية يجب أن يكون إسم الملف الذي ستصدره إلى صيغة MO يبدأ بالإسم الذي إعتمدته في دالة load_plugin_textdomain لترجمة إضافة ووردبريس أو دالة load_theme_textdomain لترجمة إضافة قالب ووردبريس (ذكرت هذه النقطة سابقاً).

عند البدأ بعمل ترجمة جديدة في البرنامج، ننشيء قائمة مفردات جديدة (عن طريق File->New Catalog)، ستظهر نافذة جديدة بثلاثة ألسنة، اللسان الاول حول الإضافة أو القالب الذي تريده ترجمته (معلومات عامة ليست مهمة) مثل ما توضح الصورة:

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

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

إذا كان الملف المراد ترجمته خارج المجلد نستخدم إشارة النقطتين ( .. ) أما إذا كان بجانب ملف اللغة فنكتفي بنقطة واحدة ( . )، الصورة التالية هي الأخيرة لإعداد الملف الجديد وبها اللسان الأخير Keywords حيث يجب تحديد الكلمات التي مرّرت عليها المفردات المراد ترجمتها وهي دالة _e() و دالة __()، كما توضح الصورة التالية:

بعد ذلك تكون إنتهيت من إنشاء الملف وسيخبرك عن مكان الملف الذي ستضعه فيه إختر المكان الذي حددته في لسان Paths وفور حفظ الملف سيتم إستدعاء كافة المفردات والجمل أو النصوص إلى البرنامج لترجمتها، هذا مثال على قائمة المفردات والجمل من إضافة ePermissions قبل تعريبها:

بعد التعريب تقوم بتحديث الملف ويتم تصديره مباشرة في نفس مسار الملف الحالي PO إلى ملف بصيغة MO وتكون رؤية الترجمة جاهزة في صفحة الإضافة أو صفحات القوالب عند تصفح المدونة باللغة التي إخترتها، صورة بعد ترجمة جميع الكلمات خلال عملي بإضافة ePermissions:

إستخدم القائمة العليا في البرنامج لإجراء التحديثات وتأكيد ترجمة المفردات دائماً فهي أسهل طريقة للوصول إلى وظائف البرنامج، وصف سريع للقائمة العليا الخاصة ببرنامج poEdit:

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

<h2><?php echo __('Do you want delete (' . $permission_name . ') permission?','editors_permissions') ?></h2>

نستخدم دالة printf في كتابة النص وتحديد مكان المتغير وهي الإشارة %s لإستبدالها لاحقاً بالمتغير $permission_name كما توضح الشفرة التالية:

<h2><?php printf(__('Do you want delete (%s) permission?','editors_permissions'), $permission_name); ?></h2>

وبهذه الطريقة تستطيع ترجمة أداة الووردبريس بأكثر من لغة، ومن الجميل أن يكون لديك عدة لغات إذا كانت إضافتك قوية أو قالبك جميل وإحترافي فهذا يجذب مستخدمين يتحدثون بمختلف لغات العالم كما ذكرت، أتمنى أن يكون قد أفادكم الدرس :).