Pybabel用jinja2生成空pot文件
Pybabel generates empty pot file with jinja2
我正在使用 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
时 它 工作正常。
我错过了什么吗?
在花了几个小时弄清楚后,我找到了解决方案,如果有人需要它,请发帖寻求未来的帮助。
我在我的模板中安装了 Flask-Assets,显然如果你有它,你需要添加你 babel.cfg
:
extensions=jinja2.ext.autoescape,jinja2.ext.with_,webassets.ext.jinja2.AssetsExtension
来自 Flask-Assets 文档:
Otherwise, babel will not extract strings from any templates that include an assets tag.
我将执行一个拉取请求,检查您是否安装了 Flask-Assets 和 Flask-Babel,并且您没有添加正确的扩展,它会给您警告 - 我认为开发人员应该得到一些error/warning。
对于其他可能没有使用已接受答案中提到的资产扩展的人来说,问题可能在于 babel.cfg
文件本身。
对我来说,问题出在我从 tutorial.
中获取的 babel.cfg
文件上
后来当我从这里的问题切换到使用 babel.cfg 文件时,一切顺利。
仅作记录,这是对我有用的 babel.cfg
文件。
[python: **.py]
[jinja2: **.html]
encoding = utf-8
extensions=jinja2.ext.autoescape,jinja2.ext.with_
我遇到了同样的问题,在我的例子中,问题是指定输入文件,即在其中查找标记为翻译的字符串的文件。
当我按照各种教程(例如 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=.
我遇到了类似的问题:
输入:
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
文件是:
[python: **.py]
[jinja2: **.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_
我正在使用 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
时 它 工作正常。
我错过了什么吗?
在花了几个小时弄清楚后,我找到了解决方案,如果有人需要它,请发帖寻求未来的帮助。
我在我的模板中安装了 Flask-Assets,显然如果你有它,你需要添加你 babel.cfg
:
extensions=jinja2.ext.autoescape,jinja2.ext.with_,webassets.ext.jinja2.AssetsExtension
来自 Flask-Assets 文档:
Otherwise, babel will not extract strings from any templates that include an assets tag.
我将执行一个拉取请求,检查您是否安装了 Flask-Assets 和 Flask-Babel,并且您没有添加正确的扩展,它会给您警告 - 我认为开发人员应该得到一些error/warning。
对于其他可能没有使用已接受答案中提到的资产扩展的人来说,问题可能在于 babel.cfg
文件本身。
对我来说,问题出在我从 tutorial.
中获取的babel.cfg
文件上
后来当我从这里的问题切换到使用 babel.cfg 文件时,一切顺利。
仅作记录,这是对我有用的 babel.cfg
文件。
[python: **.py]
[jinja2: **.html]
encoding = utf-8
extensions=jinja2.ext.autoescape,jinja2.ext.with_
我遇到了同样的问题,在我的例子中,问题是指定输入文件,即在其中查找标记为翻译的字符串的文件。
当我按照各种教程(例如 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=.
我遇到了类似的问题:
输入:
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
文件是:
[python: **.py]
[jinja2: **.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_