Мысли программиста о локализации игры

Приветствую! В продолжении рассказа о том как я делаю коммерческую инди-игру публикую данный пост. Пост технический, местами банален, но всё-таки он результат моего продолжительного размышления на тему "как локализовать игру на X языков с минимальными затратами".

Первый пост, который описывает проект над которым я работаю, лежит вот тут:

Заметки кудесника джойстика об игроразработческом деле. Часть вводная

Итак, с самого начала я решил, что игра должна быть локализована на несколько языков. Очень не хотелось заниматься копанием кода под каждую локаль, перекомпилировать его и тем более отлавливать баги, появление которых неизбежно. Решил, что лучшее решение — это выделение всех локализуемых ресурсов во внешние файлы (банально, правда? :)).

Все текстыхранятся в XML-документе, который имеет примерно следующую структуру:


<section name="main_menu">
  <text id="start">Start Game</text>
  <text id="load">Load Game</text>
  <text id="options">Options</text>
  <text id="exit">Exit</text>
</section>
<section name="stat">
  <text id="strength">Strength</text>
  <text id="dexterity">Dexterity</text>
  <text id="speed">Speed</text>
</section>

Здесь две секции с именами main_menu и stat. Эти секции содержат элементы text с аттрибутом id и непосредственно текстом, который должен отоброжаться в игре. Суть в том, что где-то в коде игры, когда нужно вывести на экран надпись, например, 'Load Game', вместо того, чтобы писать эту строку в коде, мы делаем ссылку на элемент text с аттрибутом id = 'load' из секции main_menu.

То есть мы создали словарь. id — это то, что будет запрашивать код игры, взамен получая строку, которая соответствует этому id.

Теперь, если мы заходим перевести игру, например, на русский, то нужно отредактировать наш словарь:

<section name="main_menu">
  <text id="start">Начать игру</text>
  <text id="load">Загрузить игры</text>
  <text id="options">Настройки</text>
  <text id="exit">Выход</text>
</section>
<section name="stat">
  <text id="strength">Сила</text>
  <text id="dexterity">Ловкость</text>
  <text id="speed">Скорость</text>
</section>

Приём прост, но, почему-то, мало кто его использует (а посмотрел я мнооого исходников игр).

Задумайтесь о локализации в самом начале разработки. Возможно, вам кажется, что игре ни к чему переводиться на другой язык, но ведь реализовать чтение словря наподобие описанного выше дело не долгое.

Поверьте, если уже к моменту релиза проекта вы захотите сделать его локализуемым — потратите много сил и времени, потому, что иногда чтобы сделать игру локализуемой нужно менять её архитектуру... А кто это любит? :))