Qt Linguist Manual
Qt provides excellent support for translating Qt C++ and Qt Quick applications into local languages. Release managers, translators, and developers can use Qt tools to accomplish their tasks.
Release managers bear the overall responsibility for the release of the application. Typically, they coordinate the work of developers and translators. They can use the lupdate tool to synchronize source code and translations and the lrelease tool to create run-time translation files for use by the released application.
Translators can use the Qt Linguist tool to translate text in applications. No computer knowledge beyond the ability to start a program and use a text editor or word processor is required.
Developers must create Qt applications that are able to use translated text. They should also help translators identify the context in which phrases appear. Developers can use tutorials to learn about their tasks.
For more information about the supported languages and writing systems, see Internationalization with Qt.
Table of Contents
© 2023 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.
Краткое введение
Qt предоставляет отличный инструмент перевода, который поддерживает приложения Qt C ++ и Qt Quick. Издатели, переводчики и разработчики могут использовать этот инструмент для выполнения своих задач.
Издатель: берет на себя ответственность за полное освобождение приложения. Обычно они координируют работу разработчиков и переводчиков, они могут использовать инструмент lupdate для синхронизации исходного кода, перевода и использования инструмента синхронизации lrelease для создания файла перевода для выпускаемого приложения, используемого во время выполнения.
Переводчик: Вы можете использовать инструмент Qt Linguist для перевода текста приложения. Конечно, это требует профессиональных знаний перевода.
Разработчик: Вы должны создать переведенный текст, который может использоваться приложениями Qt. Это также должно помочь переводчику определить место, где появляется фраза.
Существует три вида ролей над издателем, переводчиком и разработчиком, и, конечно, во многих случаях это фактически один вид, то есть сам программист, это знают все.
Издатели
Qt Linguist предоставляет два инструмента для издателей — lupdate и lrelease. Они могут обрабатывать файлы проекта qmake или запускаться непосредственно в файловой системе.
Создать файлы перевода
Чтобы создать файл перевода:
Запуск lupdate создает набор файлов источника перевода (TS), которые содержат весь текст, который виден пользователю, но не был переведен.
Передайте сгенерированный файл TS переводчику (который использует Qt Linguist для добавления перевода). Qt Linguist обеспокоен любым изменением или удалением исходного текста.
Запустите lupdate, вы можете синхронизировать видимый пользователем текст из приложения, оно не уничтожит никаких данных.
Выпустите приложение, запустите lrelease, вы можете прочитать файл TS и сгенерировать файл QM для времени выполнения приложения.
Используйте lupdate
Использование:
в строке меню Creator выберите: Инструменты-> Внешний-> Дом Qt Language-> Обновить перевод (lupdate)
Командная строка: lupdate myproject.pro
Используйте Lrelease
Использование:
в строке меню Создателя выберите: Инструменты-> Внешние-> Qt Language Home-> Release Translation (lrelease)
Командная строка: lrelease myproject.pro
переводчик
Qt Linguist — это инструмент для добавления переводов в приложения Qt.
Главное окно языка Qt содержит строку меню и следующие виды:
Контекст (F6): список контекста, в котором находится переводимая строка.
String (F7): используется для просмотра переведенной строки в контексте.
Фразы и формы (F9): используется для просмотра контекста, в котором находится текущая строка, если доступен исходный код контекста.
Область перевода: отображение исходного текста, переводы и комментарии к переводу.
Фразы и догадки (F10): используется для просмотра возможных переводов для текущей строки.
Предупреждение (F8): просмотр строки перевода, которая не прошла тест проверки.

