Start · Sprachen · PHP · Referenz · locale_canonicalize

locale_canonicalize

Funktion

Kanonisiert einen Locale-String und gibt die normalisierte, standardkonforme Darstellung zurück.

seit PHP 5.3.0 Kategorie: string

Signatur

locale_canonicalize(string $locale): string|false

Beschreibung

locale_canonicalize() normalisiert einen Locale-Bezeichner (z. B. de_de, EN-US oder fr_FR.UTF-8) in seine kanonische Form gemäß dem CLDR/ICU-Standard. Das Ergebnis ist ein wohlgeformter BCP-47-ähnlicher String wie z. B. de_DE oder en_US.

Die Funktion ist besonders nützlich, wenn Locale-Angaben aus Benutzereingaben, HTTP-Headern (Accept-Language) oder Konfigurationsdateien stammen und in einem einheitlichen Format verarbeitet werden sollen. Sie gleicht Groß-/Kleinschreibungsfehler aus und entfernt oder normalisiert ungültige Bestandteile.

Die Funktion ist der prozedurale Gegenstück zur Methode Locale::canonicalize() der Intl-Extension. Sie steht nur zur Verfügung, wenn die PHP-Extension intl installiert und aktiviert ist.

Wenn ein leerer String oder null übergeben wird, gibt die Funktion false zurück. Ungültige, aber parsierbare Locale-Strings werden so weit wie möglich normiert.

Parameter

Name Typ Default Beschreibung
$locale Pflicht string Der zu kanonisierende Locale-String, z. B. de_de, EN_us oder fr-FR.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den kanonisierten Locale-String zurück (z. B. de_DE) oder false, wenn der übergebene String leer ist oder nicht verarbeitet werden konnte.

Beispiele

Einfache Kanonisierung verschiedener Locale-Varianten

<?php
// Verschiedene Schreibweisen desselben Locale normalisieren
$locales = [
    'de_de',
    'EN-US',
    'fr_FR.UTF-8',
    'ZH_hans_cn',
];

foreach ($locales as $locale) {
    $canonical = locale_canonicalize($locale);
    echo "Original: $locale => Kanonisch: $canonical\n";
}
Original: de_de => Kanonisch: de_DE Original: EN-US => Kanonisch: en_US Original: fr_FR.UTF-8 => Kanonisch: fr_FR Original: ZH_hans_cn => Kanonisch: zh_Hans_CN

Normalisierung von Accept-Language-Headern

<?php
// Simulierte Eingabe aus einem HTTP-Accept-Language-Header
$raw = 'de-at';

$canonical = locale_canonicalize($raw);
if ($canonical !== false) {
    echo "Normalisiertes Locale: $canonical\n";
    // Weiterverwendung z. B. beim Setzen des Standard-Locale
    locale_set_default($canonical);
    echo "Standard-Locale gesetzt: " . locale_get_default() . "\n";
} else {
    echo "Ungültiges Locale angegeben.\n";
}
Normalisiertes Locale: de_AT Standard-Locale gesetzt: de_AT

// Wichtig · Fallstricke

Voraussetzung: Die PHP-Extension intl muss installiert und aktiviert sein (extension=intl in der php.ini). Andernfalls ist die Funktion nicht verfügbar.

Ein leerer String als Argument führt zu false. Prüfe daher stets den Rückgabewert, bevor du das Ergebnis weiterverwendest.

Die Kanonisierung folgt den Regeln der ICU-Bibliothek und kann sich je nach installierten ICU-Version leicht unterschiedlich verhalten. Teste daher bei Versionsupgrades das Verhalten kritischer Locale-Strings.