private function routeRegexpTranslatedText(Route $route, string $value = null, array $data = null) : string
    {
        if (!$value) {
            throw new \InvalidArgumentException(
                sprintf("Missing router var on route '%s'", $route->getName())
            );
        }

        $variable = null;
        $trans = [];

        if (strpos($value, '<') !== false && strpos($value, '>')) {
            $variable = substr($value, 1, strpos($value, '>') - 1);
            $keys = explode('|', substr($value, strpos($value, '>') + 1));
        } else {
            $keys = [$value];
        }

        foreach ($keys as $key) {
            if (!isset($this->uris[$key])) {
                throw new \InvalidArgumentException(
                    sprintf("Missing translations for var '%s' on route '%s'", $key, $route->getName())
                );
            }

            foreach ($this->uris[$key] as $locale => $current) {
                $trans[$locale][$key] = $current;
                $trans['*'][] = $current;
            }
        }

        if (!is_null($data) && sizeof($keys) > 1 && !isset($data[$variable])) {
            throw new \InvalidArgumentException(
                sprintf("Missing datas '%s' on route '%s'", $value, $route->getName())
            );
        }

        if (!is_null($data) && sizeof($keys) == 1) {
            $dest = $trans[self::locale()][$value];
        } elseif (!is_null($data) && sizeof($keys) > 1) {
            $dest = $data[$variable];
        } else {
            $dest = ($variable ? '(?<' . $variable . '>' : '(?:') . implode('|', $trans['*']) . ')';
        }

        return $dest;
    }