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.

Я долго пытался, но все равно не получилось... Есть ли что-то еще, на что я должен обратить внимание? Спасибо.

Вернуться на верх