Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Plurals not working as intended in android

Tags:

string

android

I am using Plural strings provided by android-sdk. I have used following code to create a plural string:

 <plurals name="valuestr">
        <item quantity="zero">Choose a value.</item>
        <item quantity="one">%d unit.</item>
        <item quantity="other">%d units.</item>
    </plurals>

Java Code:

textView.setText(getResources().getQuantityString(R.plurals.valuestr,0,0));

When i am setting any value other than '0', this is working fine but when i am setting '0' it is showing '0 unit.'.

Please help!

Update

While searching more on the internet i came across a workaround which uses java.text.MessageFormat class:

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

Then, from the code all you have to do is the following:

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

You can read more about the format strings in the javadocs for MessageFormat

like image 256
mudit Avatar asked Apr 05 '13 09:04

mudit


1 Answers

A post was recently made on G+ about this. In short, it is because this will not pick the closest match by Integer ( 0 = zero), but because it will look for the best grammatical pick.

In your example, you use units. The correct usage would be; 0 units 1 unit 2 units

Making, zero equal to pretty much any other quantity above 1

Read the full story here; https://plus.google.com/116539451797396019960/posts/VYcxa1jUGNo

like image 89
Stefan de Bruijn Avatar answered Oct 15 '22 00:10

Stefan de Bruijn