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 locale_combo_changed(self, index): selected_locale = self.locale_combo.currentData() locale_to_change = str(selected_locale) set_config_value('locale', locale_to_change) if selected_locale is None: preferred_locales = [] system_locale = get_ui_locale() if system_locale is not None: preferred_locales.append(system_locale) negotiated_locale = Locale.negotiate( preferred_locales, get_available_locales(get_locale_path())) if negotiated_locale is None: locale_to_change = 'en' else: locale_to_change = str(negotiated_locale) self.app_locale = locale_to_change load_gettext_locale(get_locale_path(), locale_to_change) main_app = QApplication.instance() main_app.main_win.set_text() central_widget = main_app.main_win.central_widget main_tab = central_widget.main_tab game_dir_group_box = main_tab.game_dir_group_box update_group_box = main_tab.update_group_box game_dir_group_box.last_game_directory = None game_dir_group_box.game_directory_changed() update_group_box.refresh_builds()
def negotiate(cls, locale): """ Negotiate proper RBNF rules based on global data item `rbnf_locales` Caching is not necessary the Locale object does that pretty well """ loc = Locale.negotiate([str(Locale.parse(locale))], get_global('rbnf_locales')) print('TL', type(loc)) return cls(loc)
def _get_babel_locale(red_locale: str) -> babel.core.Locale: supported_locales = babel.localedata.locale_identifiers() try: # Handles cases where red_locale is already Babel supported babel_locale = Locale(*babel.parse_locale(red_locale)) except (ValueError, babel.core.UnknownLocaleError): try: babel_locale = Locale(*babel.parse_locale(red_locale, sep="-")) except (ValueError, babel.core.UnknownLocaleError): # ValueError is Raised by `parse_locale` when an invalid Locale is given to it # Lets handle it silently and default to "en_US" try: # Try to find a babel locale that's close to the one used by red babel_locale = Locale(Locale.negotiate([red_locale], supported_locales, sep="-")) except (ValueError, TypeError, babel.core.UnknownLocaleError): # If we fail to get a close match we will then default to "en_US" babel_locale = Locale("en", "US") return babel_locale
def _check_locale(): """ Determine locale from request if non set """ if not request.environ.get('LOCALE'): accept_language = request.get_header('Accept-Language') if not accept_language: return accepted = [] for language in accept_language.split(','): if language.split(';')[0] == language: accepted.append(language.strip()) else: accepted.append(language.split(";")[0].strip()) # fine tuning order of locale_q_pair according to q-value necessary?! lang = Locale.negotiate(accepted, [l[0] for l in LANGS]) if lang: request.environ['LOCALE'] = str(lang)
def _validate_config(self, manager): """ Validate the config :param manager: The localization manager :type manager: edmunds.localization.localizationmanager.LocalizationManager :return: void """ supported_locales = manager._get_supported_locale_strings() fallback_locale_strings = manager._get_fallback_locale_strings() supported_locale = Locale.negotiate(supported_locales, fallback_locale_strings, '_') if not supported_locale: supported_string = ','.join(supported_locales) fallback_string = ','.join(fallback_locale_strings) raise RuntimeError( 'Could not find supported locale even with fallback! (supported: %s; fallback: %s)' % (supported_string, fallback_string))
def get_preferred_locale(available_locales): preferred_locales = [] selected_locale = get_config_value('locale', None) if selected_locale == 'None': selected_locale = None if selected_locale is not None: preferred_locales.append(selected_locale) system_locale = get_ui_locale() if system_locale is not None: preferred_locales.append(system_locale) app_locale = Locale.negotiate(preferred_locales, available_locales) if app_locale is None: app_locale = 'en' else: app_locale = str(app_locale) return app_locale
def init_gettext(): locale_dir = os.path.join(basedir, 'cddagl', 'locale') preferred_locales = [] selected_locale = get_config_value('locale', None) if selected_locale == 'None': selected_locale = None if selected_locale is not None: preferred_locales.append(selected_locale) system_locale = get_ui_locale() if system_locale is not None: preferred_locales.append(system_locale) if os.path.isdir(locale_dir): entries = scandir(locale_dir) for entry in entries: if entry.is_dir(): available_locales.append(entry.name) available_locales.sort(key=lambda x: 0 if x == 'en' else 1) app_locale = Locale.negotiate(preferred_locales, available_locales) if app_locale is None: app_locale = 'en' else: app_locale = str(app_locale) try: t = gettext.translation('cddagl', localedir=locale_dir, languages=[app_locale]) global _ _ = t.gettext except FileNotFoundError as e: pass return app_locale
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')