零数量忽略多个定义

时间:2013-06-23 13:39:38

标签: android android-xml android-resources plural

我使用plurals为Android应用程序编译数量字符串。我完全按照教程中的内容进行操作:

res.getQuantityString(
    R.plurals.number_of_comments, commentsCount, commentsCount);

以下是复数的定义:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals name="number_of_comments">
        <item quantity="zero">No comments</item>
        <item quantity="one">One comment</item>
        <item quantity="other">%d comments</item>
    </plurals>
</resources>

有趣的是,输出字符串与我所定义的一样奇怪:

commentsCount = 0 => "0 comments"  
commentsCount = 1 => "One comment"  
commentsCount = 2 => "2 comments"

我想这是因为文档说明了When the language requires special treatment of the number 0 (as in Arabic).数量的zero。有没有办法强迫我的定义?

3 个答案:

答案 0 :(得分:53)

根据the documentation

  

选择使用哪个字符串完全基于   语法上的必然性。在英语中,将忽略零字符串   即使数量为0,因为0在语法上不同   从2,或除1之外的任何其他数字(“零书”,“一本书”,“两本   书籍“,等等。”

如果您仍想将自定义字符串用作零,则可以在数量为零时加载其他字符串:

if (commentsCount == 0)
    str = res.getString(R.string.number_of_comments_zero);
else
    str = res.getQuantityString(R.plurals.number_of_comments, commentsCount, commentsCount);

答案 1 :(得分:3)

Plural是Unicode格式。所有复数值here。 在英语中,复数为零,如2,3,4,所以你必须如果这个值使用其他字符串为此。

答案 2 :(得分:1)

在科特林(感谢Dalmas):

val result = commentsCount.takeIf { it != 0 }?.let {
    resources.getQuantityString(R.plurals.number_of_comments, it, it)
} ?: resources.getString(R.string.number_of_comments_zero)