formatDistance.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. "use strict";
  2. exports.formatDistance = void 0;
  3. const formatDistanceLocale = {
  4. lessThanXSeconds: {
  5. one: {
  6. regular: "méně než 1 sekunda",
  7. past: "před méně než 1 sekundou",
  8. future: "za méně než 1 sekundu",
  9. },
  10. few: {
  11. regular: "méně než {{count}} sekundy",
  12. past: "před méně než {{count}} sekundami",
  13. future: "za méně než {{count}} sekundy",
  14. },
  15. many: {
  16. regular: "méně než {{count}} sekund",
  17. past: "před méně než {{count}} sekundami",
  18. future: "za méně než {{count}} sekund",
  19. },
  20. },
  21. xSeconds: {
  22. one: {
  23. regular: "1 sekunda",
  24. past: "před 1 sekundou",
  25. future: "za 1 sekundu",
  26. },
  27. few: {
  28. regular: "{{count}} sekundy",
  29. past: "před {{count}} sekundami",
  30. future: "za {{count}} sekundy",
  31. },
  32. many: {
  33. regular: "{{count}} sekund",
  34. past: "před {{count}} sekundami",
  35. future: "za {{count}} sekund",
  36. },
  37. },
  38. halfAMinute: {
  39. type: "other",
  40. other: {
  41. regular: "půl minuty",
  42. past: "před půl minutou",
  43. future: "za půl minuty",
  44. },
  45. },
  46. lessThanXMinutes: {
  47. one: {
  48. regular: "méně než 1 minuta",
  49. past: "před méně než 1 minutou",
  50. future: "za méně než 1 minutu",
  51. },
  52. few: {
  53. regular: "méně než {{count}} minuty",
  54. past: "před méně než {{count}} minutami",
  55. future: "za méně než {{count}} minuty",
  56. },
  57. many: {
  58. regular: "méně než {{count}} minut",
  59. past: "před méně než {{count}} minutami",
  60. future: "za méně než {{count}} minut",
  61. },
  62. },
  63. xMinutes: {
  64. one: {
  65. regular: "1 minuta",
  66. past: "před 1 minutou",
  67. future: "za 1 minutu",
  68. },
  69. few: {
  70. regular: "{{count}} minuty",
  71. past: "před {{count}} minutami",
  72. future: "za {{count}} minuty",
  73. },
  74. many: {
  75. regular: "{{count}} minut",
  76. past: "před {{count}} minutami",
  77. future: "za {{count}} minut",
  78. },
  79. },
  80. aboutXHours: {
  81. one: {
  82. regular: "přibližně 1 hodina",
  83. past: "přibližně před 1 hodinou",
  84. future: "přibližně za 1 hodinu",
  85. },
  86. few: {
  87. regular: "přibližně {{count}} hodiny",
  88. past: "přibližně před {{count}} hodinami",
  89. future: "přibližně za {{count}} hodiny",
  90. },
  91. many: {
  92. regular: "přibližně {{count}} hodin",
  93. past: "přibližně před {{count}} hodinami",
  94. future: "přibližně za {{count}} hodin",
  95. },
  96. },
  97. xHours: {
  98. one: {
  99. regular: "1 hodina",
  100. past: "před 1 hodinou",
  101. future: "za 1 hodinu",
  102. },
  103. few: {
  104. regular: "{{count}} hodiny",
  105. past: "před {{count}} hodinami",
  106. future: "za {{count}} hodiny",
  107. },
  108. many: {
  109. regular: "{{count}} hodin",
  110. past: "před {{count}} hodinami",
  111. future: "za {{count}} hodin",
  112. },
  113. },
  114. xDays: {
  115. one: {
  116. regular: "1 den",
  117. past: "před 1 dnem",
  118. future: "za 1 den",
  119. },
  120. few: {
  121. regular: "{{count}} dny",
  122. past: "před {{count}} dny",
  123. future: "za {{count}} dny",
  124. },
  125. many: {
  126. regular: "{{count}} dní",
  127. past: "před {{count}} dny",
  128. future: "za {{count}} dní",
  129. },
  130. },
  131. aboutXWeeks: {
  132. one: {
  133. regular: "přibližně 1 týden",
  134. past: "přibližně před 1 týdnem",
  135. future: "přibližně za 1 týden",
  136. },
  137. few: {
  138. regular: "přibližně {{count}} týdny",
  139. past: "přibližně před {{count}} týdny",
  140. future: "přibližně za {{count}} týdny",
  141. },
  142. many: {
  143. regular: "přibližně {{count}} týdnů",
  144. past: "přibližně před {{count}} týdny",
  145. future: "přibližně za {{count}} týdnů",
  146. },
  147. },
  148. xWeeks: {
  149. one: {
  150. regular: "1 týden",
  151. past: "před 1 týdnem",
  152. future: "za 1 týden",
  153. },
  154. few: {
  155. regular: "{{count}} týdny",
  156. past: "před {{count}} týdny",
  157. future: "za {{count}} týdny",
  158. },
  159. many: {
  160. regular: "{{count}} týdnů",
  161. past: "před {{count}} týdny",
  162. future: "za {{count}} týdnů",
  163. },
  164. },
  165. aboutXMonths: {
  166. one: {
  167. regular: "přibližně 1 měsíc",
  168. past: "přibližně před 1 měsícem",
  169. future: "přibližně za 1 měsíc",
  170. },
  171. few: {
  172. regular: "přibližně {{count}} měsíce",
  173. past: "přibližně před {{count}} měsíci",
  174. future: "přibližně za {{count}} měsíce",
  175. },
  176. many: {
  177. regular: "přibližně {{count}} měsíců",
  178. past: "přibližně před {{count}} měsíci",
  179. future: "přibližně za {{count}} měsíců",
  180. },
  181. },
  182. xMonths: {
  183. one: {
  184. regular: "1 měsíc",
  185. past: "před 1 měsícem",
  186. future: "za 1 měsíc",
  187. },
  188. few: {
  189. regular: "{{count}} měsíce",
  190. past: "před {{count}} měsíci",
  191. future: "za {{count}} měsíce",
  192. },
  193. many: {
  194. regular: "{{count}} měsíců",
  195. past: "před {{count}} měsíci",
  196. future: "za {{count}} měsíců",
  197. },
  198. },
  199. aboutXYears: {
  200. one: {
  201. regular: "přibližně 1 rok",
  202. past: "přibližně před 1 rokem",
  203. future: "přibližně za 1 rok",
  204. },
  205. few: {
  206. regular: "přibližně {{count}} roky",
  207. past: "přibližně před {{count}} roky",
  208. future: "přibližně za {{count}} roky",
  209. },
  210. many: {
  211. regular: "přibližně {{count}} roků",
  212. past: "přibližně před {{count}} roky",
  213. future: "přibližně za {{count}} roků",
  214. },
  215. },
  216. xYears: {
  217. one: {
  218. regular: "1 rok",
  219. past: "před 1 rokem",
  220. future: "za 1 rok",
  221. },
  222. few: {
  223. regular: "{{count}} roky",
  224. past: "před {{count}} roky",
  225. future: "za {{count}} roky",
  226. },
  227. many: {
  228. regular: "{{count}} roků",
  229. past: "před {{count}} roky",
  230. future: "za {{count}} roků",
  231. },
  232. },
  233. overXYears: {
  234. one: {
  235. regular: "více než 1 rok",
  236. past: "před více než 1 rokem",
  237. future: "za více než 1 rok",
  238. },
  239. few: {
  240. regular: "více než {{count}} roky",
  241. past: "před více než {{count}} roky",
  242. future: "za více než {{count}} roky",
  243. },
  244. many: {
  245. regular: "více než {{count}} roků",
  246. past: "před více než {{count}} roky",
  247. future: "za více než {{count}} roků",
  248. },
  249. },
  250. almostXYears: {
  251. one: {
  252. regular: "skoro 1 rok",
  253. past: "skoro před 1 rokem",
  254. future: "skoro za 1 rok",
  255. },
  256. few: {
  257. regular: "skoro {{count}} roky",
  258. past: "skoro před {{count}} roky",
  259. future: "skoro za {{count}} roky",
  260. },
  261. many: {
  262. regular: "skoro {{count}} roků",
  263. past: "skoro před {{count}} roky",
  264. future: "skoro za {{count}} roků",
  265. },
  266. },
  267. };
  268. const formatDistance = (token, count, options) => {
  269. let pluralResult;
  270. const tokenValue = formatDistanceLocale[token];
  271. // cs pluralization
  272. if (tokenValue.type === "other") {
  273. pluralResult = tokenValue.other;
  274. } else if (count === 1) {
  275. pluralResult = tokenValue.one;
  276. } else if (count > 1 && count < 5) {
  277. pluralResult = tokenValue.few;
  278. } else {
  279. pluralResult = tokenValue.many;
  280. }
  281. // times
  282. const suffixExist = options?.addSuffix === true;
  283. const comparison = options?.comparison;
  284. let timeResult;
  285. if (suffixExist && comparison === -1) {
  286. timeResult = pluralResult.past;
  287. } else if (suffixExist && comparison === 1) {
  288. timeResult = pluralResult.future;
  289. } else {
  290. timeResult = pluralResult.regular;
  291. }
  292. return timeResult.replace("{{count}}", String(count));
  293. };
  294. exports.formatDistance = formatDistance;