【Flask/跟着学习】Flask大型教程项目#12:多语言翻译

跟着学习(新版):https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xiii-i18n-and-l10n
回顾上一章:https://blog.youkuaiyun.com/weixin_41263513/article/details/85108042

本章内容

  • Flask-Babel
  • 标记要翻译的文本
  • 提取要翻译的文本
  • 生成语言目录
  • 更新翻译
  • 翻译日期和时间
  • 命令行增强功能

这一章怎么说呢,可能你们不一定会感兴趣,因为我自己看的时候也是不怎么感兴趣的,不过也要适当了解,内容不算难,说不定以后会用上呢!

Flask-Babel

有一个flask扩展能使得翻译变得非常容易,其扩展名为Flask-Babel,别忘了每遇到一个新扩展都要pip install flask-babel

Flask-Babel的初始化就跟其他扩展一样
文件:app/–init–.py

# ...
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的请求对象属性accept_languages。此对象提供了一个高级接口,用于处理客户端随请求发送的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()方法中,该方法将应用程序提供的语言列表作为参数并返回最佳选择。

标记要翻译的文本

标记文本后,Flask-Babel将扫描所有文件并使用gettext工具将这些文本提取到单独的翻译文件中。 不幸的是,这是一项繁琐的工作,需要进行翻译才能实现。

这一章将展示此标记的一些示例

文本被标记为翻译的方式是将它们包装在一个函数调用中,该函数调用作为约定被称为_(),这只是一个下划线。 最简单的情况是文字字符串出现在源代码中的情况。 以下是一个示例的flash()语句:

from flask_babel import _
# ...
flash(_('Your post is now live!'))

这个想法是_()函数用基本语言包装文本(在本例中很明显看到是英语)。 此函数将使用由localeselector函数修饰的函数选择的最佳语言来查找给定客户端的正确翻译。 然后_()函数返回已翻译的文本,这种情况下,它将成为flash()的参数。

不幸的是,并非所有案例都那么简单,例如应用程序中的其他flash()调用:

flash('User {} not found.'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值