2012-09-04 35 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'

只需調用它即可。