17.2.2.4 Utiliser une traduction dans un programme JavaScript

Dynacase core ne fournit pas de fonction Javascript permettant de traduire du texte. Cependant, il est possible d'utiliser la fonction fournie par le module dynacase-datajs, ou d'utiliser les fonctions décrites ci-dessous

17.2.2.4.1 Utilisation de dynacase-datajs

Le module dynacase-datajs fournit une bibliothèque JavaScript permettant d'utiliser des traductions.

// Initialisation du contexte
var C=new Fdl.Context({url:'http://www.mydomain.server/'});
if (! C.isConnected()) {
    alert('error connect:'+C.getLastErrorMessage());
return;
}
// Authentification
if (! C.isAuthenticated()) {
    var u=C.setAuthentification({login:'mylogin',password:'secret'});
    if (!u)  alert('error authent:'+C.getLastErrorMessage());
}
// C is the context
var helloText=C._("my test is ok");

La méthode Fdl.Context::_() retourne la traduction comme pour la fonction _ équivalente de PHP.

La langue choisie est celle de l'utilisateur (paramètre applicatif CORE_LANG).

La récupération du catalogue est une opération JavaScript qui fait un appel Ajax synchrone au serveur, elle bloque donc l'exécution du JavaScript le temps de la récupération des traductions.

17.2.2.4.2 Fonctions de traduction

La fonction suivante peut être utilisée pour créer un translator à partir d'un catalogue :

function translatorFactory(catalog)
{
 
    var translation = {data: {catalog: {}}};
    try {
        translation = JSON.parse(catalog);
    } catch (e) {
        console.error("Locale catalog error : " + e.message);
    }
    return {
        /**
         * Return key translation
         * @param text to translate
         * @returns string
         */
        _: function translator_gettext(key)
        {
            if (key && translation.data && translation.data.catalog && translation.data.catalog[key]) {
                return ranslation.data.catalog[key];
            }
            return key;
        },
        /**
         * Return key translation in context
         * @param text to translate
         * @param context
         * @returns {*}
         */
        ___: function translator_pgettext(key, ctxt)
        {
            if (key &&
                translation.data &&
                translation.data.catalog &&
                translation.data.catalog._msgctxt_ &&
                translation.data.catalog._msgctxt_[ctxt] &&
                translation.data.catalog._msgctxt_[ctxt][key]) {
                return translation.data.catalog._msgctxt_[ctxt][key];
            }
            return key;
        }
    };
}

Le paramètre catalog correspond à un catalogue au format JSON. Ce catalogue est généré sur le serveur avec le path suivant :

locale/<locale>/js/catalog.js

par exemple :

locale/fr/js/catalog.js

Elle s'utilise de la manière suivante (le catalogue peut être récupéré autrement) :

var translator,
    translatedText;
$.getJSON("locale/fr/js/catalog.js", function (catalog) {
    translator = getTranslator(catalog);
    translatedText = translator.___("key", "context");
});

17.2.2.4.2.1 Limitation

Les formes plurielles ne sont pas prises en compte.

×
mis à jour