index.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. function declension(scheme, count) {
  7. // scheme for count=1 exists
  8. if (scheme.one !== undefined && count === 1) {
  9. return scheme.one;
  10. }
  11. var rem10 = count % 10;
  12. var rem100 = count % 100;
  13. // 1, 21, 31, ...
  14. if (rem10 === 1 && rem100 !== 11) {
  15. return scheme.singularNominative.replace('{{count}}', String(count));
  16. // 2, 3, 4, 22, 23, 24, 32 ...
  17. } else if (rem10 >= 2 && rem10 <= 4 && (rem100 < 10 || rem100 > 20)) {
  18. return scheme.singularGenitive.replace('{{count}}', String(count));
  19. // 5, 6, 7, 8, 9, 10, 11, ...
  20. } else {
  21. return scheme.pluralGenitive.replace('{{count}}', String(count));
  22. }
  23. }
  24. function buildLocalizeTokenFn(scheme) {
  25. return function (count, options) {
  26. if (options !== null && options !== void 0 && options.addSuffix) {
  27. if (options.comparison && options.comparison > 0) {
  28. if (scheme.future) {
  29. return declension(scheme.future, count);
  30. } else {
  31. return 'через ' + declension(scheme.regular, count);
  32. }
  33. } else {
  34. if (scheme.past) {
  35. return declension(scheme.past, count);
  36. } else {
  37. return declension(scheme.regular, count) + ' назад';
  38. }
  39. }
  40. } else {
  41. return declension(scheme.regular, count);
  42. }
  43. };
  44. }
  45. var formatDistanceLocale = {
  46. lessThanXSeconds: buildLocalizeTokenFn({
  47. regular: {
  48. one: 'меньше секунды',
  49. singularNominative: 'меньше {{count}} секунды',
  50. singularGenitive: 'меньше {{count}} секунд',
  51. pluralGenitive: 'меньше {{count}} секунд'
  52. },
  53. future: {
  54. one: 'меньше, чем через секунду',
  55. singularNominative: 'меньше, чем через {{count}} секунду',
  56. singularGenitive: 'меньше, чем через {{count}} секунды',
  57. pluralGenitive: 'меньше, чем через {{count}} секунд'
  58. }
  59. }),
  60. xSeconds: buildLocalizeTokenFn({
  61. regular: {
  62. singularNominative: '{{count}} секунда',
  63. singularGenitive: '{{count}} секунды',
  64. pluralGenitive: '{{count}} секунд'
  65. },
  66. past: {
  67. singularNominative: '{{count}} секунду назад',
  68. singularGenitive: '{{count}} секунды назад',
  69. pluralGenitive: '{{count}} секунд назад'
  70. },
  71. future: {
  72. singularNominative: 'через {{count}} секунду',
  73. singularGenitive: 'через {{count}} секунды',
  74. pluralGenitive: 'через {{count}} секунд'
  75. }
  76. }),
  77. halfAMinute: function halfAMinute(_count, options) {
  78. if (options !== null && options !== void 0 && options.addSuffix) {
  79. if (options.comparison && options.comparison > 0) {
  80. return 'через полминуты';
  81. } else {
  82. return 'полминуты назад';
  83. }
  84. }
  85. return 'полминуты';
  86. },
  87. lessThanXMinutes: buildLocalizeTokenFn({
  88. regular: {
  89. one: 'меньше минуты',
  90. singularNominative: 'меньше {{count}} минуты',
  91. singularGenitive: 'меньше {{count}} минут',
  92. pluralGenitive: 'меньше {{count}} минут'
  93. },
  94. future: {
  95. one: 'меньше, чем через минуту',
  96. singularNominative: 'меньше, чем через {{count}} минуту',
  97. singularGenitive: 'меньше, чем через {{count}} минуты',
  98. pluralGenitive: 'меньше, чем через {{count}} минут'
  99. }
  100. }),
  101. xMinutes: buildLocalizeTokenFn({
  102. regular: {
  103. singularNominative: '{{count}} минута',
  104. singularGenitive: '{{count}} минуты',
  105. pluralGenitive: '{{count}} минут'
  106. },
  107. past: {
  108. singularNominative: '{{count}} минуту назад',
  109. singularGenitive: '{{count}} минуты назад',
  110. pluralGenitive: '{{count}} минут назад'
  111. },
  112. future: {
  113. singularNominative: 'через {{count}} минуту',
  114. singularGenitive: 'через {{count}} минуты',
  115. pluralGenitive: 'через {{count}} минут'
  116. }
  117. }),
  118. aboutXHours: buildLocalizeTokenFn({
  119. regular: {
  120. singularNominative: 'около {{count}} часа',
  121. singularGenitive: 'около {{count}} часов',
  122. pluralGenitive: 'около {{count}} часов'
  123. },
  124. future: {
  125. singularNominative: 'приблизительно через {{count}} час',
  126. singularGenitive: 'приблизительно через {{count}} часа',
  127. pluralGenitive: 'приблизительно через {{count}} часов'
  128. }
  129. }),
  130. xHours: buildLocalizeTokenFn({
  131. regular: {
  132. singularNominative: '{{count}} час',
  133. singularGenitive: '{{count}} часа',
  134. pluralGenitive: '{{count}} часов'
  135. }
  136. }),
  137. xDays: buildLocalizeTokenFn({
  138. regular: {
  139. singularNominative: '{{count}} день',
  140. singularGenitive: '{{count}} дня',
  141. pluralGenitive: '{{count}} дней'
  142. }
  143. }),
  144. aboutXWeeks: buildLocalizeTokenFn({
  145. regular: {
  146. singularNominative: 'около {{count}} недели',
  147. singularGenitive: 'около {{count}} недель',
  148. pluralGenitive: 'около {{count}} недель'
  149. },
  150. future: {
  151. singularNominative: 'приблизительно через {{count}} неделю',
  152. singularGenitive: 'приблизительно через {{count}} недели',
  153. pluralGenitive: 'приблизительно через {{count}} недель'
  154. }
  155. }),
  156. xWeeks: buildLocalizeTokenFn({
  157. regular: {
  158. singularNominative: '{{count}} неделя',
  159. singularGenitive: '{{count}} недели',
  160. pluralGenitive: '{{count}} недель'
  161. }
  162. }),
  163. aboutXMonths: buildLocalizeTokenFn({
  164. regular: {
  165. singularNominative: 'около {{count}} месяца',
  166. singularGenitive: 'около {{count}} месяцев',
  167. pluralGenitive: 'около {{count}} месяцев'
  168. },
  169. future: {
  170. singularNominative: 'приблизительно через {{count}} месяц',
  171. singularGenitive: 'приблизительно через {{count}} месяца',
  172. pluralGenitive: 'приблизительно через {{count}} месяцев'
  173. }
  174. }),
  175. xMonths: buildLocalizeTokenFn({
  176. regular: {
  177. singularNominative: '{{count}} месяц',
  178. singularGenitive: '{{count}} месяца',
  179. pluralGenitive: '{{count}} месяцев'
  180. }
  181. }),
  182. aboutXYears: buildLocalizeTokenFn({
  183. regular: {
  184. singularNominative: 'около {{count}} года',
  185. singularGenitive: 'около {{count}} лет',
  186. pluralGenitive: 'около {{count}} лет'
  187. },
  188. future: {
  189. singularNominative: 'приблизительно через {{count}} год',
  190. singularGenitive: 'приблизительно через {{count}} года',
  191. pluralGenitive: 'приблизительно через {{count}} лет'
  192. }
  193. }),
  194. xYears: buildLocalizeTokenFn({
  195. regular: {
  196. singularNominative: '{{count}} год',
  197. singularGenitive: '{{count}} года',
  198. pluralGenitive: '{{count}} лет'
  199. }
  200. }),
  201. overXYears: buildLocalizeTokenFn({
  202. regular: {
  203. singularNominative: 'больше {{count}} года',
  204. singularGenitive: 'больше {{count}} лет',
  205. pluralGenitive: 'больше {{count}} лет'
  206. },
  207. future: {
  208. singularNominative: 'больше, чем через {{count}} год',
  209. singularGenitive: 'больше, чем через {{count}} года',
  210. pluralGenitive: 'больше, чем через {{count}} лет'
  211. }
  212. }),
  213. almostXYears: buildLocalizeTokenFn({
  214. regular: {
  215. singularNominative: 'почти {{count}} год',
  216. singularGenitive: 'почти {{count}} года',
  217. pluralGenitive: 'почти {{count}} лет'
  218. },
  219. future: {
  220. singularNominative: 'почти через {{count}} год',
  221. singularGenitive: 'почти через {{count}} года',
  222. pluralGenitive: 'почти через {{count}} лет'
  223. }
  224. })
  225. };
  226. var formatDistance = function formatDistance(token, count, options) {
  227. return formatDistanceLocale[token](count, options);
  228. };
  229. var _default = formatDistance;
  230. exports.default = _default;
  231. module.exports = exports.default;