From f6e771b70f93d19ebb12e6b794aa4628a1796248 Mon Sep 17 00:00:00 2001 From: Florian Roks Date: Tue, 13 Oct 2020 10:34:37 +0200 Subject: [PATCH] fix: update German [de] locale relativeTime config (#1109) --- src/locale/de.js | 44 +++++++++++++++++------ test/locale/de.test.js | 79 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 11 deletions(-) create mode 100644 test/locale/de.test.js diff --git a/src/locale/de.js b/src/locale/de.js index 1478c3704..21e9ff14a 100644 --- a/src/locale/de.js +++ b/src/locale/de.js @@ -1,6 +1,28 @@ // German [de] import dayjs from 'dayjs' +const texts = { + s: 'ein paar Sekunden', + m: ['eine Minute', 'einer Minute'], + mm: '%d Minuten', + h: ['eine Stunde', 'einer Stunde'], + hh: '%d Stunden', + d: ['ein Tag', 'einem Tag'], + dd: ['%d Tage', '%d Tagen'], + M: ['ein Monat', 'einem Monat'], + MM: ['%d Monate', '%d Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: ['%d Jahre', '%d Jahren'] +} + +function relativeTimeFormatter(number, withoutSuffix, key) { + let l = texts[key] + if (Array.isArray(l)) { + l = l[withoutSuffix ? 0 : 1] + } + return l.replace('%d', number) +} + const locale = { name: 'de', weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), @@ -21,17 +43,17 @@ const locale = { relativeTime: { future: 'in %s', past: 'vor %s', - s: 'wenigen Sekunden', - m: 'einer Minute', - mm: '%d Minuten', - h: 'einer Stunde', - hh: '%d Stunden', - d: 'einem Tag', - dd: '%d Tagen', - M: 'einem Monat', - MM: '%d Monaten', - y: 'einem Jahr', - yy: '%d Jahren' + s: relativeTimeFormatter, + m: relativeTimeFormatter, + mm: relativeTimeFormatter, + h: relativeTimeFormatter, + hh: relativeTimeFormatter, + d: relativeTimeFormatter, + dd: relativeTimeFormatter, + M: relativeTimeFormatter, + MM: relativeTimeFormatter, + y: relativeTimeFormatter, + yy: relativeTimeFormatter } } diff --git a/test/locale/de.test.js b/test/locale/de.test.js new file mode 100644 index 000000000..699b05960 --- /dev/null +++ b/test/locale/de.test.js @@ -0,0 +1,79 @@ +import MockDate from 'mockdate' +import moment from 'moment' +import dayjs from '../../src' +import relativeTime from '../../src/plugin/relativeTime' +import '../../src/locale/de' + +dayjs.extend(relativeTime) + +beforeEach(() => { + MockDate.set(new Date()) +}) + +afterEach(() => { + MockDate.reset() +}) + +it('German locale relative time in past and future with suffix', () => { + const cases = [ + [1, 's', 'in ein paar Sekunden'], + [-1, 's', 'vor ein paar Sekunden'], + [1, 'm', 'in einer Minute'], + [-1, 'm', 'vor einer Minute'], + [1, 'h', 'in einer Stunde'], + [-1, 'h', 'vor einer Stunde'], + [1, 'd', 'in einem Tag'], + [-1, 'd', 'vor einem Tag'], + [1, 'M', 'in einem Monat'], + [-1, 'M', 'vor einem Monat'], + [2, 'd', 'in 2 Tagen'], + [-2, 'd', 'vor 2 Tagen'], + [10, 'd', 'in 10 Tagen'], + [-10, 'd', 'vor 10 Tagen'], + [6, 'm', 'in 6 Minuten'], + [-6, 'm', 'vor 6 Minuten'], + [5, 'h', 'in 5 Stunden'], + [-5, 'h', 'vor 5 Stunden'], + [3, 'M', 'in 3 Monaten'], + [-3, 'M', 'vor 3 Monaten'], + [4, 'y', 'in 4 Jahren'], + [-4, 'y', 'vor 4 Jahren'] + ] + cases.forEach((c) => { + expect(dayjs().add(c[0], c[1]).locale('de').fromNow()) + .toBe(c[2]) + expect(dayjs().add(c[0], c[1]).locale('de').fromNow()) + .toBe(moment().add(c[0], c[1]).locale('de').fromNow()) + }) +}) + +it('German locale relative time in past and future without suffix', () => { + const cases = [ + [1, 's', 'ein paar Sekunden'], + [-1, 's', 'ein paar Sekunden'], + [1, 'm', 'eine Minute'], + [-1, 'm', 'eine Minute'], + [1, 'h', 'eine Stunde'], + [-1, 'h', 'eine Stunde'], + [1, 'd', 'ein Tag'], + [-1, 'd', 'ein Tag'], + [2, 'd', '2 Tage'], + [-2, 'd', '2 Tage'], + [10, 'd', '10 Tage'], + [-10, 'd', '10 Tage'], + [6, 'm', '6 Minuten'], + [-6, 'm', '6 Minuten'], + [5, 'h', '5 Stunden'], + [-5, 'h', '5 Stunden'], + [3, 'M', '3 Monate'], + [-3, 'M', '3 Monate'], + [4, 'y', '4 Jahre'], + [-4, 'y', '4 Jahre'] + ] + cases.forEach((c) => { + expect(dayjs().add(c[0], c[1]).locale('de').fromNow(true)) + .toBe(c[2]) + expect(dayjs().add(c[0], c[1]).locale('de').fromNow(true)) + .toBe(moment().add(c[0], c[1]).locale('de').fromNow(true)) + }) +})