Android复数不起作用

时间:2015-03-17 11:43:38

标签: android

我开始遇到android复数,我在这个功能的可用性堆栈。我声明plurals.xml并尝试从我的代码中读取它们,但结果不正确。

复数:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals name="numbers">
        <item quantity="zero">No comments</item>
        <item quantity="one">%1$d comment.</item>
        <item quantity="two">%1$d comments.</item>
        <item quantity="few">%1$d comments.</item>
        <item quantity="many">%1$d comments.</item>
        <item quantity="other">%1$d comments.</item>
    </plurals>
    <plurals name="numberOfSongsAvailable">

        <item quantity="zero">No song found.</item>
        <item quantity="one">One song found.</item>
        <item quantity="two">Two song found.</item>
        <item quantity="other">Other songs found.</item>
    </plurals>
</resources>   

活动:

public class AndroidPlurals extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.plurals);
        ((ListView) findViewById(R.id.listView)).setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getPluralsList(10)));
        Toast.makeText(this, getClass().getSimpleName(), Toast.LENGTH_LONG).show();
    }

    private String[] getPluralsList(int k) {
        String[] array = new String[k];
        for (int i = 0; i < array.length; i++) {
            String quantityString = (String) this.getResources().getQuantityText(R.plurals.numberOfSongsAvailable, i);
            array[i] = quantityString;
            android.util.Log.i("Plurals", "i = " + i + ", quantityString = " + quantityString);
        }
        return array;
    }
}

OutPut:

I/Plurals (17689): i = 0, quantityString = Other songs found.
I/Plurals (17689): i = 1, quantityString = One song found.
I/Plurals (17689): i = 2, quantityString = Other songs found.
I/Plurals (17689): i = 3, quantityString = Other songs found.
I/Plurals (17689): i = 4, quantityString = Other songs found.
I/Plurals (17689): i = 5, quantityString = Other songs found.
I/Plurals (17689): i = 6, quantityString = Other songs found.
I/Plurals (17689): i = 7, quantityString = Other songs found.
I/Plurals (17689): i = 8, quantityString = Other songs found.
I/Plurals (17689): i = 9, quantityString = Other songs found.

为什么我没有正确 0 quantity 的结果,如 No song found. 文字???

注意:在Android 5.0 Lolipop上测试

4 个答案:

答案 0 :(得分:2)

简短的回答是,在Android上,复数是用于语法上的区别。

引自docs(我的亮点):

  

选择使用哪个字符串仅基于语法必要性在英文中,即使数量为0,也会忽略零字符串,因为0在语法上不同于2,或除1以外的任何其他数字(“零书”,“一本书”,“两本书” “等等)。相反,在韩语中只会使用其他字符串。

  

不要误导,因为two听起来只能应用于数量2:语言可能需要2,12,102(等等)都被视为彼此,但与其他数量不同。依靠你的翻译来了解他们的语言实际上坚持的区别。

此处有更多详细信息和替代方案:Android plurals treatment of "zero"

答案 1 :(得分:1)

在输入语言为英语的android设备上,0或2的情况将被处理相同。所以在俄语中(在其他人中非常可能)如果你的应用程序使用俄语并且你在英语输入的设备上使用它,你总是会从许多情况下得到零值的值。例如 2Билетоване2Билета

答案 2 :(得分:0)

  

为什么我没有找到0数量的正确结果,如找不到歌曲。文本?

因为英语只有数量one的特殊情况。 所有其他案例的数量为other

请阅读documentation

答案 3 :(得分:0)

来自developer.android.com

  不要被这样的事实误导,比如,两个声音只能适用于数量2:一种语言可能要求2,12,102(等等)都被视为一个另一个但与其他数量不同。依靠你的翻译来了解他们的语言实际上坚持的区别。

您只需要在此处指定oneother(&#34;歌曲&#34; vs.&#34;歌曲&#34;)。