Как использовать, переводят помощника в диспетчерах в структуре зенда 2

Там какой-либо возможный путь состоит в том, чтобы перевести последовательности в диспетчерах вместо представления?

Прямо сейчас, в моих диспетчерах, если я передаю последовательности как:

public function indexAction() {
    return array('message' => 'example message');
}

Это будет переведено в index.phtml

<?php print $this->translate($message);?>

Это работает хорошо, но poeditor неспособный к строкам поиска от файлов диспетчера

Угадайте, что было бы здорово, если я могу использовать что-то как:

public function indexAction() {
    return array('message' => $view->translate('example message'));
}

в диспетчерах

Заранее спасибо за помощь

4
добавлено
Просмотры: 2
nl ja de
Также я хотел бы перевести последовательности, переданные как признаки формы/элемента ( название , высокий звук ) и т.д. ' Автомобиль translation' только позволен на этикетке элемента формы в zf2: (Таким образом, я должен перевести эти последовательности в классе формы. Прямо сейчас I' m мимолетный помощник переводчика в конструкции формы, предположение не хороший путь...
добавлено автор Sanju, источник

3 ответы

Чтобы использовать помощника представления в диспетчере, можно использовать 'getServiceLocator'

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

Любой можно использовать функцию PHP getText ___ ('мое таможенное сообщение') и добавить "_" как исходное ключевое слово в poedit (в свойствах каталога), таким образом, poedit будет строки фильтра от диспетчера. например:

array('message' => _('my custom message'));

И согласно вашему коду, можно использовать помощника непосредственно как это

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

array('message' => $translate('my custom message'));
22
добавлено
Я предпочитаю gettext метод начиная с потребности меньше усилия:)
добавлено автор webcoder, источник
Оба метода работают...:), Какой метод должен быть предпочтен?
добавлено автор Sanju, источник

Вы не должны использовать вставного менеджера представления, чтобы добраться до помощника переводчика. Схватите переводчика как Я уже объяснил здесь.

Скопировать/вставить той почты:

Перевод сделан через Переводчик . Переводчик - объект и введенный, например, в помощнике представления, поэтому если вы вызываете того помощника представления, он использует переводчика, чтобы перевести ваши последовательности. Для этого ответа я предполагаю, что вы формировали переводчика все равно как скелетное применение.

Лучший способ состоит в том, чтобы использовать фабрику, чтобы ввести это как зависимость в вашего диспетчера. Конфигурация диспетчера:

'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');
}

In both cases you can use $translator->translate('foo bar baz') to translate your strings.

4
добавлено
@Sanju это - конфигурация диспетчеров. Можно поместить это в module.config.php, или альтернатива - вы пропуск диспетчеры ключ, и вы начинаете с фабрики и помещаете это непосредственно в getControllerConfig() метод в вашем MyModule\Module класс.
добавлено автор Jurian Sluiman, источник
@oskar видят мой другой комментарий. Пожалуйста, начните новый вопрос.
добавлено автор Jurian Sluiman, источник
Не работа? Аргумент 1 прошел к MyModule\Controller\MyController:: __ конструкция() должна быть случаем Zend\I18n\Translator\Translator, ни одного данного,
добавлено автор Oskar, источник
Спасибо:) Можно ли, пожалуйста, упомянуть, где использовать первый блок кода (в который файл/функция, более конкретный, пожалуйста)? В моем module.php файле, в функции ' getServiceConfig() ' it' s, просто возвратив множество (' factories' => ***)
добавлено автор Sanju, источник

I use for that purpose a simple plugin. Then in controller you can do $this->translate('example message');

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);
    }

}
3
добавлено