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 );
});
Schreibe einen Kommentar