2012-10-05 9 views
5

He enfrentado un problema con las cadenas de cantidad (plurales).¿Cómo hacer que las cadenas de cantidad rusas funcionen correctamente?

The manual says, puedo proporcionar series de cantidad que son específicas para cada localización, y hay varios casos comunes: "cero", "uno", "dos", "pocos", "muchos" y "otros". No sé si se cubrieron todos los casos posibles para todos los idiomas del mundo; De todos modos, es más que suficiente para Rusia por lo que intento hacer una localización.

En ruso, los números del 2 al 4 deben tratarse como "pocos" (la regla es en realidad más compleja, pero solo necesito números por debajo de diez).

Sin embargo, cuando solicito una cadena de cantidad para 2, el sistema toma la "otra" cadena. No toma ni "dos" cuerdas ni "pocas" (las he proporcionado en mis recursos). Si me quita la "otra" cadena, consigo la excepción:

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

Probé este emulador tanto en (Android 2.1) y en un dispositivo real (Android 2.3), el comportamiento es el mismo mal en ambos casos . Obviamente, hay un error en alguna parte: el sistema no reconoce las cantidades específicas de la configuración regional para mi idioma. ¿Podría ser que Android tiene algún error aquí?

Respuesta

1

Gracias a Brigham que tiene apuntó al issue donde se explica el problema; esa explicación primero arrojó más preguntas, pero ahora parecen estar resueltas. De hecho, las cadenas de cantidad no funcionan correctamente (al menos antes de API 11, que es Android 3.x), por lo que debe usar una alternativa.

La solución para las API anteriores a la versión 11 se menciona en el comment 15 que contiene un enlace al project for alternative handling of quantity strings. Ese proyecto es un programa que simplemente hace lo que se suponía que debía hacer el sistema. Se puede convertir a una biblioteca fácilmente, por lo que solo debe agregarlo a su proyecto, importar la clase e ir.

3

Creo que esto actualmente está roto en Android.

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

En concreto, el código siguiente en PluralRules.java muestra que la mayoría de los idiomas sólo utilizan los one o other cuerdas, pero Checa utilizarán el few cadena:

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. Definir sus cadenas plurales en valores-ru/strings.xml no en los valores /strings.xml
  2. configurar el idioma de dispositivos móviles como el ruso (de setting-> Idioma & input-> Idioma -> seleccione Rusia)

Si su idioma no es el ruso que tomará cadenas plurales de los valores/strings.xml

Cuestiones relacionadas