mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Refactor chat message i18n
- All message types now use i18n to declare format, similar to /tell - hud-chat-you is removed for now, along with its usage in insert_alias()
This commit is contained in:
parent
96681cd448
commit
450de681e4
@ -1,11 +1,28 @@
|
|||||||
## Player events
|
## Player events, $user_gender should be available
|
||||||
|
|
||||||
hud-chat-online_msg = [{ $name }] is online now
|
hud-chat-online_msg = [{ $name }] is online now
|
||||||
hud-chat-offline_msg = [{ $name }] went offline
|
hud-chat-offline_msg = [{ $name }] went offline
|
||||||
hud-chat-goodbye = Goodbye!
|
hud-chat-goodbye = Goodbye!
|
||||||
hud-chat-connection_lost = Connection lost. Kicking in { $time } seconds.
|
hud-chat-connection_lost = Connection lost. Kicking in { $time } seconds.
|
||||||
|
|
||||||
## Buff deaths
|
## Player /tell messages, $user_gender should be available
|
||||||
|
|
||||||
|
hud-chat-tell-to = To [{ $alias }]: { $msg }
|
||||||
|
hud-chat-tell-from = From [{ $alias }]: { $msg }
|
||||||
|
|
||||||
|
# Npc /tell messages, no gender info, sadly
|
||||||
|
|
||||||
|
hud-chat-tell-to-npc = To [{ $alias }]: { $msg }
|
||||||
|
hud-chat-tell-from-npc = From [{ $alias }]: { $msg }
|
||||||
|
|
||||||
|
# Generic messages
|
||||||
|
|
||||||
|
hud-chat-message = [{ $alias }]: { $msg }
|
||||||
|
hud-chat-message-with-name = [{ $alias }] { $name }: { $msg }
|
||||||
|
hud-chat-message-in-group = ({ $group }) [{ $alias }]: { $msg }
|
||||||
|
hud-chat-message-with-name-in-group = ({ $group }) [{ $alias }] { $name }: { $msg }
|
||||||
|
|
||||||
|
## PvP Buff deaths, both $attacker_gender and $victim_gender are available
|
||||||
|
|
||||||
hud-chat-died_of_pvp_buff_msg =
|
hud-chat-died_of_pvp_buff_msg =
|
||||||
.burning = [{ $victim }] died of: burning caused by [{ $attacker }]
|
.burning = [{ $victim }] died of: burning caused by [{ $attacker }]
|
||||||
@ -14,13 +31,9 @@ hud-chat-died_of_pvp_buff_msg =
|
|||||||
.crippled = [{ $victim }] died of: crippled caused by [{ $attacker }]
|
.crippled = [{ $victim }] died of: crippled caused by [{ $attacker }]
|
||||||
.frozen = [{ $victim }] died of: frozen caused by [{ $attacker }]
|
.frozen = [{ $victim }] died of: frozen caused by [{ $attacker }]
|
||||||
.mysterious = [{ $victim }] died of: secret caused by [{ $attacker }]
|
.mysterious = [{ $victim }] died of: secret caused by [{ $attacker }]
|
||||||
hud-chat-died_of_buff_nonexistent_msg =
|
|
||||||
.burning = [{ $victim }] died of: burning
|
## PvE Buff deaths, only $victim_gender is available
|
||||||
.bleeding = [{ $victim }] died of: bleeding
|
|
||||||
.curse = [{ $victim }] died of: curse
|
|
||||||
.crippled = [{ $victim }] died of: crippled
|
|
||||||
.frozen = [{ $victim }] died of: frozen
|
|
||||||
.mysterious = [{ $victim }] died of: secret
|
|
||||||
hud-chat-died_of_npc_buff_msg =
|
hud-chat-died_of_npc_buff_msg =
|
||||||
.burning = [{ $victim }] died of: burning caused by { $attacker }
|
.burning = [{ $victim }] died of: burning caused by { $attacker }
|
||||||
.bleeding = [{ $victim }] died of: bleeding caused by { $attacker }
|
.bleeding = [{ $victim }] died of: bleeding caused by { $attacker }
|
||||||
@ -29,7 +42,17 @@ hud-chat-died_of_npc_buff_msg =
|
|||||||
.frozen = [{ $victim }] died of: frozen caused by { $attacker }
|
.frozen = [{ $victim }] died of: frozen caused by { $attacker }
|
||||||
.mysterious = [{ $victim }] died of: secret caused by { $attacker }
|
.mysterious = [{ $victim }] died of: secret caused by { $attacker }
|
||||||
|
|
||||||
## Other PvP deaths
|
## Random Buff deaths, only $victim_gender is available
|
||||||
|
|
||||||
|
hud-chat-died_of_buff_nonexistent_msg =
|
||||||
|
.burning = [{ $victim }] died of: burning
|
||||||
|
.bleeding = [{ $victim }] died of: bleeding
|
||||||
|
.curse = [{ $victim }] died of: curse
|
||||||
|
.crippled = [{ $victim }] died of: crippled
|
||||||
|
.frozen = [{ $victim }] died of: frozen
|
||||||
|
.mysterious = [{ $victim }] died of: secret
|
||||||
|
|
||||||
|
## Other PvP deaths, both $attacker_gender and $victim_gender are available
|
||||||
|
|
||||||
hud-chat-pvp_melee_kill_msg = [{ $attacker }] defeated [{ $victim }]
|
hud-chat-pvp_melee_kill_msg = [{ $attacker }] defeated [{ $victim }]
|
||||||
hud-chat-pvp_ranged_kill_msg = [{ $attacker }] shot [{ $victim }]
|
hud-chat-pvp_ranged_kill_msg = [{ $attacker }] shot [{ $victim }]
|
||||||
@ -37,7 +60,7 @@ hud-chat-pvp_explosion_kill_msg = [{ $attacker }] blew up [{ $victim }]
|
|||||||
hud-chat-pvp_energy_kill_msg = [{ $attacker }] killed [{ $victim }] with magic
|
hud-chat-pvp_energy_kill_msg = [{ $attacker }] killed [{ $victim }] with magic
|
||||||
hud-chat-pvp_other_kill_msg = [{ $attacker }] killed [{ $victim }]
|
hud-chat-pvp_other_kill_msg = [{ $attacker }] killed [{ $victim }]
|
||||||
|
|
||||||
## PvE deaths
|
## Other PvE deaths, only $victim_gender is available
|
||||||
|
|
||||||
hud-chat-npc_melee_kill_msg = { $attacker } killed [{ $victim }]
|
hud-chat-npc_melee_kill_msg = { $attacker } killed [{ $victim }]
|
||||||
hud-chat-npc_ranged_kill_msg = { $attacker } shot [{ $victim }]
|
hud-chat-npc_ranged_kill_msg = { $attacker } shot [{ $victim }]
|
||||||
@ -45,17 +68,13 @@ hud-chat-npc_explosion_kill_msg = { $attacker } blew up [{ $victim }]
|
|||||||
hud-chat-npc_energy_kill_msg = { $attacker } killed [{ $victim }] with magic
|
hud-chat-npc_energy_kill_msg = { $attacker } killed [{ $victim }] with magic
|
||||||
hud-chat-npc_other_kill_msg = { $attacker } killed [{ $victim }]
|
hud-chat-npc_other_kill_msg = { $attacker } killed [{ $victim }]
|
||||||
|
|
||||||
## Other deaths
|
## Other deaths, only $victim_gender is available
|
||||||
|
|
||||||
hud-chat-fall_kill_msg = [{ $name }] died from fall damage
|
hud-chat-fall_kill_msg = [{ $name }] died from fall damage
|
||||||
hud-chat-suicide_msg = [{ $name }] died from self-inflicted wounds
|
hud-chat-suicide_msg = [{ $name }] died from self-inflicted wounds
|
||||||
hud-chat-default_death_msg = [{ $name }] died
|
hud-chat-default_death_msg = [{ $name }] died
|
||||||
|
|
||||||
## Result of our i18n antipatterns
|
## Chat utils
|
||||||
|
|
||||||
hud-chat-you = You
|
|
||||||
|
|
||||||
## Random stuff
|
|
||||||
|
|
||||||
hud-chat-all = All
|
hud-chat-all = All
|
||||||
hud-chat-chat_tab_hover_tooltip = Right click for settings
|
hud-chat-chat_tab_hover_tooltip = Right click for settings
|
||||||
|
@ -19,8 +19,14 @@ pub fn localize_chat_message(
|
|||||||
) -> (ChatType<String>, String) {
|
) -> (ChatType<String>, String) {
|
||||||
let info = lookup_fn(&msg);
|
let info = lookup_fn(&msg);
|
||||||
|
|
||||||
let name_format_or_you = |you, uid: &Uid| match info.player_alias.get(uid).cloned() {
|
let name_format_or_complex = |complex, uid: &Uid| match info.player_alias.get(uid).cloned() {
|
||||||
Some(pi) => insert_alias(you && info.you == *uid, pi, localization),
|
Some(pi) => {
|
||||||
|
if complex {
|
||||||
|
insert_alias(info.you == *uid, pi, localization)
|
||||||
|
} else {
|
||||||
|
pi.player_alias
|
||||||
|
}
|
||||||
|
},
|
||||||
None => info
|
None => info
|
||||||
.entity_name
|
.entity_name
|
||||||
.get(uid)
|
.get(uid)
|
||||||
@ -28,25 +34,59 @@ pub fn localize_chat_message(
|
|||||||
.expect("client didn't proved enough info"),
|
.expect("client didn't proved enough info"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let name_format = |uid: &Uid| name_format_or_you(false, uid);
|
// Some messages do suffer from complicated logic of insert_alias.
|
||||||
|
// This includes every notification-like message, like death.
|
||||||
|
let name_format = |uid: &Uid| name_format_or_complex(false, uid);
|
||||||
|
|
||||||
// FIXME: this shouldn't pass review!
|
// FIXME: this shouldn't pass the review!
|
||||||
let gender_str = |uid: &Uid| "he".to_owned();
|
let gender_str = |uid: &Uid| "he".to_owned();
|
||||||
|
|
||||||
let message_format = |from: &Uid, content: &Content, group: Option<&String>| {
|
let message_format = |from: &Uid, content: &Content, group: Option<&String>| {
|
||||||
let alias = name_format_or_you(true, from);
|
let alias = name_format_or_complex(true, from);
|
||||||
|
|
||||||
let name = if let Some(pi) = info.player_alias.get(from).cloned() && show_char_name {
|
let name = if let Some(pi) = info.player_alias.get(from).cloned() && show_char_name {
|
||||||
pi.character.map(|c| c.name)
|
pi.character.map(|c| c.name)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
let message = localization.get_content(content);
|
let message = localization.get_content(content);
|
||||||
match (group, name) {
|
|
||||||
(Some(group), None) => format!("({group}) [{alias}]: {message}"),
|
let line = match group {
|
||||||
(Some(group), Some(name)) => format!("({group}) [{alias}] {name}: {message}"),
|
Some(group) => match name {
|
||||||
(None, None) => format!("[{alias}]: {message}"),
|
Some(name) => localization.get_msg_ctx(
|
||||||
(None, Some(name)) => format!("[{alias}] {name}: {message}"),
|
"hud-chat-message-in-group-with-name",
|
||||||
}
|
&i18n::fluent_args! {
|
||||||
|
"group" => group,
|
||||||
|
"alias" => alias,
|
||||||
|
"name" => name,
|
||||||
|
"msg" => message,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
None => {
|
||||||
|
localization.get_msg_ctx("hud-chat-message-in-group", &i18n::fluent_args! {
|
||||||
|
"group" => group,
|
||||||
|
"alias" => alias,
|
||||||
|
"msg" => message,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
},
|
||||||
|
None => match name {
|
||||||
|
Some(name) => {
|
||||||
|
localization.get_msg_ctx("hud-chat-message-with-name", &i18n::fluent_args! {
|
||||||
|
"alias" => alias,
|
||||||
|
"name" => name,
|
||||||
|
"msg" => message,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
None => localization.get_msg_ctx("hud-chat-message", &i18n::fluent_args! {
|
||||||
|
"alias" => alias,
|
||||||
|
"msg" => message,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
line.into_owned()
|
||||||
};
|
};
|
||||||
|
|
||||||
let new_msg = match &msg.chat_type {
|
let new_msg = match &msg.chat_type {
|
||||||
@ -67,20 +107,23 @@ pub fn localize_chat_message(
|
|||||||
| ChatType::FactionMeta(_)
|
| ChatType::FactionMeta(_)
|
||||||
| ChatType::GroupMeta(_) => localization.get_content(msg.content()),
|
| ChatType::GroupMeta(_) => localization.get_content(msg.content()),
|
||||||
ChatType::Tell(from, to) => {
|
ChatType::Tell(from, to) => {
|
||||||
let from_alias = name_format(from);
|
// If `from` is you, it means you're writing to someone
|
||||||
let to_alias = name_format(to);
|
// and you want to see who you're writing to.
|
||||||
// TODO: internationalise
|
//
|
||||||
if *from == info.you {
|
// Otherwise, someone writes to you, and you want to see
|
||||||
format!(
|
// who is that person that's writing to you.
|
||||||
"To [{to_alias}]: {}",
|
let (key, person_to_show) = if info.you == *from {
|
||||||
localization.get_content(msg.content())
|
("hud-chat-tell-to", to)
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
format!(
|
("hud-chat-tell-from", from)
|
||||||
"From [{from_alias}]: {}",
|
};
|
||||||
localization.get_content(msg.content())
|
|
||||||
)
|
localization
|
||||||
}
|
.get_msg_ctx(key, &i18n::fluent_args! {
|
||||||
|
"alias" => name_format(person_to_show),
|
||||||
|
"user_gender" => gender_str(person_to_show),
|
||||||
|
})
|
||||||
|
.into_owned()
|
||||||
},
|
},
|
||||||
ChatType::Say(uid) | ChatType::Region(uid) | ChatType::World(uid) => {
|
ChatType::Say(uid) | ChatType::Region(uid) | ChatType::World(uid) => {
|
||||||
message_format(uid, msg.content(), None)
|
message_format(uid, msg.content(), None)
|
||||||
@ -88,24 +131,27 @@ pub fn localize_chat_message(
|
|||||||
ChatType::Group(uid, descriptor) | ChatType::Faction(uid, descriptor) => {
|
ChatType::Group(uid, descriptor) | ChatType::Faction(uid, descriptor) => {
|
||||||
message_format(uid, msg.content(), Some(descriptor))
|
message_format(uid, msg.content(), Some(descriptor))
|
||||||
},
|
},
|
||||||
// NPCs can't talk. Should be filtered by hud/mod.rs for voxygen and
|
|
||||||
// should be filtered by server (due to not having a Pos) for chat-cli
|
|
||||||
ChatType::Npc(uid) | ChatType::NpcSay(uid) => message_format(uid, msg.content(), None),
|
ChatType::Npc(uid) | ChatType::NpcSay(uid) => message_format(uid, msg.content(), None),
|
||||||
ChatType::NpcTell(from, to) => {
|
ChatType::NpcTell(from, to) => {
|
||||||
let from_alias = name_format(from);
|
// If `from` is you, it means you're writing to someone
|
||||||
let to_alias = name_format(to);
|
// and you want to see who you're writing to.
|
||||||
// TODO: internationalise
|
//
|
||||||
if *from == info.you {
|
// Otherwise, someone writes to you, and you want to see
|
||||||
format!(
|
// who is that person that's writing to you.
|
||||||
"To [{to_alias}]: {}",
|
//
|
||||||
localization.get_content(msg.content())
|
// Hopefully, no gendering needed, because for npc, we
|
||||||
)
|
// simply don't know.
|
||||||
|
let (key, person_to_show) = if info.you == *from {
|
||||||
|
("hud-chat-tell-to-npc", to)
|
||||||
} else {
|
} else {
|
||||||
format!(
|
("hud-chat-tell-from-npc", from)
|
||||||
"From [{from_alias}]: {}",
|
};
|
||||||
localization.get_content(msg.content())
|
|
||||||
)
|
localization
|
||||||
}
|
.get_msg_ctx(key, &i18n::fluent_args! {
|
||||||
|
"alias" => name_format(person_to_show),
|
||||||
|
})
|
||||||
|
.into_owned()
|
||||||
},
|
},
|
||||||
ChatType::Meta => localization.get_content(msg.content()),
|
ChatType::Meta => localization.get_content(msg.content()),
|
||||||
ChatType::Kill(kill_source, victim) => {
|
ChatType::Kill(kill_source, victim) => {
|
||||||
@ -277,16 +323,16 @@ fn get_buff_ident(buff: BuffKind) -> &'static str {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn insert_alias(you: bool, info: PlayerInfo, localization: &Localization) -> String {
|
// TODO: consider fetching "you" string from localization and somehow fetching
|
||||||
// FIXME: this should take gender into account
|
// user's gender and putting it as argument.
|
||||||
const YOU: &str = "hud-chat-you";
|
fn insert_alias(_replace_you: bool, info: PlayerInfo, _localization: &Localization) -> String {
|
||||||
// Leave space for a mod badge icon.
|
// Leave space for a mod badge icon.
|
||||||
const MOD_SPACING: &str = " ";
|
const MOD_SPACING: &str = " ";
|
||||||
match (info.is_moderator, you) {
|
|
||||||
(false, false) => info.player_alias,
|
if info.is_moderator {
|
||||||
(false, true) => localization.get_msg(YOU).to_string(),
|
info.player_alias
|
||||||
(true, false) => format!("{}{}", MOD_SPACING, info.player_alias),
|
} else {
|
||||||
(true, true) => format!("{}{}", MOD_SPACING, &localization.get_msg(YOU)),
|
format!("{}{}", MOD_SPACING, info.player_alias)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user