如何检测django中的机器语言



所以,我知道language = request.session.get(LANGUAGE_SESSION_KEY)会将语言保存到会话中,但我的问题是…这是计算机使用的语言吗?如果没有,我如何检测我的电脑使用的语言?

这将尝试获取以LANGUAGE_SESSION_KEY为关键字的会话变量,通常为'_language'。会话数据存储在服务器端,因此这不是浏览器发送内容的一部分。通常,您在这里存储用户选择的语言,这样您就不必多次确定语言。

通常,服务器的目标是根据请求中的HTTP_ACCEPT_LANGUAGE标头选择一种语言。其中包含一个用户已配置的、他们能够理解的语言列表,通常按从好到坏的顺序排列。浏览器可以根据该用户的计算机的区域设置来确定,但也可以手动配置。例如,谷歌浏览器有时会询问是否必须翻译一种语言,如果你选择"从不翻译",那么它可能会将其作为一种语言。例如,标题可以看起来像:

Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5

因此,浏览器在这里指定了主要语言为法语(瑞士(,然后是法语、英语、德语,然后是所有其他语言。

Django有LocaleMiddleware[Django-doc],它被构造为检测浏览器和服务器都接受的语言(您指定为存在翻译的语言的语言(。

您可以在settings.py:中启用LocaleMiddleware

# settings.py
# …
MIDDLEWARE = [
# …
'django.middleware.locale.LocaleMiddleware',
# …
]

Django有关于如何确定使用何种语言的文档。一般来说,它用来确定语言

  1. 如果您使用i18n URL模式,则URL中的语言名称
  2. 具有CCD_ 8的会话变量
  3. 查找具有CCD_ 9名称的cookie
  4. 使用CCD_ 10报头并寻找服务器也支持的第一语言
  5. 使用LANGUAGE_CODE设置[Django-doc],该设置通常指定服务器的"默认"语言

您可以使用获得通过上述过程选择的语言

from django.utils.translation importget_language
lang =get_language()

这是一个指定语言的字符串,例如'en-us'

最新更新