Qt笔记-翻译机制

i) Qt的翻译机制入门:

      0)以tr("<英文文本>")封装需要翻译的文本,比如:ui->label->setText(tr("Date"));
      1)在工程.pro文件中写入: TRANSLATION += <.pro's name>_ZH_CN.ts #这里语言和区域名字一定要严格,否则之后生成的同名.qm文件无法被Qt翻译器加载#
      2)利用命令行工具lupdate -verbose -no-obsolete <.pro'path and name>生成.ts文件。-no-obsolete参数表示生成的.ts文件中检测并剔除代码中不再存在的tr("<               英文文本>")。使用Qt Creator的“工具”->"外部"->"Qt语言家"->"更新翻译(lupdate)",等同于上述的lupdate -verbose,即:跳过检测过期的翻译原始文本。
      3)在工程的资源文件中添加这个.ts文件
      4)利用Qt翻译家翻译这个.ts文件并发布为.qm文件
      5)把.qm文件添加入资源文件中
      6)在main.cpp中写如下语句:QTranslator translator;
                                                     translator.load(<资源文件中的.qm文件路径和名字>);
      7)如果6)的返回值为true,那么把main.cpp中的QApplication对象执行.installTranslator(&translator); 这样翻译文件就加载完成了。
         注意:若qt可以找到正确命名后的qm文件但却无法加载qm文件,可以先删除build目录再编译运行。

ii)  tr()函数的参数如果为宏定义的字符串,那么这种字符串是无法被翻译的。

iii) tr()函数的参数如果是变量,(似乎?)需要通过tr("%1").arg(<QString>)解决。

iv) 任何需要翻译的文本所在的类的.h文件中均需要声明Q_OBJECT宏,否则lupdate工具无法检测到需要翻译的原始文本。

v)  建议需要翻译的原始文本以英文书写。因为这样会使因字符编码差异造成的兼容性问题最小化。

posted @ 2018-09-27 22:25  r0xFED  阅读(791)  评论(0编辑  收藏  举报