from flask import Flask, render_template</code> from flaskext.babel import Babel, gettext as _ app = Flask(__name__) app.config['BABEL_DEFAULT_LOCALE'] = 'zh_Hans_CN' babel = Babel(app) @app.route('/') def hello(): s = _("Saturday") return render_template('index.html', day=day) if __name__ == '__main__': app.debug = True app.run()
然后修改模板:
<p>{{ _("Hello, world!") }}</p> <p>{{ _("It's %(day)s today", day=day) }}</p>
你可以注意到我们对 app 的 locale 做了配置,然后用 babel 扩展将 app 再次初始化,并且将 .py 和 .html 中的字符串做了配置,让它们都使用 gettext 这个函数。其中值得注意的是 gettext 的格式化字符串的参数。如果直接用类似 "It's %s today" %day 是不行的。
这么一来,app 的语言其实是被写死成中文了。其实你可以在 flask 程序中让用户选择自己喜好的语言,或者依据浏览器设置用户优先显示的语言,详细做法可以参考官方文档中提到 localeselector 的部分。