Для того чтобы успешно локализовать игру, нужно учесть огромное количество аспектов (о некоторых из них можно почитать, например, здесь). В том числе имеет значение и то, на каком движке создан проект. Мы решили углубиться в тему и рассказать об особенностях локализации игр на двух самых популярных движках: Unity и Unreal Engine. Самый простой способ вставить текст в игру на движке Unity — прописать его в свойствах соответствующего объекта интерфейса. Например, когда мы создаем кнопку, вместе с ней автоматически генерируется связанный текстовый объект. После этого мы можем задать нужный нам текст («Next» на рисунке ниже), и вуаля — он тут же окажется на самой кнопке. Этот текст хранится внутри файла сцены (Unity scene file с расширением .unity). Если наша кнопка никогда не будет меняться, то на этом можно остановиться. А что, если мы хотим, чтобы текст на кнопке менялся в зависимости от определенных условий? Скажем, мы решили локализовать игру. Значит, перевод всех текстовых элементов, выведенных на экран, при необходимости должен мгновенно переключаться. Нет, нам не нужно вручную создавать десятки новых кнопок, табличек и плашек для каждого языка — ведь можно просто связать каждый текстовый элемент интерфейса с текстовым файлом, содержащим нужные фразы. Такие файлы называются словарями. Игра просто будет подгружать из нужного словаря нужный текст на нужном языке. Unity поддерживает разные текстовые форматы: .txt, .csv, .xliff, .json, .po и т. д. И все-таки придется хорошенько попрограммировать, написав в коде игры: функцию, задающую язык; функцию, загружающую в память устройства текст из словаря; функцию, преобразующую загруженный текст в понятный для Unity вид; функцию, вставляющую переведенный текст в интерфейс игры; менеджер локализации — сценарий, устанавливающий связь между словарями и текстовыми объектами сцены; менеджер загрузки, задача которого — дождаться, пока сработает менеджер локализации (т. е. игрок выберет язык), после чего загрузить новую сцену. И еще чуть-чуть поработать руками: привязать менеджер локализации к каждому локализуемому текстовому объекту; назначить каждому текстовому объекту сценарий, который получает ключ нужного текста и вставляет локализованный текст в поле «Text».  Сложно? Не спорим. К счастью, недавно в Unity появился свой инструмент для локализации с говорящим названием Localization (он был и раньше, но на стадию пререлиза перешел только в апреле 2021 года; да и сейчас все еще сырой, судя по обилию баг-репортов на форуме техподдержки). Он автоматизирует большинство необходимых действий, позволяя задавать локали и в зависимости от них воспроизводить звуки и выводить на экран разные строки и рисунки. А еще он делает «псевдолокализацию», т. е. машинный перевод, чтобы можно было оценить, как будет выглядеть интерфейс в той или иной локали. С помощью Localization можно также экспортировать данные не только в текстовые файлы, но и в Google Sheets. Впрочем, гораздо раньше стандартного инструмента появились разнообразные сторонние плагины, позволяющие управлять локализацией на проекте. Например, плагин I2 Localization компании Inter Illusion. Функционал примерно такой же, как и у стандартного: поддержка Google Translate; автоматический поиск отсутствующих, дублирующихся или неиспользуемых переводов; поддержка множественного числа; поддержка RTL (right-to-left) языков: арабского, иврита и т. п.; локализация нетекстовых объектов (рисунок или аудиофайл может меняться в зависимости от языка); управление шрифтами и текстурами (их можно задать объекту в зависимости от языка). Стоит 45 долларов. Что ж, с языками разобрались. Однако текст в игре — это не только смысл слов, но и их облик. О внешней красоте в данном случае стоит позаботиться не меньше, чем о внутренней. UI Text, стандартный инструмент Unity для работы с текстом, очень простой и не имеет возможностей по созданию визуальных эффектов текста (динамических отражений, объемных теней и т. п.). Зато для этого можно использовать плагин TextMesh Pro, разработанный компанией Digital Native Studios. Он генерирует объемную сетку, позволяющую применять к тексту разнообразные эффекты и даже создавать анимацию. Плагин оказался очень удачным, поэтому корпорация Unity его приобрела и бесплатно поставляет в комплекте с основным редактором с версии 2018. В Unreal Engine проблемы локализации решены гораздо основательнее, чем в Unity. Здесь уже давно существует стандартный инструмент локализации, поэтому в сторонних плагинах нет большой необходимости. Стоит отметить, что в Unreal Engine разделяются понятия локализации (адаптация игры к конкретному региону или языку путем перевода текста и добавления специфичных для локали компонентов) и интернационализации (разработка игры таким образом, чтобы она легко адаптировалась к разным языкам без изменений ее архитектуры). Локализация в Unreal построена вокруг особого типа данных — FText, а интернационализация использует библиотеку ICU (International Components for Unicode). Культурой (culture) в Unreal называется свод правил оформления текста, принятых в соответствующем регионе. К ним относятся правила: обработки цифр и спецсимволов (знаки валют, процентов, десятичные разделители и т. п.); форматирования даты и времени; передачи множественного числа. Культура обозначается кодом, состоящим из одной-трех частей: обязательный двузначный буквенный код по стандарту ISO 639-1 (например, zh); дополнительный четырехзначный буквенный код по стандарту ISO 15924 (например, Hans); дополнительный двузначный код страны по стандарту ISO 3166-1 (например, CN). Пример: zh-Hans-CN. Здесь zh — китайский язык, Hans — Hànyǔ Simplified (ханьюй упрощенный), а CN указывает на вариант китайского языка, используемый в КНР. Библиотека ICU (англ. International Components for Unicode, «международные компоненты для стандарта Unicode»): запрашивает у операционной системы, какую культуру использовать; распознает нужное направление текста; выполняет анализ внутренних ограничений в тексте (например, перенос строк). Объектами локализации в Unreal могут быть текст (собственно текст и шрифт), текстуры, аудио- и видеофайлы, кат-сцены, порядок следования сцен, анимация. Интерфейс локализации в Unreal представлен «панелью локализации» — Localization Dashboard. Единицей локализации служат Localization Targets — модули, содержащие локализационные данные. Они содержат текст из указанных источников, хранятся в файле манифеста и переводятся в архивных файлах для каждой культуры. Модули собираются в файлы ресурсов локализации для каждой культуры, которые и отображаются игрой. Принцип локализации выглядит примерно так: Да, как и в Unity, локализация здесь — дело непростое. Типовой порядок локализации в Unreal: Добавляем в проект очередной текстовый элемент (кнопка с надписью, плашка и т. п.). Добавляем в проект список культур, для которых будет выполняться локализация (en-US, ru-RU и т. п.). Собираем локализуемые текстовые элементы в систему локализации. Для каждого текстового элемента интерфейса в Unreal создается объект FText. FText — не просто строка с текстом. Этот объект имеет специальную структуру, поддерживающую смену культуры на ходу. При создании FText и установке параметра «Localizable» = «Yes» (по умолчанию) текстовому элементу присваивается ключ вида «9567B129548DD2468752BA0F5». Этот ключ служит для идентификации текстового элемента при локализации. Система локализации Unreal составляет список локализуемых объектов FText этого проекта. Экспортируем локализуемые элементы интерфейса в виде файлов формата .po, переводим их и импортируем обратно. А как в Unreal обстоят дела с визуальными эффектами текста? В 2019 году движок получил плагин Text 3D, с помощью которого можно создавать вот такие шедевры: Text 3D поддерживает такие настройки шрифта, как объемные тени, фаски, скругления символов, изменение расстояния между символами, словами и строками, сохранение пропорций при изменении масштаба, выравнивание текста по горизонтали и вертикали, применение различных шрифтов, создание побуквенной анимации, изменение анимированного текста прямо во время игры и многое другое. Смущает лишь одно: по состоянию на 2022 год Text 3D еще находится в стадии бета-тестирования, и неизвестно, какие из его возможностей доживут до финальной версии. Если вам интересны особенности работы с текстом в других игровых движках, напишите нам, и мы подготовим обзор инструментов.  Translator