Переключатель языков Django не является постоянным
Здравствуйте, у меня проблемы с переключателем языков.
settings.py:
LANGUAGE_CODE = 'en'
LANGUAGES = [
('de','Deutsch'),
('en','English')
]
urls.py:
path('setlang', views.setlang, name='setlang'),
index.html:
<a href="{% url 'setlang' %}">{% trans "English" %}</a>
views.py
def setlang(request):
logger.error(get_language())
if get_language() == 'de':
activate('en')
else:
activate('de')
logger.error(get_language())
return redirect('index')
Вывод из logger.error(get_language()) -> 'de' than 'en'.
Всегда 'de'! Даже если я устанавливаю LANGUAGE_CODE = 'en'! Я понятия не имею, откуда берется 'de'.
Возможно, проблема заключается в перезагрузке, которую принудительно выполняет return redirect('index')?
Перевод в целом работает.
Есть ли у кого-нибудь идея, как я могу придерживаться выбранного языка и не возвращаться к стандартному?
activate(…)
[Django-doc] не предполагается, что он будет постоянным. Действительно, как сказано в документации:
Получает объект перевода для данного языка и активирует его как текущий объект перевода для текущего потока.
Таким образом, он "умирает" после завершения потока.
Вы можете установить cookie из LANGUAGE_COOKIE_NAME
настройки [Django-doc] для активации другого языка:
from django.conf import settings
def setlang(request):
logger.error(get_language())
if get_language() == 'de':
lang = 'en'
else:
lang = 'de'
response = redirect('index')
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang)
return response