flask_babel 和 Jinja2 如何在可翻译文本中包含 HTML 或占位符?

flask_babel and Jinja2 How to include HTML or placeholders in translatable text?

在一个多语言的基本 Flask 网站中,我想对特定的单词或表达应用一种样式。 为了处理多语言,我使用 flask_babelex 和标记化。

from tokenize import u
from flask_babelex import gettext

page_title = gettext(u'The best potatoes in the world!')

在模板中,我会有这样的: <h2>{{ page_title }}</h2> 这将以这种方式呈现: <h2>The best potatoes in the world!</h2>

为了应用正确的样式效果,我希望“potatoes”这个词在一个范围内。

<h2>The best <span>potatoes</span> in the world!</h2>

在 page_title 定义字符串中包含跨度无效。它似乎已被清理并且 html 显示为字符串的一部分而不是被解释。 一个简单的 javascipt 函数来定位呈现页面中的单词将不会执行,因为该单词会随着不同的语言(例如 patatas)而改变。 我想可以创建一个复杂的 javascript 函数,其中包含占位符并在渲染时完成,但是......我希望有更简单的方法来实现这一点。

在原始字符串中包含 HTML 或在 Jinja2 模板中包含要替换的占位符或任何其他建议的最佳方法是什么?

您可以将内容标记为| safe以避免HTML被转义:

{{ page_title | safe }}

假设您不允许用户为其他用户插入可用的内容。

另一种选择是,如:

{{ _('The best %(start_tag)spotatoes%(end_tag)s in the world!', start_tag='<span>', end_tag='</span>') | safe }}