Flask App 不调用 Babel localeselector
Flask App not calling Babel localeselector
我正在使用 Flask-Babel 向我的 Flask 应用程序添加本地化,但我似乎无法更改语言。我遵循了创建 po/mo 文件的所有 Babel 说明——我不认为我的问题与翻译数据有关……我不知道如何更改语言……看起来是这样would/should 显而易见。
我的调试显示 babel.localeselector
没有被调用。我的实现调用 refresh()
,我认为它应该调用 babel.localeselector
(不知何故......因为我不明白它是如何工作的,因为 refresh()
命令似乎只是从应用程序上下文...我不知道如何触发对 babel.localeselector
)
的调用
app = Flask(__name__)
babel = Babel(app)
@babel.localeselector
def get_locale():
# if a user is logged in, use the locale from the user settings
user = User.get_by_id(session['user_id'])
if user is not None: return user.lang
return 'en'
并且,当用户登录时,调用此函数,
from flask_babel import refresh
def login(user_id):
# Gets called when user successfully logs in
refresh()
我已确认正在调用 refresh()
。
但是语言没有改变。
更新:
也试过这个,
from flask import current_app
from common.models import User
from flask_babel import refresh
def login(user_id):
# Gets called when user successfully logs in
user = User.get_by_id(user_id)
current_app.config['BABEL_DEFAULT_LOCALE'] = user.lang
refresh()
解决了问题。我正在使用,
import gettext
_ = gettext.gettext
而不是
from flask_babel import gettext as _
我正在使用 Flask-Babel 向我的 Flask 应用程序添加本地化,但我似乎无法更改语言。我遵循了创建 po/mo 文件的所有 Babel 说明——我不认为我的问题与翻译数据有关……我不知道如何更改语言……看起来是这样would/should 显而易见。
我的调试显示 babel.localeselector
没有被调用。我的实现调用 refresh()
,我认为它应该调用 babel.localeselector
(不知何故......因为我不明白它是如何工作的,因为 refresh()
命令似乎只是从应用程序上下文...我不知道如何触发对 babel.localeselector
)
app = Flask(__name__)
babel = Babel(app)
@babel.localeselector
def get_locale():
# if a user is logged in, use the locale from the user settings
user = User.get_by_id(session['user_id'])
if user is not None: return user.lang
return 'en'
并且,当用户登录时,调用此函数,
from flask_babel import refresh
def login(user_id):
# Gets called when user successfully logs in
refresh()
我已确认正在调用 refresh()
。
但是语言没有改变。
更新: 也试过这个,
from flask import current_app
from common.models import User
from flask_babel import refresh
def login(user_id):
# Gets called when user successfully logs in
user = User.get_by_id(user_id)
current_app.config['BABEL_DEFAULT_LOCALE'] = user.lang
refresh()
解决了问题。我正在使用,
import gettext
_ = gettext.gettext
而不是
from flask_babel import gettext as _