0

ui 文字列を翻訳するための「_i」と文字列を複数形にするための「pluralize」という 2 つのヘルパーが登録されています。次のように、ネストすることがよくあります。

{{#_i}}{{num_hidden}} hidden {{#pluralize}}comment,comments,{{num_hidden}}{{/pluralize}}{{/_i}}

(これにより、「5 つの非表示のコメント」のような結果になります)。

辞書で _i タグ内の文字列全体を検索し、それを置換することによって、UI 文字列の翻訳が機能する方法 (スペイン語など):

{{num_hidden}} {{#pluralize}}comentario escondido,comentarios escondidos,{{num_hidden}}{{/pluralize}}

次に、この文字列に対して複数化ヘルパーを実行します。これは、mustache を呼び出す前にビューを動的に拡張したときに、musache でうまく機能しました。ただし、Handlebars ヘルパーを使用すると、最初に複数形化ヘルパー (最も内側) が実行され、次に翻訳されていない UI 文字列が取得されます。

私は何か間違ったことをしていると思います。

4

2 に答える 2

0

ネストする代わりに、1 つのヘルパーと MessageFormat.js ライブラリを使用できます: https://github.com/SlexAxton/messageformat.js - 複数形や性別のルールを含むさまざまな言語で「メッセージ」を表示できます。

ハンドルバーヘルパーは次のとおりです。

Handlebars.registerHelper('i18n', function (text) {
    var options,
        compiledText;

    options  = arguments[arguments.length - 1];

    if (compiled[locale].hasOwnProperty(text)) {
        compiledText = compiled[locale][text];
    } else {
        compiledText = mf.compile(dictionary[locale][text]);
        compiled[locale][text] = compiledText;
    }

    return compiledText(options.hash);
});

dictonaryオブジェクトは、すべての翻訳を含むものです。

dictionary = {
    en: {
        "You have MESSAGES_COUNT messages": "You have {MESSAGE_COUNT, plural, one {1 message} other {# messages}}",
    },
    pl: {
        "You have MESSAGES_COUNT messages": "Masz {MESSAGE_COUNT, plural, one {1 wiadomość} other {# wiadomości}}"
    }
};

object は、compiledキャッシュされたバージョンの「メッセージ」を保存して、使用するたびにコンパイルしないようにするものです。ビルド時に「メッセージ」をコンパイルすることもできます。

于 2013-08-19T08:40:31.587 に答える