Start · Sprachen · PHP · Referenz · msgfmt_set_pattern

msgfmt_set_pattern

Funktion

Setzt das Muster (Pattern), das ein <code>MessageFormatter</code>-Objekt zur Formatierung von Nachrichten verwendet.

seit PHP 5.3.0 Kategorie: string

Signatur

msgfmt_set_pattern(MessageFormatter $formatter, string $pattern): bool

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

Typ
bool
Beschreibung
Gibt 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);
}
Anna hat 5 neue Nachrichten.

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;
1 Element gefunden 7 Elemente gefunden

// 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.