Accept-Languageに応じてユーザに提供する言語を変えることがあったので、Accept-Languageの重みづけを見て優先順位でソートされた言語リストを返す関数を作った。
汎用性がありそうなので備忘録がてらブログに書いておく。
こちらのサイトを参考にしました。
def sort_accept_language(accept_language): languages = accept_language.split(",") locale_q_pairs = [] for language in languages: if language.split(";")[0] == language: # no q => q = 1 locale_q_pairs.append({"locale": language.strip(), "q": 1}) else: locale = language.split(";")[0].strip() q = float(language.split(";")[1].split("=")[1]) locale_q_pairs.append({"locale": locale, "q": q}) sorted_locale_q_pairs = sorted(locale_q_pairs, key=lambda x: (x['q'],), reverse=True) print(sorted_locale_q_pairs) sorted_locale = [l["locale"] for l in sorted_locale_q_pairs] print(sorted_locale) return sorted_locale
実行結果
関数の引数を”ja,en-US;q=0.7,en;q=0.3″にした場合
[{'locale': 'ja', 'q': 1}, {'locale': 'en-US', 'q': 0.7}, {'locale': 'en', 'q': 0.3}] ['ja', 'en-US', 'en']