配置
在配置好应用后所有需要做的就是实例化一个 Babel
对象:
from flask import Flask
from flask.ext.babel import Babel
app = Flask(__name__)
app.config.from_pyfile('mysettings.cfg')
babel = Babel(app)
babel 对象本身以后支持用于配置 babel。Babel 有两个配置值,这两个配置值能够改变内部的默认值:
BABEL_DEFAULT_LOCALE | 如果没有指定地域且选择器已经注册, 默认是缺省地域。默认是 ‘en’ 。 |
BABEL_DEFAULT_TIMEZONE | 用户默认使用的时区。默认是 ‘UTC’ 。选用默 认值的时候,你的应用内部必须使用该时区。 |
对于更复杂的应用你可能希望对于不同的用户有多个应用,这个时候是选择器函数派上用场的时候。babel 扩展第一次需要当前用户的地区的时候,它会调用 localeselector()
函数,第一次需要时区的时候,它会调用 timezoneselector()
函数。
如果这些方法的任何一个返回 None
,扩展将会自动回落到配置中的值。而且为了效率考虑函数只会调用一次并且返回值会被缓存。如果你需要在一个请求中切换语言的话,你可以 refresh()
缓存。
选择器函数的例子:
from flask import g, request
@babel.localeselector
def get_locale():
# if a user is logged in, use the locale from the user settings
user = getattr(g, 'user', None)
if user is not None:
return user.locale
# otherwise try to guess the language from the user accept
# header the browser transmits. We support de/fr/en in this
# example. The best match wins.
return request.accept_languages.best_match(['de', 'fr', 'en'])
@babel.timezoneselector
def get_timezone():
user = getattr(g, 'user', None)
if user is not None:
return user.timezone
以上的例子假设当前的用户是存储在 flask.g
对象中。
当前内容版权归 wizardforcel 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 wizardforcel .