最近碰到一个项目, 前台展示需要实现国际化(中英法俄西), 前台使用 freeMark 技术展示, 都是一些html , 因为是在网上找的开源项目, 只需要修改前台页面即可, 将前台 html 中的中文(主要是一些提示和展示)根据用户选择的语种, 显示不同的语言, 当时对freeMark不太了解, 就取巧用 js 试着实现了一下, 仅供参考.
首先, 说一下我的思路: 因为需要国际化的文字都是写死在页面上的, 所以我想到了以前的一个项目用过 js 向页面上写值: <script>yrycode.getStr('001')</script>, 其中 yrycode 是js文件中定义的一个全局对象, 里面包含了数组, 方法. 先看一下js
//yrycode统一接口
~function(){
if(window.yrycode){
return;
}
var yrycode=window.yrycode={};
<span style="white-space:pre"> </span>// 需要国际化的汉字, 当对应的编号和翻译
// 中文
yrycode.ch=["001,人气"];
// 西班牙语
yrycode.es=["001,renqi"];
yrycode.options = yrycode.ch;
// 根据语种获取值, 并向页面上写值
yrycode.getstr = function(value) {
//var language = yrycode.getCookies();
var str='';
for(var i=0;i<yrycode.options.length;i++){
var option = yrycode.options[i].split(",");
if(value==option[0]){
str = option[1];
break;
}
}
//alert(language);
document.write(str);
};
<span style="white-space:pre"> </span>//只是获取值, 并不想页面上输出, 主要用于 alert 信息, 按钮的赋值等
yrycode.getstr1 = function(value) {
var language = yrycode.getCookies();
var str='';
for(var i=0;i<yrycode.options.length;i++){
var option = yrycode.options[i].split(",");
if(value==option[0]){
str = option[1];
break;
}
}
return str;
};
<span style="white-space:pre"> </span>// 切换语种方法, 然后根据语种决定从哪个数组中取值
yrycode.changeLanguage = function(lang){
yrycode.addCookie("languages",lang,1);
if("en"==lang){
yrycode.options = yrycode.en;
}else if("fr"==lang){
yrycode.options = yrycode.fr;
}
else if("py"==lang){
yrycode.options = yrycode.py;
}
else if("es"==lang){
yrycode.options = yrycode.es;
}else{
yrycode.options = yrycode.ch;
}
window.location.reload();
};
<span style="white-space:pre"> </span>// 新增或修改 cookie ,语种信息存储到cookie中, 以 language 为 name, 以 ch或es 为 value, 注意 path 的值, 要以项目的根路径为 value
yrycode.addCookie = function(sName,sValue,day){
var expireDate = new Date();
expireDate.setDate(expireDate.getDate()+day);
//设置失效时间
document.cookie = escape(sName) + '=' + escape(sValue) +';expires=' + expireDate.toGMTString()+";path=/bbs"; //escape()汉字转成unicode编码,toGMTString() 把日期对象转成字符串
};
<span style="white-space:pre"> </span>// 获取 cookie 中语种信息,
yrycode.getCookies = function() {
var showAllCookie = '';
if(!document.cookie == ''){
var arrCookie = document.cookie.split('; ');
//用spilt('; ')切割所有cookie保存在数组arrCookie中
var arrLength = arrCookie.length;
for(var i=0; i<arrLength; i++) {
if("languages"==unescape(arrCookie[i].split('=')[0])){
//alert(unescape(arrCookie[i]));
return unescape(arrCookie[i].split('=')[1]);
}
}
}
}
yrycode.language = yrycode.getCookies();
<span style="white-space:pre"> </span>//根据 cookie 中语种信息, 决定从哪个数组中获取对应翻译
if("en"==yrycode.language){
yrycode.options = yrycode.en;
}else if("fr"==yrycode.language){
yrycode.options = yrycode.fr;
}
else if("py"==yrycode.language){
yrycode.options = yrycode.py;
}
else if("es"==yrycode.language){
yrycode.options = yrycode.es;
}else{
yrycode.options = yrycode.ch;
}
}();