Qtopia/Qt 中文支持

 

Qt在设计开始就考虑了对多语言的支持.因此对中文的支持还是比较容易.很容易编写出多语言的程序来.关于Qtopia /QT的中文支持.主要有如下情况
  1.在自己的QT程序中加入中文支持.
 2.将Qtopia 的桌面显示中文.
 
我们分两种情况来看看QT怎么支持中文.这里的主要采用QT来演示,后面演示一个Qtopia 的版本。本文大部分程序和分析由我的学生刘彬完成,在此表示感谢.
 
应用程序加入中文支持.
    QT应用程序多语言支持的思路是,跟WINDOWS非常象。就是非英语的字符串不编译在程序当中。而是保存在一个字典文件里。在程序中使用是这个字典的索引。这样在不修改的程序的情况,只要换成不同的字典文件就会支持不同语言的显示。
    在WINDOWS程序中,这个字符串是资源文件(*.res),这个文件最后被链接到可执行文件当中。在程序中使用整数类型的资源ID,来从资源文件中,通过API函数LoadString()来从资源文件取出字符串。
    在QT也采用类似的流程。字符串保存在翻译文件(*.ts)当中,发布时它将会转换成二进制的 .qm文件。这个文件不需要链接可执行文件当中。程序中使用英文字符串作为字典的索引。使用tr()函数从翻译文件检索相应的字符串。
   下面用一个实例来演示QT程序中中文的使用. 我们以一个QT播放器的实例来示范,其中它的按键将采用文字标签,我们在后面把这一些标签换成中文。
Qtopia/Qt 中文支持_第1张图片
简单用QtDesigner 来画出这个界面,我这里用的Qt 3.3的设计器。用Qtopia 2.2 的设计器大体差不多设计.在使用文字的地方,设计器会自动加入tr(),函数
<textarea cols="50" rows="15" name="code" class="cpp">/* * Sets the strings of the subwidgets using the current * language. */ void PlayerForm::languageChange() { setCaption( tr( "QT Player" ) ); btn_open-&gt;setText( tr( "open" ) ); btn_play-&gt;setText( tr( "play" ) ); btn_stop-&gt;setText( tr( "stop" ) ); btn_close-&gt;setText( tr( "close" ) ); } </textarea> 
第二步,用桌面版QT的lupdate 创建ts.文件,首先需要手工修改pro文件.增加ts文件的选项
在pro要增加一项 TRANSLATIONS = qplayer_CN.ts
 
然后lupdate可以识别桌面版和Qtopia 的pro文件的TRANSLATIONS来创建相应的.ts 文件。
   $QTDIR/bin/lupdate qplayer.pro
生成ts也是一个XML格式文件,内容如下,
<textarea cols="50" rows="15" name="code" class="cpp">&lt;!DOCTYPE TS&gt;&lt;TS&gt; &lt;context&gt; &lt;name&gt;PlayerForm&lt;/name&gt; &lt;message&gt; &lt;source&gt;QT Player&lt;/source&gt; &lt;translation type="unfinished"&gt;&lt;/translation&gt; &lt;/message&gt; &lt;message&gt; &lt;source&gt;open&lt;/source&gt; &lt;translation type="unfinished"&gt;&lt;/translation&gt; &lt;/message&gt; &lt;message&gt; &lt;source&gt;play&lt;/source&gt; &lt;translation type="unfinished"&gt;&lt;/translation&gt; &lt;/message&gt; &lt;message&gt; &lt;source&gt;stop&lt;/source&gt; &lt;translation type="unfinished"&gt;&lt;/translation&gt; &lt;/message&gt; &lt;message&gt; &lt;source&gt;close&lt;/source&gt; &lt;translation type="unfinished"&gt;&lt;/translation&gt; &lt;/message&gt; </textarea> 
第三步,用桌面版的 linguist 打开ts.进行翻译。 再打开已经生成好的XX_CN.ts文件,可以发现用tr()标注的字段出现在Source text框内,再翻译需要翻译的字段完成这阶段的操作。在界面中操作
进行翻译
Qtopia/Qt 中文支持_第2张图片
第四步:用lrelease把ts文件生成 qm文件给程序调用。以下命令将生成同名的二进制文件qplayer_CN.qm
  lrelease qplayer_CN.ts
 
第四步:在主程序中加入对Qtranslator类的支持。并且装入相应的qm文件。
<textarea cols="50" rows="15" name="code" class="cpp">#include &lt;qapplication.h&gt; #include &lt;qtranslator.h&gt; #include "qplayer.h" int main( int argc, char ** argv ) { QApplication a( argc, argv ); QTranslator translator(0); translator.load(QString("qplayer_CN.qm")); a.installTranslator(&amp;translator); PlayerForm w; w.show(); a.connect( &amp;a, SIGNAL( lastWindowClosed() ), &amp;a, SLOT( quit() ) ); return a.exec(); } </textarea> 

完全编译后,重新运行程序,即可以看到中文界面(注意,桌面版要求中文简体语言设置)

(最简单做法是export LANG=zh_CN.UTF-8,或修改 /etc/sysconfig/i18n配置文件,下LANG的选项为zh_CN.UTF-8)

Qtopia/Qt 中文支持_第3张图片

 

Qtopia 桌面的汉化

  •  重新成Makefile 

Qtopia 桌面的汉化需要重新编译桌面。并且引用中文字体。在/XXX_qtopia/qtopia目录下生成Makefile 的configure 脚本加入 --languages "zh_CN"

./configure  -platform linux-generic-g++ --languages "zh_CN"

再编译 make lupdate.

  • 生成界面ts

最后在qtopia/bin下执行 ./nct_lupdate

此步后在qtopia/i18n/目录下会产生zh_CN 文件夹,并在zh_CN 文件夹下面会产生 主界面的 .ts文件 .用linguist 汉化.

  • 创建汉化配置文件

在qtopia/i18n/新建字典配置文件 .directory,内容如下。

<textarea cols="50" rows="15" name="code" class="cpp">[Translation] File=QtopiaI18N Context=Chinese [Desktop Entry] Name[]=Chinese </textarea> 

 

  • 修改汉字字体

修改qtopia/i18n/zh_CN/QtopiaDefault.ts 中的<name>FontMap</name> 这段代码变成:

<textarea cols="50" rows="15" name="code" class="cpp">&lt;name&gt;FontMap&lt;/name&gt; &lt;message encoding="UTF-8"&gt; &lt;source&gt;Small,helvetica,10&lt;/source&gt; &lt;translation&gt;Petit,unifont,11&lt;/translation&gt; &lt;/message&gt;</textarea> 

  • 安装汉化版。

可用make install或直接调用lrelease转换后把qm文件拷入开发板

  • 修改界面语言

进入QT界面后,进settings ,language选项将语言设置成中文
同时在apperance选项中选择含有中文支持的字体,如其自带的unifont 字体

 

 

 

 

你可能感兴趣的:(Qtopia/Qt 中文支持)