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) 编辑 收藏 引用