dedlfix: / (PHP) Sprachdateien im Template oder im Backend verarbeiten?

Beitrag lesen

echo $begrüßung;

Die Frage ist nun: wo ersetze ich die Platzhalter (z.B. "[page]") oder Zeit-Formatierungen - im Backend oder im Template? Einerseits haben die Sprachdateien nichts im Backend verloren (und müssten durch Funktionen/Klassen mitgeschleift werden), andererseits hätte ich auch gerne so wenig PHP-Code (str_replace, printf, strftime...) wie möglich im Template. Wo gehört sowas also hin?

Mit einer Übersetzung in diverse Sprachen allein ist es nicht immer getan. Benutzer senden lokalisierte Werte, die erst einmal normalisiert werden müssen, bevor man mit ihnen Datenverarbeitung betreiben kann. Anschließend müssen diese Daten wieder lokalisiert werden. Dabei können sich auch Inhalte ändern, wenn zum Beispiel zwischen dem US-amerikanischen und dem metrischen System umgerechnet werden muss. Die Normalisierung der Eingabedaten kann nicht vom Template vorgenommen werden, denn das kommt erst viel später zum Einsatz. Es wäre dann eigentlich praktisch, wenn der Normalisierer am Ende auch wieder lokalisiert, denn die Regeln dazu kennt er ja bereits. Sie müssen dann nicht zweimal implementiert werden.

Die Programmflusssteuerung greift also vor und nach der Datenverarbeitung auf die Dienste des Lokalisierers zu. Genauso außenstehend könnte man den Textübersetzer implementieren. Wann immer ein Text zu übersetzen ist, fragt man ihn danach. Am Anfang bekommt er einen Default-Wert gesetzt, welche Sprache er zu liefern hat. Per optionalem Parameter kann man aber auch gezielt eine Phrase in einer bestimmten Sprache abfragen. Die Sprachdateien verwaltet der Übersetzer selbständig. Mitgeschleift muss da gar nichts werden. Die Programmflusssteuerung (oder wer auch immer) muss nur wissen, welcher Text auszugeben ist, der Übersetzer liefert ihn. (Eigentlich ist der Übersetzer in dem Szenario nur ein Lagerverwalter, denn er sucht ja nur vorgefertigtes Zeug aus seinem Bestand.)

Eine Implementierung einer Texteverwaltung ist gettext, das auch Einzug in PHP gehalten hat. Auch wenn du gettext vermutlich nicht verwenden wirst, kannst du dir daran ein Beispiel nehmen. Die bekannteste Funktion von gettext heißt gettext() und sie hat ein Alias: _(). Kurz und knackig. So ein Unterstrich macht den Quelltext nur unwesentlich länger, eigentlich fällt nur der Text in der Default-Sprache oder ein Platzhaltername ins Auge. Und auch Tippfaule dürften kaum einen Ablehnungsgrund finden.

Welche Texte und Daten in das Template einzufügen sind, ermittelt die Programmflusssteuerung. Der Übersetzer arbeitet kaum merklich nebenbei mit und das Template sowie die dazu gehörende Logik können sich ganz auf ihre Darstellungsaufgaben konzentrieren.

Selbst wenn die Text-Platzhalter schon im Template eingearbeitet sind und die Steuerung keinerlei Gedanken mehr daran verschwenden muss, kann man immer noch den Übersetzer-Aufruf kaum sichtbar hinzufügen und bleibt sauber, was die Zuständigkeiten angeht.

echo "$verabschiedung $name";