echo $begrüßung;
Wenn es nur um feste Zeichenketten ginge, wäre auch alles kein Problem. Ich weiß nur immer noch nicht, wo ich am besten die Platzhalter (z.B. "[number] Kommentare" oder "%d Kommentare") ersetze.
Wer ermittelt denn die variablen Werte? Wer sorgt dafür, dass die passenden Texte geholt und Anpassungen (unterschiedliche Schreibweisen bei Einzahl und Mehrzahl) vorgenommen werden? Das ist Teil der Geschäftslogik und des Lokalisierers. Die Anzeigelogik bekommt die Texte fertig berechnet übergeben.
Angenommen, die Anzahl der Kommentare wird in einer Methode einer Klasse berechnet. Dort könnte ich nun ganz einfach den Platzhalter durch die Zahl ersetzen. Die Sprach-Strings müssten dazu aber "global" sein, was ja nicht Sinn der Sache sein kann. Selbst wenn die Strings nicht verändert werden müssen, brauche ich z.B. das Datumsformat mindestens als Parameter (das meinte ich mit "mitschleifen").
Das Wissen um die lokal richtige Formatierung von Werten muss der Lokalisierer mitbringen. Alternativ kann man den Platzhalter mit Zusatzinformation ausstatten.
"Heute ist der {0:dd.MM.yyyy}. Die Temperatur beträgt {1} °C."
"Today is {0:dd/MM/yyyy}. The temperature is {1} °C."
So sehen beispielsweise Platzhalterstrings mit Formatierinformation (für den Platzhalter 0) unter .NET aus. Wer auch immer den Platzhalter ersetzt muss beim Einsetzen des Wertes die Formatierinformation extrahieren und berücksichtigen.
Alle Ersetzungen und Formatierungen außerhalb der Klasse durchzuführen, kommt mir wegen der Performance recht ungünstig vor (nochmal alle Kommentare durchlaufen...).
Für Performance zählen nur Messergebnisse, am besten vor und nach einem Optimierungsversuch.
Wenn du Werte erst zusammentragen musst, die später in die Ausgabe eingearbeitet werden sollen, kannst du doch dabei gleich die Lokalisierung erledigen lassen.
» gettext
Ja, damit hatte ich auch schon mal das Vergnügen. Ich fand das allerdings etwas unhandlich, da es sich hier nicht um Text-Dateien handelt.
Mein Vorschlag ging auch eher dahin, sich an der allgemeinen Arbeitsweise und an _() ein Beispiel für eine eigene Implementation zu nehmen.
echo "$verabschiedung $name";