@ui5/webcomponents-localization 0.0.0-c638668a1 → 0.0.0-c6c04c609

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/.eslintignore +1 -1
  2. package/.npsrc.json +3 -0
  3. package/CHANGELOG.md +607 -0
  4. package/README.md +6 -6
  5. package/{src/Assets-static.js → dist/Assets-static.d.ts} +0 -1
  6. package/dist/Assets-static.js +1 -0
  7. package/dist/Assets-static.js.map +1 -0
  8. package/dist/Assets.d.ts +1 -0
  9. package/dist/Assets.js +1 -0
  10. package/dist/Assets.js.map +1 -0
  11. package/dist/DateFormat.d.ts +6 -0
  12. package/dist/DateFormat.js +6 -2
  13. package/dist/DateFormat.js.map +1 -0
  14. package/dist/LocaleData.d.ts +6 -0
  15. package/dist/LocaleData.js +6 -2
  16. package/dist/LocaleData.js.map +1 -0
  17. package/dist/dates/CalendarDate.d.ts +43 -0
  18. package/dist/dates/CalendarDate.js +171 -201
  19. package/dist/dates/CalendarDate.js.map +1 -0
  20. package/dist/dates/ExtremeDates.d.ts +5 -0
  21. package/dist/dates/ExtremeDates.js +25 -35
  22. package/dist/dates/ExtremeDates.js.map +1 -0
  23. package/dist/dates/UI5Date.d.ts +6 -0
  24. package/dist/dates/UI5Date.js +7 -0
  25. package/dist/dates/UI5Date.js.map +1 -0
  26. package/dist/dates/UniversalDate.d.ts +47 -0
  27. package/dist/dates/UniversalDate.js +5 -0
  28. package/dist/dates/UniversalDate.js.map +1 -0
  29. package/dist/dates/calculateWeekNumber.d.ts +5 -0
  30. package/dist/dates/calculateWeekNumber.js +42 -48
  31. package/dist/dates/calculateWeekNumber.js.map +1 -0
  32. package/dist/dates/convertMonthNumbersToMonthNames.d.ts +16 -0
  33. package/dist/dates/convertMonthNumbersToMonthNames.js +30 -0
  34. package/dist/dates/convertMonthNumbersToMonthNames.js.map +1 -0
  35. package/dist/dates/getDaysInMonth.d.ts +3 -0
  36. package/dist/dates/getDaysInMonth.js +10 -0
  37. package/dist/dates/getDaysInMonth.js.map +1 -0
  38. package/dist/dates/getRoundedTimestamp.d.ts +7 -0
  39. package/dist/dates/getRoundedTimestamp.js +10 -9
  40. package/dist/dates/getRoundedTimestamp.js.map +1 -0
  41. package/dist/dates/getTodayUTCTimestamp.d.ts +7 -0
  42. package/dist/dates/getTodayUTCTimestamp.js +3 -3
  43. package/dist/dates/getTodayUTCTimestamp.js.map +1 -0
  44. package/dist/dates/modifyDateBy.d.ts +14 -0
  45. package/dist/dates/modifyDateBy.js +42 -29
  46. package/dist/dates/modifyDateBy.js.map +1 -0
  47. package/dist/dates/transformDateToSecondaryType.d.ts +7 -0
  48. package/dist/dates/transformDateToSecondaryType.js +18 -0
  49. package/dist/dates/transformDateToSecondaryType.js.map +1 -0
  50. package/dist/features/calendar/Buddhist.js +1 -0
  51. package/dist/features/calendar/Buddhist.js.map +1 -0
  52. package/dist/features/calendar/Gregorian.js +1 -0
  53. package/dist/features/calendar/Gregorian.js.map +1 -0
  54. package/dist/features/calendar/Islamic.js +1 -0
  55. package/dist/features/calendar/Islamic.js.map +1 -0
  56. package/dist/features/calendar/Japanese.js +1 -0
  57. package/dist/features/calendar/Japanese.js.map +1 -0
  58. package/dist/features/calendar/Persian.js +1 -0
  59. package/dist/features/calendar/Persian.js.map +1 -0
  60. package/dist/generated/assets/cldr/ar.json +5531 -5906
  61. package/dist/generated/assets/cldr/ar_EG.json +5531 -5906
  62. package/dist/generated/assets/cldr/ar_SA.json +5530 -5906
  63. package/dist/generated/assets/cldr/bg.json +4452 -4979
  64. package/dist/generated/assets/cldr/ca.json +4440 -4996
  65. package/dist/generated/assets/cldr/cs.json +4960 -5498
  66. package/dist/generated/assets/cldr/cy.json +5211 -5884
  67. package/dist/generated/assets/cldr/da.json +4308 -4888
  68. package/dist/generated/assets/cldr/de.json +4313 -4916
  69. package/dist/generated/assets/cldr/de_AT.json +4314 -4917
  70. package/dist/generated/assets/cldr/de_CH.json +4312 -4915
  71. package/dist/generated/assets/cldr/el.json +4281 -4883
  72. package/dist/generated/assets/cldr/el_CY.json +4281 -4883
  73. package/dist/generated/assets/cldr/en.json +4316 -4971
  74. package/dist/generated/assets/cldr/en_AU.json +4319 -4962
  75. package/dist/generated/assets/cldr/en_GB.json +4329 -4971
  76. package/dist/generated/assets/cldr/en_HK.json +4337 -4977
  77. package/dist/generated/assets/cldr/en_IE.json +4328 -4971
  78. package/dist/generated/assets/cldr/en_IN.json +4333 -4972
  79. package/dist/generated/assets/cldr/en_NZ.json +4328 -4971
  80. package/dist/generated/assets/cldr/en_PG.json +4329 -4972
  81. package/dist/generated/assets/cldr/en_SG.json +4333 -4973
  82. package/dist/generated/assets/cldr/en_ZA.json +4329 -4972
  83. package/dist/generated/assets/cldr/es.json +4331 -4912
  84. package/dist/generated/assets/cldr/es_AR.json +4334 -4914
  85. package/dist/generated/assets/cldr/es_BO.json +4333 -4913
  86. package/dist/generated/assets/cldr/es_CL.json +4334 -4914
  87. package/dist/generated/assets/cldr/es_CO.json +4333 -4913
  88. package/dist/generated/assets/cldr/es_MX.json +4335 -4915
  89. package/dist/generated/assets/cldr/es_PE.json +4333 -4913
  90. package/dist/generated/assets/cldr/es_UY.json +4335 -4915
  91. package/dist/generated/assets/cldr/es_VE.json +4334 -4914
  92. package/dist/generated/assets/cldr/et.json +4340 -4967
  93. package/dist/generated/assets/cldr/fa.json +4367 -4883
  94. package/dist/generated/assets/cldr/fi.json +4463 -5008
  95. package/dist/generated/assets/cldr/fr.json +4357 -4979
  96. package/dist/generated/assets/cldr/fr_BE.json +4357 -4979
  97. package/dist/generated/assets/cldr/fr_CA.json +4351 -4973
  98. package/dist/generated/assets/cldr/fr_CH.json +4375 -4997
  99. package/dist/generated/assets/cldr/fr_LU.json +4357 -4979
  100. package/dist/generated/assets/cldr/he.json +4869 -5378
  101. package/dist/generated/assets/cldr/hi.json +4295 -4829
  102. package/dist/generated/assets/cldr/hr.json +4583 -4919
  103. package/dist/generated/assets/cldr/hu.json +4364 -4856
  104. package/dist/generated/assets/cldr/id.json +4060 -4658
  105. package/dist/generated/assets/cldr/it.json +4299 -4950
  106. package/dist/generated/assets/cldr/it_CH.json +4299 -4950
  107. package/dist/generated/assets/cldr/ja.json +4211 -4830
  108. package/dist/generated/assets/cldr/kk.json +4339 -4725
  109. package/dist/generated/assets/cldr/ko.json +4189 -4738
  110. package/dist/generated/assets/cldr/lt.json +4850 -5481
  111. package/dist/generated/assets/cldr/lv.json +4587 -5112
  112. package/dist/generated/assets/cldr/ms.json +4021 -4515
  113. package/dist/generated/assets/cldr/nb.json +4335 -4977
  114. package/dist/generated/assets/cldr/nl.json +4294 -4884
  115. package/dist/generated/assets/cldr/nl_BE.json +4294 -4884
  116. package/dist/generated/assets/cldr/pl.json +4667 -5176
  117. package/dist/generated/assets/cldr/pt.json +4235 -4805
  118. package/dist/generated/assets/cldr/pt_PT.json +4372 -4940
  119. package/dist/generated/assets/cldr/ro.json +4563 -5090
  120. package/dist/generated/assets/cldr/ru.json +4909 -5407
  121. package/dist/generated/assets/cldr/ru_UA.json +4909 -5407
  122. package/dist/generated/assets/cldr/sk.json +4939 -5370
  123. package/dist/generated/assets/cldr/sl.json +4910 -5340
  124. package/dist/generated/assets/cldr/sr.json +4585 -5126
  125. package/dist/generated/assets/cldr/sr_Latn.json +4574 -5127
  126. package/dist/generated/assets/cldr/sv.json +4362 -5011
  127. package/dist/generated/assets/cldr/th.json +4214 -4797
  128. package/dist/generated/assets/cldr/tr.json +4400 -4979
  129. package/dist/generated/assets/cldr/uk.json +4858 -5353
  130. package/dist/generated/assets/cldr/vi.json +4070 -4673
  131. package/dist/generated/assets/cldr/zh_CN.json +4100 -4632
  132. package/dist/generated/assets/cldr/zh_HK.json +4108 -4640
  133. package/dist/generated/assets/cldr/zh_SG.json +4108 -4640
  134. package/dist/generated/assets/cldr/zh_TW.json +4131 -4728
  135. package/dist/generated/json-imports/LocaleData-static.js +2 -1
  136. package/dist/generated/json-imports/LocaleData.js +75 -74
  137. package/dist/getCachedLocaleDataInstance.d.ts +4 -0
  138. package/dist/getCachedLocaleDataInstance.js +6 -9
  139. package/dist/getCachedLocaleDataInstance.js.map +1 -0
  140. package/dist/locale/getLocaleData.d.ts +11 -0
  141. package/dist/locale/getLocaleData.js +13 -17
  142. package/dist/locale/getLocaleData.js.map +1 -0
  143. package/dist/sap/base/Log.js +28 -29
  144. package/dist/sap/base/assert.js +5 -6
  145. package/dist/sap/base/i18n/LanguageTag.js +35 -0
  146. package/dist/sap/base/i18n/Localization.d.ts +4 -0
  147. package/dist/sap/base/i18n/Localization.js +12 -0
  148. package/dist/sap/base/i18n/Localization.js.map +1 -0
  149. package/dist/sap/base/i18n/date/CalendarType.js +8 -0
  150. package/dist/sap/base/i18n/date/CalendarWeekNumbering.js +30 -0
  151. package/dist/sap/base/i18n/date/TimezoneUtils.js +89 -0
  152. package/dist/sap/base/util/LoaderExtensions.d.ts +4 -0
  153. package/dist/sap/base/util/LoaderExtensions.js +9 -12
  154. package/dist/sap/base/util/LoaderExtensions.js.map +1 -0
  155. package/dist/sap/ui/base/Metadata.js +20 -9
  156. package/dist/sap/ui/core/CalendarType.js +2 -8
  157. package/dist/sap/ui/core/Configuration.d.ts +18 -0
  158. package/dist/sap/ui/core/Configuration.js +23 -0
  159. package/dist/sap/ui/core/Configuration.js.map +1 -0
  160. package/dist/sap/ui/core/Core.d.ts +27 -0
  161. package/dist/sap/ui/core/Core.js +7 -32
  162. package/dist/sap/ui/core/Core.js.map +1 -0
  163. package/dist/sap/ui/core/FormatSettings.d.ts +10 -0
  164. package/dist/sap/ui/core/FormatSettings.js +14 -0
  165. package/dist/sap/ui/core/FormatSettings.js.map +1 -0
  166. package/dist/sap/ui/core/Locale.js +28 -112
  167. package/dist/sap/ui/core/LocaleData.js +213 -40
  168. package/dist/sap/ui/core/date/Buddhist.js +0 -6
  169. package/dist/sap/ui/core/date/CalendarUtils.js +25 -0
  170. package/dist/sap/ui/core/date/CalendarWeekNumbering.js +2 -0
  171. package/dist/sap/ui/core/date/Islamic.js +3 -3
  172. package/dist/sap/ui/core/date/Japanese.js +4 -4
  173. package/dist/sap/ui/core/date/UI5Date.js +305 -0
  174. package/dist/sap/ui/core/date/UniversalDate.js +73 -26
  175. package/dist/sap/ui/core/format/DateFormat.js +848 -497
  176. package/dist/sap/ui/core/format/TimezoneUtil.js +2 -0
  177. package/{package-scripts.js → package-scripts.cjs} +7 -10
  178. package/package.json +7 -5
  179. package/tsconfig.json +14 -0
  180. package/used-modules.txt +9 -1
  181. package/hash.txt +0 -1
  182. package/src/Assets.js +0 -2
  183. package/src/DateFormat.js +0 -3
  184. package/src/LocaleData.js +0 -3
  185. package/src/dates/CalendarDate.js +0 -223
  186. package/src/dates/ExtremeDates.js +0 -39
  187. package/src/dates/calculateWeekNumber.js +0 -51
  188. package/src/dates/getRoundedTimestamp.js +0 -14
  189. package/src/dates/getTodayUTCTimestamp.js +0 -9
  190. package/src/dates/modifyDateBy.js +0 -42
  191. package/src/getCachedLocaleDataInstance.js +0 -13
  192. package/src/locale/getLocaleData.js +0 -27
  193. package/src/sap/base/util/LoaderExtensions.js +0 -17
  194. package/src/sap/ui/core/Core.js +0 -38
  195. /package/{config/.eslintrc.js → .eslintrc.cjs} +0 -0
  196. /package/{src/features/calendar/Buddhist.js → dist/features/calendar/Buddhist.d.ts} +0 -0
  197. /package/{src/features/calendar/Gregorian.js → dist/features/calendar/Gregorian.d.ts} +0 -0
  198. /package/{src/features/calendar/Islamic.js → dist/features/calendar/Islamic.d.ts} +0 -0
  199. /package/{src/features/calendar/Japanese.js → dist/features/calendar/Japanese.d.ts} +0 -0
  200. /package/{src/features/calendar/Persian.js → dist/features/calendar/Persian.d.ts} +0 -0
