Skip to content

Commit 83e86ad

Browse files
committed
feat(components/date-picker): 国际化
1 parent 0522cf9 commit 83e86ad

File tree

11 files changed

+58
-8
lines changed

11 files changed

+58
-8
lines changed

packages/components/src/config-provider/config-provider.types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import type {
22
PopConfirmLocale,
3+
DatePickerLocale,
34
CalendarLocale,
45
SelectLocale,
56
InputLocale,
67
EmptyLocale,
78
} from '../';
89

910
export interface Locale {
11+
datePicker: Partial<DatePickerLocale>;
1012
popConfirm: Partial<PopConfirmLocale>;
1113
calendar: Partial<CalendarLocale>;
1214
select: Partial<SelectLocale>;

packages/components/src/date-picker/DatePicker.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ import type {
1111
} from './date-picker.types';
1212
import { DatePickerInputBox, DatePickerPanel } from './components';
1313
import { getClassNames, castArray } from '@tool-pack/basic';
14+
import { useLocale } from '~/config-provider/useLocale';
1415
import { Calendar as CalendarIcon } from '@pkg/icons';
1516
import type { RequiredPart } from '@tool-pack/types';
1617
import { transitionCBAdapter } from '~/transition';
1718
import { InputPopover } from '~/input-popover';
19+
import EnUS from '~/date-picker/locale/en-US';
1820
import React, { useRef } from 'react';
1921
import { Divider } from '~/divider';
2022
import { Icon } from '~/icon';
@@ -30,6 +32,7 @@ const _DatePicker: React.FC<DatePickerProps> = React.forwardRef<
3032
HTMLLabelElement,
3133
DatePickerProps
3234
>((props, ref) => {
35+
const locale = useLocale('datePicker', EnUS);
3336
const {
3437
value: outerValue,
3538
dateDisabled,
@@ -64,6 +67,7 @@ const _DatePicker: React.FC<DatePickerProps> = React.forwardRef<
6467
popoverProps={{
6568
content: (
6669
<DatePickerPanel
70+
confirmText={locale.confirmText}
6771
dateDisabled={dateDisabled}
6872
onConfirm={onConfirm}
6973
shortcuts={shortcuts}
@@ -115,9 +119,10 @@ const _DatePicker: React.FC<DatePickerProps> = React.forwardRef<
115119
};
116120
}
117121
const inputIcon = <Icon>{icon || <CalendarIcon />}</Icon>;
118-
const FC = (index: 0 | 1) => (
122+
const FC = (index: 0 | 1, placeholder: string) => (
119123
<DatePickerInputBox
120124
onChange={onChange(index)}
125+
placeholder={placeholder}
121126
format={inputBoxFormular}
122127
isOpenedRef={isOpenedRef}
123128
value={value[index]}
@@ -128,12 +133,12 @@ const _DatePicker: React.FC<DatePickerProps> = React.forwardRef<
128133
</DatePickerInputBox>
129134
);
130135

131-
if (!range) return FC(0);
136+
if (!range) return FC(0, locale.placeholder);
132137
return (
133138
<>
134-
{FC(0)}
139+
{FC(0, locale.rangePlaceholder[0])}
135140
<Divider vertical />
136-
{FC(1)}
141+
{FC(1, locale.rangePlaceholder[1])}
137142
{inputIcon}
138143
</>
139144
);

packages/components/src/date-picker/components/dp.InputBox.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ interface Props
99
inputRef: Ref<HTMLInputElement>;
1010
isOpenedRef: RefObject<boolean>;
1111
children?: React.ReactNode;
12+
placeholder: string;
1213
}
1314

1415
const cls = getClasses('date-picker-input-box', [], []);
@@ -17,6 +18,7 @@ export const DatePickerInputBox: React.FC<Props> = (props) => {
1718
const {
1819
value: date,
1920
isOpenedRef,
21+
placeholder,
2022
onChange,
2123
children,
2224
disabled,
@@ -35,8 +37,8 @@ export const DatePickerInputBox: React.FC<Props> = (props) => {
3537
<input
3638
onClickCapture={handleInputClick}
3739
onChange={handleInputChange}
40+
placeholder={placeholder}
3841
disabled={disabled}
39-
placeholder="选择时间"
4042
ref={inputRef}
4143
value={value}
4244
tabIndex={-1}

packages/components/src/date-picker/components/dp.Panel.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ interface Props
2727
Required<Pick<DatePickerProps, 'range' | 'type'>> {
2828
onChange: (value: RangeValueType) => void;
2929
onConfirm?: () => void;
30+
confirmText: string;
3031
values: Values;
3132
}
3233

@@ -40,6 +41,7 @@ export const DatePickerPanel: React.FC<Props> = (props) => {
4041
const {
4142
shortcuts = [],
4243
dateDisabled,
44+
confirmText,
4345
onConfirm,
4446
dateCell,
4547
onChange,
@@ -77,7 +79,7 @@ export const DatePickerPanel: React.FC<Props> = (props) => {
7779
</Space>
7880
<div>
7981
<Button onClick={onConfirm} type="primary" size="small">
80-
确定
82+
{confirmText}
8183
</Button>
8284
</div>
8385
</div>

packages/components/src/date-picker/components/picker/YearMonth.picker.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { useFollowingState, getClasses } from '@pkg/shared';
2+
import { useLocale } from '~/config-provider/useLocale';
23
import { PickerOption, Picker } from '~/picker';
34
import { createArray } from '@tool-pack/basic';
5+
import EnUS from '~/calendar/locale/en-US';
46
import React from 'react';
57

68
interface Props {
@@ -13,6 +15,7 @@ const cls = getClasses('date-picker-year-month-picker', ['label', 'pop'], []);
1315

1416
export const YearMonthPicker: React.FC<Props> = (props) => {
1517
const { value: date, panelRef, onChange } = props;
18+
const locale = useLocale('calendar', EnUS);
1619

1720
const [value, setValue] = useFollowingState(date, (v) =>
1821
v ? [v.getFullYear(), v.getMonth() + 1] : [],
@@ -29,7 +32,11 @@ export const YearMonthPicker: React.FC<Props> = (props) => {
2932
appendTo: null,
3033
},
3134
}}
32-
format={(v) => `${v[0]}${v[1]}月`}
35+
format={(v) => {
36+
const ym = [v[0], locale.monthNames[v[1]! - 1]!];
37+
if (locale.monthBeforeYear) ym.reverse();
38+
return ym.join(' ');
39+
}}
3340
evenlyDivided={false}
3441
onChange={_onChange}
3542
options={Options}

packages/components/src/date-picker/date-picker.types.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,9 @@ export interface DatePickerTypeProps<Range extends boolean = false>
3939
export type DatePickerFC = <Range extends boolean = false>(
4040
props: DatePickerTypeProps<Range>,
4141
) => React.ReactElement;
42+
43+
export interface DatePickerLocale {
44+
rangePlaceholder: [startTime: string, endTime: string];
45+
confirmText: string;
46+
placeholder: string;
47+
}
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
1-
export type { DatePickerProps, DatePickerFC } from './date-picker.types';
1+
export type {
2+
DatePickerLocale,
3+
DatePickerProps,
4+
DatePickerFC,
5+
} from './date-picker.types';
26
export * from './DatePicker';
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import type { DatePickerLocale } from '../date-picker.types';
2+
3+
const locale: DatePickerLocale = {
4+
rangePlaceholder: ['Start time', 'End time'],
5+
placeholder: 'Select time',
6+
confirmText: 'confirm',
7+
};
8+
9+
export default locale;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import type { DatePickerLocale } from '../date-picker.types';
2+
3+
const locale: DatePickerLocale = {
4+
rangePlaceholder: ['开始时间', '结束时间'],
5+
placeholder: '选择时间',
6+
confirmText: '确认',
7+
};
8+
9+
export default locale;

packages/react-ui/src/locale/en-US.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import datePicker from '@pkg/components/date-picker/locale/en-US';
12
import popConfirm from '@pkg/components/pop-confirm/locale/en-US';
23
import calendar from '@pkg/components/calendar/locale/en-US';
34
import select from '@pkg/components/select/locale/en-US';
@@ -7,6 +8,7 @@ import type { Locale } from '@pkg/components';
78

89
export default {
910
popConfirm,
11+
datePicker,
1012
calendar,
1113
select,
1214
empty,

packages/react-ui/src/locale/zh-CN.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import popConfirm from '@pkg/components/pop-confirm/locale/zh-CN';
22
import calendar from '@pkg/components/calendar/locale/zh-CN';
33
import empty from '@pkg/components/empty/locale/zh-CN';
4+
import datePicker from '~/date-picker/locale/zh-CN';
45
import type { Locale } from '@pkg/components';
56
import select from '~/select/locale/zh-CN';
67
import input from '~/input/locale/zh-CN';
78

89
export default {
910
popConfirm,
11+
datePicker,
1012
calendar,
1113
select,
1214
empty,

0 commit comments

Comments
 (0)