Skip to content

Commit

Permalink
Merge branch 'translate' into craft-menu
Browse files Browse the repository at this point in the history
  • Loading branch information
larentoun authored Jul 12, 2024
2 parents cb44b25 + c613d3c commit 4cf6081
Show file tree
Hide file tree
Showing 57 changed files with 594 additions and 84 deletions.
37 changes: 37 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
'TGUI':
- 'tgui/**'

'Звук':
- '**/*.ogg'

'Спрайты':
- '**/*.dmi'
- '**/*.png'

'Изменение Карты':
- '**/*.dmm'

'НЕ МОДУЛЬНО':
- all: ['code/**']
- branches-ignore:
- 'translate'

'Частичная модульность':
- all: ['code/**', modular_bandastation/**]

'Перевод':
branches:
- 'translate'

'Инструменты':
- '.gihub/workflows/**'
- 'tools/**'

'Изменение конфига':
- 'config/**'

'Документация':
- '**/*.md'

'SQL':
- 'SQL/**'
13 changes: 13 additions & 0 deletions .github/workflows/label.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: "Label"

on:
- pull_request_target

jobs:
labeler:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v4
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
sync-labels: true
121 changes: 121 additions & 0 deletions code/__DEFINES/bandastation/ru_jobs.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
// Keep this in sync with JOBS_RU from tgui\packages\tgui\bandastation\ru_jobs.tsx
//No department
#define JOB_ASSISTANT_RU "Гражданский"
#define JOB_PRISONER_RU "Заключенный"
//Command
#define JOB_CAPTAIN_RU "Капитан"
#define JOB_HEAD_OF_PERSONNEL_RU "Глава персонала"
#define JOB_HEAD_OF_SECURITY_RU "Глава службы безопасности"
#define JOB_RESEARCH_DIRECTOR_RU "Директор исследований"
#define JOB_CHIEF_ENGINEER_RU "Главный инженер"
#define JOB_CHIEF_MEDICAL_OFFICER_RU "Главный врач"
#define JOB_BRIDGE_ASSISTANT_RU "Bridge Assistant"
#define JOB_VETERAN_ADVISOR_RU "Veteran Security Advisor"
//Silicon
#define JOB_AI_RU "ИИ"
#define JOB_CYBORG_RU "Киборг"
#define JOB_PERSONAL_AI_RU "Персональный ИИ"
#define JOB_HUMAN_AI_RU "Большой брат"
//Security
#define JOB_WARDEN_RU "Смотритель"
#define JOB_DETECTIVE_RU "Детектив"
#define JOB_SECURITY_OFFICER_RU "Офицер"
#define JOB_SECURITY_OFFICER_MEDICAL_RU "Офицер (Медицина)"
#define JOB_SECURITY_OFFICER_ENGINEERING_RU "Офицер (Инженерия)"
#define JOB_SECURITY_OFFICER_SCIENCE_RU "Офицер (Исследование)"
#define JOB_SECURITY_OFFICER_SUPPLY_RU "Офицер (Снабжение)"
//Engineering
#define JOB_STATION_ENGINEER_RU "Станционный инженер"
#define JOB_ATMOSPHERIC_TECHNICIAN_RU "Атмосферный техник"
//Medical
#define JOB_CORONER_RU "Коронер"
#define JOB_MEDICAL_DOCTOR_RU "Врач"
#define JOB_PARAMEDIC_RU "Парамедик"
#define JOB_CHEMIST_RU "Химик"
//Science
#define JOB_SCIENTIST_RU "Ученый"
#define JOB_ROBOTICIST_RU "Робототехник"
#define JOB_GENETICIST_RU "Генетик"
//Supply
#define JOB_QUARTERMASTER_RU "Квартирмейстер"
#define JOB_CARGO_TECHNICIAN_RU "Грузчик"
#define JOB_CARGO_GORILLA_RU "Cargo Gorilla"
#define JOB_SHAFT_MINER_RU "Шахтер"
#define JOB_BITRUNNER_RU "Битраннер"
//Service
#define JOB_BARTENDER_RU "Бармен"
#define JOB_BOTANIST_RU "Ботаник"
#define JOB_COOK_RU "Повар"
#define JOB_CHEF_RU "Шеф"
#define JOB_JANITOR_RU "Уборщик"
#define JOB_CLOWN_RU "Клоун"
#define JOB_MIME_RU "Мим"
#define JOB_CURATOR_RU "Куратор"
#define JOB_LAWYER_RU "Адвокат"
#define JOB_CHAPLAIN_RU "Священник"
#define JOB_PSYCHOLOGIST_RU "Психолог"

GLOBAL_LIST_INIT(job_titles_ru, list(
//No department
JOB_ASSISTANT = JOB_ASSISTANT_RU,
JOB_PRISONER = JOB_PRISONER_RU,
//Command
JOB_CAPTAIN = JOB_CAPTAIN_RU,
JOB_HEAD_OF_PERSONNEL = JOB_HEAD_OF_PERSONNEL_RU,
JOB_HEAD_OF_SECURITY = JOB_HEAD_OF_SECURITY_RU,
JOB_RESEARCH_DIRECTOR = JOB_RESEARCH_DIRECTOR_RU,
JOB_CHIEF_ENGINEER = JOB_CHIEF_ENGINEER_RU,
JOB_CHIEF_MEDICAL_OFFICER = JOB_CHIEF_MEDICAL_OFFICER_RU,
JOB_BRIDGE_ASSISTANT = JOB_BRIDGE_ASSISTANT_RU,
JOB_VETERAN_ADVISOR = JOB_VETERAN_ADVISOR_RU,
//Silicon
JOB_AI = JOB_AI_RU,
JOB_CYBORG = JOB_CYBORG_RU,
JOB_PERSONAL_AI = JOB_PERSONAL_AI_RU,
JOB_HUMAN_AI = JOB_HUMAN_AI_RU,
//Security
JOB_WARDEN = JOB_WARDEN_RU,
JOB_DETECTIVE = JOB_DETECTIVE_RU,
JOB_SECURITY_OFFICER = JOB_SECURITY_OFFICER_RU,
JOB_SECURITY_OFFICER_MEDICAL = JOB_SECURITY_OFFICER_MEDICAL_RU,
JOB_SECURITY_OFFICER_ENGINEERING = JOB_SECURITY_OFFICER_ENGINEERING_RU,
JOB_SECURITY_OFFICER_SCIENCE = JOB_SECURITY_OFFICER_SCIENCE_RU,
JOB_SECURITY_OFFICER_SUPPLY = JOB_SECURITY_OFFICER_SUPPLY_RU,
//Engineering
JOB_STATION_ENGINEER = JOB_STATION_ENGINEER_RU,
JOB_ATMOSPHERIC_TECHNICIAN = JOB_ATMOSPHERIC_TECHNICIAN_RU,
//Medical
JOB_CORONER = JOB_CORONER_RU,
JOB_MEDICAL_DOCTOR = JOB_MEDICAL_DOCTOR_RU,
JOB_PARAMEDIC = JOB_PARAMEDIC_RU,
JOB_CHEMIST = JOB_CHEMIST_RU,
//Science
JOB_SCIENTIST = JOB_SCIENTIST_RU,
JOB_ROBOTICIST = JOB_ROBOTICIST_RU,
JOB_GENETICIST = JOB_GENETICIST_RU,
//Supply
JOB_QUARTERMASTER = JOB_QUARTERMASTER_RU,
JOB_CARGO_TECHNICIAN = JOB_CARGO_TECHNICIAN_RU,
JOB_CARGO_GORILLA = JOB_CARGO_GORILLA_RU,
JOB_SHAFT_MINER = JOB_SHAFT_MINER_RU,
JOB_BITRUNNER = JOB_BITRUNNER_RU,
//Service
JOB_BARTENDER = JOB_BARTENDER_RU,
JOB_BOTANIST = JOB_BOTANIST_RU,
JOB_COOK = JOB_COOK_RU,
JOB_CHEF = JOB_CHEF_RU,
JOB_JANITOR = JOB_JANITOR_RU,
JOB_CLOWN = JOB_CLOWN_RU,
JOB_MIME = JOB_MIME_RU,
JOB_CURATOR = JOB_CURATOR_RU,
JOB_LAWYER = JOB_LAWYER_RU,
JOB_CHAPLAIN = JOB_CHAPLAIN_RU,
JOB_PSYCHOLOGIST = JOB_PSYCHOLOGIST_RU,
))

// Use it ONLY for display!!
/proc/job_title_ru(title)
var/job_ru_title = GLOB.job_titles_ru[title]
if(job_ru_title)
return job_ru_title
return title
2 changes: 1 addition & 1 deletion code/__HELPERS/game.dm
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@
if(!SSticker.IsRoundInProgress() || QDELETED(character))
return
var/area/player_area = get_area(character)
deadchat_broadcast("<span class='game'> has arrived at the station at <span class='name'>[player_area.name]</span>.</span>", "<span class='game'><span class='name'>[character.real_name]</span> ([rank])</span>", follow_target = character, message_type=DEADCHAT_ARRIVALRATTLE)
deadchat_broadcast("<span class='game'> прибыл на станцию у <span class='name'>[player_area.name]</span>.</span>", "<span class='game'><span class='name'>[character.real_name]</span> ([job_title_ru(rank)])</span>", follow_target = character, message_type=DEADCHAT_ARRIVALRATTLE)
if(!character.mind)
return
if(!GLOB.announcement_systems.len)
Expand Down
6 changes: 3 additions & 3 deletions code/__HELPERS/roundend.dm
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ GLOBAL_LIST_INIT(achievements_unlocked, list())
var/mob/living/carbon/human/H = L
category = "humans"
if(H.mind)
mob_data["job"] = H.mind.assigned_role.title
mob_data["job"] = job_title_ru(H.mind.assigned_role.title)
else
mob_data["job"] = "Unknown"
mob_data["species"] = H.dna.species.name
Expand Down Expand Up @@ -685,8 +685,8 @@ GLOBAL_LIST_INIT(achievements_unlocked, list())
/proc/printplayer(datum/mind/ply, fleecheck)
var/jobtext = ""
if(!is_unassigned_job(ply.assigned_role))
jobtext = " the <b>[ply.assigned_role.title]</b>"
var/text = "<b>[ply.key]</b> was <b>[ply.name]</b>[jobtext] and"
jobtext = ", <b>[job_title_ru(ply.assigned_role.title)],</b>"
var/text = "<b>[ply.key]</b> был <b>[ply.name]</b>[jobtext] and"
if(ply.current)
if(ply.current.stat == DEAD)
text += " [span_redtext("died")]"
Expand Down
4 changes: 2 additions & 2 deletions code/controllers/subsystem/blackbox.dm
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ Versioning
if(!did_they_suicide && !first_death.len)
first_death["name"] = "[(L.real_name == L.name) ? L.real_name : "[L.real_name] as [L.name]"]"
first_death["role"] = null
first_death["role"] = L.mind.assigned_role.title
first_death["role"] = job_title_ru(L.mind.assigned_role.title)
first_death["area"] = "[AREACOORD(L)]"
first_death["damage"] = "<font color='#FF5555'>[L.getBruteLoss()]</font>/<font color='orange'>[L.getFireLoss()]</font>/<font color='lightgreen'>[L.getToxLoss()]</font>/<font color='lightblue'>[L.getOxyLoss()]</font>"
first_death["last_words"] = L.last_words
Expand All @@ -339,7 +339,7 @@ Versioning
"}, list(
"name" = L.real_name,
"key" = L.ckey,
"job" = L.mind.assigned_role.title,
"job" = job_title_ru(L.mind.assigned_role.title),
"special" = L.mind.special_role,
"pod" = get_area_name(L, TRUE),
"laname" = L.lastattacker,
Expand Down
22 changes: 11 additions & 11 deletions code/datums/keybinding/_defines.dm
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#define CATEGORY_CLIENT "CLIENT"
#define CATEGORY_EMOTE "EMOTE"
#define CATEGORY_ADMIN "ADMIN"
#define CATEGORY_XENO "XENO"
#define CATEGORY_CARBON "CARBON"
#define CATEGORY_HUMAN "HUMAN"
#define CATEGORY_ROBOT "ROBOT"
#define CATEGORY_AI "AI"
#define CATEGORY_MISC "MISC"
#define CATEGORY_MOVEMENT "MOVEMENT"
#define CATEGORY_COMMUNICATION "COMMUNICATION"
#define CATEGORY_CLIENT "КЛИЕНТ"
#define CATEGORY_EMOTE "ЭМОЦИИ"
#define CATEGORY_ADMIN "АДМИН"
#define CATEGORY_XENO "КСЕНО"
#define CATEGORY_CARBON "ГУМАНОИДЫ"
#define CATEGORY_HUMAN "ЛЮДИ"
#define CATEGORY_ROBOT "РОБОТЫ"
#define CATEGORY_AI "ИИ"
#define CATEGORY_MISC "ПРОЧЕЕ"
#define CATEGORY_MOVEMENT "ПЕРЕДВИЖЕНИЕ"
#define CATEGORY_COMMUNICATION "ОБЩЕНИЕ"

#define WEIGHT_HIGHEST 0
#define WEIGHT_ADMIN 10
Expand Down
4 changes: 2 additions & 2 deletions code/datums/memory/_memory.dm
Original file line number Diff line number Diff line change
Expand Up @@ -388,11 +388,11 @@

else if(ishuman(character))
// This can slip into memories involving monkey humans.
return "the unfamiliar person"
return "неизвестная персона"

if(istype(character, /datum/mind))
var/datum/mind/character_mind = character
return "\the [LOWER_TEXT(initial(character_mind.assigned_role.title))]"
return "[LOWER_TEXT(job_title_ru(initial(character_mind.assigned_role.title)))]"

// Generic result - mobs get "the guy", objs / turfs get "a thing"
return ismob(character) ? "\the [character]" : "\a [character]"
Expand Down
16 changes: 8 additions & 8 deletions code/game/gamemodes/objective.dm
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list
/datum/objective/assassinate/update_explanation_text()
..()
if(target?.current)
explanation_text = "Убейте [target.name], [!target_role_type ? target.assigned_role.title : target.special_role]."
explanation_text = "Убейте [target.name], [!target_role_type ? job_title_ru(target.assigned_role.title) : target.special_role]."
else
explanation_text = "Свободная задача."

Expand Down Expand Up @@ -280,7 +280,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list
/datum/objective/mutiny/update_explanation_text()
..()
if(target?.current)
explanation_text = "Убейте или отправьте в изгнание [target.name], [!target_role_type ? target.assigned_role.title : target.special_role]."
explanation_text = "Убейте или отправьте в изгнание [target.name], [!target_role_type ? job_title_ru(target.assigned_role.title) : target.special_role]."
else
explanation_text = "Свободная задача."

Expand All @@ -302,7 +302,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list

/datum/objective/maroon/update_explanation_text()
if(target?.current)
explanation_text = "Не дайте [target.name], [!target_role_type ? target.assigned_role.title : target.special_role], эвакуироватся живым со станции."
explanation_text = "Не дайте [target.name], [!target_role_type ? job_title_ru(target.assigned_role.title) : target.special_role], эвакуироватся живым со станции."
else
explanation_text = "Свободная задача."

Expand Down Expand Up @@ -333,7 +333,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list
/datum/objective/debrain/update_explanation_text()
..()
if(target?.current)
explanation_text = "Украдите мозг [target.name], [!target_role_type ? target.assigned_role.title : target.special_role]."
explanation_text = "Украдите мозг [target.name], [!target_role_type ? job_title_ru(target.assigned_role.title) : target.special_role]."
else
explanation_text = "Свободная задача."

Expand All @@ -359,7 +359,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list
/datum/objective/protect/update_explanation_text()
..()
if(target?.current)
explanation_text = "Защитите [target.name], [!target_role_type ? target.assigned_role.title : target.special_role]."
explanation_text = "Защитите [target.name], [!target_role_type ? job_title_ru(target.assigned_role.title) : target.special_role]."
else
explanation_text = "Свободная задача."

Expand All @@ -384,7 +384,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list
/datum/objective/jailbreak/update_explanation_text()
..()
if(target?.current)
explanation_text = "Удостоверьтесь, что [target.name], [!target_role_type ? target.assigned_role.title : target.special_role], сбежит живым и вне заключения."
explanation_text = "Удостоверьтесь, что [target.name], [!target_role_type ? job_title_ru(target.assigned_role.title) : target.special_role], сбежит живым и вне заключения."
else
explanation_text = "Свободная задача."

Expand All @@ -400,7 +400,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list
/datum/objective/jailbreak/detain/update_explanation_text()
..()
if(target?.current)
explanation_text = "Удостоверьтесь, что [target.name], [!target_role_type ? target.assigned_role.title : target.special_role], доставлен на ЦК живым и в заключении."
explanation_text = "Удостоверьтесь, что [target.name], [!target_role_type ? job_title_ru(target.assigned_role.title) : target.special_role], доставлен на ЦК живым и в заключении."
else
explanation_text = "Свободная задача."

Expand Down Expand Up @@ -527,7 +527,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list
/datum/objective/escape/escape_with_identity/update_explanation_text()
if(target?.current)
target_real_name = target.current.real_name
explanation_text = "Сбегите на эвакуационном шаттле или челноке под личиной [target_real_name], [target.assigned_role.title]"
explanation_text = "Сбегите на эвакуационном шаттле или челноке под личиной [target_real_name], [job_title_ru(target.assigned_role.title)]"
var/mob/living/carbon/human/H
if(ishuman(target.current))
H = target.current
Expand Down
4 changes: 2 additions & 2 deletions code/game/machinery/announcement_system.dm
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)

