аватар question@mail.ru · 01.01.1970 03:00

Как сменить язык пользователю на сайте Django?

Делаю возможность на сайте переключаться между русской, английской и украинской версией. Обернул строки в шаблонах, которые надо перевести, в тег {% trans %}, строки в коде, всё перевёл и скомпилировал перевод. Также установил locale_url.

В settings.py прописал:

LANGUAGE_CODE = 'Ru-ru'LANGUAGES = (    ('en', 'English'),    ('ru', 'Russian'),    ('uk', 'Ukrainian'),)TIME_ZONE = 'Europe/Kiev'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = TrueLOCALE_PATHS = (    'locale',     # os.path.join(BASE_DIR, 'locale'),)

Переключать язык через POST, так как это делается в django.conf.urls.i18n мне не захотелось, поэтому создал такое представление:

def select_lang(request, code):    go_next = request.META.get('HTTP_REFERER', '/')    response = HttpResponseRedirect(go_next)    if code and translation.check_for_language(code):        if hasattr(request, 'session'):            request.session['django_language'] = code        else:            response.set_cookie(settings.LANGUAGE_COOKIE_NAME, code)        translation.activate(code)    retu response

Перехожу в браузере на /lang/uk, страница перезагружается, а язык остаётся прежний. Если вводить адрес /uk/about - страница переводится, но при переходе на другую язык опять возвращается.

В чем проблема, подскажите, пожалуйста!

Вот мои middleware, может в них дело:

MIDDLEWARE_CLASSES = [    'django.middleware.security.SecurityMiddleware',    'django.contrib.sessions.middleware.SessionMiddleware',    'django.middleware.common.CommonMiddleware',    'django.middleware.csrf.CsrfViewMiddleware',    'django.contrib.auth.middleware.AuthenticationMiddleware',    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',    'django.contrib.messages.middleware.MessageMiddleware',    'django.middleware.clickjacking.XFrameOptionsMiddleware',    'django.middleware.locale.LocaleMiddleware',]

P.S. язык сайта по дефолту русский, как и весь текст в коде и в шаблонах. Но у меня по умолчанию отображается английский. Через заголовки запроса ""Accept-Language en-US,en;q=0.5""

P.S.S. функцию вьюхи проверял, на выходе у request.session['django_language'] стоит код языка, который мне надо.

Последние

Похожие