基于xrced的i18n的实现
来源:互联网 发布:阿里云的操作系统好吗 编辑:程序博客网 时间:2024/06/09 23:03
周海汉 /文
2010.2.17
我以前一篇文章《wxpython 使用 XRCed创建界面》,提到如何用xrced创建界面以及它支持gettext的i18n,但并没有具体的i18n的实现。本文举例基于xrced的i18n的实现。
参考文档中有金庆的关于xrc的i18n的实现。不过,他在2007年末是完全自己实现装载xrc,那么事件,控件的绑定都需要自己实现。而xrced自动生成的代码可以自动实现装载和绑定,我的实现是基于自动的代码之上的i18n。应该比金庆的更简单快捷。尤其是界面复杂而又经常变动时。
所以本文可以算是他的文章的一个有益补充与更新。
一、使用xrced建立一个简单框架
保存为xrci18n.xrc,如下:
二、使用xrced生成py代码
在“generate python"对话框里,一定选上"generate gettext strings".生成xrci18n_xrc.py。
三、增加对i18n的支持代码
新建一个文件xrci18nfrm.py,继承自动生成的xrcxrcframe框架类,用于重载方法,事件的实现。而xrci18n_xrc.py每次修改xrc界面都会自动生成,导致你的实现可能丢失,所以要在新文件中继承并实现。
这里增加了对i18n的支持。实现了一个函数i18n_install. 并在__init__方法中调用。
wx的i18n不是单纯的gettext就可以的。必须使用wx.Locale(). 代码中将其语言初始化为wx.LANGUAGE_CHINESE_SIMPLIFIED,即中文简体。
设置翻译语言路径,增加类别。最后使用gettext安装该语言。
此处可以再实现为配置文件,以及根据系统环境自动选择语言。
四、处理xrc资源
gettext不能直接处理xrc,只能处理自动生成的xrci18n_xrc.py。
4.1 安装gettext
其实python自带gettext处理模块,但我还是选择安装gettext和msgfmt,方便使用。
sudo agp-get install gettext
4.2 生成pot文件和mo文件
其中messages.po是xgettext提取出来的。如下:
可以看到hello和hello,world两个资源。
修改后如下:
调用msgfmt生成mo文件:
zhouhh@zhouhh-home:~/xrci18n$ msgfmt messages.po
4.3 遵循gettext格式,新建locale目录
下面有各种语言如en_US,zh_CN,每种语言下面新建LC_MESSAGES目录,下面放真正的翻译mo文件。
zhouhh@zhouhh-home:~/xrci18n$ ls locale
en_US zh_CN
zhouhh@zhouhh-home:~/xrci18n$ ls locale/zh_CN
LC_MESSAGES
zhouhh@zhouhh-home:~/xrci18n$ ls locale/zh_CN/LC_MESSAGES/
messages.mo
再将生成的messages.mo拷贝到locale/zh_CN/LC_MESSAGES/目录下。
五、新建测试文件xrci18n.py
继承wx.App是为了程序以后有更多的扩展。实现其OnInit和OnExit方法。
六、执行
python xrci18n.py
看到程序已经变成中文界面。由于csdn关闭传图,故不能展示效果。
七、参考:
社区讨论:http://bbs.pythonid.com/viewthread.php?tid=179
wxpython官网:http://wiki.wxpython.org/XRCAndI18N
相关ppt:http://yergler.net/talks/desktopapps_uk/
wxpython官网:http://wiki.wxpython.org/UsingXmlResources
金庆的相关文章:http://blog.csdn.net/jq0123/archive/2007/12/17/1943440.aspx
- 基于xrced的i18n的实现
- XRCed生成的代码分析
- i18n的实现
- Struts 实现的I18N
- 基于jQuery.i18n.properties 实现前端页面的资源国际化
- Asp.net项目基于jQuery.i18n.properties 实现前端页面的资源国际化
- Java 的i18n问题
- JSP的I18N标签
- Java的国际化(i18n)
- IOS 应用的I18N
- JSP的I18N标签
- Java的国际化(i18n)
- struts2的国际化i18n
- i18n的意思
- Java的国际化(i18n)
- Ext的I18N解决方案
- django的i18n
- JSP的I18N标签
- .bat 文件技巧集合
- 2009年天津软考地点和时间
- 用Eclipse+Tomcat+Access实现JDBC-ODBC桥
- MRO & super
- GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。
- 基于xrced的i18n的实现
- Style Guide for Python Code
- linux指令1(리눅스명령1)
- java 操作mysql 注意事项
- final 关键字 和 static 用法
- 的
- 我的七个建议
- Windows XP操作系统的应用
- 2009-2-17