diff --git a/src/locale/bg.js b/src/locale/bg.js index a202619b..336f6782 100644 --- a/src/locale/bg.js +++ b/src/locale/bg.js @@ -9,7 +9,23 @@ const locale = { months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'), monthsShort: 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'), weekStart: 1, - ordinal: n => `${n}.`, + ordinal: (n) => { + const last2Digits = n % 100 + if (last2Digits > 10 && last2Digits < 20) { + return `${n}-ти` + } + + const lastDigit = n % 10 + if (lastDigit === 1) { + return `${n}-ви` + } else if (lastDigit === 2) { + return `${n}-ри` + } else if (lastDigit === 7 || lastDigit === 8) { + return `${n}-ми` + } + + return `${n}-ти` + }, formats: { LT: 'H:mm', LTS: 'H:mm:ss', @@ -27,7 +43,7 @@ const locale = { h: 'час', hh: '%d часа', d: 'ден', - dd: '%d дни', + dd: '%d дена', M: 'месец', MM: '%d месеца', y: 'година', diff --git a/test/locale/bg.test.js b/test/locale/bg.test.js new file mode 100644 index 00000000..c02fe0b8 --- /dev/null +++ b/test/locale/bg.test.js @@ -0,0 +1,67 @@ +import moment from 'moment' +import MockDate from 'mockdate' +import dayjs from '../../src' +import relativeTime from '../../src/plugin/relativeTime' +import advancedFormat from '../../src/plugin/advancedFormat' +import '../../src/locale/bg' + +dayjs.extend(relativeTime) +dayjs.extend(advancedFormat) + +beforeEach(() => { + MockDate.set(new Date()) +}) + +afterEach(() => { + MockDate.reset() +}) + +it('Format Month with locale function', () => { + for (let i = 0; i <= 7; i += 1) { + const dayjsBG = dayjs().locale('bg').add(i, 'day') + const momentBG = moment().locale('bg').add(i, 'day') + const testFormat1 = 'DD MMMM YYYY MMM' + const testFormat2 = 'MMMM' + const testFormat3 = 'MMM' + expect(dayjsBG.format(testFormat1)).toEqual(momentBG.format(testFormat1)) + expect(dayjsBG.format(testFormat2)).toEqual(momentBG.format(testFormat2)) + expect(dayjsBG.format(testFormat3)).toEqual(momentBG.format(testFormat3)) + } +}) + +it('RelativeTime: Time from X', () => { + const T = [ + [44.4, 'second'], // a few seconds + [89.5, 'second'], // a minute + [130, 'second'], // two minutes + [43, 'minute'], // 44 minutes + [1, 'hour'], // 1 hour + [21, 'hour'], // 21 hours + [2, 'day'], // 2 days + [25, 'day'], // 25 days + [2, 'month'], // 2 months + [10, 'month'], // 10 months + [18, 'month'], // 2 years + [15, 'year'] // 15 years + ] + + T.forEach((t) => { + dayjs.locale('bg') + moment.locale('bg') + expect(dayjs().from(dayjs().add(t[0], t[1]))) + .toBe(moment().from(moment().add(t[0], t[1]))) + expect(dayjs().from(dayjs().add(t[0], t[1]), true)) + .toBe(moment().from(moment().add(t[0], t[1]), true)) + }) +}) + +it('Ordinal', () => { + dayjs.locale('bg') + moment.locale('bg') + + for (let d = 1; d <= 31; d += 1) { + const day = d < 10 ? `0${d}` : d + const date = `2021-01-${day}` + expect(dayjs(date).format('Do')).toBe(moment(date).format('Do')) + } +})