def test_sorts_results_by_quality_descending(): parsed = parse_accept_language('en-US;q=0.8,el;q=1.0') expected = [ Lang(locale=None, language='el', quality=1.0), Lang(locale='en_US', language='en', quality=0.8), ] assert expected == parsed
async def guess_language(request: Request, response: Response): language = "en" accept_language_header = request.headers.get("ACCEPT-LANGUAGE") languages = parse_accept_language(accept_language_header) if languages: language = languages[0].language request["language"] = language
def setup_localization(environ: Dict[str, Any]) -> str: """Provides localized strings for this thread.""" # Set up localization. languages = environ.get("HTTP_ACCEPT_LANGUAGE") if languages: parsed = accept_language.parse_accept_language(languages) if parsed: language = parsed[0].language i18n.set_language(language) return cast(str, language) return ""
def get_language(self): try: language_string = self.request.META['HTTP_ACCEPT_LANGUAGE'] except KeyError: return 'en' languages = parse_accept_language(language_string) for lang in languages: if lang.language in settings.OPENMAPTILES_LANGUAGES: return lang.language return 'en'
def get_language(self): try: language_string = self.request.META['HTTP_ACCEPT_LANGUAGE'] except KeyError: return 'en' languages = parse_accept_language(language_string) for lang in languages: if lang.language in settings.OPENMAPTILES_LANGUAGES: return lang.language return 'en'
def _determine_context_lang(self): """ In this function, we parse the preferred languages specified into the 'Accept-language' http header. The lang into the context is initialized according to the priority of languages into the headers and those available into Odoo. """ accepted_langs = self.httprequest.headers.get('Accept-language') if not accepted_langs: return parsed_accepted_langs = parse_accept_language(accepted_langs) installed_locale_langs = set() installed_locale_by_lang = defaultdict(list) for lang_code, name in self.env['res.lang'].get_installed(): installed_locale_langs.add(lang_code) installed_locale_by_lang[lang_code.split('_')[0]].append(lang_code) # parsed_acccepted_langs is sorted by priority (higher first) for lang in parsed_accepted_langs: # we first check if a locale (en_GB) is available into the list of # available locales into Odoo locale = None if lang.locale in installed_locale_langs: locale = lang.locale # if no locale language is installed, we look for an available # locale for the given language (en). We return the first one # found for this language. else: locales = installed_locale_by_lang.get(lang.language) if locales: locale = locales[0] if locale: # reset the context to put our new lang. context = dict(self._context) context['lang'] = locale # the setter defiend in odoo.http.WebRequest reset the env # when setting a new context self.context = context break
def test_validates_header_length(): with pytest.raises(ValueError) as exc: parse_accept_language('x' * (MAX_HEADER_LEN + 1)) exc.match(r'Accept-Language too long, max length is 8192')
def test_parses_header_value(header_string, exp_result): parsed = parse_accept_language(header_string) assert exp_result == parsed
def negotiate_language(accept_language, default='en'): for locale in parse_accept_language(accept_language): if locale.language in supported_languages: return locale.language return default
def test_invalid_lang(self) -> None: """Tests the case when a language string is invalid.""" parsed = accept_language.parse_accept_language("en42-US,el;q=0.8") self.assertEqual(parsed[0].language, "el")
def test_too_long(self) -> None: """Tests too long input.""" with unittest.mock.patch('accept_language.MAX_HEADER_LEN', 3): with self.assertRaises(ValueError): accept_language.parse_accept_language("en-US")
def test_empty(self) -> None: """Tests empty input.""" parsed = accept_language.parse_accept_language("") self.assertEqual(parsed, [])
def test_happy(self) -> None: """Tests the happy path.""" parsed = accept_language.parse_accept_language("en-US,el;q=0.8") self.assertEqual(parsed[0].language, "en")