i18n mit PHP und gettext

Internationalisierung einer Webseite wird dann ein Thema, wenn das Publikum beginnt mehrsprachig zu werden, oder das Zielpublikum mehrsprachig sein soll, bis anhin jedoch nur eine Sprache angesprochen wurde.

Die erweiterung gettext ist seit PHP 5.3 standardmässig dabei. Wenn die Website extern gehostet ist, bitte mit dem Hoster klären ob gettext aktiv ist oder nicht.

PHP Datei für die Übersetzung vorbereiten:

Als Beispiel PHP nehmen wir eine Seite, welche Hallo Welt in verschiedenen Sprachen ausgeben kann.

Damit wir die gettext Funktionen auch nutzen können müssen wir diese zuerst initialisieren:

$locale = "de_DE";
if(isset($_GET['lang'])){
$locale=$_GET['lang'];
}
putenv('LC_ALL='.$locale);
setlocale(LC_ALL, $locale); //Sprache auf Deutsch oder 'lang' parameter in der URL setzen
bindtextdomain("messages", "locale"); //Basisverzeichnis für übersetzungen setzen
textdomain("messages");  //Er würde jetzt in der Datei "locale/[sprachcode]/LC_MESSAGES/messages.mo" nach Übersetzungen suchen

Um gettext nun aufzurufen und den Text zu übersetzen gibt es folgende Möglichkeiten:

_("")
gettext("")

Zwischen den Hochkommas wäre jeweils das Keyword, oder der Text der übersetzt werden soll.
In unserem Fall nennen wir das keyword „hi“.

echo _("hi");


Übersetzungen mit poEdit erstellen:

Als nächsten Schritt müssen wir nun noch den oben erwähnten Pfad anlegen:

für Deutsch:
locale/de_DE/LC_MESSAGES/
für Englisch:
locale/en_EN/LC_MESSAGES/
weitere Sprachen:
locale/[sprachcode]/LC_MESSAGES/
usw.

die PHP Datei liegt im gleichen Verzeichnis wie der Ordner „locale“.
In die Verzeichnisse müssen nun die „.mo“ Dateien welche aus den „.po“ Dateien von poEdit generiert werden.

Wir öffnen also das Programm poEdit.
Und wählen „File>New Catalog“

Im Tab „Sources paths“ geben wir den exakten Pfad zu Unserem PHP File an:

Mit einem Klick auf OK können wir einen Speicherpfad auswählen. Wir speichern die Datei unter dem Namen messages.po.
Nun scannt er alle PHP Dateien in dem vorher definierten Pfad nach zu übersetzenden Ausdrücken.

poEdit gibt uns ein Summary der gefundenen Ausdrücken zurück.

Übersetzen abspeichern, und die „.mo“ Datei, welche im selben Verzeichnis liegt wie die „.po“ Datei in den entsprechenden Sprachordner auf dem Server: z.B. „locale/de_DE/LC_MESSAGES/“ laden.

Dieser Vorgang kann nun für alle gewünschten Sprachen wiederholt werden.

Rufen wir nun unser PHP im Browser auf mit z.B. dem Parameter de_DE (index.php?lang=de_DE)

Zeigt uns die Seite: „Hallo Welt“

poEdit Homepage
gettext php Manual

2 thoughts on “i18n mit PHP und gettext”

Leave a Reply