#[cfg(feature = "i18n")]
mod imp {
use rust_embed::RustEmbed;
use std::sync::LazyLock;
use wlr_i18n::FluentLanguageLoader;
#[derive(RustEmbed)]
#[folder = "i18n/"]
struct Localizations;
pub static LOADER: LazyLock<FluentLanguageLoader> =
LazyLock::new(|| wlr_i18n::build_loader("wlr_shot", &Localizations));
pub fn init() {
wlr_i18n::select(&LOADER, &Localizations);
}
}
#[cfg(feature = "i18n")]
pub use imp::{LOADER, init};
#[cfg(not(feature = "i18n"))]
mod imp {
include!(concat!(env!("OUT_DIR"), "/i18n_fallback.rs"));
pub fn init() {}
}
#[cfg(not(feature = "i18n"))]
pub use imp::{fallback, init};
#[cfg(feature = "i18n")]
#[macro_export]
macro_rules! tr {
($id:literal) => {
$crate::i18n::LOADER.get($id)
};
($id:literal, $($name:ident = $value:expr),+ $(,)?) => {{
let mut args = ::std::collections::HashMap::new();
$( args.insert(::std::stringify!($name), $value); )+
$crate::i18n::LOADER.get_args($id, args)
}};
}
#[cfg(not(feature = "i18n"))]
#[macro_export]
macro_rules! tr {
($id:literal) => {
$crate::i18n::fallback($id, &[])
};
($id:literal, $($name:ident = $value:expr),+ $(,)?) => {
$crate::i18n::fallback(
$id,
&[ $( (::std::stringify!($name), ::std::format!("{}", $value)) ),+ ],
)
};
}