QT国际化与多语言实现
2015-11-16 13:25
1466 查看
1.Unicode编码
Unicode是一种支持世界上绝大多数文字系统的字符编码标准。QT中的QString类用于将字符串存储为Unicode。
2.应用程序如何翻译QT文件
如果想让应用程序能使用多种语言,必须做2件事情:1.确保每一个可见的字符串都使用tr()函数
2.在应用程序启动时,载入了一个翻译文件(.qm)
tr()函数是定义在QObject中的一个静态函数,并且可以在任何一个定义了Q_OBJECT宏的子类中重写。在编写QObject子类的代码是,可以不拘泥任何形式直接使用tr()。如果有可以使用的翻译,tr()调用就返回其翻译函数;否则,就返回其原有的文本内容。在不是Qobjec的类中,可是使用带QObject类的前缀方式使用QObject::tr()方式。
3.翻译应用程序
翻译一个含有tr()调用的QT应用程序就是一个由三步构成的过程:1.运行lupdate,从应用程序的源代码提取所有的用户可见的字符串。
2.使用QT Linguist 翻译该应用程序
3.运行lrelease,生成二进制的.qm文件,应用程序可以使用QTanslator加载这个文件。
4.QT工具介绍
QT为国际化准备了3个工具(1)lupdate.exe(用来生成ts文件的工具)
(2)lrelease.exe(用来发布qm工具)
(3)linguist.exe (用来做翻译)
5.ts文件介绍
ts文件,说白了就是一个xml文件;这个文件包含的提取的需要翻译的源字符串,以及改源对应的翻译串;下图是使用qt的linguist打开的ts文件,红色框的部分,代表这个需要翻译的字符串的分组,也就是在Qt工具Linguist会根据
QString strans = QT_TRANSLATE_NOOP("GROUP", "Hello World");
QT_TRANSLATE_NOOP有2个字符串参数,第一个参数用来分组,为了方便分类整理就是下图的ConfirmForm,第二个参数为源串,也就是需要翻译的字符串
上面说过ts文件就是xml文件,它在xml中这个表示的
6.使用脚本调用生成ts文件和发布qm文件
QT生成ts文件的命令1.在vs下使用Qt工程时,新建一个项目时,会自动包含QT的trans文件,也就是ts文件
那我们是如何更新ts文件的
使用lupdate更新ts文件,使用lrelease发布qm文件,但是以上是基于vs工具的使用更新,使用,发布;
先来看一下qt的调用命令lupdate的命令的帮助
主要看红色部分的调用 先看一下-pro
-pro命令调用的参数为 lupdate 路径/xx.pro
这个命令的功能的更新xx.pro工程的ts文件,当然前提是xx.pro有ts文件
下图是调用方式以及结果 (楼主的环境变量没有配置好,所以调用lupdate命令时候有问题,所以直接用的lupdate.exe的路径)
看一下结果:
红色部分的warning:没有ts文件
黄色部分的error:ts文件有误
绿色部分调用成功下图是生成的ts文件
补充说明部分:如何给一个工程添加一个ts文件,首先要在pro中添加一个xx.ts,然后保证这个ts文件格式正确,然后执行qmake就好啦
那么,如何在生成一个vs工程的ts文件
2种方法:
1.将xxx.sln生成xxx.pro,再调用lupdate xxx.pro
2.使用 lupdate .路径\ -ts 生成ts路径 如红色部分所示
生成的ts与lupdate xx.pro结果有一定的区别,生成的ts文件中带有文件信息
l
主要说明一下
1.支持相对路径
2.支持多个文件文件夹参数 include\ stc\ -ts
3.-recursive 为表示包括该文件夹的子文件夹
相关文章推荐
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- ASP编码必备的8条原则
- 浅谈Ruby on Rails的国际化
- XML指南——XML编码
- C#中字符串编码处理
- ExtJS中文乱码之GBK格式编码解决方案及代码
- 程序员趣味读物 谈谈Unicode编码
- 文本文件编码方式区别
- C语言安全编码之数值中的sizeof操作符
- C#实现获取文本文件的编码的一个类(区分GB2312和UTF8)
- VC中BASE64编码和解码使用详解
- 计算机中的字符串编码、乱码、BOM等问题详解
- Base64编码解码原理及C#编程实例
- C#编码好习惯小结
- javascript编码的几个方法详细介绍
- JavaScript面对国际化编程时的一些建议
- UTF8编码开发中页面空白问题的解决方法
- php生成固定长度纯数字编码的方法
- 重新restore了mysql到另一台机器上后mysql 编码问题报错