За последние 24 часа нас посетили 22852 программиста и 1214 роботов. Сейчас ищут 767 программистов ...

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

Тема в разделе "Решения, алгоритмы", создана пользователем KiriillAdv, 19 авг 2020.

  1. KiriillAdv

    KiriillAdv Новичок

    С нами с:
    19 авг 2020
    Сообщения:
    5
    Симпатии:
    0
    Всем, доброго дня

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

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

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


    Заранее спасибо
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    дефолт в зависимости от ОС языка шлет
    Accept-Language ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
     
  3. KiriillAdv

    KiriillAdv Новичок

    С нами с:
    19 авг 2020
    Сообщения:
    5
    Симпатии:
    0
    При таком варианте
    --------------
    <?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 - также на русском языке
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    ты выведи на страницу содержимое $_SERVER['HTTP_ACCEPT_LANGUAGE'], возможно причина там ;)
    этот параметр только косвенно зависит от ОС. ты можешь отредактировать параметр "язык" в свойствах самого браузера. так что заголовок совсем не обязательно одинаков в двух браузерах на одной машине.
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    и когда переходишь на сайт майна, показывает разны языковый контент в браузерах ?
     
  6. KiriillAdv

    KiriillAdv Новичок

    С нами с:
    19 авг 2020
    Сообщения:
    5
    Симпатии:
    0


    echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];


    Хром
    en-US,en;q=0.9,ru;q=0.8

    Сафари
    ru
    --- Добавлено ---
    в гугли русский
    в сафари русский

    Вот я и хочу понять как они это сделали
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Они (майнкрафт) не смотрят заголовки, я почти уверен. У меня всё англоязычное, а сайт показывает мне русский контент. Вероятно у них определение региона по АйПи - идиотизм конечно, но имеют право.
    --- Добавлено ---
    а может они просто всех перекидывают на ru-ru ))) а ты голову ломаешь
     
  8. KiriillAdv

    KiriillAdv Новичок

    С нами с:
    19 авг 2020
    Сообщения:
    5
    Симпатии:
    0
    в 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
     
  9. KiriillAdv

    KiriillAdv Новичок

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




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


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

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    для этого есть meta canonical — страница может отображаться по разным адресам, но только один из них указывается как правильный, подлежащий индексации.