静态网站的中英文等多语言切换
之前做过一个项目,项目要求中英文实现,如果是在动态网站中要实现起来已经很简单了,公司有现成的东西,但这个项目是纯静态的,所有没发用到以前的框架,所有我根据网上查阅的资料,自己做了一个用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>
<?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,然后读取的方式。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: HTML实现简单中英文切换(仅限小页面)
- 下一篇: java web 项目实现手动中英文切换