diff --git a/client/src/components/shared/CustomDateTimePicker.test.tsx b/client/src/components/shared/CustomDateTimePicker.test.tsx index e8984141c..454b808da 100644 --- a/client/src/components/shared/CustomDateTimePicker.test.tsx +++ b/client/src/components/shared/CustomDateTimePicker.test.tsx @@ -121,9 +121,9 @@ describe('CustomDatePicker', () => { render(); await user.click(screen.getByRole('button', { name: /enter date manually/i })); const input = screen.getByPlaceholderText('DD.MM.YYYY'); - fireEvent.change(input, { target: { value: '04.07.2026' } }); + fireEvent.change(input, { target: { value: '17.07.2026' } }); fireEvent.keyDown(input, { key: 'Enter' }); - expect(onChange).toHaveBeenCalledWith('2026-07-04'); + expect(onChange).toHaveBeenCalledWith('2026-07-17'); }); it('FE-COMP-DATEPICKER-014: Escape in text input cancels text mode', async () => { diff --git a/client/src/components/shared/CustomDateTimePicker.tsx b/client/src/components/shared/CustomDateTimePicker.tsx index 20fba3506..a4df951b9 100644 --- a/client/src/components/shared/CustomDateTimePicker.tsx +++ b/client/src/components/shared/CustomDateTimePicker.tsx @@ -84,13 +84,32 @@ export function CustomDatePicker({ else setYearPageStart((s) => s + YEAR_PAGE_SIZE); }; - const prevAriaLabel = view === 'days' ? 'Previous month' : view === 'months' ? 'Previous year' : 'Previous years'; - const nextAriaLabel = view === 'days' ? 'Next month' : view === 'months' ? 'Next year' : 'Next years'; + // prevAriaLabel / nextAriaLabel: + const prevAriaLabel = + view === 'days' + ? t('common.datepicker.prevMonth') + : view === 'months' + ? t('common.datepicker.prevYear') + : t('common.datepicker.prevYears'); + + const nextAriaLabel = + view === 'days' + ? t('common.datepicker.nextMonth') + : view === 'months' + ? t('common.datepicker.nextYear') + : t('common.datepicker.nextYears'); + + // headerAriaLabel: + const headerAriaLabel = + view === 'days' + ? t('common.datepicker.selectMonth') + : view === 'months' + ? t('common.datepicker.selectYear') + : undefined; const monthLabel = new Date(viewYear, viewMonth).toLocaleDateString(locale, { month: 'long', year: 'numeric' }); const yearRangeLabel = `${yearPageStart} – ${yearPageStart + YEAR_PAGE_SIZE - 1}`; const headerLabel = view === 'days' ? monthLabel : view === 'months' ? String(viewYear) : yearRangeLabel; - const headerAriaLabel = view === 'days' ? 'Select month' : view === 'months' ? 'Select year' : undefined; const handleHeaderClick = () => { if (view === 'days') { @@ -160,27 +179,46 @@ export function CustomDatePicker({ const handleTextSubmit = () => { setIsTyping(false); if (!textInput.trim()) return; - // Try to parse various date formats const input = textInput.trim(); - // ISO: 2026-03-29 + + // Try ISO first — always works if (/^\d{4}-\d{2}-\d{2}$/.test(input)) { onChange(input); return; } - // EU: 29.03.2026 or 29/03/2026 - const euMatch = input.match(/^(\d{1,2})[./](\d{1,2})[./](\d{2,4})$/); - if (euMatch) { - const y = euMatch[3].length === 2 ? 2000 + parseInt(euMatch[3]) : parseInt(euMatch[3]); - onChange(`${y}-${String(euMatch[2]).padStart(2, '0')}-${String(euMatch[1]).padStart(2, '0')}`); - return; - } - // Try native Date parse as fallback - const d = new Date(input); - if (!isNaN(d.getTime())) { - onChange( - `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}` - ); + + // Determine field order for active locale via Intl + const parts = new Intl.DateTimeFormat(locale, { day: 'numeric', month: 'numeric', year: 'numeric' }).formatToParts( + new Date(2001, 5, 15) + ); // known date: June 15, 2001 + const order = parts + .filter((p) => ['day', 'month', 'year'].includes(p.type)) + .map((p) => p.type as 'day' | 'month' | 'year'); + + // Strip non-numeric chars (handles RTL marks, dots, slashes, spaces) + const nums = input + .replace(/[^\d]+/g, ' ') + .trim() + .split(/\s+/) + .filter(Boolean); + if (nums.length !== 3) return; + + // nachher: + const get = (field: 'day' | 'month' | 'year') => parseInt(nums[order.indexOf(field)]); + let d = get('day'), + m = get('month'), + y = get('year'); + if (isNaN(d) || isNaN(m) || isNaN(y)) return; + + // If locale order gives impossible month but valid swap, correct it + if (m > 12 && d <= 12) { + const tmp = m; + m = d; + d = tmp; } + const year = y < 100 ? 2000 + y : y; + if (m < 1 || m > 12 || d < 1 || d > 31) return; + onChange(`${year}-${String(m).padStart(2, '0')}-${String(d).padStart(2, '0')}`); }; const gridCellStyle = (selected: boolean, current: boolean): React.CSSProperties => ({ @@ -267,8 +305,8 @@ export function CustomDatePicker({ setTextInput(inputValue || ''); setIsTyping(true); }} - aria-label="Enter date manually" - title="Type a date" + aria-label={t('common.datepicker.enterManually')} + title={t('common.datepicker.typeDate')} style={{ background: 'none', border: '1px solid var(--border-primary)', @@ -301,7 +339,7 @@ export function CustomDatePicker({
{ @@ -543,8 +581,8 @@ export function CustomDatePicker({ setTextInput(inputValue || ''); setIsTyping(true); }} - aria-label="Enter date manually" - title="Type a date" + aria-label={t('common.datepicker.enterManually')} + title={t('common.datepicker.typeDate')} style={{ background: 'none', border: 'none', @@ -570,7 +608,7 @@ export function CustomDatePicker({ onChange(''); setOpen(false); }} - aria-label="Clear date" + aria-label={t('common.datepicker.clearDate')} style={{ background: 'none', border: 'none', diff --git a/shared/src/i18n/ar/common.ts b/shared/src/i18n/ar/common.ts index 3c0181bd8..e475fbaab 100644 --- a/shared/src/i18n/ar/common.ts +++ b/shared/src/i18n/ar/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.justNow': 'just now', // en-fallback 'common.hoursAgo': '{count}h ago', // en-fallback 'common.daysAgo': '{count}d ago', // en-fallback + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/br/common.ts b/shared/src/i18n/br/common.ts index 06c789e57..ea2ac064c 100644 --- a/shared/src/i18n/br/common.ts +++ b/shared/src/i18n/br/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.justNow': 'agora mesmo', 'common.hoursAgo': 'há {count}h', 'common.daysAgo': 'há {count}d', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/cs/common.ts b/shared/src/i18n/cs/common.ts index cb53ab46e..e3b6a1221 100644 --- a/shared/src/i18n/cs/common.ts +++ b/shared/src/i18n/cs/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.justNow': 'právě teď', 'common.hoursAgo': 'před {count} h', 'common.daysAgo': 'před {count} d', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/de/common.ts b/shared/src/i18n/de/common.ts index 3fea975b3..9789532bd 100644 --- a/shared/src/i18n/de/common.ts +++ b/shared/src/i18n/de/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.reset': 'Zurücksetzen', 'common.copy': 'Kopieren', 'common.copied': 'Kopiert', + 'common.datepicker.prevMonth': 'Vormonat', + 'common.datepicker.nextMonth': 'Nächster Monat', + 'common.datepicker.prevYear': 'Vorjahr', + 'common.datepicker.nextYear': 'Nächstes Jahr', + 'common.datepicker.prevYears': 'Vorherige Jahre', + 'common.datepicker.nextYears': 'Nächste Jahre', + 'common.datepicker.selectMonth': 'Monat auswählen', + 'common.datepicker.selectYear': 'Jahr auswählen', + 'common.datepicker.enterManually': 'Datum manuell eingeben', + 'common.datepicker.typeDate': 'Datum eingeben', + 'common.datepicker.dialog': 'Datumsauswahl', + 'common.datepicker.clearDate': 'Datum löschen', }; export default common; diff --git a/shared/src/i18n/en/common.ts b/shared/src/i18n/en/common.ts index ea5cd89e2..3ea75de00 100644 --- a/shared/src/i18n/en/common.ts +++ b/shared/src/i18n/en/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.collapse': 'Collapse', 'common.copy': 'Copy', 'common.copied': 'Copied', + 'common.datepicker.prevMonth': 'Previous month', + 'common.datepicker.nextMonth': 'Next month', + 'common.datepicker.prevYear': 'Previous year', + 'common.datepicker.nextYear': 'Next year', + 'common.datepicker.prevYears': 'Previous years', + 'common.datepicker.nextYears': 'Next years', + 'common.datepicker.selectMonth': 'Select month', + 'common.datepicker.selectYear': 'Select year', + 'common.datepicker.enterManually': 'Enter date manually', + 'common.datepicker.typeDate': 'Type a date', + 'common.datepicker.dialog': 'Date picker', + 'common.datepicker.clearDate': 'Clear date', }; export default common; diff --git a/shared/src/i18n/es/common.ts b/shared/src/i18n/es/common.ts index 94cedffe3..3f36e6cdf 100644 --- a/shared/src/i18n/es/common.ts +++ b/shared/src/i18n/es/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.justNow': 'justo ahora', 'common.hoursAgo': 'hace {count}h', 'common.daysAgo': 'hace {count}d', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/fr/common.ts b/shared/src/i18n/fr/common.ts index fb3d1ca78..1cd07af5c 100644 --- a/shared/src/i18n/fr/common.ts +++ b/shared/src/i18n/fr/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.justNow': "à l'instant", 'common.hoursAgo': 'il y a {count}h', 'common.daysAgo': 'il y a {count}j', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/gr/common.ts b/shared/src/i18n/gr/common.ts index 6552c9cfd..828f17f6d 100644 --- a/shared/src/i18n/gr/common.ts +++ b/shared/src/i18n/gr/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.collapse': 'Σύμπτυξη', 'common.copy': 'Αντιγραφή', 'common.copied': 'Αντιγράφηκε', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/hu/common.ts b/shared/src/i18n/hu/common.ts index e5852cadd..d19190602 100644 --- a/shared/src/i18n/hu/common.ts +++ b/shared/src/i18n/hu/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.justNow': 'az imént', 'common.hoursAgo': '{count} órája', 'common.daysAgo': '{count} napja', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/id/common.ts b/shared/src/i18n/id/common.ts index d21f40849..9640bed1e 100644 --- a/shared/src/i18n/id/common.ts +++ b/shared/src/i18n/id/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.collapse': 'Ciutkan', 'common.copy': 'Salin', 'common.copied': 'Disalin', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/it/common.ts b/shared/src/i18n/it/common.ts index de5531391..b4c4e80a2 100644 --- a/shared/src/i18n/it/common.ts +++ b/shared/src/i18n/it/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.justNow': 'proprio ora', 'common.hoursAgo': '{count}h fa', 'common.daysAgo': '{count}g fa', + 'common.datepicker.prevMonth': 'Mese precedente', + 'common.datepicker.nextMonth': 'Mese prossimo', + 'common.datepicker.prevYear': 'Anno precedente', + 'common.datepicker.nextYear': 'Anno prossimo', + 'common.datepicker.prevYears': 'Anni precedenti', + 'common.datepicker.nextYears': 'Anni prossimi', + 'common.datepicker.selectMonth': 'Seleziona mese', + 'common.datepicker.selectYear': 'Seleziona anno', + 'common.datepicker.enterManually': 'Inserisci la data manualmente', + 'common.datepicker.typeDate': 'Inserisci una data', + 'common.datepicker.dialog': 'Selettore di date', + 'common.datepicker.clearDate': 'Cancella data', }; export default common; diff --git a/shared/src/i18n/ko/common.ts b/shared/src/i18n/ko/common.ts index 70edd4501..f1ed95a9f 100644 --- a/shared/src/i18n/ko/common.ts +++ b/shared/src/i18n/ko/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.collapse': '접기', 'common.copy': '복사', 'common.copied': '복사됨', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/nl/common.ts b/shared/src/i18n/nl/common.ts index c7aa81734..1242728b0 100644 --- a/shared/src/i18n/nl/common.ts +++ b/shared/src/i18n/nl/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.justNow': 'zojuist', 'common.hoursAgo': '{count}u geleden', 'common.daysAgo': '{count}d geleden', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/pl/common.ts b/shared/src/i18n/pl/common.ts index 349fa25b7..7fc91fa70 100644 --- a/shared/src/i18n/pl/common.ts +++ b/shared/src/i18n/pl/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.justNow': 'przed chwilą', 'common.hoursAgo': '{count} godz. temu', 'common.daysAgo': '{count} dn. temu', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/ru/common.ts b/shared/src/i18n/ru/common.ts index 73c255fd1..e921cc4a9 100644 --- a/shared/src/i18n/ru/common.ts +++ b/shared/src/i18n/ru/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.justNow': 'только что', 'common.hoursAgo': '{count} ч назад', 'common.daysAgo': '{count} д назад', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/tr/common.ts b/shared/src/i18n/tr/common.ts index f95547566..bf78024ae 100644 --- a/shared/src/i18n/tr/common.ts +++ b/shared/src/i18n/tr/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.collapse': 'Daralt', 'common.copy': 'Kopyala', 'common.copied': 'Kopyalandı', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/uk/common.ts b/shared/src/i18n/uk/common.ts index 3b19358d8..61f3cccb3 100644 --- a/shared/src/i18n/uk/common.ts +++ b/shared/src/i18n/uk/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.justNow': 'щойно', 'common.hoursAgo': '{count} год. тому', 'common.daysAgo': '{count} дн. тому', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/zh-TW/common.ts b/shared/src/i18n/zh-TW/common.ts index da543769a..9db57cab0 100644 --- a/shared/src/i18n/zh-TW/common.ts +++ b/shared/src/i18n/zh-TW/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.justNow': '剛剛', 'common.hoursAgo': '{count}小時前', 'common.daysAgo': '{count}天前', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common; diff --git a/shared/src/i18n/zh/common.ts b/shared/src/i18n/zh/common.ts index d335d6b0c..6ad62f4b7 100644 --- a/shared/src/i18n/zh/common.ts +++ b/shared/src/i18n/zh/common.ts @@ -50,5 +50,17 @@ const common: TranslationStrings = { 'common.justNow': '刚刚', 'common.hoursAgo': '{count}小时前', 'common.daysAgo': '{count}天前', + 'common.datepicker.prevMonth': 'Previous month', // en-fallback + 'common.datepicker.nextMonth': 'Next month', // en-fallback + 'common.datepicker.prevYear': 'Previous year', // en-fallback + 'common.datepicker.nextYear': 'Next year', // en-fallback + 'common.datepicker.prevYears': 'Previous years', // en-fallback + 'common.datepicker.nextYears': 'Next years', // en-fallback + 'common.datepicker.selectMonth': 'Select month', // en-fallback + 'common.datepicker.selectYear': 'Select year', // en-fallback + 'common.datepicker.enterManually': 'Enter date manually', // en-fallback + 'common.datepicker.typeDate': 'Type a date', // en-fallback + 'common.datepicker.dialog': 'Date picker', // en-fallback + 'common.datepicker.clearDate': 'Clear date', // en-fallback }; export default common;