| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 | /* global $, require, config, interfaceConfig */
var i18n = require("i18next-client");
var languages = require("../../service/translation/languages");
var Settings = require("../settings/Settings");
var DEFAULT_LANG = languages.EN;
i18n.addPostProcessor("resolveAppName", function(value, key, options) {
    return value.replace("__app__", interfaceConfig.APP_NAME);
});
var defaultOptions = {
    detectLngQS: "lang",
    useCookie: false,
    fallbackLng: DEFAULT_LANG,
    load: "unspecific",
    resGetPath: 'lang/__ns__-__lng__.json',
    ns: {
        namespaces: ['main', 'languages'],
        defaultNs: 'main'
    },
    lngWhitelist : languages.getLanguages(),
    fallbackOnNull: true,
    fallbackOnEmpty: true,
    useDataAttrOptions: true,
    app: interfaceConfig.APP_NAME,
    getAsync: false,
    defaultValueFromContent: false,
    customLoad: function(lng, ns, options, done) {
        var resPath = "lang/__ns__-__lng__.json";
        if(lng === languages.EN)
            resPath = "lang/__ns__.json";
        var url = i18n.functions.applyReplacement(resPath, { lng: lng, ns: ns });
        i18n.functions.ajax({
            url: url,
            success: function(data, status, xhr) {
                i18n.functions.log('loaded: ' + url);
                done(null, data);
            },
            error : function(xhr, status, error) {
                if ((status && status == 200) ||
                    (xhr && xhr.status && xhr.status == 200)) {
                    // file loaded but invalid json, stop waste time !
                    i18n.functions.error('There is a typo in: ' + url);
                } else if ((status && status == 404) ||
                    (xhr && xhr.status && xhr.status == 404)) {
                    i18n.functions.log('Does not exist: ' + url);
                } else {
                    var theStatus = status ? status :
                        ((xhr && xhr.status) ? xhr.status : null);
                    i18n.functions.log(theStatus + ' when loading ' + url);
                }
                done(error, {});
            },
            dataType: "json",
            async : options.getAsync
        });
    }
    //              options for caching
//                useLocalStorage: true,
//                localStorageExpirationTime: 86400000 // in ms, default 1 week
};
function initCompleted(t) {
    $("[data-i18n]").i18n();
}
function checkForParameter() {
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i=0;i<vars.length;i++) {
        var pair = vars[i].split("=");
        if(pair[0] == "lang")
        {
            return pair[1];
        }
    }
    return null;
}
module.exports = {
    init: function (lang) {
        var options = defaultOptions;
        if(!lang)
        {
            lang = checkForParameter();
            if(!lang)
            {
                var settings = Settings.getSettings();
                if(settings)
                    lang = settings.language;
                if(!lang && config.defaultLanguage)
                {
                    lang = config.defaultLanguage;
                }
            }
        }
        if(lang) {
            options.lng = lang;
        }
        i18n.init(options, initCompleted);
    },
    translateString: function (key, options) {
        return i18n.t(key, options);
    },
    setLanguage: function (lang) {
        if(!lang)
            lang = DEFAULT_LANG;
        i18n.setLng(lang, defaultOptions, initCompleted);
    },
    getCurrentLanguage: function () {
        return i18n.lng();
    },
    translateElement: function (selector) {
        selector.i18n();
    },
    generateTranslationHTML: function (key, options) {
        var str = "<span data-i18n=\"" + key + "\"";
        if(options)
        {
            str += " data-i18n-options=\"" + JSON.stringify(options) + "\"";
        }
        str += ">";
        str += this.translateString(key, options);
        str += "</span>";
        return str;
    }
};
 |