首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Twig中使用trans而不转义HTML

在Twig中使用trans而不转义HTML
EN

Drupal用户
提问于 2017-12-10 16:18:08
回答 1查看 7.5K关注 0票数 5

我希望在我的Twig模板中的trans标记中使用包含HTML的变量。(变量包含不同语言在句子中不同位置出现的链接的开始和结尾。)

有一些关于"Drupal 8 Twig模板和翻译“的文档”解释说,对于trans标记中的变量,有一个|placeholder-filter和一个|raw-filter (对于旧版本:|passthrough)。

我看不出使用这些过滤器的输出有什么不同。

这是我的模板:

代码语言:javascript
复制
{% 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>

这里是输出:

代码语言:javascript
复制
Escaped: <strong>&</strong>
Pass-through: <strong>&</strong>
Placeholder: <strong>&</strong>

有什么过滤器可以关闭逃逸吗?

EN

回答 1

Drupal用户

回答已采纳

发布于 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过滤器来代替:

代码语言:javascript
复制
{{ '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.

票数 10
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/251863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档