关于编写QT国际化程序中需要注意的问题
2015-11-05 10:30
519 查看
第一:代码编写
代码编写的过程中需要注意的有如下几点:
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.在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
相关文章推荐
- Qt界面跳转中的超前引用问题
- CUDA + QT Creator + Win7的集成
- Qt Creator 配置Msvc 2012的调试器
- qt-opensource-windows-x86-vs2010-4.8.6 + qt-creator-windows-opensource-2.8.0
- QT设置窗口背景
- Qt5.5.0环境下的mingw编译dcmtk 3.6.1_20150924
- PyQt4(简单信号槽)
- Qt学习之路
- QT生成com组件信息
- QT写文件
- Qt辅助调试release版本代码的函数Msg()
- ubuntu下编译qt5
- Qt创建不重复随机数
- Ubuntu14.04下Qt+Creator的安装
- QT学习之路(一)——大话QT
- qt 5 数据库操作(mysql)
- 我的QT5学习之路(一)——浅谈QT的安装和配置
- VS Qt,去掉烦人的红线提示
- Qt4.8.1学习笔记1—QTreeWidget控件的使用
- Qt 5 如何修改打包好的应用程序图标