您不应该使用视图的插件管理器来访问翻译助手。抓住我已经解释过的翻译这里。
该帖子的副本/粘贴:
翻译是通过Translator
. 翻译器是一个对象,例如注入到视图助手中,因此如果您调用该视图助手,它会使用翻译器来翻译您的字符串。对于这个答案,我假设您已将翻译器配置为与骨架应用程序相同。
最好的方法是使用工厂将其作为依赖项注入到您的控制器中。控制器配置:
'controllers' => array(
'factories' => array(
'my-controller' => function($sm) {
$translator = $sm->getServiceLocator()->get('translator');
$controller = new MyModule\Controller\FooController($translator);
}
)
)
和控制器本身:
namespace MyModule;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\I18n\Translator\Translator;
class FooController extends AbstractActionController
{
protected $translator;
public function __construct(Translator $translator)
{
$this->translator = $translator;
}
}
另一种方法是在您的操作中从服务管理器中拉出翻译器,但这不太灵活、可测试性较差且难以维护:
public function fooAction()
{
$translator = $this->getServiceManager()->get('translator');
}
在这两种情况下,您都可以使用$translator->translate('foo bar baz')
来翻译您的字符串。