前面的三篇文章中,我们已经拥有了本地化所需的一些基本功能,但如果在无法精准匹配当前语言的情况下,如何寻找上一层级的语言包,则是获取语言文本的最重要的一环。为此,我们需要实现以下步骤。
- 尝试获取预期语言的对应文本,有的话则返回之,没有的话继续。
- 检查语言代号标识中是否包含短横线(-),有的话则继续,没有的话则返回从默认语言的语言包中检索的结果。
- 找到最后一个短横线。
- 删除该短横线后面的内容。
- 返回第一步,重新来一遍。
代码如下。
/**
* Gets the string in local or specific language.
* @param key The template key.
* @param useKeyInsteadOfUndefined true if use key as result instead of undefined; otherwise, false.
* @param lang The opitonal ISO 639 code string for a sepecific one.
*/
Local.prototype.getString = function (key, useKeyInsteadOfUndefined, lang) {
var langCode = !lang ? Local.lang() : lang;
if (!langCode || langCode == "") langCode = this.defaultLang;
var str = this.specificString(langCode, key);
if (!!str || typeof str !