Sie haben JavaScript deaktiviert. Vermutlich sind Sie ein Kollege und wollen nur sehen, ob meine Website auch ohne JavaScript funktioniert.
Andernfalls: Bitte aktivieren Sie JavaScript!
Hinweis:
Dieser Artikel ist älter als 18 Monate / wurde seit 18 Monaten nicht aktualisiert. Dies kann (muss aber nicht) dazu führen, dass der Artikel, und / oder darin beschriebene Techniken, nicht mehr aktuell sind. Bitte berücksichtigen Sie diesen Hinweis bei der Lektüre.
Wer seine Webpräsenz für eine internationale Zielgruppe erstellt, wird seine Seiten möglicherweise in mehreren Sprachen anbieten. Üblicherweise gibt es für diesen Zweck gleich am Seitenanfang entsprechende Links zu den angebotenen Sprachen, häufig in Form von Flaggen-Icons.
Die Möglichkeit zur Umschaltung sollte auf jeder einzelnen Seite angeboten werden (Besucher kommen u. U. über sog. deep links auf die Seite); und selbstverständlich sollte die getroffene Wahl im Browser gespeichert werden, z. B. per Cookie.
Wünschenswert wäre es nun, dass der Besucher beim erstmaligen Besuch der Site gleich die Sprache seiner Wahl vorfindet. Möglich wird dies, indem man per PHP die im Browser des Besuchers eingestellte bevorzugte Sprache auswählt.
Your browser prefers to read in the following language: English.
Abhängig von obigem Statement – die Sprache wurde per PHP automatisch ausgelesen – kann man nun mit verschiedenen Techniken – z. B. mittels PHP – dem Leser den Inhalt in seiner Sprache anbieten.
Da die automatische Spracherkennung aber nicht in allen Fällen dem Wunsch des Lesers entspricht – Beispiel: Internet Café – muss auf jeden Fall noch eine manuelle Auswahl angeboten werden. Und diese manuelle Auswahl muss natürlich die automatische Auswahl überschreiben.
Wer die Spracherkennung selbst ausprobieren will, kann dazu in seinem Browser eine andere Standardsprache einstellen.
Wichtig:
/**
* Browsersprache ermitteln
*
* @param array allowed languages
* @param string default language
* @param mixed requested language (null = server default)
* @param bool strict mode (default true)
* @return string result language
*/
function lang_getfrombrowser ($allowed_languages, $default_language, $lang_variable = null, $strict_mode = true) {
// $_SERVER['HTTP_ACCEPT_LANGUAGE'] verwenden, wenn keine Sprachvariable mitgegeben wurde
if ($lang_variable === null) {
$lang_variable = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
}
// wurde irgendwelche Information mitgeschickt?
if (empty($lang_variable)) {
// Nein? => Standardsprache zurückgeben
return $default_language;
}
// Den Header auftrennen
$accepted_languages = preg_split('/,\s*/', $lang_variable);
// Die Standardwerte einstellen
$current_lang = $default_language;
$current_q = 0;
// Nun alle mitgegebenen Sprachen abarbeiten
foreach ($accepted_languages as $accepted_language) {
// 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',
$accepted_language,
$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)), $allowed_languages)) {
// Qualität anschauen
if ($lang_quality > $current_q) {
// diese Sprache verwenden
$current_lang = strtolower (join ('-', $lang_code));
$current_q = $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 $current_lang;
}
$allowed_langs = array ('en', 'fr', 'de');
$lang = lang_getfrombrowser ($allowed_langs, 'de', null, false);
Danke an wiki.selfhtml.org für das PHP-Script.
Artikeltexte und Code-Snippets: Creative Commons CC BY-SA 4.0
Medien (Bilder, Videos, Audios) sind evtl. urheberrechtlich geschützt.
Über Ihren Kommentar zu diesem Artikel freue ich mich.
Wenn Sie aber Fragen haben, und eine Antwort erwarten, nutzen Sie bitte das Supportforum! Die Nutzung des Forums ist auch ohne Registrierung möglich.
Frank schrieb am Donnerstag, 16.07.20 11:39 Uhr:
DAAAANKE... Sehr nützlich. Das habe ich gesucht.