天天看點

Qt國際化及Qt Linguist的使用

    前幾天,偶然間看到光哥的一篇代碼,裡面有這樣一句話:

  1. action->setText(tr("開始")); 

    并且在main函數中還有這種一段代碼:

  1. int main(int argc, char *argv[]) 
  2.     QApplication a(argc, argv); 
  3.     QTextCodec *codec = QTextCodec::codecForName("GB2312"); 
  4.     QTextCodec::setCodecForLocale(codec); 
  5.     QTextCodec::setCodecForCStrings(codec); 
  6.     QTextCodec::setCodecForTr(codec); 
  7.     MainWindow w; 
  8.     w.show(); 
  9.     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

    全文完。

參考資料:

  首先,個人比較抵制源碼中使用中文(當然也包括用tr擴住中文了)。

繼續閱讀