使用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是否仅适用于该服务?
答案 0 :(得分:0)
我知道我现在搞砸了 - 我的嵌套翻译中可怕的结尾逗号:
{
"NAMESPACE": {
"TRANSLATION_ID": "A value",
"ANOTHER_ID": "Another value",
}
};
所以,是的,完全无关。