Django支持网站多语言切换

分为models、views和模版(templates)三处转换

修改settings

  • 1.增加中间件,顺序靠前

    1
    2
    3
    4
    5
    MIDDLEWARE = [
    ...
    'django.middleware.locale.LocaleMiddleware',
    ...
    ]
  • 2.增加LANGUAGES和LOCALE_PATHS,并且手动在项目根目录创建locale文件夹

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # I18N translation
    LANGUAGE_CODE = 'zh-Hans'
    LANGUAGES = (
    ('zh-hans', ugettext_lazy('Simplified Chinese')),
    ('en',('English'))
    )

    LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale'),
    ]

生成翻译文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.执行命令生成翻译文件,请先安装gettext
http://gnuwin32.sourceforge.net/packages/gettext.htm
安装完成后执行如下命令
python manage.py makemessages -l zh_Hans
python manage.py makemessages -d djangojs -l zh_Hans
执行完成后就可在locale文件下生成了zh_Hans/LC_MESSAGES/

2.修改django.po文件,对每一个msgid进行翻译,翻译内容填在msgstr中,如下格式:
msgid "Request is busy"
msgstr "请求繁忙"

msgid "Set up MFA"
msgstr "设置MFA"
3.使用命令进行翻译
python manage.py compilemessages

修改templates目录下的html文件

1
2
3
4
5
# 在base.html页面中加载i18n,其他页面extand base.html
{% load i18n %}
{% extends 'base.html' %}
修改需要进行翻译的内容,与djano.po文件对应
{% trans 'MFA State' %}

修改url,添加切换语言功能

1
2
from django.conf.urls.i18n import i18n_patterns
urlpatterns += i18n_patterns('',)
1
2
3
4
5
urlpatterns = [
...
path('i18n/<str:lang>/', I18NView.as_view(), name='i18n-switch'),
...
]
-------------本文结束感谢您的阅读-------------
原创技术分享,感谢您的支持。