Sunday, July 22, 2012

ExtBase - Übersetzungen per XLIFF einbinden

Seit Version 4.6 nutzt TYPO3 das XLIFF Format zum speichern von Sprachdateien. Das neue Format ist kompatibel mit Übersetzungsservern und bietet noch einige andere Vorteile wie z.B. Pluralformen oder Übersetzungsvorschläge.

Wer mit TYPO3 4.6 oder TYPO3 4.7 eine mehrsprachige Extbase Extension entwickelt, wird sich automatisch mit dem neuen Format auseinander setzen müssen, da der Extension Builder per Default nun auch .xlf-Sprachdateien generiert. Wie aber genau bindet man eine neue Sprache in seine Extension ein?

Als Basissprache wird immer von Englisch ausgegangen. Nach dem Anlegen einer neuen Extension mit dem Extension Builder hat man in der Regel eine Sprachdatei namens locallang.xlf, welche sich im Ordner Resources\Private\Language\ befindet.

Original XLIFF Sprachdatei in englischer Sprache

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<xliff version="1.0">
 <file source-language="en" datatype="plaintext" original="messages" date="2012-07-40T13:35:40Z" product-name="loc_test">
  <header/>
  <body>

   <trans-unit id="tx_loctest_domain_model_testtable">
    <source>Testtable</source>
   </trans-unit>
   <trans-unit id="tx_loctest_domain_model_testtable.title">
    <source>Title</source>
   </trans-unit>
   <trans-unit id="tx_loctest_domain_model_testtable.text">
    <source>Description</source>
   </trans-unit>
   
  </body>
 </file>
</xliff>

Möchte man nun z.B. eine deutsche Übersetzung für die oben gezeigte Sprachdatei generieren, erstellt man im gleichen Ordner eine Kopie der bestehenden Datei und nennt diese de.locallang.xlf

Folgende Änderungen muss man in der kopierten Datei vornehmen. Zum einen muss man die Ziel-Sprache angeben (siehe unten in Zeile 3 target-language="de") und zum anderen muss man für jeden zu übersetzenden Eintrag jeweils einen neuen Eintrag für die Zielsprache anlegen (gekennzeichnet durch das target-Tag)

Übersetzte XLIFF Sprachdatei in deutscher Sprache

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<xliff version="1.0">
 <file source-language="en" target-language="de" datatype="plaintext" original="messages" date="2012-07-40T13:35:40Z" product-name="loc_test">
  <header/>
  <body>

   <trans-unit id="tx_loctest_domain_model_testtable">
    <source>Testtable</source>
                                <target>Testtabelle</target>
   </trans-unit>
   <trans-unit id="tx_loctest_domain_model_testtable.title">
    <source>Title</source>
                                <target>Titel</target>
   </trans-unit>
   <trans-unit id="tx_loctest_domain_model_testtable.text">
    <source>Description</source>
                                <target>Beschreibung</target>
   </trans-unit>
   
  </body>
 </file>
</xliff>

Fall man bestimmte Einträge nicht übersetzt, greift ein Fallback-System und es wird jeweils der Eintrag der Originalsprache angezeigt. Dieses funktioniert nur dann, wenn man den ganzen Eintrag beginnend ab dem entsprechenden trans-unit-Tag löscht. Es reicht nicht, einfach das target-Tag wegzulassen, denn dann wird gar nichts als Übersetzung für den Eintrag angezeigt.

2 comments:

  1. hallo,

    meine deutsche sprachdatei wird nicht benutzt. wahrscheinlch muss ich dem typo3 6.0 noch sagen welche die standardsprache der seite ist. muss ich da noch etwas anderes machen als

    config {
    language = de
    locale_all = de_DE
    htmlTag_langKey = de-DE
    } ?

    ReplyDelete
  2. Vielleicht noch folgendes:

    config.linkVars = L
    config.sys_language_uid = 0

    ReplyDelete