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;
11mod thread_state;
12#[cfg(feature = "formatting")]
13pub use format::{FormatError, LocaleFormatters};
14
15fn new_bundle<R: std::borrow::Borrow<fluent_bundle::FluentResource>>(
16 language: unic_langid::LanguageIdentifier,
17) -> fluent_bundle::FluentBundle<R> {
18 let mut bundle = fluent_bundle::FluentBundle::new(vec![language]);
19 bundle
20 .add_builtins()
21 .expect("a fresh bundle has no conflicting functions");
22 bundle
23}
24#[cfg(feature = "tooling")]
25pub mod tooling;
26
27pub use catalog::{Catalog, Language, Resource, Translator};
28pub use deferred::DeferredMessage;
29pub use fluent_bundle::FluentValue;
31pub use locale::{Locale, PreviewMode};
32pub use message::{Argument, Message, SourceCatalog};
33pub use preferences::{LanguagePreference, LanguagePreferenceStore, Localization};
34
35#[derive(Debug, thiserror::Error)]
37pub enum LocalizationError {
38 #[error("language preference: {0}")]
40 Preference(String),
41 #[error("invalid language tag `{0}`")]
43 InvalidLocale(String),
44 #[error("invalid catalog {resource}: {detail}")]
46 InvalidResource {
47 resource: String,
49 detail: String,
51 },
52 #[error("cannot format {namespace}/{id}: {detail}")]
54 Format {
55 namespace: String,
57 id: String,
59 detail: String,
61 },
62}