From 1c5545da04c6f4fdd9783930990ef6b4458bb401 Mon Sep 17 00:00:00 2001 From: Ashley Harrison Date: Wed, 30 Apr 2025 14:40:15 +0100 Subject: [PATCH] Internationalisation: Check and mark up tooltip content prop (#104536) * make lint rule check for "content" * undo unnecessary translation --- .../rules/no-untranslated-strings.cjs | 2 +- .../TimeRangePicker/TimeRangeContent.tsx | 6 +- .../PanelChrome/LoadingIndicator.tsx | 3 +- .../components/PanelChrome/PanelChrome.tsx | 10 +- .../AccessControl/PermissionListItem.tsx | 8 +- .../ForgottenPassword/ChangePassword.tsx | 5 +- .../admin/AdminFeatureTogglesTable.tsx | 7 +- .../app/features/admin/Users/UsersTable.tsx | 13 ++- .../admin/ldap/LdapConnectionStatus.tsx | 14 ++- .../features/admin/ldap/LdapUserGroups.tsx | 9 +- .../bridges/DeclareIncidentButton.tsx | 14 ++- .../mute-timings/MuteTimingTimeRange.tsx | 8 +- .../notification-policies/Policy.tsx | 24 ++++- .../components/receivers/TemplatesTable.tsx | 6 +- .../rule-editor/DashboardPicker.tsx | 14 ++- .../rule-types/DisabledTooltip.tsx | 9 +- .../components/rules/AlertStateTag.tsx | 9 +- .../unified/components/rules/RuleDetails.tsx | 8 +- .../components/rules/RuleListErrors.tsx | 5 +- .../unified/components/rules/RuleState.tsx | 10 +- .../unified/components/rules/RulesTable.tsx | 7 +- .../CentralAlertHistoryScene.tsx | 4 +- .../rules/state-history/LokiStateHistory.tsx | 7 +- .../unified/plugins/PluginOriginBadge.tsx | 13 ++- .../rule-list/components/GroupStatus.tsx | 3 +- public/app/features/api-keys/ApiKeysTable.tsx | 7 +- .../variables/VariableEditorListRow.tsx | 14 ++- .../variables/VariablesUnknownTable.tsx | 9 +- .../version-history/VersionHistoryButtons.tsx | 10 +- .../explore/CorrelationEditorModeBar.tsx | 9 +- .../features/explore/Logs/LogsVolumePanel.tsx | 3 +- .../SpanFilters/SpanFilters.tsx | 5 +- .../TracePageHeader/TracePageHeader.tsx | 12 ++- .../TraceView/components/common/CopyIcon.tsx | 4 +- .../app/features/logs/components/LogRow.tsx | 8 +- .../admin/components/UpdateAllModalBody.tsx | 4 +- .../features/plugins/admin/pages/Browse.tsx | 5 +- .../features/profile/UserProfileEditForm.tsx | 7 +- .../components/ServiceAccountTokensTable.tsx | 11 +- public/locales/en-US/grafana.json | 101 +++++++++++++++--- 40 files changed, 356 insertions(+), 71 deletions(-) diff --git a/packages/grafana-eslint-rules/rules/no-untranslated-strings.cjs b/packages/grafana-eslint-rules/rules/no-untranslated-strings.cjs index 4dca9276341..b82adf2b412 100644 --- a/packages/grafana-eslint-rules/rules/no-untranslated-strings.cjs +++ b/packages/grafana-eslint-rules/rules/no-untranslated-strings.cjs @@ -21,7 +21,7 @@ const createRule = ESLintUtils.RuleCreator( ); /** @type {string[]} */ -const propsToCheck = ['label', 'description', 'placeholder', 'aria-label', 'title', 'text', 'tooltip']; +const propsToCheck = ['content', 'label', 'description', 'placeholder', 'aria-label', 'title', 'text', 'tooltip']; /** @type {RuleDefinition} */ const noUntranslatedStrings = createRule({ diff --git a/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimeRangeContent.tsx b/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimeRangeContent.tsx index 1a87d264f7a..ecb236f077b 100644 --- a/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimeRangeContent.tsx +++ b/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimeRangeContent.tsx @@ -136,13 +136,15 @@ export const TimeRangeContent = (props: Props) => { }; const fiscalYear = rangeUtil.convertRawToRange({ from: 'now/fy', to: 'now/fy' }, timeZone, fiscalYearStartMonth); - const fiscalYearMessage = t('time-picker.range-content.fiscal-year', 'Fiscal year'); const fyTooltip = (
{rangeUtil.isFiscal(value) ? ( diff --git a/packages/grafana-ui/src/components/PanelChrome/LoadingIndicator.tsx b/packages/grafana-ui/src/components/PanelChrome/LoadingIndicator.tsx index dc1357c521d..6fbb87ccbb3 100644 --- a/packages/grafana-ui/src/components/PanelChrome/LoadingIndicator.tsx +++ b/packages/grafana-ui/src/components/PanelChrome/LoadingIndicator.tsx @@ -4,6 +4,7 @@ import { GrafanaTheme2 } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; import { useStyles2 } from '../../themes'; +import { t } from '../../utils/i18n'; import { Icon } from '../Icon/Icon'; import { Tooltip } from '../Tooltip/Tooltip'; @@ -27,7 +28,7 @@ export const LoadingIndicator = ({ onCancel, loading }: LoadingIndicatorProps) = } return ( - + {loadingState === LoadingState.Streaming && ( - + @@ -301,7 +307,7 @@ export function PanelChrome({ )} {loadingState === LoadingState.Loading && onCancelQuery && ( - + ) : ( - + )} {installed === false && ( - + @@ -64,7 +69,12 @@ export const DeclareIncidentMenuItem = ({ title = '', severity = '', url = '' }: /> )} {installed === false && ( - + { ( - + {children} )} diff --git a/public/app/features/alerting/unified/components/notification-policies/Policy.tsx b/public/app/features/alerting/unified/components/notification-policies/Policy.tsx index 68d9cfce27d..f49cdc34e87 100644 --- a/public/app/features/alerting/unified/components/notification-policies/Policy.tsx +++ b/public/app/features/alerting/unified/components/notification-policies/Policy.tsx @@ -623,7 +623,13 @@ export function isAutoGeneratedRootAndSimplifiedEnabled(route: RouteWithID) { } const ProvisionedTooltip = (children: ReactNode) => ( - + {children} ); @@ -649,7 +655,13 @@ const Errors: FC<{ errors: React.ReactNode[] }> = ({ errors }) => ( const ContinueMatchingIndicator: FC = () => { const styles = useStyles2(getStyles); return ( - +
@@ -660,7 +672,13 @@ const ContinueMatchingIndicator: FC = () => { const AllMatchesIndicator: FC = () => { const styles = useStyles2(getStyles); return ( - +
diff --git a/public/app/features/alerting/unified/components/receivers/TemplatesTable.tsx b/public/app/features/alerting/unified/components/receivers/TemplatesTable.tsx index c023a052d13..632dafb9ae3 100644 --- a/public/app/features/alerting/unified/components/receivers/TemplatesTable.tsx +++ b/public/app/features/alerting/unified/components/receivers/TemplatesTable.tsx @@ -143,8 +143,10 @@ function TemplateRow({ notificationTemplate, idx, alertManagerName, onDeleteClic This template is misconfigured.
- Templates must be defined in both the and{' '} - sections of your alertmanager configuration. + Templates must be defined in both the{' '} + and{' '} + sections of your + alertmanager configuration. } diff --git a/public/app/features/alerting/unified/components/rule-editor/DashboardPicker.tsx b/public/app/features/alerting/unified/components/rule-editor/DashboardPicker.tsx index 62782920142..48de57ff77c 100644 --- a/public/app/features/alerting/unified/components/rule-editor/DashboardPicker.tsx +++ b/public/app/features/alerting/unified/components/rule-editor/DashboardPicker.tsx @@ -153,12 +153,22 @@ export const DashboardPicker = ({ dashboardUid, panelId, isOpen, onChange, onDis {panelTitle}
{!isAlertingCompatible && !disabled && ( - + )} {disabled && ( - + )} diff --git a/public/app/features/alerting/unified/components/rule-editor/rule-types/DisabledTooltip.tsx b/public/app/features/alerting/unified/components/rule-editor/rule-types/DisabledTooltip.tsx index ffbffcfa635..5d480b44096 100644 --- a/public/app/features/alerting/unified/components/rule-editor/rule-types/DisabledTooltip.tsx +++ b/public/app/features/alerting/unified/components/rule-editor/rule-types/DisabledTooltip.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import { Tooltip } from '@grafana/ui'; +import { t } from 'app/core/internationalization'; type Props = { visible: boolean; @@ -12,7 +13,13 @@ const DisabledTooltip = ({ children, visible = false }: React.PropsWithChildren< } return ( - +
{children}
); diff --git a/public/app/features/alerting/unified/components/rules/AlertStateTag.tsx b/public/app/features/alerting/unified/components/rules/AlertStateTag.tsx index b8467088695..f13294540ca 100644 --- a/public/app/features/alerting/unified/components/rules/AlertStateTag.tsx +++ b/public/app/features/alerting/unified/components/rules/AlertStateTag.tsx @@ -2,6 +2,7 @@ import { memo } from 'react'; import { AlertState } from '@grafana/data'; import { Icon, Tooltip } from '@grafana/ui'; +import { t } from 'app/core/internationalization'; import { GrafanaAlertState, GrafanaAlertStateWithReason, PromAlertingRuleState } from 'app/types/unified-alerting-dto'; import { Trans } from '../../../../../core/internationalization'; @@ -17,7 +18,13 @@ interface Props { export const AlertStateTag = memo(({ state, isPaused = false, size = 'md', muted = false }: Props) => { if (isPaused) { return ( - + Paused diff --git a/public/app/features/alerting/unified/components/rules/RuleDetails.tsx b/public/app/features/alerting/unified/components/rules/RuleDetails.tsx index 787a0550037..bf9d4c57b3a 100644 --- a/public/app/features/alerting/unified/components/rules/RuleDetails.tsx +++ b/public/app/features/alerting/unified/components/rules/RuleDetails.tsx @@ -116,6 +116,7 @@ const EvaluationBehaviorSummary = ({ rule }: EvaluationBehaviorSummaryProps) => > @@ -133,7 +134,12 @@ const EvaluationBehaviorSummary = ({ rule }: EvaluationBehaviorSummaryProps) => label={t('alerting.evaluation-behavior-summary.label-evaluation-time', 'Evaluation time')} horizontal={true} > - + {Time({ timeInMs: lastEvaluationDuration * 1000, humanize: true })} diff --git a/public/app/features/alerting/unified/components/rules/RuleListErrors.tsx b/public/app/features/alerting/unified/components/rules/RuleListErrors.tsx index e760c2b28a2..c7717199836 100644 --- a/public/app/features/alerting/unified/components/rules/RuleListErrors.tsx +++ b/public/app/features/alerting/unified/components/rules/RuleListErrors.tsx @@ -147,7 +147,10 @@ const ErrorSummaryButton: FC = ({ count, onClick }) => { return (
- + diff --git a/public/app/features/alerting/unified/components/rules/state-history/LokiStateHistory.tsx b/public/app/features/alerting/unified/components/rules/state-history/LokiStateHistory.tsx index e4769d5f293..5d812cb3743 100644 --- a/public/app/features/alerting/unified/components/rules/state-history/LokiStateHistory.tsx +++ b/public/app/features/alerting/unified/components/rules/state-history/LokiStateHistory.tsx @@ -121,7 +121,12 @@ const LokiStateHistory = ({ ruleUID }: Props) => { Common labels - + diff --git a/public/app/features/alerting/unified/plugins/PluginOriginBadge.tsx b/public/app/features/alerting/unified/plugins/PluginOriginBadge.tsx index 03c1eca7620..f5035dbeee2 100644 --- a/public/app/features/alerting/unified/plugins/PluginOriginBadge.tsx +++ b/public/app/features/alerting/unified/plugins/PluginOriginBadge.tsx @@ -3,6 +3,7 @@ import { useAsync } from 'react-use'; import { Badge, IconSize, Tooltip } from '@grafana/ui'; import { getSvgSize } from '@grafana/ui/internal'; +import { t } from '../../../../core/internationalization'; import { getPluginSettings } from '../../../plugins/pluginSettings'; interface PluginOriginBadgeProps { @@ -31,5 +32,15 @@ export function PluginOriginBadge({ pluginId, size = 'md' }: PluginOriginBadgePr ); - return {badgeIcon}; + return ( + + {badgeIcon} + + ); } diff --git a/public/app/features/alerting/unified/rule-list/components/GroupStatus.tsx b/public/app/features/alerting/unified/rule-list/components/GroupStatus.tsx index fb5af7d3b4f..c631ada6a0f 100644 --- a/public/app/features/alerting/unified/rule-list/components/GroupStatus.tsx +++ b/public/app/features/alerting/unified/rule-list/components/GroupStatus.tsx @@ -2,6 +2,7 @@ import { css, keyframes } from '@emotion/css'; import { GrafanaTheme2 } from '@grafana/data'; import { Icon, Tooltip, useStyles2 } from '@grafana/ui'; +import { t } from 'app/core/internationalization'; interface GroupStatusProps { status: 'deleting'; // We don't support other statuses yet @@ -14,7 +15,7 @@ export function GroupStatus({ status }: GroupStatusProps) {
{status === 'deleting' && ( - +
diff --git a/public/app/features/api-keys/ApiKeysTable.tsx b/public/app/features/api-keys/ApiKeysTable.tsx index 983903d9c15..7cb523d92bc 100644 --- a/public/app/features/api-keys/ApiKeysTable.tsx +++ b/public/app/features/api-keys/ApiKeysTable.tsx @@ -50,7 +50,12 @@ export const ApiKeysTable = ({ apiKeys, timeZone, onDelete, onMigrate }: Props) {formatDate(key.expiration, timeZone)} {isExpired && ( - + diff --git a/public/app/features/dashboard-scene/settings/variables/VariableEditorListRow.tsx b/public/app/features/dashboard-scene/settings/variables/VariableEditorListRow.tsx index f02a58a3d5b..991f870e40c 100644 --- a/public/app/features/dashboard-scene/settings/variables/VariableEditorListRow.tsx +++ b/public/app/features/dashboard-scene/settings/variables/VariableEditorListRow.tsx @@ -146,7 +146,12 @@ function VariableCheckIndicator({ passed }: VariableCheckIndicatorProps): ReactE const styles = useStyles2(getStyles); if (passed) { return ( - + + Renamed or missing variables - + diff --git a/public/app/features/dashboard-scene/settings/version-history/VersionHistoryButtons.tsx b/public/app/features/dashboard-scene/settings/version-history/VersionHistoryButtons.tsx index 020124ece5e..b3d3db9cdee 100644 --- a/public/app/features/dashboard-scene/settings/version-history/VersionHistoryButtons.tsx +++ b/public/app/features/dashboard-scene/settings/version-history/VersionHistoryButtons.tsx @@ -1,5 +1,5 @@ import { Tooltip, Button, Stack } from '@grafana/ui'; -import { Trans } from 'app/core/internationalization'; +import { Trans, t } from 'app/core/internationalization'; import { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions'; type VersionsButtonsType = { @@ -30,7 +30,13 @@ export const VersionsHistoryButtons = ({ Show more versions )} - + diff --git a/public/app/features/explore/CorrelationEditorModeBar.tsx b/public/app/features/explore/CorrelationEditorModeBar.tsx index 26aaba11a1c..6dafc41893b 100644 --- a/public/app/features/explore/CorrelationEditorModeBar.tsx +++ b/public/app/features/explore/CorrelationEditorModeBar.tsx @@ -6,7 +6,7 @@ import { GrafanaTheme2, colorManipulator } from '@grafana/data'; import { reportInteraction } from '@grafana/runtime'; import { Button, Icon, Stack, Tooltip, useStyles2 } from '@grafana/ui'; import { Prompt } from 'app/core/components/FormPrompt/Prompt'; -import { Trans } from 'app/core/internationalization'; +import { Trans, t } from 'app/core/internationalization'; import { CORRELATION_EDITOR_POST_CONFIRM_ACTION, ExploreItemState, useDispatch, useSelector } from 'app/types'; import { CorrelationUnsavedChangesModal } from './CorrelationUnsavedChangesModal'; @@ -231,7 +231,12 @@ export const CorrelationEditorModeBar = ({ panes }: { panes: Array<[string, Expl )}
- +