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
Exemple #2
0
 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
Exemple #3
0
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 ""
Exemple #4
0
    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'
Exemple #5
0
    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'
Exemple #6
0
    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")