Added support for multiple languages

This commit is contained in:
2024-04-16 16:02:48 +03:00
parent aded63f9d5
commit c5855fced7
52 changed files with 973 additions and 409 deletions

View File

@@ -40,16 +40,16 @@ pub async fn menu_markup(
}
#[inline]
fn make_button(text: &str, command: &str, hash: &str) -> InlineKeyboardButton {
fn make_button(text: &str, command: &str, param: &str) -> InlineKeyboardButton {
let mut data = command.to_owned();
data.reserve(44);
data.reserve(param.len() + 1);
data.push(' ');
data.push_str(hash);
data.push_str(param);
InlineKeyboardButton::callback(text, data)
}
#[inline]
pub fn account_markup(name: &str, is_encrypted: bool) -> InlineKeyboardMarkup {
pub fn account_markup(name: &str, is_encrypted: bool, locale: LocaleRef) -> InlineKeyboardMarkup {
let mut hash = [0; 43];
B64_ENGINE
.encode_slice(<Sha256 as Digest>::digest(name), &mut hash)
@@ -57,31 +57,41 @@ pub fn account_markup(name: &str, is_encrypted: bool) -> InlineKeyboardMarkup {
let hash = std::str::from_utf8(&hash).unwrap();
let encryption_button = if is_encrypted {
("Decrypt", "decrypt")
(locale.decrypt_button.as_ref(), "decrypt")
} else {
("Hide", "get")
(locale.hide_button.as_ref(), "get")
};
let main_buttons = [
("Alter name", "an"),
("Alter login", "al"),
("Alter password", "ap"),
(locale.change_name_button.as_ref(), "an"),
(locale.change_login_button.as_ref(), "al"),
(locale.change_password_button.as_ref(), "ap"),
encryption_button,
("Delete account", "delete0"),
(locale.delete_account_button.as_ref(), "delete0"),
]
.into_iter()
.map(|(text, command)| make_button(text, command, hash))
.chunks(3);
let menu_button = InlineKeyboardButton::callback("Back to the menu", "get_menu");
let menu_button = InlineKeyboardButton::callback(locale.menu_button.as_ref(), "get_menu");
InlineKeyboardMarkup::new(&main_buttons).append_row([menu_button])
}
#[inline]
pub fn language_markup() -> InlineKeyboardMarkup {
let languages = [("🇷🇺 Русский", "ru"), ("🇬🇧 English", "en")]
.into_iter()
.map(|(text, param)| make_button(text, "change_locale", param))
.chunks(3);
InlineKeyboardMarkup::new(&languages)
}
/// Creates a markup with a "Delete message" button.
/// This markup should be added for all messages that won't be deleted afterwards
#[inline]
pub fn deletion_markup() -> InlineKeyboardMarkup {
let button = InlineKeyboardButton::callback("Delete message", "delete_message");
pub fn deletion_markup(locale: LocaleRef) -> InlineKeyboardMarkup {
let button =
InlineKeyboardButton::callback(locale.delete_message_button.as_ref(), "delete_message");
InlineKeyboardMarkup::new([[button]])
}