This saves a bit of duplicated boilerplate. Applets seem to work fairly well with this. Though we should see if any other changes to initial window settings are needed in certain applets for the exact behavior we want.
47 lines
1.3 KiB
Rust
47 lines
1.3 KiB
Rust
// SPDX-License-Identifier: MPL-2.0-only
|
|
|
|
use cosmic_time::once_cell::sync::Lazy;
|
|
use i18n_embed::{
|
|
fluent::{fluent_language_loader, FluentLanguageLoader},
|
|
DefaultLocalizer, LanguageLoader, Localizer,
|
|
};
|
|
use rust_embed::RustEmbed;
|
|
|
|
#[derive(RustEmbed)]
|
|
#[folder = "i18n/"]
|
|
struct Localizations;
|
|
|
|
pub static LANGUAGE_LOADER: Lazy<FluentLanguageLoader> = Lazy::new(|| {
|
|
let loader: FluentLanguageLoader = fluent_language_loader!();
|
|
|
|
loader
|
|
.load_fallback_language(&Localizations)
|
|
.expect("Error while loading fallback language");
|
|
|
|
loader
|
|
});
|
|
|
|
#[macro_export]
|
|
macro_rules! fl {
|
|
($message_id:literal) => {{
|
|
i18n_embed_fl::fl!($crate::localize::LANGUAGE_LOADER, $message_id)
|
|
}};
|
|
|
|
($message_id:literal, $($args:expr),*) => {{
|
|
i18n_embed_fl::fl!($crate::localize::LANGUAGE_LOADER, $message_id, $($args), *)
|
|
}};
|
|
}
|
|
|
|
// Get the `Localizer` to be used for localizing this library.
|
|
pub fn localizer() -> Box<dyn Localizer> {
|
|
Box::from(DefaultLocalizer::new(&*LANGUAGE_LOADER, &Localizations))
|
|
}
|
|
|
|
pub fn localize() {
|
|
let localizer = localizer();
|
|
let requested_languages = i18n_embed::DesktopLanguageRequester::requested_languages();
|
|
|
|
if let Err(error) = localizer.select(&requested_languages) {
|
|
eprintln!("Error while loading language for App List {}", error);
|
|
}
|
|
}
|