所以,我知道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有关于如何确定使用何种语言的文档。一般来说,它用来确定语言
- 如果您使用i18n URL模式,则URL中的语言名称
- 具有CCD_ 8的会话变量
- 查找具有CCD_ 9名称的cookie
- 使用CCD_ 10报头并寻找服务器也支持的第一语言
- 使用
LANGUAGE_CODE
设置[Django-doc],该设置通常指定服务器的"默认"语言
您可以使用获得通过上述过程选择的语言
from django.utils.translation importget_language
lang =get_language()
这是一个指定语言的字符串,例如'en-us'
。