@ui5/webcomponents-localization 0.0.0-d010d8832 → 0.0.0-d1315d658

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 (109) hide show
  1. package/CHANGELOG.md +138 -0
  2. package/dist/dates/CalendarDate.d.ts +2 -2
  3. package/dist/dates/CalendarDate.js.map +1 -1
  4. package/dist/dates/ExtremeDates.d.ts +2 -2
  5. package/dist/dates/ExtremeDates.js.map +1 -1
  6. package/dist/dates/UniversalDate.d.ts +1 -1
  7. package/dist/dates/UniversalDate.js.map +1 -1
  8. package/dist/dates/convertMonthNumbersToMonthNames.d.ts +1 -1
  9. package/dist/dates/convertMonthNumbersToMonthNames.js.map +1 -1
  10. package/dist/dates/getTodayUTCTimestamp.d.ts +1 -1
  11. package/dist/dates/getTodayUTCTimestamp.js.map +1 -1
  12. package/dist/dates/modifyDateBy.d.ts +2 -1
  13. package/dist/dates/modifyDateBy.js +34 -19
  14. package/dist/dates/modifyDateBy.js.map +1 -1
  15. package/dist/dates/transformDateToSecondaryType.d.ts +1 -1
  16. package/dist/dates/transformDateToSecondaryType.js.map +1 -1
  17. package/dist/generated/assets/cldr/ar.json +2715 -0
  18. package/dist/generated/assets/cldr/ar_EG.json +2715 -0
  19. package/dist/generated/assets/cldr/ar_SA.json +2715 -0
  20. package/dist/generated/assets/cldr/bg.json +1719 -0
  21. package/dist/generated/assets/cldr/ca.json +1760 -0
  22. package/dist/generated/assets/cldr/cs.json +2244 -0
  23. package/dist/generated/assets/cldr/cy.json +2414 -0
  24. package/dist/generated/assets/cldr/da.json +1711 -0
  25. package/dist/generated/assets/cldr/de.json +1699 -0
  26. package/dist/generated/assets/cldr/de_AT.json +1700 -0
  27. package/dist/generated/assets/cldr/de_CH.json +1698 -0
  28. package/dist/generated/assets/cldr/el.json +1686 -0
  29. package/dist/generated/assets/cldr/el_CY.json +1686 -0
  30. package/dist/generated/assets/cldr/en.json +1733 -0
  31. package/dist/generated/assets/cldr/en_AU.json +1727 -0
  32. package/dist/generated/assets/cldr/en_GB.json +1745 -0
  33. package/dist/generated/assets/cldr/en_HK.json +1744 -0
  34. package/dist/generated/assets/cldr/en_IE.json +1744 -0
  35. package/dist/generated/assets/cldr/en_IN.json +1745 -0
  36. package/dist/generated/assets/cldr/en_NZ.json +1744 -0
  37. package/dist/generated/assets/cldr/en_PG.json +1745 -0
  38. package/dist/generated/assets/cldr/en_SG.json +1745 -0
  39. package/dist/generated/assets/cldr/en_ZA.json +1745 -0
  40. package/dist/generated/assets/cldr/es.json +1691 -0
  41. package/dist/generated/assets/cldr/es_AR.json +1689 -0
  42. package/dist/generated/assets/cldr/es_BO.json +1688 -0
  43. package/dist/generated/assets/cldr/es_CL.json +1689 -0
  44. package/dist/generated/assets/cldr/es_CO.json +1689 -0
  45. package/dist/generated/assets/cldr/es_MX.json +1690 -0
  46. package/dist/generated/assets/cldr/es_PE.json +1688 -0
  47. package/dist/generated/assets/cldr/es_UY.json +1690 -0
  48. package/dist/generated/assets/cldr/es_VE.json +1689 -0
  49. package/dist/generated/assets/cldr/et.json +1741 -0
  50. package/dist/generated/assets/cldr/fa.json +1749 -0
  51. package/dist/generated/assets/cldr/fi.json +1737 -0
  52. package/dist/generated/assets/cldr/fr.json +1767 -0
  53. package/dist/generated/assets/cldr/fr_BE.json +1767 -0
  54. package/dist/generated/assets/cldr/fr_CA.json +1746 -0
  55. package/dist/generated/assets/cldr/fr_CH.json +1768 -0
  56. package/dist/generated/assets/cldr/fr_LU.json +1767 -0
  57. package/dist/generated/assets/cldr/he.json +2158 -0
  58. package/dist/generated/assets/cldr/hi.json +1693 -0
  59. package/dist/generated/assets/cldr/hr.json +1931 -0
  60. package/dist/generated/assets/cldr/hu.json +1766 -0
  61. package/dist/generated/assets/cldr/id.json +1516 -0
  62. package/dist/generated/assets/cldr/it.json +1709 -0
  63. package/dist/generated/assets/cldr/it_CH.json +1709 -0
  64. package/dist/generated/assets/cldr/ja.json +1548 -0
  65. package/dist/generated/assets/cldr/kk.json +1750 -0
  66. package/dist/generated/assets/cldr/ko.json +1548 -0
  67. package/dist/generated/assets/cldr/lt.json +2130 -0
  68. package/dist/generated/assets/cldr/lv.json +1943 -0
  69. package/dist/generated/assets/cldr/ms.json +1483 -0
  70. package/dist/generated/assets/cldr/nb.json +1714 -0
  71. package/dist/generated/assets/cldr/nl.json +1693 -0
  72. package/dist/generated/assets/cldr/nl_BE.json +1693 -0
  73. package/dist/generated/assets/cldr/pl.json +1944 -0
  74. package/dist/generated/assets/cldr/pt.json +1628 -0
  75. package/dist/generated/assets/cldr/pt_PT.json +1714 -0
  76. package/dist/generated/assets/cldr/ro.json +1918 -0
  77. package/dist/generated/assets/cldr/ru.json +2205 -0
  78. package/dist/generated/assets/cldr/ru_UA.json +2205 -0
  79. package/dist/generated/assets/cldr/sk.json +2213 -0
  80. package/dist/generated/assets/cldr/sl.json +2222 -0
  81. package/dist/generated/assets/cldr/sr.json +1922 -0
  82. package/dist/generated/assets/cldr/sr_Latn.json +1908 -0
  83. package/dist/generated/assets/cldr/sv.json +1731 -0
  84. package/dist/generated/assets/cldr/th.json +1579 -0
  85. package/dist/generated/assets/cldr/tr.json +1788 -0
  86. package/dist/generated/assets/cldr/uk.json +2174 -0
  87. package/dist/generated/assets/cldr/vi.json +1515 -0
  88. package/dist/generated/assets/cldr/zh_CN.json +1545 -0
  89. package/dist/generated/assets/cldr/zh_HK.json +1545 -0
  90. package/dist/generated/assets/cldr/zh_SG.json +1546 -0
  91. package/dist/generated/assets/cldr/zh_TW.json +1544 -0
  92. package/dist/sap/base/i18n/LanguageTag.js +35 -0
  93. package/dist/sap/base/i18n/Localization.d.ts +4 -0
  94. package/dist/sap/base/i18n/Localization.js +12 -0
  95. package/dist/sap/base/i18n/Localization.js.map +1 -0
  96. package/dist/sap/base/i18n/date/CalendarType.js +8 -0
  97. package/dist/sap/base/i18n/date/CalendarWeekNumbering.js +30 -0
  98. package/dist/sap/base/i18n/date/TimezoneUtils.js +89 -0
  99. package/dist/sap/ui/base/Metadata.js +20 -9
  100. package/dist/sap/ui/core/CalendarType.js +2 -8
  101. package/dist/sap/ui/core/Locale.js +28 -125
  102. package/dist/sap/ui/core/LocaleData.js +36 -18
  103. package/dist/sap/ui/core/date/CalendarUtils.js +7 -18
  104. package/dist/sap/ui/core/date/CalendarWeekNumbering.js +2 -7
  105. package/dist/sap/ui/core/date/UniversalDate.js +5 -16
  106. package/dist/sap/ui/core/format/DateFormat.js +79 -37
  107. package/dist/sap/ui/core/format/TimezoneUtil.js +2 -89
  108. package/package.json +6 -6
  109. package/used-modules.txt +4 -0
