我有一个使用角度平移和自定义装载器的项目 基本上,这是我的提供程序中的配置(它完美地工作)。
提供商(在我的应用配置中执行的内容)
$translateProvider.useSanitizeValueStrategy('sanitize');
$translateProvider.useLoader('componentsTranslationLoader');
$translateProvider.preferredLanguage($language);
如您所见,我使用自己的componentsTranslationLoader。它按预期完成了这些工作。
工厂(componentsTranslationLoader)
return function(options) {
var deferred = $q.defer();
var translations = {};
$http.get('languages/components/' + options.key + '.json').success(function(keys) {
translations = keys;
deferred.resolve(translations);
});
return deferred.promise;
};
从这里开始,每件事都很好。
我必须在这个项目中使用一个库(公司的一个,我可以编辑它),这个库也有他自己的角度翻译东西(基本上是相同的东西)。
它有一个自定义加载器,初始化为配置。
当我的项目执行时,我希望这两个加载器都能完成他们的工作,并用他们的密钥扩展语言
它没有。
只执行最后一个加载器(请参见日志)。
那么,我该如何妥善解决这一冲突呢?
我使用角度翻译的方式有问题吗?
谢谢你的帮助。
编辑(添加了更多信息)
我使用不同的'假'加载器在配置中添加了更多这样的调用:
$translateProvider.useLoader('aFakeLoaderWithLogs');
问题仍然相同,只调用配置中的最后一个 我搜索了类似问题的主题,甚至在文档中也没有发现任何内容。
答案 0 :(得分:0)
尝试合并回复的这种方法。非常适合我。
function customLoader($http, $q, localeUrl, errorCodeUrl) {
return function (options) {
var deferred = $q.defer();
var translations = [];
$q.all([
$http.get(localeUrl + "locale-" + options.key +".json"),
$http.get(errorCodeUrl + "?lang=cs")
]).then(function(response, status) {
translations.push(response[0].data);
translations.push(response[1].data);
console.log(translations);
deferred.resolve(translations);
return translations;
});
return deferred.promise;
};
}