python國際化 i18n 和中英文切換

2022-03-25 05:27:25 字數 4711 閱讀 2765

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

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

# some descriptive title.

, year.

#msgid ""

msgstr ""

"project-id-version: package version\n"

"pot-creation-date: 2007-01-24 15:05+china standard time\n"

"po-revision-date: year-mo-da ho:mi+zone\n"

"last-translator: full name \n"

"language-team: language \n"

"mime-version: 1.0\n"

"content-type: text/plain; charset=charset\n"

"content-transfer-encoding: encoding\n"

"generated-by: pygettext.py 1.5\n"

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

# some descriptive title.

, year.

#msgid ""

msgstr ""

"project-id-version: package version\n"

"pot-creation-date: 2007-01-18 09:55+china standard time\n"

"po-revision-date: year-mo-da ho:mi+zone\n"

"last-translator: full name \n"

"language-team: language \n"

"mime-version: 1.0\n"

"content-type: text/plain; charset=gb2312\n"

"content-transfer-encoding: utf8\n"

"generated-by: pygettext.py 1.5\n"

那個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 _(「python is a good language.」)

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

# some descriptive title.

, year.

#msgid ""

msgstr ""

"project-id-version: package version\n"

"pot-creation-date: 2007-01-18 09:55+china standard time\n"

"po-revision-date: year-mo-da ho:mi+zone\n"

"last-translator: full name \n"

"language-team: language \n"

"mime-version: 1.0\n"

"content-type: text/plain; charset=gb2312\n"

"content-transfer-encoding: utf8\n"

"generated-by: pygettext.py 1.5\n"

msgid " hello world!"

msgstr "世界你好!"

msgid " python is a good language."

msgstr "python 是門好語言."

儲存之,執行./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

檔案未做任何的翻譯

,預設字串不被替換

.上述實現的方法用在介面程式設計上可以實現中英文介面的切換

,需要作個配置檔案選擇中/英文

;或者在主檔案開始時先獲取作業系統本地語言然後根據獲取結果再設定中/英文

,這樣就可以實現軟體語言自適應;,

對於python

來說就比較困難了

,需要在軟體中加入介面重新整理機制

,不推薦

,可以在切換中

/英文設定後軟體下一次啟動生效

(軟體如

ulipad).

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)

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...