Ich entwickle ein jQuery-Plugin, das vorgibt, Elemente auf der Seite automatisch in Abhängigkeit von der Browsersprache des Benutzers zu übersetzen. Übersetzungen werden in .json-Dateien gespeichert.Wie man Versprechen zurückgibt, das mit dem Ergebnis mehrerer Funktionen auflösen wird?
Wenn Sie das Plugin aufrufen, übergeben Sie einen Paketnamen (oder ein Array von ihnen), und dann wird es versuchen, die Sprachdatei in der folgenden Art und Weise zu laden:
- Wenn die Sprache des Browsers einfach ist, zum Beispiel
'en'
und Sie nur ein Paket angegeben haben, wird es versuchen, die folgende zu laden:packageName-en.json
- Wenn die Sprache zusammengesetzt ist, Browser, zum Beispiel ‚en-US‘ es die gleichen wie zuvor, aber mit laden werden versuchen:
packageName-en.json
UNDpackageName-en-US.json
- Wenn mehr als ein Paket angegeben ist, wird versucht, für jedes Paket einen der beiden vorherigen Pfade zu verfolgen.
Also, im Plugin Ich habe diese:
$.fn.Translator = function(pkg, options){
Translator.initialize(pkg, options).done(function(){
return this.each(Translator.translate);
});
};
Also, irgendwo in meiner Initialisierungsfunktion, ich habe dies:
loadLanguages : function(){
$.each(self.options.packages,function(i, pkg){
});
}
, die diese Funktion aufruft:
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
});
}
Das Problem ist, dass diese Funktion wahrscheinlich aufgerufen wird y mehrere Male, ich weiß nicht, wie man initialize
macht, um ein Versprechen zurückzugeben, das aufgelöst wird, sobald ALLE Funktionen aufgerufen worden sind.
Obwohl ich eine Antwort angenommen habe, denke ich, deine ist besser. Das war die Art von Lösung, nach der ich suchte und die andere Art schien irgendwie hackisch. Vielen Dank Julian :) –