В моем приложении я могу изменить язык следующим образом:
from django.utils.translation import LANGUAGE_SESSION_KEY
# LANGUAGE_SESSION_KEY is "_language"
...
def my_view(request, my_lang=en):
request.session[LANGUAGE_SESSION_KEY] = my_lang
...
context = {"mysession": session}
return render(request, "mytemplate.html", context)
Это работает в основном как ожидалось. Однако прямой ответ этого представления по-прежнему отображается на предыдущем языке, несмотря на то, что переменная сеанса установлена правильно. Другими словами, следующий шаблон дает противоречивый вывод:
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
<b>Debug:</b>
current_language: {{ LANGUAGE_CODE }}
session_variable: {{mysession|get:"_language"}}
Обратите внимание, что для доступа к атрибуту _language
, начинающемуся с подчеркивания, я должен использовать пользовательский фильтр, см. этот ответ .
Джанго-выход:
Отладка: current_language: en сессия переменная: de
Все операторы {% trans ... }
обрабатываются до (устаревшего) содержимого LANGUAGE_CODE
, что раздражает. После смены языка пользователь ожидает немедленного эффекта. Если я обновляю страницу или загружаю другое представление, тогда новый язык используется правильно.
- Я что-то не так понимаю?
- Как мне добиться, чтобы current_language был правильно установлен в немедленном ответе.