Qt中多语言及字体的分析 .

目前工作在Qtopia2.2.0中,项目要求实现多语言,目前的需求是要实现波斯文。而因为我对波斯文一点都不了解,所以花了不少时间在这上面,现在算是云开雾散了。写点心得,即记录我的所得也想和大家分享一下。

     字体

     字体是同一个unicode(或是其他编码,也需要将其转换为unicode)值,在不同的字体中显示给用户的形态不一样,比如abc这些字母,在Times字体或是相关字体中,表现出来的形态都是abc。而对于波斯文中,abc这些字符在波斯文对于的字体中,abc三个字母的形态为蝌蚪形状了。所以如果要将某个Qtopia的平台使用的语言改变为波斯文,那么字体也必须相应的修改。(因为对unicode及其他编码格式及他们的关系理解不够,所以造成我之前的一些困扰)

     编码方式

     国际通用的unicode包括了所有的字符的编码,然后在不同的国家或是地区或是组织,有自己的编码,比如中国大陆有GB2312、台湾有Big5、日本有EUC-JP等等,表示阿拉伯文的是ISO 8895-6等等。而因为unicode是国际通用的编码,几乎包括所有的字符,Qt使用unicode编码,所以在qt中需要将unicode编码和其他编码之前的转换。

    Qt中的国际化tr()

    Qt中的tr是将指定的字符串翻译成本地语言。它是怎么实现的呢?经过阅读代码,其过程如下(下面是Qt2的过程,Qt4大致相同):

    1)tr函数会直接调用到QApplication::translate()函数

    2)在QApplication::translate()函数中,会找到根据所有的QTranslater对象来翻译指定的源字符串。在QT中,使用lupdate和lrealse工具生成的翻译文件*.qm,每一个qm文件对于一个QTranslater对象。所以这一步是在所有的*.qm文件中查找。如果找到,则直接返回翻译的文本

    3)当在*.qm中找不到该字符串的时候,再根据当前的文本编码模式将文本转换为unicode编码返回(当前的文本编码模式是QTextCodec的子类的对象)

     4)如果在第3步中不能转换为有效的unicode值,那么直接返回在原来的字符串。

 

说明:在Qt2中,每一个Application只有一个默认的文本编码方式,而在Qt4中,有本地的编码方式,有翻译的编码方式。他们的作用是不同的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值