Pybabel使用jinja2生成空的pot文件

Or *_*uan 5 python jinja2 babel flask

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

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

[python: **.py]

[jinja2: **.html]
encoding = utf-8
extensions=jinja2.ext.autoescape,jinja2.ext.with_
Run Code Online (Sandbox Code Playgroud)

我用我的应用程序初始化Flask-Babel,如下所示:

# Babel init
babel = Babel(app)
app.config['BABEL_DEFAULT_LOCALE'] = 'en'
Run Code Online (Sandbox Code Playgroud)

在我的模板目录中,我有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>
...
Run Code Online (Sandbox Code Playgroud)

然后运行这个命令(当我在我的virtualenv时):

pybabel extract -F babel.cfg -o messages.pot .
Run Code Online (Sandbox Code Playgroud)

其中一条输出线是:

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

它会生成一个包含以下内容的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"
Run Code Online (Sandbox Code Playgroud)

该文件没有我的翻译.

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

我错过了什么吗?谢谢

Or *_*uan 8

经过几个小时的研究后,我找到了解决方案,如果有人需要的话,可以发布以寻求未来的帮助。

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

extensions=jinja2.ext.autoescape,jinja2.ext.with_,webassets.ext.jinja2.AssetsExtension
Run Code Online (Sandbox Code Playgroud)

来自 Flask-Assets 文档:

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

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

  • 在 `babel.cfg` 中设置 `silent=False` 将有助于查明问题:事实是,这确实应该是默认值:( 感谢您指出 webassets Jinja2 扩展! (9认同)
  • 唷,这是一个不起眼的错误——感谢您发布修复程序,效果非常好。 (2认同)

Ser*_*ych 6

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

当我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=.
Run Code Online (Sandbox Code Playgroud)


bha*_*arc 5

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

对我来说,问题在于我从本教程babel.cfg中获取的文件。

后来,当我从这里的问题切换到使用 babel.cfg 文件时,事情对我来说进展顺利。

只是为了记录,这是babel.cfg对我有用的文件。

[python: **.py]
[jinja2: **.html]
encoding = utf-8
extensions=jinja2.ext.autoescape,jinja2.ext.with_
Run Code Online (Sandbox Code Playgroud)