${appointmentData.tex
.expect(appointment.getAriaLabel())
.eql('App 1: February 1, 2021, 12:00 PM - 1:00 PM')
.expect(await appointment.getAriaDescription())
- .eql('Group: resource1; Group 1: resource1');
+ .contains('Group: resource1; Group 1: resource1');
await a11yCheck(t, a11yCheckConfig, '#container');
}).before(async () => {
@@ -134,7 +134,7 @@ const appointmentTemplate = ({ appointmentData }) => `
${appointmentData.tex
.expect(appointment.getAriaLabel())
.eql('App 1: February 1, 2021, 12:00 PM - 1:00 PM')
.expect(await appointment.getAriaDescription())
- .eql('Group: resource11, resource21; Group 1: resource11; Group 2: resource21, resource22');
+ .contains('Group: resource11, resource21; Group 1: resource11; Group 2: resource21, resource22');
await a11yCheck(t, a11yCheckConfig, '#container');
}).before(async () => {
diff --git a/e2e/testcafe-devextreme/tests/accessibility/scheduler/scheduler.ts b/e2e/testcafe-devextreme/tests/accessibility/scheduler/scheduler.ts
index 072aafdf3f48..745573effa48 100644
--- a/e2e/testcafe-devextreme/tests/accessibility/scheduler/scheduler.ts
+++ b/e2e/testcafe-devextreme/tests/accessibility/scheduler/scheduler.ts
@@ -13,7 +13,7 @@ test('Scheduler should have right aria attributes after view changed', async (t)
await t.expect(scheduler.element.getAttribute('aria-label')).contains('Scheduler. Month view');
await t.expect(scheduler.getGeneralStatusContainer().textContent).contains('Scheduler. Month view');
- await t.expect(scheduler.element.getAttribute('role')).eql('group');
+ await t.expect(scheduler.element.getAttribute('role')).eql('application');
await scheduler.option('currentView', 'week');
diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/keyboardNavigation/appointments.ts b/e2e/testcafe-devextreme/tests/scheduler/common/keyboardNavigation/appointments.ts
new file mode 100644
index 000000000000..e9e97e80d4d4
--- /dev/null
+++ b/e2e/testcafe-devextreme/tests/scheduler/common/keyboardNavigation/appointments.ts
@@ -0,0 +1,98 @@
+import Scheduler from 'devextreme-testcafe-models/scheduler';
+import { ClientFunction } from 'testcafe';
+import url from '../../../../helpers/getPageUrl';
+import { createWidget } from '../../../../helpers/createWidget';
+import { getDocumentScrollTop } from '../../../../helpers/domUtils';
+
+fixture.disablePageReloads`KeyboardNavigation.Appointments`
+ .page(url(__dirname, '../../../container.html'));
+
+const SCHEDULER_SELECTOR = '#container';
+
+test('Document should not scroll on \'End\' press when appointment is focused', async (t) => {
+ const scheduler = new Scheduler(SCHEDULER_SELECTOR);
+
+ await t.click(scheduler.getAppointment('Appointment 1').element);
+
+ const expectedScrollTop = await getDocumentScrollTop();
+
+ await t
+ .pressKey('End')
+ .expect(getDocumentScrollTop()).eql(expectedScrollTop);
+}).before(async () => {
+ await ClientFunction(() => {
+ document.body.style.height = '2000px';
+ })();
+
+ await createWidget('dxScheduler', {
+ dataSource: [
+ {
+ text: 'Appointment 1',
+ startDate: new Date(2015, 1, 9, 8),
+ endDate: new Date(2015, 1, 9, 9),
+ },
+ {
+ text: 'Appointment 2',
+ startDate: new Date(2015, 1, 9, 10),
+ endDate: new Date(2015, 1, 9, 11),
+ },
+ {
+ text: 'Appointment 3',
+ startDate: new Date(2015, 1, 9, 12),
+ endDate: new Date(2015, 1, 9, 13),
+ },
+ ],
+ height: 300,
+ currentView: 'day',
+ currentDate: new Date(2015, 1, 9),
+ });
+}).after(async () => {
+ await ClientFunction(() => {
+ document.body.style.height = '';
+ })();
+});
+
+test('Document should not scroll on \'Home\' press when appointment is focused', async (t) => {
+ const scheduler = new Scheduler(SCHEDULER_SELECTOR);
+
+ await t
+ .scroll(0, 100)
+ .click(scheduler.getAppointment('Appointment 1').element);
+
+ const expectedScrollTop = await getDocumentScrollTop();
+
+ await t
+ .pressKey('Home')
+ .expect(getDocumentScrollTop()).eql(expectedScrollTop);
+}).before(async () => {
+ await ClientFunction(() => {
+ document.body.style.height = '2000px';
+ })();
+
+ await createWidget('dxScheduler', {
+ dataSource: [
+ {
+ text: 'Appointment 1',
+ startDate: new Date(2015, 1, 9, 8),
+ endDate: new Date(2015, 1, 9, 9),
+ },
+ {
+ text: 'Appointment 2',
+ startDate: new Date(2015, 1, 9, 10),
+ endDate: new Date(2015, 1, 9, 11),
+ },
+ {
+ text: 'Appointment 3',
+ startDate: new Date(2015, 1, 9, 12),
+ endDate: new Date(2015, 1, 9, 13),
+ },
+ ],
+ height: 300,
+ currentView: 'day',
+ currentDate: new Date(2015, 1, 9),
+ });
+}).after(async () => {
+ await ClientFunction(() => {
+ document.body.style.height = '';
+ })();
+});
diff --git a/packages/devextreme/js/__internal/scheduler/__tests__/__mock__/model/appointment.ts b/packages/devextreme/js/__internal/scheduler/__tests__/__mock__/model/appointment.ts
index 06ec245aaac9..4a5cf02fd5cd 100644
--- a/packages/devextreme/js/__internal/scheduler/__tests__/__mock__/model/appointment.ts
+++ b/packages/devextreme/js/__internal/scheduler/__tests__/__mock__/model/appointment.ts
@@ -8,9 +8,11 @@ export interface AppointmentModel
{
getText: () => string;
getDisplayDate: () => string;
getAriaLabel: () => string;
+ getAriaDescription: () => string;
getGeometry: () => Position;
getColor: (view: string) => string | undefined;
getSnapshot: () => object;
+ isFocused: () => boolean;
}
const getColor = (appointment: HTMLDivElement): string => appointment.style.backgroundColor;
@@ -45,6 +47,11 @@ export const createAppointmentModel = (
getText: () => getText(element),
getDisplayDate: () => getDisplayDate(element),
getAriaLabel: () => element?.getAttribute('aria-label') ?? '',
+ getAriaDescription: (): string => {
+ const id = element?.getAttribute('aria-describedby') ?? '';
+ const descriptionElement = id ? document.getElementById(id) : null;
+ return descriptionElement?.textContent ?? '';
+ },
getGeometry: () => getGeometry(element),
getColor(view: string): string | undefined {
if (!element) {
@@ -60,4 +67,5 @@ export const createAppointmentModel = (
date: getDisplayDate(element),
...getGeometry(element),
}),
+ isFocused: () => element?.classList.contains('dx-state-focused') ?? false,
});
diff --git a/packages/devextreme/js/__internal/scheduler/__tests__/appointments.test.ts b/packages/devextreme/js/__internal/scheduler/__tests__/appointments.test.ts
index e50e51e78830..b02f955123f1 100644
--- a/packages/devextreme/js/__internal/scheduler/__tests__/appointments.test.ts
+++ b/packages/devextreme/js/__internal/scheduler/__tests__/appointments.test.ts
@@ -1,16 +1,26 @@
import {
- afterEach, describe, expect, it, jest,
+ afterEach, beforeEach, describe, expect, it, jest,
} from '@jest/globals';
+import messageLocalization from '@js/common/core/localization/message';
+import $ from '@js/core/renderer';
import { createScheduler } from './__mock__/create_scheduler';
import { setupSchedulerTestEnvironment } from './__mock__/m_mock_scheduler';
describe('Appointments', () => {
+ beforeEach(() => {
+ setupSchedulerTestEnvironment();
+ });
+
afterEach(() => {
+ const $scheduler = $('.dx-scheduler');
+ // @ts-expect-error
+ $scheduler.dxScheduler('dispose');
+ document.body.innerHTML = '';
jest.useRealTimers();
});
+
it('All-day appointment should not be resizable if current view is "day"', async () => {
- setupSchedulerTestEnvironment();
const { POM } = await createScheduler({
dataSource: [{
text: 'Appointment 1',
@@ -27,7 +37,6 @@ describe('Appointments', () => {
});
it('should display "(No subject)" for appointments without title', async () => {
- setupSchedulerTestEnvironment({ height: 200 });
const appointmentWithoutTitle = {
startDate: new Date(2017, 4, 9, 9, 30),
endDate: new Date(2017, 4, 9, 11),
@@ -50,7 +59,6 @@ describe('Appointments', () => {
});
it('should display "(No subject)" in tooltip for appointments without title', async () => {
- setupSchedulerTestEnvironment({ height: 200 });
const appointmentWithoutTitle = {
startDate: new Date(2017, 4, 9, 9, 30),
endDate: new Date(2017, 4, 9, 11),
@@ -81,4 +89,172 @@ describe('Appointments', () => {
expect(tooltipTitleElement?.textContent?.trim()).toBe('(No subject)');
}
});
+
+ describe('Appointment aria attributes', () => {
+ const deleteHotkeyText = messageLocalization.format('dxScheduler-hotkeysAriaDescription-delete');
+ const homeEndHotkeysText = messageLocalization.format('dxScheduler-hotkeysAriaDescription-homeEnd');
+
+ it('should have correct aria-describedby when editing = false', async () => {
+ const { POM } = await createScheduler({
+ dataSource: [{
+ text: 'Appointment 1',
+ startDate: new Date(2015, 1, 9, 8),
+ endDate: new Date(2015, 1, 9, 9),
+ }],
+ currentView: 'day',
+ currentDate: new Date(2015, 1, 9, 8),
+ editing: false,
+ });
+
+ const appointment = POM.getAppointment();
+ expect(appointment.getAriaDescription()).toBe(homeEndHotkeysText);
+ });
+
+ it('should have correct aria-describedby when allowUpdating = true', async () => {
+ const { POM } = await createScheduler({
+ dataSource: [{
+ text: 'Appointment 1',
+ startDate: new Date(2015, 1, 9, 8),
+ endDate: new Date(2015, 1, 9, 9),
+ }],
+ currentView: 'day',
+ currentDate: new Date(2015, 1, 9, 8),
+ editing: {
+ allowUpdating: true,
+ },
+ });
+
+ const appointment = POM.getAppointment();
+ expect(appointment.getAriaDescription()).toBe(`${deleteHotkeyText}; ${homeEndHotkeysText}`);
+ });
+
+ it('should have correct aria-describedby when allowUpdating = true and allowDeleting = false', async () => {
+ const { POM } = await createScheduler({
+ dataSource: [{
+ text: 'Appointment 1',
+ startDate: new Date(2015, 1, 9, 8),
+ endDate: new Date(2015, 1, 9, 9),
+ }],
+ currentView: 'day',
+ currentDate: new Date(2015, 1, 9, 8),
+ editing: {
+ allowUpdating: true,
+ allowDeleting: false,
+ },
+ });
+
+ const appointment = POM.getAppointment();
+ expect(appointment.getAriaDescription()).toBe(homeEndHotkeysText);
+ });
+
+ it('should have correct aria-describedby when allowDeleting is updated', async () => {
+ const { scheduler, POM } = await createScheduler({
+ dataSource: [{
+ text: 'Appointment 1',
+ startDate: new Date(2015, 1, 9, 8),
+ endDate: new Date(2015, 1, 9, 9),
+ }],
+ currentView: 'day',
+ currentDate: new Date(2015, 1, 9, 8),
+ editing: {
+ allowUpdating: true,
+ allowDeleting: false,
+ },
+ });
+
+ scheduler.option('editing.allowDeleting', true);
+ await new Promise(process.nextTick);
+
+ const appointment = POM.getAppointment();
+ expect(appointment.getAriaDescription()).toBe(`${deleteHotkeyText}; ${homeEndHotkeysText}`);
+ });
+ });
+
+ describe('Keyboard Navigation', () => {
+ const dataSource = [
+ {
+ text: 'Appointment 1',
+ startDate: new Date(2015, 1, 9, 8),
+ endDate: new Date(2015, 1, 9, 9),
+ },
+ {
+ text: 'Appointment 2',
+ startDate: new Date(2015, 1, 9, 10),
+ endDate: new Date(2015, 1, 9, 11),
+ },
+ {
+ text: 'Appointment 3',
+ startDate: new Date(2015, 1, 9, 12),
+ endDate: new Date(2015, 1, 9, 13),
+ },
+ ];
+
+ it('should focus first appointment on Home', async () => {
+ const { POM, keydown } = await createScheduler({
+ dataSource,
+ currentView: 'day',
+ currentDate: new Date(2015, 1, 9),
+ });
+
+ const appointments = POM.getAppointments();
+ const firstAppointment = appointments[0];
+ const lastAppointment = appointments[2];
+
+ lastAppointment.element.focus();
+ keydown(lastAppointment.element, 'Home');
+
+ expect(firstAppointment.isFocused()).toBe(true);
+ expect(lastAppointment.isFocused()).toBe(false);
+ });
+
+ it('should focus last appointment on End', async () => {
+ const { POM, keydown } = await createScheduler({
+ dataSource,
+ currentView: 'day',
+ currentDate: new Date(2015, 1, 9),
+ });
+
+ const appointments = POM.getAppointments();
+ const firstAppointment = appointments[0];
+ const lastAppointment = appointments[2];
+
+ firstAppointment.element.focus();
+ keydown(firstAppointment.element, 'End');
+
+ expect(firstAppointment.isFocused()).toBe(false);
+ expect(lastAppointment.isFocused()).toBe(true);
+ });
+
+ it('should not change focus when Home is pressed on the first appointment', async () => {
+ const { POM, keydown } = await createScheduler({
+ dataSource,
+ currentView: 'day',
+ currentDate: new Date(2015, 1, 9),
+ });
+
+ const appointments = POM.getAppointments();
+ const firstAppointment = appointments[0];
+
+ firstAppointment.element.focus();
+ keydown(firstAppointment.element, 'Home');
+
+ expect(firstAppointment.isFocused()).toBe(true);
+ });
+
+ it('should not change focus when End is pressed on the last appointment', async () => {
+ const { POM, keydown } = await createScheduler({
+ dataSource,
+ currentView: 'day',
+ currentDate: new Date(2015, 1, 9),
+ });
+
+ const appointments = POM.getAppointments();
+ const lastAppointment = appointments[2];
+
+ lastAppointment.element.focus();
+ keydown(lastAppointment.element, 'End');
+
+ expect(lastAppointment.isFocused()).toBe(true);
+ });
+ });
});
diff --git a/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_appointment.ts b/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_appointment.ts
index d92be8078b3b..b00534f0106a 100644
--- a/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_appointment.ts
+++ b/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_appointment.ts
@@ -193,15 +193,15 @@ export class Appointment extends DOMComponent {
// eslint-disable-next-line no-void
void getAriaDescription(this.option())
.then((text) => {
- if (text) {
- const id = `dx-${new Guid()}`;
- const $description = $element.find(`.${APPOINTMENT_CONTENT_CLASSES.ARIA_DESCRIPTION}`);
-
- if ($description) {
- $element.attr('aria-describedby', id);
- $description.text(text).attr('id', id);
- }
+ const $description = $element.find(`.${APPOINTMENT_CONTENT_CLASSES.ARIA_DESCRIPTION}`);
+
+ if (!text || !$description.length) {
+ return;
}
+
+ const id = `dx-${new Guid()}`;
+ $element.attr('aria-describedby', id);
+ $description.text(text).attr('id', id);
});
}
diff --git a/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_types.ts b/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_types.ts
index 42daf2e45316..4b0e3bd34090 100644
--- a/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_types.ts
+++ b/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_types.ts
@@ -14,6 +14,7 @@ export interface AppointmentProperties extends Record {
direction: Orientation;
allowResize: boolean;
allowDrag: boolean;
+ allowDelete: boolean;
allDay: boolean;
reduced: string;
isCompact: boolean;
diff --git a/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.test.ts b/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.test.ts
index d3c80cffcf0c..f8423acebe58 100644
--- a/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.test.ts
+++ b/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.test.ts
@@ -83,7 +83,7 @@ describe('Appointment text utils', () => {
expect(await getAriaDescription({
...options,
groupTexts: [],
- })).toBe('Assignee: Samantha Bright');
+ })).toContain('Assignee: Samantha Bright');
});
it('should return text with multiple resources', async () => {
@@ -94,7 +94,7 @@ describe('Appointment text utils', () => {
expect(await getAriaDescription({
...options,
groupTexts: [],
- })).toBe('Assignee: Samantha Bright, John Heart; Room: Room 1');
+ })).toContain('Assignee: Samantha Bright, John Heart; Room: Room 1');
});
it('should return text with group', async () => {
@@ -103,7 +103,7 @@ describe('Appointment text utils', () => {
...options,
groupIndex: 0,
groupTexts: ['Samantha Bright'],
- })).toBe('Group: Samantha Bright');
+ })).toContain('Group: Samantha Bright');
});
it('should return text with multiple groups and resources', async () => {
@@ -115,7 +115,7 @@ describe('Appointment text utils', () => {
...options,
groupIndex: 1,
groupTexts: ['Samantha Bright', 'Room 1'],
- })).toBe('Group: Samantha Bright, Room 1; Assignee: Samantha Bright; Room: Room 1, Room 2');
+ })).toContain('Group: Samantha Bright, Room 1; Assignee: Samantha Bright; Room: Room 1, Room 2');
});
});
});
diff --git a/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.ts b/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.ts
index 3c8efe798b7c..610a7112ea29 100644
--- a/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.ts
+++ b/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.ts
@@ -68,7 +68,7 @@ const getGroupText = (options: AppointmentProperties): string => {
const groupText = options.groupTexts.join(', ');
// @ts-ignore @ts-expect-error
- return messageLocalization.format('dxScheduler-appointmentAriaLabel-group', groupText);
+ return messageLocalization.format('dxScheduler-appointmentAriaDescription-group', groupText);
};
const getResourceText = async (options: AppointmentProperties): Promise => {
@@ -80,10 +80,14 @@ const getResourceText = async (options: AppointmentProperties): Promise => {
const resources = await getResourceText(options);
- const texts = [
+ const text = [
getGroupText(options),
...resources,
- ].filter(Boolean);
+ options.allowDelete
+ ? messageLocalization.format('dxScheduler-hotkeysAriaDescription-delete')
+ : null,
+ messageLocalization.format('dxScheduler-hotkeysAriaDescription-homeEnd'),
+ ].filter(Boolean).join('; ');
- return texts.join('; ');
+ return text;
};
diff --git a/packages/devextreme/js/__internal/scheduler/appointments/m_appointment_collection.ts b/packages/devextreme/js/__internal/scheduler/appointments/m_appointment_collection.ts
index a03bf2f4aafc..f1a32bc4f6c3 100644
--- a/packages/devextreme/js/__internal/scheduler/appointments/m_appointment_collection.ts
+++ b/packages/devextreme/js/__internal/scheduler/appointments/m_appointment_collection.ts
@@ -223,6 +223,7 @@ class SchedulerAppointments extends CollectionWidget {
break;
case 'allowDrag':
case 'allowResize':
+ case 'allowDelete':
case 'allowAllDayResize':
(this as any)._cleanFocusState();
this.forceRepaintAllAppointments(this.option('items') || []);
@@ -232,8 +233,6 @@ class SchedulerAppointments extends CollectionWidget {
this._kbn.resetTabIndex($(args.value));
super._optionChanged(args);
break;
- case 'allowDelete':
- break;
case 'focusStateEnabled':
this._clearDropDownItemsElements();
this.renderDropDownAppointments();
@@ -619,6 +618,7 @@ class SchedulerAppointments extends CollectionWidget {
): void {
const allowResize = this.option('allowResize') && !settings.skipResizing;
const allowDrag = this.option('allowDrag');
+ const allowDelete = this.option('allowDelete');
const { allDay } = settings;
const { groups, groupsLeafs, resourceById } = this.getResourceManager();
const isGroupByDate = this.option('groupByDate');
@@ -631,6 +631,7 @@ class SchedulerAppointments extends CollectionWidget {
direction: settings.direction || 'vertical',
allowResize,
allowDrag,
+ allowDelete,
allDay,
// NOTE: hide reduced icon for grouped by date workspace
reduced: isGroupByDate ? undefined : settings.reduced,
diff --git a/packages/devextreme/js/__internal/scheduler/appointments/m_appointments_kbn.ts b/packages/devextreme/js/__internal/scheduler/appointments/m_appointments_kbn.ts
index 88124bb7beb2..56c01578c029 100644
--- a/packages/devextreme/js/__internal/scheduler/appointments/m_appointments_kbn.ts
+++ b/packages/devextreme/js/__internal/scheduler/appointments/m_appointments_kbn.ts
@@ -59,6 +59,8 @@ export class AppointmentsKeyboardNavigation {
escape: this.escHandler.bind(this),
del: this.delHandler.bind(this),
tab: this.tabHandler.bind(this),
+ home: this.homeHandler.bind(this),
+ end: this.endHandler.bind(this),
};
}
@@ -87,8 +89,7 @@ export class AppointmentsKeyboardNavigation {
$nextAppointment = this.getFocusableItemBySortedIndex(index);
}
- this.resetTabIndex($nextAppointment);
- eventsEngine.trigger($nextAppointment, 'focus');
+ this.focusItem($nextAppointment);
}
}
@@ -115,4 +116,33 @@ export class AppointmentsKeyboardNavigation {
resizableInstance._toggleResizingClass(false);
}
}
+
+ private homeHandler(e: DxEvent): void {
+ e.preventDefault();
+
+ const $firstItem = this.getFocusableItems().first();
+
+ if (this.$focusedItem && $firstItem.is(this.$focusedItem)) {
+ return;
+ }
+
+ this.focusItem($firstItem);
+ }
+
+ private endHandler(e: DxEvent): void {
+ e.preventDefault();
+
+ const $lastItem = this.getFocusableItems().last();
+
+ if (this.$focusedItem && $lastItem.is(this.$focusedItem)) {
+ return;
+ }
+
+ this.focusItem($lastItem);
+ }
+
+ private focusItem($item: dxElementWrapper): void {
+ this.resetTabIndex($item);
+ eventsEngine.trigger($item, 'focus');
+ }
}
diff --git a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts
index 0c635929bded..23fdd2f53413 100644
--- a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts
+++ b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts
@@ -991,7 +991,7 @@ class Scheduler extends SchedulerOptionsBaseWidget {
this._a11yStatus = createA11yStatusContainer();
this._a11yStatus.prependTo(this.$element());
// @ts-expect-error
- this.setAria({ role: 'group' });
+ this.setAria({ role: 'application' });
}
_initMarkupOnResourceLoaded() {
diff --git a/packages/devextreme/js/localization/messages/ar.json b/packages/devextreme/js/localization/messages/ar.json
index 2fd9446ec636..ccf0f4475004 100644
--- a/packages/devextreme/js/localization/messages/ar.json
+++ b/packages/devextreme/js/localization/messages/ar.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/bg.json b/packages/devextreme/js/localization/messages/bg.json
index 92b304373d28..1b70be7dad7f 100644
--- a/packages/devextreme/js/localization/messages/bg.json
+++ b/packages/devextreme/js/localization/messages/bg.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/ca.json b/packages/devextreme/js/localization/messages/ca.json
index 2e96b054aebe..7921028cacee 100644
--- a/packages/devextreme/js/localization/messages/ca.json
+++ b/packages/devextreme/js/localization/messages/ca.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/cs.json b/packages/devextreme/js/localization/messages/cs.json
index 7d6dce123b91..6e031dab8034 100644
--- a/packages/devextreme/js/localization/messages/cs.json
+++ b/packages/devextreme/js/localization/messages/cs.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/da.json b/packages/devextreme/js/localization/messages/da.json
index 000af0913d61..5153d6a8b1d6 100644
--- a/packages/devextreme/js/localization/messages/da.json
+++ b/packages/devextreme/js/localization/messages/da.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Gruppe: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Gruppe: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Tilbagevendende aftale",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Aftaleliste",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/de.json b/packages/devextreme/js/localization/messages/de.json
index 820fbc1bb60e..6479f5b4580c 100644
--- a/packages/devextreme/js/localization/messages/de.json
+++ b/packages/devextreme/js/localization/messages/de.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "Die aktuelle Zeitanzeige ist in der Ansicht sichtbar",
"dxScheduler-ariaLabel-currentIndicator-not-present": "Die aktuelle Zeitanzeige ist auf dem Bildschirm nicht sichtbar",
- "dxScheduler-appointmentAriaLabel-group": "Gruppe: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Gruppe: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Wiederkehrender Termin",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Terminliste",
"dxScheduler-newPopupTitle": "Neuer Termin",
diff --git a/packages/devextreme/js/localization/messages/el.json b/packages/devextreme/js/localization/messages/el.json
index 76963c3d52a5..ba4a6ad7ac70 100644
--- a/packages/devextreme/js/localization/messages/el.json
+++ b/packages/devextreme/js/localization/messages/el.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/en.json b/packages/devextreme/js/localization/messages/en.json
index f8493a9ee8e7..8716c6537340 100644
--- a/packages/devextreme/js/localization/messages/en.json
+++ b/packages/devextreme/js/localization/messages/en.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/es.json b/packages/devextreme/js/localization/messages/es.json
index 34f15c972163..ede810cc4f99 100644
--- a/packages/devextreme/js/localization/messages/es.json
+++ b/packages/devextreme/js/localization/messages/es.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/fa.json b/packages/devextreme/js/localization/messages/fa.json
index c07d06c1503b..f6b212f11cb1 100644
--- a/packages/devextreme/js/localization/messages/fa.json
+++ b/packages/devextreme/js/localization/messages/fa.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/fi.json b/packages/devextreme/js/localization/messages/fi.json
index bfcd789211ca..1a6891fe9b9f 100644
--- a/packages/devextreme/js/localization/messages/fi.json
+++ b/packages/devextreme/js/localization/messages/fi.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/fr.json b/packages/devextreme/js/localization/messages/fr.json
index e75febe222be..9f5726ff0242 100644
--- a/packages/devextreme/js/localization/messages/fr.json
+++ b/packages/devextreme/js/localization/messages/fr.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "L'indicateur de temps actuel est visible dans la vue",
"dxScheduler-ariaLabel-currentIndicator-not-present": "L'indicateur de l'heure actuelle n'est pas visible sur l'écran",
- "dxScheduler-appointmentAriaLabel-group": "Groupe : {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Groupe : {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Rendez-vous récurrent",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Liste des rendez-vous ",
"dxScheduler-newPopupTitle": "Nouveau rendez-vous",
@@ -588,7 +590,6 @@
"dxHtmlEditor-aiCommandChangeTone": "Changer le ton",
"dxHtmlEditor-aiCommandTranslate": "Traduire",
"dxHtmlEditor-aiCommandAskAI": "Demander à l’IA",
-
"dxHtmlEditor-aiCommandChangeStyleFormal": "Formel",
"dxHtmlEditor-aiCommandChangeStyleInformal": "Informel",
"dxHtmlEditor-aiCommandChangeStyleTechnical": "Technique",
@@ -601,13 +602,11 @@
"dxHtmlEditor-aiCommandChangeStyleExpository": "Expositif",
"dxHtmlEditor-aiCommandChangeStyleDescriptive": "Descriptif",
"dxHtmlEditor-aiCommandChangeStyleConversational": "Conversationnel",
-
"dxHtmlEditor-aiCommandChangeToneProfessional": "Professionnel",
"dxHtmlEditor-aiCommandChangeToneCasual": "Décontracté",
"dxHtmlEditor-aiCommandChangeToneStraightforward": "Direct",
"dxHtmlEditor-aiCommandChangeToneConfident": "Confiant",
"dxHtmlEditor-aiCommandChangeToneFriendly": "Amical",
-
"dxHtmlEditor-aiCommandTranslateArabic": "Arabe",
"dxHtmlEditor-aiCommandTranslateChinese": "Chinois",
"dxHtmlEditor-aiCommandTranslateEnglish": "Anglais",
diff --git a/packages/devextreme/js/localization/messages/hu.json b/packages/devextreme/js/localization/messages/hu.json
index 0a07fa405a93..af200ee4bb35 100644
--- a/packages/devextreme/js/localization/messages/hu.json
+++ b/packages/devextreme/js/localization/messages/hu.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/it.json b/packages/devextreme/js/localization/messages/it.json
index d3dec65cba7e..4644b667a500 100644
--- a/packages/devextreme/js/localization/messages/it.json
+++ b/packages/devextreme/js/localization/messages/it.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/ja.json b/packages/devextreme/js/localization/messages/ja.json
index 46ad5ee4dde4..c93f3f37479f 100644
--- a/packages/devextreme/js/localization/messages/ja.json
+++ b/packages/devextreme/js/localization/messages/ja.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/lt.json b/packages/devextreme/js/localization/messages/lt.json
index 604ec07302ce..ed2477d2e04a 100644
--- a/packages/devextreme/js/localization/messages/lt.json
+++ b/packages/devextreme/js/localization/messages/lt.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/lv.json b/packages/devextreme/js/localization/messages/lv.json
index 7c2e65d24e12..ae8abfa6b6a5 100644
--- a/packages/devextreme/js/localization/messages/lv.json
+++ b/packages/devextreme/js/localization/messages/lv.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/nb.json b/packages/devextreme/js/localization/messages/nb.json
index e35b82f3d5ab..e3d2ef5c87b9 100644
--- a/packages/devextreme/js/localization/messages/nb.json
+++ b/packages/devextreme/js/localization/messages/nb.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/nl.json b/packages/devextreme/js/localization/messages/nl.json
index 221a58b307f3..040920019581 100644
--- a/packages/devextreme/js/localization/messages/nl.json
+++ b/packages/devextreme/js/localization/messages/nl.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/pl.json b/packages/devextreme/js/localization/messages/pl.json
index ffbb12ecb54c..b2c58d514d8d 100644
--- a/packages/devextreme/js/localization/messages/pl.json
+++ b/packages/devextreme/js/localization/messages/pl.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/pt.json b/packages/devextreme/js/localization/messages/pt.json
index 11d46de782cc..639f1831179b 100644
--- a/packages/devextreme/js/localization/messages/pt.json
+++ b/packages/devextreme/js/localization/messages/pt.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Grupo: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Grupo: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Compromisso recorrente",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Lista de compromissos",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/ro.json b/packages/devextreme/js/localization/messages/ro.json
index 7a5ffb517ff9..575b8538eb4f 100644
--- a/packages/devextreme/js/localization/messages/ro.json
+++ b/packages/devextreme/js/localization/messages/ro.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/ru.json b/packages/devextreme/js/localization/messages/ru.json
index f6986284fced..11d5d1f13010 100644
--- a/packages/devextreme/js/localization/messages/ru.json
+++ b/packages/devextreme/js/localization/messages/ru.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/sl.json b/packages/devextreme/js/localization/messages/sl.json
index 5d3b0832eaaf..e8af068f4b4e 100644
--- a/packages/devextreme/js/localization/messages/sl.json
+++ b/packages/devextreme/js/localization/messages/sl.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/sv.json b/packages/devextreme/js/localization/messages/sv.json
index 7a140cf3ce4f..fd0c909a8e22 100644
--- a/packages/devextreme/js/localization/messages/sv.json
+++ b/packages/devextreme/js/localization/messages/sv.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "Aktuell tidsindikator visas i vyn",
"dxScheduler-ariaLabel-currentIndicator-not-present": "Aktuell tidsindikator visas inte på skärmen",
- "dxScheduler-appointmentAriaLabel-group": "Grupp: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Grupp: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Återkommande bokning",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Bokningslista",
"dxScheduler-newPopupTitle": "Ny bokning",
diff --git a/packages/devextreme/js/localization/messages/tr.json b/packages/devextreme/js/localization/messages/tr.json
index 76677399dcb6..cb7ad2144c0b 100644
--- a/packages/devextreme/js/localization/messages/tr.json
+++ b/packages/devextreme/js/localization/messages/tr.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/uk.json b/packages/devextreme/js/localization/messages/uk.json
index 31a1f7141d12..3715cda70b12 100644
--- a/packages/devextreme/js/localization/messages/uk.json
+++ b/packages/devextreme/js/localization/messages/uk.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "Індикатор поточного часу відображається у поданні",
"dxScheduler-ariaLabel-currentIndicator-not-present": "Індикатор поточного часу не відображається на екрані",
- "dxScheduler-appointmentAriaLabel-group": "Група: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Група: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Повторювана подія",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Список подій",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/vi.json b/packages/devextreme/js/localization/messages/vi.json
index eb042eeeec46..461a6ed96473 100644
--- a/packages/devextreme/js/localization/messages/vi.json
+++ b/packages/devextreme/js/localization/messages/vi.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/zh-tw.json b/packages/devextreme/js/localization/messages/zh-tw.json
index 3cb9d947df4e..d81a1446f323 100644
--- a/packages/devextreme/js/localization/messages/zh-tw.json
+++ b/packages/devextreme/js/localization/messages/zh-tw.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",
diff --git a/packages/devextreme/js/localization/messages/zh.json b/packages/devextreme/js/localization/messages/zh.json
index 1a90edc4be73..0337590f72b7 100644
--- a/packages/devextreme/js/localization/messages/zh.json
+++ b/packages/devextreme/js/localization/messages/zh.json
@@ -272,8 +272,10 @@
"dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view",
"dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen",
- "dxScheduler-appointmentAriaLabel-group": "Group: {0}",
+ "dxScheduler-appointmentAriaDescription-group": "Group: {0}",
"dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment",
+ "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment",
+ "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment",
"dxScheduler-appointmentListAriaLabel": "Appointment list",
"dxScheduler-newPopupTitle": "New Appointment",