Example #1
0
 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
Example #2
0
    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()
Example #3
0
    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)
Example #4
0
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
Example #5
0
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)
Example #6
0
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))
Example #8
0
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
Example #9
0
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 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
Example #11
0
 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')