/obj/machinery/announcement_system/proc/CompileText(str, user, rank) //replaces user-given variables with actual thingies.
str = replacetext(str, "%PERSON", "[user]")
str = replacetext(str, "%RANK", "[rank]")
str = replacetext(str, "%RANK", "[job_title_ru(rank)]")
return str

/obj/machinery/announcement_system/proc/announce(message_type, user, rank, list/channels)
Expand All @@ -98,7 +98,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
if (!is_operational)
return

broadcast("Officer [officer.real_name] has been assigned to [department].", list(RADIO_CHANNEL_SECURITY))
broadcast("Офицер [officer.real_name] был назначен к отделу: [department].", list(RADIO_CHANNEL_SECURITY))

/// Sends a message to the appropriate channels.
/obj/machinery/announcement_system/proc/broadcast(message, list/channels)
Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/mail.dm
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@

/// Accepts a mind to initialize goodies for a piece of mail.
/obj/item/mail/proc/initialize_for_recipient(datum/mind/recipient)
name = "[initial(name)] for [recipient.name] ([recipient.assigned_role.title])"
name = "[initial(name)] для [recipient.name], ([job_title_ru(recipient.assigned_role.title)])"
recipient_ref = WEAKREF(recipient)

var/mob/living/body = recipient.current
Expand Down
2 changes: 1 addition & 1 deletion code/modules/admin/antag_panel.dm
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ GLOBAL_VAR(antag_prototypes)

