diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index aa953760bce71..9d72d7c432041 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -235,7 +235,7 @@
if(!SSticker.IsRoundInProgress() || QDELETED(character))
return
var/area/player_area = get_area(character)
- deadchat_broadcast(" has arrived at the station at [player_area.name].", "[character.real_name] ([rank])", follow_target = character, message_type=DEADCHAT_ARRIVALRATTLE)
+ deadchat_broadcast(" прибыл на станцию у [player_area.name].", "[character.real_name] ([job_title_ru(rank)])", follow_target = character, message_type=DEADCHAT_ARRIVALRATTLE)
if(!character.mind)
return
if(!GLOB.announcement_systems.len)
diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm
index ed8d882393b5c..df04d20c5e2cb 100644
--- a/code/__HELPERS/roundend.dm
+++ b/code/__HELPERS/roundend.dm
@@ -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
@@ -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 [ply.assigned_role.title]"
- var/text = "[ply.key] was [ply.name][jobtext] and"
+ jobtext = ", [job_title_ru(ply.assigned_role.title)],"
+ var/text = "[ply.key] был [ply.name][jobtext] and"
if(ply.current)
if(ply.current.stat == DEAD)
text += " [span_redtext("died")]"
diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm
index bb4f3802d89b1..be70843f930ec 100644
--- a/code/controllers/subsystem/blackbox.dm
+++ b/code/controllers/subsystem/blackbox.dm
@@ -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"] = "[L.getBruteLoss()]/[L.getFireLoss()]/[L.getToxLoss()]/[L.getOxyLoss()]"
first_death["last_words"] = L.last_words
@@ -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,
diff --git a/code/datums/memory/_memory.dm b/code/datums/memory/_memory.dm
index 08a694616a336..1d4301769024f 100644
--- a/code/datums/memory/_memory.dm
+++ b/code/datums/memory/_memory.dm
@@ -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]"
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index c73dda284d97a..467eeea067a81 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -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 = "Свободная задача."
@@ -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 = "Свободная задача."
@@ -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 = "Свободная задача."
@@ -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 = "Свободная задача."
@@ -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 = "Свободная задача."
@@ -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 = "Свободная задача."
@@ -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 = "Свободная задача."
@@ -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
diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm
index 7e30566430b0f..bb08161e404c9 100644
--- a/code/game/machinery/announcement_system.dm
+++ b/code/game/machinery/announcement_system.dm
@@ -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)
@@ -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)
diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm
index 2aec478162445..3a2cbf0637afd 100644
--- a/code/game/objects/items/mail.dm
+++ b/code/game/objects/items/mail.dm
@@ -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
diff --git a/code/modules/admin/antag_panel.dm b/code/modules/admin/antag_panel.dm
index 877bebffe9509..91948ab3faae1 100644
--- a/code/modules/admin/antag_panel.dm
+++ b/code/modules/admin/antag_panel.dm
@@ -97,7 +97,7 @@ GLOBAL_VAR(antag_prototypes)
var/out = "[name][(current && (current.real_name != name))?" (as [current.real_name])":""]
"
out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
"
- out += "Assigned role: [assigned_role.title]. Edit
"
+ out += "Assigned role: [job_title_ru(assigned_role.title)]. Edit
"
out += "Faction and special role: [special_role]
"
out += "Show Teams
"
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 13f5b3544b2a0..e5f6c8b5f4260 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -793,7 +793,7 @@
//Job + antagonist
if(subject.mind)
- special_role_description = "Role: [subject.mind.assigned_role.title]; Antagonist: "
+ special_role_description = "Role: [job_title_ru(subject.mind.assigned_role.title)]; Antagonist: "
if(subject.mind.antag_datums)
var/iterable = 0
diff --git a/code/modules/antagonists/cult/cult_objectives.dm b/code/modules/antagonists/cult/cult_objectives.dm
index d290b212ab22f..4f6a8b7cf7267 100644
--- a/code/modules/antagonists/cult/cult_objectives.dm
+++ b/code/modules/antagonists/cult/cult_objectives.dm
@@ -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."
diff --git a/code/modules/antagonists/obsessed/obsessed.dm b/code/modules/antagonists/obsessed/obsessed.dm
index 7316102e2ce09..aeeab3988e6ad 100644
--- a/code/modules/antagonists/obsessed/obsessed.dm
+++ b/code/modules/antagonists/obsessed/obsessed.dm
@@ -167,7 +167,7 @@
/datum/objective/assassinate/obsessed/update_explanation_text()
..()
if(target?.current)
- explanation_text = "Murder [target.name], the [!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
message_admins("WARNING! [ADMIN_LOOKUPFLW(owner)] obsessed objectives forged without an obsession!")
explanation_text = "Free Objective"
@@ -179,7 +179,7 @@
..()
old = find_coworker(target)
if(target?.current && old)
- explanation_text = "Murder [target.name], [old]'s coworker."
+ explanation_text = "Убейте [target.name], коллегу [old]."
else
explanation_text = "Free Objective"
@@ -217,7 +217,7 @@
var/datum/antagonist/obsessed/creeper = owner.has_antag_datum(/datum/antagonist/obsessed)
if(target?.current && creeper)
creeper.trauma.attachedobsessedobj = src
- explanation_text = "Spend [DisplayTimeText(timer)] around [target.name] while they're alive."
+ explanation_text = "Проведите [DisplayTimeText(timer)] возле [target.name], пока они живы."
else
explanation_text = "Free Objective"
@@ -235,7 +235,7 @@
hugs_needed = rand(4,6)
var/datum/antagonist/obsessed/creeper = owner.has_antag_datum(/datum/antagonist/obsessed)
if(target?.current && creeper)
- explanation_text = "Hug [target.name] [hugs_needed] times while they're alive."
+ explanation_text = "Обнимите [target.name] [hugs_needed] раз, пока они живы."
else
explanation_text = "Free Objective"
@@ -251,7 +251,7 @@
/datum/objective/polaroid/update_explanation_text()
..()
if(target?.current)
- explanation_text = "Take a photo of [target.name] while they're alive, and keep it in your bag."
+ explanation_text = "Сделайте фото [target.name], пока они живы, и храните фотографию у себя."
else
explanation_text = "Free Objective"
@@ -275,6 +275,6 @@
/datum/objective/steal/heirloom_thief/update_explanation_text()
..()
if(steal_target)
- explanation_text = "Steal [target.name]'s family heirloom, [steal_target] they cherish."
+ explanation_text = "Украдите семейную реликвию, [steal_target], которая чтится у [target.name]."
else
explanation_text = "Free Objective"
diff --git a/code/modules/antagonists/paradox_clone/paradox_clone.dm b/code/modules/antagonists/paradox_clone/paradox_clone.dm
index e809e8cecbf00..b51d02fd7c026 100644
--- a/code/modules/antagonists/paradox_clone/paradox_clone.dm
+++ b/code/modules/antagonists/paradox_clone/paradox_clone.dm
@@ -94,7 +94,7 @@
if(!target?.current)
explanation_text = "Free Objective"
CRASH("WARNING! [ADMIN_LOOKUPFLW(owner)] paradox clone objectives forged without an original!")
- explanation_text = "Murder and replace [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role]. Remember, your mission is to blend in, do not kill anyone else unless you have to!"
+ explanation_text = "Murder and replace [target.name], [!target_role_type ? job_title_ru(target.assigned_role.title) : target.special_role]. Remember, your mission is to blend in, do not kill anyone else unless you have to!"
///Static bluespace stream used in its ghost poll icon.
/obj/effect/bluespace_stream
diff --git a/code/modules/antagonists/traitor/objectives/assassination.dm b/code/modules/antagonists/traitor/objectives/assassination.dm
index 639ea50eb6c21..0282ff63bde77 100644
--- a/code/modules/antagonists/traitor/objectives/assassination.dm
+++ b/code/modules/antagonists/traitor/objectives/assassination.dm
@@ -158,7 +158,7 @@
var/datum/mind/target_mind = pick(possible_targets)
set_target(target_mind.current)
replace_in_name("%TARGET%", target.real_name)
- replace_in_name("%JOB TITLE%", target_mind.assigned_role.title)
+ replace_in_name("%JOB TITLE%", job_title_ru(target_mind.assigned_role.title))
RegisterSignal(target, COMSIG_LIVING_DEATH, PROC_REF(on_target_death))
return TRUE
diff --git a/code/modules/antagonists/traitor/objectives/demoralise_assault.dm b/code/modules/antagonists/traitor/objectives/demoralise_assault.dm
index 13b87edd6ae73..2914065d7c2d7 100644
--- a/code/modules/antagonists/traitor/objectives/demoralise_assault.dm
+++ b/code/modules/antagonists/traitor/objectives/demoralise_assault.dm
@@ -102,7 +102,7 @@
set_target(target_mind.current)
replace_in_name("%TARGET%", target.real_name)
- replace_in_name("%JOB TITLE%", target_mind.assigned_role.title)
+ replace_in_name("%JOB TITLE%", job_title_ru(target_mind.assigned_role.title))
attacks_required = rand(min_attacks_required, max_attacks_required)
replace_in_name("%COUNT%", attacks_required)
diff --git a/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm b/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm
index b2b44d4c91581..d1172d06bb654 100644
--- a/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm
+++ b/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm
@@ -144,7 +144,7 @@
target_item = quirk.heirloom.resolve()
AddComponent(/datum/component/traitor_objective_register, target_item, succeed_signals = list(COMSIG_QDELETING))
replace_in_name("%TARGET%", target_mind.name)
- replace_in_name("%JOB TITLE%", target_mind.assigned_role.title)
+ replace_in_name("%JOB TITLE%", job_title_ru(target_mind.assigned_role.title))
replace_in_name("%ITEM%", target_item.name)
return TRUE
diff --git a/code/modules/antagonists/traitor/objectives/eyesnatching.dm b/code/modules/antagonists/traitor/objectives/eyesnatching.dm
index c438b62b24e4f..4f3c84999569e 100644
--- a/code/modules/antagonists/traitor/objectives/eyesnatching.dm
+++ b/code/modules/antagonists/traitor/objectives/eyesnatching.dm
@@ -105,7 +105,7 @@
set_target(target_mind.current)
replace_in_name("%TARGET%", target_mind.name)
- replace_in_name("%JOB TITLE%", target_mind.assigned_role.title)
+ replace_in_name("%JOB TITLE%", job_title_ru(target_mind.assigned_role.title))
RegisterSignal(target, COMSIG_CARBON_LOSE_ORGAN, PROC_REF(check_eye_removal))
AddComponent(/datum/component/traitor_objective_register, target, fail_signals = list(COMSIG_QDELETING))
return TRUE
diff --git a/code/modules/antagonists/traitor/objectives/infect.dm b/code/modules/antagonists/traitor/objectives/infect.dm
index 17b2c1da2e74c..43e20215c59ee 100644
--- a/code/modules/antagonists/traitor/objectives/infect.dm
+++ b/code/modules/antagonists/traitor/objectives/infect.dm
@@ -123,7 +123,7 @@
var/datum/mind/target_mind = pick(possible_targets)
set_target(target_mind.current)
replace_in_name("%TARGET%", target.real_name)
- replace_in_name("%JOB TITLE%", target_mind.assigned_role.title)
+ replace_in_name("%JOB TITLE%", job_title_ru(target_mind.assigned_role.title))
RegisterSignal(target, COMSIG_LIVING_DEATH, PROC_REF(on_target_death))
return TRUE
diff --git a/code/modules/antagonists/traitor/objectives/kidnapping.dm b/code/modules/antagonists/traitor/objectives/kidnapping.dm
index ea349b7d10e7e..1a00f8e539346 100644
--- a/code/modules/antagonists/traitor/objectives/kidnapping.dm
+++ b/code/modules/antagonists/traitor/objectives/kidnapping.dm
@@ -169,7 +169,7 @@
dropoff_area = pick(possible_areas)
replace_in_name("%TARGET%", target_mind.name)
- replace_in_name("%JOB TITLE%", target_mind.assigned_role.title)
+ replace_in_name("%JOB TITLE%", job_title_ru(target_mind.assigned_role.title))
replace_in_name("%AREA%", initial(dropoff_area.name))
replace_in_name("%TC%", alive_bonus)
return TRUE
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index e78b1703ebe23..fbea013fc5ec6 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -289,7 +289,7 @@
/datum/job/proc/get_spawn_message_information()
SHOULD_CALL_PARENT(TRUE)
var/list/info = list()
- info += "Ваша роль на станции: [title].\n"
+ info += "Ваша роль на станции: [job_title_ru(title)].\n"
var/related_policy = get_policy(title)
var/radio_info = get_radio_information()
if(related_policy)
diff --git a/code/modules/mob/living/silicon/silicon_say.dm b/code/modules/mob/living/silicon/silicon_say.dm
index 9310211aa0e6d..882105ced5889 100644
--- a/code/modules/mob/living/silicon/silicon_say.dm
+++ b/code/modules/mob/living/silicon/silicon_say.dm
@@ -9,7 +9,7 @@
designation = trim_left(player.designation + " " + player.job)
if(HAS_TRAIT(mind, TRAIT_DISPLAY_JOB_IN_BINARY))
- designation = mind.assigned_role.title
+ designation = job_title_ru(mind.assigned_role.title)
if(isAI(src))
// AIs are loud and ugly
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index a6a1c58c7eddf..d44cc164d7fe5 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -365,7 +365,7 @@
message_admins("[key_name_admin(usr)] has offered control of ([ADMIN_LOOKUPFLW(M)]) to ghosts")
var/poll_message = "Do you want to play as [span_danger(M.real_name)]?"
if(M.mind)
- poll_message = "[poll_message] Job: [span_notice(M.mind.assigned_role.title)]."
+ poll_message = "[poll_message] Job: [span_notice(job_title_ru(M.mind.assigned_role.title))]."
if(M.mind.special_role)
poll_message = "[poll_message] Status: [span_boldnotice(M.mind.special_role)]."
else
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 23930f3cca7d0..fe3b55281e0ea 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -364,7 +364,7 @@
var/datum/brain_trauma/special/imaginary_friend/trapped_owner/trauma = target.gain_trauma(/datum/brain_trauma/special/imaginary_friend/trapped_owner)
var/poll_message = "Do you want to play as [span_danger(target.real_name)]?"
if(target.mind)
- poll_message = "[poll_message] Job:[span_notice(target.mind.assigned_role.title)]."
+ poll_message = "[poll_message] Job:[span_notice(job_title_ru(target.mind.assigned_role.title))]."
if(target.mind && target.mind.special_role)
poll_message = "[poll_message] Status:[span_boldnotice(target.mind.special_role)]."
else if(target.mind)