parent
881411ebd3
commit
bd47a004bf
@ -0,0 +1,18 @@ |
||||
{ |
||||
"welcome_public": "@{user} Welcome to the group! The group user will now follow you back to complete the sign-up.\nTo share a post, @ the group user or use a group hashtag.\n\nUse /help for more info.", |
||||
"welcome_member_only": "@{user} Welcome to the group! This group has posting restricted to members.\nIf you'd like to join, please ask one of the group admins:\n{admins}", |
||||
"welcome_join_cmd": "Welcome to the group! The group user will now follow you to complete the sign-up. Make sure you follow back to receive shared posts!\n\nUse /help for more info.", |
||||
"welcome_closed": "Sorry, this group is closed to new sign-ups.\nPlease ask one of the group admins to add you:", |
||||
"user_list_member": "- {user}", |
||||
"user_list_admin": "- {user} [admin]", |
||||
"help_admin_commands": "\n**Admin commands:**\n`/ping` - check the group works\n`/add user` - add a member (user@domain)\n`/remove user` - remove a member\n`/add #hashtag` - add a group hashtag\n`/remove #hashtag` - remove a group hashtag\n`/undo` - un-boost a replied-to post, delete an announcement\n`/ban x` - ban a user or server\n`/unban x` - lift a ban\n`/admin user` - grant admin rights\n`/deadmin user` - revoke admin rights\n`/closegroup` - make member-only\n`/opengroup` - make public-access\n`/announce x` - make a public announcement", |
||||
"cmd_leave_resp": "You're no longer a group member. Unfollow the group user to stop receiving group messages.", |
||||
"member_list_heading": "Group members:", |
||||
"admin_list_heading": "Group admins:", |
||||
"tag_list_heading": "Group tags:", |
||||
"tag_list_entry": "- {tag}", |
||||
"cmd_close_resp": "Group changed to member-only", |
||||
"cmd_close_resp_noaction": "No action, group is member-only already", |
||||
"cmd_open_resp": "Group changed to open-access", |
||||
"cmd_open_resp_noaction": "No action, group is open-access already", |
||||
} |
@ -0,0 +1,81 @@ |
||||
//! magic for custom translations and strings
|
||||
|
||||
use std::collections::HashMap; |
||||
use once_cell::sync::Lazy; |
||||
|
||||
#[derive(Debug,Clone,Serialize,Deserialize,Default)] |
||||
pub struct TranslationTable { |
||||
#[serde(flatten)] |
||||
entries: Option<HashMap<String, String>>, |
||||
} |
||||
|
||||
pub const EMPTY_TRANSLATION_TABLE : TranslationTable = TranslationTable { |
||||
entries: None, |
||||
}; |
||||
|
||||
impl TranslationTable { |
||||
pub fn new() -> Self { |
||||
Self::default() |
||||
} |
||||
|
||||
pub fn add_translation(&mut self, key : impl ToString, subs : impl ToString) { |
||||
if self.entries.is_none() { |
||||
self.entries = Some(Default::default()); |
||||
} |
||||
self.entries.as_mut().unwrap().insert(key.to_string(), subs.to_string()); |
||||
} |
||||
|
||||
pub fn subs(&self, key : &str, substitutions: &[&str]) -> String { |
||||
if let Some(ee) = &self.entries { |
||||
match ee.get(key) { |
||||
Some(s) => { |
||||
// TODO optimize
|
||||
let mut s = s.clone(); |
||||
for pair in substitutions.chunks(2) { |
||||
if pair.len() != 2 { |
||||
continue; |
||||
} |
||||
s = s.replace(&format!("{{{}}}", pair[0]), pair[1]); |
||||
} |
||||
s |
||||
} |
||||
None => key.to_owned() |
||||
} |
||||
} else { |
||||
key.to_owned() |
||||
} |
||||
} |
||||
} |
||||
|
||||
#[cfg(test)] |
||||
mod tests { |
||||
use crate::tr::TranslationTable; |
||||
|
||||
#[test] |
||||
fn deser_tr_table() { |
||||
let tr : TranslationTable = serde_json::from_str(r#"{"foo":"bar"}"#).unwrap(); |
||||
assert_eq!("bar", tr.subs("foo", &[])); |
||||
assert_eq!("xxx", tr.subs("xxx", &[])); |
||||
} |
||||
|
||||
|
||||
#[test] |
||||
fn subs() { |
||||
let mut tr = TranslationTable::new(); |
||||
tr.add_translation("hello_user", "Hello, {user}!"); |
||||
assert_eq!("Hello, James!", tr.subs("hello_user", &["user", "James"])); |
||||
} |
||||
} |
||||
|
||||
#[macro_export] |
||||
macro_rules! tr { |
||||
($tr_haver:expr, $key:literal) => { |
||||
$tr_haver.tr().subs($key, &[]) |
||||
}; |
||||
|
||||
($tr_haver:expr, $key:literal, $($k:tt=$value:expr),*) => { |
||||
$tr_haver.tr().subs($key, &[ |
||||
$(stringify!($k), $value),* |
||||
]) |
||||
}; |
||||
} |
Loading…
Reference in new issue