如何使用Flask-Babel实现多语言支持

1. 简介

Flask-Babel是一个 Flask 扩展,可以轻松地向 Flask 应用添加多语言支持,其支持本地化处理日期时间、数字以及文本翻译。

2. 安装

使用 pip 命令安装 Flask-Babel:

pip install Flask-Babel

3. 配置

在 Flask 中使用 Flask-Babel 需要在 Flask 应用中进行配置,如下所示:

from flask import Flask

from flask_babel import Babel

app = Flask(__name__)

babel = Babel(app)

# 配置 Flask-Babel

app.config['BABEL_DEFAULT_LOCALE'] = 'zh_CN' # 设置默认语言为中文

app.config['LANGUAGES'] = {

'en': 'English',

'zh_CN': '中文',

} # 添加支持的语言

3.1 配置参数说明

BABEL_DEFAULT_LOCALE:设置默认语言。

LANGUAGES:指定支持的语言及其对应的名称,key 为语言代码,value 为语言名称。

4. 本地化处理

Flask-Babel 支持本地化处理日期时间、数字以及文本翻译。

4.1 本地化处理日期时间

使用 Flask-Babel 可以轻松地将日期时间格式化为所需的格式,如下所示:

from datetime import datetime, timedelta

from flask_babel import format_datetime

now = datetime.now()

# 将日期时间格式化为 'YYYY-MM-DD HH:MM:SS'

formatted_datetime = format_datetime(now, 'yyyy-MM-dd HH:mm:ss')

print(formatted_datetime) # 2022-02-22 19:51:25

4.2 本地化处理数字

使用 Flask-Babel 可以轻松地将数字格式化为所需的格式,如下所示:

from flask_babel import format_number

number = 1234567.89

# 将数字格式化为 '1,234,567.89'

formatted_number = format_number(number, locale='en')

print(formatted_number) # 1,234,567.89

4.3 文本翻译

使用 Flask-Babel 可以轻松地为 Flask 应用添加多语言支持,实现文本翻译,如下所示:

from flask import Flask

from flask_babel import Babel, gettext as _

app = Flask(__name__)

babel = Babel(app)

# 配置 Flask-Babel

app.config['BABEL_DEFAULT_LOCALE'] = 'zh_CN' # 设置默认语言为中文

app.config['LANGUAGES'] = {

'en': 'English',

'zh_CN': '中文',

} # 添加支持的语言

@babel.localeselector

def get_locale():

return request.accept_languages.best_match(app.config['LANGUAGES'])

@app.route('/')

def hello_world():

return _('Hello World!') # 翻译文本

4.3.1 运行 Flask 应用

在终端中运行 Flask 应用,启动服务器,如下所示:

export FLASK_APP=app.py

export FLASK_ENV=development

flask run

4.3.2 生成翻译文件

使用 Flask-Babel 命令行工具来生成翻译文件。

首先,需要创建翻译文件夹,如下所示:

mkdir translations

然后,在翻译文件夹中创建两个子文件夹,分别对应支持的两种语言:

cd translations

mkdir en zh_CN

最后,使用 Flask-Babel 命令行工具来生成翻译文件,如下所示:

flask translate init

flask translate update

上述命令会自动在 en 和 zh_CN 子文件夹中生成对应的翻译文件,如下所示:

translations

├── en

│ └── LC_MESSAGES

│ └── messages.po

└── zh_CN

└── LC_MESSAGES

└── messages.po

其中 messages.po 文件是翻译文件。

4.3.3 编辑翻译文件

编辑翻译文件,翻译消息,如下所示:

msgid "Hello World!"

msgstr "你好,世界!"

4.3.4 编写翻译脚本

在 Flask 应用根目录下创建翻译脚本,如下所示:

from flask_babel import gettext as _ # 导入 gettext 函数

print(_('Hello World!')) # 你好,世界!

使用虚拟环境启动 Python 解释器,运行翻译脚本,如下所示:

python translate.py

上述命令会输出翻译后的文本:

你好,世界!

5. 参考链接

Flask-Babel

Flask-Babel 文档

后端开发标签