@@ -1,15 +1,30 @@
1
1
  import Core from './Core.js';
2
- import extend from '../../base/util/extend.js';
3
- import BaseObject from '../base/Object.js';
4
2
  import CalendarType from './CalendarType.js';
5
3
  import Locale from './Locale.js';
6
4
  import assert from '../../base/assert.js';
5
+ import Localization from '../../base/i18n/Localization.js';
6
+ import extend from '../../base/util/extend.js';
7
7
  import LoaderExtensions from '../../base/util/LoaderExtensions.js';
8
+ import BaseObject from '../base/Object.js';
9
+ import Configuration from './Configuration.js';
10
+ import CalendarWeekNumbering from './date/CalendarWeekNumbering.js';
11
+ var rCIgnoreCase = /c/i, rEIgnoreCase = /e/i, mLegacyUnit2CurrentUnit = {
12
+ 'acceleration-meter-per-second-squared': 'acceleration-meter-per-square-second',
13
+ 'concentr-milligram-per-deciliter': 'concentr-milligram-ofglucose-per-deciliter',
14
+ 'concentr-part-per-million': 'concentr-permillion',
15
+ 'consumption-liter-per-100kilometers': 'consumption-liter-per-100-kilometer',
16
+ 'pressure-millimeter-of-mercury': 'pressure-millimeter-ofhg',
17
+ 'pressure-pound-per-square-inch': 'pressure-pound-force-per-square-inch',
18
+ 'pressure-inch-hg': 'pressure-inch-ofhg',
19
+ 'torque-pound-foot': 'torque-pound-force-foot'
20
+ }, rNumberInScientificNotation = /^([+-]?)((\d+)(?:\.(\d+))?)[eE]([+-]?\d+)$/, rTrailingZeroes = /0+$/;
8
21
  var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
