Qt语言文件的自动编译

1. 登记ts目标

QMake工程加入ts文件位置和自动编译配置
1
2
3
4
5
...

CONFIG += lrelease embed_translations

TRANSLATIONS += i18n/app_zh.ts

CONFIG的详情见[1]

Qt Linguist 会根据 TS 文件名自动设置区域[2]

2. 创建ts文件

使用IDE创建:
  1. Qt Creator打开工程文件
  2. 菜单→工具→外部→Qt预言家→更新翻译
使用命令行创建:

运行

1
lupdate project.pro

3. 翻译ts文件中的条目

使用Qt Linguist打开ts文件,翻译条目。

4. 编译ts文件

使用IDE创建:
  1. Qt Creator打开工程文件
  2. 菜单→工具→外部→Qt预言家→发布翻译
使用命令行创建:

运行

1
lrelease project.pro
自动编译:

如果工程中有 CONFIG += lrelease embed_translations,则编译时会自动调用 lrelease 编译 TRANSLATIONSEXTRA_TRANSLATIONS 中的文件,并将生成的 .qm 文件通过自动生成的资源文件嵌入到可执行文件中。

5. 加载qm文件

下面是一个使用翻译文件的Qt程序的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
#include <QApplication>
#include <QTranslator>
...

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTranslator translator;
translator.load(":/i18n/app_zh"); // 加载':/i18n/app_zh.qm'文件
app.installTranslator(&translator);
...
return app.exec();
}

参考

  1. Variables | qmake Manual

    展开

    CONFIG

    ...

    The following CONFIG values control compiler and linker flags:

    Option Description
    ... ...
    lrelease Run lrelease for all files listed in TRANSLATIONS and EXTRA_TRANSLATIONS. If embed_translations is not set, install the generated .qm files into QM_FILES_INSTALL_PATH. Use QMAKE_LRELEASE_FLAGS to add options to the lrelease call. Not set by default.
    embed_translations Embed the generated translations from lrelease in the executable, under QM_FILES_RESOURCE_PREFIX. Requires lrelease to be set, too. Not set by default.
    ... ...

    QM_FILES_RESOURCE_PREFIX

    Specifies the directory in the resource system where .qm files will be made available by CONFIG += embed_translations.

    The default is :/i18n/.

  2. 超越 C++ 的 Qt 翻译 - 知乎