Mailinglisten-Archive |
Hi Andreas, Am Mittwoch, 21. Dezember 2005 22:41 schrieb Andreas Brandl: > Lutz Zetzsche schrieb: > > also meiner Meinung nach hat Mehrsprachigkeit in dem Sinne eigentlich > > nichts mit den Templates zu tun, sofern man davon ausgeht, daß es um eine > > 1:1-Übersetzung ohne Spezifika bei einzelnen Sprachen geht. > > > > Von daher ist hier sicherlich nicht beim Template-System - in Deinem Fall > > Smarty - anzusetzen, sondern bereits vorher in der Programmlogik. Hier > > müssen an Hand der übergebenen Sprache schon die richtigen Texte gezogen > > werden. > > OK - setzt du dann im Template Variablen für jeden einzelnen Text (bzw. > Textbaustein)? Machts im Template schon verdammt unübersichtlich, oder? nein, überhaupt nicht. Die Templates wissen gar nichts von den Sprachen. Sie sehen genauso aus, als ob sie nur eine Sprache behandeln würden. Schon in der Programmlogik werden die richtigen Texte mittels des übergebenen Sprachparameters gezogen. Du mußt Dir das so vorstellen, daß die Texte z.B. in der Datenbank oder einzubindenen Textdateien so abgelegt sind: a) Datenbank-Tabelle: ID, Sprache, Text 1, "de", "Ich bin ein toller Text" 1, "en", "I am a great text" b) Textdateien: texte_de.inc: $text_inc = "Ich bin auch ein toller Text"; texte_en.inc: $text_inc = "I am a great text also"; Dann gehst Du in der Programmlogik hin und holst die Texte so: a) $text_db = $oTabelleText->holeText(1, $sprache); b) require_once('texte_'.$language.'.inc'); Bei den Texten kannst Du natürlich auch so vorgehen, daß Du mit einer Übersetzungstabelle arbeitest: Tabelle TextQuellsprache: ID, Sprache, Text 1, de, "Ich bin ein toller Text" Tabelle TextUebersetzungen: ID, Sprache, Text, Uebersetzung 1, en, "Ich bin ein toller Text", "I am a great text also" Diese Lösung ist weniger abstrakt und lesbarer, dafür produziert sie aber größere Datenmengen und verkompliziert andere Dinge (Pflegbarkeit, Sprachwechsel). Welche Lösung Du brauchst, hängt auch davon ab, wie Du die Daten ziehen kannst. Wenn Du im Skript sagst, ich habe den und den Text und hierzu brauche ich die und die Übersetzung, arbeitest Du besser mit der Übersetzungstabelle. Holt das Skript die Daten generisch, ohne den Inhalt der Texte näher zu kennen und kennen zu müssen, dann wählst Du besser die erste Variante. Die erste Variante - also nicht der Weg über im Skript hartkodierte Texte mit einer Übersetzungstabelle - ist programmiertechnisch und pflegemäßig deutlich eleganter. Stell Dir mal vor, Du hast einen Text an vielen Stellen Deiner Anwendung drin, à la $text_db = $oTabelleUebersetzung->holeUebersetzung('Ich bin ein toller Text', $sprache);, und Du änderst mal diesen Text. Dann mußt Du ihn überall und in der Datenbank ändern. Auch Sprachwechsel direkt auf Seitenebene arbeiten deutlich besser, wenn man IDs verwendet! Ich denke, es wird deutlich, daß das Template auf diese Weise auf jeden Fall überhaupt nichts von den Sprachen mitbekommt. Es kriegt in dem Beispiel mit den Variablen $text_db und $text_inc direkt die passenden, sprachspezifischen Inhalte serviert. Das man dem Template auch das Sprachkürzel übergibt, damit es z.B. die aktuell ausgewählte Sprache hervorheben kann, bleibt dabei unbenommen. Das gehört ja dann wieder zur Ausgabe-/Präsentationslogik. > Ich ziehe momentan überhaupt keine Texte aus der Programmlogik in die > Ausgabe. Hab wie gesagt alle Texte (/Ausgabe) in den Templates drin... Das ist aus meiner Sicht ein Designfehler. :-) Texte gehören nicht ins Template, allenfalls mit Ausnahme von sprachneutralen Elementen wie "(c) 2005, Fred Mustermann". Die Mehrsprachigkeit gehört schon vor dem Template geregelt. Das Templatesystem sollte ausschließlich für die Präsentation, inklusive Ausgabelogik, zuständig sein. Hierzu zählt die Mehrsprachigkeit nach meiner Meinung nicht. Selbst die Formatierung von Zahlen- und Datumsangaben würde ich schon vorher regeln. :-) Ich weiß, daß Smarty hierfür Formatierungsunktionen anbietet, aber aus meiner Sicht ist da in der Anwendung etwas vom Ansatz her falsch, wenn man im Template auf solche Funktionen zurücgreifen muß. :-) Wenn das nötig ist, dann ist die Anwendung nicht richtig internationalisiert. Viele Grüße Lutz
php::bar PHP Wiki - Listenarchive