python國際化 i18n 和中英文切換

2021-08-31 15:50:59 字數 2724 閱讀 2910

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

python通過gettext模組支援國際化(i18n),可以實現程式的多語言介面的支援,下面是我的多語言支援實現:

1.        在python安裝目錄下的./tools/i18n/(windows下例 d:\program files\python25\tools\i18n)目錄中找到pygettext.py執行之,生成翻譯檔案模版messages.pot,內容大概是這個樣子:

改之,charset=gb2312 content-transfer-encoding: utf8如下:

那個msgid」 」 和msgstr」 「不要動

好,翻譯檔案已經建立了,儲存之,檔名改為lang.po.

2.        建立翻譯檔案路徑,在主檔案目錄下建立中文翻譯路徑 ./locale/cn/lc_messages/(windows下例d:\ python-prj\src\locale\cn\lc_messages,其中src目錄是原始檔主目錄),英文翻譯路徑 ./locale/en/lc_messages/(windows下例d:\ python-prj\src\locale\en\lc_messages,其中src目錄是原始檔主目錄)

3.        在主檔案中引入gettext模組:

# -*- coding: utf-8-*-

#!/usr/bin/env python

import gettext

gettext.install('lang','./locale', unicode=false)

gettext.translation('lang','./locale', languages=['cn']).install(true)

第四行中lang是翻譯檔案主名,./locale是存放翻譯檔案的路徑,第三個引數是是否使用unicode,第五行languages引數指定要使用的語言存放的子目錄,這裡cn表示使用./locale/cn/lc_messages/路徑下的翻譯檔案.

注意: # -*- coding: utf-8 -*-一定要寫在前兩行,寫第三行都不會生效

4.        處理要翻譯的字串,例:

print 「hello world!」

print 「python is a good language.」

改之:print _(「hello world!」)

print _(「pythonis a good language.」)

5.        編寫並生成翻譯檔案,開啟步驟1中編輯過的lang.po檔案新增翻譯文字,形成如下內容:

儲存之,執行./tools/i18n/目錄下的msgfmt.py,linux下命令為:python msgfmt.py lang.po(widows下的話,將lang.po檔案拷貝到./tools/i18n/目錄下,執行命令列視窗,到改目錄下鍵入:msgfmt.py lang.po),生成lang.mo,將該檔案拷貝至./locale/cn/lc_messages/目錄下,將步驟1生成的lang.po檔案直接生成lang.mo檔案拷貝到./locale/en/lc_messages/目錄下,好了一切都準備好了,命令列下執行你的主檔案,看看兩個print命令是不是輸出了世界你好! python 是門好語言.,如果將主檔案第五行languages引數置為en,則輸出是hello world! python is a good language.,因為en目錄下lang.mo檔案未做任何的翻譯,預設字串不被替換.

note:

.呼叫python安裝目錄的 tools/i18n/pygettext.py抽取所需翻譯的模板

>>> pygettext.py path/to/yourfile.py

將生成乙個名為messages.pot的檔案

2.生成模板檔案後,修改這個模板檔案,其中的msgid為鍵值,對應你程式裡寫的文字,如:_("new file"),而msgstr為翻譯後的值。還有就是注意修改檔案頭部分content-type的charset為合適的編碼,比如utf8

3.編寫好模板後,把副檔名修改為.po,執行tools/i18n/msgfmt.py,生成二進位制的資源檔案

>>> msgfmt.py messages.po

將生成乙個名為messages.mo的檔案

4.把這個mo檔案放在正確的位置.

比如你在程式中是這樣寫的:

gettext.install('i18ntest', './locale', unicode=true)

gettext.translation('i18ntest', './locale', languages=['cn']).install(true)

那麼你的程式目錄下需要存在./local/cn/lc_messages/i18ntest.mo

這樣程式啟動時就會讀取這個資源檔案,替換對應的文字,實現國際化了。

注意:如果使用utf格式儲存,po檔案不能有bom頭。cn目錄是所對應的語言,lc_messages目錄是gettext.py裡要求的,mo檔案必須和所定義的域同名,見

gettext.py的mofile = os.path.join(localedir, lang, 'lc_messages', '%s.mo' % domain)

給我老師的人工智慧教程打call!

react Taro 使用i18n國際化

npm install react i18next i18next i18next browser languagedetector 新建index.jsx import languagedetector from i18next browser languagedetector import i1...

iOS應用的國際化i18n

ios應用的國際化,主要分為3個部分 下面我就來一一說明。info.plist 檔案的國際化 我們使用xcode 4.5 建立乙個新專案,會自動建立乙個 en.lproj 目錄,這個目錄下存放的就是需要國際化的檔案 預設為英文 下面,我們還需要建立中文國際化支援。1.建立名為 zh hans.lpr...

iOS應用的國際化i18n

m ios應用的國際化,主要分為3個部分 下面我就來一一說明。info.plist 檔案的國際化 我們使用xcode 4.5 建立乙個新專案,會自動建立乙個 en.lproj 目錄,這個目錄下存放的就是需要國際化的檔案 預設為英文 下面,我們還需要建立中文國際化支援。1.建立名為 zh hans.l...