Internationalisation: Translates RefreshPicker and the dashboard toolbar (#51827)

This commit is contained in:
Joao Silva 2022-07-20 17:28:32 +01:00 committed by GitHub
parent 60da9eaac5
commit e3567c21d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 401 additions and 32 deletions

View File

@ -10,7 +10,6 @@ import { ToolbarButtonVariant, ToolbarButton } from '../ToolbarButton';
// Default intervals used in the refresh picker component
export const defaultIntervals = ['5s', '10s', '30s', '1m', '5m', '15m', '30m', '1h', '2h', '1d'];
const offLabel = 'Auto refresh turned off. Choose refresh time interval';
export interface Props {
intervals?: string[];
@ -24,11 +23,24 @@ export interface Props {
noIntervalPicker?: boolean;
width?: string;
primary?: boolean;
// These props are used to translate the component
offOptionLabelMsg?: string;
offOptionAriaLabelMsg?: string;
offDescriptionAriaLabelMsg?: string;
onDescriptionAriaLabelMsg?: (durationAriaLabel: string | undefined) => string;
}
export class RefreshPicker extends PureComponent<Props> {
static offOption = { label: 'Off', value: '', ariaLabel: 'Turn off auto refresh' };
static liveOption = { label: 'Live', value: 'LIVE', ariaLabel: 'Turn on live streaming' };
static offOption = {
label: 'Off',
value: '',
ariaLabel: 'Turn off auto refresh',
};
static liveOption = {
label: 'Live',
value: 'LIVE',
ariaLabel: 'Turn on live streaming',
};
static isLive = (refreshInterval?: string): boolean => refreshInterval === RefreshPicker.liveOption.value;
constructor(props: Props) {
@ -57,18 +69,43 @@ export class RefreshPicker extends PureComponent<Props> {
}
render() {
const { onRefresh, intervals, tooltip, value, text, isLoading, noIntervalPicker, width } = this.props;
const {
onRefresh,
intervals,
tooltip,
value,
text,
isLoading,
noIntervalPicker,
width,
offOptionLabelMsg,
offOptionAriaLabelMsg,
offDescriptionAriaLabelMsg,
onDescriptionAriaLabelMsg,
} = this.props;
const currentValue = value || '';
const variant = this.getVariant();
const options = intervalsToOptions({ intervals });
const translatedOffOption = {
value: RefreshPicker.offOption.value,
label: offOptionLabelMsg || RefreshPicker.offOption.label,
ariaLabel: offOptionAriaLabelMsg || RefreshPicker.offOption.ariaLabel,
};
const options = intervalsToOptions({ intervals, offOption: translatedOffOption });
const option = options.find(({ value }) => value === currentValue);
let selectedValue = option || RefreshPicker.offOption;
let selectedValue = option || translatedOffOption;
if (selectedValue.label === RefreshPicker.offOption.label) {
if (selectedValue.label === translatedOffOption.label) {
selectedValue = { value: '' };
}
const durationAriaLabel = selectedValue.ariaLabel;
const ariaLabel =
selectedValue.value === ''
? offDescriptionAriaLabelMsg || 'Auto refresh turned off. Choose refresh time interval'
: onDescriptionAriaLabelMsg?.(durationAriaLabel) ||
`Choose refresh time interval with current interval ${durationAriaLabel} selected`;
return (
<ButtonGroup className="refresh-picker">
<ToolbarButton
@ -89,11 +126,7 @@ export class RefreshPicker extends PureComponent<Props> {
onChange={this.onChangeSelect as any}
variant={variant}
data-testid={selectors.components.RefreshPicker.intervalButtonV2}
aria-label={
selectedValue.value === ''
? offLabel
: `Choose refresh time interval with current interval ${selectedValue.ariaLabel} selected`
}
aria-label={ariaLabel}
/>
)}
</ButtonGroup>
@ -101,11 +134,11 @@ export class RefreshPicker extends PureComponent<Props> {
}
}
export function intervalsToOptions({ intervals = defaultIntervals }: { intervals?: string[] } = {}): Array<
SelectableValue<string>
> {
const intervalsOrDefault = intervals || defaultIntervals;
const options = intervalsOrDefault.map((interval) => {
export function intervalsToOptions({
intervals = defaultIntervals,
offOption = RefreshPicker.offOption,
}: { intervals?: string[]; offOption?: SelectableValue<string> } = {}): Array<SelectableValue<string>> {
const options: Array<SelectableValue<string>> = intervals.map((interval) => {
const duration = parseDuration(interval);
const ariaLabel = formatDuration(duration);
@ -116,6 +149,6 @@ export function intervalsToOptions({ intervals = defaultIntervals }: { intervals
};
});
options.unshift(RefreshPicker.offOption);
options.unshift(offOption);
return options;
}

View File

@ -1,3 +1,5 @@
import { t } from '@lingui/macro';
import { AppEvents } from '@grafana/data';
import { locationService } from '@grafana/runtime';
@ -10,7 +12,9 @@ export function toggleKioskMode() {
switch (kiosk) {
case 'tv':
kiosk = true;
appEvents.emit(AppEvents.alertSuccess, ['Press ESC to exit Kiosk mode']);
appEvents.emit(AppEvents.alertSuccess, [
t({ id: 'navigation.kiosk.tv-alert', message: 'Press ESC to exit Kiosk mode' }),
]);
break;
case '1':
case true:

View File

@ -1,3 +1,4 @@
import { t, Trans } from '@lingui/macro';
import React, { FC, ReactNode } from 'react';
import { connect, ConnectedProps } from 'react-redux';
import { useLocation } from 'react-router-dom';
@ -120,7 +121,9 @@ export const DashNav = React.memo<Props>((props) => {
}
if (canStar) {
let desc = isStarred ? 'Unmark as favorite' : 'Mark as favorite';
let desc = isStarred
? t({ id: 'dashboard.toolbar.unmark-favorite', message: 'Unmark as favorite' })
: t({ id: 'dashboard.toolbar.mark-favorite', message: 'Mark as favorite' });
buttons.push(
<DashNavButton
tooltip={desc}
@ -134,12 +137,11 @@ export const DashNav = React.memo<Props>((props) => {
}
if (canShare) {
let desc = 'Share dashboard or panel';
buttons.push(
<ModalsController key="button-share">
{({ showModal, hideModal }) => (
<DashNavButton
tooltip={desc}
tooltip={t({ id: 'dashboard.toolbar.share', message: 'Share dashboard or panel' })}
icon="share-alt"
iconSize="lg"
onClick={() => {
@ -163,7 +165,7 @@ export const DashNav = React.memo<Props>((props) => {
<ModalsController key="button-dashboard-comments">
{({ showModal, hideModal }) => (
<DashNavButton
tooltip="Show dashboard comments"
tooltip={t({ id: 'dashboard.toolbar.comments-show', message: 'Show dashboard comments' })}
icon="comment-alt-message"
iconSize="lg"
onClick={() => {
@ -185,9 +187,21 @@ export const DashNav = React.memo<Props>((props) => {
const renderPlaylistControls = () => {
return (
<ButtonGroup key="playlist-buttons">
<ToolbarButton tooltip="Go to previous dashboard" icon="backward" onClick={onPlaylistPrev} narrow />
<ToolbarButton onClick={onPlaylistStop}>Stop playlist</ToolbarButton>
<ToolbarButton tooltip="Go to next dashboard" icon="forward" onClick={onPlaylistNext} narrow />
<ToolbarButton
tooltip={t({ id: 'dashboard.toolbar.playlist-previous', message: 'Go to previous dashboard' })}
icon="backward"
onClick={onPlaylistPrev}
narrow
/>
<ToolbarButton onClick={onPlaylistStop}>
<Trans id="dashboard.toolbar.playlist-stop">Stop playlist</Trans>
</ToolbarButton>
<ToolbarButton
tooltip={t({ id: 'dashboard.toolbar.playlist-next', message: 'Go to next dashboard' })}
icon="forward"
onClick={onPlaylistNext}
narrow
/>
</ButtonGroup>
);
};
@ -211,7 +225,12 @@ export const DashNav = React.memo<Props>((props) => {
const snapshotUrl = snapshot && snapshot.originalUrl;
const buttons: ReactNode[] = [];
const tvButton = (
<ToolbarButton tooltip="Cycle view mode" icon="monitor" onClick={onToggleTVMode} key="tv-button" />
<ToolbarButton
tooltip={t({ id: 'dashboard.toolbar.tv-button', message: 'Cycle view mode' })}
icon="monitor"
onClick={onToggleTVMode}
key="tv-button"
/>
);
if (isPlaylistRunning()) {
@ -223,7 +242,14 @@ export const DashNav = React.memo<Props>((props) => {
}
if (canEdit && !isFullscreen) {
buttons.push(<ToolbarButton tooltip="Add panel" icon="panel-add" onClick={onAddPanel} key="button-panel-add" />);
buttons.push(
<ToolbarButton
tooltip={t({ id: 'dashboard.toolbar.add-panel', message: 'Add panel' })}
icon="panel-add"
onClick={onAddPanel}
key="button-panel-add"
/>
);
}
if (canSave && !isFullscreen) {
@ -231,7 +257,7 @@ export const DashNav = React.memo<Props>((props) => {
<ModalsController key="button-save">
{({ showModal, hideModal }) => (
<ToolbarButton
tooltip="Save dashboard"
tooltip={t({ id: 'dashboard.toolbar.save', message: 'Save dashboard' })}
icon="save"
onClick={() => {
showModal(SaveDashboardDrawer, {
@ -248,7 +274,7 @@ export const DashNav = React.memo<Props>((props) => {
if (snapshotUrl) {
buttons.push(
<ToolbarButton
tooltip="Open original dashboard"
tooltip={t({ id: 'dashboard.toolbar.open-original', message: 'Open original dashboard' })}
onClick={() => gotoSnapshotOrigin(snapshotUrl)}
icon="link"
key="button-snapshot"
@ -258,7 +284,12 @@ export const DashNav = React.memo<Props>((props) => {
if (showSettings) {
buttons.push(
<ToolbarButton tooltip="Dashboard settings" icon="cog" onClick={onOpenSettings} key="button-settings" />
<ToolbarButton
tooltip={t({ id: 'dashboard.toolbar.settings', message: 'Dashboard settings' })}
icon="cog"
onClick={onOpenSettings}
key="button-settings"
/>
);
}

View File

@ -1,3 +1,4 @@
import { t } from '@lingui/macro';
import React, { Component } from 'react';
import { Unsubscribable } from 'rxjs';
@ -103,8 +104,20 @@ export class DashNavTimeControls extends Component<Props> {
onRefresh={this.onRefresh}
value={dashboard.refresh}
intervals={intervals}
tooltip="Refresh dashboard"
tooltip={t({ id: 'dashboard.toolbar.refresh', message: 'Refresh dashboard' })}
noIntervalPicker={hideIntervalPicker}
offDescriptionAriaLabelMsg={t({
id: 'dashboard.refresh-picker.off-description',
message: 'Auto refresh turned off. Choose refresh time interval',
})}
onDescriptionAriaLabelMsg={(durationAriaLabel) =>
t({
id: 'dashboard.refresh-picker.on-description',
message: `Choose refresh time interval with current interval ${durationAriaLabel} selected`,
})
}
offOptionLabelMsg={t({ id: 'dashboard.refresh-picker.off-label', message: 'Off' })}
offOptionAriaLabelMsg={t({ id: 'dashboard.refresh-picker.off-arialabel', message: 'Turn off auto refresh' })}
/>
</ToolbarButtonRow>
);

View File

@ -202,6 +202,74 @@ msgstr "{queryCount} queries with total query time of {formatted}"
msgid "dashboard.inspect.title"
msgstr "Inspect: {panelTitle}"
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.off-arialabel"
msgstr "Turn off auto refresh"
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.off-description"
msgstr "Auto refresh turned off. Choose refresh time interval"
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.off-label"
msgstr "Off"
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.on-description"
msgstr "Choose refresh time interval with current interval {durationAriaLabel} selected"
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.add-panel"
msgstr "Add panel"
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.comments-show"
msgstr "Show dashboard comments"
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.mark-favorite"
msgstr "Mark as favorite"
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.open-original"
msgstr "Open original dashboard"
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.playlist-next"
msgstr "Go to next dashboard"
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.playlist-previous"
msgstr "Go to previous dashboard"
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.playlist-stop"
msgstr "Stop playlist"
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.toolbar.refresh"
msgstr "Refresh dashboard"
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.save"
msgstr "Save dashboard"
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.settings"
msgstr "Dashboard settings"
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.share"
msgstr "Share dashboard or panel"
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.tv-button"
msgstr "Cycle view mode"
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.unmark-favorite"
msgstr "Unmark as favorite"
#: public/app/core/components/NavBar/navBarItem-translations.ts
msgid "nav.alerting"
msgstr "Alerting"
@ -366,6 +434,10 @@ msgstr "Teams"
msgid "nav.users"
msgstr "Users"
#: public/app/core/navigation/kiosk.ts
msgid "navigation.kiosk.tv-alert"
msgstr "Press ESC to exit Kiosk mode"
#: public/app/features/dashboard/utils/getPanelMenu.ts
msgid "panel.header-menu.inspect"
msgstr "Inspect"

View File

@ -202,6 +202,74 @@ msgstr ""
msgid "dashboard.inspect.title"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.off-arialabel"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.off-description"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.off-label"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.on-description"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.add-panel"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.comments-show"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.mark-favorite"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.open-original"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.playlist-next"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.playlist-previous"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.playlist-stop"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.toolbar.refresh"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.save"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.settings"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.share"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.tv-button"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.unmark-favorite"
msgstr ""
#: public/app/core/components/NavBar/navBarItem-translations.ts
msgid "nav.alerting"
msgstr ""
@ -366,6 +434,10 @@ msgstr ""
msgid "nav.users"
msgstr ""
#: public/app/core/navigation/kiosk.ts
msgid "navigation.kiosk.tv-alert"
msgstr ""
#: public/app/features/dashboard/utils/getPanelMenu.ts
msgid "panel.header-menu.inspect"
msgstr ""

View File

@ -202,6 +202,74 @@ msgstr ""
msgid "dashboard.inspect.title"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.off-arialabel"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.off-description"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.off-label"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.on-description"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.add-panel"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.comments-show"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.mark-favorite"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.open-original"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.playlist-next"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.playlist-previous"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.playlist-stop"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.toolbar.refresh"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.save"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.settings"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.share"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.tv-button"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.unmark-favorite"
msgstr ""
#: public/app/core/components/NavBar/navBarItem-translations.ts
msgid "nav.alerting"
msgstr ""
@ -366,6 +434,10 @@ msgstr ""
msgid "nav.users"
msgstr ""
#: public/app/core/navigation/kiosk.ts
msgid "navigation.kiosk.tv-alert"
msgstr ""
#: public/app/features/dashboard/utils/getPanelMenu.ts
msgid "panel.header-menu.inspect"
msgstr ""

View File

@ -202,6 +202,74 @@ msgstr ""
msgid "dashboard.inspect.title"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.off-arialabel"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.off-description"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.off-label"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.refresh-picker.on-description"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.add-panel"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.comments-show"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.mark-favorite"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.open-original"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.playlist-next"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.playlist-previous"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.playlist-stop"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
msgid "dashboard.toolbar.refresh"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.save"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.settings"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.share"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.tv-button"
msgstr ""
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
msgid "dashboard.toolbar.unmark-favorite"
msgstr ""
#: public/app/core/components/NavBar/navBarItem-translations.ts
msgid "nav.alerting"
msgstr ""
@ -366,6 +434,10 @@ msgstr ""
msgid "nav.users"
msgstr ""
#: public/app/core/navigation/kiosk.ts
msgid "navigation.kiosk.tv-alert"
msgstr ""
#: public/app/features/dashboard/utils/getPanelMenu.ts
msgid "panel.header-menu.inspect"
msgstr ""