Symfony-Translation
Bemerkung
Die Symfony-Translation ist ab MetaModels Version 2.3 implementiert.
Kurzinfo
Die Applikationsausgaben von MetaModels in Contao werden mehrsprachig zur Verfügung gestellt. Damit sind alle Navigationsausgaben, Bezeichnungen und Beschreibungen der Eingabewidgets, Legenden der Eingabemasken usw. gemeint aber nicht die eingegeben „Nutzdaten“. Ab MetaModels Version 2.3 übernimmt die Bereitstellung die Symfony-Translation, welche sich durch verschiedene Vorteile wie z. B. ein gutes Caching auszeichnet.
Zum Laden von neuen oder geänderten Eingaben muss der Symfony-Translations-Cache gelöscht werden. Das kann über die Konsole oder über den Manager erfolgen.
Bemerkung
Das Löschen des Symfony-Translations-Cache kann auch im Backend erfolgen - siehe
Einstellungen > Systemwartung > Symfony-Translator
Achtung: hier wird immer nur der Cache der aktuell eingestellten Arbeitsumgebung (prod oder dev) gelöscht!
Die Übersetzungen selbst werden weiterhin über die Webseite von Transifex gemanaged. An der Übersetzung unserer Basissprache Englisch in andere Sprachen kann sich jeder über Transifex beteiligen.
Bestehende eigene Übersetzungstexte, die als PHP-Array angelegt wurden, müssen in eine XLIFF-Datei übertragen werden (siehe „Eigene Anpassungen von Übersetzungen“).
Hintergründe
In Contao und auch MetaModels werden immer mehr native Komponenten von Symfony eingesetzt und bestehende Eigenentwicklungen substituiert. In der MetaModels-Version 2.3 wurde die Übersetzung weitestgehend auf die Symfony-Komponente Translation umgebaut und die Übersetzungen direkt im Format XLIFF vorgehalten.
Die Symfony-Translation bietet ein sehr gutes Caching der übersetzten Texte und beschleunigt damit den Aufbau des Backends. Dieser Cache wird - sofern nicht schon vorhanden - bei Start von Contao einmal erzeugt und steht anschließend bei allen Aufrufen zur Verfügung.
Bei MetaModels gibt es gegenüber anderen Erweiterungen die Besonderheit, dass in MetaModels auch Eingaben gemacht werden, welche die Anzeige im Backend betreffen - z. B. die Models in der Hauptnavigation, Name und Beschreibungen aus den Attributen für die Eingabewidgets usw. Das hat zur Folge, dass bei Neueingaben oder Änderungen der Texte der Translation-Cache neu aufgebaut werden muss. Die Neuerstellung erzwingt man durch das Löschen des Caches - das kann über den Contao-Manager erfolgen oder über die Konsole.
Der Cache liegt üblicher Weise in den Ordnern
var/cache/dev/translations
var/cache/prod/translations
Die XLIFF-Dateien liegen nun bei den MM-Repos im Ordner Resources/translations/
- einige wenige Übersetzungen,
die direkt nach Contao gereicht werden, mussten in Resources/contao/languages
bleiben.
Die Übersetzungen kann man nun leicht über die Symfony-Toolbar nachvollziehen. In dem Panel „Translation“ werden Angaben zu den gefundenen und nicht gefundenen Übersetzungen sowie den Fallbacks aufgelistet.
Eigene Anpassung von Übersetzungen
Neue Überschreibungen müssen als XLIFF-Datei angelegt werden. Den Aufbau kann man sich bei der Datei ansehen, dessen Wert man abändern möchte. Dabei ist zu beachten, dass die XLIFF-Dateien beim DCG in Version 2.0 vorliegen und bei MetaModels in Version 1.2 - der Aufbau unterscheidet sich etwas.
Beispiel: möchte man für Deutsch den Button „Filtern“ in „Suche“ umbenennen, muss eine Datei angelegt werden als
translations/metamodels_filter.de.xlf oder
src/Resources/translations/metamodels_filter.de.xlf
mit dem Inhalt
1<?xml version="1.0" ?>
2<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
3 <file source-language="en" datatype="plaintext" original="src/CoreBundle/Resources/translations/metamodels_filter.en.xlf" target-language="de">
4 <body>
5 <trans-unit id="submit" resname="submit">
6 <source>Filter</source>
7 <target>Suche</target>
8 </trans-unit>
9 </body>
10 </file>
11</xliff>
Für die Übernahme nicht vergessen, den Translation-Cache zu löschen!
Meldung „LABEL NOT SET“
Wird die Meldung „LABEL NOT SET“ in der Eingabemaske als Label angezeigt, kann das mehrere Gründe haben:
Der einfachste Grund ist, dass sich an dem Label was geändert hat, aber der Cache nicht erneuert wurde - diesen bitte leeren (s. o.)
Hat man eigene Anpassungen per DCA an den Eingabewidgets vorgenommen z. B. für Standardwerte oder um einen eigenes Wizard-Icon einzubinden, greift leider die „Contao-Magic“ und versucht das Label aus den Array der Übersetzungen hinzuzufügen - die gibt es aber mit den Symfony-Translations nicht mehr.
Die Meldung ist leicht zu beheben, wenn man zusätzlich ein Label im DCA-File hinzufügt - der Wert kann leer bleiben z. B. für MM „mm_employees“ und Attribut „name“:
1// src/Resources/contao/dca/mm_employees.php or contao/dca/mm_employees.php
2
3// Add label to fix Contao "magic add".
4$GLOBALS['TL_DCA']['mm_employees']['fields']['name']['label'] = '';