Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Переводим игру

Переводим игру 8 года 10 мес. назад #89956

  • Iren_Rin
  • Iren_Rin аватар
  • Вне сайта
  • Мастер
  • Сообщений: 247
  • Спасибо получено: 537
  • Проект месяца 1 местоУчительПрограммист RubyКоммерсантПроект года 1 место
Всем привет. Недавно я расшарил свой скрипт для локализации проекта, однако описание получилось достаточно сложным. Так что всех кому интересно приглашаю прочитать эту тему, где я покажу как использовать этот скрипт. И так, начнем.

Установка
Скачиваем и вставляем в скрипты сам скрипт для переводов, не будем замарачиваться с гемом. Так же, чтобы не париться с длиною строк скачиваем и устанавливаем скрипт Word wrapping.

Выбор языка
После установки скрипта в главном меню появится новый пункт, где можно выбрать язык для игры. Язык можно сменить в любой момент.

Перевод команды show message
Добавим новый эвент, в нем сделаем команду show message. Однако вместо самого текста вставим туда вот такую конструкцию “t questions.cup_of_tea”
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Теперь, если мы запустим игру и активируем эвент - мы получим ошибку, что перевод не найден. Нужно добавить в словари пару новых предложений. Сами словари в скрипте находятся тут. Мы можем добавить переводы прямо туда, однако это не самая лучшая идея, т.к. если версия скрипта изменится, то нам придется вырезать свои добавления и вставлять их в новый скрипт. Гораздо лучше завести отдельные страницы, куда мы и добавим свои предложения. Так и сделаем - заведем две новые страницы для английского и русского языков:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

И добавим туда следующий скрипты
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Не трудно догадаться как мы сделали ключ для выражения “t questions.cup_of_tea” объединили ключи в словаре через точку.

Перевод команды show choices.
Примерно так же переводится и show choices - вместо текста вставляем в поля “t common.yes” и “t common.no”
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

И добавляем переводы
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Диалоги
Вместо хэшей для последовательных текстов удобно использовать массивы. Расширим наш эвент вот так
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Вместо последней строки мы использовали индекс текста в массиве, увеличенный на единицу. Зачем увеличение? Из-за принятой в мейкере политики начала нумерации с единицы (не охота в переводах отводить в каждом массиве первый элемент под nil).
Теперь расширим наши словари (не удивляйтесь русскому тексту - взял его с новостного портала):
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Обратите внимание что благодаря word wrapping мы можем не парится о ширине текста. А перебор по высоте текста мейкер “разрулит” сам - перенесет лишний текст на следующую страницу.

Навыки
Таким же образом переводятся и база данных - везде вместо русского текста вставляем ключ на перевод, при вызове соответствующего метода скрипт заменит его текст из словаря. Для навыков можно указать три вещи под перевод:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

И расширим словари:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Актеры
Точно так же можно перевести к примеру и актеров. Давайте изменим Эрика
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Переводим скрипты
Часто скрипты добавляют текст для отображения, такой текст тоже стоит перевести. По аналогии вместо вывода текста мы вызываем метод t и ему передаем ключ для перевода, как аргумент. Сделаем новую страницу в скриптах и добавим туда простенький скрипт, который будет здороваться.
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

И расширим словари:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Теперь при вызове этого метода (например через run script в эвентах) мы увидим приветствие на нужном языке.
На этом я закончу свой небольшой гайд. В итоге словари у нас вышли такими:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Скачать демку можно здесь.
Последнее редактирование: 8 года 10 мес. назад от Iren_Rin.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: AnnTenna, DeadElf79, Ren310, Демий, Волчонок, Lipton, MaltonTheWarrior, MAHTUKOP, Sheo, Paranoid и еще 2 пользователей
Время создания страницы: 0.240 секунд