Разработка графического интерфейса с помощью библиотеки Qt3 | ||
---|---|---|
Пред. | Глава 15. Интернационализация | След. |
Перевод Qt-приложений, которые содержат в себе вызовы tr(), выполняется в три приема;
Утилитой lupdate извлекаются все строки из исходного текста приложения.
Выполняется перевод строк, с помощью утилиты Qt Linguist.
С помощью утилиты lrelease создается двоичный файл .qm с переводом, который потом может быть загружен приложением.
В качестве примера, рассмотрим процесс перевода приложения Spreadsheet, которое было написано нами в Главе 3. Оно уже содержит все необходимые вызовы tr().
Прежде всего, необходимо внести изменения в файл проекта .pro, чтобы указать -- какие языки будут поддерживаться приложением. Допустим, что мы собираемся включить поддержку немецкого, французского и русского языков, дополнительно к английскому, тогда необходимо в файл spreadsheet.pro добавить раздел TRANSLATIONS:
TRANSLATIONS = spreadsheet_de.ts \
spreadsheet_fr.ts \
spreadsheet_ru.ts
Здесь мы указали три файла переводов: для немецкого, французского
и русского языков. Эти файлы будут созданы при первом запуске утилиты
lupdate, а на последующих запусках будут
просто дополняться.Обычно исходные файлы с переводом имеют расширение .ts. Они записываются в формате XML и потому занимают больше места на диске, чем скомпилированные файлы с переводом .qm. Для тех, кому это интересно -- .ts означает "translation source" (исходный текст перевода), а .qm -- "Qt message".
Допустим, что мы уже находимся в каталоге с исходными текстами приложения Spreadsheet. Теперь запускаем lupdate из командной строки:
lupdate -verbose spreadsheet.pro
Ключ -verbose -- необязательный. Он
просто заставляет lupdate выводить более
подробную информацию в ходе своей работы. Ниже приведен примерный
вывод, полученный во время работы утилиты:
Updating spreadsheet_de.ts ...
0 known, 101 new and 0 obsoleted messages
Updating spreadsheet_fr.ts ...
0 known, 101 new and 0 obsoleted messages
Updating spreadsheet_ru.ts ...
0 known, 101 new and 0 obsoleted messages
Каждая строка, которая "завернута" в вызов
tr(), заносится в .ts, с пустым местом для перевода. Строки, которые
находятся в файле .ui, так же включаются
в исходный файл перевода.По-умолчанию, lupdate предполагает, что все строки, завернутые в вызовы tr(), набраны в кодировке Latin-1. Если это не так, необходимо указать элемент CODEC в файле .pro, например так:
CODEC = EUC-JP
Это необходимо делать в дополнение к вызову QTextCodec::setCodecForTr() в приложении.Перевод, в файлы spreadsheet_de.ts, spreadsheet_fr.ts и spreadsheet_ru.ts, добавляется переводчиком, с помощью утилиты Qt Linguist.
Чтобы запустить Qt Linguist, в среде Windows, выберите пункт Qt 3.2.x | Qt Linguist в меню Пуск, в среде Unix -- наберите команду linguist. Затем, с помощью меню File|Open, откройте файл с исходным текстом перевода.
С левой стороны главного окна Qt Linguist находится список контекстов переводов. Для Spreadsheet существуют следующие контексты: "FindDialog", "GoToCellDialog", "MainWindow", "SortDialog" и "Spreadsheet". В верхней части с правой стороны находится список строк для текущего контекста. Каждая строка отображается вместе с переводом и флагом Done ("Готово"). В средней области, с правой стороны, вводится текст перевода для текущей строки. И внизу находится список переводов, автоматически предлагаемых утилитой Qt Linguist.
По окончании работы над переводом, файл .ts необходимо преобразовать в файл .qm. Для этого, в приложении Qt Linguist выберите пункт меню File|Release. Обычно, после перевода нескольких строк, выполняются пробные запуски приложения, с созданным файлом .qm, чтобы визуально оценить качество перевода.
Рисунок 15.2. Qt Linguist в действии.
lrelease -verbose spreadsheet.pro
Предположим, что мы сделали перевод на русский язык 19-ти строк,
причем установили признак Done для
17-ти из них. В этом случае мы получим от lrelease примерно такой вывод:
Updating spreadsheet_de.qm ...
0 finished, 0 unfinished and 101 untranslated messages
Updating spreadsheet_fr.qm ...
0 finished, 0 unfinished and 101 untranslated messages
Updating spreadsheet_ru.qm ...
17 finished, 2 unfinished and 82 untranslated messages
Непереведенные строки, при пробном запуске приложения, будут
отображаться на языке оригинала. Флаг Done никак не используется утилитой lrelease, он предназначен исключительно для
переводчика, чтобы напоминать о том, какие строки имеют окончательный
перевод, а какие требуют уточнения.В случае внесения изменений в исходный код приложения, содержимое файлов .ts может "устареть". Чтобы этого не происходило нужно всякий раз запускать утилиту lupdate, добавлять перевод для вновь появляющихся строк и пересобирать файлы .qm. Некоторые команды разработчиков синхронизируют перевод так часто, насколько это только возможно, другие предпочитают дождаться окончательного релиза приложения и только тогда приступают к переводу.
Утилиты lupdate и Qt Linguist достаточно "умны". Переведенные строки, необходимость в которых уже отпала, все равно сохраняются в исходных файлах с переводами, на тот случай, если они могут понадобиться в будущем. При обновлении файлов .ts, утилита lupdate использует интеллектуальный алгоритм объединения, который помогает избежать лишней работы по переводу одинаковых строк в различных контекстах.
За дополнительной информацией о программах Qt Linguist, lupdate и lrelease, обращайтесь к справочному руководству Qt Linguist, которое доступно по адресу: http://doc.trolltech.com/3.2/linguist-manual.html. Это руководство содержит полное описание пользовательского интерфейса программы и пошаговый самоучитель для программистов.
Пред. | В начало | След. |
Динамическое переключение языков. | На уровень выше | Разработка справочной системы приложения. |