5.  التوجيهات العامة والاقتراحات

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

5.1.  ملفات 'PO' و 'POT'

بيئات سطح المكتب الرسومية مثل كيدي وجينوم والتطبيقات العديدة التي تشملها مكتوبة بلغات C/C++ البرمجية. ترجمة هذه البيئات تعني ترجمة عشرات الآلاف من النصوص الظاهرة للمستخدم من لغتها الأم،أي الإنجليزية، للغة المطلوبة، وهي العربية. لا يتم هذا عن طريق نسخ الشيفرة المصدرية واستبدال كل النص الإنجليزي بمقابله العربي، بل إنه يتم بترجمة النصوص المستخرجة مسبقاً في ملفات عديدة كي تسهل العملية بأكملها.

بذلك، يتم استخلاص النصوص الظاهرة للمستخدم من الشيفرة المصدرية باستخدام برنامج يسمى 'gettext'. تؤخذ هذه النصوص ثم تخزن في ملف نصّي ذي امتداد '.pot'. يعني هذا الامتداد أن الملف لم يتم ترجمته بعد، أي أنه بصيغته الأصلية. إذا أردت البدء بترجمة ملف من نوع 'POT'، فعليك أولاً إعادة تسميته بنفس الإسم ولكن بامتداد '.po'. لنقل أنك تريد البدء بترجمة الملف 'filename.pot'، فإنك حينها تستخدم الأمر:

$ mv filename.pot filename.po
     

اعمل على ترجمة الملف وعندما تكون راضياً عن كمّ العمل الذي أنجزته، قم بما يلي:

$ cvs remove filename.pot
$ cvs add filename.po
$ cvs commit[2]
      

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

في وقت التنفيذ، سوف تقوم بيئة سطح المكتب بتحميل النصوص الظاهرة للمستخدم من ملفات 'PO' للغة المطلوبة وتقوم بإظهارها تباعاً دون أي تغيير ظاهر في عمل البرنامج. إذا كانت الترجمة غير مكتملة، فسوف تقوم البيئة بإظهار النص الإنجليزي حيث تفتقد الترجمة.

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

5.2.  بنية ملفات 'PO'

5.2.1.  العنوان الرأسي

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

فيما يلي، عنوان رأسي لملف منشأ جديد:

#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: desktop files\n"
"POT-Creation-Date: 2002-08-14 03:34+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: ENCODING\n"
        

مع كل الملفات الجديدة عليك إزالة السطر "#, fuzzy" وتضيف إلى بداية الملف هذا السطر "# translation of filename.po to Arabic" مستبدلاً "filename.po" بالاسم المناسب للملف الذي تقوم بترجمته، وأضف معلومات حقوق الطبع "# Copyright (C) 2003 Free Software Foundation, Inc." وثم يمكنك إضافة اسمك وعنوانك البريدي بعد سطر حقوق الطبع، ويكون هذا لائحة أسماء المترجمين. بعد ذلك، استبدل "Last-Translator:"، "Language-Team:"، "Content-Type:" و "Content-Transfer-Encoding:" بحيث يظهرون كما هو مبين أدناه، ولاتهتم بأي شيء آخر موجود أو غير موجود للوقت الحالي. إن كنت ستستخدم محرر نصوص كي تترجم الملفات، على خلاف أداة الترجمة كيبيبل، وتذكر كذلك أن تقوم بتحدث السطر "PO-Revision-Date:" في كل مرة تحفظ فيها الملف.

فيما يلي، مثال على العنوان الرأسي خلال عمل الترجمة، أو بعد الانتهاء منها:

# translation of desktop_kde-i18n.po to Arabic
# desktop.po - Arabic Translation.
# Copyright (C) 2001,2002,2003 Free Software Foundation, Inc.
# Name1 Surname1 <A_address/@domain_1.com>, 2001.
# Name2 Surname2 <B_address/@domain_2.net>, 2002
# Name3 Surname3 <C_address/@domain_3.org>, 2002,2003
#
msgid ""
msgstr ""
"Project-Id-Version: desktop_kde-i18n\n"
"POT-Creation-Date: 2003-03-02 20:47+0100\n"
"PO-Revision-Date: 2003-02-26 21:27+0200\n"
"Last-Translator: Name3 Surname3 <C_address/@domain_3.org>\n"
"Language-Team: Arabic <support at arabeyes.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.0.1\n"
        

