WordPressでマルチ言語を出し分けるphpコード

投稿者: Anonymous
<p>
    <?php
        echo sprintf( esc_attr__( 'Hello %s%s%s (not %2$s? %sSign out%s)', 'woocommerce' ), '<strong>', esc_html( $current_user->display_name ), '</strong>', '<a href="' . esc_url( wc_get_endpoint_url( 'customer-logout', '', wc_get_page_permalink( 'myaccount' ) ) ) . '">', '</a>' );
?>
</p>
<p>
    <?php
        echo sprintf( esc_attr__( 'From your account dashboard you can view your %1$srecent orders%2$s, manage your %3$sshipping and billing addresses%2$s and %4$sedit your password and account details%2$s.', 'woocommerce' ), '<a href="' . esc_url( wc_get_endpoint_url( 'orders' ) ) . '">', '</a>', '<a href="' . esc_url( wc_get_endpoint_url( 'edit-address' ) ) . '">', '<a href="' . esc_url( wc_get_endpoint_url( 'edit-account' ) ) . '">' );
?>
</p>

現在wordpressでマルチ言語対応のECサイトを作成しているのですが、dashboard画面に表示されるはずのセカンダリ言語が、上記のようにデフォルト言語で表示されてしまっています。(サイト内でこの文言だけ)

正しくセカンダリ言語を表示させるため、このphpコードに命令文を加え、上記コード内に2言語記述するという方法でどうにか実装出来ないかと考えていますが当方phpの知識がありません。
get_locale(); 等のようにif/elseでの出し分けが出来れば嬉しいです。

説明が分かりにくかったらすみません。
どうぞよろしくお願いします。

* 追記 *

<?php
    if ($locale == "ja") {
        echo sprintf( esc_attr__( 'こんにちは %s%s%s (%2$s でない場合は %sサインアウト %s)', 'woocommerce' ), '<strong>', esc_html( $current_user->display_name ), '</strong>', '<a href="' . esc_url( wc_get_endpoint_url( 'customer-logout', '', wc_get_page_permalink( 'myaccount' ) ) ) . '">', '</a>' );
    } else {
        echo sprintf( esc_attr__( 'Hello %s%s%s (not %2$s? %sSign out%s)', 'woocommerce' ), '<strong>', esc_html( $current_user->display_name ), '</strong>', '<a href="' . esc_url( wc_get_endpoint_url( 'customer-logout', '', wc_get_page_permalink( 'myaccount' ) ) ) . '">', '</a>' );
    }
?>

上記のように2言語仕様に変更してみましたが、やはりデフォルトしか表示されず、でした。サイト大改造中でアップデート出来ていなかったのですがこのために、一時的にプラグイン更新しました。
お時間のある方、よろしければ上記コードのどこが実装に足りないのか教えて頂けたら幸いです。

<?php $locale = get_locale(); ?>
<?php if ('ja' == $locale  ) : ?>
    //デフォルト
<?php else: ?>
    //セカンダリ
<?php endif; ?>

ちなみに、header.phpでも近い方法を取っているんですが、そちらは上記の記述で適用出来ています。
ですが、当該箇所はこの記述では反映してくれませんでした。
よろしくお願いいたします。

解決

ざっくりと気になる部分と
お急ぎっぽいので発想をかえて力技を(後で修正必須ですが汗汗汗)

適用できていないのは
$localeのスコープが関係していそうな気もしますが
前述回答でご提示のあった下記ソースはお試しいただけましたでしょうか。

$locale = get_locale();
if ( $locale === 'ja' ) {
    //日本語のテンプレート
} else {
    //元のテンプレート
}

呼び出す直前でもget_localeで
呼び出している点を確認してみてください。
$localeの中身などももし確認していないようでしたらvar_dump()などで
ちゃんと値が表示されるか確認するといいかもしれません。


javascript等使える方がいればという前提で
かなり力技ですがヘッダでは分岐ができているとのことなので
ヘッダの分岐プラスログインページのみ分岐を分けるという方法はどうでしょうか。

<?php $locale = get_locale(); ?>
<?php if ('ja' == $locale ) : ?>
    <?php $slug_name = $post->post_name;
        if ($slug_name === 'loginpage' ) : ?>
              <!--dom等で日本語の記述をねじ込むjavascript-->
    <?php else: ?>
              //デフォルト
    <?php endif; ?>
<?php else: ?>
    <?php $slug_name = $post->post_name;
        if ($slug_name === 'loginpage' ) : ?>
              <!--dom等で英語の記述をねじ込むjavascript-->
    <?php else: ?>
    //セカンダリ
    <?php endif; ?>
<?php endif; ?>

もしほかのプラグインなどの干渉が原因でしたら
他のプラグインの停止で動くかどうか、
ソースの部分のみをデバックするなら
単純にphpファイルのみを作ってテストできる環境などがあれば
デバックしやすいかと思います。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *