如何在django会话中显式设置django_language

icn*_*icn 16 django

如何django_languageDjango会话中明确设置?

非常感谢...

Ana*_* Rr 34

如果您希望用户能够指定语言,请确保LocaleMiddleware已启用:

MIDDLEWARE_CLASSES = (
   ...
   'django.middleware.locale.LocaleMiddleware',
   ...
)
Run Code Online (Sandbox Code Playgroud)

然后Django会寻找的顺序(见用户的语言偏好get_language_from_requesttrans_real.py):

  1. request.path_info,如果使用i18n_patterns ;
  2. request.session[settings.LANGUAGE_SESSION_KEY];
  3. request.COOKIES[settings.LANGUAGE_COOKIE_NAME];
  4. 所有语言request.META['HTTP_ACCEPT_LANGUAGE'],直到被接受为止;
  5. settings.LANGUAGE_CODE.

因此,在Django会话中显式设置语言的最简单方法是重写request.session[settings.LANGUAGE_SESSION_KEY]:

def someview (request):
    ...
    request.session[settings.LANGUAGE_SESSION_KEY] = 'en'
    ...
Run Code Online (Sandbox Code Playgroud)

  • 更不用说方便了[`django.views.i18n.set_language()`](https://docs.djangoproject.com/en/1.2/topics/i18n/internationalization/#the-set-language-redirect-view)内置视图 (4认同)
  • 从`django.utils.translation`使用`LANGUAGE_SESSION_KEY`作为会话密钥的名称更可靠 (3认同)
  • 请更新Django> = 1.7的答案.request.session ['django_language']已被弃用.请参阅:https://docs.djangoproject.com/en/1.7/releases/1.7/#internationalization (3认同)
  • 这句话:“然后 Django 将按该顺序查找用户的语言首选项(请参阅 trans_real.py 中的 get_language_from_request):”仍然有效吗?Django 3 也是如此吗?我检查了提供的链接https://github.com/django/django/blob/master/django/utils/translation/trans_real.py,我发现没有出现 LANGUAGE_SESSION_KEY。另外,如果您查看 Django 3 文档:https://docs.djangoproject.com/en/3.0/topics/i18n/translation/#how-django-discovers-language-preference 则没有对会话变量的引用,它只需检查 i18n、cookie、HTTP 标头,然后再检查后备。 (2认同)

Vla*_*ruz 20

如果你将使用一个版本>= Django 1.8.这是我们如何使用它:

from django.utils.translation import LANGUAGE_SESSION_KEY

def someview (request):
    ...
    request.session[LANGUAGE_SESSION_KEY] = 'en'
Run Code Online (Sandbox Code Playgroud)

  • 不再工作,应该使用 https://docs.djangoproject.com/en/4.0/topics/i18n/translation/#explicitly-setting-the-active-language 代替 (2认同)