109 votes

Traitement du pluriel Android sur "zéro"

Si vous avez la ressource plurielle suivante dans mon fichier strings.xml:

    <plurals name="item_shop">
        <item quantity="zero">No item</item>
        <item quantity="one">One item</item>
        <item quantity="other">%d items</item>
   </plurals>   
 

Je montre le résultat à l'utilisateur en utilisant:

 textView.setText(getQuantityString(R.plurals.item_shop, quantity, quantity));
 

Cela fonctionne bien avec 1 et au-dessus, mais si la quantité est 0 alors je vois "0 articles". La valeur "zéro" est-elle prise en charge uniquement en langue arabe, comme semble l'indiquer la documentation? Ou est-ce que je manque quelque chose?

91voto

Elias Mårtenson Points 1751

Le Android méthode de l'internationalisation est assez limité. J'ai eu beaucoup plus de succès à l'aide de la norme java.text.MessageFormat.

Fondamentalement, tout ce que vous avez à faire est d'utiliser la norme de chaîne de ressource de ce genre:

<resources>
    <string name="item_shop">{0,choice,0#No items|1#One item|1&lt;{0} items}</string>
</resources>

Puis, à partir du code tout ce que vous avez à faire est la suivante:

String fmt = resources.getText(R.string.item_shop);
textView.setText(MessageFormat.format(fmt, amount));

Vous pouvez lire plus sur les chaînes de format dans la javadoc MessageFormat

56voto

ByteMe Points 737

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

Notez que la sélection est basée sur la grammaire de la nécessité. Une chaîne de zéro en anglais seront ignorés, même si la quantité est 0, car 0 n'est pas grammaticalement différent de 2, ou tout autre nombre, sauf 1 ("zéro" livres", "un livre", "deux livres", et ainsi de suite). Ne pas être induit en erreur, soit par le fait que, disons, les deux sons comme il ne peut s'appliquer qu'à la quantité 2: une langue peut exiger que 2, 12, 102 (et ainsi de suite) sont tous traités comme l'un de l'autre, mais différemment pour d'autres quantités. Compter sur votre traducteur pour savoir ce que les distinctions de leur langue en fait il insiste sur les.

En conclusion, "zéro" n'est utilisé que pour certaines langues (en va de même pour les 'deux' 'quelques', etc.) parce que les autres langues n'ont pas de spécial conjugaison et donc le "zéro" de terrain est considéré comme inutile

13voto

miracle2k Points 3285

Android est à l'aide de la CLDR pluriels système, et c'est juste pas comment ça marche (donc ne vous attendez pas à changer).

Le système est décrit ici:

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

En bref, il est important de comprendre que "l'on" ne signifie pas le numéro 1. Au lieu de ces mots-clés sont des catégories, et le nombre n qui appartiennent à chaque catégorie sont définis par les règles dans la CLDR de la base de données:

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

S'il semble y avoir pas de langage qui utilise des "zéro" pour autre chose que 0, il y a des langues qui assigne à 0 à la "une". Il ya certainement beaucoup de cas où les "deux" contient d'autres numéros que seulement 2.

Si Android où pour vous permettre de faire ce que vous souhaitiez, vos applications ne pouvait pas être correctement traduit dans un grand nombre de langues plus complexes pluriel règles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X