Локализация: обязательные 12 языков
Каждая выпускаемая игра VORIVOX должна иметь те же 12 языков, что и продукт: ru, en, zh-Hans, es, ar, hi, pt, fr, de, ja, kk, uz. Это требование игры, а не только Console.
Что переводим
Меню, правила, подсказки, результаты, ошибки, названия режимов, текст обучения и субтитры. Текст внутри картинок не используйте. Для арабского предусмотрите RTL и проверьте компоновку отдельно.
Как выбирается язык
Launcher передаёт локаль в manifest.locale. До ready() нормализуйте её к одному из 12 ключей и загрузите соответствующий локальный словарь. Региональные формы вроде ru-RU и en-US сводятся к ru и en; zh-Hans сохраняется отдельно.
Fallback
Не используйте fallback как замену переводу. Он нужен только для неизвестной или повреждённой локали. Для внутренней диагностики допустим fallback на en с предупреждением, но QA игры должен пройти все 12 локалей.
Проверка перед выпуском
Автоматически сравните набор ключей во всех словарях. Затем визуально прогоните длинные подписи, арабский RTL, китайский, хинди и переносы на проекторе. Шрифты должны содержать все используемые глифы и поставляться вместе с игрой.
Пример кода
Фрагмент интеграции: переменные игрового проекта задаются приложением. Полный запускаемый пример — в Playground.
const SUPPORTED = ['ru','en','zh-Hans','es','ar','hi','pt','fr','de','ja','kk','uz'];
function gameLocale(value='') {
const raw = value.trim();
if (/^zh(-|$)/i.test(raw)) return 'zh-Hans';
const base = raw.split('-')[0].toLowerCase();
return SUPPORTED.includes(base) ? base : 'en';
}
const locale = gameLocale(sdk.manifest.locale);
const dict = await fetch(`./i18n/${locale}.json`).then(r => r.json());