2012-09-04 39 views
2

我需要一种方法来确定在浏览器中设置的主要语言。我发现了一个非常棒的PHP解决方案,但不幸的是我使用的是Django/Python。Python - 从HTTP /浏览器中提取主要语言代码

我认为信息在HTTP请求的HTTP_ACCEPT_LANGUAGE属性中。

任何想法或现成的功能对我来说?

回答

1

您正在寻找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' 
+0

我知道这一点,但我需要一种方法来检测主要语言。大多数情况下,'HTTP_ACCEPT_LANGUAGE'是一个包含不同语言的字符串等。 – Ron

+1

请注意,客户端可能并不总是通过'HTTP_ACCEPT_LANGUAGE',即使它的确如此,它的值可能不正确。最傻瓜的方法是永远都会让用户明确地选择他们的语言。 –

+0

它只是我的网站上的一个小功能。如果我得到的代码,它很好。如果没有,我只用德语或英语...... – Ron

0

这是我使用的功能,这是我创作的自我。

DEF语言(个体):在self._request.META 如果 'HTTP_ACCEPT_LANGUAGE': 郎= self._request.META [ 'HTTP_ACCEPT_LANGUAGE'] 返回STR(郎[:2]) 否则: 返回'en'

只需调用它即可。