首页 > 解决方案 > Django - 强制会话的默认语言,不同于 MODELTRANSLATION_DEFAULT_LANGUAGE

问题描述

我将 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()

有没有更简单的选择?

我应该在上述功能中进行哪些更改以实现所需的行为?

标签: djangomezzanine

解决方案


最后我发现最简单的方法是添加我的自定义中间件:

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

class ForceLangMiddleware:

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

这个中间件需要在其他中间件之前加载。


推荐阅读