2015-11-05 59 views
2

我有一个嵌套的JSON结构这样角转换使用useStaticFilesLoader加载嵌套的JSON

{ 
     "module1": { 
      "component1": "text1", 
      "component2": "text2" 
     } 
    } 

所以我的代码中,我使用{"module1.component1" | translate},从来没有得到解决,而如果我做

{  
     "component1": "text1", 
     "component2": "text2"   
    } 

{"component1" | translate}作品。有没有办法解决嵌套的JSON数据使用useStaticFilesLoader

编辑1: 这里是我的useStaticFilesLoader的配置是这样的:

$translateProvider.useStaticFilesLoader({ 
     prefix: './langfiles/', 
     suffix: '.json' 
     }); 
    $translate.use(lang);//lang is derived from header 

langfiles包含: en_US.json等

+0

您使用的是翻译过滤器?请张贴您的控制器/通过plunker或在stackoverflow代码编辑器创建一个运行的例子。通过“json”过滤可以很好地处理任何数据,所以您的翻译过滤器就是问题最可能出现的地方。 – Enkode

+0

@Enkode:我不确定你是否遵循我的问题。正如问题中所提到的,当我尝试获取平坦的json文件时没有问题,但问题是存在嵌套的json数据时,路径不会像角度转换过滤器那样解析,如{“this.is.nested.data” |翻译}而这工作{“数据”|翻译}。无论如何,让我知道你是否需要更多信息。 – user429035

+0

我不明白你的问题,因为你没有明确地说你使用$ translateProvider。 – Enkode

回答

1

退房这个职位:Accessing nested JSON objects,看看是否有帮助。他们的jsfiddle展示如何做到:http://jsfiddle.net/z1uLjg89/

// Including ngTranslate 
 
angular.module("ngTranslate", ["ng"]).config(["$provide", function (n) { 
 
    $TranslateProvider = function() { 
 
     var n, t = {}; 
 
     this.translations = function (n, r) { 
 
      if (!n && !r) return t; 
 
      if (n && !r) { 
 
       if (angular.isString(n)) return t[n]; 
 
       t = n 
 
      } else t[n] = r 
 
     }, this.uses = function (r) { 
 
      if (!r) return n; 
 
      if (!t[r]) throw Error("$translateProvider couldn't find translationTable for langKey: '" + r + "'"); 
 
      n = r 
 
     }, this.$get = ["$interpolate", "$log", function (r, a) { 
 
      return $translate = function (e, i) { 
 
       var l = n ? t[n][e] : t[e]; 
 
       return l ? r(l)(i) : (a.warn("Translation for " + e + " doesn't exist"), e) 
 
      } 
 
     }] 
 
    }, n.provider("$translate", $TranslateProvider) 
 
}]), angular.module("ngTranslate").directive("translate", ["$filter", "$interpolate", function (n, t) { 
 
    var r = n("translate"); 
 
    return { 
 
     restrict: "A", 
 
     scope: !0, 
 
     link: function (n, a, e) { 
 
      e.$observe("translate", function (r) { 
 
       n.translationId = angular.equals(r, "") ? t(a.text())(n.$parent) : r 
 
      }), e.$observe("values", function (t) { 
 
       n.interpolateParams = t 
 
      }), n.$watch("translationId + interpolateParams", function() { 
 
       a.html(r(n.translationId, n.interpolateParams)) 
 
      }) 
 
     } 
 
    } 
 
}]), angular.module("ngTranslate").filter("translate", ["$parse", "$translate", function (n, t) { 
 
    return function (r, a) { 
 
     return angular.isObject(a) || (a = n(a)()), t(r, a) 
 
    } 
 
}]); 
 

 
// Configuring your module, asking for ngTranslate as dependency 
 
var app = angular.module('myApp', ['ngTranslate']); 
 

 
// Configuring $translateProvider 
 
app.config(['$translateProvider', function ($translateProvider) { 
 

 
    // Simply register translation table as object hash 
 
    $translateProvider.translations('en', { 
 
     "SEARCH": { 
 
      "SEARCH": "Recherce", 
 
       "ABILITY": "Abilities", 
 
       "MANAGEMENT": "Management Competencies", 
 
       "PERSONAL": "Personal Suitability" 
 
     }, 
 

 
      "ABILITIES": { 
 
      "TITLE": "Test Title here", 
 
       "ADVISORY": { 
 
       "TITLE": "Advisory Skills", 
 
        "QUESTIONS": [{ 
 
        "TYPE": "A", 
 
         "LEVEL": "45", 
 
         "DESCRIPTION": "Can you tell me how awesome you are" 
 
       }, { 
 
        "TYPE": "B", 
 
         "LEVEL": "100", 
 
         "DESCRIPTION": "Tell me about your wicked project" 
 
       }] 
 
      } 
 
     }, 
 

 
      "HEADLINE": "Oh No!", 
 
      "SUB_HEADLINE": "Looks like you are not amazing" 
 
    }); 
 

 
    var list = $translateProvider.translations('en'); 
 
    console.log(list); 
 
    var getTitle = list.HEADLINE; 
 
    var getSearch = list.SEARCH.ABILITY; 
 
    console.log(getSearch); 
 
    console.log(getTitle); 
 
}]);
<div ng-app="myApp"></div>

一个可能的解决办法是扁平化您的JSON文件

Fastest way to flatten/un-flatten nested JSON objectsConvert complex JavaScript object to dot notation object

这拨弄您展示如何将是什么样子:http://fiddle.jshell.net/blowsie/S2hsS/show/light/