Django多語言化

2021-07-08 14:14:57 字數 1803 閱讀 6026

i18n(其**是英文單詞 internationalization的首末字元i和n,18為中間的字元數)是「國際化」的簡稱。在資訊領域,國際化(i18n)指讓產品(出版物,軟體,硬體等)無需做大的改變就能夠適應不同的語言和地區的需要。對程式來說,在不修改內部**的情況下,能根據不同語言及地區顯示相應的介面。在django中實現i18n的過程如下:

(1)修改settings.py 

settings.py 裡面有乙個 language_code屬性,這裡設定了**預設的語言。由於settings.py裡面的屬性支援重寫,所以從官方文件上可以得知,預設情況下已經 啟用i18n支援了,我們需要加入一些middleware來支援動態切換語言。

middleware_classes = (

'django.contrib.sessions.middleware.sessionmiddleware',

'django.middleware.locale.localemiddleware',

'django.middleware.common.commonmiddleware',

)

注意順序,localemiddleware必須在sessionmiddleware下面,因為需要從session裡面獲取乙個語言型別。(2)在urls.py裡面配置乙個i18n的輔助應用

(r'^i18n/', include('django.conf.urls.i18n')),

有了這個就可以自由的切換語言了
(3)新增翻譯檔案

配置完成之後在專案目錄底下建立乙個locale目錄,locale下子目錄的樣式有固定格式,如:

locale//lc_messages/

如果是中文,對應的目錄就是 locale/zh_cn/lc_messages/

如果是英文,則應該是 locale/en/lc_messages/

以此類推。

為了在django裡面使用i18n,po檔名必須為djang.po,編譯過後必須為django.mo,那麼翻譯的內容就固定在po檔案裡了。乙個典型的po檔案類似一下樣式:

msgid ""

msgstr ""

"project-id-version: dbscale-web\n"

"report-msgid-bugs-to: \n"

"pot-creation-date: 2015-04-09 02:13-0500\n"

"po-revision-date: 2015-04-21 19:43+0000\n"

"last-translator: yannal \n"

"mime-version: 1.0\n"

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

"content-transfer-encoding: 8bit\n"

"language: zh_cn\n"

"plural-forms: nplurals=1; plural=0;\n"

msgid "username:"

msgstr "使用者名稱:"

msgid "password:"

msgstr "密碼:"

格式相對比較簡單,是鍵值對的形式。

(5)編譯 

(6)模板檔案

載入i18n,在模板檔案的頭部加入,如對於需要i18n支援的字段使用,這裡的key就是msgid。

注意:每次改動了django.po檔案,需要重新編譯mo檔案和重啟伺服器。

iOS 多語言化

ios開發中,實現多語言化。首先建立乙個string file的檔案,可以命名localization.strings.然後在這兒新增你程式希望實現的多語言。點localizations 下的 號即可新增,這裡我新增了english和簡體中文 新增之後,回到你的工程目錄下,會發現剛建立的locali...

多語言化(session)

有時候,我們需要將資料儲存到sessionstorage和localstorage中,這樣做的好處有 1 快取資料 2 減少對記憶體的占用 但是,storage只能儲存字串的資料,對於js中常用的陣列或物件卻不能直接儲存。1 2 3 4 5 6 7 varobj sessionstorage.obj...

android國際化(多語言)

1.很大程度上,為什麼我們能如此方便的實現國際化 解析度匹配等?主要就是得益於 android 中這種獨特的資源管理方式。程式設計師的 可以不直接和資源發生關係。android 中,我們通常通過 r 檔案提供的索引來間接的引用某乙個資源。而如何維護資源索引和真正的資源之間的關係,這個活,卻是 and...