以下のような半ダースのショートコードでプラグインを国際化します。
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-schedule
はen_EN
に残っており、上記の記事に次のようなコメントがあります。
私の理解では、英語はプログラミングの基本言語ですが、私の経験もまた非常にアングロ中心です。国際化されたプラグインはショートコードを翻訳することが期待されていますか?そしてが推奨されるのであれば、なぜ私のコードは動かないのでしょうか?
編集:
以下の答えに基づいて、extract
の交換方法は以下のとおりです。
$atts = shortcode_atts( array(
'type' => '1'
), $atts );
$type = $atts['type'];
(現在、$type
のソースは現在のスコープ内に表示されています。)
私が始める前に、決して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番目のパラメータが設定されている場合はフィルタ処理できます。属性キーを変換可能にすると、これらのフィルターを介して属性をフィルター処理するときに予期しない結果が生じる可能性があります。
これらは、ショートコードの名前と属性を翻訳可能にしない理由に関するごく少数の重要な注意事項です。
あなたはのみをスクリーンに送るテキストを翻訳可能にし、それがエンドユーザに見えるようにするべきです。覚えておいてください、あなたには意味がありませんが、テーマやプラグインを開発するときは英語に固執してください