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