Internationalisierung
Alle Strings im System dürfen nicht in den HTML-Teilen der Sourcedateien stehen, sondern müssen aus PHP-Abschnitten heraus geschrieben werden.
Die zu übersetzenden Zeichenfolgen werden im Programmcode in die spezielle Funktion gettext()
eingeschlossen. Benutzt werden sollte nur die Kurzform, in PHP realisiert als _()
.
(:source lang=php :)echo _("Meine Veranstaltungen")
In die zu übersetzenden Strings sollte reiner Text, keine HTML-Struktur der Seite und kein Programmcode wie z.B. Variablennamen eingeschlossen werden.
Falsch:
(:source lang=php :)echo _("<tr><td>Meine Veranstaltungen</td></tr>");
Richtig:
(:source lang=php :)echo "<tr><td>" . _("Meine Veranstaltungen") . "</td></tr>";
Oder Richtig:
(:source lang=php :)printf("<tr><td>%s</td></tr>", _(" Meine Veranstaltungen "));
Falsch:
(:source lang=php :)print _("error§Keine Berechtigung!§");
Richtig:
(:source lang=php :)printf("error§%s§", _("Keine Berechtigung!"));
Falsch:
(:source lang=php :)echo _("Sie haben $count neue Nachrichten.");
Auch falsch:
(:source lang=php :)echo _("Sie haben ") . $count . _(" neue Nachrichten.");
Richtig:
(:source lang=php :)printf(_("Sie haben %s neue Nachrichten."), $count);
Die in einen gettext()
eingeschlossenen Strings sollten vollständige Sätze bzw. Informationsblöcke enthalten, also kein Zusammenstückeln aus einzelnen Teilstrings (siehe oben).
Schliessen sich die beiden vorangegangenen Vorschriften gegenseitig aus, weil z.B. ein Teil eines Satzes formatiert wird, so hat die letztere Regel Vorrang (der Übersetzer braucht sowieso html-Grundlagenkenntnisse.
Falsch:
(:source lang=php :)echo _("Sie können diese Datei ") . "<b>" . _("nicht") . "</b>" . _(" löschen");
Richtig:
(:source lang=php :)echo _("Sie können diese Datei <b>nicht</b> löschen");
Komplizierte html-Ausdrücke, wie z.B. ein klickbares Icon im Text sollten dagegen via %s
aus dem String herausgezogen werden
Richtig:
(:source lang=php :)printf(_("Unter %s gelangen Sie zu Ihren Terminen."), "<a href><img src = \"pictures/icon-lit.gif\"></a>");
Text-Buttons
Beschriftete und damit zu übersetzende Formular-Buttons werden generell nicht direkt in den Code eingebunden, sondern immer über die Funktion "makeButton()
" erzeugt, diese kümmert sich dann um die Lokalisierung.