数値をフォーマットして、角度で複数形にしたい。
例(ビットコインの数が与えられた場合):
0 => "John has no bitcoins"
1 => "John has 1 bitcoin"
2 => "John has 2 bitcoins"
12345.6789 => "John has 12,345.67 bitcoins"
私が試したこと:
John has
<ng-pluralize count="bitcoin_amount | round:2"
when="{'0': 'no bitcoins',
'1': '1 bitcoin',
'other': '{} bitcoins'}">
</ng-pluralize>
しかし、これは惨めに失敗します。1000以上の数値の場合、count
属性で1,000
として渡されるため、数千のみが表示されます。例えば:
1001 => 1
1000 => 1
2000 => 2
etc...
例として、 このデモ のボックス1,000
にnumber of people
を貼り付けてみてください。
数値をフォーマットしてangular)で複数形にするにはどうすればよいですか?
ここでは通常の表現を使用する必要はありません。
次のように、ng-pluralize
ディレクティブのwhen
属性にロジックを直接渡すことができます。
<ng-pluralize count="amount" when="{'0': 'no bitcoins',
'1': '1 bitcoin',
'other': '{{amount | number:2}} bitcoins'}">
</ng-pluralize>
作業プランカー 。
カンマを削除して処理させることはできますか?
John has
<ng-pluralize count="bitcoin_amount.replace(',','') | round:2"
when="{'0': 'no bitcoins',
'1': '1 bitcoin',
'other': '{} bitcoins'}">
</ng-pluralize>
jsfiddlehttp://jsfiddle.net/9zmVW/
一般的な方法が必要な場合は、デフォルトで「s」を追加できます。
文字列で特定の複数形を渡します。
function plural(s, pl){
var n= parseFloat(s);
if(isNaN(n) || Math.abs(n)=== 1) return s;
if(!pl) return s+'s';
return s.replace(/\S+(\s*)$/, pl+'$1');
}
// test:
[0, .5, 1, 1.5, 2].map(function(itm){
return [plural(itm+' bitcoin'),
plural(itm+' box', 'boxes'),
plural(itm+' foot', 'feet')];
}).join('\n');
// returned values:
0 bitcoins, 0 boxes, 0 feet
0.5 bitcoins, 0.5 boxes, 0.5 feet
1 bitcoin, 1 box, 1 foot
1.5 bitcoins, 1.5 boxes, 1.5 feet
2 bitcoins, 2 boxes, 2 feet