Gerade beim Einsatz von englischsprachigen Plugins passiert es oft, dass man Texte der dt. Übersetzung gerne anpassen möchte. Generell funktioniert dies über das Bearbeiten der *.po- bzw. *.mo-Dateien und stellt mit Hilfe eines Editors wie z. B. Poedit kein großes Problem dar. Aber es bleibt natürlich die Problematik, dass Änderungen der Sprachdatei bei einem Update des Plugins überschrieben werden. Um dies zu verhindern muss man zwei Sachen tun.
- Die geänderte Sprachdatei muss an einem anderen Ort als die Originaldatei gespeichert werden.
- Dem Plugin muss mitgeteilt werden welche Sprachdatei, nämlich die geänderte, geladen werden soll.
Hinweis: Bei den Sprachdateien handelt es sich immer um zwei Dateien. Eine mit der Endung *.po und eine mit der Endung *.mo. Im Editor bearbeitet wird die *.po-Datei, beim Abspeichern wird eine *.mo-Datei erstellt. Es empfiehlt sich immer beide Dateien zusammen an den neuen Speicherort hochzuladen.
Wie funktioniert das?
Sprachdatei finden und neu abspeichern
Zunächst einmal “sucht” man sich die Sprachdatei des Plugins. Meist befindet die sich in einem Unterordner des Plugins, der lang oder languages o. ä. heißt. Diese Datei bearbeitet man nun mit einem Editor und speichert sie dort ab, wo WordPress Sprachdateien speichert: wp-content/languages, allerdings in einem Unterordner, der genau so heißt wie der Ordner des Plugins.
Also die Originalsprachdatei(en) gab es z. B. hier wp-content/plugins/the-events-calendar/lang/tribe-events-calendar-de_DE.po und *.mo
Die geänderten Dateien werden in einen neu erstellten Ordner unter wp-content/languages/the-events-calendar/tribe-events-calendar-de_DE.po und *.mo hochgeladen.
Dabei muss man darauf achten, dass die Ordnernamen identisch sind. Sie weichen z. T. erheblich vom eigentlichen Namen des Plugins ab.
Textdomain
Jetzt brauch man noch den Namen der Text Domain des Plugins. Sie entspricht dem Dateinamen der Sprachdateien. Auch hier gilt “Achtung”: er kann sowohl vom Plugin-Namen wie auch von der Ordnerbezeichnung abweichen. Um sicher zu gehen findet man sie auch im Kopfbereich der Plugin-Datei, zum Beispiel so:
<?php
Neue bzw. geänderte Sprachdatei laden
Um nun die abgeänderte Sprachdatei, an ihrem neuen Speicherort zu laden muss man noch folgendes in die functions.php einfügen:
add_action('load_textdomain', 'load_custom_language_files_for_my_plugin', 10, 2);
function load_custom_language_files_for_my_plugin($domain, $mofile)
{
if ('tribe-events-calendar' === $domain && plugin_dir_path($mofile) === WP_PLUGIN_DIR.'/the-events-calendar/lang/')
{
load_textdomain('tribe-events-calendar', WP_LANG_DIR.'/the-events-calendar/'.$domain.'-'.get_locale().'.mo');
}
}
Dabei galt Ordnername = the-events-calendar und Textdomain = tribe-events-calendar!
Wenn man nun alles richtig benannt hat muss man ein Update des Plugins nicht fürchten. Die geänderten Übersetzungen bleiben erhalten.
Via Weblogistan
Wir arbeiten seit 20 Jahren mit WordPress und bieten diverse Dienstleistungen rund um das System an. Kontaktiere uns für weitere Informationen oder für ein Angebot.
Eine Frage:
Wie sieht der Code aus, wenn man die Sprachdateien von zwei oder mehr Plugins ändert?
Wenn du willst WordPress Sprachdataien übersetzen, kannst du sehr einfach diese Lokalisierungstool benutzen: https://poeditor.com/
Das war nicht meine Frage.
Klingt interessant. Danke für die Anleitung.
Ich habe hierzu eine Frage:
1. Ist es zwingend, den wp-content/languages/ Ordner zu nutzen oder kann man auch einen beliebigen Ordner z.B. unter wp-content/upload/sites/[blogdir]/[plugin_name]/lang anlegen?
Man müsste hier sicher das WP_LANG_DIR. ändern. Oder sehe ich das falsch?
Ziel ist, für unterschiedliche Blogs in einer Multisite-Installation unterschiedliche Sprachfiles anlegen zu können (z.B. Du und Sie).
Es wäre super, wenn sowas möglich wär.
Besten Dank! und viele Grüße
Andreas
Hi!
Guter Ansatz, aber wird die functions.php nicht beim Update nicht auch überschrieben?
Die functions.php sollte idealerweise natürlich im Child Theme sein 😉
Hallo,
danke für den hilfreichen Beitrag.
Mich würde, wie Andreas oben auch, interessieren, ob man für ein Plugin die Sprachdateien in einer Multisite-Installation auch pro Blog hinterlegen kann.
Die Frage war:
Ist es zwingend, den wp-content/languages/ Ordner zu nutzen oder kann man auch einen beliebigen Ordner z.B. unter wp-content/upload/sites/[blogdir]/[plugin_name]/lang anlegen?
Vielen Dank für eine Antwort und beste Grüße
Andreas
Ich würde die Unterordner für die übersetzten Sprachdateien im Child Theme Ordner anlegen.
../child_theme/languages/plugin_1/
../child_theme/languages/plugin_2/
../child_theme/languages/plugin_3/
[…] man der Auswahlbox eine andere Überschrift spendiert hat, der muss um dies zu lösen den Umweg über die Sprachdatei […]