Метки
Автор: ebe3a6c0 - Ответы: 59 - Просмотры: 10737
Создание перевода средствами RenPy
Итак, я тут решил разобраться в инструментах для перевода RenPy игр, дабы переводчикам не приходилось менять текст прямо в коде. В итоге самым простым вариантом для нахождения был выбран RenPy smile. Кроме того первая часть думаю подойдет и тем кто пишет код, который потом планирует переводить. В общем поехали.

I. Подготовка игры к переводу.
1. Тут нам понадобиться распакованная игра. Если это чья-то чужая игра то её распаковка может быть нарушением лицензии ;) ну и кроме того описания по распаковке в гугле есть, так что допустим игра ваша и она не запакована.
2. Сразу скажу: текст диалогов,  т.е. тот который говорит кто-то из персонажей, или просто текст идущий в label в "" просто без указания персонажа, а также варианты выбора/ответов выдающиеся через menu -  вытягивается нормально и с ним ничего делать не надо.
3. Текст же выводящийся через функцию text, либо задающийся в переменных как в блоке init, так и в блоках python (если конечно его нужно перевести), следует выделить конструкцией _()
т.е. записи вида:
Код:
text "textA"
a = "textB"
func(c, "textC")
превращаются в:
Код:
text _("textA")
a = _("textB")
func(c, _("textC"))
В принципе расставив в коде всех .rpy файлов конструкцию _( ) вокруг строк не относящихся к диалогам, но требующим перевода, в код нам больше лезть не придется (ну как минимум до выхода новой версии).
upd. Также следуею отметить особенность работы RenPy со "строковыми значениями", ну т.е. текстом взятом в _() - в отличии от диалогового текста эти строки переводятся всегда одинаково и выносятся в файл перевода только один раз. Таким образом если _(идентичная строка) есть в нескольких оригинальных файлах - то в файлах перевода он будет только в одном месте!

II. Вытягивание строк для перевода.
Тут нам понадобится Ren'Py Launcher, с подготовленной в п. I. игрой.
Запускаем его, выбираем игру, и нажимаем пункт «Создать переводы» (p.s. в жизни бы не догадался…) как на рисунке:
[Изображение: https://preview.ibb.co/fsobka/r1.png]

Далее получаем окно:
[Изображение: https://preview.ibb.co/nfyLBF/r2.png]
Тут:
1. Пишем название перевода.
2. Ставим или убираем галочку «Generate empty strings for translations»:
- если галочка стоит: в местах для записи перевода будет пустое место, при частичном переводе будут пропуски.
- если галочка снята: в местах для записи перевода будет записан оригинальный текст, если строку пропустить то она просто будет на начальном языке.
3. Нажимаем пункт «Создать переводы» и ждем пока нам не напишут что все создано.

После этих действий в папке game игры создастся папка tl, а в ней в свою очередь папка с именем указанным как имя перевода. В самой же папке будут .rpy файлы с именами соответствующими оригинальным файлам игры и с текстом для перевода в виде:
Для текстов диалога:
[Изображение: https://preview.ibb.co/gAiWJv/r3a.png]
Или для строк помеченных в п I, а также для пунктов выбора заданных в menu:
[Изображение: https://preview.ibb.co/dhAp5a/r3b.png]
тут:
1. Примечание с местом расположения текста.
2. Ключевое обозначения ренпая для теста.
3. Примечание с оригинальным текстом.
4. Текст который нужно заменить на переведенный (при установленной ранее галочке «Generate empty strings for translations» тут вместо текста будет просто "").

III. Обновление перевода.
Так как полностью готовая игра попадается не часто, то возникает вопрос по дополнению перевода с выходом новой версии. Для этого:
- подготавливаем игру по пункту I.
- копируем в папку game новой версии папку tl с подготовленным ранее переводом.
- запускаем лаунчер, жмем «Создать переводы» с теми же настройками что ранее.
- ждем и получаем новый текст в файлах ниже предыдущего, типа:
[Изображение: https://preview.ibb.co/e8phQa/r4.png]

VI. Применение перевода.
Теперь, когда у нас (допустим) переведен текст еще нужно дать понять игре что выводить нужно не оригинал, а именно перевод.
Для этого в папке game или, что бы не потерять, в папке tl создаем файл с любым именем и расширением .rpy (к примеру options_Ru_lang.rpy), и пишем в нем
Код:
init -55 :
   define config.language = "Ru"
во второй строке обязателен отступ в 4 пробела.
"Ru" – тут указано название языка, которое было указано в окне «Создать переводы». (Если есть желание вернуть родной язык но не удалять папку с переводом, то можно его заменить на "None").

Все, перевод готов, теперь для его передачи достаточно скинуть папку tl (с файлом описанным выше).
При этом тому кто принимает перевод не нужно не только редактировать исходный код по пункту I, но и даже распаковывать игру – все подхватится и без этого)


П.С. да, еще возможен вопрос с заменой картинок, для этого их просто нужно кинуть в \game\tl\[имя перевода]\[оригинальный путь и название]. К примеру \game\tl\Ru\images\backgrounds\menu_quickmenu.jpg