9
22
  constructor: function (oLocale) {
10
- this.oLocale = oLocale;
23
+ this.oLocale = Locale._getCoreLocale(oLocale);
11
24
  BaseObject.apply(this);
12
- this.mData = getData(oLocale);
25
+ var oDataLoaded = getData(this.oLocale);
26
+ this.mData = oDataLoaded.mData;
27
+ this.sCLDRLocaleId = oDataLoaded.sCLDRLocaleId;
13
28
  },
14
29
  _get: function () {
15
30
  return this._getDeep(this.mData, arguments);
@@ -33,7 +48,7 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
33
48
  getCurrentLanguageName: function () {
34
49
  var oLanguages = this.getLanguages();
35
50
  var sCurrentLanguage;
36
- var sLanguage = this.oLocale.getModernLanguage();
51
+ var sLanguage = Localization.getModernLanguage(this.oLocale.language);
37
52
  var sScript = this.oLocale.getScript();
38
53
  if (sLanguage === 'sr' && sScript === 'Latn') {
39
54
  sLanguage = 'sh';
@@ -95,6 +110,56 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
95
110
  assert(sStyle == 'short' || sStyle == 'medium' || sStyle == 'long' || sStyle == 'full', 'sStyle must be short, medium, long or full');
96
111
  return this._get(getCLDRCalendarName(sCalendarType), 'dateFormats', sStyle);
97
112
  },
113
+ getFlexibleDayPeriods: function (sWidth, sCalendarType) {
114
+ return this._get(getCLDRCalendarName(sCalendarType), 'flexibleDayPeriods', 'format', sWidth);
115
+ },
116
+ getFlexibleDayPeriodsStandAlone: function (sWidth, sCalendarType) {
117
+ return this._get(getCLDRCalendarName(sCalendarType), 'flexibleDayPeriods', 'stand-alone', sWidth);
118
+ },
119
+ getFlexibleDayPeriodOfTime: function (iHour, iMinute) {
120
+ var iAbsoluteMinutes, oDayPeriodRules, sPeriodMatch;
121
+ iAbsoluteMinutes = (iHour * 60 + iMinute) % 1440;
122
+ oDayPeriodRules = this._get('dayPeriodRules');
123
+ function parseToAbsoluteMinutes(sValue) {
124
+ var aSplit = sValue.split(':'), sHour = aSplit[0], sMinute = aSplit[1];
125
+ return parseInt(sHour) * 60 + parseInt(sMinute);
126
+ }
127
+ sPeriodMatch = Object.keys(oDayPeriodRules).find(function (sDayPeriodRule) {
128
+ var oDayPeriodRule = oDayPeriodRules[sDayPeriodRule];
129
+ return oDayPeriodRule['_at'] && parseToAbsoluteMinutes(oDayPeriodRule['_at']) === iAbsoluteMinutes;
130
+ });
131
+ if (sPeriodMatch) {
132
+ return sPeriodMatch;
133
+ }
134
+ return Object.keys(oDayPeriodRules).find(function (sDayPeriodRule) {
135
+ var iEndValue, aIntervals, iStartValue, oDayPeriodRule = oDayPeriodRules[sDayPeriodRule];
136
+ if (oDayPeriodRule['_at']) {
137
+ return false;
138
+ }
139
+ iStartValue = parseToAbsoluteMinutes(oDayPeriodRule['_from']);
140
+ iEndValue = parseToAbsoluteMinutes(oDayPeriodRule['_before']);
141
+ if (iStartValue > iEndValue) {
142
+ aIntervals = [
143
+ {
144
+ start: iStartValue,
145
+ end: 1440
146
+ },
147
+ {
148
+ start: 0,
149
+ end: iEndValue
150
+ }
151
+ ];
152
+ } else {
153
+ aIntervals = [{
154
+ start: iStartValue,
155
+ end: iEndValue
156
+ }];
157
+ }
158
+ return aIntervals.some(function (oInterval) {
159
+ return oInterval.start <= iAbsoluteMinutes && oInterval.end > iAbsoluteMinutes;
160
+ });
161
+ });
162
+ },
98
163
  getTimePattern: function (sStyle, sCalendarType) {
99
164
  assert(sStyle == 'short' || sStyle == 'medium' || sStyle == 'long' || sStyle == 'full', 'sStyle must be short, medium, long or full');
100
165
  return this._get(getCLDRCalendarName(sCalendarType), 'timeFormats', sStyle);
@@ -109,6 +174,24 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
109
174
  var sDateTimePattern = this.getDateTimePattern(sDateStyle, sCalendarType), sDatePattern = this.getDatePattern(sDateStyle, sCalendarType), sTimePattern = this.getTimePattern(sTimeStyle, sCalendarType);
110
175
  return sDateTimePattern.replace('{0}', sTimePattern).replace('{1}', sDatePattern);
111
176
  },
177
+ getCombinedDateTimeWithTimezonePattern: function (sDateStyle, sTimeStyle, sCalendarType) {
178
+ return this.applyTimezonePattern(this.getCombinedDateTimePattern(sDateStyle, sTimeStyle, sCalendarType));
179
+ },
180
+ applyTimezonePattern: function (sPattern) {
181
+ var aPatterns = [sPattern];
182
+ var aMissingTokens = [{
183
+ group: 'Timezone',
184
+ length: 2,
185
+ field: 'zone',
186
+ symbol: 'V'
187
+ }];
188
+ this._appendItems(aPatterns, aMissingTokens);
189
+ return aPatterns[0];
190
+ },
191
+ getTimezoneTranslations: function () {
192
+ this.mTimezoneTranslations = this.mTimezoneTranslations || _resolveTimezoneTranslationStructure(this._get('timezoneNames'));
193
+ return Object.assign({}, this.mTimezoneTranslations);
194
+ },
112
195
  getCustomDateTimePattern: function (sSkeleton, sCalendarType) {
113
196
  var oAvailableFormats = this._get(getCLDRCalendarName(sCalendarType), 'dateTimeFormats', 'availableFormats');
114
197
  return this._getFormatPattern(sSkeleton, oAvailableFormats, sCalendarType);
@@ -571,11 +654,14 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
571
654
  oTimeEntry = oScale[sEntry];
572
655
  iSign = sEntry.substr(18) === 'past' ? -1 : 1;
573
656
  aPluralCategories.forEach(function (sKey) {
574
- aPatterns.push({
575
- scale: sScale,
576
- sign: iSign,
577
- pattern: oTimeEntry['relativeTimePattern-count-' + sKey]
578
- });
657
+ var sPattern = oTimeEntry['relativeTimePattern-count-' + sKey];
658
+ if (sPattern) {
659
+ aPatterns.push({
660
+ scale: sScale,
661
+ sign: iSign,
662
+ pattern: sPattern
663
+ });
664
+ }
579
665
  });
580
666
  }
581
667
  }
@@ -698,7 +784,11 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
698
784
  return this.getUnitFormat(sUnit);
699
785
  },
