Django 國際化(二)- 設置以「語言」開頭的 URL 並支持用戶切換語言
4 min readNov 17, 2019
本篇介紹 Django (2.2 版本) 如何實現依照語言顯示對應網站的功能。適用讀者:對 Django 有基礎認識的工程師。
此系列共兩篇,本篇承上篇:Django 國際化(一)- 在 template 、views、models 新增 i18n 標籤生成 .po & .mo 檔,如果對國際化不清楚可以先參考上篇。
1. 設置以「語言」開頭的 URL
Django 支持依照用戶選取的語言作為 URL 的開頭,比方說我將網站的語言切換成英文,則 URL 會以 /en/ 開頭,當語言切換成繁體中文時,URL 會以 /zh-hant/ 開頭。如下圖:
首先,在 <your_project>.settings.py 設定網站默認的語言以及支持用戶選取的語言:
# <your_project>.settings.pyfrom django.utils.translation import gettext_lazy as _# LANGUAGE_CODE:
# 1. 啟動網站時的默認語言
# 2. 關於 LANGUAGE_CODE 的格式請參考:
# https://docs.djangoproject.com/en/2.2/ref/settings/
LANGUAGE_CODE = 'zh-Hant' # default=en-us# 支持用戶選取的語言,並用 gettext_lazy 翻譯文字
LANGUAGES = (
('en', _('English')),
('zh-hant', _('Traditional Chinese')),
)
在 locale 設置 ‘Traditional Chinese’ 對應的中文字
# <your_project>/locale/zh_Hant/LC_MESSAGES/django.pomsgid "Traditional Chinese"
msgstr "繁體中文"
設置完後記得要執行下面指令將 .po 轉為 .mo 檔:
python manage.py compilemessages
在 <your_project>/url.py 用 18n_patterns 設置以 「語言」開頭的 URL,注意要將不需要以 「語言」開頭的 URL 另外處理喔!
# <your_project>/url.pyfrom django.conf.urls.i18n import i18n_patterns# 不需要以「語言」開頭的 URL
urlpatterns = [
path('admin/', admin.site.urls),
# 如果有用 Django 第三方登入的 package 也要放這裡
path(
'social-auth/',
include(('social_django.urls', 'social_django'),
),
path('i18n/', include('django.conf.urls.i18n')),]# 設置以「語言」開頭的 URL 如 /en/demo 或是 /zh-TW/demo
urlpatterns += i18n_patterns([
# path(<your_path>, include(('<your_app>.urls', '<your_app>')),
])
2. 支持用戶切換語言
接下來在首頁 navbar 新增下拉選單,就可以支持用戶切換語言囉!
支持用戶選取文字
程式如下:
1. 首先用 {% load i18n %} 引入 i18n。
2. 在 navbar 用 form 處理用戶切換語言的請求。