summaryrefslogtreecommitdiff
path: root/game
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2023-07-08 18:38:05 -0300
committerJesusaves <cpntb1@ymail.com>2023-07-08 18:38:05 -0300
commit094f7b28a4f1dee9dc3f94f72019f18bf3c4a62a (patch)
tree6a76c04b13db60106f66893e0bef765bc34b867b /game
parentd3e9eda493341c6a7816c5f9c3cf96e086c4a292 (diff)
downloadrenpy-094f7b28a4f1dee9dc3f94f72019f18bf3c4a62a.tar.gz
renpy-094f7b28a4f1dee9dc3f94f72019f18bf3c4a62a.tar.bz2
renpy-094f7b28a4f1dee9dc3f94f72019f18bf3c4a62a.tar.xz
renpy-094f7b28a4f1dee9dc3f94f72019f18bf3c4a62a.zip
Add support for Russian, as it is now a language officially supported by ML
Diffstat (limited to 'game')
-rw-r--r--game/screens.rpy1
-rw-r--r--game/tl/ru/client.rpy36
-rw-r--r--game/tl/ru/common.rpy984
-rw-r--r--game/tl/ru/mirrorlake.rpy36
-rw-r--r--game/tl/ru/options.rpy16
-rw-r--r--game/tl/ru/renpy.rpy26
-rw-r--r--game/tl/ru/screens.rpy276
-rw-r--r--game/tl/ru/soul.rpy372
-rw-r--r--game/tl/ru/update.rpy108
-rw-r--r--game/tl/ru/vault.rpy24
-rw-r--r--game/tl/ru/wiki.rpy8
11 files changed, 1887 insertions, 0 deletions
diff --git a/game/screens.rpy b/game/screens.rpy
index 290f11d..20855bb 100644
--- a/game/screens.rpy
+++ b/game/screens.rpy
@@ -710,6 +710,7 @@ screen preferences():
textbutton "Deutsch" action Language("de")
textbutton "Español" action Language("es")
#textbutton "Italiano" action Language("it")
+ #textbutton "Русский" action Language("ru")
null height 10
if persistent.hello is not None:
null height 20
diff --git a/game/tl/ru/client.rpy b/game/tl/ru/client.rpy
new file mode 100644
index 0000000..412d53c
--- /dev/null
+++ b/game/tl/ru/client.rpy
@@ -0,0 +1,36 @@
+# TODO: Translation updated at 2023-07-08 18:36
+
+translate ru strings:
+
+ # game/client.rpy:73
+ old "Requesting credentials from Vault..."
+ new "Запрос учетных данных из Хранилища..."
+
+ # game/client.rpy:87
+ old "You're not logged in."
+ new "Вы не вошли в систему."
+
+ # game/client.rpy:93
+ old "Rate limited, we'll try again..."
+ new "Большое количество запросов, попробуем снова..."
+
+ # game/client.rpy:108
+ old "TMW Vault Error."
+ new "Ошибка Хранилища TMV."
+
+ # game/client.rpy:124
+ old "You can minimize this window now.\n\nWorld selection list will be shown once you quit the current world."
+ new "You can minimize this window now.\n\nWorld selection list will be shown once you quit the current world."
+
+ # game/client.rpy:158
+ old "Synchronizing data..."
+ new "Синхронизация данных..."
+
+ # game/client.rpy:181
+ old "Synchronization error."
+ new "Ошибка Синхронизации."
+
+ # game/client.rpy:205
+ old "Thanks for playing!"
+ new "Спасибо за игру!"
+
diff --git a/game/tl/ru/common.rpy b/game/tl/ru/common.rpy
new file mode 100644
index 0000000..76f28d6
--- /dev/null
+++ b/game/tl/ru/common.rpy
@@ -0,0 +1,984 @@
+# TODO: Translation updated at 2023-07-08 18:36
+
+translate ru strings:
+
+ # renpy/common/00accessibility.rpy:28
+ old "Self-voicing disabled."
+ new "Self-voicing disabled."
+
+ # renpy/common/00accessibility.rpy:29
+ old "Clipboard voicing enabled. "
+ new "Clipboard voicing enabled. "
+
+ # renpy/common/00accessibility.rpy:30
+ old "Self-voicing enabled. "
+ new "Self-voicing enabled. "
+
+ # renpy/common/00accessibility.rpy:32
+ old "bar"
+ new "bar"
+
+ # renpy/common/00accessibility.rpy:33
+ old "selected"
+ new "selected"
+
+ # renpy/common/00accessibility.rpy:34
+ old "viewport"
+ new "viewport"
+
+ # renpy/common/00accessibility.rpy:35
+ old "horizontal scroll"
+ new "horizontal scroll"
+
+ # renpy/common/00accessibility.rpy:36
+ old "vertical scroll"
+ new "vertical scroll"
+
+ # renpy/common/00accessibility.rpy:37
+ old "activate"
+ new "ativar"
+
+ # renpy/common/00accessibility.rpy:38
+ old "deactivate"
+ new "desativar"
+
+ # renpy/common/00accessibility.rpy:39
+ old "increase"
+ new "aumentar"
+
+ # renpy/common/00accessibility.rpy:40
+ old "decrease"
+ new "diminuir"
+
+ # renpy/common/00accessibility.rpy:138
+ old "Font Override"
+ new "Sobreescrever Fonte"
+
+ # renpy/common/00accessibility.rpy:142
+ old "Default"
+ new "Padrão"
+
+ # renpy/common/00accessibility.rpy:146
+ old "DejaVu Sans"
+ new "DejaVu Sans"
+
+ # renpy/common/00accessibility.rpy:150
+ old "Opendyslexic"
+ new "Opendyslexic"
+
+ # renpy/common/00accessibility.rpy:156
+ old "Text Size Scaling"
+ new "Escalar Texto"
+
+ # renpy/common/00accessibility.rpy:162
+ old "Reset"
+ new "Restabelecer"
+
+ # renpy/common/00accessibility.rpy:168
+ old "Line Spacing Scaling"
+ new "Escalar Espaçamento de Linhas"
+
+ # renpy/common/00accessibility.rpy:180
+ old "High Contrast Text"
+ new "High Contrast Text"
+
+ # renpy/common/00accessibility.rpy:182
+ old "Enable"
+ new "Habilitar"
+
+ # renpy/common/00accessibility.rpy:186
+ old "Disable"
+ new "Desabilitar"
+
+ # renpy/common/00accessibility.rpy:193
+ old "Self-Voicing"
+ new "Self-Voicing"
+
+ # renpy/common/00accessibility.rpy:197
+ old "Off"
+ new "Off"
+
+ # renpy/common/00accessibility.rpy:201
+ old "Text-to-speech"
+ new "Texto-para-voz"
+
+ # renpy/common/00accessibility.rpy:205
+ old "Clipboard"
+ new "Clipboard"
+
+ # renpy/common/00accessibility.rpy:209
+ old "Debug"
+ new "Depurar"
+
+ # renpy/common/00accessibility.rpy:215
+ old "Self-Voicing Volume Drop"
+ new "Self-Voicing Volume Drop"
+
+ # renpy/common/00accessibility.rpy:224
+ old "The options on this menu are intended to improve accessibility. They may not work with all games, and some combinations of options may render the game unplayable. This is not an issue with the game or engine. For the best results when changing fonts, try to keep the text size the same as it originally was."
+ new "As opções nesse menu são para melhorar a acessibilidade. Elas podem não funcionar e algumas combinações podem comprometer o aplicativo. Use por sua conta em risco. Para melhores resultados quando alterando as fontes, tente manter o tamanho de texto original."
+
+ # renpy/common/00action_file.rpy:26
+ old "{#weekday}Monday"
+ new "{#weekday}Понедельник"
+
+ # renpy/common/00action_file.rpy:26
+ old "{#weekday}Tuesday"
+ new "{#weekday}Вторник"
+
+ # renpy/common/00action_file.rpy:26
+ old "{#weekday}Wednesday"
+ new "{#weekday}Среда"
+
+ # renpy/common/00action_file.rpy:26
+ old "{#weekday}Thursday"
+ new "{#weekday}Четверг"
+
+ # renpy/common/00action_file.rpy:26
+ old "{#weekday}Friday"
+ new "{#weekday}Пятница"
+
+ # renpy/common/00action_file.rpy:26
+ old "{#weekday}Saturday"
+ new "{#weekday}Суббота"
+
+ # renpy/common/00action_file.rpy:26
+ old "{#weekday}Sunday"
+ new "{#weekday}Воскресенье"
+
+ # renpy/common/00action_file.rpy:37
+ old "{#weekday_short}Mon"
+ new "{#weekday_short}Пн"
+
+ # renpy/common/00action_file.rpy:37
+ old "{#weekday_short}Tue"
+ new "{#weekday_short}Вт"
+
+ # renpy/common/00action_file.rpy:37
+ old "{#weekday_short}Wed"
+ new "{#weekday_short}Ср"
+
+ # renpy/common/00action_file.rpy:37
+ old "{#weekday_short}Thu"
+ new "{#weekday_short}Чт"
+
+ # renpy/common/00action_file.rpy:37
+ old "{#weekday_short}Fri"
+ new "{#weekday_short}Пт"
+
+ # renpy/common/00action_file.rpy:37
+ old "{#weekday_short}Sat"
+ new "{#weekday_short}Сб"
+
+ # renpy/common/00action_file.rpy:37
+ old "{#weekday_short}Sun"
+ new "{#weekday_short}Вс"
+
+ # renpy/common/00action_file.rpy:47
+ old "{#month}January"
+ new "{#month}Январь"
+
+ # renpy/common/00action_file.rpy:47
+ old "{#month}February"
+ new "{#month}Февраль"
+
+ # renpy/common/00action_file.rpy:47
+ old "{#month}March"
+ new "{#month}Март"
+
+ # renpy/common/00action_file.rpy:47
+ old "{#month}April"
+ new "{#month}Апрель"
+
+ # renpy/common/00action_file.rpy:47
+ old "{#month}May"
+ new "{#month}Май"
+
+ # renpy/common/00action_file.rpy:47
+ old "{#month}June"
+ new "{#month}Июнь"
+
+ # renpy/common/00action_file.rpy:47
+ old "{#month}July"
+ new "{#month}Июль"
+
+ # renpy/common/00action_file.rpy:47
+ old "{#month}August"
+ new "{#month}Август"
+
+ # renpy/common/00action_file.rpy:47
+ old "{#month}September"
+ new "{#month}Сентябрь"
+
+ # renpy/common/00action_file.rpy:47
+ old "{#month}October"
+ new "{#month}Октябрь"
+
+ # renpy/common/00action_file.rpy:47
+ old "{#month}November"
+ new "{#month}Ноябрь"
+
+ # renpy/common/00action_file.rpy:47
+ old "{#month}December"
+ new "{#month}Декабрь"
+
+ # renpy/common/00action_file.rpy:63
+ old "{#month_short}Jan"
+ new "{#month_short}Янв"
+
+ # renpy/common/00action_file.rpy:63
+ old "{#month_short}Feb"
+ new "{#month_short}Фев"
+
+ # renpy/common/00action_file.rpy:63
+ old "{#month_short}Mar"
+ new "{#month_short}Мар"
+
+ # renpy/common/00action_file.rpy:63
+ old "{#month_short}Apr"
+ new "{#month_short}Апр"
+
+ # renpy/common/00action_file.rpy:63
+ old "{#month_short}May"
+ new "{#month_short}Май"
+
+ # renpy/common/00action_file.rpy:63
+ old "{#month_short}Jun"
+ new "{#month_short}Июн"
+
+ # renpy/common/00action_file.rpy:63
+ old "{#month_short}Jul"
+ new "{#month_short}Июл"
+
+ # renpy/common/00action_file.rpy:63
+ old "{#month_short}Aug"
+ new "{#month_short}Авг"
+
+ # renpy/common/00action_file.rpy:63
+ old "{#month_short}Sep"
+ new "{#month_short}Сен"
+
+ # renpy/common/00action_file.rpy:63
+ old "{#month_short}Oct"
+ new "{#month_short}Окт"
+
+ # renpy/common/00action_file.rpy:63
+ old "{#month_short}Nov"
+ new "{#month_short}Ноя"
+
+ # renpy/common/00action_file.rpy:63
+ old "{#month_short}Dec"
+ new "{#month_short}Дек"
+
+ # renpy/common/00action_file.rpy:250
+ old "%b %d, %H:%M"
+ new "%b %d, %H:%M"
+
+ # renpy/common/00action_file.rpy:363
+ old "Save slot %s: [text]"
+ new "Save slot %s: [text]"
+
+ # renpy/common/00action_file.rpy:444
+ old "Load slot %s: [text]"
+ new "Load slot %s: [text]"
+
+ # renpy/common/00action_file.rpy:497
+ old "Delete slot [text]"
+ new "Delete slot [text]"
+
+ # renpy/common/00action_file.rpy:576
+ old "File page auto"
+ new "File page auto"
+
+ # renpy/common/00action_file.rpy:578
+ old "File page quick"
+ new "File page quick"
+
+ # renpy/common/00action_file.rpy:580
+ old "File page [text]"
+ new "File page [text]"
+
+ # renpy/common/00action_file.rpy:638
+ old "Page {}"
+ new "Page {}"
+
+ # renpy/common/00action_file.rpy:638
+ old "Automatic saves"
+ new "Automatic saves"
+
+ # renpy/common/00action_file.rpy:638
+ old "Quick saves"
+ new "Быстрые сохранения"
+
+ # renpy/common/00action_file.rpy:779
+ old "Next file page."
+ new "Next file page."
+
+ # renpy/common/00action_file.rpy:851
+ old "Previous file page."
+ new "Previous file page."
+
+ # renpy/common/00action_file.rpy:912
+ old "Quick save complete."
+ new "Быстрое сохранение завершено."
+
+ # renpy/common/00action_file.rpy:930
+ old "Quick save."
+ new "Быстрое сохранение."
+
+ # renpy/common/00action_file.rpy:949
+ old "Quick load."
+ new "Быстрая загрузка."
+
+ # renpy/common/00action_other.rpy:375
+ old "Language [text]"
+ new "Язык [text]"
+
+ # renpy/common/00director.rpy:708
+ old "The interactive director is not enabled here."
+ new "The interactive director is not enabled here."
+
+ # renpy/common/00director.rpy:1481
+ old "⬆"
+ new "⬆"
+
+ # renpy/common/00director.rpy:1487
+ old "⬇"
+ new "⬇"
+
+ # renpy/common/00director.rpy:1551
+ old "Done"
+ new "Готово"
+
+ # renpy/common/00director.rpy:1561
+ old "(statement)"
+ new "(statement)"
+
+ # renpy/common/00director.rpy:1562
+ old "(tag)"
+ new "(tag)"
+
+ # renpy/common/00director.rpy:1563
+ old "(attributes)"
+ new "(attributes)"
+
+ # renpy/common/00director.rpy:1564
+ old "(transform)"
+ new "(transform)"
+
+ # renpy/common/00director.rpy:1589
+ old "(transition)"
+ new "(transition)"
+
+ # renpy/common/00director.rpy:1601
+ old "(channel)"
+ new "(channel)"
+
+ # renpy/common/00director.rpy:1602
+ old "(filename)"
+ new "(filename)"
+
+ # renpy/common/00director.rpy:1631
+ old "Change"
+ new "Изменить"
+
+ # renpy/common/00director.rpy:1633
+ old "Add"
+ new "Добавить"
+
+ # renpy/common/00director.rpy:1636
+ old "Cancel"
+ new "Отмена"
+
+ # renpy/common/00director.rpy:1639
+ old "Remove"
+ new "Удалить"
+
+ # renpy/common/00director.rpy:1674
+ old "Statement:"
+ new "Statement:"
+
+ # renpy/common/00director.rpy:1695
+ old "Tag:"
+ new "Tag:"
+
+ # renpy/common/00director.rpy:1711
+ old "Attributes:"
+ new "Attributes:"
+
+ # renpy/common/00director.rpy:1729
+ old "Transforms:"
+ new "Transforms:"
+
+ # renpy/common/00director.rpy:1748
+ old "Behind:"
+ new "Behind:"
+
+ # renpy/common/00director.rpy:1767
+ old "Transition:"
+ new "Transition:"
+
+ # renpy/common/00director.rpy:1785
+ old "Channel:"
+ new "Channel:"
+
+ # renpy/common/00director.rpy:1803
+ old "Audio Filename:"
+ new "Audio Filename:"
+
+ # renpy/common/00gui.rpy:423
+ old "Are you sure?"
+ new "Вы уверены?"
+
+ # renpy/common/00gui.rpy:424
+ old "Are you sure you want to delete this save?"
+ new "Вы уверены, что хотите удалить это сохранение?"
+
+ # renpy/common/00gui.rpy:425
+ old "Are you sure you want to overwrite your save?"
+ new "Вы уверены, что хотите перезаписать своё сохранение?"
+
+ # renpy/common/00gui.rpy:426
+ old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
+ new "При загрузке будет потерян несохраненный прогресс.\nВы уверены, что хотите это сделать?"
+
+ # renpy/common/00gui.rpy:427
+ old "Are you sure you want to quit?"
+ new "Вы уверены, что хотите выйти?"
+
+ # renpy/common/00gui.rpy:428
+ old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
+ new "Вы уверены, что хотите вернуться в главное меню?\nЭто приведёт к потере несохраненного прогресса."
+
+ # renpy/common/00gui.rpy:429
+ old "Are you sure you want to end the replay?"
+ new "Are you sure you want to end the replay?"
+
+ # renpy/common/00gui.rpy:430
+ old "Are you sure you want to begin skipping?"
+ new "Are you sure you want to begin skipping?"
+
+ # renpy/common/00gui.rpy:431
+ old "Are you sure you want to skip to the next choice?"
+ new "Are you sure you want to skip to the next choice?"
+
+ # renpy/common/00gui.rpy:432
+ old "Are you sure you want to skip unseen dialogue to the next choice?"
+ new "Are you sure you want to skip unseen dialogue to the next choice?"
+
+ # renpy/common/00keymap.rpy:306
+ old "Failed to save screenshot as %s."
+ new "Falhou em salvar captura de tela como %s."
+
+ # renpy/common/00keymap.rpy:318
+ old "Saved screenshot as %s."
+ new "Captura de tela salva como %s."
+
+ # renpy/common/00library.rpy:195
+ old "Skip Mode"
+ new "Skip Mode"
+
+ # renpy/common/00library.rpy:281
+ old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
+ new "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
+
+ # renpy/common/00preferences.rpy:254
+ old "display"
+ new "display"
+
+ # renpy/common/00preferences.rpy:266
+ old "transitions"
+ new "transitions"
+
+ # renpy/common/00preferences.rpy:275
+ old "skip transitions"
+ new "skip transitions"
+
+ # renpy/common/00preferences.rpy:277
+ old "video sprites"
+ new "video sprites"
+
+ # renpy/common/00preferences.rpy:286
+ old "show empty window"
+ new "show empty window"
+
+ # renpy/common/00preferences.rpy:295
+ old "text speed"
+ new "text speed"
+
+ # renpy/common/00preferences.rpy:303
+ old "joystick"
+ new "joystick"
+
+ # renpy/common/00preferences.rpy:303
+ old "joystick..."
+ new "joystick..."
+
+ # renpy/common/00preferences.rpy:310
+ old "skip"
+ new "skip"
+
+ # renpy/common/00preferences.rpy:313
+ old "skip unseen [text]"
+ new "skip unseen [text]"
+
+ # renpy/common/00preferences.rpy:318
+ old "skip unseen text"
+ new "skip unseen text"
+
+ # renpy/common/00preferences.rpy:320
+ old "begin skipping"
+ new "begin skipping"
+
+ # renpy/common/00preferences.rpy:324
+ old "after choices"
+ new "after choices"
+
+ # renpy/common/00preferences.rpy:331
+ old "skip after choices"
+ new "skip after choices"
+
+ # renpy/common/00preferences.rpy:333
+ old "auto-forward time"
+ new "auto-forward time"
+
+ # renpy/common/00preferences.rpy:347
+ old "auto-forward"
+ new "auto-forward"
+
+ # renpy/common/00preferences.rpy:354
+ old "Auto forward"
+ new "Auto forward"
+
+ # renpy/common/00preferences.rpy:357
+ old "auto-forward after click"
+ new "auto-forward after click"
+
+ # renpy/common/00preferences.rpy:366
+ old "automatic move"
+ new "automatic move"
+
+ # renpy/common/00preferences.rpy:375
+ old "wait for voice"
+ new "wait for voice"
+
+ # renpy/common/00preferences.rpy:384
+ old "voice sustain"
+ new "voice sustain"
+
+ # renpy/common/00preferences.rpy:393
+ old "self voicing"
+ new "self voicing"
+
+ # renpy/common/00preferences.rpy:402
+ old "self voicing volume drop"
+ new "self voicing volume drop"
+
+ # renpy/common/00preferences.rpy:410
+ old "clipboard voicing"
+ new "clipboard voicing"
+
+ # renpy/common/00preferences.rpy:419
+ old "debug voicing"
+ new "debug voicing"
+
+ # renpy/common/00preferences.rpy:428
+ old "emphasize audio"
+ new "emphasize audio"
+
+ # renpy/common/00preferences.rpy:437
+ old "rollback side"
+ new "rollback side"
+
+ # renpy/common/00preferences.rpy:447
+ old "gl powersave"
+ new "gl powersave"
+
+ # renpy/common/00preferences.rpy:453
+ old "gl framerate"
+ new "gl framerate"
+
+ # renpy/common/00preferences.rpy:456
+ old "gl tearing"
+ new "gl tearing"
+
+ # renpy/common/00preferences.rpy:459
+ old "font transform"
+ new "font transform"
+
+ # renpy/common/00preferences.rpy:462
+ old "font size"
+ new "font size"
+
+ # renpy/common/00preferences.rpy:470
+ old "font line spacing"
+ new "font line spacing"
+
+ # renpy/common/00preferences.rpy:478
+ old "system cursor"
+ new "system cursor"
+
+ # renpy/common/00preferences.rpy:487
+ old "renderer menu"
+ new "renderer menu"
+
+ # renpy/common/00preferences.rpy:490
+ old "accessibility menu"
+ new "accessibility menu"
+
+ # renpy/common/00preferences.rpy:493
+ old "high contrast text"
+ new "high contrast text"
+
+ # renpy/common/00preferences.rpy:512
+ old "music volume"
+ new "music volume"
+
+ # renpy/common/00preferences.rpy:513
+ old "sound volume"
+ new "sound volume"
+
+ # renpy/common/00preferences.rpy:514
+ old "voice volume"
+ new "voice volume"
+
+ # renpy/common/00preferences.rpy:515
+ old "mute music"
+ new "mute music"
+
+ # renpy/common/00preferences.rpy:516
+ old "mute sound"
+ new "mute sound"
+
+ # renpy/common/00preferences.rpy:517
+ old "mute voice"
+ new "mute voice"
+
+ # renpy/common/00preferences.rpy:518
+ old "mute all"
+ new "mute all"
+
+ # renpy/common/00preferences.rpy:599
+ old "Clipboard voicing enabled. Press 'shift+C' to disable."
+ new "Clipboard voicing enabled. Press 'shift+C' to disable."
+
+ # renpy/common/00preferences.rpy:601
+ old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
+ new "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
+
+ # renpy/common/00preferences.rpy:603
+ old "Self-voicing enabled. Press 'v' to disable."
+ new "Self-voicing enabled. Press 'v' to disable."
+
+ # renpy/common/00iap.rpy:219
+ old "Contacting App Store\nPlease Wait..."
+ new "Contacting App Store\nPlease Wait..."
+
+ # renpy/common/00updater.rpy:391
+ old "The Ren'Py Updater is not supported on mobile devices."
+ new "The Ren'Py Updater is not supported on mobile devices."
+
+ # renpy/common/00updater.rpy:520
+ old "An error is being simulated."
+ new "An error is being simulated."
+
+ # renpy/common/00updater.rpy:704
+ old "Either this project does not support updating, or the update status file was deleted."
+ new "Either this project does not support updating, or the update status file was deleted."
+
+ # renpy/common/00updater.rpy:718
+ old "This account does not have permission to perform an update."
+ new "This account does not have permission to perform an update."
+
+ # renpy/common/00updater.rpy:721
+ old "This account does not have permission to write the update log."
+ new "This account does not have permission to write the update log."
+
+ # renpy/common/00updater.rpy:746
+ old "Could not verify update signature."
+ new "Could not verify update signature."
+
+ # renpy/common/00updater.rpy:1013
+ old "The update file was not downloaded."
+ new "The update file was not downloaded."
+
+ # renpy/common/00updater.rpy:1031
+ old "The update file does not have the correct digest - it may have been corrupted."
+ new "The update file does not have the correct digest - it may have been corrupted."
+
+ # renpy/common/00updater.rpy:1181
+ old "While unpacking {}, unknown type {}."
+ new "While unpacking {}, unknown type {}."
+
+ # renpy/common/00updater.rpy:1553
+ old "Updater"
+ new "Atualizador"
+
+ # renpy/common/00updater.rpy:1560
+ old "An error has occured:"
+ new "Um erro aconteceu:"
+
+ # renpy/common/00updater.rpy:1562
+ old "Checking for updates."
+ new "Buscando atualizações."
+
+ # renpy/common/00updater.rpy:1564
+ old "This program is up to date."
+ new "Este programa está atualizado."
+
+ # renpy/common/00updater.rpy:1566
+ old "[u.version] is available. Do you want to install it?"
+ new "[u.version] est disponible. Veux-tu l'installer?"
+
+ # renpy/common/00updater.rpy:1568
+ old "Preparing to download the updates."
+ new "Préparation du téléchargement des mises-à-jour."
+
+ # renpy/common/00updater.rpy:1570
+ old "Downloading the updates."
+ new "Téléchargement des mises-à-jour."
+
+ # renpy/common/00updater.rpy:1572
+ old "Unpacking the updates."
+ new "Unpacking the updates."
+
+ # renpy/common/00updater.rpy:1574
+ old "Finishing up."
+ new "Finishing up."
+
+ # renpy/common/00updater.rpy:1576
+ old "The updates have been installed. The program will restart."
+ new "Les mises-à-jour ont été installées. Le programme va redémarrer. "
+
+ # renpy/common/00updater.rpy:1578
+ old "The updates have been installed."
+ new "Les mises-à-jour ont été installées."
+
+ # renpy/common/00updater.rpy:1580
+ old "The updates were cancelled."
+ new "Les mises-à-jour ont été annulées."
+
+ # renpy/common/00updater.rpy:1595
+ old "Proceed"
+ new "Prosseguir"
+
+ # renpy/common/00gallery.rpy:590
+ old "Image [index] of [count] locked."
+ new "Image [index] of [count] locked."
+
+ # renpy/common/00gallery.rpy:610
+ old "prev"
+ new "prev"
+
+ # renpy/common/00gallery.rpy:611
+ old "next"
+ new "next"
+
+ # renpy/common/00gallery.rpy:612
+ old "slideshow"
+ new "slideshow"
+
+ # renpy/common/00gallery.rpy:613
+ old "return"
+ new "return"
+
+ # renpy/common/00gltest.rpy:89
+ old "Renderer"
+ new "Renderizador"
+
+ # renpy/common/00gltest.rpy:93
+ old "Automatically Choose"
+ new "Escolher Automaticamente"
+
+ # renpy/common/00gltest.rpy:100
+ old "Force GL Renderer"
+ new "Force GL Renderer"
+
+ # renpy/common/00gltest.rpy:105
+ old "Force ANGLE Renderer"
+ new "Force ANGLE Renderer"
+
+ # renpy/common/00gltest.rpy:110
+ old "Force GLES Renderer"
+ new "Force GLES Renderer"
+
+ # renpy/common/00gltest.rpy:116
+ old "Force GL2 Renderer"
+ new "Force GL2 Renderer"
+
+ # renpy/common/00gltest.rpy:121
+ old "Force ANGLE2 Renderer"
+ new "Force ANGLE2 Renderer"
+
+ # renpy/common/00gltest.rpy:126
+ old "Force GLES2 Renderer"
+ new "Force GLES2 Renderer"
+
+ # renpy/common/00gltest.rpy:136
+ old "Enable (No Blocklist)"
+ new "Enable (No Blocklist)"
+
+ # renpy/common/00gltest.rpy:159
+ old "Powersave"
+ new "Economia de Energia"
+
+ # renpy/common/00gltest.rpy:173
+ old "Framerate"
+ new "Taxa de Frames"
+
+ # renpy/common/00gltest.rpy:177
+ old "Screen"
+ new "Screen"
+
+ # renpy/common/00gltest.rpy:181
+ old "60"
+ new "60"
+
+ # renpy/common/00gltest.rpy:185
+ old "30"
+ new "30"
+
+ # renpy/common/00gltest.rpy:191
+ old "Tearing"
+ new "Tearing"
+
+ # renpy/common/00gltest.rpy:207
+ old "Changes will take effect the next time this program is run."
+ new "Изменения вступят в силу при следующем запуске этой программы."
+
+ # renpy/common/00gltest.rpy:242
+ old "Performance Warning"
+ new "Aviso de Performance"
+
+ # renpy/common/00gltest.rpy:247
+ old "This computer is using software rendering."
+ new "Этот компьютер использует программную отрисовку."
+
+ # renpy/common/00gltest.rpy:249
+ old "This game requires use of GL2 that can't be initialised."
+ new "Эта игра требует GL2, который не может быть инициализирован."
+
+ # renpy/common/00gltest.rpy:251
+ old "This computer has a problem displaying graphics: [problem]."
+ new "На этом компьютере возникли проблемы с отображением графики: [problem]."
+
+ # renpy/common/00gltest.rpy:255
+ old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
+ new "Его графические драйверы могут быть устаревшими или работать некорректно. Это может привести к медленному или некорректному отображению графики."
+
+ # renpy/common/00gltest.rpy:259
+ old "The {a=edit:1:log.txt}log.txt{/a} file may contain information to help you determine what is wrong with your computer."
+ new "Файл {a=edit:1:log.txt}log.txt{/a} может содержать информацию, которая поможет вам определить, что не так с вашим компьютером."
+
+ # renpy/common/00gltest.rpy:264
+ old "More details on how to fix this can be found in the {a=[url]}documentation{/a}."
+ new "Более подробную информацию о том, как это исправить, можно найти в разделе {a=[url]}документации{/a}."
+
+ # renpy/common/00gltest.rpy:269
+ old "Continue, Show this warning again"
+ new "Continue, Mostre esse aviso novamente."
+
+ # renpy/common/00gltest.rpy:273
+ old "Continue, Don't show warning again"
+ new "Continue, Não mostre esse aviso novamente."
+
+ # renpy/common/00gltest.rpy:281
+ old "Change render options"
+ new "Изменение параметров рендеринга"
+
+ # renpy/common/00gamepad.rpy:32
+ old "Select Gamepad to Calibrate"
+ new "Выберите геймпад для калибровки"
+
+ # renpy/common/00gamepad.rpy:35
+ old "No Gamepads Available"
+ new "Нет доступных геймпадов"
+
+ # renpy/common/00gamepad.rpy:54
+ old "Calibrating [name] ([i]/[total])"
+ new "Calibrating [name] ([i]/[total])"
+
+ # renpy/common/00gamepad.rpy:58
+ old "Press or move the '[control!s]' [kind]."
+ new "Press or move the '[control!s]' [kind]."
+
+ # renpy/common/00gamepad.rpy:68
+ old "Skip (A)"
+ new "Skip (A)"
+
+ # renpy/common/00gamepad.rpy:71
+ old "Back (B)"
+ new "Back (B)"
+
+ # renpy/common/_errorhandling.rpym:553
+ old "Open"
+ new "Открыть"
+
+ # renpy/common/_errorhandling.rpym:555
+ old "Opens the traceback.txt file in a text editor."
+ new "Abre o arquivo traceback.txt em um editor de texto."
+
+ # renpy/common/_errorhandling.rpym:557
+ old "Copy BBCode"
+ new "Copiar BBCode"
+
+ # renpy/common/_errorhandling.rpym:559
+ old "Copies the traceback.txt file to the clipboard as BBcode for forums like https://lemmasoft.renai.us/."
+ new "Copia o arquivo traceback.txt como BBCode para os Fóruns."
+
+ # renpy/common/_errorhandling.rpym:561
+ old "Copy Markdown"
+ new "Copiar Markdown"
+
+ # renpy/common/_errorhandling.rpym:563
+ old "Copies the traceback.txt file to the clipboard as Markdown for Discord."
+ new "Copia o arquivo traceback.txt como MarkDown para Discord."
+
+ # renpy/common/_errorhandling.rpym:592
+ old "An exception has occurred."
+ new "Um erro aconteceu."
+
+ # renpy/common/_errorhandling.rpym:615
+ old "Rollback"
+ new "Voltar"
+
+ # renpy/common/_errorhandling.rpym:617
+ old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
+ new "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
+
+ # renpy/common/_errorhandling.rpym:620
+ old "Ignore"
+ new "Ignorar"
+
+ # renpy/common/_errorhandling.rpym:624
+ old "Ignores the exception, allowing you to continue."
+ new "Ignora o problema, permitindo continuar."
+
+ # renpy/common/_errorhandling.rpym:626
+ old "Ignores the exception, allowing you to continue. This often leads to additional errors."
+ new "Ignora o problema, permitindo continuar. Frequentemente isso causa mais erros."
+
+ # renpy/common/_errorhandling.rpym:630
+ old "Reload"
+ new "Recarregar"
+
+ # renpy/common/_errorhandling.rpym:632
+ old "Reloads the game from disk, saving and restoring game state if possible."
+ new "Reloads the game from disk, saving and restoring game state if possible."
+
+ # renpy/common/_errorhandling.rpym:635
+ old "Console"
+ new "Console"
+
+ # renpy/common/_errorhandling.rpym:637
+ old "Opens a console to allow debugging the problem."
+ new "Opens a console to allow debugging the problem."
+
+ # renpy/common/_errorhandling.rpym:650
+ old "Quits the game."
+ new "Encerra o jogo."
+
+ # renpy/common/_errorhandling.rpym:671
+ old "Parsing the script failed."
+ new "Erro na leitura do script."
+
diff --git a/game/tl/ru/mirrorlake.rpy b/game/tl/ru/mirrorlake.rpy
new file mode 100644
index 0000000..02b3aa2
--- /dev/null
+++ b/game/tl/ru/mirrorlake.rpy
@@ -0,0 +1,36 @@
+# TODO: Translation updated at 2023-07-08 18:36
+
+translate ru strings:
+
+ # game/mirrorlake.rpy:33
+ old "{b}The Void{/b}"
+ new "{b}Пустота{/b}"
+
+ # game/mirrorlake.rpy:116
+ old "Play!"
+ new "Играть!"
+
+ # game/mirrorlake.rpy:122
+ old "The Void"
+ new "Пустота"
+
+ # game/mirrorlake.rpy:127
+ old "Restore your soul from the multiple worlds where it was scattered, and in due time, The Void shall reveal to you, the truth of this multiverse..."
+ new "Из множества миров, где была душа рассеяна возродите свою душу,и со временем Пустота откроет вам правду об этой мультивселенной..."
+
+ # game/mirrorlake.rpy:148
+ old "In a boundless dimension, time didn't exist.\nAnd in an azure color, lies Mana.\nPeace. Quietude. The Mana is there, as it always have been.\n\nUntil one day. Nobody knows who or what stirred this, but maybe you do.\nNonetheless, Mana started to move restlessy, as time and space formed around it.\n\nThe peaceful azure was no more, infinite combinations all at once,\neverything came to be and at same time, none of that ever happened.\n\nReality starts defining itself, new spaces, new times,\nnew realities happening and vanishing forever.\nEventually, this reality broke into other minor ones, and story was rewritten.\n\nAnd in one of the minor realities which came to be from the bigger one...\nLies this small world, the last to appear...\n\n{b}Moubootaur Legends{/b}."
+ new "In a boundless dimension, time didn't exist.\nAnd in an azure color, lies Mana.\nPeace. Quietude. The Mana is there, as it always have been.\n\nUntil one day. Nobody knows who or what stirred this, but maybe you do.\nNonetheless, Mana started to move restlessy, as time and space formed around it.\n\nThe peaceful azure was no more, infinite combinations all at once,\neverything came to be and at same time, none of that ever happened.\n\nReality starts defining itself, new spaces, new times,\nnew realities happening and vanishing forever.\nEventually, this reality broke into other minor ones, and story was rewritten.\n\nAnd in one of the minor realities which came to be from the bigger one...\nLies this small world, the last to appear...\n\n{b}Moubootaur Legends{/b}."
+
+ # game/mirrorlake.rpy:177
+ old "Before the universe existed as it is known,\nThere was only mana, and a sphere of energy to which mana was attracted.\nMana surrounded the sphere in all directions.\n\nThen, an anomaly. For a reason which perhaps you may know, the sphere expanded.\nWith great force in all directions, chaos ensued.\nSentient beings would be formed and dissolved soon after.\nEventually, one of these managed to grasp their own existence.\nSoon after, the Great Dragons formed a society, and peace ensued.\n\nThe Mana source formed, a tree expanding from it and stretching high.\nWars happened for the source, and soon, the Great Dragons were only four.\nBut the peace returned, and soon they forgot from each other.\n\nBut then came greed, with greed a war, and one of them perished.\n\nThis unleashed chaos again in the world, and in a call for adventurers,\nmany decided to risk their lives in a journey to Candor Island in...\n\n{b}The Mana World: Classic{/b}."
+ new "Before the universe existed as it is known,\nThere was only mana, and a sphere of energy to which mana was attracted.\nMana surrounded the sphere in all directions.\n\nThen, an anomaly. For a reason which perhaps you may know, the sphere expanded.\nWith great force in all directions, chaos ensued.\nSentient beings would be formed and dissolved soon after.\nEventually, one of these managed to grasp their own existence.\nSoon after, the Great Dragons formed a society, and peace ensued.\n\nThe Mana source formed, a tree expanding from it and stretching high.\nWars happened for the source, and soon, the Great Dragons were only four.\nBut the peace returned, and soon they forgot from each other.\n\nBut then came greed, with greed a war, and one of them perished.\n\nThis unleashed chaos again in the world, and in a call for adventurers,\nmany decided to risk their lives in a journey to Candor Island in...\n\n{b}The Mana World: Classic{/b}."
+
+ # game/mirrorlake.rpy:206
+ old "Nobody knows how this world came to be.\nThe many wars have long destroyed any record worth consideration.\nBut everyone knows about one tree.\nThe Mana Tree.\nAnd from it, life flows in the world.\n\nBut one day, there was a war, and the tree was destroyed.\nBut life did not stop. So the tree must still exist.\nSomewhere. Sometime. Beyond mortals' understanding.\n\nNone realize, but this world came from another.\nAnd in the another world, there was an enemy who destroyed many towns.\nAdventurers were on pursuit, when something happened.\n\nMaybe you know, maybe you don't...\nBut these adventurers shall once again regroup, and finish what was started...\n\n{b}The Mana World: rEvolt{/b}."
+ new "Nobody knows how this world came to be.\nThe many wars have long destroyed any record worth consideration.\nBut everyone knows about one tree.\nThe Mana Tree.\nAnd from it, life flows in the world.\n\nBut one day, there was a war, and the tree was destroyed.\nBut life did not stop. So the tree must still exist.\nSomewhere. Sometime. Beyond mortals' understanding.\n\nNone realize, but this world came from another.\nAnd in the another world, there was an enemy who destroyed many towns.\nAdventurers were on pursuit, when something happened.\n\nMaybe you know, maybe you don't...\nBut these adventurers shall once again regroup, and finish what was started...\n\n{b}The Mana World: rEvolt{/b}."
+
+ # game/mirrorlake.rpy:233
+ old "There's a place, transversal to every world.\n\"The Crossroads\", dubbed the first traveler.\nBeing influenced by every world, and subtly influencing in the same way, it is often targeted by those whom seek control over reality itself, or by those whom seek to trade goods from different worlds.\n\nBut the Crossroads lacks substance.\nIf it was more material, it would crash in the multiple universes it transverse.\nThus, life cannot exist from itself.\n\nMake sure to anchor yourself to a Home World, before venturing further into\n\n{b}The Crossroads{/b}."
+ new "There's a place, transversal to every world.\n\"The Crossroads\", dubbed the first traveler.\nBeing influenced by every world, and subtly influencing in the same way, it is often targeted by those whom seek control over reality itself, or by those whom seek to trade goods from different worlds.\n\nBut the Crossroads lacks substance.\nIf it was more material, it would crash in the multiple universes it transverse.\nThus, life cannot exist from itself.\n\nMake sure to anchor yourself to a Home World, before venturing further into\n\n{b}The Crossroads{/b}."
+
diff --git a/game/tl/ru/options.rpy b/game/tl/ru/options.rpy
new file mode 100644
index 0000000..425b133
--- /dev/null
+++ b/game/tl/ru/options.rpy
@@ -0,0 +1,16 @@
+# TODO: Translation updated at 2023-07-08 18:36
+
+translate ru strings:
+
+ # game/options.rpy:15
+ old "Mana Launcher"
+ new "Mana Launcher"
+
+ # game/options.rpy:37
+ old "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
+ new "ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ КОММЕРЧЕСКОЙ ПРИГОДНОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ ТРЕТЬИХ СТОРОН, НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ОБЛАДАТЕЛИ АВТОРСКИМ ПРАВОМ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УЩЕРБ ИЛИ ИНУЮ ОТВЕТСТВЕННОСТЬ, СВЯЗАННЫЕ ЛИ С ДЕЙСТВИЕМ ДОГОВОРА, НАРУШЕНИЕМ ДОГОВОРА ИЛИ ВОЗНИКАЮЩИЕ ИНЫМ ОБРАЗОМ, ИЗ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ В СВЯЗИ С ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ОПЕРАЦИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ."
+
+ # game/options.rpy:254
+ old "{a=https://www.renpy.org/l/license}About Ren'Py{/a}"
+ new "{a=https://www.renpy.org/l/license}О Ren'Py{/a}"
+
diff --git a/game/tl/ru/renpy.rpy b/game/tl/ru/renpy.rpy
new file mode 100644
index 0000000..5e457fd
--- /dev/null
+++ b/game/tl/ru/renpy.rpy
@@ -0,0 +1,26 @@
+# TODO: Translation updated at 2023-07-08 18:36
+
+# game/renpy.rpy:202
+translate ru load_world_2dea60f4:
+
+ # centered "{color=#FFF}{b}An error happened.{/b}\n\nPlease login again. If this issue persists, relaunch the app or {a=https://discord.gg/BQNTe68}contact us{/a}{/color}"
+ centered "{color=#FFF}{b}Возникла Ошибка.{/b}\n\nПожалуйста, войдите снова. Если проблема не устранена, перезапустите приложение или {a=https://discord.gg/BQNTe68}свяжитесь с нами{/a}{/color}"
+
+translate ru strings:
+
+ # game/renpy.rpy:48
+ old "Open wiki"
+ new "Open wiki"
+
+ # game/renpy.rpy:80
+ old "Validating SSL Certificates..."
+ new "Проверка SSL Сертификатов..."
+
+ # game/renpy.rpy:127
+ old "{color=#F00}Failure! Vault ID could not be set.{/color}"
+ new "{color=#F00}Ошибка! Не удалось установить идентификатор Хранилища.{/color}"
+
+ # game/renpy.rpy:170
+ old "Now loading..."
+ new "Сейчас загружается..."
+
diff --git a/game/tl/ru/screens.rpy b/game/tl/ru/screens.rpy
new file mode 100644
index 0000000..9c56f07
--- /dev/null
+++ b/game/tl/ru/screens.rpy
@@ -0,0 +1,276 @@
+# TODO: Translation updated at 2023-07-08 18:36
+
+translate ru strings:
+
+ # game/screens.rpy:256
+ old "History"
+ new "История"
+
+ # game/screens.rpy:257
+ old "Skip"
+ new "Пропустить"
+
+ # game/screens.rpy:258
+ old "Prefs"
+ new "Опции"
+
+ # game/screens.rpy:301
+ old "Start"
+ new "Старт"
+
+ # game/screens.rpy:308
+ old "Preferences"
+ new "Настройки"
+
+ # game/screens.rpy:312
+ old "End Replay"
+ new "Конец Реплея"
+
+ # game/screens.rpy:316
+ old "Main Menu"
+ new "Главное Меню"
+
+ # game/screens.rpy:318
+ old "About"
+ new "О программе"
+
+ # game/screens.rpy:324
+ old "Quit"
+ new "Выход"
+
+ # game/screens.rpy:368
+ old "Mirror Lake"
+ new "Mirror Lake"
+
+ # game/screens.rpy:469
+ old "Return"
+ new "Возврат"
+
+ # game/screens.rpy:553
+ old "Version [config.version!t]\n"
+ new "Версия [config.version!t]\n"
+
+ # game/screens.rpy:559
+ old "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
+ new "Сделано с помощью {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
+
+ # game/screens.rpy:649
+ old "Display"
+ new "Экран"
+
+ # game/screens.rpy:650
+ old "Window"
+ new "Окно"
+
+ # game/screens.rpy:651
+ old "Fullscreen"
+ new "Полноэкранный режим"
+
+ # game/screens.rpy:655
+ old "Iconify"
+ new "Minimizar"
+
+ # game/screens.rpy:656
+ old "Enabled"
+ new "Вкл."
+
+ # game/screens.rpy:656
+ old "Disabled"
+ new "Выкл."
+
+ # game/screens.rpy:663
+ old "Unseen Text"
+ new "Невидимый Текст"
+
+ # game/screens.rpy:665
+ old "Transitions"
+ new "Переходы"
+
+ # game/screens.rpy:670
+ old "Discord"
+ new "Discord"
+
+ # game/screens.rpy:676
+ old "Steam Login"
+ new "Вход в Steam"
+
+ # game/screens.rpy:682
+ old "Plugins"
+ new "Plugins"
+
+ # game/screens.rpy:684
+ old "Evol2 Game Servers"
+ new "Evol2 Game Servers"
+
+ # game/screens.rpy:687
+ old "ManaVerse"
+ new "ManaVerse"
+
+ # game/screens.rpy:689
+ old "ManaPlus"
+ new "ManaPlus"
+
+ # game/screens.rpy:692
+ old "Built-In"
+ new "Built-In"
+
+ # game/screens.rpy:696
+ old "Mask password"
+ new "Mask password"
+
+ # game/screens.rpy:706
+ old "Language"
+ new "Язык"
+
+ # game/screens.rpy:716
+ old "Others"
+ new "Другое"
+
+ # game/screens.rpy:718
+ old "ON"
+ new "Вкл."
+
+ # game/screens.rpy:718
+ old "OFF"
+ new "Выкл."
+
+ # game/screens.rpy:727
+ old "Reset Login Method"
+ new "Reset Login Method"
+
+ # game/screens.rpy:734
+ old "Check Updates"
+ new "Проверить Обновления"
+
+ # game/screens.rpy:801
+ old "All Set!"
+ new "Все готово!"
+
+ # game/screens.rpy:921
+ old "The dialogue history is empty."
+ new "История диалога пуста."
+
+ # game/screens.rpy:982
+ old "Help"
+ new "Помощь"
+
+ # game/screens.rpy:991
+ old "Keyboard"
+ new "Клавиатура"
+
+ # game/screens.rpy:992
+ old "Mouse"
+ new "Мышь"
+
+ # game/screens.rpy:995
+ old "Gamepad"
+ new "Геймпад"
+
+ # game/screens.rpy:1008
+ old "Enter"
+ new "Ввод"
+
+ # game/screens.rpy:1009
+ old "Advances dialogue and activates the interface."
+ new "Продолжает диалог и активирует интерфейс."
+
+ # game/screens.rpy:1012
+ old "Space"
+ new "Пробел"
+
+ # game/screens.rpy:1013
+ old "Advances dialogue without selecting choices."
+ new "Продолжает диалог без выбора вариантов."
+
+ # game/screens.rpy:1016
+ old "Arrow Keys"
+ new "Клавиши со стрелками"
+
+ # game/screens.rpy:1017
+ old "Navigate the interface."
+ new "Навигация по интерфейсу."
+
+ # game/screens.rpy:1020
+ old "Escape"
+ new "Escape"
+
+ # game/screens.rpy:1021
+ old "Accesses the game menu."
+ new "Доступ к игровому меню."
+
+ # game/screens.rpy:1024
+ old "Ctrl"
+ new "Ctrl"
+
+ # game/screens.rpy:1025
+ old "Skips dialogue while held down."
+ new "Пропускает диалог при удерживании."
+
+ # game/screens.rpy:1028
+ old ">"
+ new ">"
+
+ # game/screens.rpy:1029
+ old "Toggles dialogue skipping."
+ new "Включает пропуск диалога."
+
+ # game/screens.rpy:1033
+ old "Hides the user interface."
+ new "Скрывает пользовательский интерфейс."
+
+ # game/screens.rpy:1037
+ old "Takes a screenshot."
+ new "Делает скриншот."
+
+ # game/screens.rpy:1041
+ old "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
+ new "Включает вспомогательное {a=https://www.renpy.org/l/voicing}самоозвучивание{/a}."
+
+ # game/screens.rpy:1047
+ old "Left Click"
+ new "Щелчок левой кнопкой мыши"
+
+ # game/screens.rpy:1051
+ old "Middle Click"
+ new "Щелчок средней кнопкой мыши"
+
+ # game/screens.rpy:1055
+ old "Right Click"
+ new "Щелчок правой кнопкой мыши"
+
+ # game/screens.rpy:1062
+ old "Right Trigger\nA/Bottom Button"
+ new "Правый триггер\nA/Нижняя Кнопка"
+
+ # game/screens.rpy:1066
+ old "D-Pad, Sticks"
+ new "Крестовина, Палочки"
+
+ # game/screens.rpy:1070
+ old "Start, Guide"
+ new "Старт, Руководство"
+
+ # game/screens.rpy:1074
+ old "Y/Top Button"
+ new "Y/Верхняя Кнопка"
+
+ # game/screens.rpy:1077
+ old "Calibrate"
+ new "Калибровка"
+
+ # game/screens.rpy:1142
+ old "Yes"
+ new "Да"
+
+ # game/screens.rpy:1143
+ old "No"
+ new "Нет"
+
+ # game/screens.rpy:1189
+ old "Skipping"
+ new "Пропуск"
+
+ # game/screens.rpy:1410
+ old "Menu"
+ new "Меню"
+
diff --git a/game/tl/ru/soul.rpy b/game/tl/ru/soul.rpy
new file mode 100644
index 0000000..f3bea19
--- /dev/null
+++ b/game/tl/ru/soul.rpy
@@ -0,0 +1,372 @@
+# TODO: Translation updated at 2023-07-08 18:36
+
+# game/soul.rpy:376
+translate ru sethome_50d30e56:
+
+ # centered "{color=#fff}{b}{size=+25}WARNING!{/size}{/b}\n\nSetting a home world is {u}irreversible{/u}. Please make sure you understand the consequences before proceeding.{/color}{fast}"
+ centered "{color=#fff}{b}{size=+25}WARNING!{/size}{/b}\n\nSetting a home world is {u}irreversible{/u}. Please make sure you understand the consequences before proceeding.{/color}{fast}"
+
+# game/soul.rpy:377
+translate ru sethome_2f4b98c8:
+
+ # centered "{color=#fff}{b}{size=+25}HOME WORLD{/size}{/b}\n\nEveryone yarns for a place to call home.\nWhen you finally find such place, you may set it as your home world.\n\nSetting a home world is {u}irreversible{/u} so choose wisely.\n\nOnce you have a homeworld, every other world in the Mirror Lake will sync their game progress based on your home world progress. This allows you to play through all the universes.{/color}{fast}"
+ centered "{color=#fff}{b}{size=+25}HOME WORLD{/size}{/b}\n\nEveryone yarns for a place to call home.\nWhen you finally find such place, you may set it as your home world.\n\nSetting a home world is {u}irreversible{/u} so choose wisely.\n\nOnce you have a homeworld, every other world in the Mirror Lake will sync their game progress based on your home world progress. This allows you to play through all the universes.{/color}{fast}"
+
+# game/soul.rpy:378
+translate ru sethome_21af0f3d:
+
+ # centered "{color=#fff}{b}{size=+25}WARNING!{/size}{/b}\n\nSetting a home world is {u}irreversible{/u}.\n\nThis greatly boosts you on all other worlds, but only if your progress on the home world is advanced enough.{/color}{fast}"
+ centered "{color=#fff}{b}{size=+25}WARNING!{/size}{/b}\n\nSetting a home world is {u}irreversible{/u}.\n\nThis greatly boosts you on all other worlds, but only if your progress on the home world is advanced enough.{/color}{fast}"
+
+# game/soul.rpy:533
+translate ru intro_1d65fd1f:
+
+ # evil "{cps=80}Look at this... All this mana... Doesn't it look peaceful?{/cps}"
+ evil "{cps=80}Olhe isso... Toda essa mana... Ela não parece pacífica?{/cps}"
+
+# game/soul.rpy:534
+translate ru intro_fc641e8d:
+
+ # evil "{cps=80}What do you think that would happen if I mess with it... like this?!{/cps}{nw}"
+ evil "{cps=80}O que você acha que aconteceria se eu bagunçasse com ela... desse jeito?!{/cps}{nw}"
+
+# game/soul.rpy:538
+translate ru intro_774f5206:
+
+ # evil "What do you think that would happen if I mess with it... like this?!{fast}{nw}" with vpunch
+ evil "O que você acha que aconteceria se eu bagunçasse com ela... desse jeito?!{fast}{nw}" with vpunch
+
+# game/soul.rpy:539
+translate ru intro_873ea3a8:
+
+ # evil "What do you think that would happen if I mess with it... like this?!{fast}{nw}" with hpunch
+ evil "O que você acha que aconteceria se eu bagunçasse com ela... desse jeito?!{fast}{nw}" with hpunch
+
+# game/soul.rpy:540
+translate ru intro_774f5206_1:
+
+ # evil "What do you think that would happen if I mess with it... like this?!{fast}{nw}" with vpunch
+ evil "O que você acha que aconteceria se eu bagunçasse com ela... desse jeito?!{fast}{nw}" with vpunch
+
+# game/soul.rpy:541
+translate ru intro_67488d5e:
+
+ # evil "What do you think that would happen if I mess with it... like this?!{fast}" with hpunch
+ evil "O que você acha que aconteceria se eu bagunçasse com ela... desse jeito?!{fast}" with hpunch
+
+# game/soul.rpy:542
+translate ru intro_aa2c08ed:
+
+ # evil "{cps=80}...What? No, you cannot stop me.{/cps}"
+ evil "{cps=80}...O queê? Não, você não pode me deter.{/cps}"
+
+# game/soul.rpy:543
+translate ru intro_96ce8641:
+
+ # evil "{i}*evil grin*{/i} {cps=80}Hey, let's play a game.{/cps}"
+ evil "{i}*risada maquiavélica*{/i} {cps=80}Hey, vamos jogar um jogo.{/cps}"
+
+# game/soul.rpy:544
+translate ru intro_da56d90b:
+
+ # evil "{cps=80}I'll shatter your Soul and I want see if you can catch me!{/cps}"
+ evil "{cps=80}Eu vou despedaçar sua Alma e quero ver se você consegue me pegar!{/cps}"
+
+# game/soul.rpy:545
+translate ru intro_6fae2a3d:
+
+ # evil "{cps=80}HAHAHAHAHAHA--{/cps}{w=.5}{nw}"
+ evil "{cps=80}HAHAHAHAHAHA--{/cps}{w=.5}{nw}"
+
+# game/soul.rpy:549
+translate ru intro_88ebea11:
+
+ # evil "HAHAHAHAHAHA{fast}{cps=80}HAHAHAHAHAHAHAH!{/cps}"
+ evil "HAHAHAHAHAHA{fast}{cps=80}HAHAHAHAHAHAHAH!{/cps}"
+
+# game/soul.rpy:556
+translate ru intro_19c5c775:
+
+ # centered "{color=#fff}{cps=80}Having your soul shattered to pieces, you drift along the void...{p=1.5}\n Your soul was shattered, your memories forfeit, but your willpower remained.{p=1.5}\n That's right - You have a task to do, a mission to accomplish.{p=1.5}\n \"This is not the end.\" You think to yourself.{p=1.5}\n So, you dive in the Mirror Lake, allowing your willpower to become part of the worlds which came to be...{/cps}{/color}"
+ centered "{color=#fff}{cps=80}Tendo sua alma despedaçada, você vaga sem direção pelo Vazio...{p=1.5}\nSua alma foi despedaçada, suas memórias perdidas, mas não sua força de vontade.{p=1.5}\nEm verdade - Você tem uma tarefa, uma missão a cumprir.{p=1.5}\n\"Esse não é o fim.\" Você pensa para si próprio.{p=1.5}\nEntão, você mergulha no Lago Espelhado, permitindo que sua vontade se torne parte dos mundos que surgiram...{/cps}{/color}"
+
+# game/soul.rpy:564
+translate ru intro_82ae0cb5:
+
+ # centered "{color=#fff}{b}Tutorial{/b}\n\n In the next screen, you'll be at the Mirror Lake Interface.\nThe worlds are listed to the left, and a description is available at right.\n Select any world, and allow your willpower to take form on the world, as one of its inhabitants.\n Each world is different from each other, there is no consistency on gameplay rules, art style or history.\n \n And eventually, your power shall return to you...{/color}{fast}"
+ centered "{color=#fff}{b}Tutorial{/b}\n\nNa próxima tela, você estará na interface do Lago Espelhado.\nOs mundos estarão listados a esquerda, e uma descrição a direita.\nSelecione qualquer mundo e permita que sua vontade se manifeste nesse mundo como um de seus habitantes.\nCada mundo é diferente entre si, não há consistência nas regras, estilo artístico ou história.\n \nE eventualmente, seu poder retornará a você...{/color}{fast}"
+
+# game/soul.rpy:570
+translate ru intro_d61d3dff:
+
+ # centered "{color=#f35}{b}DISCLAIMER{/b}{/color}\n\n {color=#fff}The worlds may be operated by different staff, and are in an eternal mutation state.\n Be sure to read each subworld specific rules and complete the tutorial to spot the differences!\n \n Attempt to restore your soul as you try to stop the evil which threatens the multiverse.\n Soul Level remains constant regardless of the subworld you're at.{/color}{fast}"
+ centered "{color=#f35}{b}ADVERTÊNCIA{/b}{/color}\n\n {color=#fff}Os mundos podem ser operados por equipes diferentes e estão em estado de mutação perpétua.\n Certifique-se de ler as regras específicas de cada mundo e completar o tutorial para compreender as diferenças!\n \nTente restaurar sua alma enquanto você tenta parar o mal que ameaça o multiverso.\nO Nível Alma permanece constante, independente do mundo em que estiver.{/color}{fast}"
+
+# game/soul.rpy:593
+translate ru ch1lake_27c60be9:
+
+ # centered "{color=#fff}{cps=80}As you move through the worlds, you can't help but notice the precarious state it is in.{p=1.5}\n Maybe, from within, everything seemed alright. Or just manageable. But...{p=1.5}\n No, the situation is much more dire than you thought.{p=1.5}\n Because from the Mirror Lake, you can see.{p=1.5}\n The foundation of the world is rotting, without anyone noticing.{/cps}{/color}"
+ centered "{color=#fff}{cps=80}As you move through the worlds, you can't help but notice the precarious state it is in.{p=1.5}\n Maybe, from within, everything seemed alright. Or just manageable. But...{p=1.5}\n No, the situation is much more dire than you thought.{p=1.5}\n Because from the Mirror Lake, you can see.{p=1.5}\n The foundation of the world is rotting, without anyone noticing.{/cps}{/color}"
+
+# game/soul.rpy:605
+translate ru ch1lake_d833c2a6:
+
+ # centered "{color=#fff}{cps=80}A slow death, where the colors from the world slowly vanish.{p=1.5}\n The wind grows silent, the restlessness of the living slowly drifts in the peaceful calm of the dead...{p=1.5}\n ...Is this how everything will end?{p=1.5}\n ...Isn't there anything you can do?{/cps}{/color}"
+ centered "{color=#fff}{cps=80}A slow death, where the colors from the world slowly vanish.{p=1.5}\n The wind grows silent, the restlessness of the living slowly drifts in the peaceful calm of the dead...{p=1.5}\n ...Is this how everything will end?{p=1.5}\n ...Isn't there anything you can do?{/cps}{/color}"
+
+# game/soul.rpy:613
+translate ru ch1lake_32895cc6:
+
+ # centered "{color=#fff}{cps=80}\"It's useless. He'll do as he pleases, even if half of the multiverse dies from it.\"{p=1.5}\n No. That will not happen.{p=1.5}\n And it won't happen, because {i}you{/i} noticed it.{p=1.5}\n As long as you know, as long as you breathe, something can be done.{p=1.5}\n Even without knowing from where to start...{/cps}{/color}"
+ centered "{color=#fff}{cps=80}\"It's useless. He'll do as he pleases, even if half of the multiverse dies from it.\"{p=1.5}\n No. That will not happen.{p=1.5}\n And it won't happen, because {i}you{/i} noticed it.{p=1.5}\n As long as you know, as long as you breathe, something can be done.{p=1.5}\n Even without knowing from where to start...{/cps}{/color}"
+
+# game/soul.rpy:619
+translate ru ch1lake_2a65fcd4:
+
+ # centered "{color=#fff}{cps=80}You may be the only one left who can at least try.{/cps}{/color}"
+ centered "{color=#fff}{cps=80}You may be the only one left who can at least try.{/cps}{/color}"
+
+# game/soul.rpy:634
+translate ru ch2intro_09c7ba2f:
+
+ # centered "{color=#fff}{cps=80} ...Where am I?{p=1.5}\n ...Oh, that's right.{p=1.5}\n We're at the void. The space between the universes. {/cps}{/color}"
+ centered "{color=#fff}{cps=80} ...Where am I?{p=1.5}\n ...Oh, that's right.{p=1.5}\n We're at the void. The space between the universes. {/cps}{/color}"
+
+# game/soul.rpy:639
+translate ru ch2intro_41db04a1:
+
+ # centered "{color=#fff}{cps=80} ...How many universes are out there?{p=1.5}\n Now, isn't that a silly question? There are as many as there could be.{p=1.5}\n That's the not the real question. The real question would be...{p=1.5}\n ...From which one do I come from...?{p=1.5}\n {/cps}{/color}"
+ centered "{color=#fff}{cps=80} ...How many universes are out there?{p=1.5}\n Now, isn't that a silly question? There are as many as there could be.{p=1.5}\n That's the not the real question. The real question would be...{p=1.5}\n ...From which one do I come from...?{p=1.5}\n {/cps}{/color}"
+
+# game/soul.rpy:647
+translate ru ch2intro_0e93af1a:
+
+ # centered "{color=#fff}{cps=80} The multiverse seems inquiet.{p=1.5}\n Has it always been this way?{p=1.5}\n Who is this shadow I keep remembering during my dreams?{p=1.5}\n {/cps}{/color}"
+ centered "{color=#fff}{cps=80} The multiverse seems inquiet.{p=1.5}\n Has it always been this way?{p=1.5}\n Who is this shadow I keep remembering during my dreams?{p=1.5}\n {/cps}{/color}"
+
+# game/soul.rpy:652
+translate ru ch2intro_cb7cf7af:
+
+ # centered "{color=#fff}{cps=80} Many questions, but few answers.{p=1.5}\n With what should we worry most, the past or the present?{p=1.5}\n However... These universes must hold a clue.{p=1.5}\n Coincidences are mere opportunities waiting to be explored; To reveal a new perspective to you.{p=1.5}\n We should investigate these Mirror Lakes, the location where we move between worlds.{p=1.5}\n If I want a clue... Yes, that'll be the first place to search.{p=1.5}\n {/cps}{/color}"
+ centered "{color=#fff}{cps=80} Many questions, but few answers.{p=1.5}\n With what should we worry most, the past or the present?{p=1.5}\n However... These universes must hold a clue.{p=1.5}\n Coincidences are mere opportunities waiting to be explored; To reveal a new perspective to you.{p=1.5}\n We should investigate these Mirror Lakes, the location where we move between worlds.{p=1.5}\n If I want a clue... Yes, that'll be the first place to search.{p=1.5}\n {/cps}{/color}"
+
+# game/soul.rpy:666
+translate ru ch2intro_0393a524:
+
+ # centered "{color=#fff}CHAPTER 2\nSHADOWS OF THE PAST{/color}"
+ centered "{color=#fff}CHAPTER 2\nSHADOWS OF THE PAST{/color}"
+
+# game/soul.rpy:678
+translate ru ch2lake_3d74a274:
+
+ # centered "{color=#fff}{cps=80}We made many acquaintances and friends lately.{p=1.5}\n \"Your friends shall be your strength\".{p=1.5}\n Where have I heard that before?{p=1.5}\n And on the meanwhile, the world slowly rots, willing to take all my acquaintances into a silent death...{/cps}{/color}"
+ centered "{color=#fff}{cps=80}We made many acquaintances and friends lately.{p=1.5}\n \"Your friends shall be your strength\".{p=1.5}\n Where have I heard that before?{p=1.5}\n And on the meanwhile, the world slowly rots, willing to take all my acquaintances into a silent death...{/cps}{/color}"
+
+# game/soul.rpy:686
+translate ru ch2lake_084d1973:
+
+ # centered "{color=#fff}{cps=80}But something changed.{p=1.5}\n This lake is less rotten than the first time.{p=1.5}\n ...Is this my own doing?{p=1.5}\n ...Am I truly capable to breath new life in this world?{/cps}{/color}"
+ centered "{color=#fff}{cps=80}But something changed.{p=1.5}\n This lake is less rotten than the first time.{p=1.5}\n ...Is this my own doing?{p=1.5}\n ...Am I truly capable to breath new life in this world?{/cps}{/color}"
+
+# game/soul.rpy:694
+translate ru ch2lake_ccb3e819:
+
+ # centered "{color=#fff}{cps=80}\"Either try or give up, there's no middle term between both\".{p=1.5}\n I can feel despair, the imminent chaos approaching...{p=1.5}\n But I don't have to be alone.{p=1.5}\n Protecting the worlds... My native acquaintances likely could help.{p=1.5}\n I should find those whom can help, and prepare an army.{p=1.5}\n Because... Whatever is coming, is coming soon.{/cps}{/color}"
+ centered "{color=#fff}{cps=80}\"Either try or give up, there's no middle term between both\".{p=1.5}\n I can feel despair, the imminent chaos approaching...{p=1.5}\n But I don't have to be alone.{p=1.5}\n Protecting the worlds... My native acquaintances likely could help.{p=1.5}\n I should find those whom can help, and prepare an army.{p=1.5}\n Because... Whatever is coming, is coming soon.{/cps}{/color}"
+
+# game/soul.rpy:701
+translate ru ch2lake_18143ac4:
+
+ # centered "{color=#fff}{cps=80}A ray of hope.\n\nThis is not what you asked to be, but you will fulfill the role given to you.\n\n\nAnd thus, you dive again, in the depths of the Mirror Lake...{/cps}{/color}"
+ centered "{color=#fff}{cps=80}A ray of hope.\n\nThis is not what you asked to be, but you will fulfill the role given to you.\n\n\nAnd thus, you dive again, in the depths of the Mirror Lake...{/cps}{/color}"
+
+translate ru strings:
+
+ # game/soul.rpy:32
+ old "OK »"
+ new "OK »"
+
+ # game/soul.rpy:59
+ old "Email: "
+ new "Email: "
+
+ # game/soul.rpy:71
+ old "Username: "
+ new "Username: "
+
+ # game/soul.rpy:131
+ old "Level"
+ new "Уровень"
+
+ # game/soul.rpy:134
+ old "Home world: "
+ new "Home world: "
+
+ # game/soul.rpy:135
+ old "Not Set"
+ new "Not Set"
+
+ # game/soul.rpy:137
+ old "Set »"
+ new "Set »"
+
+ # game/soul.rpy:141
+ old "Sets a homeworld"
+ new "Sets a homeworld"
+
+ # game/soul.rpy:145
+ old "Manage Account"
+ new "Manage Account"
+
+ # game/soul.rpy:149
+ old "Changes your account settings"
+ new "Changes your account settings"
+
+ # game/soul.rpy:157
+ old "Scene Recollection"
+ new "Replay de Cenas"
+
+ # game/soul.rpy:166
+ old "Prologue"
+ new "Пролог"
+
+ # game/soul.rpy:170
+ old "Replay the prologue."
+ new "Exibe o prólogo novamente."
+
+ # game/soul.rpy:172
+ old "First Lake"
+ new "First Lake"
+
+ # game/soul.rpy:176
+ old "Replay the first lake."
+ new "Replay the first lake."
+
+ # game/soul.rpy:178
+ old "Chapt. 2"
+ new "Chapt. 2"
+
+ # game/soul.rpy:182
+ old "Replay the 2nd Intro."
+ new "Replay the 2nd Intro."
+
+ # game/soul.rpy:184
+ old "Second Lake"
+ new "Second Lake"
+
+ # game/soul.rpy:188
+ old "Replay the 2nd lake."
+ new "Replay the 2nd lake."
+
+ # game/soul.rpy:199
+ old "Return »"
+ new "Voltar »"
+
+ # game/soul.rpy:222
+ old "Account Management"
+ new "Account Management"
+
+ # game/soul.rpy:227
+ old "Reset password"
+ new "Reset password"
+
+ # game/soul.rpy:231
+ old "Changes your password"
+ new "Changes your password"
+
+ # game/soul.rpy:232
+ old "Reset Two Factor"
+ new "Reset Two Factor"
+
+ # game/soul.rpy:236
+ old "Enables or disables 2FA"
+ new "Enables or disables 2FA"
+
+ # game/soul.rpy:238
+ old "Steam Account"
+ new "Steam Account"
+
+ # game/soul.rpy:241
+ old "World Management"
+ new "World Management"
+
+ # game/soul.rpy:259
+ old "Link Account"
+ new "Link Account"
+
+ # game/soul.rpy:263
+ old "Links an external account to Vault"
+ new "Links an external account to Vault"
+
+ # game/soul.rpy:264
+ old "Unlink"
+ new "Unlink"
+
+ # game/soul.rpy:272
+ old "Removes a Vault account for manual login"
+ new "Removes a Vault account for manual login"
+
+ # game/soul.rpy:337
+ old "{color=#FFF}Loading user data...{/color}"
+ new "{color=#FFF}Carregando dados do usuário...{/color}"
+
+ # game/soul.rpy:353
+ old "Wanderer"
+ new "Peregrino"
+
+ # game/soul.rpy:405
+ old "{b}Two Factor Authentication{/b}\n\nIf you have two factor authentication enabled, it'll be disabled.\nIf it is disabled, it'll be enabled, and you'll receive an {b}email{/b} with instructions to generate TOTP tokens.\n\nIf enabled, you will not be able to login without the authentication token."
+ new "{b}Two Factor Authentication{/b}\n\nIf you have two factor authentication enabled, it'll be disabled.\nIf it is disabled, it'll be enabled, and you'll receive an {b}email{/b} with instructions to generate TOTP tokens.\n\nIf enabled, you will not be able to login without the authentication token."
+
+ # game/soul.rpy:406
+ old "{b}Two Factor Authentication{/b}\n\nAre you sure you want to change this setting?"
+ new "{b}Two Factor Authentication{/b}\n\nAre you sure you want to change this setting?"
+
+ # game/soul.rpy:420
+ old "Your 2FA settings were updated.\n\nPlease check your email."
+ new "Your 2FA settings were updated.\n\nPlease check your email."
+
+ # game/soul.rpy:422
+ old "An error on the client happened and the request was rejected. Are you logged in, and using the latest version?"
+ new "An error on the client happened and the request was rejected. Are you logged in, and using the latest version?"
+
+ # game/soul.rpy:424
+ old "You are being rate-limited, and the change was not possible. Please wait a minute before trying again."
+ new "You are being rate-limited, and the change was not possible. Please wait a minute before trying again."
+
+ # game/soul.rpy:434
+ old "{b}DISCLAIMER{/b}\n\nTmwAthena does not support username changes. If the vault already created an account for you, it'll always take precedence and {b}will never be truly unlinked{/b}.\nIf the Vault already created an account for you, linking will not work adequately."
+ new "{b}DISCLAIMER{/b}\n\nTmwAthena does not support username changes. If the vault already created an account for you, it'll always take precedence and {b}will never be truly unlinked{/b}.\nIf the Vault already created an account for you, linking will not work adequately."
+
+ # game/soul.rpy:435
+ old "{b}External Account Linking{/b}\n\n{size=-3}Use this if you used an account with ManaVerse or ManaPlus previously, and want to use it with the Mana Launcher. Keep in mind that if you already have an account with the Launcher, nothing will happen. Both the launcher and the game account must have valid email addresses, but they don't need to be the same. Once linked, you'll no longer be able to login using ManaPlus or ManaVerse directly. The home world account cannot be (un)linked from the Vault. Once done, you'll receive an email with further instructions. To cancel, empty any of the fields.{/size}"
+ new "{b}External Account Linking{/b}\n\n{size=-3}Use this if you used an account with ManaVerse or ManaPlus previously, and want to use it with the Mana Launcher. Keep in mind that if you already have an account with the Launcher, nothing will happen. Both the launcher and the game account must have valid email addresses, but they don't need to be the same. Once linked, you'll no longer be able to login using ManaPlus or ManaVerse directly. The home world account cannot be (un)linked from the Vault. Once done, you'll receive an email with further instructions. To cancel, empty any of the fields.{/size}"
+
+ # game/soul.rpy:459
+ old "A link was sent to your email.\n\nPlease follow it before trying to access the world in the Launcher.\nIf you don't, THEN LINKING WILL BE RENDERED IMPOSSIBLE.\n\nAfter a successful linking, an Error Response 200 OK will be shown on your browser."
+ new "A link was sent to your email.\n\nPlease follow it before trying to access the world in the Launcher.\nIf you don't, THEN LINKING WILL BE RENDERED IMPOSSIBLE.\n\nAfter a successful linking, an Error Response 200 OK will be shown on your browser."
+
+ # game/soul.rpy:463
+ old "You are not authorized to perform this operation. Please try again later, in three minutes."
+ new "You are not authorized to perform this operation. Please try again later, in three minutes."
+
+ # game/soul.rpy:465
+ old "To prevent cheating, you cannot link nor unlink your home world. Please contact staff."
+ new "To prevent cheating, you cannot link nor unlink your home world. Please contact staff."
+
+ # game/soul.rpy:480
+ old "{b}DISCLAIMER{/b}\n\nTmwAthena does not support username changes. If the vault already created an account for you, it'll always take precedence and {b}will never be truly unlinked{/b}.\nUnlinking a TmwAthena account will disable some Mirror Lake features, but will NOT prevent the Launcher from logging in!"
+ new "{b}DISCLAIMER{/b}\n\nTmwAthena does not support username changes. If the vault already created an account for you, it'll always take precedence and {b}will never be truly unlinked{/b}.\nUnlinking a TmwAthena account will disable some Mirror Lake features, but will NOT prevent the Launcher from logging in!"
+
+ # game/soul.rpy:505
+ old "Account was unlinked successfully!\n\nYou should go to your servers' password reset page and use the email you just informed to login using M+ again.\n\nIt is no longer possible to access the unlinked account with the Mana Launcher."
+ new "Account was unlinked successfully!\n\nYou should go to your servers' password reset page and use the email you just informed to login using M+ again.\n\nIt is no longer possible to access the unlinked account with the Mana Launcher."
+
+ # game/soul.rpy:579
+ old "{b}Account Linking{/b}\n\nIf you have already played The Mana World before, you might want to import your existing account instead of creating a new one.\n\nDo you want to link existing accounts?"
+ new "{b}Account Linking{/b}\n\nIf you have already played The Mana World before, you might want to import your existing account instead of creating a new one.\n\nDo you want to link existing accounts?"
+
+ # game/soul.rpy:662
+ old "{color=#fff}{cps=80}Your memories still aren't back; But you're not going to be defeated so easily.{w=0.5}\n\nYou'll get to the bottom of this. Nothing can stop you now.{/cps}{/color}"
+ new "{color=#fff}{cps=80}Your memories still aren't back; But you're not going to be defeated so easily.{w=0.5}\n\nYou'll get to the bottom of this. Nothing can stop you now.{/cps}{/color}"
+
diff --git a/game/tl/ru/update.rpy b/game/tl/ru/update.rpy
new file mode 100644
index 0000000..bf8442c
--- /dev/null
+++ b/game/tl/ru/update.rpy
@@ -0,0 +1,108 @@
+# TODO: Translation updated at 2023-07-08 18:36
+
+translate ru strings:
+
+ # game/update.rpy:83
+ old "Fetching server list and assets..."
+ new "Baixando lista de servidores..."
+
+ # game/update.rpy:143
+ old "Welcome to the Mana Launcher.\nBuilding user data, please wait..."
+ new "Bem vindo ao Lançador de Mana.\nConstruindo dados do usuário, por favor aguarde..."
+
+ # game/update.rpy:159
+ old "{color=#f00}{b}ERROR: No active mirror found.\nMana Launcher needs to be updated.{/b}{/color}"
+ new "{color=#f00}{b}ERRO: Nenhum espelho ativo encontrado.\nO Lançador de Mana precisa ser atualizado.{/b}{/color}"
+
+ # game/update.rpy:168
+ old "Checking for installed clients..."
+ new "Verificando clientes instalados..."
+
+ # game/update.rpy:188
+ old "Verifying credentials..."
+ new "Verificando credenciais..."
+
+ # game/update.rpy:199
+ old "Attempting Steam authentication..."
+ new "Tentando autenticação pela Steam..."
+
+ # game/update.rpy:207
+ old "Waiting for Vault reply..."
+ new "Aguardando resposta do Cofre..."
+
+ # game/update.rpy:214
+ old "{color=#f00}{b}STEAM AUTHENTICATION ERROR.\nSteam refused authentication. Try restarting the app.{/b}{/color}"
+ new "{color=#f00}{b}ERRO NA AUTENTICAÇÃO STEAM.\nSteam recusou a autenticação. Tente reiniciar o aplicativo.{/b}{/color}"
+
+ # game/update.rpy:220
+ old "Rate limited! Trying again 15s..."
+ new "Erro de fluxo! Tentando novamente (15s)..."
+
+ # game/update.rpy:222
+ old "Rate limited! Trying again 10s..."
+ new "Erro de fluxo! Tentando novamente (10s)..."
+
+ # game/update.rpy:224
+ old "Rate limited! Trying again 5s..."
+ new "Erro de fluxo! Tentando novamente (5s)..."
+
+ # game/update.rpy:226
+ old "Rate limited! Trying again..."
+ new "Erro de fluxo! Tentando novamente..."
+
+ # game/update.rpy:245
+ old "Steam session initialized successfully"
+ new "Sessão Steam inicializada com sucesso"
+
+ # game/update.rpy:252
+ old "{color=#f00}{b}STEAM AUTHENTICATION ERROR.\nIf the issue persists, try closing the app and opening again.{/b}{/color}"
+ new "{color=#f00}{b}ERRO DE AUTENTICAÇÃO (STEAM).\nSe o problema persistir, tente fechar o aplicativo e abrir novamente.{/b}{/color}"
+
+ # game/update.rpy:257
+ old "Steam auth disabled, logging on Vault..."
+ new "Steam auth desativado, logando pelo Cofre..."
+
+ # game/update.rpy:331
+ old "Standard"
+ new "Standard"
+
+ # game/update.rpy:332
+ old "Mouseless"
+ new "Mouseless"
+
+ # game/update.rpy:375
+ old "OK"
+ new "OK"
+
+ # game/update.rpy:424
+ old "Please insert your {b}email{/b}."
+ new "Por favor digite seu {b}email{/b}."
+
+ # game/update.rpy:427
+ old "Please make sure you enter a valid email!"
+ new "Certifique-se que o email é válido!"
+
+ # game/update.rpy:438
+ old "Please insert your {b}Password{/b}.\nIt has to be at least 4 characters long."
+ new "Por favor digite sua {b}Senha{/b}.\nEla tem que ter pelo menos 4 caracteres."
+
+ # game/update.rpy:444
+ old "If you already have an account, please insert your {b}2FA code{/b}.\n\n{u}Otherwise, a new account will be created and details will be sent to your email.{/u}"
+ new "If you already have an account, please insert your {b}2FA code{/b}.\n\n{u}Otherwise, a new account will be created and details will be sent to your email.{/u}"
+
+ # game/update.rpy:494
+ old "Success!"
+ new "Успех!"
+
+ # game/update.rpy:496
+ old "{color=#F00}Failure!{/color}"
+ new "{color=#F00}Fracasso!{/color}"
+
+ # game/update.rpy:501
+ old "Please insert your {b}2FA Secret{/b} {i}or the link{/i} sent to you by email.\n\n{size=18}{color=#f00}WARNING:{/color} Will be saved locally without cryptography. We advise using Google Authenticator or similar instead.{/size}"
+ new "Please insert your {b}2FA Secret{/b} {i}or the link{/i} sent to you by email.\n\n{size=18}{color=#f00}WARNING:{/color} Will be saved locally without cryptography. We advise using Google Authenticator or similar instead.{/size}"
+
+ # game/update.rpy:510
+ old "Invalid OTPAuth URL.\nEnsure you used the URL sent to you by email!"
+ new "URL OTPAuth Inválida.\nCertifique-se que você utilizou a URL enviada por email!"
+
diff --git a/game/tl/ru/vault.rpy b/game/tl/ru/vault.rpy
new file mode 100644
index 0000000..99a0b72
--- /dev/null
+++ b/game/tl/ru/vault.rpy
@@ -0,0 +1,24 @@
+# TODO: Translation updated at 2023-07-08 18:36
+
+translate ru strings:
+
+ # game/vault.rpy:92
+ old "Welcome to the {b}Mana Launcher{/b}!\n\nIf you do not have an account, one will be created for you."
+ new "Welcome to the {b}Mana Launcher{/b}!\n\nIf you do not have an account, one will be created for you."
+
+ # game/vault.rpy:113
+ old "Password: "
+ new "Password: "
+
+ # game/vault.rpy:131
+ old "TOTP: "
+ new "TOTP: "
+
+ # game/vault.rpy:156
+ old "Remember email"
+ new "Remember email"
+
+ # game/vault.rpy:168
+ old "Remember password (unsafe!)"
+ new "Remember password (unsafe!)"
+
diff --git a/game/tl/ru/wiki.rpy b/game/tl/ru/wiki.rpy
new file mode 100644
index 0000000..0b06253
--- /dev/null
+++ b/game/tl/ru/wiki.rpy
@@ -0,0 +1,8 @@
+# TODO: Translation updated at 2023-07-08 18:36
+
+translate ru strings:
+
+ # game/wiki.rpy:35
+ old "External Link"
+ new "External Link"
+