فریم ورک کیوت (Qt) این امکان را برای توسعه دهندگان فراهم کرده است که بتوانند به راحتی اپلیکیشن های چند زبانه اندروید ایجاد کنند. در این نوشته نگاهی می اندازیم به روال افزودن ترجمه و فونت به اپلیکیشن ها. همجنین راست چین کردن رابط کاربری برای زبان های راست نویس مانند فارسی.

لزوم ایجاد اپلیکیشن چند زبانه
امروزه استفاده از موبایل و اینترنت در سراسر جهان گسترش یافته و بازار های جدیدی برای توسعه دهنگان بازی و اپلیکیشن ایجاد نموده است. توسعه دهندگان نیز برای دسترسی به این بازارها به سمت توسعه اپلیکیشن های چند زبانه رفته اند. به این صورت هم توسعه دهندگان کاربران بیشتری بدست خواهند آورد و هم کاربران انتخاب های بیشتری خواهند داشت.
اپلیکیشن چند زبانه در کیوت
کیوت ابزارهای زیادی برای افزودن ترجمه، فونت و جهت گذاری متن در اختیار توسعه دهندگان قرار می دهد. چون هدف ما تولید اپ اندروید است، در اینجا ابزارهایی که در کیو ام ال (Qml) است را معرفی می کنیم.
فرض کنید بخواهیم برنامه زبان های انگلیسی و فارسی را پشتیبانی کند. برای این کار مراحل زیر را باید انجام دهیم:
- علامت زدن (Mark) متن ها (Strings) و ترجمه آن ها
- راست چین کردن
- استفاده از فونت های فارسی (اختیاری)
توجه: موتور کیو ام ال در برنامه بطور پیش فرض، پوشه i18n را در منابع (Resources) برنامه جستجو می کند. اگر فایل ترجمه ای برای زبان دستگاه پیدا کرد آن را اعمال می کند. در غیر اینصورت زبان پیش فرض برنامه را اعمال می کند. ولی مهم است که فایل های ترجمه برنامه با فرمت qml_[lang_code].qm نامگذاری شده باشند. بطور مثال qml_fa.qm یا qml_fa_IR.qm.
علامت زدن متن ها و ترجمه آن ها
در کیو ام ال برای مشخص کردن متن هایی (Strings) که باید ترجمه شوند معمولا از ()qsTr استفاده میشود. هر متنی که باید ترجمه کنیم را داخل این تابع قرار می دهیم. بطور مثال:
Button {
text: qsTr("Confirm")
anchors { left: parent.left; top: parent.top; margins: 8 }
}
بعد از اینکه تمام متن های درون فایل های qml برنامه مشخص شد. با استفاده از برنامه lupdate که در مسیر نصب Qt است فایل ترجمه را ایجاد می کنیم. (با یک جستجوی ساده در محل نصب کیوت می توانید آن را پیدا کنید). برنامه lupdate می تواند یک یا چند فایل qml را به عنوان ورودی بگیرد و یک فایل ts ایجاد کند. همچنین می توانید لیستی از فایل های را در یک فایل متنی ذخیره کنید و به برنامه بدهید.
#> lupdate Main.qml -ts i18n/qml_fa.ts
بعد از ایجاد فایل ts، برنامه linguist را در همان مسیر lupdate اجرا کرده و فایل ts که ایجاد کرده بودید را در آن باز کنید. ترجمه هر متن را وارد کنید و ذخیره کنید. در پایان برنامه lrelease را در همان مسیر قبلی روی فایل ترجمه اجرا می کنید تا فایل نهایی ترجمه با نام qml_fa.qm ایجاد شود. فراموش نکنید که این فایل را به بخش RESOURCES از تابع qt_add_qml_module در فایل CMakeList.txt وارد کنید.
#> lrelease qml_fa.ts

تا اینجا اگر برنامه تان را اجرا کنید، زبان رابط کاربری برنامه با زبان دستگاه یکی خواهد بود. (اگر بخواهید در زمان اجرای برنامه (Runtime) زبان برنامه را تغییر دهید نیاز به تغییرات بیشتری دارید که در نوشته «اپلیکیشن دو زبانه فارسی» به آن خواهیم پرداخت)
راست چین کردن رابط کاربری
برای زبان های راست نویس – مانند فارسی – علاوه بر ترجمه نیاز است که المان های رابط راست چین شوند. خوشبختانه در کیو ام ال این کار به راحتی صورت می گیرد. کافیست در هر کدام از المان هایی که می خواهیم راست چین شوند مقدار enabled را در صفت LayoutMirroring فعال می کنیم. این مقدار فقط روی همان المان اعمال می شود. اگر بخواهیم روی تما فرزندان آن نیز اعمال شود باید childrenInherit را نیز فعال کنیم.
بطور معمول این مقادیر در یکبار در بالاترین سطح (المان روت) اعمال می شوند تا تمام المان های فرزند نیز تغییر کنند.
LayoutMirroring.enabled: (Qt.locale().name.substring(0,2) === “fa”) ? true: false
LayoutMirroring.childrenInherit: true
مهم: مقادیر بالا زمانی تاثیر خواهند داشت که ما المان ها را در جهت افقی بصورت نسبی (Relative) جایگذاری کنیم. یعنی بجای تنظیم صفت x از anchors.left و anchors.right استفاده کنیم. جهت عمودی تاثیری در راست چین بودن رابط ندارد.
استفاده از فونت ها
برای زبان هایی مانند فارسی، فونت های پیش فرض سیستم معمولا جذاب نیستند. به همین خاطر بهتر است فونت های خود را به برنامه اضافه کنیم.
افزودن فونت به در کیو ام ال بسیار ساده است. ابتدا فایل های فونت (ترجیحا ttf) را به پوشه fonts در مسیر کد منبع برنامه منتقل می کنیم. و آن ها را به منابع (Resources) سیستم اضافه کنیم. (با افزودن نام و مسیر فونت ها به بخش RESOURCES تابع qt_add_qml_module در فایل CMakeLists.txt)
برای استفاده از فونت ها می توانیم از FontLoader کیو ام ال استفاده کنیم.
FontLoader {
id: vazirFontId
source: "./fonts/vazir.ttf"
}
//...
Text {
text: qsTr("Something")
font.family: vazirFontId.font.family
}
در پایان گفتن چند نکته مهم است. یکی اینکه در Qt 6.2 تابع qt_add_translations معرفی شد که تمام کارهایی که با lupdate و lrelease بطور دستی انجام دادیم را بصورت خودکار انجام می دهد. البته این تابع تا Qt 6.7 بصورت آزمایشی است و ممکن است درست کار نکند. در نوشته ای دیگر حتما به آن خواهیم پرداخت.
چند زبانه کردن اپلیکیشن که در اینجا گفته شد، روش پیش فرض در اندروید استودیو نیز است. یعنی در شروع برنامه بسته به زبان دستگاه، زبان رابط کاربری تغییر می کند نه در زمان اجرا (runtime). البته روش هایی برای تغییر زبان در زمان اجرا است که در نوشته «اپلیکیشن دو زبانه فارسی» معرفی می کنیم.
در اینجا فرض شده که کاربر تا حدودی با کیو ام ال و کیوت آشناست. به همین خاطر وارد جزئیات نشده ایم. برای آشنایی با آن ها نوشته اولین برنامه با Qt for Android را مطالعه نمایید.