我想在Symfony 2 Translation中添加一些HTML。这样我就会知道我的应用程序中哪些短语被翻译,哪些不被翻译。 我找到了" Symfony \ Component \ Translation \ Translator.php"功能" trans"。现在我想在函数返回中添加一些东西,例如"< / BR>":
/**
* {@inheritdoc}
*
* @api
*/
public function trans($id, array $parameters = array(), $domain = null, $locale = null)
{
if (null === $locale) {
$locale = $this->getLocale();
} else {
$this->assertValidLocale($locale);
}
if (null === $domain) {
$domain = 'messages';
}
if (!isset($this->catalogues[$locale])) {
$this->loadCatalogue($locale);
}
return strtr($this->catalogues[$locale]->get((string) $id, $domain)."</br>", $parameters);
}
问题在于,当我运行我的应用程序时,我得到了例如&#34; Tag&lt; / b r&gt;&#34; (我添加了空格,因为它在正常情况下不会显示在这里.HTML不会将其作为HTML代码而是作为字符串插入。有没有办法实现我想要的?也许它是在但是在其他方式?
答案 0 :(得分:1)
这是因为您已激活Twig Escaper 扩展名。该扩展程序添加了自动输出转义到Twig,它定义了 autoescape 标记和原始过滤器。
所以我认为你在这里得到的最佳选择是定义一个新的枝条扩展,让你翻译你的html字符串,而不必每次都重复myvar|raw
。
要了解如何创建新的Twig扩展程序,请查看文档here。
在转义JS时使用相同的扩展名,并且不需要使用其他任何东西,特别是在PHP控制器中。这是因为逃逸是在Twig级别完成的。只需记住声明您的新Twig过滤器是安全的,以避免再次自动转义:
$filter = new Twig_SimpleFilter('nl2br', 'nl2br', array('is_safe' => array('html')));
如果您需要对请求的数据进行一些额外的处理,以便您可以跟踪正在请求的字符串,那么只需将新服务声明为Symfony转换的代理。您的Twig扩展可以使用相同的服务。这样,您就可以将所有请求汇聚到一个服务中。
这里有一些有用的链接:
答案 1 :(得分:0)
我建议您在翻译中使用Markdown 然后,您可以使用Markdown解析器解析翻译的消息。
Twig中的示例:'my.message'|trans|markdown
(我猜你有一个Markdown过滤器,有KnpMarkdownBundle)
答案 2 :(得分:0)
我的解决方案:
我已经通过几个步骤实现了我想要的目标:
覆盖Translator.php并更改parameters.yml中的translator.class
public function trans($ id,$ parameters,$ domain,$ locale) { $ return = parent :: trans($ id,$ parameters,$ domain,$ locale); 返回&#34;&#34;。$ return。&#39;&#39;); }
在您的CSS中设置翻译课程。
在parameters.yml
中将autoescape选项设置为false树枝: autoescape:false