4

我想创建一个插件来在控制器上使用 zend-i18n/translate。在 zf2 上,我有一个控制器插件可以为我执行此操作,但在 zf3 上我无法让它工作。如何在控制器内部或通过带有 zf3 的控制器插件使用 zend-i18n?

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

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

4

2 回答 2

2

您几乎可以像@hkulekci 在他的评论中提到的答案那样做

'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 文档此 Zend Framework 博客

于 2016-12-19T13:16:02.367 回答
2

为了翻译模型和控制器,我在我的 module.config.php

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

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

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

然后我可以通过这样做来访问它

$this->myVar->translate('lorem ipsum');
于 2018-05-10T14:57:59.747 回答