Landerkennung

flirtratgeber

Legendäres Mitglied
Hallo,
ich will nonstopsms.net jetzt auch englischsprachig machen

Deswegen moechte ich das wenn der User nicht aus Deutschland Oesterreich oder der wunderschoenen Schweiz kommt, auf die englischsprachige Seite weitergeleitet wird....

Die grosse Frage ist nur wie weis ich woher er kommt....

mfg
 
Das Land kann man über die IP des Besuchers erkennen, Stichwort Geolocation. Es gibt für verschiedenste Plattformen entsprechende Komponenten und Tools. Allerdings stimmt das nie hundertprozentig, teils weil halt nicht von allen IP's die Standorte bekannt sind, teils weil manche User über Proxies in einem anderen Land surfen.

Eine andere Möglichkeit - wahrscheinlich benutzerfreundlicher - wäre die Browsersprache. Der Browser sendet bei jedem Request, welche Sprache(n) er bevorzugt, und das ist mit grosser Wahrscheinlichkeit die Sprache des Benutzers. Die Browsersprache lässt sich über serverseitige Komponenten, und glaub auch über Javascript, ermitteln.

Griessli
Irene
 
Hallo,
also ich kann nirgendwo was finden wie ich das mit der Ip erkennen kann aus welchem Land wer kommt..... das mit der Browsersprache haut bei manchen Browsern nicht hin will ich also nicht machen, weis jemand wie ich IP in land umwandeln kann ?
 
Mach es lieber so wie Irene sagt, wenn es dann immer noch falsch ist, solltest Du eigentlich noch die Möglichkeit bereitstellen, dieses Nachträglich zu ändern. Am Besten indem Du die Sprachauswahl gut sichtbar auf der Seite zur Verfügung stellt, z. B. durch die Landesfahnen.
Alles andere ist unverhätnismäßiger Aufwand, außerdem wäre es auch nicht mehr durch den Benutzer beeinflussbar. Wenn also der Engländer in Deutschland lieber englisch als Sprache haben möchte, kann er die Sprachreihenfolge im Browser anpassen. Dies geht jedoch nicht, wenn Du die Weiterleitung mittels "Geolocation" realisierst, dann würde auch der Engländer, welcher lieber die Seite in Englisch hätte, erstmal auf die deutsche Seite weitergeleitet, obwohl er seinen Browser vielleicht sogar extra dafür entsprechend eingestellt hat.
Sowas bedeutet zusätzlichen Frust für die Besucher, die wissen, wie diese Einstellung funktioniert und diese entsprechend angepasst haben. Oder noch schlimmer, die viel aufwand betrieben haben, um gerade diese Einstellung zu ändern, und dann führt diese Veränderung nicht mal zum gewünschten Ergebnis.



MfG Sascha Ahlers
 
Das mit der Browserkennung haut beim IE und bei den Mozilla-Varianten schon hin, damit hast du also schon etwa 99% aller User... der Rest ist selber schuld, und muss halt selbst die Sprache ändern.

Dass mit der IP Erkennung ist etwas ungenauer. Wenn User einen Proxy benutzen, kommt man zu einen falschen Ergebnis. Und bei manchen Providern geht es teilweise vollkommen daneben, zB. bei AOL

Als Datenbank habe ich mal eine Zeit lang die verwendet:
http://ip-to-country.webhosting.info/

ein Browsercheck ist allerdings wesentlich genauer, und man braucht nicht eine riesige Datenbank auf seinem Server... oder ein weiteren Scriptaufruf zu anderen Service-Providern.
 
QUOTE (Andreas Ploetzeneder @ So 23.7.2006, 15:40) [...]
de-en
de-au
[...]

Ja, dass ist eigentlich normal, da es ja auch Dialekte gibt, nur habe ich noch nie Kürzel de-en oder de-au gesehen, wohl en-gb, en-us, en-au, oder de-de, de-li, de-lu und de-ch.

Welchen Browser benutzt Du?



MfG Sascha Ahlers
 
Ich würde meinen, das erste ist die Sprache, und das zweite der Kulturraum (in Dotnet nennt sich das dann Culture). Das heisst de-au wäre ein Deutscher in Australien.

Bei meinem IE kommen diese Angaben direkt von der Ländereinstellung, d.h. wenn ich das Land umstelle auf "französisch (Canada)" schickt der Browser ein fr-ca.

Griessli
Irene
 
de-au ist Deutschland-Austria das zweite kürzel ist immer der dialekt wobei ich diesen bisher immer ignoriert habe (hoffe das es weiterhin nichts ausmacht)

