====== 国际化语言翻译 ====== 采用原生js编写的国际化语言切换工具,使用简洁方便,不依赖任何插件和库 ===== 使用说明 ===== 初始化:new translation().init("en"); //传入需要使用的语言名称 调用:new translation().tr("dinghui"); 占位符匹配:new translation().tr("ding%1hui%2","str1","str2"); ===== 资源引入 ===== ===== JS部分 ===== (function(window, document) { var translation = function() { // this.init(); }; translation.prototype = { default: "en", init: function(language) { console.log("初始化"); window.languagename = language ? language : this.default; var that = this; var ajax = new XMLHttpRequest(); ajax.open('get', 'translation/' + window.languagename + '.json'); ajax.send(); ajax.onreadystatechange = function() { if (ajax.readyState == 4 && ajax.status == 200) { var data = that.getJsonObject(ajax.responseText) console.log(data) window.languagename = data.name; window.languagelist = data.list; } } }, getJsonObject: function(p) { var res = null; if (typeof(p) == "object") { return p; } else if (typeof(p) == "string") { try { return JSON.parse(p); } catch (e) { return p; } } return null; }, tr() { for (var i = 0; i < arguments.length; i++) { if (typeof(arguments[i]) !== "string") { throw err = new Error('Incorrect parameter type'); } } return this.getMsgstr(arguments); }, getMsgstr: function(argument) { var msgid = argument[0]; var msgstr = msgid; var languagelist = window.languagelist; for (var i = 0; i < languagelist.length; i++) { if (languagelist[i].msgid == msgid) { msgstr = this.msgEscape(languagelist[i], argument); break; } } return msgstr; }, msgEscape: function() { var msgid = arguments[0].msgid; var msgstr = arguments[0].msgstr; var escapelist = msgid.match(/[%]\d+/g) ? msgid.match(/[%]\d+/g) : []; for (var i = 0; i < escapelist.length; i++) { if (arguments[1][parseInt(escapelist[i].substring(1))]) { msgstr = msgstr.replace(escapelist[i], this.tr(arguments[1][parseInt(escapelist[i].substring(1))])); } } return msgstr } } window.translation = translation; new translation().init("en"); }(window, document)); ===== json部分 ===== zh.json(中文翻译文件) { "name": "zh", "list": [{ "msgid": "my name dinghui", "msgstr": "我的名字丁辉" }, { "msgid": "dinghui", "msgstr": "丁辉" }, { "msgid": "ding%1hui%2", "msgstr": "丁%1辉%2" }] } en.json(英文翻译文件) { "name": "en", "list": [{ "msgid": "my name dinghui", "msgstr": "my name dinghui" }, { "msgid": "dinghui", "msgstr": "dinghui" }, { "msgid": "ding%1hui%2", "msgstr": "ding%1hui%2" }] }