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

How to get translator inside controller plugin on ZF3

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

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

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

您几乎可以执行与 相同的操作。

'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 documentation or this Zend Framework blog 以获取有关控制器插件管理器的更多详细信息。

为了在模型和控制器中进行翻译,我在 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');