Область перевода (1) всегда видна. Чтобы показать / скрыть другие виды, выберите: «Просмотр» -> «Просмотр» или используйте сочетания клавиш, перечисленные выше. Поскольку каждое окно является плавающим интерфейсом, вы можете произвольно перетаскивать его через строку заголовка.
Перевести строки
Откройте файл исходного перевода (TS) в Qt Linguist для перевода. Файлы TS — это читаемые XML-файлы, содержащие исходные фразы и их переводы. Файлы TS обычно создаются и обновляются с помощью lupdate.
Qt Linguist отображает целевой язык в поле перевода, а соответствующее поле ввода адаптируется к форме множественного числа. При открытии нескольких файлов TS для синхронного перевода поля перевода и комментарии к переводу отображаются для каждого языка.
Чтобы перевести строку:
Выберите: File-> Open (Ctrl + O), чтобы загрузить файл TS.
вконтекстВыберите контекст в представлении, чтобы загрузить переведенную строку встрокаПросмотр.
выбратьстрокаСтрока в представлении, которая должна быть переведена.
Введите перевод, соответствующий текущей строке в области перевода.
Вы также можете дважды щелкнуть по нему изФразы и догадкиВыберите существующий перевод в представлении. Фразы читаются из разговорников, и догадки должны найти существующие переводы в похожих фразах в файлах TS.
Этот пункт является необязательным, вы можете ввести комментарии к переводу, чтобы облегчить понимание другим переводчикам.
Если вы принимаете этот перевод, нажмите Ctrl + Enter и выберите
Или щелкните значок слева от выбранной исходной строки в списке строк.
Выберите: Файл-> Сохранить, чтобы завершить работу.
Повторяйте этот процесс, пока все строки в списке строк не будут отмечены
(Принят / правильно) или
(Принять / Предупреждение). Затем выберите следующий контекст и продолжите.
Выберите: Просмотр-> Статистика, вы можете увидеть оригинальные и переведенные слова и символы.

Выберите: File-> Publish, создайте файл QM (сообщение Qt) с тем же именем, что и текущий файл перевода. Средство командной строки lrelease из диспетчера релизов имеет ту же функцию, которая может выполнять все исходные файлы перевода приложения.
Изменить ярлык
Сочетание клавиш представляет собой комбинацию клавиш клавиатуры, при нажатии приложение выполняет соответствующую операцию. Существует два типа горячих клавиш: Alt и Ctrl.
Alt ярлык
Сочетания клавиш Alt используются для меню и кнопок. Если символ меню или кнопки подчеркнут, это означает, что нажатие клавиши ALT и подчеркнутого символа будет выполнять ту же операцию, что и нажатие на элемент меню или нажатие кнопки.
Например, большинство приложений имеют файловое меню «Файл (F)» с подчеркнутым символом «F». В это время вы можете вызвать его, нажав кнопку в строке меню или нажав Alt + F. Чтобы клавиши быстрого доступа были доступны, перевод должен содержать указанные символы. Например: «Файл» следует переводить как «& Файл», «Редактировать (& E)» следует переводить как «Редактировать (& E)»,
Комбинация клавиш Ctrl
Клавиша Ctrl может существовать независимо в любом визуальном элементе управления. Они обычно используются для вызова пунктов меню в меню, в противном случае вам придется использовать клавиатуру или мышь несколько раз. Его также можно использовать для выполнения действий, которые не отображаются ни в каких меню или кнопках.
Например, у большинства приложений есть новое действие в меню файла. Новое действие может отображаться как «New Ctrl + N» в меню «Файл», что означает, что новому действию нужно только нажать Ctrl + N, чтобы выполнить ту же операцию, что и при выборе: File-> New
В идеале можно выбрать комбинацию клавиш Ctrl для перевода: translation-> copy from source (Ctrl + B). Однако в некоторых случаях символы будут бессмысленными на целевом языке и должны быть изменены. Независимо от того, какой символ (буква или цифра) выбран, перевод должен быть в виде «Ctrl +», за которым следует формат символов в верхнем регистре. Qt автоматически покажет правильное имя во время выполнения. Как и в случае с сочетанием клавиш Alt, если переводчик изменяет ярлык Ctrl, новый ярлык Ctrl не может конфликтовать с любым другим сочетанием клавиш Ctrl.
Предупреждение: не переводите сочетания клавиш «Alt», «Ctrl» и «Shift». Qt зависит от этих строк. Для поддерживаемых языков Qt автоматически переведет эти строки.
Обработка пронумерованных параметров
Некоторые фразы содержат пронумерованные параметры. Нумерованный параметр является заполнителем и будет заменен указанным текстом во время выполнения. Нумерованный параметр отображается в исходной строке как%, за которым следует число.
Например: текст, который нам нужно перевести, представляет собой переменную строку, как описано выше.
Тогда мы можем справиться с этим так:
Текст, извлеченный таким образом, является «Имя пользователя:», нам нужно только перевести его в «имя пользователя:», следующее имя пользователя будет отображаться динамически при каждом его выполнении.
Изменить целевой язык
Если целевой язык и страна не установлены явно, Qt Linguist выполнит синтаксический анализ переведенного оригинального документа. Например, app_de.ts устанавливает целевой язык на немецкий, а app_de_ch.ts устанавливает целевой язык на немецкий и швейцарский. Это помогает автоматически загружать и переводить текущую локаль.
Если ваш файл не соответствует этой привычке, вы также можете указать информацию, выбрав: Edit-> Translate File Settings.

