Как получить язык пользователя по ip-адресу, используя php?

Мне нужно получить язык пользователя, который посещает мой сайт по их IP-адресу с помощью PHP. как я могу это сделать, есть какой-либо API для этого, пожалуйста, сообщите

Вы можете использовать любой модуль geoIP. Это позволяет вам определять страну по IP. Но это не совсем правильно. Например, я сейчас в Таиланде (и у меня есть тайский IP), но мой язык – русский 🙂

Это не очень хорошо, когда google покажет мне страницу на тайском языке.

Для языка определения вы можете использовать Заголовки из браузера. Предпочтительные языки перечислены в этих заголовках.

Используйте модуль GeoIP, как было ранее предложено, а затем вставьте этот код где-нибудь в свой проект:

if($country = geoip_country_code_by_name($host)) { switch($country) { case "DJ": case "ER": case "ET": $lang = "aa"; break; case "AE": case "BH": case "DZ": case "EG": case "IQ": case "JO": case "KW": case "LB": case "LY": case "MA": case "OM": case "QA": case "SA": case "SD": case "SY": case "TN": case "YE": $lang = "ar"; break; case "AZ": $lang = "az"; break; case "BY": $lang = "be"; break; case "BG": $lang = "bg"; break; case "BD": $lang = "bn"; break; case "BA": $lang = "bs"; break; case "CZ": $lang = "cs"; break; case "DK": $lang = "da"; break; case "AT": case "CH": case "DE": case "LU": $lang = "de"; break; case "MV": $lang = "dv"; break; case "BT": $lang = "dz"; break; case "GR": $lang = "el"; break; case "AG": case "AI": case "AQ": case "AS": case "AU": case "BB": case "BW": case "CA": case "GB": case "IE": case "KE": case "NG": case "NZ": case "PH": case "SG": case "US": case "ZA": case "ZM": case "ZW": $lang = "en"; break; case "AD": case "AR": case "BO": case "CL": case "CO": case "CR": case "CU": case "DO": case "EC": case "ES": case "GT": case "HN": case "MX": case "NI": case "PA": case "PE": case "PR": case "PY": case "SV": case "UY": case "VE": $lang = "es"; break; case "EE": $lang = "et"; break; case "IR": $lang = "fa"; break; case "FI": $lang = "fi"; break; case "FO": $lang = "fo"; break; case "BE": case "FR": case "SN": $lang = "fr"; break; case "IL": $lang = "he"; break; case "IN": $lang = "hi"; break; case "HR": $lang = "hr"; break; case "HT": $lang = "ht"; break; case "HU": $lang = "hu"; break; case "AM": $lang = "hy"; break; case "ID": $lang = "id"; break; case "IS": $lang = "is"; break; case "IT": $lang = "it"; break; case "JP": $lang = "ja"; break; case "GE": $lang = "ka"; break; case "KZ": $lang = "kk"; break; case "GL": $lang = "kl"; break; case "KH": $lang = "km"; break; case "KR": $lang = "ko"; break; case "KG": $lang = "ky"; break; case "UG": $lang = "lg"; break; case "LA": $lang = "lo"; break; case "LT": $lang = "lt"; break; case "LV": $lang = "lv"; break; case "MG": $lang = "mg"; break; case "MK": $lang = "mk"; break; case "MN": $lang = "mn"; break; case "MY": $lang = "ms"; break; case "MT": $lang = "mt"; break; case "MM": $lang = "my"; break; case "NP": $lang = "ne"; break; case "AW": case "NL": $lang = "nl"; break; case "NO": $lang = "no"; break; case "PL": $lang = "pl"; break; case "AF": $lang = "ps"; break; case "AO": case "BR": case "PT": $lang = "pt"; break; case "RO": $lang = "ro"; break; case "RU": case "UA": $lang = "ru"; break; case "RW": $lang = "rw"; break; case "AX": $lang = "se"; break; case "SK": $lang = "sk"; break; case "SI": $lang = "sl"; break; case "SO": $lang = "so"; break; case "AL": $lang = "sq"; break; case "ME": case "RS": $lang = "sr"; break; case "SE": $lang = "sv"; break; case "TZ": $lang = "sw"; break; case "LK": $lang = "ta"; break; case "TJ": $lang = "tg"; break; case "TH": $lang = "th"; break; case "TM": $lang = "tk"; break; case "CY": case "TR": $lang = "tr"; break; case "PK": $lang = "ur"; break; case "UZ": $lang = "uz"; break; case "VN": $lang = "vi"; break; case "CN": case "HK": case "TW": $lang = "zh"; break; default:break; } } 

Хотя вы можете выполнить поиск по IP-адресу, чтобы получить представление об общем физическом местоположении, физическое местоположение может не иметь особого отношения к языку человека, чей IP-адрес вы просматриваете.

Например, в то время как местоположение IP может быть Нью-Йоркской областью Соединенных Штатов, человек может говорить на мандаринском языке в качестве основного языка, потому что они посещают этот район.

Вот сервис, который вы можете использовать для поиска IP-адреса http://ipinfodb.com/ip_location_api.php

Вот обсуждение stackoverflow. Получите местоположение пользователя по IP-адресу на C #, что также может быть полезно.

Однако вам нужно будет предоставить механизм, позволяющий изменить язык. И используйте файлы cookie или что-то подобное, чтобы запомнить выбор языка.

Наиболее распространенным использованием информации о местоположении является предоставление целевой рекламы, которая, скорее всего, будет полезной для человека в этом месте.

EDIT: использование мобильных устройств

Поскольку мобильные устройства и смартфоны, обращающиеся к Интернету через высокоскоростные сотовые сети 3G и 4G, становятся все более распространенными, возникает вопрос, работает ли геолокация IP-адресов для этих типов устройств.

Короткий ответ, не очень хорошо. См. Эту статью: Где находится этот телефон ?: Геолокация IP-адресов в сетях 3G из Microsoft Research.

Кроме того, здесь задан вопрос о стеке на мобильном телефоне из HTTP-запроса .

Ниже приведена статья « Геолокация IP-адресов в сотовых сетях данных», которая также содержит некоторую информацию о проблеме.

     функция ipToCountry ($ ip)
     {
     $ info = file_get_contents ("http://who.is/whois-ip/ip-address/$ip");
     list ($ a, $ b) = explode ('COUNTRY:', strtoupper ($ info));
     return substr (trim ($ b), 0,2);
     }

     функция geLangCode ()
     {
     $ countryCode = library :: ipToCountry ($ _ SERVER ['REMOTE_ADDR']);
     return $ yourQuery
     }

Вы можете попробовать мой API, https://ipinfo.io . Он возвращает JSON по умолчанию, с кучей разных полей:

 $ curl ipinfo.io { "ip": "24.6.61.239", "hostname": "c-24-6-61-239.hsd1.ca.comcast.net", "city": "Mountain View", "region": "California", "country": "US", "loc": "37.3845,-122.0881", "org": "AS7922 Comcast Cable Communications, LLC", "postal": "94040" } 

Подробнее см. https://ipinfo.io/developers .

Если вы делаете это, чтобы определить язык, который вам лучше смотреть на заголовок Accept-Language хотя он настроен на основе предпочтений пользователя, а не гадать, на каком языке они могут говорить на основе их текущего местоположения.