LocalesService11 / 12

Локализация текста игры

Загрузим словари и получим строку по ключу.

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 }));
01
Языкru
02
Ключ и параметрыscore + { value: 120 }
03
Словарь«Очки: {value}»
04
Результат«Очки: 120»
Сервис выбирает строку; визуальный компонент применяет её к Text.

setLang меняет текущий язык, но не переписывает автоматически уже нарисованные Text-узлы. Компонент должен повторно установить строки. getLang() возвращает текущий язык, has(key) проверяет наличие перевода.

При поиске строки сервис проверяет текущий словарь и fallback. Если ключ не найден, возвращает сам ключ. Отсутствующий словарь — другая ситуация: обращение к неподготовленному файлу не заменяется автоматически успешной загрузкой.

При старте движок может выбрать язык с учётом подсказки платформы. Словари для используемого порядка поиска должны быть подготовлены заранее. Добавление нового языка потребует обновления каталога SDK; одного файла de.json недостаточно.