Typo3 Extensions mit Extbase und Fluid – Sprachdateien

Die Mehrsprachigkeit bei Extbase Extensions ist eigentlich sehr simpel. Typo 3 arbeitet mit dem XLIFF (XML Localisation Interchange File Format). Wem das Format unbekannt sein sollte, kann die allgemeine Information dazu auf Wikipedia nachlesen.

In Extbase Extensions, werden die XLIFF Sprachdateien von Typo 3 in der Extension-Ordner Hierarchie im Verzeichnis Resources/Private/Language/ erwartet und soweit vorhanden automatisch ohne weiteres Referenzieren geladen. Nach der Dateinamens-Konvention von Typo3 heißt die Default Sprachdatei locallang.xlf. Die Übersetzungs-Dateien werden dann mit dem vorangestellten, Punkt getrennten ISO Länder Code der jeweiligen Sprache benannt. Im Falle von Deutsch ist das de.locallang.xlf.

Das zur eigentlichen Theorie, die dahinter steckt, was eigentlich überschaubar ist. Nun betrachten wir uns den Aufbau der Basis locallang.xlf.

<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.0">
     <file source-language="en" datatype="plaintext" original="messages" date="2011-10-18T18:20:51Z" product-name="extension-name">
             <header/>
             <body>
                     <trans-unit id="backToList">
                             <source>Back to List.</source>
                     </trans-unit>
                     <trans-unit id="BackToHome">
                             <source>Back to Homepage</source>
                     </trans-unit>
             </body>
     </file>
</xliff>

Der Aufbau ist selbsterklärend. Nach dem einleitenden xml Tag wird der xliff Block notiert. In diesem definieren wir den Basis Sprachparameter, der in der Default Sprachdatei en für Englisch sein sollte. Dies verweist auch auf die Quell-Sprache, von der aus die Übersetzungen angelegt werden. Der datatype ist prinzipiell ‚plaintext‘ und das date ist das Erstellungsdatum. Die Zugehörigkeit zu der jeweiligen Extension wird klar über procuct-name festgelegt.

Nach einem geschlossenen header Tag folgt nun der body, in dem wir die wichtigen Informationen hinterlegen. Jedes einzelne Sprach-Element wird mit einem trans-unit Tag mit einer eindeutigen id als Identifier eindeutig definiert. Durch den source Tag geben wir an das Typo3 System nun das zur id gehörige Ausgabe-Element weiter.

Die vorhandenen Daten stehen dann  in der Extension ohne weiteren Aufwand in den Fluid Templates zur Verfügung und können ohne weiteres innerhalb der Extension über den Fluid Viewhelper f:translate angesprochen werden, z.B.:

<f:translate key="backToList" />

In unserem Fall erscheint nun ‚Back to List‘ in der FE Ausgabe, da wir über ‚key‘ den durch die id definierten Identifier der in der Sprach-Datei vorkommenden trans-unit ansprechen.

Die Basis ist nun klar. Das ganze muss nun noch ins Deutsche durch die Datei de.locallang.xlf gebracht werden:

<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.0">
     <file source-language="en" target-language="de" datatype="plaintext" original="messages" date="2011-10-18T18:20:51Z" product-name="extension-name">
             <header/>
             <body>
                     <trans-unit id="backToList">
                             <source>Back to List.</source>
                             <target>Zurück zur Liste.</target>
                     </trans-unit>
                     <trans-unit id="BackToHome">
                             <source>Back to Homepage</source>
                             <target>Zurück zur Homepage.</target>
                     </trans-unit>
             </body>
     </file>
</xliff>

Alles was sich hier ändert, ist nur, dass im file Tag die Übersetzungs-Sprache mit dem Iso Code als target-language definiert wird und zusätzlichen innerhalb des trans-unit Tag die Übersetzung mit Hilfe des target Tags definiert wird.