Невозможно перенаправить URL-адреса с помощью Flask-babel и чертежей, когда в URL-адресе не указан язык

Я некоторое время копался в Flask-babel и, похоже, не могу получить url routing с помощью простого blueprint. Вот урезанное приложение

в моем файле __ init __.py,

app = Flask(__name__)
babel.init_app(app)


@babel.localeselector
def get_locale():
    return g.get('lang_code', 'fr')


from .mod_main import mod_main as main_blueprint
app.register_blueprint(main_blueprint,url_prefix='/<lang_code>')

В файле blueprint views.py

@mod_main.url_defaults
def add_language_code(endpoint, values):
    values.setdefault('lang_code', g.lang_code)


@mod_main.url_value_preprocessor
def pull_lang_code(endpoint, values):
    g.lang_code = values.pop('lang_code')


@mod_main.route('/', methods=['GET', 'POST'])
def index():
    return render_template('main/index.html')

Это прекрасно работает, пока я перехожу к http://localhost:5000/fr, но когда я перехожу к http://localhost:5000/ (без языка), я получаю ошибку 404. Обычный — поскольку проект ожидает lang_code в качестве префикса.

В первый раз, когда пользователь переходит на http://localhost:5000/ (без языка), я ожидаю, что сайт покажет страницы с языком «fr». Если затем пользователь переключит его на английский и перейдет к http://localhost:5000/, я бы хотел, чтобы он отображался на английском, но не на французском. Кажется, это не работает !!!


person Shankar ARUL    schedule 26.11.2014    source источник
comment
У вас нет маршрута, зарегистрированного для '/'. Все маршруты чертежа начинаются с '/<lang_code>'.   -  person dirn    schedule 26.11.2014


Ответы (1)


Наконец-то я нашел решение — все, что мне нужно было сделать, это добавить функцию before_request в приложение, чтобы проверять request.view_args и обслуживать правильный язык на основе переменной сеанса.

Я также понял, что переменная g во фляге действительна только для активного запроса и не может использоваться для хранения значений между запросами. (Поскольку я пытался сохранить lang в переменной g между запросами, мне пришлось использовать переменную сеанса для передачи значений между запросами)

Я только что загрузил урезанное приложение, реализующее Babel, со схемами здесь: вавилон

person Shankar ARUL    schedule 30.11.2014
comment
Здравствуйте, не могли бы вы рассказать мне, как справиться с 2 языками с планом, но без Babel? - person Beqa Bukhradze; 09.04.2018