var/out = "<B>[name]</B>[(current && (current.real_name != name))?" (as [current.real_name])":""]<br>"
out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]<br>"
out += "Assigned role: [assigned_role.title]. <a href='?src=[REF(src)];role_edit=1'>Edit</a><br>"
out += "Assigned role: [job_title_ru(assigned_role.title)]. <a href='?src=[REF(src)];role_edit=1'>Edit</a><br>"
out += "Faction and special role: <b><font color='red'>[special_role]</font></b><br>"
out += "<a href='?_src_=holder;[HrefToken()];check_teams=1'>Show Teams</a><br><br>"

Expand Down
2 changes: 1 addition & 1 deletion code/modules/admin/topic.dm
Original file line number Diff line number Diff line change
Expand Up @@ -793,7 +793,7 @@

//Job + antagonist
if(subject.mind)
special_role_description = "Role: <b>[subject.mind.assigned_role.title]</b>; Antagonist: <font color='red'><b>"
special_role_description = "Role: <b>[job_title_ru(subject.mind.assigned_role.title)]</b>; Antagonist: <font color='red'><b>"

if(subject.mind.antag_datums)
var/iterable = 0
Expand Down
2 changes: 1 addition & 1 deletion code/modules/antagonists/cult/cult_objectives.dm
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@

/datum/objective/sacrifice/update_explanation_text()
if(target)
explanation_text = "Sacrifice [target], the [target.assigned_role.title] via invoking an Offer rune with [target.p_them()] on it and three acolytes around it."
explanation_text = "Sacrifice [target], [job_title_ru(target.assigned_role.title)], via invoking an Offer rune with [target.p_them()] on it and three acolytes around it."
else
explanation_text = "The veil has already been weakened here, proceed to the final objective."

Expand Down
Loading

0 comments on commit 4cf6081

Please sign in to comment.