在我的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
)。
我还想念什么?
答案 0 :(得分:2)
我尝试通过以下步骤模拟您的环境:
componentWillReceiveProps
然后,按照您的示例更新生成的代码:
mysite / settings.py
$ cd ~
$ python3 -m venv ~/venvs/mysite
$ source ~/venvs/mysite/bin/activate
$ pip install django==2.0.8
$ django-admin startproject mysite
mysite / urls.py
...
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'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',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
...
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['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',
],
},
},
]
...
templates / base.html
from django.contrib import admin
from django.urls import path
from django.views.generic.base import TemplateView
urlpatterns = [
path('', TemplateView.as_view(template_name='base.html'), name='home'),
path('admin/', admin.site.urls),
]
有了Django生成的代码和上面的一些更新,如果我以以下方式启动访问http://localhost:8000/的浏览器的语言,并切换为以下语言,则可以看到不同的语言代码:
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE }}">
<body>
<pre>LANGUAGE_CODE = {{ LANGUAGE_CODE }}</pre>
<body>
</html>
在本地环境中尝试我的步骤,并检查其是否有效,然后将您的项目与上面的代码进行比较。
尝试使用diffsettings查看“当前设置文件与Django默认设置之间的差异”。