cscg24-guacamole

CSCG 2024 Challenge 'Guacamole Mashup'
git clone https://git.sinitax.com/sinitax/cscg24-guacamole
Log | Files | Refs | sfeed.txt

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});