QT的中文化相关问题

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")qAppSLOT(quit()) );
menubar->insertItem(
tr("&File")popup );

 

两种特殊情况!

1 大多,可以用上述方法理。不在定某些量中使用的字符串,不能使用上述方法,但是Qt提取译该字符串,必用某方法志出 Qt QT_TR_NOOP() QT_TRANSLATE_NOOP() 来标它们。前者用于单个字符串,后者用于多字符串。比如,

static const char* strings[] = {
QT_TR_NOOP( "Hello" )
QT_TR_NOOP( "World" )
};

2 需要使用printf/sprintf的函数动态生成字符串,比如,
QStings s;
s.sprintf( "Button %d"
i );
but->setText( s );

对这种使用方式的国际化是使用 arg()
QString s = tr( "Button %1" )
.arg(i);
but->setText( s );

 

 

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有关的宏, 重新configuremake

二是程序中选用的字体不是中文字体(默认的字体是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编译配置文件目

docdocsqtopia考文

etc用配置文件目

i18n国际化目

i18n/zh_CN体中文目

include/qpeqtopia文件目

inputmethods入法

libraryqtopia部分源代

pics与应用相片存放目

plugins:各种插件目,如mpeg3码插件、入法件等

sounds:音文件存放目

taskbar面程序的源代qpe的源代

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值