@@ -0,0 +1,35 @@
1
+ var rLanguageTag = /^((?:[A-Z]{2,3}(?:-[A-Z]{3}){0,3})|[A-Z]{4}|[A-Z]{5,8})(?:-([A-Z]{4}))?(?:-([A-Z]{2}|[0-9]{3}))?((?:-[0-9A-Z]{5,8}|-[0-9][0-9A-Z]{3})*)((?:-[0-9A-WYZ](?:-[0-9A-Z]{2,8})+)*)(?:-(X(?:-[0-9A-Z]{1,8})+))?$/i;
2
+ var LanguageTag = function (sLanguageTag) {
3
+ var aResult = rLanguageTag.exec(sLanguageTag.replace(/_/g, "-"));
4
+ if (aResult === null) {
5
+ throw new TypeError("The given language tag'" + sLanguageTag + "' does not adhere to BCP-47.");
6
+ }
7
+ this.language = aResult[1] || null;
8
+ this.script = aResult[2] || null;
9
+ this.region = aResult[3] || null;
10
+ this.variant = aResult[4] && aResult[4].slice(1) || null;
11
+ this.variantSubtags = this.variant ? this.variant.split("-") : [];
12
+ this.extension = aResult[5] && aResult[5].slice(1) || null;
13
+ this.extensionSubtags = this.variant ? this.variant.split("-") : [];
14
+ this.privateUse = aResult[6] || null;
15
+ this.privateUseSubtags = this.privateUse ? this.privateUse.slice(2).split("-") : [];
16
+ if (this.language) {
17
+ this.language = this.language.toLowerCase();
18
+ }
19
+ if (this.script) {
20
+ this.script = this.script.toLowerCase().replace(/^[a-z]/, function ($) {
21
+ return $.toUpperCase();
22
+ });
23
+ }
24
+ if (this.region) {
25
+ this.region = this.region.toUpperCase();
26
+ }
27
+ Object.freeze(this);
28
+ };
29
+ LanguageTag.prototype.toString = function () {
30
+ return join(this.language, this.script, this.region, this.variant, this.extension, this.privateUse);
31
+ };
32
+ function join() {
33
+ return Array.prototype.filter.call(arguments, Boolean).join("-");
34
+ }
35
+ export default LanguageTag;
@@ -0,0 +1,4 @@
1
+ declare const Localization: {
2
+ getModernLanguage: (sLanguage: string) => string;
3
+ };
4
+ export default Localization;
@@ -0,0 +1,12 @@
1
+ const M_ISO639_OLD_TO_NEW = {
2
+ "iw": "he",
3
+ "ji": "yi",
4
+ };
5
+ const getModernLanguage = (sLanguage) => {
6
+ return M_ISO639_OLD_TO_NEW[sLanguage] || sLanguage;
7
+ };
8
+ const Localization = {
9
+ getModernLanguage,
10
+ };
11
+ export default Localization;
12
+ //# sourceMappingURL=Localization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Localization.js","sourceRoot":"","sources":["../../../../src/sap/base/i18n/Localization.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAAG;IAC3B,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;CACV,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,EAAE;IAC/C,OAAO,mBAAmB,CAAC,SAA6C,CAAC,IAAI,SAAS,CAAC;AACxF,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG;IACpB,iBAAiB;CACjB,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["const M_ISO639_OLD_TO_NEW = {\n\t\"iw\": \"he\",\n\t\"ji\": \"yi\",\n};\n\nconst getModernLanguage = (sLanguage: string) => {\n\treturn M_ISO639_OLD_TO_NEW[sLanguage as keyof typeof M_ISO639_OLD_TO_NEW] || sLanguage;\n};\n\nconst Localization = {\n\tgetModernLanguage,\n};\n\nexport default Localization;\n"]}
@@ -0,0 +1,8 @@
1
+ var CalendarType = {
2
+ Gregorian: "Gregorian",
3
+ Islamic: "Islamic",
4
+ Japanese: "Japanese",
5
+ Persian: "Persian",
6
+ Buddhist: "Buddhist"
7
+ };
8
+ export default CalendarType;
@@ -0,0 +1,30 @@
1
+ var CalendarWeekNumbering = {
2
+ Default: "Default",
3
+ ISO_8601: "ISO_8601",
4
+ MiddleEastern: "MiddleEastern",
5
+ WesternTraditional: "WesternTraditional"
6
+ };
7
+ Object.defineProperty(CalendarWeekNumbering, "getWeekConfigurationValues", {
8
+ value: function (sCalendarWeekNumbering) {
9
+ switch (sCalendarWeekNumbering) {
10
+ case CalendarWeekNumbering.ISO_8601:
11
+ return {
12
+ firstDayOfWeek: 1,
13
+ minimalDaysInFirstWeek: 4
14
+ };
15
+ case CalendarWeekNumbering.MiddleEastern:
16
+ return {
17
+ firstDayOfWeek: 6,
18
+ minimalDaysInFirstWeek: 1
19
+ };
20
+ case CalendarWeekNumbering.WesternTraditional:
21
+ return {
22
+ firstDayOfWeek: 0,
23
+ minimalDaysInFirstWeek: 1
24
+ };
25
+ default:
26
+ return undefined;
27
+ }
28
+ }
29
+ });
30
+ export default CalendarWeekNumbering;
@@ -0,0 +1,89 @@
1
+ var TimezoneUtils = {};
2
+ var sLocalTimezone = "";
3
+ var aSupportedTimezoneIDs;
4
+ var oIntlDateTimeFormatCache = {
5
+ _oCache: new Map(),
6
+ _iCacheLimit: 10,
7
+ get: function (sTimezone) {
8
+ var cacheEntry = this._oCache.get(sTimezone);
9
+ if (cacheEntry) {
10
+ return cacheEntry;
11
+ }
12
+ var oOptions = {
13
+ hourCycle: "h23",
14
+ hour: "2-digit",
15
+ minute: "2-digit",
16
+ second: "2-digit",
17
+ fractionalSecondDigits: 3,
18
+ day: "2-digit",
19
+ month: "2-digit",
20
+ year: "numeric",
21
+ timeZone: sTimezone,
22
+ timeZoneName: "short",
23
+ era: "narrow",
24
+ weekday: "short"
25
+ };
26
+ var oInstance = new Intl.DateTimeFormat("en-US", oOptions);
27
+ if (this._oCache.size === this._iCacheLimit) {
28
+ this._oCache = new Map();
29
+ }
30
+ this._oCache.set(sTimezone, oInstance);
31
+ return oInstance;
32
+ }
33
+ };
34
+ TimezoneUtils.isValidTimezone = function (sTimezone) {
35
+ if (!sTimezone) {
36
+ return false;
37
+ }
38
+ if (Intl.supportedValuesOf) {
39
+ try {
40
+ aSupportedTimezoneIDs = aSupportedTimezoneIDs || Intl.supportedValuesOf("timeZone");
41
+ if (aSupportedTimezoneIDs.includes(sTimezone)) {
42
+ return true;
43
+ }
44
+ } catch (oError) {
45
+ aSupportedTimezoneIDs = [];
46
+ }
47
+ }
48
+ try {
49
+ oIntlDateTimeFormatCache.get(sTimezone);
50
+ return true;
51
+ } catch (oError) {
52
+ return false;
53
+ }
54
+ };
55
+ TimezoneUtils.convertToTimezone = function (oDate, sTargetTimezone) {
56
+ var oFormatParts = this._getParts(oDate, sTargetTimezone);
57
+ return TimezoneUtils._getDateFromParts(oFormatParts);
58
+ };
59
+ TimezoneUtils._getParts = function (oDate, sTargetTimezone) {
60
+ var sKey, oPart, oDateParts = Object.create(null), oIntlDate = oIntlDateTimeFormatCache.get(sTargetTimezone), oParts = oIntlDate.formatToParts(new Date(oDate.getTime()));
61
+ for (sKey in oParts) {
62
+ oPart = oParts[sKey];
63
+ if (oPart.type !== "literal") {
64
+ oDateParts[oPart.type] = oPart.value;
65
+ }
66
+ }
67
+ return oDateParts;
68
+ };
69
+ TimezoneUtils._getDateFromParts = function (oParts) {
70
+ var oDate = new Date(0), iUTCYear = parseInt(oParts.year);
71
+ if (oParts.era === "B") {
72
+ iUTCYear = iUTCYear * -1 + 1;
73
+ }
74
+ oDate.setUTCFullYear(iUTCYear, parseInt(oParts.month) - 1, parseInt(oParts.day));
75
+ oDate.setUTCHours(parseInt(oParts.hour), parseInt(oParts.minute), parseInt(oParts.second), parseInt(oParts.fractionalSecond || 0));
76
+ return oDate;
77
+ };
78
+ TimezoneUtils.calculateOffset = function (oDate, sTimezoneSource) {
79
+ var oFirstGuess = this.convertToTimezone(oDate, sTimezoneSource), iInitialOffset = oDate.getTime() - oFirstGuess.getTime(), oDateSource = new Date(oDate.getTime() + iInitialOffset), oDateTarget = this.convertToTimezone(oDateSource, sTimezoneSource);
80
+ return (oDateSource.getTime() - oDateTarget.getTime()) / 1000;
81
+ };
82
+ TimezoneUtils.getLocalTimezone = function () {
83
+ if (sLocalTimezone) {
84
+ return sLocalTimezone;
85
+ }
86
+ sLocalTimezone = new Intl.DateTimeFormat().resolvedOptions().timeZone;
87
+ return sLocalTimezone;
88
+ };
89
+ export default TimezoneUtils;
@@ -2,6 +2,9 @@ import ObjectPath from '../../base/util/ObjectPath.js';
2
2
  import assert from '../../base/assert.js';
