web-dev-qa-db-fra.com

Obtenir la chaîne traduite à travers une variable

Je traduis un site Web dans différentes langues et j'ai le problème suivant:

Via le backend, l’utilisateur peut sélectionner via une liste déroulante une valeur (chaîne de texte) dans une liste de 50 options. Ce menu déroulant est stocké dans un champ personnalisé (géré par ACF PRO).

Lorsqu'un utilisateur visite la version traduite du site, j'aimerais afficher la traduction de cette chaîne de texte.

Au début, je pensais qu'en utilisant

$options_obj = get_field_object('user_options');
$options_value = get_field('user_options');
$options_label = $options_obj['choices'][$options_value];

echo __($options_label, 'my_text_domain');

Et je mets la traduction de 50 chaînes de texte (correspondant à toutes les options sélectionnables) dans un fichier po/mo, mais comme nous le savons, cela ne fonctionnera pas . Gettext ne traduit pas les variables.

Comment j'ai pu obtenir la chaîne traduite? Avez-vous des idées? Je vous remercie.

2
Capiedge

Je ne suis pas tout à fait sûr que ce soit ce que vous voulez, mais si la page d'option est dans une langue, vous pouvez simplement placer l'appel gettext dans le champ personnalisé lui-même pour éviter d'utiliser des variables. Pour l'administrateur, vous forcez la traduction en espagnol:

function wpse227983_force_language ( $locale ) {
    if ( is_admin() ) {
        return 'es_ES';
    }
    return $locale;
}
add_filter( 'locale', 'wpse227983_force_language' );

Sur le frontend, les messages seront alors traduits de la manière habituelle, à condition que vous disposiez d'un système en place qui détermine la langue de la page. Si l'auteur définit un champ personnalisé pour la langue, vous pouvez utiliser le filtre ci-dessus avec une variable if différente pour forcer la traduction.

1
cjbj