Pull user visible messages from localization library

This commit is contained in:
2023-01-25 23:04:53 +01:00
parent ed9bd87ab5
commit f3136bd319
6 changed files with 266 additions and 10 deletions

243
Cargo.lock generated
View File

@@ -20,6 +20,15 @@ dependencies = [
"libc",
]
[[package]]
name = "ansi_term"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
dependencies = [
"winapi",
]
[[package]]
name = "anyhow"
version = "1.0.65"
@@ -32,7 +41,7 @@ version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a941c39708478e8eea39243b5983f1c42d2717b3620ee91f4a52115fd02ac43f"
dependencies = [
"itertools",
"itertools 0.9.0",
"proc-macro-error",
"proc-macro2",
"quote",
@@ -114,6 +123,16 @@ dependencies = [
"once_cell",
]
[[package]]
name = "bstr"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b45ea9b00a7b3f2988e9a65ad3917e62123c38dba709b666506207be96d1790b"
dependencies = [
"memchr",
"serde",
]
[[package]]
name = "bumpalo"
version = "3.11.0"
@@ -146,12 +165,14 @@ dependencies = [
"diesel_migrations",
"ical",
"log",
"once_cell",
"pretty_env_logger",
"regex",
"reqwest",
"rrule",
"rust-i18n",
"serde",
"serde_yaml",
"serde_yaml 0.9.13",
"teloxide",
"thiserror",
"tokio",
@@ -206,6 +227,21 @@ dependencies = [
"phf_codegen",
]
[[package]]
name = "clap"
version = "2.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
dependencies = [
"ansi_term",
"atty",
"bitflags",
"strsim 0.8.0",
"textwrap",
"unicode-width",
"vec_map",
]
[[package]]
name = "concurrent-queue"
version = "1.2.4"
@@ -257,7 +293,7 @@ dependencies = [
"ident_case",
"proc-macro2",
"quote",
"strsim",
"strsim 0.10.0",
"syn",
]
@@ -526,6 +562,25 @@ dependencies = [
"wasi 0.11.0+wasi-snapshot-preview1",
]
[[package]]
name = "glob"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]]
name = "globset"
version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc"
dependencies = [
"aho-corasick",
"bstr",
"fnv",
"log",
"regex",
]
[[package]]
name = "h2"
version = "0.3.14"
@@ -684,6 +739,23 @@ dependencies = [
"unicode-normalization",
]
[[package]]
name = "ignore"
version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
dependencies = [
"globset",
"lazy_static",
"log",
"memchr",
"regex",
"same-file",
"thread_local",
"walkdir",
"winapi-util",
]
[[package]]
name = "indexmap"
version = "1.9.1"
@@ -718,6 +790,15 @@ dependencies = [
"either",
]
[[package]]
name = "itertools"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
dependencies = [
"either",
]
[[package]]
name = "itoa"
version = "1.0.3"
@@ -755,6 +836,12 @@ dependencies = [
"vcpkg",
]
[[package]]
name = "linked-hash-map"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
[[package]]
name = "log"
version = "0.4.17"
@@ -864,9 +951,9 @@ dependencies = [
[[package]]
name = "once_cell"
version = "1.15.0"
version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
[[package]]
name = "openssl"
@@ -1181,6 +1268,75 @@ dependencies = [
"thiserror",
]
[[package]]
name = "rust-i18n"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e99913232afabc7678c569e252f896f6cbc5bac0ce5298771e53dd22d7ac26c9"
dependencies = [
"anyhow",
"clap",
"glob",
"itertools 0.10.5",
"once_cell",
"quote",
"regex",
"rust-i18n-extract",
"rust-i18n-macro",
"serde",
"serde_derive",
"toml",
]
[[package]]
name = "rust-i18n-extract"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec44568e2cdf4bfb7a62381bbc6fcdf0a27c60cd503dfa12c59e6c17cf3177fa"
dependencies = [
"anyhow",
"ignore",
"proc-macro2",
"quote",
"regex",
"rust-i18n-support",
"serde",
"serde_json",
"serde_yaml 0.8.26",
"syn",
]
[[package]]
name = "rust-i18n-macro"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e7e3e8f27d472822c5cf092a22631ebc667d9f8dc89dfc50ef4e87f4ebdf92f"
dependencies = [
"glob",
"once_cell",
"proc-macro2",
"quote",
"rust-i18n-support",
"serde",
"serde_json",
"serde_yaml 0.8.26",
"syn",
]
[[package]]
name = "rust-i18n-support"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e6bbf2d058c3558bef952564ceb9afcb19631cde22b47dc44f436e62ecfb916"
dependencies = [
"glob",
"once_cell",
"proc-macro2",
"serde",
"serde_json",
"serde_yaml 0.8.26",
]
[[package]]
name = "rustc_version"
version = "0.4.0"
@@ -1196,6 +1352,15 @@ version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
[[package]]
name = "same-file"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
dependencies = [
"winapi-util",
]
[[package]]
name = "schannel"
version = "0.1.20"
@@ -1296,6 +1461,18 @@ dependencies = [
"syn",
]
[[package]]
name = "serde_yaml"
version = "0.8.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
dependencies = [
"indexmap",
"ryu",
"serde",
"yaml-rust",
]
[[package]]
name = "serde_yaml"
version = "0.9.13"
@@ -1343,6 +1520,12 @@ dependencies = [
"winapi",
]
[[package]]
name = "strsim"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]]
name = "strsim"
version = "0.10.0"
@@ -1465,6 +1648,15 @@ dependencies = [
"winapi-util",
]
[[package]]
name = "textwrap"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
dependencies = [
"unicode-width",
]
[[package]]
name = "thiserror"
version = "1.0.37"
@@ -1485,6 +1677,15 @@ dependencies = [
"syn",
]
[[package]]
name = "thread_local"
version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
dependencies = [
"once_cell",
]
[[package]]
name = "time"
version = "0.1.44"
@@ -1655,6 +1856,12 @@ dependencies = [
"tinyvec",
]
[[package]]
name = "unicode-width"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
[[package]]
name = "unsafe-libyaml"
version = "0.2.4"
@@ -1688,6 +1895,12 @@ version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "vec_map"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
[[package]]
name = "vecrem"
version = "0.1.0"
@@ -1706,6 +1919,17 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
[[package]]
name = "walkdir"
version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
dependencies = [
"same-file",
"winapi",
"winapi-util",
]
[[package]]
name = "want"
version = "0.3.0"
@@ -1886,3 +2110,12 @@ checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
dependencies = [
"winapi",
]
[[package]]
name = "yaml-rust"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
dependencies = [
"linked-hash-map",
]

