Переключатель языков 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
Вернуться на верх