Früher hat man Textpassagen / Phrasen der Sprachdateien in Contao über die langconfig.php geändert.
In Contao 4 funktioniert das anders. Da das immer wieder angefragt wird und zur Verwirrung durch alte Anleitungen führt, hier mal eine kurz zusammengefasste aktuelle Anleitung zum Thema:
In Contao werden Sprachformulierungen in sogenannten xlf-Dateien hinterlegt. Wenn du eine solche Phrase ändern möchtest, machst du das bitte
nicht in der Originaldatei, sondern wählst stattdessen den
updatesicheren Weg!
Ein Beispiel:
Normalerweise werden wiederkehrende Frontend-Mitglieder nach dem Login mit dem Satz "
Ihre letzte Anmeldung war 18.09.2018 11:58. Willkommen zurück" begrüßt.
Da der Satz so nicht wirklich schön klingt, wollen wir zumindest ein "am" einfügen, so dass daraus "
Ihre letzte Anmeldung war am 18.09.2018 11:58. Willkommen zurück" wird.
Der erste Schritt ist, dass wir herausfinden, in welcher Sprachdatei sich die originale Phrase befindet.
Wenn du sicher bist, dass die Phrase aus Contao selbst kommt (nicht aus einer Dritterweiterung) gehst du am besten einfach auf
https://github.com/contao/core-bundle/ und nutzt dort ganz oben die Suchleiste. Gib in die Suchleiste einen Teil der Phrase ein, beispielsweise "
Ihre letzte Anmeldung war". Github zeigt dir dann per Autocomplete-Funktion direkt die gefundenen Bereiche an. Wähle laut diesem Beispiel den Autocomplete-Eintrag "
Ihre letzte Anmeldung war (in this repository)", damit Github nach der Phrase nur in den Contao-Daten sucht. Voilá, Github zeigt dir an, dass die Phrase in der Datei
src/Resources/contao/languages/de/default.xlf gefunden wurde und auch in welcher Zeile. Merke dir die Zeilennummer und klick auf den angezeigten Link zur xlf-Datei.
Wenn wir uns in der Datei die angegebene Zeile 1330 ansehen, steht dort original dieser Abschnitt:
Code:
<trans-unit id="MSC.lastLogin.1">
<source>Your previous login was %s. Welcome back!</source>
<target>Ihre letzte Anmeldung war %s. Willkommen zurück!</target>
</trans-unit>
Jetzt haben wir alle Infos, die wir benötigen um die Phrase zu überschreiben: Wir wissen welche xlf-Datei es ist - in diesem Fall die default.xlf - und wir kennen den exakten Code des Abschnitts.
Im zweiten Schritt bauen wir uns nun die updatesichere neue Sprachdatei:
Verbinde dich per FTP oder Konsole auf den Webspace und geh in das Unterverzeichnis /app/Resources/contao/languages/de/
/de/ steht für das deutsche Sprachfile. Wenn du lieber z.B. das englische Sprachfile überschreiben möchtest, müsste es stattdessen /en/ sein.
Wichtig: Falls du bisher noch kein Sprachfile überschrieben hast, existieren die letzten beiden Ordner /languages/de/ im angegebenen Pfad noch nicht. Leg sie einfach an.
Lege nun mit einem geeigneten Editor (z.B.
www.pspad.com/de/ als kostenloser Editor) eine Datei namens default.xlf an.
Der Name der Datei muss identisch sein mit dem Originalnamen der Datei die überschrieben werden soll. In diesem Beispiel war das laut dem ersten Schritt die default.xlf. Wenn du aber deine gesuchte Phrase nicht in der default.xlf, sondern z.B. in der modules.xlf gefunden hast, dann musst du jetzt auch korrekterweise die modules.xlf anlegen.
Meinem Beispiel folgend, befülle ich diese Datei nun mit folgender Angabe:
Code:
<?xml version="1.0" ?><xliff version="1.1">
<file datatype="php" original="src/Resources/contao/languages/en/default.php" source-language="en" target-language="de">
<body>
<trans-unit id="MSC.lastLogin.1">
<source>Your previous login was %s. Welcome back!</source>
<target>Ihre letzte Anmeldung war %s. Willkommen zurück!</target>
</trans-unit>
</body>
</file>
</xliff>
Die Angaben der ersten Zeilen bis einschließlich <body> und der letzten Zeilen ab </body> sind einfach aus dem Originalfile kopiert. Wenn du eine andere Sprache überschreibst, achte darauf, dass du die entsprechenden korrekten ersten Zeilen aus der Originaldatei übernimmst, damit dort auch der Verweis auf die korrekte Sprache ist!
Relevant ist der Abschnitt zwischen <body> und </body>. Hierhin habe ich einfach die komplette Sprachphrase (
inklusive dem öffnenden <trans-unit ...> und schließenden </trans-unit>) kopiert.
Jetzt kann ich die Stelle an meine Wünsche anpassen und das Wort "am" ergänzen, so dass nun in der Datei das hier steht:
Code:
<?xml version="1.0" ?><xliff version="1.1">
<file datatype="php" original="src/Resources/contao/languages/en/default.php" source-language="en" target-language="de">
<body>
<trans-unit id="MSC.lastLogin.1">
<source>Your previous login was %s. Welcome back!</source>
<target>Ihre letzte Anmeldung war am %s. Willkommen zurück!</target>
</trans-unit>
</body>
</file>
</xliff>
Speichere die Datei und lade sie an den oben angegebenen Pfad /app/Resources/contao/languages/de/ (bzw. das entsprechende Pendant, wenn du es in einer anderen Sprache überschreiben willst).
Der letzte Schritt: Cache leeren
Rufe nun für die Website den Contao-Manager auf, logge dich ein und wähle dort im Bereich Systemwartung die Option „Cache der Produktionsumgebung leeren“ (dafür vorher auf den Pfeil rechts neben dem Button „Prod-Cache erneuern“ klicken, damit diese Option verfügbar ist).
Warte bis der Cache geleert ist, log dich vom Manager aus und schau nach, ob deine Sprachänderung erfolgreich war.
Alternativ kannst du den Cache auch per SSH leeren:
vendor/bin/contao-console cache:clear -e=prod oder „zu Fuß“ via FTP den Ordner /var/cache/prod/ leeren.
Das war es!
Anmerkungen:
Mancher wird sich fragen, weshalb ich nicht die PHP-Variante der Sprachänderung beschreibe. Der Grund liegt darin, dass diese nicht immer sauber funktioniert. Gerade das benannte Beispiel in der default.xlf hat bei mir nie in der alternativen Variante per default.php funktioniert. Das betrifft aber wohl nur bestimmte xlf-Dateien wegen ihrer Reihenfolge beim Laden in Contao und den unterschiedlichen Umgang mit dem Cache, siehe auch
https://github.com/contao/core-bundle/issues/740 ... da die beschriebene xlf-Variante stattdessen aber immer funktioniert hat, habe ich mich entschlossen hier nur diese Variante oben zu beschreiben. Wer mehr über die andere Variante wissen will, kann gerne das Ticket oder diverse Threads hier im Forum nachlesen.
Und noch ein Hinweis: Änderungen von Sprachphrase via PHP-Datei funktionieren in der Dev-Umgebung (app_dev.php) nicht, weil die xlf-Dateoen nach den PHP-Dateien geladen werden. In der Produktionsumgebung klappt es hingegen oft (aber nicht immer, siehe vorhergehende Aussage) wegen dem Sprach-Cache.