angular-翻译嵌套 JSON 和过滤

angular-translate nested JSON and filter

使用 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 shows examples of nested translation using the service directly, but not the filter.

。 首先,使用 JSFifddle 中的代码会破坏 $translateProvider 函数(我通过像这样扩展替换变量以某种方式修复了它:$TranslateProvider = angular.extend(m, $TranslateProvider); 在将 $translateProvider 注入为 m 之后并添加 pascalprecht.translate 作为模块依赖项,并添加 var 声明以便能够 'use strict') - 所以一开始它似乎不是一个可靠的解决方案。

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

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

"service" 方法相当有限($translate 服务不提供双向数据绑定,这意味着需要更多代码来侦听事件 - see doc - 而且,事实上在应用程序的 controller/service 中加载所有界面的字符串翻译似乎是一个非常糟糕的做法;如果我没记错的话,views/templates 就是为了这个)。

有没有人找到解决方案,或者 angular-translate nested JSON 仅适用于该服务?

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

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

所以,是的,完全不相关。