PHP を使用して IP アドレスで自分の Web サイトにアクセスしたユーザーの言語を取得する必要があります。どうすればいいですか、これを行うためのAPIがあります、アドバイスしてください
3 に答える
以前に提案されたように 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の議論です Get user location by IP address in C#も役立つかもしれません。
ただし、言語の選択を変更できるようにするメカニズムを提供する必要があります。Cookie などを使用して、言語の選択を記憶します。
位置情報の最も一般的な用途は、その場所にいる人にとって役立つ可能性が高い、ターゲットを絞った広告を提供することです。
編集: モバイル デバイスの使用
高速の 3G および 4G セルラー ネットワークを介してインターネットにアクセスするモバイル デバイスやスマートフォンがますます一般的になってきているため、IP アドレスのジオロケーションがこれらのタイプのデバイスで機能するかどうかが問題になります。
簡単に言えば、あまり良くないということです。この記事、 「その電話はどこですか?: Microsoft Researchの 3G ネットワーク上の IP アドレスの地理位置情報」を参照してください。
また、HTTP リクエストからの携帯電話の位置に関するスタックオーバーフローの質問もここにあります。
こちらの記事、Geolocating IP addressesin Cellular Data Networksにも問題に関する情報が記載されています。