Выберите контекст для перевода
Контекст, в котором перечислены переводимые строки, отображается в окне контекста в порядке названия контекста. Каждый контекст является именем подкласса QObject, также может быть сам контекст QObject, который содержит строку, переданную статической функции QObject :: tr (), также может быть <анонимный контекст>, который содержит Строка подклассов QObject.
Следующие значки обозначают текущее состояние перевода каждого контекста:
| состояние | иконка | описание |
|---|---|---|
| Принять / исправить | ![]() |
Все строки в контексте были переведены и прошли проверочный тест. |
| Принять / Предупреждение | ![]() |
Все строки в контексте переведены или помечены как переведенные, но по крайней мере один тест проверки перевода не пройден. встрокаВ представлении вы можете увидеть строку, не прошедшую проверку. |
| Не принимать | ![]() |
По крайней мере одна строка не переведена или не помечена для перевода. |
| отходов | ![]() |
Строки без перевода классов отображаются в тексте благодарности, что означает, что сам контекст больше не принадлежит приложению. |
Выберите строку для перевода
строкаВ представлении перечислены все строки, которые можно перевести в текущем контексте. Выберите строку, чтобы она появилась в области перевода.
Нажмите на значок перед строкой, чтобы изменить ее статус перевода. Галочка, зеленая или желтая, указывает, что строка была переведена и принята. Знак вопроса означает, что либо строка не была переведена, либо перевод не был принят.
Следующие значки обозначают текущий статус перевода каждой строки:
| состояние | иконка | описание |
|---|---|---|
| Принять / исправить | ![]() |
Есть перевод исходной строки (может быть пустым). Пользователь принял перевод и прошел все проверочные тесты. Если перевод пуст, вы можете нажать на значок, чтобы отменить, в настоящее времяконтекстКоличество принятых переводов в столбце «элемент» представления уменьшается на 1. Если lupdate изменяет содержимое строки, ее статус принятия автоматически сбрасывается до непринятого статуса. |
| Принять / Предупреждение | ![]() |
Пользователь принял перевод, но перевод не прошел все проверочные тесты. Ошибка контрольного теста показана впредупреждениеПросмотр. Нажмите на значок, чтобы отозвать утвержденный перевод. Состояние сбрасывается для проверки сбоя, в это времяконтекстКоличество принятых переводов в столбце «Элемент» представления минус 1. |
| Не принимать | ![]() |
Строка прошла все проверочные тесты, но это означает, что пользователь не принял перевод. Нажмите на значок или нажмите Ctrl + Enter, чтобы принять перевод, статус сбрасывается, чтобы принять / исправить, затемконтекстКоличество принятых переводов в столбце «элемент» представления увеличивается на 1. |
| Непереведенные | ![]() |
Строка не переведена. Нажмите на значок, чтобы принять пустой перевод. Статус сбрасывается, чтобы принять / исправить, в это времяконтекстКоличество принятых переводов в столбце «элемент» представления увеличивается на 1. |
| Проверка не удалась | ![]() |
Строка имеет перевод, но перевод не проходит все проверочные тесты. Ошибка проверки будет отображаться впредупреждениеПросмотр. Нажмите на значок или нажмите Ctrl + Enter, чтобы принять перевод, хотя проверка не удалась. Статус сбрасывается на Принять / Предупреждение. Рекомендуется отредактировать перевод, чтобы исправить ошибку проверки. После устранения всех сбоев статус автоматически сбрасывается до неприемлемого. |
| отходов | ![]() |
Строка устарела и больше не используется в контексте. |
разработчиков
Поддержка нескольких языков в приложении Qt очень проста, добавляя небольшие накладные расходы на работу разработчика. Конечно, это снизит производительность во время выполнения.
Укажите источник перевода
Чтобы издатель мог использовать lupdate и lrelease, вы можете указать файл проекта .pro Qt. Источник перевода для каждого языка должен быть указан в разделе ПЕРЕВОДЫ.
Типичный способ записи таков:
Локаль, используемая в имени файла перевода, используется для определения того, какой язык загружать во время выполнения. Для получения дополнительной информации, пожалуйста, обратитесь кQLocale。
Строка пользовательского интерфейса, извлеченная инструментом lupdate из приложения. Он читает .pro-файл приложения, чтобы определить, какие исходные файлы содержат текст, который необходимо перевести. Это означает, что исходные файлы должны быть перечислены в .pro. Если файл не указан, текст не будет найден.
Полный пример .pro с четырьмя исходными файлами перевода:
Если ваш компилятор и среда выполнения используют разные кодировки и вы хотите использовать строки символов, отличные от ASCII, вам необходимо установить CODECFORSRC. Например:
Используйте условия, чтобы скрыть источники QML
Переменная SOURCES является исходным файлом для C ++. Если перечисленные исходные файлы QML или JavaScript существуют, компилятор пытается построить их как C ++. В качестве обходного пути вы можете использовать условные операторы lupdate_only <…>, поэтому инструмент lupdate видит файлы .qml, но компилятор C ++ их игнорирует.
Например, следующий .pro-файл задает 2 qml-файла в приложении:
Вы также можете указать сопоставление по шаблону для исходных файлов .qml. Поиск не является рекурсивным, поэтому вам нужно указать местоположение в каждом каталоге:
Международная заявка
Разработайте приложение так, чтобы оно могло адаптироваться к различным языкам и регионам без технических изменений. Qt пытается сделать вашу интернационализацию максимально простой. Все элементы управления вводом и методы рисования текста предоставляют встроенную поддержку языка в Qt. Но при написании исходного кода вам все равно нужно помнить следующее:
Пусть ваше приложение найдет и загрузит соответствующий файл перевода.
Пусть видимым для пользователя текстом и сочетаниями клавиш Ctrl будет цель для перевода.
Обеспечить контекст для перевода текста.
Устранение неоднозначности того же текста.
Используйте пронумерованные параметры (% n) в качестве заполнителей параметров для замены текста или чисел во время выполнения.
Интернационализированные номера, дата, время, валюта.
Текстовые строки данных тегов переводятся за пределы функции.
Вы можете использовать источники C ++ и QML в одном приложении, и есть даже две строки пользовательского интерфейса источника. Инструмент создает комбинированный файл перевода, и к строкам можно получить доступ из C ++ и QML.
Классы приложений Qt, которые поддерживают интернационализацию, могут ссылаться на:Qt интернационализация。
Процесс перевода исходного кода может ссылаться на:Написать перевод исходного кода、Qt Быстрая Интернационализация и Локализация。
Развернуть перевод
Файлы .qm, необходимые для приложения, должны быть размещены там, где их можно найти, используя загрузочный код QTranslator. Обычно это делается путем указания пути относительно QCoreApplication :: applicationDirPath ().
Обычно для приложений существуют файлы .qm, и если версия Qt не установлена в системе, необходимо также развернуть файл Qt .qm.
В Qt4 существует большой общий файл .qm для каждой локали. Например, файл qt_de.qm содержит все библиотеки немецкого перевода.
В Qt5 файлы .qm разделены по модулям, и существует так называемый файл мета-каталога, который содержит файлы .qm для всех модулей. Имя файла мета-каталога совпадает с именем общего файла Qt4 .qm, поэтому существующий загрузчик работает так же, как и все включенные файлы .qm, представленные ранее.
Однако нет необходимости всегда развертывать все файлы Qt5 .qm. Рекомендуется использовать инструмент lconvert для подключения .qm-файла модуля, соответствующего имени исходного каталога на этапе развертывания. Например, чтобы создать файл перевода на немецкий язык с использованием модулей Qt Core, Qt GUI и Qt Quick, выполните:
Qt Linguist
Qt Linguist — это специальная программа, предназначенная для редактирования ts-файлов, содержащих переводы строк продукта/приложения.
Установить программу можно, выполнив команду (потребуются права администратора):
После установки пакета запустите программу Qt Linguist из панели задач/меню или набрав в командной строке linguist. Затем откройте ts-файл с исходным текстом перевода.
Главное окно Qt Linguist разделено на отдельные области в виде плавающих окон, расположенных вокруг центральной области перевода A. Список контекстов переводов B расположен слева, список строк текущего контекста C, окно с исходным кодом D, где расположена переводимая строка, а также окно со списком переводов E, автоматически предлагаемых утилитой Qt Linguist, и окно предупреждений F расположены соответственно сверху и снизу от области переводов.

