@ui5/webcomponents-localization 0.0.0-f651a470c → 0.0.0-f79db712b

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 (124) hide show
  1. package/.eslintignore +2 -1
  2. package/CHANGELOG.md +390 -0
  3. package/README.md +2 -1
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/dates/CalendarDate.d.ts +2 -2
  6. package/dist/dates/CalendarDate.js.map +1 -1
  7. package/dist/dates/ExtremeDates.d.ts +2 -2
  8. package/dist/dates/ExtremeDates.js.map +1 -1
  9. package/dist/dates/UniversalDate.d.ts +1 -1
  10. package/dist/dates/UniversalDate.js.map +1 -1
  11. package/dist/dates/convertMonthNumbersToMonthNames.d.ts +1 -1
  12. package/dist/dates/convertMonthNumbersToMonthNames.js.map +1 -1
  13. package/dist/dates/getTodayUTCTimestamp.d.ts +1 -1
  14. package/dist/dates/getTodayUTCTimestamp.js.map +1 -1
  15. package/dist/dates/modifyDateBy.d.ts +2 -1
  16. package/dist/dates/modifyDateBy.js +34 -19
  17. package/dist/dates/modifyDateBy.js.map +1 -1
  18. package/dist/dates/transformDateToSecondaryType.d.ts +1 -1
  19. package/dist/dates/transformDateToSecondaryType.js.map +1 -1
  20. package/dist/generated/assets/cldr/ar.json +2715 -0
  21. package/dist/generated/assets/cldr/ar_EG.json +2715 -0
  22. package/dist/generated/assets/cldr/ar_SA.json +2715 -0
  23. package/dist/generated/assets/cldr/bg.json +1719 -0
  24. package/dist/generated/assets/cldr/ca.json +1760 -0
  25. package/dist/generated/assets/cldr/cs.json +2244 -0
  26. package/dist/generated/assets/cldr/cy.json +2414 -0
  27. package/dist/generated/assets/cldr/da.json +1711 -0
  28. package/dist/generated/assets/cldr/de.json +1699 -0
  29. package/dist/generated/assets/cldr/de_AT.json +1700 -0
  30. package/dist/generated/assets/cldr/de_CH.json +1698 -0
  31. package/dist/generated/assets/cldr/el.json +1686 -0
  32. package/dist/generated/assets/cldr/el_CY.json +1686 -0
  33. package/dist/generated/assets/cldr/en.json +1733 -0
  34. package/dist/generated/assets/cldr/en_AU.json +1727 -0
  35. package/dist/generated/assets/cldr/en_GB.json +1745 -0
  36. package/dist/generated/assets/cldr/en_HK.json +1744 -0
  37. package/dist/generated/assets/cldr/en_IE.json +1744 -0
  38. package/dist/generated/assets/cldr/en_IN.json +1745 -0
  39. package/dist/generated/assets/cldr/en_NZ.json +1744 -0
  40. package/dist/generated/assets/cldr/en_PG.json +1745 -0
  41. package/dist/generated/assets/cldr/en_SG.json +1745 -0
  42. package/dist/generated/assets/cldr/en_ZA.json +1745 -0
  43. package/dist/generated/assets/cldr/es.json +1691 -0
  44. package/dist/generated/assets/cldr/es_AR.json +1689 -0
  45. package/dist/generated/assets/cldr/es_BO.json +1688 -0
  46. package/dist/generated/assets/cldr/es_CL.json +1689 -0
  47. package/dist/generated/assets/cldr/es_CO.json +1689 -0
  48. package/dist/generated/assets/cldr/es_MX.json +1690 -0
  49. package/dist/generated/assets/cldr/es_PE.json +1688 -0
  50. package/dist/generated/assets/cldr/es_UY.json +1690 -0
  51. package/dist/generated/assets/cldr/es_VE.json +1689 -0
  52. package/dist/generated/assets/cldr/et.json +1741 -0
  53. package/dist/generated/assets/cldr/fa.json +1749 -0
  54. package/dist/generated/assets/cldr/fi.json +1737 -0
  55. package/dist/generated/assets/cldr/fr.json +1767 -0
  56. package/dist/generated/assets/cldr/fr_BE.json +1767 -0
  57. package/dist/generated/assets/cldr/fr_CA.json +1746 -0
  58. package/dist/generated/assets/cldr/fr_CH.json +1768 -0
  59. package/dist/generated/assets/cldr/fr_LU.json +1767 -0
  60. package/dist/generated/assets/cldr/he.json +2158 -0
  61. package/dist/generated/assets/cldr/hi.json +1693 -0
  62. package/dist/generated/assets/cldr/hr.json +1931 -0
  63. package/dist/generated/assets/cldr/hu.json +1766 -0
  64. package/dist/generated/assets/cldr/id.json +1516 -0
  65. package/dist/generated/assets/cldr/it.json +1709 -0
  66. package/dist/generated/assets/cldr/it_CH.json +1709 -0
  67. package/dist/generated/assets/cldr/ja.json +1548 -0
  68. package/dist/generated/assets/cldr/kk.json +1750 -0
  69. package/dist/generated/assets/cldr/ko.json +1548 -0
  70. package/dist/generated/assets/cldr/lt.json +2130 -0
  71. package/dist/generated/assets/cldr/lv.json +1943 -0
  72. package/dist/generated/assets/cldr/ms.json +1483 -0
  73. package/dist/generated/assets/cldr/nb.json +1714 -0
  74. package/dist/generated/assets/cldr/nl.json +1693 -0
  75. package/dist/generated/assets/cldr/nl_BE.json +1693 -0
  76. package/dist/generated/assets/cldr/pl.json +1944 -0
  77. package/dist/generated/assets/cldr/pt.json +1628 -0
  78. package/dist/generated/assets/cldr/pt_PT.json +1714 -0
  79. package/dist/generated/assets/cldr/ro.json +1918 -0
  80. package/dist/generated/assets/cldr/ru.json +2205 -0
  81. package/dist/generated/assets/cldr/ru_UA.json +2205 -0
  82. package/dist/generated/assets/cldr/sk.json +2213 -0
  83. package/dist/generated/assets/cldr/sl.json +2222 -0
  84. package/dist/generated/assets/cldr/sr.json +1922 -0
  85. package/dist/generated/assets/cldr/sr_Latn.json +1908 -0
  86. package/dist/generated/assets/cldr/sv.json +1731 -0
  87. package/dist/generated/assets/cldr/th.json +1579 -0
  88. package/dist/generated/assets/cldr/tr.json +1788 -0
  89. package/dist/generated/assets/cldr/uk.json +2174 -0
  90. package/dist/generated/assets/cldr/vi.json +1515 -0
  91. package/dist/generated/assets/cldr/zh_CN.json +1545 -0
  92. package/dist/generated/assets/cldr/zh_HK.json +1545 -0
  93. package/dist/generated/assets/cldr/zh_SG.json +1546 -0
  94. package/dist/generated/assets/cldr/zh_TW.json +1544 -0
  95. package/dist/generated/json-imports/LocaleData-static.d.ts +1 -0
  96. package/dist/generated/json-imports/LocaleData-static.js +9 -11
  97. package/dist/generated/json-imports/LocaleData-static.js.map +1 -0
  98. package/dist/generated/json-imports/LocaleData.d.ts +1 -0
  99. package/dist/generated/json-imports/LocaleData.js +86 -88
  100. package/dist/generated/json-imports/LocaleData.js.map +1 -0
  101. package/dist/sap/base/i18n/LanguageTag.js +35 -0
  102. package/dist/sap/base/i18n/Localization.d.ts +4 -0
  103. package/dist/sap/base/i18n/Localization.js +12 -0
  104. package/dist/sap/base/i18n/Localization.js.map +1 -0
  105. package/dist/sap/base/i18n/date/CalendarType.js +8 -0
  106. package/dist/sap/base/i18n/date/CalendarWeekNumbering.js +30 -0
  107. package/dist/sap/base/i18n/date/TimezoneUtils.js +89 -0
  108. package/dist/sap/ui/base/Metadata.js +20 -9
  109. package/dist/sap/ui/core/CalendarType.js +2 -8
  110. package/dist/sap/ui/core/Configuration.d.ts +1 -0
  111. package/dist/sap/ui/core/Configuration.js +2 -0
  112. package/dist/sap/ui/core/Configuration.js.map +1 -1
  113. package/dist/sap/ui/core/Core.d.ts +1 -0
  114. package/dist/sap/ui/core/Locale.js +28 -125
  115. package/dist/sap/ui/core/LocaleData.js +36 -18
  116. package/dist/sap/ui/core/date/CalendarUtils.js +7 -18
  117. package/dist/sap/ui/core/date/CalendarWeekNumbering.js +2 -7
  118. package/dist/sap/ui/core/date/UniversalDate.js +5 -16
  119. package/dist/sap/ui/core/format/DateFormat.js +79 -37
  120. package/dist/sap/ui/core/format/TimezoneUtil.js +2 -89
  121. package/package-scripts.cjs +6 -11
  122. package/package.json +8 -7
  123. package/tsconfig.json +11 -1
  124. package/used-modules.txt +4 -0
