Web 前端本地化(二)

好极了!我们要开始实现一项很重要的功能,即注册语言包。通常情况下,使用者会希望以一个 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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值