• <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>
            posts - 24,  comments - 62,  trackbacks - 0

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

            創(chuàng)建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文件都從它而來。為了創(chuàng)建這文件,需要用到GNU gettext工具集中的xgettext。向xgettext傳入些必要的信息,來創(chuàng)建.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文件。接著創(chuàng)建wx.Locale對象,將其初始化為簡體中文,這將對應于zh_CN。最后將wx.GetTranslation做了一全局映射,這樣你在其他類中,比如示例中TestFrame也能使用_('xx')調用。這樣wxPython的i18n工作就完成了,下面是翻譯前后的界面截圖。

            wxpython

            一些有益的討論

            .mo文件的查找目錄

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

            wxzh

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

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

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

            工具鏈再討論

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

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

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

            <2008年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿(4)

            隨筆分類

            隨筆檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品国产一区二区三区日韩| 久久无码AV中文出轨人妻| 人人妻久久人人澡人人爽人人精品| 亚洲国产成人久久精品影视| 久久亚洲欧美国产精品| 亚洲午夜久久久影院伊人| 久久久精品人妻一区二区三区蜜桃| 香蕉99久久国产综合精品宅男自 | 国内精品人妻无码久久久影院| 人妻无码精品久久亚瑟影视 | 欧美精品一区二区久久| 亚洲国产成人久久一区WWW| 模特私拍国产精品久久| 亚洲人成伊人成综合网久久久| 久久精品免费一区二区| 久久综合狠狠综合久久| 热久久这里只有精品| 色8激情欧美成人久久综合电| 亚洲伊人久久综合影院| 久久精品国产久精国产一老狼| 久久人人爽人人爽人人片av高请| 久久久久久亚洲AV无码专区| 久久久青草青青亚洲国产免观| 欧美久久亚洲精品| 少妇高潮惨叫久久久久久| 精品久久久久久久| 久久综合精品国产一区二区三区| 久久人人爽人人爽人人av东京热| 人妻无码αv中文字幕久久琪琪布| 久久91综合国产91久久精品| 国内精品久久久久久麻豆| 久久婷婷色综合一区二区| 久久精品国产网红主播| 亚洲国产成人久久综合野外| 亚洲伊人久久精品影院| 国内精品久久久久久久影视麻豆| 亚洲AV无码久久| 亚洲国产成人久久综合野外| 粉嫩小泬无遮挡久久久久久| 国内精品久久久久影院老司| 99久久精品免费|