Qt-ar_logo

ترجمة البرامج بواسطة Qt Linguist

يمكنك في Qt ان تترجم برنامجك الى عدة لغات بحيث يمكن ان يستعمله اي كانت لغته وذلك باستعمال Qt Linguist.

الترجمة في Qt امر بسيط جدا بحيث يمكن ان يقوم به اي شخص .
اول ما تحتاج اليه هو ملف ترجمة ذو امتداد .ts وهو ملف قابل للترجمة بواسطة Qt Linguist
هذا الملف يحتوي على اسم الترجمة وهو كالتالي nomduprogramme_langue.ts
بحيث nomduprogramme اسم البرنامج و langue لغة الترجمة والامتداد ts.

لنفترض ان برنامجنا اسمه Hello فيكون ملف الترجمة كالتالي :
Hello_ar.ts بحيث ar هي العربية
Hello_en.ts بحيث fr هي الفرنسية
Hello_ru.ts بحيث ru هي الروسية ….الخ
وعند الانتهاء من الترجمة نقوم بعملية “compile” لملف ts بحيث نحصل على ملف نهائي ذو امتداد .qm

خطوات الترجمة
أول خطوة للترجمة تبدأ مع كتابة كود البرنامج بحيث يتوافق مع عملية الترجمة
فكما تعرفون qt تستعمل فئة QString لادخال النصوص المتوافقة مع Unicode
QString متوافقة مع جميع اللغات حتى العربية منها ولذلك فان الكود التالي يبين لك ما يلي :

QString chaine = "Bonjour"; // متوافق مع الترجمة
char chaine[] = "Bonjour"; // غير متوافق مع الترجمة

الامر واضح جدا
هنالك طريقة سهلة ليعلم هل النص قابل للترجمة ام لا
وذلك باستعمال tr() التي تدل بان النص قابل للترجمة فمثلا :

quitter = new QPushButton("&Quitter");
غير قابلة للترجمة//
quitter = new QPushButton(tr("&Quitter"));
قابلة للترجمة//

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

quitter = new QPushButton(tr("&Quitter", "Utilisé pour le bouton de fermeture"));

او

actionQuitter->setShortcut(QKeySequence(tr("Ctrl+Q", "Raccourci clavier pour quitter")));

ففي هذا المثال نبين للمترجم ان هذا عبارة عن اختصار للوحة المفاتيح

الخطوة التالية انشاء ملفات الترجمة ts:
قبل كل شيئ يجب أن نحرر ملف .pro وان نضيف له البيانات التالية :

TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

# Input
HEADERS += FenCodeGenere.h FenPrincipale.h
SOURCES += FenCodeGenere.cpp FenPrincipale.cpp main.cpp

TRANSLATIONS = hello_en.ts hello_ar.ts
TRANSLATIONS = hello_en.ts hello_ar.ts

اضفنا ملفي الترجمة للبرنامج وهما hello_ar.ts ملف للعربية و hello_en.ts ملف للانجليزية
نقوم الان بفتح نافذة مطراف console ثم نذهب الى مجلد المشروع باستعمال الامر CD ثم نكتب

lupdate NomDuProjet.pro

بحيث NomDuProjet هو اسم المشروع
lupdate يقوم بتحديث ملف ts او انشائه من جديد اذا لم يكن موجودا
بعد ذلك لنذهب الى مجلد المشروع لنجد انه لدينا ملفان جديدان hello_fr.ts و hello_ar.ts

ترجمة البرنامج بواسطة Qt Linguist:
قم بتشغيل Qt Linguist ثم قم بفتح احد الملفين المشار اليهم سابقا ثم ابدأ الترجمة
وسوف تجده سهلا ليس فيه تعقيدات فبمجرد ان تجربه ستعرف كل شيئ

بعد الانتهاء من الترجمة قم بحفظ التغييرات ولا يبقى لنا الا بعمل compile لملف ts
قم بفتح نافذة مطراف console مرة اخرى اذهب الى مجلد المشروع وادخل ما يلي

lrelease nomDuFichier.ts

بحيث nomDuFichier هو اسم ملف الترجمة وليكن مثلا :

lrelease Hello_ar.ts

كما يمكنك ان تعمل compile لكل ملفات ts الموجودة في المشروع وذالك بادخال

lrelease nomDuProjet.pro

بحيث nomDuProjet هو اسم المشروع وليكن مثلا

lrelease hello.pro

سنحصل بعدها على ملفات qm نهائية يمكن استعمالها في البرنامج
في حالتنا سننتقل الى مجلد المشروع لنجد ملفين من نوع qm وهما

Hello_ar.qm
Hello_en.qm

ملاحظة : لا يتم عمل compile الا للنصوص او الكلمات المترجمة اما التي لم تترجم فسوف يتجاهلها

تحميل ملف مترجم .qm في البرنامج:
لتحميل الملف في البرنامج لابد ان ندخل البيانات في ملف main.

مثلا:

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    QTranslator translator;
    translator.load("hello_ar");
    app.installTranslator(&translator);

    FenPrincipale fenetre;
    fenetre.show();

    return app.exec();
}

لا تنسى ان تعرف QTranslator في بداية الكلاس
وتأكد من ان ملف qm موجود في نفس المجلد الموجود فيه التطبيق

ستحصل على نافذة حسب الملف المترجم في حالتنا هذه مثلا فهو بالعربية لكن هذه الطريقة ليست عملية
بل هناك طريقة لجعل النافذة تتوافق حسب لغة المستخدم في هذه الحالة يكون الكود كما يلي :

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    QString locale = QLocale::system().name().section('_', 0, 0);

    QTranslator translator;
    translator.load(QString("hello_") + locale);
    app.installTranslator(&translator);

    FenPrincipale fenetre;
    fenetre.show();

    return app.exec();
}

الشرح : هنا سنحاول الحصول على حرفين من لغة آلة المستخدم
لان QLocale::system().name() تعطينا نتيجة تشبه هذه “fr_FR” أو “ar_SA” الاولى اسم اللغة والثانية البلد ، وباستعمال section نقسم الجملة الى اثنين بين “_” لنحصل على “ar” مثلا.
وهكذا يمكنك استعمال لغات كثيرة في برنامجك

وأرجو ان اكون قد وفقت في افادة ولويسيرة حول هذا الموضوع.

909 مشاهدة

مواضيع مشابهة