Qt国际化——多语言翻译时值得注意的一个编程问题
来源:互联网 发布:js如何清空div的内容 编辑:程序博客网 时间:2024/05/24 05:27
问题:
在用Qt开发的项目中,可以很轻松的实现多语言切换的功能,即国际化。关于这方面的资料网上不少,我这里不谈这个问题,而是记录一个在实际编程中值得注意的一个实践问题。
我们知道,在不是继承自QObject的类中,如果使用 tr(“撤销”); 这样的代码会编译出错;我们也知道, tr(const char * sourceText,...) 其实是 QObject的一个公有静态函数,于是我们可以这样使用:QObject:: tr(“撤销”); 。代码得以编译通过!
但是,这样在后面用Qt语言家翻译的时候,会有一些问题。在Qt语言家翻译的时候,待翻译的词条是按照“上下文(context)”来进行归类划分的。如果要翻译的字符串所出现的类继承自QObject,那么这个上下文就是词条所在类的名字(例如, MyDialog)。但是如果要翻译的字符串所在的类并非继承自QObject的话,这个待翻译的词条(QObject:: tr(“撤销”); )则没有合适的上下文,那么就是全局的。当然,全局并不会有什么大问题,但是一旦像这种QObject:: tr(“撤销”); 全局的待翻译词条很多时,会变得难以识别,不好区分,给翻译工作带来很大麻烦。 特别是有重复的情形时,情况会变得更加糟糕。
解决办法:
1)让需要翻译的词条所在的类继承自QObject类,即使你这个类并不需要继承自QObject类(也许你并不需要这个类具有信号-槽功能),那么为了翻译,我觉得这样做也是值得的,就相当于为你的待翻译词条提供了一个合适的上下文支持。有些同学可能会觉得这样做会不会导致类变得臃肿,影响效率。我的建议是先不要考虑多,用用就会知道的。
2)用MyObject:: tr(“撤销”); 代替QObject:: tr(“撤销”); 注:这里的MyObject是你项目里任何一个继承自QObject的子类,这样的话,tr("撤销"); 这个词条就会出现在MyObject的上下文中。但是这样做会出现无谓的头文件包含。
3)直接使用QCoreApplication::translate ( const char * context, const char * sourceText, ....);。使用这个函数,可以通过函数的第一个参数指定合适的上下文。这种方法应该可以达到目的,但我没有试过。因为我觉得每次多写一个参数是一个累赘。而且这种人为指定的分类考验人的记忆。
另外,有一个题外话(我们项目曾经出现过的一个BUG):
如果在你的静态全局变量中出现了中文,值得注意的了,因为静态全局变量是在程序进入main()函数之前初始化的,所以这时很可能导致你的中文出现乱码。所以一定要确保在初始化含有中文的字符串之前,你的程序已经设置了支持中文。
- Qt国际化——多语言翻译时值得注意的一个编程问题
- Qt国际化——多语言翻译时值得注意的一个编程问题
- 替换class文件打补丁时值得注意的一个问题
- Java编程时值得注意的地方
- 流体浮动三列布局时值得注意的一个小问题
- eclipes lomboz插件安装时值得注意的小问题
- qt 翻译 语言家 国际化的使用
- 写UDP上传文件服务器时值得注意的几点
- 使用多维safearray时值得注意的地方
- Integer包装类数值比较时值得注意的地方
- Qt国际化(3)——一些提示 Qt翻译问题
- qt国际化与本地化中一个需要注意的地方
- QT国际化翻译的使用
- 关于编写QT国际化程序中需要注意的问题
- ASP.NET安全[开发ASP.NET MVC应用程序时值得注意的安全问题](转)
- QT 国际化,多语言平台的支持
- Qt界面多语言国际化的实现
- 国际化编程的注意点
- You requested 'iPhone 6 (9D9EC7F6-20A3-4884-B0EC-551ABE9CE0B0) (8.1 Simulator)', but the available d
- 利用GCC的预处理器分析包含指令之间的依赖关系
- android 自定义窗口大小在java中设定
- 【VB.NET】为什么叫VB.NET
- struts2的拦截器
- Qt国际化——多语言翻译时值得注意的一个编程问题
- [nginx]centos6.5下nginx-1.6.2的安装,与tomcat简单整合
- HDOJ 1017 A Mathematical Curiosity
- 动态注册native函数
- HDU 1990 & ZOJ 2992 Monkey Vines(数学啊)
- Hadoop数据类型
- 如何在Visual Studio中调试.NET源码
- 网络基本功(二十三):Wireshark抓包实例诊断TCP连接问题
- java连接access数据库说明以及示例代码