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

Posted

技术标签:

【中文标题】Angular translate - 当多个加载器只执行最后一个【英文标题】:Angular translate - When multiple loader it execute only the last one 【发布时间】:2017-03-07 15:31:18 【问题描述】:

我有一个项目使用带有自定义加载器的角度翻译。 基本上,这是我的提供程序中的配置(运行良好)。

提供者(在我的应用配置中执行的东西)

$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】:

试试这种合并响应的方法。非常适合我。

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;
    ;

【讨论】:

以上是关于Angular translate - 当多个加载器只执行最后一个的主要内容,如果未能解决你的问题,请参考以下文章

使用 Angular-translate 格式化参数

带有 ngx-translate 的自定义 Angular 库

Angular2:多个模块中的一个模块实例

如何动态翻译 html5 占位符

$translate改变语言没有立即执行翻译

Angular-Translate 在标签属性中不起作用