use fluent::{FluentError}; use fluent_syntax::parser::ParserError; use std::error::Error; use std::fmt; use unic_langid::LanguageIdentifier; #[derive(Debug)] pub enum I18nError { InvalidLanguage, LanguageResourceFailed(Vec), BundleLoadFailed(Vec), TemplateError(String), MissingTranslation { locale: LanguageIdentifier, message_id: String, }, } impl fmt::Display for I18nError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { I18nError::InvalidLanguage => write!(f, "Invalid language identifier"), I18nError::LanguageResourceFailed(errors) => { write!(f, "Failed to parse language resource: {:?}", errors) } I18nError::BundleLoadFailed(errors) => { write!(f, "Failed to load bundle: {:?}", errors) } I18nError::TemplateError(msg) => write!(f, "Template error: {}", msg), I18nError::MissingTranslation { locale, message_id } => { write!(f, "Missing translation for '{}' in locale '{}'", message_id, locale) } } } } impl Error for I18nError {}