@@ -16,6 +16,8 @@ const Configuration = {
16
16
  getOriginInfo: emptyFn,
17
17
  getFormatSettings: () => FormatSettings,
18
18
  getTimezone: () => getConfigTimezone() || TimezoneUtil.getLocalTimezone(),
19
+ // Calculate calendar week numbering by active format locale
20
+ getCalendarWeekNumbering: () => "Default",
19
21
  };
20
22
  export default Configuration;
21
23
  //# sourceMappingURL=Configuration.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Configuration.js","sourceRoot":"","sources":["../../../../src/sap/ui/core/Configuration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACnG,OAAO,4BAA4B,MAAM,mEAAmE,CAAC;AAC7G,aAAa;AACb,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAEjD,MAAM,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAEzB;;GAEG;AACH,MAAM,aAAa,GAAG;IACrB,WAAW;IACX,eAAe;IACf,qBAAqB,EAAE,GAAG,EAAE,CAAC,4BAA4B,CAAC,2IAA2I,CAAC;IACtM,aAAa,EAAE,OAAO;IACtB,iBAAiB,EAAE,GAAG,EAAE,CAAC,cAAc;IACvC,WAAW,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE,IAAI,YAAY,CAAC,gBAAgB,EAAY;CACnF,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import { getLanguage } from \"@ui5/webcomponents-base/dist/config/Language.js\";\nimport { getCalendarType } from \"@ui5/webcomponents-base/dist/config/CalendarType.js\";\nimport { getTimezone as getConfigTimezone } from \"@ui5/webcomponents-base/dist/config/Timezone.js\";\nimport getDesigntimePropertyAsArray from \"@ui5/webcomponents-base/dist/util/getDesigntimePropertyAsArray.js\";\n// @ts-ignore\nimport TimezoneUtil from \"./format/TimezoneUtil.js\";\nimport FormatSettings from \"./FormatSettings.js\";\n\nconst emptyFn = () => {};\n\n/**\n * OpenUI5 Configuration Shim\n */\nconst Configuration = {\n\tgetLanguage,\n\tgetCalendarType,\n\tgetSupportedLanguages: () => getDesigntimePropertyAsArray(\"$core-i18n-locales:,ar,bg,ca,cs,da,de,el,en,es,et,fi,fr,hi,hr,hu,it,iw,ja,ko,lt,lv,nl,no,pl,pt,ro,ru,sh,sk,sl,sv,th,tr,uk,vi,zh_CN,zh_TW$\"),\n\tgetOriginInfo: emptyFn,\n\tgetFormatSettings: () => FormatSettings,\n\tgetTimezone: () => getConfigTimezone() || TimezoneUtil.getLocalTimezone() as string,\n};\n\nexport default Configuration;\n"]}
