Превеждане на интерфейса при създаване на програми с Qt
Страницата е създадена на:15 април 2019 и редактирана на:15 април 2019
Информация относно възможностите за интернационализиране на Qt програмите има на страницата:
http://doc.qt.io/qt-5/internationalization.html
Ако създавате програма, чиито интерфейс искате в последствие да бъде преведен на няколко езика, всички стрингови константи, които очаквате, че ще се наложи да бъдат преведени „заграждайте“ с функцията tr(). С други думи, навсякъде, където в изходният код пишете стрингова константа, например: "some text", вместо това пишете: tr("some text").
Всички надписи, които се въвеждат по визуалния начин, биват добавяни в генериращия се автоматично програмен код точно по този начен, чрез функцията tr().
В проектния файл на вашата програма добавете имена за файловете с преводи, които възнамерявате да бъдат направени, например:
TRANSLATIONS += MyProg_bg.ts MyProg_de.ts
Тук MyProg е добре да съвпада с името на изпълнимия файл на програмата, а bg, de и т.н. са двубуквени съкращения на съответните езици.
Когато решите да пристъпите към превеждане на интерфейса на друг език, ако работите на Qt Creator, изпълнете командата от менюто:
Tools -> External -> Linguist -> Update Translations (lupdate)
Ако работите от команден ред, в директорията с .pro файла на проекта, подайте команда:
lupdate MyProject.pro
в която MyProject.pro е името на проектния файл на програмата, която пишете.
Инструмента lupdate, който се стартира с тези команди, анализира файловете с първичен код като намира местата, в които е използвана функцията tr(), и записва стринговите константи, които са нейни аргументи, във всеки от споменатите в проектния файл .ts файлове с преводи. Ако lupdate се изпълнява за първи път, .ts файлове още не съществуват и те се създават, а когато се изпълнява отново, в тях се добавят само новооткритите стрингови константи.
След създаване или актуализиране на файловете, които ще съхраняват, или вече съхраняват преводи, всеки от тях се отваря с програмата Linguist. С Linguist се извършва ръчно и самия превод на съответния език.
Linguist ще намерите в директория bin на инсталацията на Qt, която ползвате, но може и да направите настройка на Qt Creator и да добавите Linguist в меню: Tools -> External -> Linguist. За целта трябва да изберете команда от менюто:
Tools -> External -> Configure
и в прозореца за настройки да щракнете върху група външни инструменти Liguist, после върху падащия списък Add и опцията Add Tool от него. Напишете име на новия инструмент Linguist. Срещу полето Executable щракнете бутона Choose и чрез диалога за избор на файл намерете и изберете изпълнимия файл на Linguis. Щракнете бутон OK за да запазите настрийката.
За да може да се зарежда по време на изпълнение на програмата, изготвен с Linguist превод, преводът трябва да се запише във файл от тип .qm. Това се извършва с команда от менюто на Linguist:
File -> Release
За да се покаже интерфейса на програмата на текущия за системата език е необходимо във файл main.cpp, след дефиницията на променливата от клас QApplication, която представлява самото приложение:
QApplication app(argc, argv);
се вмъкват следните редове:
QTranslator translator;
translator.load("ИмеНаПрограма_" + QLocale::system().name());
app.installTranslator(&translator);
В обкръжението на програмата трябва да е дефинирана променлива LANG, която определя на какъв език да се покаже интерфейса й.
Бих препоръчал, за да се добавят автоматично .qm файловете на преводите в съставяните пакети за разпространение, тези файлове да се добавят в проекта като ресурси. Тогава редът в програмния код, който зарежда превод - да се промени така:
translator.load(":ИмеНаПрограма_" + QLocale::system().name());
Двоеточието в ":ИмеНаПрограма_" означава, че файлът с превода да се търси сред ресурсите на проекта.
Променливата LANG в обкръжението на програма със стойност, например, bg_BG (означаваща български_България) или en_US (английски_САЩ), задава стойността, която връща функция QLocale::system().name().
В Windows задаването на стойност на променлива LANG и стартирането на програмата може да се извърши с .bat файл.
В Mac OS X командата за стартиране от терминал е:
LANG=bg_BG open MyProg.app
В Linux стойността може да се зададе в командата, с която се стартира програмата. Например, ако искате да стартирате програмата MyProg с интерфейс на български, трябва да я стартирате с команда:
LANG=bg_BG MyProg
Използването на тази променлива е удобно за изпробване на преводи, без да се променят езиковите и регионални настройки на операционната система.
Предишна страница: Създаване на диалози
Следваща страница: Запазване на състоянието на направена с Qt програма