我正在考虑创建一个有fastapi-babel种语言的多语言网页.

我已经按照documentation进行了配置. 从英语到法语的翻译很成功. 然而,我为另一种语言创建了一个.po文件,对其进行翻译、编译,但翻译后的文本并不适用.

from fastapi_babel import _
from fastapi_babel.middleware import InternationalizationMiddleware as I18nMiddleware
from fastapi_babel import Babel
from fastapi_babel import BabelConfigs

configs = BabelConfigs(
     ROOT_DIR=__file__,
     BABEL_DEFAULT_LOCALE="en",
     BABEL_TRANSLATION_DIRECTORY="lang",
)
logger.info(f"configs: {configs.__dict__}")
babel = babel(configs)
babel.install_jinja(templates)

app.add_middleware(I18nMiddleware, babel=babel)


@app.get("/items/{id}", response_class=HTMLResponse)
async def read_item(request: Request, id: str):
     babel.locale = "en"
     logger.info(_("Hello World"))
     babel. locale = "fa"
     logger.info(_("Hello World"))
     babel.locale = "ja"
     logger.info(_("Hello World"))
     return templates.TemplateResponse('item.html', {'request': request, 'id': id})

如上所述,结果将是:

INFO: Hello World
INFO: Bonjour le monde
INFO: Hello World

如何将翻译应用于法语以外的其他语言?

enter image description here

推荐答案

我使用的是旧版本0.0.3. 当我将版本更改为最新的0.0.8时,翻译的内容反映在法语以外的其他语言中.

pip install fastapi-babel==0.0.8

注意事项

pybabel compile -d lang个之后,您需要重新启动FastAPI服务器

如果BABEL_DEFAULT_LOCALEbabel.locale相同,则不能转换.

babel = Babel(
    configs=BabelConfigs(
        ROOT_DIR=__file__,
        BABEL_DEFAULT_LOCALE="en",
        BABEL_TRANSLATION_DIRECTORY="lang",
    )
)
babel.locale = "en"

当您更新翻译文件时.

运行这两个命令.

  1. pybabel extract -F babel.cfg -o messages.pot .
  2. pybabel compile -d lang

请不要在创建.po文件后运行此命令.

pybabel init -i messages.pot -d lang -l fa

如果您运行,您的po文件将被重置.(删除您的所有翻译.)

Python相关问答推荐

如何获得每个组的时间戳差异?

如何调整QscrollArea以正确显示内部正在变化的Qgridlayout?

如果值发生变化,则列上的极性累积和

Pre—Commit MyPy无法禁用非错误消息

如何根据一列的值有条件地 Select 前N组?

mypy无法推断类型参数.List和Iterable的区别

Python Pandas—时间序列—时间戳缺失时间精确在00:00

Pandas:填充行并删除重复项,但保留不同的值

如何从pandas DataFrame中获取. groupby()和. agg()之后的子列?

Discord.py -

Python—在嵌套列表中添加相同索引的元素,然后计算平均值

如何将相同组的值添加到嵌套的Pandas Maprame的倒数第二个索引级别

如何在Python中解析特定的文本,这些文本包含了同一行中的所有内容,

EST格式的Azure数据库笔记本中的当前时间戳

递归链表反转与打印语句挂起

更新包含整数范围的列表中的第一个元素

nameError_C未定义

Pandas:根据系列词典中的值筛选行

盒子图分析

如何 Select 包含一定字符串和数字的单元格?