Skip to main content

cranpose_localization/
lib.rs

1#![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;
28/// Values accepted by generated message accessors, including borrowed text and numbers.
29pub use fluent_bundle::FluentValue;
30pub use locale::{Locale, PreviewMode};
31pub use message::{Argument, Message, SourceCatalog};
32pub use preferences::{LanguagePreference, LanguagePreferenceStore, Localization};
33
34/// A catalog, locale, or message could not be used.
35#[derive(Debug, thiserror::Error)]
36pub enum LocalizationError {
37    /// A language preference could not be read or saved.
38    #[error("language preference: {0}")]
39    Preference(String),
40    /// The requested language tag is invalid.
41    #[error("invalid language tag `{0}`")]
42    InvalidLocale(String),
43    /// A Fluent resource is malformed or contains duplicate definitions.
44    #[error("invalid catalog {resource}: {detail}")]
45    InvalidResource {
46        /// Locale and namespace of the failing resource.
47        resource: String,
48        /// Parser or validation diagnostics.
49        detail: String,
50    },
51    /// Neither a translation nor the source could be formatted.
52    #[error("cannot format {namespace}/{id}: {detail}")]
53    Format {
54        /// Package owning the message.
55        namespace: String,
56        /// Stable message identifier.
57        id: String,
58        /// Formatter diagnostics.
59        detail: String,
60    },
61}