Spracheinstellungen des Browsers in PHP auslesen

  • Themenstarter Themenstarter cr
  • Beginndatum Beginndatum
C

cr

Guest
Folgendes Problem, ich will das die Besucher meiner Webseite je nach ihren Spracheinstellungen im Browser auf eine unterschiedliche URL geleitet werden. Ich habe eine Javascriptlösung wurde jedoch PHP bevorzugen.

Code:
<?php
$sprache=substr($HTTP_ACCEPT_LANGUAGE, 0, 2); 
if ($sprache == "de") 
	{
	echo "<meta http-equiv=Refresh content=\"0; url=http://url.de/de/\">"; 
	exit;
	}
if ($sprache == "en") 
	{
	echo "<meta http-equiv=Refresh content=\"0; url=http://url.de/en/\">"; 
	exit;
	}
echo "<meta http-equiv=Refresh content=\"0; url=http://url.de/en/\">"; 
exit; 
?>

So sieht mein bisheriger Code aus der jedoch anscheinend immer auf die englische Seite umleitet. Wenn ich mir die Lang Variable ausgeben lasse erhalte ich lediglich 1, auch habe ich versucht das ganze ausschliesslich in PHP zu lösen mit Hilfe von header() was jedoch noch weniger funkionierte, getestete Browser sind Epiphany und Firefox. Würde mich freuen wenn jemand Ideen hätte wie das Problem zu lösen ist.

ps. Der Apache bietet ja auch die Möglichkeit der Spracherkennung hat damit schon jemand Erfahrung gemacht?
 
Hi.
Hast du es in PHP schon mit $_SERVER['HTTP_ACCEPT_LANGUAGE'] probiert? Damit müsste das zu machen sein.
Schau mal hier vorbei: http://techpatterns.com/downloads/php_language_detection.php
da findest du ein PHP Language Detection Script zum Download.

Original von cr
ich versucht das ganze ausschliesslich in PHP zu lösen mit Hilfe von header() was jedoch noch weniger funkionierte
header() eignet sich auch nicht zum Auslesen, sondern nur zum Senden.
 
Ich hab bei einer Seite von mir $_SERVER['HTTP_ACCEPT_LANGUAGE'] auch benutzt, aber der gibt bei mir immer de aus, obwohl ich ein Türkisches Betriebssystem hab...und alle ´programme und selbst die Schrift auf Türkisch gestellt ist...warum?
 
Da musst du was falsch gemacht haben.

Wenn ich im Browser die Sprache auf englisch umstelle, erhalte ich z.B. en-us,de
ansonsten auf deutsch de,en-us. Funktioniert also. Du musst nur die primäre Sprache auslesen, die als erstes angegeben ist.

@cr:
Was mir gerade noch auffällt, du kannst die Umleitung besser mit header("Location: http://www.url.de/de"); anstatt mit einem Meta Refresh machen. Das funktioniert auch, falls man im Browser Meta Refresh deaktiviert haben sollte ...
 
Ich hab es mehrmals überprüft, und keinen Fehler gefunden
Das script was ich hab:

$language->name = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
if (!empty($_REQUEST["lang"])) {
$language->name = $_REQUEST["lang"];
}
if (is_file('languages/'.strtolower($language->name).'.php')) {

} else {
$language->name = "de";
}

Sowohl English und türkisch gibt der nicht raus, da kann ich die sprache soviel ändern wie ich will da ändert sich nichts der gibt immer de raus.
 
Du hast wahrscheinlich keine Datei namens "de,en-us.php"(Beispiel) oder so. Lass dir doch erstmal $_SERVER['HTTP_ACCEPT_LANGUAGE'] ausgeben und sieh dann weiter. Wie Mackz schon sagte: nur die erste angegebene Sprache auswerten.

OT: Code-Tags und Einrückung sind auch tolle Sachen.
 
@ Mackz Danke nun geht es mit dem Script, hab das fertige genommen :)
Ich habe header() für die Umleitung verwendet nicht zum auslesen, jedoch mochte Epiphany das komischerweise nicht aber nun gehts ja.
 
Zurück
Oben