700
786
  getUnitFormat: function (sUnit) {
701
- return this._get('units', 'short', sUnit);
787
+ var oResult = this._get('units', 'short', sUnit);
788
+ if (!oResult && mLegacyUnit2CurrentUnit[sUnit]) {
789
+ oResult = this._get('units', 'short', mLegacyUnit2CurrentUnit[sUnit]);
790
+ }
791
+ return oResult;
702
792
  },
703
793
  getUnitFormats: function () {
704
794
  return this._getMerged('units', 'short');
@@ -727,10 +817,10 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
727
817
  return oMessageBundle.getText(sKey, iWeekNumber);
728
818
  },
729
819
  firstDayStartsFirstWeek: function () {
730
- return this._get('weekData-algorithm') === 'FIRSTDAY_STARTS_FIRSTWEEK';
820
+ return this.oLocale.getLanguage() === 'en' && this.oLocale.getRegion() === 'US';
731
821
  },
732
822
  getPreferredCalendarType: function () {
733
- var sCalendarPreference = this._get('calendarPreference'), aCalendars = sCalendarPreference ? sCalendarPreference.split(' ') : [], sCalendarName, sType, i;
823
+ var sCalendarName, sType, i, aCalendars = this._get('calendarPreference') || [];
734
824
  for (i = 0; i < aCalendars.length; i++) {
735
825
  sCalendarName = aCalendars[i].split('-')[0];
736
826
  for (sType in CalendarType) {
@@ -749,11 +839,8 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
749
839
  aCategories.push('other');
750
840
  return aCategories;
751
841
  },
752
- getPluralCategory: function (sNumber) {
753
- var oPlurals = this._get('plurals');
754
- if (typeof sNumber === 'number') {
755
- sNumber = sNumber.toString();
756
- }
842
+ getPluralCategory: function (vNumber) {
843
+ var sNumber = typeof vNumber === 'number' ? vNumber.toString() : vNumber, oPlurals = this._get('plurals');
757
844
  if (!this._pluralTest) {
758
845
  this._pluralTest = {};
759
846
  }
@@ -763,14 +850,14 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
763
850
  fnTest = this._parsePluralRule(oPlurals[sCategory]);
764
851
  this._pluralTest[sCategory] = fnTest;
765
852
  }
766
- if (fnTest(sNumber)) {
853
+ if (fnTest(sNumber).bMatch) {
767
854
  return sCategory;
768
855
  }
769
856
  }
770
857
  return 'other';
771
858
  },
772
859
  _parsePluralRule: function (sRule) {
773
- var OP_OR = 'or', OP_AND = 'and', OP_MOD = '%', OP_EQ = '=', OP_NEQ = '!=', OPD_N = 'n', OPD_I = 'i', OPD_F = 'f', OPD_T = 't', OPD_V = 'v', OPD_W = 'w', RANGE = '..', SEP = ',';
860
+ var OP_OR = 'or', OP_AND = 'and', OP_MOD = '%', OP_EQ = '=', OP_NEQ = '!=', OPD_N = 'n', OPD_I = 'i', OPD_F = 'f', OPD_T = 't', OPD_V = 'v', OPD_W = 'w', OPD_C = 'c', OPD_E = 'e', RANGE = '..', SEP = ',';
774
861
  var i = 0, aTokens;
775
862
  aTokens = sRule.split(' ');
776
863
  function accept(sToken) {
@@ -864,6 +951,14 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
864
951
  return function (o) {
865
952
  return o.w;
866
953
  };
954
+ } else if (accept(OPD_C)) {
955
+ return function (o) {
956
+ return o.c;
957
+ };
958
+ } else if (accept(OPD_E)) {
959
+ return function (o) {
960
+ return o.c;
961
+ };
867
962
  } else {
868
963
  throw new Error('Unknown operand: ' + consume());
869
964
  }
@@ -891,28 +986,59 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
891
986
  throw new Error('Not completely parsed');
892
987
  }
893
988
  return function (sValue) {
894
- var iDotPos = sValue.indexOf('.'), sDecimal, sFraction, sFractionNoZeros, o;
989
+ var iDotPos, iExponent, iExponentPos, sFraction, sFractionNoZeros, sInteger, o;
990
+ sValue = sValue.replace(rCIgnoreCase, 'e');
991
+ iExponentPos = sValue.search(rEIgnoreCase);
992
+ iExponent = iExponentPos < 0 ? 0 : parseInt(sValue.slice(iExponentPos + 1));
993
+ sValue = LocaleData.convertToDecimal(sValue);
994
+ iDotPos = sValue.indexOf('.');
895
995
  if (iDotPos === -1) {
896
- sDecimal = sValue;
996
+ sInteger = sValue;
897
997
  sFraction = '';
898
998
  sFractionNoZeros = '';
899
999
  } else {
900
- sDecimal = sValue.substr(0, iDotPos);
901
- sFraction = sValue.substr(iDotPos + 1);
902
- sFractionNoZeros = sFraction.replace(/0+$/, '');
1000
+ sInteger = sValue.slice(0, iDotPos);
1001
+ sFraction = sValue.slice(iDotPos + 1);
1002
+ sFractionNoZeros = sFraction.replace(rTrailingZeroes, '');
903
1003
  }
904
1004
  o = {
905
1005
  n: parseFloat(sValue),
906
- i: parseInt(sDecimal),
1006
+ i: parseInt(sInteger),
907
1007
  v: sFraction.length,
908
1008
  w: sFractionNoZeros.length,
909
- f: parseInt(sFraction),
910
- t: parseInt(sFractionNoZeros)
1009
+ f: sFraction === '' ? 0 : parseInt(sFraction),
1010
+ t: sFractionNoZeros === '' ? 0 : parseInt(sFractionNoZeros),
1011
+ c: iExponent
1012
+ };
1013
+ return {
1014
+ bMatch: fnOr(o),
1015
+ oOperands: o
911
1016
  };
912
- return fnOr(o);
913
1017
  };
914
1018
  }
915
1019
  });
1020
+ LocaleData.convertToDecimal = function (vValue) {
1021
+ var iIntegerLength, iExponent, iFractionLength, bNegative, iNewIntegerLength, aResult, sValue = String(vValue);
1022
+ if (!sValue.includes('e') && !sValue.includes('E')) {
1023
+ return sValue;
1024
+ }
1025
+ aResult = sValue.match(rNumberInScientificNotation);
1026
+ bNegative = aResult[1] === '-';
1027
+ sValue = aResult[2].replace('.', '');
1028
+ iIntegerLength = aResult[3] ? aResult[3].length : 0;
1029
+ iFractionLength = aResult[4] ? aResult[4].length : 0;
1030
+ iExponent = parseInt(aResult[5]);
1031
+ iNewIntegerLength = iIntegerLength + iExponent;
1032
+ if (iExponent > 0) {
1033
+ sValue = iExponent < iFractionLength ? sValue.slice(0, iNewIntegerLength) + '.' + sValue.slice(iNewIntegerLength) : sValue = sValue.padEnd(iNewIntegerLength, '0');
1034
+ } else {
1035
+ sValue = -iExponent < iIntegerLength ? sValue = sValue.slice(0, iNewIntegerLength) + '.' + sValue.slice(iNewIntegerLength) : sValue = '0.' + sValue.padStart(iFractionLength - iExponent, '0');
1036
+ }
1037
+ if (bNegative) {
1038
+ sValue = '-' + sValue;
1039
+ }
1040
+ return sValue;
1041
+ };
916
1042
  var mCLDRSymbolGroups = {
917
1043
  'Era': {
918
1044
  field: 'era',
@@ -1141,12 +1267,13 @@ var mCLDRSymbols = {
1141
1267
  numericCeiling: 100
1142
1268
  }
1143
1269
  };
1144
- var M_ISO639_OLD_TO_NEW = {
1145
- 'iw': 'he',
1146
- 'ji': 'yi'
1147
- };
1270
+ function getDesigntimePropertyAsArray(sValue) {
1271
+ var m = /\$([-a-z0-9A-Z._]+)(?::([^$]*))?\$/.exec(sValue);
1272
+ return m && m[2] ? m[2].split(/,/) : null;
1273
+ }
1274
+ var _cldrLocales = getDesigntimePropertyAsArray('$cldr-locales:ar,ar_EG,ar_SA,bg,ca,cy,cs,da,de,de_AT,de_CH,el,el_CY,en,en_AU,en_GB,en_HK,en_IE,en_IN,en_NZ,en_PG,en_SG,en_ZA,es,es_AR,es_BO,es_CL,es_CO,es_MX,es_PE,es_UY,es_VE,et,fa,fi,fr,fr_BE,fr_CA,fr_CH,fr_LU,he,hi,hr,hu,id,it,it_CH,ja,kk,ko,lt,lv,ms,nb,nl,nl_BE,pl,pt,pt_PT,ro,ru,ru_UA,sk,sl,sr,sr_Latn,sv,th,tr,uk,vi,zh_CN,zh_HK,zh_SG,zh_TW$');
1148
1275
  var M_SUPPORTED_LOCALES = function () {
1149
- var LOCALES = Locale._cldrLocales, result = {}, i;
1276
+ var LOCALES = _cldrLocales, result = {}, i;
1150
1277
  if (LOCALES) {
1151
1278
  for (i = 0; i < LOCALES.length; i++) {
1152
1279
  result[LOCALES[i]] = true;
@@ -1155,9 +1282,29 @@ var M_SUPPORTED_LOCALES = function () {
1155
1282
  return result;
1156
1283
  }();
1157
1284
  var mLocaleDatas = {};
1285
+ function _resolveTimezoneTranslationStructure(oNode, sKey, oResult, aParentTranslations) {
1286
+ aParentTranslations = aParentTranslations ? aParentTranslations.slice() : [];
1287
+ oResult = oResult || {};
1288
+ sKey = sKey || '';
1289
+ Object.keys(oNode).forEach(function (sChildKey) {
1290
+ var vChildNode = oNode[sChildKey];
1291
+ if (typeof vChildNode === 'object') {
1292
+ var aParentTranslationForChild = aParentTranslations.slice();
1293
+ var sParent = vChildNode['_parent'];
1294
+ if (sParent) {
1295
+ aParentTranslationForChild.push(sParent);
1296
+ }
1297
+ _resolveTimezoneTranslationStructure(vChildNode, sKey + sChildKey + '/', oResult, aParentTranslationForChild);
1298
+ } else if (typeof vChildNode === 'string' && sChildKey !== '_parent') {
1299
+ var sParents = aParentTranslations.length ? aParentTranslations.join(', ') + ', ' : '';
1300
+ oResult[sKey + sChildKey] = sParents + vChildNode;
1301
+ }
1302
+ });
1303
+ return oResult;
1304
+ }
1158
1305
  function getCLDRCalendarName(sCalendarType) {
1159
1306
  if (!sCalendarType) {
1160
- sCalendarType = Core.getConfiguration().getCalendarType();
1307
+ sCalendarType = Configuration.getCalendarType();
1161
1308
  }
1162
1309
  return 'ca-' + sCalendarType.toLowerCase();
1163
1310
  }
@@ -1176,7 +1323,7 @@ function getData(oLocale) {
1176
1323
  obj[name] = fallbackValue;
1177
1324
  } else if (value === null) {
1178
1325
  delete obj[name];
1179
- } else if (typeof value === 'object' && typeof fallbackValue === 'object') {
1326
+ } else if (typeof value === 'object' && typeof fallbackValue === 'object' && !Array.isArray(value)) {
1180
1327
  merge(value, fallbackValue);
1181
1328
  }
1182
1329
  }
@@ -1195,7 +1342,7 @@ function getData(oLocale) {
1195
1342
  }
1196
1343
  return mLocaleDatas[sId];
1197
1344
  }
1198
- sLanguage = sLanguage && M_ISO639_OLD_TO_NEW[sLanguage] || sLanguage;
1345
+ sLanguage = sLanguage && Localization.getModernLanguage(sLanguage) || sLanguage;
1199
1346
  if (sLanguage === 'no') {
1200
1347
  sLanguage = 'nb';
1201
1348
  }
@@ -1210,19 +1357,29 @@ function getData(oLocale) {
1210
1357
  sLanguage = 'sr_Latn';
1211
1358
  }
1212
1359
  var sId = sLanguage + '_' + sRegion;
1360
+ var sCLDRLocaleId = sId;
1213
1361
  if (sLanguage && sRegion) {
1214
1362
  mData = getOrLoad(sId);
1215
1363
  }
1216
1364
  if (!mData && sLanguage) {
1217
1365
  mData = getOrLoad(sLanguage);
1366
+ sCLDRLocaleId = sLanguage;
1367
+ }
1368
+ if (!mData) {
1369
+ mData = getOrLoad('en');
1370
+ sCLDRLocaleId = 'en';
1218
1371
  }
1219
- mLocaleDatas[sId] = mData || getOrLoad('en');
1220
- return mLocaleDatas[sId];
1372
+ mLocaleDatas[sId] = mData;
1373
+ sCLDRLocaleId = sCLDRLocaleId.replace(/_/g, '-');
1374
+ return {
1375
+ mData: mData,
1376
+ sCLDRLocaleId: sCLDRLocaleId
1377
+ };
1221
1378
  }
1222
1379
  var CustomLocaleData = LocaleData.extend('sap.ui.core.CustomLocaleData', {
1223
1380
  constructor: function (oLocale) {
1224
1381
  LocaleData.apply(this, arguments);
1225
- this.mCustomData = Core.getConfiguration().getFormatSettings().getCustomLocaleData();
1382
+ this.mCustomData = Configuration.getFormatSettings().getCustomLocaleData();
1226
1383
  },
1227
1384
  _get: function () {
1228
1385
  var aArguments = Array.prototype.slice.call(arguments), sCalendar, sKey;
@@ -1246,9 +1403,25 @@ var CustomLocaleData = LocaleData.extend('sap.ui.core.CustomLocaleData', {
1246
1403
  var mData = this._getDeep(this.mData, arguments);
1247
1404
  var mCustomData = this._getDeep(this.mCustomData, arguments);
1248
1405
  return extend({}, mData, mCustomData);
1406
+ },
1407
+ getFirstDayOfWeek: function () {
1408
+ var sCalendarWeekNumbering = Configuration.getCalendarWeekNumbering();
1409
+ if (sCalendarWeekNumbering === CalendarWeekNumbering.Default) {
1410
+ return LocaleData.prototype.getFirstDayOfWeek.call(this);
1411
+ }
1412
+ return CalendarWeekNumbering.getWeekConfigurationValues(sCalendarWeekNumbering).firstDayOfWeek;
1413
+ },
1414
+ getMinimalDaysInFirstWeek: function () {
1415
+ var sCalendarWeekNumbering = Configuration.getCalendarWeekNumbering();
1416
+ if (sCalendarWeekNumbering === CalendarWeekNumbering.Default) {
1417
+ return LocaleData.prototype.getMinimalDaysInFirstWeek.call(this);
1418
+ }
1419
+ return CalendarWeekNumbering.getWeekConfigurationValues(sCalendarWeekNumbering).minimalDaysInFirstWeek;
1249
1420
  }
1250
1421
  });
1251
1422
  LocaleData.getInstance = function (oLocale) {
1423
+ oLocale = Locale._getCoreLocale(oLocale);
1252
1424
  return oLocale.hasPrivateUseSubtag('sapufmt') ? new CustomLocaleData(oLocale) : new LocaleData(oLocale);
1253
1425
  };
1426
+ LocaleData._cldrLocales = _cldrLocales;
1254
1427
  export default LocaleData;
@@ -117,11 +117,5 @@ Buddhist.prototype.setUTCFullYear = function (iYear, iMonth, iDay) {
117
117
  }
118
118
  return this._setUTCBuddhist(oBuddhist);
119
119
  };
120
- Buddhist.prototype.getWeek = function () {
121
- return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getFullYear(), this.getMonth(), this.getDate());
122
- };
123
- Buddhist.prototype.getUTCWeek = function () {
124
- return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate());
125
- };
126
120
  _Calendars.set(CalendarType.Buddhist, Buddhist);
