Skip to content

Commit b038bfd

Browse files
authored
fix: update Breton [br] locale relativeTime config (#1103)
1 parent cc87eff commit b038bfd

2 files changed

Lines changed: 110 additions & 0 deletions

File tree

src/locale/br.js

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,47 @@
11
// Breton [br]
22
import dayjs from 'dayjs'
33

4+
function lastNumber(number) {
5+
if (number > 9) {
6+
return lastNumber(number % 10)
7+
}
8+
return number
9+
}
10+
function softMutation(text) {
11+
const mutationTable = {
12+
m: 'v',
13+
b: 'v',
14+
d: 'z'
15+
}
16+
return mutationTable[text.charAt(0)] + text.substring(1)
17+
}
18+
function mutation(text, number) {
19+
if (number === 2) {
20+
return softMutation(text)
21+
}
22+
return text
23+
}
24+
function relativeTimeWithMutation(number, withoutSuffix, key) {
25+
const format = {
26+
mm: 'munutenn',
27+
MM: 'miz',
28+
dd: 'devezh'
29+
}
30+
return `${number} ${mutation(format[key], number)}`
31+
}
32+
function specialMutationForYears(number) {
33+
switch (lastNumber(number)) {
34+
case 1:
35+
case 3:
36+
case 4:
37+
case 5:
38+
case 9:
39+
return `${number} bloaz`
40+
default:
41+
return `${number} vloaz`
42+
}
43+
}
44+
445
const locale = {
546
name: 'br',
647
weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),
@@ -18,6 +59,21 @@ const locale = {
1859
LLL: 'D [a viz] MMMM YYYY h[e]mm A',
1960
LLLL: 'dddd, D [a viz] MMMM YYYY h[e]mm A'
2061
},
62+
relativeTime: {
63+
future: 'a-benn %s',
64+
past: '%s ʼzo',
65+
s: 'un nebeud segondennoù',
66+
m: 'ur vunutenn',
67+
mm: relativeTimeWithMutation,
68+
h: 'un eur',
69+
hh: '%d eur',
70+
d: 'un devezh',
71+
dd: relativeTimeWithMutation,
72+
M: 'ur miz',
73+
MM: relativeTimeWithMutation,
74+
y: 'ur bloaz',
75+
yy: specialMutationForYears
76+
},
2177
meridiem: hour => (hour < 12 ? 'a.m.' : 'g.m.') // a-raok merenn | goude merenn
2278
}
2379

test/locale/br.test.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import moment from 'moment'
2+
import MockDate from 'mockdate'
3+
import dayjs from '../../src'
4+
import relativeTime from '../../src/plugin/relativeTime'
5+
import '../../src/locale/br'
6+
7+
dayjs.extend(relativeTime)
8+
9+
beforeEach(() => {
10+
MockDate.set(new Date())
11+
})
12+
13+
afterEach(() => {
14+
MockDate.reset()
15+
})
16+
17+
it('Format Month with locale function', () => {
18+
for (let i = 0; i <= 7; i += 1) {
19+
const dayjsBR = dayjs().locale('br').add(i, 'day')
20+
const momentBR = moment().locale('br').add(i, 'day')
21+
const testFormat1 = 'DD MMMM YYYY MMM'
22+
const testFormat2 = 'MMMM'
23+
const testFormat3 = 'MMM'
24+
expect(dayjsBR.format(testFormat1)).toEqual(momentBR.format(testFormat1))
25+
expect(dayjsBR.format(testFormat2)).toEqual(momentBR.format(testFormat2))
26+
expect(dayjsBR.format(testFormat3)).toEqual(momentBR.format(testFormat3))
27+
}
28+
})
29+
30+
it('RelativeTime: Time from X', () => {
31+
const T = [
32+
[44.4, 'second'], // a few seconds
33+
[89.5, 'second'], // a minute
34+
[130, 'second'], // two minutes
35+
[43, 'minute'], // 44 minutes
36+
[1, 'hour'], // 1 hour
37+
[21, 'hour'], // 21 hours
38+
[2, 'day'], // 2 days
39+
[25, 'day'], // 25 days
40+
[2, 'month'], // 2 months
41+
[10, 'month'], // 10 months
42+
[18, 'month'], // 2 years
43+
[15, 'year'] // 15 years
44+
]
45+
46+
T.forEach((t) => {
47+
dayjs.locale('br')
48+
moment.locale('br')
49+
expect(dayjs().from(dayjs().add(t[0], t[1])))
50+
.toBe(moment().from(moment().add(t[0], t[1])))
51+
expect(dayjs().from(dayjs().add(t[0], t[1]), true))
52+
.toBe(moment().from(moment().add(t[0], t[1]), true))
53+
})
54+
})

0 commit comments

Comments
 (0)