Skip to content

Commit a597d0b

Browse files
authored
fix: update Kurdish [ku] locale strings and formatted output contains non-standard kurdish characters (#1848)
1 parent e790516 commit a597d0b

File tree

2 files changed

+85
-17
lines changed

2 files changed

+85
-17
lines changed

src/locale/ku.js

+65-15
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,65 @@
11
// Kurdish [ku]
22
import dayjs from 'dayjs'
33

4+
export const englishToArabicNumbersMap = {
5+
1: '١',
6+
2: '٢',
7+
3: '٣',
8+
4: '٤',
9+
5: '٥',
10+
6: '٦',
11+
7: '٧',
12+
8: '٨',
13+
9: '٩',
14+
0: '٠'
15+
}
16+
17+
const arabicToEnglishNumbersMap = {
18+
'١': '1',
19+
'٢': '2',
20+
'٣': '3',
21+
'٤': '4',
22+
'٥': '5',
23+
'٦': '6',
24+
'٧': '7',
25+
'٨': '8',
26+
'٩': '9',
27+
'٠': '0'
28+
}
29+
30+
const months = [
31+
'کانوونی دووەم',
32+
'شوبات',
33+
'ئادار',
34+
'نیسان',
35+
'ئایار',
36+
'حوزەیران',
37+
'تەممووز',
38+
'ئاب',
39+
'ئەیلوول',
40+
'تشرینی یەکەم',
41+
'تشرینی دووەم',
42+
'کانوونی یەکەم'
43+
]
44+
445
const locale = {
546
name: 'ku',
6-
weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split('_'),
7-
months: 'کانونی دووەم_شوبات_ئازار_نیسان_ئایار_حوزەیران_تەمموز_ئاب_ئەیلوول_تشرینی یەكەم_تشرینی دووەم_كانونی یەکەم'.split('_'),
47+
months,
48+
monthsShort: months,
49+
weekdays: 'یەکشەممە_دووشەممە_سێشەممە_چوارشەممە_پێنجشەممە_هەینی_شەممە'.split('_'),
50+
weekdaysShort: 'یەکشەم_دووشەم_سێشەم_چوارشەم_پێنجشەم_هەینی_شەممە'.split('_'),
851
weekStart: 6,
9-
weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),
10-
monthsShort: 'کانونی دووەم_شوبات_ئازار_نیسان_ئایار_حوزەیران_تەمموز_ئاب_ئەیلوول_تشرینی یەكەم_تشرینی دووەم_كانونی یەکەم'.split('_'),
11-
weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),
52+
weekdaysMin: 'ی_د_س_چ_پ_هـ_ش'.split('_'),
53+
preparse(string) {
54+
return string
55+
.replace(/[١٢٣٤٥٦٧٨٩٠]/g, match => arabicToEnglishNumbersMap[match])
56+
.replace(/،/g, ',')
57+
},
58+
postformat(string) {
59+
return string
60+
.replace(/\d/g, match => englishToArabicNumbersMap[match])
61+
.replace(/,/g, '،')
62+
},
1263
ordinal: n => n,
1364
formats: {
1465
LT: 'HH:mm',
@@ -20,23 +71,22 @@ const locale = {
2071
},
2172
meridiem: hour => (hour < 12 ? 'پ.ن' : 'د.ن'),
2273
relativeTime: {
23-
future: 'له‌ %s',
74+
future: 'لە %s',
2475
past: '%s',
25-
s: 'چه‌ند چركه‌یه‌ك',
26-
m: 'یه‌ك خوله‌ك',
27-
mm: '%d خوله‌ك',
28-
h: 'یه‌ك كاتژمێر',
29-
hh: '%d كاتژمێر',
30-
d: 'یه‌ك ڕۆژ',
76+
s: 'چەند چرکەیەک',
77+
m: 'یەک خولەک',
78+
mm: '%d خولەک',
79+
h: 'یەک کاتژمێر',
80+
hh: '%d کاتژمێر',
81+
d: 'یەک ڕۆژ',
3182
dd: '%d ڕۆژ',
32-
M: 'یه‌ك مانگ',
83+
M: 'یەک مانگ',
3384
MM: '%d مانگ',
34-
y: 'یه‌ك ساڵ',
85+
y: 'یەک ساڵ',
3586
yy: '%d ساڵ'
3687
}
3788
}
3889

3990
dayjs.locale(locale, null, true)
4091

4192
export default locale
42-

test/locale/ku.test.js

+20-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
import moment from 'moment'
12
import MockDate from 'mockdate'
23
import dayjs from '../../src'
3-
import '../../src/locale/ku'
4+
import locale, { englishToArabicNumbersMap } from '../../src/locale/ku'
5+
import preParsePostFormat from '../../src/plugin/preParsePostFormat'
6+
7+
dayjs.extend(preParsePostFormat)
48

59
beforeEach(() => {
610
MockDate.set(new Date())
@@ -15,6 +19,20 @@ it('Format meridiem correctly', () => {
1519
const dayjsKu = dayjs()
1620
.startOf('day')
1721
.add(i, 'hour')
18-
expect(dayjsKu.locale('ku').format('h A')).toBe(`${i % 12 || 12} ${i < 12 ? 'پ.ن' : 'د.ن'}`)
22+
const hour = (i % 12 || 12)
23+
.toString()
24+
.replace(/\d/g, match => englishToArabicNumbersMap[match])
25+
const m = i < 12 ? 'پ.ن' : 'د.ن'
26+
expect(dayjsKu.locale('ku').format('h A')).toBe(`${hour} ${m}`)
27+
}
28+
})
29+
30+
it('Preparse with locale function', () => {
31+
for (let i = 0; i <= 7; i += 1) {
32+
dayjs.locale(locale)
33+
const momentKu = moment()
34+
.locale('ku')
35+
.add(i, 'day')
36+
expect(dayjs(momentKu.format()).format()).toEqual(momentKu.format())
1937
}
2038
})

0 commit comments

Comments
 (0)