标签: python-babel

AttributeError:尝试使用 Flask-Babel 时模块“jinja2.ext”没有属性“autoescape”

我是 Flask 和 Babel 的新手,我刚刚启动了一个包含多种语言的项目。生成 babel.cfg 文件后,当我尝试使用命令提取它时pybabel extract -F babel.cfg -o messages.pot .,出现AttributeError: module 'jinja2.ext' has no attribute 'autoescape' 错误。

此错误的原因可能是什么以及如何修复它?

谢谢

python flask python-babel

9
推荐指数
1
解决办法
6394
查看次数

翻译 Flask-WTF 中的默认错误

我正在尝试使用 Flask-WTF 插件翻译来自 WTForms 的默认消息。根据这个(https://github.com/ajford/flask-wtf/pull/65)它应该可以工作。您还可以看到 wtforms 使用 gettext 作为其默认错误消息(https://bitbucket.org/simplecodes/wtforms/src/113994790508/wtforms/validators.py)。

我将 WTF_I18n_ENABLED 添加到我的配置文件中,并使用以下命令创建了我的 .po 文件

pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot myapp
pybabel init -i messages.pot -d myapp/translations -l en
pybabel compile -d myapp/translations
Run Code Online (Sandbox Code Playgroud)

我希望默认消息会出现在那里,但他们没有。我是期望过高还是做错了什么?

python flask flask-wtforms python-babel

5
推荐指数
1
解决办法
1135
查看次数

Flask-babel:如何翻译变量

我正在使用 Flask-babel 来翻译基于 Flask 的 Web 应用程序。我真的很想知道如何翻译变量的内容,例如foo.

我尝试{{ _(foo) }},但是当我.po像这样更新文件时:

pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot .
pybabel update -i messages.pot -d translations
Run Code Online (Sandbox Code Playgroud)

没有显示任何内容来翻译foovar 的内容。

常量字符串一切正常,例如{{ _("goo")}}.

python flask flask-babel python-babel

5
推荐指数
1
解决办法
4017
查看次数

Flask babel 不能进行简单的翻译?

好的,我有以下应用程序:

babel.cfg

[python: **.py]
[jinja2: **/templates/**.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_
Run Code Online (Sandbox Code Playgroud)

露西/初始化.py

babel = Babel()

def create_app(object_name):
  app = Flask(__name__)
  app.config.from_object(object_name)

  app.register_blueprint(main_blueprint)
  app.register_blueprint(category_blueprint)
  app.register_blueprint(item_blueprint)

  babel.init_app(app)
  db.init_app(app)
  return app


@babel.localeselector
def get_locale():
  return 'de'
Run Code Online (Sandbox Code Playgroud)

露西/控制器/main.py

main_blueprint = Blueprint(
    'main',
    __name__,
    template_folder='../templates/main',
)

@main_blueprint.route('/debug')
def debug():
  print get_locale()
  return gettext('A simple string')
Run Code Online (Sandbox Code Playgroud)

我运行了以下命令:

  1. pybabel 提取物 -F babel.cfg -o messages.pot 。
  2. pybabel init -i messages.pot -d 翻译 -l de
  3. pybabel 编译 -d 翻译/

这是我的项目结构的样子:

.
|-- README.md
|-- babel.cfg
|-- fabfile.py
|-- lucy
|   |-- …
Run Code Online (Sandbox Code Playgroud)

python flask flask-babel python-babel

5
推荐指数
2
解决办法
3955
查看次数

如何为烧瓶应用程序设置空白默认语言环境?

我正在做一个烧瓶项目(Python3)。我的项目中的国际化工作正常。这是在 create_app 工厂中启动的配置方法:

def configure_languages(app):

    # flask-babel
    babel = Babel(app)

    @babel.localeselector
    def get_locale():
        languages = ['en', 'fr', 'de']
        lang = request.args.get('lang')
        if lang is None:
            return g.get('lang_code', app.config['BABEL_DEFAULT_LOCALE'])
        elif lang not in languages:
            return g.get('lang_code', app.config['BABEL_DEFAULT_LOCALE'])
        else:
            g.lang_code = lang
            return g.get('lang_code', app.config['BABEL_DEFAULT_LOCALE'])

    @app.before_request
    def ensure_lang_support():
        lang_code = g.get('lang_code', app.config['BABEL_DEFAULT_LOCALE'])
        if lang_code and lang_code not in app.config['SUPPORTED_LANGUAGES']:
            return abort(404)


    @app.url_defaults
    def set_language_code(endpoint, values):
        if 'lang_code' in values or not g.get('lang_code',
                                              app.config['BABEL_DEFAULT_LOCALE']):
            return
        if app.url_map.is_endpoint_expecting(endpoint, 'lang_code'):
            values['lang_code'] = g.get('lang_code',
                                          app.config['BABEL_DEFAULT_LOCALE'])

    @app.url_value_preprocessor …
Run Code Online (Sandbox Code Playgroud)

python localization internationalization flask python-babel

5
推荐指数
1
解决办法
1487
查看次数

获取 Jinja2 中的当前区域设置

在我的网站上使用 Flask + Jinja2 和 Flask-Babel 进行翻译。该网站有两种语言(取决于 URL),我想添加一个链接以在它们之间切换。为了正确执行此操作,我需要获取当前语言环境的名称,但我在文档中没有找到这样的函数。它到底存在吗?

python gettext jinja2 python-babel

4
推荐指数
2
解决办法
5431
查看次数

Org-mode babel python 会话不产生结果

我正在尝试使用 org-mode 和 babel 编写一个代码测试用例,但无法完成第一步:

* Running code example

Set up some variables
#+begin_src python :results output :session
x=1
#+end_src


Use some variables (in the end I'll have more useful
explanatory text between the code blocks).
#+begin_src python :exports both :results output :session 
print "Hi", x
#+end_src
Run Code Online (Sandbox Code Playgroud)

C-c由于第二个块尚未定义,因此按顺序击中块会失败x

导出文件(如果重要的话导出为 PDF)似乎会执行所有代码块,但RESULTS第二个块的 代码不会被构造并插入到缓冲区中。

如何修改代码块上的开关,以便所有内容都在会话中执行,并将结果嵌入到组织缓冲区中?

org-version=7.9.3f

python org-mode python-babel

4
推荐指数
1
解决办法
1983
查看次数

Babel 数字 format_currency 函数

我正在一个使用多种语言的网站上工作,为了相应地显示价格/货币,我们使用了 babel 库。问题是当调用 format_currency 时,它总是返回美分部分,即使价格被显式转换为整数。

例子:

>>> print format_currency(100, 'EUR', locale='fr_FR')
100,00 €

>>> print format_currency(int(100), 'EUR', locale='fr_FR')
100,00 €
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题,以便返回值排除美分部分以具有类似的东西

>>> print format_currency(int(100), 'EUR', locale='fr_FR')
100 €
Run Code Online (Sandbox Code Playgroud)

python currency python-2.7 python-babel

4
推荐指数
2
解决办法
4043
查看次数

如何传递给 url_for 默认参数?

我开发多语言网站。页面的 URI 如下所示:

/RU/about

/EN/about

/IT/about

/JP/about

/EN/contacts
Run Code Online (Sandbox Code Playgroud)

在 jinja2 模板中我写道:

<a href="{{ url_for('about', lang_code=g.current_lang) }}">About</a>
Run Code Online (Sandbox Code Playgroud)

我必须在所有url_for调用中编写 lang_code=g.current_lang 。

是否可以隐式lang_code=g.current_lang传递url_for?并且只写 {{ url_for('about') }}

我的路由器看起来像:

@app.route('/<lang_code>/about/')
def about():
...
Run Code Online (Sandbox Code Playgroud)

python flask python-babel

4
推荐指数
1
解决办法
1145
查看次数

在 Jinja2 中使用 babel 的链接

目前我正在将 Flask 和 Jinja2 与 Babel 结合使用。到目前为止一切都很顺利。

我面临的唯一问题是在翻译文本中使用链接时。假设 HTML 中有以下内容:

<p>You can change this in your <a href="{{ url_for("settings") }}">settings</a>.</p>
Run Code Online (Sandbox Code Playgroud)

我如何将它与 babel 结合使用?

我一直在考虑下面的代码,但是当翻译语言中的单词顺序不同时,这就会出现问题。

<p>{{ _("You can change this in your ")<a href="{{ url_for("settings") }}">{{ _("settings")</a>.</p>
Run Code Online (Sandbox Code Playgroud)

另一个想法是将整个 HTML 放入要翻译的字符串中,但这样我就不能再使用字符串转义了。

执行此操作的首选方法是什么?

python jinja2 flask flask-babel python-babel

4
推荐指数
1
解决办法
695
查看次数