Войти на сайт
×
ТЕМА: Переводим игру
Переводим игру 8 года 10 мес. назад #89956
|
Всем привет. Недавно я расшарил свой скрипт для локализации проекта, однако описание получилось достаточно сложным. Так что всех кому интересно приглашаю прочитать эту тему, где я покажу как использовать этот скрипт. И так, начнем.
Установка Скачиваем и вставляем в скрипты сам скрипт для переводов, не будем замарачиваться с гемом. Так же, чтобы не париться с длиною строк скачиваем и устанавливаем скрипт Word wrapping. Выбор языка После установки скрипта в главном меню появится новый пункт, где можно выбрать язык для игры. Язык можно сменить в любой момент. Перевод команды show message Добавим новый эвент, в нем сделаем команду show message. Однако вместо самого текста вставим туда вот такую конструкцию “t questions.cup_of_tea” Теперь, если мы запустим игру и активируем эвент - мы получим ошибку, что перевод не найден. Нужно добавить в словари пару новых предложений. Сами словари в скрипте находятся тут. Мы можем добавить переводы прямо туда, однако это не самая лучшая идея, т.к. если версия скрипта изменится, то нам придется вырезать свои добавления и вставлять их в новый скрипт. Гораздо лучше завести отдельные страницы, куда мы и добавим свои предложения. Так и сделаем - заведем две новые страницы для английского и русского языков: И добавим туда следующий скрипты ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] #Русская локаль
I18n.add_to_locale :ru, {
questions: {
cup_of_tea: 'Не желаешь ли чашочку чая?'
}
}
#Английская локаль
I18n.add_to_locale :en, {
questions: {
cup_of_tea: 'Would you like a cup of tea?'
}
} Не трудно догадаться как мы сделали ключ для выражения “t questions.cup_of_tea” объединили ключи в словаре через точку. Перевод команды show choices. Примерно так же переводится и show choices - вместо текста вставляем в поля “t common.yes” и “t common.no” И добавляем переводы ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] #Русская локаль
I18n.add_to_locale :ru, {
...
common: {
yes: 'Да',
no: 'Нет'
}
}
#Английская локаль
I18n.add_to_locale :en, {
…
common: {
yes: 'Yes',
no: 'No'
}
} Диалоги Вместо хэшей для последовательных текстов удобно использовать массивы. Расширим наш эвент вот так Вместо последней строки мы использовали индекс текста в массиве, увеличенный на единицу. Зачем увеличение? Из-за принятой в мейкере политики начала нумерации с единицы (не охота в переводах отводить в каждом массиве первый элемент под nil). Теперь расширим наши словари (не удивляйтесь русскому тексту - взял его с новостного портала): ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] #Русская локаль
I18n.add_to_locale :ru, {
...
dialog: [
'Патриарх и папа римский надеются, что их встреча вдохновит христиан всего мира на молитву о полном единстве церквей',
'Патриарх Кирилл и папа римский Франциск считают, что уния вредит восстановлению единства церквей, говорится в декларации',
'Они считают, что православные и греко-католики нуждаются в примирении и нахождении взаимоприемлемых форм сосуществования.'
]
}
#Английская локаль
I18n.add_to_locale :en, {
…
dialog: [
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
],
} Обратите внимание что благодаря word wrapping мы можем не парится о ширине текста. А перебор по высоте текста мейкер “разрулит” сам - перенесет лишний текст на следующую страницу. Навыки Таким же образом переводятся и база данных - везде вместо русского текста вставляем ключ на перевод, при вызове соответствующего метода скрипт заменит его текст из словаря. Для навыков можно указать три вещи под перевод: И расширим словари: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] #Русская локаль
I18n.add_to_locale :ru, {
…
skills: {
shock: 'Шок'
},
skill_descriptions: {
shock: 'Мощный эллектрический разряд'
},
shortcuts: {
shock: 'использует шок'
}
}
#Английская локаль
I18n.add_to_locale :en, {
…
skills: {
shock: 'Shock'
},
skill_descriptions: {
shock: 'Powerfull electrical hit'
},
shortcuts: {
shock: 'Uses shock!'
}
} Актеры Точно так же можно перевести к примеру и актеров. Давайте изменим Эрика ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] #Русская локаль
I18n.add_to_locale :ru, {
…
names: {
eric: 'Эрик'
},
nicknames: {
eric: 'Серебряный жнец'
},
actor_descriptions: {
eric: 'Ветеран тысячи битв.'
}
}
#Английская локаль
I18n.add_to_locale :en, {
…
names: {
eric: 'Eric',
},
nicknames: {
eric: 'Silver reaper'
},
actor_descriptions: {
eric: 'A veteran warrior who fought on many battlefields. He becomes uncontrollable in battle when berserk.'
}
} Переводим скрипты Часто скрипты добавляют текст для отображения, такой текст тоже стоит перевести. По аналогии вместо вывода текста мы вызываем метод t и ему передаем ключ для перевода, как аргумент. Сделаем новую страницу в скриптах и добавим туда простенький скрипт, который будет здороваться. ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] def say
$game_message.add t('hello')
end И расширим словари: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] #Русская локаль
I18n.add_to_locale :ru, {
hello: 'Привет'
}
#Английская локаль
I18n.add_to_locale :en, {
…
hello: 'Hello'
} Теперь при вызове этого метода (например через run script в эвентах) мы увидим приветствие на нужном языке. На этом я закончу свой небольшой гайд. В итоге словари у нас вышли такими: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] #Русская локаль
I18n.add_to_locale :ru, {
questions: {
cup_of_tea: 'Не желаешь ли чашочку чая?'
},
common: {
yes: 'Да',
no: 'Нет'
},
dialog: [
'Патриарх и папа римский надеются, что их встреча вдохновит христиан всего мира на молитву о полном единстве церквей',
'Патриарх Кирилл и папа римский Франциск считают, что уния вредит восстановлению единства церквей, говорится в декларации',
'Они считают, что православные и греко-католики нуждаются в примирении и нахождении взаимоприемлемых форм сосуществования.'
],
skills: {
shock: 'Шок'
},
skill_descriptions: {
shock: 'Мощный эллектрический разряд'
},
shortcuts: {
shock: 'использует шок'
},
names: {
eric: 'Эрик'
},
nicknames: {
eric: 'Серебряный жнец'
},
actor_descriptions: {
eric: 'Ветеран тысячи битв.'
},
hello: 'Привет'
}
#Английская локаль
I18n.add_to_locale :en, {
questions: {
cup_of_tea: 'Would you like a cup of tea?'
},
common: {
yes: 'Yes',
no: 'No'
},
dialog: [
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
],
skills: {
shock: 'Shock'
},
skill_descriptions: {
shock: 'Powerfull electrical hit'
},
shortcuts: {
shock: 'Uses shock!'
},
names: {
eric: 'Eric',
},
nicknames: {
eric: 'Silver reaper'
},
actor_descriptions: {
eric: 'A veteran warrior who fought on many battlefields. He becomes uncontrollable in battle when berserk.'
},
hello: 'Hello'
}
Скачать демку можно здесь. |
Последнее редактирование: 8 года 10 мес. назад от Iren_Rin.
Администратор запретил публиковать записи гостям.
|
Время создания страницы: 0.240 секунд