localize.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. import { buildLocalizeFn } from "../../_lib/buildLocalizeFn.js";
  2. const numberValues = {
  3. locale: {
  4. 1: "१",
  5. 2: "२",
  6. 3: "३",
  7. 4: "४",
  8. 5: "५",
  9. 6: "६",
  10. 7: "७",
  11. 8: "८",
  12. 9: "९",
  13. 0: "०",
  14. },
  15. number: {
  16. "१": "1",
  17. "२": "2",
  18. "३": "3",
  19. "४": "4",
  20. "५": "5",
  21. "६": "6",
  22. "७": "7",
  23. "८": "8",
  24. "९": "9",
  25. "०": "0",
  26. },
  27. };
  28. // CLDR #1585 - #1592
  29. const eraValues = {
  30. narrow: ["ईसा-पूर्व", "ईस्वी"],
  31. abbreviated: ["ईसा-पूर्व", "ईस्वी"],
  32. wide: ["ईसा-पूर्व", "ईसवी सन"],
  33. };
  34. // CLDR #1593 - #1616
  35. const quarterValues = {
  36. narrow: ["1", "2", "3", "4"],
  37. abbreviated: ["ति1", "ति2", "ति3", "ति4"],
  38. wide: ["पहली तिमाही", "दूसरी तिमाही", "तीसरी तिमाही", "चौथी तिमाही"],
  39. };
  40. // Note: in English, the names of days of the week and months are capitalized.
  41. // If you are making a new locale based on this one, check if the same is true for the language you're working on.
  42. // Generally, formatted dates should look like they are in the middle of a sentence,
  43. // e.g. in Spanish language the weekdays and months should be in the lowercase.
  44. // https://www.unicode.org/cldr/charts/32/summary/hi.html
  45. // CLDR #1617 - #1688
  46. const monthValues = {
  47. narrow: [
  48. "ज",
  49. "फ़",
  50. "मा",
  51. "अ",
  52. "मई",
  53. "जू",
  54. "जु",
  55. "अग",
  56. "सि",
  57. "अक्टू",
  58. "न",
  59. "दि",
  60. ],
  61. abbreviated: [
  62. "जन",
  63. "फ़र",
  64. "मार्च",
  65. "अप्रैल",
  66. "मई",
  67. "जून",
  68. "जुल",
  69. "अग",
  70. "सित",
  71. "अक्टू",
  72. "नव",
  73. "दिस",
  74. ],
  75. wide: [
  76. "जनवरी",
  77. "फ़रवरी",
  78. "मार्च",
  79. "अप्रैल",
  80. "मई",
  81. "जून",
  82. "जुलाई",
  83. "अगस्त",
  84. "सितंबर",
  85. "अक्टूबर",
  86. "नवंबर",
  87. "दिसंबर",
  88. ],
  89. };
  90. // CLDR #1689 - #1744
  91. const dayValues = {
  92. narrow: ["र", "सो", "मं", "बु", "गु", "शु", "श"],
  93. short: ["र", "सो", "मं", "बु", "गु", "शु", "श"],
  94. abbreviated: ["रवि", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि"],
  95. wide: [
  96. "रविवार",
  97. "सोमवार",
  98. "मंगलवार",
  99. "बुधवार",
  100. "गुरुवार",
  101. "शुक्रवार",
  102. "शनिवार",
  103. ],
  104. };
  105. const dayPeriodValues = {
  106. narrow: {
  107. am: "पूर्वाह्न",
  108. pm: "अपराह्न",
  109. midnight: "मध्यरात्रि",
  110. noon: "दोपहर",
  111. morning: "सुबह",
  112. afternoon: "दोपहर",
  113. evening: "शाम",
  114. night: "रात",
  115. },
  116. abbreviated: {
  117. am: "पूर्वाह्न",
  118. pm: "अपराह्न",
  119. midnight: "मध्यरात्रि",
  120. noon: "दोपहर",
  121. morning: "सुबह",
  122. afternoon: "दोपहर",
  123. evening: "शाम",
  124. night: "रात",
  125. },
  126. wide: {
  127. am: "पूर्वाह्न",
  128. pm: "अपराह्न",
  129. midnight: "मध्यरात्रि",
  130. noon: "दोपहर",
  131. morning: "सुबह",
  132. afternoon: "दोपहर",
  133. evening: "शाम",
  134. night: "रात",
  135. },
  136. };
  137. const formattingDayPeriodValues = {
  138. narrow: {
  139. am: "पूर्वाह्न",
  140. pm: "अपराह्न",
  141. midnight: "मध्यरात्रि",
  142. noon: "दोपहर",
  143. morning: "सुबह",
  144. afternoon: "दोपहर",
  145. evening: "शाम",
  146. night: "रात",
  147. },
  148. abbreviated: {
  149. am: "पूर्वाह्न",
  150. pm: "अपराह्न",
  151. midnight: "मध्यरात्रि",
  152. noon: "दोपहर",
  153. morning: "सुबह",
  154. afternoon: "दोपहर",
  155. evening: "शाम",
  156. night: "रात",
  157. },
  158. wide: {
  159. am: "पूर्वाह्न",
  160. pm: "अपराह्न",
  161. midnight: "मध्यरात्रि",
  162. noon: "दोपहर",
  163. morning: "सुबह",
  164. afternoon: "दोपहर",
  165. evening: "शाम",
  166. night: "रात",
  167. },
  168. };
  169. const ordinalNumber = (dirtyNumber, _options) => {
  170. const number = Number(dirtyNumber);
  171. return numberToLocale(number);
  172. };
  173. export function localeToNumber(locale) {
  174. const enNumber = locale.toString().replace(/[१२३४५६७८९०]/g, function (match) {
  175. return numberValues.number[match];
  176. });
  177. return Number(enNumber);
  178. }
  179. export function numberToLocale(enNumber) {
  180. return enNumber.toString().replace(/\d/g, function (match) {
  181. return numberValues.locale[match];
  182. });
  183. }
  184. export const localize = {
  185. ordinalNumber,
  186. era: buildLocalizeFn({
  187. values: eraValues,
  188. defaultWidth: "wide",
  189. }),
  190. quarter: buildLocalizeFn({
  191. values: quarterValues,
  192. defaultWidth: "wide",
  193. argumentCallback: (quarter) => quarter - 1,
  194. }),
  195. month: buildLocalizeFn({
  196. values: monthValues,
  197. defaultWidth: "wide",
  198. }),
  199. day: buildLocalizeFn({
  200. values: dayValues,
  201. defaultWidth: "wide",
  202. }),
  203. dayPeriod: buildLocalizeFn({
  204. values: dayPeriodValues,
  205. defaultWidth: "wide",
  206. formattingValues: formattingDayPeriodValues,
  207. defaultFormattingWidth: "wide",
  208. }),
  209. };