top of page

Как наша игра за неделю выучила четырнадцать языков 🌍

Фото автора: Marcel Dütscher
Marcel Dütscher
10 авг.
3 мин. чтения

10 августа 2026 г.


Когда мы начинали, Blocks Beyond the Stars говорила ровно на двух языках: на немецком, потому что мы там живём, и на английском, потому что интернет говорит по-английски. Сегодня их четырнадцать. Вот как это вышло — и всё, что по дороге сломалось. 🌍


Всё началось с Франческо. Несколько недель назад из Италии пришёл pull request: Francesco Quirino начал переводить игру на итальянский. Вручную. Группа за группой, начиная со всех 290 названий блоков и их описаний. Тогда мы поняли, что к языкам нужно относиться серьёзно, — ведь до этого половину игровых текстов вообще нельзя было перевести. Больше 300 серверных сообщений были намертво привязаны к английскому. Так что сначала мы навели порядок — просто чтобы работе Франческо было куда приземлиться.


Потом возник неудобный вопрос. Перевод языка вручную занимает недели. Мы семья, а не студия локализации. Значит, машина — но сделанная как следует. Мы написали небольшой инструмент, который режет языковой файл на куски, отдаёт их языковой модели на перевод, а потом проверяет: не пропала ли строка? Не исчез ли плейсхолдер вроде {0}? Не придумала ли модель ключ, которого не существует? Если да, результат выбрасывается. Только когда инструмент заработал надёжно, мы стали добавлять языки: нидерландский, бразильский португальский, польский, турецкий — а потом русский, украинский, китайский, японский и корейский.


С тоном оказалось сложнее, чем со словами. Языковая модель по умолчанию переводит вежливо и официально. Но детская игра, которая обращается к вам как банковское письмо, просто жутковата. Поэтому для каждого языка мы задали своё правило: нидерландское «je/jij», польское «ty», турецкое «sen», бразильское «você», русское «ты», японское です/ます, корейское 해요체. Нидерландскому понадобился лишний проход, потому что в начале слова IJ с заглавной пишутся обе буквы — «IJzererts», а не «Ijzererts». Ни одна машина сама этого не найдёт; это находишь, читая результат.


А потом были пустые квадратики. У нас был полностью переведённый русский, мы запустили игру — и в меню остались одни прямоугольники. У нашего фирменного шрифта Rajdhani просто нет кириллицы. С китайским, японским и корейским стало совсем непросто: полный CJK-шрифт весит около 16 мегабайт. Умножьте на три — почти 50 МБ, немыслимо для игры, которая должна работать ещё и в браузере. Решение: собрать для каждого языка специальный урезанный шрифт, в котором ровно те символы, что встречаются в наших текстах. 16 МБ превращаются в 800 КБ. Вместо 50 МБ игра прибавляет два. 🔤


Чему это нас научило. Перевод — это на 20% перевод и на 80% всё остальное: сначала вытащить строки из кода, найти шрифты, проверить, помещаются ли предложения на кнопки (немецкий длинный, но русский ещё длиннее), и позаботиться, чтобы даже окно ошибки было переведено — то, что появляется до загрузки языковых файлов. Это последнее сообщение нам пришлось прописать в коде четырнадцать раз. Чувствуется это неправильно — но это единственное сообщение, которое вы обязательно должны суметь прочитать.


Честно: первый проход переведён машиной. Он хороший, полный, проверенный — но его не читал носитель языка. Мы говорим об этом намеренно, а не делаем вид, что у нас четырнадцать переводчиков. Именно поэтому итальянская работа Франческо по-прежнему сохранена до последней буквы: наш инструмент только заполняет пробелы и никогда не перезаписывает человеческий перевод. Где поработал человек, там побеждает человек.


Если вы говорите на одном из этих языков: мы будем рады вашим исправлениям, даже одному. В репозитории есть руководство по переводу, которое шаг за шагом объясняет, как помочь, — а если GitHub не ваше, просто напишите нам, какое предложение звучит странно. Носитель языка замечает за пять минут больше, чем мы за пять часов. 🌍✨

Недавние посты

Смотреть все

Комментарии


Комментарии к этому посту больше не доступны. Обратитесь к владельцу сайта за дополнительной информацией.
bottom of page