Der grösste Teil der Sessions, die beim WordCamp Berlin 2015 angeboten wurden, ist nun bei WordPress.tv verfügbar. Vielen Dank dafür noch einmal an die Organisatoren für die ganze Arbeit, die sie in das Event gesteckt haben. Für mich ist das auch der perfekte Zeitpunkt, über meinen ersten Vortrag zu schreiben und das entsprechende Video zu verlinken.
Die Slides hatte ich zwar schon kurz nach dem Vortrag gepostet, aber ich verlinke sie auch hier gern noch einmal, schließlich sollt ihr ja auch folgen können. Unter dem Video geht’s dann weiter mit der Beschreibung des Inhalts:
Ich weiß nicht, wie ihr das wahrnehmt, aber ich sehe Abkürzungen wie i18n, L10n (großes L, um Verwechselungen zu vermeiden), g11n, a11y oder p13n relativ häufig. Das sich dahinter die Begriffe Internationalization (Internationalisierung), Localization (Lokalisierung), Globalization (Globalisierung), Accessibility (Barrierefreiheit) und Personalization (Personalisierung) bekommt man dann auch schnell heraus und zur Entstehung gibt es auch einige interessante Anekdoten, aber man fühlt sich doch anfangs ziemlich verloren.
Für meinen Vortrag sind vor allem i18n und L10n wichtig. Die beiden Begriffe werden heute übrigens häufig zu g11n zusammengefasst. Um zu erklären, was sie überhaupt bedeuten, gibt es einiges an Material. Aber wenn es kurz und knackig sein soll: Wenn i18n abgeschlossen ist, kann man mit der Übersetzung der Software beginnen. Wenn L10n abgeschlossen ist, dann ist die Übersetzung durchgeführt. Im Normalfall beschäftigt sich also der Entwickler mit i18n und der Übersetzer mit L10n.
Wie kann man denn nun Plugins und Themen darauf vorbereiten, dass sie sich anderen Sprachen anpassen und schließlich die Übersetzungen anstelle der originalen Zeichenketten ausgeben (Folie 6). Um Plugins Sprachdateien laden zu lassen gibt es, gibt es den Befehl load_plugin_textdomain(), der üblicherweise während des Hooks plugins_loaded aufgerufen wird. Bei Themes ist der Befehl ganz ähnlich. Er heißt load_theme_textdomain() und wird aufgerufen, wenn der Hook after_setup_theme läuft.
Ist die Hürde erst einmal genommen, muss man mit Funktionen wie __(), _e() und _n() Freundschaft schließen (Folie 7) und zukünftig das direkte Hineinschreiben von Zeichenketten in die Themen- oder Plugindateien unterlassen. Wird das das Projekt etwas grösser, wird der Kontext eventuell wichtig, wann eine Zeichenkette ausgegeben wird. WordPress stellt dafür die Funktionen _x(), _ex() und _nx() zur Verfügung (Folie 8). Für das sichere Ausgeben von HTML gibt es dann noch die esc_attr_*() und esc_html_*() Varianten (Folie 9).
Es gibt zudem noch einige interessante Funktionalitäten von WordPress, die ihr in /wp-includes/l10n.php findet (Folie 10). Wenn ihr ein Datum oder eine Zahl der Region entsprechend ausgeben wollt, gibt es dafür noch so einige Funktionen (Folie 11). Und zum Thema Javascript gäbe es auch noch einiges zu sagen, was aber den Zeitrahmen eines Lightning-Talks gesprengt hätte.
Der restliche Teil der Folien beschäftigt sich mit PoEdit. Wie werden die Zeichenketten in PoEdit dargestellt? Haben die vorher vorgestellten Befehle einen Einfluss auf die Ausgabe im Editor? Weiterhin zeige ich die Einstellungen, die notwendig sind, damit der Klick auf den Button „Update“ auch wirklich die aktuellen Zeichenketten aus den Dateien holt. Ich selbst benutze gern PoEdit in Projekten, die für Kunden gedacht sind. Bei Open Source Plugins oder Themes, die bei WordPress.org gehostet sind gibt es ja inzwischen entsprechende Projektseiten, wie beispielsweise die Übersetzungen vom Multisite Language Switcher.
That’s it! Fragen? 😉