Приложение Flask не вызывает Babel localeselector - PullRequest
0 голосов
/ 13 января 2019

Я добавляю локализацию в свое приложение Flask с помощью Flask-Babel, и я не могу изменить язык. Я следовал всем инструкциям Babel по созданию файлов po / mo - я не верю, что моя проблема связана с данными перевода ... я не знаю, как изменить язык ... кажется, что это так / должно быть очевидно.

Моя отладка показывает, что babel.localeselector не вызывается. Моя реализация вызывает refresh(), что, я думаю, должно вызывать babel.localeselector (как-то ... потому что я не понимаю, как это работает, поскольку команда refresh(), кажется, просто удаляет некоторые ключи из контекста приложения ... I не знаю, как это вызывает вызов 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()

1 Ответ

0 голосов
/ 13 января 2019

Разобрался с проблемой. Я использовал,

import gettext
_ = gettext.gettext

вместо

from flask_babel import gettext as _
...