django - 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()
有没有更简单的选择?
我应该在上述功能中进行哪些更改以实现所需的行为?
解决方案
最后我发现最简单的方法是添加我的自定义中间件:
from django.conf import settings
from django.utils import translation
class ForceLangMiddleware:
def process_request(self, request):
request.META['HTTP_ACCEPT_LANGUAGE'] = "en"
这个中间件需要在其他中间件之前加载。
推荐阅读
- java - 如何将静态对象发送到 Thymaf 视图?
- python - 带有管道的 termios 中的“设备的 ioctl 不合适”
- vba - Workbook.Unprotect 在 ACCESS VBA 中不起作用
- dynamic-linking - 可执行文件未链接到我想要的动态库
- javascript - Typescript 在某些函数中将 var 读取为空数组,但在其他函数中则不然
- ios - 带有 Swift 的 HealthKit 中用于 HKBloodGlucose 的 HKUnit
- ios - SwiftUI - 在禁用的 SecureField 中检测水龙头?
- java - JavaFX 控制器未检测到对象(Intelij IDE)
- html - 使用 jQuery 删除字符串的多个部分
- angular - 如何将表单控件值转换为角度对象?