• 正则表达式split匹配多种例如 “】”,“,”两种(页面级中英文切换方案)


    在做登陆界面的时候,因为涉及到中英文

    因为前后台已经分离,所以前端需要自行设计中英文

    做法:

    编写两个文件,一个中文文件,一个是英文文件,分别放在对应的目录下面

    文件的内容

    {
        "login":{
            "welcome":"欢迎登录!",
            "fail":"请求失败,请检查网络连接.",
            "login":"登 录",
            "enteruser":"请输入用户名",
            "enterpassword":"请输入密码"
        },
        "comm":{
            "filter":"过滤",
            "export":"导出",
            "ok":"确定",
            "cancel":"取消",
            "time":"时间",
            "search":"查询",
            "submit":"提交",
            "delete":"删除"
        },
        "alarm":{
            "checkall":"全选",
            "timeStamp":"报警时间",
            "priority":"优先级",
            "location":"位置",
            "regionId":"责任区",
            "almType":"报警类型",
            "almStatus":"确认状态",
            "content":"告警事件描述",
            "dev":"设备",
            "key":"关键字",
            "level":"等级",
            "everypage":"每页显示条数:",
            "config":"配置"
        }
    }

    页面步骤:

    1、首先在html中给需要设置中英文的元素添加一个标识,目前是在元素上添加了一个data-i18n的属性,这个是三级,代码可以支持多级,如果是多级,就是 data-i18n="[placeholder]login.login.enteruser",json文件对应增加一级

    <input type="text" placeholder="请输入用户名" data-i18n="[placeholder]login.enteruser" v-model="user"><br>

    2、根据配置的是中文还是英文的,如果配置了,就到localStorage里面存起来,如果没有配置中英文就到浏览器中取(navigator取)

    var i18n='';
    if(!i18n){
         i18n=navigator.language=='zh-CN'?'cn':'en';
    }else{
         localStorage.setItem('i18n',i18n);
    }

    3.利用ajax本地请求文件

    //ajax本地请求 i18n为变量 cn/en
    $.ajax({
        url:'/locales/'+i18n+'/translation.json',
        type:'get',
        dataType:'json',
        success:function(res){
            var temp=res;
    
            });
        }
    });

    返回的接口数据

    4、数据处理并赋值操作

    //遍历页面中所有的data-i18n,将值赋值到页面中的地方
    $('[data-i18n]').each(function(i,e){
        var p=$(e).attr('data-i18n').split(/[].]/);//匹配“.”或者“]”隔开
        if(p[0].indexOf('[')===-1){
            p.unshift('');
        }
        var len=p.length;//3
        var d=temp[p[1]];//login
            //适用于多级的写法
        while(d[p[p.length+1-(--len)]]){
            d=d[p[p.length+1-len]];
        }
        //赋值
        p[0]===''?$(e).html(d):$(e).attr(p[0].substring(1),d);
    });

    备注:

      此处注意使用的while循环,主要是为了页面配置更加灵活,支持多级操作,translation.json里面的文件目前是二级,但是写了while循环的代码,就可以支持多级

      配置多级之后,只需要在页面的data-i18n属性值做相应的更改就可以了

    测试完整代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>中英文切换</title>
    </head>
    <body>
        <div id="#app-6">
            <h3 class="welcome" data-i18n="login.welcome">欢迎登录</h3>
            <input type="text" placeholder="请输入用户名" data-i18n="[placeholder]login.enteruser" v-model="user"><br>
            <input type="password" placeholder="请输入密码" data-i18n="[placeholder]login.enterpassword" v-model="password"></br>
            <button data-i18n="login.login.a">登陆</button>
        </div>
        <script type="text/javascript" src="https://cdn.bootcss.com/jquery/1.12.1/jquery.js"></script>
        <script type="text/javascript">
            var i18n="";
            if(!i18n){
                i18n=navigator.language="zh-CN"?"cn":'en';
            }else{
                localStorage.setItem('i18n',i18n);
            }
            //1.在每一个需要中英文的加上一个属性 data-i18n
            //2.从后台获得中英文的数据
            //写死的测试数据
            var temp={
                "login":{
                    "welcome":"欢迎登录!",
                    "fail":"请求失败,请检查网络连接.",
                    "login":{
                        a:"22"
                    },
                    "enteruser":"111",
                    "enterpassword":"请输入密码"
                },
                "comm":{
                    "filter":"过滤",
                    "export":"导出",
                    "ok":"确定",
                    "cancel":"取消",
                    "time":"时间",
                    "search":"查询",
                    "submit":"提交",
                    "delete":"删除"
                },
                "alarm":{
                    "checkall":"全选",
                    "timeStamp":"报警时间",
                    "priority":"优先级",
                    "location":"位置",
                    "regionId":"责任区",
                    "almType":"报警类型",
                    "almStatus":"确认状态",
                    "content":"告警事件描述",
                    "dev":"设备",
                    "key":"关键字",
                    "level":"等级",
                    "everypage":"每页显示条数:",
                    "config":"配置"
                }
            }
            $(function(){
                //3.遍历页面中所有的data-i18n,将值赋值到页面中的地方
                $('[data-i18n]').each(function(i,e){
                    var p=$(e).attr('data-i18n').split(/[].]/);//匹配“.”或者“]”隔开
                    if(p[0].indexOf('[')===-1){
                        p.unshift('');
                    }
                    var len=p.length;//3
                    var d=temp[p[1]];//login
                    while(d[p[p.length+1-(--len)]]){
                        d=d[p[p.length+1-len]];
                    }
                    //赋值
                    p[0]===''?$(e).html(d):$(e).attr(p[0].substring(1),d);
                });
            })
        </script>
    </body>
    </html>
    View Code

    因为登陆页面是单独的,在其他页面中,因页面多,推荐写成公共的方法,这种方法相对于传统页面中英文切换就可以省了很多代码

    公共的js方法:

    $.i18n=function(opt){
        if(!opt){opt={}}
        if(opt.language===undefined){
            opt.language=localStorage.getItem('i18n');
            if(!opt.language){
                opt.language=navigator.language=='zh-CN'?'cn':'en';
            }
        }
        if(typeof opt.url!=='string'||opt.url==''){
            opt.url='/locales/'+opt.language+'/translation.json'
        }
        $.ajax({
            url:opt.url,
            type:'get',
            dataType:'json',
            success:function(res){
                var temp=res;
                $('[data-i18n]').each(function(i,e){
                    var p=$(e).attr('data-i18n').split(/[].]/);
                    if(p[0].indexOf('[')===-1){
                        p.unshift('');
                    }
                    var len=p.length;
                    var d=temp[p[1]];
                    while(d[p[p.length+1-(--len)]]){
                        d=d[p[p.length+1-len]];
                    }
                    if(typeof d!=='string'&&typeof d!=='number'){d='';}
                    p[0]==='[value'?$(e).val(d):p[0]===''?$(e).html(d):$(e).attr(p[0].substring(1),d);
                });
                if(typeof opt.finish==='function'){
                    opt.finish(temp);
                }
            }
        });
    }

  • 相关阅读:
    用户和用户组管理
    浏览器从输入URL到页面加载显示完成全过程解析
    easyui form提交和formdata提交记录,查看FormData对象内部的值
    Hybrid App中原生页面 VS H5页面(分享)
    ui-router .state参数配置
    利用webpack手动构建vue工程
    使用json对象要注意的地方
    js中使用0 “” null undefined {}需要注意
    已知宽高和未知宽高的div块的水平垂直居中
    jquery easyui datagrid 空白条处理 自适应宽高 格式化函数formmater 初始化时会报错 cannot read property 'width'||'length' of null|undefined
  • 原文地址:https://www.cnblogs.com/pengfei25/p/11214635.html
Copyright © 2020-2023  润新知