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 позволяет Вам разделять ресурсы игры на несколько пакетов. Вы можете поместить все изменённые для локализации ресурсы в отдельный пакет и работать над ним не изменяя другие ресурсы игры. Читайте об этом подробнее в разделе Пакеты и файловая система.