Qt国际化

Qt对软件国际化提供了很好的支持,专门提供了相关的工具进行不同语言的翻译,对于有国际化需求的软件来说,让开发国际版程序变的容易很多。下面是qt国际化需要用到的工具:

工具

作用

输入

输出

Lupdate

从C++源代码中提取要翻译的文本

C++工程

.ts文件

Linguist

打开.ts文件,引导开发人员完成翻译工作,并保存到.ts文件

.ts文件

.ts文件

lrelease

更加.ts文件中原文与译文的对于关系,生成.qm文件,程序运行时根据.qm文件实现动态翻译

ts文件

.qm文件

1.       实现步骤

a)        创建Qt工具,编写代码,代码中需要显示的文本都用tr()函数处理

b)        使用lupdate工具提取翻译文本,生成.ts文件

c)        使用Linguist完成翻译工作

d)     使用lrelease生成.qm文件

e)        修改代码,加载.qm文件

2.       Lupdate工具使用

首先在.pro文件中添加要生成的翻译文件,例如:TRANSLATIONS = myTest_zh_CN.ts。

文件myTest_zh_CN.ts即为后面执行lupdate生成的文件,文件名可以随便写,但是最好根据工程名及目标翻译语言定义文件名,例如上面的文件名,myTest为工程名,后面的zh_CN代表中文_中国。

然后打开命令行,切换到当前工程目录下,执行命令:lupdate myTest.pro,命令执行成功后会工程目录下生成myTest_zh_CN.ts文件。

3.       Linguist工具使用

首先打开linguist工具,选择打开myTest_zh_CN.ts文件,界面如下:

 

4.       Lrelease工具使用

完成上面的翻译工作后,打开命令行,切换到当前工程目录,执行命令:lrelease myTest.pro. pro即可生成.qm文件。

5.       代码加载

进人main.cpp文件,添加头文件#include <QTranslator>,然后在“QApplication a(argc, argv);”代码下添加如下代码:

QTranslator translator;

translator.load("myTest_zh_CN.qm", qApp->applicationDirPath());

qApp->installTranslator(&translator);

6.       扩展

上面讲述的内容是Qt国际化的通用做法,网上提到qt国际化大多都是按这样说的。下面的内容是对qt国际化的一些扩展,网上资料比较少。

Ø  Qt自动生成的文本翻译

对于Qt自动生成的文本,例如工具栏上按钮文字,菜单文本等,Qt为我们提前提供了.qm文件,在Qt安装目录西的translations文件加中。例如下面是中文系统相关的.qm文件

 

Ø  一个工程可以添加多个.qm文件只需定义多个QTranslator对象即可。

Ø  动态库与静态库中文本翻译问题

不论动态库或者静态库,需要在主工程的main函数中,按照添加多个.qm文件的方法,load库(动态库或静态库)自己的.qm文件。

Ø  Lupdate手动指定翻译文件

这里要说的是,不需要再qt工程文件(.pro)文件中定义翻译文件名,可以利用lupdate工具生成.ts文件,命令如下:

lupdate -codecfortr utf-8 myTest.pro -ts myTest.ts

Ø  不使用linguist翻译

我们可以直接打开.ts文件编辑,完成翻译工作,可以不需要借助linguist。Lupdate生成的.ts文件是xml文件,我们可以利用可以编辑xml的编辑器直接编辑.ts文件,例如下面如下:

<source>Services</source>为待翻译文本

<translation>服务</translation>为翻译后的文本,根据格式翻译保存即可。

 

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE TS>
 3 <TS version="2.0" language="zh">
 4 <context>
 5     <name>MAC_APPLICATION_MENU</name>
 6     <message>
 7         <location filename="../src/gui/kernel/qapplication.cpp" line="+2316"/>
 8         <source>Services</source>
 9         <translation>服务</translation>
10     </message>
11     <message>
12         <location line="+1"/>
13         <source>Hide Others</source>
14         <translation>隐藏其他</translation>
15     </message>
16     <message>
17         <location line="+1"/>
18         <source>Show All</source>
19         <translation>全部显示</translation>
20     </message>
21     <message>
22         <location line="+1"/>
23         <source>About %1</source>
24         <translation>关于 %1</translation>
25     </message>
26 </context>

 

 

posted @ 2020-07-01 17:18  品山  阅读(338)  评论(0编辑  收藏  举报