配置

在配置好应用后所有需要做的就是实例化一个 Babel 对象:

1. from flask import Flask
2. from flask.ext.babel import Babel

4. app = Flask(__name__)
5. app.config.from_pyfile('mysettings.cfg')
6. babel = Babel(app)

babel 对象本身以后支持用于配置 babel。Babel 有两个配置值,这两个配置值能够改变内部的默认值:

BABEL_DEFAULT_LOCALE 如果没有指定地域且选择器已经注册, 默认是缺省地域。默认是 ‘en’。
BABEL_DEFAULT_TIMEZONE 用户默认使用的时区。默认是 ‘UTC’。选用默 认值的时候,你的应用内部必须使用该时区。

对于更复杂的应用你可能希望对于不同的用户有多个应用,这个时候是选择器函数派上用场的时候。babel 扩展第一次需要当前用户的地区的时候,它会调用 localeselector() 函数,第一次需要时区的时候,它会调用 timezoneselector() 函数。

如果这些方法的任何一个返回 None,扩展将会自动回落到配置中的值。而且为了效率考虑函数只会调用一次并且返回值会被缓存。如果你需要在一个请求中切换语言的话,你可以 refresh() 缓存。

选择器函数的例子:

1. from flask import g, request

3. @babel.localeselector
4. def get_locale():
5. # if a user is logged in, use the locale from the user settings
6. user = getattr(g, 'user', None)
7. if user is not None:
8. return user.locale
9. # otherwise try to guess the language from the user accept
10. # header the browser transmits.  We support de/fr/en in this
11. # example.  The best match wins.
12. return request.accept_languages.best_match(['de', 'fr', 'en'])

14. @babel.timezoneselector
15. def get_timezone():
16. user = getattr(g, 'user', None)
17. if user is not None:
18. return user.timezone

以上的例子假设当前的用户是存储在 flask.g 对象中。