Start · Sprachen · PHP · Referenz · locale_get_primary_language

locale_get_primary_language

Funktion

Liefert den primären Sprach-Subtag (z. B. <code>de</code>, <code>en</code>) aus einem IETF-Locale-String.

seit PHP 5.3.0 Kategorie: string

Signatur

locale_get_primary_language(string $locale): string|false

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

Typ
string|false
Beschreibung
Der primäre Sprach-Subtag als Zeichenkette (z. B. '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";
}
Locale: de_AT => Primärsprache: de Locale: en-US => Primärsprache: en Locale: zh_Hans_CN => Primärsprache: zh Locale: fr => Primärsprache: fr Locale: pt_BR => Primärsprache: pt

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.