Skip to content

Commit

Permalink
Merge pull request #227 from saknarak/master
Browse files Browse the repository at this point in the history
add thai locale
  • Loading branch information
iamkun authored Jun 6, 2018
2 parents fac98be + 4dbc517 commit c223371
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 2 deletions.
8 changes: 6 additions & 2 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,9 @@ class Dayjs {
const str = formatStr || C.FORMAT_DEFAULT
const zoneStr = Utils.padZoneStr(this.$d.getTimezoneOffset())
const locale = localeObject || this.$locale()
const { weekdays, months } = locale
const {
weekdays, months, weekdaysShort, monthsShort
} = locale
return str.replace(C.REGEX_FORMAT, (match) => {
if (match.indexOf('[') > -1) return match.replace(/\[|\]/g, '')
switch (match) {
Expand All @@ -291,7 +293,7 @@ class Dayjs {
case 'MM':
return Utils.padStart(this.$M + 1, 2, '0')
case 'MMM':
return months[this.$M].slice(0, 3)
return (monthsShort && monthsShort[this.$M]) || months[this.$M].slice(0, 3)
case 'MMMM':
return months[this.$M]
case 'D':
Expand All @@ -300,6 +302,8 @@ class Dayjs {
return Utils.padStart(this.$D, 2, '0')
case 'd':
return String(this.$W)
case 'ddd':
return (weekdaysShort && weekdaysShort[this.$W]) || weekdays[this.$M].substr(0, 3)
case 'dddd':
return weekdays[this.$W]
case 'H':
Expand Down
29 changes: 29 additions & 0 deletions src/locale/th.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import dayjs from 'dayjs'

const locale = {
name: 'th',
weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
weekdaysShort: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฏาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),
monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),
relativeTime: {
future: 'อีก %s',
past: '%s ที่ผ่านมา',
s: 'ไม่กี่วิ',
m: 'นาที',
mm: '%d นาที',
h: 'ชั่วโมง',
hh: '%d ชั่วโมง',
d: 'วัน',
dd: '%d วัน',
M: 'เดือน',
MM: '%d เดือน',
y: 'ปี',
yy: '%d ปี'
},
ordinal: n => `${n}.`
}

dayjs.locale(locale, null, true)

export default locale
99 changes: 99 additions & 0 deletions test/locale.th.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
import MockDate from 'mockdate'
import dayjs from '../src'
import th from '../src/locale/th'

beforeEach(() => {
MockDate.set(new Date())
})

afterEach(() => {
MockDate.reset()
})

const format = 'dddd D, MMMM'

it('Uses Thai locale through constructor', () => { // not recommend
expect(dayjs('2018-4-28', { locale: th })
.format(format))
.toBe('เสาร์ 28, เมษายน')
expect(dayjs('2018-4-28', { locale: th })
.format('ddd D, MMM'))
.toBe('ส. 28, เม.ย.')
})

it('set locale for one instance only', () => {
expect(dayjs('2018-4-28')
.format(format))
.toBe('Saturday 28, April')

expect(dayjs('2018-4-28')
.locale(th).format(format))
.toBe('เสาร์ 28, เมษายน')

expect(dayjs('2018-4-28')
.format(format))
.toBe('Saturday 28, April')
})

it('set locale for this line only', () => {
expect(dayjs('2018-4-28').format(format, th))
.toBe('เสาร์ 28, เมษายน')
})

it('set global locale', () => {
dayjs.locale('en')
expect(dayjs('2018-4-28').format(format))
.toBe('Saturday 28, April')
dayjs.locale(th)
expect(dayjs('2018-4-28').format(format))
.toBe('เสาร์ 28, เมษายน')
dayjs.locale('en')
expect(dayjs('2018-4-28').format(format))
.toBe('Saturday 28, April')
})

it('immutable instance locale', () => {
dayjs.locale('en')
const origin = dayjs('2018-4-28')
expect(origin.format(format))
.toBe('Saturday 28, April')
expect(origin.locale('th').format(format))
.toBe('เสาร์ 28, เมษายน')
const changed = origin.locale('th')
expect(changed.format(format))
.toBe('เสาร์ 28, เมษายน')
expect(origin.format(format))
.toBe('Saturday 28, April')
})

describe('Instance locale inheritance', () => {
const thDayjs = dayjs('2018-4-28').locale(th)

it('Clone', () => {
expect(thDayjs.clone().format(format))
.toBe('เสาร์ 28, เมษายน')
expect(dayjs(thDayjs).format(format))
.toBe('เสาร์ 28, เมษายน')
})

it('StartOf EndOf', () => {
expect(thDayjs.startOf('year').format(format))
.toBe('จันทร์ 1, มกราคม')
expect(thDayjs.endOf('day').format(format))
.toBe('เสาร์ 28, เมษายน')
})

it('Set', () => {
expect(thDayjs.set('year', 2017).format(format))
.toBe('ศุกร์ 28, เมษายน')
})

it('Add', () => {
expect(thDayjs.add(1, 'year').format(format))
.toBe('อาทิตย์ 28, เมษายน')
expect(thDayjs.add(1, 'month').format(format))
.toBe('จันทร์ 28, พฤษภาคม')
expect(thDayjs.add(1, 'minute').format(format))
.toBe('เสาร์ 28, เมษายน')
})
})

0 comments on commit c223371

Please sign in to comment.