diff --git a/packages/grafana-e2e-selectors/src/selectors/pages.ts b/packages/grafana-e2e-selectors/src/selectors/pages.ts index cf0f9b53f2c..cd6189821e6 100644 --- a/packages/grafana-e2e-selectors/src/selectors/pages.ts +++ b/packages/grafana-e2e-selectors/src/selectors/pages.ts @@ -275,7 +275,7 @@ export const Pages = { PlaylistForm: { name: 'Playlist name', interval: 'Playlist interval', - itemDelete: 'Delete playlist item', + itemDelete: 'data-testid playlist-form-delete-item', }, BrowseDashboards: { table: { diff --git a/public/app/features/playlist/PlaylistEditPage.tsx b/public/app/features/playlist/PlaylistEditPage.tsx index 87081223d53..d827db88755 100644 --- a/public/app/features/playlist/PlaylistEditPage.tsx +++ b/public/app/features/playlist/PlaylistEditPage.tsx @@ -4,6 +4,7 @@ import { useAsync } from 'react-use'; import { NavModelItem } from '@grafana/data'; import { locationService } from '@grafana/runtime'; import { Page } from 'app/core/components/Page/Page'; +import { t, Trans } from 'app/core/internationalization'; import { GrafanaRouteComponentProps } from 'app/core/navigation/types'; import { PlaylistForm } from './PlaylistForm'; @@ -25,16 +26,22 @@ export const PlaylistEditPage = ({ match }: Props) => { }; const pageNav: NavModelItem = { - text: 'Edit playlist', - subTitle: - 'A playlist rotates through a pre-selected list of dashboards. A playlist can be a great way to build situational awareness, or just show off your metrics to your team or visitors.', + text: t('playlist-edit.title', 'Edit playlist'), + subTitle: t( + 'playlist-edit.sub-title', + 'A playlist rotates through a pre-selected list of dashboards. A playlist can be a great way to build situational awareness, or just show off your metrics to your team or visitors.' + ), }; return ( - {playlist.error &&
Error loading playlist: {JSON.stringify(playlist.error)}
} - + {playlist.error && ( +
+ Error loading playlist: + {JSON.stringify(playlist.error)} +
+ )} {playlist.value && }
diff --git a/public/app/features/playlist/PlaylistForm.tsx b/public/app/features/playlist/PlaylistForm.tsx index c291c7d5de5..7ea244db5bf 100644 --- a/public/app/features/playlist/PlaylistForm.tsx +++ b/public/app/features/playlist/PlaylistForm.tsx @@ -5,6 +5,7 @@ import { config } from '@grafana/runtime'; import { Button, Field, Form, HorizontalGroup, Input, LinkButton } from '@grafana/ui'; import { DashboardPicker } from 'app/core/components/Select/DashboardPicker'; import { TagFilter } from 'app/core/components/TagFilter/TagFilter'; +import { Trans, t } from 'app/core/internationalization'; import { getGrafanaSearcher } from '../search/service'; @@ -38,20 +39,30 @@ export const PlaylistForm = ({ onSubmit, playlist }: Props) => { const isDisabled = items.length === 0 || Object.keys(errors).length > 0; return ( <> - + - + @@ -60,20 +71,22 @@ export const PlaylistForm = ({ onSubmit, playlist }: Props) => {
-

Add dashboards

+

+ Add dashboards +

- + - +
@@ -85,10 +98,10 @@ export const PlaylistForm = ({ onSubmit, playlist }: Props) => { disabled={isDisabled} icon={saving ? 'fa fa-spinner' : undefined} > - Save + Save - Cancel + Cancel diff --git a/public/app/features/playlist/PlaylistTable.tsx b/public/app/features/playlist/PlaylistTable.tsx index 8246ee2c660..7b1080e192e 100644 --- a/public/app/features/playlist/PlaylistTable.tsx +++ b/public/app/features/playlist/PlaylistTable.tsx @@ -1,6 +1,8 @@ import React from 'react'; import { DragDropContext, Droppable, DropResult } from 'react-beautiful-dnd'; +import { Trans } from 'app/core/internationalization'; + import { PlaylistTableRows } from './PlaylistTableRows'; import { PlaylistItem } from './types'; @@ -19,7 +21,9 @@ export const PlaylistTable = ({ items, deleteItem, moveItem }: Props) => { return (
-

Dashboards

+

+ Dashboards +

diff --git a/public/app/features/playlist/PlaylistTableRows.tsx b/public/app/features/playlist/PlaylistTableRows.tsx index e314706c476..131e6e11328 100644 --- a/public/app/features/playlist/PlaylistTableRows.tsx +++ b/public/app/features/playlist/PlaylistTableRows.tsx @@ -7,6 +7,7 @@ import { GrafanaTheme2 } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; import { Icon, IconButton, useStyles2, Spinner, IconName } from '@grafana/ui'; import { TagBadge } from 'app/core/components/TagFilter/TagBadge'; +import { t, Trans } from 'app/core/internationalization'; import { PlaylistItem } from './types'; @@ -20,7 +21,9 @@ export const PlaylistTableRows = ({ items, onDelete }: Props) => { if (!items?.length) { return (
- Playlist is empty. Add dashboards below. + + Playlist is empty. Add dashboards below. +
); } @@ -80,9 +83,14 @@ export const PlaylistTableRows = ({ items, onDelete }: Props) => { name="times" size="md" onClick={() => onDelete(index)} - tooltip={selectors.pages.PlaylistForm.itemDelete} + data-testid={selectors.pages.PlaylistForm.itemDelete} + tooltip={t('playlist-edit.form.table-delete', 'Delete playlist item')} + /> + -
)} diff --git a/public/locales/de-DE/grafana.json b/public/locales/de-DE/grafana.json index 5305f6ffa77..043f62a7ac8 100644 --- a/public/locales/de-DE/grafana.json +++ b/public/locales/de-DE/grafana.json @@ -608,6 +608,29 @@ "view": "Anzeigen" } }, + "playlist-edit": { + "error-prefix": "", + "form": { + "add-tag-label": "", + "add-tag-placeholder": "", + "add-title-label": "", + "cancel": "", + "heading": "", + "interval-label": "", + "interval-placeholder": "", + "interval-required": "", + "name-label": "", + "name-placeholder": "", + "name-required": "", + "save": "", + "table-delete": "", + "table-drag": "", + "table-empty": "", + "table-heading": "" + }, + "sub-title": "", + "title": "" + }, "refresh-picker": { "aria-label": { "choose-interval": "Automatische Aktualisierung ausgeschaltet. Aktualisierungszeitintervall auswählen", diff --git a/public/locales/en-US/grafana.json b/public/locales/en-US/grafana.json index ceccf5cb836..e57e094518a 100644 --- a/public/locales/en-US/grafana.json +++ b/public/locales/en-US/grafana.json @@ -608,6 +608,29 @@ "view": "View" } }, + "playlist-edit": { + "error-prefix": "Error loading playlist:", + "form": { + "add-tag-label": "Add by tag", + "add-tag-placeholder": "Select a tag", + "add-title-label": "Add by title", + "cancel": "Cancel", + "heading": "Add dashboards", + "interval-label": "Interval", + "interval-placeholder": "5m", + "interval-required": "Interval is required", + "name-label": "Name", + "name-placeholder": "Name", + "name-required": "Name is required", + "save": "Save", + "table-delete": "Delete playlist item", + "table-drag": "Drag and drop to reorder", + "table-empty": "Playlist is empty. Add dashboards below.", + "table-heading": "Dashboards" + }, + "sub-title": "A playlist rotates through a pre-selected list of dashboards. A playlist can be a great way to build situational awareness, or just show off your metrics to your team or visitors.", + "title": "Edit playlist" + }, "refresh-picker": { "aria-label": { "choose-interval": "Auto refresh turned off. Choose refresh time interval", diff --git a/public/locales/es-ES/grafana.json b/public/locales/es-ES/grafana.json index 6db3cf46a62..5d9bcc100ba 100644 --- a/public/locales/es-ES/grafana.json +++ b/public/locales/es-ES/grafana.json @@ -613,6 +613,29 @@ "view": "Vista" } }, + "playlist-edit": { + "error-prefix": "", + "form": { + "add-tag-label": "", + "add-tag-placeholder": "", + "add-title-label": "", + "cancel": "", + "heading": "", + "interval-label": "", + "interval-placeholder": "", + "interval-required": "", + "name-label": "", + "name-placeholder": "", + "name-required": "", + "save": "", + "table-delete": "", + "table-drag": "", + "table-empty": "", + "table-heading": "" + }, + "sub-title": "", + "title": "" + }, "refresh-picker": { "aria-label": { "choose-interval": "Actualización automática desactivada. Elija un intervalo de tiempo de actualización", diff --git a/public/locales/fr-FR/grafana.json b/public/locales/fr-FR/grafana.json index 6c7ccfdea9b..b9bbb03f792 100644 --- a/public/locales/fr-FR/grafana.json +++ b/public/locales/fr-FR/grafana.json @@ -613,6 +613,29 @@ "view": "Afficher" } }, + "playlist-edit": { + "error-prefix": "", + "form": { + "add-tag-label": "", + "add-tag-placeholder": "", + "add-title-label": "", + "cancel": "", + "heading": "", + "interval-label": "", + "interval-placeholder": "", + "interval-required": "", + "name-label": "", + "name-placeholder": "", + "name-required": "", + "save": "", + "table-delete": "", + "table-drag": "", + "table-empty": "", + "table-heading": "" + }, + "sub-title": "", + "title": "" + }, "refresh-picker": { "aria-label": { "choose-interval": "Actualisation automatique désactivée. Choisir un intervalle de temps d'actualisation", diff --git a/public/locales/pseudo-LOCALE/grafana.json b/public/locales/pseudo-LOCALE/grafana.json index 08c54a1b818..b73be8b081e 100644 --- a/public/locales/pseudo-LOCALE/grafana.json +++ b/public/locales/pseudo-LOCALE/grafana.json @@ -608,6 +608,29 @@ "view": "Vįęŵ" } }, + "playlist-edit": { + "error-prefix": "Ēřřőř ľőäđįʼnģ pľäyľįşŧ:", + "form": { + "add-tag-label": "Åđđ þy ŧäģ", + "add-tag-placeholder": "Ŝęľęčŧ ä ŧäģ", + "add-title-label": "Åđđ þy ŧįŧľę", + "cancel": "Cäʼnčęľ", + "heading": "Åđđ đäşĥþőäřđş", + "interval-label": "Ĩʼnŧęřväľ", + "interval-placeholder": "5m", + "interval-required": "Ĩʼnŧęřväľ įş řęqūįřęđ", + "name-label": "Ńämę", + "name-placeholder": "Ńämę", + "name-required": "Ńämę įş řęqūįřęđ", + "save": "Ŝävę", + "table-delete": "Đęľęŧę pľäyľįşŧ įŧęm", + "table-drag": "Đřäģ äʼnđ đřőp ŧő řęőřđęř", + "table-empty": "Pľäyľįşŧ įş ęmpŧy. Åđđ đäşĥþőäřđş þęľőŵ.", + "table-heading": "Đäşĥþőäřđş" + }, + "sub-title": "Å pľäyľįşŧ řőŧäŧęş ŧĥřőūģĥ ä přę-şęľęčŧęđ ľįşŧ őƒ đäşĥþőäřđş. Å pľäyľįşŧ čäʼn þę ä ģřęäŧ ŵäy ŧő þūįľđ şįŧūäŧįőʼnäľ äŵäřęʼnęşş, őř ĵūşŧ şĥőŵ őƒƒ yőūř męŧřįčş ŧő yőūř ŧęäm őř vįşįŧőřş.", + "title": "Ēđįŧ pľäyľįşŧ" + }, "refresh-picker": { "aria-label": { "choose-interval": "Åūŧő řęƒřęşĥ ŧūřʼnęđ őƒƒ. Cĥőőşę řęƒřęşĥ ŧįmę įʼnŧęřväľ", diff --git a/public/locales/zh-Hans/grafana.json b/public/locales/zh-Hans/grafana.json index 16166a0ac7f..1f9695d9479 100644 --- a/public/locales/zh-Hans/grafana.json +++ b/public/locales/zh-Hans/grafana.json @@ -603,6 +603,29 @@ "view": "查看" } }, + "playlist-edit": { + "error-prefix": "", + "form": { + "add-tag-label": "", + "add-tag-placeholder": "", + "add-title-label": "", + "cancel": "", + "heading": "", + "interval-label": "", + "interval-placeholder": "", + "interval-required": "", + "name-label": "", + "name-placeholder": "", + "name-required": "", + "save": "", + "table-delete": "", + "table-drag": "", + "table-empty": "", + "table-heading": "" + }, + "sub-title": "", + "title": "" + }, "refresh-picker": { "aria-label": { "choose-interval": "自动刷新已关闭。选择刷新时间间隔",