Mcamara\LaravelLocalization\LaravelLocalization::getLocalizedURL PHP Method

getLocalizedURL() public method

Returns an URL adapted to $locale
public getLocalizedURL ( string | boolean $locale = null, string | false $url = null, array $attributes = [] ) : string | false
$locale string | boolean Locale to adapt, false to remove locale
$url string | false URL to adapt in the current language. If not passed, the current url would be taken.
$attributes array 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, $locale);
        }
        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);
    }

Usage Example

Ejemplo n.º 1
0
 /**
  * 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
  * @static 
  */
 public static function getLocalizedURL($locale = null, $url = null, $attributes = array())
 {
     return \Mcamara\LaravelLocalization\LaravelLocalization::getLocalizedURL($locale, $url, $attributes);
 }