ru.js (8422B)
1//! moment.js locale configuration 2//! locale : Russian [ru] 3//! author : Viktorminator : https://github.com/Viktorminator 4//! author : Menelion Elensúle : https://github.com/Oire 5//! author : Коренберг Марк : https://github.com/socketpair 6 7import moment from '../moment'; 8 9function plural(word, num) { 10 var forms = word.split('_'); 11 return num % 10 === 1 && num % 100 !== 11 12 ? forms[0] 13 : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) 14 ? forms[1] 15 : forms[2]; 16} 17function relativeTimeWithPlural(number, withoutSuffix, key) { 18 var format = { 19 ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд', 20 mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', 21 hh: 'час_часа_часов', 22 dd: 'день_дня_дней', 23 ww: 'неделя_недели_недель', 24 MM: 'месяц_месяца_месяцев', 25 yy: 'год_года_лет', 26 }; 27 if (key === 'm') { 28 return withoutSuffix ? 'минута' : 'минуту'; 29 } else { 30 return number + ' ' + plural(format[key], +number); 31 } 32} 33var monthsParse = [ 34 /^янв/i, 35 /^фев/i, 36 /^мар/i, 37 /^апр/i, 38 /^ма[йя]/i, 39 /^июн/i, 40 /^июл/i, 41 /^авг/i, 42 /^сен/i, 43 /^окт/i, 44 /^ноя/i, 45 /^дек/i, 46]; 47 48// http://new.gramota.ru/spravka/rules/139-prop : § 103 49// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637 50// CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753 51export default moment.defineLocale('ru', { 52 months: { 53 format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split( 54 '_' 55 ), 56 standalone: 57 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split( 58 '_' 59 ), 60 }, 61 monthsShort: { 62 // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку? 63 format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split( 64 '_' 65 ), 66 standalone: 67 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split( 68 '_' 69 ), 70 }, 71 weekdays: { 72 standalone: 73 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split( 74 '_' 75 ), 76 format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split( 77 '_' 78 ), 79 isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/, 80 }, 81 weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'), 82 weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'), 83 monthsParse: monthsParse, 84 longMonthsParse: monthsParse, 85 shortMonthsParse: monthsParse, 86 87 // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки 88 monthsRegex: 89 /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, 90 91 // копия предыдущего 92 monthsShortRegex: 93 /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, 94 95 // полные названия с падежами 96 monthsStrictRegex: 97 /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i, 98 99 // Выражение, которое соответствует только сокращённым формам 100 monthsShortStrictRegex: 101 /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i, 102 longDateFormat: { 103 LT: 'H:mm', 104 LTS: 'H:mm:ss', 105 L: 'DD.MM.YYYY', 106 LL: 'D MMMM YYYY г.', 107 LLL: 'D MMMM YYYY г., H:mm', 108 LLLL: 'dddd, D MMMM YYYY г., H:mm', 109 }, 110 calendar: { 111 sameDay: '[Сегодня, в] LT', 112 nextDay: '[Завтра, в] LT', 113 lastDay: '[Вчера, в] LT', 114 nextWeek: function (now) { 115 if (now.week() !== this.week()) { 116 switch (this.day()) { 117 case 0: 118 return '[В следующее] dddd, [в] LT'; 119 case 1: 120 case 2: 121 case 4: 122 return '[В следующий] dddd, [в] LT'; 123 case 3: 124 case 5: 125 case 6: 126 return '[В следующую] dddd, [в] LT'; 127 } 128 } else { 129 if (this.day() === 2) { 130 return '[Во] dddd, [в] LT'; 131 } else { 132 return '[В] dddd, [в] LT'; 133 } 134 } 135 }, 136 lastWeek: function (now) { 137 if (now.week() !== this.week()) { 138 switch (this.day()) { 139 case 0: 140 return '[В прошлое] dddd, [в] LT'; 141 case 1: 142 case 2: 143 case 4: 144 return '[В прошлый] dddd, [в] LT'; 145 case 3: 146 case 5: 147 case 6: 148 return '[В прошлую] dddd, [в] LT'; 149 } 150 } else { 151 if (this.day() === 2) { 152 return '[Во] dddd, [в] LT'; 153 } else { 154 return '[В] dddd, [в] LT'; 155 } 156 } 157 }, 158 sameElse: 'L', 159 }, 160 relativeTime: { 161 future: 'через %s', 162 past: '%s назад', 163 s: 'несколько секунд', 164 ss: relativeTimeWithPlural, 165 m: relativeTimeWithPlural, 166 mm: relativeTimeWithPlural, 167 h: 'час', 168 hh: relativeTimeWithPlural, 169 d: 'день', 170 dd: relativeTimeWithPlural, 171 w: 'неделя', 172 ww: relativeTimeWithPlural, 173 M: 'месяц', 174 MM: relativeTimeWithPlural, 175 y: 'год', 176 yy: relativeTimeWithPlural, 177 }, 178 meridiemParse: /ночи|утра|дня|вечера/i, 179 isPM: function (input) { 180 return /^(дня|вечера)$/.test(input); 181 }, 182 meridiem: function (hour, minute, isLower) { 183 if (hour < 4) { 184 return 'ночи'; 185 } else if (hour < 12) { 186 return 'утра'; 187 } else if (hour < 17) { 188 return 'дня'; 189 } else { 190 return 'вечера'; 191 } 192 }, 193 dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/, 194 ordinal: function (number, period) { 195 switch (period) { 196 case 'M': 197 case 'd': 198 case 'DDD': 199 return number + '-й'; 200 case 'D': 201 return number + '-го'; 202 case 'w': 203 case 'W': 204 return number + '-я'; 205 default: 206 return number; 207 } 208 }, 209 week: { 210 dow: 1, // Monday is the first day of the week. 211 doy: 4, // The week that contains Jan 4th is the first week of the year. 212 }, 213});