web,jsp,html⽹站中英⽂切换,资源国际化解决⽅案及代码(其中包含动态切换数据源及。。。
项⽬需求:
在现有系统的基础上,实现⽹站的中英⽂切换,要求现有代码基本保持不变。
解决⽅案:
在经过众多的⽅案筛选后,选出了⼀个⽐较合适的⽅案。⽅案如下。
⾸先要实现⽹站的中英⽂切换总共分为两部分。
sublimetext3怎么运行代码
第⼀部分是⽹站上的静态⽂字。
第⼆部分是从数据库查询出来的数据。
第⼀部分解决⽅案:
使⽤jquery的i18n插件,有关该插件的详细描述,请⾃⾏百度,这⾥不做过多的介绍。
第⼆部分解决⽅案:
数据库:采⽤ABC三个库,A库放英⽂数据,B库放中⽂数据,C库主要存放⽤户的登陆权限信息。BC两个库是原本就有的,A库是此⽅案新加的库。
后台:使⽤springMVC的功能,对所有的请求进⾏拦截,然后从cookie中获取到页⾯当前使⽤语⾔的标识(此标识是在前端通过事件⼿动加的),通过标识的判断,动态的切换使⽤的数据源(主要是对AB两个库进⾏切换)
以上⽅案后台不⽤更改任何业务代码,前台需要在原有代码的基础上增加⼀些内容。
详细代码:
第⼀部分(静态⽂字)
准备⼯作:
js:jquery-2.0.3.min.js,jquery.i18n.properties-1.0.9.js,bootstrap.min.js
css:bootstrap.min.css
开始
cookies.js  cookie⼯具类,⽤来操作页⾯的cookie
var cookie={  //cookie⼯具类
setCookie:function(c_name,value,expiredays){  //设值
var exdate=new Date()
exdate.Date()+expiredays)
if (c_start!=-1)
{
c_start=c_start + c_name.length+1
c_kie.indexOf(";",c_start)
if (c_end==-1) c_kie.length
return kie.substring(c_start,c_end))      }
}
return "";
},
checkCookie:function(){  //验证
username=getCookie('username')
if (username!=null && username!="")
{alert('Welcome again '+username+'!')}
else
{
username=prompt('Please enter your name:',"")
if (username!=null && username!="")
{
setCookie('username',username,365)
}
}
}
}
upload.jsp  测试页⾯
<body>
<button class="btn"  οnclick="changeZh()">中⽂</button> <button class="btn" οnclick="changeEn()">English</button>
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<div class="page-header">
<h2 id="count" class="lang">登陆页⾯</h2>
</div>
bootstrap框架有哪些特点
<form id="defaultForm" method="get" class="form-horizontal" action="${tPath}/sys/login/m">                <div class="form-group">
<label id="label_username" class="lang col-lg-3 control-label"></label>
<div class="col-lg-5">
<input type="text" class="form-control" name="loginName" />
</div>
</div>
<div class="form-group">
<label id="label_password" class="lang col-lg-3 control-label"></label>
<div class="col-lg-5">
<input type="password" class="form-control" name="password" />
</div>
</div>
<div class="form-group">
<div class="col-lg-9 col-lg-offset-3">
<button id="button_login" type="submit" class="lang btn btn-primary"></button>
派kyc教程</div>
</div>
</form>
</div>
</div>
</div>
</body>
properties资源⽂件(中英⽂切换的⽂字来源,所有页⾯上的中英版静态⽂字都会在这个⽂件提前定义好)
js_en.properties  英⽂资源⽂件
label_username=username
label_password=password
button_login=login
count=Login Page
js_zh.properties 中⽂资源⽂件
jsp中文全称
label_username=⽤户名
label_password=密码
button_login=登陆
count=登陆页⾯
js.properties 默认资源⽂件(这个是因为初始化i18n报错加上的,不知道有什么⽤,不到会报404)
label_username=username
label_password=password
button_login=login
count=Login Page
JavaScript 脚本
$(function(){  //初始化页⾯内容
$.i18n.properties({
name : 'js', //资源⽂件名称
path : '${tPath}/i18n/', //资源⽂件路径
mode : 'map', //⽤Map的⽅式使⽤资源⽂件中的值
language : 'zh', //中⽂对应properties⽂件名的"zh"两个字也就是说path+name+language就是你资源⽂件的路径        callback : function() {//加载成功后设置显⽰内容
changeValue();
}
});
cookie.setCookie("lang", "zn", 1);  //将页⾯选择的语⾔通过cookie记录下来,后台会⽤到
});
function changeZh(){  //中⽂切换
$.i18n.properties({
name : 'js', //资源⽂件名称
path : '${tPath}/i18n/', //资源⽂件路径
mode : 'map', //⽤Map的⽅式使⽤资源⽂件中的值
batterystatusextlanguage : 'zh',
callback : function() {//加载成功后设置显⽰内容
changeValue();
}
});
cookie.setCookie("lang", "cn", 1);
}
function changeEn(){  //英⽂切换
$.i18n.properties({
name : 'js', //资源⽂件名称
path : '${tPath}/i18n/', //资源⽂件路径
mode : 'map', //⽤Map的⽅式使⽤资源⽂件中的值
language :'en',
callback : function() {//加载成功后设置显⽰内容
changeValue();
}
});
cookie.setCookie("lang", "en", 1);
}
function changeValue(){  //公共的赋值事件,需要在标签中定义⼀个id名(需要和properties⽂件中的Key相同),
//和⼀个class属性(名字随便起,主要是为了遍历所有需要切换⽂字的标签)
$('.lang').each(function(){
var tagName=$(this).prop("tagName");
if(tagName=="INPUT"){ //不同的标签不同的赋值⽅法
$(this).val($.i18n.prop($(this).attr("id")))
}else{
$(this).html($.i18n.prop($(this).attr("id")))
}
})
htmljs引入}
⾄此第⼀部分的代码结束,下⾯是测试结果
中⽂
英⽂
第⼆部分(后台数据)
⾸先我们需要写动态切换数据源的代码,主要⽤到springAbstractRoutingDataSource类,此类是由spring提供的⼀个切换数据源的路由类DataSourceContextHolder.java  数据源切换⼯具类,⽤来保存当前选择的数据源
public class DataSourceContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static void setDbType(String dbType) {
contextHolder.set(dbType);
}
public static String getDbType() {
return ((String) ());
}
public static void clearDbType() {
}
}
DataSourceName.java ⽤来存放数据源的名字也就是bean的id

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。