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 閱讀(839)
評論(0) 編輯 收藏 引用