如何在ZF3上的控制器插件中获取翻译器

时间:2016-09-01 13:38:23

标签: zend-framework3 zend-controller-plugin

我想创建一个插件,在控制器上使用zend-i18n / translate。在zf2上我有一个控制器插件,它为我做这个,但在zf3我无法让这个工作。如何在控制器中使用zend-i18n或使用zf3的控制器插件?

========== 我刚刚在zf doc上找到了我需要的东西:https://docs.zendframework.com/zend-mvc-i18n/services/#mvctranslator-and-translatorfactory

如果您已经在module.config.php上将转换器配置为工厂,则可以在控制器插件上注入。

2 个答案:

答案 0 :(得分:2)

您几乎可以像the answer that @hkulekci referred to in his comment一样执行此操作。

'service_manager' => [
    'factories' => [
        \Zend\I18n\Translator\TranslatorInterface::class => \Zend\I18n\Translator\TranslatorServiceFactory::class,
    ]
]

'controller_plugins' => [
    'invokables' => [
        'translate' => \Zend\I18n\View\Helper\Translate::class
    ]
]

之后,您可以像控制器操作方法一样获取翻译插件,如下所示:

public someAction(){
    $translator = $this->translate;
}

检查Zend Framework documentationthis Zend Framework blog以获取有关控制器插件管理器的更多详细信息。

答案 1 :(得分:1)

对于模型和控制器中的翻译,我在module.config.php中执行了此操作

'service_manager' => [
    'factories' => [
        \Zend\I18n\Translator\Translator::class => \Zend\I18n\Translator\TranslatorServiceFactory::class,
    ],
],

然后从我的serverContainer初始化的控制器或模型中执行:

$this->myVar = $serviceContainer->get(\Zend\I18n\Translator\Translator::class);

然后我可以通过

来访问它
$this->myVar->translate('lorem ipsum');