Skip to content

Commit f6e771b

Browse files
authored
fix: update German [de] locale relativeTime config (#1109)
1 parent b038bfd commit f6e771b

File tree

2 files changed

+112
-11
lines changed

2 files changed

+112
-11
lines changed

src/locale/de.js

+33-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,28 @@
11
// German [de]
22
import dayjs from 'dayjs'
33

4+
const texts = {
5+
s: 'ein paar Sekunden',
6+
m: ['eine Minute', 'einer Minute'],
7+
mm: '%d Minuten',
8+
h: ['eine Stunde', 'einer Stunde'],
9+
hh: '%d Stunden',
10+
d: ['ein Tag', 'einem Tag'],
11+
dd: ['%d Tage', '%d Tagen'],
12+
M: ['ein Monat', 'einem Monat'],
13+
MM: ['%d Monate', '%d Monaten'],
14+
y: ['ein Jahr', 'einem Jahr'],
15+
yy: ['%d Jahre', '%d Jahren']
16+
}
17+
18+
function relativeTimeFormatter(number, withoutSuffix, key) {
19+
let l = texts[key]
20+
if (Array.isArray(l)) {
21+
l = l[withoutSuffix ? 0 : 1]
22+
}
23+
return l.replace('%d', number)
24+
}
25+
426
const locale = {
527
name: 'de',
628
weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
@@ -21,17 +43,17 @@ const locale = {
2143
relativeTime: {
2244
future: 'in %s',
2345
past: 'vor %s',
24-
s: 'wenigen Sekunden',
25-
m: 'einer Minute',
26-
mm: '%d Minuten',
27-
h: 'einer Stunde',
28-
hh: '%d Stunden',
29-
d: 'einem Tag',
30-
dd: '%d Tagen',
31-
M: 'einem Monat',
32-
MM: '%d Monaten',
33-
y: 'einem Jahr',
34-
yy: '%d Jahren'
46+
s: relativeTimeFormatter,
47+
m: relativeTimeFormatter,
48+
mm: relativeTimeFormatter,
49+
h: relativeTimeFormatter,
50+
hh: relativeTimeFormatter,
51+
d: relativeTimeFormatter,
52+
dd: relativeTimeFormatter,
53+
M: relativeTimeFormatter,
54+
MM: relativeTimeFormatter,
55+
y: relativeTimeFormatter,
56+
yy: relativeTimeFormatter
3557
}
3658
}
3759

test/locale/de.test.js

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import MockDate from 'mockdate'
2+
import moment from 'moment'
3+
import dayjs from '../../src'
4+
import relativeTime from '../../src/plugin/relativeTime'
5+
import '../../src/locale/de'
6+
7+
dayjs.extend(relativeTime)
8+
9+
beforeEach(() => {
10+
MockDate.set(new Date())
11+
})
12+
13+
afterEach(() => {
14+
MockDate.reset()
15+
})
16+
17+
it('German locale relative time in past and future with suffix', () => {
18+
const cases = [
19+
[1, 's', 'in ein paar Sekunden'],
20+
[-1, 's', 'vor ein paar Sekunden'],
21+
[1, 'm', 'in einer Minute'],
22+
[-1, 'm', 'vor einer Minute'],
23+
[1, 'h', 'in einer Stunde'],
24+
[-1, 'h', 'vor einer Stunde'],
25+
[1, 'd', 'in einem Tag'],
26+
[-1, 'd', 'vor einem Tag'],
27+
[1, 'M', 'in einem Monat'],
28+
[-1, 'M', 'vor einem Monat'],
29+
[2, 'd', 'in 2 Tagen'],
30+
[-2, 'd', 'vor 2 Tagen'],
31+
[10, 'd', 'in 10 Tagen'],
32+
[-10, 'd', 'vor 10 Tagen'],
33+
[6, 'm', 'in 6 Minuten'],
34+
[-6, 'm', 'vor 6 Minuten'],
35+
[5, 'h', 'in 5 Stunden'],
36+
[-5, 'h', 'vor 5 Stunden'],
37+
[3, 'M', 'in 3 Monaten'],
38+
[-3, 'M', 'vor 3 Monaten'],
39+
[4, 'y', 'in 4 Jahren'],
40+
[-4, 'y', 'vor 4 Jahren']
41+
]
42+
cases.forEach((c) => {
43+
expect(dayjs().add(c[0], c[1]).locale('de').fromNow())
44+
.toBe(c[2])
45+
expect(dayjs().add(c[0], c[1]).locale('de').fromNow())
46+
.toBe(moment().add(c[0], c[1]).locale('de').fromNow())
47+
})
48+
})
49+
50+
it('German locale relative time in past and future without suffix', () => {
51+
const cases = [
52+
[1, 's', 'ein paar Sekunden'],
53+
[-1, 's', 'ein paar Sekunden'],
54+
[1, 'm', 'eine Minute'],
55+
[-1, 'm', 'eine Minute'],
56+
[1, 'h', 'eine Stunde'],
57+
[-1, 'h', 'eine Stunde'],
58+
[1, 'd', 'ein Tag'],
59+
[-1, 'd', 'ein Tag'],
60+
[2, 'd', '2 Tage'],
61+
[-2, 'd', '2 Tage'],
62+
[10, 'd', '10 Tage'],
63+
[-10, 'd', '10 Tage'],
64+
[6, 'm', '6 Minuten'],
65+
[-6, 'm', '6 Minuten'],
66+
[5, 'h', '5 Stunden'],
67+
[-5, 'h', '5 Stunden'],
68+
[3, 'M', '3 Monate'],
69+
[-3, 'M', '3 Monate'],
70+
[4, 'y', '4 Jahre'],
71+
[-4, 'y', '4 Jahre']
72+
]
73+
cases.forEach((c) => {
74+
expect(dayjs().add(c[0], c[1]).locale('de').fromNow(true))
75+
.toBe(c[2])
76+
expect(dayjs().add(c[0], c[1]).locale('de').fromNow(true))
77+
.toBe(moment().add(c[0], c[1]).locale('de').fromNow(true))
78+
})
79+
})

0 commit comments

Comments
 (0)