Qt多国语言动态切换(含源代码)

Qt中文国际化  (含高阶做法)

 

作者:melon

日期:2019/7/15

 

1. 国际化需要用到的工具

lrelease.exe、lupdate.exe、linguist.exe(非必须),这些工具在Qt5.12.2的bin文件夹都可以找到

 

lupdate.exe ---- 用于扫描ts文件中的字符(必须使用tr或者qsTr等函数注册)

lrelease.exe ---- 用于生成qm翻译文件

linguist.exe  ---- 可以打开ts和qm的文件,在里面可以对ts文件的字符进行翻译

 

2. 国际化步骤详解(翻译中文简体、英文)

(1)使用lupdate生成ts翻译文件(不是必须步骤,可以直接跳到第2步)

lupdate -ts zh_CN.ts

lupdate -ts en.ts  

 

(2)使用lupdate扫描需要翻译文件的文字

lupdate –recursive <path> -ts zh_CN.ts

lupdate–recursive <path> -ts en.ts

-recursive 这个命令是遍历path所有的文件以及子文件夹

-ts 生成扫描完成的zh_CN.ts,指定输出文件名为zh_CN.ts

也可以指定扫描文件,如 lupdate main.qml Button.qml -ts zh_CN.ts

上面就是指定扫描main.qml和Button.qml

 

(3)使用linguist打开zh_CN.ts和en.ts,进行文字翻译

翻译好保存退出

(4)使用lrelease生成最终的qm翻译文件

lrelease zh.ts -qm zh.qm

lrelease en.ts -qm en.qm

 

(5)使用QTranlator加载qm文件(注意路径),注册到QApplication即可

translator->load("zh.qm")

qApp->installTranslator(translator);

 

 

高阶做法(自定义xml,同时兼容linguist)

 

1.根据ts文件格式自定义自己的xml文件(ts本身的格式就是xml)

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE TS>

<TS version="2.1" language="zh_CN">

<context>

    <name>Charater</name>

    <message>

        <location filename="Charater.js" line="7"/>

        <source>ChineseLocalize</source>

        <translation>中文国际化</translation>

    </message>

    <message>

        <location filename="Charater.js" line="8"/>

        <source>ExchangeLanguage</source>

        <translation>切换语言</translation>

    </message>

</context>

</TS>

每一个字段存在<message>中,<source>是原文,<translation>是翻译后的文字

2.使用XmlListModel读取xml文本

 

3.将读取到的文字动态绑定到需要用到的属性上即可实现动态语言切换,非常高效方便,推荐使用

 

 

注意:

  1. 如果在qm文件没有找到翻译的文本,会使用原始的文本
  2. 在C++和js文件定义tr(“中文”)和qsTr(“中文”)扫描出来的会是乱码,除非把中文换成unicode字符,但是这样可读性很差

 

建议:

  1. 以英文为初始语言
  2. 如果需要更多其它扫描规则,自行查阅lupdate用法(使用命令行即可查看)
  3. 需要翻译的文字统一放在一个文件方便管理,可以自定义多国语言的xml文件,利用linguist翻译,自行读取xml的翻译好的文字,个人觉得这是一种效率更高而且更加灵活方便的做法,既去除了qsTr和Qt本地化工具的限制,又可以做到和Qt本地化工具的完美兼容

 

源码链接:https://download.csdn.net/download/weixin_28927079/11357386

猜你喜欢

转载自blog.csdn.net/weixin_28927079/article/details/95998460