web-dev-qa-db-ja.com

デフォルトのWordPressコア翻訳を上書きする

WordPressはオランダ語に設定されています。 get_the_archive_title()を使うとき、私のテーマはカテゴリアーカイブページに "Categorie:Category-name"を正しく出力します。しかし「Sectie:Category-name」と読みたいのですが。

Wp-content/languagesフォルダにあるオランダ語のファイルは、WordPressのアップデートによって更新されるので、変更したくありません。

その翻訳ファイルをコピーして、「カテゴリ」翻訳を変更し、新しいnl_NL.moファイルをmy-theme/languagesに入れてみました。これによる影響はありません。

コア翻訳ファイルを変更せずに、いくつかの文字列に対して異なる翻訳を実現するにはどうすればよいですか。

11
Florian

gettext filter :を使うことができます。

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;
}

文脈で翻訳をフィルタリングする必要がある場合は、 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;
}

Contextによる変換は、文字列を変換するために使用されるgettext関数でコンテキストが与えられることを意味します。たとえば、これはコンテキストなしです。

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

そして、これは文脈にあります:

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

同様のフィルタが複数の翻訳([_n()][2][_nx()][2])に対して利用可能です: ngettextngettext_with_context

15
cybmeta