1
+ {"version":3,"file":"Configuration.js","sourceRoot":"","sources":["../../../../src/sap/ui/core/Configuration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACnG,OAAO,4BAA4B,MAAM,mEAAmE,CAAC;AAC7G,aAAa;AACb,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAEjD,MAAM,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAEzB;;GAEG;AACH,MAAM,aAAa,GAAG;IACrB,WAAW;IACX,eAAe;IACf,qBAAqB,EAAE,GAAG,EAAE,CAAC,4BAA4B,CAAC,2IAA2I,CAAC;IACtM,aAAa,EAAE,OAAO;IACtB,iBAAiB,EAAE,GAAG,EAAE,CAAC,cAAc;IACvC,WAAW,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE,IAAI,YAAY,CAAC,gBAAgB,EAAY;IACnF,4DAA4D;IAC5D,wBAAwB,EAAE,GAAG,EAAE,CAAC,SAAS;CACzC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import { getLanguage } from \"@ui5/webcomponents-base/dist/config/Language.js\";\nimport { getCalendarType } from \"@ui5/webcomponents-base/dist/config/CalendarType.js\";\nimport { getTimezone as getConfigTimezone } from \"@ui5/webcomponents-base/dist/config/Timezone.js\";\nimport getDesigntimePropertyAsArray from \"@ui5/webcomponents-base/dist/util/getDesigntimePropertyAsArray.js\";\n// @ts-ignore\nimport TimezoneUtil from \"./format/TimezoneUtil.js\";\nimport FormatSettings from \"./FormatSettings.js\";\n\nconst emptyFn = () => {};\n\n/**\n * OpenUI5 Configuration Shim\n */\nconst Configuration = {\n\tgetLanguage,\n\tgetCalendarType,\n\tgetSupportedLanguages: () => getDesigntimePropertyAsArray(\"$core-i18n-locales:,ar,bg,ca,cs,da,de,el,en,es,et,fi,fr,hi,hr,hu,it,iw,ja,ko,lt,lv,nl,no,pl,pt,ro,ru,sh,sk,sl,sv,th,tr,uk,vi,zh_CN,zh_TW$\"),\n\tgetOriginInfo: emptyFn,\n\tgetFormatSettings: () => FormatSettings,\n\tgetTimezone: () => getConfigTimezone() || TimezoneUtil.getLocalTimezone() as string,\n\t// Calculate calendar week numbering by active format locale\n\tgetCalendarWeekNumbering: () => \"Default\",\n};\n\nexport default Configuration;\n"]}
@@ -14,6 +14,7 @@ declare const Core: {
14
14
  getLegacyDateCalendarCustomizing: typeof import("@ui5/webcomponents-base/dist/features/LegacyDateFormats.js").default.getLegacyDateCalendarCustomizing;
15
15
  };
