我使用带有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不支持表达式评估,但我希望变量替换可以起作用。
任何想法?
答案 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