【发布时间】:2012-09-04 19:16:22
【问题描述】:
我需要一种方法来确定浏览器中设置的主要语言。我找到了一个非常棒的 PHP 解决方案,但不幸的是我使用的是 Django / Python。
我认为该信息在 HTTP 请求的 HTTP_ACCEPT_LANGUAGE 属性内。
对我有什么想法或现成的功能吗?
【问题讨论】:
标签: python django http-accept-language
我需要一种方法来确定浏览器中设置的主要语言。我找到了一个非常棒的 PHP 解决方案,但不幸的是我使用的是 Django / Python。
我认为该信息在 HTTP 请求的 HTTP_ACCEPT_LANGUAGE 属性内。
对我有什么想法或现成的功能吗?
【问题讨论】:
标签: python django http-accept-language
您正在寻找request.META dictionary:
print request.META['HTTP_ACCEPT_LANGUAGE']
WebOb project 是一个轻量级 Web 框架,包括一个方便的 accept parser,您可以在这种情况下重复使用它:
from webob.acceptparse import Accept
language_accept = Accept(request.META['HTTP_ACCEPT_LANGUAGE'])
print language_accept.best_match(('en', 'de', 'fr'))
print 'en' in language_accept
请注意,安装 WebOb 包不会干扰 Django 的功能,我们只是在此处重新使用包中恰好非常有用的一个类。
简短的演示总是更能说明问题:
>>> header = 'en-us,en;q=0.5'
>>> from webob.acceptparse import Accept
>>> lang = Accept(header)
>>> 'en' in lang
True
>>> 'fr' in lang
False
>>> lang.best_match(('en', 'de', 'fr'))
'en'
【讨论】:
HTTP_ACCEPT_LANGUAGE 是一个包含不同语言等的字符串
HTTP_ACCEPT_LANGUAGE,即使传递,它的值也可能不正确。最简单的方法是让用户明确选择他们的语言。
这是我使用的一个功能,那是我的创作自我。
def language(self):
if 'HTTP_ACCEPT_LANGUAGE' in self._request.META:
lang = self._request.META['HTTP_ACCEPT_LANGUAGE']
return str(lang[:2])
else:
return 'en'
随便叫吧。
【讨论】: