У меня была аналогичная проблема, и понял это, попробуйте:
$e->getRouter()->setDefaultParam('lang', 'de_DE');
Я запускающего это на MvcEvent :: EVENT_DISPATCH (см обновление примечание ниже) с использованием слушателя, но onBootstrap в Module.php
также должен работать.
Update:
Хорошо, теперь я вижу, что MvcEvent::EVENT_DISPATCH
является слишком поздно для применения параметров по умолчанию к маршрутизатору. Особенно, когда вас интересует не только передача языка по маршруту, но и наличие переводимых маршрутов (в сочетании с 'router_class'=>'Zend\Mvc\Router\Http\TranslatorAwareTreeRouteStack'
).
Так оно и должно быть на MvcEvent :: EVENT_ROUTE:
// applying a default language param to route
$e->getRouter()->setDefaultParam('lang', 'de_DE');
// Now detect the requested language or retrieve
// from matched route
// $detectedLocale =...
// ...
// Retrieve the translator
$sm->get('translator');
// Apply detected locale to the translator
$translator->setLocale($detectedLocale);
// and now this apply the translator to the router
// for translatable routes
$e->getRouter()->setTranslator($translator);
// but don't forget about
// 'router_class'=>'Zend\Mvc\Router\Http\TranslatorAwareTreeRouteStack'
// for translatable routes
Я вижу, как люди говорят, что Вы должны сделать это в onBootstrap()
, но IMVHO onBootstrap
СЛИШКОМ РАНО для извлечения matched route
, который необходим для обнаружения язык/язык, переданный клиентом в параметре route/url.
Говоря «обнаружение локаль» Я определенно не думать о любые грязные операции со строками на строку URL/запроса, я думаю о чистой getParam()
на согласованный маршрут.
http://framework.zend.com/manual/2.2/en/modules/zend.mvc.mvc-event.html