我正在使用Flask-Babel来翻译字符串.
在一些模板中,我正在从数据库中读取字符串(postgresql).如何使用Flask-Babel从数据库中翻译字符串?
假设我有一个应用程序,其中有一些可用的翻译:
\nAVAILABLE_LOCALES = [\'en_US\', \'en_EN\', \'de_AT\']\nRun Code Online (Sandbox Code Playgroud)\n我想根据Accept-Language标题选择最合适的。
为了获取语言环境,我会写这样的内容:
\n@babel.localeselector\ndef get_locale():\n user = getattr(g, \'user\', None)\n if user is not None:\n return user.locale\n return request.accept_languages.best_match(AVAILABLE_LOCALES)\nRun Code Online (Sandbox Code Playgroud)\n问题是,如果用户代理要求de_DE,则匹配失败并且选择会退回到默认值(英语),而de_AT显然我宁愿得到 。
注意:文档页面中的示例如下
\nreturn request.accept_languages.best_match([\'de\', \'fr\', \'en\'])\nRun Code Online (Sandbox Code Playgroud)\n但这不允许同一语言有两个不同版本(en_EN,en_US)。
在这个GitHub 问题中,有人建议使用 Babel 的negotiate_locale函数:
@babel.localeselector\ndef get_locale():\n user = getattr(g, \'user\', None)\n if user is not None:\n return …Run Code Online (Sandbox Code Playgroud) 在Flask我们最近升级Werkzeug到 1.0.1的应用程序中(因此我们可以在 cookie 上设置相同的站点),这强制了一些依赖项,其中Flask-BabelEx==0.9.4.
在这次升级之后,转义 %(百分号)的处理方式发生了非常令人不安的变化。凡gettext('foo %%')用于返回*"foo %"*,现在的回报*"foo %%"*,换句话说,%符号的逃逸似乎无法处理。我想,好吧,有点向上不兼容,我们只需要替换babel 字符串中的所有%%by %(在参考语言以及所有翻译中,所以这已经很重要了)。
但这并不是故事的结束,因为对于Jinja2 模板中使用的所有 babel 字符串,例如{{ _("This is a percent sign: %") }},%仍然处理标志的转义,因此这仍然需要 {{ _("This is a percent sign: %%") }}. 那么我们是否必须%根据使用位置来处理转义和未转义的 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: **.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) 目前我正在将 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 放入要翻译的字符串中,但这样我就不能再使用字符串转义了。
执行此操作的首选方法是什么?
我正在使用 Flask Babel 来翻译我的 Flask Python 应用程序。目前我只有区域设置的翻译机制,但是如果用户除了他的位置之外还想将位置更改为英语怎么办?有什么办法可以手动更改区域设置吗?
这是我的 Flask Babel 函数,它获取用户区域设置并返回语言。它位于我的__init__.py文件中。
@babel.localeselector
def get_locale():
print "LANGUAGE PT"
#return 'de' -> manually change to the desired language
request.accept_languages.best_match(LANGUAGES.keys())
Run Code Online (Sandbox Code Playgroud)
我真的很感谢任何帮助!
此致
我开始将 Babel 与 WTForms 和 Flask 一起使用。下面我尝试 gettext 我的用户名和密码的占位符关键字字段的占位符关键字:
\n\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\nfrom flask_babel import gettext\nfrom flask_wtf import FlaskForm\nfrom wtforms import PasswordField, StringField\nfrom wtforms.validators import DataRequired\n\n\nclass LoginForm(FlaskForm):\n username = StringField(label=\'username\',\n validators=[DataRequired()],\n render_kw={"placeholder": gettext(\'Username\')})\n password = PasswordField(label=\'password\',\n validators=[DataRequired()],\n render_kw={"placeholder": gettext(\'Password\')})\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的法语 .po 文件(当然已经编译过):
\n\n# French (France) translations for PROJECT.\n# Copyright (C) 2017 ORGANIZATION\n# This file is distributed under the same license as the PROJECT project.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.\n#\nmsgid ""\nmsgstr ""\n"Project-Id-Version: PROJECT …Run Code Online (Sandbox Code Playgroud) 我在使用 Flask-babel 时遇到了问题。我无法创建日语翻译。
pybabel:错误:未知语言环境“jp”
这是 Flask-Babel 问题吗?
当一种语言不存在时,这是同样的错误。但是,德语作品。所以.....babel nit 支持日语吗?
有没有支持像日语这样的主要语言的 Babel 替代品?
flask ×9
flask-babel ×9
python ×9
python-babel ×5
babel ×1
jinja2 ×1
localization ×1
werkzeug ×1