View File

@@ -16,12 +16,18 @@ diesel = { version = "2.0.2", features = ["chrono", "sqlite"] }
diesel_migrations = "2.0.0"
ical = { version = "0.7.0", features = ["ical"], default-features = false }
log = "0.4.17"
once_cell = "1.17.0"
pretty_env_logger = "0.4.0"
regex = "1.6.0"
reqwest = "0.11.12"
rrule = "0.10.0"
rust-i18n = "1.1.1"
serde = { version = "1.0.145", features = ["derive"] }
serde_yaml = "0.9.13"
teloxide = { version = "0.11.0", features = ["macros", "throttle"] }
thiserror = "1.0.37"
tokio = { version = "1.21.2", features = ["macros"] }
[package.metadata.i18n]
available-locales = ["en", "de"]
default-locale = "de"

4
locales/de.yml Normal file
View File

@@ -0,0 +1,4 @@
messages:
next_appointment: "Nächster Termin: %{weekday}, %{date}"
appointment_today: "Heute um %{start_time} Uhr geht's weiter"
starting_now: "Jetzt geht's weiter"

4
locales/en.yml Normal file
View File

@@ -0,0 +1,4 @@
messages:
next_appointment: "Next meeting: %{weekday}, %{date}"
appointment_today: "Next meeting is today at %{start_time}"
starting_now: "The meeting starts now"

View File

@@ -159,7 +159,11 @@ pub async fn fetch_and_announce_appointment(
let announcement = bot
.send_message(
ChatId(chat_info.id),
format!("Nächster Termin: {}, {}", weekday, date_str),
t!(
"messages.next_appointment",
weekday = weekday,
date = &date_str.to_string()
),
)
.await?;

View File

@@ -29,6 +29,11 @@ use tokio::time::sleep;
use crate::db::DbChat;
#[macro_use]
extern crate rust_i18n;
i18n!("locales");
#[derive(Deserialize, Debug)]
pub struct Config {
token: String,
@@ -152,16 +157,16 @@ async fn check_task(bot: &Throttle<Bot>, reminder_time: NaiveTime, db: &Database
if now >= appointment.start {
reminder = Some(Reminder {
time: appointment.start,
text: "Jetzt geht's weiter".into(),
text: t!("messages.starting_now"),
});
} else {
let reminder_date_time = now.date().and_time(reminder_time).unwrap();
if now >= reminder_date_time {
reminder = Some(Reminder {
time: reminder_date_time,
text: format!(
"Heute um {} Uhr geht's weiter",
appointment.start.format("%H:%M")
text: t!(
"messages.appointment_today",
start_time = &appointment.start.format("%H:%M").to_string()
),
})
}