Как получить переводчик внутри плагина контроллера на ZF3

Я хочу создать плагин для использования zend-i18n/translate на контроллере. На zf2 у меня есть плагин контроллера, который делает это для меня, но на zf3 я не мог заставить это работать. Как я могу использовать zend-i18n внутри контроллера или через плагин контроллера с zf3?

========== Я только что нашел то, что мне нужно здесь, на zf doc: https://docs.zendframework.com/zend-mvc-i18n/services/

если вы уже настроили переводчик как фабричный на вашем module.config.php, вы можете добавить его в свой плагин контроллера.

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 для получения более подробной информации о диспетчере плагинов контроллера.

Для перевода в модель и контроллер, я сделал это в моем 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');
Другие вопросы по тегам