Symfony:LoggingTranslator与Translator的区别

8

我想将我的翻译字符串注入到服务中,因此我在服务定义中使用了这个:

arguments: [@doctrine.orm.entity_manager, @translator]

我在构造函数中使用了这个:

public function __construct(\Doctrine\ORM\EntityManager $entityManager, \Symfony\Component\Translation\Translator $translator)

但是我遇到了这个错误:

.... __construct() must be an instance of Symfony\Component\Translation\Translator, instance of Symfony\Component\Translation\LoggingTranslator given...

这两者之间有什么区别?


请参考此文档 - falinsky
1
尝试注入此服务:translator.default - Matteo
谢谢。翻译引擎正常工作 :) - b85411
嗨 @b85411,我可以发表一个答案以便您关闭这个问题吗? - Matteo
2个回答

13
根据这篇新闻公告,从2.6版本开始,翻译组件被定义为服务,例如translator.default
因此,请更改您的服务定义:
arguments: [@doctrine.orm.entity_manager, @translator]

和,带有

arguments: [@doctrine.orm.entity_manager, @translator.default]

嗨@b85411,如果这个或任何答案解决了您的问题,请考虑通过点击复选标记接受它。这向更广泛的社区表明您已找到解决方案,并为回答者和您自己赢得了一些声誉。没有义务这样做。 - Matteo

8

Symfony 2.6引入了缺失翻译日志记录功能,因此“translator”服务别名被替换为某种代理到真正的翻译器类。

如其他答案所述(目前已被接受),真正的翻译器类现在位于“translator.default”服务上。但是,使用此服务而不是“translator”将禁用这个新的Symfony功能,因此您可能希望避免这种情况。

要解决您的问题并仍然可以访问新功能,请更改构造函数的代码以接受TranslatorInterface的任何实现:

public function __construct(\Doctrine\ORM\EntityManager $entityManager, \Symfony\Component\Translation\TranslatorInterface $translator)

1
这是更好的答案。我建议始终使用@translator(而不是.default变体),并根据需要启用/禁用日志记录。然后在服务中使用\Symfony\Component\Translation\TranslatorInterface进行类型提示。 - Rein Baarsma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接