Отметим: когда языков становится больше двух, прямолинейная локализация перестаёт работать: пропущенные строки, сломанные plurals, неправильное форматирование дат. Наша команда — 7+ лет опыта в мобильной разработке и более 30 проектов с мультиязычностью — знает, как спроектировать i18n-инфраструктуру, которая масштабируется без боли. Грамотная архитектура окупается на третьем языке: каждый следующий язык требует на 60% меньше усилий, а бюджет на переводы сокращается на 40–50%. Получите консультацию — мы оценим ваш проект.
Архитектура i18n: от простого к правильному
iOS
Стандарт — Localizable.strings + .stringsdict для plurals + XLIFF для обмена с переводчиками. String(localized:) API (Swift 5.5+) — предпочтительный способ, потому что поддерживает interpolation, plural rules и comment для переводчика в одном вызове:
let message = String(localized: "notifications.count \(count)", comment: "Number of unread notifications in tab bar") Для больших проектов с 1000+ строками — String Catalog (.xcstrings, Xcode 15+). Он заменяет разрозненные .strings файлы единым JSON-файлом с встроенным diff и предупреждениями о непереведённых строках. Apple рекомендует String Catalog для новых проектов.
Android
strings.xml в res/values/ (базовый) + res/values-{lang}/ для каждого языка. plurals в том же файле. Для параметрических строк — именованные аргументы:
<string name="welcome_user">Добро пожаловать, %1$s!</string> %1$s вместо %s — обязательно при множественных аргументах, так как порядок слов в разных языках разный.
React Native
react-i18next — де-факто стандарт. Namespace-ы для разбивки по модулям, lazy loading для экономии трафика. Plural forms через i18next-icu с ICU Message Format — корректно обрабатывает русские, украинские, польские правила.
Flutter
flutter_localizations + intl пакет. ARB-файлы — стандарт. flutter gen-l10n генерирует type-safe Dart-классы, исключая опечатки:
Text(AppLocalizations.of(context)!.notificationCount(count)) Plural forms описываются в ARB через ICU syntax.
Сравнение подходов к i18n
| Платформа | Формат строк | Plural forms | Интеграция с TMS |
|---|---|---|---|
| iOS | .strings / .xcstrings | .stringsdict | XLIFF / API |
| Android | strings.xml | XLIFF / API | |
| React Native | .json / .po | i18next-icu | API |
| Flutter | ARB | ICU syntax | API |
Все платформы поддерживают автоматическую синхронизацию через TMS, что снижает ручной труд на 90%.
Динамическая смена языка
Системная локаль — не всегда то, что нужно. iOS поддерживает выбор языка через CFBundleLocalizations + хранение в UserDefaults. Android — AppCompatDelegate.setApplicationLocales() (AndroidX) или ручная замена Resources.updateConfiguration(). При смене языка пересоздавайте все форматтеры с новой locale.
Plural forms: сводная таблица
| Язык | Количество форм | Сложность |
|---|---|---|
| Английский | 2 (one/other) | Низкая |
| Украинский | 3 (one/few/many) | Средняя |
| Русский | 3 (one/few/many) | Средняя |
| Польский | 4 (one/few/many/other) | Высокая |
| Арабский | 6 форм | Очень высокая |
| Китайский | 1 форма | Нет |
ICU Message Format обрабатывает все эти варианты автоматически. Ручное ветвление — антипаттерн.
Почему автоматизированное управление переводами лучше ручного?
Ручной экспорт/импорт XLIFF — основной источник ошибок. Автоматизированный пайплайн через TMS (Phrase, Lokalise, Crowdin) синхронизирует строки между кодом и переводчиками без файлового обмена. Экономия до 60% времени на каждом новом языке.
Как правильно организовать plural forms для сложных языков?
Используйте готовые решения фреймворка: iOS .stringsdict, Android plurals, Flutter ICU в ARB, React Native i18next-icu. Они берут на себя корректные правила для любых языков. Не пишите собственные switch — это сломается на польском (4 формы) или арабском (6).
CI/CD и качество переводов
Интегрируем проверки в пайплайн:
- Lint для строк: twine (iOS), android-strings-lint — находят пропущенные переводы, неиспользуемые ключи, неэкранированные спецсимволы
- Screenshot тесты: fastlane snapshot (iOS) или screengrab (Android) — автоматически делают скриншоты на всех языках, регрессию UI заметно сразу
- Translation Management System: Phrase, Lokalise, Crowdin — синхронизируют строки между кодом и командой переводчиков
Что вы получите в результате
- Документированная архитектура i18n под вашу платформу
- Готовая интеграция с TMS и автоматическая синхронизация
- Настроенный CI/CD пайплайн с линтерами и скриншот-тестами
- Обучение команды добавлению новых языков и работе с переводами
Процесс работы
- Аудит текущей архитектуры и выявление болевых точек (2–3 часа)
- Проектирование i18n-инфраструктуры под платформу (iOS, Android, Flutter, React Native)
- Вынос всех строк в ресурсы с поддержкой plurals и интерполяции (1–2 дня на первый язык)
- Интеграция TMS и настройка автоматической синхронизации (1 день)
- Настройка CI/CD линтеров и скриншот-тестов для контроля переводов (1 день)
- Обучение команды и документация (0.5 дня)
Сроки
Ориентировочные сроки: от 3 до 10 рабочих дней в зависимости от платформы, количества языков и готовой инфраструктуры. Стоимость рассчитывается индивидуально. Получите консультацию — мы оценим ваш проект.







