Sprachdateien von WordPress-Plugins ändern & Dateien beim Update schützen

Beim Einsatz fremdsprachiger Plugins passiert es oft, dass die Texte der dt. Übersetzung angepasst werden müssen. Übersetzungen finden sich generell in den *.po- bzw. *.mo-Dateien. Mit Hilfe eines Editors wie z. B. Poedit wird die *.po-Datei bearbeitet. Beim abspeichern der Änderungen wird automatisch die *.mo-Datei generiert. Es empfiehlt sich immer beide Dateien zusammen an einem Speicherort vor zu halten. Was bleibt ist die Problematik, dass Änderungen der Sprachdatei bei einem Update des Plugins überschrieben werden. Um dies zu verhindern muss man zwei Sachen tun.

  1. Die geänderte Sprachdatei muss an einem anderen Ort als die Originaldatei gespeichert werden.
  2. Dem Plugin muss mitgeteilt werden welche Sprachdatei, nämlich die geänderte, geladen werden soll.

Wie das im Einzelnen funktioniert wird im folgenden erläutert.

I) Sprachdatei finden und neu abspeichern

Meist befinden sich die Sprachdateien in einem Unterordner des Plugins, mit der Bezeichnung lang oder languages. Über ein .ftp-Programm lädt man sich sowohl die *.po und *.mo Datei herunter. Die bearbeitete .po-Datei sowie die neue *.mo Datei wird anschließend nicht wieder im Plugin-languages-Ordner abgespeichert, wo sie bei einem Update des Plugins überschrieben werden würden.

WordPress speichert seine Sprachdateien im Ordner: wp-content/languages. In diesem  Verzeichnis wird ein Unterordner mit dem selben Namen des Pluginsordners erstellt. In dieses Verzeichnis werden dann die veränderten Sprachdateien .po und .mo des Plugins geladen.

Beispiel: Waren die Originalsprachdatei(en) des Plugins „thePluginName“ unter wp-content/plugins/thePluginName/languages/the-plugins-language-de_DE.po und *.mo gespeichert, legt man die veränderten Dateien unter wp-content/languages/thePluginName/the-plugins-language-de_DE.po und *.mo ab.

Achtung: Name des Unterordners muss identisch sein mit dem Ordnername des Plugins. Die Bezeichnung der Sprachdateien muss unverändert bleiben. Nur so kann man gewährleisten, dass im nächsten Schritt die neuen Sprachdateien auch eingebunden werden.

Bei einem Update des Plugins bleiben nun die neuen Sprachdateien unverändert.

II) Einbinden der neuen Sprachdatei

Um die neue Sprachdatei in WordPress zu laden, bedarf es einer neuen Funktion in der fuctions.php meines Themes. Diese findet sich unter wp-content/themes/theThemeName/.

In dieser Funktion wird die Bezeichnung der Text Domain des Plugins benötigt. Diese Bezeichnung finde ich im header der Plugin-Datei selbst.

Die Plugin-Datei befindet sich direkt im Ordner des Plugins und ist benannt wie der Pluginordner – in unserem Beispiel wäre das also thePluginName.php.

<?php
/*
Plugin Name: The Theme Name
Description: The Theme Name describes the possibility to change language files.
Version: 3.11.1
Author: proaxess.de
Author URI: https://proaxess.de
Text Domain: WPLAN
License: GPLv2 or later
...
*/

Achtung: Die Vergabe der unterschiedlichen und der selben Bezeichnungen ist wesentlich für die Funktionalität der Änderungen!

Damit hat die neue Funktion in der functions.php folgende Form:

add_action('load_textdomain', 'load_custom_language_files_for_my_plugin', 10, 2);
function load_custom_language_files_for_my_plugin($domain, $mofile)
{
    // Note: the plugin directory check is needed to prevent endless function nesting
    // since the new load_textdomain() call will apply the same hooks again.
    if ('WPLAN=== $domain && plugin_dir_path($mofile) === WP_PLUGIN_DIR.'/thePluginName/language/')
    {
       load_textdomain('WPLAN', WP_LANG_DIR.'/thePluginName/'.$domain.'-'.get_locale().'.mo');
   }
}


Dabei ist:

  • Ordnername des Plugins = thePluginName,
  • Text Domain = WPLAN und
  • Ordnername der ursprünglichen Sprachdatei = ThePluginName/language/

So nun alles funktioniert und die neuen Übersetzungen der *.po/*.mo eingesetzt werden, bleiben diese auch nach einem Update des Plugins bestehen.