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)
我的解决方案:
我已经通过几个步骤实现了我想要的:
覆盖 Translator.php 并在 parameters.yml
中更改 translator.class
public 函数 trans($id, $parameters, $domain, $locale)
{
$return = parent::trans($id, $parameters, $domain, $locale);
return "".$return.'');
}
在您的 css 中设置翻译 class。
在 parameters.yml
中将自动转义选项设置为 false
树枝:
自动转义:假
我想添加一些 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)
我的解决方案:
我已经通过几个步骤实现了我想要的:
覆盖 Translator.php 并在 parameters.yml
中更改 translator.classpublic 函数 trans($id, $parameters, $domain, $locale) { $return = parent::trans($id, $parameters, $domain, $locale); return "".$return.''); }
在您的 css 中设置翻译 class。
在 parameters.yml
中将自动转义选项设置为 false树枝: 自动转义:假