HowToGettext

Lokalisierung von Strings im PHP-Code

Stud.IP nutzt für die Internationalisierung das auch in vielen anderen Software-Projekten verwendete gettext-Paket.

Dabei erfolgt eine Trennung zwischen der Vorbereitung der lokalisierten Ausgabe von Texten (Internationalisierung, dies ist Aufgabe jedes Programmierers) und der eigentlichen Übersetzung der Texte mit Hilfe spezieller Tools wie z.B. "kbabel" (Lokalisierung, dies ist die Aufgabe des Maintainers einer Sprachdatei).

Die Ausgangssprache, die im Quellcode verwendet wird, ist bei Stud.IP deutsch.

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 _().

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:

echo _("<tr><td>Meine Veranstaltungen</td></tr>");

Richtig:

echo "<tr><td>" . _("Meine Veranstaltungen") . "</td></tr>";

Oder Richtig:

printf("<tr><td>%s</td></tr>", _(" Meine Veranstaltungen "));

Falsch:

print _("error§Keine Berechtigung!§");

Richtig:

printf("error§%s§", _("Keine Berechtigung!"));

Falsch:

echo _("Sie haben $count neue Nachrichten.");

Auch falsch:

echo _("Sie haben ") . $count . _(" neue Nachrichten.");

Richtig:

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:

echo _("Sie können diese Datei ") . "<b>" . _("nicht") . "</b>" . _(" löschen");

Richtig:

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:

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 Button-Api erzeugt, diese kümmert sich dann um die Lokalisierung.

Letzte Änderung am September 19, 2013, at 10:05 AM von mlunzena.