web-dev-qa-db-de.com

Überschreiben Sie die Standard-WordPress-Kernübersetzung

WordPress ist auf Niederländisch eingestellt. Wenn ich get_the_archive_title() verwende, gibt mein Design "Categorie: Category-name" korrekt auf einer Kategoriearchivseite aus. Allerdings würde ich gerne "Sectie: Category-Name" lesen.

Ich möchte die niederländische Sprachdatei im Ordner wp-content/languages ​​nicht ändern, da diese durch WordPress-Updates aktualisiert wird.

Ich habe versucht, diese Übersetzungsdatei zu kopieren, die Übersetzung "category" zu ändern und die neue Datei nl_NL.mo in my-theme/languages ​​abzulegen. Dies hatte keine Auswirkungen.

Wie kann ich für einige Zeichenfolgen eine andere Übersetzung erzielen, ohne die Kernübersetzungsdateien zu ändern?

11
Florian

Du könntest gettext filter benutzen:

add_filter( 'gettext', 'cyb_filter_gettext', 10, 3 );
function cyb_filter_gettext( $translated, $original, $domain ) {

    // Use the text string exactly as it is in the translation file
    if ( $translated == "Categorie: %s" ) {
        $translated = "Sectie: %s";
    }

    return $translated;
}

Wenn Sie eine Übersetzung mit Kontext filtern müssen, verwenden Sie gettext_with_context filter :

add_filter( 'gettext_with_context', 'cyb_filter_gettext_with_context', 10, 4 );
function cyb_filter_gettext_with_context( $translated, $original, $context, $domain ) {

    // Use the text string exactly as it is in the translation file
    if ( $translated == "Categorie: %s" ) {
        $translated = "Sectie: %s";
    }

    return $translated;
}

Eine Übersetzung mit Kontext bedeutet, dass in der gettext-Funktion, mit der der String übersetzt wird, ein Kontext angegeben ist. Dies ist zum Beispiel ohne Kontext:

$translated = __( 'Search', 'textdomain' );

Und das ist mit Kontext:

$translated = _x( 'Search', 'form placeholder', 'textdomain' );

Ähnliche Filter sind für mehrere Übersetzungen verfügbar ([_n()][2] und [_nx()][2]): ngettext und ngettext_with_context .

15
cybmeta