2016-10-25 83 views
1

我有一个项目使用角度翻译与自定义加载器。
基本上,这是我的提供商(这是完美的工作)的配置。角度翻译 - 当多个加载器只执行最后一个时

提供商(在我的应用程序的配置执行的东西)

$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

我应该开始赏金吗? :-) – C0ZEN

+0

我解决了你的问题。请检查我的回答,并且您可以将其标记为正确。 – user321

回答

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; 
    }; 
} 
相关问题