Django 1.5
Python 2.7.3
國際化支持,網上一搜詳細的例子很多。本以為是一個簡單的case,結果折騰了好幾個小時卻百撕不得騎姐??!最終去翻看官方教程,總算找到解決方案。
簡單說下如何國際化支持(以中文國際化為例):(詳情參閱:http://djangobook.py3k.cn/2.0/chapter19/)
對 Django 中 Python 代碼進行國際化主要用到 ugettext(),gettext_noop(),gettext_lazy() 和 ungettext() 等函數;模板中則使用trans、blocktrans標簽。
國際化步驟:
1.在你的App 目錄下創建 locale 目錄,并運行“django-admin.py makemessages -l zh_CN”產生 locale/zh_CN/LC_MESSAGES/django.po 文件。它會自動搜索目錄下所有需要國際化的內容,生成一個清單文件(django.po),然后打開該文件,加上對應的中文翻譯即可。
2.運行“django-admin.py compilemessages”命令,生成一個django.mo文件,這是真正在運行時所調用的。
按照教程所說,django運行時會根據算法自動找到該文件,然而遇到的問題是它沒有被找到。顯示的依然是默認的英文。
Django使用以下算法尋找翻譯:
首先,Django在該視圖所在的應用程序文件夾中尋找 locale 目錄。 若找到所選語言的翻譯,則加載該翻譯。
第二步,Django在項目目錄中尋找 locale 目錄。 若找到翻譯,則加載該翻譯。
最后,Django使用 django/conf/locale 目錄中的基本翻譯。
估計這個問題與我的項目的目錄結構有關,app沒有直接在項目的根目錄下,而是中間多了一個目錄apps。(感興趣的可參考一下:
django最佳實踐:項目布局 )
翻看了下官方文擋,總算找到了解決辦法:
在項目的settings.py配置文件中,添加
LOCALE_PATHS變量,把locale目錄添加到其中(
官方鏈接)。
LOCALE_PATHS = (
'/home/www/project/common_files/locale',
'/var/local/translations/locale'
)
在django1.5下,國際化默認是支持的,并不需要像各教程所說那樣在配置文件中添加相應的中間件(默認已經加上了)。如果你發現你的國際化資源文件沒有被載入,那就去上面這個變量中添加locale路徑吧。