2012-05-29 16 views
11

क्या बहुवचन शब्दों का उपयोग करने के बारे में टेम्पलेट्स को जागरूक करने के लिए कोई सहायक हैं?एम्बर में बहुवचन कैसे संभालें?

नीचे दिए गए उदाहरण में, आप टेम्पलेट आउटपुट "2 कुत्तों ..." कैसे बनाते हैं?

कोड:

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

टेम्पलेट:

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

पर

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://stackoverflow.com/questions/48726/best-javascript-i18n पर एक नजर डालें -टेक्निक-एजेक्स-तिथियां-समय-संख्या-मुद्रा – Reactormonk

उत्तर

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. 

बहुवचन (पी =) विकल्प केवल आवश्यक है जब आप मानक + रों व्यवहार नहीं करना चाहती।

+0

आप सही सरल उत्तर के लिए पुरस्कार जीतते हैं। इन अन्य लोगों ने कड़ी मेहनत की कोशिश की, लेकिन वह 'रजिस्टरबाउंडहेल्पर' अस्तित्व से पहले के दिनों में था। – hekevintran

+0

यह एक अच्छा विकल्प नहीं है, अधिक सही दृष्टिकोण @ Giovanni होगा। लेकिन चूंकि एम्बर-इन्फ्लिक्टर अब एक बहुवचन सहायक को पंजीकृत करता है, इसलिए आप इसे बॉक्स से बाहर निकालते हैं (https://github.com/stefanpenner/ember-inflector/issues/18 देखें)। –

+0

मैंने इसे एम्बर 2.x में काम करने के लिए अपडेट किया है, [यहां] (https://gist.github.com/finferflu/8eeeff014acec7525f466aa72d0ab560), लेकिन चूंकि मुझे नहीं पता कि नाम पैरामीटर वहां कैसे काम करते हैं, मेरे पास है स्थितित्मक मानकों का चयन किया। इसे सुधारने के लिए स्वतंत्र महसूस करें! – finferflu

0

मैं किसी भी एंबर विशिष्ट कार्यों है कि आप के लिए यह कर देगा का पता नहीं है। हालांकि, आम तौर पर जब आप एक शब्द को बहुवचन करते हैं, तो एकल संस्करण केवल तब दिखाई देता है जब गिनती एक होती है।

एक उदाहरण के लिए देखें: 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 
10

वहाँ एंबर के लिए एक 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.' 
}; 

और तुम तो के माध्यम से अपने Handlebars टेम्पलेट में स्ट्रिंग का उपयोग कर सकते हैं:

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

कोड उपरोक्त अनचाहे है और सिर्फ README में प्रलेखन से लिया गया है।


एक और जे एस I18n पुस्तकालय मैंने पाया एलेक्स सेक्सटन के messageformat.js है।


यह एप्लिकेशन को आप की जटिलता पर निर्भर करता है, लेकिन आप यह भी है कि के लिए एक गणना संपत्ति का उपयोग कर सकते, http://jsfiddle.net/pangratz666/pzg4c/ देखें:

Handlebars:

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

जावास्क्रिप्ट:

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(); 
+1

क्या यह सीधे गणना की गई संपत्ति के बजाय हैंडलबार सहायक बनाने के लिए बेहतर समाधान नहीं होना चाहिए? – louiscoquio

+0

मुझे एम्बर के लिए I18n लाइब्रेरी मिली जिसमें एक हैंडलबार सहायक है। – pangratz

+0

+1, यह भी बहुत अच्छा लग रहा है! – louiscoquio

4

यह आप got an answer from wycats himself की तरह लग रहा है, लेकिन मैं नहीं देखा था यह इस सूत्र में उल्लेख किया है, इसलिए यहाँ यह है:

Handlebars.registerHelper('pluralize', function(number, single, plural) { 
    if (number === 1) { return single; } 
    else { return plural; } 
}); 
3

मैं हाल ही में इस पुस्तकालय http://slexaxton.github.com/Jed/ जो जे एस i18n के लिए एक अच्छी उपकरण प्रतीत हो रहा है मिल गया। मुझे लगता है कि आप इस पुस्तकालय का उपयोग कर हैंडलबार सहायक का पंजीकरण करके आसानी से अपना खुद का कार्यान्वयन कर सकते हैं।

8

यदि आप एम्बर डेटा का उपयोग करते हैं तो आप Ember.Inflector का उपयोग कर सकते हैं।

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

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

आप के साथ एक नई सहायक रजिस्टर कर सकते हैं: http://emberjs.com/api/data/classes/Ember.Inflector.html

+0

एम्बर-इन्फ्लिक्टर अब एक बहुवचन सहायक को पंजीकृत करता है, आप इसे बॉक्स से बाहर निकालते हैं (https://github.com/stefanpenner/ember-inflector/issues/18 देखें)। –

संबंधित मुद्दे