免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3578 | 回复: 0
打印 上一主题 下一主题

python glade gettext多国语言的支持 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-03 17:19 |只看该作者 |倒序浏览

                    今天仔细研究了下gtk程序中多国语言的支持问题,自己也写了个简单的程序来实现gtk程序的中英文支持。用到的工具是glade-3,gettext,pygtk,python.对于这些工具的介绍我就省略了。网上有很多这方面的资料^_^。
    首先用glade-3绘制一个简单的UI,此文件命名为MultiLanguage.glade。glade中对多国语言的支持不需要特别设置,只需要在label,title的property中的translatable选为yes就行了。其他的就是在py中进行操作。然后写一个python脚本程序testMulti.py来运用这个glade。接着用xgettext及msgfmt命令来生成所需要的po,mo文件。具体如下:
    xgettext -ktranslatable -k_ MultiLanguage.glade testMulti.py -o MultiLanguage.po
    (在VI中需要对其进行编辑,修改MultiLanguage.po文件中的charset=CHARSET为charset=UTF-8。接着把msgid的英文语句翻译好写到msgstr中就行了。)
    msgfmt MultiLanguage.po -o MultiLanguage.mo
    sudo cp MultiLanguage.mo /usr/share/locale/zh_CN/LC_MESSAGE/MultiLanguage.mo
    这样运行./testMulti.py即可显示多国语言了。简单吧。
    testMulti.py文件中的主要内容如下:
#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk
import gtk.glade
import gettext
rcdomain = "MutiLanguage"
#localedir = "/home/spartk/mypro/pygtk"
localedir = "/usr/share/locale"
class MutilLanguage:
    def __init__(self):
        self.gladefile = "MutiLanguage.glade"
        #此句我调试了很久才搞定,真是郁闷。
        self.wTree = gtk.glade.XML(self.gladefile,"MainWin",rcdomain)
        dict = {"on_MainWin_delete_event": self.on_MainWin_delete_event}
        self.wTree.signal_autoconnect(dict)
        
        self.mainwin = self.wTree.get_widget("MainWin")
        #install language
        gettext.bindtextdomain(rcdomain, localedir)
        gettext.textdomain(rcdomain)
        gettext.install(rcdomain, localedir, unicode=True)
        gtk.glade.bindtextdomain(rcdomain, localedir)
        gtk.glade.textdomain(rcdomain)
        self.hbox1 = self.wTree.get_widget("hbox1")
        label = gtk.Label(_("Hello World"))
        label.show()
        self.hbox1.pack_start(label)
    def on_MainWin_delete_event(self, widget, event, data=None):
        self.mainwin.destroy()
        gtk.main_quit()
    def main(self):
        gtk.main()
if __name__ == "__main__":
    MutilLanguage().main()
注意:
1. 要显示中文,需要把系统语言设置成中文。至于在不需要改变系统语言时,如何显示中文,不清楚。
2. 经验证,mo,po文件存放的路径可以是任意的,只要在py程序中正确指定即可。
   
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/49080/showart_1811306.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP