Skip to content

Commit eff617f

Browse files
committed
feat(cldr): load localized date fields
1 parent 2fa4821 commit eff617f

File tree

2 files changed

+230
-113
lines changed

2 files changed

+230
-113
lines changed

src/cldr/load-dates.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,24 @@ function loadCalendarNames(locale, calendar) {
6767
localeCalendar.eras = getEraNames(calendar.eras);
6868
}
6969

70+
function loadCalendarDateFields(locale, fields) {
71+
const localeCalendar = cldr[locale].calendar;
72+
const dateFields = {};
73+
74+
for (let field in fields) {
75+
const [ fieldName, formatType = 'wide' ] = field.split('-');
76+
const fieldInfo = dateFields[fieldName] || {};
77+
const displayName = fields[field].displayName;
78+
79+
if (!displayName) { continue; }
80+
81+
fieldInfo[formatType] = displayName;
82+
dateFields[fieldName] = fieldInfo;
83+
}
84+
85+
localeCalendar.dateFields = dateFields;
86+
}
87+
7088
function getPredefinedFormat(paths, calendar) {
7189
const result = [];
7290

@@ -108,6 +126,8 @@ export default function loadCalendarInfo(locale, info) {
108126
} else if (field === "calendars" && info[field].gregorian) {
109127
loadCalendarPatterns(locale, info[field].gregorian);
110128
loadCalendarNames(locale, info[field].gregorian);
129+
} else if (field === "fields") {
130+
loadCalendarDateFields(locale, info.fields);
111131
}
112132
}
113-
}
133+
}

test/cldr.js

Lines changed: 209 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -6,42 +6,43 @@ const numbers = require("cldr-data/main/bg/numbers.json");
66
const timeZoneNames = require("cldr-data/main/bg/timeZoneNames.json");
77
const calendar = require("cldr-data/main/bg/ca-gregorian.json");
88
const currencies = require("cldr-data/main/bg/currencies.json");
9+
const dateFields = require("cldr-data/main/bg/dateFields.json");
910
const weekData = require("cldr-data/supplemental/weekData.json");
1011
const currencyData = require("cldr-data/supplemental/currencyData.json");
11-
load(likelySubtags, weekData, currencyData, numbers, currencies, calendar, timeZoneNames);
12+
load(likelySubtags, weekData, currencyData, numbers, currencies, calendar, dateFields, timeZoneNames);
1213

1314
describe('load', () => {
14-
it('should set territory', () => {
15-
expect(cldr.bg.territory).toEqual("BG");
16-
});
15+
it('should set territory', () => {
16+
expect(cldr.bg.territory).toEqual("BG");
17+
});
1718

18-
it('should set name', () => {
19-
expect(cldr.bg.name).toEqual("bg");
20-
});
19+
it('should set name', () => {
20+
expect(cldr.bg.name).toEqual("bg");
21+
});
2122

22-
it('should set supplemental data', () => {
23-
expect(cldr.supplemental.likelySubtags).toBeDefined();
24-
expect(cldr.supplemental.currencyData).toBeDefined();
25-
expect(cldr.supplemental.weekData.firstDay).toBeDefined();
26-
expect(cldr.supplemental.weekData.minDays).not.toBeDefined();
27-
});
23+
it('should set supplemental data', () => {
24+
expect(cldr.supplemental.likelySubtags).toBeDefined();
25+
expect(cldr.supplemental.currencyData).toBeDefined();
26+
expect(cldr.supplemental.weekData.firstDay).toBeDefined();
27+
expect(cldr.supplemental.weekData.minDays).not.toBeDefined();
28+
});
2829
});
2930

