armature_i18n/
lib.rs

1//! Internationalization (i18n) Support for Armature
2//!
3//! Provides comprehensive internationalization features:
4//!
5//! - **Message Translation**: Load and format localized messages
6//! - **Locale Detection**: Parse Accept-Language headers
7//! - **Pluralization**: Handle plural forms correctly per locale
8//! - **Date/Number Formatting**: Locale-aware formatting
9//!
10//! # Quick Start
11//!
12//! ```rust,ignore
13//! use armature_i18n::{I18n, Locale};
14//!
15//! // Create i18n instance
16//! let i18n = I18n::new()
17//!     .with_default_locale(Locale::en_US())
18//!     .with_fallback(Locale::en())
19//!     .load_from_dir("locales/")?;
20//!
21//! // Get translation
22//! let msg = i18n.t("hello", &Locale::es());  // "¡Hola!"
23//!
24//! // With arguments
25//! let msg = i18n.t_args("greeting", &Locale::fr(), &[("name", "Alice")]);
26//! // "Bonjour, Alice!"
27//!
28//! // Pluralization
29//! let msg = i18n.t_plural("items", 5, &Locale::en());  // "5 items"
30//! ```
31//!
32//! # Accept-Language Parsing
33//!
34//! ```rust,ignore
35//! use armature_i18n::locale::parse_accept_language;
36//!
37//! let header = "en-US,en;q=0.9,fr;q=0.8";
38//! let locales = parse_accept_language(header);
39//! // [Locale::en_US(), Locale::en(), Locale::fr()]
40//! ```
41//!
42//! # Date/Number Formatting
43//!
44//! ```rust,ignore
45//! use armature_i18n::format::{format_number, format_date, format_currency};
46//!
47//! let locale = Locale::de_DE();
48//! format_number(1234567.89, &locale);  // "1.234.567,89"
49//! format_currency(99.99, "EUR", &locale);  // "99,99 €"
50//! ```
51
52mod bundle;
53mod error;
54mod format;
55mod locale;
56mod messages;
57mod plural;
58
59pub use bundle::FluentBundle;
60pub use error::I18nError;
61pub use format::{
62    CurrencyFormatter, DateFormatter, DateStyle, NumberFormatter, TimeStyle, format_currency,
63    format_date, format_number, format_percent,
64};
65pub use locale::{Locale, LocaleBuilder, negotiate_locale, parse_accept_language};
66pub use messages::{I18n, MessageBundle, Messages, TranslationSource};
67pub use plural::{PluralCategory, PluralRules, plural_category};
68
69/// Result type for i18n operations
70pub type Result<T> = std::result::Result<T, I18nError>;
71
72/// Prelude for common imports
73pub mod prelude {
74    pub use crate::{
75        I18n, I18nError, Locale, LocaleBuilder, PluralCategory, Result, format_currency,
76        format_date, format_number, negotiate_locale, parse_accept_language, plural_category,
77    };
78}