在Twig模板中添加翻译内容中的链接

时间:2012-07-18 15:56:11

标签: symfony twig

在Twig模板中,我需要一个包含链接的翻译文本(路径应该由路由器生成,而不是静态嵌入)。 Twig不允许在trans块中呈现变量 - 我也知道以下内容:

{% trans with {'%name%': 'Fabien'} from "app" %}
Hello %name%
{% endtrans %}

但是我无法看到如何使用它来在翻译中注入像这样的片段

<a href="{{ path('privacy') }}">privacy policy</a>

(当然,锚文本也应该被翻译)

4 个答案:

答案 0 :(得分:35)

我采取的方法是:

在翻译文件中:

page.privacy.policy: Please read our %link_start%privacy policy%link_end%

在树枝文件中:

<p>{{ 'page.privacy.policy' | trans({'%link_start%' : '<a href="'~path('privacy-policy')~'">', '%link_end%' : '</a>'}, 'account') | raw }}</p>

我不确定是否可以使用上面提到的块语法来完成,因为我发现它不起作用,除非我通过'raw'过滤器传输了翻译结果。我还使用消息域来分割翻译,因此使用“帐户”参数。

我认为最接近你的例子的是:

<p>{{ 'Please read our %link_start%privacy policy%link_end%' | trans({'%link_start%' : '<a href="'~path('privacy-policy')~'">', '%link_end%' : '</a>'}) | raw }}</p>

编辑:

我遇到的这种方法的唯一问题是我需要以编程方式跟踪单元测试中的翻译链接,因为没有单个翻译表示链接文本。虽然凌乱,但我认为可以通过为链接文本提供单独的翻译并将其翻译后的值替换为全文作为附加变量来解决这个问题。

答案 1 :(得分:7)

rebdirdo的解决方案不是很安全,因为它没有逃避整个消息。对于"don't use <b> tag, use <strong> tag instead. %link_start%Here%link_end% you can find why."这样的邮件,它无法正常使用,因为标签不会被转义,也不会显示。

工作方法:

翻译文件:

advises.strong: don't use <b> tag, use <strong> tag instead. %link_start%Here%link_end% you can find why.

twig file:

{{ 'advises.strong'|trans|nl2br|replace({'%link_start%': '<a href="'~path('privacy-policy')~'">', '%link_end%': '</a>'})|raw }}

请注意nl2br过滤器。有必要在那里放置一些过滤器,使原始过滤器仅适用于链接标签。

答案 2 :(得分:1)

这是一种更好的方式:

{{ 'Please read our %privacy_policy%'|trans({
    '%privacy_policy%': '<a href="' ~ path('privacypolicy') ~ '"> ' ~ 'Privacy Policy'|trans ~ '</a>'
})|raw }}

答案 3 :(得分:0)

嫩枝:

{{'body.term'|trans('%link_terms%' :app.request.getSchemeAndHttpHost()~path('terms')},'AcmeTerm')|raw }}

AcmeTerm.yml

body
    term: >
      <ul>          
          <li>Read<a href="%link_terms%">Terms</a>.</li>
      </ul>

其中path('terms')是路径 像:

it__RG__terms                             ANY      ANY    ANY  /it/termini-e-condizioni
en__RG__terms                             ANY      ANY    ANY  /en/terms-and-conditions