Start · Sprachen · PHP · Referenz · msgfmt_format

msgfmt_format

Funktion

Formatiert eine Nachricht anhand eines <code>MessageFormatter</code>-Objekts und der übergebenen Werte.

seit PHP 5.3.0 Kategorie: string

Signatur

msgfmt_format(MessageFormatter $formatter, array $values): string|false

Beschreibung

msgfmt_format() ist die prozedurale Variante von MessageFormatter::format() und formatiert eine ICU-Nachricht, indem die Platzhalter im Muster durch die übergebenen Werte ersetzt werden. Das Muster kann Platzhalter in der Form {0}, {name} oder mit Formatierungstypen wie {0, number}, {1, date, short} oder {2, plural, ...} enthalten.

Die Funktion eignet sich besonders für die Internationalisierung (i18n) von Anwendungen, da sie abhängig vom Locale automatisch Zahlen, Daten, Uhrzeiten und Plural-Regeln korrekt formatiert. Dadurch wird eine saubere Trennung von Nachrichtenstruktur und konkreten Werten ermöglicht.

Die Platzhalterwerte werden als indiziertes oder assoziatives Array übergeben. Numerische Schlüssel entsprechen den positionellen Platzhaltern {0}, {1} etc., während bei benannten Platzhaltern String-Schlüssel im Array verwendet werden müssen.

Im Fehlerfall gibt die Funktion false zurück. Mit msgfmt_get_error_code() und msgfmt_get_error_message() lassen sich dann Details zum aufgetretenen Fehler ermitteln.

Parameter

Name Typ Default Beschreibung
$formatter Pflicht MessageFormatter Ein zuvor mit msgfmt_create() oder new MessageFormatter() erzeugtes MessageFormatter-Objekt, das Locale und Muster bereits enthält.
$values Pflicht array Assoziatives oder indiziertes Array mit den Werten, die in die Platzhalter des Musters eingesetzt werden. Numerische Schlüssel entsprechen {0}, {1} usw.; String-Schlüssel werden für benannte Platzhalter wie {name} verwendet.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den formatierten Nachrichtenstring zurück. Im Fehlerfall (z. B. bei falschen Werttypen oder einem ungültigen Muster) wird false zurückgegeben.

Beispiele

Einfache Nachricht mit Zahl und Datum formatieren

<?php
$fmt = msgfmt_create('de_DE', '{0} hat am {1, date, long} {2, number} Punkte erreicht.');
$result = msgfmt_format($fmt, ['Anna', mktime(0, 0, 0, 6, 15, 2024), 4200]);
echo $result;
Anna hat am 15. Juni 2024 4.200 Punkte erreicht.

Pluralformen mit benannten Platzhaltern

<?php
$pattern = '{count, plural,
    =0    {Keine Nachrichten}
    one   {Eine Nachricht}
    other {# Nachrichten}
} vorhanden.';

$fmt = msgfmt_create('de_DE', $pattern);

foreach ([0, 1, 5] as $count) {
    echo msgfmt_format($fmt, ['count' => $count]) . PHP_EOL;
}
Keine Nachrichten vorhanden. Eine Nachricht vorhanden. 5 Nachrichten vorhanden.

Fehlerbehandlung bei ungültigem Wert

<?php
$fmt = msgfmt_create('en_US', 'The value is {0, number}.');
$result = msgfmt_format($fmt, ['not-a-number']);

if ($result === false) {
    echo 'Fehler: ' . msgfmt_get_error_message($fmt);
} else {
    echo $result;
}
Fehler: Formatting failed: U_ILLEGAL_ARGUMENT_ERROR

// Wichtig · Fallstricke

Voraussetzung: Die intl-Extension muss aktiviert sein (extension=intl in der php.ini). Die ICU-Bibliotheksversion beeinflusst, welche Formate und Plural-Regeln unterstützt werden.

Locale-Abhängigkeit: Trennzeichen für Zahlen, Datumsformate und Pluralregeln werden vollständig durch das beim Erstellen des MessageFormatter-Objekts angegebene Locale gesteuert. Stelle sicher, dass das gewünschte Locale auf dem Server installiert ist.

Typsicherheit: Wenn das Muster einen numerischen Platzhalter ({0, number}) erwartet, muss der übergebene Wert numerisch sein, sonst schlägt die Formatierung fehl und gibt false zurück.