diff --git a/__test__/locale.test.js b/__test__/locale.test.js index 8e79a0d..ecd2eda 100644 --- a/__test__/locale.test.js +++ b/__test__/locale.test.js @@ -30,7 +30,14 @@ describe('Locale', () => { }, }); expect(wrapper.find('.mx-table-date th').text()).toBe('Su'); - expect(wrapper.find('.mx-table-date td').element.title).toBe('Sep 29, 2019'); + expect(wrapper.find('.mx-table-month td').text()).toBe('Jan'); + expect(wrapper.find('.mx-btn-current-month').text()).toBe('Oct'); + expect(wrapper.find('.mx-table-date .active').element.title).toBe('Oct 10, 2019'); + wrapper.setProps({ lang: 'zh-cn' }); + expect(wrapper.find('.mx-table-date th').text()).toBe('δΈ€'); + expect(wrapper.find('.mx-table-month td').text()).toBe('1月'); + expect(wrapper.find('.mx-btn-current-month').text()).toBe('10月'); + expect(wrapper.find('.mx-table-date .active').element.title).toBe('10月 10, 2019'); }); it('prop: lang - object', () => { diff --git a/src/calendar/calendar-panel.vue b/src/calendar/calendar-panel.vue index 565d7eb..b1d7267 100644 --- a/src/calendar/calendar-panel.vue +++ b/src/calendar/calendar-panel.vue @@ -106,12 +106,12 @@ import { startOfMonth, startOfDay, } from 'date-fns'; -import localeMixin from '../mixin/locale'; -import formatMixin from '../mixin/format'; +import { format } from 'date-format-parse'; import { getValidDate, isValidDate, createDate } from '../util/date'; import TableDate from './table-date'; import TableMonth from './table-month'; import TableYear from './table-year'; +import { getLocaleFieldValue } from '../locale'; export default { name: 'CalendarPanel', @@ -120,7 +120,11 @@ export default { TableMonth, TableYear, }, - mixins: [localeMixin, formatMixin], + inject: { + t: { + default: () => getLocaleFieldValue, + }, + }, props: { value: {}, defaultValue: { @@ -222,6 +226,9 @@ export default { }, }, methods: { + formatDate(date, fmt) { + return format(date, fmt, { locale: this.t('formatLocale') }); + }, initCalendar() { let calendarDate = this.calendar; if (!isValidDate(calendarDate)) { diff --git a/src/calendar/table-date.vue b/src/calendar/table-date.vue index 234331d..0990ed1 100644 --- a/src/calendar/table-date.vue +++ b/src/calendar/table-date.vue @@ -27,18 +27,19 @@ diff --git a/src/locale.js b/src/locale.js index 8d29d1d..7394b4f 100644 --- a/src/locale.js +++ b/src/locale.js @@ -20,6 +20,33 @@ export function locale(name, object, isLocal) { return locales[name] || locales[defaultLocale]; } +/** + * get locale object + * @param {string} name lang + */ export function getLocale(name) { return locale(name, null, true); } + +/** + * get locale field value + * @param {string} field field eg: 'formatLocale.shortMonth' + * @param {object} lang locale object + */ +export function getLocaleFieldValue(field, lang) { + const arr = (field || '').split('.'); + let current = lang || getLocale(); + let value; + for (let i = 0, len = arr.length; i < len; i++) { + const prop = arr[i]; + value = current[prop]; + if (i === len - 1) { + return value; + } + if (!value) { + return null; + } + current = value; + } + return null; +} diff --git a/src/mixin/format.js b/src/mixin/format.js deleted file mode 100644 index c65de04..0000000 --- a/src/mixin/format.js +++ /dev/null @@ -1,11 +0,0 @@ -import { format } from 'date-format-parse'; -import LocaleMixin from './locale'; - -export default { - mixins: [LocaleMixin], - methods: { - formatDate(date, fmt) { - return format(date, fmt, { locale: this.t('formatLocale') }); - }, - }, -}; diff --git a/src/mixin/locale.js b/src/mixin/locale.js deleted file mode 100644 index b6a085a..0000000 --- a/src/mixin/locale.js +++ /dev/null @@ -1,28 +0,0 @@ -import { getLocale } from '../locale'; - -export default { - inject: { - locale: { - default: getLocale(), - }, - }, - methods: { - t(path) { - const arr = path.split('.'); - let current = this.locale || getLocale(); - let value; - for (let i = 0, len = arr.length; i < len; i++) { - const prop = arr[i]; - value = current[prop]; - if (i === len - 1) { - return value; - } - if (!value) { - return null; - } - current = value; - } - return null; - }, - }, -}; diff --git a/src/time/list-options.vue b/src/time/list-options.vue index 330d512..c810eb5 100644 --- a/src/time/list-options.vue +++ b/src/time/list-options.vue @@ -13,10 +13,10 @@