Add `locale` parameter to derived `localize()` function

finchie
Feb 24, 2024, 8:48 AM
3WEPY3OXJJ72TNVZLFCN2ZDWSADLT52T6DUONFGEAB46UWAQD3PQC

Dependencies

  • [2] 2XQ6ZB4W Store multiple locales in a single `Group`
  • [3] QSK7JRBA Add simple `attribute_path` function
  • [4] HJMYJDC7 Simplify `fluent_embed::group` module
  • [5] XEEXWJLG Add simple end-to-end test for selectors
  • [6] VNSHGQYN Support using glob paths in `localize` macro
  • [7] XGNME3WR Move `Group::derive_enum` to new `crate::parse_macro` module
  • [8] 5FIVUZYF Unify `fluent_embed` macro API as `localize()`
  • [*] 5TEX4MNU Split `fluent_embed` into `group` and `parse` modules
  • [*] ROSR4HD5 Parse captured glob as locale

Change contents

  • replacement in fluent_embed/src/parse_macro.rs at line 37
    [3.1307][2.67:191]()
    messages.push(crate::parse_fluent::message(
    group.canonical_message_for(&kebab_case_ident),
    ));
    [3.1307]
    [3.1348]
    messages.push(group.message(&kebab_case_ident));
  • replacement in fluent_embed/src/parse_macro.rs at line 42
    [3.1390][3.1390:1476]()
    fn localize(&self, plural_rules: &::icu_plurals::PluralRules) -> String {
    [3.1390]
    [3.1476]
    fn localize(&self, locale: &::icu_locid::Locale, plural_rules: &::icu_plurals::PluralRules) -> String {
  • edit in fluent_embed/src/group.rs at line 5
    [11.417]
    [2.461]
    use syn::parse_quote;
  • edit in fluent_embed/src/group.rs at line 20
    [2.824]
    [2.824]
    fn to_syn(&self, canonical_locale: String) -> syn::ExprBlock {
    let additional_locales = self
    .additional_messages
    .keys()
    .map(|locale| locale.to_string())
    .map(|locale_string| syn::LitStr::new(&locale_string, proc_macro2::Span::call_site()));
    let additional_messages = self
    .additional_messages
    .values()
    .map(crate::parse_fluent::message);
    let canonical_locale = syn::LitStr::new(&canonical_locale, proc_macro2::Span::call_site());
    let canonical_message = crate::parse_fluent::message(&self.canonical_message);
    parse_quote! {
    {
    #(if locale.normalizing_eq(#additional_locales) { return #additional_messages })else*
    assert!(locale.normalizing_eq(#canonical_locale));
    #canonical_message
    }
    }
    }
  • edit in fluent_embed/src/group.rs at line 87
    [2.2028]
    [2.2028]
    }
    pub fn message(&self, id: &str) -> syn::ExprBlock {
    self.messages
    .get(id)
    .unwrap()
    .to_syn(self.canonical_locale.to_string())
  • edit in cli_macros/tests/selectors.rs at line 14
    [3.459]
    [3.459]
    let locale = locale!("en-US");
  • replacement in cli_macros/tests/selectors.rs at line 16
    [3.482][3.482:570]()
    PluralRules::try_new(&locale!("en").into(), PluralRuleType::Cardinal).unwrap();
    [3.482]
    [3.570]
    PluralRules::try_new(&locale.clone().into(), PluralRuleType::Cardinal).unwrap();
  • replacement in cli_macros/tests/selectors.rs at line 31
    [3.956][3.956:1001]()
    message.localize(&plural_rules),
    [3.956]
    [3.1001]
    message.localize(&locale, &plural_rules),