Локализация программ на Qt

qt_logo_2016-svg

Локализация — это адаптация программы к культуре какой-либо страны, в частности перевод пользовательского интерфейса.

В Qt есть инструменты для создания мультиязычной программы. Qt позволяет автоматически отобразить интерфейс программы на языке операционной системы, либо сделать так, чтобы пользователь мог выбрать язык интерфейса.

Далее представлена пошаговая инструкция локализации программы. С помощью инструкции достигается максимальная автоматизированность сборки и простота развертывания программы.

 

    1. Все строки программы, которые заключаются в двойные кавычки пишем на английском языке и помещаем в функцию tr(). Например, строка "Hello, world." в программе должна выглядеть следующим образом: tr("Hello, world.").
    2. В каталоге проекта создаем папку Translations. В этой папке будут размещаться файлы переводов для различных языков.
    3. Предположим, что проект называется discover. Тогда в файл discover.pro помещаем следующие строки:
      1
      2
      3
      4
      5
      6
      TRANSLATIONS += \
          Translations/discover_ru.ts
       
      tr.commands = lupdate $$_PRO_FILE_ && lrelease $$_PRO_FILE_
          PRE_TARGETDEPS += tr
          QMAKE_EXTRA_TARGETS += tr

      В первых строках в переменную TRANSLATIONS помещаются пути к файлам переводов с раcширением ts. Сейчас задан только один файл с суффиксом _ru для русского перевода. Для других языков нужно использовать другие суффиксы. Файлы не нужно создавать самостоятельно, они будут сгенерированы автоматически, главное, чтобы существовала папка, в которой файлы будут размещаться.
      Следующие строки отвечают за автоматическую генерацию файлов перевода.

    4. Запускаем сборку проекта.
      В папке Translations появятся два файла с одинаковыми именами, но разными расширениями: ts и qm. Файл *.ts — текстовый файл на языке XML, он нужен для редактирования перевода. Файл *.qm — объектный файл, создается на основе файла *.ts и используется программой для перевода строк, которые помещены в функцию tr().
      При сборке программы, с помощью утилиты lupdate, анализируется файл проекта *.pro, в котором перечислены все файлы исходного кода. Утилита найдет в файлах исходного кода строки, которые помещены в функцию tr(), и сгенерирует файл или файлы *.ts с этими строками. Если файл *.ts уже существует, то он будет обновлен с учетом уже содержащихся в нем строк и новых найденных.
      После обновления файлов *.ts утилита lrelease обрабатывает их и создает файлы *.qm.
    5. Открываем файл *.ts в программе Qt Linguist, которая идет вместе с Qt. Эта программ позволяет редактировать перевод.
    6. Редактируем перевод и сохраняем файл.
    7. Собираем проект, чтобы получить новый файл *.qm.
    8. В проекте создаем файл ресурсов Qt (*.qrc).
      Этот файл позволяет интегрировать другие файлы в исполняемый файл, чтобы не таскать файлы вместе с исполняемым и облегчить развертывание приложения.
    9. В файле ресурсов добавляем префикс «/» (без кавычек).
    10. К префиксу «/» добавляем файлы *.qm (в данном случае только файл discover_ru.qm). Получим следующую структуру ресурсов:qt-qrc-translation
    11. В функции main() разместим следующий код:
      1
      2
      3
      4
      5
      6
      7
      QApplication a(argc, argv);
       
      QTranslator translator;
      translator.load(":/Translations/discover_" + QLocale::system().name());
      a.installTranslator(&translator);
       
      MainWindow w;

      Перевод загружается и устанавливается в строках 3-5. Имя файла перевода генерируется на основе языка операционной системы, который возвращается функией QLocale::system().name(). Таким образом загружается файл перевода *.qm соответствующий языку системы. В начале пути к файлу стоит двоеточие «:», что означает, что файл будет загружаться из ресурсов *.qrc, а не из файловой системы.
      Примечание: объект MainWindow (основное окно программы) нужно создавать после установки перевода, иначе строки в конструкторе этого объекта не будут переведены.

    12. Собираем проект, запускаем программу и радуемся переводу.

Более подробно о локализации можно прочитать в официальной документации Qt.

-->
X
Обратный звонок