16
16
  getTimezone: () => string;
17
+ getCalendarWeekNumbering: () => string;
17
18
  };
18
19
  getLibraryResourceBundle: void;
19
20
  getFormatSettings: () => {
@@ -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;
@@ -124,20 +124,16 @@ UniversalDate.prototype.getUTCEra = function () {
124
124
  UniversalDate.prototype.setUTCEra = function (iEra) {
125
125
  };
126
126
  UniversalDate.prototype.getWeek = function (oLocale, vCalendarWeekNumbering) {
127
- checkWeekConfig(vCalendarWeekNumbering);
128
127
  return UniversalDate.getWeekByDate(this.sCalendarType, this.getFullYear(), this.getMonth(), this.getDate(), oLocale, vCalendarWeekNumbering);
129
128
  };
130
129
  UniversalDate.prototype.setWeek = function (oWeek, oLocale, vCalendarWeekNumbering) {
131
- checkWeekConfig(vCalendarWeekNumbering);
132
130
  var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week, oLocale, vCalendarWeekNumbering);
133
131
  this.setFullYear(oDate.year, oDate.month, oDate.day);
134
132
  };
135
133
  UniversalDate.prototype.getUTCWeek = function (oLocale, vCalendarWeekNumbering) {
136
- checkWeekConfig(vCalendarWeekNumbering);
137
134
  return UniversalDate.getWeekByDate(this.sCalendarType, this.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate(), oLocale, vCalendarWeekNumbering);
138
135
  };
139
136
  UniversalDate.prototype.setUTCWeek = function (oWeek, oLocale, vCalendarWeekNumbering) {
140
- checkWeekConfig(vCalendarWeekNumbering);
141
137
  var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week, oLocale, vCalendarWeekNumbering);
142
138
  this.setUTCFullYear(oDate.year, oDate.month, oDate.day);
143
139
  };
