setup.py中的Babel消息提取器配置:元组中的第三个参数
我想在我的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 个回答
第三个参数是一个选项映射。
这个参数可以包含任意的关键词参数,这些参数会传递给提取方法。具体能接受哪些关键词参数,完全取决于提取方法本身。
当调用提取器时,这些选项会作为最后一个参数传入,通常在方法签名中叫做 options
。比如,Mako Babel 插件支持 encoding
和 input_encoding
这两个参数。前者似乎是后者的旧拼写,只有在没有指定 input_encoding
时才会使用。
因此,每一个 Babel 插件都需要单独记录支持的选项,Babel 项目本身并不限制这些选项,也不知道每个插件具体支持哪些。
Mako 提取器的具体信息可以在 常见框架集成部分找到:
Mako 提取器支持一个可选的
input_encoding
参数,用来指定模板的编码(与Template
和TemplateLookup
的input_encoding
参数相同)。