Метод timezone_selector
Метод timezone_selector применяется к объекту
Babel и регистрирует функцию обратного вызова,
которая автоматически вызывается для определения
часового пояса текущего пользователя. Первым
параметром передаётся функция-селектор, принимающая
без аргументов и возвращающая строку с именем
часового пояса в формате базы данных IANA,
например 'Europe/Moscow' или 'UTC'.
Если функция вернёт None, будет использован
часовой пояс по умолчанию, заданный при настройке
приложения.
Синтаксис
babel.timezone_selector(selector)
Пример
Давайте настроим Babel и зарегистрируем простейший
селектор, который всегда возвращает 'Europe/Moscow':
from flask import Flask
from flask_babel import Babel
app = Flask(__name__)
app.config['BABEL_DEFAULT_TIMEZONE'] = 'UTC'
babel = Babel(app)
def get_timezone():
return 'Europe/Moscow'
babel.timezone_selector(get_timezone)
Теперь при каждом запросе Flask-Babel будет
вызывать функцию get_timezone и использовать
полученный часовой пояс для форматирования дат
и времени.
Пример
Давайте определим часовой пояс на основе данных из сессии пользователя:
from flask import Flask, session
from flask_babel import Babel
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
app.config['BABEL_DEFAULT_TIMEZONE'] = 'UTC'
babel = Babel(app)
def get_timezone():
return session.get('timezone', 'UTC')
babel.timezone_selector(get_timezone)
Если в сессии пользователя сохранён ключ
timezone, будет использован он. Иначе
применится значение по умолчанию - 'UTC'.
Пример
Давайте используем метод timezone_selector
вместе с localeselector и отформатируем
дату в шаблоне:
from flask import Flask, session, render_template
from flask_babel import Babel
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
app.config['BABEL_DEFAULT_LOCALE'] = 'en'
app.config['BABEL_DEFAULT_TIMEZONE'] = 'UTC'
babel = Babel(app)
def get_locale():
return session.get('lang', 'en')
def get_timezone():
return session.get('timezone', 'Europe/Moscow')
babel.localeselector(get_locale)
babel.timezone_selector(get_timezone)
@app.route('/')
def index():
return render_template('index.html')
Шаблон для вывода текущей даты с учётом часового пояса:
<p>{{ get_timezone() }}</p>
Результат выполнения кода для адреса /
при пустой сессии:
<p>Europe/Moscow</p>
Смотрите также
-
класс
Babel,
который управляет интернационализацией приложения -
метод
localeselector,
который задаёт функцию выбора локали пользователя -
метод
timezone_selector,
который выбирает часовой пояс по имени локали -
функцию
get_timezone,
которая возвращает текущий часовой пояс