web-dev-qa-db-ja.com

国際化プラグインのshorcodeは翻訳されるべきです、そしてもしそうなら、どうやって?

以下のような半ダースのショートコードでプラグインを国際化します。

function plugin_show_schedule( $atts, )
    {
       extract( shortcode_atts( array(
        'type' => __('week', 'mz-mindbody-api')
            ), $atts ) );
        //Do stuff
        return $something;
    }
add_shortcode('plugin-show-schedule', 'plugin_show_schedule');

そして、このようなショートコードを翻訳するいくつかの方法を説明した 記事 を見つけました:

function plugin_show_schedule( $atts, )
    {
       extract( shortcode_atts( array(
        __('type', 'my-plugin') => __('week', 'mz-mindbody-api')
            ), $atts ) );
        $type = ${__('type', 'mz-mindbody-api')};
        //Do stuff
        return $something;
    }
add_shortcode(__('plugin-show-schedule', 'my-plugin'), 'plugin_show_schedule');

期待どおりにtypeを翻訳することはできますが、plugin-show-scheduleen_ENに残っており、上記の記事に次のようなコメントがあります。

  1. 「ショートコードタグを翻訳すると、別のプラグインがこのフィルタに信頼性の高いフックをかけることができませんでした」
  2. 「36年の経験を持つ翻訳者として私は笑うことしかできません - 彼の塩の価値がある本当のプロの翻訳者なら誰でも短いコードを見つけることができ、明らかにそれらを翻訳しないでしょう!」

私の理解では、英語はプログラミングの基本言語ですが、私の経験もまた非常にアングロ中心です。国際化されたプラグインはショートコードを翻訳することが期待されていますか?そして推奨されるのであれば、なぜ私のコードは動かないのでしょうか?

編集:

以下の答えに基づいて、extractの交換方法は以下のとおりです。

$atts = shortcode_atts( array(
        'type' => '1'
            ), $atts );
    $type = $atts['type'];

(現在、$typeのソースは現在のスコープ内に表示されています。)

1
MikeiLL

私が始める前に、決してextract()を使ってはいけません。信頼性が低く、失敗したときのデバッグは非常に困難です。この特定の理由のために、それはコアとコーデックスから(ほとんど)完全に削除されました。より完全な詳細については、 trac ticket 22400 を参照してください。 query_postsとともに、これらは最も一般的に使用される2つと最悪の2つの関数です。

実際のポイントに戻りましょう。ショートコード名と属性キーは決して翻訳可能にしないでください。また常に英語にしてください。それは悪い習慣であり、そうでなければエラーが起こりがちです。

理由(ショートコード名)

  • ショートコード名を翻訳可能にする場合は、任意のテキストをショートコード名として使用できます。これが意味するものは次のとおりです。

    私はショートコード[somename]を持っています。今、私はそれを次のように使うことに決めることができます、[anothername]。私は[anothername]というショートコードを持つプラグインをダウンロードします。バング!!!あなたは命名衝突をしています。どのショートコードをロードするべきか

    同じスペルを持つ単語は、言語によって意味が異なりますが、その単語のスペルは英語で有効なWordです。単純なWordbangを取ります。英語では、爆発の音を説明する言葉です。私の母国語であるアフリカーンス語では、英語に翻訳されている場合、恐れているという意味です。今、私はコードコード[afraid]を持っています。私はアフリカーンス人なので、[bang]にします。私はショートコード[bang]と爆発的なプラグインをダウンロードし、そしてブーム!すべて行きます。 (ブームは、ツリーのためのアフリカーンス語の単語ですが、英語で有効な別の単語と異なる意味の別の言語です。

理由(属性キー)

  • PHPは重複キーを許可しません。次のシナリオを取ります

    私は以下のショートコードを持っています:[someshortcode key='value']。私のショートコードでは、私の属性は__( 'key' ) => 'default''somekey' => 'some other value'です。 keyに任意のテキストを入力できるので、私は翻訳値としてsomekeyを使用することにしました。ブーム!!!あなたのショートコードは失敗して予期しない出力を出します、そしてあなたはその理由を知りません。あなたはあなたの翻訳が犯人であることを知るためだけにデバッグと呪いに何時間も費やします。

  • ショートコードの属性は、 shortcode_atts の3番目のパラメータが設定されている場合はフィルタ処理できます。属性キーを変換可能にすると、これらのフィルターを介して属性をフィルター処理するときに予期しない結果が生じる可能性があります。

これらは、ショートコードの名前と属性を翻訳可能にしない理由に関するごく少数の重要な注意事項です。

あなたはのみをスクリーンに送るテキストを翻訳可能にし、それがエンドユーザに見えるようにするべきです。覚えておいてください、あなたには意味がありませんが、テーマやプラグインを開発するときは英語に固執してください

2
Pieter Goosen