Zunächst erstellt man sich ein Verzeichnis, z.B. locales/
, in dem die Übersetzungsdateien abgelegt werden. Die Verzeichnisstruktur sollte Unterverzeichnisse für jede Sprache, beispielsweise en/
für Englisch, de/
für Deutsch, usw. enthalten und wie folgt aufgebaut sein:
locales/ de/ LC_MESSAGES/ default.po default.mo en/ LC_MESSAGES/ ...
In diese Verzeichnisse kommen dann die Übersetzungsdateien (*.mo, *.po). Wie diese aufgebaut sind bzw erstellt werden, soll an dieser Stelle nicht weiter erläutert werden.
Einbindung in PHP
So sieht die Einbindung von Gettext in PHP aus:
$locale = 'de_DE'; $directory = './locales'; // diesen Pfad entsprechend anpassen! $domain = 'default'; setlocale(LC_ALL, $locale.'.utf8'); // 'de_DE.utf8' (wichtig: utf8 ohne '-'!) putenv('LC_ALL='.$locale); bindtextdomain($domain, $directory); // 'default', './locales' textdomain($domain); // 'default' bind_textdomain_codeset($domain, 'UTF-8');
Zu beachtende Punkte
Gettext funktioniert nicht wie gewünscht? Lokalisierung wird nicht angezeigt? Dies dann kann verschiedene Gründe haben. Hier ein paar Anmerkungen:
Der String in $locale
muss eine gültige Lokalisierung sein, welche auch auf dem System zur Verfügung steht. Ist diese korrekt (bzw. existiert diese), dann gibt setlocale()
true
zurück, andernfalls false
.
Im Fehlerfall sollte man also prüfen, ob das System die angegebene Lokalisierung auch bereitstellt. Das kann man der Ausgabe folgender Zeile entnehmen:
print_r(ResourceBundle::getLocales(''));
Das Encodings (UTF-8) muss bei setlocale()
ohne jeglichen Bindestrich angegeben werden.
Die Angabe ‘default’ bezieht sich auf die Domain, also den Dateinamen der *.mo-Datei. Die *.po-Datei werden übrigens nicht direkt von Gettext verwendet. Diese werden aber benötigt, um die *.mo-Dateien zu erstellen.
Leave a Reply