青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 24,  comments - 62,  trackbacks - 0

應用程序國際化,在開源世界里常以i18n被提及,i18n是Internationalization的簡寫,正好18個字母。在wxPython程序進行i18n,如果字符串是編碼在源文件中時,完全可按照python程序的i18n的方法,即使用gexttext和locale模塊。而wxPython程序在使用XRC文件做為界面資源時,則應使用wx.Locale模塊,它封裝了區域化相關的操作。i18n,或者國際化實際上涉及到語言習慣,數字格式等等類別的內容。這里只介紹語言多國化,將一個簡單的英文程序轉換為中文,涉及到源文件,可從這里下載。

創建PO文件

PO文件是Portable Object文件的簡稱,它包含需要翻譯的字符串。我們需要從源文件進行提取。首先,對源文件test.py編輯,標識代碼里需要翻譯的字符串內容。我們使用_("xx")的方法,這種形式可能在許多開源源代碼中見識過。

#加載菜單欄
menubar = rc.LoadMenuBar('IDR_MENU')

這里的IDR_MENU是資源標識ID,不需要翻譯,因此不做改變,而下面的代碼:

info.SetVersion('1.0')
info.SetDescription('XRC i18n Demo')

'XRC i18n Demo'是描述性的文本,需要進行翻譯,將需要處理為

info.SetVersion('1.0')
info.SetDescription(_('XRC i18n Demo'))

接著需要生成.pot(Portable Object Template),這是po的模板文件。在將來程序可能配置成其他語種,其他語言的po文件都從它而來。為了創建這文件,需要用到GNU gettext工具集中的xgettext。向xgettext傳入些必要的信息,來創建.pot文件。

>xgetttext --output=test.pot test.py

我們將wxPython界面以XRC文件保存了,那里同樣有要翻譯的字符串需要提取。用XRCed工具將XRC生成python代碼,勾選上'Generate gettext strings'項即可。將源文件和XRC生成的test_xrc.py文件一起處理,生成一個test.pot。

>xgettext --output=test.pot test.py test_xrc.py

將得到的test.pot另存為test.po文件,然后進行翻譯編輯,在這過程中文件需要使用utf-8編碼。將對應的英文翻譯成中文,將charset更改為utf-8。

"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: test.py:19
msgid "XRC i18n Demo"
msgstr "XRC 國際化示例"
...

.pot和.po這些文件都是文本文件,主要供翻譯者使用。為了使程序在運行時能獲取相關的翻譯的內容,要進行所謂的編譯過程,將文本文件轉換為二進制文件.mo。這里用了gettext工具集中的另一程序msgfmt。

> msgfmt --output=test.mo test.po

因為windows下沒有像linux像有公共存儲.mo文件的目錄,保持平臺的遷移性,在應用程序本地目錄下新建locale目錄,用來存放編譯過的.mo文件,然后將test.mo移動至locale目錄。在完成這些步驟后,就轉入代碼方面的更改了。

wxPython代碼更改

原先的代碼只需要做小改動:

def OnInit(self):
    wx.Locale.AddCatalogLookupPathPrefix('locale')
    self.locale = wx.Locale(wx.LANGUAGE_CHINESE_SIMPLIFIED)
    self.locale.AddCatalog('test')
    import __builtin__
    __builtin__.__dict__['_'] = wx.GetTranslation

首先,增加了新的目錄文件路徑,這將使wxPython搜索這個目錄,尋找匹配的.mo文件。接著創建wx.Locale對象,將其初始化為簡體中文,這將對應于zh_CN。最后將wx.GetTranslation做了一全局映射,這樣你在其他類中,比如示例中TestFrame也能使用_('xx')調用。這樣wxPython的i18n工作就完成了,下面是翻譯前后的界面截圖。

wxpython

一些有益的討論

.mo文件的查找目錄

如果你將locale目錄下的test.mo文件刪除掉,然后將test.py中的wx.LANGUAGE_CHINESE_SIMPLIFIED改為wx.LANGUAGE_CHINESE,重新運行程序看看。發現界面變成了如下的繁體中文,但是菜單'檔案'下的Exit還是英文。

wxzh

因為缺失.mo文件,但又指定wx.LANGUAGE_CHINESE,wxPython運行時使用了wxstd.mo文件。wxstd.mo有許多預編譯好的常見字符串的對應關系,它隨wxPython發布,在wx/locale下有許多語言版本的wxstd.mo。