3
3
  import Log from '../../base/Log.js';
4
4
  import uniqueSort from '../../base/util/array/uniqueSort.js';
5
+ function isFunction(obj) {
6
+ return typeof obj === 'function';
7
+ }
5
8
  var Metadata = function (sClassName, oClassInfo) {
6
9
  assert(typeof sClassName === 'string' && sClassName, 'Metadata: sClassName must be a non-empty string');
7
10
  assert(typeof oClassInfo === 'object', 'Metadata: oClassInfo must be empty or an object');
@@ -13,7 +16,7 @@ var Metadata = function (sClassName, oClassInfo) {
13
16
  oClassInfo.metadata.__version = 1;
14
17
  }
15
18
  oClassInfo.metadata.__version = oClassInfo.metadata.__version || 2;
16
- if (typeof oClassInfo.constructor !== 'function') {
19
+ if (!isFunction(oClassInfo.constructor)) {
17
20
  throw Error('constructor for class ' + sClassName + ' must have been declared before creating metadata for it');
18
21
  }
19
22
  this._sClassName = sClassName;
@@ -27,9 +30,17 @@ Metadata.prototype.extend = function (oClassInfo) {
27
30
  Metadata.prototype.applySettings = function (oClassInfo) {
28
31
  var that = this, oStaticInfo = oClassInfo.metadata, oPrototype;
29
32
  if (oStaticInfo.baseType) {
30
- var oParentClass = ObjectPath.get(oStaticInfo.baseType);
31
- if (typeof oParentClass !== 'function') {
32
- Log.fatal('base class \'' + oStaticInfo.baseType + '\' does not exist');
33
+ var oParentClass;
34
+ if (isFunction(oStaticInfo.baseType)) {
35
+ oParentClass = oStaticInfo.baseType;
36
+ if (!isFunction(oParentClass.getMetadata)) {
37
+ throw new TypeError('baseType must be a UI5 class with a static getMetadata function');
38
+ }
39
+ } else {
40
+ oParentClass = ObjectPath.get(oStaticInfo.baseType);
41
+ if (!isFunction(oParentClass)) {
42
+ Log.fatal('base class \'' + oStaticInfo.baseType + '\' does not exist');
43
+ }
33
44
  }
34
45
  if (oParentClass.getMetadata) {
35
46
  this._oParent = oParentClass.getMetadata();
@@ -167,12 +178,12 @@ Metadata.createClass = function (fnBaseClass, sClassName, oClassInfo, FNMetaImpl
167
178
  sClassName = fnBaseClass;
168
179
  fnBaseClass = null;
169
180
  }
170
- assert(!fnBaseClass || typeof fnBaseClass === 'function');
181
+ assert(!fnBaseClass || isFunction(fnBaseClass));
171
182
  assert(typeof sClassName === 'string' && !!sClassName);
172
183
  assert(!oClassInfo || typeof oClassInfo === 'object');
173
- assert(!FNMetaImpl || typeof FNMetaImpl === 'function');
184
+ assert(!FNMetaImpl || isFunction(FNMetaImpl));
174
185
  FNMetaImpl = FNMetaImpl || Metadata;
175
- if (typeof FNMetaImpl.preprocessClassInfo === 'function') {
186
+ if (isFunction(FNMetaImpl.preprocessClassInfo)) {
176
187
  oClassInfo = FNMetaImpl.preprocessClassInfo(oClassInfo);
177
188
  }
178
189
  oClassInfo = oClassInfo || {};
@@ -181,7 +192,7 @@ Metadata.createClass = function (fnBaseClass, sClassName, oClassInfo, FNMetaImpl
181
192
  oClassInfo.constructor = undefined;
182
193
  }
183
194
  var fnClass = oClassInfo.constructor;
184
- assert(!fnClass || typeof fnClass === 'function');
195
+ assert(!fnClass || isFunction(fnClass));
185
196
  if (fnBaseClass) {
186
197
  if (!fnClass) {
187
198
  if (oClassInfo.metadata.deprecated) {
@@ -197,7 +208,7 @@ Metadata.createClass = function (fnBaseClass, sClassName, oClassInfo, FNMetaImpl
197
208
  }
198
209
  fnClass.prototype = Object.create(fnBaseClass.prototype);
199
210
  fnClass.prototype.constructor = fnClass;
200
- oClassInfo.metadata.baseType = fnBaseClass.getMetadata().getName();
211
+ oClassInfo.metadata.baseType = fnBaseClass;
201
212
  } else {
202
213
  fnClass = fnClass || function () {
203
214
  };
@@ -1,8 +1,2 @@
1
- var CalendarType = {
2
- Gregorian: "Gregorian",
3
- Islamic: "Islamic",
4
- Japanese: "Japanese",
5
- Persian: "Persian",
6
- Buddhist: "Buddhist"
7
- };
8
- export default CalendarType;
1
+ import CalendarType from '../../base/i18n/date/CalendarType.js';
2
+ export default CalendarType;
@@ -1,159 +1,62 @@
1
- import BaseObject from '../base/Object.js';
2
1
  import assert from '../../base/assert.js';
3
- import CalendarType from './CalendarType.js';
4
- var rLocale = /^((?:[A-Z]{2,3}(?:-[A-Z]{3}){0,3})|[A-Z]{4}|[A-Z]{5,8})(?:-([A-Z]{4}))?(?:-([A-Z]{2}|[0-9]{3}))?((?:-[0-9A-Z]{5,8}|-[0-9][0-9A-Z]{3})*)((?:-[0-9A-WYZ](?:-[0-9A-Z]{2,8})+)*)(?:-(X(?:-[0-9A-Z]{1,8})+))?$/i;
2
+ import BaseObject from '../base/Object.js';
3
+ import Localization from '../../base/i18n/Localization.js';
4
+ import LanguageTag from '../../base/i18n/LanguageTag.js';
5
5
  var Locale = BaseObject.extend('sap.ui.core.Locale', {
6
- constructor: function (sLocaleId) {
6
+ constructor: function (vLocale) {
7
7
  BaseObject.apply(this);
8
- var aResult = rLocale.exec(sLocaleId.replace(/_/g, '-'));
9
- if (aResult === null) {
10
- throw new TypeError('The given language \'' + sLocaleId + '\' does not adhere to BCP-47.');
11
- }
12
- this.sLocaleId = sLocaleId;
13
- this.sLanguage = aResult[1] || null;
14
- this.sScript = aResult[2] || null;
15
- this.sRegion = aResult[3] || null;
16
- this.sVariant = aResult[4] && aResult[4].slice(1) || null;
17
- this.sExtension = aResult[5] && aResult[5].slice(1) || null;
18
- this.sPrivateUse = aResult[6] || null;
19
- if (this.sLanguage) {
20
- this.sLanguage = this.sLanguage.toLowerCase();
21
- }
22
- if (this.sScript) {
23
- this.sScript = this.sScript.toLowerCase().replace(/^[a-z]/, function ($) {
24
- return $.toUpperCase();
25
- });
26
- }
27
- if (this.sRegion) {
28
- this.sRegion = this.sRegion.toUpperCase();
8
+ if (vLocale instanceof LanguageTag) {
9
+ this.oLanguageTag = vLocale;
10
+ this.sLocaleId = this.oLanguageTag.toString();
11
+ } else {
12
+ this.oLanguageTag = new LanguageTag(vLocale);
13
+ this.sLocaleId = vLocale;
29
14
  }
15
+ Object.assign(this, this.oLanguageTag);
16
+ this.sLanguage = this.language;
30
17
  },
31
18
  getLanguage: function () {
32
- return this.sLanguage;
19
+ return this.language;
33
20
  },
34
21
  getScript: function () {
35
- return this.sScript;
22
+ return this.script;
36
23
  },
37
24
  getRegion: function () {
38
- return this.sRegion;
25
+ return this.region;
39
26
  },
40
27
  getVariant: function () {
41
- return this.sVariant;
28
+ return this.variant;
42
29
  },
43
30
  getVariantSubtags: function () {
44
- return this.sVariant ? this.sVariant.split('-') : [];
31
+ return this.variantSubtags;
45
32
  },
46
33
  getExtension: function () {
47
- return this.sExtension;
34
+ return this.extension;
48
35
  },
49
36
  getExtensionSubtags: function () {
50
- return this.sExtension ? this.sExtension.slice(2).split('-') : [];
37
+ return this.extensionSubtags;
51
38
  },
52
39
  getPrivateUse: function () {
53
- return this.sPrivateUse;
40
+ return this.privateUse;
54
41
  },
55
42
  getPrivateUseSubtags: function () {
56
- return this.sPrivateUse ? this.sPrivateUse.slice(2).split('-') : [];
43
+ return this.privateUseSubtags;
57
44
  },
58
45
  hasPrivateUseSubtag: function (sSubtag) {
59
46
  assert(sSubtag && sSubtag.match(/^[0-9A-Z]{1,8}$/i), 'subtag must be a valid BCP47 private use tag');
60
- return this.getPrivateUseSubtags().indexOf(sSubtag) >= 0;
47
+ return this.privateUseSubtags.indexOf(sSubtag) >= 0;
61
48
  },
62
49
  toString: function () {
63
- return join(this.sLanguage, this.sScript, this.sRegion, this.sVariant, this.sExtension, this.sPrivateUse);
64
- },
65
- toLanguageTag: function () {
66
- var sLanguage = this.getModernLanguage();
67
- var sScript = this.sScript;
68
- if (sLanguage === 'sr' && sScript === 'Latn') {
69
- sLanguage = 'sh';
70
- sScript = null;
71
- }
72
- return join(sLanguage, sScript, this.sRegion, this.sVariant, this.sExtension, this.sPrivateUse);
73
- },
74
- getModernLanguage: function () {
75
- return M_ISO639_OLD_TO_NEW[this.sLanguage] || this.sLanguage;
50
+ return this.oLanguageTag.toString();
76
51
  },
77
52
  getSAPLogonLanguage: function () {
78
- return this._getSAPLogonLanguage();
79
- },
80
- _getSAPLogonLanguage: function () {
81
- var sLanguage = this.sLanguage || '';
82
- if (sLanguage.indexOf('-') >= 0) {
83
- sLanguage = sLanguage.slice(0, sLanguage.indexOf('-'));
84
- }
85
- sLanguage = M_ISO639_OLD_TO_NEW[sLanguage] || sLanguage;
86
- if (sLanguage === 'zh' && !this.sScript && this.sRegion === 'TW') {
87
- return 'ZF';
88
- }
89
- return M_LOCALE_TO_ABAP_LANGUAGE[join(sLanguage, this.sScript)] || M_LOCALE_TO_ABAP_LANGUAGE[join(sLanguage, this.sRegion)] || M_LOCALE_TO_ABAP_LANGUAGE[getPseudoLanguageTag(this.sPrivateUse)] || sLanguage.toUpperCase();
90
- },
91
- getPreferredCalendarType: function () {
92
- return Locale._mPreferredCalendar[this.getLanguage() + '-' + this.getRegion()] || Locale._mPreferredCalendar[this.getLanguage()] || Locale._mPreferredCalendar['default'];
53
+ return Localization._getSAPLogonLanguage(this);
93
54
  }
94
55
  });
95
- function getPseudoLanguageTag(sPrivateUse) {
96
- if (sPrivateUse) {
97
- var m = /-(saptrc|sappsd|saprigi)(?:-|$)/i.exec(sPrivateUse);
98
- return m && 'en-US-x-' + m[1].toLowerCase();
99
- }
100
- }
101
- var M_ISO639_OLD_TO_NEW = {
102
- 'iw': 'he',
103
- 'ji': 'yi'
104
- };
105
- var M_ABAP_LANGUAGE_TO_LOCALE = {
106
- 'ZH': 'zh-Hans',
107
- 'ZF': 'zh-Hant',
108
- 'SH': 'sr-Latn',
109
- '6N': 'en-GB',
110
- '1P': 'pt-PT',
111
- '1X': 'es-MX',
112
- '3F': 'fr-CA',
113
- '1Q': 'en-US-x-saptrc',
114
- '2Q': 'en-US-x-sappsd',
115
- '3Q': 'en-US-x-saprigi'
116
- };
117
- var M_LOCALE_TO_ABAP_LANGUAGE = inverse(M_ABAP_LANGUAGE_TO_LOCALE);
118
- function getDesigntimePropertyAsArray(sValue) {
119
- var m = /\$([-a-z0-9A-Z._]+)(?::([^$]*))?\$/.exec(sValue);
120
- return m && m[2] ? m[2].split(/,/) : null;
121
- }
122
- var A_RTL_LOCALES = getDesigntimePropertyAsArray('$cldr-rtl-locales:ar,fa,he$') || [];
123
- Locale._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$');
124
- Locale._mPreferredCalendar = {
125
- 'ar-SA': CalendarType.Islamic,
126
- 'fa': CalendarType.Persian,
127
- 'th': CalendarType.Buddhist,
128
- 'default': CalendarType.Gregorian
129
- };
130
- Locale._coreI18nLocales = getDesigntimePropertyAsArray('$core-i18n-locales:,ar,bg,ca,cs,da,de,el,en,en_GB,es,es_MX,et,fi,fr,hi,hr,hu,it,iw,ja,kk,ko,lt,lv,ms,nl,no,pl,pt,ro,ru,sh,sk,sl,sv,th,tr,uk,vi,zh_CN,zh_TW$');
131
- Locale._impliesRTL = function (vLanguage) {
132
- var oLocale = vLanguage instanceof Locale ? vLanguage : new Locale(vLanguage);
133
- var sLanguage = oLocale.getLanguage() || '';
134
- sLanguage = sLanguage && M_ISO639_OLD_TO_NEW[sLanguage] || sLanguage;
135
- var sRegion = oLocale.getRegion() || '';
136
- if (sRegion && A_RTL_LOCALES.indexOf(sLanguage + '_' + sRegion) >= 0) {
137
- return true;
138
- }
139
- return A_RTL_LOCALES.indexOf(sLanguage) >= 0;
140
- };
141
- Locale.fromSAPLogonLanguage = function (sSAPLogonLanguage) {
142
- if (sSAPLogonLanguage && typeof sSAPLogonLanguage === 'string') {
143
- sSAPLogonLanguage = M_ABAP_LANGUAGE_TO_LOCALE[sSAPLogonLanguage.toUpperCase()] || sSAPLogonLanguage;
144
- try {
145
- return new Locale(sSAPLogonLanguage);
146
- } catch (e) {
147
- }
56
+ Locale._getCoreLocale = function (oLocale) {
57
+ if (oLocale instanceof LanguageTag) {
58
+ oLocale = new Locale(oLocale);
148
59
  }
60
+ return oLocale;
149
61
  };
150
- function join() {
151
- return Array.prototype.filter.call(arguments, Boolean).join('-');
152
- }
153
- function inverse(obj) {
154
- return Object.keys(obj).reduce(function (inv, key) {
155
- inv[obj[key]] = key;
156
- return inv;
157
- }, {});
158
- }
159
62
  export default Locale;
@@ -1,12 +1,14 @@
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';
8
9
  import Configuration from './Configuration.js';
9
- var rEIgnoreCase = /e/i, mLegacyUnit2CurrentUnit = {
10
+ import CalendarWeekNumbering from './date/CalendarWeekNumbering.js';
11
+ var rCIgnoreCase = /c/i, rEIgnoreCase = /e/i, mLegacyUnit2CurrentUnit = {
10
12
  'acceleration-meter-per-second-squared': 'acceleration-meter-per-square-second',
11
13
  'concentr-milligram-per-deciliter': 'concentr-milligram-ofglucose-per-deciliter',
12
14
  'concentr-part-per-million': 'concentr-permillion',
@@ -18,9 +20,9 @@ var rEIgnoreCase = /e/i, mLegacyUnit2CurrentUnit = {
18
20
  }, rNumberInScientificNotation = /^([+-]?)((\d+)(?:\.(\d+))?)[eE]([+-]?\d+)$/, rTrailingZeroes = /0+$/;
19
21
  var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
20
22
  constructor: function (oLocale) {
21
- this.oLocale = oLocale;
23
+ this.oLocale = Locale._getCoreLocale(oLocale);
22
24
  BaseObject.apply(this);
23
- var oDataLoaded = getData(oLocale);
25
+ var oDataLoaded = getData(this.oLocale);
24
26
  this.mData = oDataLoaded.mData;
25
27
  this.sCLDRLocaleId = oDataLoaded.sCLDRLocaleId;
26
28
  },
@@ -46,7 +48,7 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
46
48
  getCurrentLanguageName: function () {
47
49
  var oLanguages = this.getLanguages();
48
50
  var sCurrentLanguage;
49
- var sLanguage = this.oLocale.getModernLanguage();
51
+ var sLanguage = Localization.getModernLanguage(this.oLocale.language);
50
52
  var sScript = this.oLocale.getScript();
51
53
  if (sLanguage === 'sr' && sScript === 'Latn') {
52
54
  sLanguage = 'sh';
@@ -837,11 +839,8 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
837
839
  aCategories.push('other');
838
840
  return aCategories;
839
841
  },
840
- getPluralCategory: function (sNumber) {
841
- var oPlurals = this._get('plurals');
842
- if (typeof sNumber === 'number') {
843
- sNumber = sNumber.toString();
844
- }
842
+ getPluralCategory: function (vNumber) {
843
+ var sNumber = typeof vNumber === 'number' ? vNumber.toString() : vNumber, oPlurals = this._get('plurals');
845
844
  if (!this._pluralTest) {
846
845
  this._pluralTest = {};
847
846
  }
@@ -987,7 +986,9 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
987
986
  throw new Error('Not completely parsed');
988
987
  }
989
988
  return function (sValue) {
990
- var iDotPos, iExponent, sFraction, sFractionNoZeros, sInteger, o, iExponentPos = sValue.search(rEIgnoreCase);
989
+ var iDotPos, iExponent, iExponentPos, sFraction, sFractionNoZeros, sInteger, o;
990
+ sValue = sValue.replace(rCIgnoreCase, 'e');
991
+ iExponentPos = sValue.search(rEIgnoreCase);
991
992
  iExponent = iExponentPos < 0 ? 0 : parseInt(sValue.slice(iExponentPos + 1));
992
993
  sValue = LocaleData.convertToDecimal(sValue);
993
994
  iDotPos = sValue.indexOf('.');
@@ -1266,12 +1267,13 @@ var mCLDRSymbols = {
1266
1267
  numericCeiling: 100
1267
1268
  }
1268
1269
  };
1269
- var M_ISO639_OLD_TO_NEW = {
1270
- 'iw': 'he',
1271
- 'ji': 'yi'
1272
- };
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$');
1273
1275
  var M_SUPPORTED_LOCALES = function () {
1274
- var LOCALES = Locale._cldrLocales, result = {}, i;
1276
+ var LOCALES = _cldrLocales, result = {}, i;
1275
1277
  if (LOCALES) {
1276
1278
  for (i = 0; i < LOCALES.length; i++) {
1277
1279
  result[LOCALES[i]] = true;
@@ -1340,7 +1342,7 @@ function getData(oLocale) {
1340
1342
  }
1341
1343
  return mLocaleDatas[sId];
1342
1344
  }
1343
- sLanguage = sLanguage && M_ISO639_OLD_TO_NEW[sLanguage] || sLanguage;
1345
+ sLanguage = sLanguage && Localization.getModernLanguage(sLanguage) || sLanguage;
1344
1346
  if (sLanguage === 'no') {
1345
1347
  sLanguage = 'nb';
1346
1348
  }
@@ -1401,9 +1403,25 @@ var CustomLocaleData = LocaleData.extend('sap.ui.core.CustomLocaleData', {
1401
1403
  var mData = this._getDeep(this.mData, arguments);
1402
1404
  var mCustomData = this._getDeep(this.mCustomData, arguments);
1403
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;
1404
1420
  }
1405
1421
  });
1406
1422
  LocaleData.getInstance = function (oLocale) {
1423
+ oLocale = Locale._getCoreLocale(oLocale);
1407
1424
  return oLocale.hasPrivateUseSubtag('sapufmt') ? new CustomLocaleData(oLocale) : new LocaleData(oLocale);
1408
1425
  };
1426
+ LocaleData._cldrLocales = _cldrLocales;
1409
1427
  export default LocaleData;
@@ -1,27 +1,16 @@
1
1
  import CalendarWeekNumbering from './CalendarWeekNumbering.js';
2
2
  import Configuration from '../Configuration.js';
3
3
  import LocaleData from '../LocaleData.js';
4
- var mWeekNumberingConfiguration = {
5
- ISO_8601: {
6
- firstDayOfWeek: 1,
7
- minimalDaysInFirstWeek: 4
8
- },
9
- MiddleEastern: {
10
- firstDayOfWeek: 6,
11
- minimalDaysInFirstWeek: 1
12
- },
13
- WesternTraditional: {
14
- firstDayOfWeek: 0,
15
- minimalDaysInFirstWeek: 1
16
- }
17
- };
18
4
  var CalendarUtils = {
19
5
  getWeekConfigurationValues: function (sCalendarWeekNumbering, oLocale) {
20
- var oLocaleData;
21
- if (mWeekNumberingConfiguration.hasOwnProperty(sCalendarWeekNumbering)) {
22
- return mWeekNumberingConfiguration[sCalendarWeekNumbering];
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;
23
13
  }
24
- sCalendarWeekNumbering = sCalendarWeekNumbering || CalendarWeekNumbering.Default;
25
14
  if (sCalendarWeekNumbering === CalendarWeekNumbering.Default) {
26
15
  oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
27
16
  oLocaleData = LocaleData.getInstance(oLocale);
@@ -1,7 +1,2 @@
1
- var CalendarWeekNumbering = {
2
- Default: "Default",
3
- ISO_8601: "ISO_8601",
4
- MiddleEastern: "MiddleEastern",
5
- WesternTraditional: "WesternTraditional"
6
- };
7
- export default CalendarWeekNumbering;
1
+ import CalendarWeekNumbering from '../../../base/i18n/date/CalendarWeekNumbering.js';
2
+ export default CalendarWeekNumbering;