diff --git a/Cargo.toml b/Cargo.toml index f940577..ec259cf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,7 @@ keywords = ["handlebars", "tera", "fluent", "internationalization", "localizatio categories = ["internationalization", "localization", "template-engine"] [workspace.dependencies] -unic-langid = "0.9" +unic-langid = { version = "0.9", features = ["macros"] } ignore = "0.4" flume = { version = "0.11", default-features = false } once_cell = "1.19" diff --git a/macros/src/lib.rs b/macros/src/lib.rs index fee750c..2519266 100644 --- a/macros/src/lib.rs +++ b/macros/src/lib.rs @@ -208,11 +208,24 @@ pub fn static_loader(input: proc_macro::TokenStream) -> proc_macro::TokenStream quote!(None) }; + let fallback_language_value = fallback_language.value(); + if !fallback_language_value.parse::().is_ok() { + return syn::Error::new( + fallback_language.span(), + format!( + "Invalid language identifier \"{}\" for fallback language", + &fallback_language_value + ), + ) + .to_compile_error() + .into(); + } + let mut insert_resources: Vec<_> = build_resources(locales_directory).into_iter().collect(); if !insert_resources .iter() - .any(|(lang, _)| *lang == fallback_language.value()) + .any(|(lang, _)| *lang == fallback_language_value) { return syn::Error::new( fallback_language.span(), @@ -271,18 +284,16 @@ pub fn static_loader(input: proc_macro::TokenStream) -> proc_macro::TokenStream ) }); - static LOCALES: - #LAZY> = - #LAZY::new(|| RESOURCES.keys().cloned().collect()); - static FALLBACKS: #LAZY<#HASHMAP<#LANGUAGE_IDENTIFIER, Vec<#LANGUAGE_IDENTIFIER>>> = - #LAZY::new(|| #CRATE_NAME::loader::build_fallbacks(&*LOCALES)); + #LAZY::new(|| #CRATE_NAME::loader::build_fallbacks( + &RESOURCES.keys().cloned().collect::>() + )); #CRATE_NAME::StaticLoader::new( &BUNDLES, &FALLBACKS, - #fallback_language.parse().expect("invalid fallback language") + #CRATE_NAME::langid!(#fallback_language_value) ) }); }; diff --git a/src/lib.rs b/src/lib.rs index 03fd3d5..50013ed 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -334,6 +334,8 @@ pub mod loader; #[cfg(feature = "macros")] pub use fluent_template_macros::static_loader; pub use unic_langid::LanguageIdentifier; +#[cfg(feature = "macros")] +pub use unic_langid::langid; #[doc(hidden)] pub use once_cell;