use fluent_templates::static_loader;
use std::path::PathBuf;
use unic_langid::langid;
pub use fluent_templates::fluent_bundle::FluentValue;
pub(crate) use fluent_templates::loader::LanguageIdentifier;
const FALLBACK_LITERAL: &str = "en-GB";
pub const LOCALES_DIR_NAME: &str = "locales";
pub const LOCALES_FTL_FILE: &str = "common.ftl";
static_loader! {
pub(crate) static LOADER = {
locales: "locales",
fallback_language: "en-GB",
};
}
pub const FALLBACK_LOCALE: &str = FALLBACK_LITERAL;
pub(crate) const FALLBACK_LANGUAGE: LanguageIdentifier = langid!("en-GB");
pub fn locales_root() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(LOCALES_DIR_NAME)
}
pub fn packaged_locale_path(locale: &str, file: &str) -> PathBuf {
PathBuf::from(format!(
"{}-{}",
env!("CARGO_PKG_NAME"),
env!("CARGO_PKG_VERSION")
))
.join(LOCALES_DIR_NAME)
.join(locale)
.join(file)
}
pub fn packaged_fallback_locale_path() -> PathBuf {
packaged_locale_path(FALLBACK_LOCALE, LOCALES_FTL_FILE)
}
mod diagnostics;
mod helpers;
mod loader;
mod locales;
mod selection;
pub mod testing;
pub use diagnostics::{
AttrKey, BundleLookup, DiagnosticMessageSet, MessageKey, resolve_message_set,
};
pub use helpers::{
MessageResolution, branch_phrase, get_localizer_for_lint, noop_reporter,
safe_resolve_message_set,
};
pub use loader::{Arguments, I18nError, Localizer};
pub use locales::{available_locales, supports_locale};
pub use selection::{LocaleSelection, LocaleSource, normalise_locale, resolve_localizer};
#[cfg(test)]
mod tests;