Eigene Übersetzungsdateien in WordPress laden

foto von olilynch
foto von olilynch

Die erste Wahl, eigene Übersetzungsdateien anzulegen und zu verwenden, ist das Plugin Loco Translate. Wer Sprachdateien allerdings lieber mit poedit verwaltet, kann mit dem load_textdomain_mofile-Filter festlegen, dass die eigene Übersetzungs-Datei statt der offiziellen geladen wird.

add_filter( 'load_textdomain_mofile', function ( $mofile, $domain ){

     if ( file_exists(  WP_LANG_DIR . '/custom/themes/' . $domain . '-' . get_locale() . '.mo' ) ) {
        $mofile = WP_LANG_DIR . '/custom/themes/' . $domain . '-' . get_locale() . '.mo';
        return $mofile;
    } elseif ( file_exists(  WP_LANG_DIR . '/custom/plugins/' . $domain . '-' . get_locale() . '.mo' ) ) {
        $mofile = WP_LANG_DIR . '/custom/plugins/' . $domain . '-' . get_locale() . '.mo';
        return $mofile;
    } else {
        return $mofile;
    }

}, 10, 2 ); 

Allerdings klappte in einem Fall neulich weder das eine, noch das andere. Die eigene Sprachdatei wurde weder über Loco Translate, noch über den Filter geladen. Es lag an der Art und Weise, wie in dem Plugin die text_domain definiert war – abhängig davon, ob an der üblichen Stelle eine Übersetzungsdatei zu finden war.

In diesem Fall half, wie im folgenden Snippet vorzugehen, und die textdomain zuerst zu entfernen, und dann mit Verweis auf die eigene Sprachdatei neu zu laden.

add_action('plugins_loaded', function() {

    $text_domain = 'plugin-name';
    $locale = get_locale();

    $nlf = trailingslashit( WP_LANG_DIR )   . trailingslashit('custom/plugins')  . sanitize_title( $text_domain ) . '-' . $locale . '.mo';
    $olf = trailingslashit( WP_LANG_DIR )   . trailingslashit('plugins')  . sanitize_title( $text_domain ) . '-' . $locale . '.mo';
    
    unload_textdomain($text_domain);
    // custom file(s) first
    load_textdomain($text_domain, $nlf );
    // original translation file(s) second
    load_textdomain($text_domain, $olf );
  
});

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable