#![deny(missing_docs)]
#![doc = include_str!("../README.md")]
mod catalog;
mod deferred;
#[cfg(feature = "formatting")]
mod format;
mod locale;
mod message;
mod preferences;
#[cfg(feature = "formatting")]
pub use format::{FormatError, LocaleFormatters};
fn new_bundle<R: std::borrow::Borrow<fluent_bundle::FluentResource>>(
language: unic_langid::LanguageIdentifier,
) -> fluent_bundle::FluentBundle<R> {
let mut bundle = fluent_bundle::FluentBundle::new(vec![language]);
bundle
.add_builtins()
.expect("a fresh bundle has no conflicting functions");
bundle
}
#[cfg(feature = "tooling")]
pub mod tooling;
pub use catalog::{Catalog, Language, Resource, Translator};
pub use deferred::DeferredMessage;
pub use fluent_bundle::FluentValue;
pub use locale::{Locale, PreviewMode};
pub use message::{Argument, Message, SourceCatalog};
pub use preferences::{LanguagePreference, LanguagePreferenceStore, Localization};
#[derive(Debug, thiserror::Error)]
pub enum LocalizationError {
#[error("language preference: {0}")]
Preference(String),
#[error("invalid language tag `{0}`")]
InvalidLocale(String),
#[error("invalid catalog {resource}: {detail}")]
InvalidResource {
resource: String,
detail: String,
},
#[error("cannot format {namespace}/{id}: {detail}")]
Format {
namespace: String,
id: String,
detail: String,
},
}