我的情况如下:
我正在开发一个多语言网站,目前我使用 Django 视图/i18n/setlang/让用户从下拉菜单切换语言,一切正常......但现在,我希望以编程方式设置语言,特别是我有一个带有一系列设置的表单,其中有一个“最喜欢的语言”声音,一旦用户提交表单,我的视图就会保存用户模型,理论上它应该使用保存的首选项设置应用程序语言,但它不起作用。我尝试的是:
from django.utils.translation import activate
activate(lang)
但结果很奇怪:重定向后的 UI 仍然是旧语言,但成功更新的消息(django 消息框架)却以预期的语言显示回来!
我还检查了 Django 视图的源代码:https://github.com/django/django/blob/master/django/views/i18n.py https://github.com/django/django/blob/master/django/views/i18n.py
我看到他们将所选语言保存在会话中(如果可用)(我已激活会话),所以我尝试:
self.request.session['_language'] = form.cleaned_data['favouriteLanguage']
...但不起作用,我该怎么办?
我使用的是 Django 1.6,我安装的 django 中间件如下:
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
ps:在我的两次尝试中,模板中的 {{ request.LANGUAGE_CODE }} 打印旧的语言代码:(