Django國際化依賴于GNU gettext工具集,所以在實現國際化之前需要先裝gettext. sudo apt-get install gettext
可以通過在python交互模式下測試一下有沒有安裝成功 import django
from django.utils.translation import ugettext
Django實現翻譯需要在python代碼和模板中添加鉤子(翻譯字符串) 如: python代碼中: ugettext(“test”) django模板中: {% trans “test” %} 當然,Django國際化不僅僅這么簡單,還有ungettext, gettext_lazy, blocktrans等等,這里只是介紹實現國際化需要的操作. 1.創建一個項目
2.Django國際化的配置需要在settings文件中添加以下幾個東西: USE_I18N = True
在middleware中添加 'django.middleware.locale.LocaleMiddleware',
當然,這個middleware不是隨便添加的,需要添加在sessionMiddleware之后,CommonMiddleware之前,如果使用的CacheMiddleware則放在CacheMiddleware之后. 3.創建一個APP python manage.py startapp internation
或者使用 django-admin.py startapp internation
然后在settings的app中添加internation 4.創建view cd internation
創建view函數 from django.utils.translation import ugettext as _
from django.shortcuts import render_to_respoonse
def test_trans(request):
return render_to_response("hello.html", {"hi": _("hi")})
5.配置url 在urls.py中添加 from internation.views import test_trans
url(r'^hello/$', test_trans),
6.在internation中添加templates, 創建hello.html mkdir templates
touch hello.html
記住要在hello.html中添加{% load i18n %}(寫在最開頭) 然后編寫簡單代碼 {% load i18n %} <!DOCTYPE html> <html> <head> <title>welcome</title> </head> <body> <span>{{ hi }}</span> </body> </html>
7.生成翻譯文件 在app下創建locale文件夾,因為在運行時,Django構建一個內存中的文字-翻譯目錄,其搜索加載編譯后的.mo文件的順序是: 優先搜索settings文件中LOCALE_PATHS配置的路徑, 其次搜索各個app下有沒有locale 最后,django/conf/locale中提供的Django提供的基本翻譯用作后備. 其實,locale因為主要作用于整個項目,而不是某個app,所以推薦創建在最外面,和manage.py在同一個根目錄下 然后在settings.py中添加: import os PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) LOCALE_PATHS = ( os.path.join(PROJECT_ROOT, 'locale/'), )
接著使用命令: python manage.py makemessages -l en_US
python manage.py makemessages -l zh_CN
此時locale目錄結構應該是: –locale –en_US –LC_MESSAGES –django.po –zh_CN –LC_MESSAGES –django.po 編輯en_US下的django.po msgid "hi"
msgstr "hello"
zh_CN下的django.po msgid "hi"
msgstr "你好"
調用命令python manage.py compilemessages 將會生成對應的django.mo文件. 因為我把LOCALE_PAHTS設置成與settings.py在同一目錄下的緣故,需要將編譯好的locale移到translation中. 8.測試運行 python manage.py runserver 8000 打開瀏覽器輸入: http://127.0.0.1:8000/hello 即可看到"你好"或者"hello" 主要看瀏覽器的當前語言設置,可以在設置中更改當前語言. 9.更高級的使用方法 很多網站上都提供按鈕來切換語言,一般都是中英文切換,這里就用最簡單的按鈕切換中英文. 只需要在之前的代碼上稍作修改. 首先需要在settings.py中添加 LANGUAGES = ( ('en', 'English'), ('zh-CN', 'Chinese'), )
表示兩種語言切換. 然后在urls.py中添加 (r'^i18n/', include('django.conf.urls.i18n')),
接著在hello.html修改為 ... <body> <form action="/i18n/setlang/" method="post" id="myform"> <input type="hidden" name="next" value="{{ to_url }}" /> {% for language in LANGUAGES %} {% ifnotequal LANGUAGE_CODE language.0 %} <input type="hidden" name="language" value="{{ language.0 }}"/> {% endifnotequal %} {% endfor %} </form> <span>{{ hi }}</span><br /> <span>{% trans "hi" %}</span><br /> <a href="#" onclick="submit()">translate</a><br /> </body> <script type="text/javascript"> function submit() { document.getElementById("myform").submit(); } </script>
然后把views中返回值增加一下 return render_to_response("hello.html", {"hi": _("hi"), LANGUAGES: settings.LANGUAGES, LANGUAGE_CODE: request.LANGUAGE_CODE})
最后進行測試,重啟服務器,打開瀏覽器,點擊translate就可以切換中英文了.
新聞熱點
疑難解答