Определения языка браузера и последующий редирект - Согласно языку

Kiriil1

Новичок
Всем, доброго дня

Подскажите пожалуйста рабочий пример, для "Определения языка браузера и последующий редирект на русскоязычную версию сайта для русской версия браузера, английский язык во всех других случаях",

Сам перечитал тону мануалов, но рабочей версии не нашёл. Например, в режиме инкогнито google chrome на MacOS всегда показывает английский язык, а Safari русский

Вот например при заходе на сайт www.minecraft.net если у меня операционнка на русском языке во всех браузера, а также в инкогнито режимах перекидывает на русскоязычную версию сайта, как это реализовано?


Заранее спасибо
 

Kiriil1

Новичок
Нужно смотреть на заголовок https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language и принимать решение на его основе.
При таком варианте
--------------
<?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 - также на русском языке
 

Kiriil1

Новичок
У тебя в хроме предпочитаемый язык английский, так что все верно.
да, я это понимаю но как реализован тогда сайт microsoft.com или minecraft.net что при текущей моей конфигурации браузера эти сайты чётко распознают локаль и отображают "русский вариант сайта - для google хром браузера", как они это делают тогда?
 

fixxxer

К.О.
Партнер клуба
microsoft.com определяет страну по geoip и исходя из этого делает редирект, наивно предполагая, что если я, допустим, сейчас во Франции, то говорю по-французски. Это очень плохо, и кто так делает - нехороший человек.

Никогда так не делай. Правильное решение тебе дали.
 

Kiriil1

Новичок
в 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
 

Kiriil1

Новичок
У меня на выходных возникла идейка
- можно попробовать без куков и лишних заморочек
- только вопрос как на это отреагируют поисковики при индексации при новой структуре и что будут со старыми ссылками как их поисковик обработает?




Вот структура сайта (соответственно на каждой странице сайта будет возможность выбора языка принудительно, и ссылки будут переходить, согласно структуре сайта - ниже)
-----------------------


мойдомен.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;
}
 

Valick

Новичок
У меня на выходных возникла идейка
- можно попробовать без куков и лишних заморочек
microsoft.com определяет страну по geoip и исходя из этого делает редирект, наивно предполагая, что если я, допустим, сейчас во Франции, то говорю по-французски. Это очень плохо, и кто так делает - нехороший человек.
Kiriil1, вы нехороший человек. Рамки приличия не позволяют дать более детальную характеристику.
 
Сверху