web-dev-qa-db-fra.com

Comment définir des traductions en javascripts pour mon plugin?

J'ai dans mon plugin:

  • formulaire.js: script js pour effectuer une validation personnalisée sur les champs de formulaire
  • js_lang.php: basé sur ce post stackoverflow
  • my-plugin-domain-fr_FR.po

Dans form.js , j'utilise un var (msg_must_match) à partir de js_lang.php

function inputsMatch( inputTypes, idInputReferring, idInputRepeat ){
        var inputReferring = document.getElementById( idInputReferring );
        var inputRepeat = document.getElementById( idInputRepeat );

        var checkPasswordValidity = function() {
            if (inputReferring.value != inputRepeat.value) {
                inputRepeat.setCustomValidity( msg_must_match /*<-- here*/ );
            } else {
                inputRepeat.setCustomValidity('');
            }
        };
        inputReferring.addEventListener('change', checkPasswordValidity, false);
        inputRepeat.addEventListener('change', checkPasswordValidity, false);
}

Dans mon js_lang.php j'essaie de gérer la traduction en chargeant my-plugin-domain-fr_FR.po

$locale = "fr_FR";

putenv("LANG=".$locale); 
setlocale('LC_ALL', $locale); 
bindtextdomain("my-plugin-domain", "./locale/");  
textdomain("my-plugin-domain");
$str = 'It is must match with the previous input';
?>
msg_must_match = "<?php echo gettext( $str ); ?>"

Je n'arrive pas à charger correctement le fichier .po. Quelqu'un pourrait m'aider? Existe-t-il un moyen wordpress plus simple pour faire cela?

1
J.BizMai

La méthode WordPress pour ce faire est la fonction wp_localize_script().

Lorsque vous mettez un script en file d'attente, ajoutez également un appel à wp_localize_script():

wp_register_script( 'my-script', 'path/to/script.js' );
wp_localize_script( 'my-script', 'myScript', array(
    'msg_must_match' => __( 'Message must match', 'my-plugin-domain' ),
) );

Cela crée un objet JavaScript global appelé myScript qui contiendra les clés et les valeurs transmises sous forme de tableau dans le troisième argument. Vous pouvez donc passer des chaînes en utilisant les fonctions de traduction de WordPress, qui seront traduites comme n'importe quelle autre chaîne de votre plugin.

Ensuite, dans votre script, vous pouvez utiliser ces valeurs pour vos chaînes:

inputRepeat.setCustomValidity( myScript.msg_must_match );
2
Jacob Peattie