Angular translate - 当多个加载器只执行最后一个加载器时

时间:2016-10-25 14:14:42

标签: angularjs angular-translate

我有一个使用角度平移和自定义装载器的项目 基本上,这是我的提供程序中的配置(它完美地工作)。

提供商(在我的应用配置中执行的内容)

$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');

问题仍然相同,只调用配置中的最后一个 我搜索了类似问题的主题,甚至在文档中也没有发现任何内容。

1 个答案:

答案 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;
    };
}