From 671593e594544116b157746a5dabb8b3e76a7a97 Mon Sep 17 00:00:00 2001 From: Masha_Rudenko Date: Mon, 14 Sep 2026 12:43:01 +0300 Subject: [PATCH 1/3] [add] controls property of Calendar - new calendar_controls_config.md page with the property values, the list of controls and code samples - Controls section in the configuration guide and a cross-reference from the Timepicker section - cancel, today and clear labels documented in the calendar locale, with a note that the timepicker Save label belongs to the timepicker locale - related API and article links of the timePicker page made visible instead of markdown comments - the new page registered in the API overview and in the sidebar --- docs/calendar/api/api_overview.md | 1 + docs/calendar/api/calendar_controls_config.md | 115 ++++++++++++++++++ .../api/calendar_timepicker_config.md | 12 +- docs/calendar/configuring.md | 41 ++++++- docs/calendar/localizing_calendar.md | 20 ++- sidebars.js | 1 + 6 files changed, 183 insertions(+), 7 deletions(-) create mode 100644 docs/calendar/api/calendar_controls_config.md diff --git a/docs/calendar/api/api_overview.md b/docs/calendar/api/api_overview.md index 253a3c4d..aa0920b7 100644 --- a/docs/calendar/api/api_overview.md +++ b/docs/calendar/api/api_overview.md @@ -35,6 +35,7 @@ description: You can explore the API of Calendar in the documentation of the DHT | Name | Description | | ------------------------------------------------- | -------------------------------------------------------- | +| [](calendar/api/calendar_controls_config.md) | @getshort(calendar/api/calendar_controls_config.md) | | [](calendar/api/calendar_css_config.md) | @getshort(calendar/api/calendar_css_config.md) | | [](calendar/api/calendar_date_config.md) | @getshort(calendar/api/calendar_date_config.md) | | [](calendar/api/calendar_dateformat_config.md) | @getshort(calendar/api/calendar_dateformat_config.md) | diff --git a/docs/calendar/api/calendar_controls_config.md b/docs/calendar/api/calendar_controls_config.md new file mode 100644 index 00000000..3c086798 --- /dev/null +++ b/docs/calendar/api/calendar_controls_config.md @@ -0,0 +1,115 @@ +--- +sidebar_label: controls +title: JavaScript Calendar - controls Config +description: The controls property adds a toolbar with the clear, today, and timepicker controls to the DHTMLX JavaScript Calendar. Learn how to render the default set or list the controls in your own order, and check the code examples in the DHTMLX Suite docs. +--- + +# controls + +@short: Optional. Adds a toolbar with the clear, today, and timepicker controls to the calendar + +#### Usage + +~~~ts +type TCalendarControls = "clear" | "today" | "timepicker" | "spacer"; + +export interface ICalendarConfig { + // ... existing config + timePicker?: boolean; + controls?: boolean | TCalendarControls[]; +} +~~~ + +@default: false + +@descr: + +The property takes either a boolean value or an array of control names: + + + + + + + + + + + + + + + + +
truerenders the default set of controls, which is equal to ["spacer", "clear", "today"]
falsethe controls are not rendered, no related markup is added to the DOM. The same applies when the property is not specified. A timepicker enabled via the timePicker property is still displayed
arrayrenders the listed controls in the specified order
+ +The array can include the following controls: + + + + + + + + + + + + + + + + + + + + +
"clear"resets the selected date
"today"sets the selected date to today and navigates the calendar to the current month
"timepicker"shows the current time and opens the time selection view. It is equivalent to setting timePicker: true
"spacer"fills in the empty space between the elements of the toolbar
+ +The names of controls are case-insensitive, so **"today"**, **"Today"** and **"TODAY"** are treated as the same control. Unknown names are ignored. + +:::note +Listing the **"timepicker"** control enables the [timePicker](calendar/api/calendar_timepicker_config.md) property as well. If both ways of adding a timepicker are used at once, it is rendered once. +::: + +#### Example + +~~~jsx +// renders the default set of controls +const calendar = new dhx.Calendar("calendar_container", { + controls: true +}); + +// renders the "Today" button only +const calendar = new dhx.Calendar("calendar_container", { + controls: ["today"] +}); + +// renders the timepicker together with the default set of controls +const calendar = new dhx.Calendar("calendar_container", { + timePicker: true, + controls: true +}); + +// adds the timepicker via the controls array +const calendar = new dhx.Calendar("calendar_container", { + controls: ["timepicker", "spacer", "clear", "today"] +}); + +// renders the timepicker once, though it is enabled in two ways +const calendar = new dhx.Calendar("calendar_container", { + timePicker: true, + controls: ["timepicker", "today"] +}); + +// the names of controls are case-insensitive +const calendar = new dhx.Calendar("calendar_container", { + controls: ["TODAY", "Clear", "Spacer"] +}); +~~~ + +**Related sample**: [Calendar. Controls](https://snippet.dhtmlx.com/guakfjw0?mode=wide) + +**Related article**: [Controls](calendar/configuring.md#controls) + +@changelog: added in v9.4 diff --git a/docs/calendar/api/calendar_timepicker_config.md b/docs/calendar/api/calendar_timepicker_config.md index 7df47f9a..03e62fe2 100644 --- a/docs/calendar/api/calendar_timepicker_config.md +++ b/docs/calendar/api/calendar_timepicker_config.md @@ -20,8 +20,14 @@ const calendar = new dhx.Calendar("calendar_container", { @descr: **Related sample**: [Calendar. Timepicker In Calendar](https://snippet.dhtmlx.com/jkbfb202) -You can define the format of displaying time in a timepicker via the [](calendar/api/calendar_timeformat_config.md) property. +You can define the format of displaying time in a timepicker via the [timeFormat](calendar/api/calendar_timeformat_config.md) property. -[comment]: # (@relatedapi:calendar/api/calendar_timeformat_config.md) +A timepicker can also be added as the **"timepicker"** entry of the [controls](calendar/api/calendar_controls_config.md) property. If both ways are used at once, the timepicker is rendered once. -[comment]: # (@related: calendar/how_to_start.md#initialize-calendar calendar/configuring.md#timepicker) +**Related API**: +- [timeFormat](calendar/api/calendar_timeformat_config.md) +- [controls](calendar/api/calendar_controls_config.md) + +**Related articles**: +- [Initialize Calendar](calendar/how_to_start.md#initialize-calendar) +- [Timepicker](calendar/configuring.md#timepicker) diff --git a/docs/calendar/configuring.md b/docs/calendar/configuring.md index 35a40420..2ea43087 100644 --- a/docs/calendar/configuring.md +++ b/docs/calendar/configuring.md @@ -42,6 +42,45 @@ const calendar = new dhx.Calendar("calendar_container", { You can also show the calendar in one of the modes using the [](calendar/api/calendar_showdate_method.md) method. +## Controls + +You can add a toolbar with quick actions to the calendar via the [controls](calendar/api/calendar_controls_config.md) property. By default, the toolbar is not rendered. + +To render the default set of controls, set the property to *true*: + +~~~js +const calendar = new dhx.Calendar("calendar_container", { + controls: true // the same as controls: ["spacer", "clear", "today"] +}); +~~~ + +To choose the controls and their order, pass an array of control names. The names are case-insensitive, and unknown names are ignored: + +~~~js +const calendar = new dhx.Calendar("calendar_container", { + controls: ["clear", "spacer", "today", "timepicker"] +}); +~~~ + +The following controls are available: + +- **"clear"** - resets the selected date +- **"today"** - sets the selected date to today and navigates the calendar to the current month +- **"timepicker"** - shows the current time and opens the time selection view, which is equivalent to setting `timePicker: true` +- **"spacer"** - fills in the empty space between the elements of the toolbar + +The **"clear"**, **"today"** and **"timepicker"** controls are rendered as buttons with the **"link"** view, the same look that the [`view`](toolbar/api/api_button_properties.md) property gives to a [Toolbar](toolbar/button.md) or [Form](form/button.md) button. The **"spacer"** control is a layout element that works like the [Toolbar spacer](toolbar/spacer.md). + +A timepicker can be added either through the `controls` array or through the [timePicker](calendar/api/calendar_timepicker_config.md) property. If you use both ways at once, the timepicker is rendered once. Listing the **"timepicker"** control also enables the `timePicker` property, so the time selection view stays available. + +The labels of the **"clear"** and **"today"** buttons are taken from the calendar locale. The default labels are **"Clear"** and **"Today"**, see the [Localization](calendar/localizing_calendar.md) article for details. + +The controls are placed in the toolbar from left to right in the order they are listed in the array. A timepicker enabled via the [timePicker](calendar/api/calendar_timepicker_config.md) property is placed at the beginning of the toolbar. + +A single control, except for a spacer, stretches to the full width of the calendar. If the toolbar contains several controls and no spacer, the controls keep their own width and are aligned to the left. Use the **"spacer"** control to push the controls that follow it to the right edge. + +**Related sample**: [Calendar. Controls](https://snippet.dhtmlx.com/guakfjw0?mode=wide) + ## Date format There is a possibility to specify the format of dates in the calendar via the [](calendar/api/calendar_dateformat_config.md) property. The default format is "%d/%m/%y". @@ -238,7 +277,7 @@ const calendar = new dhx.Calendar("calendar_container", { ## Timepicker -You can add a timepicker into a calendar by enabling the [](calendar/api/calendar_timepicker_config.md) property. By default, a timepicker uses the 24-hour format. +You can add a timepicker into a calendar by enabling the [](calendar/api/calendar_timepicker_config.md) property. The timepicker can also be added as the **"timepicker"** entry of the [controls](calendar/api/calendar_controls_config.md) property. By default, a timepicker uses the 24-hour format. You can change it to the 12-hour format via the [](calendar/api/calendar_timeformat_config.md) property. It accepts either 12 or 24 value to select the desired time format. ~~~js diff --git a/docs/calendar/localizing_calendar.md b/docs/calendar/localizing_calendar.md index 6ebf4c7c..35ee8081 100644 --- a/docs/calendar/localizing_calendar.md +++ b/docs/calendar/localizing_calendar.md @@ -26,7 +26,12 @@ const en = { daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // full names of days days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", - "Friday", "Saturday"] + "Friday", "Saturday"], + // label of the Cancel button of the month and year views + cancel: "Cancel", + // labels of the calendar controls + today: "Today", + clear: "Clear" }; ~~~ @@ -34,7 +39,7 @@ const en = { To use a different locale, your need to: -- define necessary language settings: provide full and short names of months, as well as full and short names of days of a week: +- define necessary language settings: provide full and short names of months, full and short names of days of a week, and the labels of the buttons, including the ones of the [controls](calendar/api/calendar_controls_config.md), if you use them: ~~~js const de = { @@ -48,7 +53,12 @@ const de = { daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"], // full names of days days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", - "Freitag", "Samstag"] + "Freitag", "Samstag"], + // label of the Cancel button of the month and year views + cancel: "Abbrechen", + // labels of the calendar controls + today: "Heute", + clear: "Löschen" }; ~~~ @@ -59,4 +69,8 @@ dhx.i18n.setLocale("calendar", de); const calendar = new dhx.Calendar("calendar_container"); ~~~ +The `cancel`, `today` and `clear` labels are optional. If they are not specified in a custom locale, the default values are applied. + +The **Save** button of the timepicker is not a part of the calendar locale. Its label is defined by the `save` entry of the timepicker locale. + **Related sample**: [Calendar. Localization](https://snippet.dhtmlx.com/tn40a0w8) diff --git a/sidebars.js b/sidebars.js index 8c31662a..ede47800 100644 --- a/sidebars.js +++ b/sidebars.js @@ -147,6 +147,7 @@ module.exports = { id: "calendar/api/overview/properties_overview" },*/ items: [ + "calendar/api/calendar_controls_config", "calendar/api/calendar_css_config", "calendar/api/calendar_date_config", "calendar/api/calendar_dateformat_config", From 6c1543a249ed69f843876ba295cbf5b6318bd7ea Mon Sep 17 00:00:00 2001 From: Masha_Rudenko Date: Mon, 14 Sep 2026 16:57:33 +0300 Subject: [PATCH 2/3] [update] calendar controls and timepicker docs - Controls section of the calendar configuration guide split into sub-sections, with a screenshot illustrating the position of the controls - descriptive parts reworded to the active voice, API names wrapped in backticks, names of the controls capitalized - new Localization guide for Timepicker covering the hours, minutes and save labels, registered in the sidebar, the features and the overview pages - Controls row added to the calendar features guide - setLocale examples of Colorpicker and Combobox fixed to pass the widget name instead of the container id, otherwise the call does nothing --- docs/calendar/api/calendar_controls_config.md | 12 ++-- .../api/calendar_timepicker_config.md | 8 +-- docs/calendar/configuring.md | 40 ++++++++----- docs/calendar/features.md | 1 + docs/calendar/localizing_calendar.md | 8 +-- docs/colorpicker/localizing_colorpicker.md | 2 +- docs/combobox/localization.md | 2 +- docs/timepicker/features.md | 5 +- docs/timepicker/index.md | 1 + docs/timepicker/localization.md | 54 ++++++++++++++++++ sidebars.js | 1 + static/img/calendar/controls.png | Bin 0 -> 66035 bytes static/img/timepicker/locale.png | Bin 0 -> 5129 bytes 13 files changed, 102 insertions(+), 32 deletions(-) create mode 100644 docs/timepicker/localization.md create mode 100644 static/img/calendar/controls.png create mode 100644 static/img/timepicker/locale.png diff --git a/docs/calendar/api/calendar_controls_config.md b/docs/calendar/api/calendar_controls_config.md index 3c086798..4690b186 100644 --- a/docs/calendar/api/calendar_controls_config.md +++ b/docs/calendar/api/calendar_controls_config.md @@ -6,7 +6,7 @@ description: The controls property adds a toolbar with the clear, today, and tim # controls -@short: Optional. Adds a toolbar with the clear, today, and timepicker controls to the calendar +@short: Optional. Adds a toolbar with the Clear, Today, and Timepicker controls to the calendar #### Usage @@ -34,11 +34,11 @@ The property takes either a boolean value or an array of control names: false - the controls are not rendered, no related markup is added to the DOM. The same applies when the property is not specified. A timepicker enabled via the timePicker property is still displayed + the calendar renders no controls and adds no related markup to the DOM. The same applies when you do not specify the property. A timepicker that the timePicker property enables still appears array - renders the listed controls in the specified order + renders the listed controls in the order you specify @@ -57,7 +57,7 @@ The array can include the following controls: "timepicker" - shows the current time and opens the time selection view. It is equivalent to setting timePicker: true + shows the current time and opens the time selection view. It is equivalent to setting timePicker: true "spacer" @@ -66,10 +66,10 @@ The array can include the following controls: -The names of controls are case-insensitive, so **"today"**, **"Today"** and **"TODAY"** are treated as the same control. Unknown names are ignored. +The names of controls are case-insensitive, so the calendar treats **"today"**, **"Today"** and **"TODAY"** as the same control and ignores unknown names. :::note -Listing the **"timepicker"** control enables the [timePicker](calendar/api/calendar_timepicker_config.md) property as well. If both ways of adding a timepicker are used at once, it is rendered once. +Listing the **"Timepicker"** control enables the [`timePicker`](calendar/api/calendar_timepicker_config.md) property as well, so the calendar renders the timepicker once even if you use both ways. ::: #### Example diff --git a/docs/calendar/api/calendar_timepicker_config.md b/docs/calendar/api/calendar_timepicker_config.md index 03e62fe2..57e3af7c 100644 --- a/docs/calendar/api/calendar_timepicker_config.md +++ b/docs/calendar/api/calendar_timepicker_config.md @@ -20,13 +20,13 @@ const calendar = new dhx.Calendar("calendar_container", { @descr: **Related sample**: [Calendar. Timepicker In Calendar](https://snippet.dhtmlx.com/jkbfb202) -You can define the format of displaying time in a timepicker via the [timeFormat](calendar/api/calendar_timeformat_config.md) property. +You can define the format of displaying time in a timepicker via the [`timeFormat`](calendar/api/calendar_timeformat_config.md) property. -A timepicker can also be added as the **"timepicker"** entry of the [controls](calendar/api/calendar_controls_config.md) property. If both ways are used at once, the timepicker is rendered once. +You can also add a timepicker as the **"Timepicker"** entry of the [`controls`](calendar/api/calendar_controls_config.md) property, and if you use both ways at once, the calendar renders it once. **Related API**: -- [timeFormat](calendar/api/calendar_timeformat_config.md) -- [controls](calendar/api/calendar_controls_config.md) +- [`timeFormat`](calendar/api/calendar_timeformat_config.md) +- [`controls`](calendar/api/calendar_controls_config.md) **Related articles**: - [Initialize Calendar](calendar/how_to_start.md#initialize-calendar) diff --git a/docs/calendar/configuring.md b/docs/calendar/configuring.md index 2ea43087..de3efc2b 100644 --- a/docs/calendar/configuring.md +++ b/docs/calendar/configuring.md @@ -44,7 +44,11 @@ You can also show the calendar in one of the modes using the [](calendar/api/cal ## Controls -You can add a toolbar with quick actions to the calendar via the [controls](calendar/api/calendar_controls_config.md) property. By default, the toolbar is not rendered. +You can add a toolbar with quick actions to the calendar via the [`controls`](calendar/api/calendar_controls_config.md) property. By default, the calendar does not render the toolbar. + +**Related sample**: [Calendar. Controls](https://snippet.dhtmlx.com/guakfjw0?mode=wide) + +### Adding controls To render the default set of controls, set the property to *true*: @@ -54,7 +58,7 @@ const calendar = new dhx.Calendar("calendar_container", { }); ~~~ -To choose the controls and their order, pass an array of control names. The names are case-insensitive, and unknown names are ignored: +To choose the controls and their order, pass an array of control names. The names are case-insensitive, and the calendar ignores unknown names: ~~~js const calendar = new dhx.Calendar("calendar_container", { @@ -62,24 +66,32 @@ const calendar = new dhx.Calendar("calendar_container", { }); ~~~ -The following controls are available: +### Available controls -- **"clear"** - resets the selected date -- **"today"** - sets the selected date to today and navigates the calendar to the current month -- **"timepicker"** - shows the current time and opens the time selection view, which is equivalent to setting `timePicker: true` -- **"spacer"** - fills in the empty space between the elements of the toolbar +You can use the following controls: -The **"clear"**, **"today"** and **"timepicker"** controls are rendered as buttons with the **"link"** view, the same look that the [`view`](toolbar/api/api_button_properties.md) property gives to a [Toolbar](toolbar/button.md) or [Form](form/button.md) button. The **"spacer"** control is a layout element that works like the [Toolbar spacer](toolbar/spacer.md). +- **"Clear"** - resets the selected date +- **"Today"** - sets the selected date to today and navigates the calendar to the current month +- **"Timepicker"** - shows the current time and opens the time selection view, which is equivalent to setting `timePicker: true` +- **"Spacer"** - fills in the empty space between the elements of the toolbar -A timepicker can be added either through the `controls` array or through the [timePicker](calendar/api/calendar_timepicker_config.md) property. If you use both ways at once, the timepicker is rendered once. Listing the **"timepicker"** control also enables the `timePicker` property, so the time selection view stays available. +The calendar renders the **"Clear"**, **"Today"** and **"Timepicker"** controls as buttons with the **"link"** view, the same look that the [`view`](toolbar/api/api_button_properties.md) property gives to a [Toolbar](toolbar/button.md) or [Form](form/button.md) button. The **"Spacer"** control is a layout element that works like the [Toolbar spacer](toolbar/spacer.md). -The labels of the **"clear"** and **"today"** buttons are taken from the calendar locale. The default labels are **"Clear"** and **"Today"**, see the [Localization](calendar/localizing_calendar.md) article for details. +### Timepicker as a control -The controls are placed in the toolbar from left to right in the order they are listed in the array. A timepicker enabled via the [timePicker](calendar/api/calendar_timepicker_config.md) property is placed at the beginning of the toolbar. +You can add a timepicker either through the `controls` array or through the [`timePicker`](calendar/api/calendar_timepicker_config.md) property. Listing the **"Timepicker"** control enables the `timePicker` property as well, which keeps the time selection view available and renders the timepicker once even if you use both ways. -A single control, except for a spacer, stretches to the full width of the calendar. If the toolbar contains several controls and no spacer, the controls keep their own width and are aligned to the left. Use the **"spacer"** control to push the controls that follow it to the right edge. +### Position of the controls -**Related sample**: [Calendar. Controls](https://snippet.dhtmlx.com/guakfjw0?mode=wide) +The calendar places the controls in the toolbar from left to right in the order you list them in the array, and puts a timepicker that the [`timePicker`](calendar/api/calendar_timepicker_config.md) property enables at the beginning of the toolbar. + +A single control, except for a spacer, stretches to the full width of the calendar. If the toolbar contains several controls and no spacer, the controls keep their own width and line up on the left. Use the **"Spacer"** control to push the controls that follow it to the right edge. + +![Calendars with different sets of controls showing how a spacer and a timepicker affect the position of the controls in DHTMLX Suite](/img/calendar/controls.png) + +### Labels of the controls + +The **"Clear"** and **"Today"** buttons take their labels from the calendar locale, where you can translate them, see the [Localization](calendar/localizing_calendar.md) article for details. ## Date format @@ -277,7 +289,7 @@ const calendar = new dhx.Calendar("calendar_container", { ## Timepicker -You can add a timepicker into a calendar by enabling the [](calendar/api/calendar_timepicker_config.md) property. The timepicker can also be added as the **"timepicker"** entry of the [controls](calendar/api/calendar_controls_config.md) property. By default, a timepicker uses the 24-hour format. +You can add a timepicker into a calendar by enabling the [](calendar/api/calendar_timepicker_config.md) property. You can also add the timepicker as the **"Timepicker"** entry of the [`controls`](calendar/api/calendar_controls_config.md) property. By default, a timepicker uses the 24-hour format. You can change it to the 12-hour format via the [](calendar/api/calendar_timeformat_config.md) property. It accepts either 12 or 24 value to select the desired time format. ~~~js diff --git a/docs/calendar/features.md b/docs/calendar/features.md index 70741159..d11b100f 100644 --- a/docs/calendar/features.md +++ b/docs/calendar/features.md @@ -38,6 +38,7 @@ In this section you can discover how to configure Calendar. | Topic | Description | | :----------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------ | | [Calendar modes](calendar/configuring.md#calendar-modes) | Learn how initialize Calendar in different modes (calendar, month, year) ([Example](https://snippet.dhtmlx.com/n9q0tc0q)) | +| [Controls](calendar/configuring.md#controls) | Learn how to add a toolbar with the Clear, Today and Timepicker controls ([Example](https://snippet.dhtmlx.com/guakfjw0?mode=wide)) | | [Showing tooltips](calendar/operating_calendar.md#showing-tooltips) | Learn how to show tooltips in Calendar ([Example 1](https://snippet.dhtmlx.com/t4jy4wrr), [Example 2](https://snippet.dhtmlx.com/jwx0barf)) | | [Start of the week](calendar/configuring.md#start-of-the-week) | Learn how to change the starting day of the week ([Example](https://snippet.dhtmlx.com/kaxmurh9)) | | [Timepicker in Calendar](calendar/configuring.md#timepicker) | Learn how to add a timepicker into Calendar ([Example](https://snippet.dhtmlx.com/jkbfb202)) | diff --git a/docs/calendar/localizing_calendar.md b/docs/calendar/localizing_calendar.md index 35ee8081..d77c12f5 100644 --- a/docs/calendar/localizing_calendar.md +++ b/docs/calendar/localizing_calendar.md @@ -39,7 +39,7 @@ const en = { To use a different locale, your need to: -- define necessary language settings: provide full and short names of months, full and short names of days of a week, and the labels of the buttons, including the ones of the [controls](calendar/api/calendar_controls_config.md), if you use them: +- define necessary language settings: provide full and short names of months, full and short names of days of a week, and the labels of the buttons, including the ones of the [`controls`](calendar/api/calendar_controls_config.md), if you use them: ~~~js const de = { @@ -62,15 +62,15 @@ const de = { }; ~~~ -- apply the language settings by calling the **dhx.i18n.setLocale()** method before Calendar initialization: +- apply the language settings by calling the `dhx.i18n.setLocale()` method before Calendar initialization: ~~~js dhx.i18n.setLocale("calendar", de); const calendar = new dhx.Calendar("calendar_container"); ~~~ -The `cancel`, `today` and `clear` labels are optional. If they are not specified in a custom locale, the default values are applied. +The `cancel`, `today` and `clear` labels are optional. If a custom locale does not specify them, the calendar applies the default values. -The **Save** button of the timepicker is not a part of the calendar locale. Its label is defined by the `save` entry of the timepicker locale. +The **Save** button of the timepicker is not a part of the calendar locale. The `save` entry of the [Timepicker locale](timepicker/localization.md) defines its label. **Related sample**: [Calendar. Localization](https://snippet.dhtmlx.com/tn40a0w8) diff --git a/docs/colorpicker/localizing_colorpicker.md b/docs/colorpicker/localizing_colorpicker.md index 4a58cc04..60cd4a71 100644 --- a/docs/colorpicker/localizing_colorpicker.md +++ b/docs/colorpicker/localizing_colorpicker.md @@ -41,7 +41,7 @@ const de = { - apply the language settings by calling the **dhx.i18n.setLocale()** method before Colorpicker initialization: ~~~js -dhx.i18n.setLocale("colorpicker_container", de); +dhx.i18n.setLocale("colorpicker", de); const colorpicker = new dhx.Colorpicker("colorpicker_container"); ~~~ diff --git a/docs/combobox/localization.md b/docs/combobox/localization.md index 66c2f66c..516c1294 100644 --- a/docs/combobox/localization.md +++ b/docs/combobox/localization.md @@ -45,7 +45,7 @@ const de = { - apply the language settings by calling the **dhx.i18n.setLocale()** method before Combobox initialization: ~~~js -dhx.i18n.setLocale("combo_container", de); +dhx.i18n.setLocale("combobox", de); const combo = new dhx.Combobox("combo_container"); ~~~ diff --git a/docs/timepicker/features.md b/docs/timepicker/features.md index 42b27d57..fcd35929 100644 --- a/docs/timepicker/features.md +++ b/docs/timepicker/features.md @@ -10,9 +10,9 @@ This page contains structured information that will help you to start working wi ## How to start with DHTMLX Timepicker -In this section you can find out the ways of Timepicker initialization, and learn how to integrate Timepicker into your applications. +In this section you can find out the ways of Timepicker initialization and localization, and learn how to integrate Timepicker into your applications. -### Initialization +### Initialization and localization | Topic | Description | | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | @@ -20,6 +20,7 @@ In this section you can find out the ways of Timepicker initialization, and lear | Timepicker inside a Popup | Learn how to initialize a Timepicker in a popup ([Example](https://snippet.dhtmlx.com/7x6hlbqx)) | | [Timepicker in Calendar](https://snippet.dhtmlx.com/jkbfb202) | Check the example of Timepicker as a part of Calendar | | Timepicker in Form: [example 1](https://snippet.dhtmlx.com/4k3o8p7b), [example 2](https://snippet.dhtmlx.com/ikyyekxq) | Check the examples of Timepicker as Form controls | +| [Localization](timepicker/localization.md) | Learn how to localize a Timepicker | ### Integration diff --git a/docs/timepicker/index.md b/docs/timepicker/index.md index eb80ccd9..715e54fa 100644 --- a/docs/timepicker/index.md +++ b/docs/timepicker/index.md @@ -30,6 +30,7 @@ You can check the following page to learn how to build a full-featured DHTMLX Ti - [](timepicker/initialization.md) - [](timepicker/configuration.md) +- [](timepicker/localization.md) - [](timepicker/usage.md) - [](timepicker/customization.md) - [](timepicker/handling_events.md) diff --git a/docs/timepicker/localization.md b/docs/timepicker/localization.md new file mode 100644 index 00000000..79a04d93 --- /dev/null +++ b/docs/timepicker/localization.md @@ -0,0 +1,54 @@ +--- +sidebar_label: Localization +title: JavaScript Timepicker - Localization +description: The Timepicker locale holds the labels of the hours and minutes sliders and of the Save button. Learn how to translate them and apply a custom locale with the dhx.i18n.setLocale() method in the docs of the DHTMLX JavaScript UI library. +--- + +# Localization + +You can apply different languages to the interface of DHTMLX Timepicker. You just need to translate the corresponding strings for the labels of Timepicker and apply a ready locale to the component. + +![Timepicker localized into German with translated labels of the hours and minutes sliders in DHTMLX Suite](/img/timepicker/locale.png) + +## Default locale + +The default locale for Timepicker looks like this: + +~~~js +const en = { + // labels of the sliders + hours: "Hours", + minutes: "Minutes", + // label of the Save button + save: "Save" +}; +~~~ + +Timepicker renders the **Save** button only if you enable the [`controls`](timepicker/api/timepicker_controls_config.md) property. + +## Custom locale + +To use a different locale, your need to: + +- define necessary language settings: provide the labels of the sliders and of the Save button: + +~~~js +const de = { + hours: "Stunden", + minutes: "Minuten", + save: "Speichern" +}; +~~~ + +- apply the language settings by calling the `dhx.i18n.setLocale()` method before Timepicker initialization: + +~~~js +dhx.i18n.setLocale("timepicker", de); +const timepicker = new dhx.Timepicker("timepicker_container"); +~~~ + +The method merges the passed labels into the current locale, so you can redefine just some of them. + +:::note +A timepicker inside a calendar takes its labels from the locale of Timepicker as well. The calendar locale defines the rest of the labels, see the [Localization](calendar/localizing_calendar.md) guide of Calendar. +::: diff --git a/sidebars.js b/sidebars.js index ede47800..8652e4aa 100644 --- a/sidebars.js +++ b/sidebars.js @@ -4282,6 +4282,7 @@ module.exports = { "timepicker/features", "timepicker/initialization", "timepicker/configuration", + "timepicker/localization", "timepicker/usage", "timepicker/customization", "timepicker/handling_events", diff --git a/static/img/calendar/controls.png b/static/img/calendar/controls.png new file mode 100644 index 0000000000000000000000000000000000000000..7fcd906fd1147019232c37c0c770257d6171374c GIT binary patch literal 66035 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 Y$3y)1&r4;M7k~az_LWSD)Y~ur2SHYl3;+NC literal 0 HcmV?d00001 diff --git a/static/img/timepicker/locale.png b/static/img/timepicker/locale.png new file mode 100644 index 0000000000000000000000000000000000000000..73afa2a21e952c0566711cd738d18bab0e45643c GIT binary patch literal 5129 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 Date: Tue, 15 Sep 2026 10:38:33 +0300 Subject: [PATCH 3/3] [update] code fences and wording in calendar docs - js code fences switched to jsx in the Controls section of the calendar configuration guide and on the localization pages of Calendar and Timepicker - intro sentence added before the image that shows the layouts of the controls - names of the controls capitalized in the frontmatter description of the controls page --- docs/calendar/api/calendar_controls_config.md | 2 +- docs/calendar/configuring.md | 6 ++++-- docs/calendar/localizing_calendar.md | 6 +++--- docs/timepicker/localization.md | 6 +++--- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/docs/calendar/api/calendar_controls_config.md b/docs/calendar/api/calendar_controls_config.md index 4690b186..57849486 100644 --- a/docs/calendar/api/calendar_controls_config.md +++ b/docs/calendar/api/calendar_controls_config.md @@ -1,7 +1,7 @@ --- sidebar_label: controls title: JavaScript Calendar - controls Config -description: The controls property adds a toolbar with the clear, today, and timepicker controls to the DHTMLX JavaScript Calendar. Learn how to render the default set or list the controls in your own order, and check the code examples in the DHTMLX Suite docs. +description: The controls property adds a toolbar with the Clear, Today, and Timepicker controls to the DHTMLX JavaScript Calendar. Learn how to render the default set or list the controls in your own order, and check the code examples in the DHTMLX Suite docs. --- # controls diff --git a/docs/calendar/configuring.md b/docs/calendar/configuring.md index de3efc2b..6d9ce790 100644 --- a/docs/calendar/configuring.md +++ b/docs/calendar/configuring.md @@ -52,7 +52,7 @@ You can add a toolbar with quick actions to the calendar via the [`controls`](ca To render the default set of controls, set the property to *true*: -~~~js +~~~jsx const calendar = new dhx.Calendar("calendar_container", { controls: true // the same as controls: ["spacer", "clear", "today"] }); @@ -60,7 +60,7 @@ const calendar = new dhx.Calendar("calendar_container", { To choose the controls and their order, pass an array of control names. The names are case-insensitive, and the calendar ignores unknown names: -~~~js +~~~jsx const calendar = new dhx.Calendar("calendar_container", { controls: ["clear", "spacer", "today", "timepicker"] }); @@ -87,6 +87,8 @@ The calendar places the controls in the toolbar from left to right in the order A single control, except for a spacer, stretches to the full width of the calendar. If the toolbar contains several controls and no spacer, the controls keep their own width and line up on the left. Use the **"Spacer"** control to push the controls that follow it to the right edge. +You can combine the controls in different ways to get the desired layout of the toolbar. For example: + ![Calendars with different sets of controls showing how a spacer and a timepicker affect the position of the controls in DHTMLX Suite](/img/calendar/controls.png) ### Labels of the controls diff --git a/docs/calendar/localizing_calendar.md b/docs/calendar/localizing_calendar.md index d77c12f5..01b8b204 100644 --- a/docs/calendar/localizing_calendar.md +++ b/docs/calendar/localizing_calendar.md @@ -14,7 +14,7 @@ You can apply different languages to the interface of dhtmlxCalendar. You just n The default locale for Calendar looks like this: -~~~js +~~~jsx const en = { // short names of months monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", @@ -41,7 +41,7 @@ To use a different locale, your need to: - define necessary language settings: provide full and short names of months, full and short names of days of a week, and the labels of the buttons, including the ones of the [`controls`](calendar/api/calendar_controls_config.md), if you use them: -~~~js +~~~jsx const de = { // short names of months monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", @@ -64,7 +64,7 @@ const de = { - apply the language settings by calling the `dhx.i18n.setLocale()` method before Calendar initialization: -~~~js +~~~jsx dhx.i18n.setLocale("calendar", de); const calendar = new dhx.Calendar("calendar_container"); ~~~ diff --git a/docs/timepicker/localization.md b/docs/timepicker/localization.md index 79a04d93..7b41d48e 100644 --- a/docs/timepicker/localization.md +++ b/docs/timepicker/localization.md @@ -14,7 +14,7 @@ You can apply different languages to the interface of DHTMLX Timepicker. You jus The default locale for Timepicker looks like this: -~~~js +~~~jsx const en = { // labels of the sliders hours: "Hours", @@ -32,7 +32,7 @@ To use a different locale, your need to: - define necessary language settings: provide the labels of the sliders and of the Save button: -~~~js +~~~jsx const de = { hours: "Stunden", minutes: "Minuten", @@ -42,7 +42,7 @@ const de = { - apply the language settings by calling the `dhx.i18n.setLocale()` method before Timepicker initialization: -~~~js +~~~jsx dhx.i18n.setLocale("timepicker", de); const timepicker = new dhx.Timepicker("timepicker_container"); ~~~