@ui5/webcomponents-localization 0.0.0-e7dd012d7 → 0.0.0-ec448881d

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 (111) hide show
  1. package/.eslintignore +1 -0
  2. package/CHANGELOG.md +164 -0
  3. package/README.md +32 -1
  4. package/dist/Assets-static.js +2 -0
  5. package/dist/dates/CalendarDate.js +7 -1
  6. package/dist/dates/ExtremeDates.js +39 -0
  7. package/dist/dates/getRoundedTimestamp.js +14 -0
  8. package/dist/dates/getTodayUTCTimestamp.js +9 -0
  9. package/dist/dates/modifyDateBy.js +42 -0
  10. package/dist/generated/assets/cldr/ar.json +5 -3
  11. package/dist/generated/assets/cldr/ar_EG.json +5 -3
  12. package/dist/generated/assets/cldr/ar_SA.json +5 -3
  13. package/dist/generated/assets/cldr/bg.json +5 -3
  14. package/dist/generated/assets/cldr/ca.json +5 -3
  15. package/dist/generated/assets/cldr/cs.json +5 -3
  16. package/dist/generated/assets/cldr/cy.json +5886 -0
  17. package/dist/generated/assets/cldr/da.json +5 -3
  18. package/dist/generated/assets/cldr/de.json +5 -3
  19. package/dist/generated/assets/cldr/de_AT.json +5 -3
  20. package/dist/generated/assets/cldr/de_CH.json +5 -3
  21. package/dist/generated/assets/cldr/el.json +5 -3
  22. package/dist/generated/assets/cldr/el_CY.json +5 -3
  23. package/dist/generated/assets/cldr/en.json +6 -3
  24. package/dist/generated/assets/cldr/en_AU.json +6 -4
  25. package/dist/generated/assets/cldr/en_GB.json +5 -3
  26. package/dist/generated/assets/cldr/en_HK.json +5 -3
  27. package/dist/generated/assets/cldr/en_IE.json +5 -3
  28. package/dist/generated/assets/cldr/en_IN.json +5 -3
  29. package/dist/generated/assets/cldr/en_NZ.json +5 -3
  30. package/dist/generated/assets/cldr/en_PG.json +5 -3
  31. package/dist/generated/assets/cldr/en_SG.json +5 -3
  32. package/dist/generated/assets/cldr/en_ZA.json +5 -3
  33. package/dist/generated/assets/cldr/es.json +5 -3
  34. package/dist/generated/assets/cldr/es_AR.json +5 -3
  35. package/dist/generated/assets/cldr/es_BO.json +5 -3
  36. package/dist/generated/assets/cldr/es_CL.json +5 -3
  37. package/dist/generated/assets/cldr/es_CO.json +5 -3
  38. package/dist/generated/assets/cldr/es_MX.json +5 -3
  39. package/dist/generated/assets/cldr/es_PE.json +5 -3
  40. package/dist/generated/assets/cldr/es_UY.json +5 -3
  41. package/dist/generated/assets/cldr/es_VE.json +5 -3
  42. package/dist/generated/assets/cldr/et.json +5 -3
  43. package/dist/generated/assets/cldr/fa.json +5 -3
  44. package/dist/generated/assets/cldr/fi.json +5 -3
  45. package/dist/generated/assets/cldr/fr.json +5 -3
  46. package/dist/generated/assets/cldr/fr_BE.json +5 -3
  47. package/dist/generated/assets/cldr/fr_CA.json +5 -3
  48. package/dist/generated/assets/cldr/fr_CH.json +5 -3
  49. package/dist/generated/assets/cldr/fr_LU.json +5 -3
  50. package/dist/generated/assets/cldr/he.json +5 -3
  51. package/dist/generated/assets/cldr/hi.json +5 -3
  52. package/dist/generated/assets/cldr/hr.json +5 -3
  53. package/dist/generated/assets/cldr/hu.json +5 -3
  54. package/dist/generated/assets/cldr/id.json +5 -3
  55. package/dist/generated/assets/cldr/it.json +5 -3
  56. package/dist/generated/assets/cldr/it_CH.json +5 -3
  57. package/dist/generated/assets/cldr/ja.json +5 -3
  58. package/dist/generated/assets/cldr/kk.json +5 -3
  59. package/dist/generated/assets/cldr/ko.json +5 -3
  60. package/dist/generated/assets/cldr/lt.json +5 -3
  61. package/dist/generated/assets/cldr/lv.json +5 -3
  62. package/dist/generated/assets/cldr/ms.json +5 -3
  63. package/dist/generated/assets/cldr/nb.json +5 -3
  64. package/dist/generated/assets/cldr/nl.json +5 -3
  65. package/dist/generated/assets/cldr/nl_BE.json +5 -3
  66. package/dist/generated/assets/cldr/pl.json +5 -3
  67. package/dist/generated/assets/cldr/pt.json +5 -3
  68. package/dist/generated/assets/cldr/pt_PT.json +5 -3
  69. package/dist/generated/assets/cldr/ro.json +5 -3
  70. package/dist/generated/assets/cldr/ru.json +5 -3
  71. package/dist/generated/assets/cldr/ru_UA.json +5 -3
  72. package/dist/generated/assets/cldr/sk.json +5 -3
  73. package/dist/generated/assets/cldr/sl.json +5 -3
  74. package/dist/generated/assets/cldr/sr.json +5 -3
  75. package/dist/generated/assets/cldr/sr_Latn.json +5129 -0
  76. package/dist/generated/assets/cldr/sv.json +5 -3
  77. package/dist/generated/assets/cldr/th.json +5 -3
  78. package/dist/generated/assets/cldr/tr.json +5 -3
  79. package/dist/generated/assets/cldr/uk.json +5 -3
  80. package/dist/generated/assets/cldr/vi.json +5 -3
  81. package/dist/generated/assets/cldr/zh_CN.json +5 -3
  82. package/dist/generated/assets/cldr/zh_HK.json +5 -3
  83. package/dist/generated/assets/cldr/zh_SG.json +5 -3
  84. package/dist/generated/assets/cldr/zh_TW.json +5 -3
  85. package/dist/generated/json-imports/LocaleData-static.js +90 -0
  86. package/dist/generated/json-imports/LocaleData.js +88 -91
  87. package/dist/sap/base/Log.js +2 -10
  88. package/dist/sap/base/assert.js +1 -5
  89. package/dist/sap/base/util/LoaderExtensions.js +12 -2
  90. package/dist/sap/base/util/array/uniqueSort.js +7 -7
  91. package/dist/sap/base/util/deepEqual.js +1 -5
  92. package/dist/sap/ui/base/Interface.js +3 -5
  93. package/dist/sap/ui/base/Metadata.js +1 -3
  94. package/dist/sap/ui/base/Object.js +26 -2
  95. package/dist/sap/ui/core/Core.js +2 -0
  96. package/dist/sap/ui/core/Locale.js +67 -31
  97. package/dist/sap/ui/core/LocaleData.js +56 -1504
  98. package/dist/sap/ui/core/date/UniversalDate.js +13 -5
  99. package/dist/sap/ui/core/format/DateFormat.js +402 -194
  100. package/dist/sap/ui/core/format/TimezoneUtil.js +83 -0
  101. package/package-scripts.js +10 -6
  102. package/package.json +12 -14
  103. package/src/Assets-static.js +2 -0
  104. package/src/dates/CalendarDate.js +7 -1
  105. package/src/dates/ExtremeDates.js +39 -0
  106. package/src/dates/getRoundedTimestamp.js +14 -0
  107. package/src/dates/getTodayUTCTimestamp.js +9 -0
  108. package/src/dates/modifyDateBy.js +42 -0
  109. package/src/sap/base/util/LoaderExtensions.js +12 -2
  110. package/src/sap/ui/core/Core.js +2 -0
  111. package/used-modules.txt +1 -0
