Qt--多语言翻译

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

ts文件格式

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

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
    <name>QLineEdit</name>
    <message>
        <location filename="../src/gui/widgets/qlineedit.cpp" line="+2680"/>
        <source>&amp;Undo</source>
        <translation>撤消(&amp;U)</translation>
    </message>
    <message>
        <location line="+4"/>
        <source>&amp;Redo</source>
        <translation>恢复(&amp;R)</translation>
    </message>
    <message>
        <location line="+7"/>
        <source>Cu&amp;t</source>
        <translation>剪切(&amp;T)</translation>
    </message>
    <message>
        <location line="+4"/>
        <source>&amp;Copy</source>
        <translation>复制(&amp;C)</translation>
    </message>
    <message>
        <location line="+4"/>
        <source>&amp;Paste</source>
        <translation>粘贴(&amp;P)</translation>
    </message>
    <message>
        <location line="+5"/>
        <source>Delete</source>
        <translation>删除</translation>
    </message>
    <message>
        <location line="+6"/>
        <source>Select All</source>
        <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文件,翻译填充上<translation>标签,然后使用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右键菜单也汉化了

qm

猜你喜欢

转载自blog.csdn.net/GG_SiMiDa/article/details/81238839