* @copyright 2012-2013 Jurian Sluiman. * @license http://www.opensource.org/licenses/bsd-license.php BSD License * @link http://juriansluiman.nl */ namespace SlmLocale; use Laminas\EventManager\EventInterface; use Laminas\ModuleManager\Feature; use Laminas\Mvc\MvcEvent; use Laminas\Stdlib\ResponseInterface; use Locale; use SlmLocale\Locale\Detector; class Module implements Feature\ConfigProviderInterface, Feature\BootstrapListenerInterface { public function getConfig() { return include __DIR__ . '/../../config/module.config.php'; } public function onBootstrap(EventInterface $e) { $app = $e->getApplication(); $sm = $app->getServiceManager(); $detector = $sm->get(Detector::class); $result = $detector->detect($app->getRequest(), $app->getResponse()); if ($result instanceof ResponseInterface) { /** * When the detector returns a response, a strategy has updated the response * to reflect the found locale. * * To redirect the user to this new URI, we short-circuit the route event. There * is no option to short-circuit the bootstrap event, so we attach a listener to * the route and let the application finish the bootstrap first. * * The listener is attached at PHP_INT_MAX to return the response as early as * possible. */ $em = $app->getEventManager(); $em->attach(MvcEvent::EVENT_ROUTE, function ($e) use ($result) { return $result; }, PHP_INT_MAX); } else { Locale::setDefault($result); } } }