الأسطر التي تبدأ بالعلامة '#' هي ملاحظات. إن كنت تستخدم برنامج ترجمة مثل كيبيبل، فإن بعض الحقول الرئيسية مثل "X-Generator:" سيتم إنشاءها تلقائياً. إن كنت تعمل على ملف 'PO' بدء أحد آخر بترجمته مسبقاً، وقمت بتغييرات كبيرة ، فقم فقط بإضافة اسمك إلى لائحة المترجمين وضع إسمك وعنوانك البريدي في الحق "Last-Translator:"، بعد التحقق من أن الشخص الذي كان اسمه في الحقل "Last-Translator:" مضاف مسبقاً في لائحة المترجمين، وإلا أضف اسمه إلى اللائحة. تأكد أيضاً من أن الحقول المذكورة أعلاه تحتوي على القيم الكاملة والصحيحة، وإلا فقم بتعديلها.

تذكر دائماً أن تضيف اسمك إلى لائحة المترجمين. ذلك مهم جداً حتى نعلم من قام بالتعديل الأخير على الملف وللتأكد من أن تحصل على الجزاء الذي تستحقه لعملك :-)

5.2.2.  المحتوي والنصوص

بعد العنوان الرئيسي، يحتوي ملف 'PO' على أسطر من 'msgid' و 'msgstr'، يسبقها في بعض الأحيان ملاحظات حول الموقع بالضبط الذي تظهر فيه هذه النصوص في الشيفرة المصدرية [3]. يكون السطر 'msgid' محتوياً مسبقاً على النص الإنجليزي الذي يجب ترجمته. ما يجب على المترجم عمله هو أن يضيف إلى 'msgstr' ترجمة ما هو مكتوب في 'msgid' باللغة العربية، ولا تقم بحذف علامة التنصيص ' " '.

فيما يلي، أمثلة منتقاة من ملفات 'PO' مختلفة،

#: finddialog.cpp:55
msgid "Galaxies"
msgstr "مجرّات"

msgid ""
"_: do not use a target symbol\n"
"No Symbol"
msgstr ""

#: src/acme.h:80
#, fuzzy
msgid "Eject key"
msgstr "مفتاح الإخراج"
        

أول 'msgid' مترجم ببساطة، أما السطر الثاني فليس مترجماً بعد، ولذلك يظهر 'msgstr' فارغاً. السطر الثالث مترجم إلا أن المترجم وضع عبارة "#, fuzzy" قبل المجموعة. المؤشر "fuzzy" هو طريقة يستطيع بها المترجم على أن يدل أنه غير متأكد من المصطلح وأن المراجعة مطلوبة. العلامة "#," هي ذات أهمية كبيرة، حيث أنها ترتيب أحرف معين. ومن المهم أن تلاحظ أن عبارة "#, fuzzy" يجب أن تسبق السطر 'msgid'.

5.3.  الملاحظات ضمن 'msgid' ('_:')

نصوص 'msgid' التي تبدأ بـ '_:' تشير إلى وجود ملاحظة لتساعد المترجم أو تعطيه معلومات أكثر حول الرسالة المطلوب ترجمتها. تنتهي الملاحظة بسطر جديد '\n' (new line). لا تقم بترجمة ملاحظة المساعدة وضع ببساطة فقط ترجمة ما يلي الملاحظة و '\n' بناءً على ما فهمته من توجيهها لك.

مثال:

#: cupsdconf.cpp:808 cupsdconf.cpp:831 cupsdconf.cpp:847
msgid ""
"_: Base\n"
"Root"
msgstr ""
"الجذر"
      

5.4.  كلمات خاصة ضمن 'msgid' ) 'Comment=' أو 'Name=' أو غيرها)

ترجم فقط ما يلي الحرف '=' بإبقاء النص دون تغيير، أي لا تقم بترجمة أو تعديل الكلمة "Comment" أو "Name"؛ أبق الكلمات بالإنجليزية.

مثال:

#: kde-i18n/vi/messages/entry.desktop:1
msgid "Name=Vietnamese"
msgstr "Name=الفييتنامية"
      

5.5.  أوامر HTML ضمن 'msgid'

تستخدم بعض التطبيقات مزايا النصوص الغنية (للفقرات، والألوان، والخطوط العريضة.. إلخ) كي تجعل النصوص تظهر بشكل أجمل. يتم هذا باستخدام أوامر HTML كمثل "<p>" على سبيل المثال. إنه من المهم جداً أن يبقي النص المترجم على كل هذه الأوامر. هذا هو الحال أيضاً بالنسبة لأحرف الطباعة للغة C كمثل "\n" أو "\t" أو "%s" وما شابه ذلك. ترجم النص بين الأوامر فقط. أيضاً، تذكر أنك عندما تستخدم وضع الإدخال ذي الاتجاه الأيمن-إلى-الأيسر، أي أنك تطبع باللغة العربية، قد يبدو التتالي "\n" غريباً. في أي من الوضعين، تذكر أنك يجب أن تبدأ بالحرف "\" ثم "n" بغض النظر عن كيفية ظهورهما على الشاشة.

