2013-12-11 20 views
12

में किसी संख्या को बहुवचन और प्रारूपित करने के लिए मैं एक संख्या को प्रारूपित करना चाहता हूं और इसे कोणीय के साथ बहुवचन करना चाहता हूं।angularjs

उदाहरण के लिए (Bitcoins की एक संख्या को देखते हुए):

  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 से भी बड़ा के लिए, वे कर रहे हैं विशेषता में 1,000 के रूप में पारित किया गया, इसलिए केवल हजारों को दिखाया गया है। उदाहरण के लिए:

1001 => 1 
1000 => 1 
2000 => 2 
etc... 

एक उदाहरण के लिए this demo के बॉक्स number of people में 1,000 चिपकाकर प्रयास करें।


मैं संख्या को कैसे प्रारूपित कर सकता हूं और इसे कोणीय में बहुवचन कैसे कर सकता हूं?

उत्तर

23

नियमित अभिव्यक्ति का उपयोग करने की कोई आवश्यकता नहीं है।

तुम इतनी तरह ng-pluralize निर्देश का when विशेषता में सीधे अपने तर्क पारित कर सकते हैं:

<ng-pluralize count="amount" when="{'0': 'no bitcoins', 
        '1': '1 bitcoin', 
        'other': '{{amount | number:2}} bitcoins'}"> 
</ng-pluralize> 

Working plunker

5

क्या आप सिर्फ अल्पविराम को हटा सकते हैं और इसे इसे संभालने दे सकते हैं?

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/

1

यदि आप चाहते हैं एक सामान्य विधि आप '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 
1

आप l10ns का उपयोग कर सकते हैं यदि आप ngPluralize का उपयोग नहीं करना चाहते हैं और यदि आप अपने तर्क को स्थानीयकरण संग्रहण में संग्रहीत करना चाहते हैं। L10ns आईसीयू के संदेशफॉर्मैट का उपयोग करता है जो बहुवचन को संभालने के लिए डी-फैक्टो मानक बन रहा है। आईसीयू का संदेशफॉर्मैट सीएलडीआर का उपयोग करता है, जो डेटा रिपोजिटरी का उपयोग करता है और ऐप्पल और Google जैसी कई प्रमुख कंपनियों द्वारा योगदान देता है।

सामान्य बोली जाने वाली अंग्रेजी में हमारे पास दो बहुवचन रूप singular और plural हैं। सीएलडीआर 6 अलग-अलग प्रकार के बहुवचन रूपों को परिभाषित करता है। और वे zero, one, two, few, many और other हैं। One और two का मतलब संख्या 1 और 2.

उदाहरण के लिए सीएलडीआर में English के लिए दो बहुवचन रूपों को परिभाषित करता है। One और other। यदि आप l10ns में अनुवाद इंटरफ़ेस का उपयोग करते हैं, तो आपको प्रत्येक बहुवचन रूप का उदाहरण मिलेगा।

तो अगर आप L10ns उपयोग कर रहे हैं अपने उदाहरण होगा:

{bitcoins, plural, =0{no bitcoins} one{1 bitcoin} other{# bitcoins}}. 

ऊपर में, =0 एक सटीक मामले लक्षित कर रहा है।

अधिक जानकारी के लिए कृपया उनके documentation चेकआउट करें।