Подтвердить что ты не робот

Множественное определение игнорируется для нулевого количества

Я использую 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"

Я предполагаю, что это связано с тем, что docs указывает When the language requires special treatment of the number 0 (as in Arabic). на zero количество. Есть ли способ заставить мое определение?

4b9b3361

Ответ 1

Согласно документации:

Выбор используемой строки производится исключительно на основе грамматическая необходимость. На английском языке строка для нуля будет проигнорирована даже если количество равно 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);

Ответ 2

Плюсы - это форма Юникода. все множественное значение здесь. На английском языке множественное число для нуля равно 2, 3,4, поэтому вы должны, если еще это значение использовать другие строки для этого.

Ответ 3

В Котлине (спасибо Далмасу):

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