@@ -173,6 +169,7 @@ UniversalDate.prototype.getTimezoneLong = function () {
173
169
  };
174
170
  var iMillisecondsInWeek = 7 * 24 * 60 * 60 * 1000;
175
171
  UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay, oLocale, vCalendarWeekNumbering) {
172
+ vCalendarWeekNumbering = vCalendarWeekNumbering || Configuration.getCalendarWeekNumbering();
176
173
  checkWeekConfig(vCalendarWeekNumbering);
177
174
  oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
178
175
  var clDate = this.getClass(sCalendarType);
@@ -203,6 +200,7 @@ UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay, oLoc
203
200
  };
204
201
  };
205
202
  UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek, oLocale, vCalendarWeekNumbering) {
203
+ vCalendarWeekNumbering = vCalendarWeekNumbering || Configuration.getCalendarWeekNumbering();
206
204
  checkWeekConfig(vCalendarWeekNumbering);
207
205
  oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
208
206
  var clDate = this.getClass(sCalendarType);
@@ -223,27 +221,18 @@ UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek, oLocal
223
221
  };
224
222
  };
225
223
  function isSplitWeek(vCalendarWeekNumbering, oLocale) {
226
- oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
227
224
  var oLocaleData = LocaleData.getInstance(oLocale);
228
- return (!isCalendarWeekConfigurationDefined(vCalendarWeekNumbering) || vCalendarWeekNumbering === CalendarWeekNumbering.Default) && oLocaleData.firstDayStartsFirstWeek();
225
+ return (vCalendarWeekNumbering === CalendarWeekNumbering.Default || vCalendarWeekNumbering === CalendarWeekNumbering.WesternTraditional) && oLocaleData.firstDayStartsFirstWeek();
229
226
  }
