Qt--多语言翻译

    • ts文件格式
    • lupdate、lrelease
    • QTranslator
    • Bug

Qt使用lupdate工具导出ts文件来记录需要翻译的文本信息,经过翻译后,再使用lrelease工具生成qm文件,然后在程序中加载qm文件的方式来实现多语言。

ts文件格式

ts文件是xml格式的文件文件,格式如下所示



<TS version="2.1" language="zh_CN">
<context>
    <name>QLineEditname>
    <message>
        <location filename="../src/gui/widgets/qlineedit.cpp" line="+2680"/>
        <source>&Undosource>
        <translation>撤消(&U)translation>
    message>
    <message>
        <location line="+4"/>
        <source>&Redosource>
        <translation>恢复(&R)translation>
    message>
    <message>
        <location line="+7"/>
        <source>Cu&tsource>
        <translation>剪切(&T)translation>
    message>
    <message>
        <location line="+4"/>
        <source>&Copysource>
        <translation>复制(&C)translation>
    message>
    <message>
        <location line="+4"/>
        <source>&Pastesource>
        <translation>粘贴(&P)translation>
    message>
    <message>
        <location line="+5"/>
        <source>Deletesource>
        <translation>删除translation>
    message>
    <message>
        <location line="+6"/>
        <source>Select Allsource>
        <translation>选择全部translation>
    message>
context>
TS>

解释说明下各标签含义

<context>
    <name>类名name>
    <message>
        <location 定位到源文件位置,这个标签可以没有/>
        <source>源文件中tr("***")中的需要翻译的文本source>
        <translation>翻译后的文本translation>
    message>
context>

lupdate、lrelease

在.pro文件中加上如下一行

TRANSLATIONS = app_zh_CN.ts app_zh_CN.qm

即表示将源码中使用到tr的地方导出到app_zh_CN.ts,然后编译成app_zh_CN.qm

这个过程需要使用到两个工具,就是lupdatelrelease,在Qt的安装目录下可以找到这两个命令
使用方式如下:

lupdate yourapp.pro
lrelease app_zh_CN.ts

当然如果你使用QtCreator,在菜单项的Tools->External->Qt语言家中可以直接点击使用
先使用lupdate生成ts文件,然后使用编辑器或者Qt自带的lingust工具打开ts文件,翻译填充上标签,然后使用lrelease命令即可生成序列化后的qm文件。

QTranslator

在程序初始化代码中,书写如下代码即可加载qm语言翻译包

// 加载app自定义语言包
QTranslator *translator = new QTranslator(qApp);
translator->load(qm);
qApp->installTranslator(translator);

// 加载qt自带语言包
QTranslator *qt_translator = new QTranslator(qApp);
qt_translator->load(QLocale(), "qt", "_", ":/lang");
//qt_translator->load(":/lang/qt_zh_CN.qm");
qApp->installTranslator(qt_translator);

Bug

这里指出qt自带语言包qt_zh_CN.ts中的一个bug,改bug导致加载qt_zh_CN.qmQMessageBoxQDialogButtonBox中的标准按钮仍然无法汉化显示。

解决方法如下:

打开qt_zh_CN.ts后将QDialogButtonBox替换成QPlatformTheme,然后使用lrelease,重新导出qt_zh_CN.qm即可。

参考https://bugreports.qt.io/browse/QTBUG-39180

懒得操作的同学可以直接到我的百度网盘下载一份直接用,我已经修复好的qt_zh_CN.tsqt_zh_CN.qm文件
https://pan.baidu.com/s/1f0GgqSskRJjXRh3THWUTrA

替换上新的qt_zh_CN.qm后可以发现,QDialogButtonBox中的Open和Cancle按钮已经汉化了,QLineEdit右键菜单也汉化了

Qt--多语言翻译_第1张图片

你可能感兴趣的:(Qt,品读Qt5)