Sprachdateien von WordPress-Plugins anpassen und vor dem Überschreiben schützen

WordPress anpassen

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.

  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.

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
/*
Plugin Name: The Events Calendar
Description: The Events Calendar is a carefully crafted, extensible plugin that lets you easily share your events. Beautiful. Solid. Awesome.
Version: 3.11.1
Author: Modern Tribe, Inc.
Author URI: http://m.tri.be/1x
Text Domain: tribe-events-calendar
License: GPLv2 or later
*/

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)
{
    // 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 ('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 Dienst­leistungen rund um das System an. Kontaktiere uns für weitere Informationen oder für ein Angebot.

Verwandte Beiträge:

9 Kommentare

  1. Eine Frage:
    Wie sieht der Code aus, wenn man die Sprachdateien von zwei oder mehr Plugins ändert?

  2. 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

  3. 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

    1. 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/

Kommentare sind geschlossen.