Как явно установить django_language в сеансе django
Как явно установить сеанс django_language
в Django
?
Спасибо большое...
Ответы
Ответ 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
).