Python Pybabel使用jinja2生成空罐文件

Python Pybabel使用jinja2生成空罐文件,python,flask,jinja2,python-babel,Python,Flask,Jinja2,Python Babel,我用的是烧瓶,烧瓶巴贝尔和金贾2。我正在尝试生成.pot文件。到目前为止我就是这么做的 我的babel.cfg如下所示: [python: **.py] [jinja2: **.html] encoding = utf-8 extensions=jinja2.ext.autoescape,jinja2.ext.with_ # Babel init babel = Babel(app) app.config['BABEL_DEFAULT_LOCALE'] = 'en' ... <div

我用的是烧瓶,烧瓶巴贝尔和金贾2。我正在尝试生成.pot文件。到目前为止我就是这么做的

我的babel.cfg如下所示:

[python: **.py]

[jinja2: **.html]
encoding = utf-8
extensions=jinja2.ext.autoescape,jinja2.ext.with_
# Babel init
babel = Babel(app)
app.config['BABEL_DEFAULT_LOCALE'] = 'en'
...
<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>
...
pybabel extract -F babel.cfg -o messages.pot .
extracting messages from templates/homepage.html (extensions="jinja2.ext.autoescape,jinja2.ext.with_", encoding="utf-8")
# 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"
我的应用程序是这样的:

[python: **.py]

[jinja2: **.html]
encoding = utf-8
extensions=jinja2.ext.autoescape,jinja2.ext.with_
# Babel init
babel = Babel(app)
app.config['BABEL_DEFAULT_LOCALE'] = 'en'
...
<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>
...
pybabel extract -F babel.cfg -o messages.pot .
extracting messages from templates/homepage.html (extensions="jinja2.ext.autoescape,jinja2.ext.with_", encoding="utf-8")
# 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"
在我的模板目录中,我有homepage.html:

[python: **.py]

[jinja2: **.html]
encoding = utf-8
extensions=jinja2.ext.autoescape,jinja2.ext.with_
# Babel init
babel = Babel(app)
app.config['BABEL_DEFAULT_LOCALE'] = 'en'
...
<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>
...
pybabel extract -F babel.cfg -o messages.pot .
extracting messages from templates/homepage.html (extensions="jinja2.ext.autoescape,jinja2.ext.with_", encoding="utf-8")
# 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"
其中一个输出行是:

[python: **.py]

[jinja2: **.html]
encoding = utf-8
extensions=jinja2.ext.autoescape,jinja2.ext.with_
# Babel init
babel = Babel(app)
app.config['BABEL_DEFAULT_LOCALE'] = 'en'
...
<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>
...
pybabel extract -F babel.cfg -o messages.pot .
extracting messages from templates/homepage.html (extensions="jinja2.ext.autoescape,jinja2.ext.with_", encoding="utf-8")
# 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"
并生成包含以下内容的messages.pot文件:

[python: **.py]

[jinja2: **.html]
encoding = utf-8
extensions=jinja2.ext.autoescape,jinja2.ext.with_
# Babel init
babel = Babel(app)
app.config['BABEL_DEFAULT_LOCALE'] = 'en'
...
<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>
...
pybabel extract -F babel.cfg -o messages.pot .
extracting messages from templates/homepage.html (extensions="jinja2.ext.autoescape,jinja2.ext.with_", encoding="utf-8")
# 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"
#项目的翻译模板。
#版权所有(C)2015组织
#此文件以与项目相同的许可证分发。
#第一作者,2015年。
#
#,模糊
msgid“”
msgstr“”
“项目Id版本:项目版本\n”
“将Msgid错误报告给:EMAIL@ADDRESS\n“
“罐创建日期:2015-04-21 10:06+0300\n”
“采购订单修订日期:年月日:MI+区域\n”
“最后一个转换器:全名\n”
“语言团队:语言\n”
“MIME版本:1.0\n”
“内容类型:文本/普通;字符集=utf-8\n”
“内容传输编码:8位\n”
“生成者:Babel 1.3\n”
该文件没有我的翻译

我没有收到任何错误或警告,pybabel只是在jinja2文件中找不到
gettext
变体但是当我在.py文件中使用
gettext
时,它工作得很好


我错过了什么吗?

花了几个小时想办法,我找到了解决办法,如果有人需要,我会发帖寻求帮助

我在模板中安装了Flask资产,显然,如果您有它,您需要添加到您的
babel.cfg

extensions=jinja2.ext.autoescape,jinja2.ext.with_,webassets.ext.jinja2.AssetsExtension
从文件中:

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


我将执行一个pull请求,检查您是否安装了Flask资产和Flask Babel,并且您没有添加正确的扩展,它将向您发出警告-我认为开发人员应该得到一些错误/警告

对于不使用公认答案中提到的资产扩展的其他人,问题可能在于
babel.cfg
文件本身

对我来说,问题在于我的
babel.cfg
文件,我从这个文件中获取了这个文件

后来,当我从这里的问题开始使用babel.cfg文件时,一切都很顺利

为了记录在案,这里是为我工作的
babel.cfg
文件

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

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

当我按照各种教程(例如)中的建议运行
pybabel extract-F babel.cfg-o messages.pot
时,我得到了
pybabel:error:没有指定输入文件或目录
错误

最终对我有效的命令是:

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

我遇到了类似的问题:

输入:

pybabel extract-F babel.cfg-k\u l-o messages.pot

输出:

用法:pybabel extract[选项]

pybabel:错误:未指定输入文件或目录

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

pybabel extract-F babel.cfg-k\u l-o messages.pot.

希望这有帮助

更新:

我的
babel.cfg
文件是:

[python:*.py]
[jinja2:*.html]

extensions=jinja2.ext.autoescape,jinja2.ext.with

在您的
babel.cfg
中设置
silent=False
将有助于查明问题:问题是,这应该是默认设置:(感谢您指出webassets jinja2扩展!唷,这是一个模糊的错误——感谢您发布的修复,工作非常完美。