PHP: strftime() macht trotz setlocale(LC_TIME, 'de_DE.utf-8') nur englische Ausgaben? Die Lösung.

Problem:

Mir ist es also auch passiert, dass die PHP-Funktion strftime() trotz vorherigen setlocale(LC_TIME, 'de_DE.utf-8') nicht wie erwartet deutsche (oder finnische, russische,...) Ausgaben macht, sondern englische. Merkwürdig: Auf einem Laptop mit Ubuntu hatte das vorher sehr gut geklappt, auf dem Server dann nicht.

Ursache:

Nach ein wenig Herumlesen bin ich darauf gekommen, dass PHP die Bibliotheken des Betriebssystems nutzt. Ein erster Blick mit

~> locale -a

verriet mir, dass die Datenbank für die mehrsprachige Ausgabe unter Ubuntu eine lange Liste ergab, unter Debian dann eine sehrv kurze. Halt nur englisch (en_US).

Lösung:

Erster Schritt:

Die Datei /etc/locale.gen enthält eine Liste der unterstützten Sprachen. Darin sind die meisten Sprachen ausgeschaltet. Diese Liste kann man weitgehend automatisch bearbeiten, das Beispiel zeigt die Aktivierung aller Sprachen mit dem charset (der Kodierung) UTF-8. Das Original wird als /etc/locale.gen.backup gesichert.

~> su [Root-Passwort]
#> mv /etc/locale.gen /etc/locale.gen.backup 
#> grep 'UTF-8' < /etc/locale.gen.backup | sed "s/^# //" | tee /etc/locale.gen 
#> locale-gen

Das dauert allerdings für alle Sprachen seine Zeit...

Zweiter Schritt:

Falls PHP als Modul des Apache Webservers läuft muss dieser neu gestartet werden:

#> service restart apache2

Das wars.


Weitere Informationen in diesem Bereich: