Signatur
Beschreibung
msgfmt_create() ist die prozedurale Variante des MessageFormatter-Konstruktors und erzeugt ein neues Formatter-Objekt, das auf dem ICU Message Format basiert. Damit lassen sich Zeichenketten mit Platzhaltern für Zahlen, Daten, Zeiten und Pluralformen in einer sprachsensitiven Weise formatieren.
Der Locale-Parameter (z. B. 'de_DE', 'en_US') legt fest, welche Sprachregion für die Formatierung von Zahlen, Währungen oder Datumsangaben verwendet wird. Der Pattern-Parameter enthält die Nachrichtenvorlage im ICU-Format mit Platzhaltern wie {0}, {name} oder komplexen Ausdrücken für Pluralregeln.
Typische Anwendungsfälle sind die Internationalisierung (i18n) von Webanwendungen, bei denen Texte je nach Benutzersprache unterschiedlich strukturiert sein müssen – etwa Pluralformen im Englischen (1 item vs. 2 items) oder im Deutschen (1 Artikel vs. 2 Artikel).
Die Funktion ist Teil der intl-Erweiterung, die in PHP 5.3+ standardmäßig verfügbar ist, aber je nach Server-Konfiguration aktiviert werden muss. Das zurückgegebene Objekt kann danach mit msgfmt_format() oder der Methode MessageFormatter::format() verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $locale Pflicht | string | Die Locale-Kennung (z. B. 'de_DE', 'en_US'), die die Sprach- und Regionaleinstellungen für die Formatierung bestimmt. |
|
| $pattern Pflicht | string | Die Nachrichtenvorlage im ICU Message Format. Platzhalter werden als {0}, {1} oder mit Namen wie {name} angegeben. Unterstützt auch komplexe Konstrukte wie Pluralregeln (plural), Auswahlen (select) und Datumsformate. |
Rückgabewert
MessageFormatter-Objekt zurück, das für die spätere Formatierung verwendet werden kann. Bei einem Fehler (z. B. ungültiges Pattern oder unbekannte Locale) wird false zurückgegeben. Fehlermeldungen können mit intl_get_error_message() abgerufen werden.Beispiele
Einfache Nachricht mit positionellen Platzhaltern
<?php
$fmt = msgfmt_create('de_DE', 'Hallo {0}, du hast {1} neue Nachrichten.');
if ($fmt !== false) {
$result = msgfmt_format($fmt, ['Maria', 5]);
echo $result;
} else {
echo 'Fehler: ' . intl_get_error_message();
}
Pluralformen mit ICU-Pattern
<?php
$pattern = '{count, plural,
=0 {Keine Nachrichten.}
one {Eine Nachricht.}
other {# Nachrichten.}
}';
$fmt = msgfmt_create('de_DE', $pattern);
foreach ([0, 1, 3] as $count) {
echo msgfmt_format($fmt, ['count' => $count]) . PHP_EOL;
}
Datum und Zahl lokalisiert formatieren
<?php
$pattern = 'Am {0, date, long} kostet das Produkt {1, number, currency}.';
$fmt = msgfmt_create('de_DE', $pattern);
if ($fmt !== false) {
echo msgfmt_format($fmt, [mktime(0, 0, 0, 6, 15, 2024), 49.99]);
}
// Wichtig · Fallstricke
Voraussetzung: Die intl-Erweiterung muss in der php.ini aktiviert sein (extension=intl). Ohne diese Erweiterung ist die Funktion nicht verfügbar und führt zu einem fatalen Fehler.
Pattern-Syntaxfehler: Ein fehlerhaftes ICU-Pattern führt dazu, dass msgfmt_create() false zurückgibt. Fehlerdetails sind über intl_get_error_message() und intl_get_error_code() abrufbar.
OOP-Alternative: Statt der prozeduralen Funktion kann auch der Konstruktor new MessageFormatter($locale, $pattern) verwendet werden; beide sind funktional äquivalent.
ICU-Version: Das Verhalten bestimmter Pattern (insbesondere für Währungen und Datumsformate) kann je nach installierter ICU-Bibliotheksversion leicht abweichen.