angular-translate嵌套JSON和过滤器

时间:2016-07-01 08:41:47

标签: angularjs json filter nested angular-translate

使用angular-translate时,我可以像这样过滤我的字符串:

<ANY>{{'TRANSLATION_ID' | translate}}</ANY>

使用以下平面JSON非常有效:

 {
  TRANSLATION_ID: 'A value',
};

但是,我无法弄清楚如何使用嵌套翻译让它工作:

<ANY>{{'NAMESPACE.TRANSLATION_ID' | translate}}</ANY>

嵌套的JSON:

{
    "NAMESPACE": {
         "TRANSLATION_ID": "A value"
    }
};

我使用$translateProvider.useStaticFilesLoader({prefix: 'i18n/locale-', suffix: '.json'});成功加载了翻译,并且我使用了提供程序的其他功能,例如$translateProvider.addInterpolation('$translateMessageFormatInterpolation');

documentation直接使用service显示嵌套翻译的示例,但不显示filter的嵌套翻译示例。

I found a possibly related issue here。 首先,使用JSFifddle中的代码会破坏$translateProvider函数(在注入$TranslateProvider = angular.extend(m, $TranslateProvider); $translateProvider之后,我通过扩展替换变量来解决此问题:m并添加pascalprecht.translate作为模块依赖项,并添加var声明以便能够'use strict') - 所以马上它似乎不是一个可靠的解决方案。

使用JSFiddle代码,我得到了指令,至少对于非嵌套情况(这很好,但不是这里需要的,所以我没有费心去测试嵌套的情况)但不是过滤器(我需要为嵌套和非嵌套翻译工作)。

在我看来,命名空间的翻译应该是一个非常大的问题,因此应该适用于所有3种翻译方法(服务,指令和过滤器)。

“service”方法相当有限($ translate服务不提供双向数据绑定,这意味着更多代码可以监听事件 - see doc - 以及加载所有接口的事实应用程序的控制器/服务中的字符串翻译似乎是一个非常糟糕的做法;如果我没有记错的话,视图/模板就在这里。

是否有人找到了解决方案,或者角度转换嵌套JSON是否仅适用于该服务?

1 个答案:

答案 0 :(得分:0)

我知道我现在搞砸了 - 我的嵌套翻译中可怕的结尾逗号:

{
    "NAMESPACE": {
         "TRANSLATION_ID": "A value",
         "ANOTHER_ID": "Another value",
    }
};

所以,是的,完全无关。