Code Styling Project

It’s not a bug, it’s always a feature.
  • Deutsch
  • English
  • rss
  • Home
  • Blog
  • Impressum
  • Entwicklungen
  • Fehlerbehebungen
  • Anleitungen

WordPress 2.8 ändert Sprachdatei-Zugriffe

codestyling | 03. März 2009 | 01:32

Ich befasse mich nun schon eine Weile mit WordPress und den Lokalisierungsmöglichkeiten. Weil nun auch mein Lokalisierungsplugin einige Beliebtheit genießt, teste ich dieses auch mit den aktuellen Entwicklerversionen. Dabei stellte sich jedoch heraus, daß ein größerer Umbau in der Verarbeitung von Sprachdateien stattfindet. Es wird nicht nur die in WordPress benutzte Klassenstruktur neu geschrieben sondern auch Funktionen hinzugenommen aber auch einige als veraltet deklariert. Was das bedeutet und nach sich zieht, versuche ich kurz zu erläutern.

neue Klassenstrukturen

Ab WordPress 2.8 wird es einen neuen Unterordner in wp-includes geben, der auf den Namen pomo getauft wurde. Hier wird man in Zukunft alle Dateien finden können, die etwas mit der Behandlung der Sprachdateien zu tun haben. Die bereits bekannte streams.php (bekannt durch ein paar unschöne Abstürze) und deren Klassen werden gerade von Grund auf neu geschrieben.
An und für sich eine gute Sache, wenn man nicht schon wieder die gleichen Fehler einbauen würden, wie sie von mir in der derzeitigen Version gefixed wurden. Es wird so, wie es jetzt ist, durch mb_string overload Konfigurationen bei manchen Hostern wieder mal abstürzen (Ticket #5599). Mal sehen, ob ich wieder eingreifen muß …

Durch zusätzliche Klassen für das Lesen von *.mo und *.po Files bekommt das Ganze endlich ein wenig Kontur und kann dann evtl. auch mal anderweitig verwendet werden.

Übersetzungsfunktionen

Welch eine Überraschung, es kommen nicht nur neue Funktionen hinzu sondern es werden gleich mal ein paar bekannte Funktionen als veraltet erklärt. Die in der l10n.php deklarierten Funktionen im Einzelnen:

Funktion: __()

Diese Funktion wird beibehalten und arbeitet so wie bisher auch.

Funktion: _e()

Diese Funktion wird beibehalten und arbeitet so wie bisher auch.

Funktion: _c()

Diese Funktion wird beibehalten und arbeitet so wie bisher auch.

Funktion: __ngettext()

Die Pluralisierungsfunktion wird als _deprecated_function( __FUNCTION__, ‘2.8′, ‘_n()’ ); eingestuft und durch die Schreibweise _n() ersetzt. Man kann sie zwar noch aufrufen aber sie wird mit 2.9 vermutlich ausgebaut sein.

Funktion: __ngettext_noop()

Auch diese nicht so bekannte Pluralisierungsfunktion wird als _deprecated_function( __FUNCTION__, ‘2.8′, ‘_n_noop()’ ); eingestuft und durch die Schreibweise _n_noop() ersetzt. Man kann sie zwar noch aufrufen aber sie wird mit 2.9 vermutlich ausgebaut sein.

Kommen wir nun zu den Überraschungen, den weiteren ganz frisch eingeführten Funktionen:

Funktion: _x()

Diese Funktionen hat ein ähnliches Verhalten wie die Funktion _c(), sie wird für Kontext bezogene Ausgaben benötigt. Es folgen hier mal die beiden Funktionssignaturen aus der Entwicklerversion:

PHP
1
2
function _c($text, $domain = 'default')
function _x( $single, $context, $domain = 'default' )
timing: 0.093s

Der eigentliche Unterschied besteht darin, das der Kontext nicht mehr im Text selbst enthalten ist sondern als gesonderter Parameter angegeben werden kann. Um dies zu verdeutlichen, hier mal an exemplarischen Aufrufen:

PHP
1
2
3
echo _c('Auto|vehicle', 'textdomain');
echo _x('Auto', 'vehicle', 'textdomain');
 
timing: 0.135s

Dies hat aber auch Auswirkungen auf die Vorlage der Sprachdatei (*.po) Datei, denn dort wird das dann so aussehen:

GNU Gettext
1
2
3
msgctxt "vehicle"
msgid "Auto"
msgstr "Fahrzeug"
timing: 0.002s

Die meisten Übersetzungstools verstehen und verarbeiten dies korrekt, auch PoEdit. Allerdings zeigt PoEdit diese Art der Kontexte nirgendwo an, das sollten die Übersetzer beachten!

Funktion:_nx()

Dies ist ebenfalls einen Erweiterung von _n() (oder bisher __ngettext()) und ermöglicht eine Kontext bezogene Übersetzung in der Pluralisierung. Die zugehörige Signatur sieht dann so aus:

PHP
1
function _nx($single, $plural, $number, $context, $domain = 'default')
timing: 0.076s

Zusammenfassung

Wenn man sich anschaut, was nun auf einmal für ein Betrieb gemacht wird, Lokalisierung in WordPress voranzutreiben, dann kann fragt man sich, warum das mehr als 10 WordPress Versionen gebraucht hat! Dennoch begrüsse ich jeden Fortschritt, wenn gleich auch eine Menge Probleme und Aufgaben damit einhergehen:

  • Plugin/Theme Autoren sollte anfangen, die veralteten Funktionen zu ersetzen
  • Übersetzer haben jetzt neue Stolperfallen in den *.po Dateien, auf die man achten muß (neue Kontexte)
  • Sprachdateibehandlung in WordPress muß nochmal eingehend geprüft werden vor Auslieferung der 2.8
  • … und ich darf mein Sprachdatei-Plugin wieder mal umschreiben und anpassen, na toll !!!

Die Problematik mit den getrennten Sprachdateien von Front- und Backend ist auch mit dieser größeren Anpassung von Seiten WordPress nicht zu machen, das wird noch ein ganz schönes Stück Arbeit, das den Core Entwicklern zu erkären (Mailverkehr läuft bereits).

Kategorien
Deutsch, WordPress (DE)
RSS Kommentare
RSS Kommentare

« Wie verwende ich WordPress Metaboxen in eigenen Plugins Permalinks mit Umlauten ohne o42-clean-umlauts »

1 Antwort    Schreib einen Kommentar

Patric Comin

Patric Comin

03.03.2009 | 12:38

Danke für diesen schönen, kurzen aber dennoch hochinteressanten Artikel.
Ich freue mich auch schon sehr auf Wordpress 2.8, aber angesichts der Probleme die auftauchen können, wird meine Anschicht Wordpress gegenüber ein wenig getrübt.

Ich denke es wird von meiner Seite aus das beste sein, da sich keine Plugins etc. erstelle, das ich die 2.8 Version überspringen werde und erst bei der 2.8.x einsteige.
Dieses habe ich beim erscheinen der 2.7 Version auch geamacht und bin damit eigentlich auch ganz zufrieden.

Im Zuge eines Update beim Kunden würde ich dieses ebenfalls vorziehen, da dem Kunden und auch mir einiges ab Unannehmlichkeiten erspart bleibt. Zudem habe ich dir Möglichkeit den Kunden besser beraten zu können.

Antworten »

Du kannst diese Tags verwenden : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Navigation

  • Allgemein
  • jQuery in WordPress
  • Politik
  • WordPress (DE)

Suche

Neuere Beiträge ...

  • WordPress 2.8 ändert das Metabox Modell für Admin Seiten
  • PHP Funktion version_compare korrekt verwenden
  • Mathematische Finesse der Abwrack-Prämie
  • WordCamp Vortrag “Lokalisierung” als PDF Download
  • Permalinks mit Umlauten ohne o42-clean-umlauts

Ältere Beiträge ...

  • Wie verwende ich WordPress Metaboxen in eigenen Plugins
  • PHPMailer in WordPress - warum fehlen Übersetzungen ?
  • PHP Funktion setlocale() … und Zahlen stimmen nicht mehr
  • prozentuale Angaben - was Browser meinen zu verstehen
  • WordPress Lokalisierung - Features und Weiterentwicklung
rss RSS Kommentare valid xhtml 1.0 design by jide powered by Wordpress get firefox