對于wxPython會對待查目錄"DIR"來搜索.mo文件,查找它下面的這些目錄,(DIR/LANG/LC_MESSAGES;DIR/LANG;DIR),對于哪些是待查目錄,各個系統下又有不同,在所有的平臺上,LC_PATH環境變量指定的目錄將成為待查目錄,在Linux下/share/locale, /usr/share/locale, /usr/lib/locale, /usr/locale /share/locale以及當前目錄將是待查目錄。在上面我們已經用過AddCatalogLookupPathPrefix()函數,其作用就是增加自己的待查目錄。

在示例程序中,將test.mo放在locale\zh_CN\LC_MESSAGES或者locale\zh\LC_MESSAGES同樣是可行的。但是如果使用wx.LANGUAGE_CHINESE指定,則zh_CN目錄將不可行,因為它只是特化目錄,指簡體中文,而zh目錄同樣適用。

工具鏈再討論

gettext進行國際化是開源社區的主流方案,它也提供了許多實用工具供使用。上面提到了xgettext,msgfmt,還有msginit.exe,它將根據.pot文件創建新的.po文件,然后初始化一些元信息,像作者信息,項目,以及編碼等,當然也可像上面的手工編輯。msgmerge.exe將兩個.po文件進行合并。除了使用GNU Gettext工具集,也可使用隨python發布的tool\i18n目錄下pygettext.py和msgfmt.py,它們等同于上述的兩個工具。

對于編輯.po文件,可以嘗試一下Poedit,它提供了圖形化的編輯環境,其他功能我就不清楚了。

posted on 2008-07-15 20:21 len 閱讀(2254) 評論(0)  編輯 收藏 引用 所屬分類: 程序開發

<2008年6月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用鏈接

留言簿(4)

隨筆分類

