11

テンプレートに複数形の単語をいつ使用するかを認識させるためのヘルパーはありますか?

次の例では、テンプレートに「2匹の犬がいます...」という出力を作成するにはどうすればよいですか。

コード:

Ember.View.create({dog_count: 2})

テンプレート:

{{dog_count}} (dog has)/(dogs have) gone for a walk.
4

6 に答える 6

14

これは古いことは知っていますが、今日必要だったので、ここに行きます。

Ember.Handlebars.registerBoundHelper('pluralize', function(number, opts) {
  var single = opts.hash['s'];
  Ember.assert('pluralize requires a singular string (s)', single);
  var plural = opts.hash['p'] || single + 's';
  return (number == 1) ? single : plural;
});

使用法:

{{questions.length}} {{pluralize questions.length s="Question"}}

また

{{dog_count}} {{pluralize dog_count s="dog has" p="dogs have"}} gone for a walk.

複数形(p =)オプションは、標準の+s動作が必要ない場合にのみ必要です。

于 2013-05-21T20:55:44.903 に答える
10

Ember用のI18nライブラリがあります:zendesk/ember-i18n

tから文字列を検索することによって国際化を処理するハンドルバーヘルパーがありますEm.I18n.translations

Em.I18n.translations = {
  'dog.walk.one': '1 dog has gone for a walk.',
  'dog.walk.other': '{{count}} dogs have gone for a walk.'
};

そして、次の方法でハンドルバーテンプレートの文字列を使用できます。

{{t dog.walk countBinding="dogCount"}}

上記のコードはテストされておらず、READMEのドキュメントから抜粋したものです。


私が見つけたもう1つのJSI18nライブラリは、AlexSextonのmessageformat.jsです。


アプリの複雑さにもよりますが、計算されたプロパティを使用することもできます。http ://jsfiddle.net/pangratz666/pzg4c/を参照してください。

ハンドルバー

<script type="text/x-handlebars" data-template-name="dog" >
    {{dogCountString}}
</script>​

JavaScript

Ember.View.create({
    templateName: 'dog',
    dogCountString: function() {
        var dogCount = this.get('dogCount');
        var dogCountStr = (dogCount === 1) ? 'dog has' : 'dogs have';
        return '%@ %@ gone for a walk.'.fmt(dogCount, dogCountStr);
    }.property('dogCount')
}).append();
于 2012-05-30T09:27:07.890 に答える
9

Ember Dataを使用する場合は、を使用できますEmber.Inflector

var inflector = new Ember.Inflector(Ember.Inflector.defaultRules);

inflector.pluralize('person') //=> 'people'

次のコマンドで新しいヘルパーを登録できます。

Handlebars.registerHelper('pluralize', function(number, single) {
  if (number === 1) { return single; }
  else {
    var inflector = new Ember.Inflector(Ember.Inflector.defaultRules);
    return inflector.pluralize(single);
  }
});

詳細については、http://emberjs.com/api/data/classes/Ember.Inflector.htmlをご覧ください。

于 2014-02-20T17:16:47.533 に答える
4

あなたはワイキャッツ自身から答えを得たようですが、私はそれがこのスレッドで言及されているのを見なかったので、ここにあります:

Handlebars.registerHelper('pluralize', function(number, single, plural) {
    if (number === 1) { return single; }
    else { return plural; }
});
于 2012-10-02T20:46:11.457 に答える
3

最近、このライブラリhttp://slexaxton.github.com/Jed/を見つけました。これは、JSi18nの優れたツールのようです。このライブラリを使用してハンドルバーヘルパーを登録することで、独自の実装を非常に簡単に作成できると思います。

于 2012-12-05T18:47:16.300 に答える
0

私はあなたのためにこれを行うEmber固有の関数を知りません。ただし、通常、単語を複数形にすると、カウントが1の場合にのみ単一バージョンが表示されます。

例については、これを参照してください:http: //jsfiddle.net/6VN56/

function pluralize(count, single, plural) {
    return count + " " + (count == 1 ? single : plural);
}

pluralize(1, 'dog', 'dogs') // 1 dog
pluralize(10, 'dog', 'dogs') // 10 dogs
pluralize(0, 'dog', 'dogs') // 0 dogs
于 2012-05-30T01:03:35.287 に答える