Локализация

WME поддерживает локализацию (т. е. возможность перевода Вашей игры на различные языки), основываясь при этом на двух принципах: текстовые таблицы и пакеты.

Текстовая таблица

Текстовая таблица - это файл, который в идеале должен содержать все локализованные тексты в игре, такие как заголовки, субтитры речи, метки графического интерфейса и др. Текстовая таблица имеет следующий формат:

Каждая строка таблицы содержит одно определение, состоящее из уникального идентификатора, локализованного текста и символа табуляции между ними. Например:

SYSENG0001	Game settings
SYSENG0002	Display
SYSENG0003	Sound
SYSENG0004	Use hardware acceleration
SYSENG0005	Display device:
SYSENG0006	Colors:
SYSENG0007	Run in window
Теперь все тексты, используемые в игре, должны быть записаны в специальном формате, подобном следующему:

/syseng0001/Game settings

Во время игры движок извлекает идентификатор и его текст. Затем он ищет строку с таким же идентификатором в текстовой таблице, и если находит, то заменяет оригинальный текст найденным. Таким образом, Вы можете записывать тексты на оригинальном языке непосредственно в сценариях (и др. файлах), а они в свою очередь будут заменяться на тексты соответствующего языка, если будет найдена текстовая таблица.

В большинстве случаев строки, записанные в этом формате, автоматически заменяются на локализованные версии (например, когда вызывается метод Talk(), Вы можете передать ему текст в этом формате и персонаж произнесёт переведённую фразу). Но иногда бывает необходимо программно перевести текст. Для этого воспользуйтесь методом Game.ExpandString(), который в качестве аргумента принимает оригинальный текст и возвращает его локализованную версию.

Для автоматической генерации текстовых таблиц из файлов проекта воспользуйтесь утилитой String Table Manager.

Ссылка из одной строки текстовой таблицы на другую

Строки в текстовой таблице могут ссылаться друг на друга. Это может пригодиться когда Вам нужно записать несколько строк с одним и тем же текстом. В этом случае нужно записать строки следующим образом:

SYSENG0001	Game settings
SYSENG0008 /SYSENG0001/

Обе строки SYSENG0001 и SYSENG0008 содержат теперь один и тот же текст Game settings, и переводчику нужно отредактировать его лишь один раз.

Автоматический перевод речевых файлов

Уникальные идентификаторы строк также используются для автоматической локализации речевых файлов. По умолчанию WME ищет их в папке speech, но Вы можете задать другую директорию с помощью метода Game.AddSpeechDir().

К примеру, если Ваша текстовая таблица содержит строку:

STR0123 Hi, I'm Bob. How are you?

Соответствующий ей звуковой файл должен называться str0123.ogg. Если Вы скопируете его в папку speech, WME воспроизведёт его автоматически, когда эта строка будет обработана командой Talk().

Поддержка юникода

Текстовые таблицы не ограничены стандратной ASCII-кодировкой, они могут содержать символы Юникода в формате UTF8. Таким образом, Вы можете осуществить перевод игры на любой язык, в том числе и на азиатские языки с двухбайтовыми символами. Есть несколько условий для использования UTF8-кодировки в текстовых таблицах:

Следует отметить, что WME не поддерживает файлы Юникод, а только файлы, сохранённые в формате UTF8.

Поддержка языков с написанием справа-налево

Чтобы включить её (для арабского или еврейского языков) используйте атрибут Game.TextRTL. Вам необходимо будет использовать шрифты TrueType. К сожалению, Вы не сможете использовать этот атрибут для поддержки языков с написанием справа-налево в окне настроек движка перед запуском игры, т. к. оно отображается раньше, чем может быть выполнен какой-либо сценарий. Тем не менее, поддержку таких языков можно включить непосредственно в текстовой таблице. Для этого добавьте в неё следующую инструкцию:

@right-to-left

 

Языковые пакеты

Локализация не ограничивается текстом. Локализованная версия игры может включать в себя различные шрифты (использующие разные кодировки), может понадобиться изменить часть графики или звуковые файлы. Для этой цели WME позволяет Вам разделять ресурсы игры на несколько пакетов. Вы можете поместить все изменённые для локализации ресурсы в отдельный пакет и работать над ним не изменяя другие ресурсы игры. Читайте об этом подробнее в разделе Пакеты и файловая система.