我希望在我的Twig模板中的trans标记中使用包含HTML的变量。(变量包含不同语言在句子中不同位置出现的链接的开始和结尾。)
有一些关于"Drupal 8 Twig模板和翻译“的文档”解释说,对于trans标记中的变量,有一个|placeholder-filter和一个|raw-filter (对于旧版本:|passthrough)。
我看不出使用这些过滤器的输出有什么不同。
这是我的模板:
{% set string = '<strong>&</strong>' %}
<div>
{% trans %}
Escaped: {{ string }}
{% endtrans %}
</div>
<div>
{% trans %}
Pass-through: {{ string|raw }}
{% endtrans %}
</div>
<div>
{% trans %}
Placeholder: {{ string|placeholder }}
{% endtrans %}
</div>这里是输出:
Escaped: <strong>&</strong>
Pass-through: <strong>&</strong>
Placeholder: <strong>&</strong>有什么过滤器可以关闭逃逸吗?
发布于 2017-12-10 23:17:07
AFAIK Drupal 8中的Twig trans是为了简化对已经熟悉Twig的主题的翻译。
在这个框架下,它使用与常规的Drupal转换函数t()或Drupal筛选器filter t相同类型的转换字符串,而在trans块中使用的所有变量都作为@variable或%变量占位符在转换字符串中处理。
翻译函数中的这些占位符总是在插入到翻译之前转义HTML。无论您如何尝试不转义传入的值,只需传递一个FormattableMarkup对象。
未消毒的变量( Twig模板中的{{ variable|raw }}或翻译字符串中的!variable )对于Drupal 8的翻译是不推荐的,并且在最新的8.xDrupal版本中不能工作。翻译API描述有点过时了。
对于用例,您可以将HTML链接标记添加到翻译字符串中,并使链接URL本身成为变量。不幸的是,Twig trans还不支持这种变量。(比较这核心问题。)因此,您应该使用t过滤器来代替:
{{ 'A <a href=":url">link</a> example in a translation.'|t({ ':url': url }) }}上面的示例匹配翻译字符串:
en:A <a href=":url">link</a> example in a translation.
德:Ein Beispiel-<a href=":url">Link</a> in einer Übersetzung.
https://drupal.stackexchange.com/questions/251863
复制相似问题