Игра говорила на семи языках всем, кроме собственных кнопок. Теперь и ими тоже.
Интерфейс на языке игры
Рассказ, журнал и озвучка шли на семи языках с самого начала, а подписи оставались русскими: интерфейс переехал из прошлой версии как есть. Теперь он берёт язык истории — русский, английский, испанский, французский, немецкий, китайский, японский.
Переведено всё, что читает игрок: шапка и кнопки хода, поле ввода с режимами, лист героя с характеристиками, задания, журнал, достижения, разделы меню, панель движков с готовыми раскладками, «что скачать», монитор карты, страницы книги, создание истории с жанрами, поля персонажа, мир и правила, картинки, голос, инвентарь, тексты ошибок.
Служебные слова стадий остались русскими нарочно: это протокол между сервером и интерфейсом, а не текст на экране.
Как проверялось
Сборка сверяет ключи каждого языка с эталоном и отказывается собирать словарь, если хоть один потерян — у всех пяти новых языков ровно 211. Отдельная проверка ищет непереведённое, потерянные подстановки и пропавшие значки: чисто. Переводы прочитаны построчно; в японском нашлись латинские вопросительные знаки вместо полноширинных — поправлено.
Вживую: переключение языка истории меняет весь интерфейс, чужих подписей на экране не остаётся.
Что всплыло по дороге
Две ловушки, обе настоящие. Импорт словаря был написан через «@/», а остальной код — через «./»: сборщик считает это разными модулями и делает две копии контекста — провайдер в одной, читатели в другой. И корневой компонент не видит собственный провайдер, ему словарь нужен напрямую.
Ещё шесть списков лежали на уровне модуля — жанры, длина ответа, стадии, раскладки, адреса серверов, слоты — и застывали на языке загрузки навсегда. Развёрнуты в функции от словаря.
Мелочи
Плашка обновления больше не показывает сырую разметку релиза и не зовёт запускать батник — она говорит, что игра обновится сама. В шапке подпись про то, где что считается, пересчитывается при смене языка.
Установщик: DungeonUltimate-0.11.0-x64-setup.exe. Кто уже играет — обновление придёт само.