3

いくつかの文字列を複数形にするために、メッセージ形式の補間で 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 が式の評価をサポートしていないことは知っていますが、変数置換が機能することを願っていました。

何か案が?

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>

注: translate-filter 内で「your_scope」を渡し、messageFormat コード内で「my_variable_in_the_scope」にアクセスしました。

これが最善の解決策になるはずです。

于 2015-06-25T15:36:23.580 に答える