2011-12-12 12 views
6

Android permite a los traductores definir Plurals. El siguiente ejemplo funciona para mí con la configuración regional 'es':Cantidad "dos" no funciona en Android Strings-Resources Plural

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

Pero la adición de un valor especial para two no funciona, todavía se toma la versión other. ¿El uso de two depende de la configuración regional? Entonces, ¿solo Android toma la versión two si la configuración regional especifica explícitamente que debe haber una versión two?

La pregunta Android plurals treatment of “zero” de SO detecta el mismo error al utilizar zero en inglés que tampoco es compatible. No hay soluciones en esta pregunta, excepto para evitar los plurales de Android que quiero evitar.

+0

Sí, el uso de dos es específico de la configuración regional. Sólo porque le dé el número 2 no significa que usará cantidad = "dos". Solo usará esa cantidad para idiomas que tengan casos especiales para el número 2 – ByteMe

+0

posible duplicado de [tratamiento de plurals Android de "cero"] (http://stackoverflow.com/questions/5651902/android-plurals-treatment-of- cero) –

Respuesta

9

Android está utilizando el sistema de plurales CLDR, y así no es como funciona (así que no espere que esto cambie).

El sistema se describe aquí:

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

En resumen, es importante entender que "uno" no significa el número 1. En lugar de estas palabras clave son las categorías, y el número específico n que pertenecen a cada categoría se definen por las reglas de la base de datos CLDR:

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

Si bien no parece haber ningún lenguaje que utiliza "cero" para otra cosa que no sea 0, el re son idiomas que asignan 0 a "uno". Ciertamente, hay muchos casos en los que "dos" contiene otros números además de 2.

Si Android le permite hacer lo que desea, sus aplicaciones no podrían traducirse correctamente a ningún número de idiomas con reglas de plural más complejas .

3

Eso es old bug. Solo faltan unas pocas cláusulas if en el relevant code section of the PluralRules class.

Como dice la respuesta en su pregunta vinculada, es mejor usar MessageFormat o alguna otra cosa. El error se ha informado en mayo de 2010, no esperaba que se solucionara en un futuro próximo (y todavía tiene una versión defectuosa en dispositivos de versiones anteriores en este caso).

Completamente falso, vea los comentarios.

+2

Leí este error y simplemente está mal: el error ya no existe porque la clase 'PluralRules' ya no existe en los androides recientes. En su lugar, se utiliza una libary 'libcore.icu'. El código vinculado en el informe de error es muy antiguo. Vea el código más reciente aquí: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/res/Resources.java – theomega

+0

Ops. No estaba enterado de eso. Tienes razón. –

+2

Aunque tiene razón: no ayuda que utilicen un nuevo código para esto, tiene los mismos errores (vea la pregunta) y las versiones antiguas aún tienen el código anterior. ¡Así que gracias por tu respuesta! – theomega

2

Sí, el uso de dos es específico de la configuración regional. Sólo porque le dé el número 2 no significa que usará cantidad = "dos". Sólo utilizará esa cantidad de idiomas que tienen casos especiales para el número 2

De http://developer.android.com/guide/topics/resources/string-resource.html#Plurals:

Tenga en cuenta que la selección se realiza en base a la necesidad gramatical. Una cadena para cero en inglés será ignorada incluso si la cantidad es 0, porque 0 no es gramaticalmente diferente de 2, o cualquier otro número excepto 1 ("cero libros", "un libro", "dos libros", y así en). No se deje engañar tampoco por el hecho de que, digamos, dos sonidos como que solo pueden aplicarse a la cantidad 2: un lenguaje puede requerir que 2, 12, 102 (y así sucesivamente) se traten unos a otros pero de manera diferente a otros cantidades. Confíe en su traductor para saber qué distinciones realmente insiste su lenguaje.