. ├── Cargo.toml ├── formgen.txt ├── .gitignore └── src ├── i18n │   ├── loader.rs │   ├── mod.rs │   └── translate.rs ├── locales │   ├── en-US │   │   └── main.ftl │   └── pt-BR │   └── main.ftl └── main.rs 6 directories, 9 files === CONTEÚDO DOS ARQUIVOS === === ./src/main.rs === use anyhow::{Ok, Result}; use clap::Parser; use reqwest::blocking::Client; mod i18n; use i18n::{init_locales, t}; #[derive(Debug, Parser)] #[command(author, version, about)] struct Args { #[arg(short, long, env = "UPTIME_KUMA_URL")] url: Option, #[arg(short, long, env = "UPTIME_KUMA_API_KEY")] api_key: Option, } fn main() -> Result<()> { init_locales()?; let args = Args::parse(); let url = args .url .as_deref() .ok_or_else(|| anyhow::anyhow!("{}", t("missing_url")))?; let api_key = args .api_key .as_deref() .ok_or_else(|| anyhow::anyhow!("{}", t("missing_api_key")))?; let client = Client::new(); let response = client.get(url).basic_auth("", Some(api_key)).send()?; if response.status().is_success() { let metrics = response.text()?; println!("{}", t("success")); println!("{}", t("metrics_preview")); println!("{}", &metrics[..200.min(metrics.len())]); } else { println!("{}", response.status()); println!("{}: {}", t("Response"), response.text()?); } Ok(()) } === ./src/i18n/translate.rs === use crate::i18n::loader::LOCALES; use fluent_templates::Loader; use std::str::FromStr; use unic_langid::LanguageIdentifier; fn get_sys_locale() -> LanguageIdentifier { let sys_lang = sys_locale::get_locale().unwrap_or_else(|| String::from("pt-BR")); LanguageIdentifier::from_str(&sys_lang).expect("Invalid language") } pub fn t(key: &str) -> String { LOCALES.lookup(&get_sys_locale(), key) } === ./src/i18n/loader.rs === use anyhow::Ok; use fluent_templates::static_loader; static_loader! { pub static LOCALES = { locales: "./src/locales", fallback_language: "pt-BR", customise: |bundle| bundle.set_use_isolating(false), }; } pub fn init_locales() -> anyhow::Result<()> { Ok(()) } === ./src/i18n/mod.rs === pub mod loader; pub mod translate; pub use loader::init_locales; pub use translate::t; === ./Cargo.toml === [package] name = "uptime-kuma-dashboard" version = "0.1.0" edition = "2024" [dependencies] clap = { version = "4.5", features = ["derive", "env"] } reqwest = { version = "0.12", features = ["blocking", "json"] } anyhow = "1.0" fluent-templates = "0.13.2" unic-langid = "0.9.6" sys-locale = "0.3.2"