public function detect(LocaleEvent $event) { $request = $event->getRequest(); $cookieName = $this->getCookieName(); if (!$this->isHttpRequest($request)) { return; } if (!$event->hasSupported()) { return; } $cookie = $request->getCookie(); if (!$cookie || !$cookie->offsetExists($cookieName)) { return; } $locale = $cookie->offsetGet($cookieName); $supported = $event->getSupported(); if (!in_array($locale, $supported)) { return; } return $locale; }
public function detect(LocaleEvent $event) { $request = $event->getRequest(); if (!$this->isHttpRequest($request)) { return; } if ($lookup = $event->hasSupported()) { $supported = $event->getSupported(); } $headers = $request->getHeaders(); if ($headers->has('Accept-Language')) { $locales = $headers->get('Accept-Language')->getPrioritized(); foreach ($locales as $locale) { $locale = $locale->getLanguage(); if (!$lookup) { return $locale; } if (Locale::lookup($supported, $locale)) { return $locale; } } } }
/** * {@inheritdoc } */ public function detect(LocaleEvent $event) { $request = $event->getRequest(); if (!$this->isHttpRequest($request)) { return; } if (!$event->hasSupported()) { return; } $homepage = $_SERVER['REQUEST_URI']; $locale = $request->getQuery($this->getQueryKey()); if ($locale === null) { if (strstr($homepage, '/fr/')) { return 'fr'; } if (strstr($homepage, '/en/')) { return 'en'; } if (strstr($homepage, '/es/')) { return 'es'; } if (strstr($homepage, '/it/')) { return 'it'; } if (strstr($homepage, '/nl/')) { return 'nl'; } if (strstr($homepage, '/pt/')) { return 'pt'; } return; } if (!in_array($locale, $event->getSupported())) { return; } return $locale; }
public function detect(LocaleEvent $event) { $request = $event->getRequest(); if (!$this->isHttpRequest($request)) { return; } if (!$event->hasSupported()) { return; } $domain = $this->getDomain(); if (!null === $domain) { throw new Exception\InvalidArgumentException('The strategy must be configured with a domain option'); } if (strpos($domain, self::LOCALE_KEY) === false) { throw new Exception\InvalidArgumentException(sprintf('The domain %s must contain a locale key part "%s"', $domain, self::LOCALE_KEY)); } $host = $request->getUri()->getHost(); $pattern = str_replace(self::LOCALE_KEY, '([a-zA-Z-_.]+)', $domain); $pattern = sprintf('@%s@', $pattern); $result = preg_match($pattern, $host, $matches); if (!$result) { return; } $locale = $matches[1]; $aliases = $this->getAliases(); if (null !== $aliases && array_key_exists($locale, $aliases)) { $locale = $aliases[$locale]; } if (!in_array($locale, $event->getSupported())) { return; } return $locale; }
public function found(LocaleEvent $event) { $request = $event->getRequest(); $assetManager = $this->getServiceLocator()->getServiceLocator()->get('AssetManager\\Service\\AssetManager'); $request = $event->getRequest(); if ($assetManager->resolvesToAsset($request)) { return; } if (!$this->isHttpRequest($request)) { return; } $locale = $event->getLocale(); if (null === $locale) { return; } if (!$this->redirectToCanonical() && null !== $this->getAliases()) { $alias = $this->getAliasForLocale($locale); if (null !== $alias) { $locale = $alias; } } $base = $this->getBasePath(); $found = $this->getFirstSegmentInPath($request->getUri(), $base); $this->getRouter()->setBaseUrl($base . '/' . $locale); if ($locale === $found) { return; } if (!$this->redirectWhenFound()) { return; } $uri = $request->getUri(); $path = $uri->getPath(); if (!$found || $event->hasSupported() && !in_array($found, $event->getSupported())) { $path = $base . '/' . $locale . substr($path, strlen($base)); } else { $path = str_replace($found, $locale, $path); } $uri->setPath($path); $response = $event->getResponse(); $response->setStatusCode(self::REDIRECT_STATUS_CODE); $response->getHeaders()->addHeaderLine('Location', $uri->toString()); return $response; }
public function found(LocaleEvent $event) { $request = $event->getRequest(); if (!$this->isHttpRequest($request)) { return; } $locale = $event->getLocale(); if (null === $locale) { return; } if (!$this->redirectToCanonical() && null !== $this->getAliases()) { $alias = $this->getAliasForLocale($locale); if (null !== $alias) { $locale = $alias; } } $base = $this->getBasePath(); $found = $this->getFirstSegmentInPath($request->getUri(), $base); $this->getRouter()->setBaseUrl($base . '/' . $locale); if ($locale === $found) { return; } if (!$this->redirectWhenFound()) { return; } $uri = $request->getUri(); $path = $uri->getPath(); if (!$found || $event->hasSupported() && !in_array($found, $event->getSupported())) { $path = '/' . $locale . $path; } else { $path = preg_filter('/^\\/(.+?)(\\/.+)/', '/' . $locale . '$2', $path); } $uri->setPath($path); $response = $event->getResponse(); $response->setStatusCode(self::REDIRECT_STATUS_CODE); $response->getHeaders()->addHeaderLine('Location', $uri->toString()); return $response; }
/** * {@inheritdoc } */ public function detect(LocaleEvent $event) { $request = $event->getRequest(); if (!$this->isHttpRequest($request)) { return; } if (!$event->hasSupported()) { return; } $locale = $request->getQuery($this->getQueryKey()); if ($locale === null) { return; } if (!in_array($locale, $event->getSupported())) { return; } return $locale; }