@@ -1,7 +1,17 @@
1
- import { getModuleContent } from "@ui5/webcomponents-base/dist/asset-registries/LocaleData.js";
1
+ import { getLocaleData } from "@ui5/webcomponents-base/dist/asset-registries/LocaleData.js";
2
+
3
+ const loadResource = moduleName => {
4
+ const moduleFormat = moduleName.match(/sap\/ui\/core\/cldr\/(\w+)\.json/);
5
+ if (!moduleFormat) {
6
+ throw new Error(`Unknown module "${moduleName}"`);
7
+ }
8
+
9
+ const localeId = moduleFormat[1];
10
+ return getLocaleData(localeId);
11
+ };
2
12
 
3
13
  const LoaderExtensions = {
4
- loadResource: getModuleContent,
14
+ loadResource,
5
15
  };
6
16
 
7
17
  export default LoaderExtensions;
@@ -1,17 +1,17 @@
1
1
  import assert from '../../assert.js';
2
2
  var fnUniqueSort = function (aArray) {
3
- assert(aArray instanceof Array, 'uniqueSort: input parameter must be an Array');
4
- var l = aArray.length;
5
- if (l > 1) {
3
+ assert(Array.isArray(aArray), 'uniqueSort: input parameter must be an Array');
4
+ var iLength = aArray.length;
5
+ if (iLength > 1) {
6
6
  aArray.sort();
7
7
  var j = 0;
8
- for (var i = 1; i < l; i++) {
9
- if (aArray[i] !== aArray[j]) {
8
+ for (var i = 1; i < iLength; i++) {
9
+ if (aArray.indexOf(aArray[i]) === i) {
10
10
  aArray[++j] = aArray[i];
11
11
  }
12
12
  }
13
- if (++j < l) {
14
- aArray.splice(j, l - j);
13
+ if (++j < iLength) {
14
+ aArray.splice(j, iLength - j);
15
15
  }
16
16
  }
17
17
  return aArray;
@@ -14,11 +14,7 @@ var fnEqual = function (a, b, maxDepth, contains, depth) {
14
14
  Log.warning('deepEqual comparison exceeded maximum recursion depth of ' + maxDepth + '. Treating values as unequal');
15
15
  return false;
16
16
  }
17
- if (a === b) {
18
- return true;
19
- }
20
- var bIsReallyNaN = typeof a === 'number' && typeof b === 'number' && isNaN(a) && isNaN(b);
21
- if (bIsReallyNaN) {
17
+ if (a === b || Number.isNaN(a) && Number.isNaN(b)) {
22
18
  return true;
23
19
  }
24
20
  if (Array.isArray(a) && Array.isArray(b)) {
@@ -1,16 +1,14 @@
1
- var BaseObject;
2
- var Interface = function (oObject, aMethods, bFacade) {
1
+ var Interface = function (oObject, aMethods, _bReturnFacade) {
3
2
  if (!oObject) {
4
3
  return oObject;
5
4
  }
6
- BaseObject = BaseObject || sap.ui.requireSync("sap/ui/base/Object");
7
5
  function fCreateDelegator(oObject, sMethodName) {
8
6
  return function () {
9
7
  var tmp = oObject[sMethodName].apply(oObject, arguments);
10
- if (bFacade) {
8
+ if (_bReturnFacade) {
11
9
  return this;
12
10
  } else {
13
- return tmp instanceof BaseObject ? tmp.getInterface() : tmp;
11
+ return typeof tmp.getInterface === "function" ? tmp.getInterface() : tmp;
14
12
  }
15
13
  };
16
14
  }
@@ -1,5 +1,4 @@
1
1
  import ObjectPath from '../../base/util/ObjectPath.js';
2
- import Device from '../Device.js';
3
2
  import assert from '../../base/assert.js';
4
3
  import Log from '../../base/Log.js';
5
4
  import uniqueSort from '../../base/util/array/uniqueSort.js';
@@ -112,7 +111,6 @@ Metadata.prototype.isInstanceOf = function (sInterface) {
112
111
  }
113
112
  return false;
114
113
  };
115
- var WRITABLE_IFF_PHANTOM = !!Device.browser.phantomJS;
116
114
  Object.defineProperty(Metadata.prototype, '_mImplementedTypes', {
117
115
  get: function () {
118
116
  if (this === Metadata.prototype) {
@@ -128,7 +126,7 @@ Object.defineProperty(Metadata.prototype, '_mImplementedTypes', {
128
126
  }
129
127
  Object.defineProperty(this, '_mImplementedTypes', {
130
128
  value: Object.freeze(result),
131
- writable: WRITABLE_IFF_PHANTOM,
129
+ writable: false,
132
130
  configurable: false
133
131
  });
134
132
  return result;
@@ -1,4 +1,3 @@
1
- import Interface from './Interface.js';
2
1
  import Metadata from './Metadata.js';
3
2
  import Log from '../../base/Log.js';
4
3
  var BaseObject = Metadata.createClass('sap.ui.base.Object', {
@@ -11,7 +10,7 @@ var BaseObject = Metadata.createClass('sap.ui.base.Object', {
11
10
  BaseObject.prototype.destroy = function () {
12
11
  };
13
12
  BaseObject.prototype.getInterface = function () {
14
- var oInterface = new Interface(this, this.getMetadata().getAllPublicMethods());
13
+ var oInterface = new BaseObject._Interface(this, this.getMetadata().getAllPublicMethods());
15
14
  this.getInterface = function () {
16
15
  return oInterface;
17
16
  };
@@ -37,4 +36,29 @@ BaseObject.prototype.isA = function (vTypeName) {
37
36
  BaseObject.isA = function (oObject, vTypeName) {
38
37
  return oObject instanceof BaseObject && oObject.isA(vTypeName);
39
38
  };
39
+ BaseObject._Interface = function (oObject, aMethods, _bReturnFacade) {
40
+ if (!oObject) {
41
+ return oObject;
42
+ }
43
+ function fCreateDelegator(oObject, sMethodName) {
44
+ return function () {
45
+ var tmp = oObject[sMethodName].apply(oObject, arguments);
46
+ if (_bReturnFacade) {
47
+ return this;
48
+ } else {
49
+ return tmp instanceof BaseObject ? tmp.getInterface() : tmp;
50
+ }
51
+ };
52
+ }
53
+ if (!aMethods) {
54
+ return {};
55
+ }
56
+ var sMethodName;
57
+ for (var i = 0, ml = aMethods.length; i < ml; i++) {
58
+ sMethodName = aMethods[i];
59
+ if (!oObject[sMethodName] || typeof oObject[sMethodName] === 'function') {
60
+ this[sMethodName] = fCreateDelegator(oObject, sMethodName);
61
+ }
62
+ }
63
+ };
40
64
  export default BaseObject;
@@ -2,6 +2,7 @@ import { getLanguage } from "@ui5/webcomponents-base/dist/config/Language.js";
2
2
  import { getCalendarType } from "@ui5/webcomponents-base/dist/config/CalendarType.js";
3
3
  import getDesigntimePropertyAsArray from "@ui5/webcomponents-base/dist/util/getDesigntimePropertyAsArray.js";
4
4
  import getLocale from "@ui5/webcomponents-base/dist/locale/getLocale.js";
5
+ import TimezoneUtil from "./format/TimezoneUtil.js";
5
6
 
6
7
  const emptyFn = () => {};
7
8
 
@@ -24,6 +25,7 @@ const Configuration = {
24
25
  getSupportedLanguages: () => 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$"),
25
26
  getOriginInfo: emptyFn,
26
27
  getFormatSettings: () => FormatSettings,
28
+ getTimezone: () => TimezoneUtil.getLocalTimezone(),
27
29
  };
28
30
 
29
31
  /**
@@ -1,12 +1,13 @@
1
1
  import BaseObject from '../base/Object.js';
2
2
  import assert from '../../base/assert.js';
3
+ import CalendarType from './CalendarType.js';
3
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;
4
5
  var Locale = BaseObject.extend('sap.ui.core.Locale', {
5
6
  constructor: function (sLocaleId) {
6
7
  BaseObject.apply(this);
7
8
  var aResult = rLocale.exec(sLocaleId.replace(/_/g, '-'));
8
9
  if (aResult === null) {
9
- throw 'The given language \'' + sLocaleId + '\' does not adhere to BCP-47.';
10
+ throw new TypeError('The given language \'' + sLocaleId + '\' does not adhere to BCP-47.');
10
11
  }
11
12
  this.sLocaleId = sLocaleId;
12
13
  this.sLanguage = aResult[1] || null;
@@ -59,54 +60,71 @@ var Locale = BaseObject.extend('sap.ui.core.Locale', {
59
60
  return this.getPrivateUseSubtags().indexOf(sSubtag) >= 0;
60
61
  },
61
62
  toString: function () {
62
- var r = [this.sLanguage];
63
- if (this.sScript) {
64
- r.push(this.sScript);
65
- }
66
- if (this.sRegion) {
67
- r.push(this.sRegion);
68
- }
69
- if (this.sVariant) {
70
- r.push(this.sVariant);
71
- }
72
- if (this.sExtension) {
73
- r.push(this.sExtension);
74
- }
75
- if (this.sPrivateUse) {
76
- r.push(this.sPrivateUse);
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;
77
71
  }
78
- return r.join('-');
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;
79
76
  },
80
77
  getSAPLogonLanguage: function () {
81
- var sLanguage = this.sLanguage || '', m;
78
+ var sLanguage = this.sLanguage || '';
82
79
  if (sLanguage.indexOf('-') >= 0) {
83
80
  sLanguage = sLanguage.slice(0, sLanguage.indexOf('-'));
84
81
  }
85
82
  sLanguage = M_ISO639_OLD_TO_NEW[sLanguage] || sLanguage;
86
- if (sLanguage === 'zh') {
87
- if (this.sScript === 'Hant' || !this.sScript && this.sRegion === 'TW') {
88
- sLanguage = 'zf';
89
- }
83
+ if (sLanguage === 'zh' && !this.sScript && this.sRegion === 'TW') {
84
+ return 'ZF';
90
85
  }
91
- if (this.sPrivateUse && (m = /-(saptrc|sappsd)(?:-|$)/i.exec(this.sPrivateUse))) {
92
- sLanguage = m[1].toLowerCase() === 'saptrc' ? '1Q' : '2Q';
93
- }
94
- return sLanguage.toUpperCase();
86
+ 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();
87
+ },
88
+ getPreferredCalendarType: function () {
89
+ return Locale._mPreferredCalendar[this.getLanguage() + '-' + this.getRegion()] || Locale._mPreferredCalendar[this.getLanguage()] || Locale._mPreferredCalendar['default'];
95
90
  }
96
91
  });
92
+ function getPseudoLanguageTag(sPrivateUse) {
93
+ if (sPrivateUse) {
94
+ var m = /-(saptrc|sappsd|saprigi)(?:-|$)/i.exec(sPrivateUse);
95
+ return m && 'en-US-x-' + m[1].toLowerCase();
96
+ }
97
+ }
97
98
  var M_ISO639_OLD_TO_NEW = {
98
99
  'iw': 'he',
99
- 'ji': 'yi',
100
- 'in': 'id',
101
- 'sh': 'sr'
100
+ 'ji': 'yi'
101
+ };
102
+ var M_ABAP_LANGUAGE_TO_LOCALE = {
103
+ 'ZH': 'zh-Hans',
104
+ 'ZF': 'zh-Hant',
105
+ 'SH': 'sr-Latn',
106
+ '6N': 'en-GB',
107
+ '1P': 'pt-PT',
108
+ '1X': 'es-MX',
109
+ '3F': 'fr-CA',
110
+ '1Q': 'en-US-x-saptrc',
111
+ '2Q': 'en-US-x-sappsd',
112
+ '3Q': 'en-US-x-saprigi'
102
113
  };
114
+ var M_LOCALE_TO_ABAP_LANGUAGE = inverse(M_ABAP_LANGUAGE_TO_LOCALE);
103
115
  function getDesigntimePropertyAsArray(sValue) {
104
116
  var m = /\$([-a-z0-9A-Z._]+)(?::([^$]*))?\$/.exec(sValue);
105
117
  return m && m[2] ? m[2].split(/,/) : null;
106
118
  }
107
119
  var A_RTL_LOCALES = getDesigntimePropertyAsArray('$cldr-rtl-locales:ar,fa,he$') || [];
108
- Locale._cldrLocales = getDesigntimePropertyAsArray('$cldr-locales:ar,ar_EG,ar_SA,bg,br,ca,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,nn,pl,pt,pt_PT,ro,ru,ru_UA,sk,sl,sr,sv,th,tr,uk,vi,zh_CN,zh_HK,zh_SG,zh_TW$');
109
- Locale._coreI18nLocales = getDesigntimePropertyAsArray('$core-i18n-locales:,ar,bg,ca,cs,da,de,el,en,es,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$');
120
+ 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$');
121
+ Locale._mPreferredCalendar = {
122
+ 'ar-SA': CalendarType.Islamic,
123
+ 'fa': CalendarType.Persian,
124
+ 'th': CalendarType.Buddhist,
125
+ 'default': CalendarType.Gregorian
126
+ };
127
+ 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$');
110
128
  Locale._impliesRTL = function (vLanguage) {
111
129
  var oLocale = vLanguage instanceof Locale ? vLanguage : new Locale(vLanguage);
112
130
  var sLanguage = oLocale.getLanguage() || '';
@@ -117,4 +135,22 @@ Locale._impliesRTL = function (vLanguage) {
117
135
  }
118
136
  return A_RTL_LOCALES.indexOf(sLanguage) >= 0;
119
137
  };
138
+ Locale.fromSAPLogonLanguage = function (sSAPLogonLanguage) {
139
+ if (sSAPLogonLanguage && typeof sSAPLogonLanguage === 'string') {
140
+ sSAPLogonLanguage = M_ABAP_LANGUAGE_TO_LOCALE[sSAPLogonLanguage.toUpperCase()] || sSAPLogonLanguage;
141
+ try {
142
+ return new Locale(sSAPLogonLanguage);
143
+ } catch (e) {
144
+ }
145
+ }
146
+ };
147
+ function join() {
148
+ return Array.prototype.filter.call(arguments, Boolean).join('-');
149
+ }
150
+ function inverse(obj) {
151
+ return Object.keys(obj).reduce(function (inv, key) {
152
+ inv[obj[key]] = key;
153
+ return inv;
154
+ }, {});
155
+ }
120
156
  export default Locale;