Локализация в Phaser подразумевает поддержку различных языков, региональных стандартов и специальных символов в интерфейсе и игровом контенте. Для этого необходимо правильно организовать хранение текстовых ресурсов и корректно их отображать с учетом кодировки. Phaser полностью совместим с Unicode, что позволяет использовать любые символы, включая кириллицу, иероглифы и специальные знаки.
Основные подходы к локализации:
Пример структуры JSON для двух языков:
// en.json
{
"menu": {
"start": "Start Game",
"options": "Options",
"exit": "Exit"
},
"messages": {
"welcome": "Welcome to the game!",
"gameOver": "Game Over"
}
}
// ru.json
{
"menu": {
"start": "Начать игру",
"options": "Настройки",
"exit": "Выход"
},
"messages": {
"welcome": "Добро пожаловать в игру!",
"gameOver": "Игра окончена"
}
}
Использование иерархической структуры облегчает поддержку больших проектов и позволяет группировать тексты по категориям.
В Phaser загрузка текстов производится через
this.load.json в методе preload сцены:
preload() {
this.load.json('lang_en', 'assets/lang/en.json');
this.load.json('lang_ru', 'assets/lang/ru.json');
}
После загрузки можно обращаться к данным через кэш:
create() {
const currentLang = 'ru';
const translations = this.cache.json.get(`lang_${currentLang}`);
const startButton = this.add.text(100, 100, translations.menu.start, { fontSize: '32px', color: '#fff' });
}
Такой подход позволяет легко переключать язык в любой момент, просто
меняя значение переменной currentLang.
Phaser использует Canvas или WebGL для рендеринга текста, поэтому поддержка специальных символов зависит от выбранного шрифта. Для корректного отображения необходимо:
.ttf/.woff) для символов, отсутствующих в
стандартных шрифтах.&, <, >) при работе с
текстовыми объектами, чтобы избежать некорректного отображения.Пример подключения Google Fonts:
const font = new FontFace('Roboto', 'url(assets/fonts/Roboto-Regular.ttf)');
font.load().then(function(loadedFont) {
document.fonts.add(loadedFont);
});
После этого можно применять шрифт к текстовым объектам:
this.add.text(50, 50, 'Привет, мир!', { fontFamily: 'Roboto', fontSize: '28px', color: '#ffffff' });
Phaser позволяет менять содержимое текстовых объектов на лету. Это особенно полезно для мультиязычных интерфейсов:
const message = this.add.text(200, 200, '', { fontSize: '24px', color: '#ff0' });
function updateLanguage(lang) {
const translations = this.cache.json.get(`lang_${lang}`);
message.setText(translations.messages.welcome);
}
Такой метод удобен для игровых диалогов, меню и уведомлений, где язык может меняться без перезапуска сцены.
Для полного соответствия региональным стандартам важно учитывать форматирование чисел и дат. Phaser не предоставляет встроенных инструментов для этого, но можно использовать встроенные возможности Jav * aScript:
const score = 1234567.89;
const formattedScore = new Intl.NumberFormat('ru-RU').format(score); // 1 234 567,89
const now = new Date();
const formattedDate = new Intl.DateTimeFormat('ru-RU', { dateStyle: 'long', timeStyle: 'short' }).format(now);
Такой подход гарантирует корректное отображение локализованных данных в игровых интерфейсах.
Локализация касается не только текста:
Для больших проектов рекомендуется использовать инструменты автоматического извлечения текста из кода и генерации JSON-файлов с ключами. Это позволяет:
Использование модульной структуры с отдельными менеджерами локализации упрощает доступ к текстам из любых сцен и объектов Phaser, снижает риск ошибок при переключении языков и повышает масштабируемость проекта.