Метод localeselector
Метод localeselector применяется к объекту
Babel и принимает в качестве параметра
функцию-селектор локали. Flask-Babel вызывает эту
функцию при каждом запросе, чтобы определить, какую
локаль использовать для перевода. Функция-селектор
не принимает аргументов и должна возвращать строку
с кодом локали, например 'en' или
'ru'.
Синтаксис
babel.localeselector(func)
Пример
Давайте зарегистрируем селектор, который всегда возвращает русскую локаль:
from flask import Flask
from flask_babel import Babel
app = Flask(__name__)
babel = Babel(app)
@babel.localeselector
def get_locale():
return 'ru'
Теперь при каждом запросе Flask-Babel будет
использовать локаль 'ru'.
Пример
Давайте выберем локаль на основе заголовка
Accept-Language, который присылает браузер:
from flask import Flask, request
from flask_babel import Babel
app = Flask(__name__)
babel = Babel(app)
@babel.localeselector
def get_locale():
return request.accept_languages.best_match(['en', 'ru'])
Если браузер пришлёт заголовок
Accept-Language: ru, метод вернёт
'ru', а для Accept-Language: en -
'en'.
Пример
Давайте выберем локаль из параметра URL, а если его нет - из заголовка браузера:
from flask import Flask, request
from flask_babel import Babel
app = Flask(__name__)
babel = Babel(app)
@babel.localeselector
def get_locale():
lang = request.args.get('lang')
if lang in ['en', 'ru']:
return lang
return request.accept_languages.best_match(['en', 'ru'])
При запросе на адрес /?lang=ru функция
вернёт 'ru', а при запросе на / -
локаль из заголовка браузера.
Смотрите также
-
класс
Babel,
который управляет локализацией приложения -
метод
init_app,
который инициализирует Babel для приложения -
метод
timezoneselector,
который выбирает часовой пояс для запроса -
функцию
get_locale,
которая возвращает текущую локаль