コード例 #1
0
ファイル: languages.py プロジェクト: 10tux/OctoPrint
		def load_meta(path, locale):
			meta = dict()

			meta_path = os.path.join(path, "meta.yaml")
			if os.path.isfile(meta_path):
				import yaml
				try:
					with open(meta_path) as f:
						meta = yaml.safe_load(f)
				except:
					pass
				else:
					import datetime
					if "last_update" in meta and isinstance(meta["last_update"], datetime.datetime):
						meta["last_update"] = (meta["last_update"] - datetime.datetime(1970,1,1)).total_seconds()

			l = Locale.parse(locale)
			meta["locale"] = locale
			meta["locale_display"] = l.display_name
			meta["locale_english"] = l.english_name
			return meta
コード例 #2
0
ファイル: babel.py プロジェクト: Freso/picard-website
def init_app(app):
    babel = Babel(app)

    app.config['LANGUAGES'] = {}
    for language in app.config['SUPPORTED_LANGUAGES']:
        app.config['LANGUAGES'][
            language] = Locale.parse(language).language_name

    @app.after_request
    def call_after_request_callbacks(response):
        for callback in getattr(g, 'after_request_callbacks', ()):
            callback(response)
        return response

    def after_this_request(f):
        if not hasattr(g, 'after_request_callbacks'):
            g.after_request_callbacks = []
        g.after_request_callbacks.append(f)
        return f

    @babel.localeselector
    def get_locale():
        supported_languages = app.config['SUPPORTED_LANGUAGES']
        language_arg = request.args.get('l')
        if language_arg is not None:
            if language_arg in supported_languages:
                @after_this_request
                def remember_language(response):
                    response.set_cookie('language', language_arg)

                return language_arg
        else:
            language_cookie = request.cookies.get('language')
            if language_cookie in supported_languages:
                return language_cookie

        return request.accept_languages.best_match(supported_languages)
コード例 #3
0
ファイル: languages.py プロジェクト: JLatasa/Science_3D_Print
        def load_meta(path, locale):
            meta = dict()

            meta_path = os.path.join(path, "meta.yaml")
            if os.path.isfile(meta_path):
                import yaml
                try:
                    with open(meta_path) as f:
                        meta = yaml.safe_load(f)
                except:
                    pass
                else:
                    import datetime
                    if "last_update" in meta and isinstance(
                            meta["last_update"], datetime.datetime):
                        meta["last_update"] = (
                            meta["last_update"] -
                            datetime.datetime(1970, 1, 1)).total_seconds()

            l = Locale.parse(locale)
            meta["locale"] = locale
            meta["locale_display"] = l.display_name
            meta["locale_english"] = l.english_name
            return meta
コード例 #4
0
ファイル: i18n.py プロジェクト: korepwx/railgun
def get_best_locale_name(locale_names):
    """Select the best matching locale from `locale_names` according to
    current request.

    The locales are evaluated according to the language, script and territory.
    If no best choice is found, fallback to ``config.DEFAULT_LOCALE``.
    Moreover, if even ``config.DEFAULT_LOCALE`` does not appear in
    `locale_names`, choose the last item in `locale_names`.

    Usage:

    .. code-block:: python

        # If current user prefers zh-CN, or zh-TW.
        >>> get_best_locale_name(['zh-cn', 'en'])
        'zh-cn'

        # If current user prefers en-US.
        >>> get_best_locale_name(['zh-cn', 'en'])
        'en'

        # If current user prefers ja-JP, and default locale is zh-CN.
        >>> get_best_locale_name(['zh-cn', 'en'])
        'zh-cn'

        # If current user prefers ja-JP, and default locale is zh-CN.
        >>> get_best_locale_name(['fr', 'en'])
        'en'

    :param locale_names: List of alternative locale names.
    :type locale_names: :class:`list`

    :return: The best matching or fallback locale name.
    :rtype: :class:`str`
    """

    top_score = 0
    top_name = None
    req_locale = get_locale()

    for name in locale_names:
        l = Locale.parse(name.replace('-', '_'))
        # If locale object is the same, return True at once
        if l == req_locale:
            return name
        # If language not match, give up this locale
        if l.language != req_locale.language:
            continue
        # Exam the matched score
        score = 0
        # script match, give 5
        if l.script == req_locale.script:
            score += 5
        # territory match, give 3
        if l.territory == req_locale.territory:
            score += 3
        # variant match, give 3
        # TODO: check these score weights
        if l.variant == req_locale.variant:
            score += 3
        # Update top_name if > top_score
        if score > top_score:
            top_name = name
            top_score = score

    # Fallback to default locale or last locale
    if top_name is None:
        if app.config['DEFAULT_LOCALE'] in locale_names:
            top_name = app.config['DEFAULT_LOCALE']
        else:
            top_name = locale_names[-1]
    return top_name
コード例 #5
0
ファイル: i18n.py プロジェクト: lzz12/railgun
def get_best_locale_name(locale_names):
    """Select the best matching locale from `locale_names` according to
    current request.

    The locales are evaluated according to the language, script and territory.
    If no best choice is found, fallback to ``config.DEFAULT_LOCALE``.
    Moreover, if even ``config.DEFAULT_LOCALE`` does not appear in
    `locale_names`, choose the last item in `locale_names`.

    Usage:

    .. code-block:: python

        # If current user prefers zh-CN, or zh-TW.
        >>> get_best_locale_name(['zh-cn', 'en'])
        'zh-cn'

        # If current user prefers en-US.
        >>> get_best_locale_name(['zh-cn', 'en'])
        'en'

        # If current user prefers ja-JP, and default locale is zh-CN.
        >>> get_best_locale_name(['zh-cn', 'en'])
        'zh-cn'

        # If current user prefers ja-JP, and default locale is zh-CN.
        >>> get_best_locale_name(['fr', 'en'])
        'en'

    :param locale_names: List of alternative locale names.
    :type locale_names: :class:`list`

    :return: The best matching or fallback locale name.
    :rtype: :class:`str`
    """

    top_score = 0
    top_name = None
    req_locale = get_locale()

    for name in locale_names:
        l = Locale.parse(name.replace('-', '_'))
        # If locale object is the same, return True at once
        if l == req_locale:
            return name
        # If language not match, give up this locale
        if l.language != req_locale.language:
            continue
        # Exam the matched score
        score = 0
        # script match, give 5
        if l.script == req_locale.script:
            score += 5
        # territory match, give 3
        if l.territory == req_locale.territory:
            score += 3
        # variant match, give 3
        # TODO: check these score weights
        if l.variant == req_locale.variant:
            score += 3
        # Update top_name if > top_score
        if score > top_score:
            top_name = name
            top_score = score

    # Fallback to default locale or last locale
    if top_name is None:
        if app.config['DEFAULT_LOCALE'] in locale_names:
            top_name = app.config['DEFAULT_LOCALE']
        else:
            top_name = locale_names[-1]
    return top_name