QT的中文化相关问题
Author:snail
Date:07-03-05
0
Qt应用的翻译过程分为三步:
运行lupdate,以提取出Qt应用的C++源代码中的可翻译文本,会产生一个给翻译者的信息文件(.ts文件)。该工具识别出tr()结构和上面描述的QT_*_NOOP宏,产生.ts文件(通常每种语言一个)。
使用Qt语言学家提供.ts文件中源文本的译文。既然.ts文件是XML格式,你也可以手工编辑它们。
运行lrelease,以从.ts文件中得到只适用于最后使用的轻量级的信息文件(.qm文件)。你可以把.ts文件看成“源文件”,把.qm文件看成“目标文件”。翻译者编辑的是.ts文件,可是你的应用的用户只需要.qm文件。这两种文件都是平台和地区(locale)无关的。
1
像普通的国际化过程一样,Qt 使用了类似GNU gettext一样的函数 QObject::tr(),它 用于从Qt的信息文件 .qm 中取出信息,这些信息是经过 Qt 的工具处理的。 Qt在处理 编码时还使用了 QTranslator 类,可用于指定整个应用软件的 的信息文件。
QPopupMenu* popup;
popup = new QPopupMenu( this );
popup->insertItem( tr("&Quit"),qApp,SLOT(quit()) );
menubar->insertItem( tr("&File"),popup );
两种特殊情况! 1 对于绝大多数情况,可以用上述方法处理。不过有时在定义某些变量中使用的字符串,不能使用上述方法,但是为了让Qt提取并翻译该字符串,必须用某种方法标志出 来。Qt 定义了 QT_TR_NOOP() 和 QT_TRANSLATE_NOOP() 来标志它们。前者用于单个字符串,后者用于多个字符串。比如, |
2
在1中谈到了” 它 用于从Qt的信息文件 .qm 中取出信息,这些信息是经过 Qt 的工具处理的。”
这里就又提出了2个问题?
如何生成.qm文件?
信息是经过Qt的工具处理的,这里的工具指的是什么工具?
提取上述信息的方法是使用 Qt 提供的工具 findtr 命令:
findtr [filename].cpp > i18n.po
对于翻译后的文件(比如上面的翻译文件存为 i18n_gb.po),必须使用 Qt 提供的 工具 msg2qm 把它转换为 .qm 文件才能使用,
msg2qm i18n_gb.po i18n_gb.qm
最后在程序中添加下列语句
QTranslator *translator = new QTranslator(0);
translator->load("i18n_gb.qm",".");
qApp->installTranslator(translator);
3
在 Qt 中也可以直接使用 QTextCodec 来转换字符串的编码,这为在Qt下开发纯 中文软件带来了便利条件,不过这种方法不符和国际化/本地化的习惯.
char *string = "中文和English混和字符串!"
QTextCodec* gbk_codec = QTextCodec::codecByName("GBK");
QString gbk_string = gbk_codec->toUnicode(string);
QLabel *label = new QLabel(gbk_string);
4
如果使程序只支持一种编码,也可以直接把整个应用程序的编码设置为GBK编码,然后在字符串之前加tr(QObject::tr),
qApp->setDefaultCodec( QTextCodec::codecForName("GBK") );
QLabel *label = new QLabel( tr("中文标签") );
5
如果使Qt根据Locale的环境变量取得字符集,可以使用 QString::fromLocal8Bit(str)。
6
我的QtEmbedded程序中的中文字符为什么显示成方块?
两个可能的原因:
一是qte的库未编译进对中文textcodec的支持, 解决方案:修改qconfig-qpe.h, 去掉CODEC有关的宏, 重新configure和make
二是程序中选用的字体不是中文字体(默认的字体是Helvetica,没有中文), 需要在程序中指定一个中文字体,如qte自带的unifont(这个字体大家普遍的看法是看上去像残废), qt4版本里新加入了文泉驿的unicode字体,可以在源码包里找到,比较漂亮, 推荐。
7
附录:
这些类同国际化Qt应用有关。
QEucJpCodec 从和到EUC-JP字符集的转换 QEucKrCodec 从和到EUC-KR字符集的转换 QGb18030Codec 从和到Chinese GB18030/GBK/GB2312编码的转换 QGbkCodec 从和到Chinese GBK编码的转换 QHebrewCodec 从和到visually ordered Hebrew的转换 QJisCodec 从和到JIS字符集的转换 QSjisCodec 从和到Shift-JIS的转换 QTextCodec 文本编码之间的转换 QTextDecoder 基于状态(State-based)的解码器 QTextEncoder 基于状态的编码器 QTranslator 文本输出的国际化支持 QTranslatorMessage Translator的信息及其属性 QTsciiCodec 从和到Tamil TSCII编码的转换
|
qtopia目录结构 apps/Applications:应用程序桌面配置文件 apps/Games:游戏桌面配置文件 apps/Settings:系统设置桌面配置文件 bin:二进制可执行文件 configs:编译配置文件目录 doc和docs:qtopia的参考文档 etc:应用配置文件目录 i18n:国际化目录 i18n/zh_CN:简体中文目录 include/qpe:与qtopia相关的头文件目录 inputmethods:输入法 library:qtopia部分源代码目录 pics:与应用相关的图片存放目录 plugins:各种插件目录,如mpeg3解码插件、输入法插件等 sounds:音频文件存放目录 taskbar:桌面程序的源代码(qpe的源代码) |