Signatur
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
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";
}
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";
}
// 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.