مثال:

#: kio/kio/global.cpp:451
msgid "</p><p><b>Details of the Request</b>:"
msgstr "</p><p><b>تفاصيل الطّلب</b>:"
      

5.6.  الأسطر الجديدة وعلامات التنقيط ضمن 'msgid'

أبق علامات التنقيط في النص المترجم على ما هي عليه في النص الأصلي. يجب أن تتضمن أيضاً الأسطر الجديدة. أي، إذا كان هناك عدة نصوص في 'msgid' واحدة، يجب أن تشابه 'msgstr' النص الأصلي من حيث عدد الأسطر، ويجب تجاهل الأسطر التي تبدأ بـ "_:" كما هو مبيّن أعلاه، حيث أنها مجرد ملاحظات. راجع المثال comments.

5.7.  نصوص 'msgstr' ذات السرد المتعدد لصيغ الجمع

ميزة الصيغ المتعدد توفر إمكانية إظهار الكلمات بالصيغ الصحيحة بناءً على الكمية. تميّز الكميات بالعلامة "%n".

مثال:

msgid "_n: one cat\n"
"%n cats"
msgstr "قطّة واحدة\n"
"قطّتان\n"
"%n قطط\n"
"%n قطّة"          
      

سطر 'msgstr' الأول يظهر عندما يكون لدينا قطة مفردة. أما الثاني فيظهر عندما يكون هناك قطتان. والثالث يظهر عندما يكون هناك ثلاث وحتى عشر قطط. أما السطر الأخير فيظهر عندما يكون عدد القطط أكثر من أو مساويٍ لأحدى عشرة قطة. ليس هناك داعٍ لإضافة "_n" في النص المترجم. لا تنسَ أن تستخدم علامة "\n" للفصل بين المدخلات المختلفة.

5.8.  مفاتيح الوصول والشرطة السفلى في 'msgid'

الأحرف التي يسبقها الحرف ("_") تسمى مفاتيح الوصول أو المسرّعات. يستخدم مفتاح الوصول بغرض الوصول المباشر إلى القائمة بدلاً من اختيارها بواسطة الماوس أو المؤشر. يجب ترجمة المسرّعات لتتناسب مع لوحة المفاتيح العربية. هذا يعني أنه عليك أن تختار حرفاً من الكلمة، أو الجملة، كمُسرّع. حاول ألّا تعيّن الحرف نفسه لمُسرّعين في نفس القائمة؛ يمكنك أن تحزر ذلك من موضع وجود 'msgid' على سبيل المثال. كقاعدة أساسية، عيّن الحرف الأول من الكلمة كمُسرّع، وإن كان ذلك الحرف مستخدماً كمفتاح وصول في النص الحالي، عيّن الحرف الثاني، وهلم جرى. رجاءً، حاول أن تكون متناسقاً.

5.9.  الأسماء والاختصارات بداخل 'msgid'

الأسماء - الناس، الأماكن، بعض البرامج - يمكن ترجمتها حرفياً إلى العربية، والبعض الآخر يمكن ترجمته بالكامل أو جزئياً إلى العربية. الاختصارات كمثل ASCII وHTTP وC++ إلخ، يجب أن تبقى كما هي بالأحرف اللاتينية. وهذا تماماً هو الحال بالنسبة لأسماء التصنيفات، والمتغيرات، إلخ. تذكر أن تقرأ مقاييس التوثيق العربي. إن كنت في شك، راسل قائمة التوثيق 'doc' البريدية.

5.10.  الأحرف الخاصة ضمن 'msgid'

بعض الأحرف الخاصة مثل "&" يجب أن تدخل مرتين لتخبر المدقق أن يبقيها كما هي. رجاءً قم بترجمة هذا وأخذه بعين الاعتبار عند الحاجة.

مثال:

#: rc.cpp:19
msgid "Color && Animation"
msgstr "اللّون و الحركة"
      

5.11.  استخدام صيغة الأمر للأعمال

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

مثال:

#: ktouch.cpp:239
msgid "Save file..."
msgstr "إحفظ ملفّ..."
      

5.12.  تشفير UTF-8

