locale-f2ebe4fa.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /*!
  2. * All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. * See https://github.com/Esri/calcite-components/blob/master/LICENSE.md for details.
  4. * v1.0.0-beta.82
  5. */
  6. 'use strict';
  7. const number = require('./number-364babbc.js');
  8. const locales = [
  9. "ar",
  10. "bg",
  11. "bs",
  12. "ca",
  13. "cs",
  14. "da",
  15. "de",
  16. "de-CH",
  17. "el",
  18. "en",
  19. "en-AU",
  20. "en-CA",
  21. "en-GB",
  22. "es",
  23. "es-MX",
  24. "et",
  25. "fi",
  26. "fr",
  27. "fr-CH",
  28. "he",
  29. "hi",
  30. "hr",
  31. "hu",
  32. "id",
  33. "it",
  34. "it-CH",
  35. "ja",
  36. "ko",
  37. "lt",
  38. "lv",
  39. "mk",
  40. "nb",
  41. "nl",
  42. "pl",
  43. "pt",
  44. "pt-PT",
  45. "ro",
  46. "ru",
  47. "sk",
  48. "sl",
  49. "sr",
  50. "sv",
  51. "th",
  52. "tr",
  53. "uk",
  54. "vi",
  55. "zh-CN",
  56. "zh-HK",
  57. "zh-TW"
  58. ];
  59. const allDecimalsExceptLast = new RegExp(`[.](?=.*[.])`, "g");
  60. const everythingExceptNumbersDecimalsAndMinusSigns = new RegExp("[^0-9-.]", "g");
  61. const defaultGroupSeparator = new RegExp(",", "g");
  62. function createLocaleNumberFormatter(locale) {
  63. return new Intl.NumberFormat(locale, {
  64. minimumFractionDigits: 0,
  65. maximumFractionDigits: 20
  66. });
  67. }
  68. function delocalizeNumberString(numberString, locale) {
  69. return number.sanitizeExponentialNumberString(numberString, (nonExpoNumString) => {
  70. const delocalizedNumberString = nonExpoNumString
  71. .replace(getMinusSign(locale), "-")
  72. .replace(getGroupSeparator(locale), "")
  73. .replace(getDecimalSeparator(locale), ".")
  74. .replace(allDecimalsExceptLast, "")
  75. .replace(everythingExceptNumbersDecimalsAndMinusSigns, "");
  76. return number.isValidNumber(delocalizedNumberString) ? delocalizedNumberString : nonExpoNumString;
  77. });
  78. }
  79. function getGroupSeparator(locale) {
  80. const formatter = createLocaleNumberFormatter(locale);
  81. const parts = formatter.formatToParts(1234567);
  82. const value = parts.find((part) => part.type === "group").value;
  83. // change whitespace group characters that don't render correctly
  84. return value.trim().length === 0 ? " " : value;
  85. }
  86. function getDecimalSeparator(locale) {
  87. const formatter = createLocaleNumberFormatter(locale);
  88. const parts = formatter.formatToParts(1.1);
  89. return parts.find((part) => part.type === "decimal").value;
  90. }
  91. function getMinusSign(locale) {
  92. const formatter = createLocaleNumberFormatter(locale);
  93. const parts = formatter.formatToParts(-9);
  94. return parts.find((part) => part.type === "minusSign").value;
  95. }
  96. function localizeNumberString(numberString, locale, displayGroupSeparator = false) {
  97. return number.sanitizeExponentialNumberString(numberString, (nonExpoNumString) => {
  98. if (nonExpoNumString) {
  99. const number$1 = Number(number.sanitizeDecimalString(nonExpoNumString.replace(defaultGroupSeparator, "")));
  100. if (!isNaN(number$1)) {
  101. const formatter = createLocaleNumberFormatter(locale);
  102. const parts = formatter.formatToParts(number$1);
  103. const localizedNumberString = parts
  104. .map(({ type, value }) => {
  105. switch (type) {
  106. case "group":
  107. return displayGroupSeparator ? getGroupSeparator(locale) : "";
  108. case "decimal":
  109. return getDecimalSeparator(locale);
  110. case "minusSign":
  111. return getMinusSign(locale);
  112. default:
  113. return value;
  114. }
  115. })
  116. .reduce((string, part) => string + part);
  117. return localizedNumberString;
  118. }
  119. }
  120. return nonExpoNumString;
  121. });
  122. }
  123. exports.delocalizeNumberString = delocalizeNumberString;
  124. exports.getDecimalSeparator = getDecimalSeparator;
  125. exports.locales = locales;
  126. exports.localizeNumberString = localizeNumberString;