关于编写QT国际化程序中需要注意的问题

来源:互联网 发布:apache tomcat 7.0.57 编辑:程序博客网 时间:2024/05/17 05:59

第一:代码编写

代码编写的过程中需要注意的有如下几点:

1.在OQbject的子类中使用tr("翻译字符串")的话,需要在其子类中加上Q_OBJECT,因为QT的翻译会使用上下文,如果不加上Q_OBJECT则会

   将其命名空间修改为子类的名称,导致无法找到翻译词条。在qt的lupdate提取词条的时候,会提取到其子类的命名空间下。

2.如果不想给QObject的子类增加Q_OBJECT的话,可以这么做,强制给tr增加命名空间,一般的做法是QObject::tr(),这种写法既可以写在非OQbject的

  子类中,也可以写在QObject的子类中,但是其命名空间始终是QObject。在qt的lupdate提取词条的时候会提取到QObject的命名空间下。

3.翻译中消息ID的使用,也就是说再tr("")的前面包含一些注释,类似/*=messageid*/,这些信息会写入到ts文件中,如果messageid一样的话,qt会进行强制合并

  这样也会导致出现翻译问题。


第二:工具的使用

lupdate是用来提取翻译文件(ts)的,在调用的时候,根据你的文件编码格式需要指定编码 --codecfortr GBK(如果是中文的话),另外,如果不想在命令行指定,也可

直接指定在pro文件中。CODECFORTR=GBK。

另外还可以在pro文件中指定翻译文件的目标位置

TRANSLATIONS=../../object.ts,同样也是可以在命令行来实现该操作通过-ts来实现


第三:qt的ts提取默认是不支持原文是非asii字符的,这样翻译会有问题,最好tr("")包含的是英文,否则会出现提取问题(涉及到文件的编码)。


第四:在非Q_OBJECT的类中支持Qt的翻译

Q_DECLARE_TR_FUNCTIONS

1 0
原创粉丝点击