Merge pull request #304 from talyian/master

Improve Accept-Language header ordering
This commit is contained in:
Igor Chubin 2019-07-07 21:27:24 +02:00 committed by GitHub
commit 5ae8fd90a0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -78,24 +78,32 @@ def get_answer_language(request):
try: try:
if language.split(";")[0] == language: if language.split(";")[0] == language:
# no q => q = 1 # no q => q = 1
locale_q_pairs.append((language.strip(), "1")) locale_q_pairs.append((language.strip(), 1))
else: else:
locale = language.split(";")[0].strip() locale = language.split(";")[0].strip()
weight = language.split(";")[1].split("=")[1] weight = float(language.split(";")[1].split("=")[1])
locale_q_pairs.append((locale, weight)) locale_q_pairs.append((locale, weight))
except IndexError: except (IndexError, ValueError):
pass pass
return locale_q_pairs return locale_q_pairs
def _find_supported_language(accepted_languages): def _find_supported_language(accepted_languages):
for lang_tuple in accepted_languages: def supported_langs():
lang = lang_tuple[0] """Yields all pairs in the Accept-Language header
if '-' in lang: supported in SUPPORTED_LANGS or None if 'en' is the preferred"""
lang = lang.split('-', 1)[0] for lang_tuple in accepted_languages:
if lang in SUPPORTED_LANGS: lang = lang_tuple[0]
return lang if '-' in lang:
return None lang = lang.split('-', 1)[0]
if lang in SUPPORTED_LANGS:
yield lang, lang_tuple[1]
elif lang == 'en':
yield None, lang_tuple[1]
try:
return max(supported_langs(), key=lambda lang_tuple:lang_tuple[1])[0]
except ValueError:
return None
lang = None lang = None
hostname = request.headers['Host'] hostname = request.headers['Host']