Plurals ресурсы. Множественное число – Devcolibri – Android для начинающих

Plurals ресурсы. Множественное число

Plurals ресурсы. Множественное число.

В Android системе есть ресурс <plurals>. Он упрощает поддержку строк, требующих согласования с числительными. Нет необходимости обрабатывать их склонение в программном коде, когда это можно сделать прямо в ресурсах.

В процессе написания приложения TwitterApp мы столкнулись с проблемой употребления строк, требующих согласования с числительными. Типичный её пример: 21 читатель, но 4 читателя. Т.е. необходимо употреблять правильную форму слова в зависимости от числа, в контексте которого слово употребляется. Интересно, задумывались ли о таких мелочах разработчики официального Twitter-клиента?

Twitter скриншот

Отличное решение, Twitter!

Обратимся к официальной документации.

Давайте рассмотрим решение проблемы на примере нашего приложения. До этого в файле strings.xml лежала строка следующего вида:

<resources>
    <item name="following_hint">Читатели</item>
</resources>

В Android системе есть ресурс типа <plurals> (англ. множественный), с помощью которого можно вывести строку в зависимости от входного параметра (числа).

В документации описаны возможные значения:

  • zero — значения для нуля , отсутствия чего-либо;

  • one — строка для чисел, которые являются единицей или заканчиваются на единицу; В русскому языке под этот пункт попадают числа 21, 31, 41 и т.д.

  • two — для чисел, заканчивающихся на двойку или только для двойки в зависимости от языка;

  • few — несколько. Числа, которые попадают под этот пункт, зависят от конкретного языка и перечислены в документации. Например, для русского языка это относится к числам, оканчивающимся на 2, 3 и 4 (несмотря на наличие правила two);

  • many — множественное число. Также может меняться в зависимости от языка. Для русского языка — от пятёрки и выше (но учитывая, что числа типа 21,31,41 попадают под значение one);

  • other — остальные варианты.

В нашем случае необходимо изменить код в ресурсах на следующий.

<resources>
    <plurals name="following_hint">
        <item quantity="one">%d Читатель</item>
        <item quantity="few">%d Читателя</item>
        <item quantity="many">%d Читателей</item>
    </plurals>
</resources>

Вот и всё. %d означает, что мы будем передавать число, как параметр.

В Activity для получения необходимой строки используется метод getQuantityString(int resId, int quantity, Object… formatArgs), принимающий в качестве параметров ссылку на сам ресурс, а также дважды количество подписчиков: первое используется для выбора подходящей строки, а второе для вставки на место %d. Если ваша строка не использует форматирование, то и передавать третий параметр необходимости нет.

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.user_info_activity_layout);

	for (int i = 0; i < 12; i++) {
		String followersCount = getResources().getQuantityString(R.plurals.following_count, i, i);
		Log.d("PluralsTest", followersCount);
	}
}

В результате получаем:

com.dev.andrtwitter D/PluralsTest: 0 Читателей
com.dev.andrtwitter D/PluralsTest: 1 Читатель
com.dev.andrtwitter D/PluralsTest: 2 Читателя
com.dev.andrtwitter D/PluralsTest: 3 Читателя
com.dev.andrtwitter D/PluralsTest: 4 Читателя
com.dev.andrtwitter D/PluralsTest: 5 Читателей
com.dev.andrtwitter D/PluralsTest: 6 Читателей
com.dev.andrtwitter D/PluralsTest: 7 Читателей
com.dev.andrtwitter D/PluralsTest: 8 Читателей
com.dev.andrtwitter D/PluralsTest: 9 Читателей
com.dev.andrtwitter D/PluralsTest: 10 Читателей
com.dev.andrtwitter D/PluralsTest: 11 Читателей

Вот такое элегантное решение предоставляет нам Android SDK.

ПОХОЖИЕ ПУБЛИКАЦИИ

    None Found

10797
05/11/2017

4 комментариев к статье "Plurals ресурсы. Множественное число"

Добавить комментарий

Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.

Я ознакомлен(а)