web-dev-qa-db-ja.com

ローカライズされたラベルをWordpressプラグインに含めるためのより良い方法

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プラグインもウィジェットやコードにラベルを直接埋め込んでいるようです。これを実装した場合、パフォーマンスに影響がありますか?ラベルからコードを分離できるように、私が持っている他のオプションを提案できますか?前もって感謝します!

1
soul

翻訳可能なラベルからコードを分離する必要はありません。あなたのplug_get_labels関数は以下の問題を抱えています

  1. 翻訳ツールを使用すると、ラベルが使用されている状況をわかりやすく表示して、適切な翻訳を迅速に行うことができます。あなたの機能であなたは文脈を失います。

  2. このような関数を使用すると、翻訳が必要なときだけでなく、コードが実行されるたびに呼び出すようになります。翻訳ファイルをロードして解析するのが比較的遅いため、パフォーマンスが悪くなる可能性があり、余分なメモリを使用することになります(翻訳ファイルは、翻訳が必要な場合にのみロードされます)。もちろん、翻訳された文字列の数が少なければ、大きな影響はありません。

あなたのJSONソリューションは本当に悪いです。あなたが翻訳をするためにpoeditのようなツールを使う能力を失うのは、それらを使うためには__への最初のパラメータが変数ではなくリテラル文字列になることを要求するからです。

2
Mark Kaplun