Zend framework2 如何在zend framework 2中的控制器中使用translate helper

Zend framework2 如何在zend framework 2中的控制器中使用translate helper,zend-framework2,zend-translate,Zend Framework2,Zend Translate,是否有任何可能的方法来转换控制器中的字符串而不是视图中的字符串 现在,在我的控制器中,如果我传递如下字符串: public function indexAction() { return array('message' => 'example message'); } 它将被翻译成index.phtml <?php print $this->translate($message);?> 在控制器中 提前感谢您的帮助要在控制器中使用view helper,您可以

是否有任何可能的方法来转换控制器中的字符串而不是视图中的字符串

现在,在我的控制器中,如果我传递如下字符串:

public function indexAction() {
    return array('message' => 'example message');
}
它将被翻译成index.phtml

<?php print $this->translate($message);?>
在控制器中


提前感谢您的帮助

要在控制器中使用view helper,您可以使用“getServiceLocator”

$helper = $this->getServiceLocator()->get('ViewHelperManager')->get('helperName');
或者,您可以使用php getText函数uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。例如:

array('message' => _('my custom message'));
根据您的代码,您可以像这样直接使用helper

$translate = $this->getServiceLocator()->get('ViewHelperManager')->get('translate');

array('message' => $translate('my custom message'));

您不应该使用视图的插件管理器来访问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('foobarbaz')
来翻译字符串。

为此,我使用了一个简单的插件。然后在控制器中,您可以执行$this->translate(“示例消息”)


两种方法都有效……:)应该首选哪种方法?我更喜欢gettext方法,因为它需要更少的努力:)谢谢:)您能提到在哪里使用第一块代码(请更具体地说,在哪个文件/函数中)?在我的module.php文件中,在函数“getServiceConfig()”中,它只是返回array('factories'=>***)@Sanju,这是控制器的配置。您可以将其放在module.config.php中,或者另一种方法是跳过
controllers
键,从
工厂开始,直接将其放在
getControllerConfig()
类中的
getControllerConfig()方法中。不工作吗?传递给MyModule\Controller\MyController::\uu construct()的参数1必须是Zend\I18n\Translator\Translator的实例,未给出任何实例,@oskar请参阅我的其他注释。请开始一个新问题。我还想翻译作为表单/元素属性(title,alt)等传递的字符串。“自动翻译”仅在zf2中的表单元素标签上启用:(因此我必须在表单类中翻译这些字符串。现在我在表单构造中传递translator helper,猜测不是一个好方法。。。
public function fooAction()
{
  $translator = $this->getServiceManager()->get('translator');
}
class Translate extends AbstractPlugin {

    private $translator;

    public function __construct(PluginManager $pm) {
        $this->translator = $pm->getServiceLocator()->get('Translator');        
    }

    public function __invoke($message, $textDomain = 'default', $locale = null) {
        return $this->translator->translate($message, $textDomain, $locale);
    }

}