+
+ 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,
+ })
+ }