Argumentzeichenkette

Mit den Klassen ArgumentText und MessageArgumentFormatter lassen sich Texte mit integrierter Map anlegen, verwalten und übersetzen.

Eine Argumentzeichenkette hat folgenden Aufbau:

Beschreibungstext mit Platzhaltern::key1=value1::key2=value2
─────────⯆───────────────────────╯
           Textzeile             ╰─⯆─╯           ╰──⯆───╯
                         Trennzeichen ╰─⯆────╯    Zweites
                                       Erstes      Schlüssel/
                                      Schlüssel/   Wert-Paar
                                       Wert-Paar

Über den Schlüssel pluralrulekey kann in der Klasse MessageArgumentFormatter spezifiziert werden, welcher Schlüssel für die Mehrzahlregel verwendet werden soll. Der Schlüssel wird aber nur dann verwendet, wenn in der format Methode kein $pluralRuleKey übergeben wird.

MessageArgumentFormatter

Die Klasse MessageArgumentFormatter erlaubt es schnell, einfach und sicher eine Argumentzeichenkette zusammenzustellen. Diese kann dann zum Beispiel im Zusammenhang mit Localen oder Exceptions verwendet werden.

$text = (new \Alvine\Text\ArgumentText('Das ist ein Test'))->setValue('a','b');
echo (string) $text;
// ⇢ Das ist ein Test::a=b

ArgumentText

Außerdem bietet die Klasse ArgumentText die Vorlage für die Verwendung mit dem MessageArgumentFormatter. In diesem Beispiel wird eine Nachricht erstellt und in der Zeichenkette die Argumente mitgegeben.

$text=(new \Alvine\Text\ArgumentText('Meine {key} Meldung'))
    ->setValue('key', 'erste');

echo (string) $text;
// ⇢ Meine {key} Meldung::key=erste

echo (new \Alvine\Text\MessageArgumentFormatter())->format($text);
// ⇢ Meine erste Meldung

Ein wichtiges Einsatzgebiet sind Fehlermeldungen. Hier können die Meldungen mit den Argumenten gespeichert werden.

try {
    // Fehler tritt auf
    throw new Exception('Kein freier Speicherplatz');
} catch(\Exception $ex) {
    $message="Es ist der Fehler '{error}' aufgetreten.::error=".$ex->getMessage();
}

echo (new \Alvine\Text\MessageArgumentFormatter())->format($message);
// ⇢ Es ist der Fehler 'Kein freier Speicherplatz' aufgetreten.