i18nHelper.js 3 KB
/**
 * 国际化帮助脚本,主要步骤
 * 1、禁用JqueryEasy 的自动初始化功能
 * 2、首先同步加载语言包
 * 3、加载语言成功后,在回调里,根据当前的语言设置加载EasyUI的脚本。
 *    然后再调用其它初始化脚本
 */

/**
 * 加载语言设置
 */
function loadLanguage(callback, messages) {
    var i18nOptions = {
        name: "lang",
        path: "i18n/",
        mode: "both",
        async: false,
        cache: true,
        debug: true,
        checkAvailableLanguages: true,
        callback: function() {
            parseMessageAndPage(messages);
            if (callback instanceof Function) {
                callback();
            }
        }
    };
    $.i18n.properties(i18nOptions);

    // 解析页面的所有i18n项,获取"data-i18n-for-attribute"项指定的要设置的属性名称,
    // 分别设置每个属性的值,如果没有设置该项,默认设置元素的text
    function parseMessageAndPage(messages) {
        // 解析变量
        if (messages) {
            for (var key in messages) {
                if (messages.hasOwnProperty(key)) {
                    var target = messages[key];
                    if (typeof target === "function") {
                        var keyString = key;
                        messages[key] = function() {
                            var args = [keyString];
                            for (var i = 0; i < arguments.length; i++) {
                                args.push(arguments[i]);
                            }
                            console.log(args);
                            return $.i18n.prop.apply($.i18n, args);
                        };
                    } else if (typeof target === "string") {
                        messages[key] = $.i18n.prop(key);
                    }
                }
            }
            console.log(messages);
        }
        // 解析标签
        $(".i18n-item").each(function(index, element) {
            var i18nKey = this.getAttribute("data-i18n-key");
            var i18nValue = $.i18n.prop(i18nKey);
            // 根据元素的配置项,来替换文本
            var attributes = this.getAttribute("data-i18n-for-attribute");
            if (attributes && attributes.length > 0) {
                var attributeArray = attributes.split(",");
                for (var i = 0; i < attributeArray.length; i++) {
                    $(this).attr(attributeArray[i], i18nValue);
                }
            } else {
                $(this).text(i18nValue);
            }
        });
    }
}
/**
 * 根据当前的语言设置加载EasyUI组件及相应的组件
 * @param {any} modules      组件名数组
 * @param {any} callback    加载完成后的回调
 */
function loadEasyuiModules(modules, callback) {
    // easyloader.base = basePath;
    easyloader.locale = $.i18n.normaliseLanguageCode();
    easyloader.css = false;
    easyloader.load(modules, function() {
        if (callback instanceof Function) {
            callback();
        }
    });
}