ユーザーのブラウザ言語に応じて、ページ上の要素を自動的に翻訳するふりをする jQuery プラグインを開発しています。翻訳は .json ファイルに保存されます。
プラグインを呼び出すときに、パッケージ名 (またはそれらの配列) を渡すと、次の方法で言語ファイルをロードしようとします。
- たとえば、ブラウザの言語が単純で
'en'
、パッケージのみを指定した場合、ブラウザは次のものをロードしようとします。packageName-en.json
- ブラウザーの言語が構成されている場合 (たとえば、「en-US」)、以前と同じものを読み込もうとしますが、次のものを使用します
packageName-en.json
。packageName-en-US.json
- 複数のパッケージが指定されている場合、パッケージごとに前の 2 つのパスのいずれかをたどろうとします。
したがって、プラグインには次のものがあります。
$.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
問題は、その関数がおそらく複数回呼び出されるため、すべての関数が呼び出されると解決される promise を返す方法がわからないことです。