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;