public function createService(ServiceLocatorInterface $serviceLocator)
 {
     $adapter = null;
     $locale = null;
     $config = $serviceLocator->has('Config') ? $serviceLocator->get('Config') : [];
     $config = isset($config['locale_manager']) ? $config['locale_manager'] : [];
     if ($serviceLocator->has('LocaleManager\\Adapter\\AdapterInterface')) {
         $adapter = $serviceLocator->get('LocaleManager\\Adapter\\AdapterInterface');
         if (!$adapter instanceof AdapterInterface) {
             throw new ServiceNotCreatedException(sprintf('LocaleManager requires that the %s service implement %s; received "%s"', 'LocaleManager\\Adapter\\AdapterInterface', 'LocaleManager\\Adapter\\AdapterInterface', is_object($adapter) ? get_class($adapter) : gettype($adapter)));
         }
     }
     $manager = new LocaleManager($adapter);
     // Set the current locale
     if (isset($config['locale'])) {
         $locale = $config['locale'];
     } elseif ($serviceLocator->has('Translator')) {
         $translator = $serviceLocator->get('Translator');
         if ($translator instanceof \Zend\Mvc\I18n\Translator) {
             $translator = $translator->getTranslator();
         }
         if (method_exists($translator, 'getLocale')) {
             $locale = $translator->getLocale();
         }
     }
     if ($locale === null) {
         $locale = \Locale::getDefault();
     }
     $manager->setLocale($locale);
     // Return the manager
     return $manager;
 }
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     $config = $serviceLocator->has('Config') ? $serviceLocator->get('Config') : array();
     $config = isset($config['locale_manager']) ? $config['locale_manager'] : array();
     $localeManager = new LocaleManager($config);
     $localeManager->setServiceManager($serviceLocator);
     if ($localeManager instanceof EventManagerAwareInterface) {
         $localeManager->setEventManager($serviceLocator->get('Application')->getEventManager());
     }
     if ($serviceLocator->has('Application')) {
         $serviceLocator->get('Application')->getEventManager()->attach(new LocaleManagerListener());
     }
     // --- Start Router Config ---
     $router = $serviceLocator->get('Router');
     if ($router instanceof LocaleManagerAwareInterface) {
         $router->setLocaleManager($localeManager);
         // TODO: Set the detection method for the router
     }
     if ($router instanceof TranslatorAwareInterface) {
         // Try setting a translator
         if (!$router->hasTranslator()) {
             // Inject the translator
             if ($serviceLocator->has('MvcTranslator')) {
                 $router->setTranslator($serviceLocator->get('MvcTranslator'));
             } elseif ($serviceLocator->has('Zend\\I18n\\Translator\\TranslatorInterface')) {
                 $router->setTranslator($serviceLocator->get('Zend\\I18n\\Translator\\TranslatorInterface'));
             } elseif ($serviceLocator->has('Translator')) {
                 $router->setTranslator($serviceLocator->get('Translator'));
             } else {
                 if (!extension_loaded('intl')) {
                     $router->setTranslator(new MvcTranslator(new DummyTranslator()));
                 } else {
                     // For BC purposes (pre-2.3.0), use the I18n Translator
                     $router->setTranslator(new MvcTranslator(new Translator()));
                 }
             }
         }
         // Set the router text domain
         $router->setTranslatorTextDomain('router');
     }
     // --- End Router Config ---
     // Return the instance
     return $localeManager;
 }
 /**
  * Returns current runtime locale.
  *
  * @return string
  */
 public function __invoke()
 {
     $locale = $this->localeManager->getLocale();
     $locale = str_replace('_', '-', $locale);
     return $locale;
 }
 /**
  * assemble(): defined by \Zend\Mvc\Router\RouteInterface interface.
  *
  * @see    \Zend\Mvc\Router\RouteInterface::assemble()
  * @param  array $params
  * @param  array $options
  * @return mixed
  * @throws Exception\InvalidArgumentException
  * @throws Exception\RuntimeException
  */
 public function assemble(array $params = array(), array $options = array())
 {
     if (!isset($options['name'])) {
         throw new Exception\InvalidArgumentException('Missing "name" option');
     }
     $names = explode('/', $options['name'], 2);
     $route = $this->routes->get($names[0]);
     if (!$route) {
         throw new Exception\RuntimeException(sprintf('Route with name "%s" not found', $names[0]));
     }
     if (isset($names[1])) {
         if (!$route instanceof TreeRouteStack) {
             //die("DEBUG: route is " . gettype($route));
             throw new Exception\RuntimeException(sprintf('Route with name "%s" does not have child routes', $names[0]));
         }
         $options['name'] = $names[1];
     } else {
         unset($options['name']);
     }
     // Translator options
     if ($this->hasTranslator() && $this->isTranslatorEnabled()) {
         $options['translator'] = isset($options['translator']) ? $options['translator'] : $this->getTranslator();
         $options['text_domain'] = isset($options['text_domain']) ? $options['text_domain'] : $this->getTranslatorTextDomain();
         $options['locale'] = isset($options['locale']) ? $options['locale'] : str_replace('-', '_', $this->localeManager->getLocale());
     }
     if (isset($options['only_return_path']) && $options['only_return_path']) {
         return $this->getBaseUrlWithLocale($options['locale']) . $route->assemble(array_merge($this->defaultParams, $params), $options);
     }
     if (!isset($options['uri'])) {
         $uri = new HttpUri();
         if (isset($options['force_canonical']) && $options['force_canonical']) {
             if ($this->requestUri === null) {
                 throw new Exception\RuntimeException('Request URI has not been set');
             }
             $uri->setScheme($this->requestUri->getScheme())->setHost($this->requestUri->getHost())->setPort($this->requestUri->getPort());
         }
         $options['uri'] = $uri;
     } else {
         $uri = $options['uri'];
     }
     $path = $this->getBaseUrlWithLocale($options['locale']) . $route->assemble(array_merge($this->defaultParams, $params), $options);
     if (isset($options['query'])) {
         $uri->setQuery($options['query']);
     }
     if (isset($options['fragment'])) {
         $uri->setFragment($options['fragment']);
     }
     if (isset($options['force_canonical']) && $options['force_canonical'] || $uri->getHost() !== null || $uri->getScheme() !== null) {
         if (($uri->getHost() === null || $uri->getScheme() === null) && $this->requestUri === null) {
             throw new Exception\RuntimeException('Request URI has not been set');
         }
         if ($uri->getHost() === null) {
             $uri->setHost($this->requestUri->getHost());
         }
         if ($uri->getScheme() === null) {
             $uri->setScheme($this->requestUri->getScheme());
         }
         return $uri->setPath($path)->normalize()->toString();
     } elseif (!$uri->isAbsolute() && $uri->isValidRelative()) {
         return $uri->setPath($path)->normalize()->toString();
     }
     return $path;
 }