Интернационализация Django - как сохранить выбранный язык на протяжении всей сессии?
У меня есть многостраничное приложение для художественной галереи, которое поддерживает японский и английский языки, причем при запуске по умолчанию используется японский язык. У меня есть кнопка, которая добавляет к url выбранный код языка, который является либо 'en', либо 'ja' между английским и японским. При первом нажатии на кнопку мое приложение перенаправляется на домашнюю страницу и отображает страницу с новым переведенным английским содержимым. Однако, когда я перехожу на другую страницу в приложении на английском языке, эта страница отображается на японском языке, даже если был выбран английский язык.
Как я могу сохранить выбранный язык на протяжении всего сеанса, независимо от того, куда я перехожу? Нужно ли мне передавать язык в качестве параметра в представлении? Если да, то как это сделать? Я читал соответствующую документацию по Django, но в ней нет ответа на подобную проблему. Спасибо!
index.html кнопка тега:
{% get_current_language as LANGUAGE_CODE %}
{% if LANGUAGE_CODE == 'ja' %}
<a
href="/en/"
role="button">
English
</a>
{% else %}
<a
href="/ja/"
role="button">
日本語
</a>
{% endif %}
Основной проект urls.py:
urlpatterns += i18n_patterns (
path('', include('Art_Gallery_App.urls')),
path('admin/', admin.site.urls),
prefix_default_language=True
)
Art_Gallery_App urls.py:
urlpatterns = [
path('', views.index, name='index'),
# by default, URL looks like this: /ja/carousel/14
path('carousel/<int:pk>', views.carousel, name='carousel'),
path('checkout/<int:pk>', views.checkout, name='checkout')
]
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',
]
LANGUAGE_CODE = 'ja'
USE_I18N = True
LANGUAGES = [
('ja', 'Japanese'),
('en', _('English')),
]
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale/')
]