Web 前端本地化(二)
来源:互联网 发布:男士护肤推荐 知乎 编辑:程序博客网 时间:2024/06/06 19:49
好极了!我们要开始实现一项很重要的功能,即注册语言包。通常情况下,使用者会希望以一个 JSON 的形式,批量将语言文本集合以 Key-Value 对的形式扔进来,Key 即用来作为索引的标识,而 Value 则为对应语言的文本内容。所支持的不同语言各需要一个对应的 JSON 数据,理论上里面应当包含相同的内容。当然,由于我们计划支持类似于继承的模型,以及事后更改的能力,所以关于所有 JSON 字段是否相同,并不需要严格遵循。那么,接下来,我们需要继续在 Local 类里面,去实现 regStrings 方法,代码如下。
Local.prototype.regStrings = function (lang, value) { if (!lang) return; var key = lang.toString().toLowerCase(); if (!value) { delete this._strings[key]; return; } if (typeof value === "number" || typeof value === "string" || typeof value === "boolean" || typeof value === "function" || value instanceof Array) return; this._strings[key] = value;}
不过,本人感觉似乎不是很满意。有的时候,我们可能会调用该方法多次,哪怕是针对同一语言。这的确有可能发生,因为有的模块可能希望对该语言包进行批量扩充。因此,我们打算提供一套更好的方式,来满足这种需求。对此,我们还提供了一个额外的参数,来标明是否需要覆盖原先的设定,默认情况下为否,即只是扩充。
/** * 注册一个语言包。 * @param lang 语言编号。 * @param value 语言包对象。 * @param override 可选。如果需要覆盖,则为 true;否则,为 false,此为默认值。 */Local.prototype.regStrings = function (lang, value, override) { if (!lang) return; var key = lang.toString().toLowerCase(); if (!value) { delete this._strings[key]; return; } if (typeof value === "number" || typeof value === "string" || typeof value === "boolean" || typeof value === "function" || value instanceof Array) return; if (override || !this._strings[key]) { this._strings[key] = value; } else { var obj = this._strings[key]; for (var prop in value) { obj[prop] = value[prop]; } }}
嗯,让我们来做一个测试吧。
// Create a Local instance.var local = new Local(); // Set up an English language pack.var lp_en = { greetings: "Hello!", goodbye: "Bye!"};local.regStrings("en", lp_en); // Set up an Simplified Chinese language pack.var lp_hans = { greetings: "你好!", goodbye: "再见!"};local.regStrings("zh-Hans", lp_hans);local.regStrings("zh-CN", lp_hans);local.regStrings("zh-SG", lp_hans);
现在,我们可以为一个组件注册多国语言包啦!
【未完待续】
文章类型及复杂度:Web 前端开发进阶。
节选翻译自 MSDN 博文 Localization in web page,内容有所调整。
http://blogs.msdn.com/b/kingcean/archive/2016/03/30/web-localization.aspx
0 0
- Web 前端本地化(二)
- Web 前端本地化(一)
- Web 前端本地化(三)
- Web 前端本地化(四)
- web 前端 (二)
- 本地化解决方案(二)
- Silverlight本地化(二)
- Web前端开发规范(二)
- Web前端开发规范(二)
- web前端 基础部分(二) CSS
- Web前端持续集成方案(二)
- web前端基本用法(二)
- web前端开发笔记(二)
- web前端面试题(二)
- WEB前端资源集(二)
- web前端面试题汇总(二)
- Web前端学习【二】
- web前端总结(二)
- 利用servlet 实现JAVAWeb访问微信OAuth2.0认证,获取用户信息的实例
- CSS样式覆盖规则
- tomcat .do发布是虚拟目录无法访问
- Hashtable 与HashMap的区别
- 刷题之二叉树----判断一棵树是否为完全二叉树
- Web 前端本地化(二)
- Volley源码解析(三)——图片加载
- 深入理解JVM内幕
- [IMX6DL]CPU频率调节模式以及降频方法
- Spring事务失效的原因
- MFC改变编辑框背景、字体、颜色等
- C++根据扩展名获取文件图标、类型
- Android中使用aidl在进程间通信(IPC)
- 数据结构总结---树