qt 中文国际化

假设我们已经建好一个工程,且可以运行出基本的界面。
1、打开项目工程文件QTDemo.pro,添加如下语句:
TRANSLATIONS += en.ts zh_CN.ts zh_TW.ts
2、然后在命令行窗口中输入以下命令:
lupdate QTDemo.pro
这样就生成了3个语言文件:en.ts,zh_CN.ts,zh_TW.ts
3、用linguist(在QT安装目录下的bin目录中)打开zh_CN.ts(简体中文),选择“编辑”->“翻译文件设置…”,选择Chinese/China:选中某一个字符串,在译文文本框
中输入对应于中文的字符串:
同理,进行zh_TW.ts(繁体中文)文件的翻译,en.ts(英文)文件不用翻译。
4、用 lrelease QTDemo.pro  将对应的.ts文件生成.qm文件,.qm文件比较紧凑、体积小。
5、在程序中添加对国际化的支持,将main.cpp修改为如下内容:
      #include 
      #include 
      #include "QtDemo.h"
      int main(int argc, char **argv)
      {
         QApplication app(argc, argv);
         //以下3句话是装载的程序
         QTranslator translator;
         translator.load(QString(argv[1]));
         app.installTranslator(&translator);
         QtDemo *dlg new QtDemo;
         dlg->show();
         return app.exec();
          
重新执行make命令,生成可执行程序。 
在运行程序时通过传递命令行参数指定所使用的语言,注意不需要指定扩展名.qm,例如:
./QTDemo zh_CN  就出现中文的界面了,其他的依次类推。

转载自:http://bbs.csdn.net/topics/370099673

注意事项:生成的.qm文件要放到运行目录下,不然加载不上国际化文件

获取程序运行目录方法:

  1. QString path;  
  2. QDir dir;  
  3. path=dir.currentPath();  
  4. QMessageBox::warning(0,"PATH",path,QMessageBox::Yes);//查看路径 
  5. 转载自:http://blog.163.com/soyo_gogogo/blog/static/171414077201213112640267/
  6. QT国际化 中英转换  

    2012-02-05 21:11:41|  分类: 学习手记 |  标签:qt国际化  中英互译  qtlinguist使用  一些注意点   |举报 |字号 订阅

            本文提及如何使用QT和QT Linguist来实现翻译,如果你对所谓动态翻译感兴趣,请移步到其他文章。笔者也推荐一本叫《精通QT4 GUI 编程》的书,里面第18章有提及动态的(既不用关闭程序实现“一点即换”)翻译。
            网上有许多关于QT国际化的文章。这里也简单讲述一次。

    1、qm文件和ts文件。

    ts文件是程序员是用的翻译文件。你有几种方法可以得到这样的文件。
    (1) 针对整个项目:在项目文件中加入 TRANSLATION +=  abc.ts(abc是自定的文件名)。那么你可以使用Qt自带的控制台,输入命令 lupdate myPro.pro(myPro是自定的项目名称)。Qt就会为你在项目文件的同一目录下生成一个abc.ts文件。输入命令时要么当前目录就是pro文件所在目录,要就在pro文件名前带上绝对或相对路径。
    当你lupdate你的pro文件是,Qt会将ui文件中所有的可见字符以及你在程序用使用  tr 括起来所有字符放入到ts文件中。

             (2) 针对单个文件,这只适用于一些特定场景或者个人使用习惯。当你往项目里头添加了新的带有需要翻译文本的文件后,你完全可以直接再次lupdate一次整个项目,Qt不会覆盖你在abc.ts中已经做好的任何翻译。 当然你也可以lupdate单个文件,命令和上一个是一样的 : lupdate  文件的绝对路径或相对路径 -ts 要生成的ts文件名和文件路径,例如:
    l update ../app/test.cpp  -ts ./testTs.ts
    那么Qt就是在你指定的路径下生成你指定的文件名的ts文件。

          qm文件是程序能识别的二进制的翻译文件。通过发布一个ts文件来产生。命令很简单: lrelease abc.ts。 那么Qt 会为你在abc.ts的同名目录下生成一个同名的qm文件。qm文件是QTranslator应该读入的文件,关于QTranslator,就移步到Qt的帮助手册吧。
    下图是Qt自带的控制台。
    QT国际化 中英转换 - soooYo - ☆χιΑο.处
       













    2、处理ts文件
        
          处理ts文件当然也有多种方法。 你可以使用Qt Linguist打开,也可以使用任何支持XML文本格式的工具打开。个人比较喜欢使用notepad++ 来处理ts文件而不是Qt Linguist(别笑我低端)。
          如下是Qt Linguist中打开ts文件的样子 , 黄色的框是你的文件列表,点选文件后会在红色的框内显示所有tr括起来的语句或者是ui中的可见字符串。绿色框是当前翻译中的文本和翻译后的文本。黑色框是文本在代码中的具体位置,帮助你精确翻译,但是这部分常常不可用。那些文件名和源语句前的钩钩只是用来标记完成度的,完成就打成绿色的钩,自己打,但是不影响翻译的。
      QT国际化 中英转换 - soooYo - ☆χιΑο.处
            个人更喜欢用notepad++,顺便一提吧。如下是notepad++打开ts的样子,刚好是一个完整的context。<context>标签是一个文件所有需翻译文本集合的开始标志。<name>标签指明了文件中的类名称。<message>是一条需翻译语句的开始标记。<location>是语句在文件中的行数,因此<location>可能在同一个<message>中出现多次。<source>需翻译的语句,要精确,连空格个数不一样都不能匹配。<translation>是翻译后的语句,这个标签一个开始是<translation type = "unfinished"> ,好像是这样的,表示语句没有翻译好,当你在notepad++中确实完成翻译后记得将type部分删掉,带有这个unfinished标志的语句是即使翻译好也不会被写入qm文件中的。
      QT国际化 中英转换 - soooYo - ☆χιΑο.处
       
          最后,你需要一个年轻貌美的女同事,既熟悉英文,又温柔体贴。而且不会在你忘得不可开交但剩下30%翻译任务的时候也不肯帮你一把。祝你好运,coder。

      3、我的工程使用了Qt的控件,但是Qt的控件中字符都是英文的……
            
            不要紧,到你的Qt安装目录下搜一下.ts文件,你会发现其实Qt已经为我们准备好了非常多的ts文件。刚刚这个问题中,我们就找到qt_zh_CN.ts文件,这是一个有qt控件简体中文翻译的文件。你完全可以把这个文件放到你的工程中去(你不会跟计较那几百k的空间吧!?),然后通过文本工具,往这个文件中添加<context> , 例如你可以将你的项目的ts文件直接拷贝到qt_zh_CN.ts文件的最后面(为了好找) ,然后lrelease这个qt_zh_CN.ts文件。你就会发现Qt控件中的英文也变成中文了,而且还添加了你自己的部分。

     4、我想为我的工程添加繁体翻译

           方法同上,不过这次你要找的文件叫qt_ch_TW.ts(Qt在这就做得不对了哈!什么TaiWan 和 China的,都一个地方),这个文件有Qt所有控件的繁体中文翻译。你甚至可以讲qt_zh_CN.ts的内容拷贝到word中,然后简转繁,再覆盖原来的ts文件来完成这个任务。不论怎样,完成繁体翻译吧骚年!

     5、关于动态语言切换

           个人对这个没有什么认识。但是我只提一个问题:动态翻译是否在你的工程中非有不可? 如果不是,就稍稍偷个懒吧。我的建议有两个,一个比较傻瓜。1.在用户安装你的应用的过程中(安装包),让用户选定一个语言,安装完成后不可以改变。相信这个不会影响用户的使用体验,因为没有人会装B到明明英文不好却是要用英文安装,安装后又作贱地想换回中文的(你?)。 2.在应用中给用户一个设置选项,让用户可以选择语言,但是选择语言后提示需要重启本应用。这个办法比较傻瓜。在用户重启你的应用时,你就有机会让你的QTranslator重新load一个不同的qm文件,这样就可以完成语言切换。个人偏向第一种方法,也稍稍省点心吧,别让自己太容易暴毙吧coder。

     6、QTranslator的一些问题
           
          一个QApplication会有一个translator。translator可以remove,也可以install。下面是笔者一个简单的程序来设置语言:

        1.先定义我的qm文件的路径先
          QT国际化 中英转换 - soooYo - ☆χιΑο.处
     
        2.根据系统的QLocale判断应该load哪个qm文件
            QT国际化 中英转换 - soooYo - ☆χιΑο.处
        那个optionManager是用来读注册表的。这个跟应用本身有关。

       3. 准备一个接口,然App在启动时load好qm文件。
    QT国际化 中英转换 - soooYo - ☆χιΑο.处
     
         这样大概就是使用过程了。其他的话聪明的你应该可以理解的了。 

    7、 哪个QLocale::Language表示中文繁体啊??
     
            这个问题问题得好啊。在Qt的QLocale中的Language枚举中是没有中文繁体的。那怎么办?我这里给有一个不是建议的建议,那就认为,这台机子不是英文和中文的话,就是中文繁体(中文指中文简体)。用一个估计少见的Language表示中文繁体,写注册表时,遇到就这个Language项,就认为是中文繁体。load的时候就用繁体的qm。好了,就说到这个程度,这样的损招再说的话那些老鸟又要表示不屑了。    

     8、请使用命令行获得.qm文件,而不是QT Linguist的”发布为"或者“另外发布为”~!!

         这里很可能是我的机器问题。但是那天工作时遇到的问题确实就在于此。如果你用QT Linguist的发布功能,你可能会和我一样发现很多句子都不能翻译,但是你检查你的ts文件时却没有问题。如果有人看到了这里,并且有机会实践,请帮忙看看情况是不是真的如此。如果可以的话请给我留个言。或者直接向Qt 提BUG。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值