1

これに関するいくつかの質問 (および回答) が見つかりました: Hogan.js の国際化はどのように構成されていますか? 、等。

しかし、特に語順を考慮に入れるわけではありません。次の機能が必要です。

  • ステップ 1. 与えられたキー -> 特定の言語で文を検索します。

  • ステップ 2. この文には {{var}} が含まれている可能性があり、これを
    json-values に置き換える必要があります。

ステップ 2. 単独で、一般的な口ひげのテンプレートです。

ステップ 1. 単独でいくつかの手法を使用して実行できますが、Mustache/Hogan エンジン以外の特殊なコードを使用しない手法を好みます (もちろん、i18n リソース バンドルと組み合わせて)。ホーガンは次のような方法でこれをサポートしているようです: (上記の URL から)

var template = "{{#i18n}}Name{{/i18n}}: {{username}}",
    context = {
       username: "Jean Luc",
       i18n: function (i18nKey) {return translatedStrings[i18nKey];}
    };

translatedStrings[i18nKey]ただし、この例で 1. と 2. を組み合わせるには、潜在的に含む文字列も返したいと思い{{<some expansion>}}ます。

誰かがこれを行うエレガントな方法を知っていますか?

理論的根拠: 多くの場合、言語は語順などで大きく異なり、この機能がないと複雑なテンプレートになります。

4

1 に答える 1

4

Hogan.js の最新バージョンは、ラムダから返された結果内の Mustache タグを処理します。ただし、質問のコードに対する小さな変更の 1 つは、文字列を変更するためにラムダの結果を関数にする必要があることです。

var translatedStrings = { name: "Nom {{rank}}" };

var template = "{{#i18n}}name{{/i18n}}: {{username}}",
    context = {
        username: "Jean Luc",
        rank: 'Captain',
        i18n: function() {
            return function (i18nKey) {return translatedStrings[i18nKey];};
        }
    };

document.write(Hogan.compile(template).render(context));​ // Nom Captain: Jean Luc

最新バージョンでこれを示すjsfiddleを作成しました。

于 2012-04-18T22:13:34.103 に答える