Signatur
Beschreibung
locale_accept_from_http() analysiert den Wert des HTTP-Headers Accept-Language und gibt das beste passende Locale als IETF-Sprach-Tag (z. B. de_DE) zurück. Die Funktion ist ein prozeduraler Alias von Locale::acceptFromHttp() aus der intl-Extension.
Typischerweise wird der Header-Wert aus $_SERVER['HTTP_ACCEPT_LANGUAGE'] entnommen. Der Browser sendet darin eine priorisierte Liste bevorzugter Sprachen (z. B. de-DE,de;q=0.9,en-US;q=0.8). Die Funktion wertet die q-Gewichtungen aus und gibt das am höchsten priorisierte, syntaktisch gültige Locale zurück.
Der Rückgabewert kann anschließend mit locale_set_default() als Standard-Locale gesetzt oder für die Auswahl von Übersetzungsdateien genutzt werden. Dies ist der empfohlene Weg, um die Sprache einer Webanwendung automatisch an die Browser-Einstellungen des Nutzers anzupassen.
Die Funktion erfordert die PHP-Extension intl (ICU-basiert) und ist nicht ohne diese verfügbar. Sie validiert den Header-Wert nach RFC 4647 und gibt false zurück, wenn der übergebene String kein gültiger Accept-Language-Wert ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $header Pflicht | string | Der vollständige Wert des HTTP-Headers Accept-Language, z. B. aus $_SERVER['HTTP_ACCEPT_LANGUAGE']. Muss einem gültigen RFC-4647-Format entsprechen, andernfalls wird false zurückgegeben. |
Rückgabewert
de_DE, en_US) zurück. Gibt false zurück, wenn der übergebene Header-Wert ungültig ist oder kein Locale ermittelt werden konnte.Beispiele
Sprache aus Browser-Header automatisch ermitteln
<?php
// Typische Verwendung: Browser-Sprache aus dem HTTP-Request auslesen
$acceptLanguage = $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? 'en-US';
$locale = locale_accept_from_http($acceptLanguage);
if ($locale !== false) {
locale_set_default($locale);
echo 'Erkanntes Locale: ' . $locale;
} else {
echo 'Kein gültiges Locale gefunden, Fallback wird verwendet.';
locale_set_default('de_DE');
}
Übersetzungsdatei anhand des ermittelten Locales laden
<?php
// Accept-Language-Header mit mehreren Sprachen und Gewichtungen
$header = 'fr-CH, fr;q=0.9, de;q=0.8, en;q=0.7';
$locale = locale_accept_from_http($header);
if ($locale !== false) {
$language = locale_get_primary_language($locale);
$translationFile = __DIR__ . '/lang/' . $language . '.php';
if (file_exists($translationFile)) {
require $translationFile;
echo 'Übersetzungsdatei geladen: ' . $language . '.php';
} else {
echo 'Keine Übersetzung für: ' . $locale . ', nutze Standard.';
}
} else {
echo 'Ungültiger Accept-Language-Header.';
}
// Wichtig · Fallstricke
Sicherheitshinweis: Der Wert von $_SERVER['HTTP_ACCEPT_LANGUAGE'] stammt direkt vom Client und ist grundsätzlich nicht vertrauenswürdig. Er sollte niemals ungeprüft in Dateinamen, Datenbankabfragen oder HTML-Ausgaben eingesetzt werden. Der Rückgabewert von locale_accept_from_http() selbst ist durch die ICU-Bibliothek normalisiert und sicher, jedoch sollte der raw Header-Wert niemals direkt weiterverwendet werden.
Die Funktion liefert das erste syntaktisch gültige Locale mit der höchsten Priorität – es prüft nicht, ob die Anwendung dieses Locale tatsächlich unterstützt. Ein eigener Abgleich mit den verfügbaren Sprachen der Anwendung ist daher notwendig.
Die intl-Extension muss aktiviert sein (extension=intl in der php.ini). Fehlt sie, führt der Aufruf zu einem fatalen Fehler.