Гайды / За кадром

Как мы перевели наши мобильные игры на 14 языков

Что понадобилось, чтобы выпустить наши Android-игры на 14 языках: как мы устраиваем файлы строк, почему важны правила множественного числа и шрифты, какие ошибки перевода возвращались снова и снова, баг, который бьёт только по телефонам в Европе, и почему 14 языков означают 16 страниц в магазине.

Все шесть наших игр полностью переведены на 14 языков: английский, немецкий, испанский, французский, хорватский, индонезийский, итальянский, японский, корейский, португальский, русский, словенский, турецкий и традиционный китайский. Первые четыре, Idle Ronin, Idle Summoner, Idle AI Factory и Block Brain, вместе содержат около 2 100 английских строк - от 254 в Block Brain до 1 253 в Idle Ronin, и каждая переведена 13 раз. Idle Restaurant: Miami и ONI Snakes вышли на тех же 14 языках. Вот чего это стоило и что мы сделали бы снова.

Один файл строк на язык, с контекстом

У каждой игры есть простой текстовый файл на каждый язык. Запись - это исходная английская строка, помеченная @, а за ней перевод, помеченный =, и у большинства записей есть комментарий для переводчика. Вот первый монстр в английском файле Idle Summoner:

# monster name with its number in the summon chain (1-55); names appear on small labels

@ {0}. Slime

Эти комментарии - самое полезное, что мы добавили. В английском файле Idle Summoner их 156 на 258 строк. Переводчик, который знает, что строка стоит на крошечной плашке или что {0} - это число, ошибается гораздо реже, чем тот, кто гадает по одним словам.

Использование самого английского текста в качестве ключа делает файлы читаемыми, но в этом есть ловушка. Строка, которая одинакова в обеих колонках, не обязательно имя, которое должно остаться на английском: в Idle Ronin около 680 из первых 1 185 записей совпадали со своим английским текстом. На английском остаются только настоящие имена собственные - имена 19 Стражей, названия юнитов и 12 костюмов, - и наш скрипт сборки блокирует именно их.

Правила множественного числа - не опция

В английском две формы: 1 unit, 2 units. Во многих языках их больше, и правила различаются. Наш код Loc следует правилам множественного числа для целых чисел из таблиц Unicode CLDR:

ЯзыкиФормы, которые использует наш код
Английский, немецкий, испанский, итальянскийone, other
Французский, португальскийone (0 и 1), other
Хорватскийone, few, other
Русскийone, few, many
Словенскийone, two, few, other
Турецкий, индонезийский, японский, корейский, китайскийодна форма

Больше всего удивляет словенский: у него есть отдельная форма для двух, поэтому говорят «2 enoti», но «5 enot». Если твой код знает только единственное и множественное число, каждый из этих языков где-нибудь покажет неправильную грамматику.

Шрифты: буквы, которых неожиданно не хватает

Шрифт текста в Idle Summoner был урезанной копией Noto Sans KR Black, в которой не было č, š, ž и ć, западноевропейских диакритических знаков, турецких букв и традиционного китайского. Недостающие буквы либо подменялись шрифтом телефона, либо вообще не отображались. Мы пересобрали его со всеми буквами, которые используют наши таблицы, и добавили Noto Sans JP для японского и Noto Sans TC для традиционного китайского. Надписи пиксельным шрифтом игры сохраняют его, только пока текст укладывается в буквы, которые в этом шрифте есть.

Шрифты могут и обманывать. В корейском шрифте Idle Ronin заглавная N нарисована так, что ON и OFF читаются как «OΠ». Мы заменили эти переключатели корейскими словами 켜기 и 끄기, которые к тому же читаются лучше.

Ошибки, которые возвращались в каждом языке

Как бы ни переводили игру, первый черновик редко бывает готов. Наш повторял одну и ту же горстку ошибок почти в каждом языке - те самые, которые первой нашла наша собственная проверка словенского перевода:

  • «Particle», настройка графики, переведённая как термин из физики вместо «Эффекты».
  • «Stack», дополнительные копии юнита, оставленное по-английски или переведённое как «куча» вместо «копии».
  • Задание победить монстра по имени Treasure Chest, переведённое как «разбить сундуки с сокровищами».
  • Текст, переведённый целиком для строк и значков, куда помещается только одно-два слова.
  • «FIGHT FLOOR {0}» с лишним глаголом, из-за которого кнопка становилась слишком длинной.

Поэтому мы написали проверку, которая выводит именно эти строки для любого языка, и передаём список до начала перевода. Два языка, переведённые со списком на руках, не потребовали правок; переведённые без него потребовали примерно по шесть.

Проверяй экраны, а не только файлы

Файл может быть полным, а экран всё ещё показывать английский. Наш тест: переключи игру на другой язык, собери весь видимый на экране текст и сравни с английским файлом. Всё, что осталось на английском, - это надпись, которую код никогда не переводит. В Idle Ronin такая проверка нашла всегда видимую кнопку OPEN и кнопки настроек, застрявшие на языке, который был активен при первом открытии меню.

