前几天,偶然间看到光哥的一篇代码,里面有这样一句话:

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

    并且在main函数中还有这种一段代码:

 

  1. int main(int argc, char *argv[]) 
  2.  
  3.  
  4.     QApplication a(argc, argv); 
  5.  
  6.     QTextCodec *codec = QTextCodec::codecForName("GB2312"); 
  7.  
  8.     QTextCodec::setCodecForLocale(codec); 
  9.  
  10.     QTextCodec::setCodecForCStrings(codec); 
  11.  
  12.     QTextCodec::setCodecForTr(codec); 
  13.  
  14.     MainWindow w; 
  15.  
  16.     w.show(); 
  17.  
  18.     return a.exec(); 
  19.  

    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