让QT/Embedded支持国际化

让QT/Embedded支持国际化

[b]让QT/Embedded支持国际化[/b]
                Author: lyore  Date: 2007-12-11 18:42
          
          
               
                        Font Size:
[url=javascript:SetFont('logcontent_212','12px')]Small[/url]

[url=javascript:SetFont('logcontent_212','14px')]Normal[/url]

[url=javascript:SetFont('logcontent_212','16px')]Large[/url]
               
               
                                               
[img]http://www.lyore.cn/blog/images/weather/hn2_sunny.gif[/img]
[img]http://www.lyore.cn/blog/images/weather/hn2_t_sunny.gif[/img]
                         
               
          
          
               
[b]环境配置[/b]:
Qt/Embedded 3.3.8 ,在主机和目标板上存放路径都为:/root/qt-embedded-free-3.3.8
Qt/X11      3.3   (主要用到其中的lupdate,lrelease和lingust工具)

[b]1、修改并重新编译应用程序,使之支持I18N[/b]
编辑程序入口文件,在QApplication对象声明之后添加:

QTranslator translator;[*] translator.load("pro_zh"); //假设你的qm文件名为pro_zh.qm[*] app.installTranslator(&translator);
   如果希望程序根据locale设置自动查找qm文件,可将第二行改为:[color="#0000ff"]translator.load(QString("pro_") + QTextCodec::locale());[/color]
接着给所有需要国际化的文本加上tr方法调用,如: QLabel label = new
QLabel(tr("Call")),这里tr中的参数相当于英文键,值为国际化后的各国文本,后面用到的lupdate等工具就是通过这个标志来搜索
源文件需要翻译的字符串的。

交叉编译程序

[b]2、生成qm文件[/b]
首选在上一步中生成的pro文件中加入TRANSLATIONS的定义,内容为:[color="#0000ff"]TRANSLATIONS += lang_zh.ts[/color]
接着使用lupdate生成ts文件,该命令根据这个TRANSLATIONS定义将当前目录下所有源文件中的需要翻译的文本提取出来放在 lang_zh.ts文件中。具体执行命令是:[color="#0000ff"]lupdate lang.pro[/color]
此时目录中会生成一个lang_zh.ts的XML格式的文件,内容类似于:
!DOCTYPE TS>TS>[*] context>[*] name>QObjectname>[*] message>[*] source>Callsource>[*] translation type="unfinished">translation>[*] message>[*] context>[*] TS>
文件中source标签中Call及时之前定义的需要翻译的文本,下面要做的就是翻译,你可以用lingust工具实现,也可以自己翻译。Linugst
是Qt自带的翻译工具,一般RedHat
9.0安装Qt后都有该工具,在QT/Embedded源码目录的tools中也有该工具。自己翻译就是在lang_zh.ts文件中直接修改,针对
"Call",我们只要在相应的中加入翻译的内容即可。翻译后的文件内
容类似如下:
!DOCTYPE TS>TS>[*] context>[*] name>QObjectname>[*] message>[*] source>Callsource>[*] translation type="unfinished">呼叫translation>[*] message>[*] context>[*] TS>
最后生成相应.qm文件,执行:[color="#0000ff"]lrelease lang.pro[/color]

[b]3、将编译后的二进制文件和qm文件拷贝到目标板上,执行二进制文件即可[/b]。此时你看到的应该没有中文而是tr函数中的要翻译的文本,这是 local没设置的缘故,目标板中执行"export LANG=zh",然后执行: [color="#0000ff"]./app -qws -font unifont[/color],记住:如果没有-font选项你看到的汉字将是方框,这是因为程序默认采用不支持中文的Helvetica字体。

如果你对默认的unifont字体不满意,可以自己添加喜欢的字体
[b]附:往Qte中添加字体方法[/b]
[b]字体简介:[/b]
默认情况下Qt/Embedded在lib/fonts目录下已经提供了一种可以显示中文的字体库"uniFont",包含以下几个文件:
unifont_160_50.qpf unifont_160_50_t10.qpf unifont_160_50_t15.qpf
unifont_160_50_t5.qpf unifont.bdf。
qpf文件是Qt/Embedded专用的一种适合嵌入式位图字体,每个文件只包含一种尺寸的字体,不能缩放,优点是占用的磁盘空间很小,一般只有
600K到1M。QTE对字体的管理通过一个配置文件"fontdir"进行的,位于$QTDIR/lib/fonts下面,内容如下:
     ...
     # Unifont is available in source form from http://czyborra.com/unifont/
     unifont unifont.bdf BDF n 50 160 u
     ...
每一行是关于一种字体的设置,对应列的定义为:  
    [尺寸列表],每列解释如下:
:可以为TTF,BDF,QPF三种类型;
:y表示为斜体,n表示正常体;
:50表示正常体,75表示粗体;
:a使用ASCII字符集,u使用unicode字符集,s使用锯齿平滑(anti-aliased);
:0,则系统从[尺寸列表]中提取可以转换的字体尺寸;
  以windows下的提供的华文细黑字体为例,将stxihei.ttf拷贝到$QTDIR/lib/fonts/目录中,然后编辑该目录中的 fontdir文件,在文件最后加入:   [color="#0000ff"]stxihei stxihei.ttf FT n 50 140 su[/color]
注意:字体标志一定要加上u,说明使用unicode字符集,不然显示出现"方块"显示, 如果你想使用TrueType字体,那么不用进行下面的qpf格式转换就可以使用字体了。

[b] 转换字体为QPF格式:[/b]
Qt/Embedded提供了一个十分方便的工具来完成这项工作makeqpf,该工具放在$QTDIR/tools/makeqpf中。makeqpf
通过读取$QTDIR/lib/fonts/fontdir来获取需要转换的字体信息,然后生成相应的QPF字体。要使用makeqpf,在目标板中直接
运行:makeqpf,然后点击你要转换的字体,转换成功之后,你会在屏幕上看见转后的字体的显示效果。或者你可以运行:makeqpf
[charset range](例如makeqpf stxihei 0-ff,4e00-fa29)

[b]注册字体:[/b]
在fontdir文件中加上字体信息即可。以上述的"stxihei stxihei.ttf FT n 50 140
su"为例,通过在makeqpf中点击stxihei来生成一个华文细黑的QPF文件,文件名称为"stxihei_140_50.qpf",编辑
fontdir文件,注释掉原有的关于stxihei配置,加入新的字体信息:
     #stxihei stxihei.ttf FT n 50 140 su
     [color="#0000ff"]stxihei stxihei_140_50.qpf QPF n 50 140 su[/color]

最后,确认下目标板文件系统中有以下内容:
1)$QTDIR/lib/fonts/stxihei_140_50.qpf
2)$QTDIR/lib/fonts/fontdir中应该有以下的配置:stxihei stxihei_140_50.qpf QPF n 50 140 su(或者stxihei stxihei.ttf FT n 50 140 su);
3)应用程序目录下应该有lang_zh.qm文件。

一切无误后,运行: ./app -qws -font stxihei可看到字体已经应用到程序中了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值