it-swarm.com.de

Eine Fehlermeldung übersetzen

Ich möchte eine Fehlermeldung von einem Plugin übersetzen, das Spam von unseren Formularen blockiert, aber gelegentlich legitime (Live-Person-) Formularübermittlungen blockiert. Die Nachricht ist so codiert, dass sie übersetzbar ist - im Plugin selbst lautet die Zeile:

$err_msg = __( 'That action is currently not allowed.' );

Mein Problem ist, dass meine Website wie das Plugin bereits in US-Englisch ist und technisch gesehen, wenn ich diese Zeichenfolge "übersetze", so dass die Besucher ein "sehen, ist es nicht Ihre Schuld; wenden Sie sich an so-and-so, damit wir dieses Problem beheben können Sie "Nachricht, es wird immer noch in US-Englisch sein. Ich habe eine Textdomäne in meinem Thema eingerichtet und konnte die Dateien .pot, .po und .mo generieren, um diese eine Zeichenfolge zu übersetzen. Das Problem ist, da ich wp-config auf en_US setze, ändert es eigentlich nichts.

Da ich keinen genauen Prozess habe, um den Fehler in den Formularen selbst auszulösen, habe ich ein Admin-Dashboard-Widget eingerichtet, um die Übersetzung zu testen. Sicher genug, wenn die Inhalte des Widgets sind

$err_msg = __( 'That action is currently not allowed.' );
echo $err_msg;

Ich erhalte die Meldung "Diese Aktion ist derzeit nicht zulässig." Wenn ich den Widget-Inhalt in ändere

$err_msg = __( 'That action is currently not allowed.', 'mytextdomain' );
echo $err_msg;

Ich erhalte die benutzerdefinierte Nachricht, die ich erreichen möchte.

Ich möchte die Dateien des Plugins nicht selbst bearbeiten, da sie bei jedem Update zurückgesetzt werden. Es gibt keinen Filter oder Haken im Plugin für diese bestimmte Nachricht - es gibt Filter für andere Fehler, nur nicht für diese allgemeine. Gibt es einen besseren Ansatz, um diese eine Zeichenfolge von benutzerbezogenem Text zu ändern? Ich möchte eher etwas serverseitiges als eine JS/jQuery-Lösung, wenn überhaupt möglich.

4
WebElaine

Mit dem Filter gettext können Zeichenfolgen geändert werden, die die Funktionen gettext verwenden.

add_filter( 'gettext', 'wpse_change_error_string', 10, 3 );
/**
 * Translate text.
 *
 * @param string $translation  Translated text.
 * @param string $text         Text to translate.
 * @param string $domain       Text domain. Unique identifier for retrieving translated strings.
 *
 * @return string
 */
function wpse_change_error_string( $translation, $text, $domain ) {
    // The 'default' text domain is reserved for the WP core. If no text domain
    // is passed to a gettext function, the 'default' domain will be used.
    if ( 'default' === $domain && 'That action is currently not allowed.' === $text ) {
        $translation = "This is the modified version of the original string...";
    }

    return $translation;
}

Hinweis: Glücklicherweise verwendet der WordPress-Kern derzeit nicht die Zeichenfolge Diese Aktion ist derzeit nicht zulässig. , damit die Nachricht mit dem obigen Code nicht unerwünscht geändert wird. Dies würde jedoch passieren, wenn der Kern diese Nachricht verwenden würde. Dies ist ein Grund, warum es für Plugins und Themes wichtig ist, eine eigene eindeutige Textdomäne zu verwenden.

Der Funktionsfamilie gettext (__(), _e usw.) sollte jedoch immer eine Textdomäne übergeben werden. Die Ausnahme von dieser Regel gilt für den WordPress-Kern, der eine Textdomäne nicht explizit übergibt, aber dennoch eine mit dem Namen default hat.

Ich würde die Autoren des Plugins kontaktieren und vorschlagen, dass sie ihren gettext-Funktionsaufrufen eine eigene Textdomäne hinzufügen.

5
Dave Romsey