Количество «два» не работает в Android Strings-Resources Plural - PullRequest
9 голосов
/ 12 декабря 2011

Android позволяет переводчикам определять множественное число .Следующий пример работает для меня с языком 'en':

<plurals name="numberOfSongsAvailable">
    <item quantity="one">One song found.</item>
    <item quantity="other">%d songs found.</item>
</plurals>

Но добавление специального значения для two не работает, но версия other по-прежнему используется.Зависит ли использование two от локали?Так что Android принимает версию two только в том случае, если языковой стандарт явно указывает, что должна быть версия two?

Вопрос SO Множественное обращение Android к «нулю» определяет то же самоеошибка при использовании zero на английском языке, что также не поддерживается.В этом вопросе нет решений, кроме как избежать множественного числа Android, которого я хочу избежать.

Ответы [ 3 ]

10 голосов
/ 03 марта 2012

Android использует систему множественного числа CLDR, и это просто не то, как она работает (поэтому не ожидайте, что это изменится).

Система описана здесь:

http://cldr.unicode.org/index/cldr-spec/plural-rules

Короче говоря, важно понимать, что «один» не означает число 1. Вместо этого эти ключевые слова являются категориями, а конкретные числа n, принадлежащие каждой категории, определяются правилами в базе данных CLDR:

http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html

Хотя, как представляется, нет языка, который использует «ноль» для чего-либо, кроме 0, есть языки, которые присваивают 0 «одному».Конечно, существует множество случаев, когда «два» содержит другие числа, а не только 2.

Если Android, где можно позволить вам делать то, что вы хотели, ваши приложения не могут быть должным образом переведены на любое количество языков с более сложнымправила множественного числа.

3 голосов
/ 12 декабря 2011

Это старая ошибка .В разделе соответствующего кода класса PluralRules пропущено лишь несколько if-предложений.

Как указано в ответе на связанный вопрос, вам лучше использовать MessageFormat или что-то еще.Об ошибке было сообщено в мае 2010 года, и я не ожидал, что исправление будет исправлено в ближайшем будущем (и в этом случае у вас по-прежнему будет неисправная версия на старых устройствах) .

Совершенно неверно, см. Комментарии.

2 голосов
/ 04 апреля 2012

Да, использование двух зависит от региона. То, что вы даете ему число 2, не означает, что он будет использовать количество = «два». Это количество будет использоваться только для языков с особыми случаями для числа 2

.

С http://developer.android.com/guide/topics/resources/string-resource.html#Plurals:

Обратите внимание, что выбор сделан на основе грамматической необходимости. Строка для нуля на английском языке будет игнорироваться, даже если количество равно 0, потому что 0 не отличается грамматически от 2 или любого другого числа, кроме 1 («ноль книг», «одна книга», «две книги» и т. Д.). на). Не вводите в заблуждение и тот факт, что, скажем, два звука могут относиться только к количеству 2: язык может требовать, чтобы 2, 12, 102 (и т. Д.) Рассматривались как один другой, но по-другому величины. Доверьтесь своему переводчику, чтобы узнать, на каких отличиях действительно стоит их язык.

...