Implement converting `PosixLocale` to `icu_locid::Locale`

finchie
Mar 6, 2024, 2:19 AM
T6JEWQJ7KI4SQFGIZNRKCWD5DEUVTIPEWXU7AX6WM7IU4DBSQZRQC

Dependencies

  • [2] YNEOCYMG Create `locale-select` crate

Change contents

  • edit in locale_select/tests/unix.rs at line 16
    [2.436]
    [2.436]
    assert_eq!(
    parsed_locale.icu_locale().unwrap(),
    "en-US-u-va-posix".parse().unwrap()
    );
  • edit in locale_select/src/unix.rs at line 1
    [2.488]
    [2.489]
    use icu_locid::extensions::unicode::{key, value, Attributes, Keywords, Unicode};
    use icu_locid::extensions::Extensions;
    use icu_locid::subtags::{self, Variants};
    use icu_locid::{LanguageIdentifier, Locale};
    const POSIX_KEYWORD: Keywords = Keywords::new_single(key!("va"), value!("posix"));
  • edit in locale_select/src/unix.rs at line 170
    [2.5364]
    [2.5364]
    pub fn icu_locale(&self) -> Result<Locale, icu_locid::ParserError> {
    let language = subtags::Language::try_from_bytes(self.language.as_bytes())?;
    let region = if let Some(territory) = self.territory {
    Some(subtags::Region::try_from_bytes(territory.as_bytes())?)
    } else {
    None
    };
    // TODO: should script/variants always be empty?
    let language_id = LanguageIdentifier {
    language,
    script: None,
    region,
    variants: Variants::new(),
    };
    // TODO: should attributes always be empty?
    let unicode_extensions = Unicode {
    keywords: POSIX_KEYWORD,
    attributes: Attributes::new(),
    };
    let extensions = Extensions::from_unicode(unicode_extensions);
    Ok(Locale {
    id: language_id,
    extensions,
    })
    }