Posted on 2011-05-12 07:21
RTY 閱讀(975)
評論(0) 編輯 收藏 引用 所屬分類:
Qt
1.程序中要國際化的靜態字符串用tr()<源代碼是latin1字符串時>及trUtf8()<源代碼不是latin1字符 時>2.動態string用qstring的arg()方法,如tr("host %1 found").arg(hostname),所謂動態是指需要參數生成字符串
3.在用tr轉換變量之前,變量用QT_TR_NOOP,此方法用在靜態字符串數組上
如: static const char *greeting_strings[] = {
QT_TR_NOOP("Hello"),
QT_TR_NOOP("Goodbye")
};
tr(greeting_strings[0]);
4.宏QT_NO_CAST_FROM_ASCII強制tr檢查
5. QTextCodec及QTextStream提供不同的字符編碼支持。app可能偶爾需要輸入輸出不同于locale編碼的字符編碼。
app運行時,系統的locale決定了8-bit 數據的8-bit 編碼方式。
當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轉化到local 8-bit 編碼,一個簡便方法是用QString::toLocal8Bit(),另一個是用 QString::toUtf8()
煩方向的轉換有 QString::fromUtf8() and QString::fromLocal8Bit(),或更通用的從ISO 8859-5 Cyrillic到Unicode的轉換:
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中也應QTextCodec::setCodecfortr
6.QApplication::setLayoutDirection可以設置書寫方向
7.可以把qm文件放在exe中,可以用qt的資源系統
8. 在app中用QTranslator::load()及QCoreApplication::installTranslator()根據用戶語言加載語 言文件.
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可以指定數字和日期時間。其他locale信息可用C++標準函數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轉換不同語言
4)用lrelease把.ts文件轉換成二進制的.qm文件