diff --git a/src/locales/base.ts b/src/locales/base.ts deleted file mode 100644 index bc4e0010c5..0000000000 --- a/src/locales/base.ts +++ /dev/null @@ -1,141 +0,0 @@ -export interface BaseLang { - save: string - confirm: string - cancel: string - done: string - noData: string - placeholder: string - select: string - edit: string - reset: string - video: { - errorTip: string - clickRetry: string - } - fixednav: { - activeText: string - inactiveText: string - } - infiniteloading: { - pullRefreshText: string - loadText: string - loadMoreText: string - } - pagination: { - prev: string - next: string - } - range: { - rangeText: string - } - calendaritem: { - weekdays: Array - end: string - start: string - confirm: string - title: string - // eslint-disable-next-line @typescript-eslint/ban-types - monthTitle: Function - today: string - loadPreviousMonth: string - noEarlierMonth: string - } - shortpassword: { - title: string - description: string - tips: string - } - uploader: { - list: string - ready: string - readyUpload: string - waitingUpload: string - uploading: string - success: string - error: string - deleteWord: string - } - countdown: { - day: string - hour: string - minute: string - second: string - } - address: { - selectRegion: string - deliveryTo: string - chooseAnotherAddress: string - } - signature: { - reSign: string - unsupported: string - } - ecard: { - chooseText: string - otherValueText: string - placeholder: string - } - timeselect: { - pickupTime: string - } - sku: { - buyNow: string - buyNumber: string - addToCard: string - } - skuheader: { - skuId: string - } - addresslist: { - addAddress: string - } - comment: { - complaintsText: string - // eslint-disable-next-line @typescript-eslint/ban-types - additionalReview: Function - // eslint-disable-next-line @typescript-eslint/ban-types - additionalImages: Function - } - searchbar: { - basePlaceholder: string - text: string - test: string - title1: string - title2: string - title3: string - title4: string - title5: string - title6: string - } - audio: { - back: string - forward: string - pause: string - start: string - mute: string - tips: string - } - avatarCropper: { rotate: string; selectImage: string } - datepicker: { - year: string - month: string - day: string - hour: string - min: string - seconds: string - } - pullToRefresh: { - pullingText: string - canReleaseText: string - refreshingText: string - completeText: string - } - tour: { - prevStepText: string - completeText: string - nextStepText: string - } - watermark: { - errorCanvasTips: string - } -} diff --git a/src/locales/en-US.ts b/src/locales/en-US.ts index e812d330ae..c4ff0daac8 100644 --- a/src/locales/en-US.ts +++ b/src/locales/en-US.ts @@ -1,6 +1,6 @@ -import { BaseLang } from './base' +import { Locales } from '@/types' -const enUS: BaseLang = { +const enUS: Locales = { save: 'Save', confirm: 'Confirm', cancel: 'Cancel', diff --git a/src/locales/id-ID.ts b/src/locales/id-ID.ts index 7ba1328ad0..8977f2db55 100644 --- a/src/locales/id-ID.ts +++ b/src/locales/id-ID.ts @@ -1,6 +1,6 @@ -import { BaseLang } from './base' +import { Locales } from '@/types' -const idID: BaseLang = { +const idID: Locales = { save: 'Simpan', confirm: 'Konfirmasi', cancel: 'Batal', diff --git a/src/locales/tr-TR.ts b/src/locales/tr-TR.ts index cc13028177..2f87d1c00f 100644 --- a/src/locales/tr-TR.ts +++ b/src/locales/tr-TR.ts @@ -1,6 +1,6 @@ -import { BaseLang } from './base' +import { Locales } from '@/types' -const trTR: BaseLang = { +const trTR: Locales = { save: 'Kaydet', confirm: 'Onayla', cancel: 'İptal', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 896064def4..da3ab5ff36 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -1,6 +1,6 @@ -import { BaseLang } from './base' +import { Locales } from '@/types' -const zhCN: BaseLang = { +const zhCN: Locales = { save: '保存', confirm: '确认', cancel: '取消', diff --git a/src/locales/zh-TW.ts b/src/locales/zh-TW.ts index 1aff33151e..d5af80715f 100644 --- a/src/locales/zh-TW.ts +++ b/src/locales/zh-TW.ts @@ -1,6 +1,6 @@ -import { BaseLang } from './base' +import { Locales } from '@/types' -const zhCN: BaseLang = { +const zhTW: Locales = { save: '保存', confirm: '確認', cancel: '取消', @@ -139,4 +139,4 @@ const zhCN: BaseLang = { errorCanvasTips: '當前環境不支持Canvas', }, } -export default zhCN +export default zhTW diff --git a/src/locales/zh-UG.ts b/src/locales/zh-UG.ts index 62dc80c998..15da698ed4 100644 --- a/src/locales/zh-UG.ts +++ b/src/locales/zh-UG.ts @@ -1,6 +1,6 @@ -import { BaseLang } from './base' +import { Locales } from '@/types' -const zhUG: BaseLang = { +const zhUG: Locales = { save: 'ساقلاش', confirm: 'ھەئە', cancel: 'ياق', diff --git a/src/packages/address/address.taro.tsx b/src/packages/address/address.taro.tsx index fef8a23fea..62830df070 100644 --- a/src/packages/address/address.taro.tsx +++ b/src/packages/address/address.taro.tsx @@ -131,7 +131,7 @@ const InternalAddress: ForwardRefRenderFunction<
- {(custom || (custom && locale.address.chooseAnotherAddress)) && ( + {(custom || (custom && locale.address?.chooseAnotherAddress)) && ( {custom} diff --git a/src/packages/address/existRender.tsx b/src/packages/address/existRender.tsx index 4f25e0c945..0588259809 100644 --- a/src/packages/address/existRender.tsx +++ b/src/packages/address/existRender.tsx @@ -106,7 +106,7 @@ export const ExistRender: FunctionComponent< ) })} - {(custom || (custom && locale.address.chooseAnotherAddress)) && ( + {(custom || (custom && locale.address?.chooseAnotherAddress)) && (
{custom}
diff --git a/src/packages/audio/audio.taro.tsx b/src/packages/audio/audio.taro.tsx index cc72ef71b7..e6929dbdbe 100644 --- a/src/packages/audio/audio.taro.tsx +++ b/src/packages/audio/audio.taro.tsx @@ -73,7 +73,7 @@ export const Audio: FunctionComponent< }) audioCtx.onEnded(() => { if (loop) { - console.warn(locale.audio.tips || 'onPlayEnd事件在loop=false时才会触发') + console.warn(locale.audio?.tips || 'onPlayEnd事件在loop=false时才会触发') } else { onPlayEnd?.(audioCtx) } @@ -191,7 +191,7 @@ export const Audio: FunctionComponent< className="back" onClick={handleBack} > - {locale.audio.back || '快退'} + {locale.audio?.back || '快退'} diff --git a/src/packages/audio/audio.tsx b/src/packages/audio/audio.tsx index 34c2220910..d2c3c24160 100644 --- a/src/packages/audio/audio.tsx +++ b/src/packages/audio/audio.tsx @@ -68,7 +68,7 @@ export const Audio: FunctionComponent< const classPrefix = 'nut-audio' const handleEnded = (e: SyntheticEvent) => { if (loop) { - console.warn(locale.audio.tips || 'onPlayEnd事件在loop=false时才会触发') + console.warn(locale.audio?.tips || 'onPlayEnd事件在loop=false时才会触发') } else { onEnd?.(e) } @@ -183,7 +183,7 @@ export const Audio: FunctionComponent< className="back" onClick={handleBack} > - {locale.audio.back || '快退'} + {locale.audio?.back || '快退'}
diff --git a/src/packages/avatarcropper/avatarcropper.taro.tsx b/src/packages/avatarcropper/avatarcropper.taro.tsx index ee184339f9..40cdf33e1a 100644 --- a/src/packages/avatarcropper/avatarcropper.taro.tsx +++ b/src/packages/avatarcropper/avatarcropper.taro.tsx @@ -47,7 +47,7 @@ export const AvatarCropper: FunctionComponent< {locale.cancel} , , - , + , , diff --git a/src/packages/avatarcropper/avatarcropper.tsx b/src/packages/avatarcropper/avatarcropper.tsx index 74033e4aef..2dd1b7d4ba 100644 --- a/src/packages/avatarcropper/avatarcropper.tsx +++ b/src/packages/avatarcropper/avatarcropper.tsx @@ -44,7 +44,7 @@ export const AvatarCropper: FunctionComponent< {locale.cancel} , , - , + , , @@ -458,7 +458,7 @@ export const AvatarCropper: FunctionComponent< accept="image/*" className={`${classPrefix}-input`} onChange={(e: any) => inputImageChange(e)} - aria-label={locale.avatarCropper.selectImage} + aria-label={locale.avatarCropper?.selectImage} />
{editText}
diff --git a/src/packages/calendar/calendar.taro.tsx b/src/packages/calendar/calendar.taro.tsx index 254c0348a7..c117b6282a 100644 --- a/src/packages/calendar/calendar.taro.tsx +++ b/src/packages/calendar/calendar.taro.tsx @@ -113,14 +113,14 @@ export const Calendar = React.forwardRef< type={type} autoBackfill={autoBackfill} popup={popup} - title={title || locale.calendaritem.title} + title={title || locale.calendaritem?.title} defaultValue={defaultValue} startDate={startDate} endDate={endDate} showToday={showToday} - startText={startText || locale.calendaritem.start} - endText={endText || locale.calendaritem.end} - confirmText={confirmText || locale.calendaritem.confirm} + startText={startText || locale.calendaritem?.start} + endText={endText || locale.calendaritem?.end} + confirmText={confirmText || locale.calendaritem?.confirm} showTitle={showTitle} showSubTitle={showSubTitle} scrollAnimation={scrollAnimation} diff --git a/src/packages/calendar/calendar.tsx b/src/packages/calendar/calendar.tsx index 10c16be734..2f0471cee4 100644 --- a/src/packages/calendar/calendar.tsx +++ b/src/packages/calendar/calendar.tsx @@ -114,14 +114,14 @@ export const Calendar = React.forwardRef< autoBackfill={autoBackfill} renderBottomButton={renderBottomButton} popup={popup} - title={title || locale.calendaritem.title} + title={title || locale.calendaritem?.title} defaultValue={defaultValue} startDate={startDate} endDate={endDate} showToday={showToday} - startText={startText || locale.calendaritem.start} - endText={endText || locale.calendaritem.end} - confirmText={confirmText || locale.calendaritem.confirm} + startText={startText || locale.calendaritem?.start} + endText={endText || locale.calendaritem?.end} + confirmText={confirmText || locale.calendaritem?.confirm} showTitle={showTitle} showSubTitle={showSubTitle} scrollAnimation={scrollAnimation} diff --git a/src/packages/calendarcard/calendarcard.taro.tsx b/src/packages/calendarcard/calendarcard.taro.tsx index 450ae5bc10..d3fb7abcca 100644 --- a/src/packages/calendarcard/calendarcard.taro.tsx +++ b/src/packages/calendarcard/calendarcard.taro.tsx @@ -364,7 +364,9 @@ export const CalendarCard = React.forwardRef< } } - const monthTitle = locale.calendaritem.monthTitle + const formatTitle = (year: number, month: number) => + `${year}-${Number(month) < 10 ? `0${Number(month)}` : month}` + const monthTitle = locale.calendaritem?.monthTitle || formatTitle const renderHeader = () => { return ( @@ -393,15 +395,14 @@ export const CalendarCard = React.forwardRef< } const [weekHeader] = useState(() => { - const weekdays = locale.calendaritem.weekdays.map((day, index) => { - return { - name: day, - key: index, - } - }) + const weekdays = locale.calendaritem?.weekdays || [] + const weeks = weekdays.map((day, index) => ({ + name: day, + key: index, + })) return [ - ...weekdays.slice(firstDayOfWeek, 7), - ...weekdays.slice(0, firstDayOfWeek), + ...weeks.slice(firstDayOfWeek, 7), + ...weeks.slice(0, firstDayOfWeek), ] }) diff --git a/src/packages/calendarcard/calendarcard.tsx b/src/packages/calendarcard/calendarcard.tsx index 904a69f522..e6a732224a 100644 --- a/src/packages/calendarcard/calendarcard.tsx +++ b/src/packages/calendarcard/calendarcard.tsx @@ -363,7 +363,9 @@ export const CalendarCard = React.forwardRef< } } - const monthTitle = locale.calendaritem.monthTitle + const formatTitle = (year: number, month: number) => + `${year}-${Number(month) < 10 ? `0${Number(month)}` : month}` + const monthTitle = locale.calendaritem?.monthTitle || formatTitle const renderHeader = () => { return ( @@ -392,15 +394,14 @@ export const CalendarCard = React.forwardRef< } const [weekHeader] = useState(() => { - const weekdays = locale.calendaritem.weekdays.map((day, index) => { - return { - name: day, - key: index, - } - }) + const weekdays = locale.calendaritem?.weekdays || [] + const weeks = weekdays.map((day, index) => ({ + name: day, + key: index, + })) return [ - ...weekdays.slice(firstDayOfWeek, 7), - ...weekdays.slice(0, firstDayOfWeek), + ...weeks.slice(firstDayOfWeek, 7), + ...weeks.slice(0, firstDayOfWeek), ] }) diff --git a/src/packages/calendaritem/calendaritem.taro.tsx b/src/packages/calendaritem/calendaritem.taro.tsx index 50807f2f98..4f7e341034 100644 --- a/src/packages/calendaritem/calendaritem.taro.tsx +++ b/src/packages/calendaritem/calendaritem.taro.tsx @@ -130,12 +130,14 @@ export const CalendarItem = React.forwardRef< onPageChange, } = { ...defaultProps, ...props } - const weekdays = locale.calendaritem.weekdays + const weekdays = locale.calendaritem?.weekdays || [] const weeks = [ ...weekdays.slice(firstDayOfWeek, 7), ...weekdays.slice(0, firstDayOfWeek), ] - const monthTitle = locale.calendaritem.monthTitle + const formatTitle = (year: number, month: number) => + `${year}-${Number(month) < 10 ? `0${Number(month)}` : month}` + const monthTitle = locale.calendaritem?.monthTitle || formatTitle const [yearMonthTitle, setYearMonthTitle] = useState('') const [monthsData, setMonthsData] = useState([]) const [monthsNum, setMonthsNum] = useState(0) @@ -763,7 +765,7 @@ export const CalendarItem = React.forwardRef< {showTitle && ( - {title || locale.calendaritem.title} + {title || locale.calendaritem?.title} )} {renderHeaderButtons && ( @@ -843,7 +845,8 @@ export const CalendarItem = React.forwardRef< !isEndTip(day, month) && !renderDayBottom && showToday && - isCurrDay(month, day.day) && ( + isCurrDay(month, day.day) && + locale.calendaritem?.today && ( {locale.calendaritem.today} @@ -856,12 +859,12 @@ export const CalendarItem = React.forwardRef< : '' }`} > - {startText || locale.calendaritem.start} + {startText || locale.calendaritem?.start} )} {isEndTip(day, month) && ( - {endText || locale.calendaritem.end} + {endText || locale.calendaritem?.end} )}
diff --git a/src/packages/calendaritem/calendaritem.tsx b/src/packages/calendaritem/calendaritem.tsx index e5d14c1707..cb85ff163e 100644 --- a/src/packages/calendaritem/calendaritem.tsx +++ b/src/packages/calendaritem/calendaritem.tsx @@ -128,13 +128,15 @@ export const CalendarItem = React.forwardRef< onPageChange, } = { ...defaultProps, ...props } - const weekdays = locale.calendaritem.weekdays + const weekdays = locale.calendaritem?.weekdays || [] const weeks = [ ...weekdays.slice(firstDayOfWeek, 7), ...weekdays.slice(0, firstDayOfWeek), ] - const monthTitle = locale.calendaritem.monthTitle + const formatTitle = (year: number, month: number) => + `${year}-${Number(month) < 10 ? `0${Number(month)}` : month}` + const monthTitle = locale.calendaritem?.monthTitle || formatTitle const [yearMonthTitle, setYearMonthTitle] = useState('') const [monthsData, setMonthsData] = useState([]) const [monthsNum, setMonthsNum] = useState(0) @@ -766,7 +768,7 @@ export const CalendarItem = React.forwardRef<
{showTitle && (
- {title || locale.calendaritem.title} + {title || locale.calendaritem?.title}
)} {renderHeaderButtons && ( @@ -840,7 +842,8 @@ export const CalendarItem = React.forwardRef< !isEndTip(day, month) && !renderDayBottom && showToday && - isCurrDay(month, day.day) && ( + isCurrDay(month, day.day) && + locale.calendaritem?.today && (
{locale.calendaritem.today}
@@ -853,12 +856,12 @@ export const CalendarItem = React.forwardRef< : '' }`} > - {startText || locale.calendaritem.start} + {startText || locale.calendaritem?.start}
)} {isEndTip(day, month) && (
- {endText || locale.calendaritem.end} + {endText || locale.calendaritem?.end}
)} diff --git a/src/packages/configprovider/configprovider.taro.tsx b/src/packages/configprovider/configprovider.taro.tsx index c7d83aed57..bf470ded91 100644 --- a/src/packages/configprovider/configprovider.taro.tsx +++ b/src/packages/configprovider/configprovider.taro.tsx @@ -4,23 +4,12 @@ import kebabCase from 'lodash.kebabcase' import isEqual from 'react-fast-compare' import { View } from '@tarojs/components' import { useMemo } from '@/hooks/use-memo' -import { BasicComponent } from '@/utils/typings' -import { BaseLang } from '@/locales/base' import zhCN from '@/locales/zh-CN' -import type { NutCSSVariables } from './types' - -export interface ConfigProviderProps extends BasicComponent { - locale: BaseLang - direction?: ConfigProviderDirection - theme?: Record -} - -export type ConfigProviderDirection = 'ltr' | 'rtl' | undefined - -const classPrefix = 'nut-configprovider' +import { TaroConfigProviderProps, Locales as LocalesType } from '@/types' +type Locales = Partial export const defaultConfigRef: { - current: ConfigProviderProps + current: TaroConfigProviderProps } = { current: { locale: zhCN, @@ -28,7 +17,7 @@ export const defaultConfigRef: { }, } -export const setDefaultConfig = (config: ConfigProviderProps) => { +export const setDefaultConfig = (config: TaroConfigProviderProps) => { defaultConfigRef.current = config } @@ -36,7 +25,9 @@ export const getDefaultConfig = () => { return defaultConfigRef.current } -const ConfigContext = createContext(null) +const ConfigContext = createContext | null>( + null +) export const useConfig = () => { return useContext(ConfigContext) ?? getDefaultConfig() @@ -56,10 +47,10 @@ export const useRtl = () => { } export const ConfigProvider: FunctionComponent< - Partial + Partial> > = (props) => { const { style, className, children, direction, ...config } = props - + const classPrefix = 'nut-configprovider' const mergedConfig = useMemo( () => { return { @@ -74,7 +65,7 @@ export const ConfigProvider: FunctionComponent< const nextTheme = next[index] return !isEqual(prevTheme, nextTheme) }) - ) as ConfigProviderProps + ) as TaroConfigProviderProps const cssVarStyle = React.useMemo(() => { return convertThemeVarsToCSSVars(mergedConfig.theme || {}) diff --git a/src/packages/configprovider/configprovider.tsx b/src/packages/configprovider/configprovider.tsx index 20397ae5a3..9fe6ddb843 100644 --- a/src/packages/configprovider/configprovider.tsx +++ b/src/packages/configprovider/configprovider.tsx @@ -3,31 +3,22 @@ import classNames from 'classnames' import kebabCase from 'lodash.kebabcase' import isEqual from 'react-fast-compare' import { useMemo } from '@/hooks/use-memo' -import { BasicComponent } from '@/utils/typings' -import { BaseLang } from '@/locales/base' import zhCN from '@/locales/zh-CN' -import type { NutCSSVariables } from './types' import { inBrowser } from '@/utils' +import { WebConfigProviderProps, Locales as LocalesType } from '@/types' -export interface ConfigProviderProps extends BasicComponent { - locale: BaseLang - direction?: ConfigProviderDirection - theme?: Record -} - -export type ConfigProviderDirection = 'ltr' | 'rtl' | undefined - -const classPrefix = 'nut-configprovider' +type Locales = Partial export const defaultConfigRef: { - current: ConfigProviderProps + current: WebConfigProviderProps } = { current: { locale: zhCN, + direction: 'ltr', }, } -export const setDefaultConfig = (config: ConfigProviderProps) => { +export const setDefaultConfig = (config: WebConfigProviderProps) => { defaultConfigRef.current = config } @@ -35,7 +26,9 @@ export const getDefaultConfig = () => { return defaultConfigRef.current } -const ConfigContext = createContext(null) +const ConfigContext = createContext | null>( + null +) export const useConfig = () => { return useContext(ConfigContext) ?? getDefaultConfig() @@ -58,10 +51,10 @@ export const useRtl = () => { } export const ConfigProvider: FunctionComponent< - Partial + Partial> > = (props) => { const { style, className, children, direction, ...config } = props - + const classPrefix = 'nut-configprovider' const mergedConfig = useMemo( () => { return { @@ -76,7 +69,7 @@ export const ConfigProvider: FunctionComponent< const nextTheme = next[index] return !isEqual(prevTheme, nextTheme) }) - ) as ConfigProviderProps + ) as WebConfigProviderProps const cssVarStyle = React.useMemo(() => { return convertThemeVarsToCSSVars(mergedConfig.theme || {}) diff --git a/src/packages/configprovider/demos/h5/demo4.tsx b/src/packages/configprovider/demos/h5/demo4.tsx index bd8c51e251..0d12e58d19 100644 --- a/src/packages/configprovider/demos/h5/demo4.tsx +++ b/src/packages/configprovider/demos/h5/demo4.tsx @@ -1,11 +1,12 @@ import React from 'react' -import { ConfigProvider, TextArea } from '@nutui/nutui-react' -import enUS from '@nutui/nutui-react/dist/es/locale/en-US' +import { ConfigProvider, TextArea, Button } from '@nutui/nutui-react' +const loc = { text: 'ee' } const Demo4 = () => { return ( <> - + +