2012-10-05 13 views
5

Ho riscontrato un problema con le stringhe di quantità (plurali).Come far funzionare correttamente le stringhe di quantità russe?

The manual says, posso fornire stringhe di quantità specifiche per ogni localizzazione e vi sono diversi casi comuni: "zero", "uno", "due", "pochi", "molti" e "altro". Non so se siano stati coperti tutti i casi possibili per tutte le lingue del mondo; in ogni caso, è più che sufficiente per il russo che sto cercando di fare una localizzazione per.

In russo, i numeri da 2 a 4 devono essere trattati come "pochi" (la regola è in realtà più complessa ma ho bisogno solo di numeri inferiori a dieci).

Tuttavia, quando richiedo una stringa di quantità per 2, il sistema accetta la stringa "altro". Non ci vuole né "two" string né "few" uno (li ho forniti nelle mie risorse). Se ho rimosso l ' "altro" stringa, ottengo l'eccezione:

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

Ho provato questo sia su emulatore (Android 2.1) e su un vero e proprio dispositivo (Android 2.3), il comportamento è lo stesso di sbagliato in entrambi i casi . Ovviamente, c'è un errore da qualche parte: il sistema non riconosce le quantità specifiche della locale per la mia lingua. Potrebbe essere che Android abbia qualche bug qui?

risposta

1

Grazie a chi ha Brigham ha indicato lo issue in cui viene spiegato il problema; questa spiegazione ha inizialmente sollevato più domande, ma ora sembrano risolte. In effetti, le stringhe di quantità non funzionano correttamente (almeno prima dell'API 11, che è Android 3.x), quindi devi usare un'alternativa.

La soluzione per API precedenti alla versione 11 è menzionata nello comment 15 che contiene un collegamento allo project for alternative handling of quantity strings. Quel progetto è un programma che fa semplicemente ciò che il sistema avrebbe dovuto fare. Può essere facilmente convertito in una libreria, quindi basta aggiungerlo al progetto, importare la classe e andare.

3

Credo che questo sia attualmente rotto in Android.

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

In particolare, il seguente codice nel PluralRules.java dimostra che la maggior parte delle lingue usano solo i one o other stringhe, ma Repubblica useranno la stringa 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. Definire le corde plurali in valori-ru/strings.xml non in valori/strings.xml
  2. impostare la lingua del telefono cellulare come Russia (da Impostazioni-> Lingua & input-> Lingua -> selezionare russo)

Se la vostra lingua non è il russo ci vorrà stringhe plurali dai valori/strings.xml

Problemi correlati