Какие проблемы решает локализация мобильных игр?
Текст не влезает в кнопку на немецком? Диалог ломается на арабском? Это типичные последствия отсутствия локализации. За 5 лет мы локализовали более 50 проектов — от казуалок с 500 строками до RPG с 200 000 строк. И знаем, какие грабли встречаются чаще всего.
Локализация — не просто перевод, а техническая интеграция: адаптация UI под RTL, работа с падежами, шрифтами и аудио. Свяжитесь с нами для аудита вашего проекта — мы оценим объём и подготовим план.
Расширение текста и layout
Немецкий текст в среднем на 30% длиннее английского. «Inventory» — «Inventar» ещё ок, но «Achievement Unlocked» -> «Erfolg freigeschaltet» уже не влезает в кнопку. В Unity это решается через TextMeshPro с Auto Size — шрифт уменьшается до Min Size, а дальше текст обрезается. Нужно задавать разумный Min Size (не меньше 60% от базового) и тестировать все UI-панели на немецком и финском — у финского тоже длинные слова.
В Unreal — STextBlock с WrapTextAt и AutoWrapText. В Godot — Label с autowrap и динамическим размером контейнера.
Арабский и иврит — весь UI переворачивается (RTL). Unity не поддерживает RTL из коробки — нужен пакет RTL-TMPro (бесплатный, GitHub) или I2 Localization с RTL-поддержкой. Unreal с версии 4.23 поддерживает RTL через Internationalization модуль нативно. Подробнее о RTL-вёрстке можно почитать на Wikipedia.
Падежи, склонения и ветвящиеся строки
«Вы получили [item]» — если item это «меч», то «Вы получили меч». Если «броня» — «Вы получили броню». Жёсткая подстановка через string.Format("Вы получили {0}", itemName) даёт «Вы получили броня».
Решения:
- PluralKit-подход в Unity через I2 Localization с поддержкой CLDR plural rules и gender.
- Хранить несколько форм существительного в данных предмета (nominative, accusative, genitive) и выбирать нужную по контексту строки.
- Для сложных случаев — MessageFormat (ICU) с select и plural блоками.
Японский и корейский не имеют падежей, но порядок слов обратный — глагол в конце. «Attack the enemy» -> \「敵を攻撃する\」. Строки с вставленными именами работают только если переводчик знает, куда вставляется подстановка: {player_name} defeated {enemy_name} -> в японском порядок может быть {enemy_name}を{player_name}が倒した. Рекомендации ICU (см. ICU User Guide) советуют использовать именованные плейсхолдеры.
Проблемы RTL в Unity: решение
Для Unity используйте пакет RTL-TMPro или I2 Localization. После установки настройте шрифт, поддерживающий арабские лигатуры (например, Noto Naskh Arabic). Проверьте все UI-элементы: текст должен быть выровнен вправо, а элементы интерфейса — зеркально отражены. 90% проблем решаются автоматически, если настроить RTL до начала перевода.
Значение именованных плейсхолдеров
Без именованных плейсхолдеров переводчик не может изменить порядок слов. Это приводит к грамматическим ошибкам в японском, корейском, арабском и других языках. Именованные плейсхолдеры (например, {player_name}) позволяют переводчику видеть, что подставляется, и расставлять слова в правильном порядке. Мы всегда используем их во всех проектах — это гарантия качества перевода.
Пример из практики: RPG на Unity с 20 000 строк
При локализации на арабский все UI-элементы съезжали. Мы за 2 дня подключили I2 Localization с RTL-модулем, настроили шрифт Noto Naskh Arabic и проверили все 50 экранов. В результате игра вышла на Ближнем Востоке с ростом установок на 60%. Использование Translation Memory позволило сэкономить 30% бюджета на перевод повторяющихся строк.
Как правильно настроить RTL в Unity?
Для Unity используйте I2 Localization с RTL-модулем. Установите пакет RTL-TMPro либо встроенную поддержку I2L. Настройте шрифт, поддерживающий арабские лигатуры (Noto Naskh Arabic). Все UI-элементы с текстом должны иметь выравнивание вправо, а контейнеры — зеркальное отражение. Проверьте каждый экран на длинном арабском тексте.
| Движок | Рекомендуемый инструмент | RTL | ICU | Plural forms |
|---|---|---|---|---|
| Unity | I2 Localization | + (плагин) | + | + (CLDR) |
| Godot | TranslationServer + PO | + (4.0+) | - | + (limited) |
| React Native | i18next + react-i18next | + | + | + |
Сравнение инструментов локализации
| Инструмент | Движки | RTL | ICU | Стоимость |
|---|---|---|---|---|
| I2 Localization | Unity | + (плагин) | + | Платный |
| Lean Localization | Unity | - | - | Платный |
| i18next + react-i18next | React Native | + | + | Бесплатно |
| TranslationServer | Godot | + (4.0+) | - | Встроено |
Unity. I2 Localization — де-факто стандарт. Google Sheets интеграция: переводчики работают прямо в таблице, изменения подтягиваются через Build или runtime. Альтернатива — Lean Localization (проще, меньше возможностей). Для голосового актёрства — отдельная таблица с ключами аудио-файлов.
Godot. Встроенная система через TranslationServer + CSV или PO-файлы. PO-файлы удобнее для работы с профессиональными переводчиками (поддерживает Poedit, Crowdin).
React Native (Expo games, казуалки). i18next + react-i18next. Для более серьёзных игр на RN — тот же i18next с ICU-плагином.
Нейтральный pipeline. Экспорт строк в XLIFF 2.0 или CSV -> Translation Memory в CAT-инструменте (MemoQ, Phrase, Crowdin) -> импорт обратно. Это важно для согласованности терминологии: «урон» должен везде переводиться одинаково, переводчик видит контекст предыдущих переводов.
Пример конфигурации I2 Localization для RTL
- Установите I2 Localization из Asset Store.
- Включите RTL-модуль в настройках: I2L => Tools => Enable RTL.
- Для TextMeshPro добавьте компонент I2BaseLocalization и выберите язык.
- Шрифт должен содержать арабские глифы. Импортируйте Noto Naskh Arabic как TMP_FontAsset.
- Для UI-элементов с текстом установите выравнивание вправо.
Шрифты и символы
Китайский (упрощённый + традиционный), японский, корейский требуют шрифтов с соответствующими глифами. В TextMeshPro нельзя использовать один Atlas для всех языков — CJK требует отдельного Font Asset с нужным Character Set. Dynamic Font Asset (TMP) загружает глифы on-demand из системного шрифта — удобно, но добавляет runtime-зависимость.
Арабский — шрифт должен поддерживать лигатуры (буквы меняют форму в зависимости от позиции в слове). Noto Naskh Arabic, Cairo — хорошие бесплатные варианты.
Аудио-локализация
Голосовое актёрство (VO) — самая дорогая часть. Синхронизация субтитров с аудио: в Unity через Timeline или AudioSource.clip.length — субтитры появляются по событиям или по таймкодам. Lip-sync в 3D-персонажах — Oculus LipSync, SALSA LipSync (платный), или процедурный через Phoneme-систему.
Для казуальных игр без VO — только текст + SFX. Здесь локализация занимает 1-3 недели.
Процесс работы: что входит в услугу
- Аудит строк — экстракция всех hardcoded строк из кода и префабов, создание ключей. Вы получаете полный отчёт о количестве строк, их типах и сложности.
- Инструментирование — подключение локализационной системы (I2L, Godot TranslationServer) с учётом вашего стека.
- Передача переводчикам — XLIFF/CSV с контекстом (скриншоты экранов, описание сцены). Мы работаем с проверенными бюро переводов — это гарантирует качество.
- Интеграция переводов — импорт, проверка layout на каждом языке, исправление ошибок вёрстки.
- Тестирование — прохождение ключевых флоу на каждом языке, проверка RTL, проверка edge-cases (длинные имена, числа в строках).
- Документация и поддержка — передаём исходники, конфиги, инструкцию по добавлению новых языков.
Сроки: от 1 недели (казуальная игра, 2-3 языка) до 3 месяцев (RPG с разветвлёнными диалогами, 10+ языков, VO). Стоимость рассчитывается индивидуально после анализа объёма контента. Закажите локализацию и получите готовое решение под ключ. Свяжитесь с нами для аудита вашего проекта — мы определим объём работ и сроки.







