Налаштування плюралізації рядків у мобільних додатках
"1 товар", "2 товари", "5 товарів" — в англійській дві варіанти: one/other. В українській, як і в російській та польській, шість: zero/one/two/few/many/other. Жорстко написаний код if (count == 1) "товар" else "товарів" — гарантований баг при локалізації на будь-яку мову з нетривіальною плюралізацією.
Правильний механізм на кожній платформі
Android. Файл res/values-uk/plurals.xml:
<plurals name="items_count">
<item quantity="one">%d товар</item>
<item quantity="few">%d товари</item>
<item quantity="many">%d товарів</item>
<item quantity="other">%d товари</item>
</plurals>
Виклик: resources.getQuantityString(R.plurals.items_count, count, count). Перший count — для вибору форми, другий count — підстановка в %d. Часта помилка: передати лише один аргумент — тоді число в рядок не підставляється.
iOS. Localizable.stringsdict замість Localizable.strings для плюральних форм. Структура — plist з ключем, вкладеним NSStringLocalizedFormatKey та правилами за CLDR. String(format: NSLocalizedString("items_count", comment: ""), count) — автоматично обере потрібну форму. Для Swift-пакетів з String Catalog (Xcode 15+) — візуальний редактор plural forms прямо в IDE.
Flutter. Пакет intl, Intl.plural():
Intl.plural(
count,
zero: 'немає товарів',
one: '$count товар',
few: '$count товари',
many: '$count товарів',
other: '$count товари',
locale: 'uk',
);
Або через ARB-файли з flutter gen-l10n — тоді плюралізація описується в app_uk.arb через ICU синтаксис: {count, plural, one{# товар} few{# товари} many{# товарів} other{# товари}}. Генератор створює типобезопасні методи.
React Native. i18next + i18next-icu плагін для ICU-синтаксису. Або react-i18next з Intl.PluralRules нативно — доступно на RN 0.70+. Вручну через new Intl.PluralRules('uk').select(count) — повертає рядок 'one'/'few'/'many'/'other', по якій обираємо форму з об'єкта перекладів.
Нестандартні випадки
Арабська — шість форм включаючи dual (2 товари — окрема форма). Китайська та японська — одна форма, але лічильні суфікси залежать від іменника (三本の本 — три книги). Це вже не плюралізація, а classifier-система, яку Intl.plural не покриває.
Дробові числа: 1,5 години — яка форма? За правилами CLDR для української дробові числа беруть форму other. Intl.PluralRules це знає, ручна логіка через % 10 — ні.
Термін: від 4 годин (аудит + заміна хардкода) до 2 днів (якщо плюралізація в кількох мовах та кастомні компоненти). Вартість розраховується за результатами аудиту.