230
227
  function checkWeekConfig(vCalendarWeekNumbering) {
231
228
  if (typeof vCalendarWeekNumbering === 'object') {
232
- if (!isCalendarWeekConfigurationDefined(vCalendarWeekNumbering)) {
229
+ if (typeof vCalendarWeekNumbering.firstDayOfWeek !== 'number' || typeof vCalendarWeekNumbering.minimalDaysInFirstWeek !== 'number') {
233
230
  throw new TypeError('Week config requires firstDayOfWeek and minimalDaysInFirstWeek to be set');
234
231
  }
235
- } else if (vCalendarWeekNumbering && !Object.values(CalendarWeekNumbering).includes(vCalendarWeekNumbering)) {
232
+ } else if (!Object.values(CalendarWeekNumbering).includes(vCalendarWeekNumbering)) {
236
233
  throw new TypeError('Illegal format option calendarWeekNumbering: \'' + vCalendarWeekNumbering + '\'');
237
234
  }
238
235
  }
239
- function isCalendarWeekConfigurationDefined(vCalendarWeekNumbering) {
240
- if (typeof vCalendarWeekNumbering === 'object') {
241
- return typeof vCalendarWeekNumbering.firstDayOfWeek === 'number' && typeof vCalendarWeekNumbering.minimalDaysInFirstWeek === 'number';
242
- } else if (vCalendarWeekNumbering) {
243
- return true;
244
- }
245
- return false;
246
- }
247
236
  function resolveCalendarWeekConfiguration(vCalendarWeekNumbering, oLocale) {
248
237
  if (typeof vCalendarWeekNumbering === 'object' && typeof vCalendarWeekNumbering.firstDayOfWeek === 'number' && typeof vCalendarWeekNumbering.minimalDaysInFirstWeek === 'number') {
249
238
  return vCalendarWeekNumbering;
@@ -1,16 +1,17 @@
1
+ import Log from '../../../base/Log.js';
2
+ import formatMessage from '../../../base/strings/formatMessage.js';
3
+ import deepEqual from '../../../base/util/deepEqual.js';
4
+ import extend from '../../../base/util/extend.js';
1
5
  import CalendarType from '../CalendarType.js';
6
+ import Configuration from '../Configuration.js';
7
+ import Core from '../Core.js';
2
8
  import Locale from '../Locale.js';
3
9
  import LocaleData from '../LocaleData.js';
4
- import UI5Date from '../date/UI5Date.js';
5
- import UniversalDate from '../date/UniversalDate.js';
6
10
  import CalendarUtils from '../date/CalendarUtils.js';
7
11
  import CalendarWeekNumbering from '../date/CalendarWeekNumbering.js';
12
+ import UI5Date from '../date/UI5Date.js';
13
+ import UniversalDate from '../date/UniversalDate.js';
8
14
  import TimezoneUtil from './TimezoneUtil.js';
9
- import deepEqual from '../../../base/util/deepEqual.js';
10
- import formatMessage from '../../../base/strings/formatMessage.js';
11
- import Log from '../../../base/Log.js';
12
- import extend from '../../../base/util/extend.js';
13
- import Configuration from '../Configuration.js';
14
15
  var DateFormat = function () {
15
16
  throw new Error();
16
17
  };
@@ -232,21 +233,23 @@ DateFormat.getDateTimeInstance = function (oFormatOptions, oLocale) {
232
233
  };
233
234
  DateFormat.getDateTimeWithTimezoneInstance = function (oFormatOptions, oLocale) {
234
235
  if (oFormatOptions && !(oFormatOptions instanceof Locale)) {
235
- oFormatOptions = Object.assign({}, oFormatOptions);
236
- if (typeof oFormatOptions.showTimezone === 'string') {
237
- var sShowTimezone = oFormatOptions.showTimezone;
238
- if (oFormatOptions.showDate === undefined && oFormatOptions.showTime === undefined) {
239
- if (sShowTimezone === 'Hide') {
240
- oFormatOptions.showTimezone = false;
241
- } else if (sShowTimezone === 'Only') {
242
- oFormatOptions.showDate = false;
243
- oFormatOptions.showTime = false;
236
+ (function () {
237
+ oFormatOptions = Object.assign({}, oFormatOptions);
238
+ if (typeof oFormatOptions.showTimezone === 'string') {
239
+ var sShowTimezone = oFormatOptions.showTimezone;
240
+ if (oFormatOptions.showDate === undefined && oFormatOptions.showTime === undefined) {
241
+ if (sShowTimezone === 'Hide') {
242
+ oFormatOptions.showTimezone = false;
243
+ } else if (sShowTimezone === 'Only') {
244
+ oFormatOptions.showDate = false;
245
+ oFormatOptions.showTime = false;
246
+ }
244
247
  }
248
+ oFormatOptions.showTimezone = sShowTimezone !== 'Hide';
245
249
  }
246
- oFormatOptions.showTimezone = sShowTimezone !== 'Hide';
247
- }
250
+ }());
248
251
  if (oFormatOptions.showDate === false && oFormatOptions.showTime === false && oFormatOptions.showTimezone === false) {
249
- throw new TypeError('Invalid Configuration. One of the following format options must be true: showDate, showTime or showTimezone.');
252
+ throw new TypeError('Invalid Configuration. One of the following format options must be true: ' + 'showDate, showTime or showTimezone.');
250
253
  }
251
254
  }
252
255
  return this.createInstance(oFormatOptions, oLocale, DateFormat._getDateTimeWithTimezoneInfo(oFormatOptions || {}));
@@ -299,13 +302,16 @@ DateFormat.createInstance = function (oFormatOptions, oLocale, oInfo, bIsFallbac
299
302
  }
300
303
  }
301
304
  if (oFormat.oFormatOptions.interval) {
305
+ var sSinglePattern, sDelimiter = oFormat.oFormatOptions.intervalDelimiter;
302
306
  if (oFormat.oFormatOptions.format) {
303
307
  oFormat.intervalPatterns = oFormat.oLocaleData.getCustomIntervalPattern(oFormat.oFormatOptions.format, null, oFormat.oFormatOptions.calendarType);
304
308
  if (typeof oFormat.intervalPatterns === 'string') {
305
309
  oFormat.intervalPatterns = [oFormat.intervalPatterns];
306
310
  }
307
- oFormat.intervalPatterns.push(oFormat.oLocaleData.getCustomDateTimePattern(oFormat.oFormatOptions.format, oFormat.oFormatOptions.calendarType));
311
+ sSinglePattern = oFormat.oLocaleData.getCustomDateTimePattern(oFormat.oFormatOptions.format, oFormat.oFormatOptions.calendarType);
312
+ oFormat.intervalPatterns.push(sSinglePattern);
308
313
  } else {
314
+ sSinglePattern = oFormat.oFormatOptions.pattern;
309
315
  oFormat.intervalPatterns = [
310
316
  oFormat.oLocaleData.getCombinedIntervalPattern(oFormat.oFormatOptions.pattern, oFormat.oFormatOptions.calendarType),
311
317
  oFormat.oFormatOptions.pattern
@@ -313,6 +319,12 @@ DateFormat.createInstance = function (oFormatOptions, oLocale, oInfo, bIsFallbac
313
319
  }
314
320
  var sCommonConnectorPattern = createIntervalPatternWithNormalConnector(oFormat);
315
321
  oFormat.intervalPatterns.push(sCommonConnectorPattern);
322
+ if (sDelimiter) {
323
+ sDelimiter = sDelimiter.replace(/'/g, '\'\'');
324
+ sDelimiter = '\'' + sDelimiter + '\'';
325
+ oFormat.intervalPatterns.unshift(sSinglePattern + sDelimiter + sSinglePattern);
326
+ }
327
+ oFormat.intervalPatterns = Array.from(new Set(oFormat.intervalPatterns));
316
328
  }
317
329
  if (!bIsFallback) {
318
330
  aFallbackFormatOptions = oInfo.aFallbackFormatOptions;
@@ -1524,25 +1536,31 @@ DateFormat.prototype.format = function (vJSDate, bUTC) {
1524
1536
  }
1525
1537
  return sResult;
1526
1538
  };
1539
+ DateFormat.prototype._useCustomIntervalDelimiter = function (oDiffFields) {
1540
+ var aTokens;
1541
+ if (!this.oFormatOptions.intervalDelimiter) {
1542
+ return false;
1543
+ }
1544
+ if (this.oFormatOptions.format) {
1545
+ aTokens = this.oLocaleData._parseSkeletonFormat(this.oFormatOptions.format);
1546
+ return aTokens.some(function (oToken) {
1547
+ return oDiffFields[oToken.group];
1548
+ });
1549
+ }
1550
+ return true;
1551
+ };
1527
1552
  DateFormat.prototype._formatInterval = function (aJSDates, bUTC) {
1528
- var sCalendarType = this.oFormatOptions.calendarType;
1529
- var oFromDate = UniversalDate.getInstance(aJSDates[0], sCalendarType);
1530
- var oToDate = UniversalDate.getInstance(aJSDates[1], sCalendarType);
1531
- var oDate;
1532
- var oPart;
1533
- var sSymbol;
1534
- var aBuffer = [];
1535
- var sPattern;
1536
- var aFormatArray = [];
1537
- var oDiffField = this._getGreatestDiffField([
1538
- oFromDate,
1539
- oToDate
1540
- ]);
1541
- if (!oDiffField) {
1553
+ var oDate, oPart, sPattern, sSymbol, aBuffer = [], sCalendarType = this.oFormatOptions.calendarType, aFormatArray = [], oFromDate = UniversalDate.getInstance(aJSDates[0], sCalendarType), oToDate = UniversalDate.getInstance(aJSDates[1], sCalendarType), oDiffFields = this._getDiffFields([
1554
+ oFromDate,
1555
+ oToDate
1556
+ ]);
1557
+ if (!oDiffFields) {
1542
1558
  return this._format(aJSDates[0], bUTC);
1543
1559
  }
1544
- if (this.oFormatOptions.format) {
1545
- sPattern = this.oLocaleData.getCustomIntervalPattern(this.oFormatOptions.format, oDiffField, sCalendarType);
1560
+ if (this._useCustomIntervalDelimiter(oDiffFields)) {
1561
+ sPattern = this.intervalPatterns[0];
1562
+ } else if (this.oFormatOptions.format) {
1563
+ sPattern = this.oLocaleData.getCustomIntervalPattern(this.oFormatOptions.format, oDiffFields, sCalendarType);
1546
1564
  } else {
1547
1565
  sPattern = this.oLocaleData.getCombinedIntervalPattern(this.oFormatOptions.pattern, sCalendarType);
1548
1566
  }
@@ -1570,7 +1588,7 @@ var mFieldToGroup = {
1570
1588
  Minutes: 'Minute',
1571
1589
  Seconds: 'Second'
1572
1590
  };
1573
- DateFormat.prototype._getGreatestDiffField = function (aDates) {
1591
+ DateFormat.prototype._getDiffFields = function (aDates) {
1574
1592
  var bDiffFound = false, mDiff = {};
1575
1593
  this.aIntervalCompareFields.forEach(function (sField) {
1576
1594
  var sGetterPrefix = 'getUTC', sMethodName = sGetterPrefix + sField, sFieldGroup = mFieldToGroup[sField], vFromValue = aDates[0][sMethodName].apply(aDates[0]), vToValue = aDates[1][sMethodName].apply(aDates[1]);
@@ -2247,4 +2265,28 @@ DateFormat.prototype.getAllowedCharacters = function (aFormatArray) {
2247
2265
  }
2248
2266
  return sAllowedCharacters;
2249
2267
  };
2268
+ DateFormat.prototype.getPlaceholderText = function () {
2269
+ var oResourceBundle = Core.getLibraryResourceBundle();
2270
+ return oResourceBundle.getText('date.placeholder', [this.format.apply(this, this.getSampleValue())]);
2271
+ };
2272
+ DateFormat.prototype.getSampleValue = function () {
2273
+ var oDate, iFullYear = UI5Date.getInstance().getFullYear(), bUTC = this.oFormatOptions.UTC;
2274
+ function getDate(iYear, iMonth, iDay, iHours, iMinutes, iSeconds, iMilliseconds) {
2275
+ return bUTC ? UI5Date.getInstance(Date.UTC(iYear, iMonth, iDay, iHours, iMinutes, iSeconds, iMilliseconds)) : UI5Date.getInstance(iYear, iMonth, iDay, iHours, iMinutes, iSeconds, iMilliseconds);
2276
+ }
2277
+ oDate = getDate(iFullYear, 11, 31, 23, 59, 58, 123);
2278
+ if (this.type === mDateFormatTypes.DATETIME_WITH_TIMEZONE) {
2279
+ return [
2280
+ oDate,
2281
+ Configuration.getTimezone()
2282
+ ];
2283
+ }
2284
+ if (this.oFormatOptions.interval) {
2285
+ return [[
2286
+ getDate(iFullYear, 11, 22, 9, 12, 34, 567),
2287
+ oDate
2288
+ ]];
2289
+ }
2290
+ return [oDate];
2291
+ };
2250
2292
  export default DateFormat;