Formater¶
Mit Hilfe der Klasse \Alvine\Text\MessageFormatter
lassen sich sehr einfach Ersetzungen durchführen.
In dem folgenden einfachen Beispiel wird einfach ein Platzhalter ersetzt.
$text="Wir kaufen {n} Autos";
$map=new Alvine\Types\Map();
$map['n']='5';
$f=new \Alvine\Text\MessageFormatter($map);
echo (string) $f->format($text);
// ⇢ Wir kaufen 5 Autos
Soll der Platzhalter nicht ersetzt werden, so können die Sonderzeichen
maskiert werden. Hierzu ist dem Sonderzeichen einfach ein \
voranzustellen.
$text="Wir kaufen \{n\} Autos";
$map=new Alvine\Types\Map();
$map['n']='5';
$f=new \Alvine\Text\MessageFormatter($map);
echo (string) $f->format($text);
// ⇢ Wir kaufen {n} Autos
Die Standardbegrenzer {
und }
können durch beliebige Zeichenketten ersetzt werden. Im folgenden
Beispiel werden diese durch START
und END
ersetzt. Auch hier funktioniert das maskieren der Begrenzer.
$map=new \Alvine\Types\Map(['fahren'=>'ok', 'object'=>'Auto']);
$m=new \Alvine\Text\MessageFormatter($map);
// Marker setzen
$m->setMarker('START', 'END');
echo $m->format('Wir \STARTfahren\END mit dem STARTobjectEND');
// ⇢ Wir STARTfahrenEND mit dem Auto
Eine Besonderheit ist die Möglichkeit Funktionen zu definieren. Dadurch lassen sich sehr komfortabel Ersetzungen durchführen.
$map=new \Alvine\Types\Map();
$m=new \Alvine\Text\MessageFormatter($map);
// Der Methodenname ist Case-Sesitive. $m->ondiph würde nicht aufgerufen.
$m->onDiph=function($obj, $value) {
return "Auto";
};
echo (string) $m->format('{Diph}haus.');
// ⇢ Autohaus.
Wie im folgendem Beispiel dokumentiert, lassen sich Ersetzungen auch rekursiv verwenden.
$text="Wir kaufen {n} Autos";
$map=new Alvine\Types\Map();
$map['n']='{a}'; // erste Ersetzung ⇢ Wir kaufen {a} Autos
$map['a']='4'; // zweite Ersetzung ⇢ Wir kaufen 4 Autos
$f=new \Alvine\Text\MessageFormatter($map);
echo (string) $f->format($text);