一个基础的翻译示例和一些注意事项
示例目录
1
2
3
4
5
6
7
8
9 QtTranslation/
├── Languages
│ ├── en.qm
│ ├── en.ts
│ ├── Languages.qrc
│ ├── zh_CN.qm
│ └── zh_CN.ts
├── main.cpp
└── QtTranslation.pro
注意事项
- 将翻译文件(ts后缀)生成的qm后缀文件用资源文件(
Languages.qrc
)包括以供程序引用; translator.load(":/zh_CN.qm")
需要以”:/“为前缀引用,不能使用”qrc:/“为前缀引用,否则load返回错误;- 使用
QObject::tr
翻译原因是该翻译的上下文为QObject对应ts文件的是<name>QObject</name>
的值; - 翻译上下文使用不正确,明明是加载成功的语言文件就是翻译不成功,很多是因为这个上下文导致;
- 可使用
QCoreApplication::translate
接口指定上下文,如用QCoreApplication::translate("QObject", "start")
指定”QObject”上下文标识。
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTranslator translator;
if (! translator.load(":/zh_CN.qm")) {
qDebug()<<"Failed to load translation file!";
}
qApp->installTranslator(&translator);
qDebug()<<QObject::tr("start")<<QObject::tr("end");
qDebug()<<QObject::tr("open")<<QObject::tr("close");
qApp->removeTranslator(&translator);
if (! translator.load(":/en.qm")) {
qDebug()<<"Failed to load translation file!";
}
/* Switch language */
qApp->installTranslator(&translator);
qDebug()<<QObject::tr("start")<<QObject::tr("end");
qDebug()<<QObject::tr("open")<<QObject::tr("close");
return 0;
}
QtTranslation.pro 项目文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 QT += core
QT -= gui
CONFIG += c++11
TARGET = QtTranslation
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
RESOURCES += \
Languages/languages.qrc
TRANSLATIONS += \
Languages/en.ts \
Languages/zh_CN.ts
zh_CN.ts 中文翻译文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<TS version="2.0" language="zh_CN">
<context>
<name>QObject</name>
<message>
<source>start</source>
<translation>开始</translation>
</message>
<message>
<source>end</source>
<translation>结束</translation>
</message>
<message>
<source>open</source>
<translation>打开</translation>
</message>
<message>
<source>close</source>
<translation>关闭</translation>
</message>
</context>
</TS>
en.ts 英文翻译文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<TS version="2.0" language="en">
<context>
<name>QObject</name>
<message>
<source>start</source>
<translation>Start</translation>
</message>
<message>
<source>end</source>
<translation>End</translation>
</message>
<message>
<source>open</source>
<translation>Open</translation>
</message>
<message>
<source>close</source>
<translation>Close</translation>
</message>
</context>
</TS>
Languages.pri 文件
1
2
3
4
5
6 <RCC>
<qresource prefix="/">
<file>en.qm</file>
<file>zh_CN.qm</file>
</qresource>
</RCC>
程序输出
1
2
3
4 "开始" "结束"
"打开" "关闭"
"Start" "End"
"Open" "Close"
示例地址
https://github.com/aeagean/QtTranslation.git