Локализация текста игры
Загрузим словари и получим строку по ключу.
LocalesService получает переводы из ConfigStore. Каталог LocaleCatalog поддерживает en и ru; для них ожидаются ID json/locales/en.json и json/locales/ru.json.
В отличие от курса на сайте, это локализация самой игры. Публичный Block Puzzle оставляет часть надписей прямо в layout. Следующий пример показывает, как подключить словари в новом проекте.
Оба JSON включим в манифест как json и загрузим до обращения к LocalesService. В русский словарь добавим надписи для кнопки и счётчика:
{
"restart": "Начать заново",
"score": "Очки: {value}"
}
В компоненте выберем язык и подставим очки в перевод. Здесь label — узел Text, а SystemServices импортирован из @gamedevland/engine/di:
const locales = this.node.engine.di.get(SystemServices.LocalesService);
locales.setLang('ru');
label.setText(locales.t('score', { value: 120 }));
setLang меняет текущий язык, но не переписывает автоматически уже нарисованные Text-узлы. Компонент должен повторно установить строки. getLang() возвращает текущий язык, has(key) проверяет наличие перевода.
При поиске строки сервис проверяет текущий словарь и fallback. Если ключ не найден, возвращает сам ключ. Отсутствующий словарь — другая ситуация: обращение к неподготовленному файлу не заменяется автоматически успешной загрузкой.
При старте движок может выбрать язык с учётом подсказки платформы. Словари для используемого порядка поиска должны быть подготовлены заранее. Добавление нового языка потребует обновления каталога SDK; одного файла de.json недостаточно.