cranpose_localization/
lib.rs1#![deny(missing_docs)]
2#![doc = include_str!("../README.md")]
3
4mod catalog;
5mod deferred;
6#[cfg(feature = "formatting")]
7mod format;
8mod locale;
9mod message;
10mod preferences;
11#[cfg(feature = "formatting")]
12pub use format::{FormatError, LocaleFormatters};
13
14fn new_bundle<R: std::borrow::Borrow<fluent_bundle::FluentResource>>(
15 language: unic_langid::LanguageIdentifier,
16) -> fluent_bundle::FluentBundle<R> {
17 let mut bundle = fluent_bundle::FluentBundle::new(vec![language]);
18 bundle
19 .add_builtins()
20 .expect("a fresh bundle has no conflicting functions");
21 bundle
22}
23#[cfg(feature = "tooling")]
24pub mod tooling;
25
26pub use catalog::{Catalog, Language, Resource, Translator};
27pub use deferred::DeferredMessage;
28pub use fluent_bundle::FluentValue;
30pub use locale::{Locale, PreviewMode};
31pub use message::{Argument, Message, SourceCatalog};
32pub use preferences::{LanguagePreference, LanguagePreferenceStore, Localization};
33
34#[derive(Debug, thiserror::Error)]
36pub enum LocalizationError {
37 #[error("language preference: {0}")]
39 Preference(String),
40 #[error("invalid language tag `{0}`")]
42 InvalidLocale(String),
43 #[error("invalid catalog {resource}: {detail}")]
45 InvalidResource {
46 resource: String,
48 detail: String,
50 },
51 #[error("cannot format {namespace}/{id}: {detail}")]
53 Format {
54 namespace: String,
56 id: String,
58 detail: String,
60 },
61}