WordPress 2.9: Normaler String vs. Pluralstring

In WordPress gibt es eine Komponente namens „POMO“ und diese ist für die Übersetzung des Interfaces zu ständig. Dieser Teil hat vor einigen Wochen, auf Vorbereitung auf WordPress 2.9, eine Generalüberholung erhalten, damit das Laden von Gettext-Dateien schneller geht. Seit dem geht die deutsche Sprachdatei nicht mehr, hier meine Ursachenforschung inkl. Lösung.

Wir, damit meine ich das Team von WordPress Deutschland, erstellen unsere Sprachdatei für WordPress mit dem durchaus praktischen Plugin „Codestyling Localization„. Es erlaubt uns direkt aus dem Backend heraus Änderungen an der Sprachdatei vorzunehmen und diese live anzusehen und auszuprobieren. Bisher hat das auch wunderbar geklappt, jedoch erzeugt das Plugin einen kleinen Fehler, der früher keine Probleme gemacht hat, aber bei WordPress 2.9 das Backend englisch lässt.

Die neue Version der POMO-Klassen ist weniger fehlertoleranter als die Vorgängerversion, die den mit eingebauten Fehler vom Plugin einfach ignoriert hat. In der Sprachdatei gibt es nämlich zwei Strings (Übersetzungsketten), die es einmal „normal“ und als Pluralform gibt:

#: wp-admin/includes/dashboard.php:306
msgid "Spam"
msgid_plural "Spam"
msgstr[0] "Spam"
msgstr[1] "Spam"

#: wp-content/plugins/akismet/akismet.php:909
msgid "Spam"
msgstr "Spam"

#: wp-admin/edit-comments.php:144
msgid "All"
msgid_plural "All"
msgstr[0] "Alle"
msgstr[1] "Alle"

#: wp-content/plugins/akismet/akismet.php:753
msgid "All"
msgstr "Alle"

Nach der Spezifikation darf es diesen Fall jedoch nicht geben. Der normale String muss über den Pluralstring abgewickelt werden. Beweisen lässt sich sich das ganz einfach mit dem Gettext-Tool „msgfmt“, der bei der Kompilierung folgende Fehlermeldung heraus gibt:

de_DE.po:16067: duplicate message definition...
de_DE.po:1689: ...this is the location of the first definition
de_DE.po:16071: duplicate message definition...
de_DE.po:10108: ...this is the location of the first definition
msgfmt: found 2 fatal errors

Das Plugin erzeugt somit eine falsche MO-Datei, die vom neuen POMO-Reader nicht gelesen werden kann. Das Problem lässt sich einfach mit einem Texteditor beheben und das man die MO-Datei vorerst mit „msgfmt“ erstellt, bis das Plugin eine Aktualisierung erfahren hat. So eine Kleinigkeit kann so viele Nerven kosten und der Benutzer merkt es zum Glück am Ende nicht. Das ist wahre Übersetzer-Arbeit.