Система переводов - TrueCat17/Ren-Engine GitHub Wiki
В Ren-Engine поддерживается система переводов из Ren'Py, но с некоторыми отличиями.
Например, язык по умолчанию напрямую устанавливается в файле resources/mods/common/config.rpy
:
init python:
config.default_language = "english"
В то время как в Ren'Py это просто None
.
Это сделано для того, чтобы моды (особенно моды-утилиты вроде РПГ-редактора),
которые используются в разных играх на разных языках, всегда имели корректный перевод.
Для этого нужно обязательно знать название текущего языка, тогда как значение None
в этом случае просто бесполезно.
Так его можно переключиться, например, на французский:
renpy.change_language('french')
Для action
в ScreenLang можно использовать Language
:
textbutton 'French' action Language('french')
При смене языка посылается сигнал 'language'
.
Узнать текущий язык можно по значению config.language
(после строк выше это будет 'french'
).
Перевод доступен после инициализации (т. е. использовать в init
-блоках не получится).
Это сделано из-за того, что язык может быть изменён после инициализации.
Варианты внутриигрового меню и имена персонажей переводятся автоматически.
Пример создания переводов:
translate french strings:
old "Оригинальный текст"
new "Texte original"
old "Робеспьер"
new "Robespierre"
old "Гражданин"
new "Citoyen"
Примеры использования:
text _('Оригинальный текст')
rp = Character('Робеспьер', unknown_name = 'Гражданин', color = 0xFF0000)
Файлы переводы сценария для вашей игры можно сгенерировать в лаунчере.
Работает это следующим образом.
Есть сценарий:
label start:
# ...
me "Some Text."
# ...
Для перевода этой строки вычисляется md5 от
(персонаж + пробел + текст + переносы строки), т. е. от me "Some Text."\r\n
, т. е. e6deb2859c7681092056b6b84fd149d2
,
от него берутся первые 8 символов e6deb285
.
Спереди к этому добавляется название текущей метки и подчёркивание, в итоге получается start_e6deb285
.
Если существует перевод вроде такого:
translate french start_e6deb285:
me "Un texte."
То вместо Some Text.
будет выведен переведённый вариант.
Кстати, приведённый выше код является полноценной меткой (label
),
так что в нём можно использовать также питон, условия, изображения и т. д.
Или же можно разбить текст на несколько частей.
Как можно заметить, создание перевода сценария не требует правки этого сценария.
Однако, если сценарий будет изменён, то и перевод должен быть обновлён.
Обычно мод содержит файл name
, в котором написано его название.
Для перевода в конец этого файла следует добавить строку вида lang = name
, например:
russian = РПГ редактор
Удалять первую строку (без указания языка) не следует, она используется как вариант по умолчанию, если перевод на текущий язык не будет найден.
Количество строк в этом файле не ограничено.