Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
dev:284:translate [19.07.2018 11:12] – [Zentrale Verwaltung der Übersetzungen] Manuela v.d.Decken | dev:284:translate [31.08.2023 08:22] (aktuell) – [Wie wird Translate benutzt?] Manuela v.d.Decken | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
**Translate** ist ein Paket aus mehreren Klassen, das ab WB-2.10.0 bereits weitgehend das komplette Handling der bisher als ' | **Translate** ist ein Paket aus mehreren Klassen, das ab WB-2.10.0 bereits weitgehend das komplette Handling der bisher als ' | ||
- | ===== Historisches | + | ===== Allgemeiner Aufbau der Übersetzungs-Struktur |
- | + | ||
- | + | ||
- | Die Zeiten, als in Addons die Übersetzungen noch mit solchen und ähnlichen, abenteuerlichen Konstrukten ' | + | |
- | // Load Language file | + | |
- | if(is_readable(WB_PATH.'/ | + | |
- | require_once(WB_PATH.'/ | + | |
- | } | + | |
- | if(is_readable(WB_PATH.'/ | + | |
- | require_once(WB_PATH.'/ | + | |
- | } | + | |
- | if(is_readable(WB_PATH.'/ | + | |
- | require_once(WB_PATH.'/ | + | |
- | } | + | |
- | if(is_readable(WB_PATH.'/ | + | |
- | require_once(WB_PATH.'/ | + | |
- | } | + | |
- | </ | + | |
- | und schon ist alles erledigt. | + | |
- | Wenn jetzt die berechtigte Frage kommt: | + | Der Einfachheit halber rede ich hier immer nur von 'Sprachdateien'. Real müssen die Übersetzungen jedoch längst nicht mehr zwingend in PHP-Dateien als Arrays definiert werden. Es ist jetzt jedes denkbare, geeignete Dateiformat möglich. Die Daten müssen nicht einmal auf dem selben Server liegen. Auch könnten die Daten durch einen WebService zur Verfügung gestellt oder in einer Datenbank abgelegt werden. Dazu ist einzig und allein jeweils ein kleiner, spezialisierter Treiber nötig, |
- | ===== Allgemeiner Aufbau | + | |
- | ==== Allgemein ==== | + | ==== Aufbau |
- | Der Einfachheit halber rede ich hier immer nur von ' | + | |
- | ==== Übersetzungen vor 2.10.0 ==== | + | |
- | Fangen wir beim Stand vor der 2.10.0. Im zentralen Sprachverzeichnis des Core existieren eine große Anzahl von Sprachdateien (DE.php | EN.php | + | |
- | Ab 2.10.0 beginnt die schrittweise Umstellung auf **Translate**. Bis diese komplett abgeschlossen ist, bleiben parallel dazu die ' | + | |
- | <div important> | + | |
- | === Aufbau der Sprachdateien (EN.php) | + | |
Dies ist die bevorzugte und auch dringend empfohlene Art:\\ | Dies ist die bevorzugte und auch dringend empfohlene Art:\\ | ||
// | // | ||
- | <PHP> | + | <code php> |
//Modul Description | //Modul Description | ||
$module_description = 'Enter here a really short description of your module. About 200-250 characters should suffice.'; | $module_description = 'Enter here a really short description of your module. About 200-250 characters should suffice.'; | ||
Zeile 44: | Zeile 19: | ||
$MOD_MyModule[' | $MOD_MyModule[' | ||
$MOD_MyModule[' | $MOD_MyModule[' | ||
- | </PHP> | + | </code> |
manche schreiben die Einträge auch auf diese Art:\\ | manche schreiben die Einträge auch auf diese Art:\\ | ||
//(deutlich schwieriger zu lesen und nicht exakt sortierbar)// | //(deutlich schwieriger zu lesen und nicht exakt sortierbar)// | ||
- | <PHP> | + | <code php> |
$MOD_MyModule[' | $MOD_MyModule[' | ||
$MOD_MyModule[' | $MOD_MyModule[' | ||
Zeile 54: | Zeile 29: | ||
$MOD_MyModule_MESSAGE[' | $MOD_MyModule_MESSAGE[' | ||
$MOD_MyModule_MESSAGE[' | $MOD_MyModule_MESSAGE[' | ||
- | </PHP> | + | </code> |
Das sieht nicht soo gut aus, aber es funktioniert. Beide Schreibweisen erzeugen jedenfalls die selben Translate-Schlüsselwörter. | Das sieht nicht soo gut aus, aber es funktioniert. Beide Schreibweisen erzeugen jedenfalls die selben Translate-Schlüsselwörter. | ||
- | <PHP> | + | <code php> |
echo $oTrans-> | echo $oTrans-> | ||
echo $oTrans-> | echo $oTrans-> | ||
Zeile 63: | Zeile 38: | ||
echo $oTrans-> | echo $oTrans-> | ||
echo $oTrans-> | echo $oTrans-> | ||
- | </PHP> | + | </code> |
Zwingend ist derzeit jedoch noch der Präfix " | Zwingend ist derzeit jedoch noch der Präfix " | ||
Nur so lassen sich ungewollte Überschneidungen der Schlüsselwörter verhindern. | Nur so lassen sich ungewollte Überschneidungen der Schlüsselwörter verhindern. | ||
- | Solange jedoch die Variablen | + | ==== Aufbau der DB-Sprachtabelle ==== |
- | <PHP> | + | FIXME |
+ | |||
+ | ===== Historisches ===== | ||
+ | Fangen wir beim Stand vor der 2.10.0. Im zentralen Sprachverzeichnis des Core existieren eine große Anzahl von Sprachdateien (DE.php | EN.php | usw.). Ja, es waren noch reale Dateien!. Jede dieser Dateien enthält eine schier unüberschaubare Anzahl von Sprachvariablen (genauer gesagt, derzeit etwas über 600!!). Das benutzte System erfordert, dass in jeder Sprachdatei jeder Eintrag vorhanden ist. Fehlt einer, löst das im Benutzungsfall häufig einen Laufzeitfehler | ||
+ | |||
+ | Die Sprachdateien sowohl im Core als auch in Modulen mussten mit solchen und ähnlichen, abenteuerlichen Konstrukten ' | ||
+ | <code php> | ||
+ | // Load Language file | ||
+ | if(is_readable(WB_PATH.'/ | ||
+ | require_once(WB_PATH.'/ | ||
+ | } | ||
+ | if(is_readable(WB_PATH.'/ | ||
+ | require_once(WB_PATH.'/ | ||
+ | } | ||
+ | if(is_readable(WB_PATH.'/ | ||
+ | require_once(WB_PATH.'/ | ||
+ | } | ||
+ | if(is_readable(WB_PATH.'/ | ||
+ | require_once(WB_PATH.'/ | ||
+ | } | ||
+ | </ | ||
+ | Die Ausgabe erfolgte nach dem rudimentären Muster: | ||
+ | <code php> | ||
// Syntax Typ 1 | // Syntax Typ 1 | ||
global $MOD_MyModule; | global $MOD_MyModule; | ||
Zeile 79: | Zeile 76: | ||
echo $MOD_MyModule_TEXT[' | echo $MOD_MyModule_TEXT[' | ||
echo $MOD_MyModule_MESSAGE[' | echo $MOD_MyModule_MESSAGE[' | ||
- | </PHP> | + | </code> |
- | solange kann auf die oft ellenlangen Präfixes | + | Nach dieser alten Prä-Translate-Methode sind leider noch die teils ellenlangen Präfixes |
+ | <div important> | ||
+ | ===== Die Zukunft ===== | ||
+ | hat bereits begonnen. | ||
+ | <div info>Ab 2.10.0 beginnt die schrittweise Umstellung auf **Translate**. Bis diese komplett abgeschlossen ist, bleiben parallel dazu die ' | ||
+ | Wo die Umstellung schon erfolgte, genügt ab jetzt ein einfaches: < | ||
+ | und schon ist alles erledigt. | ||
+ | Wenn jetzt die berechtigte Frage kommt: 'was ist dann alles erledigt?', | ||
- | ==== Das Grundsystem hinter Translate ==== | + | ===== Das Grundsystem hinter Translate |
Translate basiert auf der Vorgabe, dass Sprachdateien grundsätzlich jeweils nur die für den jeweiligen Bereich notwendigen Einträge enthalten. Im Gegenzug werden relativ viele, kleine Sprachdateien eingesetzt. Jedes Addon, jede ACP-Erweiterung **muss** und sogar jedes einzelne Template/ | Translate basiert auf der Vorgabe, dass Sprachdateien grundsätzlich jeweils nur die für den jeweiligen Bereich notwendigen Einträge enthalten. Im Gegenzug werden relativ viele, kleine Sprachdateien eingesetzt. Jedes Addon, jede ACP-Erweiterung **muss** und sogar jedes einzelne Template/ | ||
Diese Aufteilung vereinfacht die Arbeit eines Entwicklers. Er muss nicht mehr ' | Diese Aufteilung vereinfacht die Arbeit eines Entwicklers. Er muss nicht mehr ' | ||
Zeile 118: | Zeile 121: | ||
Für Addon-Entwickler ist Translate sehr einfach einzusetzen. Die Grundinitialisierung wird **immer** automatisch vom Core vorgenommen und Addons haben damit überhaupt nichts zu schaffen. Bei älteren Addons, die noch PHP-Dateien enthalten, die direkt von außen aufgerufen werden müssen, sind 2 bis maximal 4 Translate-Methoden erforderlich (alle Kommandos werden in der Standalone-Form angegeben). Bedingung für den Einsatz von Translate ist, dass die Datei '' | Für Addon-Entwickler ist Translate sehr einfach einzusetzen. Die Grundinitialisierung wird **immer** automatisch vom Core vorgenommen und Addons haben damit überhaupt nichts zu schaffen. Bei älteren Addons, die noch PHP-Dateien enthalten, die direkt von außen aufgerufen werden müssen, sind 2 bis maximal 4 Translate-Methoden erforderlich (alle Kommandos werden in der Standalone-Form angegeben). Bedingung für den Einsatz von Translate ist, dass die Datei '' | ||
- | * <php>Translate:: | + | * '' |
- | * <php> | + | * '' |
- | * <php>Translate:: | + | <div info>Die folgenden Methoden stehen erst ab Template Version 1.0.0 zur Verfügung!</ |
- | * < | + | * '' |
+ | * '' | ||
Einfacher noch geht es bei Addon-Dateien, | Einfacher noch geht es bei Addon-Dateien, | ||
Jetzt müssen eigentlich nur noch die Übersetzungstexte von Translate abgerufen werden. Der einfachste Weg ist:\\ | Jetzt müssen eigentlich nur noch die Übersetzungstexte von Translate abgerufen werden. Der einfachste Weg ist:\\ | ||
- | <php> $oTrans = Translate:: | + | <code php> |
- | < | + | $sText = $oTrans-> |
- | entspricht dem früheren\\ | + | // oder auch |
- | <php> globals $TEXT; </ | + | $sText = Translate:: |
- | <php> $sText = $TEXT[' | + | </code> |
+ | entspricht dem früheren | ||
+ | <code php> | ||
Für ältere Addons existiert vorübergehend eine Methode, sämtliche Übersetzungstexte in einem Zug an die // | Für ältere Addons existiert vorübergehend eine Methode, sämtliche Übersetzungstexte in einem Zug an die // | ||
- | <php> $template-> | + | <code php> $template-> |
Das Problem bei dieser Methode ist, dass immer eine komplette Kopie der Übersetzungstabelle an die Templateengine übergeben wird. | Das Problem bei dieser Methode ist, dass immer eine komplette Kopie der Übersetzungstabelle an die Templateengine übergeben wird. | ||
- | Wesentlich einfacher und platzsparender ist die Verwendung in Verbindung mit Twig, da hier nur eine speichersparende Referenz auf das Translateobjekt übergeben wird:\\ | + | Wesentlich einfacher und platzsparender ist die Verwendung in Verbindung mit Twig, da hier im Php-Code |
- | <php> $aTwigData[' | + | <code php> |
+ | die Anzeige im Twig-Template erfolgt | ||
+ | <code twig>{{ Trans.TEXT_CANCEL }}</ | ||