127
121
  export default Buddhist;
@@ -0,0 +1,25 @@
1
+ import CalendarWeekNumbering from './CalendarWeekNumbering.js';
2
+ import Configuration from '../Configuration.js';
3
+ import LocaleData from '../LocaleData.js';
4
+ var CalendarUtils = {
5
+ getWeekConfigurationValues: function (sCalendarWeekNumbering, oLocale) {
6
+ var oLocaleData, oWeekConfigurationValues;
7
+ if (!sCalendarWeekNumbering) {
8
+ return CalendarUtils.getWeekConfigurationValues(Configuration.getCalendarWeekNumbering(), oLocale);
9
+ }
10
+ oWeekConfigurationValues = CalendarWeekNumbering.getWeekConfigurationValues(sCalendarWeekNumbering);
11
+ if (oWeekConfigurationValues) {
12
+ return oWeekConfigurationValues;
13
+ }
14
+ if (sCalendarWeekNumbering === CalendarWeekNumbering.Default) {
15
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
16
+ oLocaleData = LocaleData.getInstance(oLocale);
17
+ return {
18
+ firstDayOfWeek: oLocaleData.getFirstDayOfWeek(),
19
+ minimalDaysInFirstWeek: oLocaleData.getMinimalDaysInFirstWeek()
20
+ };
21
+ }
22
+ return undefined;
23
+ }
24
+ };
25
+ export default CalendarUtils;
@@ -0,0 +1,2 @@
1
+ import CalendarWeekNumbering from '../../../base/i18n/date/CalendarWeekNumbering.js';
2
+ export default CalendarWeekNumbering;
@@ -1,8 +1,8 @@
1
- import Core from '../Core.js';
2
1
  import UniversalDate from './UniversalDate.js';
