Übersetzungen von Add-ons und Modulen
Dieses Tutorial beschreibt, wie Module bzw. Add-ons der phpManufaktur übersetzt werden können und was hierbei zu beachten ist.
Alle Module und Addons sind so aufgebaut, dass sprachabhängige Informationen, z.B. die Meldung "Die Datei wurde erfolgreich übertragen", strikt vom eigentlichen Programmcode getrennt sind und in gesonderten Sprachdateien verwaltet werden.
Sprachdateien befinden sich immer im Unterverzeichnis /languages des jeweiligen Modul und werden mit dem großgeschriebenen, zweistelligen Sprachcode sowie der Dateiendung .php bezeichnet. Die Sprachcodes sind in der ISO 639-1 festgelegt und werden von WebsiteBaker durchgängig verwendet:
DE.php - Sprachdatei für den deutschsprachigen Raum
EN.php - Sprachdatie für den englischsprachigen Raum
FR.php - Sprachdatei für den französischsprachigen Raum
Dem Modul wird von WebsiteBaker über die Konstante LANGUAGE mitgeteilt, in welcher Sprache Mitteilungen ausgegeben werden sollen. Das Modul prüft, ob für die angeforderte Sprache eine Sprachdatei existiert und lädt diese Datei. Falls für die angeforderte Sprache keine Sprachdatei existiert verwendet das Modul die voreingestellte Sprachdatei - dies ist üblicherweise die EN.php ansonsten die DE.php.
Die folgende Tabelle gibt Ihnen einen Überblick über die Module der phpManufaktur sowie über die unterstützten Sprachen:
| Modul | Verzeichnis | Typ | Sprachen | Code | Besonderheiten |
|---|---|---|---|---|---|
| dbConnect | /modules/dbconnect | snippet | DE, EN | ANSI | |
| dbGlossary | /modules/dbglossary | admin | DE | UTF-8 | |
| dbImageOptimizer | /modules/dbimageoptimizer | admin | DE | ANSI | |
| dbMultipleChoice | /modules/multiplechoice | admin | DE | UTF-8 | |
| DirList | /modules/dirlist | page | DE, EN, NL, IT | ANSI | |
| Feedback Module | /modules/feedback | page | DE, EN, ES, NL, NO | ANSI | |
| imageOptimizer | /modules/img_optimizer | snippet | DE, EN | ANSI | |
| KeepInTouch | /modules/kit | admin | DE, EN, NO | UTF-8 | zusätzliche Sprachdateien im Unterverzeichnis /dialogs/ für jeden einzelnen Dialog! |
| multipleEducated | /modules/educated | admin | DE | UTF-8 | |
| Newsletter Snippet | /modules/newsletter | snippet | DE, EN, NL, FR | ANSI | |
| rhTools | /modules/rhtools | snippet | DE, EN | ANSI | |
| ShortLink | /modules/shortlink | admin | DE, EN | ANSI | |
| Uploader Snippet | /modules/uploader | snippet | DE, EN | ANSI |
Das jeweilige Modul greift über Konstanten auf die Sprachdateien zu. So ist z.B. der Meldung, dass eine Datei übertragen wurde, die Konstante mod_file_transfer_success zugeordnet, die in der jeweiligen Sprachdatei definiert ist, so steht z.B. in der DE.php:
define('mod_file_transfer_success', 'Die Datei wurde erfolgreich übertragen');
und in der EN.php z.B.:
define('mod_file_transfer_success', 'File transfer successfull');
Mit der PHP Funktion define('<KONSTANTE>', '<WERT>'); wird eine Konstante definiert. Bei der Definition wird die <KONSTANTE> in Anführungszeichen gesetzt, aufgerufen wird sie von dem jeweilgen Modul jedoch ohne die Anführungszeichen.
Wenn Sie eine Sprachdatei übersetzen möchten, benötigen Sie auf jeden Fall einen hierfür geeigneten Editor. Der Editor sollte auf jeden Fall eine Syntaxhervorhebung für die Programmiersprache PHP und unterschiedliche Kodierungen beherrschen:
- Eine gute Wahl ist z.B. der freie Quellcode Editor Notepad++.
- Wenn es etwas mehr sein darf, greifen Sie zu der Entwicklungsumgebung (IDE) Netbeans (wählen Sie das Paket mit PHP-Unterstützung). Es mag Ihnen zwar so vorkommen, als ob Sie dann mit einer riesigen Kanone auf einen kleinen Spatzen schießen, die integrierte Entwicklungsumgebung von Netbeans bietet Ihnen jedoch neben einer Syntaxhervorhebung auch eine automatische Syntaxergänzung und darüber hinaus eine Syntaxprüfung. Dies ist in der praktischen Arbeit ein unschätzbarer Vorteil.
Eine Sprachdatei übersetzen
Laden Sie sich zunächst das Add-on bzw. Modul, zu dem Sie eine Sprachdatei übersetzen möchten, von der phpManufaktur herunter.
Die Installationsdateien für WebsiteBaker sind im ZIP Format gepackt. Entpacken Sie das Modul z.B. mit 7-Zip in ein beliebiges Verzeichnis.
Die Sprachdateien befinden sich im Verzeichnis /languages.
Angenommen, Sie möchten die Sprachdatei DE.php in das Englische übersetzen, dann gehen Sie wie folgt vor:
- Öffnen Sie die Datei DE.php mit Ihrem Editor,
- Wichtig: Prüfen Sie, daß die Kodierung, die Sie der obigen Tabelle entnehmen, mit den Einstellungen in Ihrem Editor übereinstimmt (bei Notepad++ über ⇒ Kodierung in der Menuleiste, bei Netbeans über ⇒ Datei ⇒ Projekteigenschaften ⇒ Encoding - falls die Kodierung ANSI ist, wählen Sie bei Netbeans ISO-8859-1),
- Speichern Sie die Datei unter EN.php ab.
Die Kodierung wirkt sich erheblich auf den Umgang mit Sonderzeichen und Umlauten aus. Sie dürfen die vorgegebene Kodierung auf keinen Fall verändern, die übersetzte Sprachdatei muss im gleichen Code erstellt und gespeichert werden.
Bei Sprachdateien im ANSI Code müssen alle Sonderzeichen und Umlaute maskiert werden, so wird z.B. aus ü ein ü - "Die Datei wurde erfolgreich übertragen"
define('mod_file_transfer_success', 'Die Datei wurde erfolgreich übertragen');
d.h. sie verwenden die Maskierung ü anstatt ü.
Eine Übersicht über die wichtigsten HTML Maskierungen finden Sie auf der Seite HTML-Entities der unicode.e-workers.de.
Die <KONSTANTE> folgt einer Systematik, aus der Sie die Verwendung erkennen können, beginnt die Konstante z.B. mit mod_btn_ bezieht sie sich auf Schalter (Button), mod_error_ kennzeichnet Fehlermeldungen (Error) oder mod_msg_ Meldungen (Message), die von dem Modul ausgegeben werden.
- Arbeiten Sie die Sprachdatei systematisch ab und ersetzen Sie die in <WERT> stehenden Zeichenketten durch ihre Übersetzung, achten Sie hierbei darauf, dass die Anführungszeichen am Anfang und Ende des <WERT> erhalten bleiben.
An der einen oder anderen Stelle werden Sie auf einen <WERT> stoßen, der nicht nur aus einem reinen Text besteht, sondern zusätzlich HTML Tags enthält, die z.B. dafür sorgen, daß der <WERT> als Absatz (Paragraph) ausgegeben wird und er deshalb zwischen <p> ... </p> steht:
define('mod_file_transfer_success', '<p>Die Datei wurde erfolgreich übertragen</p>');
oder dass Teile z.B. fett <b> ... </b> oder kursiv <i> ... </i> ausgegeben werden:
define('mod_file_transfer_success', '<p>Die Datei wurde <i>erfolgreich</i> <b>übertragen</b></p>');
Sorgen Sie dafür, daß diese Tags bei der Übersetzung erhalten bleiben:
define('mod_file_transfer_success', '<p>File <i>transfer</i> <b>successfull</b></p>');
Ihnen werden alle möglichen HTML Tags begegnen, gelegentlich auch CSS Angaben:
define('mod_file_transfer_success', '<div style="margin:10px 0px;padding:5px;border:1px solid #000;">Die Datei wurde erfolgreich übertragen</div>');
ändern Sie diese Angaben nicht, sondern übernehmen Sie sie unverändert:
define('mod_file_transfer_success', '<div style="margin:10px 0px;padding:5px;border:1px solid #000;">File transfer successfull</div>');
Darüber hinaus werden Sie sogenannte Platzhalter kennenlernen, die von dem Modul zur Laufzeit mit Hilfe der Funktion sprintf() durch Werte ersetzt werden - so steht z.B. der Platzhalter %s für eine Zeichenkette, in diesem Fall für einen Dateinamen:
define('mod_file_transfer_success', '<p>Die Datei %s wurde erfolgreich übertragen</p>');
der während der Laufzeit eingesetzt wird.
Übernehmen Sie diese Platzhalter unverändert.
Es kann ein Problem auftreten, wenn ein <WERT> mehrere Platzhalter enthält und sich die Reihenfolge der Platzhalter in der Übersetzung ändern muss, weil sonst der Sinn verloren geht oder es ein schlechter Stil wäre.
In diesem Fall gehen Sie bitte wie folgt vor:
- Sie wissen genau, wie sprintf() funktioniert und was bei der Änderung der Reihenfolge von Platzhaltern zu beachten ist und ändern die Reihenfolge selbst, oder
- Sie nehmen Kontakt mit mir auf und teilen mir mit, in welcher Form Sie den übersetzten <WERT> benötigen - Sie erhalten von mir umgehend den angepassten <WERT>.
Des weiteren stolpern Sie vielleicht über einen <WERT>, mit dem Sie nichts anfangen können - bitte fragen Sie mich in diesen Fällen, ich helfe Ihnen gerne weiter.
Wenn Sie mit der Übersetzung fertig sind, schicken Sie mir bitte die in einem ZIP Archiv gepackte Sprachdatei. Die Datei wird von mir geprüft und danach unverzüglich in einer neuen Release des Modul, für das Sie die Übersetzung geschrieben haben, zum Download freigegeben.
Mit der Übersetzung von Open Source Modulen bzw. Add-ons leisten Sie einen sehr wichtigen Beitrag zur Entlastung der Programmierer und tragen aktiv für eine weitere Verbreitung der Software bei!
Vielen Dank für Ihre Unterstützung und aktive Mitarbeit.
![]()
Ralf Hertsch, 19.07.2010

