diff --git a/components/datetime/src/datetime.rs b/components/datetime/src/datetime.rs index 6a80cd9b361..01af677e04a 100644 --- a/components/datetime/src/datetime.rs +++ b/components/datetime/src/datetime.rs @@ -7,7 +7,10 @@ use crate::{ format::datetime, options::DateTimeFormatOptions, pattern::PatternItem, - provider::{gregory::DatesV1Marker, helpers::DateTimePatterns}, + provider::{ + gregory::{DatePatternsV1Marker, DateSymbolsV1Marker}, + helpers::DateTimePatterns, + }, }; use icu_locid::Locale; use icu_provider::prelude::*; @@ -59,7 +62,7 @@ use crate::{ pub struct DateTimeFormat<'d> { pub(super) locale: Locale, pub(super) pattern: Pattern, - pub(super) symbols: DataPayload<'d, 'd, provider::gregory::DateSymbolsV1Marker>, + pub(super) symbols: DataPayload<'d, 'd, DateSymbolsV1Marker>, } impl<'d> DateTimeFormat<'d> { @@ -87,17 +90,19 @@ impl<'d> DateTimeFormat<'d> { /// ``` pub fn try_new< T: Into, - D: DataProvider<'d, 'd, provider::gregory::DatesV1Marker> + ?Sized, + D: DataProvider<'d, 'd, DateSymbolsV1Marker> + + DataProvider<'d, 'd, DatePatternsV1Marker> + + ?Sized, >( locale: T, data_provider: &D, options: &DateTimeFormatOptions, ) -> Result { let locale = locale.into(); - let data = data_provider + let symbols_data = data_provider .load_payload(&DataRequest { resource_path: ResourcePath { - key: provider::key::GREGORY_V1, + key: provider::key::GREGORY_DATE_SYMBOLS_V1, options: ResourceOptions { variant: None, langid: Some(locale.clone().into()), @@ -106,9 +111,24 @@ impl<'d> DateTimeFormat<'d> { })? .take_payload()?; - let pattern = data + let patterns_data: icu_provider::DataPayload< + '_, + '_, + provider::gregory::DatePatternsV1Marker, + > = data_provider + .load_payload(&DataRequest { + resource_path: ResourcePath { + key: provider::key::GREGORY_DATE_PATTERNS_V1, + options: ResourceOptions { + variant: None, + langid: Some(locale.clone().into()), + }, + }, + })? + .take_payload()?; + + let pattern = patterns_data .get() - .patterns .get_pattern_for_options(options)? .unwrap_or_default(); @@ -125,7 +145,7 @@ impl<'d> DateTimeFormat<'d> { return Err(DateTimeFormatError::UnsupportedField(field.symbol)); } - Ok(Self::new(locale, pattern, data)) + Ok(Self::new(locale, pattern, symbols_data)) } /// Creates a new [`DateTimeFormat`] regardless of whether there are time-zone symbols in the pattern. @@ -144,13 +164,10 @@ impl<'d> DateTimeFormat<'d> { pub(super) fn new>( locale: T, pattern: Pattern, - data: DataPayload<'d, 'd, DatesV1Marker>, + symbols: DataPayload<'d, 'd, DateSymbolsV1Marker>, ) -> Self { let locale = locale.into(); - // TODO(#257): Avoid the need for this clone by splitting the keys. - let symbols = DataPayload::from_owned(data.get().symbols.clone()); - Self { locale, pattern, diff --git a/components/datetime/src/format/datetime.rs b/components/datetime/src/format/datetime.rs index b9e449aeccd..7c1558e787d 100644 --- a/components/datetime/src/format/datetime.rs +++ b/components/datetime/src/format/datetime.rs @@ -246,14 +246,14 @@ mod tests { #[cfg(feature = "provider_serde")] fn test_basic() { use crate::mock::datetime::MockDateTime; - use crate::provider::gregory::DatesV1Marker; + use crate::provider::gregory::DateSymbolsV1Marker; use icu_provider::prelude::*; let provider = icu_testdata::get_provider(); - let data: DataPayload = provider + let data: DataPayload = provider .load_payload(&DataRequest { resource_path: ResourcePath { - key: provider::key::GREGORY_V1, + key: provider::key::GREGORY_DATE_SYMBOLS_V1, options: ResourceOptions { variant: None, langid: Some("en".parse().unwrap()), @@ -268,7 +268,7 @@ mod tests { let mut sink = String::new(); write_pattern( &pattern, - &data.get().symbols, + &data.get(), &datetime, &"und".parse().unwrap(), &mut sink, diff --git a/components/datetime/src/provider/gregory.rs b/components/datetime/src/provider/gregory.rs index 2c56cdcfd57..f70cf0023a8 100644 --- a/components/datetime/src/provider/gregory.rs +++ b/components/datetime/src/provider/gregory.rs @@ -4,23 +4,6 @@ use std::borrow::Cow; -#[derive(Debug, PartialEq, Clone, Default)] -#[cfg_attr( - feature = "provider_serde", - derive(serde::Serialize, serde::Deserialize) -)] -pub struct DatesV1 { - pub symbols: DateSymbolsV1, - - pub patterns: PatternsV1, -} - -icu_provider::impl_data_marker_no_lifetime!( - DatesV1, - /// Marker type for [`DatesV1`] - DatesV1Marker -); - #[derive(Debug, PartialEq, Clone, Default)] #[cfg_attr( feature = "provider_serde", @@ -45,7 +28,7 @@ icu_provider::impl_data_marker_no_lifetime!( feature = "provider_serde", derive(serde::Serialize, serde::Deserialize) )] -pub struct PatternsV1 { +pub struct DatePatternsV1 { pub date: patterns::LengthPatternsV1, pub time: patterns::LengthPatternsV1, @@ -53,6 +36,12 @@ pub struct PatternsV1 { pub datetime: patterns::DateTimeFormatsV1, } +icu_provider::impl_data_marker_no_lifetime!( + DatePatternsV1, + /// Marker type for [`DatePatternsV1`] + DatePatternsV1Marker +); + macro_rules! symbols { ($name: ident, $expr: ty) => { pub mod $name { diff --git a/components/datetime/src/provider/helpers.rs b/components/datetime/src/provider/helpers.rs index 97f59810448..b1e72938d37 100644 --- a/components/datetime/src/provider/helpers.rs +++ b/components/datetime/src/provider/helpers.rs @@ -52,7 +52,7 @@ pub trait DateTimeSymbols { ) -> &Cow; } -impl DateTimePatterns for provider::gregory::PatternsV1 { +impl DateTimePatterns for provider::gregory::DatePatternsV1 { fn get_pattern_for_options(&self, options: &DateTimeFormatOptions) -> Result> { match options { DateTimeFormatOptions::Length(bag) => self.get_pattern_for_length_bag(bag), diff --git a/components/datetime/src/provider/mod.rs b/components/datetime/src/provider/mod.rs index b506ecdcf85..f38f3b14e72 100644 --- a/components/datetime/src/provider/mod.rs +++ b/components/datetime/src/provider/mod.rs @@ -12,7 +12,8 @@ pub mod time_zones; pub mod key { use icu_provider::{resource_key, ResourceKey}; - pub const GREGORY_V1: ResourceKey = resource_key!(dates, "gregory", 1); + pub const GREGORY_DATE_PATTERNS_V1: ResourceKey = resource_key!(date_patterns, "gregory", 1); + pub const GREGORY_DATE_SYMBOLS_V1: ResourceKey = resource_key!(date_symbols, "gregory", 1); pub const TIMEZONE_FORMATS_V1: ResourceKey = resource_key!(time_zones, "formats", 1); pub const TIMEZONE_EXEMPLAR_CITIES_V1: ResourceKey = resource_key!(time_zones, "exemplar-cities", 1); diff --git a/components/datetime/src/skeleton.rs b/components/datetime/src/skeleton.rs index 224ff579f4a..cf8d9f424f8 100644 --- a/components/datetime/src/skeleton.rs +++ b/components/datetime/src/skeleton.rs @@ -632,16 +632,16 @@ mod test { use crate::{ fields::{Day, Field, FieldLength, Month, Weekday}, options::components, - provider::{gregory::DatesV1Marker, key::GREGORY_V1}, + provider::{gregory::DatePatternsV1Marker, key::GREGORY_DATE_PATTERNS_V1}, }; - fn get_data_payload() -> DataPayload<'static, 'static, DatesV1Marker> { + fn get_data_payload() -> DataPayload<'static, 'static, DatePatternsV1Marker> { let provider = icu_testdata::get_provider(); let langid = langid!("en"); provider .load_payload(&DataRequest { resource_path: ResourcePath { - key: GREGORY_V1, + key: GREGORY_DATE_PATTERNS_V1, options: ResourceOptions { variant: None, langid: Some(langid), @@ -672,7 +672,7 @@ mod test { let data_provider = get_data_payload(); match get_best_available_format_pattern( - &data_provider.get().patterns.datetime.skeletons, + &data_provider.get().datetime.skeletons, &requested_fields, ) { BestSkeleton::AllFieldsMatch(available_format_pattern) @@ -699,7 +699,7 @@ mod test { let data_provider = get_data_payload(); match get_best_available_format_pattern( - &data_provider.get().patterns.datetime.skeletons, + &data_provider.get().datetime.skeletons, &requested_fields, ) { BestSkeleton::MissingOrExtraFields(available_format_pattern) => { @@ -724,8 +724,8 @@ mod test { let data_provider = get_data_payload(); match create_best_pattern_for_fields( - &data_provider.get().patterns.datetime.skeletons, - &data_provider.get().patterns.datetime.length_patterns, + &data_provider.get().datetime.skeletons, + &data_provider.get().datetime.length_patterns, &requested_fields, ) { BestSkeleton::AllFieldsMatch(available_format_pattern) => { @@ -748,7 +748,7 @@ mod test { assert_eq!( get_best_available_format_pattern( - &data_provider.get().patterns.datetime.skeletons, + &data_provider.get().datetime.skeletons, &requested_fields ), BestSkeleton::NoMatch, @@ -769,7 +769,7 @@ mod test { assert_eq!( get_best_available_format_pattern( - &data_provider.get().patterns.datetime.skeletons, + &data_provider.get().datetime.skeletons, &requested_fields ), BestSkeleton::NoMatch, diff --git a/components/datetime/src/zoned_datetime.rs b/components/datetime/src/zoned_datetime.rs index 200eef622ea..61a1e8b004a 100644 --- a/components/datetime/src/zoned_datetime.rs +++ b/components/datetime/src/zoned_datetime.rs @@ -96,7 +96,9 @@ impl<'d> ZonedDateTimeFormat<'d> { ) -> Result where L: Into, - DP: DataProvider<'d, 'd, provider::gregory::DatesV1Marker> + ?Sized, + DP: DataProvider<'d, 'd, provider::gregory::DatePatternsV1Marker> + + DataProvider<'d, 'd, provider::gregory::DateSymbolsV1Marker> + + ?Sized, ZP: DataProvider<'d, 'd, provider::time_zones::TimeZoneFormatsV1Marker> + DataProvider<'d, 'd, provider::time_zones::ExemplarCitiesV1Marker> + DataProvider<'d, 'd, provider::time_zones::MetaZoneGenericNamesLongV1Marker> @@ -106,10 +108,30 @@ impl<'d> ZonedDateTimeFormat<'d> { + ?Sized, { let locale = locale.into(); - let data = date_provider + let pattern_data: icu_provider::DataPayload< + '_, + '_, + provider::gregory::DatePatternsV1Marker, + > = date_provider + .load_payload(&DataRequest { + resource_path: ResourcePath { + key: provider::key::GREGORY_DATE_PATTERNS_V1, + options: ResourceOptions { + variant: None, + langid: Some(locale.clone().into()), + }, + }, + })? + .take_payload()?; + + let symbols_data: icu_provider::DataPayload< + '_, + '_, + provider::gregory::DateSymbolsV1Marker, + > = date_provider .load_payload(&DataRequest { resource_path: ResourcePath { - key: provider::key::GREGORY_V1, + key: provider::key::GREGORY_DATE_SYMBOLS_V1, options: ResourceOptions { variant: None, langid: Some(locale.clone().into()), @@ -118,13 +140,12 @@ impl<'d> ZonedDateTimeFormat<'d> { })? .take_payload()?; - let pattern = data + let pattern = pattern_data .get() - .patterns .get_pattern_for_options(options)? .unwrap_or_default(); - let datetime_format = DateTimeFormat::new(locale, pattern, data); + let datetime_format = DateTimeFormat::new(locale, pattern, symbols_data); let time_zone_format = TimeZoneFormat::try_new( datetime_format.locale.clone(), datetime_format.pattern.clone(), diff --git a/components/datetime/tests/datetime.rs b/components/datetime/tests/datetime.rs index 2fd35ae83ea..26e8937ed1c 100644 --- a/components/datetime/tests/datetime.rs +++ b/components/datetime/tests/datetime.rs @@ -12,7 +12,10 @@ use icu_datetime::{ DateTimeFormatOptions, ZonedDateTimeFormat, }; use icu_datetime::{ - provider::{gregory::DatesV1Marker, key::GREGORY_V1}, + provider::{ + gregory::{DatePatternsV1, DatePatternsV1Marker, DateSymbolsV1, DateSymbolsV1Marker}, + key::{GREGORY_DATE_PATTERNS_V1, GREGORY_DATE_SYMBOLS_V1}, + }, DateTimeFormat, }; use icu_locid::{LanguageIdentifier, Locale}; @@ -29,6 +32,29 @@ use std::borrow::Cow; use std::fmt::Write; use tinystr::tinystr8; +struct MultiKeyStructProvider<'s> { + pub symbols: StructProvider<'s, DateSymbolsV1>, + pub patterns: StructProvider<'s, DatePatternsV1>, +} + +impl<'d, 's> DataProvider<'d, 's, DateSymbolsV1Marker> for MultiKeyStructProvider<'s> { + fn load_payload( + &self, + req: &DataRequest, + ) -> Result, icu_provider::DataError> { + self.symbols.load_payload(req) + } +} + +impl<'d, 's> DataProvider<'d, 's, DatePatternsV1Marker> for MultiKeyStructProvider<'s> { + fn load_payload( + &self, + req: &DataRequest, + ) -> Result, icu_provider::DataError> { + self.patterns.load_payload(req) + } +} + fn test_fixture(fixture_name: &str) { let provider = icu_testdata::get_provider(); @@ -106,10 +132,10 @@ fn test_dayperiod_patterns() { let format_options = DateTimeFormatOptions::default(); for test in get_dayperiod_tests("dayperiods").unwrap().0 { let langid: LanguageIdentifier = test.locale.parse().unwrap(); - let mut data: DataPayload = provider + let mut patterns_data: DataPayload = provider .load_payload(&DataRequest { resource_path: ResourcePath { - key: GREGORY_V1, + key: GREGORY_DATE_PATTERNS_V1, options: ResourceOptions { variant: None, langid: Some(langid.clone()), @@ -119,21 +145,40 @@ fn test_dayperiod_patterns() { .unwrap() .take_payload() .unwrap(); - data.with_mut(|data| { - data.patterns.datetime.length_patterns.long = Cow::Borrowed("{0}"); + patterns_data.with_mut(|data| { + data.datetime.length_patterns.long = Cow::Borrowed("{0}"); }); + let symbols_data: DataPayload = provider + .load_payload(&DataRequest { + resource_path: ResourcePath { + key: GREGORY_DATE_SYMBOLS_V1, + options: ResourceOptions { + variant: None, + langid: Some(langid.clone()), + }, + }, + }) + .unwrap() + .take_payload() + .unwrap(); for test_case in &test.test_cases { for dt_input in &test_case.datetimes { let datetime: MockDateTime = dt_input.parse().unwrap(); for DayPeriodExpectation { patterns, expected } in &test_case.expectations { for pattern_input in patterns { let new_pattern_cow = Cow::Owned(pattern_input.to_string()); - data.with_mut(move |data| { - data.patterns.time.long = new_pattern_cow; + patterns_data.with_mut(move |data| { + data.time.long = new_pattern_cow; }); - let provider = StructProvider { - key: GREGORY_V1, - data: data.get(), + let provider = MultiKeyStructProvider { + symbols: StructProvider { + key: GREGORY_DATE_SYMBOLS_V1, + data: symbols_data.get(), + }, + patterns: StructProvider { + key: GREGORY_DATE_PATTERNS_V1, + data: patterns_data.get(), + }, }; let dtf = DateTimeFormat::try_new(langid.clone(), &provider, &format_options) @@ -170,10 +215,23 @@ fn test_time_zone_patterns() { datetime.time_zone.metazone_id = config.metazone_id.take(); datetime.time_zone.time_variant = config.time_variant.take(); - let mut data: DataPayload = date_provider + let mut patterns_data: DataPayload = date_provider + .load_payload(&DataRequest { + resource_path: ResourcePath { + key: GREGORY_DATE_PATTERNS_V1, + options: ResourceOptions { + variant: None, + langid: Some(langid.clone()), + }, + }, + }) + .unwrap() + .take_payload() + .unwrap(); + let symbols_data: DataPayload = date_provider .load_payload(&DataRequest { resource_path: ResourcePath { - key: GREGORY_V1, + key: GREGORY_DATE_SYMBOLS_V1, options: ResourceOptions { variant: None, langid: Some(langid.clone()), @@ -184,19 +242,25 @@ fn test_time_zone_patterns() { .take_payload() .unwrap(); - data.with_mut(|data| { - data.patterns.datetime.length_patterns.long = Cow::Borrowed("{0}"); + patterns_data.with_mut(|data| { + data.datetime.length_patterns.long = Cow::Borrowed("{0}"); }); for TimeZoneExpectation { patterns, expected } in &test.expectations { for pattern_input in patterns { let new_pattern_cow = Cow::Owned(pattern_input.to_string()); - data.with_mut(move |data| { - data.patterns.time.long = new_pattern_cow; + patterns_data.with_mut(move |data| { + data.time.long = new_pattern_cow; }); - let date_provider = StructProvider { - key: GREGORY_V1, - data: data.get(), + let date_provider = MultiKeyStructProvider { + symbols: StructProvider { + key: GREGORY_DATE_SYMBOLS_V1, + data: symbols_data.get(), + }, + patterns: StructProvider { + key: GREGORY_DATE_PATTERNS_V1, + data: patterns_data.get(), + }, }; let dtf = ZonedDateTimeFormat::try_new( diff --git a/provider/cldr/src/transform/dates.rs b/provider/cldr/src/transform/dates.rs deleted file mode 100644 index 1159c0732a9..00000000000 --- a/provider/cldr/src/transform/dates.rs +++ /dev/null @@ -1,628 +0,0 @@ -// This file is part of ICU4X. For terms of use, please see the file -// called LICENSE at the top level of the ICU4X source tree -// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). - -use crate::cldr_langid::CldrLangID; -use crate::error::Error; -use crate::reader::{get_subdirectories, open_reader}; -use crate::CldrPaths; -use icu_datetime::{provider::*, skeleton::SkeletonError}; -use icu_provider::iter::{IterableDataProviderCore, KeyedDataProvider}; -use icu_provider::prelude::*; -use std::borrow::Cow; -use std::convert::TryFrom; -use std::marker::PhantomData; - -/// All keys that this module is able to produce. -pub const ALL_KEYS: [ResourceKey; 1] = [ - key::GREGORY_V1, // -]; - -/// A data provider reading from CLDR JSON dates files. -#[derive(PartialEq, Debug)] -pub struct DatesProvider<'d> { - data: Vec<(CldrLangID, cldr_json::LangDates)>, - _phantom: PhantomData<&'d ()>, // placeholder for when we need the lifetime param -} - -impl TryFrom<&dyn CldrPaths> for DatesProvider<'_> { - type Error = Error; - fn try_from(cldr_paths: &dyn CldrPaths) -> Result { - let mut data = vec![]; - - let path = cldr_paths.cldr_dates()?.join("main"); - - let locale_dirs = get_subdirectories(&path)?; - - for dir in locale_dirs { - let path = dir.join("ca-gregorian.json"); - - let mut resource: cldr_json::Resource = - serde_json::from_reader(open_reader(&path)?).map_err(|e| (e, path))?; - data.append(&mut resource.main.0); - } - - Ok(Self { - data, - _phantom: PhantomData, - }) - } -} - -impl<'d> KeyedDataProvider for DatesProvider<'d> { - fn supports_key(resc_key: &ResourceKey) -> Result<(), DataError> { - if resc_key.category != ResourceCategory::Dates || resc_key.version != 1 { - return Err(resc_key.into()); - } - Ok(()) - } -} - -impl<'d, 's> DataProvider<'d, 's, gregory::DatesV1Marker> for DatesProvider<'d> { - fn load_payload( - &self, - req: &DataRequest, - ) -> Result, DataError> { - DatesProvider::supports_key(&req.resource_path.key)?; - let cldr_langid: CldrLangID = req.try_langid()?.clone().into(); - let dates = match self - .data - .binary_search_by_key(&&cldr_langid, |(lid, _)| lid) - { - Ok(idx) => &self.data[idx].1.dates, - Err(_) => return Err(DataError::UnavailableResourceOptions(req.clone())), - }; - Ok(DataResponse { - metadata: DataResponseMetadata { - data_langid: req.resource_path.options.langid.clone(), - }, - payload: Some(DataPayload::from_owned(gregory::DatesV1::from(dates))), - }) - } -} - -icu_provider::impl_dyn_provider!(DatesProvider<'d>, { - _ => gregory::DatesV1Marker, -}, SERDE_SE, 'd, 's); - -impl<'d> IterableDataProviderCore for DatesProvider<'d> { - fn supported_options_for_key( - &self, - _resc_key: &ResourceKey, - ) -> Result>, DataError> { - let list: Vec = self - .data - .iter() - .map(|(l, _)| ResourceOptions { - variant: None, - // TODO: Avoid the clone - langid: Some(l.langid.clone()), - }) - .collect(); - Ok(Box::new(list.into_iter())) - } -} - -impl From<&cldr_json::LengthPatterns> for gregory::patterns::LengthPatternsV1 { - fn from(other: &cldr_json::LengthPatterns) -> Self { - // TODO(#308): Support numbering system variations. We currently throw them away. - Self { - full: Cow::Owned(other.full.get_pattern().clone()), - long: Cow::Owned(other.long.get_pattern().clone()), - medium: Cow::Owned(other.medium.get_pattern().clone()), - short: Cow::Owned(other.short.get_pattern().clone()), - } - } -} - -impl From<&cldr_json::DateTimeFormats> for gregory::patterns::DateTimeFormatsV1 { - fn from(other: &cldr_json::DateTimeFormats) -> Self { - use gregory::patterns::{PatternV1, SkeletonV1, SkeletonsV1}; - use litemap::LiteMap; - - // TODO(#308): Support numbering system variations. We currently throw them away. - Self { - length_patterns: gregory::patterns::LengthPatternsV1 { - full: Cow::Owned(other.full.get_pattern().clone()), - long: Cow::Owned(other.long.get_pattern().clone()), - medium: Cow::Owned(other.medium.get_pattern().clone()), - short: Cow::Owned(other.short.get_pattern().clone()), - }, - skeletons: { - let mut skeletons = SkeletonsV1(LiteMap::new()); - - // The CLDR keys for available_formats can have duplicate skeletons with either - // an additional variant, or with multiple variants for different plurals. - for (skeleton_str, pattern_str) in other.available_formats.0.iter() { - let mut unique_skeleton = None; - let mut variant_parts = Vec::new(); - - for part in skeleton_str.split('-') { - match unique_skeleton { - None => { - unique_skeleton = Some(part); - } - Some(_) => variant_parts.push(part), - } - } - - let unique_skeleton = unique_skeleton.expect("Expected to find a skeleton."); - - let skeleton_fields_v1 = match SkeletonV1::try_from(unique_skeleton) { - Ok(s) => s, - Err(err) => match err { - // Ignore unimplemented fields for now. - SkeletonError::SymbolUnimplemented(_) => continue, - _ => panic!("{:?} {}", unique_skeleton, err), - }, - }; - - if !variant_parts.is_empty() { - eprintln!( - "This skeleton string is not yet supported: {:?}", - skeleton_str - ); - continue; - } - - let pattern_v1 = PatternV1::try_from(pattern_str as &str) - .expect("Unable to parse a pattern"); - - skeletons.0.insert(skeleton_fields_v1, pattern_v1); - } - - skeletons - }, - } - } -} - -impl From<&cldr_json::Dates> for gregory::DatesV1 { - fn from(other: &cldr_json::Dates) -> Self { - Self { - symbols: gregory::DateSymbolsV1 { - months: (&other.calendars.gregorian.months).into(), - weekdays: (&other.calendars.gregorian.days).into(), - day_periods: (&other.calendars.gregorian.day_periods).into(), - }, - patterns: gregory::PatternsV1 { - date: (&other.calendars.gregorian.date_formats).into(), - time: (&other.calendars.gregorian.time_formats).into(), - datetime: (&other.calendars.gregorian.datetime_formats).into(), - }, - } - } -} - -macro_rules! symbols_from { - ([$name: ident, $name2: ident $(,)?], [ $($element: ident),+ $(,)? ] $(,)?) => { - impl From<&cldr_json::$name::Symbols> for gregory::$name2::SymbolsV1 { - fn from(other: &cldr_json::$name::Symbols) -> Self { - Self([ - $( - Cow::Owned(other.$element.clone()), - )* - ]) - } - } - symbols_from!([$name, $name2]); - }; - ([$name: ident, $name2: ident $(,)?], { $($element: ident),+ $(,)? } $(,)?) => { - impl From<&cldr_json::$name::Symbols> for gregory::$name2::SymbolsV1 { - fn from(other: &cldr_json::$name::Symbols) -> Self { - Self { - $( - $element: other.$element.clone(), - )* - } - } - } - symbols_from!([$name, $name]); - }; - ([$name: ident, $name2: ident]) => { - impl cldr_json::$name::Symbols { - // Helper function which returns None if the two groups of symbols overlap. - pub fn get_unaliased(&self, other: &Self) -> Option { - if self == other { - None - } else { - Some(self.clone()) - } - } - } - - impl From<&cldr_json::$name::Contexts> for gregory::$name2::ContextsV1 { - fn from(other: &cldr_json::$name::Contexts) -> Self { - Self { - format: (&other.format).into(), - stand_alone: other.stand_alone.as_ref().and_then(|stand_alone| { - stand_alone.get_unaliased(&other.format) - }).map(|ref stand_alone| stand_alone.into()) - } - } - } - - impl cldr_json::$name::StandAloneWidths { - // Helper function which returns None if the two groups of symbols overlap. - pub fn get_unaliased(&self, other: &cldr_json::$name::FormatWidths) -> Option { - let abbreviated = self.abbreviated.as_ref().and_then(|v| v.get_unaliased(&other.abbreviated)); - let narrow = self.narrow.as_ref().and_then(|v| v.get_unaliased(&other.narrow)); - let short = if self.short == other.short { - None - } else { - self.short.clone() - }; - let wide = self.wide.as_ref().and_then(|v| v.get_unaliased(&other.wide)); - - if abbreviated.is_none() && narrow.is_none() && wide.is_none() && short.is_none() { - None - } else { - Some(Self { - abbreviated, - narrow, - short, - wide, - }) - } - } - } - - impl From<&cldr_json::$name::FormatWidths> for gregory::$name2::FormatWidthsV1 { - fn from(other: &cldr_json::$name::FormatWidths) -> Self { - Self { - abbreviated: (&other.abbreviated).into(), - narrow: (&other.narrow).into(), - short: other.short.as_ref().map(|width| width.into()), - wide: (&other.wide).into(), - } - } - } - - impl From<&cldr_json::$name::StandAloneWidths> for gregory::$name2::StandAloneWidthsV1 { - fn from(other: &cldr_json::$name::StandAloneWidths) -> Self { - Self { - abbreviated: other.abbreviated.as_ref().map(|width| width.into()), - narrow: other.narrow.as_ref().map(|width| width.into()), - short: other.short.as_ref().map(|width| width.into()), - wide: other.wide.as_ref().map(|width| width.into()), - } - } - } - }; -} - -symbols_from!( - [months, months], - [m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12], -); - -symbols_from!([days, weekdays], [sun, mon, tue, wed, thu, fri, sat]); - -symbols_from!( - [ - day_periods, - day_periods, - ], - { - am, - pm, - noon, - midnight, - }, -); - -/// Serde structs for the CLDR JSON dates files. -pub(self) mod cldr_json { - use crate::cldr_langid::CldrLangID; - use serde::Deserialize; - use std::borrow::Cow; - - macro_rules! symbols { - ($name: ident, $([$alias: expr, $element: ident, $ty: ty]),+ $(,)?) => { - pub mod $name { - use super::*; - - #[derive(Debug, PartialEq, Clone, Deserialize)] - pub struct Symbols { - $( - #[serde(rename = $alias)] - pub $element: $ty - ),* - } - - symbols!(); - } - }; - ($name: ident, $([$element: ident, $ty: ty]),+ $(,)?) => { - pub mod $name { - use super::*; - - #[derive(Debug, PartialEq, Clone, Deserialize)] - pub struct Symbols { - $(pub $element: $ty),* - } - - symbols!(); - } - }; - () => { - #[derive(Debug, PartialEq, Clone, Deserialize)] - pub struct FormatWidths { - pub abbreviated: Symbols, - pub narrow: Symbols, - pub short: Option, - pub wide: Symbols, - } - - #[derive(Debug, PartialEq, Clone, Deserialize)] - pub struct StandAloneWidths { - pub abbreviated: Option, - pub narrow: Option, - pub short: Option, - pub wide: Option, - } - - #[derive(Debug, PartialEq, Clone, Deserialize)] - pub struct Contexts { - pub format: FormatWidths, - #[serde(rename = "stand-alone")] - pub stand_alone: Option, - } - } - } - - symbols!( - months, - ["1", m1, String], - ["2", m2, String], - ["3", m3, String], - ["4", m4, String], - ["5", m5, String], - ["6", m6, String], - ["7", m7, String], - ["8", m8, String], - ["9", m9, String], - ["10", m10, String], - ["11", m11, String], - ["12", m12, String], - ); - - symbols!( - days, - [sun, String], - [mon, String], - [tue, String], - [wed, String], - [thu, String], - [fri, String], - [sat, String], - ); - - // The day period symbols are Cow<'static, str> instead of String because the Option - // needs to be retained when converting them into Cow for the data provider. - symbols!( - day_periods, - ["am", am, Cow<'static, str>], - ["pm", pm, Cow<'static, str>], - ["noon", noon, Option>], - ["midnight", midnight, Option>], - ); - - #[derive(PartialEq, Debug, Deserialize)] - #[serde(untagged)] - pub enum LengthPattern { - Plain(String), - WithNumberingSystems { - #[serde(rename = "_value")] - pattern: String, - #[serde(rename = "_numbers")] - numbering_systems: String, - }, - } - - impl LengthPattern { - /// Get the pattern, dropping the numbering system if present. - pub fn get_pattern(&self) -> &String { - match self { - Self::Plain(pattern) => pattern, - Self::WithNumberingSystems { pattern, .. } => pattern, - } - } - } - - #[derive(PartialEq, Debug, Deserialize)] - pub struct LengthPatterns { - pub full: LengthPattern, - pub long: LengthPattern, - pub medium: LengthPattern, - pub short: LengthPattern, - } - - #[derive(PartialEq, Debug, Deserialize)] - pub struct DateTimeFormats { - pub full: LengthPattern, - pub long: LengthPattern, - pub medium: LengthPattern, - pub short: LengthPattern, - #[serde(rename = "availableFormats")] - pub available_formats: AvailableFormats, - } - - #[derive(PartialEq, Clone, Debug, Deserialize)] - pub struct AvailableFormats( - #[serde(with = "tuple_vec_map")] pub(crate) Vec<(Cow<'static, str>, Cow<'static, str>)>, - ); - - /// This struct represents a 1:1 mapping of the CLDR ca-gregorian.json data at the key - /// "main.LANGID.dates.calendars.gregorian" where "LANGID" is the identifier. - /// - /// e.g. - /// https://github.com/unicode-org/cldr-json/blob/master/cldr-json/cldr-dates-full/main/en/ca-gregorian.json - #[derive(PartialEq, Debug, Deserialize)] - pub struct GregoryDates { - pub months: months::Contexts, - pub days: days::Contexts, - #[serde(rename = "dayPeriods")] - pub day_periods: day_periods::Contexts, - #[serde(rename = "dateFormats")] - pub date_formats: LengthPatterns, - #[serde(rename = "timeFormats")] - pub time_formats: LengthPatterns, - #[serde(rename = "dateTimeFormats")] - pub datetime_formats: DateTimeFormats, - } - - #[derive(PartialEq, Debug, Deserialize)] - pub struct Calendars { - pub gregorian: GregoryDates, - } - - #[derive(PartialEq, Debug, Deserialize)] - pub struct Dates { - pub calendars: Calendars, - } - - #[derive(PartialEq, Debug, Deserialize)] - pub struct LangDates { - pub dates: Dates, - } - - #[derive(PartialEq, Debug, Deserialize)] - pub struct LangData(#[serde(with = "tuple_vec_map")] pub(crate) Vec<(CldrLangID, LangDates)>); - - #[derive(PartialEq, Debug, Deserialize)] - pub struct Resource { - pub main: LangData, - } -} - -#[test] -fn test_basic() { - use icu_locid_macros::langid; - - let cldr_paths = crate::cldr_paths::for_test(); - let provider = DatesProvider::try_from(&cldr_paths as &dyn CldrPaths).unwrap(); - - let cs_dates: DataPayload = provider - .load_payload(&DataRequest { - resource_path: ResourcePath { - key: key::GREGORY_V1, - options: ResourceOptions { - variant: None, - langid: Some(langid!("cs")), - }, - }, - }) - .unwrap() - .take_payload() - .unwrap(); - - assert_eq!("srpna", cs_dates.get().symbols.months.format.wide.0[7]); - - assert_eq!( - "po", - cs_dates - .get() - .symbols - .weekdays - .format - .short - .as_ref() - .unwrap() - .0[1] - ); - - assert_eq!("d. M. y", cs_dates.get().patterns.date.medium); -} - -#[test] -fn test_with_numbering_system() { - use icu_locid_macros::langid; - - let cldr_paths = crate::cldr_paths::for_test(); - let provider = DatesProvider::try_from(&cldr_paths as &dyn CldrPaths).unwrap(); - - let cs_dates: DataPayload = provider - .load_payload(&DataRequest { - resource_path: ResourcePath { - key: key::GREGORY_V1, - options: ResourceOptions { - variant: None, - langid: Some(langid!("haw")), - }, - }, - }) - .unwrap() - .take_payload() - .unwrap(); - - assert_eq!("d MMM y", cs_dates.get().patterns.date.medium); - // TODO(#308): Support numbering system variations. We currently throw them away. - assert_eq!("d/M/yy", cs_dates.get().patterns.date.short); -} - -#[test] -fn unalias_contexts() { - use icu_locid_macros::langid; - - let cldr_paths = crate::cldr_paths::for_test(); - let provider = DatesProvider::try_from(&cldr_paths as &dyn CldrPaths).unwrap(); - - let cs_dates: DataPayload = provider - .load_payload(&DataRequest { - resource_path: ResourcePath { - key: key::GREGORY_V1, - options: ResourceOptions { - variant: None, - langid: Some(langid!("cs")), - }, - }, - }) - .unwrap() - .take_payload() - .unwrap(); - - // Czech months are not unaliased because `wide` differs. - assert!(cs_dates.get().symbols.months.stand_alone.is_some()); - - // Czech months are not unaliased because `wide` differs. - assert!(cs_dates - .get() - .symbols - .months - .stand_alone - .as_ref() - .unwrap() - .abbreviated - .is_none()); - assert!(cs_dates - .get() - .symbols - .months - .stand_alone - .as_ref() - .unwrap() - .short - .is_none()); - assert!(cs_dates - .get() - .symbols - .months - .stand_alone - .as_ref() - .unwrap() - .narrow - .is_none()); - assert!(cs_dates - .get() - .symbols - .months - .stand_alone - .as_ref() - .unwrap() - .wide - .is_some()); - - // Czech weekdays are unaliased because they completely overlap. - assert!(cs_dates.get().symbols.weekdays.stand_alone.is_none()); -} diff --git a/provider/cldr/src/transform/dates/mod.rs b/provider/cldr/src/transform/dates/mod.rs new file mode 100644 index 00000000000..478646f4847 --- /dev/null +++ b/provider/cldr/src/transform/dates/mod.rs @@ -0,0 +1,191 @@ +// This file is part of ICU4X. For terms of use, please see the file +// called LICENSE at the top level of the ICU4X source tree +// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). + +pub mod patterns; +pub mod symbols; + +/// Serde structs for the CLDR JSON dates files. +pub(self) mod cldr_json { + use crate::cldr_langid::CldrLangID; + use serde::Deserialize; + use std::borrow::Cow; + + macro_rules! symbols { + ($name: ident, $([$alias: expr, $element: ident, $ty: ty]),+ $(,)?) => { + pub mod $name { + use super::*; + + #[derive(Debug, PartialEq, Clone, Deserialize)] + pub struct Symbols { + $( + #[serde(rename = $alias)] + pub $element: $ty + ),* + } + + symbols!(); + } + }; + ($name: ident, $([$element: ident, $ty: ty]),+ $(,)?) => { + pub mod $name { + use super::*; + + #[derive(Debug, PartialEq, Clone, Deserialize)] + pub struct Symbols { + $(pub $element: $ty),* + } + + symbols!(); + } + }; + () => { + #[derive(Debug, PartialEq, Clone, Deserialize)] + pub struct FormatWidths { + pub abbreviated: Symbols, + pub narrow: Symbols, + pub short: Option, + pub wide: Symbols, + } + + #[derive(Debug, PartialEq, Clone, Deserialize)] + pub struct StandAloneWidths { + pub abbreviated: Option, + pub narrow: Option, + pub short: Option, + pub wide: Option, + } + + #[derive(Debug, PartialEq, Clone, Deserialize)] + pub struct Contexts { + pub format: FormatWidths, + #[serde(rename = "stand-alone")] + pub stand_alone: Option, + } + } + } + + symbols!( + months, + ["1", m1, String], + ["2", m2, String], + ["3", m3, String], + ["4", m4, String], + ["5", m5, String], + ["6", m6, String], + ["7", m7, String], + ["8", m8, String], + ["9", m9, String], + ["10", m10, String], + ["11", m11, String], + ["12", m12, String], + ); + + symbols!( + days, + [sun, String], + [mon, String], + [tue, String], + [wed, String], + [thu, String], + [fri, String], + [sat, String], + ); + + // The day period symbols are Cow<'static, str> instead of String because the Option + // needs to be retained when converting them into Cow for the data provider. + symbols!( + day_periods, + ["am", am, Cow<'static, str>], + ["pm", pm, Cow<'static, str>], + ["noon", noon, Option>], + ["midnight", midnight, Option>], + ); + + #[derive(PartialEq, Debug, Deserialize)] + #[serde(untagged)] + pub enum LengthPattern { + Plain(String), + WithNumberingSystems { + #[serde(rename = "_value")] + pattern: String, + #[serde(rename = "_numbers")] + numbering_systems: String, + }, + } + + impl LengthPattern { + /// Get the pattern, dropping the numbering system if present. + pub fn get_pattern(&self) -> &String { + match self { + Self::Plain(pattern) => pattern, + Self::WithNumberingSystems { pattern, .. } => pattern, + } + } + } + + #[derive(PartialEq, Debug, Deserialize)] + pub struct LengthPatterns { + pub full: LengthPattern, + pub long: LengthPattern, + pub medium: LengthPattern, + pub short: LengthPattern, + } + + #[derive(PartialEq, Debug, Deserialize)] + pub struct DateTimeFormats { + pub full: LengthPattern, + pub long: LengthPattern, + pub medium: LengthPattern, + pub short: LengthPattern, + #[serde(rename = "availableFormats")] + pub available_formats: AvailableFormats, + } + + #[derive(PartialEq, Clone, Debug, Deserialize)] + pub struct AvailableFormats( + #[serde(with = "tuple_vec_map")] pub(crate) Vec<(Cow<'static, str>, Cow<'static, str>)>, + ); + + /// This struct represents a 1:1 mapping of the CLDR ca-gregorian.json data at the key + /// "main.LANGID.dates.calendars.gregorian" where "LANGID" is the identifier. + /// + /// e.g. + /// https://github.com/unicode-org/cldr-json/blob/master/cldr-json/cldr-dates-full/main/en/ca-gregorian.json + #[derive(PartialEq, Debug, Deserialize)] + pub struct GregoryDates { + pub months: months::Contexts, + pub days: days::Contexts, + #[serde(rename = "dayPeriods")] + pub day_periods: day_periods::Contexts, + #[serde(rename = "dateFormats")] + pub date_formats: LengthPatterns, + #[serde(rename = "timeFormats")] + pub time_formats: LengthPatterns, + #[serde(rename = "dateTimeFormats")] + pub datetime_formats: DateTimeFormats, + } + + #[derive(PartialEq, Debug, Deserialize)] + pub struct Calendars { + pub gregorian: GregoryDates, + } + + #[derive(PartialEq, Debug, Deserialize)] + pub struct Dates { + pub calendars: Calendars, + } + + #[derive(PartialEq, Debug, Deserialize)] + pub struct LangDates { + pub dates: Dates, + } + + #[derive(PartialEq, Debug, Deserialize)] + pub struct LangData(#[serde(with = "tuple_vec_map")] pub(crate) Vec<(CldrLangID, LangDates)>); + + #[derive(PartialEq, Debug, Deserialize)] + pub struct Resource { + pub main: LangData, + } +} diff --git a/provider/cldr/src/transform/dates/patterns.rs b/provider/cldr/src/transform/dates/patterns.rs new file mode 100644 index 00000000000..6ebdad6ab93 --- /dev/null +++ b/provider/cldr/src/transform/dates/patterns.rs @@ -0,0 +1,241 @@ +// This file is part of ICU4X. For terms of use, please see the file +// called LICENSE at the top level of the ICU4X source tree +// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). + +use super::cldr_json; +use crate::cldr_langid::CldrLangID; +use crate::error::Error; +use crate::reader::{get_subdirectories, open_reader}; +use crate::CldrPaths; +use icu_datetime::{provider::*, skeleton::SkeletonError}; +use icu_provider::iter::{IterableDataProviderCore, KeyedDataProvider}; +use icu_provider::prelude::*; +use std::borrow::Cow; +use std::convert::TryFrom; +use std::marker::PhantomData; + +/// All keys that this module is able to produce. +pub const ALL_KEYS: [ResourceKey; 1] = [ + key::GREGORY_DATE_PATTERNS_V1, // +]; + +/// A data provider reading from CLDR JSON dates files. +#[derive(PartialEq, Debug)] +pub struct DatePatternsProvider<'d> { + data: Vec<(CldrLangID, cldr_json::LangDates)>, + _phantom: PhantomData<&'d ()>, // placeholder for when we need the lifetime param +} + +impl TryFrom<&dyn CldrPaths> for DatePatternsProvider<'_> { + type Error = Error; + fn try_from(cldr_paths: &dyn CldrPaths) -> Result { + let mut data = vec![]; + + let path = cldr_paths.cldr_dates()?.join("main"); + + let locale_dirs = get_subdirectories(&path)?; + + for dir in locale_dirs { + let path = dir.join("ca-gregorian.json"); + + let mut resource: cldr_json::Resource = + serde_json::from_reader(open_reader(&path)?).map_err(|e| (e, path))?; + data.append(&mut resource.main.0); + } + + Ok(Self { + data, + _phantom: PhantomData, + }) + } +} + +impl<'d> KeyedDataProvider for DatePatternsProvider<'d> { + fn supports_key(resc_key: &ResourceKey) -> Result<(), DataError> { + if resc_key.category != ResourceCategory::DatePatterns || resc_key.version != 1 { + return Err(resc_key.into()); + } + Ok(()) + } +} + +impl<'d, 's> DataProvider<'d, 's, gregory::DatePatternsV1Marker> for DatePatternsProvider<'d> { + fn load_payload( + &self, + req: &DataRequest, + ) -> Result, DataError> { + DatePatternsProvider::supports_key(&req.resource_path.key)?; + let cldr_langid: CldrLangID = req.try_langid()?.clone().into(); + let dates = match self + .data + .binary_search_by_key(&&cldr_langid, |(lid, _)| lid) + { + Ok(idx) => &self.data[idx].1.dates, + Err(_) => return Err(DataError::UnavailableResourceOptions(req.clone())), + }; + Ok(DataResponse { + metadata: DataResponseMetadata { + data_langid: req.resource_path.options.langid.clone(), + }, + payload: Some(DataPayload::from_owned(gregory::DatePatternsV1::from( + dates, + ))), + }) + } +} + +icu_provider::impl_dyn_provider!(DatePatternsProvider<'d>, { + _ => gregory::DatePatternsV1Marker, +}, SERDE_SE, 'd, 's); + +impl<'d> IterableDataProviderCore for DatePatternsProvider<'d> { + fn supported_options_for_key( + &self, + _resc_key: &ResourceKey, + ) -> Result>, DataError> { + let list: Vec = self + .data + .iter() + .map(|(l, _)| ResourceOptions { + variant: None, + // TODO: Avoid the clone + langid: Some(l.langid.clone()), + }) + .collect(); + Ok(Box::new(list.into_iter())) + } +} + +impl From<&cldr_json::LengthPatterns> for gregory::patterns::LengthPatternsV1 { + fn from(other: &cldr_json::LengthPatterns) -> Self { + // TODO(#308): Support numbering system variations. We currently throw them away. + Self { + full: Cow::Owned(other.full.get_pattern().clone()), + long: Cow::Owned(other.long.get_pattern().clone()), + medium: Cow::Owned(other.medium.get_pattern().clone()), + short: Cow::Owned(other.short.get_pattern().clone()), + } + } +} + +impl From<&cldr_json::DateTimeFormats> for gregory::patterns::DateTimeFormatsV1 { + fn from(other: &cldr_json::DateTimeFormats) -> Self { + use gregory::patterns::{PatternV1, SkeletonV1, SkeletonsV1}; + use litemap::LiteMap; + + // TODO(#308): Support numbering system variations. We currently throw them away. + Self { + length_patterns: gregory::patterns::LengthPatternsV1 { + full: Cow::Owned(other.full.get_pattern().clone()), + long: Cow::Owned(other.long.get_pattern().clone()), + medium: Cow::Owned(other.medium.get_pattern().clone()), + short: Cow::Owned(other.short.get_pattern().clone()), + }, + skeletons: { + let mut skeletons = SkeletonsV1(LiteMap::new()); + + // The CLDR keys for available_formats can have duplicate skeletons with either + // an additional variant, or with multiple variants for different plurals. + for (skeleton_str, pattern_str) in other.available_formats.0.iter() { + let mut unique_skeleton = None; + let mut variant_parts = Vec::new(); + + for part in skeleton_str.split('-') { + match unique_skeleton { + None => { + unique_skeleton = Some(part); + } + Some(_) => variant_parts.push(part), + } + } + + let unique_skeleton = unique_skeleton.expect("Expected to find a skeleton."); + + let skeleton_fields_v1 = match SkeletonV1::try_from(unique_skeleton) { + Ok(s) => s, + Err(err) => match err { + // Ignore unimplemented fields for now. + SkeletonError::SymbolUnimplemented(_) => continue, + _ => panic!("{:?} {}", unique_skeleton, err), + }, + }; + + if !variant_parts.is_empty() { + eprintln!( + "This skeleton string is not yet supported: {:?}", + skeleton_str + ); + continue; + } + + let pattern_v1 = PatternV1::try_from(pattern_str as &str) + .expect("Unable to parse a pattern"); + + skeletons.0.insert(skeleton_fields_v1, pattern_v1); + } + + skeletons + }, + } + } +} + +impl From<&cldr_json::Dates> for gregory::DatePatternsV1 { + fn from(other: &cldr_json::Dates) -> Self { + Self { + date: (&other.calendars.gregorian.date_formats).into(), + time: (&other.calendars.gregorian.time_formats).into(), + datetime: (&other.calendars.gregorian.datetime_formats).into(), + } + } +} + +#[test] +fn test_basic() { + use icu_locid_macros::langid; + + let cldr_paths = crate::cldr_paths::for_test(); + let provider = DatePatternsProvider::try_from(&cldr_paths as &dyn CldrPaths).unwrap(); + + let cs_dates: DataPayload = provider + .load_payload(&DataRequest { + resource_path: ResourcePath { + key: key::GREGORY_DATE_PATTERNS_V1, + options: ResourceOptions { + variant: None, + langid: Some(langid!("cs")), + }, + }, + }) + .unwrap() + .take_payload() + .unwrap(); + + assert_eq!("d. M. y", cs_dates.get().date.medium); +} + +#[test] +fn test_with_numbering_system() { + use icu_locid_macros::langid; + + let cldr_paths = crate::cldr_paths::for_test(); + let provider = DatePatternsProvider::try_from(&cldr_paths as &dyn CldrPaths).unwrap(); + + let cs_dates: DataPayload = provider + .load_payload(&DataRequest { + resource_path: ResourcePath { + key: key::GREGORY_DATE_PATTERNS_V1, + options: ResourceOptions { + variant: None, + langid: Some(langid!("haw")), + }, + }, + }) + .unwrap() + .take_payload() + .unwrap(); + + assert_eq!("d MMM y", cs_dates.get().date.medium); + // TODO(#308): Support numbering system variations. We currently throw them away. + assert_eq!("d/M/yy", cs_dates.get().date.short); +} diff --git a/provider/cldr/src/transform/dates/symbols.rs b/provider/cldr/src/transform/dates/symbols.rs new file mode 100644 index 00000000000..993fc65ecc5 --- /dev/null +++ b/provider/cldr/src/transform/dates/symbols.rs @@ -0,0 +1,323 @@ +// This file is part of ICU4X. For terms of use, please see the file +// called LICENSE at the top level of the ICU4X source tree +// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). + +use super::cldr_json; +use crate::cldr_langid::CldrLangID; +use crate::error::Error; +use crate::reader::{get_subdirectories, open_reader}; +use crate::CldrPaths; +use icu_datetime::provider::*; +use icu_provider::iter::{IterableDataProviderCore, KeyedDataProvider}; +use icu_provider::prelude::*; +use std::borrow::Cow; +use std::convert::TryFrom; +use std::marker::PhantomData; + +/// All keys that this module is able to produce. +pub const ALL_KEYS: [ResourceKey; 1] = [ + key::GREGORY_DATE_SYMBOLS_V1, // +]; + +/// A data provider reading from CLDR JSON dates files. +#[derive(PartialEq, Debug)] +pub struct DateSymbolsProvider<'d> { + data: Vec<(CldrLangID, cldr_json::LangDates)>, + _phantom: PhantomData<&'d ()>, // placeholder for when we need the lifetime param +} + +impl TryFrom<&dyn CldrPaths> for DateSymbolsProvider<'_> { + type Error = Error; + fn try_from(cldr_paths: &dyn CldrPaths) -> Result { + let mut data = vec![]; + + let path = cldr_paths.cldr_dates()?.join("main"); + + let locale_dirs = get_subdirectories(&path)?; + + for dir in locale_dirs { + let path = dir.join("ca-gregorian.json"); + + let mut resource: cldr_json::Resource = + serde_json::from_reader(open_reader(&path)?).map_err(|e| (e, path))?; + data.append(&mut resource.main.0); + } + + Ok(Self { + data, + _phantom: PhantomData, + }) + } +} + +impl<'d> KeyedDataProvider for DateSymbolsProvider<'d> { + fn supports_key(resc_key: &ResourceKey) -> Result<(), DataError> { + if resc_key.category != ResourceCategory::DateSymbols || resc_key.version != 1 { + return Err(resc_key.into()); + } + Ok(()) + } +} + +impl<'d, 's> DataProvider<'d, 's, gregory::DateSymbolsV1Marker> for DateSymbolsProvider<'d> { + fn load_payload( + &self, + req: &DataRequest, + ) -> Result, DataError> { + DateSymbolsProvider::supports_key(&req.resource_path.key)?; + let cldr_langid: CldrLangID = req.try_langid()?.clone().into(); + let dates = match self + .data + .binary_search_by_key(&&cldr_langid, |(lid, _)| lid) + { + Ok(idx) => &self.data[idx].1.dates, + Err(_) => return Err(DataError::UnavailableResourceOptions(req.clone())), + }; + Ok(DataResponse { + metadata: DataResponseMetadata { + data_langid: req.resource_path.options.langid.clone(), + }, + payload: Some(DataPayload::from_owned(gregory::DateSymbolsV1::from(dates))), + }) + } +} + +icu_provider::impl_dyn_provider!(DateSymbolsProvider<'d>, { + _ => gregory::DateSymbolsV1Marker, +}, SERDE_SE, 'd, 's); + +impl<'d> IterableDataProviderCore for DateSymbolsProvider<'d> { + fn supported_options_for_key( + &self, + _resc_key: &ResourceKey, + ) -> Result>, DataError> { + let list: Vec = self + .data + .iter() + .map(|(l, _)| ResourceOptions { + variant: None, + // TODO: Avoid the clone + langid: Some(l.langid.clone()), + }) + .collect(); + Ok(Box::new(list.into_iter())) + } +} + +impl From<&cldr_json::Dates> for gregory::DateSymbolsV1 { + fn from(other: &cldr_json::Dates) -> Self { + Self { + months: (&other.calendars.gregorian.months).into(), + weekdays: (&other.calendars.gregorian.days).into(), + day_periods: (&other.calendars.gregorian.day_periods).into(), + } + } +} + +macro_rules! symbols_from { + ([$name: ident, $name2: ident $(,)?], [ $($element: ident),+ $(,)? ] $(,)?) => { + impl From<&cldr_json::$name::Symbols> for gregory::$name2::SymbolsV1 { + fn from(other: &cldr_json::$name::Symbols) -> Self { + Self([ + $( + Cow::Owned(other.$element.clone()), + )* + ]) + } + } + symbols_from!([$name, $name2]); + }; + ([$name: ident, $name2: ident $(,)?], { $($element: ident),+ $(,)? } $(,)?) => { + impl From<&cldr_json::$name::Symbols> for gregory::$name2::SymbolsV1 { + fn from(other: &cldr_json::$name::Symbols) -> Self { + Self { + $( + $element: other.$element.clone(), + )* + } + } + } + symbols_from!([$name, $name]); + }; + ([$name: ident, $name2: ident]) => { + impl cldr_json::$name::Symbols { + // Helper function which returns None if the two groups of symbols overlap. + pub fn get_unaliased(&self, other: &Self) -> Option { + if self == other { + None + } else { + Some(self.clone()) + } + } + } + + impl From<&cldr_json::$name::Contexts> for gregory::$name2::ContextsV1 { + fn from(other: &cldr_json::$name::Contexts) -> Self { + Self { + format: (&other.format).into(), + stand_alone: other.stand_alone.as_ref().and_then(|stand_alone| { + stand_alone.get_unaliased(&other.format) + }).map(|ref stand_alone| stand_alone.into()) + } + } + } + + impl cldr_json::$name::StandAloneWidths { + // Helper function which returns None if the two groups of symbols overlap. + pub fn get_unaliased(&self, other: &cldr_json::$name::FormatWidths) -> Option { + let abbreviated = self.abbreviated.as_ref().and_then(|v| v.get_unaliased(&other.abbreviated)); + let narrow = self.narrow.as_ref().and_then(|v| v.get_unaliased(&other.narrow)); + let short = if self.short == other.short { + None + } else { + self.short.clone() + }; + let wide = self.wide.as_ref().and_then(|v| v.get_unaliased(&other.wide)); + + if abbreviated.is_none() && narrow.is_none() && wide.is_none() && short.is_none() { + None + } else { + Some(Self { + abbreviated, + narrow, + short, + wide, + }) + } + } + } + + impl From<&cldr_json::$name::FormatWidths> for gregory::$name2::FormatWidthsV1 { + fn from(other: &cldr_json::$name::FormatWidths) -> Self { + Self { + abbreviated: (&other.abbreviated).into(), + narrow: (&other.narrow).into(), + short: other.short.as_ref().map(|width| width.into()), + wide: (&other.wide).into(), + } + } + } + + impl From<&cldr_json::$name::StandAloneWidths> for gregory::$name2::StandAloneWidthsV1 { + fn from(other: &cldr_json::$name::StandAloneWidths) -> Self { + Self { + abbreviated: other.abbreviated.as_ref().map(|width| width.into()), + narrow: other.narrow.as_ref().map(|width| width.into()), + short: other.short.as_ref().map(|width| width.into()), + wide: other.wide.as_ref().map(|width| width.into()), + } + } + } + }; +} + +symbols_from!( + [months, months], + [m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12], +); + +symbols_from!([days, weekdays], [sun, mon, tue, wed, thu, fri, sat]); + +symbols_from!( + [ + day_periods, + day_periods, + ], + { + am, + pm, + noon, + midnight, + }, +); + +#[test] +fn test_basic() { + use icu_locid_macros::langid; + + let cldr_paths = crate::cldr_paths::for_test(); + let provider = DateSymbolsProvider::try_from(&cldr_paths as &dyn CldrPaths).unwrap(); + + let cs_dates: DataPayload = provider + .load_payload(&DataRequest { + resource_path: ResourcePath { + key: key::GREGORY_DATE_SYMBOLS_V1, + options: ResourceOptions { + variant: None, + langid: Some(langid!("cs")), + }, + }, + }) + .unwrap() + .take_payload() + .unwrap(); + + assert_eq!("srpna", cs_dates.get().months.format.wide.0[7]); + + assert_eq!( + "po", + cs_dates.get().weekdays.format.short.as_ref().unwrap().0[1] + ); +} + +#[test] +fn unalias_contexts() { + use icu_locid_macros::langid; + + let cldr_paths = crate::cldr_paths::for_test(); + let provider = DateSymbolsProvider::try_from(&cldr_paths as &dyn CldrPaths).unwrap(); + + let cs_dates: DataPayload = provider + .load_payload(&DataRequest { + resource_path: ResourcePath { + key: key::GREGORY_DATE_SYMBOLS_V1, + options: ResourceOptions { + variant: None, + langid: Some(langid!("cs")), + }, + }, + }) + .unwrap() + .take_payload() + .unwrap(); + + // Czech months are not unaliased because `wide` differs. + assert!(cs_dates.get().months.stand_alone.is_some()); + + // Czech months are not unaliased because `wide` differs. + assert!(cs_dates + .get() + .months + .stand_alone + .as_ref() + .unwrap() + .abbreviated + .is_none()); + assert!(cs_dates + .get() + .months + .stand_alone + .as_ref() + .unwrap() + .short + .is_none()); + assert!(cs_dates + .get() + .months + .stand_alone + .as_ref() + .unwrap() + .narrow + .is_none()); + assert!(cs_dates + .get() + .months + .stand_alone + .as_ref() + .unwrap() + .wide + .is_some()); + + // Czech weekdays are unaliased because they completely overlap. + assert!(cs_dates.get().weekdays.stand_alone.is_none()); +} diff --git a/provider/cldr/src/transform/mod.rs b/provider/cldr/src/transform/mod.rs index ddf0d316824..168d65c3518 100644 --- a/provider/cldr/src/transform/mod.rs +++ b/provider/cldr/src/transform/mod.rs @@ -10,7 +10,7 @@ mod plurals; mod time_zones; pub use aliases::AliasesProvider; -pub use dates::DatesProvider; +pub use dates::{patterns::DatePatternsProvider, symbols::DateSymbolsProvider}; pub use likelysubtags::LikelySubtagsProvider; pub use numbers::NumbersProvider; pub use plurals::PluralsProvider; @@ -27,7 +27,8 @@ use self::time_zones::TimeZonesProvider; pub fn get_all_cldr_keys() -> Vec { let mut result: Vec = vec![]; result.extend(&aliases::ALL_KEYS); - result.extend(&dates::ALL_KEYS); + result.extend(&dates::symbols::ALL_KEYS); + result.extend(&dates::patterns::ALL_KEYS); result.extend(&likelysubtags::ALL_KEYS); result.extend(&numbers::ALL_KEYS); result.extend(&plurals::ALL_KEYS); @@ -39,7 +40,8 @@ pub fn get_all_cldr_keys() -> Vec { pub struct CldrJsonDataProvider<'a, 'd> { pub cldr_paths: &'a dyn CldrPaths, aliases: LazyCldrProvider>, - dates: LazyCldrProvider>, + date_symbols: LazyCldrProvider>, + date_patterns: LazyCldrProvider>, likelysubtags: LazyCldrProvider>, numbers: LazyCldrProvider, plurals: LazyCldrProvider>, @@ -51,7 +53,8 @@ impl<'a, 'd> CldrJsonDataProvider<'a, 'd> { CldrJsonDataProvider { cldr_paths, aliases: Default::default(), - dates: Default::default(), + date_symbols: Default::default(), + date_patterns: Default::default(), likelysubtags: Default::default(), numbers: Default::default(), plurals: Default::default(), @@ -70,7 +73,10 @@ impl<'a, 'd, 's: 'd> DataProvider<'d, 's, SerdeSeDataStructMarker> if let Some(result) = self.aliases.try_load_serde(req, self.cldr_paths)? { return Ok(result); } - if let Some(result) = self.dates.try_load_serde(req, self.cldr_paths)? { + if let Some(result) = self.date_symbols.try_load_serde(req, self.cldr_paths)? { + return Ok(result); + } + if let Some(result) = self.date_patterns.try_load_serde(req, self.cldr_paths)? { return Ok(result); } if let Some(result) = self.likelysubtags.try_load_serde(req, self.cldr_paths)? { @@ -101,7 +107,13 @@ impl<'a, 'd> IterableDataProviderCore for CldrJsonDataProvider<'a, 'd> { return Ok(resp); } if let Some(resp) = self - .dates + .date_symbols + .try_supported_options(resc_key, self.cldr_paths)? + { + return Ok(resp); + } + if let Some(resp) = self + .date_patterns .try_supported_options(resc_key, self.cldr_paths)? { return Ok(resp); @@ -137,6 +149,7 @@ impl<'a, 'd> IterableDataProviderCore for CldrJsonDataProvider<'a, 'd> { impl<'a, 'd> KeyedDataProvider for CldrJsonDataProvider<'a, 'd> { fn supports_key(resc_key: &ResourceKey) -> Result<(), DataError> { PluralsProvider::supports_key(resc_key) - .or_else(|err| DatesProvider::or_else_supports_key(err, resc_key)) + .or_else(|err| DateSymbolsProvider::or_else_supports_key(err, resc_key)) + .or_else(|err| DatePatternsProvider::or_else_supports_key(err, resc_key)) } } diff --git a/provider/core/src/resource.rs b/provider/core/src/resource.rs index 0a6f1770b60..4c5276ff61c 100644 --- a/provider/core/src/resource.rs +++ b/provider/core/src/resource.rs @@ -18,7 +18,8 @@ use tinystr::{TinyStr16, TinyStr4}; #[derive(PartialEq, Eq, PartialOrd, Ord, Copy, Clone, Debug)] pub enum ResourceCategory { Aliases, - Dates, + DatePatterns, + DateSymbols, Decimal, Icu4x, LikelySubtags, @@ -33,7 +34,8 @@ impl ResourceCategory { pub fn as_str(&self) -> Cow<'static, str> { match self { Self::Aliases => Cow::Borrowed("aliases"), - Self::Dates => Cow::Borrowed("dates"), + Self::DatePatterns => Cow::Borrowed("date_patterns"), + Self::DateSymbols => Cow::Borrowed("date_symbols"), Self::Decimal => Cow::Borrowed("decimal"), Self::Icu4x => Cow::Borrowed("icu4x"), Self::LikelySubtags => Cow::Borrowed("likelysubtags"), @@ -94,8 +96,19 @@ macro_rules! resource_key { (aliases, $sub_category:literal, $version:tt) => { $crate::resource_key!($crate::ResourceCategory::Aliases, $sub_category, $version) }; - (dates, $sub_category:literal, $version:tt) => { - $crate::resource_key!($crate::ResourceCategory::Dates, $sub_category, $version) + (date_patterns, $sub_category:literal, $version:tt) => { + $crate::resource_key!( + $crate::ResourceCategory::DatePatterns, + $sub_category, + $version + ) + }; + (date_symbols, $sub_category:literal, $version:tt) => { + $crate::resource_key!( + $crate::ResourceCategory::DateSymbols, + $sub_category, + $version + ) }; (icu4x, $sub_category:literal, $version:tt) => { $crate::resource_key!($crate::ResourceCategory::Icu4x, $sub_category, $version) diff --git a/provider/testdata/data/json/date_patterns/gregory@1/ar-EG.json b/provider/testdata/data/json/date_patterns/gregory@1/ar-EG.json new file mode 100644 index 00000000000..2ae1d61f673 --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/ar-EG.json @@ -0,0 +1,60 @@ +{ + "date": { + "full": "EEEE، d MMMM y", + "long": "d MMMM y", + "medium": "dd‏/MM‏/y", + "short": "d‏/M‏/y" + }, + "time": { + "full": "h:mm:ss a zzzz", + "long": "h:mm:ss a z", + "medium": "h:mm:ss a", + "short": "h:mm a" + }, + "datetime": { + "length_patterns": { + "full": "{1} في {0}", + "long": "{1} في {0}", + "medium": "{1}, {0}", + "short": "{1}, {0}" + }, + "skeletons": { + "y": "y", + "yM": "M‏/y", + "yMd": "d‏/M‏/y", + "yMdE": "E، d/‏M/‏y", + "yMM": "MM‏/y", + "yMMM": "MMM y", + "yMMMd": "d MMM y", + "yMMMdE": "E، d MMM y", + "yMMMM": "MMMM y", + "M": "L", + "Md": "d/‏M", + "MdE": "E، d/‏M", + "MMdd": "dd‏/MM", + "MMM": "LLL", + "MMMd": "d MMM", + "MMMdE": "E، d MMM", + "MMMMd": "d MMMM", + "MMMMdE": "E، d MMMM", + "d": "d", + "dE": "E، d", + "E": "ccc", + "Ehm": "E h:mm a", + "Ehms": "E h:mm:ss a", + "EHm": "E HH:mm", + "EHms": "E HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmv": "h:mm a v", + "H": "HH", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/ar.json b/provider/testdata/data/json/date_patterns/gregory@1/ar.json new file mode 100644 index 00000000000..2ae1d61f673 --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/ar.json @@ -0,0 +1,60 @@ +{ + "date": { + "full": "EEEE، d MMMM y", + "long": "d MMMM y", + "medium": "dd‏/MM‏/y", + "short": "d‏/M‏/y" + }, + "time": { + "full": "h:mm:ss a zzzz", + "long": "h:mm:ss a z", + "medium": "h:mm:ss a", + "short": "h:mm a" + }, + "datetime": { + "length_patterns": { + "full": "{1} في {0}", + "long": "{1} في {0}", + "medium": "{1}, {0}", + "short": "{1}, {0}" + }, + "skeletons": { + "y": "y", + "yM": "M‏/y", + "yMd": "d‏/M‏/y", + "yMdE": "E، d/‏M/‏y", + "yMM": "MM‏/y", + "yMMM": "MMM y", + "yMMMd": "d MMM y", + "yMMMdE": "E، d MMM y", + "yMMMM": "MMMM y", + "M": "L", + "Md": "d/‏M", + "MdE": "E، d/‏M", + "MMdd": "dd‏/MM", + "MMM": "LLL", + "MMMd": "d MMM", + "MMMdE": "E، d MMM", + "MMMMd": "d MMMM", + "MMMMdE": "E، d MMMM", + "d": "d", + "dE": "E، d", + "E": "ccc", + "Ehm": "E h:mm a", + "Ehms": "E h:mm:ss a", + "EHm": "E HH:mm", + "EHms": "E HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmv": "h:mm a v", + "H": "HH", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/bn.json b/provider/testdata/data/json/date_patterns/gregory@1/bn.json new file mode 100644 index 00000000000..bf86408aeb5 --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/bn.json @@ -0,0 +1,60 @@ +{ + "date": { + "full": "EEEE, d MMMM, y", + "long": "d MMMM, y", + "medium": "d MMM, y", + "short": "d/M/yy" + }, + "time": { + "full": "h:mm:ss a zzzz", + "long": "h:mm:ss a z", + "medium": "h:mm:ss a", + "short": "h:mm a" + }, + "datetime": { + "length_patterns": { + "full": "{1} {0}", + "long": "{1} {0}", + "medium": "{1} {0}", + "short": "{1} {0}" + }, + "skeletons": { + "y": "y", + "yM": "M/y", + "yMd": "d/M/y", + "yMdE": "E, d/M/y", + "yMM": "MM-y", + "yMMM": "MMM y", + "yMMMd": "d MMM, y", + "yMMMdE": "E, d MMM, y", + "yMMMM": "MMMM y", + "M": "L", + "Md": "d/M", + "MdE": "E, d-M", + "MMdd": "dd-MM", + "MMM": "LLL", + "MMMd": "d MMM", + "MMMdE": "E d MMM", + "MMMMd": "d MMMM", + "MMMMdE": "E d MMMM", + "d": "d", + "dE": "d E", + "E": "ccc", + "Ehm": "E h:mm a", + "Ehms": "E h:mm:ss a", + "EHm": "E HH:mm", + "EHms": "E HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmv": "h:mm a v", + "H": "HH", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/ccp.json b/provider/testdata/data/json/date_patterns/gregory@1/ccp.json new file mode 100644 index 00000000000..bf86408aeb5 --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/ccp.json @@ -0,0 +1,60 @@ +{ + "date": { + "full": "EEEE, d MMMM, y", + "long": "d MMMM, y", + "medium": "d MMM, y", + "short": "d/M/yy" + }, + "time": { + "full": "h:mm:ss a zzzz", + "long": "h:mm:ss a z", + "medium": "h:mm:ss a", + "short": "h:mm a" + }, + "datetime": { + "length_patterns": { + "full": "{1} {0}", + "long": "{1} {0}", + "medium": "{1} {0}", + "short": "{1} {0}" + }, + "skeletons": { + "y": "y", + "yM": "M/y", + "yMd": "d/M/y", + "yMdE": "E, d/M/y", + "yMM": "MM-y", + "yMMM": "MMM y", + "yMMMd": "d MMM, y", + "yMMMdE": "E, d MMM, y", + "yMMMM": "MMMM y", + "M": "L", + "Md": "d/M", + "MdE": "E, d-M", + "MMdd": "dd-MM", + "MMM": "LLL", + "MMMd": "d MMM", + "MMMdE": "E d MMM", + "MMMMd": "d MMMM", + "MMMMdE": "E d MMMM", + "d": "d", + "dE": "d E", + "E": "ccc", + "Ehm": "E h:mm a", + "Ehms": "E h:mm:ss a", + "EHm": "E HH:mm", + "EHms": "E HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmv": "h:mm a v", + "H": "HH", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/en-001.json b/provider/testdata/data/json/date_patterns/gregory@1/en-001.json new file mode 100644 index 00000000000..d3307750055 --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/en-001.json @@ -0,0 +1,58 @@ +{ + "date": { + "full": "EEEE, d MMMM y", + "long": "d MMMM y", + "medium": "d MMM y", + "short": "dd/MM/y" + }, + "time": { + "full": "h:mm:ss a zzzz", + "long": "h:mm:ss a z", + "medium": "h:mm:ss a", + "short": "h:mm a" + }, + "datetime": { + "length_patterns": { + "full": "{1} 'at' {0}", + "long": "{1} 'at' {0}", + "medium": "{1}, {0}", + "short": "{1}, {0}" + }, + "skeletons": { + "y": "y", + "yM": "MM/y", + "yMd": "dd/MM/y", + "yMdE": "E, dd/MM/y", + "yMMM": "MMM y", + "yMMMd": "d MMM y", + "yMMMdE": "E, d MMM y", + "yMMMM": "MMMM y", + "M": "L", + "Md": "dd/MM", + "MdE": "E, dd/MM", + "MMdd": "dd/MM", + "MMM": "LLL", + "MMMd": "d MMM", + "MMMdE": "E, d MMM", + "MMMMd": "d MMMM", + "d": "d", + "dE": "E d", + "E": "ccc", + "Ehm": "E h:mm a", + "Ehms": "E h:mm:ss a", + "EHm": "E HH:mm", + "EHms": "E HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmv": "h:mm a v", + "H": "HH", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/en-ZA.json b/provider/testdata/data/json/date_patterns/gregory@1/en-ZA.json new file mode 100644 index 00000000000..a905a6435eb --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/en-ZA.json @@ -0,0 +1,58 @@ +{ + "date": { + "full": "EEEE, dd MMMM y", + "long": "dd MMMM y", + "medium": "dd MMM y", + "short": "y/MM/dd" + }, + "time": { + "full": "HH:mm:ss zzzz", + "long": "HH:mm:ss z", + "medium": "HH:mm:ss", + "short": "HH:mm" + }, + "datetime": { + "length_patterns": { + "full": "{1} 'at' {0}", + "long": "{1} 'at' {0}", + "medium": "{1}, {0}", + "short": "{1}, {0}" + }, + "skeletons": { + "y": "y", + "yM": "MM/y", + "yMd": "y/MM/dd", + "yMdE": "E, y/MM/dd", + "yMMM": "MMM y", + "yMMMd": "dd MMM y", + "yMMMdE": "E, dd MMM y", + "yMMMM": "MMMM y", + "M": "L", + "Md": "MM/dd", + "MdE": "E, MM/dd", + "MMdd": "dd/MM", + "MMM": "LLL", + "MMMd": "dd MMM", + "MMMdE": "E, dd MMM", + "MMMMd": "d MMMM", + "d": "d", + "dE": "E d", + "E": "ccc", + "Ehm": "E h:mm a", + "Ehms": "E h:mm:ss a", + "EHm": "E HH:mm", + "EHms": "E HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmv": "h:mm a v", + "H": "HH", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/en.json b/provider/testdata/data/json/date_patterns/gregory@1/en.json new file mode 100644 index 00000000000..5c8943b89b5 --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/en.json @@ -0,0 +1,57 @@ +{ + "date": { + "full": "EEEE, MMMM d, y", + "long": "MMMM d, y", + "medium": "MMM d, y", + "short": "M/d/yy" + }, + "time": { + "full": "h:mm:ss a zzzz", + "long": "h:mm:ss a z", + "medium": "h:mm:ss a", + "short": "h:mm a" + }, + "datetime": { + "length_patterns": { + "full": "{1} 'at' {0}", + "long": "{1} 'at' {0}", + "medium": "{1}, {0}", + "short": "{1}, {0}" + }, + "skeletons": { + "y": "y", + "yM": "M/y", + "yMd": "M/d/y", + "yMdE": "E, M/d/y", + "yMMM": "MMM y", + "yMMMd": "MMM d, y", + "yMMMdE": "E, MMM d, y", + "yMMMM": "MMMM y", + "M": "L", + "Md": "M/d", + "MdE": "E, M/d", + "MMM": "LLL", + "MMMd": "MMM d", + "MMMdE": "E, MMM d", + "MMMMd": "MMMM d", + "d": "d", + "dE": "d E", + "E": "ccc", + "Ehm": "E h:mm a", + "Ehms": "E h:mm:ss a", + "EHm": "E HH:mm", + "EHms": "E HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmv": "h:mm a v", + "H": "HH", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/es-AR.json b/provider/testdata/data/json/date_patterns/gregory@1/es-AR.json new file mode 100644 index 00000000000..a0234723a37 --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/es-AR.json @@ -0,0 +1,66 @@ +{ + "date": { + "full": "EEEE, d 'de' MMMM 'de' y", + "long": "d 'de' MMMM 'de' y", + "medium": "d MMM y", + "short": "d/M/yy" + }, + "time": { + "full": "HH:mm:ss zzzz", + "long": "HH:mm:ss z", + "medium": "HH:mm:ss", + "short": "HH:mm" + }, + "datetime": { + "length_patterns": { + "full": "{1}, {0}", + "long": "{1}, {0}", + "medium": "{1} {0}", + "short": "{1} {0}" + }, + "skeletons": { + "y": "y", + "yM": "M-y", + "yMd": "d/M/y", + "yMdE": "E, d/M/y", + "yMM": "M/y", + "yMMM": "MMM y", + "yMMMd": "d 'de' MMM 'de' y", + "yMMMdE": "E, d MMM y", + "yMMMM": "MMMM 'de' y", + "yMMMMd": "d 'de' MMMM 'de' y", + "yMMMMdE": "EEE, d 'de' MMMM 'de' y", + "M": "L", + "Md": "d/M", + "MdE": "E d-M", + "MMd": "d/M", + "MMdd": "d/M", + "MMM": "LLL", + "MMMd": "d MMM", + "MMMdE": "E, d MMM", + "MMMdd": "dd-MMM", + "MMMMd": "d 'de' MMMM", + "MMMMdE": "E, d 'de' MMMM", + "d": "d", + "dE": "E d", + "E": "ccc", + "Ehm": "E, h:mm a", + "Ehms": "E, h:mm:ss a", + "EHm": "E, HH:mm", + "EHms": "E, HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "hh:mm:ss", + "hmsv": "h:mm:ss a v", + "hmsvvvv": "h:mm:ss a (vvvv)", + "hmv": "h:mm a v", + "H": "HH", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmsvvvv": "HH:mm:ss (vvvv)", + "Hmv": "HH:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/es.json b/provider/testdata/data/json/date_patterns/gregory@1/es.json new file mode 100644 index 00000000000..50a0357e559 --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/es.json @@ -0,0 +1,65 @@ +{ + "date": { + "full": "EEEE, d 'de' MMMM 'de' y", + "long": "d 'de' MMMM 'de' y", + "medium": "d MMM y", + "short": "d/M/yy" + }, + "time": { + "full": "H:mm:ss (zzzz)", + "long": "H:mm:ss z", + "medium": "H:mm:ss", + "short": "H:mm" + }, + "datetime": { + "length_patterns": { + "full": "{1}, {0}", + "long": "{1}, {0}", + "medium": "{1} {0}", + "short": "{1} {0}" + }, + "skeletons": { + "y": "y", + "yM": "M/y", + "yMd": "d/M/y", + "yMdE": "EEE, d/M/y", + "yMM": "M/y", + "yMMM": "MMM y", + "yMMMd": "d MMM y", + "yMMMdE": "EEE, d MMM y", + "yMMMM": "MMMM 'de' y", + "yMMMMd": "d 'de' MMMM 'de' y", + "yMMMMdE": "EEE, d 'de' MMMM 'de' y", + "M": "L", + "Md": "d/M", + "MdE": "E, d/M", + "MMd": "d/M", + "MMdd": "d/M", + "MMM": "LLL", + "MMMd": "d MMM", + "MMMdE": "E, d MMM", + "MMMMd": "d 'de' MMMM", + "MMMMdE": "E, d 'de' MMMM", + "d": "d", + "dE": "E d", + "E": "ccc", + "Ehm": "E, h:mm a", + "Ehms": "E, h:mm:ss a", + "EHm": "E, H:mm", + "EHms": "E, H:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmsvvvv": "h:mm:ss a (vvvv)", + "hmv": "h:mm a v", + "H": "H", + "Hm": "H:mm", + "Hms": "H:mm:ss", + "Hmsv": "H:mm:ss v", + "Hmsvvvv": "H:mm:ss (vvvv)", + "Hmv": "H:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/fr.json b/provider/testdata/data/json/date_patterns/gregory@1/fr.json new file mode 100644 index 00000000000..91aecce7c20 --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/fr.json @@ -0,0 +1,57 @@ +{ + "date": { + "full": "EEEE d MMMM y", + "long": "d MMMM y", + "medium": "d MMM y", + "short": "dd/MM/y" + }, + "time": { + "full": "HH:mm:ss zzzz", + "long": "HH:mm:ss z", + "medium": "HH:mm:ss", + "short": "HH:mm" + }, + "datetime": { + "length_patterns": { + "full": "{1} 'à' {0}", + "long": "{1} 'à' {0}", + "medium": "{1}, {0}", + "short": "{1} {0}" + }, + "skeletons": { + "y": "y", + "yM": "MM/y", + "yMd": "dd/MM/y", + "yMdE": "E dd/MM/y", + "yMMM": "MMM y", + "yMMMd": "d MMM y", + "yMMMdE": "E d MMM y", + "yMMMM": "MMMM y", + "M": "L", + "Md": "dd/MM", + "MdE": "E dd/MM", + "MMM": "LLL", + "MMMd": "d MMM", + "MMMdE": "E d MMM", + "MMMMd": "d MMMM", + "d": "d", + "dE": "E d", + "E": "E", + "Ehm": "E h:mm a", + "Ehms": "E h:mm:ss a", + "EHm": "E HH:mm", + "EHms": "E HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmv": "h:mm a v", + "H": "HH 'h'", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/ja.json b/provider/testdata/data/json/date_patterns/gregory@1/ja.json new file mode 100644 index 00000000000..28f5e8d7542 --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/ja.json @@ -0,0 +1,63 @@ +{ + "date": { + "full": "y年M月d日EEEE", + "long": "y年M月d日", + "medium": "y/MM/dd", + "short": "y/MM/dd" + }, + "time": { + "full": "H時mm分ss秒 zzzz", + "long": "H:mm:ss z", + "medium": "H:mm:ss", + "short": "H:mm" + }, + "datetime": { + "length_patterns": { + "full": "{1} {0}", + "long": "{1} {0}", + "medium": "{1} {0}", + "short": "{1} {0}" + }, + "skeletons": { + "y": "y年", + "yM": "y/M", + "yMd": "y/M/d", + "yMdE": "y/M/d(E)", + "yMdEEEE": "y/M/dEEEE", + "yMM": "y/MM", + "yMMM": "y年M月", + "yMMMd": "y年M月d日", + "yMMMdE": "y年M月d日(E)", + "yMMMdEEEE": "y年M月d日EEEE", + "yMMMM": "y年M月", + "M": "M月", + "Md": "M/d", + "MdE": "M/d(E)", + "MdEEEE": "M/dEEEE", + "MMM": "M月", + "MMMd": "M月d日", + "MMMdE": "M月d日(E)", + "MMMdEEEE": "M月d日EEEE", + "MMMMd": "M月d日", + "d": "d日", + "dE": "d日(E)", + "dEEEE": "d日EEEE", + "E": "ccc", + "Ehm": "aK:mm (E)", + "Ehms": "aK:mm:ss (E)", + "EHm": "H:mm (E)", + "EHms": "H:mm:ss (E)", + "h": "aK時", + "hm": "aK:mm", + "hms": "aK:mm:ss", + "hmsv": "aK:mm:ss v", + "hmv": "aK:mm v", + "H": "H時", + "Hm": "H:mm", + "Hms": "H:mm:ss", + "Hmsv": "H:mm:ss v", + "Hmv": "H:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/ru.json b/provider/testdata/data/json/date_patterns/gregory@1/ru.json new file mode 100644 index 00000000000..7543d5a8a17 --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/ru.json @@ -0,0 +1,59 @@ +{ + "date": { + "full": "EEEE, d MMMM y 'г'.", + "long": "d MMMM y 'г'.", + "medium": "d MMM y 'г'.", + "short": "dd.MM.y" + }, + "time": { + "full": "HH:mm:ss zzzz", + "long": "HH:mm:ss z", + "medium": "HH:mm:ss", + "short": "HH:mm" + }, + "datetime": { + "length_patterns": { + "full": "{1}, {0}", + "long": "{1}, {0}", + "medium": "{1}, {0}", + "short": "{1}, {0}" + }, + "skeletons": { + "y": "y", + "yM": "MM.y", + "yMd": "dd.MM.y", + "yMdE": "ccc, dd.MM.y г.", + "yMM": "MM.y", + "yMMM": "LLL y г.", + "yMMMd": "d MMM y г.", + "yMMMdE": "E, d MMM y г.", + "yMMMM": "LLLL y г.", + "M": "L", + "Md": "dd.MM", + "MdE": "E, dd.MM", + "MMdd": "dd.MM", + "MMM": "LLL", + "MMMd": "d MMM", + "MMMdE": "ccc, d MMM", + "MMMMd": "d MMMM", + "d": "d", + "dE": "ccc, d", + "E": "ccc", + "Ehm": "E h:mm a", + "Ehms": "E h:mm:ss a", + "EHm": "E HH:mm", + "EHms": "E HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmv": "h:mm a v", + "H": "HH", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/sr-Cyrl.json b/provider/testdata/data/json/date_patterns/gregory@1/sr-Cyrl.json new file mode 100644 index 00000000000..7f84d490a6c --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/sr-Cyrl.json @@ -0,0 +1,62 @@ +{ + "date": { + "full": "EEEE, dd. MMMM y.", + "long": "dd. MMMM y.", + "medium": "dd.MM.y.", + "short": "d.M.yy." + }, + "time": { + "full": "HH:mm:ss zzzz", + "long": "HH:mm:ss z", + "medium": "HH:mm:ss", + "short": "HH:mm" + }, + "datetime": { + "length_patterns": { + "full": "{1} {0}", + "long": "{1} {0}", + "medium": "{1} {0}", + "short": "{1} {0}" + }, + "skeletons": { + "y": "y.", + "yM": "M.y.", + "yMd": "d.M.y.", + "yMdE": "E, d.M.y.", + "yMM": "MM.y.", + "yMMdd": "dd.MM.y.", + "yMMM": "MMM y.", + "yMMMd": "d. MMM y.", + "yMMMdE": "E, d. MMM y.", + "yMMMM": "MMMM y.", + "M": "L", + "Md": "d.M.", + "MdE": "E, d.M.", + "MMdd": "dd.MM.", + "MMM": "LLL", + "MMMd": "d. MMM", + "MMMdE": "E d. MMM", + "MMMdd": "dd.MMM", + "MMMMd": "d. MMMM", + "MMMMdE": "E, d. MMMM", + "d": "d", + "dE": "E d.", + "E": "E", + "Ehm": "E h:mm a", + "Ehms": "E h:mm:ss a", + "EHm": "E HH:mm", + "EHms": "E HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmv": "h:mm a v", + "H": "HH", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/sr-Latn.json b/provider/testdata/data/json/date_patterns/gregory@1/sr-Latn.json new file mode 100644 index 00000000000..7f84d490a6c --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/sr-Latn.json @@ -0,0 +1,62 @@ +{ + "date": { + "full": "EEEE, dd. MMMM y.", + "long": "dd. MMMM y.", + "medium": "dd.MM.y.", + "short": "d.M.yy." + }, + "time": { + "full": "HH:mm:ss zzzz", + "long": "HH:mm:ss z", + "medium": "HH:mm:ss", + "short": "HH:mm" + }, + "datetime": { + "length_patterns": { + "full": "{1} {0}", + "long": "{1} {0}", + "medium": "{1} {0}", + "short": "{1} {0}" + }, + "skeletons": { + "y": "y.", + "yM": "M.y.", + "yMd": "d.M.y.", + "yMdE": "E, d.M.y.", + "yMM": "MM.y.", + "yMMdd": "dd.MM.y.", + "yMMM": "MMM y.", + "yMMMd": "d. MMM y.", + "yMMMdE": "E, d. MMM y.", + "yMMMM": "MMMM y.", + "M": "L", + "Md": "d.M.", + "MdE": "E, d.M.", + "MMdd": "dd.MM.", + "MMM": "LLL", + "MMMd": "d. MMM", + "MMMdE": "E d. MMM", + "MMMdd": "dd.MMM", + "MMMMd": "d. MMMM", + "MMMMdE": "E, d. MMMM", + "d": "d", + "dE": "E d.", + "E": "E", + "Ehm": "E h:mm a", + "Ehms": "E h:mm:ss a", + "EHm": "E HH:mm", + "EHms": "E HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmv": "h:mm a v", + "H": "HH", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/sr.json b/provider/testdata/data/json/date_patterns/gregory@1/sr.json new file mode 100644 index 00000000000..7f84d490a6c --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/sr.json @@ -0,0 +1,62 @@ +{ + "date": { + "full": "EEEE, dd. MMMM y.", + "long": "dd. MMMM y.", + "medium": "dd.MM.y.", + "short": "d.M.yy." + }, + "time": { + "full": "HH:mm:ss zzzz", + "long": "HH:mm:ss z", + "medium": "HH:mm:ss", + "short": "HH:mm" + }, + "datetime": { + "length_patterns": { + "full": "{1} {0}", + "long": "{1} {0}", + "medium": "{1} {0}", + "short": "{1} {0}" + }, + "skeletons": { + "y": "y.", + "yM": "M.y.", + "yMd": "d.M.y.", + "yMdE": "E, d.M.y.", + "yMM": "MM.y.", + "yMMdd": "dd.MM.y.", + "yMMM": "MMM y.", + "yMMMd": "d. MMM y.", + "yMMMdE": "E, d. MMM y.", + "yMMMM": "MMMM y.", + "M": "L", + "Md": "d.M.", + "MdE": "E, d.M.", + "MMdd": "dd.MM.", + "MMM": "LLL", + "MMMd": "d. MMM", + "MMMdE": "E d. MMM", + "MMMdd": "dd.MMM", + "MMMMd": "d. MMMM", + "MMMMdE": "E, d. MMMM", + "d": "d", + "dE": "E d.", + "E": "E", + "Ehm": "E h:mm a", + "Ehms": "E h:mm:ss a", + "EHm": "E HH:mm", + "EHms": "E HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmv": "h:mm a v", + "H": "HH", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/th.json b/provider/testdata/data/json/date_patterns/gregory@1/th.json new file mode 100644 index 00000000000..1fb3e6a036b --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/th.json @@ -0,0 +1,65 @@ +{ + "date": { + "full": "EEEEที่ d MMMM G y", + "long": "d MMMM G y", + "medium": "d MMM y", + "short": "d/M/yy" + }, + "time": { + "full": "H นาฬิกา mm นาที ss วินาที zzzz", + "long": "H นาฬิกา mm นาที ss วินาที z", + "medium": "HH:mm:ss", + "short": "HH:mm" + }, + "datetime": { + "length_patterns": { + "full": "{1} {0}", + "long": "{1} {0}", + "medium": "{1} {0}", + "short": "{1} {0}" + }, + "skeletons": { + "y": "y", + "yM": "M/y", + "yMd": "d/M/y", + "yMdE": "E d/M/y", + "yMMM": "MMM y", + "yMMMd": "d MMM y", + "yMMMdE": "E d MMM y", + "yMMMdEEEE": "EEEEที่ d MMM y", + "yMMMM": "MMMM 'G' y", + "yMMMMd": "d MMMM 'G' y", + "yMMMMdE": "E d MMMM 'G' y", + "yMMMMdEEEE": "EEEEที่ d MMMM 'G' y", + "M": "L", + "Md": "d/M", + "MdE": "E d/M", + "MMM": "LLL", + "MMMd": "d MMM", + "MMMdE": "E d MMM", + "MMMdEEEE": "EEEEที่ d MMM", + "MMMMd": "d MMMM", + "MMMMdE": "E d MMMM", + "MMMMdEEEE": "EEEEที่ d MMMM", + "d": "d", + "dE": "E d", + "E": "ccc", + "Ehm": "E h:mm a", + "Ehms": "E h:mm:ss a", + "EHm": "E HH:mm น.", + "EHms": "E HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmv": "h:mm น. a v", + "H": "HH", + "Hm": "HH:mm น.", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss", + "mmss": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/tr.json b/provider/testdata/data/json/date_patterns/gregory@1/tr.json new file mode 100644 index 00000000000..cced46a3ccb --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/tr.json @@ -0,0 +1,60 @@ +{ + "date": { + "full": "d MMMM y EEEE", + "long": "d MMMM y", + "medium": "d MMM y", + "short": "d.MM.y" + }, + "time": { + "full": "HH:mm:ss zzzz", + "long": "HH:mm:ss z", + "medium": "HH:mm:ss", + "short": "HH:mm" + }, + "datetime": { + "length_patterns": { + "full": "{1} {0}", + "long": "{1} {0}", + "medium": "{1} {0}", + "short": "{1} {0}" + }, + "skeletons": { + "y": "y", + "yM": "MM/y", + "yMd": "dd.MM.y", + "yMdE": "d.M.y E", + "yMM": "MM.y", + "yMMM": "MMM y", + "yMMMd": "d MMM y", + "yMMMdE": "d MMM y E", + "yMMMM": "MMMM y", + "M": "L", + "Md": "d/M", + "MdE": "d/MM E", + "MMM": "LLL", + "MMMd": "d MMM", + "MMMdE": "d MMMM E", + "MMMMd": "d MMMM", + "MMMMdE": "d MMMM E", + "d": "d", + "dE": "d E", + "E": "ccc", + "Ehm": "E a h:mm", + "Ehms": "E a h:mm:ss", + "EHm": "E HH:mm", + "EHms": "E HH:mm:ss", + "h": "a h", + "hm": "a h:mm", + "hms": "a h:mm:ss", + "hmsv": "a h:mm:ss v", + "hmv": "a h:mm v", + "H": "HH", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss", + "mmss": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_patterns/gregory@1/und.json b/provider/testdata/data/json/date_patterns/gregory@1/und.json new file mode 100644 index 00000000000..aa8a8d2349d --- /dev/null +++ b/provider/testdata/data/json/date_patterns/gregory@1/und.json @@ -0,0 +1,57 @@ +{ + "date": { + "full": "y MMMM d, EEEE", + "long": "y MMMM d", + "medium": "y MMM d", + "short": "y-MM-dd" + }, + "time": { + "full": "HH:mm:ss zzzz", + "long": "HH:mm:ss z", + "medium": "HH:mm:ss", + "short": "HH:mm" + }, + "datetime": { + "length_patterns": { + "full": "{1} {0}", + "long": "{1} {0}", + "medium": "{1} {0}", + "short": "{1} {0}" + }, + "skeletons": { + "y": "y", + "yM": "y-MM", + "yMd": "y-MM-dd", + "yMdE": "y-MM-dd, E", + "yMMM": "y MMM", + "yMMMd": "y MMM d", + "yMMMdE": "y MMM d, E", + "yMMMM": "y MMMM", + "M": "L", + "Md": "MM-dd", + "MdE": "MM-dd, E", + "MMM": "LLL", + "MMMd": "MMM d", + "MMMdE": "MMM d, E", + "MMMMd": "MMMM d", + "d": "d", + "dE": "d, E", + "E": "ccc", + "Ehm": "E h:mm a", + "Ehms": "E h:mm:ss a", + "EHm": "E HH:mm", + "EHms": "E HH:mm:ss", + "h": "h a", + "hm": "h:mm a", + "hms": "h:mm:ss a", + "hmsv": "h:mm:ss a v", + "hmv": "h:mm a v", + "H": "HH", + "Hm": "HH:mm", + "Hms": "HH:mm:ss", + "Hmsv": "HH:mm:ss v", + "Hmv": "HH:mm v", + "ms": "mm:ss" + } + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/ar-EG.json b/provider/testdata/data/json/date_symbols/gregory@1/ar-EG.json new file mode 100644 index 00000000000..bb62c34d509 --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/ar-EG.json @@ -0,0 +1,125 @@ +{ + "months": { + "format": { + "abbreviated": [ + "يناير", + "فبراير", + "مارس", + "أبريل", + "مايو", + "يونيو", + "يوليو", + "أغسطس", + "سبتمبر", + "أكتوبر", + "نوفمبر", + "ديسمبر" + ], + "narrow": [ + "ي", + "ف", + "م", + "أ", + "و", + "ن", + "ل", + "غ", + "س", + "ك", + "ب", + "د" + ], + "short": null, + "wide": [ + "يناير", + "فبراير", + "مارس", + "أبريل", + "مايو", + "يونيو", + "يوليو", + "أغسطس", + "سبتمبر", + "أكتوبر", + "نوفمبر", + "ديسمبر" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "الأحد", + "الاثنين", + "الثلاثاء", + "الأربعاء", + "الخميس", + "الجمعة", + "السبت" + ], + "narrow": [ + "ح", + "ن", + "ث", + "ر", + "خ", + "ج", + "س" + ], + "short": [ + "أحد", + "إثنين", + "ثلاثاء", + "أربعاء", + "خميس", + "جمعة", + "سبت" + ], + "wide": [ + "الأحد", + "الاثنين", + "الثلاثاء", + "الأربعاء", + "الخميس", + "الجمعة", + "السبت" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "ص", + "pm": "م", + "noon": null, + "midnight": null + }, + "narrow": { + "am": "ص", + "pm": "م", + "noon": null, + "midnight": null + }, + "short": null, + "wide": { + "am": "ص", + "pm": "م", + "noon": null, + "midnight": null + } + }, + "stand_alone": { + "abbreviated": null, + "narrow": null, + "short": null, + "wide": { + "am": "صباحًا", + "pm": "مساءً", + "noon": null, + "midnight": null + } + } + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/ar.json b/provider/testdata/data/json/date_symbols/gregory@1/ar.json new file mode 100644 index 00000000000..bb62c34d509 --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/ar.json @@ -0,0 +1,125 @@ +{ + "months": { + "format": { + "abbreviated": [ + "يناير", + "فبراير", + "مارس", + "أبريل", + "مايو", + "يونيو", + "يوليو", + "أغسطس", + "سبتمبر", + "أكتوبر", + "نوفمبر", + "ديسمبر" + ], + "narrow": [ + "ي", + "ف", + "م", + "أ", + "و", + "ن", + "ل", + "غ", + "س", + "ك", + "ب", + "د" + ], + "short": null, + "wide": [ + "يناير", + "فبراير", + "مارس", + "أبريل", + "مايو", + "يونيو", + "يوليو", + "أغسطس", + "سبتمبر", + "أكتوبر", + "نوفمبر", + "ديسمبر" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "الأحد", + "الاثنين", + "الثلاثاء", + "الأربعاء", + "الخميس", + "الجمعة", + "السبت" + ], + "narrow": [ + "ح", + "ن", + "ث", + "ر", + "خ", + "ج", + "س" + ], + "short": [ + "أحد", + "إثنين", + "ثلاثاء", + "أربعاء", + "خميس", + "جمعة", + "سبت" + ], + "wide": [ + "الأحد", + "الاثنين", + "الثلاثاء", + "الأربعاء", + "الخميس", + "الجمعة", + "السبت" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "ص", + "pm": "م", + "noon": null, + "midnight": null + }, + "narrow": { + "am": "ص", + "pm": "م", + "noon": null, + "midnight": null + }, + "short": null, + "wide": { + "am": "ص", + "pm": "م", + "noon": null, + "midnight": null + } + }, + "stand_alone": { + "abbreviated": null, + "narrow": null, + "short": null, + "wide": { + "am": "صباحًا", + "pm": "مساءً", + "noon": null, + "midnight": null + } + } + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/bn.json b/provider/testdata/data/json/date_symbols/gregory@1/bn.json new file mode 100644 index 00000000000..0f1485617c1 --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/bn.json @@ -0,0 +1,133 @@ +{ + "months": { + "format": { + "abbreviated": [ + "জানু", + "ফেব", + "মার্চ", + "এপ্রিল", + "মে", + "জুন", + "জুলাই", + "আগস্ট", + "সেপ্টেম্বর", + "অক্টোবর", + "নভেম্বর", + "ডিসেম্বর" + ], + "narrow": [ + "জা", + "ফে", + "মা", + "এ", + "মে", + "জুন", + "জু", + "আ", + "সে", + "অ", + "ন", + "ডি" + ], + "short": null, + "wide": [ + "জানুয়ারী", + "ফেব্রুয়ারী", + "মার্চ", + "এপ্রিল", + "মে", + "জুন", + "জুলাই", + "আগস্ট", + "সেপ্টেম্বর", + "অক্টোবর", + "নভেম্বর", + "ডিসেম্বর" + ] + }, + "stand_alone": { + "abbreviated": [ + "জানুয়ারী", + "ফেব্রুয়ারী", + "মার্চ", + "এপ্রিল", + "মে", + "জুন", + "জুলাই", + "আগস্ট", + "সেপ্টেম্বর", + "অক্টোবর", + "নভেম্বর", + "ডিসেম্বর" + ], + "narrow": null, + "short": null, + "wide": null + } + }, + "weekdays": { + "format": { + "abbreviated": [ + "রবি", + "সোম", + "মঙ্গল", + "বুধ", + "বৃহস্পতি", + "শুক্র", + "শনি" + ], + "narrow": [ + "র", + "সো", + "ম", + "বু", + "বৃ", + "শু", + "শ" + ], + "short": [ + "রঃ", + "সোঃ", + "মঃ", + "বুঃ", + "বৃঃ", + "শুঃ", + "শনি" + ], + "wide": [ + "রবিবার", + "সোমবার", + "মঙ্গলবার", + "বুধবার", + "বৃহস্পতিবার", + "শুক্রবার", + "শনিবার" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "AM", + "pm": "PM", + "noon": null, + "midnight": null + }, + "narrow": { + "am": "AM", + "pm": "PM", + "noon": null, + "midnight": null + }, + "short": null, + "wide": { + "am": "AM", + "pm": "PM", + "noon": null, + "midnight": null + } + }, + "stand_alone": null + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/ccp.json b/provider/testdata/data/json/date_symbols/gregory@1/ccp.json new file mode 100644 index 00000000000..0f6f7a3e80d --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/ccp.json @@ -0,0 +1,146 @@ +{ + "months": { + "format": { + "abbreviated": [ + "𑄎𑄚𑄪", + "𑄜𑄬𑄛𑄴", + "𑄟𑄢𑄴𑄌𑄧", + "𑄃𑄬𑄛𑄳𑄢𑄨𑄣𑄴", + "𑄟𑄬", + "𑄎𑄪𑄚𑄴", + "𑄎𑄪𑄣𑄭", + "𑄃𑄉𑄧𑄌𑄴𑄑𑄴", + "𑄥𑄬𑄛𑄴𑄑𑄬𑄟𑄴𑄝𑄧𑄢𑄴", + "𑄃𑄧𑄇𑄴𑄑𑄮𑄝𑄧𑄢𑄴", + "𑄚𑄧𑄞𑄬𑄟𑄴𑄝𑄧𑄢𑄴", + "𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄢𑄴" + ], + "narrow": [ + "𑄎", + "𑄜𑄬", + "𑄟", + "𑄃𑄬", + "𑄟𑄬", + "𑄎𑄪𑄚𑄴", + "𑄎𑄪", + "𑄃", + "𑄥𑄬", + "𑄃𑄧", + "𑄚𑄧", + "𑄓𑄨" + ], + "short": null, + "wide": [ + "𑄎𑄚𑄪𑄠𑄢𑄨", + "𑄜𑄬𑄛𑄴𑄝𑄳𑄢𑄪𑄠𑄢𑄨", + "𑄟𑄢𑄴𑄌𑄧", + "𑄃𑄬𑄛𑄳𑄢𑄨𑄣𑄴", + "𑄟𑄬", + "𑄎𑄪𑄚𑄴", + "𑄎𑄪𑄣𑄭", + "𑄃𑄉𑄧𑄌𑄴𑄑𑄴", + "𑄥𑄬𑄛𑄴𑄑𑄬𑄟𑄴𑄝𑄧𑄢𑄴", + "𑄃𑄧𑄇𑄴𑄑𑄬𑄝𑄧𑄢𑄴", + "𑄚𑄧𑄞𑄬𑄟𑄴𑄝𑄧𑄢𑄴", + "𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄧𑄢𑄴" + ] + }, + "stand_alone": { + "abbreviated": [ + "𑄎𑄚𑄪𑄠𑄢𑄨", + "𑄜𑄬𑄛𑄴𑄝𑄳𑄢𑄪𑄠𑄢𑄨", + "𑄟𑄢𑄴𑄌𑄧", + "𑄃𑄬𑄛𑄳𑄢𑄨𑄣𑄴", + "𑄟𑄬", + "𑄎𑄪𑄚𑄴", + "𑄎𑄪𑄣𑄭", + "𑄃𑄉𑄧𑄌𑄴𑄑𑄴", + "𑄥𑄬𑄛𑄴𑄑𑄬𑄟𑄴𑄝𑄧𑄢𑄴", + "𑄃𑄧𑄇𑄴𑄑𑄮𑄝𑄧𑄢𑄴", + "𑄚𑄧𑄞𑄬𑄟𑄴𑄝𑄧𑄢𑄴", + "𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄧𑄢𑄴" + ], + "narrow": null, + "short": null, + "wide": [ + "𑄎𑄚𑄪𑄠𑄢𑄨", + "𑄜𑄬𑄛𑄴𑄝𑄳𑄢𑄪𑄠𑄢𑄨", + "𑄟𑄢𑄴𑄌𑄧", + "𑄃𑄬𑄛𑄳𑄢𑄨𑄣𑄴", + "𑄟𑄬", + "𑄎𑄪𑄚𑄴", + "𑄎𑄪𑄣𑄭", + "𑄃𑄉𑄧𑄌𑄴𑄑𑄴", + "𑄥𑄬𑄛𑄴𑄑𑄬𑄟𑄴𑄝𑄧𑄢𑄴", + "𑄃𑄧𑄇𑄴𑄑𑄮𑄝𑄧𑄢𑄴", + "𑄚𑄧𑄞𑄬𑄟𑄴𑄝𑄧𑄢𑄴", + "𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄧𑄢𑄴" + ] + } + }, + "weekdays": { + "format": { + "abbreviated": [ + "𑄢𑄧𑄝𑄨", + "𑄥𑄧𑄟𑄴", + "𑄟𑄧𑄁𑄉𑄧𑄣𑄴", + "𑄝𑄪𑄖𑄴", + "𑄝𑄳𑄢𑄨𑄥𑄪𑄛𑄴", + "𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴", + "𑄥𑄧𑄚𑄨" + ], + "narrow": [ + "𑄢𑄧", + "𑄥𑄧", + "𑄟𑄧", + "𑄝𑄪", + "𑄝𑄳𑄢𑄨", + "𑄥𑄪", + "𑄥𑄧" + ], + "short": [ + "𑄢𑄧𑄝𑄨", + "𑄥𑄧𑄟𑄴", + "𑄟𑄧𑄁𑄉𑄧𑄣𑄴", + "𑄝𑄪𑄖𑄴", + "𑄝𑄳𑄢𑄨𑄥𑄪𑄛𑄴", + "𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴", + "𑄥𑄧𑄚𑄨" + ], + "wide": [ + "𑄢𑄧𑄝𑄨𑄝𑄢𑄴", + "𑄥𑄧𑄟𑄴𑄝𑄢𑄴", + "𑄟𑄧𑄁𑄉𑄧𑄣𑄴𑄝𑄢𑄴", + "𑄝𑄪𑄖𑄴𑄝𑄢𑄴", + "𑄝𑄳𑄢𑄨𑄥𑄪𑄛𑄴𑄝𑄢𑄴", + "𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴𑄝𑄢𑄴", + "𑄥𑄧𑄚𑄨𑄝𑄢𑄴" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "AM", + "pm": "PM", + "noon": null, + "midnight": null + }, + "narrow": { + "am": "AM", + "pm": "PM", + "noon": null, + "midnight": null + }, + "short": null, + "wide": { + "am": "AM", + "pm": "PM", + "noon": null, + "midnight": null + } + }, + "stand_alone": null + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/en-001.json b/provider/testdata/data/json/date_symbols/gregory@1/en-001.json new file mode 100644 index 00000000000..422eac07b34 --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/en-001.json @@ -0,0 +1,125 @@ +{ + "months": { + "format": { + "abbreviated": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "narrow": [ + "J", + "F", + "M", + "A", + "M", + "J", + "J", + "A", + "S", + "O", + "N", + "D" + ], + "short": null, + "wide": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "narrow": [ + "S", + "M", + "T", + "W", + "T", + "F", + "S" + ], + "short": [ + "Su", + "Mo", + "Tu", + "We", + "Th", + "Fr", + "Sa" + ], + "wide": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "am", + "pm": "pm", + "noon": "noon", + "midnight": "midnight" + }, + "narrow": { + "am": "a", + "pm": "p", + "noon": "n", + "midnight": "mi" + }, + "short": null, + "wide": { + "am": "am", + "pm": "pm", + "noon": "noon", + "midnight": "midnight" + } + }, + "stand_alone": { + "abbreviated": null, + "narrow": { + "am": "am", + "pm": "pm", + "noon": "noon", + "midnight": "midnight" + }, + "short": null, + "wide": null + } + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/en-ZA.json b/provider/testdata/data/json/date_symbols/gregory@1/en-ZA.json new file mode 100644 index 00000000000..422eac07b34 --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/en-ZA.json @@ -0,0 +1,125 @@ +{ + "months": { + "format": { + "abbreviated": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "narrow": [ + "J", + "F", + "M", + "A", + "M", + "J", + "J", + "A", + "S", + "O", + "N", + "D" + ], + "short": null, + "wide": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "narrow": [ + "S", + "M", + "T", + "W", + "T", + "F", + "S" + ], + "short": [ + "Su", + "Mo", + "Tu", + "We", + "Th", + "Fr", + "Sa" + ], + "wide": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "am", + "pm": "pm", + "noon": "noon", + "midnight": "midnight" + }, + "narrow": { + "am": "a", + "pm": "p", + "noon": "n", + "midnight": "mi" + }, + "short": null, + "wide": { + "am": "am", + "pm": "pm", + "noon": "noon", + "midnight": "midnight" + } + }, + "stand_alone": { + "abbreviated": null, + "narrow": { + "am": "am", + "pm": "pm", + "noon": "noon", + "midnight": "midnight" + }, + "short": null, + "wide": null + } + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/en.json b/provider/testdata/data/json/date_symbols/gregory@1/en.json new file mode 100644 index 00000000000..09c4c568d05 --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/en.json @@ -0,0 +1,125 @@ +{ + "months": { + "format": { + "abbreviated": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "narrow": [ + "J", + "F", + "M", + "A", + "M", + "J", + "J", + "A", + "S", + "O", + "N", + "D" + ], + "short": null, + "wide": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "narrow": [ + "S", + "M", + "T", + "W", + "T", + "F", + "S" + ], + "short": [ + "Su", + "Mo", + "Tu", + "We", + "Th", + "Fr", + "Sa" + ], + "wide": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "AM", + "pm": "PM", + "noon": "noon", + "midnight": "midnight" + }, + "narrow": { + "am": "a", + "pm": "p", + "noon": "n", + "midnight": "mi" + }, + "short": null, + "wide": { + "am": "AM", + "pm": "PM", + "noon": "noon", + "midnight": "midnight" + } + }, + "stand_alone": { + "abbreviated": null, + "narrow": { + "am": "AM", + "pm": "PM", + "noon": "noon", + "midnight": "midnight" + }, + "short": null, + "wide": null + } + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/es-AR.json b/provider/testdata/data/json/date_symbols/gregory@1/es-AR.json new file mode 100644 index 00000000000..b615044b88d --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/es-AR.json @@ -0,0 +1,138 @@ +{ + "months": { + "format": { + "abbreviated": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sep.", + "oct.", + "nov.", + "dic." + ], + "narrow": [ + "E", + "F", + "M", + "A", + "M", + "J", + "J", + "A", + "S", + "O", + "N", + "D" + ], + "short": null, + "wide": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "dom", + "lun", + "mar", + "mié", + "jue", + "vie", + "sáb" + ], + "narrow": [ + "D", + "L", + "M", + "M", + "J", + "V", + "S" + ], + "short": [ + "DO", + "LU", + "MA", + "MI", + "JU", + "VI", + "SA" + ], + "wide": [ + "domingo", + "lunes", + "martes", + "miércoles", + "jueves", + "viernes", + "sábado" + ] + }, + "stand_alone": { + "abbreviated": [ + "dom.", + "lun.", + "mar.", + "mié.", + "jue.", + "vie.", + "sáb." + ], + "narrow": null, + "short": null, + "wide": null + } + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "a. m.", + "pm": "p. m.", + "noon": "mediodía", + "midnight": null + }, + "narrow": { + "am": "a. m.", + "pm": "p. m.", + "noon": "del mediodía", + "midnight": null + }, + "short": null, + "wide": { + "am": "a. m.", + "pm": "p. m.", + "noon": "mediodía", + "midnight": null + } + }, + "stand_alone": { + "abbreviated": null, + "narrow": { + "am": "a. m.", + "pm": "p. m.", + "noon": "m.", + "midnight": null + }, + "short": null, + "wide": null + } + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/es.json b/provider/testdata/data/json/date_symbols/gregory@1/es.json new file mode 100644 index 00000000000..f1ad97c579c --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/es.json @@ -0,0 +1,135 @@ +{ + "months": { + "format": { + "abbreviated": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sept", + "oct", + "nov", + "dic" + ], + "narrow": [ + "E", + "F", + "M", + "A", + "M", + "J", + "J", + "A", + "S", + "O", + "N", + "D" + ], + "short": null, + "wide": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "dom", + "lun", + "mar", + "mié", + "jue", + "vie", + "sáb" + ], + "narrow": [ + "D", + "L", + "M", + "X", + "J", + "V", + "S" + ], + "short": [ + "DO", + "LU", + "MA", + "MI", + "JU", + "VI", + "SA" + ], + "wide": [ + "domingo", + "lunes", + "martes", + "miércoles", + "jueves", + "viernes", + "sábado" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "a. m.", + "pm": "p. m.", + "noon": "del mediodía", + "midnight": null + }, + "narrow": { + "am": "a. m.", + "pm": "p. m.", + "noon": "del mediodía", + "midnight": null + }, + "short": null, + "wide": { + "am": "a. m.", + "pm": "p. m.", + "noon": "del mediodía", + "midnight": null + } + }, + "stand_alone": { + "abbreviated": { + "am": "a. m.", + "pm": "p. m.", + "noon": "mediodía", + "midnight": null + }, + "narrow": { + "am": "a. m.", + "pm": "p. m.", + "noon": "mediodía", + "midnight": null + }, + "short": null, + "wide": { + "am": "a. m.", + "pm": "p. m.", + "noon": "mediodía", + "midnight": null + } + } + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/fr.json b/provider/testdata/data/json/date_symbols/gregory@1/fr.json new file mode 100644 index 00000000000..fa897b78a33 --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/fr.json @@ -0,0 +1,115 @@ +{ + "months": { + "format": { + "abbreviated": [ + "janv.", + "févr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "août", + "sept.", + "oct.", + "nov.", + "déc." + ], + "narrow": [ + "J", + "F", + "M", + "A", + "M", + "J", + "J", + "A", + "S", + "O", + "N", + "D" + ], + "short": null, + "wide": [ + "janvier", + "février", + "mars", + "avril", + "mai", + "juin", + "juillet", + "août", + "septembre", + "octobre", + "novembre", + "décembre" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "narrow": [ + "D", + "L", + "M", + "M", + "J", + "V", + "S" + ], + "short": [ + "di", + "lu", + "ma", + "me", + "je", + "ve", + "sa" + ], + "wide": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "AM", + "pm": "PM", + "noon": "midi", + "midnight": "minuit" + }, + "narrow": { + "am": "AM", + "pm": "PM", + "noon": "midi", + "midnight": "minuit" + }, + "short": null, + "wide": { + "am": "AM", + "pm": "PM", + "noon": "midi", + "midnight": "minuit" + } + }, + "stand_alone": null + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/ja.json b/provider/testdata/data/json/date_symbols/gregory@1/ja.json new file mode 100644 index 00000000000..b9b1e6754fd --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/ja.json @@ -0,0 +1,115 @@ +{ + "months": { + "format": { + "abbreviated": [ + "1月", + "2月", + "3月", + "4月", + "5月", + "6月", + "7月", + "8月", + "9月", + "10月", + "11月", + "12月" + ], + "narrow": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12" + ], + "short": null, + "wide": [ + "1月", + "2月", + "3月", + "4月", + "5月", + "6月", + "7月", + "8月", + "9月", + "10月", + "11月", + "12月" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "日", + "月", + "火", + "水", + "木", + "金", + "土" + ], + "narrow": [ + "日", + "月", + "火", + "水", + "木", + "金", + "土" + ], + "short": [ + "日", + "月", + "火", + "水", + "木", + "金", + "土" + ], + "wide": [ + "日曜日", + "月曜日", + "火曜日", + "水曜日", + "木曜日", + "金曜日", + "土曜日" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "午前", + "pm": "午後", + "noon": "正午", + "midnight": "真夜中" + }, + "narrow": { + "am": "午前", + "pm": "午後", + "noon": "正午", + "midnight": "真夜中" + }, + "short": null, + "wide": { + "am": "午前", + "pm": "午後", + "noon": "正午", + "midnight": "真夜中" + } + }, + "stand_alone": null + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/ru.json b/provider/testdata/data/json/date_symbols/gregory@1/ru.json new file mode 100644 index 00000000000..9db3b0f8c66 --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/ru.json @@ -0,0 +1,159 @@ +{ + "months": { + "format": { + "abbreviated": [ + "янв.", + "февр.", + "мар.", + "апр.", + "мая", + "июн.", + "июл.", + "авг.", + "сент.", + "окт.", + "нояб.", + "дек." + ], + "narrow": [ + "Я", + "Ф", + "М", + "А", + "М", + "И", + "И", + "А", + "С", + "О", + "Н", + "Д" + ], + "short": null, + "wide": [ + "января", + "февраля", + "марта", + "апреля", + "мая", + "июня", + "июля", + "августа", + "сентября", + "октября", + "ноября", + "декабря" + ] + }, + "stand_alone": { + "abbreviated": [ + "янв.", + "февр.", + "март", + "апр.", + "май", + "июнь", + "июль", + "авг.", + "сент.", + "окт.", + "нояб.", + "дек." + ], + "narrow": null, + "short": null, + "wide": [ + "январь", + "февраль", + "март", + "апрель", + "май", + "июнь", + "июль", + "август", + "сентябрь", + "октябрь", + "ноябрь", + "декабрь" + ] + } + }, + "weekdays": { + "format": { + "abbreviated": [ + "вс", + "пн", + "вт", + "ср", + "чт", + "пт", + "сб" + ], + "narrow": [ + "вс", + "пн", + "вт", + "ср", + "чт", + "пт", + "сб" + ], + "short": [ + "вс", + "пн", + "вт", + "ср", + "чт", + "пт", + "сб" + ], + "wide": [ + "воскресенье", + "понедельник", + "вторник", + "среда", + "четверг", + "пятница", + "суббота" + ] + }, + "stand_alone": { + "abbreviated": null, + "narrow": [ + "В", + "П", + "В", + "С", + "Ч", + "П", + "С" + ], + "short": null, + "wide": null + } + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "AM", + "pm": "PM", + "noon": "полд.", + "midnight": "полн." + }, + "narrow": { + "am": "AM", + "pm": "PM", + "noon": "полд.", + "midnight": "полн." + }, + "short": null, + "wide": { + "am": "AM", + "pm": "PM", + "noon": "полдень", + "midnight": "полночь" + } + }, + "stand_alone": null + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/sr-Cyrl.json b/provider/testdata/data/json/date_symbols/gregory@1/sr-Cyrl.json new file mode 100644 index 00000000000..cb5880d12a2 --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/sr-Cyrl.json @@ -0,0 +1,125 @@ +{ + "months": { + "format": { + "abbreviated": [ + "јан", + "феб", + "мар", + "апр", + "мај", + "јун", + "јул", + "авг", + "сеп", + "окт", + "нов", + "дец" + ], + "narrow": [ + "ј", + "ф", + "м", + "а", + "м", + "ј", + "ј", + "а", + "с", + "о", + "н", + "д" + ], + "short": null, + "wide": [ + "јануар", + "фебруар", + "март", + "април", + "мај", + "јун", + "јул", + "август", + "септембар", + "октобар", + "новембар", + "децембар" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "нед", + "пон", + "уто", + "сре", + "чет", + "пет", + "суб" + ], + "narrow": [ + "н", + "п", + "у", + "с", + "ч", + "п", + "с" + ], + "short": [ + "не", + "по", + "ут", + "ср", + "че", + "пе", + "су" + ], + "wide": [ + "недеља", + "понедељак", + "уторак", + "среда", + "четвртак", + "петак", + "субота" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "пре подне", + "pm": "по подне", + "noon": "подне", + "midnight": "поноћ" + }, + "narrow": { + "am": "a", + "pm": "p", + "noon": "подне", + "midnight": "поноћ" + }, + "short": null, + "wide": { + "am": "пре подне", + "pm": "по подне", + "noon": "подне", + "midnight": "поноћ" + } + }, + "stand_alone": { + "abbreviated": null, + "narrow": { + "am": "пре подне", + "pm": "по подне", + "noon": "подне", + "midnight": "поноћ" + }, + "short": null, + "wide": null + } + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/sr-Latn.json b/provider/testdata/data/json/date_symbols/gregory@1/sr-Latn.json new file mode 100644 index 00000000000..23925d371f8 --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/sr-Latn.json @@ -0,0 +1,125 @@ +{ + "months": { + "format": { + "abbreviated": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "avg", + "sep", + "okt", + "nov", + "dec" + ], + "narrow": [ + "j", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d" + ], + "short": null, + "wide": [ + "januar", + "februar", + "mart", + "april", + "maj", + "jun", + "jul", + "avgust", + "septembar", + "oktobar", + "novembar", + "decembar" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "ned", + "pon", + "uto", + "sre", + "čet", + "pet", + "sub" + ], + "narrow": [ + "n", + "p", + "u", + "s", + "č", + "p", + "s" + ], + "short": [ + "ne", + "po", + "ut", + "sr", + "če", + "pe", + "su" + ], + "wide": [ + "nedelja", + "ponedeljak", + "utorak", + "sreda", + "četvrtak", + "petak", + "subota" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "pre podne", + "pm": "po podne", + "noon": "podne", + "midnight": "ponoć" + }, + "narrow": { + "am": "a", + "pm": "p", + "noon": "podne", + "midnight": "ponoć" + }, + "short": null, + "wide": { + "am": "pre podne", + "pm": "po podne", + "noon": "podne", + "midnight": "ponoć" + } + }, + "stand_alone": { + "abbreviated": null, + "narrow": { + "am": "pre podne", + "pm": "po podne", + "noon": "podne", + "midnight": "ponoć" + }, + "short": null, + "wide": null + } + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/sr.json b/provider/testdata/data/json/date_symbols/gregory@1/sr.json new file mode 100644 index 00000000000..cb5880d12a2 --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/sr.json @@ -0,0 +1,125 @@ +{ + "months": { + "format": { + "abbreviated": [ + "јан", + "феб", + "мар", + "апр", + "мај", + "јун", + "јул", + "авг", + "сеп", + "окт", + "нов", + "дец" + ], + "narrow": [ + "ј", + "ф", + "м", + "а", + "м", + "ј", + "ј", + "а", + "с", + "о", + "н", + "д" + ], + "short": null, + "wide": [ + "јануар", + "фебруар", + "март", + "април", + "мај", + "јун", + "јул", + "август", + "септембар", + "октобар", + "новембар", + "децембар" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "нед", + "пон", + "уто", + "сре", + "чет", + "пет", + "суб" + ], + "narrow": [ + "н", + "п", + "у", + "с", + "ч", + "п", + "с" + ], + "short": [ + "не", + "по", + "ут", + "ср", + "че", + "пе", + "су" + ], + "wide": [ + "недеља", + "понедељак", + "уторак", + "среда", + "четвртак", + "петак", + "субота" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "пре подне", + "pm": "по подне", + "noon": "подне", + "midnight": "поноћ" + }, + "narrow": { + "am": "a", + "pm": "p", + "noon": "подне", + "midnight": "поноћ" + }, + "short": null, + "wide": { + "am": "пре подне", + "pm": "по подне", + "noon": "подне", + "midnight": "поноћ" + } + }, + "stand_alone": { + "abbreviated": null, + "narrow": { + "am": "пре подне", + "pm": "по подне", + "noon": "подне", + "midnight": "поноћ" + }, + "short": null, + "wide": null + } + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/th.json b/provider/testdata/data/json/date_symbols/gregory@1/th.json new file mode 100644 index 00000000000..6c96342fdb1 --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/th.json @@ -0,0 +1,125 @@ +{ + "months": { + "format": { + "abbreviated": [ + "ม.ค.", + "ก.พ.", + "มี.ค.", + "เม.ย.", + "พ.ค.", + "มิ.ย.", + "ก.ค.", + "ส.ค.", + "ก.ย.", + "ต.ค.", + "พ.ย.", + "ธ.ค." + ], + "narrow": [ + "ม.ค.", + "ก.พ.", + "มี.ค.", + "เม.ย.", + "พ.ค.", + "มิ.ย.", + "ก.ค.", + "ส.ค.", + "ก.ย.", + "ต.ค.", + "พ.ย.", + "ธ.ค." + ], + "short": null, + "wide": [ + "มกราคม", + "กุมภาพันธ์", + "มีนาคม", + "เมษายน", + "พฤษภาคม", + "มิถุนายน", + "กรกฎาคม", + "สิงหาคม", + "กันยายน", + "ตุลาคม", + "พฤศจิกายน", + "ธันวาคม" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "อา.", + "จ.", + "อ.", + "พ.", + "พฤ.", + "ศ.", + "ส." + ], + "narrow": [ + "อา", + "จ", + "อ", + "พ", + "พฤ", + "ศ", + "ส" + ], + "short": [ + "อา.", + "จ.", + "อ.", + "พ.", + "พฤ.", + "ศ.", + "ส." + ], + "wide": [ + "วันอาทิตย์", + "วันจันทร์", + "วันอังคาร", + "วันพุธ", + "วันพฤหัสบดี", + "วันศุกร์", + "วันเสาร์" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "ก่อนเที่ยง", + "pm": "หลังเที่ยง", + "noon": "เที่ยง", + "midnight": "เที่ยงคืน" + }, + "narrow": { + "am": "a", + "pm": "p", + "noon": "เที่ยง", + "midnight": "เที่ยงคืน" + }, + "short": null, + "wide": { + "am": "ก่อนเที่ยง", + "pm": "หลังเที่ยง", + "noon": "เที่ยง", + "midnight": "เที่ยงคืน" + } + }, + "stand_alone": { + "abbreviated": null, + "narrow": { + "am": "ก่อนเที่ยง", + "pm": "หลังเที่ยง", + "noon": "เที่ยง", + "midnight": "เที่ยงคืน" + }, + "short": null, + "wide": null + } + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/tr.json b/provider/testdata/data/json/date_symbols/gregory@1/tr.json new file mode 100644 index 00000000000..2e14d1dd80d --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/tr.json @@ -0,0 +1,125 @@ +{ + "months": { + "format": { + "abbreviated": [ + "Oca", + "Şub", + "Mar", + "Nis", + "May", + "Haz", + "Tem", + "Ağu", + "Eyl", + "Eki", + "Kas", + "Ara" + ], + "narrow": [ + "O", + "Ş", + "M", + "N", + "M", + "H", + "T", + "A", + "E", + "E", + "K", + "A" + ], + "short": null, + "wide": [ + "Ocak", + "Şubat", + "Mart", + "Nisan", + "Mayıs", + "Haziran", + "Temmuz", + "Ağustos", + "Eylül", + "Ekim", + "Kasım", + "Aralık" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "Paz", + "Pzt", + "Sal", + "Çar", + "Per", + "Cum", + "Cmt" + ], + "narrow": [ + "P", + "P", + "S", + "Ç", + "P", + "C", + "C" + ], + "short": [ + "Pa", + "Pt", + "Sa", + "Ça", + "Pe", + "Cu", + "Ct" + ], + "wide": [ + "Pazar", + "Pazartesi", + "Salı", + "Çarşamba", + "Perşembe", + "Cuma", + "Cumartesi" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "ÖÖ", + "pm": "ÖS", + "noon": "öğle", + "midnight": "gece yarısı" + }, + "narrow": { + "am": "öö", + "pm": "ös", + "noon": "ö", + "midnight": "gece" + }, + "short": null, + "wide": { + "am": "ÖÖ", + "pm": "ÖS", + "noon": "öğle", + "midnight": "gece yarısı" + } + }, + "stand_alone": { + "abbreviated": null, + "narrow": { + "am": "ÖÖ", + "pm": "ÖS", + "noon": "öğle", + "midnight": "gece yarısı" + }, + "short": null, + "wide": null + } + } +} diff --git a/provider/testdata/data/json/date_symbols/gregory@1/und.json b/provider/testdata/data/json/date_symbols/gregory@1/und.json new file mode 100644 index 00000000000..d551282ce19 --- /dev/null +++ b/provider/testdata/data/json/date_symbols/gregory@1/und.json @@ -0,0 +1,115 @@ +{ + "months": { + "format": { + "abbreviated": [ + "M01", + "M02", + "M03", + "M04", + "M05", + "M06", + "M07", + "M08", + "M09", + "M10", + "M11", + "M12" + ], + "narrow": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12" + ], + "short": null, + "wide": [ + "M01", + "M02", + "M03", + "M04", + "M05", + "M06", + "M07", + "M08", + "M09", + "M10", + "M11", + "M12" + ] + }, + "stand_alone": null + }, + "weekdays": { + "format": { + "abbreviated": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "narrow": [ + "S", + "M", + "T", + "W", + "T", + "F", + "S" + ], + "short": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "wide": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ] + }, + "stand_alone": null + }, + "day_periods": { + "format": { + "abbreviated": { + "am": "AM", + "pm": "PM", + "noon": null, + "midnight": null + }, + "narrow": { + "am": "AM", + "pm": "PM", + "noon": null, + "midnight": null + }, + "short": null, + "wide": { + "am": "AM", + "pm": "PM", + "noon": null, + "midnight": null + } + }, + "stand_alone": null + } +} diff --git a/provider/testdata/data/json/dates/gregory@1/ar-EG.json b/provider/testdata/data/json/dates/gregory@1/ar-EG.json deleted file mode 100644 index 661a69058f6..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/ar-EG.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "يناير", - "فبراير", - "مارس", - "أبريل", - "مايو", - "يونيو", - "يوليو", - "أغسطس", - "سبتمبر", - "أكتوبر", - "نوفمبر", - "ديسمبر" - ], - "narrow": [ - "ي", - "ف", - "م", - "أ", - "و", - "ن", - "ل", - "غ", - "س", - "ك", - "ب", - "د" - ], - "short": null, - "wide": [ - "يناير", - "فبراير", - "مارس", - "أبريل", - "مايو", - "يونيو", - "يوليو", - "أغسطس", - "سبتمبر", - "أكتوبر", - "نوفمبر", - "ديسمبر" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "الأحد", - "الاثنين", - "الثلاثاء", - "الأربعاء", - "الخميس", - "الجمعة", - "السبت" - ], - "narrow": [ - "ح", - "ن", - "ث", - "ر", - "خ", - "ج", - "س" - ], - "short": [ - "أحد", - "إثنين", - "ثلاثاء", - "أربعاء", - "خميس", - "جمعة", - "سبت" - ], - "wide": [ - "الأحد", - "الاثنين", - "الثلاثاء", - "الأربعاء", - "الخميس", - "الجمعة", - "السبت" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "ص", - "pm": "م", - "noon": null, - "midnight": null - }, - "narrow": { - "am": "ص", - "pm": "م", - "noon": null, - "midnight": null - }, - "short": null, - "wide": { - "am": "ص", - "pm": "م", - "noon": null, - "midnight": null - } - }, - "stand_alone": { - "abbreviated": null, - "narrow": null, - "short": null, - "wide": { - "am": "صباحًا", - "pm": "مساءً", - "noon": null, - "midnight": null - } - } - } - }, - "patterns": { - "date": { - "full": "EEEE، d MMMM y", - "long": "d MMMM y", - "medium": "dd‏/MM‏/y", - "short": "d‏/M‏/y" - }, - "time": { - "full": "h:mm:ss a zzzz", - "long": "h:mm:ss a z", - "medium": "h:mm:ss a", - "short": "h:mm a" - }, - "datetime": { - "length_patterns": { - "full": "{1} في {0}", - "long": "{1} في {0}", - "medium": "{1}, {0}", - "short": "{1}, {0}" - }, - "skeletons": { - "y": "y", - "yM": "M‏/y", - "yMd": "d‏/M‏/y", - "yMdE": "E، d/‏M/‏y", - "yMM": "MM‏/y", - "yMMM": "MMM y", - "yMMMd": "d MMM y", - "yMMMdE": "E، d MMM y", - "yMMMM": "MMMM y", - "M": "L", - "Md": "d/‏M", - "MdE": "E، d/‏M", - "MMdd": "dd‏/MM", - "MMM": "LLL", - "MMMd": "d MMM", - "MMMdE": "E، d MMM", - "MMMMd": "d MMMM", - "MMMMdE": "E، d MMMM", - "d": "d", - "dE": "E، d", - "E": "ccc", - "Ehm": "E h:mm a", - "Ehms": "E h:mm:ss a", - "EHm": "E HH:mm", - "EHms": "E HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmv": "h:mm a v", - "H": "HH", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/ar.json b/provider/testdata/data/json/dates/gregory@1/ar.json deleted file mode 100644 index 661a69058f6..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/ar.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "يناير", - "فبراير", - "مارس", - "أبريل", - "مايو", - "يونيو", - "يوليو", - "أغسطس", - "سبتمبر", - "أكتوبر", - "نوفمبر", - "ديسمبر" - ], - "narrow": [ - "ي", - "ف", - "م", - "أ", - "و", - "ن", - "ل", - "غ", - "س", - "ك", - "ب", - "د" - ], - "short": null, - "wide": [ - "يناير", - "فبراير", - "مارس", - "أبريل", - "مايو", - "يونيو", - "يوليو", - "أغسطس", - "سبتمبر", - "أكتوبر", - "نوفمبر", - "ديسمبر" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "الأحد", - "الاثنين", - "الثلاثاء", - "الأربعاء", - "الخميس", - "الجمعة", - "السبت" - ], - "narrow": [ - "ح", - "ن", - "ث", - "ر", - "خ", - "ج", - "س" - ], - "short": [ - "أحد", - "إثنين", - "ثلاثاء", - "أربعاء", - "خميس", - "جمعة", - "سبت" - ], - "wide": [ - "الأحد", - "الاثنين", - "الثلاثاء", - "الأربعاء", - "الخميس", - "الجمعة", - "السبت" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "ص", - "pm": "م", - "noon": null, - "midnight": null - }, - "narrow": { - "am": "ص", - "pm": "م", - "noon": null, - "midnight": null - }, - "short": null, - "wide": { - "am": "ص", - "pm": "م", - "noon": null, - "midnight": null - } - }, - "stand_alone": { - "abbreviated": null, - "narrow": null, - "short": null, - "wide": { - "am": "صباحًا", - "pm": "مساءً", - "noon": null, - "midnight": null - } - } - } - }, - "patterns": { - "date": { - "full": "EEEE، d MMMM y", - "long": "d MMMM y", - "medium": "dd‏/MM‏/y", - "short": "d‏/M‏/y" - }, - "time": { - "full": "h:mm:ss a zzzz", - "long": "h:mm:ss a z", - "medium": "h:mm:ss a", - "short": "h:mm a" - }, - "datetime": { - "length_patterns": { - "full": "{1} في {0}", - "long": "{1} في {0}", - "medium": "{1}, {0}", - "short": "{1}, {0}" - }, - "skeletons": { - "y": "y", - "yM": "M‏/y", - "yMd": "d‏/M‏/y", - "yMdE": "E، d/‏M/‏y", - "yMM": "MM‏/y", - "yMMM": "MMM y", - "yMMMd": "d MMM y", - "yMMMdE": "E، d MMM y", - "yMMMM": "MMMM y", - "M": "L", - "Md": "d/‏M", - "MdE": "E، d/‏M", - "MMdd": "dd‏/MM", - "MMM": "LLL", - "MMMd": "d MMM", - "MMMdE": "E، d MMM", - "MMMMd": "d MMMM", - "MMMMdE": "E، d MMMM", - "d": "d", - "dE": "E، d", - "E": "ccc", - "Ehm": "E h:mm a", - "Ehms": "E h:mm:ss a", - "EHm": "E HH:mm", - "EHms": "E HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmv": "h:mm a v", - "H": "HH", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/bn.json b/provider/testdata/data/json/dates/gregory@1/bn.json deleted file mode 100644 index 9c5925a1d66..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/bn.json +++ /dev/null @@ -1,195 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "জানু", - "ফেব", - "মার্চ", - "এপ্রিল", - "মে", - "জুন", - "জুলাই", - "আগস্ট", - "সেপ্টেম্বর", - "অক্টোবর", - "নভেম্বর", - "ডিসেম্বর" - ], - "narrow": [ - "জা", - "ফে", - "মা", - "এ", - "মে", - "জুন", - "জু", - "আ", - "সে", - "অ", - "ন", - "ডি" - ], - "short": null, - "wide": [ - "জানুয়ারী", - "ফেব্রুয়ারী", - "মার্চ", - "এপ্রিল", - "মে", - "জুন", - "জুলাই", - "আগস্ট", - "সেপ্টেম্বর", - "অক্টোবর", - "নভেম্বর", - "ডিসেম্বর" - ] - }, - "stand_alone": { - "abbreviated": [ - "জানুয়ারী", - "ফেব্রুয়ারী", - "মার্চ", - "এপ্রিল", - "মে", - "জুন", - "জুলাই", - "আগস্ট", - "সেপ্টেম্বর", - "অক্টোবর", - "নভেম্বর", - "ডিসেম্বর" - ], - "narrow": null, - "short": null, - "wide": null - } - }, - "weekdays": { - "format": { - "abbreviated": [ - "রবি", - "সোম", - "মঙ্গল", - "বুধ", - "বৃহস্পতি", - "শুক্র", - "শনি" - ], - "narrow": [ - "র", - "সো", - "ম", - "বু", - "বৃ", - "শু", - "শ" - ], - "short": [ - "রঃ", - "সোঃ", - "মঃ", - "বুঃ", - "বৃঃ", - "শুঃ", - "শনি" - ], - "wide": [ - "রবিবার", - "সোমবার", - "মঙ্গলবার", - "বুধবার", - "বৃহস্পতিবার", - "শুক্রবার", - "শনিবার" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "AM", - "pm": "PM", - "noon": null, - "midnight": null - }, - "narrow": { - "am": "AM", - "pm": "PM", - "noon": null, - "midnight": null - }, - "short": null, - "wide": { - "am": "AM", - "pm": "PM", - "noon": null, - "midnight": null - } - }, - "stand_alone": null - } - }, - "patterns": { - "date": { - "full": "EEEE, d MMMM, y", - "long": "d MMMM, y", - "medium": "d MMM, y", - "short": "d/M/yy" - }, - "time": { - "full": "h:mm:ss a zzzz", - "long": "h:mm:ss a z", - "medium": "h:mm:ss a", - "short": "h:mm a" - }, - "datetime": { - "length_patterns": { - "full": "{1} {0}", - "long": "{1} {0}", - "medium": "{1} {0}", - "short": "{1} {0}" - }, - "skeletons": { - "y": "y", - "yM": "M/y", - "yMd": "d/M/y", - "yMdE": "E, d/M/y", - "yMM": "MM-y", - "yMMM": "MMM y", - "yMMMd": "d MMM, y", - "yMMMdE": "E, d MMM, y", - "yMMMM": "MMMM y", - "M": "L", - "Md": "d/M", - "MdE": "E, d-M", - "MMdd": "dd-MM", - "MMM": "LLL", - "MMMd": "d MMM", - "MMMdE": "E d MMM", - "MMMMd": "d MMMM", - "MMMMdE": "E d MMMM", - "d": "d", - "dE": "d E", - "E": "ccc", - "Ehm": "E h:mm a", - "Ehms": "E h:mm:ss a", - "EHm": "E HH:mm", - "EHms": "E HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmv": "h:mm a v", - "H": "HH", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/ccp.json b/provider/testdata/data/json/dates/gregory@1/ccp.json deleted file mode 100644 index ee82ed21beb..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/ccp.json +++ /dev/null @@ -1,208 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "𑄎𑄚𑄪", - "𑄜𑄬𑄛𑄴", - "𑄟𑄢𑄴𑄌𑄧", - "𑄃𑄬𑄛𑄳𑄢𑄨𑄣𑄴", - "𑄟𑄬", - "𑄎𑄪𑄚𑄴", - "𑄎𑄪𑄣𑄭", - "𑄃𑄉𑄧𑄌𑄴𑄑𑄴", - "𑄥𑄬𑄛𑄴𑄑𑄬𑄟𑄴𑄝𑄧𑄢𑄴", - "𑄃𑄧𑄇𑄴𑄑𑄮𑄝𑄧𑄢𑄴", - "𑄚𑄧𑄞𑄬𑄟𑄴𑄝𑄧𑄢𑄴", - "𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄢𑄴" - ], - "narrow": [ - "𑄎", - "𑄜𑄬", - "𑄟", - "𑄃𑄬", - "𑄟𑄬", - "𑄎𑄪𑄚𑄴", - "𑄎𑄪", - "𑄃", - "𑄥𑄬", - "𑄃𑄧", - "𑄚𑄧", - "𑄓𑄨" - ], - "short": null, - "wide": [ - "𑄎𑄚𑄪𑄠𑄢𑄨", - "𑄜𑄬𑄛𑄴𑄝𑄳𑄢𑄪𑄠𑄢𑄨", - "𑄟𑄢𑄴𑄌𑄧", - "𑄃𑄬𑄛𑄳𑄢𑄨𑄣𑄴", - "𑄟𑄬", - "𑄎𑄪𑄚𑄴", - "𑄎𑄪𑄣𑄭", - "𑄃𑄉𑄧𑄌𑄴𑄑𑄴", - "𑄥𑄬𑄛𑄴𑄑𑄬𑄟𑄴𑄝𑄧𑄢𑄴", - "𑄃𑄧𑄇𑄴𑄑𑄬𑄝𑄧𑄢𑄴", - "𑄚𑄧𑄞𑄬𑄟𑄴𑄝𑄧𑄢𑄴", - "𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄧𑄢𑄴" - ] - }, - "stand_alone": { - "abbreviated": [ - "𑄎𑄚𑄪𑄠𑄢𑄨", - "𑄜𑄬𑄛𑄴𑄝𑄳𑄢𑄪𑄠𑄢𑄨", - "𑄟𑄢𑄴𑄌𑄧", - "𑄃𑄬𑄛𑄳𑄢𑄨𑄣𑄴", - "𑄟𑄬", - "𑄎𑄪𑄚𑄴", - "𑄎𑄪𑄣𑄭", - "𑄃𑄉𑄧𑄌𑄴𑄑𑄴", - "𑄥𑄬𑄛𑄴𑄑𑄬𑄟𑄴𑄝𑄧𑄢𑄴", - "𑄃𑄧𑄇𑄴𑄑𑄮𑄝𑄧𑄢𑄴", - "𑄚𑄧𑄞𑄬𑄟𑄴𑄝𑄧𑄢𑄴", - "𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄧𑄢𑄴" - ], - "narrow": null, - "short": null, - "wide": [ - "𑄎𑄚𑄪𑄠𑄢𑄨", - "𑄜𑄬𑄛𑄴𑄝𑄳𑄢𑄪𑄠𑄢𑄨", - "𑄟𑄢𑄴𑄌𑄧", - "𑄃𑄬𑄛𑄳𑄢𑄨𑄣𑄴", - "𑄟𑄬", - "𑄎𑄪𑄚𑄴", - "𑄎𑄪𑄣𑄭", - "𑄃𑄉𑄧𑄌𑄴𑄑𑄴", - "𑄥𑄬𑄛𑄴𑄑𑄬𑄟𑄴𑄝𑄧𑄢𑄴", - "𑄃𑄧𑄇𑄴𑄑𑄮𑄝𑄧𑄢𑄴", - "𑄚𑄧𑄞𑄬𑄟𑄴𑄝𑄧𑄢𑄴", - "𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄧𑄢𑄴" - ] - } - }, - "weekdays": { - "format": { - "abbreviated": [ - "𑄢𑄧𑄝𑄨", - "𑄥𑄧𑄟𑄴", - "𑄟𑄧𑄁𑄉𑄧𑄣𑄴", - "𑄝𑄪𑄖𑄴", - "𑄝𑄳𑄢𑄨𑄥𑄪𑄛𑄴", - "𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴", - "𑄥𑄧𑄚𑄨" - ], - "narrow": [ - "𑄢𑄧", - "𑄥𑄧", - "𑄟𑄧", - "𑄝𑄪", - "𑄝𑄳𑄢𑄨", - "𑄥𑄪", - "𑄥𑄧" - ], - "short": [ - "𑄢𑄧𑄝𑄨", - "𑄥𑄧𑄟𑄴", - "𑄟𑄧𑄁𑄉𑄧𑄣𑄴", - "𑄝𑄪𑄖𑄴", - "𑄝𑄳𑄢𑄨𑄥𑄪𑄛𑄴", - "𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴", - "𑄥𑄧𑄚𑄨" - ], - "wide": [ - "𑄢𑄧𑄝𑄨𑄝𑄢𑄴", - "𑄥𑄧𑄟𑄴𑄝𑄢𑄴", - "𑄟𑄧𑄁𑄉𑄧𑄣𑄴𑄝𑄢𑄴", - "𑄝𑄪𑄖𑄴𑄝𑄢𑄴", - "𑄝𑄳𑄢𑄨𑄥𑄪𑄛𑄴𑄝𑄢𑄴", - "𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴𑄝𑄢𑄴", - "𑄥𑄧𑄚𑄨𑄝𑄢𑄴" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "AM", - "pm": "PM", - "noon": null, - "midnight": null - }, - "narrow": { - "am": "AM", - "pm": "PM", - "noon": null, - "midnight": null - }, - "short": null, - "wide": { - "am": "AM", - "pm": "PM", - "noon": null, - "midnight": null - } - }, - "stand_alone": null - } - }, - "patterns": { - "date": { - "full": "EEEE, d MMMM, y", - "long": "d MMMM, y", - "medium": "d MMM, y", - "short": "d/M/yy" - }, - "time": { - "full": "h:mm:ss a zzzz", - "long": "h:mm:ss a z", - "medium": "h:mm:ss a", - "short": "h:mm a" - }, - "datetime": { - "length_patterns": { - "full": "{1} {0}", - "long": "{1} {0}", - "medium": "{1} {0}", - "short": "{1} {0}" - }, - "skeletons": { - "y": "y", - "yM": "M/y", - "yMd": "d/M/y", - "yMdE": "E, d/M/y", - "yMM": "MM-y", - "yMMM": "MMM y", - "yMMMd": "d MMM, y", - "yMMMdE": "E, d MMM, y", - "yMMMM": "MMMM y", - "M": "L", - "Md": "d/M", - "MdE": "E, d-M", - "MMdd": "dd-MM", - "MMM": "LLL", - "MMMd": "d MMM", - "MMMdE": "E d MMM", - "MMMMd": "d MMMM", - "MMMMdE": "E d MMMM", - "d": "d", - "dE": "d E", - "E": "ccc", - "Ehm": "E h:mm a", - "Ehms": "E h:mm:ss a", - "EHm": "E HH:mm", - "EHms": "E HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmv": "h:mm a v", - "H": "HH", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/en-001.json b/provider/testdata/data/json/dates/gregory@1/en-001.json deleted file mode 100644 index ae8e2b773a3..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/en-001.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - "narrow": [ - "J", - "F", - "M", - "A", - "M", - "J", - "J", - "A", - "S", - "O", - "N", - "D" - ], - "short": null, - "wide": [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ], - "narrow": [ - "S", - "M", - "T", - "W", - "T", - "F", - "S" - ], - "short": [ - "Su", - "Mo", - "Tu", - "We", - "Th", - "Fr", - "Sa" - ], - "wide": [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "am", - "pm": "pm", - "noon": "noon", - "midnight": "midnight" - }, - "narrow": { - "am": "a", - "pm": "p", - "noon": "n", - "midnight": "mi" - }, - "short": null, - "wide": { - "am": "am", - "pm": "pm", - "noon": "noon", - "midnight": "midnight" - } - }, - "stand_alone": { - "abbreviated": null, - "narrow": { - "am": "am", - "pm": "pm", - "noon": "noon", - "midnight": "midnight" - }, - "short": null, - "wide": null - } - } - }, - "patterns": { - "date": { - "full": "EEEE, d MMMM y", - "long": "d MMMM y", - "medium": "d MMM y", - "short": "dd/MM/y" - }, - "time": { - "full": "h:mm:ss a zzzz", - "long": "h:mm:ss a z", - "medium": "h:mm:ss a", - "short": "h:mm a" - }, - "datetime": { - "length_patterns": { - "full": "{1} 'at' {0}", - "long": "{1} 'at' {0}", - "medium": "{1}, {0}", - "short": "{1}, {0}" - }, - "skeletons": { - "y": "y", - "yM": "MM/y", - "yMd": "dd/MM/y", - "yMdE": "E, dd/MM/y", - "yMMM": "MMM y", - "yMMMd": "d MMM y", - "yMMMdE": "E, d MMM y", - "yMMMM": "MMMM y", - "M": "L", - "Md": "dd/MM", - "MdE": "E, dd/MM", - "MMdd": "dd/MM", - "MMM": "LLL", - "MMMd": "d MMM", - "MMMdE": "E, d MMM", - "MMMMd": "d MMMM", - "d": "d", - "dE": "E d", - "E": "ccc", - "Ehm": "E h:mm a", - "Ehms": "E h:mm:ss a", - "EHm": "E HH:mm", - "EHms": "E HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmv": "h:mm a v", - "H": "HH", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/en-ZA.json b/provider/testdata/data/json/dates/gregory@1/en-ZA.json deleted file mode 100644 index da832ddd6e0..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/en-ZA.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - "narrow": [ - "J", - "F", - "M", - "A", - "M", - "J", - "J", - "A", - "S", - "O", - "N", - "D" - ], - "short": null, - "wide": [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ], - "narrow": [ - "S", - "M", - "T", - "W", - "T", - "F", - "S" - ], - "short": [ - "Su", - "Mo", - "Tu", - "We", - "Th", - "Fr", - "Sa" - ], - "wide": [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "am", - "pm": "pm", - "noon": "noon", - "midnight": "midnight" - }, - "narrow": { - "am": "a", - "pm": "p", - "noon": "n", - "midnight": "mi" - }, - "short": null, - "wide": { - "am": "am", - "pm": "pm", - "noon": "noon", - "midnight": "midnight" - } - }, - "stand_alone": { - "abbreviated": null, - "narrow": { - "am": "am", - "pm": "pm", - "noon": "noon", - "midnight": "midnight" - }, - "short": null, - "wide": null - } - } - }, - "patterns": { - "date": { - "full": "EEEE, dd MMMM y", - "long": "dd MMMM y", - "medium": "dd MMM y", - "short": "y/MM/dd" - }, - "time": { - "full": "HH:mm:ss zzzz", - "long": "HH:mm:ss z", - "medium": "HH:mm:ss", - "short": "HH:mm" - }, - "datetime": { - "length_patterns": { - "full": "{1} 'at' {0}", - "long": "{1} 'at' {0}", - "medium": "{1}, {0}", - "short": "{1}, {0}" - }, - "skeletons": { - "y": "y", - "yM": "MM/y", - "yMd": "y/MM/dd", - "yMdE": "E, y/MM/dd", - "yMMM": "MMM y", - "yMMMd": "dd MMM y", - "yMMMdE": "E, dd MMM y", - "yMMMM": "MMMM y", - "M": "L", - "Md": "MM/dd", - "MdE": "E, MM/dd", - "MMdd": "dd/MM", - "MMM": "LLL", - "MMMd": "dd MMM", - "MMMdE": "E, dd MMM", - "MMMMd": "d MMMM", - "d": "d", - "dE": "E d", - "E": "ccc", - "Ehm": "E h:mm a", - "Ehms": "E h:mm:ss a", - "EHm": "E HH:mm", - "EHms": "E HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmv": "h:mm a v", - "H": "HH", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/en.json b/provider/testdata/data/json/dates/gregory@1/en.json deleted file mode 100644 index 2db24fb6565..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/en.json +++ /dev/null @@ -1,184 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - "narrow": [ - "J", - "F", - "M", - "A", - "M", - "J", - "J", - "A", - "S", - "O", - "N", - "D" - ], - "short": null, - "wide": [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ], - "narrow": [ - "S", - "M", - "T", - "W", - "T", - "F", - "S" - ], - "short": [ - "Su", - "Mo", - "Tu", - "We", - "Th", - "Fr", - "Sa" - ], - "wide": [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "AM", - "pm": "PM", - "noon": "noon", - "midnight": "midnight" - }, - "narrow": { - "am": "a", - "pm": "p", - "noon": "n", - "midnight": "mi" - }, - "short": null, - "wide": { - "am": "AM", - "pm": "PM", - "noon": "noon", - "midnight": "midnight" - } - }, - "stand_alone": { - "abbreviated": null, - "narrow": { - "am": "AM", - "pm": "PM", - "noon": "noon", - "midnight": "midnight" - }, - "short": null, - "wide": null - } - } - }, - "patterns": { - "date": { - "full": "EEEE, MMMM d, y", - "long": "MMMM d, y", - "medium": "MMM d, y", - "short": "M/d/yy" - }, - "time": { - "full": "h:mm:ss a zzzz", - "long": "h:mm:ss a z", - "medium": "h:mm:ss a", - "short": "h:mm a" - }, - "datetime": { - "length_patterns": { - "full": "{1} 'at' {0}", - "long": "{1} 'at' {0}", - "medium": "{1}, {0}", - "short": "{1}, {0}" - }, - "skeletons": { - "y": "y", - "yM": "M/y", - "yMd": "M/d/y", - "yMdE": "E, M/d/y", - "yMMM": "MMM y", - "yMMMd": "MMM d, y", - "yMMMdE": "E, MMM d, y", - "yMMMM": "MMMM y", - "M": "L", - "Md": "M/d", - "MdE": "E, M/d", - "MMM": "LLL", - "MMMd": "MMM d", - "MMMdE": "E, MMM d", - "MMMMd": "MMMM d", - "d": "d", - "dE": "d E", - "E": "ccc", - "Ehm": "E h:mm a", - "Ehms": "E h:mm:ss a", - "EHm": "E HH:mm", - "EHms": "E HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmv": "h:mm a v", - "H": "HH", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/es-AR.json b/provider/testdata/data/json/dates/gregory@1/es-AR.json deleted file mode 100644 index 9bbc4d1fa63..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/es-AR.json +++ /dev/null @@ -1,206 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "ene.", - "feb.", - "mar.", - "abr.", - "may.", - "jun.", - "jul.", - "ago.", - "sep.", - "oct.", - "nov.", - "dic." - ], - "narrow": [ - "E", - "F", - "M", - "A", - "M", - "J", - "J", - "A", - "S", - "O", - "N", - "D" - ], - "short": null, - "wide": [ - "enero", - "febrero", - "marzo", - "abril", - "mayo", - "junio", - "julio", - "agosto", - "septiembre", - "octubre", - "noviembre", - "diciembre" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "dom", - "lun", - "mar", - "mié", - "jue", - "vie", - "sáb" - ], - "narrow": [ - "D", - "L", - "M", - "M", - "J", - "V", - "S" - ], - "short": [ - "DO", - "LU", - "MA", - "MI", - "JU", - "VI", - "SA" - ], - "wide": [ - "domingo", - "lunes", - "martes", - "miércoles", - "jueves", - "viernes", - "sábado" - ] - }, - "stand_alone": { - "abbreviated": [ - "dom.", - "lun.", - "mar.", - "mié.", - "jue.", - "vie.", - "sáb." - ], - "narrow": null, - "short": null, - "wide": null - } - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "a. m.", - "pm": "p. m.", - "noon": "mediodía", - "midnight": null - }, - "narrow": { - "am": "a. m.", - "pm": "p. m.", - "noon": "del mediodía", - "midnight": null - }, - "short": null, - "wide": { - "am": "a. m.", - "pm": "p. m.", - "noon": "mediodía", - "midnight": null - } - }, - "stand_alone": { - "abbreviated": null, - "narrow": { - "am": "a. m.", - "pm": "p. m.", - "noon": "m.", - "midnight": null - }, - "short": null, - "wide": null - } - } - }, - "patterns": { - "date": { - "full": "EEEE, d 'de' MMMM 'de' y", - "long": "d 'de' MMMM 'de' y", - "medium": "d MMM y", - "short": "d/M/yy" - }, - "time": { - "full": "HH:mm:ss zzzz", - "long": "HH:mm:ss z", - "medium": "HH:mm:ss", - "short": "HH:mm" - }, - "datetime": { - "length_patterns": { - "full": "{1}, {0}", - "long": "{1}, {0}", - "medium": "{1} {0}", - "short": "{1} {0}" - }, - "skeletons": { - "y": "y", - "yM": "M-y", - "yMd": "d/M/y", - "yMdE": "E, d/M/y", - "yMM": "M/y", - "yMMM": "MMM y", - "yMMMd": "d 'de' MMM 'de' y", - "yMMMdE": "E, d MMM y", - "yMMMM": "MMMM 'de' y", - "yMMMMd": "d 'de' MMMM 'de' y", - "yMMMMdE": "EEE, d 'de' MMMM 'de' y", - "M": "L", - "Md": "d/M", - "MdE": "E d-M", - "MMd": "d/M", - "MMdd": "d/M", - "MMM": "LLL", - "MMMd": "d MMM", - "MMMdE": "E, d MMM", - "MMMdd": "dd-MMM", - "MMMMd": "d 'de' MMMM", - "MMMMdE": "E, d 'de' MMMM", - "d": "d", - "dE": "E d", - "E": "ccc", - "Ehm": "E, h:mm a", - "Ehms": "E, h:mm:ss a", - "EHm": "E, HH:mm", - "EHms": "E, HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "hh:mm:ss", - "hmsv": "h:mm:ss a v", - "hmsvvvv": "h:mm:ss a (vvvv)", - "hmv": "h:mm a v", - "H": "HH", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmsvvvv": "HH:mm:ss (vvvv)", - "Hmv": "HH:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/es.json b/provider/testdata/data/json/dates/gregory@1/es.json deleted file mode 100644 index c01dce4d74d..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/es.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "ene", - "feb", - "mar", - "abr", - "may", - "jun", - "jul", - "ago", - "sept", - "oct", - "nov", - "dic" - ], - "narrow": [ - "E", - "F", - "M", - "A", - "M", - "J", - "J", - "A", - "S", - "O", - "N", - "D" - ], - "short": null, - "wide": [ - "enero", - "febrero", - "marzo", - "abril", - "mayo", - "junio", - "julio", - "agosto", - "septiembre", - "octubre", - "noviembre", - "diciembre" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "dom", - "lun", - "mar", - "mié", - "jue", - "vie", - "sáb" - ], - "narrow": [ - "D", - "L", - "M", - "X", - "J", - "V", - "S" - ], - "short": [ - "DO", - "LU", - "MA", - "MI", - "JU", - "VI", - "SA" - ], - "wide": [ - "domingo", - "lunes", - "martes", - "miércoles", - "jueves", - "viernes", - "sábado" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "a. m.", - "pm": "p. m.", - "noon": "del mediodía", - "midnight": null - }, - "narrow": { - "am": "a. m.", - "pm": "p. m.", - "noon": "del mediodía", - "midnight": null - }, - "short": null, - "wide": { - "am": "a. m.", - "pm": "p. m.", - "noon": "del mediodía", - "midnight": null - } - }, - "stand_alone": { - "abbreviated": { - "am": "a. m.", - "pm": "p. m.", - "noon": "mediodía", - "midnight": null - }, - "narrow": { - "am": "a. m.", - "pm": "p. m.", - "noon": "mediodía", - "midnight": null - }, - "short": null, - "wide": { - "am": "a. m.", - "pm": "p. m.", - "noon": "mediodía", - "midnight": null - } - } - } - }, - "patterns": { - "date": { - "full": "EEEE, d 'de' MMMM 'de' y", - "long": "d 'de' MMMM 'de' y", - "medium": "d MMM y", - "short": "d/M/yy" - }, - "time": { - "full": "H:mm:ss (zzzz)", - "long": "H:mm:ss z", - "medium": "H:mm:ss", - "short": "H:mm" - }, - "datetime": { - "length_patterns": { - "full": "{1}, {0}", - "long": "{1}, {0}", - "medium": "{1} {0}", - "short": "{1} {0}" - }, - "skeletons": { - "y": "y", - "yM": "M/y", - "yMd": "d/M/y", - "yMdE": "EEE, d/M/y", - "yMM": "M/y", - "yMMM": "MMM y", - "yMMMd": "d MMM y", - "yMMMdE": "EEE, d MMM y", - "yMMMM": "MMMM 'de' y", - "yMMMMd": "d 'de' MMMM 'de' y", - "yMMMMdE": "EEE, d 'de' MMMM 'de' y", - "M": "L", - "Md": "d/M", - "MdE": "E, d/M", - "MMd": "d/M", - "MMdd": "d/M", - "MMM": "LLL", - "MMMd": "d MMM", - "MMMdE": "E, d MMM", - "MMMMd": "d 'de' MMMM", - "MMMMdE": "E, d 'de' MMMM", - "d": "d", - "dE": "E d", - "E": "ccc", - "Ehm": "E, h:mm a", - "Ehms": "E, h:mm:ss a", - "EHm": "E, H:mm", - "EHms": "E, H:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmsvvvv": "h:mm:ss a (vvvv)", - "hmv": "h:mm a v", - "H": "H", - "Hm": "H:mm", - "Hms": "H:mm:ss", - "Hmsv": "H:mm:ss v", - "Hmsvvvv": "H:mm:ss (vvvv)", - "Hmv": "H:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/fr.json b/provider/testdata/data/json/dates/gregory@1/fr.json deleted file mode 100644 index dfd14b7a937..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/fr.json +++ /dev/null @@ -1,174 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "janv.", - "févr.", - "mars", - "avr.", - "mai", - "juin", - "juil.", - "août", - "sept.", - "oct.", - "nov.", - "déc." - ], - "narrow": [ - "J", - "F", - "M", - "A", - "M", - "J", - "J", - "A", - "S", - "O", - "N", - "D" - ], - "short": null, - "wide": [ - "janvier", - "février", - "mars", - "avril", - "mai", - "juin", - "juillet", - "août", - "septembre", - "octobre", - "novembre", - "décembre" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "dim.", - "lun.", - "mar.", - "mer.", - "jeu.", - "ven.", - "sam." - ], - "narrow": [ - "D", - "L", - "M", - "M", - "J", - "V", - "S" - ], - "short": [ - "di", - "lu", - "ma", - "me", - "je", - "ve", - "sa" - ], - "wide": [ - "dimanche", - "lundi", - "mardi", - "mercredi", - "jeudi", - "vendredi", - "samedi" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "AM", - "pm": "PM", - "noon": "midi", - "midnight": "minuit" - }, - "narrow": { - "am": "AM", - "pm": "PM", - "noon": "midi", - "midnight": "minuit" - }, - "short": null, - "wide": { - "am": "AM", - "pm": "PM", - "noon": "midi", - "midnight": "minuit" - } - }, - "stand_alone": null - } - }, - "patterns": { - "date": { - "full": "EEEE d MMMM y", - "long": "d MMMM y", - "medium": "d MMM y", - "short": "dd/MM/y" - }, - "time": { - "full": "HH:mm:ss zzzz", - "long": "HH:mm:ss z", - "medium": "HH:mm:ss", - "short": "HH:mm" - }, - "datetime": { - "length_patterns": { - "full": "{1} 'à' {0}", - "long": "{1} 'à' {0}", - "medium": "{1}, {0}", - "short": "{1} {0}" - }, - "skeletons": { - "y": "y", - "yM": "MM/y", - "yMd": "dd/MM/y", - "yMdE": "E dd/MM/y", - "yMMM": "MMM y", - "yMMMd": "d MMM y", - "yMMMdE": "E d MMM y", - "yMMMM": "MMMM y", - "M": "L", - "Md": "dd/MM", - "MdE": "E dd/MM", - "MMM": "LLL", - "MMMd": "d MMM", - "MMMdE": "E d MMM", - "MMMMd": "d MMMM", - "d": "d", - "dE": "E d", - "E": "E", - "Ehm": "E h:mm a", - "Ehms": "E h:mm:ss a", - "EHm": "E HH:mm", - "EHms": "E HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmv": "h:mm a v", - "H": "HH 'h'", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/ja.json b/provider/testdata/data/json/dates/gregory@1/ja.json deleted file mode 100644 index 3e70dcdf872..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/ja.json +++ /dev/null @@ -1,180 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "1月", - "2月", - "3月", - "4月", - "5月", - "6月", - "7月", - "8月", - "9月", - "10月", - "11月", - "12月" - ], - "narrow": [ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12" - ], - "short": null, - "wide": [ - "1月", - "2月", - "3月", - "4月", - "5月", - "6月", - "7月", - "8月", - "9月", - "10月", - "11月", - "12月" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "日", - "月", - "火", - "水", - "木", - "金", - "土" - ], - "narrow": [ - "日", - "月", - "火", - "水", - "木", - "金", - "土" - ], - "short": [ - "日", - "月", - "火", - "水", - "木", - "金", - "土" - ], - "wide": [ - "日曜日", - "月曜日", - "火曜日", - "水曜日", - "木曜日", - "金曜日", - "土曜日" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "午前", - "pm": "午後", - "noon": "正午", - "midnight": "真夜中" - }, - "narrow": { - "am": "午前", - "pm": "午後", - "noon": "正午", - "midnight": "真夜中" - }, - "short": null, - "wide": { - "am": "午前", - "pm": "午後", - "noon": "正午", - "midnight": "真夜中" - } - }, - "stand_alone": null - } - }, - "patterns": { - "date": { - "full": "y年M月d日EEEE", - "long": "y年M月d日", - "medium": "y/MM/dd", - "short": "y/MM/dd" - }, - "time": { - "full": "H時mm分ss秒 zzzz", - "long": "H:mm:ss z", - "medium": "H:mm:ss", - "short": "H:mm" - }, - "datetime": { - "length_patterns": { - "full": "{1} {0}", - "long": "{1} {0}", - "medium": "{1} {0}", - "short": "{1} {0}" - }, - "skeletons": { - "y": "y年", - "yM": "y/M", - "yMd": "y/M/d", - "yMdE": "y/M/d(E)", - "yMdEEEE": "y/M/dEEEE", - "yMM": "y/MM", - "yMMM": "y年M月", - "yMMMd": "y年M月d日", - "yMMMdE": "y年M月d日(E)", - "yMMMdEEEE": "y年M月d日EEEE", - "yMMMM": "y年M月", - "M": "M月", - "Md": "M/d", - "MdE": "M/d(E)", - "MdEEEE": "M/dEEEE", - "MMM": "M月", - "MMMd": "M月d日", - "MMMdE": "M月d日(E)", - "MMMdEEEE": "M月d日EEEE", - "MMMMd": "M月d日", - "d": "d日", - "dE": "d日(E)", - "dEEEE": "d日EEEE", - "E": "ccc", - "Ehm": "aK:mm (E)", - "Ehms": "aK:mm:ss (E)", - "EHm": "H:mm (E)", - "EHms": "H:mm:ss (E)", - "h": "aK時", - "hm": "aK:mm", - "hms": "aK:mm:ss", - "hmsv": "aK:mm:ss v", - "hmv": "aK:mm v", - "H": "H時", - "Hm": "H:mm", - "Hms": "H:mm:ss", - "Hmsv": "H:mm:ss v", - "Hmv": "H:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/ru.json b/provider/testdata/data/json/dates/gregory@1/ru.json deleted file mode 100644 index ff826ca30e2..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/ru.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "янв.", - "февр.", - "мар.", - "апр.", - "мая", - "июн.", - "июл.", - "авг.", - "сент.", - "окт.", - "нояб.", - "дек." - ], - "narrow": [ - "Я", - "Ф", - "М", - "А", - "М", - "И", - "И", - "А", - "С", - "О", - "Н", - "Д" - ], - "short": null, - "wide": [ - "января", - "февраля", - "марта", - "апреля", - "мая", - "июня", - "июля", - "августа", - "сентября", - "октября", - "ноября", - "декабря" - ] - }, - "stand_alone": { - "abbreviated": [ - "янв.", - "февр.", - "март", - "апр.", - "май", - "июнь", - "июль", - "авг.", - "сент.", - "окт.", - "нояб.", - "дек." - ], - "narrow": null, - "short": null, - "wide": [ - "январь", - "февраль", - "март", - "апрель", - "май", - "июнь", - "июль", - "август", - "сентябрь", - "октябрь", - "ноябрь", - "декабрь" - ] - } - }, - "weekdays": { - "format": { - "abbreviated": [ - "вс", - "пн", - "вт", - "ср", - "чт", - "пт", - "сб" - ], - "narrow": [ - "вс", - "пн", - "вт", - "ср", - "чт", - "пт", - "сб" - ], - "short": [ - "вс", - "пн", - "вт", - "ср", - "чт", - "пт", - "сб" - ], - "wide": [ - "воскресенье", - "понедельник", - "вторник", - "среда", - "четверг", - "пятница", - "суббота" - ] - }, - "stand_alone": { - "abbreviated": null, - "narrow": [ - "В", - "П", - "В", - "С", - "Ч", - "П", - "С" - ], - "short": null, - "wide": null - } - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "AM", - "pm": "PM", - "noon": "полд.", - "midnight": "полн." - }, - "narrow": { - "am": "AM", - "pm": "PM", - "noon": "полд.", - "midnight": "полн." - }, - "short": null, - "wide": { - "am": "AM", - "pm": "PM", - "noon": "полдень", - "midnight": "полночь" - } - }, - "stand_alone": null - } - }, - "patterns": { - "date": { - "full": "EEEE, d MMMM y 'г'.", - "long": "d MMMM y 'г'.", - "medium": "d MMM y 'г'.", - "short": "dd.MM.y" - }, - "time": { - "full": "HH:mm:ss zzzz", - "long": "HH:mm:ss z", - "medium": "HH:mm:ss", - "short": "HH:mm" - }, - "datetime": { - "length_patterns": { - "full": "{1}, {0}", - "long": "{1}, {0}", - "medium": "{1}, {0}", - "short": "{1}, {0}" - }, - "skeletons": { - "y": "y", - "yM": "MM.y", - "yMd": "dd.MM.y", - "yMdE": "ccc, dd.MM.y г.", - "yMM": "MM.y", - "yMMM": "LLL y г.", - "yMMMd": "d MMM y г.", - "yMMMdE": "E, d MMM y г.", - "yMMMM": "LLLL y г.", - "M": "L", - "Md": "dd.MM", - "MdE": "E, dd.MM", - "MMdd": "dd.MM", - "MMM": "LLL", - "MMMd": "d MMM", - "MMMdE": "ccc, d MMM", - "MMMMd": "d MMMM", - "d": "d", - "dE": "ccc, d", - "E": "ccc", - "Ehm": "E h:mm a", - "Ehms": "E h:mm:ss a", - "EHm": "E HH:mm", - "EHms": "E HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmv": "h:mm a v", - "H": "HH", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/sr-Cyrl.json b/provider/testdata/data/json/dates/gregory@1/sr-Cyrl.json deleted file mode 100644 index 30ba7607526..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/sr-Cyrl.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "јан", - "феб", - "мар", - "апр", - "мај", - "јун", - "јул", - "авг", - "сеп", - "окт", - "нов", - "дец" - ], - "narrow": [ - "ј", - "ф", - "м", - "а", - "м", - "ј", - "ј", - "а", - "с", - "о", - "н", - "д" - ], - "short": null, - "wide": [ - "јануар", - "фебруар", - "март", - "април", - "мај", - "јун", - "јул", - "август", - "септембар", - "октобар", - "новембар", - "децембар" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "нед", - "пон", - "уто", - "сре", - "чет", - "пет", - "суб" - ], - "narrow": [ - "н", - "п", - "у", - "с", - "ч", - "п", - "с" - ], - "short": [ - "не", - "по", - "ут", - "ср", - "че", - "пе", - "су" - ], - "wide": [ - "недеља", - "понедељак", - "уторак", - "среда", - "четвртак", - "петак", - "субота" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "пре подне", - "pm": "по подне", - "noon": "подне", - "midnight": "поноћ" - }, - "narrow": { - "am": "a", - "pm": "p", - "noon": "подне", - "midnight": "поноћ" - }, - "short": null, - "wide": { - "am": "пре подне", - "pm": "по подне", - "noon": "подне", - "midnight": "поноћ" - } - }, - "stand_alone": { - "abbreviated": null, - "narrow": { - "am": "пре подне", - "pm": "по подне", - "noon": "подне", - "midnight": "поноћ" - }, - "short": null, - "wide": null - } - } - }, - "patterns": { - "date": { - "full": "EEEE, dd. MMMM y.", - "long": "dd. MMMM y.", - "medium": "dd.MM.y.", - "short": "d.M.yy." - }, - "time": { - "full": "HH:mm:ss zzzz", - "long": "HH:mm:ss z", - "medium": "HH:mm:ss", - "short": "HH:mm" - }, - "datetime": { - "length_patterns": { - "full": "{1} {0}", - "long": "{1} {0}", - "medium": "{1} {0}", - "short": "{1} {0}" - }, - "skeletons": { - "y": "y.", - "yM": "M.y.", - "yMd": "d.M.y.", - "yMdE": "E, d.M.y.", - "yMM": "MM.y.", - "yMMdd": "dd.MM.y.", - "yMMM": "MMM y.", - "yMMMd": "d. MMM y.", - "yMMMdE": "E, d. MMM y.", - "yMMMM": "MMMM y.", - "M": "L", - "Md": "d.M.", - "MdE": "E, d.M.", - "MMdd": "dd.MM.", - "MMM": "LLL", - "MMMd": "d. MMM", - "MMMdE": "E d. MMM", - "MMMdd": "dd.MMM", - "MMMMd": "d. MMMM", - "MMMMdE": "E, d. MMMM", - "d": "d", - "dE": "E d.", - "E": "E", - "Ehm": "E h:mm a", - "Ehms": "E h:mm:ss a", - "EHm": "E HH:mm", - "EHms": "E HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmv": "h:mm a v", - "H": "HH", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/sr-Latn.json b/provider/testdata/data/json/dates/gregory@1/sr-Latn.json deleted file mode 100644 index 18ee7c2b01c..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/sr-Latn.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "jan", - "feb", - "mar", - "apr", - "maj", - "jun", - "jul", - "avg", - "sep", - "okt", - "nov", - "dec" - ], - "narrow": [ - "j", - "f", - "m", - "a", - "m", - "j", - "j", - "a", - "s", - "o", - "n", - "d" - ], - "short": null, - "wide": [ - "januar", - "februar", - "mart", - "april", - "maj", - "jun", - "jul", - "avgust", - "septembar", - "oktobar", - "novembar", - "decembar" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "ned", - "pon", - "uto", - "sre", - "čet", - "pet", - "sub" - ], - "narrow": [ - "n", - "p", - "u", - "s", - "č", - "p", - "s" - ], - "short": [ - "ne", - "po", - "ut", - "sr", - "če", - "pe", - "su" - ], - "wide": [ - "nedelja", - "ponedeljak", - "utorak", - "sreda", - "četvrtak", - "petak", - "subota" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "pre podne", - "pm": "po podne", - "noon": "podne", - "midnight": "ponoć" - }, - "narrow": { - "am": "a", - "pm": "p", - "noon": "podne", - "midnight": "ponoć" - }, - "short": null, - "wide": { - "am": "pre podne", - "pm": "po podne", - "noon": "podne", - "midnight": "ponoć" - } - }, - "stand_alone": { - "abbreviated": null, - "narrow": { - "am": "pre podne", - "pm": "po podne", - "noon": "podne", - "midnight": "ponoć" - }, - "short": null, - "wide": null - } - } - }, - "patterns": { - "date": { - "full": "EEEE, dd. MMMM y.", - "long": "dd. MMMM y.", - "medium": "dd.MM.y.", - "short": "d.M.yy." - }, - "time": { - "full": "HH:mm:ss zzzz", - "long": "HH:mm:ss z", - "medium": "HH:mm:ss", - "short": "HH:mm" - }, - "datetime": { - "length_patterns": { - "full": "{1} {0}", - "long": "{1} {0}", - "medium": "{1} {0}", - "short": "{1} {0}" - }, - "skeletons": { - "y": "y.", - "yM": "M.y.", - "yMd": "d.M.y.", - "yMdE": "E, d.M.y.", - "yMM": "MM.y.", - "yMMdd": "dd.MM.y.", - "yMMM": "MMM y.", - "yMMMd": "d. MMM y.", - "yMMMdE": "E, d. MMM y.", - "yMMMM": "MMMM y.", - "M": "L", - "Md": "d.M.", - "MdE": "E, d.M.", - "MMdd": "dd.MM.", - "MMM": "LLL", - "MMMd": "d. MMM", - "MMMdE": "E d. MMM", - "MMMdd": "dd.MMM", - "MMMMd": "d. MMMM", - "MMMMdE": "E, d. MMMM", - "d": "d", - "dE": "E d.", - "E": "E", - "Ehm": "E h:mm a", - "Ehms": "E h:mm:ss a", - "EHm": "E HH:mm", - "EHms": "E HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmv": "h:mm a v", - "H": "HH", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/sr.json b/provider/testdata/data/json/dates/gregory@1/sr.json deleted file mode 100644 index 30ba7607526..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/sr.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "јан", - "феб", - "мар", - "апр", - "мај", - "јун", - "јул", - "авг", - "сеп", - "окт", - "нов", - "дец" - ], - "narrow": [ - "ј", - "ф", - "м", - "а", - "м", - "ј", - "ј", - "а", - "с", - "о", - "н", - "д" - ], - "short": null, - "wide": [ - "јануар", - "фебруар", - "март", - "април", - "мај", - "јун", - "јул", - "август", - "септембар", - "октобар", - "новембар", - "децембар" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "нед", - "пон", - "уто", - "сре", - "чет", - "пет", - "суб" - ], - "narrow": [ - "н", - "п", - "у", - "с", - "ч", - "п", - "с" - ], - "short": [ - "не", - "по", - "ут", - "ср", - "че", - "пе", - "су" - ], - "wide": [ - "недеља", - "понедељак", - "уторак", - "среда", - "четвртак", - "петак", - "субота" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "пре подне", - "pm": "по подне", - "noon": "подне", - "midnight": "поноћ" - }, - "narrow": { - "am": "a", - "pm": "p", - "noon": "подне", - "midnight": "поноћ" - }, - "short": null, - "wide": { - "am": "пре подне", - "pm": "по подне", - "noon": "подне", - "midnight": "поноћ" - } - }, - "stand_alone": { - "abbreviated": null, - "narrow": { - "am": "пре подне", - "pm": "по подне", - "noon": "подне", - "midnight": "поноћ" - }, - "short": null, - "wide": null - } - } - }, - "patterns": { - "date": { - "full": "EEEE, dd. MMMM y.", - "long": "dd. MMMM y.", - "medium": "dd.MM.y.", - "short": "d.M.yy." - }, - "time": { - "full": "HH:mm:ss zzzz", - "long": "HH:mm:ss z", - "medium": "HH:mm:ss", - "short": "HH:mm" - }, - "datetime": { - "length_patterns": { - "full": "{1} {0}", - "long": "{1} {0}", - "medium": "{1} {0}", - "short": "{1} {0}" - }, - "skeletons": { - "y": "y.", - "yM": "M.y.", - "yMd": "d.M.y.", - "yMdE": "E, d.M.y.", - "yMM": "MM.y.", - "yMMdd": "dd.MM.y.", - "yMMM": "MMM y.", - "yMMMd": "d. MMM y.", - "yMMMdE": "E, d. MMM y.", - "yMMMM": "MMMM y.", - "M": "L", - "Md": "d.M.", - "MdE": "E, d.M.", - "MMdd": "dd.MM.", - "MMM": "LLL", - "MMMd": "d. MMM", - "MMMdE": "E d. MMM", - "MMMdd": "dd.MMM", - "MMMMd": "d. MMMM", - "MMMMdE": "E, d. MMMM", - "d": "d", - "dE": "E d.", - "E": "E", - "Ehm": "E h:mm a", - "Ehms": "E h:mm:ss a", - "EHm": "E HH:mm", - "EHms": "E HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmv": "h:mm a v", - "H": "HH", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/th.json b/provider/testdata/data/json/dates/gregory@1/th.json deleted file mode 100644 index 5b5709b0af9..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/th.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "ม.ค.", - "ก.พ.", - "มี.ค.", - "เม.ย.", - "พ.ค.", - "มิ.ย.", - "ก.ค.", - "ส.ค.", - "ก.ย.", - "ต.ค.", - "พ.ย.", - "ธ.ค." - ], - "narrow": [ - "ม.ค.", - "ก.พ.", - "มี.ค.", - "เม.ย.", - "พ.ค.", - "มิ.ย.", - "ก.ค.", - "ส.ค.", - "ก.ย.", - "ต.ค.", - "พ.ย.", - "ธ.ค." - ], - "short": null, - "wide": [ - "มกราคม", - "กุมภาพันธ์", - "มีนาคม", - "เมษายน", - "พฤษภาคม", - "มิถุนายน", - "กรกฎาคม", - "สิงหาคม", - "กันยายน", - "ตุลาคม", - "พฤศจิกายน", - "ธันวาคม" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "อา.", - "จ.", - "อ.", - "พ.", - "พฤ.", - "ศ.", - "ส." - ], - "narrow": [ - "อา", - "จ", - "อ", - "พ", - "พฤ", - "ศ", - "ส" - ], - "short": [ - "อา.", - "จ.", - "อ.", - "พ.", - "พฤ.", - "ศ.", - "ส." - ], - "wide": [ - "วันอาทิตย์", - "วันจันทร์", - "วันอังคาร", - "วันพุธ", - "วันพฤหัสบดี", - "วันศุกร์", - "วันเสาร์" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "ก่อนเที่ยง", - "pm": "หลังเที่ยง", - "noon": "เที่ยง", - "midnight": "เที่ยงคืน" - }, - "narrow": { - "am": "a", - "pm": "p", - "noon": "เที่ยง", - "midnight": "เที่ยงคืน" - }, - "short": null, - "wide": { - "am": "ก่อนเที่ยง", - "pm": "หลังเที่ยง", - "noon": "เที่ยง", - "midnight": "เที่ยงคืน" - } - }, - "stand_alone": { - "abbreviated": null, - "narrow": { - "am": "ก่อนเที่ยง", - "pm": "หลังเที่ยง", - "noon": "เที่ยง", - "midnight": "เที่ยงคืน" - }, - "short": null, - "wide": null - } - } - }, - "patterns": { - "date": { - "full": "EEEEที่ d MMMM G y", - "long": "d MMMM G y", - "medium": "d MMM y", - "short": "d/M/yy" - }, - "time": { - "full": "H นาฬิกา mm นาที ss วินาที zzzz", - "long": "H นาฬิกา mm นาที ss วินาที z", - "medium": "HH:mm:ss", - "short": "HH:mm" - }, - "datetime": { - "length_patterns": { - "full": "{1} {0}", - "long": "{1} {0}", - "medium": "{1} {0}", - "short": "{1} {0}" - }, - "skeletons": { - "y": "y", - "yM": "M/y", - "yMd": "d/M/y", - "yMdE": "E d/M/y", - "yMMM": "MMM y", - "yMMMd": "d MMM y", - "yMMMdE": "E d MMM y", - "yMMMdEEEE": "EEEEที่ d MMM y", - "yMMMM": "MMMM 'G' y", - "yMMMMd": "d MMMM 'G' y", - "yMMMMdE": "E d MMMM 'G' y", - "yMMMMdEEEE": "EEEEที่ d MMMM 'G' y", - "M": "L", - "Md": "d/M", - "MdE": "E d/M", - "MMM": "LLL", - "MMMd": "d MMM", - "MMMdE": "E d MMM", - "MMMdEEEE": "EEEEที่ d MMM", - "MMMMd": "d MMMM", - "MMMMdE": "E d MMMM", - "MMMMdEEEE": "EEEEที่ d MMMM", - "d": "d", - "dE": "E d", - "E": "ccc", - "Ehm": "E h:mm a", - "Ehms": "E h:mm:ss a", - "EHm": "E HH:mm น.", - "EHms": "E HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmv": "h:mm น. a v", - "H": "HH", - "Hm": "HH:mm น.", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss", - "mmss": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/tr.json b/provider/testdata/data/json/dates/gregory@1/tr.json deleted file mode 100644 index 0b514e619d1..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/tr.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "Oca", - "Şub", - "Mar", - "Nis", - "May", - "Haz", - "Tem", - "Ağu", - "Eyl", - "Eki", - "Kas", - "Ara" - ], - "narrow": [ - "O", - "Ş", - "M", - "N", - "M", - "H", - "T", - "A", - "E", - "E", - "K", - "A" - ], - "short": null, - "wide": [ - "Ocak", - "Şubat", - "Mart", - "Nisan", - "Mayıs", - "Haziran", - "Temmuz", - "Ağustos", - "Eylül", - "Ekim", - "Kasım", - "Aralık" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "Paz", - "Pzt", - "Sal", - "Çar", - "Per", - "Cum", - "Cmt" - ], - "narrow": [ - "P", - "P", - "S", - "Ç", - "P", - "C", - "C" - ], - "short": [ - "Pa", - "Pt", - "Sa", - "Ça", - "Pe", - "Cu", - "Ct" - ], - "wide": [ - "Pazar", - "Pazartesi", - "Salı", - "Çarşamba", - "Perşembe", - "Cuma", - "Cumartesi" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "ÖÖ", - "pm": "ÖS", - "noon": "öğle", - "midnight": "gece yarısı" - }, - "narrow": { - "am": "öö", - "pm": "ös", - "noon": "ö", - "midnight": "gece" - }, - "short": null, - "wide": { - "am": "ÖÖ", - "pm": "ÖS", - "noon": "öğle", - "midnight": "gece yarısı" - } - }, - "stand_alone": { - "abbreviated": null, - "narrow": { - "am": "ÖÖ", - "pm": "ÖS", - "noon": "öğle", - "midnight": "gece yarısı" - }, - "short": null, - "wide": null - } - } - }, - "patterns": { - "date": { - "full": "d MMMM y EEEE", - "long": "d MMMM y", - "medium": "d MMM y", - "short": "d.MM.y" - }, - "time": { - "full": "HH:mm:ss zzzz", - "long": "HH:mm:ss z", - "medium": "HH:mm:ss", - "short": "HH:mm" - }, - "datetime": { - "length_patterns": { - "full": "{1} {0}", - "long": "{1} {0}", - "medium": "{1} {0}", - "short": "{1} {0}" - }, - "skeletons": { - "y": "y", - "yM": "MM/y", - "yMd": "dd.MM.y", - "yMdE": "d.M.y E", - "yMM": "MM.y", - "yMMM": "MMM y", - "yMMMd": "d MMM y", - "yMMMdE": "d MMM y E", - "yMMMM": "MMMM y", - "M": "L", - "Md": "d/M", - "MdE": "d/MM E", - "MMM": "LLL", - "MMMd": "d MMM", - "MMMdE": "d MMMM E", - "MMMMd": "d MMMM", - "MMMMdE": "d MMMM E", - "d": "d", - "dE": "d E", - "E": "ccc", - "Ehm": "E a h:mm", - "Ehms": "E a h:mm:ss", - "EHm": "E HH:mm", - "EHms": "E HH:mm:ss", - "h": "a h", - "hm": "a h:mm", - "hms": "a h:mm:ss", - "hmsv": "a h:mm:ss v", - "hmv": "a h:mm v", - "H": "HH", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss", - "mmss": "mm:ss" - } - } - } -} diff --git a/provider/testdata/data/json/dates/gregory@1/und.json b/provider/testdata/data/json/dates/gregory@1/und.json deleted file mode 100644 index 196e935e2c1..00000000000 --- a/provider/testdata/data/json/dates/gregory@1/und.json +++ /dev/null @@ -1,174 +0,0 @@ -{ - "symbols": { - "months": { - "format": { - "abbreviated": [ - "M01", - "M02", - "M03", - "M04", - "M05", - "M06", - "M07", - "M08", - "M09", - "M10", - "M11", - "M12" - ], - "narrow": [ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12" - ], - "short": null, - "wide": [ - "M01", - "M02", - "M03", - "M04", - "M05", - "M06", - "M07", - "M08", - "M09", - "M10", - "M11", - "M12" - ] - }, - "stand_alone": null - }, - "weekdays": { - "format": { - "abbreviated": [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ], - "narrow": [ - "S", - "M", - "T", - "W", - "T", - "F", - "S" - ], - "short": [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ], - "wide": [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ] - }, - "stand_alone": null - }, - "day_periods": { - "format": { - "abbreviated": { - "am": "AM", - "pm": "PM", - "noon": null, - "midnight": null - }, - "narrow": { - "am": "AM", - "pm": "PM", - "noon": null, - "midnight": null - }, - "short": null, - "wide": { - "am": "AM", - "pm": "PM", - "noon": null, - "midnight": null - } - }, - "stand_alone": null - } - }, - "patterns": { - "date": { - "full": "y MMMM d, EEEE", - "long": "y MMMM d", - "medium": "y MMM d", - "short": "y-MM-dd" - }, - "time": { - "full": "HH:mm:ss zzzz", - "long": "HH:mm:ss z", - "medium": "HH:mm:ss", - "short": "HH:mm" - }, - "datetime": { - "length_patterns": { - "full": "{1} {0}", - "long": "{1} {0}", - "medium": "{1} {0}", - "short": "{1} {0}" - }, - "skeletons": { - "y": "y", - "yM": "y-MM", - "yMd": "y-MM-dd", - "yMdE": "y-MM-dd, E", - "yMMM": "y MMM", - "yMMMd": "y MMM d", - "yMMMdE": "y MMM d, E", - "yMMMM": "y MMMM", - "M": "L", - "Md": "MM-dd", - "MdE": "MM-dd, E", - "MMM": "LLL", - "MMMd": "MMM d", - "MMMdE": "MMM d, E", - "MMMMd": "MMMM d", - "d": "d", - "dE": "d, E", - "E": "ccc", - "Ehm": "E h:mm a", - "Ehms": "E h:mm:ss a", - "EHm": "E HH:mm", - "EHms": "E HH:mm:ss", - "h": "h a", - "hm": "h:mm a", - "hms": "h:mm:ss a", - "hmsv": "h:mm:ss a v", - "hmv": "h:mm a v", - "H": "HH", - "Hm": "HH:mm", - "Hms": "HH:mm:ss", - "Hmsv": "HH:mm:ss v", - "Hmv": "HH:mm v", - "ms": "mm:ss" - } - } - } -}