Django i18n set_language для других расширений шаблона не работает
я начинающий django, и я запутался в настройках i18n, я проверил много статей, чтобы выяснить проблему, но это всегда не удавалось, ниже приведена структура моих шаблонов:
templates folder:
|____layouts
| |____base.html
|
|____includes
| |____navigation.html
|
|____home
|____index.html
В теле base.html я использую {% include 'includes/navigation.html' %}, чтобы убедиться, что каждая страница имеет панель навигации, а в index.html использую {% extends "layouts/base.html" %}, чтобы сделать мою домашнюю страницу.
В моем settings.py, я следовал руководству i18n для настройки многоязычности, ниже приведены мои настройки:
MIDDLEWARE:
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': [TEMPLATE_DIR],
'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',
],
},
},
]
Интернационализация:
from django.utils.translation import gettext_lazy as _
LANGUAGE_CODE = 'en'
LANGUAGES = (
('en', _('English')),
('zh-hant', _('Traditional Chinese')),
('vi', _('Vietnamese')),
)
TIME_ZONE = 'Asia/Ho_Chi_Minh'
USE_I18N = True
USE_L10N = True
LOCALE_PATHS = [os.path.join(CORE_DIR, 'locale')]
USE_TZ = True
В моем файле navigation.html я разместил форму выбора, чтобы позволить пользователям выбирать предпочитаемый язык:
<form action="{% url 'set_language' %}" method="POST">
{% csrf_token %}
<select class="form-select" name="language" onchange="this.form.submit()">
{% get_current_language as LANGUAGE_CODE %}
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}"
{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
{{ language.name_local }}
</option>
{% endfor %}
</select>
</form>
urls.py:
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.i18n import i18n_patterns
urlpatterns = [
path('i18n/', include('django.conf.urls.i18n')),
path('admin/', admin.site.urls),
]
urlpatterns += i18n_patterns(path("", include("apps.home.urls")),)
и затем я использовал python manage.py makemessages -l language и python manage.py compilemessages -l language для создания .po и .mo файлов, и эти установки успешно позволяют изменять язык, выбирая выбор в навигационной панели, но это работает только для частей navigation.html, расширенные части index.html по-прежнему следуют LANGUAGE_CODE = 'en' в settings.py.
Я долго пытался, но все равно не получилось... Есть ли что-то еще, на что я должен обратить внимание? Спасибо.