Продолжаю серию заметок о создании интерактивной книги — «симулятора техподдержки для столкнувшихся с потусторонним». Сегодня сфокусируемся исключительно на технической стороне локализации: разберем пайплайны и архитектурные решения, оставив за скобками вопросы найма переводчиков или выбора нейросетей.

Дисклеймер: я подошел к этой задаче «напролом», без глубокого анализа существующих фреймворков и готовых решений, руководствуясь принципом «я разработчик или где?». Итак, поехали.
Интернационализация интерфейса
Этап 1. Создаем CSV-таблицу, где хранятся пары «идентификатор – текст» для каждой языковой версии.

Этап 2. На основе CSV генерируем C#-файл, содержащий enum с ключами и соответствующие строковые константы.


Этап 3. В коде используем специализированный класс-менеджер, который подтягивает актуальный текст согласно настройкам языка игрока.

Да, я написал простую консольную утилиту, которая «на лету» генерирует C#-код. Никаких громоздких библиотек — чистая текстовая генерация. Работает стабильно, нареканий нет.
Озвучка и доступность
Я изначально отказался от дубляжа на другие языки, сделав упор на локализацию субтитров для видеороликов…

…а также текстовые расшифровки для всех входящих голосовых сообщений.

Подобный подход оказался крайне полезен и для основной аудитории: как для людей с особенностями восприятия, так и для тех, кто попросту предпочитает текстовый формат аудиосообщениям.
Графика и локализация
Некоторые визуальные элементы сюжета требуют перевода. В простых случаях я правил графику вручную, в более сложных — делегировал задачу нейросетям, которые отлично справляются с рендерингом адаптированных под язык изображений.

Локализация игрового нарратива
Самый сложный участок работы. Если вы ознакомились с моим постом об интеграции Obsidian, то знаете, что сценарии хранятся в специфической структуре. Мой автоматизированный пайплайн выглядит следующим образом:

- Парсинг JSON-файлов для формирования структурированных данных.
- Экспорт контента в пары «ID (хэш контента) – текст».
- Генерация CSV-таблиц по каждому диалогу.
- Перевод контента.
- Создание дубликатов файлов для каждого языка с соответствующим суффиксом (например, «_en»).
- Игровой движок динамически подгружает нужный файл в зависимости от выбранного языка.
Утилиты получились довольно «умными»: при повторном запуске они не перезаписывают данные, а обновляют только измененные строки (те, у которых поменялся хэш). Это значительно экономит время и силы.
Что дальше?
Релиз намечен на 14 июля. Спустя пару месяцев после выхода я обязательно поделюсь отчетом о коммерческих результатах, нюансах вывода средств со Steam и налоговых аспектах. Подписывайтесь, чтобы ничего не пропустить!
Y


