找回密码
 立即注册
收起左侧

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

0
回复
7047
查看
[复制链接]
累计签到:41 天
连续签到:1 天
来源: 原创 2018-10-15 14:19:12 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

版权声明
---------------------------------------------------------------------------------------------------------------------
该文章原创于Qter开源社区(www.qter.org
作者: 女儿叫老白
转载请注明出处!
---------------------------------------------------------------------------------------------------------------------
网页版课程源码 提取码: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文件的代码。
代码清单:

  1. // 安装我们项目的翻译文件
  2. QString strPath = qgetenv("TRAINDEVHOME");    // 获取环境变量所指向的路径
  3. strPath += "/system/lang";    // $TRAINDEVHOME/system/lang/ks03_01.qm
  4. QScopedPointer<QTranslator> gpTranslator(new QTranslator(QCoreApplication::instance()));
  5. if (gpTranslator->load("ks03_01.qm", strPath)) {
  6.      QCoreApplication::installTranslator(gpTranslator.take());
  7. }
复制代码

       上述代码用来在应用程序中加载qm文件。如果strPath或者"ks03_01.qm"这两处代码有拼写错误,那么将导致翻译文件加载失败,如果qm文件并未存放到strPath目录中,也会导致qm文件加载失败。

结语
----------------------------------------------------------------------------------------------------------------------
       本文列举了可能导致翻译失败的几种场景,都是我们进行国际化编程时需要注意的点。建议大家不要手工编写ts文件,而应该采用Qt规定的机制来实现ts文件抽取(具体可以见前面的章节),以免造成不必要的麻烦。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了