owned this note
owned this note
Published
Linked with GitHub
# Учимся делать перевод
![ну а хуле ебать в россии живём](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**