使用useStaticFilesLoader进行角度转换以加载嵌套的json [英] angular translate using useStaticFilesLoader to load nested json

查看:137
本文介绍了使用useStaticFilesLoader进行角度转换以加载嵌套的json的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个像这样的嵌套json结构

I have a nested json structure like this

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

所以在我的代码中,我使用的是{"module1.component1" | translate},但是如果我这样做了,则永远不会解决

So inside my code I am using {"module1.component1" | translate} which never get resolved whereas if I do

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

{"component1" | translate}有效.有没有一种方法可以使用useStaticFilesLoader

{"component1" | translate} works . Is there a way to resolve nested JSON data using useStaticFilesLoader

这是我的useStaticFilesLoader配置,如下所示:

edit 1: here is my useStaticFilesLoader config looks like :

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

langfiles包含: en_US.json等

langfiles contains : en_US.json etc

推荐答案

查看此帖子:访问嵌套JSON对象,看看是否有帮助.他们的JSFiddle展示了如何实现: http://jsfiddle.net/z1uLjg89/

Check out this post: Accessing nested JSON objects and see if that helps. Their JSFiddle show how it can be done: 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文件.

A possible work around is to flatten your json file.

平坦化/不平坦化嵌套JSON对象的最快方法将复杂的JavaScript对象转换为点表示法对象

此小提琴向您展示了它的外观: http://fiddle .jshell.net/blowsie/S2hsS/show/light/

This fiddle shows you how what it will look like: http://fiddle.jshell.net/blowsie/S2hsS/show/light/

这篇关于使用useStaticFilesLoader进行角度转换以加载嵌套的json的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