Signatur
Beschreibung
locale_set_default() legt das Standard-Locale fest, das von allen Funktionen der Intl-Erweiterung verwendet wird, wenn kein explizites Locale übergeben wird. Das gesetzte Locale bleibt für die Dauer des aktuellen Skript-Aufrufs gültig.
Diese Funktion ist der prozedurale Äquivalent zur Methode Locale::setDefault(). Sie ist besonders nützlich in Anwendungen, die eine globale Locale-Einstellung benötigen – etwa bei der Formatierung von Zahlen, Datumswerten oder beim Sortieren von Zeichenketten über Collator.
Das Locale wird als BCP 47-konformer Sprach-Tag-String übergeben, z. B. de_DE, en_US oder fr_CH. ICU normalisiert den übergebenen Wert intern, sodass Abweichungen in Schreibweise toleriert werden.
Zu beachten ist, dass diese Einstellung ausschließlich die Intl-Erweiterung beeinflusst und keine Auswirkungen auf setlocale(), die POSIX-Locale oder andere PHP-Funktionen hat.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $locale Pflicht | string | Ein BCP 47-kompatibler Locale-Bezeichner, z. B. de_DE, en_US oder zh_Hans_CN. Ein leerer String setzt das Locale auf den ICU-Standard zurück. |
Rückgabewert
true zurück, wenn das Locale erfolgreich gesetzt wurde, andernfalls false.Beispiele
Standard-Locale setzen und Zahl formatieren
<?php
// Standard-Locale auf Deutsch (Deutschland) setzen
$success = locale_set_default('de_DE');
var_dump($success);
// Aktuelles Standard-Locale auslesen
echo locale_get_default() . PHP_EOL;
// NumberFormatter verwendet automatisch das gesetzte Standard-Locale
$formatter = new NumberFormatter(locale_get_default(), NumberFormatter::DECIMAL);
echo $formatter->format(1234567.89) . PHP_EOL;
Locale für Datumsformatierung wechseln
<?php
// Locale auf Französisch (Schweiz) setzen
locale_set_default('fr_CH');
$formatter = new IntlDateFormatter(
locale_get_default(),
IntlDateFormatter::LONG,
IntlDateFormatter::NONE
);
echo $formatter->format(mktime(0, 0, 0, 12, 24, 2024)) . PHP_EOL;
// Locale auf US-Englisch wechseln
locale_set_default('en_US');
$formatter2 = new IntlDateFormatter(
locale_get_default(),
IntlDateFormatter::LONG,
IntlDateFormatter::NONE
);
echo $formatter2->format(mktime(0, 0, 0, 12, 24, 2024)) . PHP_EOL;
// Wichtig · Fallstricke
Geltungsbereich: Das mit locale_set_default() gesetzte Locale betrifft ausschließlich die Intl-Erweiterung. PHP-Funktionen wie strftime(), number_format() oder money_format() reagieren darauf nicht – für diese ist weiterhin setlocale() zuständig.
Thread-Sicherheit: In multi-threaded Server-Umgebungen (z. B. Apache mit PHP als Modul) gilt das gesetzte Locale nur für den aktuellen Request, da PHP-Anfragen in separaten Threads verarbeitet werden. Dennoch sollte das Setzen des Locales stets früh im Skript erfolgen, um unerwartetes Verhalten zu vermeiden.
Ungültige Locales: Wird ein nicht erkannter Locale-String übergeben, gibt die Funktion false zurück. ICU-normalisierte Kurzformen (z. B. de statt de_DE) sind ebenfalls gültig.