使用flask-babel 给flask应用多语言
Flask-Babel 是一个 Flask 的扩展,在 babel, pytz 和 speaklater 的帮助下添加 i18n 和 l10n 支持到任何 Flask 应用。它内置了一个时间格式化的支持,同样内置了一个非常简单和友好的 gettext 翻译的接口。
安装
pip install flask-babel
使用
py文件里的内容
from datetime import datetime
from flask_babel import Babel, refresh, gettext, format_datetime
# time = format_datetime(datetime.now()) # 翻译日期格式
app.config.update(
......
BABEL_DEFAULT_LOCALE='zh',
......
)
babel = Babel(app)
@babel.localeselector
def get_locale():
# if a user is logged in, use the locale from the user settings
locale = session.get('locale', None)
if locale is not None:
return locale
session['locale'] = request.accept_languages.best_match(['zh', 'en']) # 没有session的话会自动选择最合适的语言
return session['locale']
@babel.timezoneselector
def get_timezone():
timezone = session.get('timezone', None)
if timezone is not None:
return timezone
创建本地化翻译文件:
- 首先创建一个Babel的配置文件,'babel.cfg'
- 在babel.cfg文件中添加下面内容
[python: **.py]
[jinja2: **/templates/**.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_
- 执行 pybabel extract -F babel.cfg -o messages.pot .
- 执行 pybabel update -i messages.pot -d translations,在生成的message.po 文件中将对应的多语言翻译写上去。
- 最后执行 pybabel compile -d translations