Signatur
Beschreibung
msgfmt_set_pattern() ersetzt das aktuell im MessageFormatter-Objekt gespeicherte Muster durch ein neues ICU-Muster. Das Muster bestimmt, wie Argumente in die formatierte Zeichenkette eingebettet werden – etwa Zahlen, Datumsangaben, Auswahlen oder Plural-Regeln.
Die Funktion ist die prozedurale Variante von MessageFormatter::setPattern(). Sie ist besonders nützlich, wenn ein bereits erzeugter Formatter dynamisch angepasst werden soll, ohne ein neues Objekt anlegen zu müssen.
Das Muster folgt der ICU MessageFormat-Syntax, in der Platzhalter wie {0}, {name, number} oder {count, plural, one {# Artikel} other {# Artikel}} verwendet werden können.
Schlägt das Setzen fehl – z. B. wegen eines syntaktisch ungültigen Musters –, gibt die Funktion false zurück. Zur Fehlerdiagnose kann msgfmt_get_error_message() herangezogen werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $formatter Pflicht | MessageFormatter | Das MessageFormatter-Objekt, dessen Muster ersetzt werden soll. Wird mit msgfmt_create() oder new MessageFormatter() erzeugt. |
|
| $pattern Pflicht | string | Das neue ICU-MessageFormat-Muster als Zeichenkette. Platzhalter wie {0} oder benannte Argumente wie {name} sind erlaubt. Das Muster muss syntaktisch gültig sein. |
Rückgabewert
true zurück, wenn das Muster erfolgreich gesetzt wurde, andernfalls false. Im Fehlerfall liefert msgfmt_get_error_message($formatter) eine Fehlerbeschreibung.Beispiele
Einfaches Ersetzen eines bestehenden Musters
<?php
$fmt = msgfmt_create('de_DE', '{0} hat {1} Nachrichten.');
// Muster ersetzen
$success = msgfmt_set_pattern($fmt, '{0} hat {1, number} neue Nachrichten.');
if ($success) {
echo msgfmt_format($fmt, ['Anna', 5]);
} else {
echo 'Fehler: ' . msgfmt_get_error_message($fmt);
}
Plural-Muster dynamisch setzen
<?php
$fmt = msgfmt_create('de_DE', '{count} Element.');
// Muster mit Plural-Regel ersetzen
msgfmt_set_pattern(
$fmt,
'{count, plural, one {# Element gefunden} other {# Elemente gefunden}}'
);
echo msgfmt_format($fmt, ['count' => 1]) . PHP_EOL;
echo msgfmt_format($fmt, ['count' => 7]) . PHP_EOL;
// Wichtig · Fallstricke
Syntaxfehler: Ein ungültiges ICU-Muster führt dazu, dass msgfmt_set_pattern() false zurückgibt, ohne eine PHP-Warnung auszulösen. Der Fehlerstatus sollte daher immer explizit geprüft werden.
Locale-Abhängigkeit: Das Muster wird im Kontext des beim Erstellen des Formatters festgelegten Locale interpretiert. Plural-Regeln, Zahlenformate und Datumsangaben richten sich nach dieser Spracheinstellung.
OOP-Äquivalent: Die objektorientierte Entsprechung ist MessageFormatter::setPattern(string $pattern): bool.