Qt linguist: клас qtranslator і зміна мови інтерфейсу

Відео: Як змінити перемикання мови введення в #Windows 10

клас QTranslator
Qt Linguist: клас QTranslator і Зміна мови інтерфейсу

В Qt завдання перекладу покладено на клас QTranslator. У нього багато функцій, але зазвичай він використовується тільки для завантаження потрібного файлу з перекладом - інше бере на себе функція QObject :: tr ().

В Qt є «встановлені» файли перекладу - такий переклад відноситься до різних написів на стандартних кнопках і таке інше. Тому нам знадобляться два примірники класу QTranslator: один для стандартних переказів Qt, а інший - для «призначених для користувача» перекладів.

Ці екземпляри зручно оголосити в оголошенні класу головного вікна:
QTranslator qtTranslator- // для встановленого перекладу QTranslator myappTranslator- // для вашого перекладу

У кожен екземпляр QTranslator треба завантажити файл перекладу і підключити цей QTranslator до примірника QApplication (до нього може бути підключено кілька QTranslator`ов). Виклик найкраще помістити в конструктор головного вікна.

Ось так ми завантажуємо «встановлений» в Qt переклад:
qtTranslator.load (QString ( "qt_% 1"). arg (QLocale :: system (). name ()),
QLibraryInfo :: location (QLibraryInfo :: TranslationsPath)) -
qApp-gt; installTranslator (qtTranslator) -

Розберемо цей приклад. У функцію QTranslator.load () повинна бути передана ім`я файлу з перекладом. Стандартні QM-файли перекладу зі складу самої Qt мають імена виду qt_імя-локалі. qm. Якщо в load () передати ім`я без розширення, то load () автоматично підставить розширення qm. Цим ми і скористаємося.




Qt Linguist: клас QTranslator і Зміна мови інтерфейсу

Отже, за допомогою коду:
QString ( "qt_% 1"). Arg (QLocale :: system (). Name ()

складається ім`я файлу з префікса «qt_» і 2-літерного скорочення поточної локалі. кодом:
QLibraryInfo :: location (QLibraryInfo :: TranslationsPath)

ми вказуємо, в якому каталозі шукати цей файл з перекладом (в каталозі Qt, де бібліотека зберігає файли перекладів). Для завантаження підготовленого особисто вами файлу перекладів вашої програми код набагато простіше:



myappTranslator.load ( ": / translations /" + QLocale :: system (). name ()) - qApp-gt; installTranslator (myappTranslator) -

Тобто ми отримуємо ім`я локалі, складаємо з неї шлях до файлу-ресурсу, завантажуємо його і підключаємо екземпляр QTranslator до «системного» примірнику QApplication, на який вказує змінна qApp.

Зміна мови інтерфейсу

Для зміни мови інтерфейсу на ходу, без перезавантаження програми, треба докласти певних зусиль.

По-перше, якщо ви хочете просто видалити переклад, то треба використовувати функцію:
QCoreApplication :: removeTranslator (QTranslator * translationFile)

Для зміни мови інтерфейсу треба видалити з пам`яті старі переклади і потім завантажити нові. При видаленні примірника перекладача або завантаженні нових файлів перекладу виникає подія QEvent :: LanguageChange. У кожному віджеті треба передбачити його обробку, перевизначивши метод changeEvent (QEvent * event), де фактично «вручну» задати написи підлеглим віджетів за допомогою тієї ж функції tr (). Інакше ж, вже створені, існуючі в момент зміни мови віджети, так і не будуть переведені на нову мову.

Подивіться на такий приклад (взятий з документації Qt):
void MyWidget :: changeEvent (QEvent * event)
{
if (e-gt; type () == QEvent :: LanguageChange)
{
titleLabel-gt; setText (tr ( "Document Title")) -
okPushButton-gt; setText (tr ( "OK"));
}
else
QWidget :: changeEvent (event);
}

І це для зміни перекладу всього двох віджетів! Логіка підказує, що якщо вам так вже необхідно динамічне перемикання мови інтерфейсу, то слід його виконати наступним чином: функціонально розвести створення віджетів і призначення їм написів. Інакше ж доведеться по два рази давати написи кожному віджету: один раз при його створенні, а іншим разом - в коді, що відповідає за динамічне перемикання мови.

ІНШЕ

Онлайн перекладач dicter фото

Онлайн перекладач dicter

Відео: Онлайн перекладач Dicter - як перекласти текст в один клік Ні для кого не буде відкриттям твердження, що…

Ієрархія віджетів в u ++ фото

Ієрархія віджетів в u ++

Відео: Qt - Компонування віджетів 1 (для початківців) Важливо розуміти, що редактор компоновок не є повноцінним…

Неясності з phonon фото

Неясності з phonon

Від труднощів збірки перейдемо до неясним місцях у використанні Phonon. Phonon підтримує ті мультимедійні формати, які…

Бесіди про qt: qsettings і xml фото

Бесіди про qt: qsettings і xml

Клас QSettings служить Qt-програмістам вірою і правдою, коли потрібно зберегти або завантажити будь-які налаштування…

Як навчиться переводити? фото

Як навчиться переводити?

У наш час іноземні мові займають важливу роль в житті людей. Тому не тільки перекладачі, а й практично люди всіх…

» » Qt linguist: клас qtranslator і зміна мови інтерфейсу