localize.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. import { buildLocalizeFn } from "../../_lib/buildLocalizeFn.js";
  2. const eraValues = {
  3. narrow: ["до н.э.", "н.э."],
  4. abbreviated: ["до н. э.", "н. э."],
  5. wide: ["до нашей эры", "нашей эры"],
  6. };
  7. const quarterValues = {
  8. narrow: ["1", "2", "3", "4"],
  9. abbreviated: ["1-й кв.", "2-й кв.", "3-й кв.", "4-й кв."],
  10. wide: ["1-й квартал", "2-й квартал", "3-й квартал", "4-й квартал"],
  11. };
  12. const monthValues = {
  13. narrow: ["Я", "Ф", "М", "А", "М", "И", "И", "А", "С", "О", "Н", "Д"],
  14. abbreviated: [
  15. "янв.",
  16. "фев.",
  17. "март",
  18. "апр.",
  19. "май",
  20. "июнь",
  21. "июль",
  22. "авг.",
  23. "сент.",
  24. "окт.",
  25. "нояб.",
  26. "дек.",
  27. ],
  28. wide: [
  29. "январь",
  30. "февраль",
  31. "март",
  32. "апрель",
  33. "май",
  34. "июнь",
  35. "июль",
  36. "август",
  37. "сентябрь",
  38. "октябрь",
  39. "ноябрь",
  40. "декабрь",
  41. ],
  42. };
  43. const formattingMonthValues = {
  44. narrow: ["Я", "Ф", "М", "А", "М", "И", "И", "А", "С", "О", "Н", "Д"],
  45. abbreviated: [
  46. "янв.",
  47. "фев.",
  48. "мар.",
  49. "апр.",
  50. "мая",
  51. "июн.",
  52. "июл.",
  53. "авг.",
  54. "сент.",
  55. "окт.",
  56. "нояб.",
  57. "дек.",
  58. ],
  59. wide: [
  60. "января",
  61. "февраля",
  62. "марта",
  63. "апреля",
  64. "мая",
  65. "июня",
  66. "июля",
  67. "августа",
  68. "сентября",
  69. "октября",
  70. "ноября",
  71. "декабря",
  72. ],
  73. };
  74. const dayValues = {
  75. narrow: ["В", "П", "В", "С", "Ч", "П", "С"],
  76. short: ["вс", "пн", "вт", "ср", "чт", "пт", "сб"],
  77. abbreviated: ["вск", "пнд", "втр", "срд", "чтв", "птн", "суб"],
  78. wide: [
  79. "воскресенье",
  80. "понедельник",
  81. "вторник",
  82. "среда",
  83. "четверг",
  84. "пятница",
  85. "суббота",
  86. ],
  87. };
  88. const dayPeriodValues = {
  89. narrow: {
  90. am: "ДП",
  91. pm: "ПП",
  92. midnight: "полн.",
  93. noon: "полд.",
  94. morning: "утро",
  95. afternoon: "день",
  96. evening: "веч.",
  97. night: "ночь",
  98. },
  99. abbreviated: {
  100. am: "ДП",
  101. pm: "ПП",
  102. midnight: "полн.",
  103. noon: "полд.",
  104. morning: "утро",
  105. afternoon: "день",
  106. evening: "веч.",
  107. night: "ночь",
  108. },
  109. wide: {
  110. am: "ДП",
  111. pm: "ПП",
  112. midnight: "полночь",
  113. noon: "полдень",
  114. morning: "утро",
  115. afternoon: "день",
  116. evening: "вечер",
  117. night: "ночь",
  118. },
  119. };
  120. const formattingDayPeriodValues = {
  121. narrow: {
  122. am: "ДП",
  123. pm: "ПП",
  124. midnight: "полн.",
  125. noon: "полд.",
  126. morning: "утра",
  127. afternoon: "дня",
  128. evening: "веч.",
  129. night: "ночи",
  130. },
  131. abbreviated: {
  132. am: "ДП",
  133. pm: "ПП",
  134. midnight: "полн.",
  135. noon: "полд.",
  136. morning: "утра",
  137. afternoon: "дня",
  138. evening: "веч.",
  139. night: "ночи",
  140. },
  141. wide: {
  142. am: "ДП",
  143. pm: "ПП",
  144. midnight: "полночь",
  145. noon: "полдень",
  146. morning: "утра",
  147. afternoon: "дня",
  148. evening: "вечера",
  149. night: "ночи",
  150. },
  151. };
  152. const ordinalNumber = (dirtyNumber, options) => {
  153. const number = Number(dirtyNumber);
  154. const unit = options?.unit;
  155. let suffix;
  156. if (unit === "date") {
  157. suffix = "-е";
  158. } else if (unit === "week" || unit === "minute" || unit === "second") {
  159. suffix = "-я";
  160. } else {
  161. suffix = "-й";
  162. }
  163. return number + suffix;
  164. };
  165. export const localize = {
  166. ordinalNumber,
  167. era: buildLocalizeFn({
  168. values: eraValues,
  169. defaultWidth: "wide",
  170. }),
  171. quarter: buildLocalizeFn({
  172. values: quarterValues,
  173. defaultWidth: "wide",
  174. argumentCallback: (quarter) => quarter - 1,
  175. }),
  176. month: buildLocalizeFn({
  177. values: monthValues,
  178. defaultWidth: "wide",
  179. formattingValues: formattingMonthValues,
  180. defaultFormattingWidth: "wide",
  181. }),
  182. day: buildLocalizeFn({
  183. values: dayValues,
  184. defaultWidth: "wide",
  185. }),
  186. dayPeriod: buildLocalizeFn({
  187. values: dayPeriodValues,
  188. defaultWidth: "any",
  189. formattingValues: formattingDayPeriodValues,
  190. defaultFormattingWidth: "wide",
  191. }),
  192. };