Symfony2翻译添加Html

时间:2015-07-17 14:06:08

标签: php html symfony translation translate

我想在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代码而是作为字符串插入。有没有办法实现我想要的?也许它是在但是在其他方式?

3 个答案:

答案 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)

我的解决方案:

我已经通过几个步骤实现了我想要的目标:

  1. 覆盖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;); }

  2. 在您的CSS中设置翻译课程。

  3. 在parameters.yml

    中将autoescape选项设置为false

    树枝:     autoescape:false

相关问题