我是 Flask 和 Babel 的新手,我刚刚启动了一个包含多种语言的项目。生成 babel.cfg 文件后,当我尝试使用命令提取它时pybabel extract -F babel.cfg -o messages.pot .,出现AttributeError: module 'jinja2.ext' has no attribute 'autoescape' 错误。
此错误的原因可能是什么以及如何修复它?
谢谢
我正在尝试使用 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)
我希望默认消息会出现在那里,但他们没有。我是期望过高还是做错了什么?
我正在使用 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: **.py]
[jinja2: **/templates/**.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_
Run Code Online (Sandbox Code Playgroud)
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_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)
我运行了以下命令:
这是我的项目结构的样子:
.
|-- README.md
|-- babel.cfg
|-- fabfile.py
|-- lucy
| |-- …Run Code Online (Sandbox Code Playgroud) 我正在做一个烧瓶项目(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) 在我的网站上使用 Flask + Jinja2 和 Flask-Babel 进行翻译。该网站有两种语言(取决于 URL),我想添加一个链接以在它们之间切换。为了正确执行此操作,我需要获取当前语言环境的名称,但我在文档中没有找到这样的函数。它到底存在吗?
我正在尝试使用 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
我正在一个使用多种语言的网站上工作,为了相应地显示价格/货币,我们使用了 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) 我开发多语言网站。页面的 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) 目前我正在将 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 ×10
python-babel ×10
flask ×7
flask-babel ×3
jinja2 ×2
currency ×1
gettext ×1
localization ×1
org-mode ×1
python-2.7 ×1