@@ -107,6 +107,52 @@ def get_request_ip(req):
107107
108108 return ip_addr
109109
110+ def get_answer_language (request ):
111+ """
112+ Return preferred answer language based on
113+ domain name, query arguments and headers
114+ """
115+
116+ def _parse_accept_language (accept_language ):
117+ languages = accept_language .split ("," )
118+ locale_q_pairs = []
119+
120+ for language in languages :
121+ try :
122+ if language .split (";" )[0 ] == language :
123+ # no q => q = 1
124+ locale_q_pairs .append ((language .strip (), "1" ))
125+ else :
126+ locale = language .split (";" )[0 ].strip ()
127+ weight = language .split (";" )[1 ].split ("=" )[1 ]
128+ locale_q_pairs .append ((locale , weight ))
129+ except IndexError :
130+ pass
131+
132+ return locale_q_pairs
133+
134+ def _find_supported_language (accepted_languages ):
135+ for lang_tuple in accepted_languages :
136+ lang = lang_tuple [0 ]
137+ if '-' in lang :
138+ lang = lang .split ('-' , 1 )[0 ]
139+ return lang
140+ return None
141+
142+ lang = None
143+ hostname = request .headers ['Host' ]
144+ if hostname .endswith ('.cheat.sh' ):
145+ lang = hostname [:- 9 ]
146+
147+ if 'lang' in request .args :
148+ lang = request .args .get ('lang' )
149+
150+ header_accept_language = request .headers .get ('Accept-Language' , '' )
151+ if lang is None and header_accept_language :
152+ lang = _find_supported_language (
153+ _parse_accept_language (header_accept_language ))
154+
155+ return lang
110156
111157def _proxy (* args , ** kwargs ):
112158 # print "method=", request.method,
@@ -190,6 +236,10 @@ def answer(topic=None):
190236 return _proxy ()
191237 #return requests.get('http://127.0.0.1:3000'+topic[8:]).text
192238
239+ lang = get_answer_language (request )
240+ if lang :
241+ options ['lang' ] = lang
242+
193243 ip_address = get_request_ip (request )
194244 if '+' in topic :
195245 not_allowed = LIMITS .check_ip (ip_address )
0 commit comments