Подтвердить что ты не робот

Как явно установить django_language в сеансе django

Как явно установить сеанс django_language в Django?

Спасибо большое...

4b9b3361

Ответ 1

Если вы хотите, чтобы ваши пользователи могли указывать язык, убедитесь, что LocaleMiddleware включен:

MIDDLEWARE_CLASSES = (
   ...
   'django.middleware.locale.LocaleMiddleware',
   ...
)

Затем Django будет искать предпочтение пользовательского языка в этом порядке (см. get_language_from_request в trans_real.py):

  • in request.path_info, если i18n_patterns,
  • request.session[settings.LANGUAGE_SESSION_KEY];
  • request.COOKIES[settings.LANGUAGE_COOKIE_NAME];
  • каждый язык в request.META['HTTP_ACCEPT_LANGUAGE'], пока не будет найден один,
  • settings.LANGUAGE_CODE.

Таким образом, самый простой способ задать язык явно в сеансе Django - это переписать request.session[settings.LANGUAGE_SESSION_KEY]:

def someview (request):
    ...
    request.session[settings.LANGUAGE_SESSION_KEY] = 'en'
    ...

Ответ 2

И если вы будете использовать версию >= Django 1.8. Вот как мы могли бы это использовать:

from django.utils.translation import LANGUAGE_SESSION_KEY

def someview (request):
    ...
    request.session[LANGUAGE_SESSION_KEY] = 'en'

Ответ 3

С помощью django.views.i18n.set_language(). Активируйте это представление, добавив следующую строку в свой URLconf:

# This example makes the view available at /i18n/setlang/
url(r'^i18n/', include('django.conf.urls.i18n')),

В качестве удобства, Django поставляется с представлением, django.views.i18n.set_language(), который устанавливает язык пользователя предпочтения и перенаправления на заданный URL-адрес или, по умолчанию, обратно предыдущая страница.

Ожидается, что представление будет вызвано через метод POST, с языком параметр задается в запросе. Если поддержка сеанса включена, представление сохраняет выбор языка в сеансе пользователей. В противном случае он сохраняет выбор языка в файле cookie, который по умолчанию называется django_language. (Имя можно изменить с помощью LANGUAGE_COOKIE_NAME).