Signatur
Beschreibung
msgfmt_parse_message() ist die prozedurale Variante der Methode MessageFormatter::parseMessage(). Sie erstellt intern ein temporäres MessageFormatter-Objekt für das angegebene Locale und Muster und parst den übergebenen String, ohne dass ein dauerhaftes Objekt erzeugt werden muss.
Die Funktion analysiert den formatierten $message-String anhand des ICU-MessageFormat-Musters $pattern und extrahiert die darin enthaltenen Platzhalterwerte. Das Ergebnis ist ein numerisch indiziertes Array mit den geparsten Werten in der Reihenfolge, wie sie im Muster definiert sind.
Typische Anwendungsfälle sind das Dekodieren von lokalisierten Nachrichten, bei denen Werte wie Zahlen, Währungen oder Datumsangaben aus einem bereits formatierten Text wieder herausgelöst werden sollen – zum Beispiel zum Testen, zur Validierung oder zur Weiterverarbeitung von lokalisierten Datenausgaben.
Zu beachten ist, dass das Parsen nur für einfache Muster zuverlässig funktioniert. Komplexe Muster mit Pluralregeln oder verschachtelten Ausdrücken werden möglicherweise nicht korrekt geparst.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $locale Pflicht | string | Das Locale (z. B. 'de_DE' oder 'en_US'), das für den Parsvorgang verwendet wird. Beeinflusst die Interpretation von Zahlen, Datumsangaben und anderen formatierten Werten. |
|
| $pattern Pflicht | string | Das ICU-MessageFormat-Muster, das die Struktur der zu parsenden Nachricht beschreibt, z. B. '{0} hat {1} Äpfel.'. |
|
| $message Pflicht | string | Der formatierte String, der geparst werden soll. Er muss strukturell zum $pattern passen, damit die Extraktion der Werte gelingt. |
Rückgabewert
false zurückgegeben.Beispiele
Einfaches Parsen einer lokalisierten Nachricht
<?php
$locale = 'de_DE';
$pattern = '{0} hat {1} Äpfel gekauft.';
$message = 'Anna hat 5 Äpfel gekauft.';
$result = msgfmt_parse_message($locale, $pattern, $message);
if ($result !== false) {
echo 'Name: ' . $result[0] . PHP_EOL;
echo 'Anzahl: ' . $result[1] . PHP_EOL;
} else {
echo 'Parsen fehlgeschlagen.';
}
Parsen einer Zahl mit Locale-spezifischer Formatierung
<?php
$locale = 'de_DE';
$pattern = 'Der Preis beträgt {0, number} Euro.';
$message = 'Der Preis beträgt 1.234 Euro.';
$result = msgfmt_parse_message($locale, $pattern, $message);
if ($result !== false) {
var_dump($result[0]);
} else {
echo 'Parsen fehlgeschlagen.';
}
Fehlerbehandlung bei nicht passendem String
<?php
$locale = 'en_US';
$pattern = 'Hello, {0}! You have {1, number} messages.';
$message = 'Completely unrelated text.';
$result = msgfmt_parse_message($locale, $pattern, $message);
if ($result === false) {
echo 'Parsen fehlgeschlagen: String passt nicht zum Muster.';
}
// Wichtig · Fallstricke
Einschränkungen beim Parsen: Das ICU-MessageFormat-Parsen ist inhärent mehrdeutig. Wenn Muster keinen klar abgrenzbaren Trenntext zwischen Platzhaltern enthalten, kann das Ergebnis unvorhersehbar sein oder fehlschlagen. Einfache Muster mit eindeutigen Trennzeichen funktionieren am zuverlässigsten.
Komplexe Muster: Muster mit select-, plural- oder verschachtelten Strukturen werden beim Parsen möglicherweise nicht korrekt verarbeitet, da ICU das Rückparsen solcher Konstrukte nicht vollständig unterstützt.
Erweiterung erforderlich: Die Funktion gehört zur intl-Erweiterung, die beim PHP-Build aktiviert sein muss. Überprüfe mit extension_loaded('intl'), ob sie verfügbar ist.