私たちのフォームからのスパムをブロックしますが、正当な(本人の)フォーム送信をブロックするプラグインからの1つのエラーメッセージを翻訳したいと思います。メッセージは翻訳可能にコード化されています - プラグイン自体では、行は次のとおりです。
$err_msg = __( 'That action is currently not allowed.' );
私の問題は、私のサイトはすでにプラグインのようにアメリカ英語で、技術的にはこの文字列を「翻訳」して訪問者に「あなたのせいではない」と見えるようにすることです"あなたはメッセージ、それはまだアメリカ英語になります。私は自分のテーマにテキストドメインを設定し、この1つの文字列を翻訳するための.pot、.po、および.moファイルを生成することができました。問題は、wp-configをen_USに設定しているので、実際には何も変更されていないことです。
私はフォーム自体のエラーを引き起こす正確なプロセスを持っていないので、私は翻訳をテストするために管理ダッシュボードウィジェットを設定しました。ウィジェットの内容が
$err_msg = __( 'That action is currently not allowed.' );
echo $err_msg;
そのアクションは現在許可されていません。ウィジェットの内容を
$err_msg = __( 'That action is currently not allowed.', 'mytextdomain' );
echo $err_msg;
私が達成しようとしているカスタムメッセージを受け取ります。
更新があるたびに元に戻るので、私はプラグインのファイル自体を編集したくはありません。この特定のメッセージ用のフィルタやフックはプラグインにはありません - 他のエラー用のフィルタがありますが、これは一般的なものではありません。この一連のユーザー向けテキストを変更するためのより良い方法はありますか?可能であれば、JS/jQueryソリューションではなくサーバーサイドのものが必要です。
gettext
フィルタは、gettext
関数を使用する文字列を変更するために使用できます。
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;
}
注:幸いなことに、WordPressコアは現在そのアクションは現在許可されていません。という文字列を使用していません。しかし、コアがそのメッセージを使用した場合、それは起こります。これが、プラグインとテーマが独自の独自のテキストドメインを使用することが重要な理由の1つです。
ただし、gettext
ファミリーの関数(__()
、_e
など)には、常にテキストドメインを渡す必要があります。この規則の例外はWordPressコアで、これはテキストドメインを明示的に渡しませんが、それでもdefault
という名前のものを持っています。
私はプラグインの作者に連絡を取り、彼らが彼ら自身のテキストドメインを彼らのgettext関数呼び出しに追加することを提案するでしょう。