2015-12-21 7 views
11

एंड्रॉइड स्ट्रिंग्स में, आप here वर्णित स्ट्रिंग को दी गई वास्तविक संख्या के आधार पर अनुवादों को संभालने के लिए बहुवचन परिभाषित कर सकते हैं। स्ट्रिंग्स कई भाषाओं में sprintf के समान एकाधिक स्थितित्मक पैरामीटर निर्दिष्ट करने की अनुमति भी देती है।एकाधिक पैरामीटर्स के साथ एंड्रॉइड बहुवचन स्ट्रिंग्स

<resources> 
    <string name="remaining">%1$d hours and %2$d minutes remaining.</string> 
</resources> 

यह दो नंबर शामिल हैं, मैं कैसे एंड्रॉयड में एक बहुवचन को यह परिणत हो गया:

हालांकि, निम्न स्ट्रिंग पर विचार? सभी उदाहरण हमेशा एक ही पैरामीटर के साथ काम करते हैं। क्या यह भी संभव है?

उत्तर

3

getQuantityString में एक ओवरलोडेड संस्करण है जो एक स्ट्रिंग आईडी, मात्रा और varargs ऑब्जेक्ट लेता है जिसका उपयोग आप अपनी स्ट्रिंग को प्रारूपित करने के लिए कर सकते हैं। हालांकि बहुवचन का उपयोग करने के लिए संभव लगता है, यह समय के लिए मेरे लिए अजीब लगता है। आप DateUtil में निहित सहायक विधियों का उपयोग कर सकते हैं, जो पहले से ही स्थानीयकृत हैं और एकवचन/बहुवचन का ख्याल रखते हैं और फिर इन सहायक तरीकों के परिणामों के साथ अपनी स्ट्रिंग को पूरा करते हैं। जैसे getRelativeTimeSpanString

<plurals name="numberOfEmails"> 
    <item quantity="one">%d email</item> 
    <item quantity="other">%d emails</item> 
</plurals> 

<plurals name="numberOfMessages"> 
    <item quantity="one">%d message</item> 
    <item quantity="other">%d messages</item> 
</plurals> 

और फिर आप getQuantityString उपयोग कर सकते हैं दो टुकड़े निकालते हैं और एक में गठबंधन करने के लिए।

+2

getRelativeTimeSpanString हाथ में मेरी समस्या के लिए एक अच्छा विकल्प प्रतीत होता है लेकिन मेरे प्रारंभिक प्रश्न को हल नहीं करेगा। एकाधिक संख्याओं वाला टेक्स्ट रखना दुर्लभ नहीं है ("आपके पास 5 मेल और 3 संदेश हैं", "5 डॉलर और 83 सेंट शेष हैं।")। मैं नहीं देखता कि मैं आपके द्वारा सुझाए गए GetQuantityString संस्करण के लिए XML निर्दिष्ट कैसे करूं। –

+0

मैंने पोस्ट किया पहला लिंक देखें। दस्तावेज कहता है कि स्ट्रिंग का चयन करने के लिए मात्रा का उपयोग किया जाएगा और इसे प्रारूपित करने के लिए तीसरे तर्क – Blackbelt

+1

क्षमा करें, मुझे यह नहीं मिला।क्या आप अपने उत्तर को एक उदाहरण के साथ विस्तारित कर सकते हैं) एक्सएमएल "आपके पास 5 मेल और 3 संदेश" के लिए आवश्यक 4 बहुवचन रूपों के लिए एक स्ट्रिंग सेट अप करने के लिए और बी) मेल मात्रा और संदेश इनपुट मात्रा के रूप में प्राप्त करने के लिए कॉल प्राप्त करने के लिए कॉल? –

-6

वैसे यहां एक ऐसा तरीका है जो काम कर सकता है। गतिविधि में फिर

<resources> 
    <plurals name="remaining"> 
     <item quantity="one">%1$d hours and</item> 
     <item quantity="other">%2$d minutes remaining.</item> 
    </plurals> 
</resources> 

: एक बहुवचन टैग इस तरह के तहत मूल्यों/strings.xml बनाएं

Resources res = getResources(); 
String myString = res.getQuantityString(R.plurals.remaining, count, count); 

मुझे आशा है कि यह मदद करता है !!!

+2

यह सवाल का जवाब नहीं है .. – user2878850

+4

सुझाया गया समाधान बिल्कुल काम नहीं करेगा। QuantityString (...) प्राप्त करने के लिए प्रत्येक कॉल के लिए केवल एक ग्रंथ का चयन किया जाएगा। –

5

पिछला उत्तर स्ट्रिंग concatenation का उपयोग करता है जो i18n बिंदु दृश्य से गलत है। मूल स्ट्रिंग के लिए "% 1 $ d घंटे और% 2 $ d मिनट शेष।" स्ट्रिंग कॉन्सटेनेशन का उपयोग करके "शेष" के अंत तक अनुवाद को मजबूर किया जाएगा जो कुछ भाषाओं के लिए उचित नहीं हो सकता है।

मेरे समाधान होगा:

<resources> 
    <string name="remaining">Time remaining: Hours:%1$d Minutes:%2$d.</string> 
</resources> 

या शायद शीर्षक के रूप में "शेष समय" के साथ।

यह समाधान इस तरह के "पुस्तकें: 1" के रूप में http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling

यह अक्सर मात्रा तटस्थ योगों का उपयोग करके मात्रा तार से बचने के लिए संभव है में उल्लेख किया है

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