Django - принудительно использовать язык по умолчанию для сеансов, отличный от MODELTRANSLATION_DEFAULT_LANGUAGE - PullRequest
0 голосов
/ 12 октября 2018

Я использую Django с мезонином.Я установил языки следующим образом:

LANGUAGE_CODE = "en"

MODELTRANSLATION_DEFAULT_LANGUAGE = 'cs'

LANGUAGES = (
    ('cs', _('Čeština')),
    ('en', _('Angličtina')),
)

Я НЕ использую язык в URL.

Проблема в том, что язык по умолчанию для нового сеанса выбирается в соответствии с настройками браузера, однако он должен быть ENвсегда.

Как этого добиться?

Могу себе представить, что можно заменить https://docs.djangoproject.com/en/2.1/_modules/django/middleware/locale/ моим собственным промежуточным программным обеспечением.Я думаю, мне следует изменить функцию:

def process_request(self, request):
    urlconf = getattr(request, 'urlconf', settings.ROOT_URLCONF)
    i18n_patterns_used, prefixed_default_language = is_language_prefix_patterns_used(urlconf)
    language = translation.get_language_from_request(request, check_path=i18n_patterns_used)
    language_from_path = translation.get_language_from_path(request.path_info)
    if not language_from_path and i18n_patterns_used and not prefixed_default_language:
        language = settings.LANGUAGE_CODE
    translation.activate(language)
    request.LANGUAGE_CODE = translation.get_language()

Есть ли более простой вариант?

Что мне следует изменить в упомянутой функции, чтобы добиться желаемого поведения?

1 Ответ

0 голосов
/ 17 октября 2018

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

from django.conf import settings
from django.utils import translation

class ForceLangMiddleware:

    def process_request(self, request):
        request.META['HTTP_ACCEPT_LANGUAGE'] = "en"

Это промежуточное программное обеспечение должно быть загружено раньше других промежуточных программ.

...