def process_resource(self, req, resp, resource, params): label = req.uri_template.replace('method', params.get('method', '')) label = label.replace('/', '_') req.context.label = label if not self.translations: req.context.i18n = nullTranslations return # Set language based on three settings in order: # - MailboxSettings # - HTTP ACCEPT-LANGUAGE Headers # - ?ui_locales parameter # The language is selected based on the three options and what languages are available, # - when de-at is requested and not available, pick de (if available) # - auto fallback to en-gb # HTTP ACCEPT-LANGUAGE accept_lang = req.headers.get('ACCEPT-LANGUAGE') #logging.debug("requesting accept-lang '%s'", accept_lang) if accept_lang: for lang, _ in parse_accept_language(accept_lang): translation = self.translations.get(lang) if translation: req.context.i18n = translation #logging.debug("using translation '%s'", lang) return req.context.i18n = nullTranslations
def test_one_language(): assert parse_accept_language('fr-CA') == [('fr-ca', 1), ('fr', 0.99)]
def test_empty(): assert parse_accept_language('') == []
def test_normal(): assert parse_accept_language('de-DE,ar-TN;q=0.7,de-AT;q=0.3') == [ ('de-de', 1), ('de', 0.99), ('ar-tn', 0.7), ('ar', 0.68), ('de-at', 0.3), ('de', 0.27) ]
def test_quality(): assert parse_accept_language('de-AT , de ; q=0.8') == [('de-at', 1.0), ('de', 0.99), ('de', 0.8)]
def test_multiple_languages(): assert parse_accept_language('de-AT , de') == [('de-at', 1), ('de', 0.99), ('de', 0.98)]