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
原创粉丝点击