django Translation 实现中英文切换
环境
1
| django 2.0.6 (之前文章有详细项目新建的描述)
|
配置
setting.py
配置 MIDDLEWARE
1 2 3 4 5
| MIDDLEWARE = [ 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', ]
|
注意:LocaleMiddleware 需要放在 SessionMiddleware 之后,CommonMiddleware 之前。
详细介绍
配置 template
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django.template.context_processors.i18n', ], }, }, ]
|
启用 i18n
1 2 3 4 5 6 7 8 9 10 11 12
| USE_I18N = True USE_L10N = True USE_TZ = True # 翻译文件所在目录,需手工创建 LOCALE_PATHS = [ os.path.join(BASE_DIR, 'locale'), ] LANGUAGE_CODE = 'zh-hans' LANGUAGES = { ('zh-hans', '中文简体'), ('en', 'English'), }
|
注意:如果 local 文件夹在 app 目录下无需创建 LOCALE_PATHS 变量。详细介绍
LANGUAGES 中可以添加多个 django 支持的语言(这边以中英文为例)
yourproject/urls.py
1 2 3 4 5 6 7
| from django.conf.urls.i18n import i18n_patterns urlpatterns = [ path('i18n/', include('django.conf.urls.i18n')), ] urlpatterns += i18n_patterns( path('', include('yourapp.urls')), )
|
声明需要翻译的字符串
准备工作
需要提前安装 gettext
在 ubuntu 下运行
1
| sudo apt-get install gettext
|
即可。
在 python 代码中
在此示例中,文本“欢迎访问我的网站”。 被标记为翻译字符串:
1 2 3 4 5
| from django.http import HttpResponse from django.utils.translation import gettext as _ def my_view(request): output = _("欢迎访问我的网站") return HttpResponse(output)
|
更多介绍
在 tmplate 代码中
需要将{% load i18n %}
放到模板文件头部(继承的文件也需要假如该声明)
{%trans%}模板标记转换为常量字符串(用单引号或双引号括起来)或变量内容:
1 2
| <title>{% trans "This is the title." %}</title> <title>{% trans myvar %}</title>
|
如果您的翻译需要带变量的字符串(占位符),请改用{%blocktrans%}。
1
| {% blocktrans %}This string will have {{ value }} inside.{% endblocktrans %}
|
如果您想要检索已翻译的字符串而不显示它,可以使用以下语法:
1 2 3
| {% trans "This is the title" as the_title %} <title>{{ the_title }}</title> <meta name="description" content="{{ the_title }}">
|
更多介绍
创建语言文件
要创建或更新消息文件,请运行以下命令:
1
| django-admin makemessages -l en
|
en 是你想创建的文件的语言。
注意:该脚本应该从两个地方之一运行(在运行前需要新建 locale 文件夹):
1 2
| Django项目的根目录(包含manage.py的目录)。 您的一个Django应用程序的根目录。
|
运行完命令后会创建一个.po 文件
编辑 yourproject/locale/en/LC_MESSAGES/django.po
1 2 3
| #: path/to/python/module.py:23 msgid "欢迎访问我的网站。 " msgstr "Welcome to my site."
|
msgid 是标记的想要翻译的字符串
msgstr 是你想要翻译后显示的字符串,默认为空。
更多介绍
编译语言文件
运行以下代码
1
| django-admin compilemessages
|
大功告成。
详细介绍
设置语言
在模板中添加以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| {% load i18n %} <form action="{% url 'set_language' %}" method="post">{% csrf_token %} <input name="next" type="hidden" value="{{ redirect_to }}" /> <select name="language"> {% get_current_language as LANGUAGE_CODE %} {% get_available_languages as LANGUAGES %} {% get_language_info_list for LANGUAGES as languages %} {% for language in languages %} <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected{% endif %}> {{ language.name_local }} ({{ language.code }}) </option> {% endfor %} </select> <input type="submit" value="Go" /> </form>
|
实现语言选择功能。
更多介绍
以上是简单的实现中英文切换的步骤,如需了解更多,可以点击更多介绍进入官网进行了解。
提示:复制后请把%替换为小写。