Babel 的上游似乎很不活跃, 我有根据之前一个 Pull Request 添加测试后再次提交这个更改, 但是没有得到任何回应… 因为急用, 就先采用了这个临时的方法.
如你所料, 这又是一个丑陋的 monkey-patch 😀
使用这个脚本来执行 pybabel extract, update, compile 等操作时, 如果用 -l 参数正确指定了语言, 生成的相应 .po/.mo 文件里就能保留相应的 Language 字段了.
#!/usr/bin/env python
import sys
from pkg_resources import load_entry_point
import babel.messages.catalog
_get_mime_headers = babel.messages.catalog.Catalog._get_mime_headers
def _get_mime_headers_with_language(self):
headers = _get_mime_headers(self)
if self.locale is not None:
headers.append(('Language', str(self.locale)))
return headers
babel.messages.catalog.Catalog.mime_headers = property(_get_mime_headers_with_language, babel.messages.catalog.Catalog._set_mime_headers)
if __name__ == '__main__':
sys.exit(
load_entry_point('Babel', 'console_scripts', 'pybabel')()
)