有关XRC I18N的第一个中文文档。
转自 [python-chinese]

[python-chinese] 用XRC生成wxPython的界面,如何实现I18N呢?

Hong Yuan hongyuan在homemaster.cn
星期一 七月 23 13:04:46 HKT 2007


马踏飞燕 写道:> 我用wxPython自带的XRCed生成了一个界面,然后用代码调用之后可以显示出界面了.> 但是,现在的问题是,我虽然用XRCed提供的生成gettext的功能而得到了一个写有> _('File') 这样的代码,但是我用poEdit翻译之后并且install了,只有在程序代码中直接创建控件的地方写的_('some> text')才有翻译的效果,从xrc生成的还是英文的.>> 有什么办法吗?

wxPython中XRC文件对 i18N的支持

上面的方法是对于所有python程序的通用方法。对于wxPython的程序,如果所有的界面元素都使用代码来生成,即界面中的文字都出现在界面 代码中,则可以完全使用相同的方法来实现i18N。

但是wxPython提供了另外一种生成面界的方法,即使用XRC资源文件定义界面,在程序中只要加载相应的界面对象。通过这种方式生成界面时在 python代码中看不见界面元素的字串常量,这些字符串都保存在.xrc的资源文件中,无法用xgettext直接进行处理。

wxPython的XRC支持包括了对i18N的支持。函数XmlResource有一个默认参数flags=XRC_USE_LOCALE,这样 在加载XRC资源时会根据当前locale判断是否存在语言包,从语言包中将相应字串的翻译显示出来。wxPython本身库函数中的文字内容则存放在 wxstd.mo中。

这样对于xrc使用i18N的前提一是正确设置wxPython的locale,二是从xrc文件中抽取需要翻译的字符串,生成.mo文件。具体的 步骤如下:

  1. 从xrc文件中生成.po文件用于翻译。有两种方法,一是使用wxrc -g将xrc文件中可翻译的字符串转换成_(str)的格式,然后用xgettext像对其他程序一样进行.po文件的抽取。wxrc工具在Debian 中位于wx2.5-common包内。另一种方式是将xrc文件导入到wxGlade这样的工具中,通过wxGlade转换成C++或python代码, 然后使用xgettext进行字串抽取。翻译完的.mo文件必须放在[lang]/LC_MESSAGES目录下。
  2. 初始化locale,指定语言以及在何处可以找到相应的.mo文件。通常情况下系统首先在当前目录中查找catalog,然后在系统目录中搜 索。但保险起见用AddCatalogLookupPathPrefix比较可靠。
L = wx.Locale()L.Init(wx.LANGUAGE_CHINESE_SIMPLIFIED)L.AddCatalogLookupPathPrefix('./locale')L.AddCatalog('messages')

注意: 在wxPython 2.7以后的版本中,必须先生成wx.App对象后才能调用wx.Locale对象的Init方法。因此对上述代码需略微修改,将L=wx.Locale ()放在生成wx.App前,而在wx.App对象的OnInit代码中调用L.Init等代码。这样可以保证在OnInit结束后L对象依旧作为全局变 量存在。

  1. 之后可以使用XmlResource生成相应的对象。也可以使用Locale.GetString(string)函数返回对应Locale 的翻 译字符。该函数的功能类似于_(),但如果在同一界面中需要显示同一字串的不同语言译文时只要调用不同Locale的GetString函数即可。

