采用原生js编写的国际化语言切换工具,使用简洁方便,不依赖任何插件和库
初始化:new translation().init("en"); //传入需要使用的语言名称
调用:new translation().tr("dinghui");
占位符匹配:new translation().tr("ding%1hui%2","str1","str2");
<script src="translation.js"></script>
(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));
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"
}]
}