Signatur
Beschreibung
locale_get_primary_language() extrahiert den ersten und wichtigsten Bestandteil eines Locale-Tags gemäß dem IETF BCP 47-Standard: den zweistelligen ISO 639-1- oder dreistelligen ISO 639-2/3-Sprachcode. Ein typischer Locale-String wie de_AT, zh-Hans-CN oder en_US enthält stets diesen primären Sprach-Subtag als erstes Element.
Die Funktion ist die prozedurale Entsprechung zu Locale::getPrimaryLanguage() aus der Intl-Extension und verarbeitet sowohl Unterstriche als auch Bindestriche als Trennzeichen. Sie eignet sich besonders dann, wenn man aus einem vollständigen Locale-String lediglich den Sprachanteil benötigt, z. B. um Inhalte sprachabhängig zu laden oder Übersetzungsdateien auszuwählen.
Ist der übergebene Locale-String leer (''), wird das systemweite Standard-Locale (aus Locale::getDefault()) verwendet. Ist der String syntaktisch ungültig oder enthält keinen erkennbaren Sprach-Subtag, gibt die Funktion false zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $locale Pflicht | string | Ein Locale-String nach IETF BCP 47, z. B. de_AT, en-US oder zh_Hans_CN. Ein leerer String verwendet das Standard-Locale. |
Rückgabewert
'de', 'en', 'zh'), oder false, wenn kein gültiger Sprach-Subtag gefunden wurde.Beispiele
Primärsprache aus einfachen Locale-Strings ermitteln
<?php
// Einfache Beispiele mit verschiedenen Locale-Formaten
$locales = [
'de_AT',
'en-US',
'zh_Hans_CN',
'fr',
'pt_BR',
];
foreach ($locales as $locale) {
$lang = locale_get_primary_language($locale);
echo "Locale: {$locale} => Primärsprache: {$lang}\n";
}
Sprachabhängige Übersetzungsdatei laden
<?php
// Sprache aus dem Accept-Language-Header des Browsers ermitteln
$acceptLanguage = $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? 'en_US';
// Bestes passendes Locale ermitteln
$locale = locale_accept_from_http($acceptLanguage);
// Primärsprache extrahieren
$lang = locale_get_primary_language($locale);
if ($lang === false) {
$lang = 'en'; // Fallback
}
// Passende Übersetzungsdatei laden
$translationFile = __DIR__ . "/lang/{$lang}.php";
if (file_exists($translationFile)) {
$translations = require $translationFile;
echo "Übersetzungsdatei für '{$lang}' geladen.\n";
} else {
echo "Keine Übersetzung für '{$lang}' gefunden, verwende Fallback.\n";
}
// Wichtig · Fallstricke
Intl-Extension erforderlich: locale_get_primary_language() ist Teil der Intl-Extension (ext-intl), die auf dem Server aktiviert sein muss. Sie ist standardmäßig nicht immer verfügbar — prüfen Sie dies mit extension_loaded('intl').
Die Funktion ist vollständig äquivalent zu Locale::getPrimaryLanguage($locale) (OOP-Stil). Beide Schreibweisen liefern identische Ergebnisse.
Beachten Sie, dass der zurückgegebene Sprach-Code in Kleinbuchstaben vorliegt und direkt zur Auswahl von Ressourcen oder als Schlüssel in Übersetzungsarrays verwendet werden kann. Eine Normalisierung ist in der Regel nicht notwendig.