diff --git a/assets/index.less b/assets/index.less index d5db8413b..8a00cfd5c 100644 --- a/assets/index.less +++ b/assets/index.less @@ -173,13 +173,10 @@ // Preset &-presets { + display: flex; + flex-direction: column; + gap: 4px; background: #ccccff; - - ul { - margin: 0; - padding: 0; - list-style: none; - } } &-footer, @@ -191,11 +188,6 @@ margin: 0; padding: 0; overflow: hidden; - list-style: none; - - > li { - display: inline-block; - } } &-ok { diff --git a/src/PickerInput/Popup/Footer.tsx b/src/PickerInput/Popup/Footer.tsx index ba15dba3d..e1862ddbc 100644 --- a/src/PickerInput/Popup/Footer.tsx +++ b/src/PickerInput/Popup/Footer.tsx @@ -45,7 +45,8 @@ export default function Footer(props: FooterProps) { const { prefixCls, locale, - button: Button = 'button', + nowButton: NowButton = 'button', + okButton: OkButton = 'button', classNames, styles, } = React.useContext(PickerContext); @@ -70,35 +71,24 @@ export default function Footer(props: FooterProps) { } }; - const nowPrefixCls = `${prefixCls}-now`; - const nowBtnPrefixCls = `${nowPrefixCls}-btn`; - const presetNode = showNow && ( -
  • - - {internalMode === 'date' ? locale.today : locale.now} - -
  • + + {internalMode === 'date' ? locale.today : locale.now} + ); // >>> OK const okNode = needConfirm && ( -
  • - -
  • + + {locale.ok} + ); const rangeNode = (presetNode || okNode) && ( - + ); // ======================== Render ======================== diff --git a/src/PickerInput/Popup/PresetPanel.tsx b/src/PickerInput/Popup/PresetPanel.tsx index d145cdcc5..c6ee09dbf 100644 --- a/src/PickerInput/Popup/PresetPanel.tsx +++ b/src/PickerInput/Popup/PresetPanel.tsx @@ -23,24 +23,22 @@ export default function PresetPanel( return (
    - + {presets.map(({ label, value }, index) => ( + + ))}
    ); } diff --git a/src/PickerInput/Popup/index.tsx b/src/PickerInput/Popup/index.tsx index f02810390..5619107f6 100644 --- a/src/PickerInput/Popup/index.tsx +++ b/src/PickerInput/Popup/index.tsx @@ -20,10 +20,12 @@ export type PopupShowTimeConfig = Omit< Pick, 'disabledTime'>; export interface PopupProps - extends Pick, 'onFocus' | 'onBlur'>, + extends + Pick, 'onFocus' | 'onBlur'>, FooterProps, PopupPanelProps { panelRender?: SharedPickerProps['panelRender']; + containerRef?: React.Ref; // Presets presets: ValueDate[]; @@ -45,6 +47,7 @@ export interface PopupProps; + onEscapeKeyDown?: VoidFunction; classNames?: SharedPickerProps['classNames']; styles?: SharedPickerProps['styles']; @@ -71,6 +74,8 @@ export default function Popup(props: PopupProps(props: PopupProps = (e) => { + if (e.key === 'Tab') { + const container = e.currentTarget; + const focusable = Array.from( + container.querySelectorAll( + 'button:not([disabled]), a:not([aria-disabled="true"]), td[tabindex="0"], li[tabindex="0"]', + ), + ).filter((el) => window.getComputedStyle(el).visibility !== 'hidden'); + + if (!focusable.length) return; + + e.preventDefault(); + const idx = focusable.indexOf(document.activeElement as HTMLElement); + const next = e.shiftKey + ? (idx - 1 + focusable.length) % focusable.length + : (idx + 1) % focusable.length; + focusable[next].focus(); + } else if (e.key === 'Escape') { + e.preventDefault(); + e.stopPropagation(); + onEscapeKeyDown?.(); + } + }; + // Container let renderNode = (
    = [ /** Used for change event, it should always be not undefined */ export type NoUndefinedRangeValueType = [start: DateType | null, end: DateType | null]; -export interface BaseRangePickerProps - extends Omit, 'showTime' | 'id'> { +export interface BaseRangePickerProps extends Omit< + SharedPickerProps, + 'showTime' | 'id' +> { // Structure id?: SelectorIdType; @@ -132,7 +135,8 @@ export interface BaseRangePickerProps } export interface RangePickerProps - extends BaseRangePickerProps, + extends + BaseRangePickerProps, Omit, 'format' | 'defaultValue' | 'defaultOpenValue'> {} function getActiveRange(activeIndex: number) { @@ -227,6 +231,7 @@ function RangePicker( // ========================= Refs ========================= const selectorRef = usePickerRef(ref); + const popupRef = React.useRef(null); // ======================= Semantic ======================= const [mergedClassNames, mergedStyles] = useSemantic(propClassNames, propStyles); @@ -241,6 +246,8 @@ function RangePicker( } }; + const forceClose = () => triggerOpen(false, { force: true }); + // ======================== Values ======================== const [mergedValue, setInnerValue, getCalendarValue, triggerCalendarChange, triggerOk] = useInnerValue( @@ -319,6 +326,15 @@ function RangePicker( const internalMode: InternalMode = mergedMode === 'date' && mergedShowTime ? 'datetime' : mergedMode; + // ===================== Keyboard Focus ===================== + const { isFocusOpenSuppressed } = usePopupFocus( + mergedOpen, + mergedMode, + activeIndex, + popupRef, + () => selectorRef.current?.focus({ index: activeIndex ?? 0 }), + ); + // ====================== PanelCount ====================== const multiplePanel = internalMode === picker && internalMode !== 'time'; @@ -426,7 +442,7 @@ function RangePicker( flushSubmit(activeIndex, nextIndex === null); if (nextIndex === null) { - triggerOpen(false, { force: true }); + forceClose(); } else if (!skipFocus) { selectorRef.current.focus({ index: nextIndex }); } @@ -454,7 +470,7 @@ function RangePicker( const onSelectorClear = () => { triggerSubmitChange(null); - triggerOpen(false, { force: true }); + forceClose(); }; // ======================== Hover ========================= @@ -502,7 +518,7 @@ function RangePicker( if (passed) { lastOperation('preset-click'); - triggerOpen(false, { force: true }); + forceClose(); } }; @@ -517,7 +533,11 @@ function RangePicker( // >>> Focus const onPanelFocus: React.FocusEventHandler = (event) => { - triggerOpen(true); + // A programmatic focus move into the panel (open / drill-down) must not + // reopen a popup that is in the middle of closing. + if (!isFocusOpenSuppressed()) { + triggerOpen(true); + } onSharedFocus(event); }; @@ -597,6 +617,8 @@ function RangePicker( onFocus={onPanelFocus} onBlur={onSharedBlur} onPanelMouseDown={onPanelMouseDown} + containerRef={popupRef} + onEscapeKeyDown={forceClose} // Mode picker={picker} mode={mergedMode} @@ -668,9 +690,11 @@ function RangePicker( lastOperation('input'); - triggerOpen(true, { - inherit: true, - }); + if (!isFocusOpenSuppressed()) { + triggerOpen(true, { + inherit: true, + }); + } // When click input to switch the field, it will not trigger close. // Which means it will lose the part confirm and we need fill back. @@ -696,7 +720,16 @@ function RangePicker( const onSelectorKeyDown: SelectorProps['onKeyDown'] = (event, preventDefault) => { if (event.key === 'Tab') { - triggerPartConfirm(null, true); + if (mergedOpen && !event.shiftKey) { + // Popup is open: move focus into the panel's active cell so keyboard + // users can navigate the calendar, rather than Tab jumping to the other + // field. The input blur this triggers would close the popup, but the + // panel's `onFocus` (→ `triggerOpen(true)`) keeps it open. + event.preventDefault(); + focusPopupActiveCell(popupRef); + } else { + triggerPartConfirm(null, true); + } } onKeyDown?.(event, preventDefault); @@ -708,7 +741,8 @@ function RangePicker( prefixCls, locale, generateConfig, - button: components.button, + nowButton: components.nowButton, + okButton: components.okButton, input: components.input, classNames: mergedClassNames, styles: mergedStyles, @@ -717,7 +751,8 @@ function RangePicker( prefixCls, locale, generateConfig, - components.button, + components.nowButton, + components.okButton, components.input, mergedClassNames, mergedStyles, diff --git a/src/PickerInput/Selector/Input.tsx b/src/PickerInput/Selector/Input.tsx index 7e2fae5da..98402b84b 100644 --- a/src/PickerInput/Selector/Input.tsx +++ b/src/PickerInput/Selector/Input.tsx @@ -31,6 +31,7 @@ export interface InputProps extends Omit boolean; active?: boolean; + open?: boolean; /** Used for single picker only */ showActiveCls?: boolean; suffixIcon?: React.ReactNode; @@ -54,6 +55,7 @@ const Input = React.forwardRef((props, ref) => { const { className, active, + open, showActiveCls = true, suffixIcon, format, @@ -407,6 +409,8 @@ const Input = React.forwardRef((props, ref) => { ( active: activeIndex === index, + open, + helped: allHelp || (activeHelp && activeIndex === index), disabled: getProp(disabled), diff --git a/src/PickerInput/SinglePicker.tsx b/src/PickerInput/SinglePicker.tsx index bdb8b78cb..b6c5cff38 100644 --- a/src/PickerInput/SinglePicker.tsx +++ b/src/PickerInput/SinglePicker.tsx @@ -25,6 +25,7 @@ import useFieldsInvalidate from './hooks/useFieldsInvalidate'; import useFilledProps from './hooks/useFilledProps'; import useOpen from './hooks/useOpen'; import usePickerRef from './hooks/usePickerRef'; +import usePopupFocus, { focusPopupActiveCell } from './hooks/usePopupFocus'; import usePresets from './hooks/usePresets'; import useRangeActive from './hooks/useRangeActive'; import useRangePickerValue from './hooks/useRangePickerValue'; @@ -206,6 +207,7 @@ function Picker( // ========================= Refs ========================= const selectorRef = usePickerRef(ref); + const popupRef = React.useRef(null); // ========================= Util ========================= function pickerParam(values: T | T[]) { @@ -223,6 +225,7 @@ function Picker( // ========================= Open ========================= const [mergedOpen, triggerOpen] = useOpen(open, defaultOpen, [disabled], onOpenChange); + const forceClose = () => triggerOpen(false, { force: true }); // ======================= Calendar ======================= const onInternalCalendarChange = (dates: DateType[], dateStrings: string[], info: BaseInfo) => { @@ -277,6 +280,11 @@ function Picker( /** Extends from `mergedMode` to patch `datetime` mode */ const internalMode: InternalMode = mergedMode === 'date' && showTime ? 'datetime' : mergedMode; + // ===================== Keyboard Focus ===================== + const { isFocusOpenSuppressed } = usePopupFocus(mergedOpen, mergedMode, 0, popupRef, () => + selectorRef.current?.focus(), + ); + // ======================= Show Now ======================= const mergedShowNow = useShowNow(picker, mergedMode, showNow, showToday); @@ -369,8 +377,7 @@ function Picker( */ const triggerConfirm = () => { triggerSubmitChange(getCalendarValue()); - - triggerOpen(false, { force: true }); + forceClose(); }; // ======================== Click ========================= @@ -387,7 +394,7 @@ function Picker( const onSelectorClear = () => { triggerSubmitChange(null); - triggerOpen(false, { force: true }); + forceClose(); }; // ======================== Hover ========================= @@ -441,7 +448,7 @@ function Picker( const passed = triggerSubmitChange(nextCalendarValues); if (passed && !multiple) { - triggerOpen(false, { force: true }); + forceClose(); } }; @@ -456,7 +463,11 @@ function Picker( // >>> Focus const onPanelFocus: React.FocusEventHandler = (event) => { - triggerOpen(true); + // A programmatic focus move into the panel (open / drill-down) must not + // reopen a popup that is in the middle of closing. + if (!isFocusOpenSuppressed()) { + triggerOpen(true); + } onSharedFocus(event); }; @@ -522,6 +533,8 @@ function Picker( // Focus onFocus={onPanelFocus} onBlur={onSharedBlur} + containerRef={popupRef} + onEscapeKeyDown={forceClose} // Mode picker={picker} mode={mergedMode} @@ -574,9 +587,11 @@ function Picker( const onSelectorFocus: SelectorProps['onFocus'] = (event) => { lastOperation('input'); - triggerOpen(true, { - inherit: true, - }); + if (!isFocusOpenSuppressed()) { + triggerOpen(true, { + inherit: true, + }); + } // setActiveIndex(index); @@ -591,7 +606,16 @@ function Picker( const onSelectorKeyDown: SelectorProps['onKeyDown'] = (event, preventDefault) => { if (event.key === 'Tab') { - triggerConfirm(); + if (mergedOpen && !event.shiftKey) { + // Popup is open: move focus into the panel's active cell so keyboard + // users can navigate the calendar, rather than Tab leaving the picker. + // The input blur this triggers would close the popup, but the panel's + // `onFocus` (→ `triggerOpen(true)`) keeps it open. + event.preventDefault(); + focusPopupActiveCell(popupRef); + } else { + triggerConfirm(); + } } onKeyDown?.(event, preventDefault); @@ -603,7 +627,8 @@ function Picker( prefixCls, locale, generateConfig, - button: components.button, + nowButton: components.nowButton, + okButton: components.okButton, input: components.input, classNames: mergedClassNames, styles: mergedStyles, @@ -612,7 +637,8 @@ function Picker( prefixCls, locale, generateConfig, - components.button, + components.nowButton, + components.okButton, components.input, mergedClassNames, mergedStyles, diff --git a/src/PickerInput/context.tsx b/src/PickerInput/context.tsx index 6f3c66aab..7591c2e8d 100644 --- a/src/PickerInput/context.tsx +++ b/src/PickerInput/context.tsx @@ -8,7 +8,8 @@ export interface PickerContextProps { locale: Locale; generateConfig: GenerateConfig; /** Customize button component */ - button?: Components['button']; + nowButton?: Components['nowButton']; + okButton?: Components['okButton']; input?: Components['input']; classNames: FilledClassNames; styles: FilledStyles; diff --git a/src/PickerInput/hooks/usePopupFocus.ts b/src/PickerInput/hooks/usePopupFocus.ts new file mode 100644 index 000000000..ad7535c07 --- /dev/null +++ b/src/PickerInput/hooks/usePopupFocus.ts @@ -0,0 +1,137 @@ +import { useEvent } from '@rc-component/util'; +import useLayoutEffect from '@rc-component/util/lib/hooks/useLayoutEffect'; +import raf from '@rc-component/util/lib/raf'; +import * as React from 'react'; +import type { PanelMode } from '../../interface'; + +/** + * Move DOM focus to the panel's active cell (or the panel container as a + * fallback). Centralizes the `[tabindex="0"]` lookup shared across the pickers. + */ +export function focusPopupActiveCell(popupRef: React.RefObject) { + const popup = popupRef.current; + if (!popup) { + return; + } + + // Fall back through progressively looser targets so focus always lands on a + // cell the user can act on — e.g. when the roving active cell is outside the + // panel currently shown for the active field. Cells that aren't the active + // one keep `tabindex="-1"` but are still focusable programmatically; arrow + // keys then re-establish the roving tabindex from there. + const target = + // 1. The roving-tabindex active cell. + popup.querySelector('td[tabindex="0"], li[tabindex="0"]') || + // 2. The selected or today cell. + popup.querySelector( + 'td[aria-selected="true"], li[aria-selected="true"], td[aria-current="date"]', + ) || + // 3. The first navigable (non-disabled) date item. + popup.querySelector( + 'td[role="gridcell"]:not([aria-disabled="true"]), li[role="option"]:not([aria-disabled="true"])', + ); + + // Last resort: the dialog container itself. + (target ?? popup).focus(); +} + +/** + * Shared keyboard-focus handoff between the selector input and the popup panel. + * + * - On open: focus stays on the selector input (so the user can keep typing). + * - On drill-down while open (e.g. Date → Month → Year): move focus to the + * active cell of the newly shown panel. This is driven from here — rather than + * from inside `PickerPanel` — because the range picker remounts its + * `PickerPanel`(s) on these transitions (it switches between one and two + * panels), which would reset any panel-local mode tracking. We only treat a + * mode change as a drill-down when `activeIndex` is unchanged: a range picker + * with a per-field `mode` (e.g. `['year', 'month']`) also changes `mergedMode` + * when the user switches input fields, and that must not steal focus into the + * panel. + * - On close while focus is still inside the panel (e.g. Enter on a cell, or + * Escape — which the popup closes on its own): return focus to the selector + * input. + * + * Focusing the selector triggers its `onFocus`, which would normally reopen the + * popup. `isFocusOpenSuppressed()` lets the caller skip that reopen for the + * focus moves initiated here. + */ +export default function usePopupFocus( + mergedOpen: boolean, + mergedMode: PanelMode, + activeIndex: number, + popupRef: React.RefObject, + focusSelector: () => void, +) { + // While a programmatic focus move is in flight, the resulting `focus` event + // must not be treated as a user interaction: focusing the selector would + // otherwise reopen the popup, and focusing a panel cell would fire the + // popup's `onFocus` (→ `triggerOpen(true)`) and cancel a pending close. The + // caller checks `isFocusOpenSuppressed()` in both `onSelectorFocus` and + // `onPanelFocus` to skip those reopens. The flag clears on the next microtask, + // after the synchronous focus event has been dispatched. + const suppressRef = React.useRef(false); + + const runSuppressed = (focus: () => void) => { + suppressRef.current = true; + focus(); + Promise.resolve().then(() => { + suppressRef.current = false; + }); + }; + + const focusSelectorSuppressed = useEvent(() => { + runSuppressed(focusSelector); + }); + + const focusPanelSuppressed = useEvent(() => { + runSuppressed(() => focusPopupActiveCell(popupRef)); + }); + + // >>> On close, return focus to the selector when it was left in the panel + // Opening keeps focus on the input (so the user can keep typing); we only act + // on *close*, and only when focus currently sits inside the panel — e.g. after + // Enter/Space on a date cell, or Escape. Without this the focused cell unmounts + // and focus falls back to . We never run on outside-click close (focus is + // still on the input then), so the input isn't spuriously re-focused. + // + // The focus move is deferred one frame so a *transient* close doesn't steal + // focus: the range picker briefly closes while switching from the start field + // to the end field, and reopens on the same tick. That reopen re-runs this + // effect and its cleanup cancels the pending frame, leaving the field-switch + // focus (the next input) untouched. A genuine close stays closed, so the + // frame fires and focus returns to the input. + useLayoutEffect(() => { + if (!mergedOpen && popupRef.current?.contains(document.activeElement)) { + const rafId = raf(() => { + focusSelectorSuppressed(); + }); + return () => raf.cancel(rafId); + } + return undefined; + }, [mergedOpen]); + + // >>> Drill-down (a mode change with no field switch) while open + const prevModeRef = React.useRef(mergedMode); + const prevActiveIndexRef = React.useRef(activeIndex); + useLayoutEffect(() => { + const modeChanged = prevModeRef.current !== mergedMode; + const fieldSwitched = prevActiveIndexRef.current !== activeIndex; + prevModeRef.current = mergedMode; + prevActiveIndexRef.current = activeIndex; + + if (mergedOpen && modeChanged && !fieldSwitched) { + const rafId = raf(() => { + focusPanelSuppressed(); + }); + return () => raf.cancel(rafId); + } + return undefined; + // `mergedOpen` is read at fire time; we only want to react to mode changes. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [mergedMode, activeIndex]); + + return { + isFocusOpenSuppressed: () => suppressRef.current, + }; +} diff --git a/src/PickerPanel/DatePanel/index.tsx b/src/PickerPanel/DatePanel/index.tsx index 42013ebff..b4e20463e 100644 --- a/src/PickerPanel/DatePanel/index.tsx +++ b/src/PickerPanel/DatePanel/index.tsx @@ -48,7 +48,26 @@ export default function DatePanel(props: DatePane const weekFirstDay = generateConfig.locale.getWeekFirstDay(locale.locale); const monthStartDate = generateConfig.setDate(pickerValue, 1); const baseDate = getWeekStartDate(locale.locale, generateConfig, monthStartDate); + + const yearLabel = formatValue(pickerValue, { + locale, + format: locale.yearFormat, + generateConfig, + }); + + const monthsLocale: string[] = + locale.shortMonths || + (generateConfig.locale.getShortMonths + ? generateConfig.locale.getShortMonths(locale.locale) + : []); const month = generateConfig.getMonth(pickerValue); + const monthLabel = locale.monthFormat + ? formatValue(pickerValue, { + locale, + format: locale.monthFormat, + generateConfig, + }) + : monthsLocale[month]; // =========================== PrefixColumn =========================== const showPrefixColumn = showWeek === undefined ? isWeek : showWeek; @@ -56,10 +75,13 @@ export default function DatePanel(props: DatePane ? (date: DateType) => { // >>> Additional check for disabled const disabled = disabledDate?.(date, { type: 'week' }); + const label = generateConfig.locale.getWeek(locale.locale, date); return ( (props: DatePane } }} > -
    - {generateConfig.locale.getWeek(locale.locale, date)} -
    +
    {label}
    ); } @@ -132,13 +152,14 @@ export default function DatePanel(props: DatePane return classObj; }; - // ========================= Header ========================= - const monthsLocale: string[] = - locale.shortMonths || - (generateConfig.locale.getShortMonths - ? generateConfig.locale.getShortMonths(locale.locale) - : []); + const getCellAttributes = (date: DateType): React.TdHTMLAttributes => { + if (isSameDate(generateConfig, date, now)) { + return { 'aria-current': 'date' }; + } + return {}; + }; + // ========================= Header ========================= const yearNode: React.ReactNode = ( ); const monthNode: React.ReactNode = ( @@ -165,16 +181,9 @@ export default function DatePanel(props: DatePane onClick={() => { onModeChange('month', pickerValue); }} - tabIndex={-1} className={`${prefixCls}-month-btn`} > - {locale.monthFormat - ? formatValue(pickerValue, { - locale, - format: locale.monthFormat, - generateConfig, - }) - : monthsLocale[month]} + {monthLabel} ); @@ -196,6 +205,12 @@ export default function DatePanel(props: DatePane clone = generateConfig.addMonth(clone, 1); return generateConfig.addDate(clone, -1); }} + labels={{ + superPrev: locale.previousYear, + prev: locale.previousMonth, + next: locale.nextMonth, + superNext: locale.nextYear, + }} > {monthYearNodes} @@ -213,8 +228,10 @@ export default function DatePanel(props: DatePane getCellDate={getCellDate} getCellText={getCellText} getCellClassName={getCellClassName} + getCellAttributes={getCellAttributes} prefixColumn={prefixColumn} cellSelection={!isWeek} + tableLabel={`${monthLabel} ${yearLabel}`} />
    diff --git a/src/PickerPanel/DecadePanel/index.tsx b/src/PickerPanel/DecadePanel/index.tsx index 748015d9f..390736cc7 100644 --- a/src/PickerPanel/DecadePanel/index.tsx +++ b/src/PickerPanel/DecadePanel/index.tsx @@ -61,6 +61,13 @@ export default function DecadePanel( }; }; + const getCellAttributes = (date: DateType): React.TdHTMLAttributes => { + if (isSameDecade(generateConfig, date, generateConfig.getNow())) { + return { 'aria-current': 'date' }; + } + return {}; + }; + // ======================== Disabled ======================== const mergedDisabledDate: DisabledDate = disabledDate ? (currentDate, disabledInfo) => { @@ -81,7 +88,7 @@ export default function DecadePanel( : null; // ========================= Header ========================= - const yearNode = `${formatValue(startYearDate, { + const yearLabel = `${formatValue(startYearDate, { locale, format: locale.yearFormat, generateConfig, @@ -102,8 +109,9 @@ export default function DecadePanel( // Limitation getStart={getStartYear} getEnd={getEndYear} + labels={{ superPrev: locale.previousCentury, superNext: locale.nextCentury }} > - {yearNode} + {yearLabel} {/* Body */} @@ -113,10 +121,12 @@ export default function DecadePanel( colNum={3} rowNum={4} baseDate={baseDate} + tableLabel={yearLabel} // Body getCellDate={getCellDate} getCellText={getCellText} getCellClassName={getCellClassName} + getCellAttributes={getCellAttributes} /> diff --git a/src/PickerPanel/MonthPanel/index.tsx b/src/PickerPanel/MonthPanel/index.tsx index cfd22079f..d84517275 100644 --- a/src/PickerPanel/MonthPanel/index.tsx +++ b/src/PickerPanel/MonthPanel/index.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import type { DisabledDate, SharedPanelProps } from '../../interface'; -import { formatValue } from '../../utils/dateUtil'; +import { formatValue, isSameMonth } from '../../utils/dateUtil'; import { PanelContext, useInfo } from '../context'; import PanelBody from '../PanelBody'; import PanelHeader from '../PanelHeader'; @@ -23,6 +23,11 @@ export default function MonthPanel( // ========================== Base ========================== const [info] = useInfo(props, 'month'); const baseDate = generateConfig.setMonth(pickerValue, 0); + const yearLabel = formatValue(pickerValue, { + locale, + format: locale.yearFormat, + generateConfig, + }); // ========================= Month ========================== const monthsLocale: string[] = @@ -52,6 +57,13 @@ export default function MonthPanel( [`${prefixCls}-cell-in-view`]: true, }); + const getCellAttributes = (date: DateType): React.TdHTMLAttributes => { + if (isSameMonth(generateConfig, date, generateConfig.getNow())) { + return { 'aria-current': 'date' }; + } + return {}; + }; + // ======================== Disabled ======================== const mergedDisabledDate: DisabledDate = disabledDate ? (currentDate, disabledInfo) => { @@ -75,14 +87,9 @@ export default function MonthPanel( onClick={() => { onModeChange('year'); }} - tabIndex={-1} className={`${prefixCls}-year-btn`} > - {formatValue(pickerValue, { - locale, - format: locale.yearFormat, - generateConfig, - })} + {yearLabel} ); @@ -97,6 +104,7 @@ export default function MonthPanel( // Limitation getStart={(date) => generateConfig.setMonth(date, 0)} getEnd={(date) => generateConfig.setMonth(date, 11)} + labels={{ superPrev: locale.previousYear, superNext: locale.nextYear }} > {yearNode} @@ -109,10 +117,12 @@ export default function MonthPanel( colNum={3} rowNum={4} baseDate={baseDate} + tableLabel={yearLabel} // Body getCellDate={getCellDate} getCellText={getCellText} getCellClassName={getCellClassName} + getCellAttributes={getCellAttributes} /> diff --git a/src/PickerPanel/PanelBody.tsx b/src/PickerPanel/PanelBody.tsx index 34b6fe011..152a6051c 100644 --- a/src/PickerPanel/PanelBody.tsx +++ b/src/PickerPanel/PanelBody.tsx @@ -1,8 +1,8 @@ import { clsx } from 'clsx'; import * as React from 'react'; import type { DisabledDate } from '../interface'; -import { formatValue, isInRange, isSame } from '../utils/dateUtil'; -import { PickerHackContext, usePanelContext } from './context'; +import { formatValue, isInRange, isSame, isSameDate } from '../utils/dateUtil'; +import { PanelFocusContext, PickerHackContext, usePanelContext } from './context'; export interface PanelBodyProps { rowNum: number; @@ -15,6 +15,7 @@ export interface PanelBodyProps { getCellDate: (date: DateType, offset: number) => DateType; getCellText: (date: DateType) => React.ReactNode; getCellClassName: (date: DateType) => Record; + getCellAttributes: (date: DateType) => React.TdHTMLAttributes; disabledDate?: DisabledDate; @@ -25,6 +26,7 @@ export interface PanelBodyProps { prefixColumn?: (date: DateType) => React.ReactNode; rowClassName?: (date: DateType) => string; cellSelection?: boolean; + tableLabel?: string; } export default function PanelBody(props: PanelBodyProps) { @@ -38,9 +40,11 @@ export default function PanelBody(props: PanelBod titleFormat, getCellText, getCellClassName, + getCellAttributes, headerCells, cellSelection = true, disabledDate, + tableLabel, } = props; const { @@ -66,6 +70,38 @@ export default function PanelBody(props: PanelBod // ============================= Context ============================== const { onCellDblClick } = React.useContext(PickerHackContext); + const { focusedDate, onCellFocusedDateChange, focusTrigger } = + React.useContext(PanelFocusContext); + + // ============================== Focus =============================== + // Roving tabindex: the active cell carries `tabIndex=0`. We move DOM focus to + // it imperatively after arrow-key navigation, and when a mode change requests + // focus via `focusTrigger`. The active cell registers its node via a callback + // ref, so the effect never needs to query the DOM — and it stays correct even + // when navigation re-bases the grid to a new month and the active date lands + // on the same cell position. + const focusedCellNodeRef = React.useRef(null); + const pendingFocusRef = React.useRef(false); + + // A mode change bumps `focusTrigger` (after this panel has mounted). Detect it + // during render so focus is requested deterministically, regardless of how the + // mount and the trigger update interleave. + const lastFocusTriggerRef = React.useRef(focusTrigger); + if (focusTrigger !== lastFocusTriggerRef.current) { + lastFocusTriggerRef.current = focusTrigger; + pendingFocusRef.current = true; + } + + const registerFocusedCell = React.useCallback((node: HTMLElement | null) => { + focusedCellNodeRef.current = node; + }, []); + + React.useEffect(() => { + if (pendingFocusRef.current) { + pendingFocusRef.current = false; + focusedCellNodeRef.current?.focus(); + } + }, [focusedDate, focusTrigger]); // ============================== Value =============================== const matchValues = (date: DateType) => @@ -121,10 +157,30 @@ export default function PanelBody(props: PanelBod // Render const inner =
    {getCellText(currentDate)}
    ; + // Week panel uses isSameWeek which matches all 7 days in a row — use isSameDate + // so only the specific navigated cell gets tabIndex=0. + const isFocused = + !!focusedDate && + (type === 'week' + ? isSameDate(generateConfig, currentDate, focusedDate) + : isSame(generateConfig, locale, currentDate, focusedDate, type)); + const isSelected = + !hoverRangeValue && + // WeekPicker use row instead + type !== 'week' && + matchValues(currentDate); + rowNode.push( @@ -133,11 +189,7 @@ export default function PanelBody(props: PanelBod [`${cellPrefixCls}-in-range`]: inRange && !rangeStart && !rangeEnd, [`${cellPrefixCls}-range-start`]: rangeStart, [`${cellPrefixCls}-range-end`]: rangeEnd, - [`${prefixCls}-cell-selected`]: - !hoverRangeValue && - // WeekPicker use row instead - type !== 'week' && - matchValues(currentDate), + [`${prefixCls}-cell-selected`]: isSelected, ...getCellClassName(currentDate), })} style={styles.item} @@ -161,6 +213,37 @@ export default function PanelBody(props: PanelBod onHover?.(null); } }} + onKeyDown={(e) => { + switch (e.key) { + case 'ArrowLeft': + e.preventDefault(); + pendingFocusRef.current = true; + onCellFocusedDateChange(getCellDate(currentDate, -1)); + break; + case 'ArrowRight': + e.preventDefault(); + pendingFocusRef.current = true; + onCellFocusedDateChange(getCellDate(currentDate, 1)); + break; + case 'ArrowUp': + e.preventDefault(); + pendingFocusRef.current = true; + onCellFocusedDateChange(getCellDate(currentDate, -colNum)); + break; + case 'ArrowDown': + e.preventDefault(); + pendingFocusRef.current = true; + onCellFocusedDateChange(getCellDate(currentDate, colNum)); + break; + case 'Enter': + case ' ': + e.preventDefault(); + if (!disabled) { + onSelect(currentDate); + } + break; + } + }} > {cellRender ? cellRender(currentDate, { @@ -176,7 +259,7 @@ export default function PanelBody(props: PanelBod } rows.push( - + {rowNode} , ); @@ -185,9 +268,14 @@ export default function PanelBody(props: PanelBod // ============================== Render ============================== return (
    - +
    {headerCells && ( - + {headerCells} )} diff --git a/src/PickerPanel/PanelHeader.tsx b/src/PickerPanel/PanelHeader.tsx index 407489a59..41e6facec 100644 --- a/src/PickerPanel/PanelHeader.tsx +++ b/src/PickerPanel/PanelHeader.tsx @@ -7,6 +7,13 @@ const HIDDEN_STYLE: React.CSSProperties = { visibility: 'hidden', }; +export interface PanelHeaderLabels { + superPrev?: string; + prev?: string; + next?: string; + superNext?: string; +} + export interface HeaderProps { offset?: (distance: number, date: DateType) => DateType; superOffset?: (distance: number, date: DateType) => DateType; @@ -16,6 +23,8 @@ export interface HeaderProps { getStart?: (date: DateType) => DateType; getEnd?: (date: DateType) => DateType; + labels?: PanelHeaderLabels; + children?: React.ReactNode; } @@ -28,6 +37,8 @@ function PanelHeader(props: HeaderProps) { getStart, getEnd, + labels, + children, } = props; @@ -124,9 +135,8 @@ function PanelHeader(props: HeaderProps) { {superOffset && ( ); @@ -65,6 +72,7 @@ export default function QuarterPanel( // Limitation getStart={(date) => generateConfig.setMonth(date, 0)} getEnd={(date) => generateConfig.setMonth(date, 11)} + labels={{ superPrev: locale.previousYear, superNext: locale.nextYear }} > {yearNode} @@ -76,10 +84,12 @@ export default function QuarterPanel( colNum={4} rowNum={1} baseDate={baseDate} + tableLabel={yearLabel} // Body getCellDate={getCellDate} getCellText={getCellText} getCellClassName={getCellClassName} + getCellAttributes={getCellAttributes} /> diff --git a/src/PickerPanel/TimePanel/TimePanelBody/TimeColumn.tsx b/src/PickerPanel/TimePanel/TimePanelBody/TimeColumn.tsx index 4e6e53739..50516ca0f 100644 --- a/src/PickerPanel/TimePanel/TimePanelBody/TimeColumn.tsx +++ b/src/PickerPanel/TimePanel/TimePanelBody/TimeColumn.tsx @@ -3,20 +3,23 @@ import useLayoutEffect from '@rc-component/util/lib/hooks/useLayoutEffect'; import * as React from 'react'; import { usePanelContext } from '../../context'; import useScrollTo from './useScrollTo'; +import type { Locale } from '../../../interface'; const SCROLL_DELAY = 300; export type Unit = { - label: React.ReactText; + label: string | number; value: ValueType; disabled?: boolean; }; +type TimeUnitType = 'hour' | 'minute' | 'second' | 'millisecond' | 'meridiem'; + export interface TimeUnitColumnProps { units: Unit[]; value: number | string; optionalValue?: number | string; - type: 'hour' | 'minute' | 'second' | 'millisecond' | 'meridiem'; + type: TimeUnitType; onChange: (value: number | string) => void; onHover: (value: number | string) => void; onDblClick?: VoidFunction; @@ -28,6 +31,40 @@ function flattenUnits(units: Unit[]) { return units.map(({ value, label, disabled }) => [value, label, disabled].join(',')).join(';'); } +function getListLabel(type: TimeUnitType, locale: Locale) { + switch (type) { + case 'hour': + return locale.hourSelect; + case 'minute': + return locale.minuteSelect; + case 'second': + return locale.secondSelect; + case 'millisecond': + return locale.millisecondSelect; + case 'meridiem': + return locale.meridiemSelect; + default: + return ''; + } +} + +function getListItemLabel(type: TimeUnitType, value: string | number, locale: Locale) { + switch (type) { + case 'hour': + return `${value} ${locale.hours}`; + case 'minute': + return `${value} ${locale.minutes}`; + case 'second': + return `${value} ${locale.seconds}`; + case 'millisecond': + return `${value} ${locale.milliseconds}`; + case 'meridiem': + return value.toString(); + default: + return ''; + } +} + export default function TimeColumn(props: TimeUnitColumnProps) { const { units, value, optionalValue, type, onChange, onHover, onDblClick, changeOnScroll } = props; @@ -92,20 +129,92 @@ export default function TimeColumn(props: TimeUnitColum } }; - // ========================= Render ========================= const columnPrefixCls = `${panelPrefixCls}-column`; + // ========================= Focus ========================= + const activeValue = value ?? optionalValue; + + // Tracks keyboard-navigation cursor separately from the committed value. + const [focusedValue, setFocusedValue] = React.useState(null); + + // Reset cursor when the committed value changes (e.g. click or external update). + React.useEffect(() => { + setFocusedValue(null); + }, [value]); + + const tabFocusValue = focusedValue ?? activeValue; + + // The active option registers its node via a callback ref; after keyboard + // navigation we move DOM focus to it without querying the DOM. + const focusedLiNodeRef = React.useRef(null); + const pendingFocusRef = React.useRef(false); + + const registerFocusedLi = React.useCallback((node: HTMLElement | null) => { + focusedLiNodeRef.current = node; + }, []); + + React.useEffect(() => { + if (pendingFocusRef.current) { + pendingFocusRef.current = false; + focusedLiNodeRef.current?.focus(); + } + }, [focusedValue]); + + // ========================= Keyboard ========================= + const onCellKeyDown = (e: React.KeyboardEvent) => { + const enabledUnits = units.filter((u) => !u.disabled); + const currentIdx = enabledUnits.findIndex((u) => u.value === tabFocusValue); + + if (e.key === 'ArrowDown') { + e.preventDefault(); + pendingFocusRef.current = true; + const next = currentIdx < enabledUnits.length - 1 ? currentIdx + 1 : 0; + setFocusedValue(enabledUnits[next]?.value); + } else if (e.key === 'ArrowUp') { + e.preventDefault(); + pendingFocusRef.current = true; + const prev = currentIdx > 0 ? currentIdx - 1 : enabledUnits.length - 1; + setFocusedValue(enabledUnits[prev]?.value); + } else if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + const target = enabledUnits.find((u) => u.value === tabFocusValue); + if (target) { + onChange(target.value); + } + } + }; + + // ========================= Render ========================= return ( -
      +
        { + if (!ulRef.current?.contains(e.relatedTarget as Node)) { + setFocusedValue(null); + } + }} + > {units.map(({ label, value: unitValue, disabled }) => { const inner =
        {label}
        ; + const isSelected = value === unitValue; return (
      • { @@ -124,6 +233,7 @@ export default function TimeColumn(props: TimeUnitColum onMouseLeave={() => { onHover(null); }} + onKeyDown={onCellKeyDown} data-value={unitValue} > {cellRender diff --git a/src/PickerPanel/TimePanel/TimePanelBody/index.tsx b/src/PickerPanel/TimePanel/TimePanelBody/index.tsx index 49c5b4f05..2d2950bce 100644 --- a/src/PickerPanel/TimePanel/TimePanelBody/index.tsx +++ b/src/PickerPanel/TimePanel/TimePanelBody/index.tsx @@ -271,7 +271,11 @@ export default function TimePanelBody( }; return ( -
        +
        {showHour && ( ( const endYearDate = getEndYear(pickerValue); const baseDate = generateConfig.addYear(startYearDate, -1); + const startYearLabel = formatValue(startYearDate, { + locale, + format: locale.yearFormat, + generateConfig, + }); + const endYearLabel = formatValue(endYearDate, { + locale, + format: locale.yearFormat, + generateConfig, + }); + const decadeLabel = `${startYearLabel}-${endYearLabel}`; // ========================= Cells ========================== const getCellDate = (date: DateType, offset: number) => { @@ -58,6 +69,13 @@ export default function YearPanel( }; }; + const getCellAttributes = (date: DateType): React.TdHTMLAttributes => { + if (isSameYear(generateConfig, date, generateConfig.getNow())) { + return { 'aria-current': 'date' }; + } + return {}; + }; + // ======================== Disabled ======================== const mergedDisabledDate: DisabledDate = disabledDate ? (currentDate, disabledInfo) => { @@ -81,20 +99,9 @@ export default function YearPanel( onClick={() => { onModeChange('decade'); }} - tabIndex={-1} className={`${prefixCls}-decade-btn`} > - {formatValue(startYearDate, { - locale, - format: locale.yearFormat, - generateConfig, - })} - - - {formatValue(endYearDate, { - locale, - format: locale.yearFormat, - generateConfig, - })} + {decadeLabel} ); @@ -109,6 +116,7 @@ export default function YearPanel( // Limitation getStart={getStartYear} getEnd={getEndYear} + labels={{ superPrev: locale.previousDecade, superNext: locale.nextDecade }} > {yearNode} @@ -121,10 +129,12 @@ export default function YearPanel( colNum={3} rowNum={4} baseDate={baseDate} + tableLabel={decadeLabel} // Body getCellDate={getCellDate} getCellText={getCellText} getCellClassName={getCellClassName} + getCellAttributes={getCellAttributes} />
        diff --git a/src/PickerPanel/context.ts b/src/PickerPanel/context.ts index fc2a40d1d..cc92745d1 100644 --- a/src/PickerPanel/context.ts +++ b/src/PickerPanel/context.ts @@ -9,31 +9,30 @@ export interface SharedPanelContextProps { export const SharedPanelContext = React.createContext(null!); -export interface PanelContextProps - extends Pick< - SharedPanelProps, - | 'prefixCls' - | 'cellRender' - | 'generateConfig' - | 'locale' - | 'onSelect' - | 'hoverValue' - | 'hoverRangeValue' - | 'onHover' - | 'values' - | 'pickerValue' - - // Limitation - | 'disabledDate' - | 'minDate' - | 'maxDate' - - // Icon - | 'prevIcon' - | 'nextIcon' - | 'superPrevIcon' - | 'superNextIcon' - > { +export interface PanelContextProps extends Pick< + SharedPanelProps, + | 'prefixCls' + | 'cellRender' + | 'generateConfig' + | 'locale' + | 'onSelect' + | 'hoverValue' + | 'hoverRangeValue' + | 'onHover' + | 'values' + | 'pickerValue' + + // Limitation + | 'disabledDate' + | 'minDate' + | 'maxDate' + + // Icon + | 'prevIcon' + | 'nextIcon' + | 'superPrevIcon' + | 'superNextIcon' +> { /** Tell current panel type */ panelType: PanelMode; @@ -131,6 +130,20 @@ export interface PickerHackContextProps { */ export const PickerHackContext = React.createContext({}); +// ============================== Focus ============================== +export interface PanelFocusContextProps { + focusedDate: DateType | null; + onCellFocusedDateChange: (date: DateType) => void; + /** Increments whenever the panel mode changes, telling PanelBody to focus its active cell */ + focusTrigger: number; +} + +export const PanelFocusContext = React.createContext({ + focusedDate: null, + onCellFocusedDateChange: () => {}, + focusTrigger: 0, +}); + if (process.env.NODE_ENV !== 'production') { PickerHackContext.displayName = 'PickerHackContext'; } diff --git a/src/PickerPanel/index.tsx b/src/PickerPanel/index.tsx index 1e44948ed..b4d909783 100644 --- a/src/PickerPanel/index.tsx +++ b/src/PickerPanel/index.tsx @@ -20,7 +20,7 @@ import PickerContext from '../PickerInput/context'; import useCellRender from '../PickerInput/hooks/useCellRender'; import { isSame } from '../utils/dateUtil'; import { pickProps, toArray } from '../utils/miscUtil'; -import { PickerHackContext, SharedPanelContext } from './context'; +import { PanelFocusContext, PickerHackContext, SharedPanelContext } from './context'; import DatePanel from './DatePanel'; import DateTimePanel from './DateTimePanel'; import DecadePanel from './DecadePanel'; @@ -46,7 +46,8 @@ export interface PickerPanelRef { } export interface BasePickerPanelProps - extends Pick< + extends + Pick< SharedPanelProps, // MISC | 'locale' @@ -119,8 +120,9 @@ export interface BasePickerPanelProps hideHeader?: boolean; } -export interface SinglePickerPanelProps - extends BasePickerPanelProps { +export interface SinglePickerPanelProps< + DateType extends object = any, +> extends BasePickerPanelProps { multiple?: false; defaultValue?: DateType | null; @@ -190,11 +192,18 @@ function PickerPanel( } = props; // ======================== Context ======================== + const pickerContext = React.useContext(PickerContext); const { prefixCls: contextPrefixCls, classNames: pickerClassNames, styles: pickerStyles, - } = React.useContext(PickerContext) || {}; + } = pickerContext || {}; + + // When rendered inside a picker popup, the surrounding picker owns + // mode-change focus (see `usePopupFocus`), which correctly distinguishes a + // drill-down from a field switch. Only the standalone `` drives + // focus on mode change itself. + const standalone = !pickerContext; // ======================== prefixCls ======================== const mergedPrefixCls = contextPrefixCls || prefixCls || 'rc-picker'; @@ -288,6 +297,50 @@ function PickerPanel( } }, [mergedValue[0]]); + // ========================= Focus ========================== + const [focusedCellDate, setFocusedCellDate] = React.useState( + () => mergedValue[0] || mergedPickerValue || now, + ); + + React.useEffect(() => { + if (mergedValue[0]) { + setFocusedCellDate(mergedValue[0]); + } + }, [mergedValue[0]]); + + const onCellFocusedDateChange = useEvent((date: DateType) => { + setFocusedCellDate(date); + setInternalPickerValue(date); + onPickerValueChange?.(date); + }); + + // Bump this counter to tell PanelBody to programmatically focus its active cell. + const [focusTrigger, setFocusTrigger] = React.useState(0); + + const prevModeRef = React.useRef(null); + React.useLayoutEffect(() => { + if (prevModeRef.current !== null && prevModeRef.current !== mergedMode) { + // Sync the focused cell to the new panel's coordinate system so the + // correct cell gets tabIndex=0. + setFocusedCellDate(mergedPickerValue); + + // Grab DOM focus only when standalone. Inside a picker popup the + // surrounding picker owns focus (see `usePopupFocus`), which correctly + // tells a drill-down apart from a field switch; bumping here would steal + // focus into the panel when the user merely switches fields. + if (standalone) { + setFocusTrigger((t) => t + 1); + } + } + prevModeRef.current = mergedMode; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [mergedMode]); + + const panelFocusContext = React.useMemo( + () => ({ focusedDate: focusedCellDate, onCellFocusedDateChange, focusTrigger }), + [focusedCellDate, onCellFocusedDateChange, focusTrigger], + ); + // Both trigger when manually pickerValue or mode change const triggerPanelChange = (viewDate?: DateType, nextMode?: PanelMode) => { onPanelChange?.(viewDate || pickerValue, nextMode || mergedMode); @@ -421,36 +474,39 @@ function PickerPanel( return ( -
        - { - setPickerValue(nextPickerValue, true); - }} - value={mergedValue[0]} - onSelect={onPanelValueSelect} - values={mergedValue} - // Render - cellRender={onInternalCellRender} - // Hover - hoverRangeValue={hoverRangeDate} - hoverValue={hoverValue} - /> -
        + +
        + { + setPickerValue(nextPickerValue, true); + setFocusedCellDate(nextPickerValue); + }} + value={mergedValue[0]} + onSelect={onPanelValueSelect} + values={mergedValue} + // Render + cellRender={onInternalCellRender} + // Hover + hoverRangeValue={hoverRangeDate} + hoverValue={hoverValue} + /> +
        +
        ); diff --git a/src/interface.tsx b/src/interface.tsx index 964f80c2b..c1fa33ea7 100644 --- a/src/interface.tsx +++ b/src/interface.tsx @@ -66,11 +66,20 @@ export type Locale = { week: string; month: string; year: string; + hours: string; + minutes: string; + seconds: string; + milliseconds: string; previousMonth: string; nextMonth: string; monthSelect: string; yearSelect: string; decadeSelect: string; + hourSelect: string; + minuteSelect: string; + secondSelect: string; + millisecondSelect: string; + meridiemSelect: string; previousYear: string; nextYear: string; @@ -275,7 +284,8 @@ export interface SharedPanelProps { export type Components = Partial< Record>> & { - button?: React.ComponentType | string; + nowButton?: React.ComponentType | string; + okButton?: React.ComponentType | string; input?: React.ComponentType | string; } >; @@ -325,7 +335,8 @@ export type PanelSemanticName = | 'container'; export interface SharedPickerProps - extends SharedHTMLAttrs, + extends + SharedHTMLAttrs, Pick< SharedPanelProps, // Icon diff --git a/src/locale/am_ET.ts b/src/locale/am_ET.ts index de1e961c8..436cc49b2 100644 --- a/src/locale/am_ET.ts +++ b/src/locale/am_ET.ts @@ -10,12 +10,21 @@ const locale: Locale = { week: 'ሳምንት', month: 'ወር', year: 'ዓመት', + hours: 'ሰዓቶች', + minutes: 'ደቂቃዎች', + seconds: 'ሰከንዶች', + milliseconds: 'ሚሊሰከንዶች', timeSelect: 'ሰዓት ምረጥ', dateSelect: 'ቀን ምረጥ', weekSelect: 'ሳምንት ምረጥ', monthSelect: 'ወር ምረጥ', yearSelect: 'አመት ምረጥ', decadeSelect: 'አስርት አመታት ምረጥ', + hourSelect: 'ሰዓት ይምረጡ', + minuteSelect: 'ደቂቃ ይምረጡ', + secondSelect: 'ሰከንድ ይምረጡ', + millisecondSelect: 'ሚሊሰከንድ ይምረጡ', + meridiemSelect: 'ሜሪዲየም ይምረጡ', yearFormat: 'YYYY', dayFormat: 'D', monthBeforeYear: true, diff --git a/src/locale/ar_EG.ts b/src/locale/ar_EG.ts index 8c35bfdb8..006905a83 100644 --- a/src/locale/ar_EG.ts +++ b/src/locale/ar_EG.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'الأسبوع', month: 'الشهر', year: 'السنة', + hours: 'الساعات', + minutes: 'الدقائق', + seconds: 'الثواني', + milliseconds: 'المللي ثانية', timeSelect: 'اختيار الوقت', dateSelect: 'اختيار التاريخ', monthSelect: 'اختيار الشهر', yearSelect: 'اختيار السنة', decadeSelect: 'اختيار العقد', + hourSelect: 'اختر ساعة', + minuteSelect: 'اختر دقيقة', + secondSelect: 'اختر ثانية', + millisecondSelect: 'اختر جزء من الثانية', + meridiemSelect: 'اختر صباحاً/مساءً', previousMonth: 'الشهر السابق (PageUp)', nextMonth: 'الشهر التالى(PageDown)', previousYear: 'العام السابق (Control + left)', diff --git a/src/locale/az_AZ.ts b/src/locale/az_AZ.ts index 2c44d36b8..f5234b911 100644 --- a/src/locale/az_AZ.ts +++ b/src/locale/az_AZ.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'Həftə', month: 'Ay', year: 'İl', + hours: 'Saat', + minutes: 'Dəqiqə', + seconds: 'Saniyə', + milliseconds: 'Millisaniyə', timeSelect: 'vaxtı seç', dateSelect: 'tarixi seç', weekSelect: 'Həftə seç', monthSelect: 'Ay seç', yearSelect: 'il seç', decadeSelect: 'Onillik seçin', + hourSelect: 'Saat seçin', + minuteSelect: 'Dəqiqə seçin', + secondSelect: 'Saniyə seçin', + millisecondSelect: 'Millisaniyə seçin', + meridiemSelect: 'Meridyemi seçin', previousMonth: 'Əvvəlki ay (PageUp)', nextMonth: 'Növbəti ay (PageDown)', previousYear: 'Sonuncu il (Control + left)', diff --git a/src/locale/bg_BG.ts b/src/locale/bg_BG.ts index 9b0cc7de6..17df463db 100644 --- a/src/locale/bg_BG.ts +++ b/src/locale/bg_BG.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Седмица', month: 'Месец', year: 'Година', + hours: 'Часове', + minutes: 'Минути', + seconds: 'Секунди', + milliseconds: 'Милисекунди', timeSelect: 'Избор на час', dateSelect: 'Избор на дата', monthSelect: 'Избор на месец', yearSelect: 'Избор на година', decadeSelect: 'Десетилетие', + hourSelect: 'Изберете час', + minuteSelect: 'Изберете минута', + secondSelect: 'Изберете секунда', + millisecondSelect: 'Изберете милисекунда', + meridiemSelect: 'Изберете меридием', previousMonth: 'Предишен месец (PageUp)', nextMonth: 'Следващ месец (PageDown)', previousYear: 'Последна година (Control + left)', diff --git a/src/locale/bn_BD.ts b/src/locale/bn_BD.ts index 3980ee921..7efc8d0ef 100644 --- a/src/locale/bn_BD.ts +++ b/src/locale/bn_BD.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'সপ্তাহ', month: 'মাস', year: 'বছর', + hours: 'ঘণ্টা', + minutes: 'মিনিট', + seconds: 'সেকেন্ড', + milliseconds: 'মিলিসেকেন্ড', timeSelect: 'সময় নির্বাচন', dateSelect: 'তারিখ নির্বাচন', weekSelect: 'সপ্তাহ পছন্দ করুন', monthSelect: 'মাস পছন্দ করুন', yearSelect: 'বছর পছন্দ করুন', decadeSelect: 'একটি দশক পছন্দ করুন', + hourSelect: 'একটি ঘণ্টা নির্বাচন করুন', + minuteSelect: 'একটি মিনিট নির্বাচন করুন', + secondSelect: 'একটি সেকেন্ড নির্বাচন করুন', + millisecondSelect: 'একটি মিলিসেকেন্ড নির্বাচন করুন', + meridiemSelect: 'মেরিডিয়েম নির্বাচন করুন', previousMonth: 'গত মাস (PageUp)', nextMonth: 'আগামী মাস (PageDown)', previousYear: 'গত বছর (Control + left)', diff --git a/src/locale/by_BY.ts b/src/locale/by_BY.ts index 079a931ff..7fb8f8450 100644 --- a/src/locale/by_BY.ts +++ b/src/locale/by_BY.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'Тыдзень', month: 'Месяц', year: 'Год', + hours: 'Гадзіны', + minutes: 'Хвіліны', + seconds: 'Секунды', + milliseconds: 'Мілісекунды', timeSelect: 'Выбраць час', dateSelect: 'Выбраць дату', weekSelect: 'Выбраць тыдзень', monthSelect: 'Выбраць месяц', yearSelect: 'Выбраць год', decadeSelect: 'Выбраць дзесяцігоддзе', + hourSelect: 'Выберыце гадзіну', + minuteSelect: 'Выберыце хвіліну', + secondSelect: 'Выберыце секунду', + millisecondSelect: 'Выберыце мілісекунду', + meridiemSelect: 'Выберыце мерыдыем', previousMonth: 'Папярэдні месяц (PageUp)', nextMonth: 'Наступны месяц (PageDown)', diff --git a/src/locale/ca_ES.ts b/src/locale/ca_ES.ts index b93e58ef5..2164785be 100644 --- a/src/locale/ca_ES.ts +++ b/src/locale/ca_ES.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Setmana', month: 'Mes', year: 'Any', + hours: 'Hores', + minutes: 'Minuts', + seconds: 'Segons', + milliseconds: 'Mil·lisegons', timeSelect: 'Seleccionar hora', dateSelect: 'Seleccionar data', monthSelect: 'Escollir un mes', yearSelect: 'Escollir un any', decadeSelect: 'Escollir una dècada', + hourSelect: 'Seleccioneu una hora', + minuteSelect: 'Seleccioneu un minut', + secondSelect: 'Seleccioneu un segon', + millisecondSelect: 'Seleccioneu un mil·lisegon', + meridiemSelect: 'Seleccioneu el meridiem', previousMonth: 'Mes anterior (PageUp)', nextMonth: 'Mes següent (PageDown)', previousYear: 'Any anterior (Control + left)', diff --git a/src/locale/cs_CZ.ts b/src/locale/cs_CZ.ts index 77241e393..dfec7cff2 100644 --- a/src/locale/cs_CZ.ts +++ b/src/locale/cs_CZ.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Týden', month: 'Měsíc', year: 'Rok', + hours: 'Hodiny', + minutes: 'Minuty', + seconds: 'Sekundy', + milliseconds: 'Milisekundy', timeSelect: 'Vybrat čas', dateSelect: 'Vybrat datum', monthSelect: 'Vyberte měsíc', yearSelect: 'Vyberte rok', decadeSelect: 'Vyberte dekádu', + hourSelect: 'Vyberte hodinu', + minuteSelect: 'Vyberte minutu', + secondSelect: 'Vyberte sekundu', + millisecondSelect: 'Vyberte milisekundu', + meridiemSelect: 'Vyberte meridiem', previousMonth: 'Předchozí měsíc (PageUp)', nextMonth: 'Následující (PageDown)', diff --git a/src/locale/da_DK.ts b/src/locale/da_DK.ts index 779804726..ce3902472 100644 --- a/src/locale/da_DK.ts +++ b/src/locale/da_DK.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Uge', month: 'Måned', year: 'År', + hours: 'Timer', + minutes: 'Minutter', + seconds: 'Sekunder', + milliseconds: 'Millisekunder', timeSelect: 'Vælg tidspunkt', dateSelect: 'Vælg dato', monthSelect: 'Vælg måned', yearSelect: 'Vælg år', decadeSelect: 'Vælg årti', + hourSelect: 'Vælg en time', + minuteSelect: 'Vælg et minut', + secondSelect: 'Vælg et sekund', + millisecondSelect: 'Vælg et millisekund', + meridiemSelect: 'Vælg meridiem', previousMonth: 'Forrige måned (Page Up)', nextMonth: 'Næste måned (Page Down)', diff --git a/src/locale/de_DE.ts b/src/locale/de_DE.ts index 5369404ea..b63d62c41 100644 --- a/src/locale/de_DE.ts +++ b/src/locale/de_DE.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Woche', month: 'Monat', year: 'Jahr', + hours: 'Stunden', + minutes: 'Minuten', + seconds: 'Sekunden', + milliseconds: 'Millisekunden', timeSelect: 'Zeit wählen', dateSelect: 'Datum wählen', monthSelect: 'Wähle einen Monat', yearSelect: 'Wähle ein Jahr', decadeSelect: 'Wähle ein Jahrzehnt', + hourSelect: 'Stunde wählen', + minuteSelect: 'Minute wählen', + secondSelect: 'Sekunde wählen', + millisecondSelect: 'Millisekunde wählen', + meridiemSelect: 'Tageshälfte wählen', previousMonth: 'Vorheriger Monat (PageUp)', nextMonth: 'Nächster Monat (PageDown)', diff --git a/src/locale/el_GR.ts b/src/locale/el_GR.ts index 9cdd6ee55..ec14f4915 100644 --- a/src/locale/el_GR.ts +++ b/src/locale/el_GR.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Εβδομάδα', month: 'Μήνας', year: 'Έτος', + hours: 'Ώρες', + minutes: 'Λεπτά', + seconds: 'Δευτερόλεπτα', + milliseconds: 'Χιλιοστά δευτερολέπτου', timeSelect: 'Επιλογή ώρας', dateSelect: 'Επιλογή ημερομηνίας', monthSelect: 'Επιλογή μήνα', yearSelect: 'Επιλογή έτους', decadeSelect: 'Επιλογή δεκαετίας', + hourSelect: 'Επιλέξτε ώρα', + minuteSelect: 'Επιλέξτε λεπτό', + secondSelect: 'Επιλέξτε δευτερόλεπτο', + millisecondSelect: 'Επιλέξτε χιλιοστό δευτερολέπτου', + meridiemSelect: 'Επιλέξτε ΠΜ/ΜΜ', previousMonth: 'Προηγούμενος μήνας (PageUp)', nextMonth: 'Επόμενος μήνας (PageDown)', diff --git a/src/locale/en_GB.ts b/src/locale/en_GB.ts index 65fe143c1..3b8a80d22 100644 --- a/src/locale/en_GB.ts +++ b/src/locale/en_GB.ts @@ -12,19 +12,28 @@ const locale: Locale = { week: 'Week', month: 'Month', year: 'Year', + hours: 'Hours', + minutes: 'Minutes', + seconds: 'Seconds', + milliseconds: 'Milliseconds', timeSelect: 'Select time', dateSelect: 'Select date', monthSelect: 'Choose a month', yearSelect: 'Choose a year', decadeSelect: 'Choose a decade', + hourSelect: 'Select an hour', + minuteSelect: 'Select a minute', + secondSelect: 'Select a second', + millisecondSelect: 'Select a millisecond', + meridiemSelect: 'Select a meridiem', - previousMonth: 'Previous month (PageUp)', - nextMonth: 'Next month (PageDown)', - previousYear: 'Last year (Control + left)', - nextYear: 'Next year (Control + right)', - previousDecade: 'Last decade', + previousMonth: 'Previous month', + nextMonth: 'Next month', + previousYear: 'Previous year', + nextYear: 'Next year', + previousDecade: 'Previous decade', nextDecade: 'Next decade', - previousCentury: 'Last century', + previousCentury: 'Previous century', nextCentury: 'Next century', }; diff --git a/src/locale/en_US.ts b/src/locale/en_US.ts index 47529e002..98dc25199 100644 --- a/src/locale/en_US.ts +++ b/src/locale/en_US.ts @@ -12,20 +12,29 @@ const locale: Locale = { week: 'Week', month: 'Month', year: 'Year', + hours: 'Hours', + minutes: 'Minutes', + seconds: 'Seconds', + milliseconds: 'Milliseconds', timeSelect: 'select time', dateSelect: 'select date', weekSelect: 'Choose a week', monthSelect: 'Choose a month', yearSelect: 'Choose a year', decadeSelect: 'Choose a decade', + hourSelect: 'Select an hour', + minuteSelect: 'Select a minute', + secondSelect: 'Select a second', + millisecondSelect: 'Select a millisecond', + meridiemSelect: 'Select a meridiem', - previousMonth: 'Previous month (PageUp)', - nextMonth: 'Next month (PageDown)', - previousYear: 'Last year (Control + left)', - nextYear: 'Next year (Control + right)', - previousDecade: 'Last decade', + previousMonth: 'Previous month', + nextMonth: 'Next month', + previousYear: 'Previous year', + nextYear: 'Next year', + previousDecade: 'Previous decade', nextDecade: 'Next decade', - previousCentury: 'Last century', + previousCentury: 'Previous century', nextCentury: 'Next century', }; diff --git a/src/locale/es_ES.ts b/src/locale/es_ES.ts index 2ec32f120..40282a90b 100644 --- a/src/locale/es_ES.ts +++ b/src/locale/es_ES.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Semana', month: 'Mes', year: 'Año', + hours: 'Horas', + minutes: 'Minutos', + seconds: 'Segundos', + milliseconds: 'Milisegundos', timeSelect: 'Seleccionar hora', dateSelect: 'Seleccionar fecha', monthSelect: 'Elegir un mes', yearSelect: 'Elegir un año', decadeSelect: 'Elegir una década', + hourSelect: 'Seleccionar una hora', + minuteSelect: 'Seleccionar un minuto', + secondSelect: 'Seleccionar un segundo', + millisecondSelect: 'Seleccionar un milisegundo', + meridiemSelect: 'Seleccionar meridiem', previousMonth: 'Mes anterior (PageUp)', nextMonth: 'Mes siguiente (PageDown)', diff --git a/src/locale/es_MX.ts b/src/locale/es_MX.ts index eaa7fe49d..2533fae32 100644 --- a/src/locale/es_MX.ts +++ b/src/locale/es_MX.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'Semana', month: 'Mes', year: 'Año', + hours: 'Horas', + minutes: 'Minutos', + seconds: 'Segundos', + milliseconds: 'Milisegundos', timeSelect: 'elegir hora', dateSelect: 'elegir fecha', weekSelect: 'elegir semana', monthSelect: 'Seleccionar mes', yearSelect: 'Seleccionar año', decadeSelect: 'Seleccionar década', + hourSelect: 'Seleccionar una hora', + minuteSelect: 'Seleccionar un minuto', + secondSelect: 'Seleccionar un segundo', + millisecondSelect: 'Seleccionar un milisegundo', + meridiemSelect: 'Seleccionar meridiem', previousMonth: 'Mes anterior (PageUp)', nextMonth: 'Mes siguiente (PageDown)', diff --git a/src/locale/et_EE.ts b/src/locale/et_EE.ts index 04e37e1c5..bfdd87816 100644 --- a/src/locale/et_EE.ts +++ b/src/locale/et_EE.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Nädal', month: 'Kuu', year: 'Aasta', + hours: 'Tunnid', + minutes: 'Minutid', + seconds: 'Sekundid', + milliseconds: 'Millisekundid', timeSelect: 'Vali aeg', dateSelect: 'Vali kuupäev', monthSelect: 'Vali kuu', yearSelect: 'Vali aasta', decadeSelect: 'Vali dekaad', + hourSelect: 'Vali tund', + minuteSelect: 'Vali minut', + secondSelect: 'Vali sekund', + millisecondSelect: 'Vali millisekund', + meridiemSelect: 'Vali meridieem', previousMonth: 'Eelmine kuu (PageUp)', nextMonth: 'Järgmine kuu (PageDown)', diff --git a/src/locale/eu_ES.ts b/src/locale/eu_ES.ts index c8f028be1..ea34af43a 100644 --- a/src/locale/eu_ES.ts +++ b/src/locale/eu_ES.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'Asteko', month: 'Hilabete', year: 'Urte', + hours: 'Orduak', + minutes: 'Minutuak', + seconds: 'Segundoak', + milliseconds: 'Milisegundoak', timeSelect: 'Ordua aukeratu', dateSelect: 'Eguna aukeratu', weekSelect: 'Astea aukeratu', monthSelect: 'Hilabetea aukeratu', yearSelect: 'Urtea aukeratu', decadeSelect: 'Hamarkada aukeratu', + hourSelect: 'Ordu bat hautatu', + minuteSelect: 'Minutu bat hautatu', + secondSelect: 'Segundo bat hautatu', + millisecondSelect: 'Milisegundo bat hautatu', + meridiemSelect: 'Meridiana hautatu', monthBeforeYear: false, previousMonth: 'Aurreko hilabetea (RePag)', nextMonth: 'Urrengo hilabetea (AvPag)', diff --git a/src/locale/fa_IR.ts b/src/locale/fa_IR.ts index 7c8e1f5ee..63d89ae19 100644 --- a/src/locale/fa_IR.ts +++ b/src/locale/fa_IR.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'هفته', month: 'ماه', year: 'سال', + hours: 'ساعت', + minutes: 'دقیقه', + seconds: 'ثانیه', + milliseconds: 'میلی‌ثانیه', timeSelect: 'انتخاب زمان', dateSelect: 'انتخاب تاریخ', monthSelect: 'یک ماه را انتخاب کنید', yearSelect: 'یک سال را انتخاب کنید', decadeSelect: 'یک دهه را انتخاب کنید', + hourSelect: 'انتخاب ساعت', + minuteSelect: 'انتخاب دقیقه', + secondSelect: 'انتخاب ثانیه', + millisecondSelect: 'انتخاب میلی‌ثانیه', + meridiemSelect: 'انتخاب قبل/بعد از ظهر', previousMonth: 'ماه قبل (PageUp)', nextMonth: 'ماه بعد (PageDown)', diff --git a/src/locale/fi_FI.ts b/src/locale/fi_FI.ts index 1f5976891..75f8d8851 100644 --- a/src/locale/fi_FI.ts +++ b/src/locale/fi_FI.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Viikko', month: 'Kuukausi', year: 'Vuosi', + hours: 'Tunnit', + minutes: 'Minuutit', + seconds: 'Sekunnit', + milliseconds: 'Millisekunnit', timeSelect: 'Valise aika', dateSelect: 'Valitse päivä', monthSelect: 'Valitse kuukausi', yearSelect: 'Valitse vuosi', decadeSelect: 'Valitse vuosikymmen', + hourSelect: 'Valitse tunti', + minuteSelect: 'Valitse minuutti', + secondSelect: 'Valitse sekunti', + millisecondSelect: 'Valitse millisekunti', + meridiemSelect: 'Valitse meridieemi', previousMonth: 'Edellinen kuukausi (PageUp)', nextMonth: 'Seuraava kuukausi (PageDown)', diff --git a/src/locale/fr_BE.ts b/src/locale/fr_BE.ts index 3476f1bb8..3daa52891 100644 --- a/src/locale/fr_BE.ts +++ b/src/locale/fr_BE.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Semaine', month: 'Mois', year: 'Année', + hours: 'Heures', + minutes: 'Minutes', + seconds: 'Secondes', + milliseconds: 'Millisecondes', timeSelect: "Sélectionner l'heure", dateSelect: "Sélectionner l'heure", monthSelect: 'Choisissez un mois', yearSelect: 'Choisissez une année', decadeSelect: 'Choisissez une décennie', + hourSelect: 'Sélectionner une heure', + minuteSelect: 'Sélectionner une minute', + secondSelect: 'Sélectionner une seconde', + millisecondSelect: 'Sélectionner une milliseconde', + meridiemSelect: 'Sélectionner un méridien', previousMonth: 'Mois précédent (PageUp)', nextMonth: 'Mois suivant (PageDown)', diff --git a/src/locale/fr_CA.ts b/src/locale/fr_CA.ts index 0ad8240f7..a47b3d549 100644 --- a/src/locale/fr_CA.ts +++ b/src/locale/fr_CA.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Semaine', month: 'Mois', year: 'Année', + hours: 'Heures', + minutes: 'Minutes', + seconds: 'Secondes', + milliseconds: 'Millisecondes', timeSelect: "Sélectionner l'heure", dateSelect: 'Sélectionner la date', monthSelect: 'Choisissez un mois', yearSelect: 'Choisissez une année', decadeSelect: 'Choisissez une décennie', + hourSelect: 'Sélectionner une heure', + minuteSelect: 'Sélectionner une minute', + secondSelect: 'Sélectionner une seconde', + millisecondSelect: 'Sélectionner une milliseconde', + meridiemSelect: 'Sélectionner un méridien', dayFormat: 'DD', diff --git a/src/locale/fr_FR.ts b/src/locale/fr_FR.ts index 32c8b1fd1..12227b643 100644 --- a/src/locale/fr_FR.ts +++ b/src/locale/fr_FR.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Semaine', month: 'Mois', year: 'Année', + hours: 'Heures', + minutes: 'Minutes', + seconds: 'Secondes', + milliseconds: 'Millisecondes', timeSelect: "Sélectionner l'heure", dateSelect: 'Sélectionner la date', monthSelect: 'Choisissez un mois', yearSelect: 'Choisissez une année', decadeSelect: 'Choisissez une décennie', + hourSelect: 'Sélectionner une heure', + minuteSelect: 'Sélectionner une minute', + secondSelect: 'Sélectionner une seconde', + millisecondSelect: 'Sélectionner une milliseconde', + meridiemSelect: 'Sélectionner un méridien', dayFormat: 'DD', diff --git a/src/locale/ga_IE.ts b/src/locale/ga_IE.ts index 94e0dd615..d29a5ea4a 100644 --- a/src/locale/ga_IE.ts +++ b/src/locale/ga_IE.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'seachtain', month: 'mhí', year: 'bhliain', + hours: 'Uaireanta', + minutes: 'Nóiméad', + seconds: 'Soicindí', + milliseconds: 'Milleasoicindí', timeSelect: 'roghnaigh am', dateSelect: 'roghnaigh dáta', weekSelect: 'Roghnaigh seachtain', monthSelect: 'Roghnaigh mí', yearSelect: 'Roghnaigh bliain', decadeSelect: 'Roghnaigh deich mbliana', + hourSelect: 'Roghnaigh uair', + minuteSelect: 'Roghnaigh nóiméad', + secondSelect: 'Roghnaigh soicind', + millisecondSelect: 'Roghnaigh milleasoicind', + meridiemSelect: 'Roghnaigh meiridhiam', previousMonth: 'An mhí roimhe seo (PageUp)', nextMonth: 'An mhí seo chugainn (PageDown)', diff --git a/src/locale/gl_ES.ts b/src/locale/gl_ES.ts index 13e5f6e48..70a4bb97d 100644 --- a/src/locale/gl_ES.ts +++ b/src/locale/gl_ES.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Semana', month: 'Mes', year: 'Ano', + hours: 'Horas', + minutes: 'Minutos', + seconds: 'Segundos', + milliseconds: 'Milisegundos', timeSelect: 'Seleccionar hora', dateSelect: 'Seleccionar data', monthSelect: 'Elexir un mes', yearSelect: 'Elexir un año', decadeSelect: 'Elexir unha década', + hourSelect: 'Seleccionar unha hora', + minuteSelect: 'Seleccionar un minuto', + secondSelect: 'Seleccionar un segundo', + millisecondSelect: 'Seleccionar un milisegundo', + meridiemSelect: 'Seleccionar meridiano', previousMonth: 'Mes anterior (PageUp)', nextMonth: 'Mes seguinte (PageDown)', diff --git a/src/locale/he_IL.ts b/src/locale/he_IL.ts index aeb8f5fc4..e789f4a28 100644 --- a/src/locale/he_IL.ts +++ b/src/locale/he_IL.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'שבוע', month: 'חודש', year: 'שנה', + hours: 'שעות', + minutes: 'דקות', + seconds: 'שניות', + milliseconds: 'מילישניות', timeSelect: 'בחר שעה', dateSelect: 'בחר תאריך', weekSelect: 'בחר שבוע', monthSelect: 'בחר חודש', yearSelect: 'בחר שנה', decadeSelect: 'בחר עשור', + hourSelect: 'בחר שעה', + minuteSelect: 'בחר דקה', + secondSelect: 'בחר שנייה', + millisecondSelect: 'בחר מילישנייה', + meridiemSelect: 'בחר לפני/אחרי הצהריים', previousMonth: 'חודש קודם (PageUp)', nextMonth: 'חודש הבא (PageDown)', diff --git a/src/locale/hi_IN.ts b/src/locale/hi_IN.ts index 6113b7fed..4e1495c2b 100644 --- a/src/locale/hi_IN.ts +++ b/src/locale/hi_IN.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'सप्ताह', month: 'महीना', year: 'साल', + hours: 'घंटे', + minutes: 'मिनट', + seconds: 'सेकंड', + milliseconds: 'मिलीसेकंड', timeSelect: 'समय का चयन करें', dateSelect: 'तारीख़ चुनें', weekSelect: 'एक सप्ताह चुनें', monthSelect: 'एक महीना चुनें', yearSelect: 'एक वर्ष चुनें', decadeSelect: 'एक दशक चुनें', + hourSelect: 'एक घंटा चुनें', + minuteSelect: 'एक मिनट चुनें', + secondSelect: 'एक सेकंड चुनें', + millisecondSelect: 'एक मिलीसेकंड चुनें', + meridiemSelect: 'मेरिडियम चुनें', previousMonth: 'पिछला महीना (पेजअप)', nextMonth: 'अगले महीने (पेजडाउन)', diff --git a/src/locale/hr_HR.ts b/src/locale/hr_HR.ts index f43e78949..20f77c969 100644 --- a/src/locale/hr_HR.ts +++ b/src/locale/hr_HR.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'Sedmica', month: 'Mjesec', year: 'Godina', + hours: 'Sati', + minutes: 'Minute', + seconds: 'Sekunde', + milliseconds: 'Milisekunde', timeSelect: 'odaberite vrijeme', dateSelect: 'odaberite datum', weekSelect: 'Odaberite tjedan', monthSelect: 'Odaberite mjesec', yearSelect: 'Odaberite godinu', decadeSelect: 'Odaberite desetljeće', + hourSelect: 'Odaberite sat', + minuteSelect: 'Odaberite minutu', + secondSelect: 'Odaberite sekundu', + millisecondSelect: 'Odaberite milisekundu', + meridiemSelect: 'Odaberite meridiem', previousMonth: 'Prošli mjesec (PageUp)', nextMonth: 'Sljedeći mjesec (PageDown)', diff --git a/src/locale/hu_HU.ts b/src/locale/hu_HU.ts index 54fbeb0d9..4d0af1658 100644 --- a/src/locale/hu_HU.ts +++ b/src/locale/hu_HU.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Hét', month: 'Hónap', // 'Month', year: 'Év', // 'Year', + hours: 'Óra', + minutes: 'Perc', + seconds: 'Másodperc', + milliseconds: 'Ezredmásodperc', timeSelect: 'Időpont kiválasztása', // 'Select time', dateSelect: 'Dátum kiválasztása', // 'Select date', monthSelect: 'Hónap kiválasztása', // 'Choose a month', yearSelect: 'Év kiválasztása', // 'Choose a year', decadeSelect: 'Évtized kiválasztása', // 'Choose a decade', + hourSelect: 'Válasszon órát', + minuteSelect: 'Válasszon percet', + secondSelect: 'Válasszon másodpercet', + millisecondSelect: 'Válasszon ezredmásodpercet', + meridiemSelect: 'Válasszon meridiémet', dayFormat: 'DD', // 'D', diff --git a/src/locale/id_ID.ts b/src/locale/id_ID.ts index 2827b7123..9a24b451c 100644 --- a/src/locale/id_ID.ts +++ b/src/locale/id_ID.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'Minggu', month: 'Bulan', year: 'Tahun', + hours: 'Jam', + minutes: 'Menit', + seconds: 'Detik', + milliseconds: 'Milidetik', timeSelect: 'pilih waktu', dateSelect: 'pilih tanggal', weekSelect: 'Pilih satu minggu', monthSelect: 'Pilih satu bulan', yearSelect: 'Pilih satu tahun', decadeSelect: 'Pilih satu dekade', + hourSelect: 'Pilih jam', + minuteSelect: 'Pilih menit', + secondSelect: 'Pilih detik', + millisecondSelect: 'Pilih milidetik', + meridiemSelect: 'Pilih meridiem', previousMonth: 'Bulan sebelumnya (PageUp)', nextMonth: 'Bulan selanjutnya (PageDown)', diff --git a/src/locale/is_IS.ts b/src/locale/is_IS.ts index 8c6663d43..13dedd5c0 100644 --- a/src/locale/is_IS.ts +++ b/src/locale/is_IS.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Vika', month: 'Mánuður', year: 'Ár', + hours: 'Klukkustundir', + minutes: 'Mínútur', + seconds: 'Sekúndur', + milliseconds: 'Millisekúndur', timeSelect: 'Velja tíma', dateSelect: 'Velja dag', monthSelect: 'Velja mánuð', yearSelect: 'Velja ár', decadeSelect: 'Velja áratug', + hourSelect: 'Veldu klukkustund', + minuteSelect: 'Veldu mínútu', + secondSelect: 'Veldu sekúndu', + millisecondSelect: 'Veldu millisekúndu', + meridiemSelect: 'Veldu hálf dags', previousMonth: 'Fyrri mánuður (PageUp)', nextMonth: 'Næsti mánuður (PageDown)', diff --git a/src/locale/it_IT.ts b/src/locale/it_IT.ts index 6dd6a9704..49ed145d9 100644 --- a/src/locale/it_IT.ts +++ b/src/locale/it_IT.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Settimana', month: 'Mese', year: 'Anno', + hours: 'Ore', + minutes: 'Minuti', + seconds: 'Secondi', + milliseconds: 'Millisecondi', timeSelect: "Seleziona l'ora", dateSelect: 'Seleziona la data', monthSelect: 'Seleziona il mese', yearSelect: "Seleziona l'anno", decadeSelect: 'Seleziona il decennio', + hourSelect: "Seleziona un'ora", + minuteSelect: 'Seleziona un minuto', + secondSelect: 'Seleziona un secondo', + millisecondSelect: 'Seleziona un millisecondo', + meridiemSelect: 'Seleziona il meridiano', previousMonth: 'Il mese scorso (PageUp)', nextMonth: 'Il prossimo mese (PageDown)', diff --git a/src/locale/ja_JP.ts b/src/locale/ja_JP.ts index da7cd0530..0f7f4d5b0 100644 --- a/src/locale/ja_JP.ts +++ b/src/locale/ja_JP.ts @@ -15,11 +15,20 @@ const locale: Locale = { week: '週', month: '月', year: '年', + hours: '時間', + minutes: '分', + seconds: '秒', + milliseconds: 'ミリ秒', previousMonth: '前月 (ページアップキー)', nextMonth: '翌月 (ページダウンキー)', monthSelect: '月を選択', yearSelect: '年を選択', decadeSelect: '年代を選択', + hourSelect: '時間を選択', + minuteSelect: '分を選択', + secondSelect: '秒を選択', + millisecondSelect: 'ミリ秒を選択', + meridiemSelect: '午前/午後を選択', yearFormat: 'YYYY年', previousYear: '前年 (Controlを押しながら左キー)', nextYear: '翌年 (Controlを押しながら右キー)', diff --git a/src/locale/ka_GE.ts b/src/locale/ka_GE.ts index 736584038..11f1afbf6 100644 --- a/src/locale/ka_GE.ts +++ b/src/locale/ka_GE.ts @@ -1,5 +1,5 @@ import { commonLocale } from './common'; -import { Locale } from '../interface'; +import type { Locale } from '../interface'; const locale: Locale = { ...commonLocale, @@ -12,12 +12,21 @@ const locale: Locale = { week: 'კვირა', month: 'თვე', year: 'წელი', + hours: 'საათები', + minutes: 'წუთები', + seconds: 'წამები', + milliseconds: 'მილიწამები', timeSelect: 'დროის არჩევა', dateSelect: 'თარიღის არჩევა', weekSelect: 'კვირის არჩევა', monthSelect: 'თვის არჩევა', yearSelect: 'წლის არჩევა', decadeSelect: 'ათწლეულის არჩევა', + hourSelect: 'საათის არჩევა', + minuteSelect: 'წუთის არჩევა', + secondSelect: 'წამის არჩევა', + millisecondSelect: 'მილიწამის არჩევა', + meridiemSelect: 'მერიდიანის არჩევა', previousMonth: 'წინა თვე (PageUp)', nextMonth: 'მომდევნო თვე (PageDown)', diff --git a/src/locale/kk_KZ.ts b/src/locale/kk_KZ.ts index 6ff426651..0ad7efa48 100644 --- a/src/locale/kk_KZ.ts +++ b/src/locale/kk_KZ.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Апта', month: 'Ай', year: 'Жыл', + hours: 'Сағат', + minutes: 'Минут', + seconds: 'Секунд', + milliseconds: 'Миллисекунд', timeSelect: 'Уақытты таңдау', dateSelect: 'Күнді таңдау', monthSelect: 'Айды таңдаңыз', yearSelect: 'Жылды таңдаңыз', decadeSelect: 'Онжылды таңдаңыз', + hourSelect: 'Сағатты таңдаңыз', + minuteSelect: 'Минутты таңдаңыз', + secondSelect: 'Секундты таңдаңыз', + millisecondSelect: 'Миллисекундты таңдаңыз', + meridiemSelect: 'Меридиемді таңдаңыз', previousMonth: 'Алдыңғы ай (PageUp)', nextMonth: 'Келесі ай (PageDown)', diff --git a/src/locale/km_KH.ts b/src/locale/km_KH.ts index 39728d4ce..412e6fc86 100644 --- a/src/locale/km_KH.ts +++ b/src/locale/km_KH.ts @@ -15,11 +15,20 @@ const locale: Locale = { week: 'សប្តាហ៍', month: 'ខែ', year: 'ឆ្នាំ', + hours: 'ម៉ោង', + minutes: 'នាទី', + seconds: 'វិនាទី', + milliseconds: 'មិល្លីវិនាទី', previousMonth: 'ខែមុន (ឡើងទំព័រ)', nextMonth: 'ខែបន្ទាប់ (ប៊ូតុងចុះទំព័រ)', monthSelect: 'ជ្រើសរើសខែ', yearSelect: 'ជ្រើសរើសឆ្នាំ', decadeSelect: 'ជ្រើសរើសអាយុ', + hourSelect: 'ជ្រើសម៉ោង', + minuteSelect: 'ជ្រើសនាទី', + secondSelect: 'ជ្រើសវិនាទី', + millisecondSelect: 'ជ្រើសមិល្លីវិនាទី', + meridiemSelect: 'ជ្រើស ព្រឹក/ល្ងាច', previousYear: 'ឆ្នាំមុន (Controlគ្រាប់ចុចបូកព្រួញខាងឆ្វេង)', nextYear: 'ឆ្នាំក្រោយ (Control គ្រាប់ចុចបូកព្រួញស្ដាំ)', diff --git a/src/locale/kmr_IQ.ts b/src/locale/kmr_IQ.ts index a64a754f0..25ab8fa23 100644 --- a/src/locale/kmr_IQ.ts +++ b/src/locale/kmr_IQ.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Sêbê', month: 'Meh', year: 'Sal', + hours: 'Saet', + minutes: 'Deqîqe', + seconds: 'Saniye', + milliseconds: 'Milisaniye', timeSelect: 'Demê hilbijêre', dateSelect: 'Dîrok hilbijêre', monthSelect: 'Meh hilbijêre', yearSelect: 'Sal hilbijêre', decadeSelect: 'Dehsal hilbijêre', + hourSelect: 'Saetek hilbijêre', + minuteSelect: 'Deqîqeyek hilbijêre', + secondSelect: 'Saniyeyek hilbijêre', + millisecondSelect: 'Milisaniyeyek hilbijêre', + meridiemSelect: 'Meridyemê hilbijêre', previousMonth: 'Meha peş (PageUp))', nextMonth: 'Meha paş (PageDown)', diff --git a/src/locale/kn_IN.ts b/src/locale/kn_IN.ts index f987ad0f1..76fe79eba 100644 --- a/src/locale/kn_IN.ts +++ b/src/locale/kn_IN.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'ವಾರ', month: 'ತಿಂಗಳು', year: 'ವರ್ಷ', + hours: 'ಗಂಟೆಗಳು', + minutes: 'ನಿಮಿಷಗಳು', + seconds: 'ಸೆಕೆಂಡುಗಳು', + milliseconds: 'ಮಿಲಿಸೆಕೆಂಡುಗಳು', timeSelect: 'ಸಮಯ ಆಯ್ಕೆಮಾಡಿ', dateSelect: 'ದಿನಾಂಕವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ', weekSelect: 'ಒಂದು ವಾರದ ಆರಿಸಿ', monthSelect: 'ಒಂದು ತಿಂಗಳು ಆಯ್ಕೆಮಾಡಿ', yearSelect: 'ಒಂದು ವರ್ಷ ಆರಿಸಿ', decadeSelect: 'ಒಂದು ದಶಕದ ಆಯ್ಕೆಮಾಡಿ', + hourSelect: 'ಒಂದು ಗಂಟೆ ಆಯ್ಕೆಮಾಡಿ', + minuteSelect: 'ಒಂದು ನಿಮಿಷ ಆಯ್ಕೆಮಾಡಿ', + secondSelect: 'ಒಂದು ಸೆಕೆಂಡ್ ಆಯ್ಕೆಮಾಡಿ', + millisecondSelect: 'ಒಂದು ಮಿಲಿಸೆಕೆಂಡ್ ಆಯ್ಕೆಮಾಡಿ', + meridiemSelect: 'ಮೆರಿಡಿಯಮ್ ಆಯ್ಕೆಮಾಡಿ', previousMonth: 'ಹಿಂದಿನ ತಿಂಗಳು (ಪೇಜ್ಅಪ್)', nextMonth: 'ಮುಂದಿನ ತಿಂಗಳು (ಪೇಜ್ಡೌನ್)', diff --git a/src/locale/ko_KR.ts b/src/locale/ko_KR.ts index 01cc3aeb1..46a4cb0d7 100644 --- a/src/locale/ko_KR.ts +++ b/src/locale/ko_KR.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: '주', month: '월', year: '년', + hours: '시간', + minutes: '분', + seconds: '초', + milliseconds: '밀리초', timeSelect: '시간 선택', dateSelect: '날짜 선택', monthSelect: '달 선택', yearSelect: '연 선택', decadeSelect: '연대 선택', + hourSelect: '시간 선택', + minuteSelect: '분 선택', + secondSelect: '초 선택', + millisecondSelect: '밀리초 선택', + meridiemSelect: '오전/오후 선택', yearFormat: 'YYYY년', monthBeforeYear: false, previousMonth: '이전 달 (PageUp)', diff --git a/src/locale/lt_LT.ts b/src/locale/lt_LT.ts index b9b58debc..3dda1f002 100644 --- a/src/locale/lt_LT.ts +++ b/src/locale/lt_LT.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'Savaitė', month: 'Mėnesis', year: 'Metai', + hours: 'Valandos', + minutes: 'Minutės', + seconds: 'Sekundės', + milliseconds: 'Milisekundės', timeSelect: 'Pasirinkti laiką', dateSelect: 'Pasirinkti datą', weekSelect: 'Pasirinkti savaitę', monthSelect: 'Pasirinkti mėnesį', yearSelect: 'Pasirinkti metus', decadeSelect: 'Pasirinkti dešimtmetį', + hourSelect: 'Pasirinkite valandą', + minuteSelect: 'Pasirinkite minutę', + secondSelect: 'Pasirinkite sekundę', + millisecondSelect: 'Pasirinkite milisekundę', + meridiemSelect: 'Pasirinkite meridijemą', dayFormat: 'DD', diff --git a/src/locale/lv_LV.ts b/src/locale/lv_LV.ts index 7e2b175f6..4a3162508 100644 --- a/src/locale/lv_LV.ts +++ b/src/locale/lv_LV.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Nedēļa', month: 'Mēnesis', year: 'Gads', + hours: 'Stundas', + minutes: 'Minūtes', + seconds: 'Sekundes', + milliseconds: 'Milisekundes', timeSelect: 'Izvēlieties laiku', dateSelect: 'Izvēlieties datumu', monthSelect: 'Izvēlieties mēnesi', yearSelect: 'Izvēlieties gadu', decadeSelect: 'Izvēlieties desmit gadus', + hourSelect: 'Atlasiet stundu', + minuteSelect: 'Atlasiet minūti', + secondSelect: 'Atlasiet sekundi', + millisecondSelect: 'Atlasiet milisekundi', + meridiemSelect: 'Atlasiet meridiemu', previousMonth: 'Iepriekšējais mēnesis (PageUp)', nextMonth: 'Nākammēnes (PageDown)', diff --git a/src/locale/mk_MK.ts b/src/locale/mk_MK.ts index 07cd8c4fc..cdb036791 100644 --- a/src/locale/mk_MK.ts +++ b/src/locale/mk_MK.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Недела', month: 'Месец', year: 'Година', + hours: 'Часови', + minutes: 'Минути', + seconds: 'Секунди', + milliseconds: 'Милисекунди', timeSelect: 'Избери време', dateSelect: 'Избери датум', monthSelect: 'Избери месец', yearSelect: 'Избери година', decadeSelect: 'Избери деценија', + hourSelect: 'Изберете час', + minuteSelect: 'Изберете минута', + secondSelect: 'Изберете секунда', + millisecondSelect: 'Изберете милисекунда', + meridiemSelect: 'Изберете меридием', previousMonth: 'Претходен месец (PageUp)', nextMonth: 'Нареден месец (PageDown)', diff --git a/src/locale/ml_IN.ts b/src/locale/ml_IN.ts index 42ba80acf..fcbfb128b 100644 --- a/src/locale/ml_IN.ts +++ b/src/locale/ml_IN.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'ആഴ്ച', month: 'മാസം', year: 'വർഷം', + hours: 'മണിക്കൂറുകൾ', + minutes: 'മിനിറ്റുകൾ', + seconds: 'സെക്കൻഡുകൾ', + milliseconds: 'മില്ലിസെക്കൻഡുകൾ', timeSelect: 'സമയം തിരഞ്ഞെടുക്കുക', dateSelect: 'ദിവസം തിരഞ്ഞെടുക്കുക', weekSelect: 'വാരം തിരഞ്ഞെടുക്കുക', monthSelect: 'മാസം തിരഞ്ഞെടുക്കുക', yearSelect: 'വർഷം തിരഞ്ഞെടുക്കുക', decadeSelect: 'ദശാബ്ദം തിരഞ്ഞെടുക്കുക', + hourSelect: 'ഒരു മണിക്കൂർ തിരഞ്ഞെടുക്കുക', + minuteSelect: 'ഒരു മിനിറ്റ് തിരഞ്ഞെടുക്കുക', + secondSelect: 'ഒരു സെക്കൻഡ് തിരഞ്ഞെടുക്കുക', + millisecondSelect: 'ഒരു മില്ലിസെക്കൻഡ് തിരഞ്ഞെടുക്കുക', + meridiemSelect: 'മെറിഡിയം തിരഞ്ഞെടുക്കുക', previousMonth: 'കഴിഞ്ഞ മാസം (PageUp)', nextMonth: 'അടുത്ത മാസം (PageDown)', diff --git a/src/locale/mn_MN.ts b/src/locale/mn_MN.ts index acad2b7c3..972227a89 100644 --- a/src/locale/mn_MN.ts +++ b/src/locale/mn_MN.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'Долоо хоног', month: 'Сар', year: 'Жил', + hours: 'Цаг', + minutes: 'Минут', + seconds: 'Секунд', + milliseconds: 'Миллисекунд', timeSelect: 'Цаг сонгох', dateSelect: 'Огноо сонгох', weekSelect: '7 хоног сонгох', monthSelect: 'Сар сонгох', yearSelect: 'Жил сонгох', decadeSelect: 'Арван сонгох', + hourSelect: 'Цаг сонгох', + minuteSelect: 'Минут сонгох', + secondSelect: 'Секунд сонгох', + millisecondSelect: 'Миллисекунд сонгох', + meridiemSelect: 'Меридием сонгох', dayFormat: 'DD', diff --git a/src/locale/mr_IN.ts b/src/locale/mr_IN.ts index dbfc3eb64..9e6289828 100644 --- a/src/locale/mr_IN.ts +++ b/src/locale/mr_IN.ts @@ -15,12 +15,21 @@ const locale: Locale = { week: 'आठवडा', month: 'महिना', year: 'वर्ष', + hours: 'तास', + minutes: 'मिनिटे', + seconds: 'सेकंद', + milliseconds: 'मिलिसेकंद', timeSelect: 'वेळ निवडा', dateSelect: 'दिनांक निवडा', weekSelect: 'आठवडा निवडा', monthSelect: 'महिना निवडा', yearSelect: 'वर्ष निवडा', decadeSelect: 'दशक निवडा', + hourSelect: 'एक तास निवडा', + minuteSelect: 'एक मिनिट निवडा', + secondSelect: 'एक सेकंद निवडा', + millisecondSelect: 'एक मिलिसेकंद निवडा', + meridiemSelect: 'मेरिडियम निवडा', previousMonth: 'मागील महिना (पेजअप)', nextMonth: 'पुढचा महिना (पेजडाउन)', diff --git a/src/locale/ms_MY.ts b/src/locale/ms_MY.ts index 601795fd2..98cd65711 100644 --- a/src/locale/ms_MY.ts +++ b/src/locale/ms_MY.ts @@ -15,11 +15,20 @@ const locale: Locale = { week: 'Minggu', month: 'Bulan', year: 'Tahun', + hours: 'Jam', + minutes: 'Minit', + seconds: 'Saat', + milliseconds: 'Milisaat', previousMonth: 'Bulan lepas', nextMonth: 'Bulan depan', monthSelect: 'Pilih bulan', yearSelect: 'Pilih tahun', decadeSelect: 'Pilih dekad', + hourSelect: 'Pilih jam', + minuteSelect: 'Pilih minit', + secondSelect: 'Pilih saat', + millisecondSelect: 'Pilih milisaat', + meridiemSelect: 'Pilih meridiem', previousYear: 'Tahun lepas (Ctrl+left)', nextYear: 'Tahun depan (Ctrl+right)', diff --git a/src/locale/my_MM.ts b/src/locale/my_MM.ts index d64574a0b..30aaf3061 100644 --- a/src/locale/my_MM.ts +++ b/src/locale/my_MM.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'အပတ်', month: 'လ', year: 'နှစ်', + hours: 'နာရီ', + minutes: 'မိနစ်', + seconds: 'စက္ကန့်', + milliseconds: 'မီလီစက္ကန့်', timeSelect: 'အချိန်ကိုရွေး', dateSelect: 'နေ့ကိုရွေး', weekSelect: 'သီတင်းပတ်ကိုရွေး', monthSelect: 'လကိုရွေး', yearSelect: 'နှစ်ကိုရွေး', decadeSelect: 'ဆယ်စုနှစ်ကိုရွေး', + hourSelect: 'နာရီ ရွေးချယ်ပါ', + minuteSelect: 'မိနစ် ရွေးချယ်ပါ', + secondSelect: 'စက္ကန့် ရွေးချယ်ပါ', + millisecondSelect: 'မီလီစက္ကန့် ရွေးချယ်ပါ', + meridiemSelect: 'မေရီဒီယမ် ရွေးချယ်ပါ', previousMonth: 'ယခင်လ (PageUp)', nextMonth: 'နောက်လ (PageDown)', diff --git a/src/locale/nb_NO.ts b/src/locale/nb_NO.ts index 013fd1de8..a6a15a6ad 100644 --- a/src/locale/nb_NO.ts +++ b/src/locale/nb_NO.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'Uke', month: 'Måned', year: 'År', + hours: 'Timer', + minutes: 'Minutter', + seconds: 'Sekunder', + milliseconds: 'Millisekunder', timeSelect: 'Velg tidspunkt', dateSelect: 'Velg dato', weekSelect: 'Velg uke', monthSelect: 'Velg måned', yearSelect: 'Velg år', decadeSelect: 'Velg tiår', + hourSelect: 'Velg en time', + minuteSelect: 'Velg et minutt', + secondSelect: 'Velg et sekund', + millisecondSelect: 'Velg et millisekund', + meridiemSelect: 'Velg meridiem', dayFormat: 'DD', diff --git a/src/locale/ne_NP.ts b/src/locale/ne_NP.ts index 5ff0e6df1..56aa3c171 100644 --- a/src/locale/ne_NP.ts +++ b/src/locale/ne_NP.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'हप्ता', month: 'महिना', year: 'वर्ष', + hours: 'घण्टाहरू', + minutes: 'मिनेटहरू', + seconds: 'सेकेन्डहरू', + milliseconds: 'मिलिसेकेन्डहरू', timeSelect: 'समय चयन गर्नुहोस्', dateSelect: 'मिति चयन गर्नुहोस्', weekSelect: 'एक हप्ता छान्नुहोस्', monthSelect: 'एक महिना छान्नुहोस्', yearSelect: 'एक वर्ष छान्नुहोस्', decadeSelect: 'एक दशक छान्नुहोस्', + hourSelect: 'एउटा घण्टा छान्नुहोस्', + minuteSelect: 'एउटा मिनेट छान्नुहोस्', + secondSelect: 'एउटा सेकेन्ड छान्नुहोस्', + millisecondSelect: 'एउटा मिलिसेकेन्ड छान्नुहोस्', + meridiemSelect: 'मेरिडियम छान्नुहोस्', previousMonth: 'अघिल्लो महिना (पृष्ठ माथि)', nextMonth: 'अर्को महिना (पृष्ठ तल)', diff --git a/src/locale/nl_BE.ts b/src/locale/nl_BE.ts index 5f3c35104..3898284b9 100644 --- a/src/locale/nl_BE.ts +++ b/src/locale/nl_BE.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Week', month: 'Maand', year: 'Jaar', + hours: 'Uren', + minutes: 'Minuten', + seconds: 'Seconden', + milliseconds: 'Milliseconden', timeSelect: 'Selecteer tijd', dateSelect: 'Selecteer datum', monthSelect: 'Kies een maand', yearSelect: 'Kies een jaar', decadeSelect: 'Kies een decennium', + hourSelect: 'Selecteer een uur', + minuteSelect: 'Selecteer een minuut', + secondSelect: 'Selecteer een seconde', + millisecondSelect: 'Selecteer een milliseconde', + meridiemSelect: 'Selecteer meridiem', previousMonth: 'Vorige maand (PageUp)', nextMonth: 'Volgende maand (PageDown)', diff --git a/src/locale/nl_NL.ts b/src/locale/nl_NL.ts index 7f949ae0b..3096f3e9f 100644 --- a/src/locale/nl_NL.ts +++ b/src/locale/nl_NL.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Week', month: 'Maand', year: 'Jaar', + hours: 'Uren', + minutes: 'Minuten', + seconds: 'Seconden', + milliseconds: 'Milliseconden', timeSelect: 'Selecteer tijd', dateSelect: 'Selecteer datum', monthSelect: 'Kies een maand', yearSelect: 'Kies een jaar', decadeSelect: 'Kies een decennium', + hourSelect: 'Selecteer een uur', + minuteSelect: 'Selecteer een minuut', + secondSelect: 'Selecteer een seconde', + millisecondSelect: 'Selecteer een milliseconde', + meridiemSelect: 'Selecteer meridiem', previousMonth: 'Vorige maand (PageUp)', nextMonth: 'Volgende maand (PageDown)', diff --git a/src/locale/pl_PL.ts b/src/locale/pl_PL.ts index 671f154a6..b8d0a143d 100644 --- a/src/locale/pl_PL.ts +++ b/src/locale/pl_PL.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Tydzień', month: 'Miesiąc', year: 'Rok', + hours: 'Godziny', + minutes: 'Minuty', + seconds: 'Sekundy', + milliseconds: 'Milisekundy', timeSelect: 'Ustaw czas', dateSelect: 'Ustaw datę', monthSelect: 'Wybierz miesiąc', yearSelect: 'Wybierz rok', decadeSelect: 'Wybierz dekadę', + hourSelect: 'Wybierz godzinę', + minuteSelect: 'Wybierz minutę', + secondSelect: 'Wybierz sekundę', + millisecondSelect: 'Wybierz milisekundę', + meridiemSelect: 'Wybierz meridiem', previousMonth: 'Poprzedni miesiąc (PageUp)', nextMonth: 'Następny miesiąc (PageDown)', diff --git a/src/locale/pt_BR.ts b/src/locale/pt_BR.ts index 8bcb3d571..f55e544d5 100644 --- a/src/locale/pt_BR.ts +++ b/src/locale/pt_BR.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Semana', month: 'Mês', year: 'Ano', + hours: 'Horas', + minutes: 'Minutos', + seconds: 'Segundos', + milliseconds: 'Milissegundos', timeSelect: 'Selecionar hora', dateSelect: 'Selecionar data', monthSelect: 'Escolher mês', yearSelect: 'Escolher ano', decadeSelect: 'Escolher década', + hourSelect: 'Selecionar uma hora', + minuteSelect: 'Selecionar um minuto', + secondSelect: 'Selecionar um segundo', + millisecondSelect: 'Selecionar um milissegundo', + meridiemSelect: 'Selecionar meridiem', monthBeforeYear: false, previousMonth: 'Mês anterior (PageUp)', nextMonth: 'Próximo mês (PageDown)', diff --git a/src/locale/pt_PT.ts b/src/locale/pt_PT.ts index 8ff040e73..6f4e9dd03 100644 --- a/src/locale/pt_PT.ts +++ b/src/locale/pt_PT.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Semana', month: 'Mês', year: 'Ano', + hours: 'Horas', + minutes: 'Minutos', + seconds: 'Segundos', + milliseconds: 'Milissegundos', timeSelect: 'Selecionar hora', dateSelect: 'Selecionar data', monthSelect: 'Selecionar mês', yearSelect: 'Selecionar ano', decadeSelect: 'Selecionar década', + hourSelect: 'Selecionar uma hora', + minuteSelect: 'Selecionar um minuto', + secondSelect: 'Selecionar um segundo', + millisecondSelect: 'Selecionar um milissegundo', + meridiemSelect: 'Selecionar meridiem', previousMonth: 'Mês anterior (PageUp)', nextMonth: 'Mês seguinte (PageDown)', diff --git a/src/locale/ro_RO.ts b/src/locale/ro_RO.ts index 442c1bb4d..8a9a2887c 100644 --- a/src/locale/ro_RO.ts +++ b/src/locale/ro_RO.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'Săptămână', month: 'Lună', year: 'An', + hours: 'Ore', + minutes: 'Minute', + seconds: 'Secunde', + milliseconds: 'Milisecunde', timeSelect: 'selectează timpul', dateSelect: 'selectează data', weekSelect: 'Alege o săptămână', monthSelect: 'Alege o lună', yearSelect: 'Alege un an', decadeSelect: 'Alege un deceniu', + hourSelect: 'Selectați o oră', + minuteSelect: 'Selectați un minut', + secondSelect: 'Selectați o secundă', + millisecondSelect: 'Selectați o milisecundă', + meridiemSelect: 'Selectați meridianul', previousMonth: 'Luna anterioară (PageUp)', nextMonth: 'Luna următoare (PageDown)', diff --git a/src/locale/ru_RU.ts b/src/locale/ru_RU.ts index 35ef288d6..7c5a33311 100644 --- a/src/locale/ru_RU.ts +++ b/src/locale/ru_RU.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Неделя', month: 'Месяц', year: 'Год', + hours: 'Часы', + minutes: 'Минуты', + seconds: 'Секунды', + milliseconds: 'Миллисекунды', timeSelect: 'Выбрать время', dateSelect: 'Выбрать дату', monthSelect: 'Выбрать месяц', yearSelect: 'Выбрать год', decadeSelect: 'Выбрать десятилетие', + hourSelect: 'Выберите час', + minuteSelect: 'Выберите минуту', + secondSelect: 'Выберите секунду', + millisecondSelect: 'Выберите миллисекунду', + meridiemSelect: 'Выберите меридием', previousMonth: 'Предыдущий месяц (PageUp)', nextMonth: 'Следующий месяц (PageDown)', diff --git a/src/locale/si_LK.ts b/src/locale/si_LK.ts index b3dfa4697..121a12b3f 100644 --- a/src/locale/si_LK.ts +++ b/src/locale/si_LK.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'සතිය', month: 'මාසය', year: 'අවුරුද්ද', + hours: 'පැය', + minutes: 'මිනිත්තු', + seconds: 'තත්පර', + milliseconds: 'මිලිතත්පර', timeSelect: 'වේලාවක් තෝරන්න', dateSelect: 'දිනයක් තෝරන්න', weekSelect: 'සතියක් තෝරන්න', monthSelect: 'මාසයක් තෝරන්න', yearSelect: 'අවුරුද්දක් තෝරන්න', decadeSelect: 'දශකයක් තෝරන්න', + hourSelect: 'පැයක් තෝරන්න', + minuteSelect: 'මිනිත්තුවක් තෝරන්න', + secondSelect: 'තත්පරයක් තෝරන්න', + millisecondSelect: 'මිලිතත්පරයක් තෝරන්න', + meridiemSelect: 'මෙරිඩියම් තෝරන්න', monthBeforeYear: false, previousMonth: 'කලින් මාසය (පිටුව ඉහළට)', diff --git a/src/locale/sk_SK.ts b/src/locale/sk_SK.ts index a901f20e6..83291af02 100644 --- a/src/locale/sk_SK.ts +++ b/src/locale/sk_SK.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Týždeň', month: 'Mesiac', year: 'Rok', + hours: 'Hodiny', + minutes: 'Minúty', + seconds: 'Sekundy', + milliseconds: 'Milisekundy', timeSelect: 'Vybrať čas', dateSelect: 'Vybrať dátum', monthSelect: 'Vybrať mesiac', yearSelect: 'Vybrať rok', decadeSelect: 'Vybrať dekádu', + hourSelect: 'Vyberte hodinu', + minuteSelect: 'Vyberte minútu', + secondSelect: 'Vyberte sekundu', + millisecondSelect: 'Vyberte milisekundu', + meridiemSelect: 'Vyberte meridiem', previousMonth: 'Predchádzajúci mesiac (PageUp)', nextMonth: 'Nasledujúci mesiac (PageDown)', diff --git a/src/locale/sl_SI.ts b/src/locale/sl_SI.ts index 7739039dd..f174df3e6 100644 --- a/src/locale/sl_SI.ts +++ b/src/locale/sl_SI.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Teden', month: 'Mesec', year: 'Leto', + hours: 'Ure', + minutes: 'Minute', + seconds: 'Sekunde', + milliseconds: 'Milisekunde', timeSelect: 'Izberite čas', dateSelect: 'Izberite datum', monthSelect: 'Izberite mesec', yearSelect: 'Izberite leto', decadeSelect: 'Izberite desetletje', + hourSelect: 'Izberite uro', + minuteSelect: 'Izberite minuto', + secondSelect: 'Izberite sekundo', + millisecondSelect: 'Izberite milisekundo', + meridiemSelect: 'Izberite meridiem', previousMonth: 'Prejšnji mesec (PageUp)', nextMonth: 'Naslednji mesec (PageDown)', diff --git a/src/locale/sr_Cyrl_RS.ts b/src/locale/sr_Cyrl_RS.ts index 9ae9de870..882a94a10 100644 --- a/src/locale/sr_Cyrl_RS.ts +++ b/src/locale/sr_Cyrl_RS.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Недеља', month: 'Месец', year: 'Година', + hours: 'Сати', + minutes: 'Минути', + seconds: 'Секунде', + milliseconds: 'Милисекунде', timeSelect: 'Изабери време', dateSelect: 'Изабери датум', monthSelect: 'Изабери месец', yearSelect: 'Изабери годину', decadeSelect: 'Изабери деценију', + hourSelect: 'Изаберите сат', + minuteSelect: 'Изаберите минут', + secondSelect: 'Изаберите секунду', + millisecondSelect: 'Изаберите милисекунду', + meridiemSelect: 'Изаберите меридијем', previousMonth: 'Претходни месец (PageUp)', nextMonth: 'Следећи месец (PageDown)', diff --git a/src/locale/sr_RS.ts b/src/locale/sr_RS.ts index f98051130..e3e69bdce 100644 --- a/src/locale/sr_RS.ts +++ b/src/locale/sr_RS.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Nedelja', month: 'Mesec', year: 'Godina', + hours: 'Sati', + minutes: 'Minuti', + seconds: 'Sekunde', + milliseconds: 'Milisekunde', timeSelect: 'Izaberi vreme', dateSelect: 'Izaberi datum', monthSelect: 'Izaberi mesec', yearSelect: 'Izaberi godinu', decadeSelect: 'Izaberi deceniju', + hourSelect: 'Izaberite sat', + minuteSelect: 'Izaberite minut', + secondSelect: 'Izaberite sekundu', + millisecondSelect: 'Izaberite milisekundu', + meridiemSelect: 'Izaberite meridiem', previousMonth: 'Prethodni mesec (PageUp)', nextMonth: 'Sledeći mesec (PageDown)', diff --git a/src/locale/sv_SE.ts b/src/locale/sv_SE.ts index 04302c395..78b44eda5 100644 --- a/src/locale/sv_SE.ts +++ b/src/locale/sv_SE.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Vecka', month: 'Månad', year: 'År', + hours: 'Timmar', + minutes: 'Minuter', + seconds: 'Sekunder', + milliseconds: 'Millisekunder', timeSelect: 'Välj tidpunkt', dateSelect: 'Välj datum', monthSelect: 'Välj månad', yearSelect: 'Välj år', decadeSelect: 'Välj årtionde', + hourSelect: 'Välj en timme', + minuteSelect: 'Välj en minut', + secondSelect: 'Välj en sekund', + millisecondSelect: 'Välj en millisekund', + meridiemSelect: 'Välj meridiem', previousMonth: 'Förra månaden (PageUp)', nextMonth: 'Nästa månad (PageDown)', diff --git a/src/locale/ta_IN.ts b/src/locale/ta_IN.ts index 5015fd27c..a0d46d3ea 100644 --- a/src/locale/ta_IN.ts +++ b/src/locale/ta_IN.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'வாரம்', month: 'மாதம்', year: 'வருடம்', + hours: 'மணிநேரங்கள்', + minutes: 'நிமிடங்கள்', + seconds: 'வினாடிகள்', + milliseconds: 'மில்லி வினாடிகள்', timeSelect: 'நேரத்தைத் தேர்ந்தெடு', dateSelect: 'தேதியைத் தேர்ந்தெடு', weekSelect: 'வாரத்தைத் தேர்வுசெய்க', monthSelect: 'மாதத்தைத் தேர்வுசெய்க', yearSelect: 'வருடத்தைத் தேர்வுசெய்க', decadeSelect: 'தசாப்தத்தைத் தேர்வுசெய்க', + hourSelect: 'ஒரு மணிநேரம் தேர்ந்தெடுக்கவும்', + minuteSelect: 'ஒரு நிமிடம் தேர்ந்தெடுக்கவும்', + secondSelect: 'ஒரு வினாடி தேர்ந்தெடுக்கவும்', + millisecondSelect: 'ஒரு மில்லி வினாடி தேர்ந்தெடுக்கவும்', + meridiemSelect: 'மெரிடியம் தேர்ந்தெடுக்கவும்', previousMonth: 'முந்தைய மாதம் (PageUp)', nextMonth: 'அடுத்த மாதம் (PageDown)', diff --git a/src/locale/te_IN.ts b/src/locale/te_IN.ts index ce3861fd1..6835d86a2 100644 --- a/src/locale/te_IN.ts +++ b/src/locale/te_IN.ts @@ -1,31 +1,40 @@ import { commonLocale } from './common'; import type { Locale } from '../interface'; -const locale: Locale={ - ...commonLocale, - locale: 'te_IN', - today:'నేడు', - now:'ఇప్పుడు', - backToToday:'తిరిగి నేటికి', - ok:'సరే', - clear:'స్పష్టమైన', - week:'వారం', - month:'నెల', - year:'సంవత్సరం', - timeSelect:'సమయం ఎంపిక', - dateSelect:'తేదీ ఎంపిక', - weekSelect:'వారం ఎంపిక', - monthSelect:'నెల ఎంపిక', - yearSelect:'సంవత్సరం ఎంపిక', - decadeSelect:'దశాబ్దం ఎంపిక', +const locale: Locale = { + ...commonLocale, + locale: 'te_IN', + today: 'నేడు', + now: 'ఇప్పుడు', + backToToday: 'తిరిగి నేటికి', + ok: 'సరే', + clear: 'స్పష్టమైన', + week: 'వారం', + month: 'నెల', + year: 'సంవత్సరం', + hours: 'గంటలు', + minutes: 'నిమిషాలు', + seconds: 'సెకన్లు', + milliseconds: 'మిల్లీసెకన్లు', + timeSelect: 'సమయం ఎంపిక', + dateSelect: 'తేదీ ఎంపిక', + weekSelect: 'వారం ఎంపిక', + monthSelect: 'నెల ఎంపిక', + yearSelect: 'సంవత్సరం ఎంపిక', + decadeSelect: 'దశాబ్దం ఎంపిక', + hourSelect: 'ఒక గంట ఎంచుకోండి', + minuteSelect: 'ఒక నిమిషం ఎంచుకోండి', + secondSelect: 'ఒక సెకను ఎంచుకోండి', + millisecondSelect: 'ఒక మిల్లీసెకను ఎంచుకోండి', + meridiemSelect: 'మెరిడియమ్ ఎంచుకోండి', - previousMonth:'మునుపటి నెల', - nextMonth:'వచ్చే నెల', - previousYear:'మునుపటి సంవత్సరం', - nextYear:'తదుపరి సంవత్సరం', - previousDecade:'మునుపటి దశాబ్దం', - nextDecade:'తదుపరి దశాబ్దం', - previousCentury:'మునుపటి శతాబ్దం', - nextCentury:'తదుపరి శతాబ్దం', + previousMonth: 'మునుపటి నెల', + nextMonth: 'వచ్చే నెల', + previousYear: 'మునుపటి సంవత్సరం', + nextYear: 'తదుపరి సంవత్సరం', + previousDecade: 'మునుపటి దశాబ్దం', + nextDecade: 'తదుపరి దశాబ్దం', + previousCentury: 'మునుపటి శతాబ్దం', + nextCentury: 'తదుపరి శతాబ్దం', }; -export default locale; \ No newline at end of file +export default locale; diff --git a/src/locale/th_TH.ts b/src/locale/th_TH.ts index 426b83c55..40baec2b9 100644 --- a/src/locale/th_TH.ts +++ b/src/locale/th_TH.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'สัปดาห์', month: 'เดือน', year: 'ปี', + hours: 'ชั่วโมง', + minutes: 'นาที', + seconds: 'วินาที', + milliseconds: 'มิลลิวินาที', timeSelect: 'เลือกเวลา', dateSelect: 'เลือกวัน', monthSelect: 'เลือกเดือน', yearSelect: 'เลือกปี', decadeSelect: 'เลือกทศวรรษ', + hourSelect: 'เลือกชั่วโมง', + minuteSelect: 'เลือกนาที', + secondSelect: 'เลือกวินาที', + millisecondSelect: 'เลือกมิลลิวินาที', + meridiemSelect: 'เลือกช่วงวัน', previousMonth: 'เดือนก่อนหน้า (PageUp)', nextMonth: 'เดือนถัดไป (PageDown)', diff --git a/src/locale/tk_TK.ts b/src/locale/tk_TK.ts index 34b62107c..6ec1505be 100644 --- a/src/locale/tk_TK.ts +++ b/src/locale/tk_TK.ts @@ -12,11 +12,20 @@ const locale: Locale = { month: 'Aý', week: 'Hepde', year: 'Ýyl', + hours: 'Sagatlar', + minutes: 'Minutlar', + seconds: 'Sekundlar', + milliseconds: 'Millisaniyeler', timeSelect: 'Wagt saýla', dateSelect: 'Gün saýla', monthSelect: 'Aý saýla', yearSelect: 'Ýyl saýla', decadeSelect: 'On ýyllygy saýla', + hourSelect: 'Sagat saýlaň', + minuteSelect: 'Minut saýlaň', + secondSelect: 'Sekunt saýlaň', + millisecondSelect: 'Millisekunt saýlaň', + meridiemSelect: 'Meridiemi saýlaň', previousMonth: 'Öňki aý (PageUp)', nextMonth: 'Soňky aý (PageDown)', diff --git a/src/locale/tl_PH.ts b/src/locale/tl_PH.ts index 39942ab77..134fbc5a9 100644 --- a/src/locale/tl_PH.ts +++ b/src/locale/tl_PH.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'Linggo', month: 'Buwan', year: 'Taon', + hours: 'Mga Oras', + minutes: 'Mga Minuto', + seconds: 'Mga Segundo', + milliseconds: 'Mga Millisegundo', timeSelect: 'Pumili ng oras', dateSelect: 'Pumili ng petsa', weekSelect: 'Pumili ng linggo', monthSelect: 'Pumili ng buwan', yearSelect: 'Pumili ng taon', decadeSelect: 'Pumili ng dekada', + hourSelect: 'Pumili ng isang oras', + minuteSelect: 'Pumili ng isang minuto', + secondSelect: 'Pumili ng isang segundo', + millisecondSelect: 'Pumili ng isang millisegundo', + meridiemSelect: 'Pumili ng meridiem', previousMonth: 'Nakaraang buwan (PageUp)', nextMonth: 'Susunod na buwan (PageDown)', @@ -29,20 +38,7 @@ const locale: Locale = { nextCentury: 'Susunod na siglo', shortWeekDays: ['Lin', 'Lun', 'Mar', 'Miy', 'Huw', 'Biy', 'Sab'], - shortMonths: [ - 'Ene', - 'Peb', - 'Mar', - 'Abr', - 'May', - 'Hun', - 'Hul', - 'Ago', - 'Set', - 'Okt', - 'Nob', - 'Dis', - ], + shortMonths: ['Ene', 'Peb', 'Mar', 'Abr', 'May', 'Hun', 'Hul', 'Ago', 'Set', 'Okt', 'Nob', 'Dis'], }; export default locale; diff --git a/src/locale/tr_TR.ts b/src/locale/tr_TR.ts index 4962dafb2..57f040e9c 100644 --- a/src/locale/tr_TR.ts +++ b/src/locale/tr_TR.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Hafta', month: 'Ay', year: 'Yıl', + hours: 'Saat', + minutes: 'Dakika', + seconds: 'Saniye', + milliseconds: 'Milisaniye', timeSelect: 'Zaman Seç', dateSelect: 'Tarih Seç', monthSelect: 'Ay Seç', yearSelect: 'Yıl Seç', decadeSelect: 'On Yıl Seç', + hourSelect: 'Bir saat seçin', + minuteSelect: 'Bir dakika seçin', + secondSelect: 'Bir saniye seçin', + millisecondSelect: 'Bir milisaniye seçin', + meridiemSelect: 'ÖÖ/ÖS seçin', previousMonth: 'Önceki Ay (PageUp)', nextMonth: 'Sonraki Ay (PageDown)', diff --git a/src/locale/ug_CN.ts b/src/locale/ug_CN.ts index 4a29877f1..49f6b64fa 100644 --- a/src/locale/ug_CN.ts +++ b/src/locale/ug_CN.ts @@ -14,11 +14,20 @@ const locale: Locale = { week: 'ھەپتە', month: 'ئاي', year: 'يىل', + hours: 'سائەت', + minutes: 'مىنۇت', + seconds: 'سېكۇنت', + milliseconds: 'مىللىسېكۇنت', previousMonth: 'ئالدىنقى ئاي(ئالدىنقى بەت )', nextMonth: 'كېلەركى ئاي (كېلەركى بەت)', monthSelect: 'ئاي تاللاش', yearSelect: 'يىل تاللاش', decadeSelect: 'يىللارنى تاللاش', + hourSelect: 'سائەت تاللاڭ', + minuteSelect: 'مىنۇت تاللاڭ', + secondSelect: 'سېكۇنت تاللاڭ', + millisecondSelect: 'مىللىسېكۇنت تاللاڭ', + meridiemSelect: 'مېرىدىيېم تاللاڭ', yearFormat: 'YYYY-يىلى', dayFormat: 'D-كۈنى', previousYear: 'ئالدىنقى يىلى (Controlبىلەن يۆنىلىش كونۇپكىسى)', diff --git a/src/locale/uk_UA.ts b/src/locale/uk_UA.ts index cce700ea1..a41750ead 100644 --- a/src/locale/uk_UA.ts +++ b/src/locale/uk_UA.ts @@ -12,11 +12,20 @@ const locale: Locale = { week: 'Тиждень', month: 'Місяць', year: 'Рік', + hours: 'Години', + minutes: 'Хвилини', + seconds: 'Секунди', + milliseconds: 'Мілісекунди', timeSelect: 'Обрати час', dateSelect: 'Обрати дату', monthSelect: 'Обрати місяць', yearSelect: 'Обрати рік', decadeSelect: 'Обрати десятиріччя', + hourSelect: 'Виберіть годину', + minuteSelect: 'Виберіть хвилину', + secondSelect: 'Виберіть секунду', + millisecondSelect: 'Виберіть мілісекунду', + meridiemSelect: 'Виберіть меридієм', previousMonth: 'Попередній місяць (PageUp)', nextMonth: 'Наступний місяць (PageDown)', diff --git a/src/locale/ur_PK.ts b/src/locale/ur_PK.ts index 9f89a5b6c..0339a5557 100644 --- a/src/locale/ur_PK.ts +++ b/src/locale/ur_PK.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'ہفتہ', month: 'مہینہ', year: 'سال', + hours: 'گھنٹے', + minutes: 'منٹ', + seconds: 'سیکنڈ', + milliseconds: 'ملی سیکنڈ', timeSelect: 'وقت منتخب کریں', dateSelect: 'تاریخ منتخب کریں', weekSelect: 'ایک ہفتہ کا انتخاب کریں', monthSelect: 'ایک مہینہ کا انتخاب کریں', yearSelect: 'ایک سال کا انتخاب کریں', decadeSelect: 'ایک دہائی کا انتخاب کریں', + hourSelect: 'ایک گھنٹہ منتخب کریں', + minuteSelect: 'ایک منٹ منتخب کریں', + secondSelect: 'ایک سیکنڈ منتخب کریں', + millisecondSelect: 'ایک ملی سیکنڈ منتخب کریں', + meridiemSelect: 'صبح/شام منتخب کریں', previousMonth: 'پچھلے مہینے (PageUp)', nextMonth: 'اگلے مہینے (PageDown)', diff --git a/src/locale/uz_UZ.ts b/src/locale/uz_UZ.ts index 53253a3fc..e75f7f7b2 100644 --- a/src/locale/uz_UZ.ts +++ b/src/locale/uz_UZ.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'Xafta', month: 'Oy', year: 'Yil', + hours: 'Soatlar', + minutes: 'Daqiqalar', + seconds: 'Soniyalar', + milliseconds: 'Millisekundlar', timeSelect: 'vaqtni tanlang', dateSelect: 'sanani tanlang', weekSelect: 'Haftani tanlang', monthSelect: 'Oyni tanlang', yearSelect: 'Yilni tanlang', decadeSelect: "O'n yilni tanlang", + hourSelect: 'Soatni tanlang', + minuteSelect: 'Daqiqani tanlang', + secondSelect: 'Soniyani tanlang', + millisecondSelect: 'Millisekundni tanlang', + meridiemSelect: 'Meridiemni tanlang', previousMonth: 'Oldingi oy (PageUp)', nextMonth: 'Keyingi oy (PageDown)', previousYear: "O'tgan yili (Control + left)", diff --git a/src/locale/vi_VN.ts b/src/locale/vi_VN.ts index 845f6479a..9cc59144d 100644 --- a/src/locale/vi_VN.ts +++ b/src/locale/vi_VN.ts @@ -12,12 +12,21 @@ const locale: Locale = { week: 'Tuần', month: 'Tháng', year: 'Năm', + hours: 'Giờ', + minutes: 'Phút', + seconds: 'Giây', + milliseconds: 'Mili giây', timeSelect: 'Chọn thời gian', dateSelect: 'Chọn ngày', weekSelect: 'Chọn tuần', monthSelect: 'Chọn tháng', yearSelect: 'Chọn năm', decadeSelect: 'Chọn thập kỷ', + hourSelect: 'Chọn giờ', + minuteSelect: 'Chọn phút', + secondSelect: 'Chọn giây', + millisecondSelect: 'Chọn mili giây', + meridiemSelect: 'Chọn buổi', previousMonth: 'Tháng trước (PageUp)', nextMonth: 'Tháng sau (PageDown)', diff --git a/src/locale/zh_CN.ts b/src/locale/zh_CN.ts index 0123c83f9..1bdc21749 100644 --- a/src/locale/zh_CN.ts +++ b/src/locale/zh_CN.ts @@ -15,11 +15,20 @@ const locale: Locale = { week: '周', month: '月', year: '年', + hours: '时', + minutes: '分', + seconds: '秒', + milliseconds: '毫秒', previousMonth: '上个月 (翻页上键)', nextMonth: '下个月 (翻页下键)', monthSelect: '选择月份', yearSelect: '选择年份', decadeSelect: '选择年代', + hourSelect: '选择时', + minuteSelect: '选择分', + secondSelect: '选择秒', + millisecondSelect: '选择毫秒', + meridiemSelect: '选择上午/下午', previousYear: '上一年 (Control键加左方向键)', nextYear: '下一年 (Control键加右方向键)', diff --git a/src/locale/zh_TW.ts b/src/locale/zh_TW.ts index 32fb02c9a..567544fee 100644 --- a/src/locale/zh_TW.ts +++ b/src/locale/zh_TW.ts @@ -16,11 +16,20 @@ const locale: Locale = { week: '週', month: '月', year: '年', + hours: '時', + minutes: '分', + seconds: '秒', + milliseconds: '毫秒', previousMonth: '上個月 (翻頁上鍵)', nextMonth: '下個月 (翻頁下鍵)', monthSelect: '選擇月份', yearSelect: '選擇年份', decadeSelect: '選擇年代', + hourSelect: '選擇時', + minuteSelect: '選擇分', + secondSelect: '選擇秒', + millisecondSelect: '選擇毫秒', + meridiemSelect: '選擇上午/下午', yearFormat: 'YYYY年', previousYear: '上一年 (Control鍵加左方向鍵)', diff --git a/tests/__snapshots__/panel.spec.tsx.snap b/tests/__snapshots__/panel.spec.tsx.snap index 34125971b..f0e0b92e4 100644 --- a/tests/__snapshots__/panel.spec.tsx.snap +++ b/tests/__snapshots__/panel.spec.tsx.snap @@ -13,17 +13,15 @@ exports[`Picker.Panel append cell with cellRender in date 1`] = ` class="rc-picker-header" >
    - + - + - + - + - + - + - +