周海汉 /文
2010.2.17
我以前一篇文章《wxpython 使用 XRCed创建界面 》,提到如何用xrced创建界面以及它支持gettext的i18n,但并没有具体的i18n的实现。本文举例基于xrced的i18n的实现。
参考文档中有金庆的关于xrc的i18n的实现。不过,他在2007年末是完全自己实现装载xrc,那么事件,控件的绑定都需要自己实现。而xrced自动生成的代码可以自动实现装载和绑定,我的实现是基于自动的代码之上的i18n。应该比金庆的更简单快捷。尤其是界面复杂而又经常变动时。
所以本文可以算是他的文章的一个有益补充与更新。
保存为xrci18n.xrc,如下:
在“generate python"对话框里,一定选上"generate gettext strings".生成xrci18n_xrc.py。
新建一个文件xrci18nfrm.py,继承自动生成的xrcxrcframe框架类,用于重载方法,事件的实现。而xrci18n_xrc.py每次修改xrc界面都会自动生成,导致你的实现可能丢失,所以要在新文件中继承并实现。
这里增加了对i18n的支持。实现了一个函数i18n_install. 并在__init__方法中调用。
wx的i18n不是单纯的gettext就可以的。必须使用wx.Locale(). 代码中将其语言初始化为wx.LANGUAGE_CHINESE_SIMPLIFIED,即中文简体。
设置翻译语言路径,增加类别。最后使用gettext安装该语言。
此处可以再实现为配置文件,以及根据系统环境自动选择语言。
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/目录下。
继承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