|

Eigene Übersetzungsdateien in WordPress laden

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 );
Code-Sprache: PHP (php)

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 ); });
Code-Sprache: PHP (php)

Kommentarformular bitte nicht für Supportanfragen verwenden

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.