【发布时间】:2019-01-09 12:06:49
【问题描述】:
在我的 Django 2.0 站点中,我想将 html 标记的 lang 属性设置为当前语言环境的语言。在其他模板扩展的base.html 中,我按以下方式使用get_current_language
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE }}">
...
</html>
该网站有多种语言的翻译。如果我在浏览器中切换语言,我会看到正确的翻译,但lang 属性将始终包含en。
在我的settings.py 我有
USE_I18N = True
LANGUAGE_CODE = 'en-us'
根据Goran的建议,中间件顺序如下
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
]
LANGUAGES 设置未设置。
正如Kostadin Slavov 所建议的那样,我尝试从视图中打印语言。看来get_current_language调用django.utils.translation.get_language,所以我在视图中插入了以下内容
from django.utils import translation
print(translation.get_language())
它打印正确的值(例如de,当浏览器设置为德语时访问视图)。
我还缺少什么?
【问题讨论】:
-
我已经根据文档修复了中间件的顺序;它没有解决问题,但我已将信息添加到上面的问题中。
-
您确定向
{% url 'set_language' %}发送POST 请求吗?该视图期望通过 POST 方法调用docs -
不,我正在发送 Accept-Language 标头。翻译正常工作就足够了。
-
你为 LANGUAGE_CODE 和 LANGUAGES 设置了什么,如果有的话?
标签: django localization django-templates internationalization