Flask-Babel 简介
你猜对了, Flask-Babel 正是用于简化翻译工作的。可以使用 pip 命令安装它:
(venv) $ pip install flask-babel
Flask-Babel 的初始化与之前的插件类似:
app/__init__.py
: Flask-Babel 实例。
# ...
from flask_babel import Babel
app = Flask(__name__)
# ...
babel = Babel(app)
作为本章的一部分,我将向你展示如何将应用翻译成西班牙语,因为我碰巧会这种语言。 我当然也可以与翻译机制合作来支持其他语言。 为了跟踪支持的语言列表,我将添加一个配置变量:
config.py :支持的语言列表。
class Config(object):
# ...
LANGUAGES = ['en', 'es']
我为本应用使用双字母代码来表示语言种类,但如果你需要更具体,还可以添加国家代码。 例如,你可以使用 en-US
, en-GB
和 en-CA
来支持美国、英国和加拿大的英语以示区分。
Babel
实例提供了一个 localeselector
装饰器。 为每个请求调用装饰器函数以选择用于该请求的语言:
app/__init__.py
:选择最匹配的语言。
from flask import request
# ...
@babel.localeselector
def get_locale():
return request.accept_languages.best_match(app.config['LANGUAGES'])
这里我使用了 Flask 中 request
对象的属性 accept_languages
。 request
对象提供了一个高级接口,用于处理客户端发送的带 Accept-Language 头部的请求。 该头部指定了客户端语言和区域设置首选项。 该头部的内容可以在浏览器的首选项页面中配置,默认情况下通常从计算机操作系统的语言设置中导入。 大多数人甚至不知道存在这样的设置,但是这是有用的,因为应用可以根据每个语言的权重,提供优选语言的列表。 为了满足你的好奇心,下面是一个复杂的 Accept-Languages
头部的例子:
Accept-Language: da, en-gb;q=0.8, en;q=0.7
这表示丹麦语( da
)是首选语言(默认权重= 1.0),其次是英式英语( en-GB
),其权重为 0.8,最后是通用英语( en
),权重为 0.7。
要选择最佳语言,你需要将客户请求的语言列表与应用支持的语言进行比较,并使用客户端提供的权重,查找最佳语言。 这样做的逻辑有点复杂,但它已经全部封装在 best_match()
方法中了,该方法将应用提供的语言列表作为参数并返回最佳选择。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论