Die WordPress-Lokalisierungsfunktionen ermöglichen es Ihnen, Plugins und Themes über WordPress-Sprachdateien (po/mo-Dateien) einfach übersetzbar zu machen.
Dies gilt insbesondere seit WordPress 3.7 und wurde seit WordPress 4.6.
Am gesamten Übersetzungssystem für WordPress wurden viele Verbesserungen vorgenommen – ich fand, dass es wirklich einen aufgefrischten Beitrag braucht.
WordPress-Sprachdateien – Die Verwirrung (Entwickler-Edition)
Für Entwickler läuft es darauf hinaus, wie man WordPress auf die richtige Weise mitteilt, dass Übersetzungsdateien vorhanden sind.
Als Entwickler wurden wir angewiesen, „load_plugin_textdomain()
In der Vergangenheit war dies jedoch der einzige Ort, an dem WordPress suchte, und wenn ein Kunde dort eine eigene Sprachdatei hinzufügte, war diese beim nächsten Update verschwunden!
Vor einiger Zeit gab es einen Artikel im Web, der empfahl, einen zweiten Aufruf mit der Funktion „load_textdomain()
Das bedeutete, dass Benutzer ihre Sprachdateien an einem vordefinierten Ort im WP-Sprachordner ablegen konnten und die Übersetzung beim Plugin-Update nicht verloren ging.
WordPress-Sprachdateien – Die Verwirrung ( Benutzer-Edition )
Benutzer müssen wissen, wo sie eine benutzerdefinierte Übersetzung für ein Plugin/Theme ablegen sollen – das Problem ist, dass dies in der Vergangenheit an mehreren verschiedenen Orten möglich war.
Die WP-Dokumentation empfiehlt Entwicklern, einen Link zu einem Ordner namens „languages even then this will be lost when the plugin/theme is updated.
Some developers would add a second check again in a place of the developers choosing, but often in a custom named folder in the WP languages folder.
This meant there was no consistent way for a user to know where to place their custom translation files safely.
Loading language files the correct way (2017)
Since WP 4.6 this got a whole lot easier for both users and developers!
As a developer you now just have to make sure you are loading your language files correctly, following the WP documentation as below:
<br />
// for plugins<br />
add_action( 'init', 'myplugin_load_textdomain' );<br />
function myplugin_load_textdomain() {<br />
load_plugin_textdomain( 'my-plugin', false, basename( dirname( __FILE__ ) ) . '/languages' );<br />
}<br />
<br />
// for themes<br />
add_action( 'after_setup_theme', 'my_theme_setup' );<br />
function my_theme_setup(){<br />
load_theme_textdomain( 'my-theme', get_template_directory() . '/languages' );<br />
}<br />
Notice we fire these on the ‘init’ and ‘after_setup_theme’ hooks, this should mean everything will load nicely.
If you fire it directly or before their respective hooks you can have problems with some strings not translating and plugins to manipulate translations or to create multi lingual websites such as WPML, might not work at all.
As users we now have a convenient and consistently named place we can place our language files.
- Für Plugins: /wp-content/languages/plugins/my-plugin-en_US.mo
- Für Themes: /wp-content/languages/themes/my-theme-en_US.mo
'my-plugin' und 'my-theme' sind die Textdomain des Plugins/Themes (in der Regel in der plugin readme.txt oder der theme style.css ganz oben zu finden).
Dies ist eine erhebliche Verbesserung gegenüber der alten Methode und verhindert in den meisten Fällen, dass Übersetzungen bei Updates verloren gehen.
In manchen Fällen verfügt das Plugin/Theme möglicherweise bereits über eine neue Übersetzung in Ihrer Sprache, die auf wp.org gespeichert ist. Falls dies der Fall ist, könnte diese Ihre .mo-Datei überschreiben – in den meisten Fällen ist das jedoch gewünscht.
Sie können zu Übersetzungen auf wp.org beitragen, wenn das Plugin dort gehostet wird. Bei einem Premium-Plugin ist die Wahrscheinlichkeit, dass es überschrieben wird, sehr gering.
Bonusinformationen
WordPress sucht Ihre WordPress-Sprachdateien an verschiedenen Orten. Bei einem Plugin mit der Textdomain 'my-plugin' würde es zunächst hier suchen:
/wp-content/languages/plugins/my-plugin-en_US.mo
Wenn dort keine Übersetzung gefunden wird und das Plugin angibt, wo lokal eine zu finden ist, wird es dort nachsehen:
/wp-content/plugins/my-plugin/languages/my-plugin-en_US.mo
Wenn das Plugin keinen Pfad angibt, sucht WordPress stattdessen hier:
/wp-content/languages/my-plugin-en_US.mo
Die WordPress-Dokumentation sollte befolgt werden, aber in der Praxis müssen Sie ab WP 4.6 nicht einmal eine lokale Datei angeben, wenn Sie keine einbinden (sofern sie im wp.org-Repository gespeichert sind). Sie könnten also einfach Folgendes hinzufügen:
<br />
// for plugins<br />
add_action( 'init', 'myplugin_load_textdomain' );<br />
function myplugin_load_textdomain() {<br />
load_plugin_textdomain( 'my-plugin');<br />
}<br />
<br />
// for themes<br />
add_action( 'after_setup_theme', 'my_theme_setup' );<br />
function my_theme_setup(){<br />
load_theme_textdomain( 'my-theme');<br />
}<br />
Ich hoffe, das bringt etwas Klarheit in das Thema Übersetzungen. Wenn Sie Fragen haben oder etwas ergänzen möchten, hinterlassen Sie bitte unten einen Kommentar.