Sprache des Browsers erkennen

splat

Erfahrenes Mitglied
Hi,

ich würde gerne die bevorzugte Sprache des Browsers automatisch erkennen lassen, und dann das Land in der Session speichern. Die Sprache bekomme ich ja so:

PHP:
$language = explode(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
print $language[0];

Aber soll ich nun für jedes Land eine entsprechende Prüfung vornehmen?

wenn sprache de-de {
land = Deutschland;
}

Oder gibt es hierfür eine einfachere Möglichkeit? :)

Gruß,
Marc
 
Hallo!

Was willst Du denn mit der bevorzugten Sprache anfangen?
Für Statistiken? Dann wird Dir wahrscheinlich nichts anderes übrigbleiben für jedes Land extra zu prüfen.
Wenn es aber für eine Mehrsprachigkeit Deiner Homepage sein soll, dann brauchst Du ja nur auf die Sprachen prüfen, in denen Du Deine Homepage anbietest.

Gruss Dr Dau
 
Achtung: die angegebenen Sprachkürzel sind nicht auf ein bestimmtes Land übertragbar. Denn Länder sind wie du sicher weißt geographisch begrenzt, Sprachen jedoch nicht. Also kannst du eine ermittelte Sprache auch nicht einem Land zuordnen.

PHP:
function parseAcceptLanguageList($string=null)
{
	$retVal = array();
	if (empty($string)) {
		$string = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
	}
	$parts = explode(',', $string);
	foreach ($parts as $part) {
		if (preg_match('/([a-zA-Z]{1,8}(?:-[a-zA-Z]{1,8})?)(?:\s*;\s*q=(1|0\.[0-9]+))?/', trim($part), $match)) {
			$key = (isset($match[2]) && $match[2] != '') ? $match[2] : '1';
			if (isset($retVal[$key])) {
				$retVal[$key][] = $match[1];
			} else {
				$retVal[$key] = array($match[1]);
			}
		}
	}
	krsort($retVal);
	return $retVal;
}
 
Anzumerken sein auch noch, wenn es der Mehrsprachigkeit der Homepage dienen soll, dass die bevorzugte Sprache die der Browser zurück gibt nicht zwangsweise auch die bevorzugte Sprache des Users ist (wenn er z.b. in einem Internet-Cafe sitzt).
Daher sollte dem User auch eine manuelle Sprachauswahl ermöglicht werden.
Dazu gibt es hier aber auch schon Themen. ;)
 
Hallo,

diese Funktion ist mir noch zu hoch. :confused: In welcher Variable steht der ermittelte Wert? Konkret, wie kann ich nun die endgültige Browserweiche einrichten?

if $sprache = en ---> seite en.htm

Danke im voraus :)
 
Die genannte Funktion liefert ein Array zurück, dass bei dem Beispielwert:
Code:
Accept-Language: de, de-de, en;q=0.5, fr;q=0.2
wie folgt aufgebaut ist:
PHP:
array (
  1 => 
  array (
    0 => 'de',
    1 => 'de-de',
  ),
  '0.5' => 
  array (
    0 => 'en',
  ),
  '0.2' => 
  array (
    0 => 'fr',
  ),
)
Du kannst also mit array_shift() das Array der Sprachen mit dem höchsten Qualitätswert bekommen.
 
Vielen Dank für die schnelle Antwort! :)

Definitiv Du schwebst in höheren PHP Sphären. ;)

Ich habe mir array_shift() angeschaut und verstanden, dass es den ersten Wert eines Arrays angibt, aber ich kann es nicht real umsetzen. Wäre der erste Wert "immer" der mit der höchsten Priorität für den User? Habe nur Fehlermeldungen erhalten.

Bsp.
echo $retVal[0];

Warning: array_shift() [function.array-shift]: The argument should be an array

Ich stehe auf dem Schlauch wie man die Funktion nun tatsächlich konkret anwendet.

Danke im Voraus!
 
Hallo,

ich hoffe meine Frage war nicht zu amateurhaft und es erbarmt sich jemand und stellt "einfach" ein Beispiel hier hinein, denn anhand dessen kann zumindest ich am besten lernen.

In stiller Hoffnung! ;)
 
Zurück