3

我正在使用带有消息格式插值的角度翻译来复数一些字符串。(对于那些不知道我在说什么的人:http: //angular-translate.github.io/docs/#/guide/14_pluralization)。

它进展顺利,但我不知道如何使用变量而不是常量。

$translateProvider.translations('it', {
    SELECTED_CATEGORIES: "{NUM, plural, =0{Nessuna categoria selezionata} one{1 categoria selezionata} other{# categorie selezionate}}"
}).translations('en', {
    SELECTED_CATEGORIES: "{NUM, plural, =0{No category selected} one{1 selected category} other{# selected categories}}"
});

这是 HTML 代码:

<span>{{ 'SELECTED_CATEGORIES' | translate:"{'NUM': 2 }" }}</span>

这有效,但如果我使用

<span>{{ 'SELECTED_CATEGORIES' | translate:"{'NUM': my_variable_in_the_scope }" }}</span>

我得到一个错误。我尝试使用引号、双引号和类似的,但似乎没有任何效果。我知道 messageformat 不支持表达式评估,但我希望变量替换会起作用。

任何想法?

4

2 回答 2

3

那么,正确的解决方案应该是传递范围并访问 messageFormat 代码中的值。您可以像这样轻松地做到这一点:

    $translateProvider.translations('it', {
    SELECTED_CATEGORIES: "{my_variable_in_the_scope , plural, =0{Nessuna categoria selezionata} one{1 categoria selezionata} other{# categorie selezionate}}"
}).translations('en', {
    SELECTED_CATEGORIES: "{my_variable_in_the_scope , plural, =0{No category selected} one{1 selected category} other{# selected categories}}"
});

还有你的 HTML:

<span>{{ 'SELECTED_CATEGORIES' | translate:your_scope }}</span>

请注意:我在翻译过滤器中传递了“your_scope”,并在 messageFormat 代码中访问了“my_variable_in_the_scope”。

这应该是最好的解决方案。

于 2015-06-25T15:36:23.580 回答
2

要在角度过滤器中使用变量,您必须使用不带引号的 filter:{key: value}

例如,我的过滤器 replaceVariable 用于启用 rails yml 占位符被替换为 js 变量

用法:

{{ sometranslation | replaceVariable:{count:results} }}

筛选:

// replaces {%count} in yml translations to work with angular
filters.filter('replaceVariable', function () {

    "use strict";

    return function (string, variable) {
        var replace = string.replace(/%\{[\w\s]*\}/, variable.count);
        return replace;
    };
});

所以我猜你必须以同样的方式使用它。我记得我也无法让它工作,这就是为什么我在之后链接我的自定义过滤器

 somevalue | translate | myCustomFilter
于 2014-05-28T15:23:07.200 回答