Система переводов - 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 = РПГ редактор

Удалять первую строку (без указания языка) не следует, она используется как вариант по умолчанию, если перевод на текущий язык не будет найден.
Количество строк в этом файле не ограничено.

⚠️ **GitHub.com Fallback** ⚠️