登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

UNIX & GNU/Linux

UNIX & GNU/Linux,Q群17022216,欢迎Linuxer

 
 
 

日志

 
 

Qt国际化(1)——工作  

2010-04-08 19:18:03|  分类: 普通编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
   <<scrum 原创,转载请注明出处>>
from:http://blog.chinaunix.net/u2/66512/showart_545117.html
       Qt
中的国际化方法与GNU gettext类似,它提供了tr()函数与gettext()函数对应,而翻译后的资源文件则以.qm来命名,且其国际化的机制与它的元对象系统密切相关。

在支持国际化的过程中,程序员的工作一般是在所编写的代码中加入国际化的支持,这在Qt中利用QStringQTranslator等类和tr()函数能够很方便的完成。程序员所需 要做的工作有如下一些:

1.使用QString对象来表示所有用户可见的文本。由于QString内部使用Unicode编码来实现,它可以用来表示 所有需要向用户呈现的文本。当然对于仅仅程序员可见的文本并不需要都变成QString对象,可利用Qt提供的QCString或者原始的char *

2.使用tr()函 数来取得所有需要翻译的文本。Qt的翻译机制下,QObject::tr()函数可以帮我们 取得翻译之后的文本。对于从QObject继承而来的类,QObject::tr()函数最终由QMetaObject::tr()来实现,我们可以参考11.2.1中 提到的Q_OBJECT宏的定义以及在qmetaobject.cppQMetaObject::tr()的实现。在某些时候如果无法使用QObject::tr()函数,我们还可以直接调用QCoreApplication::translate()来取得翻译之后的字符串。

3.使用QString::arg()来组织动态文本。有些时候一段文本需要由一些静态文本和动态变量组合起来,比如常见的情况:printf(“The value of i is: %d”, i)。对于这种动态文本的翻译,由于语言 习惯的问题,如果简单的采用这种连接字符串的方法,可能会带来一些问题。比如下面的字符串用来表示任务的完成情况:

QString m = tr(“Mission status: “ )+ x + tr(“of “) + y +tr(”are completed”);

其中xy是动态的变量,三个字符串被xy分隔开,它们无法被很好的翻译——”x of y”是英语中分数的表示方法,比如4 of 5是分数4/5,在不同的语言中分子和分母的位置可 能是颠倒的,这种情况下数字45的 位置在翻译的时候无法被正确的放置,可见孤立地翻译被分隔开的字符串是不行的,改进的办法是使用QString::arg()方法:

QString m = tr(“Mission status: %1 of %2 are completed”).arg(x).arg(y);

这样翻译工作者可以将整个字符串进行翻译,并将参数%1%2放到正确的位置。

    4.利用QTranslator::load()QCoreApplication::installTranslator()来读取对应的翻译之后的资源文件。翻译工作者将提供包含有翻译之后的字符串的资源文件*.qm,程序员还需要做的是定义QTranslator对象,并用load()函数读取相应的.qm文件,然后利用QCoreApplication::installTranslator()函数来安装QTranslator对象。


对于翻译工作者,主要是利用Qt提供的工具lupdatelinguistlrelease(它们都可以在Qt安装目录的bin文件夹下找到)来协助翻译工作并生成最后需要的.qm文件,包括以下内容:

1.利用lupdate工具从源代码中扫描并提取需要翻译的字符串,生成.ts文件。类似编译时用到的qmake,运行lupdate时我们也需要指定一个.pro的文件,这个.pro文件可以单独创建,也可以利用编译时用到的.pro文件,只需要定义好变量TRANSLATIONS就可以了,具体用法可以参见后面的小例子。

2利用linguist工具来协助完成翻译工作,即打开前面用lupdate生成的.ts文件,对其中的字符串逐条进行翻译并保存。由于.ts文件采用了xml格式,我们也可以用其它编辑器来打开.ts文件并翻译。

3利用lrelease工具处理翻译好的.ts文件,生成格式更为紧凑的.qm文件。这便是翻译工作者最终需要提供给程序员的资源文件,它所占的空间比.ts文件小,但基本不具有可读性,只有QTranslator能正确的识别它。

  评论这张
 
阅读(534)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018