Вместо (или, по крайней мере, в дополнение к) просмотру страны IP-адреса, вы должны проверить Accept-Language
HTTP-заголовок ($_SERVER['HTTP_ACCEPT_LANGUAGE']
в PHP)
Этот заголовок обычно содержит пары язык-страна:
en-US, hi_IN, fr, de;q=0.5
В расширении PHP intl есть методы, которые помогают его анализировать .
Проблемы с поиском IP:
Обычные пользователи не имеют возможности изменить свой IP-адрес или то, как их адрес классифицируется в базах данных IP-geo. Гораздо более вероятно, что пользователи смогут выбирать / настраивать язык своей операционной системы / браузера, что влияет на заголовок Accept-Language
.
Есть прокси-провайдеры в стране, отличной от пользователя, например, AOL направляет некоторый международный трафик через США, многие мобильные пользователи используют Opera Mini с прокси-серверами в Норвегии. Если вы ищете IP, по крайней мере, примите во внимание заголовок X-Forwarded-For
. Заголовок Accept-Language
пропускается через прокси без таких проблем.
Я использовал базу данных hostip.info и обнаружил, что она неполная и содержит ошибки. Также учтите, что выполнение HTTP-запроса к стороннему PHP-скрипту каждый раз будет тормозить ваш сайт и тратить его ресурсы. Разбор заголовка Accept-Language
по сути бесплатный.
Если вы не хотите, чтобы просто страна, а языковые пользователи говорили, тогда IP → Страна не будет точной для стран, где говорят на разных языках. Accept-Language
может дать вам более точную информацию (например, nl_BE
для голландского в Бельгии, fr_CA
для канадского французского).
Ни один из этих методов не является правильным на 100%, поэтому было бы целесообразно разрешить пользователям отменять ваш выбор.
Также имейте в виду, что если вы принудительно перенаправите на «правильный» домен, то боты поисковых систем не смогут проиндексировать все ваши домены, так как они, скорее всего, будут поступать с IP-адреса США и не будут указывать предпочтительный язык. Лучше , а не применять обнаружение к доменам, отличным от .com
, и / или не применять его к страницам, отличным от домашней страницы.