# Учимся делать перевод ![ну а хуле ебать в россии живём](https://i.imgur.com/tw19gr8.jpg) ## Требования: * Понять переводимую вещь. Достаточно исследовать её в игре. * Обзавестить набором переводчиков и постоянно работающим поисковиком. * Руки или аналогичное. * Аккаунт на [Github](https://github.com/). ## Процесс перевода: 1. Ставим [GitHub Desktop](https://desktop.github.com/). Логинимся под своим аккаунтом. Если умеете пользоваться, то можете не читать этот гайд, а сразу переводить. 2. Идём [сюда](https://github.com/frosty-dev/white-dream-main). Жмём кнопку справа-сверху: ![](https://i.imgur.com/pjnHWbO.png) 4. Открываем програму **GitHub Desktop** и жмём сочетание **CTRL+Shift+O**. 5. Ищем свой форк среди списка (**в красном прямоугольнике должен быть ваш никнейм на Github**) и жмём **Clone**, папку для сохранения можете выбрать любую другую: ![](https://i.imgur.com/wsfEM2i.png) ## Вариант #1: 1. Переходим в ту папку, куда скачали репозиторий ранее, ищем заветный файл **tgstation.dme** и открываем его. 2. Откроется **DreamMaker**, в нём открываем снова **tgstation.dme** двойным кликом, жмём **CTRL+F**, откроется панелька поиска, делаем всё как на картинке (вместо **"camera"** подставляем нужное слово или фразу без перевода): ![](https://i.imgur.com/1A0Qd7w.png) 3. Нажимаем **Find All** и ждём долго. Внизу должны быть результаты поиска. Каждая строка это результат. Двойным кликом жмём по результату и откроется окно с кодом, для базового перевода нам нужны переменные **name** и **desc**, остальные лучше не трогать: ![](https://i.imgur.com/Km46XmX.png) 4. Переводим и жмём **CTRL+S**. Это сохранит результат! Можем продолжить переводить дальше, пока не надоест. ## Вариант #2: 1. Для тех, кто хочет заниматься переводом на адекватном уровне: https://hackmd.io/gMPO4INZQUCArHeHE_V9yg ## Отправка результата: 1. Когда надоело переводить, открываем **GitHub Desktop**, видим то, что мы изменили. Жмём кнопку **Commit to master** (штука в красном прямоугольнике это название коммита. Можете писать туда что угодно. Чуть ниже описание, там также): ![](https://i.imgur.com/1alljPo.png) 2. Потом сюда: ![](https://i.imgur.com/HdDRZun.png) 3. Идём [снова сюда](https://github.com/frosty-dev/white-dream-main). 4. Жмём опять кнопку справа-сверху: ![](https://i.imgur.com/pjnHWbO.png) 5. Нас перекинет на наш форк. Видим наш коммит, жмём: ![](https://i.imgur.com/uIiktBv.png) 6. Внизу будет список изменений и другая не очень важная информация. Кликаем сюда: ![](https://i.imgur.com/vURbUcH.png) 7. В поле **Title** пишем понятное и короткое описание того, что вы хотели бы впилить. 8. На вкладке **Write** тоже заполняем всё. Комментарии можете не убирать, их всё равно не будет видно. На вкладке **Preview** можете посмотреть как будет выглядеть готовая версия. 9. Жмём ![](https://i.imgur.com/pEpjvVI.png), если всё готово. 10. Да. Это так. ## Адвансед перевод: ### Проки для перевода: * **to_chat(userref, "ENGLISH_TEXT")** - то, что выводится пользователю. Пример: ```dm to_chat(user, "<span class='notice'>You slot \the [TC] into [parent] and charge its internal uplink.</span>") ``` То, что закрыто в квадратные скобки **[ПЕРЕМЕННАЯ]** является переменной и не требует перевода. Они могут быть переставлены или заменены при надобности, если это может улучшить перевод. Всё остальное можно смело переводить (кроме **HTML-тегов**, естественно). Также, макросы по типу **\the** или **\a** должны **ПОЛНОСТЬЮ** отсутствовать в конечном переводе. Они не используются. **Пример перевода:** ```dm to_chat(user, "<span class='notice'>Вставляю [TC] в [parent] заряжая его внутренний передатчик.</span>") ``` * **visible_message("СООБЩЕНИЕ", "СООБЩЕНИЕ ПОЛЬЗОВАТЕЛЮ (ЕСЛИ ТОТ УКАЗАН)", "СООБЩЕНИЕ ДЛЯ СЛЕПЫХ", ...)** - то, что выводится всем пользователям в радиусе. Пример: ```dm target_turf.visible_message("<span class='warning'>[target_turf] collapses under its own weight into a puddle of goop and undigested debris!</span>") ``` В некоторых случаях придётся использовать процедуру **capitalize(msg)**. Она заставляет текст внутри себя писаться с большой буквы. **Пример перевода:** ```dm target_turf.visible_message("<span class='warning'><b>[capitalize(target_turf)]</b> рушится под собственным весом в лужу из слизи и рыхлого мусора!</span>") ``` Тут стоит заметить, что был добавлен тег **`<b></b>`**. Его стоит использовать тоже по возможности, так как он делает часть текста **более заметной** для акцентирования внимания пользователя на важном. * Сообщения из проков **examine(mob/user)**. То, что пользователь видит при осмотре той или иной штуки. Пример: ```dm /obj/item/pinpointer/wayfinding/examine(mob/user) . = ..() . += "<hr>" var/msg = "Its tracking indicator reads " if(target) var/obj/machinery/navbeacon/wayfinding/B = target msg += "\"[B.codes["wayfinding"]]\"." else msg = "Its tracking indicator is blank." if(owner) msg += " It belongs to [owner]." . += msg ``` Переменная **.** есть объект наследования. Если проще, то это дополняет часть вывода основной процедуры **examine()**. **Пример перевода:** ```dm /obj/item/pinpointer/wayfinding/examine(mob/user) . = ..() . += "<hr>" var/msg = "Отслеживающий индикатор сообщает " if(target) var/obj/machinery/navbeacon/wayfinding/B = target msg += "\"[B.codes["wayfinding"]]\"." else msg = "Отслеживающий индикатор пуст." if(owner) msg += " Принадлежит [owner]." . += msg ``` Тут есть особенности. Макросы **\n** не стоит удалять из текста, так как они отвечают за перенос строки. Если их не будет, то текст станет выглядеть как каша. Ещё существует прок **examine_more()** и подразумевает собой более детальный осмотр той или иной вещи. Он переводится аналогично. * Прок **say("СООБЩЕНИЕ")**. Пример: ```dm say("<span class='robot'>Thank you for recycling, [user.first_name()]! Here is [rfnd_amt ? "[rfnd_amt] credits." : "a freshly synthesized costume!"]</span>") ``` Здесь можно наблюдать особенную переменную с двумя вариантами: `[rfnd_amt ? "[rfnd_amt] credits." : "a freshly synthesized costume!"]`. Она работает очень просто. Сначала идёт переменная, которая проверяется, это у нас **rfnd_amt**, если она не 0, то выводится первый вариант сообщения `"[rfnd_amt] credits."`, иначе же второй `"a freshly synthesized costume!"`. **Пример перевода:** ```dm say("<span class='robot'>Спасибо за переработку, [user.first_name()]! Получи [rfnd_amt ? "[rfnd_amt] кредитов." : "свежий синтезированный костюмчик!"]</span>") ``` Важно, что в процедурах **say()** не должно быть **HTML-тегов** (возможны исключения как в этом примере, учтите). ### Научите склонять именааа! Для этого существует прок **sklonenie("СООБЩЕНИЕ", ПАДЕЖ, ПОЛ)**. Пример: ```dm "<b>[user]</b> [message_verb_continuous] <b>[sklonenie(src.name, VINITELNI, gender)]</b>[message_hit_area] [sklonenie(I.name, TVORITELNI, I.gender)]!" ``` На выходе будет: **Александр Рофлер** бьёт **Ричарда Женьку** в голову катаной! Все типы падежей: * **RODITELNI** * **DATELNI** * **VINITELNI** * **TVORITELNI** * **PREDLOZHNI**