【发布时间】:2016-11-03 14:18:22
【问题描述】:
当使用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 仅适用于服务?
【问题讨论】:
-
似乎我找到了如何在不使用额外代码的情况下使其工作。令人沮丧的是我不知道如何......
标签: angularjs json filter nested angular-translate