i) Qt的翻译机制入门:
0)以tr("<英文文本>")封装需要翻译的文本,比如:ui->label->setText(tr("Date"));
1)在工程.pro文件中写入: TRANSLATION += <.pro's name>_ZH_CN.ts #这里语言和区域名字一定要严格,否则之后生成的同名.qm文件无法被Qt翻译器加载# 2)利用命令行工具lupdate -verbose -no-obsolete <.pro'path and name>生成.ts文件。-no-obsolete参数表示生成的.ts文件中检测并剔除代码中不再存在的tr("< 英文文本>")。使用Qt Creator的“工具”->"外部"->"Qt语言家"->"更新翻译(lupdate)",等同于上述的lupdate -verbose,即:跳过检测过期的翻译原始文本。 3)在工程的资源文件中添加这个.ts文件 4)利用Qt翻译家翻译这个.ts文件并发布为.qm文件 5)把.qm文件添加入资源文件中 6)在main.cpp中写如下语句:QTranslator translator; translator.load(<资源文件中的.qm文件路径和名字>); 7)如果6)的返回值为true,那么把main.cpp中的QApplication对象执行.installTranslator(&translator); 这样翻译文件就加载完成了。 注意:若qt可以找到正确命名后的qm文件但却无法加载qm文件,可以先删除build目录再编译运行。ii) tr()函数的参数如果为宏定义的字符串,那么这种字符串是无法被翻译的。
iii) tr()函数的参数如果是变量,(似乎?)需要通过tr("%1").arg(<QString>)解决。
iv) 任何需要翻译的文本所在的类的.h文件中均需要声明Q_OBJECT宏,否则lupdate工具无法检测到需要翻译的原始文本。
v) 建议需要翻译的原始文本以英文书写。因为这样会使因字符编码差异造成的兼容性问题最小化。