首页 > 解决方案 > 使用AngularJS静态文件加载器时如何优雅地处理丢失的翻译文件?

问题描述

如果您的useStaticFilesLoader定义中有多个规则,其中一个是丢失的文件夹,即使未使用包含在丢失文件中的翻译,角度翻译也会失败。

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

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

笨拙的例子

有没有办法忽略丢失的文件并继续使用其他文件?

标签: angularjsangular-translate

解决方案


一种可能的解决方案是使用自定义加载器而不是标准静态加载器。

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');
  }
]);

推荐阅读