use i18n_embed::{
DesktopLanguageRequester,
fluent::{FluentLanguageLoader, fluent_language_loader},
};
use rust_embed::RustEmbed;
#[derive(RustEmbed)]
#[folder = "i18n/"]
struct Localizations;
pub static LANGUAGE_LOADER: std::sync::LazyLock<FluentLanguageLoader> =
std::sync::LazyLock::new(|| fluent_language_loader!());
pub fn init() {
let requested = DesktopLanguageRequester::requested_languages();
if let Err(err) = i18n_embed::select(&*LANGUAGE_LOADER, &Localizations, &requested) {
eprintln!("warning: failed to select i18n language, falling back to default: {err}");
}
}
#[macro_export]
macro_rules! fl {
($message_id:literal) => {{
i18n_embed_fl::fl!($crate::i18n::LANGUAGE_LOADER, $message_id)
}};
($message_id:literal, $($key:ident = $value:expr),+ $(,)?) => {{
i18n_embed_fl::fl!($crate::i18n::LANGUAGE_LOADER, $message_id, $($key = $value),+)
}};
}