1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | import moment from '../moment';
|
7 |
|
8 | function plural(word, num) {
|
9 | var forms = word.split('_');
|
10 | return num % 10 === 1 && num % 100 !== 11
|
11 | ? forms[0]
|
12 | : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
|
13 | ? forms[1]
|
14 | : forms[2];
|
15 | }
|
16 | function relativeTimeWithPlural(number, withoutSuffix, key) {
|
17 | var format = {
|
18 | ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',
|
19 | mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
|
20 | hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
|
21 | dd: 'день_дні_днів',
|
22 | MM: 'місяць_місяці_місяців',
|
23 | yy: 'рік_роки_років',
|
24 | };
|
25 | if (key === 'm') {
|
26 | return withoutSuffix ? 'хвилина' : 'хвилину';
|
27 | } else if (key === 'h') {
|
28 | return withoutSuffix ? 'година' : 'годину';
|
29 | } else {
|
30 | return number + ' ' + plural(format[key], +number);
|
31 | }
|
32 | }
|
33 | function weekdaysCaseReplace(m, format) {
|
34 | var weekdays = {
|
35 | nominative:
|
36 | 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(
|
37 | '_'
|
38 | ),
|
39 | accusative:
|
40 | 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(
|
41 | '_'
|
42 | ),
|
43 | genitive:
|
44 | 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(
|
45 | '_'
|
46 | ),
|
47 | },
|
48 | nounCase;
|
49 |
|
50 | if (m === true) {
|
51 | return weekdays['nominative']
|
52 | .slice(1, 7)
|
53 | .concat(weekdays['nominative'].slice(0, 1));
|
54 | }
|
55 | if (!m) {
|
56 | return weekdays['nominative'];
|
57 | }
|
58 |
|
59 | nounCase = /(\[[ВвУу]\]) ?dddd/.test(format)
|
60 | ? 'accusative'
|
61 | : /\[?(?:минулої|наступної)? ?\] ?dddd/.test(format)
|
62 | ? 'genitive'
|
63 | : 'nominative';
|
64 | return weekdays[nounCase][m.day()];
|
65 | }
|
66 | function processHoursFunction(str) {
|
67 | return function () {
|
68 | return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
|
69 | };
|
70 | }
|
71 |
|
72 | export default moment.defineLocale('uk', {
|
73 | months: {
|
74 | format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(
|
75 | '_'
|
76 | ),
|
77 | standalone:
|
78 | 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(
|
79 | '_'
|
80 | ),
|
81 | },
|
82 | monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(
|
83 | '_'
|
84 | ),
|
85 | weekdays: weekdaysCaseReplace,
|
86 | weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
|
87 | weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
|
88 | longDateFormat: {
|
89 | LT: 'HH:mm',
|
90 | LTS: 'HH:mm:ss',
|
91 | L: 'DD.MM.YYYY',
|
92 | LL: 'D MMMM YYYY р.',
|
93 | LLL: 'D MMMM YYYY р., HH:mm',
|
94 | LLLL: 'dddd, D MMMM YYYY р., HH:mm',
|
95 | },
|
96 | calendar: {
|
97 | sameDay: processHoursFunction('[Сьогодні '),
|
98 | nextDay: processHoursFunction('[Завтра '),
|
99 | lastDay: processHoursFunction('[Вчора '),
|
100 | nextWeek: processHoursFunction('[У] dddd ['),
|
101 | lastWeek: function () {
|
102 | switch (this.day()) {
|
103 | case 0:
|
104 | case 3:
|
105 | case 5:
|
106 | case 6:
|
107 | return processHoursFunction('[Минулої] dddd [').call(this);
|
108 | case 1:
|
109 | case 2:
|
110 | case 4:
|
111 | return processHoursFunction('[Минулого] dddd [').call(this);
|
112 | }
|
113 | },
|
114 | sameElse: 'L',
|
115 | },
|
116 | relativeTime: {
|
117 | future: 'за %s',
|
118 | past: '%s тому',
|
119 | s: 'декілька секунд',
|
120 | ss: relativeTimeWithPlural,
|
121 | m: relativeTimeWithPlural,
|
122 | mm: relativeTimeWithPlural,
|
123 | h: 'годину',
|
124 | hh: relativeTimeWithPlural,
|
125 | d: 'день',
|
126 | dd: relativeTimeWithPlural,
|
127 | M: 'місяць',
|
128 | MM: relativeTimeWithPlural,
|
129 | y: 'рік',
|
130 | yy: relativeTimeWithPlural,
|
131 | },
|
132 |
|
133 | meridiemParse: /ночі|ранку|дня|вечора/,
|
134 | isPM: function (input) {
|
135 | return /^(дня|вечора)$/.test(input);
|
136 | },
|
137 | meridiem: function (hour, minute, isLower) {
|
138 | if (hour < 4) {
|
139 | return 'ночі';
|
140 | } else if (hour < 12) {
|
141 | return 'ранку';
|
142 | } else if (hour < 17) {
|
143 | return 'дня';
|
144 | } else {
|
145 | return 'вечора';
|
146 | }
|
147 | },
|
148 | dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/,
|
149 | ordinal: function (number, period) {
|
150 | switch (period) {
|
151 | case 'M':
|
152 | case 'd':
|
153 | case 'DDD':
|
154 | case 'w':
|
155 | case 'W':
|
156 | return number + '-й';
|
157 | case 'D':
|
158 | return number + '-го';
|
159 | default:
|
160 | return number;
|
161 | }
|
162 | },
|
163 | week: {
|
164 | dow: 1,
|
165 | doy: 7,
|
166 | },
|
167 | });
|