微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 替换Symfony 3中的翻译服务

在我的Symfony 2.8项目中,我有一个扩展,为trans方法添加了一些额外的逻辑:

parameters:
    translator.class: MyBundle\Twig\TranslationExtension

这个类看起来像这样:

namespace MyBundle\Twig\TranslationExtension;

use Symfony\Bundle\FrameworkBundle\Translation\Translator as BaseTranslator;

class TranslationExtension extends BaseTranslator
{
    private $currentLocale;

    public function trans($id, array $parameters = array(), $domain = null, $locale = null)
    {
            $translation = parent::trans($id, $parameters, $domain, $locale);

            // Some extra logic here

            return $translation;
    }

    public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null)
    {
        return parent::transChoice($id, $number, $parameters, $domain, $locale);
    }
}

现在,我正在迁移到Symfony 3,其中不推荐使用这些类参数,但是如何通过覆盖翻译服务来实现这一点?

解决方法:

而不是扩展,最好装饰翻译服务.现在你覆盖了类名,它还将覆盖其他想要装饰服务的包.我看到你因为Twig而使它成为一个扩展,原来的Twig {{trans()}}过滤器也将使用装饰服务.

services:
  app.decorating_translator:
    class:     AppBundle\DecoratingTranslator
    decorates: translator
    arguments: ['@app.decorating_translator.inner'] # original translator
    public:    false

请参阅此处有关装饰的文档:http://symfony.com/doc/current/service_container/service_decoration.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