Изменение языка Django вступает в силу только после перезагрузки - PullRequest
0 голосов
/ 08 сентября 2018

В моем приложении я могу изменить язык следующим образом:

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, что раздражает. После смены языка пользователь ожидает немедленного эффекта. Если я обновляю страницу или загружаю другое представление, тогда новый язык используется правильно.

  1. Я что-то не так понимаю?
  2. Как мне добиться, чтобы current_language был правильно установлен в немедленном ответе.

1 Ответ

0 голосов
/ 08 сентября 2018

Вы установили код языка в сеансе, но на самом деле не активировали новый язык в представлении.

from django.utils import translation
...
translation.activate(my_lang)
...