/** * {@inheritdoc} */ public function detect(Event $event) { $request = $event->getRequest(); if (!$this->isHttpRequest($request) || !$event->hasLocales()) { return; } $locale = $request->getQuery($this->getQueryKey()); if ($locale === null || !$event->hasLocale($locale)) { return; } return $locale; }
/** * @param Event $event * @return void */ public function found(Event $event) { $locale = $event->getLocale(); $request = $event->getRequest(); $cookieName = $this->getCookieName(); if (!$this->isHttpRequest($request)) { return; } $cookie = $request->getCookie(); // Omit Set-Cookie header when cookie is present if ($cookie instanceof Cookie && $cookie->offsetExists($cookieName) && $locale === $cookie->offsetGet($cookieName)) { return; } $path = '/'; if (method_exists($request, 'getBasePath')) { $path = rtrim($request->getBasePath(), '/') . '/'; } $response = $event->getResponse(); $setCookie = new SetCookie($cookieName, $locale, null, $path); $response->getHeaders()->addHeader($setCookie); }
/** * {@inheritDoc} */ public function detect(Event $event) { $request = $event->getRequest(); if (!$this->isHttpRequest($request)) { return; } $lookup = $event->hasLocales(); if ($lookup) { $locales = $event->getLocales(); } $headers = $request->getHeaders(); if ($headers->has('Accept-Language')) { foreach ($headers->get('Accept-Language')->getPrioritized() as $locale) { $locale = $locale->getLanguage(); if (!$lookup) { return $locale; } if (\Locale::lookup($locales, $locale)) { return $locale; } } } }
/** * {@inheritDoc} */ public function found(Event $event) { $request = $event->getRequest(); if (!$this->isHttpRequest($request) || !$event->hasLocales()) { return; } $locale = $event->getLocale(); if (null === $locale) { return; } // By default, use the alias to redirect to if (!$this->redirectToCanonical()) { $locale = $this->getAliasForLocale($locale); } $host = str_replace(self::LOCALE_KEY, $locale, $this->getDomain()); $uri = $request->getUri(); if ($host === $uri->getHost()) { return; } $uri->setHost($host); $response = $event->getResponse(); $response->setStatusCode(self::REDIRECT_STATUS_CODE); $response->getHeaders()->addHeaderLine('Location', $uri->toString()); return $response; }
/** * {@inheritDoc} */ public function found(Event $event) { $request = $event->getRequest(); if (!$this->isHttpRequest($request)) { return; } $locale = $event->getLocale(); if (null === $locale) { return; } if (!$this->redirectToCanonical() && $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 || !$this->redirectWhenFound()) { return; } $uri = $request->getUri(); $path = $uri->getPath(); if (!$found || $event->hasLocales() && !$event->hasLocale($found)) { $path = '/' . $locale . $path; } 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; }