如何使用带有 html 代码的纯文本替换翻译中的 %variables%?

How to replace %variables% in translation using plain text with html code?

我想得到这个结果:

Hello! Please, Register or Login!

(粗体文本表示链接 <a href="..."></a>)。 我想翻译这段文字,但我不知道如何使用 HTML.

我试过这个方法:

messages.en.yml:

translation:
    message: Hello! Please, %Register% or %Login%!
    register: Register
    login: Login

index.html.twig:

{{ 'translation.message'|trans({
      '%register%': '<a href="#">'~'translation.register'|trans~'</a>',
      '%login%': '<a href="#">'~'translation.login'|trans~'</a>'
}) }}

但是这种方法return纯文本和HTML代码是行不通的!我尝试使用 |raw 选项但无济于事。

您遇到了转义问题。

对于您的情况,您可以使用 |raw 过滤器:

'%register%': ('<a href="#">'~'translation.register'|trans~'</a>')|raw,

fiddle

但更好的做法是使用多个翻译并且只翻译标签,例如:

foo.hello = 'Hello, please'
foo.register = 'register'
foo.or = 'or'
foo.login = 'login'

{{ 'foo.hello'|trans }} <a href="#">{{ 'foo.register'|trans }}</a> {{ 'foo.or'|trans }} <a href="#">{{ 'foo.login'|trans }}</a>!

那不太干净,但更安全。