私の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
)。
他に何が欠けていますか?
私はこれらのステップであなたの環境をシミュレートしようとしました:
$ cd ~
$ python3 -m venv ~/venvs/mysite
$ source ~/venvs/mysite/bin/activate
$ pip install Django==2.0.8
$ Django-admin startproject mysite
次に、あなたの例のように生成コードを更新しました:
mysite/settings.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',
],
},
},
]
...
mysite/urls.py
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),
]
templates/base.html
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE }}">
<body>
<pre>LANGUAGE_CODE = {{ LANGUAGE_CODE }}</pre>
<body>
</html>
Django生成されたコードと上記のいくつかの更新により、ブラウザの言語を切り替えると別の言語コードが表示される http:// localhost:8000 / の後にで始まる:
$ python manage.py runserver
ローカル環境で私の手順を試して、それが機能するかどうかを確認してから、プロジェクトを上記のコードと比較してください。
diffsettings を使用して、「現在の設定ファイルとDjangoのデフォルト設定の違い」を確認してください。