wordpressのプラグインとテーマにローカライズされるラベルを含めるためのより良い方法はありますか?現在の設定では、ラベルを取得するために以下のメソッドを呼び出します。
public function plug_get_labels(){
$labels = array(
'details' => __( 'Details', 'plug' ),
'specs' => __( 'Specifications', 'plug' ),
);
return $labels;
}
しかし、例えばウィジェットの場合、実際にウィジェットの一部であるラベルを提供するためだけにplug_get_labels
メソッドを呼び出すのは無意味だと思います。
public function __construct() {
parent::__construct(
'plug_widget', __('Plug Widget', 'plug'),
array( 'description' => __( 'A widget for displaying something', 'plug' ) )
);
}
ですから、plug_get_labels
メソッドを使ってAJAX関連のものにラベルをつけるだけなので、動的に読み込むためにラベルが必要なときにだけ使うのです。
しかし、私の問題は、私のチームの誰かがコードとラベルは互いに別のものであるべきだと言ったことです。コードからラベルを分離するために、どこか別の場所からラベルをロードする必要があります。
そのため、私が考えていた解決策は、すべてのラベルをJSONファイルに入れ、そのファイルから読み込んだplug_get_labels
メソッドの中に入れ、それを配列に変換し、それからループして各ラベルのテキストドメインを提供することでした。
public function plug_get_labels(){
$file = file_get_contents(WP_CONTENT_DIR . '/plug-labels.json');
$labels = json_decode($file, true);
$new_labels = array();
foreach($labels as $key => $label){
$new_labels[$key] = __($label, 'plug');
}
return $new_labels;
}
この場合の上級開発者も、プラグインが統合するすべてのウィジェットやテーマのラベルのファイルからコードを読み込もうと思うので、ラベルをコードから切り離すことができます。
これは良い考えですか?他のWordpressプラグインもウィジェットやコードにラベルを直接埋め込んでいるようです。これを実装した場合、パフォーマンスに影響がありますか?ラベルからコードを分離できるように、私が持っている他のオプションを提案できますか?前もって感謝します!
翻訳可能なラベルからコードを分離する必要はありません。あなたのplug_get_labels
関数は以下の問題を抱えています
翻訳ツールを使用すると、ラベルが使用されている状況をわかりやすく表示して、適切な翻訳を迅速に行うことができます。あなたの機能であなたは文脈を失います。
このような関数を使用すると、翻訳が必要なときだけでなく、コードが実行されるたびに呼び出すようになります。翻訳ファイルをロードして解析するのが比較的遅いため、パフォーマンスが悪くなる可能性があり、余分なメモリを使用することになります(翻訳ファイルは、翻訳が必要な場合にのみロードされます)。もちろん、翻訳された文字列の数が少なければ、大きな影響はありません。
あなたのJSONソリューションは本当に悪いです。あなたが翻訳をするためにpoeditのようなツールを使う能力を失うのは、それらを使うためには__
への最初のパラメータが変数ではなくリテラル文字列になることを要求するからです。