Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
dev:284:translate [18.07.2018 11:10] – [Struktur der Translation Tabellen] Manuela v.d.Decken | dev:284:translate [19.07.2018 12:10] – [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 ' | ||
- | Die Zeiten, als in Addons die Übersetzungen | + | ===== Allgemeiner Aufbau der Übersetzungs-Struktur ===== |
+ | |||
+ | Der Einfachheit halber rede ich hier immer nur von ' | ||
+ | |||
+ | ==== Aufbau der Sprachdateien (EN.php) ==== | ||
+ | Dies ist die bevorzugte und auch dringend empfohlene Art:\\ | ||
+ | // | ||
+ | < | ||
+ | //Modul Description | ||
+ | $module_description = 'Enter here a really short description of your module. About 200-250 characters should suffice.'; | ||
+ | |||
+ | $MOD_MyModule[' | ||
+ | $MOD_MyModule[' | ||
+ | $MOD_MyModule[' | ||
+ | $MOD_MyModule[' | ||
+ | $MOD_MyModule[' | ||
+ | $MOD_MyModule[' | ||
+ | </ | ||
+ | manche schreiben die Einträge auch auf diese Art:\\ | ||
+ | //(deutlich schwieriger zu lesen und nicht exakt sortierbar)// | ||
+ | < | ||
+ | $MOD_MyModule[' | ||
+ | $MOD_MyModule[' | ||
+ | $MOD_MyModule_TEXT[' | ||
+ | $MOD_MyModule_TEXT[' | ||
+ | $MOD_MyModule_MESSAGE[' | ||
+ | $MOD_MyModule_MESSAGE[' | ||
+ | </ | ||
+ | Das sieht nicht soo gut aus, aber es funktioniert. Beide Schreibweisen erzeugen jedenfalls die selben Translate-Schlüsselwörter. | ||
+ | < | ||
+ | echo $oTrans-> | ||
+ | echo $oTrans-> | ||
+ | echo $oTrans-> | ||
+ | echo $oTrans-> | ||
+ | echo $oTrans-> | ||
+ | echo $oTrans-> | ||
+ | </ | ||
+ | Zwingend ist derzeit jedoch noch der Präfix " | ||
+ | Nur so lassen sich ungewollte Überschneidungen der Schlüsselwörter verhindern. | ||
+ | |||
+ | ==== Aufbau der DB-Sprachtabelle ==== | ||
+ | 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 aus. Sobald WebsiteBaker startet, wird zwangsweise eine dieser Sprachdateien mit ihren vollen 600 Einträgen geladen. völlig unabhängig davon, ob auch nur ein einziger davon benötigt wird! Selbstverständlich laden dann verschiedene | ||
+ | |||
+ | Die Sprachdateien sowohl im Core als auch in Modulen mussten | ||
+ | <PHP> | ||
// Load Language file | // Load Language file | ||
- | if(LANGUAGE_LOADED) { | + | if(is_readable(WB_PATH.'/ |
- | if(!file_exists(WB_PATH.'/ | + | |
- | require_once(WB_PATH.'/ | + | } |
- | } else { | + | if(is_readable(WB_PATH.'/ |
- | require_once(WB_PATH.'/ | + | require_once(WB_PATH.'/ |
- | | + | } |
- | } | + | if(is_readable(WB_PATH.'/ |
- | </ | + | require_once(WB_PATH.'/ |
- | und schon ist alles erledigt. | + | } |
+ | if(is_readable(WB_PATH.'/ | ||
+ | require_once(WB_PATH.'/ | ||
+ | } | ||
+ | </ | ||
+ | Die Ausgabe erfolgte nach dem rudimentären Muster: | ||
+ | <PHP> | ||
+ | // Syntax Typ 1 | ||
+ | global | ||
+ | echo $MOD_MyModule['PRINT']; | ||
+ | echo $MOD_MyModule[' | ||
+ | echo $MOD_MyModule[' | ||
+ | // oder Syntax Typ 2 | ||
+ | global $MOD_MyModule, | ||
+ | echo $MOD_MyModule[' | ||
+ | echo $MOD_MyModule_TEXT[' | ||
+ | echo $MOD_MyModule_MESSAGE[' | ||
+ | </PHP> | ||
+ | Nach dieser alten Prä-Translate-Methode sind leider noch die teils ellenlangen Präfixes notwendig. | ||
+ | <div important> | ||
- | Wenn jetzt die berechtigte Frage kommt: 'was ist dann alles erledigt?', | + | ===== Die Zukunft |
- | ===== Allgemeiner Aufbau der Übersetzungs-Struktur | + | 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. | ||
- | ==== Allgemein ==== | + | Wenn jetzt die berechtigte Frage kommt: ' |
- | Der Einfachheit halber rede ich hier immer nur von ' | + | |
- | ==== Übersetzungen vor 2.10.0 ==== | + | |
- | Fangen wir beim Stand vor der 2.10.0 und zuvor an. Im zentralen Sprachverzeichnis des Core existieren eine große Anzahl von Sprachdateien (DE.php | EN.php | usw.). 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 aus. Sobald WebsiteBaker startet, wird zwangsweise eine dieser Sprachdateien mit ihren vollen 600 Einträgen geladen. völlig unabhängig davon, ob auch nur ein einziger davon benötigt wird! Selbstverständlich laden dann verschiedene Addons ihre eigenen Sprachdateien noch zusätzlich dazu. Bei mehreren verschiedenen Addons auf einer Seite kann da zusätzlich noch eine ganz erkleckliche Anzahl zusammenkommen.\\ //(Aus historischen Zeiten sind da auch die Übersetzungen von sehr vielen uralten Modulen enthalten und eine wirkliche Pflege der Dateien ist, mit vernünftigem Zeit-/ | + | |
- | Ab 2.10.0 beginnt die schrittweise Umstellung auf **Translate**. | + | |
- | <div important> | + | |
- | ==== 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 32: | Zeile 96: | ||
==== Struktur der Translation Tabellen ==== | ==== Struktur der Translation Tabellen ==== | ||
+ | <div info> | ||
{{: | {{: | ||
Zeile 58: | Zeile 122: | ||
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 '' | ||
* < | * < | ||
+ | * < | ||
+ | <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, | ||