Qt国际化(3)——一些提示 Qt翻译问题
2013-04-08 10:12
162 查看
Qt国际化(3)——一些提示
推荐给好友
打印
加入收藏
更新于2009-04-29 15:52:04
Qt
常遇到Qt翻译问题,一些经验总结:
发现某个字符串翻译有问题,可以去查该串有没有被lupdate提取到.ts文件中,如果没有的话应该检查运行lupdate时所指定的.pro文件。如果.ts文件中能找到该串的话,则进一步检查.ts文件中的context设置与调用tr()函数时的context是否一致,以及经过linguist处理后的.ts文件中,该串是否已经被真正的翻译。另外还可能有问题的地方是QTranslator是否读取到了正确的.qm文件。
一些易犯的错误:
常犯的错误是拿到字符串对应的ID之后,便随意使用,比如将这些ID存放到一个txt文件中,这样的结果很可能是这些串根本就没被lupdate所提取出来,因为lupdate在扫描的时候只会注意tr()等一些关键字,这样在.qm文件中当然也没有对应的翻译串,最后的结果就是这些串不能被正确的显示翻译出来。
另一个问题是将翻译串放入数组中。简单的将ID放入数组中并不能引起lupdate的注意,这样的结果同上。这时候我们可以使用Qt提供的宏QT_TR_NOOP()或者QT_TRANSLATE_NOOP()以便于lupdate识别。比如:
注意QT_TRANSLATE_NOOP宏的第一个参数是const char * context,即上下文,这个概念的引入大概是为了改善同一个串在不同的上下文中可能需要不同的翻译的情况,但也带来了不少问题。我们可以看一看qmetaobject.cpp中QMetaObject::tr()的实现:
这里context的值被设置为d.stringdata,Qt元对象系统中d.stringdata实际上就是类的名字。但是如果你将某个串放在别的类中,比如说串TXT_1在Class
A中被加入某个数组中,并用QT_TR_NOOP宏包起来,但我们在Class B中才真正用tr()函数去使用它,那么lupdate扫描后得到的context值为A,而在Class
B中用tr()调用时context值为B,这种不一致也会导致最后翻译的不成功。如果不了解整个过程,又凑巧这么使用了的话,找出这种错误是非常费劲的。
推荐给好友
打印
加入收藏
更新于2009-04-29 15:52:04
Qt
常遇到Qt翻译问题,一些经验总结:
发现某个字符串翻译有问题,可以去查该串有没有被lupdate提取到.ts文件中,如果没有的话应该检查运行lupdate时所指定的.pro文件。如果.ts文件中能找到该串的话,则进一步检查.ts文件中的context设置与调用tr()函数时的context是否一致,以及经过linguist处理后的.ts文件中,该串是否已经被真正的翻译。另外还可能有问题的地方是QTranslator是否读取到了正确的.qm文件。
一些易犯的错误:
常犯的错误是拿到字符串对应的ID之后,便随意使用,比如将这些ID存放到一个txt文件中,这样的结果很可能是这些串根本就没被lupdate所提取出来,因为lupdate在扫描的时候只会注意tr()等一些关键字,这样在.qm文件中当然也没有对应的翻译串,最后的结果就是这些串不能被正确的显示翻译出来。
另一个问题是将翻译串放入数组中。简单的将ID放入数组中并不能引起lupdate的注意,这样的结果同上。这时候我们可以使用Qt提供的宏QT_TR_NOOP()或者QT_TRANSLATE_NOOP()以便于lupdate识别。比如:
static const char *greeting_strings[] = { QT_TR_NOOP("Hello"), QT_TR_NOOP("Goodbye") }; // 或者 static const char *greeting_strings[] = { QT_TRANSLATE_NOOP("FriendlyConversation", "Hello"), QT_TRANSLATE_NOOP("FriendlyConversation", "Goodbye") }; |
QString QMetaObject::tr(const char *s, const char *c) const { return QCoreApplication::translate(d.stringdata, s, c, QCoreApplication::CodecForTr); } |
A中被加入某个数组中,并用QT_TR_NOOP宏包起来,但我们在Class B中才真正用tr()函数去使用它,那么lupdate扫描后得到的context值为A,而在Class
B中用tr()调用时context值为B,这种不一致也会导致最后翻译的不成功。如果不了解整个过程,又凑巧这么使用了的话,找出这种错误是非常费劲的。
相关文章推荐
- QT的翻译问题
- Qt5 程序发布windowsXP一些问题
- TextinputLayout的错误提示的一些问题
- 关于Qt开发iPhone/iPad和Android环境下的应用的一些问题
- 转:Qt项目中遇到的一些小问题汇总
- QT_openCV2.4.9或相关版本编译正常,运行时提示“程序异常结束”问题分析
- Windows7下移植Qt4.8.4项目到QT5.2上时遇到的一些问题
- Qt creator工程项目移植时因环境变换造成qmake错误的解决方案 1.问题描述:移植从他机上的qt工程项目,打开时提示: Qt Creator找到了一个由其他开发环境创建的设置文件,或许
- 【翻译】培训提示:解决常见编码问题的简单技巧
- QT下生成可执行程序的方法及一些问题解决办法:
- Qt项目中遇到的一些小问题汇总
- osg,qt编译的一些问题
- Qt开始学习的一些问题
- Qt 笔记(记录使用Qt中遇到的一些问题)
- QT安装及编程的一些问题
- 【翻译】培训提示:解决常见编码问题的简单技巧
- 【ARM-Linux开发】使用QT和Gstreanmer 遇到的一些问题
- 一些错误提示的中文翻译
- VS中使用QT,多国语言翻译问题
- Qt5 程序发布windowsXP一些问题