我开始遇到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.
文字???
答案 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)
答案 3 :(得分:0)
不要被这样的事实误导,比如,两个声音只能适用于数量2:一种语言可能要求2,12,102(等等)都被视为一个另一个但与其他数量不同。依靠你的翻译来了解他们的语言实际上坚持的区别。
您只需要在此处指定one
和other
(&#34;歌曲&#34; vs.&#34;歌曲&#34;)。