После проведения дальнейших исследований выясняется, что не существует хорошего решения для этого .
. Как видно из других ответов, они всегда требуют много "ручной обработки" для него.не требующий никакого другого рабочего процесса, чем создание отдельных строковых ресурсов.
Похоже, что общим предложением является округление / обработка значений с плавающей запятой вручную (например, проверка соответствия значения с плавающей запятой 1,0), а затем использование соответствующих значений Int для вызова множественного числа.
Но если не использовать множественное число, то это связано с проблемой других языков (например, я понятия не имею, если 1,5 звезды также будут множественным числом на другом языке, как на английском), и, таким образом, эти варианты округления могутне применяется повсеместно.
Таким образом, ответ таков: кажется, что не существует идеального решения (имеется в виду, что оно решается автоматически системой Android).
Поэтому я на самом деле просто выбираю исключенияи использовать разные строки там.Таким образом, способ (псевдокод) в настоящее время выглядит как
// optionally wrap different languages around
// if language == English
when (amountStars) {
is 1.0 -> getString(R.string.stars_singular, 1)
... ->
else -> getString(R.string.stars_plural, amountStars)
}
// if language == Chinese ...
, где дополнительные случаи должны быть «жестко закодированы».Например, вам нужно решить, означает ли 0
" 0 звезда s " (множественное число) или
" без звезды "(единственная строка)
Но, похоже, нет реального преимущества использования множественного числа по сравнению с отдельными строковыми ресурсами с общими заполнителями. С другой стороны, это (наконец-то для меня) дает большегибкость для вариантов форматирования.Например, можно создать текст типа «1 звезда с половиной», где он снова станет единичным (даже если численно мы напишем 1,5 звезды).