今天建立了個django工程,用的是目前django 1.9.6,建立工程後,settings.py中設定中文顯示支援(最簡單的,例如把admin介面的預設英文改成中文),定義
TIME_ZONE = 'Asia/Shanghai' LANGUAGE_CODE = 'zh-cn'
當然TIME_ZONE只是指定時區,和中文顯示沒有關係,這裡一併修改了預設值。結果執行專案時報錯了,如下:
django IOError: No translation files found for default language zh-cn
即找不到zh-cn對應的本地化檔案。一般而言,zh-cn編碼對應的本地化資料夾為zh_CN,我去django的安裝目錄查詢zh_CN,結果確實沒有找到,在django安裝目錄的contrib子目錄下的一系列子目錄的locale資料夾中,沒有zh_CN,而有zh_Hans。不知道為什麼django的這個版本沒有zh_CN資料夾,可能是一個bug吧。網上有人說將zh_Hans目錄全部複製一份並命名為zh_CN,就可以解決這個問題,我試了下,再次執行確實可行了,在admin介面顯示了中文。至於這種比較山寨的方法有沒有隱患,現在還不知道,以後遇到再說吧。
不過話說回來,其實還有正統的方式去生成國際化檔案,如下命令:
django-admin.py makemessages -l zh_CN
不過這個需要gettext元件,如果你是在windows上開發,那麼你需要自己安裝這個元件,
在http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/下載gettext-runtime-X.zip以及gettext-tools-X.zip的最新版(注:X為版本號)並解壓後,將兩個bin目錄可以合併後放入系統環境變數中。不過該方法我沒有驗證,感興趣的可以試試。
後來我又想,django之前的老版本是有zh_CN的,要說這個一個bug,估計也比較低階,按理不應該的。於是又查,發現貌似zh_Hans可能已經替代zh_CN了。Han表示漢字,s表示Simplified簡體,反正我設定為LANGUAGE_CODE = 'zh-hans'也是正常顯示中文。
zh-cn will expired in Django1.9, the new format is zh-hans, but drf3.1.0 does not support this type of language.
上面的意思是在django1.9中,zh-cn過期了,可以用zh-hans替代,不過可能有些django的第三方模組還沒有跟上這個變化。
總之,仁者見仁智者見智了,其實大可不必如此研究,只是突然對這個比較感興趣所以多研究了一會。
ps:網上很多地方對於LANGUAGE_CODE = 'zh-cn'有各種不同寫法,包括zh_CN,zh-CN等,有的人還說只能用某某寫法等,反正我是沒看出來區別,我也都試了,都沒發現問題。
另外說個題外話,之前一直都不知道settings.py中的USE_I18N和USE_L10N是什麼意思,直到看到了下面的一段話:
當 Web 服務搭建好以後,可以接收來自全球不同國家使用者訪問。這樣就要求開發人員調整軟體,使之能適用於不同的語言,即國際化和本地化。國際化
-- Internationalization,i 和 n 之間有 18 個字母,簡稱 I18N,。本地化 -- localization, l 和 n 之間有 10 個字母,簡稱 L10N。國際化意味著 Web
產品有適用於任何地方的潛力,針對程式開發人員;本地化則是指使一個國際化的程式為了在某個特定地區使用而進行實際翻譯的過程,針對翻譯人員而言。