Потом проверь, помещается ли всё на реальном разрешении телефона. Мы смотрим каждый экран в 1080 x 2400 на самых длинных языках, а также на японском, корейском, китайском и русском, и предпочитаем сократить текст, а не уменьшать его, пока никто не сможет его прочитать.

Запятая, которая ломает сохранения в Европе

Один баг вообще не связан со словами. В игре, которую мы сейчас делаем, сохранение склеивает числа через запятую. На телефоне, язык которого пишет десятичные дроби через запятую, как во многих странах Европы, 7392.58 превращается в 7392,58, лишняя запятая разрезает число надвое, и каждое значение после него сдвигается на одну позицию. При тестировании на английском этого никогда не видно. Исправление - одна строка при запуске, которая фиксирует формат чисел на инвариантной культуре, плюс защита, чтобы уже сломанные сохранения всё равно загружались.

14 языков, 16 страниц в магазине

В Google Play отдельные страницы для испанского в Испании и Латинской Америке и для португальского в Португалии и Бразилии. Мы держим один перевод в игре на каждый язык, но пишем текст для магазина отдельно для каждого рынка, со своими поисковыми запросами. Получается 16 страниц на игру, у каждой свой заголовок, краткое описание, полное описание и скриншоты. Наш сайт устроен так же, а как мы его собираем, рассказываем в отдельной записи.

Что мы сделали бы снова

  1. Пиши комментарий с контекстом к каждой строке.
  2. Блокируй имена собственные в сборке, а не в голове переводчика.
  3. Реализуй правила множественного числа до того, как придёт первый перевод.
  4. Проверь, что в твоих шрифтах есть все буквы, которые используют твои таблицы.
  5. Веди список известных проблемных строк и передавай его заранее.
  6. Пройдись по экранам на другом языке в поисках забытого английского.
  7. Записывай данные сохранений в инвариантной культуре.
  8. Закладывай 16 страниц в магазине, а не 14.

Хочешь увидеть результат? Переключи язык в Idle Ronin, Idle Summoner, Idle AI Factory, Block Brain, Idle Restaurant: Miami или ONI Snakes: каждая из них говорит на всех 14.

Источники

  • Unicode CLDR, Language Plural Rules.
  • Код игр ONI Games, сентябрь 2026 года: Idle Summoner (Loc.cs, LocFonts.cs, Localization/Summoner/en.txt), Idle Ronin (Localization/Ronin), Idle AI Factory (Localization/AIFactory), Block Brain (Localization/Brain).

Другие гайды

Все гайды
Как спроектировать idle-игру: формулы и уроки четырёх наших игр

За кадром

Как спроектировать idle-игру: формулы и уроки четырёх наших игр

Чему мы научились, проектируя и исправляя четыре мобильные игры с idle-прогрессом: какие кривые ими движут, как обращаться с офлайн-временем и огромными числами, как сделать престиж выгодным и какие баги появляются только через сотни этапов. Настоящие формулы из нашего кода.

Читать гайд →
Почему мы убрали принудительную рекламу после боссов

За кадром

Почему мы убрали принудительную рекламу после боссов

Где появляется реклама, важнее, чем сколько её. История полноэкранной рекламы в боях с боссами Idle Ronin, которая дважды переезжала, пока мы её не выключили, и правила рекламы, которым мы теперь следуем во всех наших играх, вместе с кодом за ними.

Читать гайд →

◆ Другие игры ONI Games

Другие игры

Листайте, чтобы увидеть больше

ONI Snakes: Armored Arena
Уже вышла · Google Play

ONI Snakes: Armored Arena

Сбивай броню с вражеских змей, стань гигантом и захвати неоновую арену в 11 режимах игры - онлайн и с друзьями.

Подробнее об игре →
Idle Ronin: Cyber RPG
Уже вышла · Google Play

Idle Ronin: Cyber RPG

Погрузись в неоновое будущее в роли последнего Кибер-Ронина. Руби волны мехов, собери отряд киборгов и штурмуй Neon Tower. Твой клинок не останавливается, даже когда ты офлайн.

Подробнее об игре →
Idle Summoner: Pixel RPG
Уже вышла · Google Play

Idle Summoner: Pixel RPG

Призови легион зверей, штурмуй замки преисподней и перерождайся сильнее каждый раз, когда прогресс замедляется.

Подробнее об игре →
Block Brain: Block Puzzle Game
Уже вышла · Google Play

Block Brain: Block Puzzle Game

Расставляй яркие блоки, собирай линии и делай комбо за комбо, пока твой Мозгик растёт от крошечного Ростка до коронованного Гения.

Подробнее об игре →
Idle AI Factory: Robot Tycoon
Уже вышла · Google Play

Idle AI Factory: Robot Tycoon

Управляй фабрикой, полной весёлых роботов, автоматизируй каждую производственную линию и вырасти от маленькой AI-лаборатории до базы на Луне.

Подробнее об игре →
Idle Restaurant: Miami
Уже вышла · Google Play

Idle Restaurant: Miami

Преврати маленькую пиццерию на пляже в неоновую ресторанную империю Майами: нанимай менеджеров, собирай 20 настоящих рецептов и зарабатывай офлайн.

Подробнее об игре →