ワードプレスの英語のテキストをピンポイントで翻訳するテーマのfunctions.phpに記載可能なPHPコードをご紹介します。


テーマやプラグインの未翻訳の英語の一部のみを翻訳して置き換えたい

ワードプレスのテーマやプラグインは、外国製の物が多く、一部の文言が英語のままだったり、テーマにプラグインが含まれている場合そのプラグインの翻訳がされていないことがございます。

ワードプレスの文言はその多くが翻訳関数を通されて出力されます。

__( 'Hello, world!', 'text-domain' );
_e( 'Hello, world!', 'text-domain' );

このような__( や _eを通る文字列を取得して置き換えて任意の文言を翻訳して出力することが可能です。

下記のコード例では、翻訳後にまだSubmitという英文字になる(つまり_等の翻訳関数を通っても英語のままになっている)文字列を「送信する」に変換して返すフィルタ設定のコード例です。
※テーマのfunctions.phpに記載すると動作します。

add_filter( 'gettext', 'my_custom_translate_filter', 10, 1 );
function my_custom_translate_filter( $translated_text ) {
    if ( $translated_text === 'Submit' ) {
        $translated_text = '送信する';
    }
    return $translated_text;
}

配列化して複数の翻訳に対応するようなコードは下記となります。

add_filter( 'gettext', 'my_custom_translate_filter', 10, 1 );
function my_custom_translate_filter( $translated_text ) {
    $translatetojp = array(
    'Submit' => '送信する',
    'Product' => '商品',
    'Price' => '価格',
    'Quantity' => '数量',
    'Subtotal' => '小計'
    );
    if ( isset($translatetojp[$translated_text]) ) {
        $translated_text = $translatetojp[$translated_text];
    }
    return $translated_text;
}

このコードでは $translatetojp という配列に 修正元=>翻訳 という形の連想配列を作り、その連想配列に値(翻訳文)があればその値を返して翻訳している形になります。

この関数で翻訳できないときは?

ワードプレスのテーマやプラグインで__( や _eの翻訳関数を通らない文字列は、上記コードでは翻訳されません。
このように直接英文等が書き込まれている個所は、直接その文言を日本語等に置き換える形でしか翻訳が難しい場合が多いです。

%sを含む文言
また、下記のような翻訳前の文言の場合についてもうまく翻訳できない場合があるかと存じます。

You cannot add another "%s" to your cart.

この文は%sが他の文字列に置き換えられて出力されます。

例 You cannot add another “shoes” to your cart.

この為add_filter( ‘gettext’関数内は元の%sがあるまま翻訳文を追加する必要があります。

add_filter( 'gettext', 'my_custom_translate_filter', 10, 1 );
function my_custom_translate_filter( $translated_text ) {
    if ( $translated_text === 'You cannot add another "%s" to your cart.' ) {
        $translated_text = 'すでに%sはカートに追加されています';
    }
    return $translated_text;
}

ご参考になりましたら幸いです。

WordPress ワードプレスのテーマやプラグインの翻訳やコーディングのご依頼ご相談はWPドクターまでお気軽にお送りください