本帖最后由 baizy77 于 2019-7-2 20:26 编辑
版权声明--------------------------------------------------------------------------------------------------------------------- 作者: 女儿叫老白 转载请注明出处! --------------------------------------------------------------------------------------------------------------------- 网页版课程源码 提取码: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文件抽取(具体可以见前面的章节),以免造成不必要的麻烦。
|