Mittels Browserweiche Sprache abfangen
Michael
- javascript
Hallo liebe Forumsgemeinde
Vielleicht kann mir jemand von euch weiterhelfen:
Für einen bestehenden 3-sprachigen Webauftritt (de, en, fr) möchte ich eine neutrale Einstiegsseite erstellen, welche nach ca. 5 Sekunden einen Refresh zur jeweiligen Spracheversion macht, die der Benutzer in seinem Browser eingestellt hat.
Habe bis jetzt "leider" nur JavaScripts gefunden mit Browserweiche für Browserversionen etc. und war leider nicht fähig diese so umzumodeln wie gewünscht.. ;-(
Schon mal vielen Dank für euer Feeback und beste Grüsse.
Michael
Falls es dir in PHP hilft:
Codeschnipsel geschrieben am 15.01.2004 - 17:18:39 von LLCoolDannY:
So ich hab mal eine Funktion geschrieben mit der man anhand der IP das Land des Benutzers rausfinden kann:
Als erstes muss man die CSV-Datenbank vom ip-to-country-Projekt runterladen: http://ip-to-country.webhosting.info/node/view/6
Dann nimmt man einfach folgenden Code und es klappt ;):
PHP-Code:
<?php
//ip-to-country-Parser (c) 2004 by LLCoolDannY & [URL]http://ip-to-country.webhosting.info[/URL]
function is_between($check, $first_counter, $second_counter) {
if($check>=$first_counter AND $check<=$second_counter) {
return true;
} else {
return false;
}
}
function ip_to_country($ip) {
$file = file('database.txt'); // Hier der Name der CSV-Datenbank-Datei z.B. ip-to-country.cvs
$ip = ip2long($ip);
foreach($file as $file) {
$file = explode('"', $file);
// $file[1] = IP Adressenbereich-Anfang
// $file[3] = IP Adressenbereich-Ende
// $file[9] = Voller Name des Landes
if(is_between($ip, $file[1], $file[3])) {
return $file[9]; // Ausgabe des Landes
}
}
}
echo ip_to_country($_SERVER['REMOTE_ADDR']); // Hier kann auch ggf. eine IP-Adresse eingegeben werden
?>
der webauftritt ist in asp und das abfangen der sprache mittels ip-adresse ist in unserem 4-sprachigen lände (schweiz) leider nicht so einfach...
es müsste irgendwie ein "einfaches" javascript sein, welches checkt, welche sprache der user in seinem browser defniert hat..
danke trotzdem für dein schnelles feedback!
Falls es dir in PHP hilft:
Codeschnipsel geschrieben am 15.01.2004 - 17:18:39 von LLCoolDannY:
So ich hab mal eine Funktion geschrieben mit der man anhand der IP das Land des Benutzers rausfinden kann:
Als erstes muss man die CSV-Datenbank vom ip-to-country-Projekt runterladen: http://ip-to-country.webhosting.info/node/view/6
Dann nimmt man einfach folgenden Code und es klappt ;):
PHP-Code:<?php
//ip-to-country-Parser (c) 2004 by LLCoolDannY & [URL]http://ip-to-country.webhosting.info[/URL]
function is_between($check, $first_counter, $second_counter) {
if($check>=$first_counter AND $check<=$second_counter) {
return true;
} else {
return false;
}
}
function ip_to_country($ip) {
$file = file('database.txt'); // Hier der Name der CSV-Datenbank-Datei z.B. ip-to-country.cvs
$ip = ip2long($ip);foreach($file as $file) {
$file = explode('"', $file);
// $file[1] = IP Adressenbereich-Anfang
// $file[3] = IP Adressenbereich-Ende
// $file[9] = Voller Name des Landes
if(is_between($ip, $file[1], $file[3])) {
return $file[9]; // Ausgabe des Landes
}
}
}echo ip_to_country($_SERVER['REMOTE_ADDR']); // Hier kann auch ggf. eine IP-Adresse eingegeben werden
?>
Moin!
der webauftritt ist in asp und das abfangen der sprache mittels ip-adresse ist in unserem 4-sprachigen lände (schweiz) leider nicht so einfach...
es müsste irgendwie ein "einfaches" javascript sein, welches checkt, welche sprache der user in seinem browser defniert hat..
Nein, es muß ein einfaches ASP sein, welches die bevorzugte Sprache des Besuchers entdeckt und entsprechend weiterleitet.
Folgendes ASP-Skript funktioniert als weiterleitende Startseite ganz wunderbar:
---schnipp---
<%@ EnableSessionState=False %>
<%
Response.Buffer=TRUE ' Buffer the output to prevent the session cookie to be sent
languages = split(Request.ServerVariables("HTTP_ACCEPT_LANGUAGE"),",")
i=0
do while i <= ubound(languages) and sellang = ""
select case languages(i)
case "de"
sellang = "de"
case "en"
sellang = "en"
' Insert new language versions here
end select
i = i + 1
loop
if sellang = "" then
sellang = "de"
end if
Response.Redirect("http://" & Request.ServerVariables("HTTP_HOST") & "/" & sellang & "/")
%>
---schnapp---
Anstelle des Response.Redirects kannst du natürlich auch beliebigen anderen Code ausgeben, um den Besucher weiterzuleiten.
Und noch eine Anmerkung: Das Parsen von "HTTP_ACCEPT_LANGUAGE" ist hier recht simpel ausgeführt und geht davon aus, dass die bevorzugtere Sprache von zweien zuerst im String vorkommt. Und dass außerdem Sprachangaben nur zwei Buchstaben enthalten.
Beide Annahmen sind falsch. Ein korrektes Parsing dieses Strings in PHP hat Christian Seiler geschrieben: http://aktuell.de.selfhtml.org/tippstricks/php/httpsprache/index.htm. Ich hatte zum Zeitpunkt des Programmierens des obigen Skriptes nur keine Zeit, das alles so explizit einzubauen. Besucher, die eine etwas seltsamere Sprachwunsch-Einstellung haben, werden also unter Umständen auf eine weniger bevorzugte Sprache oder gar auf die definierte Standardsprache weitergeleitet.
Solange man von dort aber ohne Probleme eine manuelle Sprachwahl treffen kann, ist das in meinen Augen zu verschmerzen.
- Sven Rautenberg
Hallo,
Für einen bestehenden 3-sprachigen Webauftritt (de, en, fr) möchte ich eine neutrale Einstiegsseite erstellen, welche nach ca. 5 Sekunden einen Refresh zur jeweiligen Spracheversion macht, die der Benutzer in seinem Browser eingestellt hat.
Ein Beispiel dafür, warum das eine _sehr_ schlechte Idee ist:
Im Urlaub in Frankreich/GB besuche ich ein Internet-Cafe und möchte Deine deutschsprachige Seite sehen. Das kann ich nicht, weil Du mich automatisch auf die fr/en-Seite weiterleitest.
Verlinke von der Einstiegsseite aus die unterschiedlichen Sprachvarianten und lasse den Nutzer selbst wählen.
viele Grüße
Axel
ja, das hab ich mir auch überlegt. aber die neutrale einstiegsseite soll nur temporär aufgeschalten werden.. und bei den 10%, welche die "falsche" sprache eingeschalten haben, können dann auf der richtigen website die sprache wechseln.
ja, das hab ich mir auch überlegt. aber die neutrale einstiegsseite soll nur temporär aufgeschalten werden.. und bei den 10%, welche die "falsche" sprache eingeschalten haben, können dann auf der richtigen website die sprache wechseln.
Was soll man denn da einschalten?
Ich hab einen englischen Browser (gibt es Firefox in Deutsch?) und habe als bevorzugte Sprache Deutsch eingestellt trotzdem meldet navigator.language en-US
Struppi.
ja, hab das script ausprobiert, es funktioniert nur mit der sprache des browsers (immerhin!).
ich frag mich aber, was denn der sinn ist, wenn man die spracheeinstellung für websites beim browser selber auswählt?
Hallo,
Ich hab einen englischen Browser (gibt es Firefox in Deutsch?) und habe als bevorzugte Sprache Deutsch eingestellt trotzdem meldet navigator.language en-US
ich hab auch die englische Firefox Version
bei $_SERVER['HTTP_ACCEPT_LANGUAGE'] steht aber "de"
mann kann das in den Optionen einstellen.....
Hi,
das
navigator.language en-US
hat damit
$_SERVER['HTTP_ACCEPT_LANGUAGE']
nichts zu tun.
Und deswegen
mann kann das in den Optionen einstellen.....
bringt diese Einstellung in diesem Fall nichts (weswegen JS eben auch nur bedingt für eine automatische Sprachwahl geeignet ist).
Letzteres braucht halt eine serverseitige Sprache, um es auszulesen ...
Gruß, Cybaer
Für einen bestehenden 3-sprachigen Webauftritt (de, en, fr) möchte ich eine neutrale Einstiegsseite erstellen, welche nach ca. 5 Sekunden einen Refresh zur jeweiligen Spracheversion macht, die der Benutzer in seinem Browser eingestellt hat.
http://de.selfhtml.org/javascript/objekte/navigator.htm#language
aber dieser Wert sagt nichts aus, mein Browser spricht Englisch, trotzdem bevorzuge ich deutschsprachige Seiten. Lass lieber den Bescuher entscheiden, welche Sprache er am liebsten hat.
Struppi.
Hi!
</archiv/2004/7/84842/#m498094> sollte dir weiterhelfen. In dem Thread ist übrigens auch die Diskussion über den Sinn und Unsinn von Sprachweichen enthalten. Ich finde sie (sinnvoll ausgeführt) gut.
Das PHP-Beispielscript dürfte sicherlich auch in ASP zu realisieren sein (kenne mich da leider nicht aus).
Kiep kühl!
O'Brien
danke! habe was zustande gebracht:
if(navigator.language) {
agt_lang=navigator.language;
} else if(navigator.userLanguage) {
agt_lang=navigator.userLanguage;
} else {
agt_lang="";
}
if(agt_lang.indexOf("en")>=0) {
top.location.href="en.html";
} else if(agt_lang.indexOf("fr")>=0) {
top.location.href="fr.html";
} else {
top.location.href="de.html";
}
noch stellt sich für mich die frage, wie ich eine verzögerung (refresh nach ca. 5sek) in das script einbauen kann??
danke und gruss
michael
if(navigator.language) {
agt_lang=navigator.language;
} else if(navigator.userLanguage) {
agt_lang=navigator.userLanguage;
} else {
agt_lang="";
}
Nur nochmal zur Erinnerung. Das ist nicht die user Sprache, sondern die des Browsers.
noch stellt sich für mich die frage, wie ich eine verzögerung (refresh nach ca. 5sek) in das script einbauen kann??
window.setTimeout ist dein Freund.
Struppi.
ich weiss, aber das mit der browsersprache scheint ja nicht zu funktionieren...
danke für den timeout-tipp!
habe ziemlichze probleme mit dem windows.setTimeout... ;-(
wie platziere ich den genauen befehl im script, damit eine verzögerung von 5 sekunden erfolgt?
if(agt_lang.indexOf("en")>=0) {
top.location.href="en.html";
} else if(agt_lang.indexOf("fr")>=0) {
top.location.href="fr.html";
} else {
top.location.href="de.html";
}
danke für eure hilfe!
Hi,
wie platziere ich den genauen befehl im script, damit eine verzögerung von 5 sekunden erfolgt?
Packe alles in eine Funktion und rufe dann diese Funktion auf, z.B.: setTimeout('sprache()',5000);
Gruß, Cybaer
Hi,
noch stellt sich für mich die frage, wie ich eine verzögerung (refresh nach ca. 5sek) in das script einbauen kann??
Na ja, die Verwendung von JavaScript ist hierbei "suboptimal" (eben weil "Browsersprache" und "gewünschte Sprache" unterschiedliche Zielsetzung haben). ;-) Eine clientseitige Sprache (z.B. PHP) ist da deutlich besser.
Davon abgesehen würde ich dann aber auf die 5 sec verzichten und *sofort* umleiten (noch vor dem Seitenaufbau). Nimm dafür nicht location.href sondern location.replace() (die "Weichen-Seite" verschwindet dann ersatzlos aus der History).
Das auf jeder Seite ein manueller Wechsel ebenfalls möglich ein muß (auch ohne JavaScript), versteht sich ja von selbst ...
Gruß, Cybaer
Hi,
Eine clientseitige Sprache (z.B. PHP) ist da deutlich besser.
kann es sein, dass es bei dir zu warm ist, oder welchen speziellen Client benutzt du?
*SCNR*
Kiep kühl!
O'Brien
Hi,
kann es sein, dass es bei dir zu warm ist, oder welchen speziellen Client benutzt du?
*SCNR*
LOL - Warm ist gar kein Ausdruck! ==;-o
Gruß, Cybaer