Erstell dochmal eine start.php und fügen folgenden code dort ein

CODE <?PHP
$clientLanguages = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$mainClientLanguage = substr($clientLanguages,0,2);

if ($mainClientLanguage == "de"){
include_once ($_SERVER['DOCUMENT_ROOT']."/de/index.php");
}else if($mainClientLanguage == "en"){
include_once ($_SERVER['DOCUMENT_ROOT']."/en/index.php");
}else if($mainClientLanguage == "it"){
include_once ($_SERVER['DOCUMENT_ROOT']."/it/index.php");
}else if($mainClientLanguage == "fr"){
include_once ($_SERVER['DOCUMENT_ROOT']."/fr/index.php");
}else{
include_once ($_SERVER['DOCUMENT_ROOT']."/de/index.php");
}
?>


natürlich mußt du diesen auf deine seite anpassen. Funktioniert auf meinen seiten perfekt und hab noch keine probleme damit gehabt. Ist wesentlich besser als die ip-erkennung
 
QUOTE (Alexander W @ So 23.7.2006, 16:38)de-au ist Deutschland-Austria

Ups, da hab ich was verwechselt. Entschuldigung an die Österreicher ;-)

Griessli
Irene
 
QUOTE (Irene @ So 23.7.2006, 15:30)Ich würde meinen, das erste ist die Sprache, und das zweite der Kulturraum (in Dotnet nennt sich das dann Culture). Das heisst de-au wäre ein Deutscher in Australien.

Das erste nennt sich eine 'neutrale', das zweite eine 'spezifische Kultur.

Für Deutsch gibt es die fünf spezifischen de-DE, de-CH, de-AT, de-LU, de-LI. Die de-en oder de-au gibt es nicht.

Ich hatte vor längerer Zeit (vor knapp einem Jahr) eine ganze Liste dazu online gestellt:

Neutrale und spezifische Kulturen

Das ist zwar mittels der CultureInfo-Klasse aus .NET erstellt worden, die Definitionen stammen jedoch vom W3C.

Man kann das im Rahmen meines Hauptprojektes nutzen, um Datums- und Nummernangaben kulturabhängig auszugeben. Also war natürlich eine entsprechende Dokumentation notwendig, damit man die Varianten durchblättern kann und nicht ständig die Browsereinstellung ändern muß.

Die Daten sind ganz interessant, weil man sich ansehen kann, welche Ausdrücke innerhalb einer Sprache einheitlich und welche verschiedenartig sind (Januar / Jänner).

Edit (da sich meine Antwort mit den anderen überschnitten hat): de-au ist definitiv falsch, das darf kein Browser senden. Einfach mal beim Browser die Spracheinstellungen durchsehen.
 
Das Script von Alexander funktioniert nicht immer. Man braucht schon eine komplexere Funktion. Ich habe bei meinem CMS sogar eine ganze Klasse, die mir das bearbeitet. Hier die Erkennungsfunktion:

CODE
function _LangByHeader() {

if (empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) return $this->_baseLang;

$lang = $this->_baseLang;
$quality = 0.0;
$langs = preg_split('/,\s*/', $_SERVER['HTTP_ACCEPT_LANGUAGE']);

foreach ($langs as $curlang) {
if (! ($res = preg_match ('/^([a-z]{1,8}(?:-[a-z]{1,8})*)(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i', $curlang, $matches))) continue;

$langquality = 1.0;
$langcodes = explode('-', $matches[1]);
if (!empty($matches[2])) $langquality = (float) $matches[2];
if ( (count($langcodes) > 0)
&& (isset($this->_supportedLangCodes[strtolower($langcodes[0])]))
&& ($langquality > $quality)
) {
$lang = $langcodes[0];
$quality = $langquality;
}
}

return $lang;
}



Zu dem "warum so kompliziert?": Die Browser können mehre Sprachcodes schicken, dabei übergeben sie bei jeder Sprache optional den Ländercode und/oder die Qualität der Sprache. Die Qualität sagt, wie gut eine Sprache zum Browser passt. Das heißt wenn man zB.:
"en" mit Qualität 0.5
"de" mit Qualität 1.0
"fr" mit Qualität 0.7

bekommt, ist Deutsch bevorzugt, danach Französisch und erst dann wenn keines davon Verfügbar ist: Englisch

Die Klasse stell ich bald mit dem CMS online, dann kann man den Zusammenhang evtl. besser erkennen.
 
Zurück
Oben