def test_negotiate(self): de_DE = Locale.negotiate(["de_DE", "en_US"], ["de_DE", "de_AT"]) assert (de_DE.language, de_DE.territory) == ("de", "DE") de = Locale.negotiate(["de_DE", "en_US"], ["en", "de"]) assert (de.language, de.territory) == ("de", None) nothing = Locale.negotiate(["de_DE", "de"], ["en_US"]) assert nothing is None
def test_negotiate(self): de_DE = Locale.negotiate(['de_DE', 'en_US'], ['de_DE', 'de_AT']) assert (de_DE.language, de_DE.territory) == ('de', 'DE') de = Locale.negotiate(['de_DE', 'en_US'], ['en', 'de']) assert (de.language, de.territory) == ('de', None) nothing = Locale.negotiate(['de_DE', 'de'], ['en_US']) assert nothing is None
def get_negotiated_locale(preferred_locales): def normalize(locale_ids): return [id.replace('_', '-') for id in locale_ids if id] return Locale.negotiate(normalize(preferred_locales), normalize(get_available_locales()), sep='-')
def get_locale(): userLanguage = current_user.config.language if current_user.is_authenticated() else None if userLanguage and userLanguage in LANGUAGES: return userLanguage else: return Locale.negotiate(request.accept_languages.values(), LANGUAGES)
def handle_request(request, tmpl_context): from pylons import session tmpl_context.language = locale = None if 'locale' in session: locale = Locale.parse(session.get('locale')) else: requested = [l.replace('-', '_') for l in request.languages] locale = Locale.parse(Locale.negotiate(get_available_languages(), requested)) if locale is None: locale = get_default_locale() tmpl_context.locale = locale options = [str(locale), locale.language, str(get_default_locale()), get_default_locale().language] for language in options: try: set_lang(language) # Lose the territory part of the locale string tmpl_context.language = get_lang()[0].split('_')[0] break except: pass
def user_language(user, fallbacks=[]): # find out the locale locale = None if user and user.locale: locale = user.locale if locale is None: locale = Locale.parse(Locale.negotiate(fallbacks, LOCALE_STRINGS_DASH, sep='-', aliases=A2_LOCALE_ALIASES)) \ or get_default_locale() # determinate from which path we load the translations translations_config = { 'pylons.paths': { 'root': _get_translations_root() }, 'pylons.package': config.get('pylons.package') } # set language and fallback set_lang(str(locale), pylons_config=translations_config) add_fallback(str(get_default_locale()), pylons_config=translations_config) formencode.api.set_stdtranslation(domain="FormEncode", languages=[locale.language]) return locale
def handle_request(request, tmpl_context): from pylons import session tmpl_context.language = locale = None if 'locale' in session: locale = Locale.parse(session.get('locale')) else: requested = [l.replace('-', '_') for l in request.languages] locale = Locale.parse( Locale.negotiate(get_available_languages(), requested)) if locale is None: locale = get_default_locale() tmpl_context.locale = locale options = [ str(locale), locale.language, str(get_default_locale()), get_default_locale().language ] for language in options: try: set_lang(language) # Lose the territory part of the locale string tmpl_context.language = get_lang()[0].split('_')[0] break except: pass
def user_language(user, fallbacks=[]): # find out the locale locale = None if user and user.locale: locale = user.locale if locale is None: locales = map(str, LOCALES) locale = Locale.parse(Locale.negotiate(fallbacks, locales)) \ or get_default_locale() # determinate from which path we load the translations translations_module = config.get('adhocracy.translations', 'adhocracy') translations_module_loader = pkgutil.get_loader(translations_module) if translations_module_loader is None: raise ValueError(('Cannot import the module "%s" configured for ' '"adhocracy.translations". Make sure it is an ' 'importable module (and contains the ' 'translation files in a subdirectory ' '"i18n"') % translations_module) translations_root = translations_module_loader.filename translations_config = {'pylons.paths': {'root': translations_root}, 'pylons.package': config.get('pylons.package')} # set language and fallback set_lang(locale.language, pylons_config=translations_config) add_fallback(get_default_locale().language, pylons_config=translations_config) formencode.api.set_stdtranslation(domain="FormEncode", languages=[locale.language]) return locale
def set_locale(cls, force=None): """ retrieve locale from a prioritized list of sources and then set locale and save it cls: self object force: a locale to force set (ie 'en_US') return: locale as string or None if i18n should be disabled """ # disable i18n if config.locales array is empty or None if not config.locales: return None # 1. force locale if provided locale = force if locale not in config.locales: # 2. retrieve locale from url query string locale = cls.request.get("hl", None) if locale not in config.locales: # 3. retrieve locale from cookie locale = cls.request.cookies.get('hl', None) if locale not in config.locales: # 4. retrieve locale from accept language header locale = get_locale_from_accept_header(cls.request) if locale not in config.locales: # 5. detect locale from IP address location territory = get_territory_from_ip(cls) or 'ZZ' locale = str(Locale.negotiate(territory, config.locales)) if locale not in config.locales: # 6. use default locale locale = i18n.get_store().default_locale i18n.get_i18n().set_locale(locale) # save locale in cookie with 26 weeks expiration (in seconds) cls.response.set_cookie('hl', locale, max_age = 15724800) return locale
def set_locale(self, force=None): locales = self.app.config.get('locales') # disable i18n if config.locales array is empty or None if not locales: return None # 1. force locale if provided locale = force if locale not in locales: # 2. retrieve locale from url query string locale = self.request.get("hl", None) if locale not in locales: # 3. retrieve locale from cookie locale = self.request.cookies.get('hl', None) if locale not in locales: # 4. retrieve locale from accept language header #locale = get_locale_from_accept_header(self.request) if locale not in locales: # 5. detect locale from IP address location territory = get_territory_from_ip(self) or 'ZZ' locale = str(Locale.negotiate(territory, locales)) if locale not in locales: # 6. use default locale locale = self.request.GET.get('locale', 'en_US') i18n.get_i18n().set_locale(locale) logger.info('locale is {0}'.format(locale)) # save locale in cookie with 26 weeks expiration (in seconds) self.response.set_cookie('hl', locale, max_age=15724800) return locale
def set_locale(cls, force=None): """ retrieve locale from a prioritized list of sources and then set locale and save it cls: self object force: a locale to force set (ie 'en_US') return: locale as string or None if i18n should be disabled """ # disable i18n if config.locales array is empty or None if not config.locales: return None # 1. force locale if provided locale = force if locale not in config.locales: # 2. retrieve locale from url query string locale = cls.request.get("hl", None) if locale not in config.locales: # 3. retrieve locale from cookie locale = cls.request.cookies.get('hl', None) if locale not in config.locales: # 4. retrieve locale from accept language header locale = get_locale_from_accept_header(cls.request) if locale not in config.locales: # 5. detect locale from IP address location territory = get_territory_from_ip(cls) or 'ZZ' locale = str(Locale.negotiate(territory, config.locales)) if locale not in config.locales: # 6. use default locale locale = i18n.get_store().default_locale i18n.get_i18n().set_locale(locale) # save locale in cookie with 26 weeks expiration (in seconds) cls.response.set_cookie('hl', locale, max_age = 15724800) return locale
def pull_lang_code(endpoint, values): ''' Carga el código de idioma en la variable global. ''' # obtiene el idioma de la URL g.url_lang = None if values is not None: g.url_lang = values.pop('lang', None) # si esta lista de idiomas permitidos if g.url_lang and g.url_lang in app.config["ALL_LANGS"]: g.lang = g.url_lang # si el usuario esta logueado y tiene establecido el idioma se asigna ese elif "user" in session and "lang" in session["user"]: g.lang = session["user"]["lang"] # si no esta logueado y ha elegido un idioma elif "lang" in session: g.lang = session["lang"] else: accept = request.accept_languages.values() # si viene, se coge el que mas convenga dependiendo del que tenga establecido en su navegador o el idioma por defecto locale = Locale.negotiate((option.replace("-","_") for option in accept), app.config["ALL_LANGS"]) if accept else None if locale: g.lang = locale.language else: g.lang = app.config["LANGS"][0] # valor por defecto si todo falla # se carga la lista de idiomas como se dice en cada idioma g.languages = pull_lang_code_languages g.beta_lang = g.lang in app.config["BETA_LANGS"]
def user_language(user, fallbacks=[]): # find out the locale locale = None if user and user.locale: locale = user.locale if locale is None: locales = map(str, LOCALES) locale = Locale.parse(Locale.negotiate(fallbacks, locales)) \ or get_default_locale() # determinate from which path we load the translations translations_module = config.get('adhocracy.translations', 'adhocracy') translations_module_loader = pkgutil.get_loader(translations_module) if translations_module_loader is None: raise ValueError(('Cannot import the module "%s" configured for ' '"adhocracy.translations". Make sure it is an ' 'importable module (and contains the ' 'translation files in a subdirectory ' '"i18n"') % translations_module) translations_root = translations_module_loader.filename translations_config = {'pylons.paths': {'root': translations_root}, 'pylons.package': config.get('pylons.package')} # set language and fallback set_lang(locale.language, pylons_config=translations_config) add_fallback(get_default_locale().language, pylons_config=translations_config) formencode.api.set_stdtranslation(domain="FormEncode", languages=[locale.language]) return locale
def get_locale(): if 'locale' in session: return Locale.parse(session.get('locale')) else: requested = request.accept_languages.values() requested = [l.replace('-', '_') for l in requested] available = map(unicode, babel.list_translations()) return Locale.negotiate(available, requested)
def negotiate_known_locale(self, preferred_locales): """Given a list of preferred locales, this method returns the best match locale object from the known ones.""" assert isinstance(preferred_locales, (tuple, list)) preferred_locales = [str(l).replace("-", "_") for l in preferred_locales] return Locale.parse( Locale.negotiate(preferred_locales, self.get_available_locale_names(), aliases=self.get_aliases()) )
def get_locale(): userLanguage = current_user.config.language if current_user.is_authenticated( ) else None if userLanguage and userLanguage in LANGUAGES: return userLanguage else: return Locale.negotiate(request.accept_languages.values(), LANGUAGES)
def select_locale(): available = available_locales.keys() preferred = _get_preferred_languages() # Find best match best_match = Locale.negotiate(preferred, available) # Return best match if best_match: return str(best_match)
def get_locale(): if "l10n" in request.values: return Locale.negotiate([request.values["l10n"]], LANGUAGES) if hasattr(g, "identity") and g.identity and userManager is not None: userid = g.identity.id try: user_language = userManager.getUserSetting( userid, ("interface", "language")) if user_language is not None and not user_language == "_default": return Locale.negotiate([user_language], LANGUAGES) except octoprint.users.UnknownUser: pass default_language = settings().get(["appearance", "defaultLanguage"]) if default_language is not None and not default_language == "_default" and default_language in LANGUAGES: return Locale.negotiate([default_language], LANGUAGES) return request.accept_languages.best_match(LANGUAGES)
def _get_locale(self): global LANGUAGES if "l10n" in request.values: return Locale.negotiate([request.values["l10n"]], LANGUAGES) if hasattr(g, "identity") and g.identity and userManager.enabled: userid = g.identity.id try: user_language = userManager.getUserSetting(userid, ("interface", "language")) if user_language is not None and not user_language == "_default": return Locale.negotiate([user_language], LANGUAGES) except octoprint.users.UnknownUser: pass default_language = settings().get(["appearance", "defaultLanguage"]) if default_language is not None and not default_language == "_default" and default_language in LANGUAGES: return Locale.negotiate([default_language], LANGUAGES) return Locale.parse(request.accept_languages.best_match(LANGUAGES))
def negotiate_known_locale(self, preferred_locales): '''Given a list of preferred locales, this method returns the best match locale object from the known ones.''' assert isinstance(preferred_locales, (tuple, list)) preferred_locales = [ str(l).replace('-', '_') for l in preferred_locales ] return Locale.parse( Locale.negotiate(preferred_locales, self.get_available_locale_names(), aliases=self.get_aliases()))
def _set_locale(request, force=None): """ retrieve locale from a prioritized list of sources and then set locale and save it cls: self object force: a locale to force set (ie 'en_US') return: locale as string or None if i18n should be disabled """ try: webapp2_instance = webapp2.get_app() except AssertionError: logging.debug('No webapp2 global set; skipping registry lookup for jinja2 template engine.') locales = [] else: locales = webapp2_instance.config.get(I18N_LOCALES_KEY) or [] # disable i18n if config.locales array is empty or None if not locales: return None # 1. force locale if provided locale = force if locale not in locales: # 2. retrieve locale from url query string locale = request.get("hl", None) if locale not in locales: # 3. retrieve locale from user preferences user_session_info = request.registry['user_session_info'] if user_session_info: user_id = user_session_info.get('user_id', None) if user_id: stored_locale = request.session.get('inferred_locale', None) if not stored_locale: lower = str(request.registry['user_session_info'].get('language_preference', None)) upper = str(lower).upper() stored_locale = '{0}_{1}'.format(lower, upper) request.session['inferred_locale'] = stored_locale locale = stored_locale else: locale = None if locale not in locales: # 4. retrieve locale from accept language header locale = get_locale_from_accept_header(request) if locale not in locales: # 5. detect locale from IP address location territory = get_country_code(request) or 'ZZ' locale = str(Locale.negotiate(territory, locales)) if locale not in locales: # 6. use default locale locale = i18n.get_store().default_locale i18n.get_i18n(request=request).set_locale(locale) request.registry['locale'] = locale
def sys_localizer(reg): cur_locale = reg.settings.get('pyramid.default_locale_name', 'en') sys_locale = locale.getlocale()[0] if sys_locale: new_locale = Locale.negotiate( (sys_locale,), reg.settings.get('pyramid.available_languages', '').split()) if new_locale: cur_locale = str(new_locale) else: cur_locale = 'en' tdirs = reg.queryUtility(ITranslationDirectories, default=[]) return make_localizer(cur_locale, tdirs)
def sys_localizer(reg): cur_locale = reg.settings.get('pyramid.default_locale_name', 'en') sys_locale = locale.getlocale()[0] if sys_locale: new_locale = Locale.negotiate( (sys_locale,), reg.settings.get('pyramid.available_languages', '').split() ) if new_locale: cur_locale = str(new_locale) else: cur_locale = 'en' tdirs = reg.queryUtility(ITranslationDirectories, default=[]) return make_localizer(cur_locale, tdirs)
def get_locale_from_accept_header(request, localeTags): """ Detect a locale from request.header 'Accept-Language' The locale with the highest quality factor (q) that most nearly matches our config.locales is returned. rh: webapp2.RequestHandler Note that in the future if all User Agents adopt the convention of sorting quality factors in descending order then the first can be taken without needing to parse or sort the accept header leading to increased performance. (see http://lists.w3.org/Archives/Public/ietf-http-wg/2012AprJun/0473.html) """ header = request.headers.get("Accept-Language", '') parsed = parse_accept_language_header(header) if parsed is None: return None pairs_sorted_by_q = sorted(parsed.items(), key=lambda (lang, q): q, reverse=True) locale = Locale.negotiate([lang for (lang, q) in pairs_sorted_by_q], request.app.config.get('locales'), sep='_') return str(locale)
def get_negotiated_locale(preferred_locales): def normalize(locale_ids): return [id.replace("-", "_") for id in locale_ids if id] available_locales = get_available_locales() if "en_US" not in available_locales: available_locales.append("en_US") locale = Locale.negotiate(normalize(preferred_locales), normalize(available_locales)) if locale and str(locale) not in available_locales: # The list of get_available_locales() must include locale # identifier from str(locale), but zh_* don't be included after # Babel 1.0. Avoid expanding zh_* to zh_Hans_CN and zh_Hant_TW # to clear "script" property of Locale instance. See #11258. locale._data # load localedata before clear script property locale.script = None assert str(locale) in available_locales return locale
def locale_neg(request): avail = request.locales loc = request.params.get('__locale') if loc is None: loc = request.session.get('ui.locale') if loc is None and request.accept_language: loc = Locale.negotiate(list(request.accept_language), list(request.locales), sep='-') if loc: loc = str(loc) if loc is None: loc = request.registry.settings.get('pyramid.default_locale_name', 'en') if loc in avail: request.session['ui.locale'] = loc return loc return 'en'
def get_negotiated_locale(preferred_locales): def normalize(locale_ids): return [id.replace('-', '_') for id in locale_ids if id] available_locales = get_available_locales() if 'en_US' not in available_locales: available_locales.append('en_US') locale = Locale.negotiate(normalize(preferred_locales), normalize(available_locales)) if locale and str(locale) not in available_locales: # The list of get_available_locales() must include locale # identifier from str(locale), but zh_* don't be included after # Babel 1.0. Avoid expanding zh_* to zh_Hans_CN and zh_Hant_TW # to clear "script" property of Locale instance. See #11258. locale._data # load localedata before clear script property locale.script = None assert str(locale) in available_locales return locale
def locale_neg(request): avail = request.locales loc = request.params.get('__locale') if loc is None: loc = request.session.get('ui.locale') if loc is None and request.accept_language: loc = Locale.negotiate(list(request.accept_language), list(request.locales), sep='-') if loc: loc = str(loc) if loc is None: loc = request.registry.settings.get('pyramid.default_locale_name', 'en') if loc in avail: request.session['ui.locale'] = loc return loc return 'en'
def getLocale(rh, tag): """ Retrieve the locale tag from a prioritized list of sources NB We cannot return None because there has to be a locale - the app has to be some language or other. """ localeTags = rh.app.config.get('locales') if localeTags: # 1. use tag param if tag in localeTags: return tag # 2. retrieve locale tag from url query string tag = rh.request.get("hl", None) if tag: qs_items = rh.request.GET del qs_items['hl'] # remove the hl item from the qs - it has now been processed if tag in localeTags: return tag # 3. retrieve locale tag from cookie tag = rh.request.cookies.get('hl', None) if tag in localeTags: return tag # 4. retrieve locale tag from accept language header tag = get_locale_from_accept_header(rh.request, localeTags) if tag: return tag # 5. detect locale tag from IP address location ctry = getRequestLocation(rh.request, 'Country') if ctry: tag = Locale.negotiate(ctry, localeTags) if tag: return tag # 6. use the 1st member of localeTags tag = localeTags[0] if tag: return tag # 7. Use this locale if all attempts above have failed. return 'en' # NB 'en' is chosen simply because the string literals and comments in this app happen to be in English. Its not because of a bias.
def handle_request(request, tmpl_context): from pylons import session tmpl_context.language = locale = None if 'locale' in session: locale = Locale.parse(session.get('locale')) else: requested = [l.replace('-', '_') for l in request.languages] locale = Locale.parse(Locale.negotiate(_KNOWN_LOCALES, requested)) if locale is None: locale = get_default_locale() options = [str(locale), locale.language, str(get_default_locale()), get_default_locale().language] for language in options: try: set_lang(language) tmpl_context.language = language except: pass
def get_locale_from_accept_header(request): """ Detect locale from request.header 'Accept-Language' Locale with the highest quality factor that most nearly matches our config.locales is returned. cls: self object Note that in the future if all User Agents adopt the convention of sorting quality factors in descending order then the first can be taken without needing to parse or sort the accept header leading to increased performance (see http://lists.w3.org/Archives/Public/ietf-http-wg/2012AprJun/0473.html) """ header = request.headers.get("Accept-Language", '') parsed = parse_accept_language_header(header) if parsed is None: return None locale_list_sorted_by_q = sorted(parsed.iterkeys(), reverse=True) locale = Locale.negotiate(locale_list_sorted_by_q, config.locales, sep='_') return str(locale)
def get_locale_from_accept_header(request): """ Detect locale from request.header 'Accept-Language' Locale with the highest quality factor that most nearly matches our config.locales is returned. cls: self object Note that in the future if all User Agents adopt the convention of sorting quality factors in descending order then the first can be taken without needing to parse or sort the accept header leading to increased performance (see http://lists.w3.org/Archives/Public/ietf-http-wg/2012AprJun/0473.html) """ header = request.headers.get("Accept-Language", '') parsed = parse_accept_language_header(header) if parsed is None: return None locale_list_sorted_by_q = sorted(parsed.iterkeys(), reverse=True) locale = Locale.negotiate(locale_list_sorted_by_q, config.locales, sep='_') return str(locale)
def handle_request(request, tmpl_context): from pylons import session tmpl_context.language = locale = None if 'locale' in session: locale = Locale.parse(session.get('locale')) else: requested = [l.replace('-', '_') for l in request.languages] locale = Locale.parse(Locale.negotiate(_KNOWN_LOCALES, requested)) if locale is None: locale = get_default_locale() options = [ str(locale), locale.language, str(get_default_locale()), get_default_locale().language ] for language in options: try: set_lang(language) tmpl_context.language = language except: pass
def _find_locale_with_territory_from_language_only_locale(locale: Locale): # try to get a territory specific locale (eg. "es_ES") from a language-only locale (eg. "es") return Locale.negotiate([str(locale)], babel.core.LOCALE_ALIASES.values())
def get(message, string): requested_locale = [str(message.from_user.locale), "en_GB"] available_locales = list(filter(lambda x: string in STRINGS[x].keys(), STRINGS.keys())) chosen_locale = Locale.negotiate(requested_locale, available_locales) return STRINGS[str(chosen_locale)][string]
def test_negotiate_custom_separator(self): de_DE = Locale.negotiate(['de-DE', 'de'], ['en-us', 'de-de'], sep='-') assert (de_DE.language, de_DE.territory) == ('de', 'DE')
from babel import Locale # Parsing l = Locale.parse('de-DE', sep='-') print("Locale name: {0}".format(l.display_name)) l = Locale.parse('und_GR', sep='_') print("Locale name: {0}".format(l.display_name)) # Detecting l = Locale.negotiate(['de_DE', 'en_AU'], ['de_DE', 'de_AT']) print("Locale negociated: {0}".format(l.display_name)) print(Locale('it').english_name) print(Locale('it').get_display_name('fr_FR')) print(Locale('it').get_language_name('de_DE')) print(Locale('de', 'DE').languages['zh']) print(Locale('el', 'GR').scripts['Copt']) # Calendar locale = Locale('it') month_names = locale.days['format']['wide'].items() print(list(month_names))
def get_locale(): if "l10n" in request.values: return Locale.negotiate([request.values["l10n"]], LANGUAGES) return request.accept_languages.best_match(LANGUAGES)