![]() |
تعريب برنامج بيثون - نسخة قابلة للطباعة +- ملتقى الواحــة (https://forums.wahaproject.org) +-- قسم : واحــة لينكس (https://forums.wahaproject.org/forum-3.html) +--- قسم : البرمجة (https://forums.wahaproject.org/forum-9.html) +--- الموضوع : تعريب برنامج بيثون (/thread-111.html) |
تعريب برنامج بيثون - محمد - 07-06-2018 تعريب برنامج بيثون
سنستخدم ادوات عامة لشرح تعريب برنامج بيثون أو تحويل الى اي لغة أخرى (internationalization).ستحتاج اذا الى تثبيت الادوات التالية ان لم تكن موجودة على نظامك: مجموعة الادوات gettext وهي مجموعة من الادوات مطورة خصيصا لتدويل برامج مهما كانت اللغة المستخدمة في تطويرها. كود : pip3 install python-gettext حيث ستجد أيضا دليل الاستخدام. سنترجم برنامج صغير هو عبارة عن لعبة سودوكو SudokuBan يمكن تنزيلها من الرابط التالي: https://sourceforge.net/projects/sudokubanhttps://sourceforge.net/projects/sudokuban البرنامج قديم مبرمج بواسطة بيثون2، لذلك اذا اردت تشغيله تستخدم: كود : python2 sudokuban.py - استخراج السلاسل النصية التي نرغب في ترجمتها - ترجمة السلاسل النصية - تعديل البرنامج ليأخذ في الاعتبار التدويل (internationalization) ## استخراج السلاسل النصية بالنسبة لبرنامجنا، سواء على وندوز او لينكس، ننتقل الى المجلد حيث قمنا بفك الارشيف ثم ننفذ الامر التالي: كود : xgettext -a sudokuban.py كود : xgettext.exe -a sudokuban.py سينتج عن الامر الذي نفذناه ملف نصي يحمل اسم messages.po في نفس المجلد. ظهرت لي بعض الرسائل عند استخراج النصوص تتعلق كلها تقريبا بالسلسلة msgid مفادها أنها سلسلة فارغة وأن هذا الاستخدام محجوز للاداة gettext. سنتجاوز هذه الرسالة لأننا سوف لن نترجم على كل حال سلسلة نصية فارغة. سنقوم بانشاء سلسلة مجلدات داخل مجلد برنامجنا بحسب اللغة عبر الواجهة الرسومية او عبر الطرفية كما يلي بالنسبة الى لينكس: اللغة العربية: كود : mkdir -p locale/ar_AR/LC_MESSAGES كود : mkdir -p locale/fr_FR/LC_MESSAGES ## ترجمة السلاسل النصية ليس من الضروري ترجمة كل شيء. سوف لن نترجم سوى السلاسل النصية المفيدة. أسهل حل للتعرف على السلاسل النصية ذات الاهمية هو تشغيل البرنامج بلغته الاصلية. ثم، لترجمة النصوص يمكن استخدام محرر نصوص عادي او استخدام محررات متخصصة مثل poedit. هنا سأستخدم محرر نصوص عادي (لكن يدعم التلوين) لأن عدد السلاسل النصية ليس كبيرا. هذه السطور الاولى في ملف messages.po عندي: كود : # SOME DESCRIPTIVE TITLE. الجزء الاول يتعلق بالحقوق وبالمترجم. سوف لن نهتم بهذا في موضوعنا. سنعدل فقط السطر المتعلق بترميز المحارف: كود : "Content-Type: text/plain; charset=UTF-8\n" كود : #: sudokuban.py:41 السطر msgid هو السطر الاصلي المستخرج. يجب أن نتركه كما هو السطر msgstr هنا سنكتب ترجمتنا للنص الموجود فوقه مباشرة. اذا بعد الترجمة ستكون السطور الثلاثة كما يلي: كود : #: sudokuban.py:41 ## تعديل البرنامج بعد الانتهاء من ترجمة السلاسل النصية نمر لتعديل البرنامج حتى يأخذ في الاعتبار اللغة التي أضفناها. نحتاج الى ان يكون الملفان messages.po و sudokuban.py مفتوحين. من ملف messages.po لدينا رقم السطر الذي ترجمناه. نبحث عنه في ملف sudokuban.py ثم نعدله عبر وضع السلسلة النصية بين _() كما يلي: كود : # Tooltips. TODO: i18n. عندما ننتهي من تعديل ملف sudokuban.py نعود الى اوله لنستورد المكتبات الضرورية (تركت هذا لآخر مرحلة حتى لا يضيع ترتيب السطور): كود : import os, sys, time كود : # Tooltips. TODO: i18n. # يجدر حذف هذا التعليق هذه آخر مرحلة. لكي يستطيع البرنامج قراءة ملف اللغة messages.po لابد من تحويل الى ملف ثنائي. سنستخدم أداة تابعة لـgettext وهي تسمى msgfmt كما يلي (طبعا بعد التنقل الى المجلد LC_MESSAGES الذي حفظنا فيه ملف الترجمة): كود : msgfmt messages.po كود : msgfmt.exe messages.po يفترض بعد هذا الماراطون أن يكون برنامجك متوافقا بعد لغة النظام لديك. حظا موفقا، في انتظار تفاعلاتكم :/ ## ملاحظات ملاحظة1: برنامج sudokuban الذي اعتمدته كمثال يمكنك تنزيله من الرابط المذكور في الموضوع او من المرفقات. ملاحظة2: تحديد السلاسل النصية التي تحتاج الى الترجمة عمل مضني ودقيق عندما نمارسه بشكل يدوي. يفترض أن مطور البرنامج قد حدد بنفسه ما يمكن ترجمته وما لا يفترض أن يترجم. بما أن مطور البرنامج الذي اعتمدناه كمثال لم يأخذ في الحسبان تعدد اللغات في برنامجه، وجدت صعوبة في تحديد ما يمكن ترجمته مما يجب أن يبقى كما هو (أسماء الملفات مثلا).. هذا بالاضافة الى أن لكل مكتبة من المكتبات الرسومية آلياتها الخاصة في اعتماد تعدد اللغات .. يبقى هذا الموضوع محاولة أولى لفهم كيفية ترجمة برامج بيثون. |