使用带有angular-translate的messageformat时的变量替换

时间:2014-05-28 14:31:20

标签: angularjs angular-translate

我使用带有messageformat插值的angular-translate来复数一些字符串。 (对于那些不知道我在说什么的人: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不支持表达式评估,但我希望变量替换可以起作用。

任何想法?

2 个答案:

答案 0 :(得分: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>

请注意:我在translate-filter中传递了“your_scope”,并在messageFormat代码中访问了“my_variable_in_the_scope”。

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

答案 1 :(得分:2)

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

E.g。我的过滤器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