angular-translate:翻译动态值

时间:2016-02-05 11:47:49

标签: angularjs internationalization angular-translate

我们正在使用angular-translate来翻译我们的应用。

具有动态数字值的常规翻译没有问题,例如

'LIVES_LEFT': 'You have {{ lives }} left.'

一样使用
<p>{{ 'LIVES_LEFT' | translate:player }}</p>

当动态值是一个本身需要翻译的字符串时会出现问题,例如

'YOU_HAVE_A_CHILD': 'You have a {{ gender }} that is {{ age }} years old.'

一样使用
<p>{{ 'YOU_HAVE_A_CHILD' | translate:child }}</p>
如果选择的语言是英语,

gender在这种情况下应该最终解析为'boy'或'girl',例如,如果选择的语言是德语,则为'Junge'或'Mädchen'。我该怎么做?

修改

正如下面的Partha Sarathi Ghosh所建议的,我试过

<p>{{ 'YOU_HAVE_A_CHILD' | translate:(child | translate) }}</p>

但是我从中得到了语法错误:

Error: [$parse:syntax] Syntax Error: Token 'Object' is unexpected, expecting []] at column 9 of the expression [[object Object]] starting at [Object]].

然而,

{
    'YOU_HAVE_A_CHILD': 'You have a {{ gender | translate }} that is {{ age }} years old.',
    'GENDER_BOY': 'boy',
    'GENDER_GIRL': 'girl'
}

一样使用
<p>{{ 'YOU_HAVE_A_CHILD' | translate:vm.childTranslationData() }}</p>

使用这样的控制器代码:

function childTranslationData() {
    return {
        gender: vm.child.gender === 'boy' ? 'GENDER_BOY' : 'GENDER_GIRL',
        age: vm.child.age
    };
}

工作得很好!非常感谢!

1 个答案:

答案 0 :(得分:3)

试试这个。它可以解决你的问题。

{{ 'YOU_HAVE_A_CHILD' | translate:(child | translate) }}

或者你可以试试这个

'YOU_HAVE_A_CHILD': 'You have a {{ gender | translate }} that is {{ age }} years old.'

如果没有解决,那么首先从你的控制器翻译孩子