Qt国际化——多语言翻译时值得注意的一个编程问题

转载自:http://blog.csdn.net/e5max/article/details/43241137


问题:

在用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()函数之前初始化的,所以这时很可能导致你的中文出现乱码。所以一定要确保在初始化含有中文的字符串之前,你的程序已经设置了支持中文。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 第1章走近Qt 1.1Qt简介 1.2Qt纪事概览 1.3Qt套件的组成 1.4Qt的授权 1.5Qt的产品 1.6Qt的服务与支持 1.7Qt的最新进展 1.7.1增加协议 1.7.2开放源代码库 1.7.3确定Qt的发展方向 1.7.4Qt4.5——Qt发展的重要里程碑 1.8为什么选择Qt 1.9问题与解答 1.10总结与提高 第2章Qt的安装与配置 2.1获取Qt 2.2协议说明 2.3安装Qt 2.3.1Qt/X11的安装 2.3.2Qt/Windows的安装 2.3.3Qt/Mac的安装 2.3.4Qt/WindowsCE 2.3.5Qt/S60 2.3.6基于Linux发行版的安装 2.4配置Qt4环境 2.4.1Windows平台 2.4.2X11平台 2.5问题与解答 2.6总结与提高 第3章Qt编程基础 3.1标准C++精讲 3.1.1程序设计语言介绍 3.1.2C++语法基础知识 3.1.3C++高级应用——虚函数 3.2Windows编程基础 3.2.1需要掌握的技能 3.2.2Windows运行机理 3.2.3Windows编程基础 3.3Linux编程基础 3.3.1你必须掌握的技能 3.3.2文件系统管理 3.3.3XWindow系统 3.3.4常用命令 3.3.5Shell应用 3.3.6使用库程序 3.3.7使用vi 3.3.8使用GCC 3.3.9使用GDB 3.4Mac编程基础 3.4.1你必须掌握的技能 3.4.2MacOSX的系统架构 3.4.3MacOsX文件系统 3.4.4Cocoa应用开发简介 3.4.5Xcode简介 3.5问题与解答 3.6总结与提高 第4章Qt4集成开发环境 4.1常见的QtIDE 4.2QtCreator 4.2.1简介 4.2.2主要特点 4.2.3安装与配置 4.3Eclipse! 4.3.1简介 4.3.2主要特点 4.3.3安装与配置 4.3.4使用要领 4.4VisualStudio2008与Qt4.5 4.5问题与解答 4.6总结与提高 第5章使用Qt基本GUI工具 5.1使用QtDesigner。进行GUI设计 5.1.1简介 5.1.2启动并设置QtDesigner 5.1.3功能说明 5.1.4QtGUI设计基本流程 5.2使用QtAssistant获取在线文档与帮助 5.2.1简介 5.2.2Qt的参考文档 5.2.3使用QtAssistant 5.3使用QtDemo学习Qt应用程序开发 5.4问题与解答 5.5总结与提高 第6章Qt4程序开发方法和流程 6.1开发方法 6.2HelloQt 6.2.1基本流程 6.2.2源码分析 6.2.3.编译运行 6.2.4第2种方法 6.2.5第3种方法 6.3几个重要的知识点 6.4问题与解答 6.5总结与提高 第7章对话框 7.1QDialog类 7.2子类化QDialog 7.3快速设计对话框 7.4常见内建对话框的使用 7.4.1标准输入框 7.4.2标准颜色对话框 7.4.3标准字体对话框 7.4.4标准消息对话框 7.4.5标准对话框的使用实例 7.5模态对话框与非模态对话框 7.6问题与解答 7.7总结与提高 第8章主窗口 8.1主窗口框架 8.2创建主窗口的方法和流程 8.2.1方法 8.2.2流程 8.3代码创建主窗口 8.3.1头文件 8.3.2实现文件 8.4使用QtDesigner创建主窗口 8.4.1创建菜单 8.4.2创建动作 8.4.3创建工具栏 8.4.4创建锚接窗口部件 8.4.5创建中心窗口部件 8.5中心窗口部件专题 8.5.1几种常见情形 8.5.2创建和使用 8.6Qt4资源系统 8.6.1Qt资源系统的改进 8.6.2Qt4资源集文件 8.6.3资源文件的使用方法 8.6.4资源浏览器的使用 8.7锚接窗口 8.7.1创建锚接窗口的方法和流程 8.7.2设置锚接窗体状态的方法 8.8多文档 8.9问题与解答 8.10总结与提高 第9章Qt样式表与应用程序外观 9.1应用程序的外观 9.1.1应用程序的风格 9.1.2如何设置样式 9.2QStyle类的使用 9.3样式表概述 9.4使用样式表 9.4.1与QtDesigner集成使用 …… 第10章在程序中使用.ui文件 第11章布局管理 第12章使用QtCreator 第13章Qt核心机制与原理 参考文献 后记

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值