Всем, доброго дня Подскажите пожалуйста рабочий пример, для "Определения языка браузера и последующий редирект на русскоязычную версию сайта для русской версия браузера, английский язык во всех других случаях", Сам перечитал тону мануалов, но рабочей версии не нашёл. Например, в режиме инкогнито google chrome на MacOS всегда показывает английский язык, а Safari русский Вот например при заходе на сайт www.minecraft.net если у меня операционнка на русском языке во всех браузера, а также в инкогнито режимах перекидывает на русскоязычную версию сайта, как это реализовано? Заранее спасибо
При таком варианте -------------- <?php $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); $acceptLang = ['fr', 'it', 'en']; $lang = in_array($lang, $acceptLang) ? $lang : 'en'; require_once "index_{$lang}.php"; ?> Результат ------------ Google chrome - показывает как en; А, Safari - показывает как ru; Хотя у меня оба браузера русско язычные и операционка MacOS - также на русском языке
ты выведи на страницу содержимое $_SERVER['HTTP_ACCEPT_LANGUAGE'], возможно причина там этот параметр только косвенно зависит от ОС. ты можешь отредактировать параметр "язык" в свойствах самого браузера. так что заголовок совсем не обязательно одинаков в двух браузерах на одной машине.
echo $_SERVER['HTTP_ACCEPT_LANGUAGE']; Хром en-US,en;q=0.9,ru;q=0.8 Сафари ru --- Добавлено --- в гугли русский в сафари русский Вот я и хочу понять как они это сделали
Они (майнкрафт) не смотрят заголовки, я почти уверен. У меня всё англоязычное, а сайт показывает мне русский контент. Вероятно у них определение региона по АйПи - идиотизм конечно, но имеют право. --- Добавлено --- а может они просто всех перекидывают на ru-ru ))) а ты голову ломаешь
в index.php в начало страницы вставил ---------------- <?php preg_match('/^\w{2}/', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $m); switch (strtolower($m[0])) { case 'ru': header('Location: /ru/index.php'); break; } ... ... ... ---------------- index.php - сайт на английском (по умолчанию) /ru/index.php - русская версия Соответсвенно: 1) если у пользователя в браузере любая локаль(кроме русской) - index.php продолжает дальше програжаться 2) если у пользователя в браузере русская локаль index.php делает редирект на /ru/index.php
У меня на выходных возникла идейка - можно попробовать без куков и лишних заморочек - только вопрос как на это отреагируют поисковики при индексации при новой структуре и что будут со старыми ссылками как их поисковик обработает? Вот структура сайта (соответственно на каждой странице сайта будет возможность выбора языка принудительно, и ссылки будут переходить, согласно структуре сайта - ниже) ----------------------- мойдомен.ru | index.php (содержит только на редирект (блок кода - 1 смотри внизу)) | |\ мойдомен.ru/eng/index.php (и получаеться все обращания к страницам бцдцт в рамках префикса /eng/) | | |\ мойдомен.ru/rus/index.php (и получаеться все обращания к страницам бцдцт в рамках префикса /rus/) (блок кода - 1) --------------------------------- preg_match('/^\w{2}/', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $m); switch (strtolower($m[0])) { case 'ru': header('Location: /rus/index.php'); break; default: header('Location: /eng/index.php'); break; }
для этого есть meta canonical — страница может отображаться по разным адресам, но только один из них указывается как правильный, подлежащий индексации.