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