07-06-2018, 12:54 AM
تعريب برنامج بيثون
سنستخدم ادوات عامة لشرح تعريب برنامج بيثون أو تحويل الى اي لغة أخرى (internationalization).ستحتاج اذا الى تثبيت الادوات التالية ان لم تكن موجودة على نظامك:
مجموعة الادوات gettext وهي مجموعة من الادوات مطورة خصيصا لتدويل برامج مهما كانت اللغة المستخدمة في تطويرها.
كود :
pip3 install python-gettext
حيث ستجد أيضا دليل الاستخدام.
سنترجم برنامج صغير هو عبارة عن لعبة سودوكو SudokuBan يمكن تنزيلها من الرابط التالي: https://sourceforge.net/projects/sudokub.../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.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#: sudokuban.py:304 sudokuban.py:385 sudokuban.py:458
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-01 00:00+0100\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"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: sudokuban.py:41
msgid "Create a new empty or random puzzle."
msgstr ""
الجزء الاول يتعلق بالحقوق وبالمترجم. سوف لن نهتم بهذا في موضوعنا. سنعدل فقط السطر المتعلق بترميز المحارف:
كود :
"Content-Type: text/plain; charset=UTF-8\n"
كود :
#: sudokuban.py:41
msgid "Create a new empty or random puzzle."
msgstr ""
السطر msgid هو السطر الاصلي المستخرج. يجب أن نتركه كما هو
السطر msgstr هنا سنكتب ترجمتنا للنص الموجود فوقه مباشرة. اذا بعد الترجمة ستكون السطور الثلاثة كما يلي:
كود :
#: sudokuban.py:41
msgid "Create a new empty or random puzzle."
msgstr "إنشاء لغز جديد فارغ أو عشوائي."
## تعديل البرنامج
بعد الانتهاء من ترجمة السلاسل النصية نمر لتعديل البرنامج حتى يأخذ في الاعتبار اللغة التي أضفناها.
نحتاج الى ان يكون الملفان messages.po و sudokuban.py مفتوحين. من ملف messages.po لدينا رقم السطر الذي ترجمناه. نبحث عنه في ملف sudokuban.py ثم نعدله عبر وضع السلسلة النصية بين _() كما يلي:
كود :
# Tooltips. TODO: i18n.
tipNew = _('Create a new empty or random puzzle.')
عندما ننتهي من تعديل ملف sudokuban.py نعود الى اوله لنستورد المكتبات الضرورية (تركت هذا لآخر مرحلة حتى لا يضيع ترتيب السطور):
كود :
import os, sys, time
import pygtk, gtk, pango
import gettext # نستورد هذه المكتبة
from sudoku import *
كود :
# Tooltips. TODO: i18n. # يجدر حذف هذا التعليق
# i16ln
pathname = os.path.dirname(sys.argv[0])
localdir = os.path.abspath(pathname) + "/locale"
gettext.install("messages", localdir)
هذه آخر مرحلة. لكي يستطيع البرنامج قراءة ملف اللغة messages.po لابد من تحويل الى ملف ثنائي. سنستخدم أداة تابعة لـgettext وهي تسمى msgfmt
كما يلي (طبعا بعد التنقل الى المجلد LC_MESSAGES الذي حفظنا فيه ملف الترجمة):
كود :
msgfmt messages.po
كود :
msgfmt.exe messages.po
يفترض بعد هذا الماراطون أن يكون برنامجك متوافقا بعد لغة النظام لديك.
حظا موفقا، في انتظار تفاعلاتكم :/
## ملاحظات
ملاحظة1: برنامج sudokuban الذي اعتمدته كمثال يمكنك تنزيله من الرابط المذكور في الموضوع او من المرفقات.
ملاحظة2: تحديد السلاسل النصية التي تحتاج الى الترجمة عمل مضني ودقيق عندما نمارسه بشكل يدوي. يفترض أن مطور البرنامج قد حدد بنفسه ما يمكن ترجمته وما لا يفترض أن يترجم. بما أن مطور البرنامج الذي اعتمدناه كمثال لم يأخذ في الحسبان تعدد اللغات في برنامجه، وجدت صعوبة في تحديد ما يمكن ترجمته مما يجب أن يبقى كما هو (أسماء الملفات مثلا).. هذا بالاضافة الى أن لكل مكتبة من المكتبات الرسومية آلياتها الخاصة في اعتماد تعدد اللغات .. يبقى هذا الموضوع محاولة أولى لفهم كيفية ترجمة برامج بيثون.