3

私のウェブサイトでは、Flask + Jinja2 と Flask-Babel を翻訳に使用しています。このサイトには 2 つの言語 (URL によって異なります) があり、それらを切り替えるためのリンクを追加したいと思います。これを正しく行うには、現在のロケールの名前を取得する必要がありますが、ドキュメントにそのような関数が見つかりませんでした。それはまったく存在しますか?

4

3 に答える 3

5

他の回答では、バベルのget_locale()機能を実装する必要があり、それを Jinja2 グローバルに追加する必要があると書かれていますが、その方法については言及されていません。だから、私がしたことは次のとおりです。

私は次のように機能を実装しましたget_locale()

from flask import request, current_app

@babel.localeselector
def get_locale():
    try:
        return request.accept_languages.best_match(current_app.config['LANGUAGES'])
    except RuntimeError:  # Working outside of request context. E.g. a background task
        return current_app.config['BABEL_DEFAULT_LOCALE']

次に、Flaskapp定義に次の行を追加しました。

app.jinja_env.globals['get_locale'] = get_locale

get_locale()これで、テンプレートから呼び出すことができます。

于 2019-09-11T19:49:23.703 に答える
1

ユーザーのロケールをデータベースのセッションに保存する責任があります。Flask-babelはこれを行いませんので、ユーザーのロケールを見つけることができるようにget_localeメソッドを実装する必要があります。flask-babel

これはドキュメントget_localeからの例です:flask-babel

from flask import g, request

@babel.localeselector
def get_locale():
    # if a user is logged in, use the locale from the user settings
    user = getattr(g, 'user', None)
    if user is not None:
        return user.locale
    # otherwise try to guess the language from the user accept
    # header the browser transmits.  We support de/fr/en in this
    # example.  The best match wins.
    return request.accept_languages.best_match(['de', 'fr', 'en'])
于 2013-05-05T11:55:02.327 に答える