3
2
  import CalendarType from '../CalendarType.js';
4
3
  import Log from '../../../base/Log.js';
5
4
  import _Calendars from './_Calendars.js';
5
+ import Configuration from '../Configuration.js';
6
6
  var Islamic = UniversalDate.extend('sap.ui.core.date.Islamic', {
7
7
  constructor: function () {
8
8
  var aArgs = arguments;
@@ -102,9 +102,9 @@ function toGregorianArguments(aArgs) {
102
102
  function initCustomizationMap() {
103
103
  var sDateFormat, oCustomizationJSON;
104
104
  oCustomizationMap = {};
105
- sDateFormat = Core.getConfiguration().getFormatSettings().getLegacyDateFormat();
105
+ sDateFormat = Configuration.getFormatSettings().getLegacyDateFormat();
106
106
  sDateFormat = _isSupportedIslamicCalendarType(sDateFormat) ? sDateFormat : 'A';
107
- oCustomizationJSON = Core.getConfiguration().getFormatSettings().getLegacyDateCalendarCustomizing();
107
+ oCustomizationJSON = Configuration.getFormatSettings().getLegacyDateCalendarCustomizing();
108
108
  oCustomizationJSON = oCustomizationJSON || [];
109
109
  if (!oCustomizationJSON.length) {
110
110
  Log.warning('No calendar customizations.');
@@ -152,11 +152,11 @@ Japanese.prototype.setUTCEra = function (iEra, iYear, iMonth, iDay) {
152
152
  }
153
153
  return this._setUTCJapanese(oJapanese);
154
154
  };
155
- Japanese.prototype.getWeek = function () {
156
- return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getFullYear(), this.getMonth(), this.getDate());
155
+ Japanese.prototype.getWeek = function (oLocale, vCalendarWeekNumbering) {
156
+ return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getFullYear(), this.getMonth(), this.getDate(), oLocale, vCalendarWeekNumbering);
157
157
  };
158
- Japanese.prototype.getUTCWeek = function () {
159
- return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate());
158
+ Japanese.prototype.getUTCWeek = function (oLocale, vCalendarWeekNumbering) {
159
+ return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate(), oLocale, vCalendarWeekNumbering);
160
160
  };
161
161
  _Calendars.set(CalendarType.Japanese, Japanese);
162
162
  export default Japanese;