setup.py中的Babel消息提取器配置:元组中的第三个参数

2 投票
1 回答
1054 浏览
提问于 2025-04-17 18:11

我想在我的Python项目中开始使用Babel。我有一个setup.py文件,里面的内容大致如下,都是按照文档来的:

setup(
    ...
    message_extractors = {'my_project': [('**.py', 'lingua_python', None),
    ]},
    ...

一切运行得很好。现在我想知道第三个参数(设置为None)是什么意思,以及我可以传入什么(只是想了解一下)。我查看了Babel的文档,但没找到相关信息,不过我在Mako的文档中看到了这个:

# Extraction from Python source files

[python: myproj/**.py]

# Extraction from Mako templates

[mako: myproj/templates/**.html]
input_encoding = utf-8

我在想:这个input_encoding选项似乎可以在这里传入。因为我在Python中使用的是Unicode和UTF-8,包括我的模板等等,所以我觉得这可能是一个有效的选项(也许这是一个隐含的假设,我不太确定)。

所以现在我在寻找一些文档来说明这个行为,但即使是我找到的Babel文档的那部分也没有提到第三个参数是什么。

请分享一些有用的链接,详细解释一下这个问题。谢谢!

更新:我发现最后一个参数似乎是一个dict类型的选项,可能是传递给扩展(例如mako)的。当我把最后一个参数从None改为{'input_encoding': 'utf-8'}时,mako.exceptions.CompileException关于Unicode decode operation of encoding 'ascii' failed的错误消失了。所以虽然这似乎是答案,但我仍在寻找相关的文档。

1 个回答

3

第三个参数是一个选项映射。

这个参数可以包含任意的关键词参数,这些参数会传递给提取方法。具体能接受哪些关键词参数,完全取决于提取方法本身。

当调用提取器时,这些选项会作为最后一个参数传入,通常在方法签名中叫做 options。比如,Mako Babel 插件支持 encodinginput_encoding 这两个参数。前者似乎是后者的旧拼写,只有在没有指定 input_encoding 时才会使用。

因此,每一个 Babel 插件都需要单独记录支持的选项,Babel 项目本身并不限制这些选项,也不知道每个插件具体支持哪些。

Mako 提取器的具体信息可以在 常见框架集成部分找到:

Mako 提取器支持一个可选的 input_encoding 参数,用来指定模板的编码(与 TemplateTemplateLookupinput_encoding 参数相同)。

撰写回答