繁体   English   中英

如何使用php通过IP地址获取用户语言?

[英]How to get user language by ip address using php?

我需要使用PHP通过IP地址获取访问我的网站的用户的语言。 我该怎么做,有任何API可以执行此操作,请告知

按照以前的建议使用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;
    }
}

您可以使用任何geoIP模块。 它允许您通过IP检测国家。 但这不是很正确的方法。 例如,我现在在泰国(并且我有泰国IP),但是我的语言是俄语:)

当google向我显示泰语页面时,这不是很好。

要检测语言,可以使用浏览器的标题。 首选语言在此标题中列出。

虽然您可以在IP地址上进行查询以获得大致的物理位置信息,但是该物理位置可能与您要查找其IP地址的人员的语言没有太大关系。

例如,当IP地点可能是美国的纽约地区时,该人可能会以普通话为主要语言,因为他们正在访问该地区。

这是一项可用于IP地址查找的服务http://ipinfodb.com/ip_location_api.php

这是一个stackoverflow讨论,也可能通过C#的IP地址获取用户位置

但是,您将需要提供一种允许更改语言选择的机制。 并使用cookie或类似的东西来记住语言选择。

位置信息的最常见用途是提供针对性的广告,该广告更有可能在该位置的人身上使用。

编辑:使用移动设备

由于通过高速3G和4G蜂窝网络访问Internet的移动设备和智能电话变得越来越普遍,因此一个问题是IP地址地理定位是否适用于这些类型的设备。

简短的答案是,不是很好。 请参阅本文“ 电话在哪里?”: Microsoft Research 在3G网络上地理定位IP地址

另外,这是来自HTTP请求的关于手机位置stackoverflow问题

这是一篇有关在蜂窝数据网络中IP地址进行地理定位的文章,该文章也提供了有关此问题的一些信息。

function 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);
    }

    function 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标头,该标头是根据用户的偏好设置的,而不是根据当前位置猜测他们会说的语言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM