使用AngularJS静态文件加载器时如何优雅地处理丢失的翻译文件?

时间:2019-01-22 11:05:17

标签: angularjs angular-translate

如果您的useStaticFilesLoader定义中有多个规则,其中一个规则是缺少的文件夹,则即使不使用丢失文件中包含的转换,角度转换也会失败。

例如,我用错误的prompts名称替换了实际的foo文件夹名称。如果恢复正确的文件夹名称,则一切正常。

$translateProvider.useStaticFilesLoader({
    files: [{
      prefix: 'lang_',
      suffix: '.json'
    }, {
      prefix: 'foo/lang_',
      suffix: '.json'
    }]
  });

Plunk example

是否可以忽略丢失的文件并继续使用其他文件?

1 个答案:

答案 0 :(得分:0)

一个可能的解决方案是使用custom loader代替标准的静态加载器。

app.factory('translationLoader', function ($q, $http) {
  return function (options) {
    var deferred = $q.defer(),
      translations;

    $http.get('lang_' options.key + '.json')
      .then(function (res) {
        translations = res.data;

        $http.get('subfolder/lang_' + options.key + '.json')
          .then(function (res) {
            translations = translations.concat(res.data);
          }, function () {
            deferred.resolve(translations);
          })
          .finally(function () {
            deferred.resolve(translations);
          });
      }, function () {
        deferred.reject(options.key);
      });

    return deferred.promise;
  };
})
.config([
  '$translateProvider',
  function ($translateProvider) {
    $translateProvider
      .useSanitizeValueStrategy(null)
      .useLoader('translationLoader');
  }
]);