You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ant-design-vue/components/locale-provider/index.tsx

104 lines
2.3 KiB

import { provide, App, defineComponent, VNode } from 'vue';
import PropTypes from '../_util/vue-types';
import moment from 'moment';
import interopDefault from '../_util/interopDefault';
import { ModalLocale, changeConfirmLocale } from '../modal/locale';
import warning from '../_util/warning';
import { getSlot } from '../_util/props-util';
export interface Locale {
locale: string;
Pagination?: Object;
DatePicker?: Object;
TimePicker?: Object;
Calendar?: Object;
Table?: Object;
Modal?: ModalLocale;
Popconfirm?: Object;
Transfer?: Object;
Select?: Object;
Upload?: Object;
}
export interface LocaleProviderProps {
locale: Locale;
children?: VNode | VNode[];
_ANT_MARK__?: string;
}
export const ANT_MARK = 'internalMark';
function setMomentLocale(locale?: Locale) {
if (locale && locale.locale) {
interopDefault(moment).locale(locale.locale);
} else {
interopDefault(moment).locale('en');
}
}
const LocaleProvider = defineComponent({
name: 'ALocaleProvider',
props: {
locale: {
type: Object,
},
_ANT_MARK__: PropTypes.string,
},
data() {
warning(
this._ANT_MARK__ === ANT_MARK,
'LocaleProvider',
'`LocaleProvider` is deprecated. Please use `locale` with `ConfigProvider` instead',
);
return {
antLocale: {
...this.locale,
exist: true,
},
};
},
setup(props) {
warning(
props._ANT_MARK__ === ANT_MARK,
'LocaleProvider',
'`LocaleProvider` is deprecated. Please use `locale` with `ConfigProvider` instead',
);
const data = {
antLocale: {
...props.locale,
exist: true,
},
_ANT_MARK__: ANT_MARK,
};
provide('localeData', data);
return data;
},
watch: {
locale(val) {
this.antLocale = {
...val,
exist: true,
};
setMomentLocale(val);
changeConfirmLocale(val && val.Modal);
},
},
created() {
const { locale } = this;
setMomentLocale(locale);
changeConfirmLocale(locale && locale.Modal);
},
beforeUnmount() {
changeConfirmLocale();
},
render() {
return getSlot(this);
},
});
/* istanbul ignore next */
LocaleProvider.install = function(app: App) {
app.component(LocaleProvider.name, LocaleProvider);
};
export default LocaleProvider;