静态网站的中英文等多语言切换
2014-07-10 11:07
477 查看
之前做过一个项目,项目要求中英文实现,如果是在动态网站中要实现起来已经很简单了,公司有现成的东西,但这个项目是纯静态的,所有没发用到以前的框架,所有我根据网上查阅的资料,自己做了一个用JS实现中英文翻译的功能。然后有另外一个项目也是这种情况,我就想有没有其他的更方便的方式,搜索了一下,发现我的方法还算不错的,贴出来分享分享。
大致思路很简单,首先要有对应的中英文资源文件,我这里的资源文件用的是XML格式。
<?xml version="1.0" encoding="utf-8" ?>
<Doc>
<Public>
<Back>Back</Back>
<Submit>Submit</Submit>
<Config>Configuration</Config>
<netconfig>Network Parameter</netconfig>
<update>Upgrade/Configuration</update>
<ioparameter>I/O Parameter</ioparameter>
<IOData>I/O Data</IOData>
<SerialDevice>Serial Device</SerialDevice>
在每个页面中的每个需要中英文切换的标签元素中加入id。
<th id="ChnnlNO">通道号</th>
<th data-priority="2" id="OriginalValue">原始值</th>
<th data-priority="1" id="ConvertedValue">换算值</th>
<th data-priority="3" id="ChnnlType">通道类型</th>
<th data-priority="4" id="ChnnlName">通道名称</th>
<th data-priority="5" id="ReferRange">参考范围</th>
然后在页面的初始化中加入对应的翻译的js
$(function () {
var langpath = "../" + dir + lang + ".xml";//资源文件路径
TranslateElementsAsy(document, 'SPAN', 'innerHTML', langpath);
TranslateElementsAsy(document, 'INPUT', 'value', langpath);
TranslateElementsAsy(document, 'th', 'innerHTML', langpath);
});
TranslateElementsAsy() 有两种实现方式:一种是直接通过ajax查找获得资源文件,下载到本地之后查找其中对应的元素,获得id对应的值,缺点:每执行一次方法就下载一次资源文件。
两外一种,基本思路也是这样,用到了一点闭包,优点是在每个页面只下载一次xml资源文件。
function TranslateElementsAsy(targetDocument, tag, propertyToSet, path) { //方法一
$.ajax({
url: path,
type: 'get',
async: false,
success: function (data) {
var e = targetDocument.getElementsByTagName(tag);
for (var i = 0 ; i < e.length ; i++) {
var sKey
sKey = e[i].getAttribute('id');
if (sKey) {
var s = getString(path, sKey, data);
if (s) {
eval('e[i].' + propertyToSet + ' = s');
}
}
}
}
});
}
function TranslateElementsAsy(targetDocument, tag, propertyToSet, path) { //方法二
var e = targetDocument.getElementsByTagName(tag);
for (var i = 0 ; i < e.length ; i++) {
var sKey
sKey = e[i].getAttribute('id');
if (sKey) {
var s = getString(path, sKey, CachedLangugeXMlFile.attachSearchCache(false, path));
if (s) {
eval('e[i].' + propertyToSet + ' = s');
}
}
}
}
function getString(path, req_name, xmlDoc) {
//解析XML
//var oError = xmlDoc.parseError;
var nodeName = xmlDoc.getElementsByTagName(req_name);
if (nodeName[0] == null || nodeName[0] == "undefined") {
return null;
} else {
return nodeName[0].childNodes[0].nodeValue;
}
}
大致思路很简单,首先要有对应的中英文资源文件,我这里的资源文件用的是XML格式。
<?xml version="1.0" encoding="utf-8" ?>
<Doc>
<Public>
<Back>Back</Back>
<Submit>Submit</Submit>
<Config>Configuration</Config>
<netconfig>Network Parameter</netconfig>
<update>Upgrade/Configuration</update>
<ioparameter>I/O Parameter</ioparameter>
<IOData>I/O Data</IOData>
<SerialDevice>Serial Device</SerialDevice>
<?xml version="1.0" encoding="utf-8" ?> <Doc> <Public> <Back>返回</Back> <Submit>确定</Submit> <Config>配置</Config> <netconfig>网络参数</netconfig> <update>升级/配置</update> <ioparameter>I/O参数</ioparameter> <IOData>I/O数据</IOData> <IntelligentDevice>智能设备</IntelligentDevice> <SerialDevice>串口设备</SerialDevice>
在每个页面中的每个需要中英文切换的标签元素中加入id。
<th id="ChnnlNO">通道号</th>
<th data-priority="2" id="OriginalValue">原始值</th>
<th data-priority="1" id="ConvertedValue">换算值</th>
<th data-priority="3" id="ChnnlType">通道类型</th>
<th data-priority="4" id="ChnnlName">通道名称</th>
<th data-priority="5" id="ReferRange">参考范围</th>
然后在页面的初始化中加入对应的翻译的js
$(function () {
var langpath = "../" + dir + lang + ".xml";//资源文件路径
TranslateElementsAsy(document, 'SPAN', 'innerHTML', langpath);
TranslateElementsAsy(document, 'INPUT', 'value', langpath);
TranslateElementsAsy(document, 'th', 'innerHTML', langpath);
});
TranslateElementsAsy() 有两种实现方式:一种是直接通过ajax查找获得资源文件,下载到本地之后查找其中对应的元素,获得id对应的值,缺点:每执行一次方法就下载一次资源文件。
两外一种,基本思路也是这样,用到了一点闭包,优点是在每个页面只下载一次xml资源文件。
function TranslateElementsAsy(targetDocument, tag, propertyToSet, path) { //方法一
$.ajax({
url: path,
type: 'get',
async: false,
success: function (data) {
var e = targetDocument.getElementsByTagName(tag);
for (var i = 0 ; i < e.length ; i++) {
var sKey
sKey = e[i].getAttribute('id');
if (sKey) {
var s = getString(path, sKey, data);
if (s) {
eval('e[i].' + propertyToSet + ' = s');
}
}
}
}
});
}
function TranslateElementsAsy(targetDocument, tag, propertyToSet, path) { //方法二
var e = targetDocument.getElementsByTagName(tag);
for (var i = 0 ; i < e.length ; i++) {
var sKey
sKey = e[i].getAttribute('id');
if (sKey) {
var s = getString(path, sKey, CachedLangugeXMlFile.attachSearchCache(false, path));
if (s) {
eval('e[i].' + propertyToSet + ' = s');
}
}
}
}
function getString(path, req_name, xmlDoc) {
//解析XML
//var oError = xmlDoc.parseError;
var nodeName = xmlDoc.getElementsByTagName(req_name);
if (nodeName[0] == null || nodeName[0] == "undefined") {
return null;
} else {
return nodeName[0].childNodes[0].nodeValue;
}
}
var CachedLangugeXMlFile = function () { //采用闭包,获取资源文件内容,并缓存,下次再执行就不用下载 var cache = null; return { attachSearchCache: function (asy, path) { if (cache != null) { return cache; } $.ajax({ url: path, type: 'get', async: asy, success: function (data) { cache = data; } }); return cache; }, clearSearchCache: function () { } } }();自己亲测可用,,另外每个页面的都采用哪种语言这个是小问题,自己想办法去获得当前的语言类型,然后选择资源文件吧,,可用通过get传参的方式,也可以通过保存在cookie,然后读取的方式。
相关文章推荐
- 这可能是目前最方便的网站中英文切换(理论支持所有语言)
- 怎么用wordpress建中英文双语及多语言切换的网站
- 网站自动识别浏览器语言进行中英文切换的方法
- iOS 切换语言开发 中英文切换
- 织梦dedecms制作中英文等多语言企业网站图文教程
- 网页中英文语言切换解决方案
- 开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo
- 网页中英文语言切换解决方案
- JAVA语言搭建白盒静态代码、黑盒网站插件式自动化安全审计平台
- SharePoint 2013网站语言版本切换
- dedecms织梦做中英文(多语言)网站步骤详解
- JSF:中英文语言环境切换实例
- 网站首页的自动语言切换
- Java Web的Struts2的多语种网站的多语言切换实例
- 如何用Python,C#等语言去实现抓取静态网页+抓取动态网页+模拟登陆网站
- 关于在静态html中实现语言切换的思路与实现
- 开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo
- 让Office 2007的界面语言在中英文间切换
- 转载-支持中英文多语言浏览的MVC网站实例
- 开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo