web-dev-qa-db-ja.com

ローカライズのために配列内の文字列を準備する

私はWordPressのプラグインに取り組んでいて、表示されているすべてのテキストがローカライズの準備ができていることを確認したいです。配列内にあるテキストをローカライズするのに問題があります。

たとえば、クラス内に次のコードがあります。

var $control_type_default = array(
    array(
        'key' => 'automatic',
        'value' => 'Automatic'
    )
);

var $control_types = array(
    array(
        'key' => 'manual',
        'value' => 'Manual'
    )
);

function process_class_vars()
{
    // Add default control type value to beginning of control types array
    $this->control_types = array_merge($this->control_type_default, $this->control_types);

    // Prepare values for localization
    $temp_array = array();
    foreach ($this->control_types as $control_type_array => $values) 
    {
        $temp_array[] = array(
            'key' => $values['key'],
            'value' => __($values['value'], 'my_plugin')
        );
    }
    $this->control_type = $temp_array;
}

"process_class_vars"関数はコンストラクタによって呼び出されることに注意してください。ご覧のとおり、__()関数を介して配列の値を渡そうとしています。私は最初にエラーをスローしたアレイを作成しました。

問題は、私が.poジェネレータを通してこれを実行すると、 "Automatic"と "Manual"の文字列が完全に失われることです。これらの値はどのように正しく処理できますか?

4
tollmanz

__()_eなどの標準関数から文字列を取得するように設定されているので、少なくともGUIの翻訳ヘルパーアプリからはできません。変数を読み込むことはできません(文字列変数を含む)。

代わりに試してみてください。

var $control_types = array(
    array(
        'key' => 'manual',
        'value' => __('Manual', 'yourtextdomain')
    )
);

しかし、$control_typesがクラスからの静的変数であるならば、あなたはその値として関数の戻り値を割り当てることができません。なぜprocess_class_vars()メソッドの中で普通の変数にしないのですか?あるいは単にそれを関数にする:

public static function control_types(){
 return
    array(
        'manual' => __('Manual', 'yourtextdomain'),
        ...
    )
);

...
foreach ($this->control_types() as $control_type => $label) 
{
    // I'm pretty sure you don't need 'key' / and 'value' as key name here either...
    $temp_array[] = array(
        'key' => $control_type,
        'value' => $label,
    );
}
2
onetrickpony