我有兩個模塊 - 應用程序和StickyNotes。我需要在所有頁面上使用翻譯。ZF2翻譯
我的操作:
1)鑑於:<?=$this->translate('Home');?>
2)在應用程序\ Module.php:
public function onBootstrap(MvcEvent $e)
{
$translator = $e->getApplication()->getServiceManager()->get('translator');
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
$app = $e->getParam('application');
$app->getEventManager()->attach('render', array($this, 'setLayoutTitle'));
$translator->setLocale('ru_RU');
echo $translator->getLocale(); //ru_RU
}
3)在StickyNotes \ Module.php:
public function onBootstrap(MvcEvent $e)
{
$translator = $e->getApplication()->getServiceManager()->get('translator');
$translator->setLocale('ru_RU');
echo $translator->getLocale(); //ru_RU
}
4)應用程序\ .. \ module.config.php:
'service_manager' => array(
'factories' => array(
'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
),
),
'aliases' => array(
'translator' => 'MvcTranslator',
),
'translator' => array(
'locale' => 'en_US',
'translation_file_patterns' => array(
array(
'type' => 'gettext',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.mo',
),
),
),
5)StickyNotes \ .. \ module.config.php相同:
'service_manager' => array(
'factories' => array(
'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
),
),
'aliases' => array(
'translator' => 'MvcTranslator',
),
'translator' => array(
'locale' => 'en_US',
'translation_file_patterns' => array(
array(
'type' => 'gettext',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.mo',
),
),
),
,如果我嘗試$translator->getLocale();
輸出 'ru_RU',但翻譯不`噸的工作。
此外,如果我手動將'locale' => 'en_US',
更改爲'locale' => 'ru_RU',
翻譯工作正常。感謝您的答案!
你嘗試刪除 '區域'=> 'EN_US' 在module.config.php? – Oyeme
不知道它是否相關,但你的別名數組應該在'service_manager'數組中 – Crisp
如果我刪除'locale',我有這個異常'致命錯誤:未捕獲異常'Zend \ I18n \ Exception \ ExtensionNotLoadedException'帶有消息'Zend \ I18n \ Translator組件需要intl PHP擴展'。關於'別名' - 如果我添加'service_manager',顯示錯誤 - 別名已包括在內。 – Walllter