wxPython中XRC文件对 i18N的支持相关推荐

  1. wxPython中XRC文件i18n示例

    wxPython中XRC文件i18n示例 (转载请注明来源于金庆的专栏) 简介 XRC文件是XML格式的界面定义文件, 用于在wxWidgets/wxPython中生成界面. i18n(Interna ...

  2. vscode 中增加文件后缀类型的支持

    vscode 中增加文件后缀类型的支持 遇到下面这种情况,某些后缀文件未被vscode识别,该如何解决? 只需2步即可解决: 输入CTRL + SHIFT + P ,打开命令窗口,输入open wor ...

  3. GUI programming with wxPython 之 XRC

    为什么80%的码农都做不了架构师?>>>    一.概念 XRC(XML Resource)的设计来源于wxWidgets,它的想法很简单,就是将界面设计的工作从程序中独立出来.具体 ...

  4. taro 在components文件夹中 新建组件时,组件支持自定义命名,但是不能大写开头...

    在components文件夹中 新建组件时,组件支持自定义命名,但是不能大写开头.否则会报错 错误写法: // 真实路径 import MinaMask from '../../components/ ...

  5. android webview 多文件上传,Android中的webview支持页面中的文件上传实例代码

    Android webview在默认情况下是不支持网页中的文件上传功能的: 如果在网页中有,在android webview中访问时也会出现浏览文件的按钮 但是点击按钮之后没有反应... 那么如何能够 ...

  6. 在VB中INI文件的读写、删除(对中文支持很好)

    很多时候我们编一个程序不一定要用到注册表来保存设置(如果说一个程序没有设置就不算好程序了).INI是一个很好的选择.有人说,Savesetting是一个不错的选择,但是我了解到,不能永久的保存(起码在 ...

  7. wxWidgets中从xrc文件中获取菜单选项的指针

    加载一个menu.xrc文件 <?xml version="1.0" encoding="UTF-8" standalone="yes" ...

  8. wxWidgets:使用xrc文件分离界面与代码

    wxwidgets支持一种叫xrc的文件,我们可以将字符串,控件,界面布局,图形,放到xrc文件中,程序运行以后再调用这些文件.这就可以在不修改程序的情况下,修改界面,字符串,以及程序中用到的图形,甚 ...

  9. struts2中实现文件的上传

    struts2中实现文件的上传 文件上传的action,同时过滤上传的文件格式只对满足要求的格式支持上传 package com.inspur.action; import java.io.File; ...

最新文章

  1. 人人必须要知道的语义分割模型:DeepLabv3+
  2. Visual Studio 出现“无法解析的外部符号”错误
  3. 希尔排序c语言,希尔排序(C/C++实现)
  4. java游戏_java开发的七个金典游戏你小时候肯定玩过
  5. vs2013 error MSB8031 MBCSMFC问题的解决
  6. linux 产生50-100之内的随机数
  7. tomcat JRE_HOME
  8. leetcode 567. 字符串的排列(滑动窗口)
  9. Windows EC2 Instance 忘记密码如何重置
  10. java检测textarea换行_Textarea和Java 换行符
  11. java编程 数组的中位数中枢_Java算法题1:找出两个有序数组的中位数?
  12. qpython op怎么用_QPython OP
  13. (十二)GA-RPN----2019CVPR论文解读
  14. cad抛物线曲线lisp_CAD如何画抛物线啊?
  15. 8. G1垃圾收集日志
  16. 层次低的人有什么特点
  17. android+广播+讲解,Android广播机制
  18. 如何设计一个注册中心
  19. Pytorch-gpu版安装教程【注意:无需提前安装cuda和cudnn】
  20. 城市之眼视觉计算技术

热门文章

  1. matlab中desolve,MATLAB考试题的.doc
  2. 2015年,这些营销有点“色”
  3. 大数据分析中数据获取的方式有哪些
  4. Prescan 8.5.0、MatlabR2020a、Carsim2019.1、罗技Logitech G29套装联合仿真注意事项
  5. 软考-中级-网络工程师-笔记-第11章-网络管理
  6. Unity 3D视频播放器场景C#脚本
  7. 完成java课设的经验_课设后的感想
  8. php抓取新浪数据,php 抓取新浪新闻的程序代码
  9. Java 编程中,有哪些好的习惯应该从一开始就值得坚持?
  10. 【调剂】浙江理工大学【杭州】欢迎凝聚态物理、电子信息等专业优秀学子调剂深造...