1、在我们对Qt开发的应用程序进行国际化时,分为两部分,一部分是受开发人员控制的,比如我们在程序中用到的tr;另一部分是不受我们控制的,比如触发显示一个Qt提供的对话框,如QColorDialog,里面的内容也需要国际化,但似乎却不受我们控制,其实这部分翻译工作Qt已经帮我们做好了,有现成的.ts文件供我们使用
2、对于受我们控制的我们暂且用AppTranslator来完成翻译,不受我们控制的我们用SysTranslator来完成翻译,具体步骤如下:
–在Qt安装目录下的Src下找到对应的qt_zh_CN.qm文件,复制到当前项目的资源文件夹中,并添加到资源中
–如果没有,则找到文件qt_zh_CN.ts,复制到当前项目中,用lrelease生成qt_zh_CN.qm然后添加到项目资源中;在生成qt_zh_CN.qm前往往需要在qt_zh_CN.ts中作如下修改:
----在QColorDialog上下文中添加Pick Screen Color的翻译
<context>
<name>QColorDialog</name>
...
<message>
<source>&Pick Screen Color</source>
<translation>拾取屏幕颜色</translation>
</message>
...
</context>
----添加对话框确定和取消按钮的翻译
<context>
<name>QPlatformTheme</name>
<message>
<location filename="../src/widgets/qdialogbuttonbox.cpp" line="+42"/>
<location line="+18"/>
<source>OK</source>
<translation>确定</translation>
</message>
<message>
<location line="+54"/>
<source>Cancel</source>
<translation>取消</translation>
</message>
</context>
3、最后通过lrelease工具,我们得到了两份翻译文件:app_zh_CN.qm和qt_zh_CN.qm。app_zh_CN.qm通过在项目的.pro中添加:
TRANSLATIONS = app_zh_CN.ts
通过lupdate和lrelease便可得到程序的翻译文件:app_zh_CN.qm
4、安装翻译文件:
假设文件路径为项目根目录下的 Languages/qm/,并已加载到资源中
QTranslator AppTranslator;
QTranslator SysTranslator;
AppTranslator.load(QString(":/Languages/qm/app_zh_CN.qm");
SysTranslator.load(QString(":/Languages/qm/qt_zh_CN.qm");
qApp->installTranslator(&AppTranslator);
qApp->installTranslator(&SysTranslator);
5、最后效果: