Метод locale_selector
Метод locale_selector применяется к объекту
Babel и позволяет указать функцию, которая
определяет локаль для текущего запроса. Flask-Babel
вызывает эту функцию перед обработкой каждого запроса
и использует возвращённое значение как текущую локаль.
Функция должна принимать один аргумент - объект запроса
и возвращать строку с кодом локали, например
'en' или 'ru'.
Если функция не задана, Flask-Babel пытается
определить локаль автоматически из заголовков
запроса или из параметров URL. Метод
locale_selector полезен, когда нужно
реализовать собственную логику выбора языка,
например на основе сессии, cookie или
пользовательских настроек.
Синтаксис
babel.locale_selector(func)
Параметр func - это функция, которая
принимает объект запроса и возвращает строку
с кодом локали.
Пример
Давайте создадим приложение Flask с Babel и
зададим функцию выбора локали, которая берёт
язык из параметра URL lang:
from flask import Flask, request
from flask_babel import Babel
app = Flask(__name__)
babel = Babel(app)
@babel.locale_selector
def get_locale():
return request.args.get('lang', 'en')
@app.route('/')
def index():
return 'hello'
Результат выполнения кода для адреса /?lang=ru:
hello
Пример
Давайте сохраним выбранный язык в сессии и будем использовать его при последующих запросах:
from flask import Flask, request, session
from flask_babel import Babel
app = Flask(__name__)
app.secret_key = 'secret'
babel = Babel(app)
@babel.locale_selector
def get_locale():
if 'lang' in request.args:
session['lang'] = request.args['lang']
return session.get('lang', 'en')
@app.route('/')
def index():
return 'hello'
Результат выполнения кода для адреса /?lang=ru:
hello
Смотрите также
-
класс
Babel,
который управляет интернационализацией во Flask -
метод
init_app,
который инициализирует Babel для приложения -
метод
timezone_selector,
который задаёт функцию выбора часового пояса -
функцию
get_locale,
которая возвращает текущую локаль