Symfony2 翻译添加 Html

Symfony2 Translation Add Html

我想添加一些 HTML 到 Symfony 2 翻译。这样我就可以知道我的应用程序中哪些短语被翻译了,哪些没有。 我在 "Symfony\Component\Translation\Translator.php" 函数 "trans" 中找到了。现在我想在函数 return 中添加一些东西,例如 "
":

/**
 * {@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);
}

问题是,当我 运行 我的应用程序时,我得到例如 "Tag< / b r>" (我添加了空格,因为在正常情况下它不会显示在这里。HTML不会将其解释为 HTML 代码,而是解释为字符串。有什么方法可以实现我想要的吗?也许是,但不是这样吗?

发生这种情况是因为您激活了 Twig Escaper 扩展程序。该扩展为 Twig 添加了自动输出转义,它定义了 autoescape 标签和 raw 过滤器。

所以我认为你得到的最佳选择是定义一个新的 twig 扩展,让你翻译你的 html 字符串,而不必每次都重复 myvar|raw

要了解如何创建新的 Twig 扩展,请查看文档 here

在为 JS 转义时使用相同的扩展名,应该不需要使用任何其他东西,尤其是在您的 PHP 控制器中。那是因为转义是在 Twig 级别完成的。请记住将新的 Twig 过滤器声明为安全的,以避免再次自动转义:

$filter = new Twig_SimpleFilter('nl2br', 'nl2br', array('is_safe' => array('html')));

如果您需要对请求的数据进行一些额外的处理,以便您可以跟踪请求的字符串和不请求的字符串,那么只需声明一个新服务作为 Symfony 翻译服务的代理。您的 Twig 扩展可以使用相同的服务。这样您就可以将所有请求集中到一个服务中。

这里有一些对您有用的链接:

我建议你在翻译中使用 Markdown。
然后您可以使用 Markdown 解析器解析翻译后的消息。

Twig 中的示例:'my.message'|trans|markdown(我想你有一个 Markdown 过滤器,有 KnpMarkdownBundle

我的解决方案:

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

  1. 覆盖 Translator.php 并在 parameters.yml

    中更改 translator.class

    public 函数 trans($id, $parameters, $domain, $locale) { $return = parent::trans($id, $parameters, $domain, $locale); return "".$return.''); }

  2. 在您的 css 中设置翻译 class。

  3. 在 parameters.yml

    中将自动转义选项设置为 false

    树枝: 自动转义:假