Preparando uma string em uma matriz para localização

4

Estou trabalhando em um plug-in do WordPress e quero ter certeza de que todo o texto exibido esteja preparado para a localização. Estou com dificuldades para localizar o texto que reside dentro de uma matriz.

Por exemplo, eu tenho o seguinte código dentro de uma classe

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;
}

Note que a função "process_class_vars" é chamada pelo construtor. Como você pode ver, eu estou tentando passar o valor na matriz através da função __() (Como uma nota lateral, eu estou fazendo isso com a função "process_class_vars" função em vez de quando eu criar inicialmente as matrizes porque passando que função quando eu criei as matrizes inicialmente jogou um erro).

O problema é que quando eu executo isso através de um gerador de .po, a string "Automática" e "Manual" são completamente perdidas. Como esses valores podem ser processados corretamente?

    
por tollmanz 02.07.2011 / 21:43

1 resposta

2

Você não pode fazer isso, pelo menos não a partir de um aplicativo auxiliar de tradução GUI, porque eles estão configurados para pegar seqüências de caracteres de funções padrão como __() , _e etc, eles não podem ler variáveis (incluindo string variáveis)

Em vez disso, tente:

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

Mas se $control_types for uma variável estática de uma classe, você não poderá atribuir o valor de retorno de uma função como seu valor. Por que não torná-lo uma variável normal dentro do método process_class_vars ()? Ou apenas faça uma função:

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,
    );
}
    
por onetrickpony 02.07.2011 / 21:50