web页面国际化---之js翻译插件


翻译插件使用cookie获取翻译语音选择

初始化需要加载的文件:translation.js
其他文件为语音包,如:source.js(中文包) en.js(英文包)



附上代码:

translation.js

/**
 * 翻译插件  版本v1.0
 * 创建日期:2015/11/24
 * 创建人: 刘鑫
 * 功能:
 * 1.可以翻译指定位置内的内容(传入指定位置id)
 * 2.可以翻译json数据
 * 3.可以翻译字符串
 * 以上功能需要jquery支持,和语音包支持
 */

var lang;
/**
 * 初始化加载语言包
 */
$(function(){
	lang= getCookie("HY_LANGUAGE");
	if(lang==null||lang==""||lang==undefined||lang!="en"){
		lang="source";
	}
//	alert(lang);
	//------------动态加载语言js文件--------------
//	var head = document.getElementsByTagName('head')[0];
//    var script = document.createElement('script');
//    script.src = ctx+"/js/translation/"+lang+".js?cur="+Math.round(Math.random()*10000);
//    script.type = 'text/javascript';
//    head.appendChild(script);
	var url=ctx+"/js/translation/"+lang+".js?cur="+Math.round(Math.random()*10000);
	loadJS("",url);
	//------------动态加载语言js文件--------------
});
/**
 * 数组去重
 * @param arr
 * @returns {Array}
 */
function unique(arr) {
	if(arr!=null&&arr.length>0){
		var result = [], hash = {};
		for (var i = 0, elem; (elem = arr[i]) != null; i++) {
			if (!hash[elem]) {
				result.push(elem);
				hash[elem] = true;
			}
		}
	}else{
		return arr;
	}
    return result;
}
/**
 * 国际化方法,传入需要翻译的html快id,即可翻译该html里的内容(需要配置语言包)
 * @param divId
 */
function translationinit(divId){
//	alert(divId);
//	$("#"+divId).hide();
    var h = $("#"+divId).html();
//    alert(h);
    if(h!=undefined){
    	//var str="我的一(个)(中)国人"
    	var mode=/[\u4e00-\u9faf]+/g
    		var s=h.match(mode);
    	s=unique(s);//去重
//		alert("s="+s);
//	var ch = $("#"+divId);
    	var ch = $("#"+divId).children();
    	recursion(ch,s);
    }
//    $("#"+divId).show();
}
/**
 * 递归
 * @param obj
 * @param s
 */
function recursion(obj,s){
	
//	var ch = $("#"+divId).children();
//	alert(obj.length);
	if(s!=null&&obj.length!=0){
		obj.each(function(i){  
			for(var i = 0;i < s.length; i++){
				if(languageMap[s[i]]!=undefined){
//					alert($(this).html());
//					$(this).thml().replace(s[i],enMap[s[i]]);
//					$(this).thml().innerHTML.replace(s[i],enMap[s[i]]);
					var mode=/[\u4e00-\u9faf]+/
					var s1=$.trim($(this).text()).match(mode);
					if(s1==null){
						return true;
					}
//					alert(s1);
//					if($.trim($(this).text())==s[i]){
					if(s1==s[i]){
//						alert($(this).html());
						var text = $(this).html().replace(s[i],languageMap[s[i]]);
						$(this).html(text);
//						$(this).html(languageMap[s[i]]);
					}
				}
			}
		});
		recursion(obj.children(),s);
	}
	
}
/**
 * 国际化方法  传入json,把json里的中文替换成国际化语言(试用与ztree菜单)
 * @param json数组 内容是object元素
 * @returns {Array}返回数组,数组内容是object元素
 */
function initjsonObj(json){
	var h = json;
	var h2=[];
	for(var j = 0;j < h.length; j++){
		var str = JSON.stringify(h[j])
		var mode=/[\u4e00-\u9faf]+/g
		var s=str.match(mode)
		for(var i = 0;i < s.length; i++){
			if(languageMap[s[i]]!=undefined){
				var obj= eval("(" + str.replace(s[i],languageMap[s[i]])+ ")");
				h2.push(obj);
			}else{
				var obj= eval("(" + str+ ")");
				h2.push(obj);
			}
		}
	}
	return h2;
}
/**
 * 国际化方法  传入json,把json里的中文替换成国际化语言
 * @param json数组 
 * @returns {Array}返回数组
 */
