не могу сделать переключатель на сайте, Определяю используемый браузером язык пользователя в файле index.php: PHP: //==>> определение языка пользователя preg_match('/^\w{2}/',$_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches); switch (strtolower($matches[0])){ case "ru": $accept_lang = "ru"; break; // если русский case "de": $accept_lang = "de"; break; // если немецкий case "en": case "uk": case "us": $accept_lang = "en"; break; // если английский case "ua": $accept_lang = "ua"; break; // если украинский case "cn": $accept_lang = "cn"; break; // китайский default: $accept_lang = "en"; break; // если нет совпадений, то по умолчанию, например, английский } Т. е. определяю язык пользователя, передаю в модели, в моделях с БД выдает текст необходимого языка, контроллером возвращаю в файл c расширением .tpl , текст нужного языка выводится, все нормально. Но как реализовать ручную смену языка на сайте не могу догнать как, подскажи плз. либо через URL, либо через сессии?
Я бы сделал как то так PHP: if(empty($_SESSION['custom_lang'])){ //тут определение языка из браузера } else { $accept_lang = $_SESSION['custom_lang']; }
В регулярке ошибка. "\" даже для одинарных кавычек является экранирующим символом, поэтому в итоге Ваше регулярное выражение выглядит так: /^w{2}/ Ставится два символа "\" PHP: '/^\\w{2}/'
никогда не ставил... вроде работало всегда и не ругалось.. почему? --- Добавлено --- даже тут такого не пишут https://php.ru/manual/function.preg-match.html может с каким то другим языком перепутали синтаксис?
У меня постоянно регулярки некорректно читались пока не докурил мануал. Но '\' - это точно экранирующий символ в php. https://php.ru/manual/language.types.string.html https://ru.stackoverflow.com/questi...-обратного-слеша-при-добавление-строки-в-базу Вот примеры ошибок: http://diman-novik-ru.livejournal.com/121243.html
ссылки где то сделать.. http://ваш_сайт/index.php?lang=ru а в коде Код (Text): if(isset($_GET['lang'])){ $_SESSION = $_GET['lang']; //а тут можно и редирект сделать сразу.. } но я бы еще проверял что в сессию записывается..
проверил, при смене языка на en приходит в сессию en, на ru приходит ru, при смене языка перебрасывает на главную страницу, т.к. прописан index.php?lang=ru, а если мне надо переключить язык и остаться на той же странице, это возможно сделать?
Код (Text): echo '<a href="//' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] . '&lang=ru">русский</a>'; как то так должно быть)) но надо проверить)
смотрите что на другие страницы приходит.. делайте var_dump($_GET); и смотрите что приходит и почему не записывается.. отладка скрипта это стандартное времяпровождение для программера)
Не вводите людей в заблуждение, здесь используется не слеш, а как раз выполняется экранирование подмаски \w
if(isset($_GET['lang'])){ $_SESSION = $_GET['lang']; $accept_lang = $_SESSION; } в футере в файле footer.tpl прописал кнопки переключения: HTML: <li> <a href="http://site:85/index.php?lang=ru">РУ</a> </li> <li> <a href="http://site:85/index.php?lang=en">ENG</a> </li> на странице http://site:85/index.php после переключения языка на английский(http://site:85/index.php?lang=en) выводит через var_dump($_GET); Код (Text): array(1) { ["lang"]=> string(2) "en" } но при переходе на другую страницу язык отпадает и в маршруте отображается через var_dump($_GET); только контроллер страницы.
Алекс, я прописал PHP: $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] проверил что приходит, приходит, приходит: Код (Text): site.local/?controller=information&id=100&lang=ru результат присваиваю в переменную, и передаю в шаблонизатор на страницу смены языка, там подставляю в href=" " в тег <а> Скажи, можно как нить сделать ислючение, чтобы $_SERVER['REQUEST_URI'] не попадал &lang=ru, а язык я уже добавлял сам.
А я бы в куку выбор языка записывал. Человек вернётся на сайт через некоторое время, и сайт откроется на нужном языке, а не на языке установленном по умолчанию.
Ну у меня сначала идет язык тот, который установлен в браузере пользователя, если он на сайте в ручную меняет на другой, то тогда подсовываю нужный язык. Вот только при выборе языка сейчас делаю так, чтобы он оставался на той же странице.
похожая тема https://php.ru/forum/threads/kak-menjat-jazyk-sajta-s-pomoschju-select.49439/#post-392857 --- Добавлено --- https://php.ru/forum/threads/ne-mogu-sobrat-kod-dlja-lokalizacii-sajta.51855/#post-414898