配置

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

  1. from flask import Flask
  2. from flask.ext.babel import Babel
  3. app = Flask(__name__)
  4. app.config.from_pyfile('mysettings.cfg')
  5. 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
  2. @babel.localeselector
  3. def get_locale():
  4. # if a user is logged in, use the locale from the user settings
  5. user = getattr(g, 'user', None)
  6. if user is not None:
  7. return user.locale
  8. # otherwise try to guess the language from the user accept
  9. # header the browser transmits. We support de/fr/en in this
  10. # example. The best match wins.
  11. return request.accept_languages.best_match(['de', 'fr', 'en'])
  12. @babel.timezoneselector
  13. def get_timezone():
  14. user = getattr(g, 'user', None)
  15. if user is not None:
  16. return user.timezone

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