3031
describe('load numbers', () => {
31-
it('should set symbols', () => {
32-
const symbols = cldr.bg.numbers.symbols;
33-
expect(symbols.decimal).toEqual(",");
34-
expect(symbols.percentSign).toEqual("%");
35-
});
32+
it('should set symbols', () => {
33+
const symbols = cldr.bg.numbers.symbols;
34+
expect(symbols.decimal).toEqual(",");
35+
expect(symbols.percentSign).toEqual("%");
36+
});
3637

37-
it('should set decimal pattern', () => {
38-
const decimal = cldr.bg.numbers.decimal;
39-
expect(decimal.patterns[0]).toEqual("n");
40-
expect(decimal.groupSize.length).toEqual(1);
41-
expect(decimal.groupSize[0]).toEqual(3);
42-
});
38+
it('should set decimal pattern', () => {
39+
const decimal = cldr.bg.numbers.decimal;
40+
expect(decimal.patterns[0]).toEqual("n");
41+
expect(decimal.groupSize.length).toEqual(1);
42+
expect(decimal.groupSize[0]).toEqual(3);
43+
});
4344

44-
it('should set currency pattern', () => {
45+
it('should set currency pattern', () => {
4546
const currency = cldr.bg.numbers.currency;
4647
expect(currency.patterns[0]).toEqual("n $");
4748
expect(currency.groupSize.length).toEqual(1);
@@ -73,110 +74,206 @@ describe('load numbers', () => {
7374
});
7475

7576
describe('load calendar', () => {
76-
it('should set gmt formats', () => {
77-
const calendar = cldr.bg.calendar;
78-
expect(calendar.gmtFormat).toEqual("Гринуич{0}");
79-
expect(calendar.gmtZeroFormat).toEqual("Гринуич");
80-
});
77+
it('should set gmt formats', () => {
78+
const calendar = cldr.bg.calendar;
79+
expect(calendar.gmtFormat).toEqual("Гринуич{0}");
80+
expect(calendar.gmtZeroFormat).toEqual("Гринуич");
81+
});
8182

82-
it('should set predefined patterns', () => {
83-
const patterns = cldr.bg.calendar.patterns;
84-
expect(patterns.d).toEqual("d.MM.y 'г'.");
85-
expect(patterns.D).toEqual("EEEE, d MMMM y 'г'.");
86-
expect(patterns.F).toEqual("EEEE, d MMMM y 'г'. H:mm:ss");
87-
expect(patterns.g).toEqual("d.MM.y 'г'. H:mm");
88-
expect(patterns.G).toEqual("d.MM.y 'г'. H:mm:ss");
89-
expect(patterns.t).toEqual("H:mm");
90-
expect(patterns.T).toEqual("H:mm:ss");
91-
});
83+
it('should set predefined patterns', () => {
84+
const patterns = cldr.bg.calendar.patterns;
85+
expect(patterns.d).toEqual("d.MM.y 'г'.");
86+
expect(patterns.D).toEqual("EEEE, d MMMM y 'г'.");
87+
expect(patterns.F).toEqual("EEEE, d MMMM y 'г'. H:mm:ss");
88+
expect(patterns.g).toEqual("d.MM.y 'г'. H:mm");
89+
expect(patterns.G).toEqual("d.MM.y 'г'. H:mm:ss");
90+
expect(patterns.t).toEqual("H:mm");
91+
expect(patterns.T).toEqual("H:mm:ss");
92+
});
9293

93-
it('should set standard patterns', () => {
94-
const patterns = cldr.bg.calendar.patterns;
95-
expect(patterns.s).toEqual("yyyy'-'MM'-'dd'T'HH':'mm':'ss");
96-
expect(patterns.u).toEqual("yyyy'-'MM'-'dd HH':'mm':'ss'Z'");
97-
});
94+
it('should set standard patterns', () => {
95+
const patterns = cldr.bg.calendar.patterns;
96+
expect(patterns.s).toEqual("yyyy'-'MM'-'dd'T'HH':'mm':'ss");
97+
expect(patterns.u).toEqual("yyyy'-'MM'-'dd HH':'mm':'ss'Z'");
98+
});
9899

99-
it('should set dateTimeFormats', () => {
100-
const dateTimeFormats = cldr.bg.calendar.dateTimeFormats;
101-
expect(dateTimeFormats).toBeDefined();
102-
expect(dateTimeFormats.availableFormats).toBeDefined();
103-
});
100+
it('should set dateTimeFormats', () => {
101+
const dateTimeFormats = cldr.bg.calendar.dateTimeFormats;
102+
expect(dateTimeFormats).toBeDefined();
103+
expect(dateTimeFormats.availableFormats).toBeDefined();
104+
});
104105

105-
it('should set days formats', () => {
106-
const formats = cldr.bg.calendar.days.format;
107-
expect(formats.abbreviated).toBeDefined();
108-
expect(formats.narrow).toBeDefined();
109-
expect(formats.short).toBeDefined();
110-
expect(formats.wide).toBeDefined();
111-
});
106+
it('should set days formats', () => {
107+
const formats = cldr.bg.calendar.days.format;
108+
expect(formats.abbreviated).toBeDefined();
109+
expect(formats.narrow).toBeDefined();
110+
expect(formats.short).toBeDefined();
111+
expect(formats.wide).toBeDefined();
112+
});
112113

113-
it('should set days stand-alone formats', () => {
114-
const formats = cldr.bg.calendar.days['stand-alone'];
115-
expect(formats.abbreviated).toBeDefined();
116-
expect(formats.narrow).toBeDefined();
117-
expect(formats.short).toBeDefined();
118-
expect(formats.wide).toBeDefined();
119-
});
114+
it('should set days stand-alone formats', () => {
115+
const formats = cldr.bg.calendar.days['stand-alone'];
116+
expect(formats.abbreviated).toBeDefined();
117+
expect(formats.narrow).toBeDefined();
118+
expect(formats.short).toBeDefined();
119+
expect(formats.wide).toBeDefined();
120+
});
120121

121-
it('should set months formats', () => {
122-
const formats = cldr.bg.calendar.months.format;
123-
expect(formats.abbreviated).toBeDefined();
124-
expect(formats.narrow).toBeDefined();
125-
expect(formats.wide).toBeDefined();
126-
});
122+
it('should set months formats', () => {
123+
const formats = cldr.bg.calendar.months.format;
124+
expect(formats.abbreviated).toBeDefined();
125+
expect(formats.narrow).toBeDefined();
126+
expect(formats.wide).toBeDefined();
127+
});
127128

128-
it('should set months stand-alone formats', () => {
129-
const formats = cldr.bg.calendar.months['stand-alone'];
130-
expect(formats.abbreviated).toBeDefined();
131-
expect(formats.narrow).toBeDefined();
132-
expect(formats.wide).toBeDefined();
133-
});
129+
it('should set months stand-alone formats', () => {
130+
const formats = cldr.bg.calendar.months['stand-alone'];
131+
expect(formats.abbreviated).toBeDefined();
132+
expect(formats.narrow).toBeDefined();
133+
expect(formats.wide).toBeDefined();
134+
});
134135

135-
it('should set quarters formats', () => {
136-
const formats = cldr.bg.calendar.quarters.format;
137-
expect(formats.abbreviated).toBeDefined();
138-
expect(formats.narrow).toBeDefined();
139-
expect(formats.wide).toBeDefined();
140-
});
136+
it('should set quarters formats', () => {
137+
const formats = cldr.bg.calendar.quarters.format;
138+
expect(formats.abbreviated).toBeDefined();
139+
expect(formats.narrow).toBeDefined();
140+
expect(formats.wide).toBeDefined();
141+
});
141142

142-
it('should set quarters stand-alone formats', () => {
143-
const formats = cldr.bg.calendar.quarters['stand-alone'];
144-
expect(formats.abbreviated).toBeDefined();
145-
expect(formats.narrow).toBeDefined();
146-
expect(formats.wide).toBeDefined();
147-
});
143+
it('should set quarters stand-alone formats', () => {
144+
const formats = cldr.bg.calendar.quarters['stand-alone'];
145+
expect(formats.abbreviated).toBeDefined();
146+
expect(formats.narrow).toBeDefined();
147+
expect(formats.wide).toBeDefined();
148+
});
148149

149-
it('should set dayPeriods formats', () => {
150-
const formats = cldr.bg.calendar.dayPeriods.format;
151-
expect(formats.abbreviated.am).toBeDefined();
152-
expect(formats.abbreviated.pm).toBeDefined();
150+
it('should set dayPeriods formats', () => {
151+
const formats = cldr.bg.calendar.dayPeriods.format;
152+
expect(formats.abbreviated.am).toBeDefined();
153+
expect(formats.abbreviated.pm).toBeDefined();
153154

154-
expect(formats.narrow.am).toBeDefined();
155-
expect(formats.narrow.pm).toBeDefined();
155+
expect(formats.narrow.am).toBeDefined();
156+
expect(formats.narrow.pm).toBeDefined();
156157

157-
expect(formats.wide.am).toBeDefined();
158-
expect(formats.wide.pm).toBeDefined();
159-
});
158+
expect(formats.wide.am).toBeDefined();
159+
expect(formats.wide.pm).toBeDefined();
160+
});
160161

161-
it('should set dayPeriods stand-alone formats', () => {
162-
const formats = cldr.bg.calendar.dayPeriods['stand-alone'];
163-
expect(formats.abbreviated.am).toBeDefined();
164-
expect(formats.abbreviated.pm).toBeDefined();
162+
it('should set dayPeriods stand-alone formats', () => {
163+
const formats = cldr.bg.calendar.dayPeriods['stand-alone'];
164+
expect(formats.abbreviated.am).toBeDefined();
165+
expect(formats.abbreviated.pm).toBeDefined();
165166

166-
expect(formats.narrow.am).toBeDefined();
167-
expect(formats.narrow.pm).toBeDefined();
167+
expect(formats.narrow.am).toBeDefined();
168+
expect(formats.narrow.pm).toBeDefined();
168169

169-
expect(formats.wide.am).toBeDefined();
170-
expect(formats.wide.pm).toBeDefined();
171-
});
170+
expect(formats.wide.am).toBeDefined();
171+
expect(formats.wide.pm).toBeDefined();
172+
});
172173

173-
it('should set eras formats', () => {
174-
const formats = cldr.bg.calendar.eras.format;
175-
expect(formats.abbreviated).toBeDefined();
176-
expect(formats.narrow).toBeDefined();
177-
expect(formats.wide).toBeDefined();
178-
});
174+
it('should set eras formats', () => {
175+
const formats = cldr.bg.calendar.eras.format;
176+
expect(formats.abbreviated).toBeDefined();
177+
expect(formats.narrow).toBeDefined();
178+
expect(formats.wide).toBeDefined();
179+
});
179180

181+
it('should set era display name', () => {
182+
const dateFields = cldr.bg.calendar.dateFields.era;
183+
184+
expect(dateFields.wide).toBeDefined();
185+
expect(dateFields.wide).toEqual('ера');
186+
expect(dateFields.short).not.toBeDefined();
187+
expect(dateFields.narrow).not.toBeDefined();
188+
});
189+
190+
it('should set year display name', () => {
191+
const dateFields = cldr.bg.calendar.dateFields.year;
192+
193+
expect(dateFields.wide).toBeDefined();
194+
expect(dateFields.short).toBeDefined();
195+
expect(dateFields.narrow).toBeDefined();
196+
});
197+
198+
it('should set quarter display name', () => {
199+
const dateFields = cldr.bg.calendar.dateFields.quarter;
200+
201+
expect(dateFields.wide).toBeDefined();
202+
expect(dateFields.short).toBeDefined();
203+
expect(dateFields.narrow).toBeDefined();
204+
});
205+
206+
it('should set month display name', () => {
207+
const dateFields = cldr.bg.calendar.dateFields.month;
208+
209+
expect(dateFields.wide).toBeDefined();
210+
expect(dateFields.short).toBeDefined();
211+
expect(dateFields.narrow).toBeDefined();
212+
});
213+
214+
it('should set week display name', () => {
215+
const dateFields = cldr.bg.calendar.dateFields.week;
216+
217+
expect(dateFields.wide).toBeDefined();
218+
expect(dateFields.short).toBeDefined();
219+
expect(dateFields.narrow).toBeDefined();
220+
});
221+
222+
it('should set day display name', () => {
223+
const dateFields = cldr.bg.calendar.dateFields.day;
224+
225+
expect(dateFields.wide).toBeDefined();
226+
expect(dateFields.short).toBeDefined();
227+
expect(dateFields.narrow).toBeDefined();
228+
});
229+
230+
it('should set weekday display name', () => {
231+
const dateFields = cldr.bg.calendar.dateFields.weekday;
232+
233+
expect(dateFields.wide).toBeDefined();
234+
expect(dateFields.short).not.toBeDefined();
235+
expect(dateFields.narrow).not.toBeDefined();
236+
});
237+
238+
it('should set dayperiod display name', () => {
239+
const dateFields = cldr.bg.calendar.dateFields.dayperiod;
240+
241+
expect(dateFields.wide).toBeDefined();
242+
expect(dateFields.short).not.toBeDefined();
243+
expect(dateFields.narrow).not.toBeDefined();
244+
});
245+
246+
it('should set hour display name', () => {
247+
const dateFields = cldr.bg.calendar.dateFields.hour;
248+
249+
expect(dateFields.wide).toBeDefined();
250+
expect(dateFields.short).toBeDefined();
251+
expect(dateFields.narrow).toBeDefined();
252+
});
253+
254+
it('should set minute display name', () => {
255+
const dateFields = cldr.bg.calendar.dateFields.minute;
256+
257+
expect(dateFields.wide).toBeDefined();
258+
expect(dateFields.short).toBeDefined();
259+
expect(dateFields.narrow).toBeDefined();
260+
});
261+
262+
it('should set second display name', () => {
263+
const dateFields = cldr.bg.calendar.dateFields.second;
264+
265+
expect(dateFields.wide).toBeDefined();
266+
expect(dateFields.short).toBeDefined();
267+
expect(dateFields.narrow).toBeDefined();
268+
});
269+
270+
it('should set zone display name', () => {
271+
const dateFields = cldr.bg.calendar.dateFields.zone;
272+
273+
expect(dateFields.wide).toBeDefined();
274+
expect(dateFields.short).not.toBeDefined();
275+
expect(dateFields.narrow).not.toBeDefined();
276+
});
180277
});
181278

182279
describe('localeInfo', () => {

0 commit comments

Comments
 (0)