Ahoi fastix®,
Wir testen, ob Sprache gesetzt ist, ansonsten setzten wir diese auf deutsch:
if (!isset($_GET['lang']) {
$_GET['lang']='de';
}
Also ich hab das ganze etwas "genauer" bei einem von mir erstellten
projekt und setzt nicht gleich automatisch auf deutsch. allerdings
gings bei mir um deutsch/französisch statt deutsch/englisch, kann man
ja aber anpassen.
~~~php
if(isset($_GET['lang']))
{
if($_GET['lang'] == "de" || $_GET['lang'] == "fr")
{
$anzeige_sprache = $_GET['lang'];
}
else
{
$suchsprachen = array ('de', 'fr');
$anzeige_sprache = lang_getfrombrowser ($suchsprachen, 'de', null, false);
}
}
else
{
$suchsprachen = array ('de', 'fr');
$anzeige_sprache = lang_getfrombrowser ($suchsprachen, 'de', null, false);
}
// Browsersprache ermitteln
function lang_getfrombrowser ($sprachen_array, $stnd_sprache, $sprachen_variable = null, $strict_mode = true)
{
// $_SERVER['HTTP_ACCEPT_LANGUAGE'] verwenden, wenn keine Sprachvariable mitgegeben wurde
if ($sprachen_variable === null)
{
$sprachen_variable = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
}
// wurde irgendwelche Information mitgeschickt?
if (empty($sprachen_variable))
{
// Nein? => Standardsprache zurückgeben
return $stnd_sprache;
}
// Den Header auftrennen
$aktezptierte_sprachen = preg_split('/,\s*/', $sprachen_variable);
// Die Standardwerte einstellen
$akt_sprache = $stnd_sprache;
$akt_quality = 0;
// Nun alle mitgegebenen Sprachen abarbeiten
foreach ($aktezptierte_sprachen as $aktzepiterte_sprache)
{
// Alle Infos über diese Sprache rausholen
$res = preg_match ('/^([a-z]{1,8}(?:-[a-z]{1,8})*)'.
'(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i', $aktzepiterte_sprache, $matches);
// war die Syntax gültig?
if (!$res)
{
// Nein? Dann ignorieren
continue;
}
// Sprachcode holen und dann sofort in die Einzelteile trennen
$lang_code = explode ('-', $matches[1]);
// Wurde eine Qualität mitgegeben?
if (isset($matches[2]))
{
// die Qualität benutzen
$lang_quality = (float)$matches[2];
}
else
{
// Kompabilitätsmodus: Qualität 1 annehmen
$lang_quality = 1.0;
}
// Bis der Sprachcode leer ist...
while (count ($lang_code))
{
// mal sehen, ob der Sprachcode angeboten wird
if (in_array (strtolower (join ('-', $lang_code)), $sprachen_array))
{
// Qualität anschauen
if ($lang_quality > $akt_quality)
{
// diese Sprache verwenden
$akt_sprache = strtolower (join ('-', $lang_code));
$akt_quality = $lang_quality;
// Hier die innere while-Schleife verlassen
break;
}
}
// Wenn wir im strengen Modus sind, die Sprache nicht versuchen zu minimalisieren
if ($strict_mode)
{
// innere While-Schleife aufbrechen
break;
}
// den rechtesten Teil des Sprachcodes abschneiden
array_pop ($lang_code);
}
}
// die gefundene Sprache zurückgeben
return $akt_sprache;
}
MfG
--
Alle Angaben wie immer ohne Gewähr
LEISE IST SCHEISSE!
Alle Angaben wie immer ohne Gewähr
LEISE IST SCHEISSE!