随笔-18  评论-11  文章-12  trackbacks-0

2008.2.27 by RonLiu

方法一:使用tr()函数

QT中,用QString存储所有可见得文本/字符串,使用tr()将各种字符编码的文本转化为QString,然后既可以将他们设置为控件的显示文本。

在Widget的构造函数中加入:

QTextCodec::setCodecForTr(QTextCodec::codecForName("gbk"));

QFont font1("Times", 12, QFont::Normal, FALSE);

this->setFont(font1);

这样在该窗体的其他位置,可以使用tr()设置控件的内容,他们均可以显示为中文了。

setWindowTitle(tr("消息嗅探器"));

注意:这种方式设置的中文显示对于整个控件,以及它们的子控件都生效。如果在子控件中另外设置了setFont(),那么全局的字体方案将会失效。

方法二:使用translate()转换

先将需要显示的中文转化为gbk编码的unicode,然后将unicode转化为QByteArray,在将只转化为char指针,并传递给translate()函数。

注意:这种方法显示中文时,会出现失效的情况。譬如在菜单栏中可以显示中文,但是在Label或者Button中却无法显示中文。

另外,这种方法仅仅建议只有少数按钮显示中文时选用,否则,代码写得也麻烦呀。

如果使用QDesigner生成的ui文件,后创建的界面类,一般都有一个retranslateUI,就是做这个用的。

const char * stringToUnicode(const char *str)

{

static QTextCodec *codec = QTextCodec::codecForName("gbk");

QByteArray qba = (codec->toUnicode(str)).toLocal8Bit();

const char * c_str = qba.data();

return c_str;

}

menuFile->setTitle(QApplication::translate("MainWindow", stringToUnicode("文件"), 0, QApplication::CodecForTr));

QTextCodeC用于在不同的编码方案之间进行转换。

方法三:使用Linguist

这是QT自带的用于软件本地化的软件的工具。没仔细研究过。

这种方式可以用于外文软件的本地化,那么相比于前两者方式,处于更高的层次。

延生一:编写多语言版本的QT程序

(本部分内容参考QT手册Internationalization一节)

在方法一和方法二种,仍然是一个程序对应一个语言。如果希望QT程序针对不同的语言,有不同的版本,该如何操作?

准备一个.pro文件,如:

HEADERS         = funnydialog.h \

                   wackywidget.h

SOURCES         = funnydialog.cpp \

                   main.cpp \

                   wackywidget.cpp

FORMS           = fancybox.ui

TRANSLATIONS    = superapp_dk.ts \

                   superapp_fi.ts \

                   superapp_no.ts \

                   superapp_se.ts

1. 使用lupdate,从QT程序中抽取可转换的文本,生成一个ts文件。

2. 使用Linguist工具,在原始文本间转换。ts文件以xml格式保存,可以手动修改。

3. 运行lrelease,生成轻量级的qm格式的消息文件。这种文件可以在程序中使用。

4. In your application, you must QTranslator::load()  the translation files appropriate for the user's language, and install them using QCoreApplication::installTranslator().

posted on 2009-02-26 20:09 ronliu 阅读(819) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理