Множественное определение игнорируется для нулевого количества
Я использую 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
количество. Есть ли способ заставить мое определение?
Ответы
Ответ 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)