Angenommen, Sie müssen wissen, aus welchem Land jemand, der Ihre Website besucht, stammt, weil Sie eine internationalisierte Website haben und je nach Land unterschiedliche Dinge anzeigen. Sie könnten den Benutzer fragen. Möglicherweise möchten Sie diese Funktionalität ohnehin haben, um sicherzustellen, dass Ihre Besucher die Kontrolle haben, aber sie werden es sicherlich zu schätzen wissen, wenn es von Anfang an so korrekt wie möglich ist.
Es gibt keine nativen Webtechnologien, die diese Informationen haben. JavaScript verfügt über Geolocation, aber Benutzer müssten dem zustimmen, und selbst dann müssten Sie eine Bibliothek verwenden, um die Koordinaten in ein besser nutzbares Land umzuwandeln. Selbst serverseitige Sprachen, die Zugriff auf die IP-Adresse haben, den JavaScript nicht hat, wissen nicht automatisch das Herkunftsland.
KANADA. ICH WILL EINFACH WISSEN, OB SIE AUS KANADA SIND ODER NICHT.
Sie müssen einen Dienst abfragen, der dies weiß. Die IP Geolocation API ist dieser Dienst, und er ist kostenlos.
Sie führen einen GET gegen die API aus. Sie können dies direkt im Browser tun, wenn Sie es testen möchten
https://api.ipgeolocationapi.com/geolocate/184.149.48.32
Aber Sie erhalten nicht nur das Land. Sie erhalten eine ganze Reihe von Informationen, die Sie möglicherweise verwenden müssen. Ich sitze zufällig in Kanada und das ist es, was ich für meine IP bekomme
{
"continent":"North America",
"address_format":"{{recipient}}\n{{street}}\n{{city}} {{region_short}} {{postalcode}}\n{{country}}",
"alpha2":"CA",
"alpha3":"CAN",
"country_code":"1",
"international_prefix":"011",
"ioc":"CAN",
"gec":"CA",
"name":"Canada",
"national_destination_code_lengths":[
3
],
"national_number_lengths":[
10
],
"national_prefix":"1",
"number":"124",
"region":"Americas",
"subregion":"Northern America",
"world_region":"AMER",
"un_locode":"CA",
"nationality":"Canadian",
"postal_code":true,
"unofficial_names":[
"Canada",
"Kanada",
"Canadá",
"カナダ"
],
"languages_official":[
"en",
"fr"
],
"languages_spoken":[
"en",
"fr"
],
"geo":{
"latitude":56.130366,
"latitude_dec":"62.832908630371094",
"longitude":-106.346771,
"longitude_dec":"-95.91332244873047",
"max_latitude":83.6381,
"max_longitude":-50.9766,
"min_latitude":41.6765559,
"min_longitude":-141.00187,
"bounds":{
"northeast":{
"lat":83.6381,
"lng":-50.9766
},
"southwest":{
"lat":41.6765559,
"lng":-141.00187
}
}
},
"currency_code":"CAD",
"start_of_week":"sunday"
}
Mit diesen Informationen könnte ich leicht entscheiden, auf die kanadische Version meiner Website umzuleiten, wenn ich eine habe, oder Preise in CAD anzuzeigen, oder eine französische Übersetzung anzubieten oder was auch immer mir sonst noch einfällt.
Angenommen, Sie wären in PHP. Sie könnten die IP so abrufen...
function getUserIpAddr() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
Der cURL-Aufruf, um die Informationen zu erhalten
$url = "https://api.ipgeolocationapi.com/geolocate/184.149.48.32";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
Es kommt als JSON zurück, also
$json = json_decode($result);
Und dann wird $json->{'name'}; „Canada“ sein, wenn ich in Kanada bin.
Also kann ich so machen
if ($json->{'name'} == "Canada") {
// serve index-ca.php
} else {
// server index.php
}
Ich habe für diesen Zweck immer ip2location im Backend verwendet. Es gibt eine kostenlose Version, die all diese Informationen liefert, und eine kostenpflichtige Version, die die IP sogar auf eine Stadt genau bestimmen kann. Sie liefert keine Sprachinformationen, aber die Suche nach Land ist ohnehin nicht der richtige Weg dafür (das sollte durch Betrachten von
navigator.languageserfolgen).Dies kann leicht im Rückgabe-Body der ersten Anfrage an jedes JavaScript, das es benötigt, zurückgegeben werden (API-Aufrufe vom Browser sind teuer).
Der Hauptvorteil ist die Beseitigung der Abhängigkeit von einem Drittanbieter. Wenn dieser Dienst ausfällt oder nicht erreichbar ist, wirkt sich dies auf Ihre Website aus.
Nachdem ich nach fast zehn Jahren des (ziemlich glücklichen) Lebens in Taiwan gerade wieder in die USA zurückgekehrt bin, kann ich meine Wut über jene Websites (und andere) nicht genug betonen, die für mich entschieden haben, dass ich zwangsläufig alles auf Chinesisch wollte. Obwohl ich nichts gegen Chinesisch habe, habe ich eine Hörbehinderung, die mich daran hindert, gesprochenes Chinesisch zu verstehen, und ich habe schließlich aufgegeben, die Sprache zu lernen.
Darf ich höflich vorschlagen, dass Entwickler den Endbenutzer entscheiden lassen, welche Sprache er wünscht, anstatt für ihn zu entscheiden.