Реализация локализации мобильного приложения на русский язык
Добавить русский язык в уже готовое приложение — задача, которая выглядит проще, чем есть на самом деле. Технические строки в strings.xml или Localizable.strings переводятся за день. Проблемы начинаются там, где строки — не просто строки: числительные («1 уведомление», «3 уведомления», «5 уведомлений»), падежи при подстановке имён, длинные слова которые ломают UI, или RTL-нейтральный layout который перестаёт работать.
Plurals и падежи — главная сложность русского
Русский язык имеет шесть форм множественного числа для существительных в зависимости от числа. Android поддерживает это нативно через <plurals> в strings.xml:
<plurals name="notification_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.notification_count, count, count).
На iOS — String(localized:) с .init(format:) и NSLocalizedString поддерживают CLDR plural rules через .stringsdict. Формат .stringsdict XML-тяжелее, но работает корректно с NSLocalizedString("notification_count", comment: "") + stringsdict файл.
В React Native: i18n-js или react-i18next с returnObjects: true для plural forms. Без явной поддержки plurals библиотекой — придётся писать helper вручную.
Подстановка с согласованием («Привет, %@» → «Привет, Иван») — здесь достаточно именованных плейсхолдеров. Проблема возникает когда нужно согласование: «заказ Ивана» vs «заказ Марины» — окончание разное. Для таких случаев либо переформулируем строку без согласования, либо добавляем отдельные ключи для разных форм.
Длина строк и UI
Русские слова в среднем длиннее английских эквивалентов на 20–40%. «Settings» → «Настройки» — нормально. «Notifications» → «Уведомления» — длиннее. «Privacy Policy» → «Политика конфиденциальности» — почти вдвое. Фиксированная ширина кнопок, truncation вместо wrap, иконки с hardcoded отступами — всё это ломается при локализации.
Проверяем UI в псевдолокализации на этапе разработки: аccoutability → [аccoutàbïlïтý~~] — выявляет проблемные места до перевода. Xcode поддерживает Pseudo-localization в схеме (Application Language: Double-Length Pseudolanguage).
Клавиатура и ввод
Для полей ввода на русском: keyboardType и returnKeyType не меняются, но autocapitalizationType стоит проверить — русская автокапитализация иногда ведёт себя иначе, чем ожидается. spellCheckingType с русским словарём доступен на iOS и Android системно, включается автоматически при выборе языка.
Процесс работы
Аудит существующих строк → экспорт в XLIFF (iOS) или Android String Resources → перевод + проверка plurals → импорт → тестирование на устройстве с русской локалью → UI-проверка переполнений. Отдельно проверяем форматы дат и чисел: DateFormatter и NumberFormatter с Locale(identifier: "ru_RU") дают «26 марта 2026» и «1 234,56» вместо «03/26/2026» и «1,234.56».
Сроки: два-четыре рабочих дня для приложения с 200–500 строками, включая тестирование UI.







