2012-10-05 14 views
5

मुझे मात्रा स्ट्रिंग (बहुवचन) के साथ समस्या का सामना करना पड़ा है।रूसी मात्रा तार कैसे ठीक से काम करते हैं?

The manual says, मैं प्रत्येक स्थानीयकरण के लिए विशिष्ट मात्रात्मक स्ट्रिंग प्रदान कर सकता हूं, और कई सामान्य मामले हैं: "शून्य", "एक", "दो", "कुछ", "कई", और "अन्य"। मुझे नहीं पता कि दुनिया में सभी भाषाओं के लिए सभी संभावित मामलों को कवर किया गया था; वैसे भी, यह रूसी के लिए पर्याप्त है कि मैं एक स्थानीयकरण करने की कोशिश कर रहा हूं।

रूसी में, 2 से 4 की संख्या को "कुछ" की तरह माना जाना चाहिए (नियम वास्तव में अधिक जटिल है लेकिन मुझे केवल दस से नीचे की आवश्यकता है)।

हालांकि, जब मैं 2 के लिए मात्रा स्ट्रिंग का अनुरोध करता हूं, तो सिस्टम "अन्य" स्ट्रिंग लेता है। यह न तो "दो" स्ट्रिंग और न ही "कुछ" नहीं लेता है (मैंने उन्हें अपने संसाधनों में प्रदान किया है)।

android.content.res.Resources$NotFoundException: 
    Plural resource ID #0x7f080000 quantity=2 item=other 

मैं इस दोनों पर एमुलेटर (एंड्रॉयड 2.1) की कोशिश की और एक असली डिवाइस (Android 2.3) पर, व्यवहार दोनों ही मामलों में एक ही गलत है: यदि मैं "अन्य" स्ट्रिंग हटा दिया, मैं अपवाद । जाहिर है, कहीं गलती है- प्रणाली मेरी भाषा के लिए लोकेल-विशिष्ट मात्रा को पहचान नहीं पाती है। क्या यह हो सकता है कि एंड्रॉइड में कुछ बग है?

उत्तर

1

Brigham है जो करने के लिए धन्यवाद issue पर इंगित किया गया जहां समस्या समझाई गई है; उस स्पष्टीकरण ने पहले और अधिक प्रश्न उठाए लेकिन अब उन्हें हल किया जाना प्रतीत होता है। दरअसल, मात्रा तार ठीक से काम नहीं करते हैं (कम से कम एपीआई 11 से पहले, जो एंड्रॉइड 3.x है), इसलिए आपको एक विकल्प का उपयोग करना होगा।

संस्करण 11 से पहले एपीआई के लिए समाधान comment 15 में उल्लिखित है जिसमें project for alternative handling of quantity strings का लिंक शामिल है। यह प्रोजेक्ट एक ऐसा कार्यक्रम है जो बस करता है जो सिस्टम को करना था। इसे आसानी से लाइब्रेरी में परिवर्तित किया जा सकता है, इसलिए आप इसे अपने प्रोजेक्ट में जोड़ सकते हैं, कक्षा आयात कर सकते हैं और जा सकते हैं।

3

मेरा मानना ​​है कि यह वर्तमान में एंड्रॉइड में टूटा हुआ है।

http://code.google.com/p/android/issues/detail?id=8287

विशेष रूप से, PluralRules.java में निम्न कोड से पता चलता है कि ज्यादातर भाषाओं केवल one या other तार उपयोग करें, लेकिन चेक few स्ट्रिंग का उपयोग करेगी:

static final PluralRules ruleForLocale(Locale locale) { 
    String lang = locale.getLanguage(); 
    if ("cs".equals(lang)) { 
     if (cs == null) cs = new cs(); 
     return cs; 
    } 
    else { 
     if (en == null) en = new en(); 
     return en; 
    } 
} 

private static PluralRules cs; 
private static class cs extends PluralRules { 
    int quantityForNumber(int n) { 
     if (n == 1) { 
      return QUANTITY_ONE; 
     } 
     else if (n >= 2 && n <= 4) { 
      return QUANTITY_FEW; 
     } 
     else { 
      return QUANTITY_OTHER; 
     } 
    } 
} 

private static PluralRules en; 
private static class en extends PluralRules { 
    int quantityForNumber(int n) { 
     if (n == 1) { 
      return QUANTITY_ONE; 
     } 
     else { 
      return QUANTITY_OTHER; 
     } 
    } 
} 
0
  1. अपने बहुवचन तार में मान-आरयू/strings.xml में नहीं मूल्यों/strings.xml
  2. के रूप में रूस अपने मोबाइल डिवाइस भाषा सेट (सेटिंग> भाषा & इनपुट-> भाषा से परिभाषित करें -> रूस चयन)

अपनी भाषा रूसी नहीं है, तो यह से मूल्यों/strings.xml बहुवचन तार ले जाएगा

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