テンプレートに複数形の単語をいつ使用するかを認識させるためのヘルパーはありますか?
次の例では、テンプレートに「2匹の犬がいます...」という出力を作成するにはどうすればよいですか。
コード:
Ember.View.create({dog_count: 2})
テンプレート:
{{dog_count}} (dog has)/(dogs have) gone for a walk.
テンプレートに複数形の単語をいつ使用するかを認識させるためのヘルパーはありますか?
次の例では、テンプレートに「2匹の犬がいます...」という出力を作成するにはどうすればよいですか。
コード:
Ember.View.create({dog_count: 2})
テンプレート:
{{dog_count}} (dog has)/(dogs have) gone for a walk.
これは古いことは知っていますが、今日必要だったので、ここに行きます。
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動作が必要ない場合にのみ必要です。
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();
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をご覧ください。
あなたはワイキャッツ自身から答えを得たようですが、私はそれがこのスレッドで言及されているのを見なかったので、ここにあります:
Handlebars.registerHelper('pluralize', function(number, single, plural) {
if (number === 1) { return single; }
else { return plural; }
});
最近、このライブラリhttp://slexaxton.github.com/Jed/を見つけました。これは、JSi18nの優れたツールのようです。このライブラリを使用してハンドルバーヘルパーを登録することで、独自の実装を非常に簡単に作成できると思います。
私はあなたのためにこれを行う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