Zend Framework 2 Установить TextDomain в onBootstrap

Я успешно следовал инструкциям этой ссылки, теперь моя сеть мультиязычна, и мне не требуется помещать "locale" в вызовы "traslate()". Но я должен ставить TextDomain каждый раз, когда я его называю.

    $this->traslate("Hello", __NAMESPACE__) //where __NAMESPACE__ is the text domain.

Я хотел бы установить TextDomain в методе onBootstrap вместо того, чтобы помещать его в каждый вызов помощника "traslate()". Я пытался с методом set TextDomain, но он не существует. Кто-нибудь знает, как это сделать?

Код onBootStrap выглядит следующим образом:

   .....//Code for define $locale.
   $sm = $e->getApplication()->getServiceManager();
   $translator = $sm->get('translator');
   $translator->setLocale($locale);
   $traslator->SetTextDomain($textdomain);   //This line not work!!!!!

2 ответа

Решение

Окей. Мы продвинулись на один шаг.

Первое решение работает нормально (решение для просмотра), теперь моя веб-страница обменивается текстами только с использованием параметров этого помощника, а именно Locale и TextDomain, определенных в конфигурации:

$ This-> перевести ('Hello');

Но второе решение не работает. Я не понимаю, потому что один и тот же плагин принимается в представлении, а не в onBootstrap, когда имя совпадает.

Я переписываю мой код onBootstrap ниже:

    $translator = $e->getApplication()->getServiceManager()->get('translator');
    $pm = $translator->getPluginManager();   //until here works ok.
    $pm->get('translate');   //this throws an error message how if 'translate' not found.

Не видел это правильно с первого раза. Согласно презентации DASPRIDS о ZF2 I18N, правильная функция для вызова:

$this->plugin('translate')->setTranslatorTextDomain('module-b');

Хотя, если я вижу это правильно, это изнутри Scripts. Однако, получая переводчик из ServiceManager - я не проверял это - но попробуйте следующее:

$translator->getPluginManager()->get('translate')->setTranslatorTextDomain('foo');