Posted on 2011-05-12 07:21
RTY 閱讀(975)
評論(0) 編輯 收藏 引用 所屬分類:
Qt
1.程序中要國際化的靜態(tài)字符串用tr()<源代碼是latin1字符串時>及trUtf8()<源代碼不是latin1字符 時>2.動態(tài)string用qstring的arg()方法,如tr("host %1 found").arg(hostname),所謂動態(tài)是指需要參數(shù)生成字符串
3.在用tr轉(zhuǎn)換變量之前,變量用QT_TR_NOOP,此方法用在靜態(tài)字符串?dāng)?shù)組上
如: static const char *greeting_strings[] = {
QT_TR_NOOP("Hello"),
QT_TR_NOOP("Goodbye")
};
tr(greeting_strings[0]);
4.宏QT_NO_CAST_FROM_ASCII強(qiáng)制tr檢查
5. QTextCodec及QTextStream提供不同的字符編碼支持。app可能偶爾需要輸入輸出不同于locale編碼的字符編碼。
app運行時,系統(tǒng)的locale決定了8-bit 數(shù)據(jù)的8-bit 編碼方式。
當(dāng)app在Cyrillic KOI8-R locale (the de-facto standard locale in Russia)需要輸出Cyrillic in the ISO 8859-5 encoding,可用如下參考代碼:
QString string = ...; // some Unicode text
QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QByteArray encodedString = codec->fromUnicode(string);
從Unicode轉(zhuǎn)化到local 8-bit 編碼,一個簡便方法是用QString::toLocal8Bit(),另一個是用 QString::toUtf8()
煩方向的轉(zhuǎn)換有 QString::fromUtf8() and QString::fromLocal8Bit(),或更通用的從ISO 8859-5 Cyrillic到Unicode的轉(zhuǎn)換:
QByteArray encodedString = ...; // some ISO 8859-5 encoded text
QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QString string = codec->toUnicode(encodedString);
QTextCodec::codecForLocale()返回的編碼方式是最可能需要支持的編碼方式,因為用戶最可能使用它與其他人分享交流文檔。
如果tr中不是latin1,在.qro中增加codecfortr = utf-8指明字符編碼,在main中也應(yīng)QTextCodec::setCodecfortr
6.QApplication::setLayoutDirection可以設(shè)置書寫方向
7.可以把qm文件放在exe中,可以用qt的資源系統(tǒng)
8. 在app中用QTranslator::load()及QCoreApplication::installTranslator()根據(jù)用戶語言加載語 言文件.
qt可以安裝多個QTranslator
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTranslator qtTranslator;
qtTranslator.load("qt_" + QLocale::system().name(),
QLibraryInfo::location(QLibraryInfo::TranslationsPath));
app.installTranslator(&qtTranslator);
QTranslator myappTranslator;
myappTranslator.load("myapp_" + QLocale::system().name());
app.installTranslator(&myappTranslator);
...
return app.exec();
}
9.qlocale可以指定數(shù)字和日期時間。其他locale信息可用C++標(biāo)準(zhǔn)函數(shù)setlocale或localeconv
10.icon的國際化,可在qre文件中用lang屬性:
如<qreresource>
</qreresource>
<qreresource lang="es">
</qreresource>
11. 1)在.qro中增加欲支持的語言,
TRANSLATIONS=app-cn.ts \
app-fr.ts \
app-ca.ts
2)lupdate提取所有的tr中的字符形成qm文件
3)用qt linguist轉(zhuǎn)換不同語言
4)用lrelease把.ts文件轉(zhuǎn)換成二進(jìn)制的.qm文件