#php
#php
Вопрос:
У меня многоязычная система, и мне нужно удалить короткий префикс локали по умолчанию из URL-адреса. Мне нужно проверить, получает ли сессия префикс :
if(Session::get('prefix')) {
$url = urldecode(http_build_query($_GET, '', 'amp;'));
} else {
$url = ''; //This Line
}
echo $url;
//output is: url=fa/account/login
Теперь в действии ($url) Я вижу этот вывод:
en/
en/account/login
en/account/dashboard
Теперь мне нужно удалить en
из пути URL, если не обнаружен префикс сеанса, подобный этому.
account/login
account/dashboard
какой метод лучше всего использовать?!
Комментарии:
1. Вам нужно добавить код языка в сеанс и использовать
$_SESSION['language_code']
непосредственно в кодах ссылок2. @AlivetoDie: Конечно, но мне нужен этот URL-путь для обратного перенаправления на this.ie : для языка по умолчанию без префикса и другого языка с префиксом. примечание: я удаляю язык по умолчанию из URL.
3. Вы имеете в виду вот так? 3v4l.org/CGBVh
4. @Thefourthbird: у меня есть это: url= fa/ account /login
Ответ №1:
Вы могли бы создать массив всех ваших языков. Затем вы могли бы использовать explode и использовать косую черту в качестве разделителя.
Проверьте, есть ли первый элемент в массиве с языками. Если это так, удалите первый элемент из, $parts
используя, например, array_shift, а затем снова соберите строку с помощью implode.
$langs = ["en", "fa"];
$string = "fa/account/login";
$parts = explode('/', $string);
if (in_array($parts[0], $langs)) {
array_shift($parts);
}
echo implode('/', $parts) . PHP_EOL; //account/login
Комментарии:
1. Этот способ верен и работает. Но у меня проблема, если мой url =
en/news/list?page=2amp;sort=desc
таким образом не работает.2. @harmonytalk Какой результат вы получаете, который у вас не работает? Вы тестировали это так? 3v4l.org/DJEVd
Ответ №2:
Вы можете определить массив в config/app.php со всеми языками, которые реализует ваше приложение. Например, вы можете добавить эту строку в свой config/app.php
$languages = ['en','fa'];
и теперь вы можете изменить свой код следующим образом :
$url = urldecode(http_build_query($_GET, '', 'amp;'));
if(Session::get('prefix') == null)
$url = preg_replace("/^".implode(Config::get("app.languages"),"|")."//",'',$url);