Signatur
Beschreibung
datefmt_get_locale() ist die prozedurale Version der Methode IntlDateFormatter::getLocale() und liefert das Locale, das beim Erstellen des Formatters festgelegt wurde oder intern von der ICU-Bibliothek als tatsächliches Locale verwendet wird.
Der optionale Parameter $type steuert, welche Art von Locale zurückgegeben wird: Mit Locale::ACTUAL_LOCALE (Standard) erhält man das tatsächlich von ICU verwendete Locale, während Locale::VALID_LOCALE das gültige, von ICU anerkannte Locale liefert. Diese können voneinander abweichen, wenn das angeforderte Locale nicht vollständig unterstützt wird und ICU auf ein Fallback-Locale zurückfällt.
Die Funktion ist nützlich, wenn man nachträglich überprüfen möchte, welches Locale ein Formatter wirklich verwendet – insbesondere wenn der Formatter mit einem generischen oder ungenauen Locale-String erstellt wurde und man das tatsächlich aktive Locale inspizieren will.
Diese Funktion ist Teil der Intl-Erweiterung und setzt voraus, dass diese in der PHP-Installation verfügbar ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $formatter Pflicht | IntlDateFormatter | Das IntlDateFormatter-Objekt, dessen Locale abgefragt werden soll. |
|
| $type | int | Locale::ACTUAL_LOCALE | Gibt an, welcher Locale-Typ zurückgegeben werden soll. Mögliche Werte: Locale::ACTUAL_LOCALE (tatsächlich von ICU verwendetes Locale) oder Locale::VALID_LOCALE (von ICU als gültig anerkanntes Locale). |
Rückgabewert
'de_DE'), das vom Formatter verwendet wird. Bei einem Fehler wird false zurückgegeben.Beispiele
Locale eines Formatters abfragen
<?php
$formatter = datefmt_create(
'de_DE',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'Europe/Berlin',
IntlDateFormatter::GREGORIAN
);
$locale = datefmt_get_locale($formatter);
echo $locale; // de_DE
Vergleich von ACTUAL_LOCALE und VALID_LOCALE
<?php
$formatter = datefmt_create(
'de_DE_PHONEBOOK',
IntlDateFormatter::LONG,
IntlDateFormatter::LONG,
'Europe/Berlin',
IntlDateFormatter::GREGORIAN
);
$actual = datefmt_get_locale($formatter, Locale::ACTUAL_LOCALE);
$valid = datefmt_get_locale($formatter, Locale::VALID_LOCALE);
echo "Tatsächliches Locale: " . $actual . "\n";
echo "Gültiges Locale: " . $valid . "\n";
OOP-Variante mit IntlDateFormatter::getLocale()
<?php
$formatter = new IntlDateFormatter(
'fr_FR',
IntlDateFormatter::MEDIUM,
IntlDateFormatter::MEDIUM,
'Europe/Paris'
);
// Prozedurale Variante
echo datefmt_get_locale($formatter) . "\n";
// OOP-Variante — gleichwertig
echo $formatter->getLocale() . "\n";
// Wichtig · Fallstricke
Wenn die Intl-Erweiterung nicht installiert oder aktiviert ist, steht diese Funktion nicht zur Verfügung. In diesem Fall wirft PHP einen fatalen Fehler. Stellen Sie sicher, dass die Erweiterung in der php.ini aktiviert ist (extension=intl).
Das zurückgegebene Locale kann vom ursprünglich angegebenen abweichen, wenn ICU das exakte Locale nicht kennt und intern auf ein Fallback zurückgreift. Mit Locale::ACTUAL_LOCALE lässt sich dieses tatsächliche Verhalten transparent machen.