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

第一:代码编写

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值