2011-12-12 27 views
6

एंड्रॉइड अनुवादकों को Plurals परिभाषित करने की अनुमति देता है। निम्न उदाहरण 'एन' स्थान के साथ मेरे लिए काम करता है:एंड्रॉइड स्ट्रिंग्स-संसाधन बहुवचन में काम नहीं कर रहे "दो" मात्रा

<plurals name="numberOfSongsAvailable"> 
    <item quantity="one">One song found.</item> 
    <item quantity="other">%d songs found.</item> 
</plurals> 

लेकिन two के लिए एक विशेष मूल्य जोड़ने काम नहीं करता है, अभी भी other संस्करण लिया जाता है। क्या two का उपयोग लोकेल पर निर्भर है? तो क्या एंड्रॉइड केवल two संस्करण लेता है यदि लोकेल स्पष्ट रूप से निर्दिष्ट करता है कि two संस्करण होना चाहिए?

SO प्रश्न Android plurals treatment of “zero” अंग्रेजी में zero का उपयोग करते समय एक ही गलती को स्पॉट करता है जो समर्थित नहीं है। एंड्रॉइड प्लुरल्स से बचने के अलावा इस प्रश्न में कोई समाधान नहीं है जिसे मैं टालना चाहता हूं।

+0

हां, दो का उपयोग लोकेल के लिए विशिष्ट है। सिर्फ इसलिए कि आप इसे नंबर 2 देते हैं इसका मतलब यह नहीं है कि यह मात्रा = "दो" का उपयोग करेगा। यह केवल उन भाषाओं के लिए उस मात्रा का उपयोग करेगा जिनके पास संख्या 2 – ByteMe

+0

के संभावित मामले हैं [एंड्रॉइड प्लुरल्स "शून्य" के उपचार के संभावित डुप्लिकेट (http://stackoverflow.com/questions/5651902/android-plurals- उपचार-of- शून्य) –

उत्तर

9

एंड्रॉइड सीएलडीआर बहुवचन प्रणाली का उपयोग कर रहा है, और यह सिर्फ यह नहीं है कि यह कैसे काम करता है (इसलिए इसे बदलने की उम्मीद न करें)।

प्रणाली यहाँ वर्णित है:

http://cldr.unicode.org/index/cldr-spec/plural-rules

संक्षेप में, यह समझना महत्वपूर्ण है कि "एक" संख्या 1. इसके बजाय इन खोजशब्दों श्रेणियां हैं, और विशिष्ट संख्या n कि संबंधित मतलब यह नहीं है महत्वपूर्ण है प्रत्येक श्रेणी के लिए CLDR डेटाबेस में नियमों से परिभाषित कर रहे हैं:

http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html

"शून्य" 0, के अलावा और कुछ के लिए वहाँ कोई भाषा है जो उपयोग करता प्रतीत होता है जबकि फिर वे भाषाएं हैं जो 0 को "एक" असाइन करती हैं। निश्चित रूप से बहुत सारे मामले हैं जहां "दो" में अन्य संख्याओं की तुलना में अन्य संख्याएं हैं।

यदि एंड्रॉइड आपको अपने इच्छित कार्यों को करने की अनुमति देता है, तो आपके अनुप्रयोगों को अधिक जटिल बहुवचन नियमों के साथ किसी भी संख्या में उचित रूप से अनुवादित नहीं किया जा सकता है ।

3

यह old bug है। relevant code section of the PluralRules class में कुछ याद आ रही हैं।

जैसा कि आपके लिंक किए गए प्रश्न में दिए गए उत्तर में कहा गया है, आप MessageFormat या कुछ और उपयोग करके बेहतर हैं। मई 2010 में बग की सूचना मिली है, मैं उम्मीद नहीं करता कि निकट भविष्य में (और आपके पास अभी भी पुराने संस्करण उपकरणों पर एक दोषपूर्ण संस्करण है)

पूरी तरह से झूठी, टिप्पणियां देखें।

+2

मैंने इस बग को पढ़ा है और यह बस गलत है: बग अब मौजूद नहीं है क्योंकि 'प्लरलर्यूल' वर्ग अब हालिया एंड्रॉइड पर मौजूद नहीं है। इसके बजाय एक libary 'libcore.icu' का उपयोग किया जाता है। बग्रेपोर्ट में जुड़ा कोड बहुत पुराना है। यहां हालिया कोड देखें: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/res/Resources.java – theomega

+0

ओपीएस। इसके बारे में पता नहीं था। आप सही हे। –

+2

यद्यपि आप सही हैं: यह मदद नहीं करता है कि वे इसके लिए एक नया कोड उपयोग करते हैं, इसमें एक ही त्रुटि है (प्रश्न देखें) और पुराने संस्करणों में अभी भी पुराना कोड है। तो आपके उत्तर के लिए धन्यवाद! – theomega

2

हां, दो का उपयोग लोकेल के लिए विशिष्ट है। सिर्फ इसलिए कि आप इसे नंबर 2 देते हैं इसका मतलब यह नहीं है कि यह मात्रा = "दो" का उपयोग करेगा।

ध्यान दें कि चयन व्याकरण आवश्यकता के आधार पर किया जाता है: यह केवल भाषाओं http://developer.android.com/guide/topics/resources/string-resource.html#Plurals से नंबर 2

के लिए विशेष मामलों है कि के लिए है कि मात्रा का प्रयोग करेंगे। अंग्रेजी में शून्य के लिए एक स्ट्रिंग को अनदेखा कर दिया जाएगा, भले ही मात्रा 0 है, क्योंकि 0 व्याकरणिक रूप से 2 से भिन्न नहीं है, या 1 ("शून्य पुस्तकें", "एक पुस्तक", "दो पुस्तकें", और इसी तरह के अलावा कोई अन्य नंबर नहीं है) पर)। इस तथ्य से गुमराह मत बनो कि, दो आवाज़ें जैसे कि यह केवल मात्रा 2 पर लागू हो सकती है: एक भाषा की आवश्यकता हो सकती है कि 2, 12, 102 (और इसी तरह) सभी को एक दूसरे की तरह माना जाता है लेकिन दूसरे के साथ अलग-अलग मात्रा। अपने अनुवादक पर निर्भर रहें कि उनकी भाषा वास्तव में किस भेद पर जोर देती है।