Skip to content

Commit b404a29

Browse files
committed
added initial support for multilingual answers
1 parent 7dfbd50 commit b404a29

File tree

3 files changed

+64
-1
lines changed

3 files changed

+64
-1
lines changed

bin/srv.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

111157
def _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)

lib/adapter_learnxiny.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -788,7 +788,7 @@ class LearnVisualBasicAdapter(LearnXYAdapter):
788788

789789
ADAPTERS = {cls.prefix: cls() for cls in vars()['LearnXYAdapter'].__subclasses__()}
790790

791-
def get_learnxiny(topic):
791+
def get_learnxiny(topic, request_options=None):
792792
"""
793793
Return cheat sheet for `topic`
794794
or empty string if nothing found

lib/get_answer.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,20 @@ def _rewrite_section_name(query):
423423
return query
424424

425425
section_name, rest = query.split('/', 1)
426+
427+
if ':' in section_name:
428+
# if ':' is in section_name, it means, that we want to
429+
# translate the answer in the specified human language
430+
# (experimental)
431+
language, section_name = section_name.split(':', 1)
432+
else:
433+
language = ""
434+
426435
section_name = LANGUAGE_ALIAS.get(section_name, section_name)
436+
437+
if language:
438+
section_name = language + ":" + section_name
439+
427440
return "%s/%s" % (section_name, rest)
428441

429442
def _rewrite_section_name_for_q(query):

0 commit comments

Comments
 (0)