Start · Sprachen · PHP · Referenz · msgfmt_create

msgfmt_create

Funktion

Erstellt einen neuen <code>MessageFormatter</code>-Objekt für die Formatierung von lokalisierten Nachrichten nach dem ICU-Standard.

seit PHP 5.3.0 Kategorie: string

Signatur

msgfmt_create(string $locale, string $pattern): MessageFormatter|false

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

Typ
MessageFormatter|false
Beschreibung
Gibt ein 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();
}
Hallo Maria, du hast 5 neue Nachrichten.

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;
}
Keine Nachrichten. Eine Nachricht. 3 Nachrichten.

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]);
}
Am 15. Juni 2024 kostet das Produkt 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.