После того как загрузили файл переводов, выберите контекст для перевода из списка контекстов B. При этом загружается список строк C для перевода, найденных для этого контекста. При выборе одной из строк строка копируется в поле «Исходный текст» G области переводов A. Введите свой перевод в текстовое поле H, расположенное снизу от переводимой строки.

Чтобы подтвердить перевод, нажмите на кнопку
на панели инструментов или на иконку, расположенную слева от исходной строки в списке строк C.
Повторяйте процесс до тех пор, пока все строки не будут помечены
или
. Затем выберите следующий контекст и продолжайте аналогично переводить строки.
Окно «Похожие переводы» E предлагает возможные переводы для текущей строки, которые берутся из глоссария. Текущий перевод для выбранной строки также присутствует в этом окне. Чтобы выбрать предлагаемый перевод щелкните два раза мышью по нему в окне «Похожие переводы» E или нажмите комбинацию клавиш, указанную справа в строке предлагаемого перевода.
Qt Linguist может автоматически проверить Ваши строки перевода с помощью проверочных тестов. Ошибки, возникшие при проверке текста, отображаются в окне предупреждений F.
Наконец, в окне «Исходники и формы» D отображается контекст, в котором используется текущая переводимая строка.
Когда перевод полностью закончен, выберите пункт меню «File|Save» для сохранения результата.
![]()
Предупреждение
Только помеченные как завершённые (то есть отмечены значками
и
), языковые фразы попадают в бинарный файл переводов, остальные игнорируются.
По окончании работы над переводом ts-файл необходимо преобразовать в qm-файл. Для этого в приложении Qt Linguist выберите пункт меню «File|Release». Обычно после перевода нескольких строк, выполняются пробные запуски приложения, с созданным qm-файлом, чтобы визуально оценить качество перевода. Непереведенные строки при пробном запуске приложения будут отображаться на языке оригинала. Созданный qm-файл нужно поместить в каталог с переводами, расположенный в /usr/share/rosa-media-player/translations (в каждом проекте/приложении свой каталог) и затем запустить ROSA Media Player для проверки правильности перевода.
Qt — трудности перевода
Все что она делает — создает окно с надписью «Hello,World!». Сделаем для нее перевод на русский язык.
Шаг 1. Указание всех строк, для которых требуется сделать перевод
Все строки, которые увидит пользователь должны быть обработаны функциями QObject::tr() или QcoreApplication::translate().
У всех классов Qt, наследуемых от QObject, есть функция-член tr(). Так как мы работаем со строкой в глобальной функции которая не относится ни к какому классу, то используем функцию translate(), которая позволяет указать контекст перевода, то есть класс, к которому он относится (в данном случае — QLabel).
- #include <QtGui>
- #include <QtCore>
- int main( int argc, char *argv[]) <
- QApplication app(argc, argv);
- QLabel label(app.translate( «QLabel» , «Hello, World!» ));
- label.show();
- return app.exec();
- >
В фунцкиях tr() и translate() после переводимой строки можно указать комментарий, который будет показан переводчику во время перевода приложения на другой языка. Комментарии используются для устранения двусмысленности.
Если вам потребуется перевести текст, который находится вне функции, есть два макроса для помощи: QT_TR_NOOP() и QT_TRANSLATE_NOOP(), аналогичные tr() и translate(). Они незаметно помечают текст для извлечения утилитой lupdate, про которую мы поговорим ниже:
- static const char *greeting_strings[] = <
- QT_TR_NOOP( «Hello» ),
- QT_TR_NOOP( «Goodbye» )
- >;
- static const char *greeting_strings[] = <
- QT_TRANSLATE_NOOP( «HelloWidget» , «Hello» ),
- QT_TRANSLATE_NOOP( «HelloWidget» , «Goodbye» )
- >;
При отключении автоматического преобразования из const char * в QString путем компиляции программы с определенным макросом QT_NO_CAST_FROM_ASCII можно найти все строки, которые пропустили.
Когда в середину строки нам понадобится вставлять значения каких-либо переменных, лучше всего использовать функцию arg(). Например, при копировании файлов мы могли бы отображать ход процесса следующим образом:
- void FileCopier::showProgress( int done, int total,
- const QString ¤tFile)
- <
- label.setText(tr( «%1 of %2 files copied.\nCopying: %3» )
- .arg(done)
- .arg(total)
- .arg(currentFile));
- >
Если потребуется изменить порядок аргументов при переводе, то при переводе надо будет поменять переменные с символом % местами, например, вот так:
Переписывать программу из-за этого не потребуется.
Шаг 2. Создание перевода
- Запуск lupdate для извлечения переводимого текста из исходного кода приложения Qt на C++, создавая файл сообщений для переводчиков (файл .ts). Утилита распознает конструкторы tr() и translate() и макросы QT_TR*_NOOP(), описанные выше, и производит файлы .ts (обычно один на каждый язык).
- Обеспечение переводов для исходных текстов в файле .ts, используя Qt Linguist. Так как файлы .ts в формате XML, их можно также отредактировать вручную.
- Запуск lrelease для получения легкого файла сообщений (файл .qm) из файла .ts, удобного только для конечного пользования. Думайте о файлах .ts как об «исходных файлах», и о файлах .qm как об «объектных файлах». Переводчик редактирует файлы .ts, но пользователям нашего приложения требуются только файлы .qm. Оба типа файлов не зависят от платформы и локали.
Обычно надо повторять эти шаги для каждого выпуска приложения. Утилита lupdate делает все возможное по повторному использованию переводов от предыдущих релизов.
Перед запуском lupdate, вам потребуется подготовить файл проектов. Вот как будет выглядеть наш файл проекта (файл helloworld.pro):
TEMPLATE = app
TARGET = release
DEPENDPATH +=.
INCLUDEPATH +=.
SOURCES += main.cpp
TRANSLATIONS += helloworld_ru.ts
Когда вы запускаете lupdate или lrelease, вы должны предоставить имя файла проекта в качестве аргумента командной строки.
Шаг 3. Загрузка файлов переводов в приложении.
В нашем приложении мы должны загрузить QTranslator::load() файлы используя QcoreApplication::installTranslator(). Окончательная версия программы примет вид:
- #include <QtGui>
- #include <QtCore>
- int main( int argc, char *argv[]) <
- QApplication app(argc, argv);
- QTranslator myTranslator;
- myTranslator.load( «helloworld_» + QLocale::system().name());
- app.installTranslator(&myTranslator);
- QLabel label(app.translate( «QLabel» , «Hello, World!» ));
- label.show();
- return app.exec();
- >
Мы создаем объект QTranslator, загружаем в него файл перевода с помощью функции load(). В ней мы указываем начало имени файла нашего перевода. По умолчанию файлы переводов ищутся в папке с программой, но можно указать любую директорию, передав ее имя в качестве второго параметра функции. Расширение «.qm» будет добавлено автоматически. Функция Qlocale::system().name() возвращает имя текущей локали, в моем случае это было ru_RU.UTF-8. Порядок поиска файла переводов функцией load() будет следующим:
- helloworld_ru_RU.UTF-8.qm
- helloworld_ru_RU.UTF-8
- helloworld_ru_RU.qm
- helloworld_ru_RU
- helloworld_ru.qm
- helloworld_ru
- helloworld.qm
- helloworld
Правда когда я попробовал загрузить таким образом файл переводов в Windows XP, у меня ничего не вышло. Оказалось, что (по крайней мере у меня так) функция Qlocale::system().name() все время возвращала значение «С». Поэтому стоит предусмотреть дополнительный способ указания языка интерфейса приложения, например, через диалог настроек программы или параметры командной строки.
Вот и все, наше приложение переведено на русский язык, но есть еще парочка моментов, о которых стоит упомянуть в данной статье.
Дополнительные текстовые строки
Qt содержит внутри около 400 строк, которые так же должны быть переведены на языки которые нам необходимы. В директории $QTDIR/translations можно найти файлы переводов для французского, немецкого и упрощенного китайского, так же как и шаблоны для перевода на другие языки. (Эта директория так же содержит некоторые дополнительные неподдерживаемые переводы, которые могут быть полезны, например, перевод на русский язык).
Обычно эти переводы подгружают так же в фунции main():
- int main( int argc, char *argv[])
- <
- .
- QTranslator qtTranslator;
- qtTranslator.load( «qt_» + QLocale::system().name(),
- QLibraryInfo::location(QLibraryInfo::TranslationsPath));
- app.installTranslator(&qtTranslator);
- .
- >
Обратите внимание на использование QLibraryInfo::location() для обнаружения переводов Qt. Разработчик должен запросить путь к переводам обрабатывая QLibraryInfo::TranslationsPath для этой функции вместо использования переменной среды QTDIR в своих приложениях. Хотя в случаях, когда мы не уверены что у пользователя стоит полная версия Qt, имеет смысл поставлять этот файл переводов вместе с программой и загружать его из директории программы (или любой другой на выбор).
Динамический перевод
Некоторые приложения должны обеспечивать изменения настроек языка пользователя во время работы. Что бы предупредить виджеты об изменениях установленного QTranslators, можно переделать фунцкцию виджета changeEvent() для проверки не является ли событие событием LanguageChange, и обновите текст, отображаемый виджетами, используя функцию tr() обычным способом. Например:
- void MyWidget::changeEvent(QEvent * event )
- <
- if (e->type() == QEvent::LanguageChange) <
- titleLabel->setText(tr( «Document Title» ));
- .
- okPushButton->setText(tr( «&OK» ));
- > else
- QWidget::changeEvent( event );
- >
Все остальные события изменения должны быть обработаны вызовом реализации по умолчанию данной функции.
Список установленных переводов может быть изменен в реакции на событие LocaleChange, или приложение может предоставлять интерфейс пользователю, который позволит ему изменить текущий язык приложения.
Обработчик событий по умолчанию для подклассов QWidget отвечает на событие QEvent::LanguageChange и вызовет эту функцию при необходимости; в других компонентах приложения можно так же заставить виджеты обновить себя отправив им событие LanguageChange.
UPD: Как подсказывает intellinside, классы графического интерфейса пользователя, сгенерированные Qt Designer’ом, имеют функцию retranslateUi(), которую можно вызвать для динамического изменения языка приложения.





