我正在开发一个 jQuery 插件,它会根据用户的浏览器语言自动翻译页面上的元素。翻译将存储在 .json 文件中。
当您调用插件时,您传递一个包名称(或它们的数组),然后它将尝试以下列方式加载语言文件:
- 如果浏览器的语言很简单,例如
'en'
你只指定了一个包,它会尝试加载以下内容:packageName-en.json
- 如果浏览器的语言是组合的,例如“en-US”,它将尝试加载与以前相同的内容,但带有:
packageName-en.json
ANDpackageName-en-US.json
- 如果指示了多个包,它将尝试遵循每个包的前两个路径之一。
所以,在插件中我有这个:
$.fn.Translator = function(pkg, options){
Translator.initialize(pkg, options).done(function(){
return this.each(Translator.translate);
});
};
所以,在我的初始化函数的某个地方,我有这个:
loadLanguages : function(){
$.each(self.options.packages,function(i, pkg){
});
}
它将调用此函数:
getLanguage : function(pkg, language){
var self = this, url;
if (self.options.path)
url = self.options.path + '/';
url += [pkg, language].join('-');
return $.ajax ({
url : url,
dataType : "json",
cache : self.options.cache
});
}
问题是,由于该函数可能会被多次调用,所以我不知道如何initialize
返回一个承诺,一旦所有函数都被调用,该承诺就会被解决。