隨筆檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情第1页| 在线精品视频一区二区三四| 91久久综合亚洲鲁鲁五月天| 欧美二区在线观看| 久久久噜噜噜| 亚洲欧美激情视频| 在线亚洲伦理| 午夜亚洲激情| 久久国产直播| 亚洲电影免费在线| 亚洲电影免费观看高清完整版在线观看| 国产精品无码专区在线观看| 国产精品日本一区二区| 国产一区二区你懂的| 国产欧美一区二区三区沐欲| 国内欧美视频一区二区| 亚洲国产精品成人精品| 亚洲片区在线| 亚洲永久免费精品| 欧美亚洲日本国产| 久热国产精品| 宅男精品视频| 久久精品五月| 欧美日本国产一区| 合欧美一区二区三区| 亚洲日本欧美天堂| 欧美在线日韩| 亚洲日韩欧美视频| 亚洲精品小视频在线观看| 亚洲字幕一区二区| 欧美a级片网站| 国产精品久久久久久福利一牛影视| 好看的av在线不卡观看| 99视频在线精品国自产拍免费观看 | 一区二区三欧美| 日韩亚洲视频在线| 一本一本大道香蕉久在线精品| 欧美亚洲日本网站| 亚洲国产精品一区制服丝袜 | 久久嫩草精品久久久精品一| 欧美日韩一区二区精品| 影音先锋久久资源网| 在线天堂一区av电影| 欧美成人精品福利| 在线观看国产日韩| 欧美一级播放| aa亚洲婷婷| 欧美激情一区二区三区在线| 国产日韩精品在线观看| 99视频精品| 亚洲国产高清在线| 久久久久久夜精品精品免费| 国产在线精品成人一区二区三区 | 国内精品视频在线观看| 亚洲女ⅴideoshd黑人| 亚洲第一毛片| 久久嫩草精品久久久精品| 国产嫩草影院久久久久| 一本色道久久综合狠狠躁篇的优点 | 亚洲欧美日韩国产中文在线| 欧美1区2区| 亚洲国产视频一区| 欧美大色视频| 久久精品一区二区三区中文字幕| 国产亚洲一区二区三区在线播放 | 91久久极品少妇xxxxⅹ软件| 欧美专区在线观看| 亚洲一区二区在线免费观看| 国产精品成人av性教育| 中文日韩在线视频| 亚洲日韩欧美一区二区在线| 欧美大色视频| 亚洲黄一区二区| 91久久精品国产91久久性色tv| 久久久免费精品| 亚洲电影免费在线 | 午夜视频一区在线观看| 国产精品婷婷午夜在线观看| 欧美亚洲网站| 亚洲午夜免费视频| 亚洲欧美成人精品| 亚洲在线成人| 国产欧美日韩三区| 久久在线视频在线| 日韩亚洲不卡在线| 一区二区不卡在线视频 午夜欧美不卡在| 欧美另类高清视频在线| 中日韩美女免费视频网址在线观看 | 欧美在线播放视频| 黑人巨大精品欧美一区二区| 久久综合中文| 这里是久久伊人| 亚洲一区视频在线观看视频| 国产亚洲福利社区一区| 欧美顶级少妇做爰| 欧美日韩国产首页| 香蕉av777xxx色综合一区| 欧美在线观看日本一区| 亚洲黑丝在线| 亚洲一区二区三区精品在线观看| 国产欧美精品久久| 欧美成人蜜桃| 国产精品无码永久免费888| 久久久噜噜噜久噜久久| 欧美高清视频www夜色资源网| 午夜在线一区| 欧美成人69av| 久久精品二区| 欧美日韩中文字幕综合视频| 久久久精品一区| 欧美三级日本三级少妇99| 米奇777超碰欧美日韩亚洲| 欧美精品入口| 免费av成人在线| 国产精品青草久久久久福利99| 美女任你摸久久| 国产美女精品人人做人人爽| 最近看过的日韩成人| 国产主播一区| 午夜欧美理论片| 一二三区精品| 乱人伦精品视频在线观看| 欧美在线|欧美| 欧美精品亚洲精品| 欧美大学生性色视频| 国色天香一区二区| 亚洲一区二区三区高清不卡| 这里只有精品丝袜| 久久伊人亚洲| 久久久精品国产一区二区三区| 国产精品成人一区二区三区夜夜夜| 欧美激情视频一区二区三区不卡| 欧美激情1区2区3区| 1000部精品久久久久久久久| 欧美一区在线直播| 久久精品伊人| 国外成人在线| 能在线观看的日韩av| 久久人人97超碰人人澡爱香蕉| 久久裸体艺术| 欧美成人免费va影院高清| 亚洲老板91色精品久久| 亚洲欧美在线x视频| 亚洲精品黄色| 欧美日韩综合在线免费观看| 亚洲三级免费| 欧美激情网友自拍| 亚洲精品久久久久久下一站 | 久久久久五月天| 国产欧美一区二区三区沐欲| 亚洲伊人观看| 久久国产直播| 影音国产精品| 欧美激情视频在线免费观看 欧美视频免费一 | 国产小视频国产精品| 午夜精品久久久久久久99水蜜桃 | 亚洲日本va在线观看| 亚洲精品中文字幕在线| 欧美日韩精品在线观看| 亚洲午夜伦理| 蜜桃av一区| 一本久久青青| 国产真实精品久久二三区| 欧美 日韩 国产一区二区在线视频| 暖暖成人免费视频| 亚洲一区www| 伊人狠狠色丁香综合尤物| 免费成人性网站| 宅男噜噜噜66一区二区66| 噜噜噜在线观看免费视频日韩| 日韩视频免费在线观看| 国产精品swag| 久久成人免费电影| 亚洲精品久久嫩草网站秘色 | 亚洲美女在线看| 国产精品一区二区在线观看不卡 | 亚洲一区二区三区四区在线观看| 亚洲欧美日本国产专区一区| 久久久免费av| 欧美激情一区二区三区高清视频| 蜜桃精品久久久久久久免费影院| 欧美顶级艳妇交换群宴| 亚洲深爱激情| 亚洲国产一区二区在线| 国产精品乱子久久久久| 久久电影一区| 午夜精品久久久久久久久久久久 | 欧美伊人久久久久久午夜久久久久| 老司机免费视频一区二区三区| 欧美激情国产日韩| 欧美在线网址| 一区二区三区日韩欧美精品| 亚洲激情一区二区| 国产午夜亚洲精品不卡| 亚洲一区免费网站| 亚洲免费成人av| 亚洲第一精品夜夜躁人人爽 | 亚洲一区视频在线| 一区二区三区免费看| 久久综合中文字幕|