Як наша гра за тиждень вивчила чотирнадцять мов 🌍
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 вам не до вподоби, просто скажіть нам, яке речення звучить дивно. Носій мови помічає за п'ять хвилин більше, ніж ми за п'ять годин. 🌍✨
Коментарі