Generate simple locale matching code in `localize()`
Dependencies
- [2]
BQ6N55O7Refactor how `Group` stores messages - [3]
XGNME3WRMove `Group::derive_enum` to new `crate::parse_macro` module - [4]
5FIVUZYFUnify `fluent_embed` macro API as `localize()` - [5]
QSK7JRBAAdd simple `attribute_path` function - [6]
HJMYJDC7Simplify `fluent_embed::group` module - [7]
XEEXWJLGAdd simple end-to-end test for selectors - [8]
2XQ6ZB4WStore multiple locales in a single `Group` - [9]
3WEPY3OXAdd `locale` parameter to derived `localize()` function - [*]
5TEX4MNUSplit `fluent_embed` into `group` and `parse` modules
Change contents
- replacement in fluent_embed/src/parse_macro.rs at line 16
let mut messages = Vec::with_capacity(variants.len());let mut extra_messages = Vec::with_capacity(variants.len());let mut canonical_messages = Vec::with_capacity(variants.len()); - replacement in fluent_embed/src/parse_macro.rs at line 38
messages.push(group.message(&kebab_case_ident));extra_messages.push(group.message(&kebab_case_ident));canonical_messages.push(group.canonical_message(&kebab_case_ident)); - edit in fluent_embed/src/parse_macro.rs at line 42
// TODO: locale matching should use a better algorithm - replacement in fluent_embed/src/parse_macro.rs at line 45
fn localize(&self, locale: &::icu_locid::Locale, plural_rules: &::icu_plurals::PluralRules) -> String {fn localize(&self, locales: &[&::icu_locid::Locale], plural_rules: &::icu_plurals::PluralRules) -> String {// Check each locale to see if it's implemented for this messagefor locale in locales {match self {#(Self::#idents => #extra_messages),*}}// Fall back to default locale - replacement in fluent_embed/src/parse_macro.rs at line 55
#(Self::#idents => #messages),*#(Self::#idents => #canonical_messages),* - edit in fluent_embed/src/group.rs at line 84
let canonical_locale = syn::LitStr::new(&self.canonical_locale.to_string(),proc_macro2::Span::call_site(),); - edit in fluent_embed/src/group.rs at line 89
let canonical_message =crate::parse_fluent::message(&self.canonical_messages[message_column]); - edit in fluent_embed/src/group.rs at line 101
assert!(locale.normalizing_eq(#canonical_locale));#canonical_message - edit in fluent_embed/src/group.rs at line 103[3.2034][11.6614]
pub fn canonical_message(&self, id: &str) -> syn::Expr {let message_column = self.canonical_messages.iter().position(|message| message.id.name == id).expect("Message id must be valid");crate::parse_fluent::message(&self.canonical_messages[message_column])} - replacement in cli_macros/tests/selectors.rs at line 31
message.localize(&locale, &plural_rules),message.localize(&[&locale], &plural_rules),