Start · Sprachen · PHP · Referenz · locale_set_default

locale_set_default

Funktion

Setzt das Standard-Locale für alle nachfolgenden Intl-Operationen zur Laufzeit.

seit PHP 5.3.0 Kategorie: string

Signatur

locale_set_default(string $locale): bool

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

Typ
bool
Beschreibung
Gibt 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;
bool(true) de_DE 1.234.567,89

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;
24 décembre 2024 December 24, 2024

// 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.