/**
  * Returns an URL adapted to $locale
  *
  * @throws SupportedLocalesNotDefined
  * @throws UnsupportedLocaleException
  *
  * @param  string|boolean $locale Locale to adapt, false to remove locale
  * @param  string|false $url URL to adapt in the current language. If not passed, the current url would be taken.
  * @param  array $attributes Attributes to add to the route, if empty, the system would try to extract them from the url.
  *
  *
  * @return string|false                URL translated, False if url does not exist
  */
 public function getLocalizedURL($locale = null, $url = null, $attributes = array())
 {
     if ($locale === null) {
         $locale = $this->getCurrentLocale();
     }
     if (!$this->checkLocaleInSupportedLocales($locale)) {
         throw new UnsupportedLocaleException('Locale \'' . $locale . '\' is not in the list of supported locales.');
     }
     if (empty($attributes)) {
         $attributes = $this->extractAttributes($url);
     }
     if (empty($url)) {
         if (!empty($this->routeName)) {
             return $this->getURLFromRouteNameTranslated($locale, $this->routeName, $attributes);
         }
         $url = $this->request->fullUrl();
     }
     if ($locale && ($translatedRoute = $this->findTranslatedRouteByUrl($url, $attributes, $this->currentLocale))) {
         return $this->getURLFromRouteNameTranslated($locale, $translatedRoute, $attributes);
     }
     $base_path = $this->request->getBaseUrl();
     $parsed_url = parse_url($url);
     $url_locale = $this->getDefaultLocale();
     if (!$parsed_url || empty($parsed_url['path'])) {
         $path = $parsed_url['path'] = "";
     } else {
         $parsed_url['path'] = str_replace($base_path, '', '/' . ltrim($parsed_url['path'], '/'));
         $path = $parsed_url['path'];
         foreach ($this->getSupportedLocales() as $localeCode => $lang) {
             $parsed_url['path'] = preg_replace('%^/?' . $localeCode . '/%', '$1', $parsed_url['path']);
             if ($parsed_url['path'] !== $path) {
                 $url_locale = $localeCode;
                 break;
             }
             $parsed_url['path'] = preg_replace('%^/?' . $localeCode . '$%', '$1', $parsed_url['path']);
             if ($parsed_url['path'] !== $path) {
                 $url_locale = $localeCode;
                 break;
             }
         }
     }
     $parsed_url['path'] = ltrim($parsed_url['path'], '/');
     if ($translatedRoute = $this->findTranslatedRouteByPath($parsed_url['path'], $url_locale)) {
         return $this->getURLFromRouteNameTranslated($locale, $translatedRoute, $attributes);
     }
     if (!empty($locale) && ($locale != $this->defaultLocale || !$this->hideDefaultLocaleInURL())) {
         $parsed_url['path'] = $locale . '/' . ltrim($parsed_url['path'], '/');
     }
     $parsed_url['path'] = ltrim(ltrim($base_path, '/') . '/' . $parsed_url['path'], '/');
     //Make sure that the pass path is returned with a leading slash only if it come in with one.
     if (starts_with($path, '/') === true) {
         $parsed_url['path'] = '/' . $parsed_url['path'];
     }
     $parsed_url['path'] = rtrim($parsed_url['path'], '/');
     $url = $this->unparseUrl($parsed_url);
     if ($this->checkUrl($url)) {
         return $url;
     }
     return $this->createUrlFromUri($url);
 }