当前位置 : 主页 > 网络编程 > JavaScript >

web前端国际化方案

来源:互联网 收集:自由互联 发布时间:2021-06-28
i18n.js /** * Created by don on 2016/10/20. * 同级目录下创建 language-package 文件夹,其下存放各种语言对应的配置文件 */;(function (translator, getPath) { var type = navigator.appName; if (type == "Netscape") { var
i18n.js
/**
 * Created by don on 2016/10/20.
 * 同级目录下创建 language-package 文件夹,其下存放各种语言对应的配置文件
 */
;(function (translator, getPath) {

    var type = navigator.appName;

    if (type == "Netscape") {
        var lang = navigator.language;
    }
    else {
        var lang = navigator.userLanguage;
    }
    //取得浏览器语言的前两个字母
    var lang = lang.substr(0, 2);
    var file_name = "language-package/";
    // var languageJson = {};
    switch (lang){

        case 'en':
            file_name += "en.json";
            break;
        case 'zh':
            file_name += "zh.json";
            break;
        default:
            file_name += "en.json";
            break;
    }

    // 根据当前文件的路径获取到绝对路径,进而得到语言配置文件
    $.ajax(getPath("i18n.js") + file_name, {async : false, dataType: "json"})
        .done(function (languageJson) {

            window.i18n = translator(languageJson);
            window.i18n.language = lang;

            window.i18n.translate();
        });

})(
    /**
     * 翻译
     * @param languageJson 配置文件内容,json格式
     */
    function translator(languageJson){

    // 执行指定域(domain)范围内的翻译 
    var trans = function (domain) {

        $(domain || document.body).find("[i18n]").each(function(){

            var $this = $(this);
            var type = $this.attr("i18n-type") || "html";
            var key = $this.attr("i18n");
            var value = languageJson[key];
            if(!value)
                return;

            switch (type){
                case 'html':
                    $this.html(value);
                    break;
                default:
                    $this.attr(type, value);
                    break;
            }
        });
    };

    // 获取指定key的配置项
    var getValue = function(key){

        return languageJson[key] || "";
    };

    return {
        getValue: getValue,
        translate: trans
    }
},
    /**
     * 获取页面引用的指定js的地址
     * 
     */
    function getPath(jsName) {

        var js = document.scripts;
        var jsPath;
        for (var i = js.length; i > 0; i--) {
            if (js[i - 1].src.indexOf(jsName) > -1) {
                jsPath = js[i - 1].src.substring(0, js[i - 1].src.lastIndexOf("/") + 1);
            }
        }

        return jsPath;
    }
);
网友评论