如何使用带有 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>!
那不太干净,但更安全。
我想得到这个结果:
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>!
那不太干净,但更安全。