html代码
<p class="interpret">中国</p>
<p class="interpret">美国</p>
<p class="interpret">德国</p>
<p><button id="toggle" class="interpret">切换语言</button></p>
方式1:维护两个对象,利用p中的内容,遍历找到对应的key,然后切换语言。
let boolean = true;
let p = document.getElementsByClassName("interpret");
let obj_e = {
"china":'china',
"america":'america',
"germany":'germany',
"toggle language":'toggle language'
};
let obj_c = {
"china":'中国',
"america":'美国',
"germany":'德国',
'toggle language':"切换语言"
};
document.getElementById('toggle').onclick = function () {
for(let i=0;i<p.length;i++){
if(boolean){
let text = p[i].innerHTML;
for(let key in obj_c){
if(text == obj_c[key]) p[i].innerHTML = obj_e[key];
}
}else{
let text = p[i].innerHTML;
for(let key in obj_e){
if(text == obj_e[key]) p[i].innerHTML = obj_c[key];
}
}
}
boolean = !boolean;
}
方式二:维护两个对象,以p中的内容为key,切换语言。
这里用汉字作key,普适的方法应该是把汉字转为unicode,这样对任何语言就没有限制了,然后用处理过的unicode做key。
let boolean = true;
let p = document.getElementsByClassName("interpret");
let obj_c = {
"中国":'china',
"美国":'america',
"德国":'germany',
"切换语言":'toggle language'
};
let obj_e = {
"china":'中国',
"america":'美国',
"germany":'德国',
'toggle language':"切换语言"
};
document.getElementById('toggle').onclick = function () {
if(boolean){
for(let i=0;i<p.length;i++){
let text = p[i].innerHTML;
if(obj_c[text]) p[i].innerHTML = obj_c[text];
}
}else {
for(let i=0;i<p.length;i++){
let text = p[i].innerHTML;
if(obj_e[text]) p[i].innerHTML = obj_e[text];
}
}
boolean = !boolean;
}
小结
方式一采用遍历的方法,翻译显然会更慢,运行时间为On,但其扩展性强,适合多种语言。再添加一种语言只需要增加一个语言对象就ok了。
方式二采用key值的方式,不用遍历,运行时间为O1,适合两种语言之间的翻译。当然如果需要多种语言翻译,也是可以的。需要增加一些判断。如果采用某些设计模式,也会优于第一种方式。
//unicode 转换
// 转为unicode 编码
function encodeUnicode(str) {
var res = [];
for ( var i=0; i<str.length; i++ ) {
res[i] = ( "00" + str.charCodeAt(i).toString(16) ).slice(-4);
}
return "\\u" + res.join("\\u");
}
// 解码
function decodeUnicode(str) {
str = str.replace(/\\/g, "%");
return unescape(str);
}