Pybabel使用jinja2生成空的pot文件

时间:2015-04-21 07:19:06

标签: python flask jinja2 babel

我使用Flask,Flask-Babel和Jinja2。我正在尝试生成.pot文件。那就是我到目前为止所做的。

我的babel.cfg看起来像这样:

[python: **.py]

[jinja2: **.html]
encoding = utf-8
extensions=jinja2.ext.autoescape,jinja2.ext.with_

我正在使用我的应用初始化Flask-Babel:

# Babel init
babel = Babel(app)
app.config['BABEL_DEFAULT_LOCALE'] = 'en'

在我的模板目录中,我有homepage.html:

...
<div class="news-wrapper">
    <p class="quote">{{ gettext('Hey there') }}</p>
    <p class="quote">{% trans %}Trying 42{% endtrans %}</p>
    <p class="quote">{{ _('Maybe like this?') }}</p>
</div>
...

然后运行此命令(当我在我的virtualenv中时):

pybabel extract -F babel.cfg -o messages.pot .

其中一个输出行是:

extracting messages from templates/homepage.html (extensions="jinja2.ext.autoescape,jinja2.ext.with_", encoding="utf-8")

它会生成一个包含以下内容的messages.pot文件:

# Translations template for PROJECT.
# Copyright (C) 2015 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2015-04-21 10:06+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 1.3\n"

该文件没有我的翻译。

我没有收到任何错误或警告,pybabel无法找到jinja2文件中的gettext版本。 当我在.py文件中使用gettext正常工作。

我错过了什么吗?感谢

4 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,在我的情况下,问题是指定输入文件,即文件在哪里查找标记为翻译的字符串。

当我按照各种教程(例如this one)中的建议运行pybabel extract -F babel.cfg -o messages.pot时,出现pybabel: error: no input files or directories specified错误。

最终对我有用的命令是:

pybabel extract -F babel.cfg -o messages.pot --input-dirs=.

答案 1 :(得分:3)

花了好几个小时才搞清楚,我找到了解决方案,如果有人需要,可以发布未来的帮助。

我的模板中安装了Flask-Assets,显然如果你有,你需要添加babel.cfg

extensions=jinja2.ext.autoescape,jinja2.ext.with_,webassets.ext.jinja2.AssetsExtension

来自Flask-Assets文档:

  

否则,babel将不会从包含资产标签的任何模板中提取字符串。

我要做一个拉取请求,检查你是否安装了Flask-Assets和Flask-Babel并且你没有添加正确的扩展名,它会给你警告 - 我认为开发人员应该得到一些错误/警告。

答案 2 :(得分:2)

对于可能未使用已接受答案中提及的资产扩展的其他人,问题可能在于babel.cfg文件本身。

对我来说,问题出在我从tutorial获取的babel.cfg文件中。

后来当我从问题中切换到使用babel.cfg文件时,对我来说事情很顺利。

仅供记录,这是babel.cfg文件,对我有用。

[python: **.py]
[jinja2: **.html]
encoding = utf-8
extensions=jinja2.ext.autoescape,jinja2.ext.with_

答案 3 :(得分:0)

我遇到了类似的问题:

输入:

Cache-Control: max-age=604800

输出:

pybabel extract -F babel.cfg -k _l -o messages.pot

Usage: pybabel extract [options] <input-paths>

我的解决方案是在输入命令后添加两个空格和一个句点

pybabel: error: no input files or directories specified

希望这会有所帮助。

更新:

我的pybabel extract -F babel.cfg -k _l -o messages.pot .文件是:

babel.cfg