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'] = '';