Django是一個開放原始碼的Web應用框架,
同時也支援多語言 i18n 的使用,
這就是今天的主題
Django 多語言 i18n 範例教學
i18n 是什麼?
其實這個名字來自於 internationalization
字母 i 與 n 中間共有18的字母
也就是國際化的意思。
要在 Django 使用 i18n 需要經過幾個步驟,
要使用翻譯的字詞同樣也需要相應的 TAG 或語法。
此處使用 Django 2.2 版本作為範例,
不同版本的 Django 各有差異需要特別注意。
首先要到 settings 確認下列這些設定值是否正確
- LANGUAGE_CODE = 'zh-Hant'
- USE_I18N = True
- USE_L10N = True
- LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')]
- USE_TZ = True
接著找到 MIDDLEWARE 在 session 與 common 中間新增一行:
'django.middleware.locale.LocaleMiddleware',
如果要在 template 使用 i18n的話需要在 TEMPLATES 的 context_processors 新增
'django.template.context_processors.i18n',
如果需要限定支援的語言的話可新增
_ = lambda s: s
LANGUAGES = (
('en', ('English')),
('zh-hant', _('Traditional Chinese')),
)
最後就能夠到 console 以命令
python manage.py makemessages -l [語言]
來新增,
它會在上述的 LOCALE_PATHS 中新增該語言,
前往該語言的資料夾找到附檔名為 PO 的文件,
在 msgstr 新增或修改該字詞的翻譯,
最後再執行
python manage.py compilemessages -l zh_Hant
即可完成翻譯。
此處以資料庫的說明文字作為範例,
ugettext_lazy()的字串會隨著語言的切換而改變,在 models, forms, model forms 中均使用此方法
ugettext()的字串只會隨著 settings 中的 LANGUAGE_CODE 而改變
i18n_patterns 提供了在 url 快速切換語言的方法,
需要在 urls.py 中加上
from django.urls import path, include
from django.conf.urls.i18n import i18n_patterns
urlpatterns = [
path('i18n/', include('django.conf.urls.i18n')),
path('admin/', admin.site.urls),
]
urlpatterns += i18n_patterns(
path('', home, name='home'),
)
將需要快速切換的 url 放在 i18n_patterns 中,
就能讓使用者直接由 url 切換語言。
只要該網頁有使用 i18n 就必須加上
{% load i18n %}
並且以
{% trans "target string" %}和{% blocktrans %} {% endblocktrans %}
這兩個 TAG 來定義要翻譯的文字
也能夠以 TAG
{% language 'en' %}{% endlanguage %}
直接切換語言,
或者使用TAG
{% get_current_language as LANGUAGE_CODE %}
來取得目前使用的語言
就需要時間打磨了,
這就是今天的主題
沒有留言:
張貼留言