web-dev-qa-db-fra.com

Préparer une chaîne dans un tableau pour la localisation

Je travaille sur un plugin WordPress et je veux m'assurer que tout le texte affiché est préparé pour la localisation. Je ne parviens pas à localiser le texte qui réside dans un tableau.

Par exemple, j'ai le code suivant dans une 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;
}

Notez que la fonction "process_class_vars" est appelée par le constructeur. Comme vous pouvez le constater, j’essaie de transmettre la valeur du tableau par le biais de la fonction __() J'ai créé les tableaux initialement jeté une erreur).

Le problème est que lorsque je lance ceci à travers un générateur .po, les chaînes "Automatic" et "Manual" sont complètement manquées. Comment ces valeurs peuvent-elles être traitées correctement?

4
tollmanz

Vous ne pouvez pas faire cela, du moins pas à partir d'une application d'aide à la traduction d'interface graphique, car elles sont configurées pour extraire des chaînes de fonctions standard telles que __(), _e etc., elles ne peuvent pas lire les variables (y compris les variables de chaîne).

Au lieu d'essayer:

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

Mais si $control_types est une variable statique d'une classe, vous ne pourrez pas affecter la valeur de retour d'une fonction en tant que valeur. Pourquoi ne pas en faire une variable normale dans la méthode process_class_vars ()? Ou simplement en faire une fonction:

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