رجاءً تذكر دائماً أن تحفظ ملفاتك بتشفير UTF-8 [4] وإلا، فسوف يسبب ذلك عدم إمكانية قراءته من قبل الآخرين. تشفير UTF-8 هو تشفير عالمي شامل، أنشئته وتصونه يونيكود. يمكن UTF-8 المستخدم من أن يشفر كل لغات العالم بالإضافة للعديد من الرموز، الحسابية على سبيل المثال، في ملف واحد. قبل وجود يونيكود وUTF-8، كان تبادل الوثائق بين الأنظمة المعدة للاستخدام المحلي شبه مستحيل. لذلك فإنه من المهم جداً أن يحفظ كل العمل باستخدام تشفير UTF-8، كما أن إرسال الرسائل العربية إلى قائمة التوثيق 'doc' يجب أن يكون أيضاً باستخدام هذا التشفير. عندما يتم إعداد كيبيبل بشكل صحيح، ويأتي ذكر ذلك لاحقاً، فسوف يقوم بحفظ كل ملفاتك بتشفير UTF-8. من ناحية أخرى، إن استخدمت محرر نصوص لتقوم بالترجمة، فالرجاء أن تتأكد من أنه يدعم تشفير UTF-8 وأنه بالفعل يقوم بحفظ عملك بذلك التشفير. يمكنك التحقق من ذلك عن طريق الأمر 'file':

$ file filename.po
      

سوف يظهر لك هذا الأمر تشفير الملف filename.po.

إذا بدأت بالعمل على ملف ووجدت أنه غير محفوظ بتشفير UTF-8 أو أن به مشكلة تشفير ، كأن يظهر مربعات بدلاً من الأحرف العادية على سبيل المثال، فتوقف عن العمل مباشرة وأرسل تقريراً بهذه المشكلة إلى قائمة التوثيق 'doc' البريدية. حالما يتم التقرير وقبل الحصول على الحل، قم بالعمل على ملف آخر بدلاً من الانتظار عاطلاً :-)

5.13.  التأكد من صحة الملف

كي تتأكد من أن ملف 'PO' التي قمت بترجمته لا يحتوي على أية أخطاء جملية أو تركيبية، يجب عليك أن تنفذ الأمر،

$ msgfmt -c --statistics filename.po
      

حيث أن 'msgfmt' هو أحد الأوامر المتوفرة في حزمة 'gettext' من جنيو.

إن كان هناك أية أخطاء، فسوف تعلم بها مع رقم السطر المناسب حتى تستطيع أن تجد الخطأ وتصححه بسهولة، والذي قد يكون عامة نسيان إضافة علامة تنصيص. بإزالة أية أخطاء، سوف يقوم الأمر "msgfmt" بتزويدك بإحصائيات حول ما قد ترجم، وما لم يترجم وكم من النصوص هي غير مؤكدة في الملف. الرجاء إضافة هذه الإحصائيات في سجل إرسال التعديلات، أي عندما تقوم بإرسال ملفاتك إلى مخزن نظام CVS.

5.14.  لائحة تفحص إرسال التعديلات

بعد ترجمة ملف 'PO' بالكامل أو جزئياً والذي تقرر أنه يجب إرساله إلى المخزن، عليك أن فعليك بإرساله. هذه لائحة بالأشياء التي يجب عليك القيام بها قبل إرسال أي ملفات:

  1. أن يكون للملف امتداد 'PO'.

  2. أن تكون أدخلت المعلومات الصحيحة في رأس الملف.

  3. أن يكون الملف محفوظاً ومشفراً باستخدام UTF-8.

  4. أن تكون تأكدت من أنه ليس هناك أية أخطاء باستخدام الأمر 'msgfmt'.

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

إن كنت عملت على وترجمت عدة ملفات في نفس الوقت، فرجاءً أن تقوم بإرسال تلك الملفات جميعاً باستخدام الأمر 'cvs commit' بدل أن ترسل كلاً منهم على حدة، حيث يقلل ذلك الضغط على الشبكة والمشاكل وغيرها. خلال إرسال التعديلات، وذلك مهم جداً، تذكر أن تضيف إحصائيات ترجمة الملفات إلى سجل التعديلات، وتتضمن عدد النصوص التي ترجمت، أو لم تترجم أو هي غير مؤكدة في كل ملف. في حال حدوث تضارب، والذي هو نادر جداً، رجاءً راجع المستند كيف إلى CVS.



[2] سجلّ الإرسال إلى نظام CVS يجب أن يكون شيئاً بنسق "تم تغيير الملف filename.pot إلى filename.po"، كما يجب إضافة إحصائيات الترجمة كما هو مشار إليه في error-check. إذا قمت بإعادة تسمية أكثر من ملف 'POT'، فقم رجاءً بإرسالهم جميعاً باستخدام أمر واحد. بمعنى آخر، بعض نقل، أو إضافة، أو حذف كل الملفات، قم بعمل 'cvs commit' وسيتم أخذ كل الملفات. إن كان لديك أي شك، راجع المستند CVS HOWTO، قسم 'إرسال عدة ملفات'.

[3] هذا النوع من الملاحظات يبدأ بعلامة "#:" في أول السطر.

[4] هذا المستند مكتوب بتشفير UTF-8، فقم بتحديد هذا التشفير لتعرضه بشكل صحيح.