function initjson(json){
	var h = json;
	var h2=[];
	for(var j = 0;j < h.length; j++){
		var str = h[j]
		var mode=/[\u4e00-\u9faf]+/g
		var s=str.match(mode)
		for(var i = 0;i < s.length; i++){
			if(languageMap[s[i]]!=undefined){
				var obj=  str.replace(s[i],languageMap[s[i]]);
				h2.push(obj);
			}else{
				var obj=  str;
				h2.push(obj);
			}
		}
	}
	return h2;
}
/**
 * 国际化方法  传入String,把String替换成国际化语言
 * @param str
 * @returns
 */
function initString(str){
	var h = str;
		var mode=/[\u4e00-\u9faf]+/g
		var s=str.match(mode)
		if(s!=null){
			for(var i = 0;i < s.length; i++){
				if(languageMap[s[i]]!=undefined){
					return languageMap[s[i]];
				}else{
					return h;
				}
			}
		}
	return h;
}
/**
 * 国际化方法  传入String,把String替换成国际化语言
 * @param str
 * @returns
 */
function initString(str){
	var h = str;
	var mode=/[\u4e00-\u9faf]+/g
		var s=str.match(mode)
		if(s!=null){
			for(var i = 0;i < s.length; i++){
				if(languageMap[s[i]]!=undefined){
					return languageMap[s[i]];
				}else{
					return h;
				}
			}
		}
	return h;
}




// 获取地址栏的参数数组
function getUrlParams()
{
    var search = window.location.search ;
    // 写入数据字典
    var tmparray = search.substr(1,search.length).split("&");
    var paramsArray = new Array;
    if( tmparray != null)
    {
        for(var i = 0;i<tmparray.length;i++)
        {
            var reg = /[=|^==]/;    // 用=进行拆分,但不包括==
            var set1 = tmparray[i].replace(reg,'&');
            var tmpStr2 = set1.split('&');
            var array = new Array ;
            array[tmpStr2[0]] = tmpStr2[1] ;
            paramsArray.push(array);
        }
    }
    // 将参数数组进行返回
    return paramsArray ;    
}

// 根据参数名称获取参数值
function getParamValue(name)
{
    var paramsArray = getUrlParams();
    if(paramsArray != null)
    {
        for(var i = 0 ; i < paramsArray.length ; i ++ )
        {
            for(var  j in paramsArray[i] )
            {
                if( j == name )
                {
                    return paramsArray[i][j] ;
                }
            }
        }
    }
    return null ;
} 
/**
 * 同步加载js脚本
 * @param id   需要设置的<script>标签的id
 * @param url   js文件的相对路径或绝对路径
 * @return {Boolean}   返回是否加载成功,true代表成功,false代表失败
 */
function loadJS(id,url){
    var  xmlHttp = null;
    if(window.ActiveXObject)//IE
    {
        try {
            //IE6以及以后版本中可以使用
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            //IE5.5以及以后版本可以使用
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    else if(window.XMLHttpRequest)//Firefox,Opera 8.0+,Safari,Chrome
    {
        xmlHttp = new XMLHttpRequest();
    }
    //采用同步加载
    xmlHttp.open("GET",url,false);
    //发送同步请求,如果浏览器为Chrome或Opera,必须发布后才能运行,不然会报错
    xmlHttp.send(null);
    //4代表数据发送完毕
    if ( xmlHttp.readyState == 4 )
    {
        //0为访问的本地,200到300代表访问服务器成功,304代表没做修改访问的是缓存
        if((xmlHttp.status >= 200 && xmlHttp.status <300) || xmlHttp.status == 0 || xmlHttp.status == 304)
        {
            var myHead = document.getElementsByTagName("HEAD").item(0);
            var myScript = document.createElement( "script" );
            myScript.language = "javascript";
            myScript.type = "text/javascript";
            myScript.id = id;
            try{
                //IE8以及以下不支持这种方式,需要通过text属性来设置
                myScript.appendChild(document.createTextNode(xmlHttp.responseText));
            }
            catch (ex){
                myScript.text = xmlHttp.responseText;
            }
            myHead.appendChild( myScript );
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}



function getCookie(name)
{
         var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
       if(arr=document.cookie.match(reg))
                  return unescape(arr[2]);
         else
                   return null;
}

source.js

var languageMap ={
		
}

en.js
var languageMap ={
	"删除成功":"Delete success",
	"删除失败":"Delete failed",
	"编辑":"Quote",
	"确认":"Confirm"
}



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值