前幾天,偶然間看到光哥的一篇代碼,裡面有這樣一句話:
- action->setText(tr("開始"));
並且在main函數中還有這種一段代碼:
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- QTextCodec *codec = QTextCodec::codecForName("GB2312");
- QTextCodec::setCodecForLocale(codec);
- QTextCodec::setCodecForCStrings(codec);
- QTextCodec::setCodecForTr(codec);
- MainWindow w;
- w.show();
- return a.exec();
- }
devbean大神和dbzhang800大神都曾強烈批判過這種寫法,原因有三:
1、如果使用GB2312格式保存這篇代碼,其他人使用UTF-8打開,那麼無疑將會看見亂碼。
當時我就出現了這種情況,光哥把代碼給我發過來以後,我發現我看到代碼中有亂碼,因為ubuntu 10.10的默認編碼格式是UTF-8,無論我用Qt creator還是gedit打開源代碼,都會看見亂碼。
2、如果將程序發布到一些非簡體中文的國家或地區,可能出現對方的機器上根本沒有安裝任何中文的編碼格式,那麼就會出現對方無論如何都無法正確顯示源代碼甚至無法正確運行程序的情況。
3、Qt提供了強大的多國語言工具Qt Linguist,不用白不用。
devbean大神和dbzhang800大神的建議做法是:
1、在代碼中所有需要使用中文的地方都用一段英文暫時代替,並用tr()函數做標記。
2、使用Qt Linguist對所有被tr()函數標記的字符串進行翻譯,並發布翻譯包。
3、在程序中加載翻譯包。
詳細做法,可以見devbean大神的博客:
《Qt學習之路(33): 國際化(上)》: http://devbean.blog.51cto.com/448512/244689
《Qt學習之路(34): 國際化(下) 》: http://devbean.blog.51cto.com/448512/245063
全文完。
參考資料:
《Qt國際化源碼含中文時)的點滴分析》: http://blog.csdn.net/dbzhang800/archive/2011/04/19/6334852.aspx
首先,個人比較抵制源碼中使用中文當然也包括用tr擴住中文了)。
《Qt中translate、tr關系 與中文問題》: http://hi.baidu.com/cyclone/blog/item/aa56e5dd1a79f7e176c638be.html
本文出自 “elephant_liu” 博客,請務必保留此出處http://elephantliu.blog.51cto.com/1107116/596958