国际化示例

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);  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值