baizy77 发表于 2018-10-15 14:19:12

【独家连载】Qt入门与提高:KS03-03 God!全是英文,我的翻...

本帖最后由 baizy77 于 2019-7-2 20:26 编辑

版权声明---------------------------------------------------------------------------------------------------------------------该文章原创于Qter开源社区(www.qter.org)作者: 女儿叫老白转载请注明出处!---------------------------------------------------------------------------------------------------------------------课程目录: 【独家连载】《Qt入门与提高-GUI产品开发》目录
网页版课程源码 提取码:1uy7
引言----------------------------------------------------------------------------------------------------------------------       我们在前面的章节中学习了实现国际化最基本的步骤与方法。但在实际软件开发过程中,我们经常会碰到国际化失效或者说翻译失败的情况,到底是怎么回事呢?
正文----------------------------------------------------------------------------------------------------------------------我们今天来看一下在利用Qt进行国际化过程中,翻译失败的几种可能的情况:1)文本框太短,遮挡了翻译字符串。2)    ts翻译文件中,没有指定的翻译项或者有指定的翻译项但是未提供翻译。3)    用lupdate生成的ts文件中,待翻译项目中存在属性:type="vanished"。4)    pro文件编写内容不规范?5)    翻译文件(.qm)没有发布到指定目录。6)    程序中未正确加载qm文件。
下面我们分别看一下:场景1) 文本框太短,遮挡了翻译字符串。       这是比较低级的问题,我们不过多讲述,但现实中也有可能碰到。场景2)ts翻译文件中,没有指定的翻译项或者有指定的翻译项但是未提供翻译。       使用lupdate从源代码中抽取得到的ts文件中,有可能由于某种原因未能成功抽取到待翻译文本,或者虽然提取到了文本,但是我们忘记做人工翻译工作。       如果是ts文件已经提取到了文本,那么我们只需要把翻译文本补充上即可。       如果待翻译的文本并没有出现在ts中,这有几种可能:       1)待翻译文本中出现拼写错误            也就是说我们在编码时因为笔误将待翻译文本拼写错了,或者把标点符号的半角/全角给弄错了。这时,我们要认真核对待翻译文本的拼写。2)这个ts文件是我们手工编写的,结果却忘记将待翻译的文本添加到ts文件。这时,只需要将出问题的文本添加到ts文件并增加翻译即可。       3)修改代码新增了需要翻译的文本后,忘记执行lupdate。如果是这样,那就执行lupdate。       4)代码中忘记对待翻译文本使用tr()接口。这时,只需要查找到对应的代码进行改动即可。场景3)用lupdate生成的ts文件中,待翻译项目中存在属性:type="vanished"。       有时出现翻译问题时,我们打开ts文件可以看到,待翻译的文本的记录中存在属性:type="vanished",这也将导致翻译失败。此时需要我们将翻译补充上,并且将type=”vanished”字样删除。然后执行发布。场景4)pro文件编写内容不规范       lupdate*.pro时,提示错误信息(具体忘记了)经查,发现pro文件中存在            #install       改为            ##install       或者删除此行语句即可。场景5)翻译文件(.qm)没有发布到指定目录。       这种情况一般原因有可能有两种:a. 未执行发布动作。linguist菜单中有专门的”发布”或者”发布到”功能,请在每次修改ts文件后及时执行发布。b. 发布到错误的目录。场景6)程序中未正确加载qm文件,比如qm文件路径编写错误或者根本没有编写加载qm文件的代码。代码清单:
// 安装我们项目的翻译文件
QString strPath = qgetenv("TRAINDEVHOME");    // 获取环境变量所指向的路径
strPath += "/system/lang";    // $TRAINDEVHOME/system/lang/ks03_01.qm
QScopedPointer<QTranslator> gpTranslator(new QTranslator(QCoreApplication::instance()));
if (gpTranslator->load("ks03_01.qm", strPath)) {
   QCoreApplication::installTranslator(gpTranslator.take());
}
       上述代码用来在应用程序中加载qm文件。如果strPath或者"ks03_01.qm"这两处代码有拼写错误,那么将导致翻译文件加载失败,如果qm文件并未存放到strPath目录中,也会导致qm文件加载失败。
结语----------------------------------------------------------------------------------------------------------------------       本文列举了可能导致翻译失败的几种场景,都是我们进行国际化编程时需要注意的点。建议大家不要手工编写ts文件,而应该采用Qt规定的机制来实现ts文件抽取(具体可以见前面的章节),以免造成不必要的麻烦。
上一节:KS03-02   几种常见的国际化编程场景下一节:KS04-01   exe+dll编程

页: [1]
查看完整版本: 【独家连载】Qt入门与提高:KS03-03 God!全是英文,我的翻...