Ste*_*ögl 14 django localization django-templates internationalization
在我的Django 2.0站点中,我想lang将html标记的属性设置为当前语言环境的语言.在我base.html扩展的其他模板中,我使用get_current_language以下方式
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE }}">
...
</html>
Run Code Online (Sandbox Code Playgroud)
该网站提供多种语言的翻译.如果我在浏览器中切换语言,我会看到正确的翻译,但该lang属性将始终包含en.
在我的settings.py我
USE_I18N = True
LANGUAGE_CODE = 'en-us'
Run Code Online (Sandbox Code Playgroud)
并根据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',
]
Run Code Online (Sandbox Code Playgroud)
该LANGUAGES设置未设置.
正如Kostadin Slavov所建议的那样,我尝试从视图中打印语言.似乎get_current_language调用了django.utils.translation.get_language,所以我在我的视图中插入了以下内容
from django.utils import translation
print(translation.get_language())
Run Code Online (Sandbox Code Playgroud)
它打印正确的值(例如de,在浏览器设置为德语的情况下访问视图时).
我还缺少什么?
我尝试通过以下步骤模拟您的环境:
\n\n$ cd ~\n$ python3 -m venv ~/venvs/mysite\n$ source ~/venvs/mysite/bin/activate\n$ pip install django==2.0.8\n$ django-admin startproject mysite\nRun Code Online (Sandbox Code Playgroud)\n\n然后我更新了生成代码,如您的示例所示:
\n\n我的网站/settings.py
\n\n...\nMIDDLEWARE = [\n \'django.middleware.security.SecurityMiddleware\',\n \'django.contrib.sessions.middleware.SessionMiddleware\',\n \'django.middleware.locale.LocaleMiddleware\',\n \'django.middleware.common.CommonMiddleware\',\n \'django.middleware.csrf.CsrfViewMiddleware\',\n \'django.contrib.auth.middleware.AuthenticationMiddleware\',\n \'django.contrib.messages.middleware.MessageMiddleware\',\n \'django.middleware.clickjacking.XFrameOptionsMiddleware\',\n]\n...\nTEMPLATES = [\n {\n \'BACKEND\': \'django.template.backends.django.DjangoTemplates\',\n \'DIRS\': [\'templates\'],\n \'APP_DIRS\': True,\n \'OPTIONS\': {\n \'context_processors\': [\n \'django.template.context_processors.debug\',\n \'django.template.context_processors.request\',\n \'django.contrib.auth.context_processors.auth\',\n \'django.contrib.messages.context_processors.messages\',\n ],\n },\n },\n]\n...\nRun Code Online (Sandbox Code Playgroud)我的网站/urls.py
\n\nfrom django.contrib import admin\nfrom django.urls import path\nfrom django.views.generic.base import TemplateView\n\nurlpatterns = [\n path(\'\', TemplateView.as_view(template_name=\'base.html\'), name=\'home\'),\n path(\'admin/\', admin.site.urls),\n]\nRun Code Online (Sandbox Code Playgroud)模板/base.html
\n\n{% load i18n %}\n{% get_current_language as LANGUAGE_CODE %}\n<!DOCTYPE html>\n<html lang="{{ LANGUAGE_CODE }}">\n<body>\n<pre>LANGUAGE_CODE = {{ LANGUAGE_CODE }}</pre>\n<body>\n</html>\nRun Code Online (Sandbox Code Playgroud)使用 Django 生成的代码和我上面的一些更新,如果我在启动后访问http://localhost:8000/切换浏览器的语言,我可以看到不同的语言代码:
\n\n$ python manage.py runserver\nRun Code Online (Sandbox Code Playgroud)\n\n在您的本地环境中尝试我的步骤并检查它是否有效,然后将您的项目与上面的代码进行比较。
\n\n尝试使用差异设置来查看“当前设置文件和 Django\xe2\x80\x99s 默认设置之间的差异”。
\n| 归档时间: |
|
| 查看次数: |
1487 次 |
| 最近记录: |