Internationalisation: More markup (#103634)

* some manual markup

* more markup

* update count names
This commit is contained in:
Ashley Harrison
2025-04-09 11:31:48 +01:00
committed by GitHub
parent 837f4864b1
commit a420e2f8f2
32 changed files with 295 additions and 204 deletions
+4 -115
View File
@@ -1482,10 +1482,6 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use any type assertions.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"]
],
"public/app/features/annotations/components/StandardAnnotationQueryEditor.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/annotations/events_processing.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
],
@@ -1494,33 +1490,6 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Unexpected any. Specify a different type.", "2"]
],
"public/app/features/api-keys/ApiKeysPage.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "3"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "5"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "6"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "7"]
],
"public/app/features/api-keys/MigrateToServiceAccountsCard.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"]
],
"public/app/features/auth-config/AuthDrawer.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"]
],
"public/app/features/auth-config/AuthProvidersListPage.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/auth-config/ProviderConfigForm.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/auth-config/fields.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
@@ -1542,28 +1511,12 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use export all (\`export * from ...\`)", "1"],
[0, 0, 0, "Do not use export all (\`export * from ...\`)", "2"]
],
"public/app/features/canvas/elements/notFound.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/canvas/runtime/ables.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/canvas/runtime/frame.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/commandPalette/ResultItem.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/connections/components/ConnectionsRedirectNotice/ConnectionsRedirectNotice.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/connections/components/ConnectionsRedirectNotice/index.ts:5381": [
[0, 0, 0, "Do not use export all (\`export * from ...\`)", "0"]
],
"public/app/features/connections/pages/DataSourceDetailsPage.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/connections/pages/index.tsx:5381": [
[0, 0, 0, "Do not re-export imported variable (\`./AddNewConnectionPage\`)", "0"],
[0, 0, 0, "Do not re-export imported variable (\`./DataSourceDashboardsPage\`)", "1"],
@@ -1583,8 +1536,7 @@ exports[`better eslint`] = {
],
"public/app/features/connections/tabs/ConnectData/NoAccessModal/NoAccessModal.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/connections/tabs/ConnectData/NoAccessModal/index.tsx:5381": [
[0, 0, 0, "Do not use export all (\`export * from ...\`)", "0"]
@@ -1613,24 +1565,9 @@ exports[`better eslint`] = {
"public/app/features/dashboard-scene/edit-pane/DashboardEditPane.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
],
"public/app/features/dashboard-scene/embedding/EmbeddedDashboardTestPage.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/dashboard-scene/inspect/HelpWizard/HelpWizard.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "3"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "5"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "6"]
],
"public/app/features/dashboard-scene/inspect/HelpWizard/utils.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
],
"public/app/features/dashboard-scene/inspect/PanelInspectDrawer.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/dashboard-scene/pages/DashboardScenePage.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"],
[0, 0, 0, "Do not use any type assertions.", "1"],
@@ -1639,42 +1576,21 @@ exports[`better eslint`] = {
"public/app/features/dashboard-scene/panel-edit/LibraryVizPanelInfo.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/dashboard-scene/panel-edit/PanelDataPane/NewAlertRuleButton.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataAlertingTab.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataPane.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
],
"public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataQueriesTab.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/dashboard-scene/panel-edit/PanelDataPane/TransformationsDrawer.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/dashboard-scene/panel-edit/PanelEditorRenderer.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "1"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "2"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "3"]
],
"public/app/features/dashboard-scene/panel-edit/PanelOptionsPane.test.tsx:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
],
"public/app/features/dashboard-scene/panel-edit/SaveLibraryVizPanelModal.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/dashboard-scene/saving/SaveDashboardDrawer.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "1"]
],
"public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"]
],
"public/app/features/dashboard-scene/saving/SaveProvisionedDashboardForm.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
@@ -1687,9 +1603,6 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use any type assertions.", "5"],
[0, 0, 0, "Unexpected any. Specify a different type.", "6"]
],
"public/app/features/dashboard-scene/saving/shared.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/dashboard-scene/scene/PanelMenuBehavior.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
],
@@ -1723,31 +1636,16 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/dashboard-scene/settings/JsonModelEditView.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/dashboard-scene/settings/annotations/AnnotationSettingsEdit.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"]
],
"public/app/features/dashboard-scene/settings/annotations/AnnotationSettingsList.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/dashboard-scene/settings/annotations/index.tsx:5381": [
[0, 0, 0, "Do not re-export imported variable (\`./AnnotationSettingsEdit\`)", "0"],
[0, 0, 0, "Do not re-export imported variable (\`./AnnotationSettingsList\`)", "1"]
],
"public/app/features/dashboard-scene/settings/links/DashboardLinkList.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"]
],
"public/app/features/dashboard-scene/settings/variables/components/DataSourceVariableForm.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/dashboard-scene/settings/variables/components/IntervalVariableForm.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "1"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/dashboard-scene/settings/variables/components/QueryVariableForm.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
@@ -1769,9 +1667,6 @@ exports[`better eslint`] = {
"public/app/features/dashboard-scene/settings/version-history/VersionHistoryHeader.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/dashboard-scene/settings/version-history/VersionHistoryTable.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"]
],
"public/app/features/dashboard-scene/settings/version-history/index.ts:5381": [
[0, 0, 0, "Do not re-export imported variable (\`./HistorySrv\`)", "0"],
[0, 0, 0, "Do not re-export imported variable (\`./VersionHistoryButtons\`)", "1"],
@@ -1785,9 +1680,6 @@ exports[`better eslint`] = {
"public/app/features/dashboard-scene/sharing/ShareButton/share-snapshot/UpsertSnapshot.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"]
],
"public/app/features/dashboard-scene/sharing/public-dashboards/ConfigPublicDashboard.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/dashboard-scene/solo/SoloPanelPage.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
@@ -1802,9 +1694,6 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use any type assertions.", "1"],
[0, 0, 0, "Do not use any type assertions.", "2"]
],
"public/app/features/dashboard-scene/variables/VariableUsagesButton.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with <Trans /> or use t()", "0"]
],
"public/app/features/dashboard/api/ResponseTransformers.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"],
[0, 0, 0, "Do not use any type assertions.", "1"],
@@ -156,9 +156,13 @@ export default class StandardAnnotationQueryEditor extends PureComponent<Props,
}
const frame = panelData?.series?.[0] ?? panelData?.annotations?.[0];
const numEvents = events.length;
const numFields = frame?.fields.length;
return (
<p>
{events.length} events (from {frame?.fields.length} fields)
<Trans i18nKey="annotations.standard-annotation-query-editor.events-found">
{{ numEvents }} events (from {{ numFields }} fields)
</Trans>
</p>
);
}
@@ -212,7 +216,13 @@ export default class StandardAnnotationQueryEditor extends PureComponent<Props,
// Find the annotation runner
let QueryEditor = datasource.annotations?.QueryEditor || datasource.components?.QueryEditor;
if (!QueryEditor) {
return <div>Annotations are not supported. This datasource needs to export a QueryEditor</div>;
return (
<div>
<Trans i18nKey="annotations.standard-annotation-query-editor.no-query-editor">
Annotations are not supported. This datasource needs to export a QueryEditor
</Trans>
</div>
);
}
const query = {
+35 -16
View File
@@ -190,41 +190,60 @@ export const MigrationSummary: React.FC<MigrationSummaryProps> = ({ visible, dat
<Trans i18nKey="api-keys.migration-summary.migration-successful">Migration Successful!</Trans>
</p>
<p>
<strong>Total: </strong>
{data.total}
<Trans i18nKey="api-keys.migration-summary.total" values={{ total: data.total }}>
<strong>Total: </strong>
{'{{total}}'}
</Trans>
</p>
<p>
<strong>Migrated: </strong>
{data.migrated}
<Trans i18nKey="api-keys.migration-summary.migrated" values={{ migrated: data.migrated }}>
<strong>Migrated: </strong>
{'{{migrated}}'}
</Trans>
</p>
</div>
)}
{data.failedApikeyIDs.length !== 0 && (
<div style={styles.migrationSummary}>
<p>
Migration Complete! Please note, while there might be a few API keys flagged as `failed migrations`, rest
assured, all of your API keys are fully functional and operational. Please try again or contact support.
<Trans i18nKey="api-keys.migration-summary.migration-complete">
Migration complete! Please note, while there might be a few API keys flagged as `failed migrations`, rest
assured, all of your API keys are fully functional and operational. Please try again or contact support.
</Trans>
</p>
<hr />
<p>
<strong>Total: </strong>
{data.total}
<Trans i18nKey="api-keys.migration-summary.total" values={{ total: data.total }}>
<strong>Total: </strong>
{'{{total}}'}
</Trans>
</p>
<p>
<strong>Migrated: </strong>
{data.migrated}
<Trans i18nKey="api-keys.migration-summary.migrated" values={{ migrated: data.migrated }}>
<strong>Migrated: </strong>
{'{{migrated}}'}
</Trans>
</p>
<p>
<strong>Failed: </strong>
{data.failed}
<Trans i18nKey="api-keys.migration-summary.failed" values={{ failed: data.failed }}>
<strong>Failed: </strong>
{'{{failed}}'}
</Trans>
</p>
<p>
<strong>Failed Api Key IDs: </strong>
{data.failedApikeyIDs.join(', ')}
<Trans i18nKey="api-keys.migration-summary.failed-ids" values={{ ids: data.failedApikeyIDs.join(', ') }}>
<strong>Failed api key IDs: </strong>
{'{{ids}}'}
</Trans>
</p>
<p>
<strong>Failed Details: </strong>
{data.failedDetails.join(', ')}
<Trans
i18nKey="api-keys.migration-summary.failed-details"
values={{ details: data.failedDetails.join(', ') }}
>
<strong>Failed details: </strong>
{'{{details}}'}
</Trans>
</p>
</div>
)}
@@ -46,9 +46,14 @@ export const MigrateToServiceAccountsCard = ({ onMigrate, apikeysCount, disabled
severity="warning"
>
<div className={styles.text}>
API keys are deprecated and will be removed from Grafana on Jan 31, 2025. Each API key will be migrated into
a service account with a token and will continue to work as they were. We encourage you to migrate your API
keys to service accounts now. {docsLink}
<Trans
i18nKey="api-keys.migrate-to-service-accounts-card.body-switch-service-accounts"
components={{ docsLink }}
>
API keys are deprecated and will be removed from Grafana on Jan 31, 2025. Each API key will be migrated
into a service account with a token and will continue to work as they were. We encourage you to migrate
your API keys to service accounts now. {'<docsLink />'}
</Trans>
</div>
<div className={styles.actionRow}>
<Button className={styles.actionButton} onClick={() => setIsModalOpen(true)}>
@@ -57,7 +62,7 @@ export const MigrateToServiceAccountsCard = ({ onMigrate, apikeysCount, disabled
</Trans>
</Button>
<ConfirmModal
title={'Migrate API keys to Service accounts'}
title={t('api-keys.migrate-to-service-accounts-card.modal-title', 'Migrate API keys to service accounts')}
isOpen={isModalOpen}
body={migrationBoxDesc}
confirmText={'Yes, migrate now'}
@@ -76,7 +81,9 @@ export const MigrateToServiceAccountsCard = ({ onMigrate, apikeysCount, disabled
severity="warning"
>
<div className={styles.text}>
No API keys were found. If you reload the browser, this page will not be available anymore.
<Trans i18nKey="api-keys.migrate-to-service-accounts-card.body-no-api-keys-found">
No API keys were found. If you reload the browser, this page will not be available anymore.
</Trans>
</div>
</Alert>
</>
@@ -70,7 +70,7 @@ export const AuthDrawerUnconnected = ({
};
const subtitle = (
<>
<Trans i18nKey="auth-config.auth-drawer-unconneced.subtitle">
Configure auth settings. Find out more in our{' '}
<TextLink
external={true}
@@ -79,7 +79,7 @@ export const AuthDrawerUnconnected = ({
documentation
</TextLink>
.
</>
</Trans>
);
const styles = useStyles2(getStyles);
@@ -101,7 +101,9 @@ export const AuthDrawerUnconnected = ({
</Trans>
</Text>
<Text variant="body" color="secondary">
Allow users to use the same email address to log into Grafana with different identity providers.
<Trans i18nKey="auth-config.auth-drawer-unconnected.enable-insecure-email-lookup-description">
Allow users to use the same email address to log into Grafana with different identity providers.
</Trans>
</Text>
<Switch value={allowInsecureEmail} onChange={oauthAllowInsecureEmailLookupOnChange} />
</div>
@@ -110,7 +112,10 @@ export const AuthDrawerUnconnected = ({
variant="secondary"
className={styles.button}
onClick={resetButtonOnClick}
tooltip="This action will disregard any saved changes and load the configuration from the configuration file."
tooltip={t(
'auth-config.auth-drawer-unconnected.reset-tooltip',
'This action will disregard any saved changes and load the configuration from the configuration file.'
)}
>
<Trans i18nKey="auth-config.auth-drawer-unconnected.reset">Reset</Trans>
</Button>
@@ -82,7 +82,7 @@ export const AuthConfigPageUnconnected = ({
<Page
navId="authentication"
subTitle={
<>
<Trans i18nKey="auth-config-auth-config-page-unconnected.subtitle">
Manage your auth settings and configure single sign-on. Find out more in our{' '}
<TextLink
external={true}
@@ -91,7 +91,7 @@ export const AuthConfigPageUnconnected = ({
documentation
</TextLink>
.
</>
</Trans>
}
actions={
config.buildInfo.edition !== GrafanaEdition.OpenSource && (
@@ -168,7 +168,11 @@ export const ProviderConfigForm = ({ config, provider, isLoading }: ProviderConf
}}
/>
<Field label={t('auth-config.provider-config-form.label-enabled', 'Enabled')} hidden={true}>
<Switch {...register('enabled')} id="enabled" label={'Enabled'} />
<Switch
{...register('enabled')}
id="enabled"
label={t('auth-config.provider-config-form.enabled-label-enabled', 'Enabled')}
/>
</Field>
<Stack gap={2} direction={'column'}>
{sections
@@ -244,8 +248,10 @@ export const ProviderConfigForm = ({ config, provider, isLoading }: ProviderConf
</Trans>
</span>
<small>
After resetting these settings Grafana will use the provider configuration from the system (config
file/environment variables) if any.
<Trans i18nKey="auth-config.provider-config-form.reset-configuration-description">
After resetting these settings Grafana will use the provider configuration from the system (config
file/environment variables) if any.
</Trans>
</small>
</Stack>
}
@@ -1,5 +1,6 @@
import { PureComponent } from 'react';
import { Trans } from '../../../core/internationalization';
import { CanvasElementItem, CanvasElementProps } from '../element';
class NotFoundDisplay extends PureComponent<CanvasElementProps> {
@@ -7,8 +8,13 @@ class NotFoundDisplay extends PureComponent<CanvasElementProps> {
const { config } = this.props;
return (
<div>
<h3>NOT FOUND:</h3>
<pre>{JSON.stringify(config, null, 2)}</pre>
<Trans
i18nKey="canvas.not-found-display.not-found"
components={{ config: <pre>{JSON.stringify(config, null, 2)}</pre> }}
>
<h3>Not found: </h3>
{'<config />'}
</Trans>
</div>
);
}
@@ -34,6 +34,7 @@ export const settingsViewable = (scene: Scene) => ({
const rect = moveable.getRect();
return (
// eslint-disable-next-line @grafana/no-untranslated-strings
<div
key={'settings-viewable'}
className={'moveable-settings'}
@@ -69,6 +70,7 @@ export const dimensionViewable = {
render(moveable: MoveableManagerInterface<unknown, unknown>, React: Renderer) {
const rect = moveable.getRect();
return (
// eslint-disable-next-line @grafana/no-untranslated-strings
<div
key={'dimension-viewable'}
className={'moveable-dimension'}
@@ -54,6 +54,7 @@ export const ResultItem = React.forwardRef(
{!hasCommandOrLink(ancestor) && (
<>
<span className={styles.breadcrumbAncestor}>{ancestor.name}</span>
{/* eslint-disable-next-line @grafana/no-untranslated-strings */}
<span className={styles.breadcrumbSeparator}>&rsaquo;</span>
</>
)}
@@ -34,8 +34,10 @@ export function ConnectionsRedirectNotice() {
<Alert severity="info" title="" onRemove={() => setShowNotice(false)}>
<div className={styles.alertContent}>
<p className={styles.alertParagraph}>
Data sources have a new home! You can discover new data sources or manage existing ones in the Connections
page, accessible from the main menu.
<Trans i18nKey="connections.connections-redirect-notice.body">
Data sources have a new home! You can discover new data sources or manage existing ones in the Connections
page, accessible from the main menu.
</Trans>
</p>
<LinkButton
aria-label={t(
@@ -1,9 +1,10 @@
import { useParams } from 'react-router-dom-v5-compat';
import { Alert, Badge } from '@grafana/ui';
import { Alert, Badge, TextLink } from '@grafana/ui';
import { PluginDetailsPage } from 'app/features/plugins/admin/components/PluginDetailsPage';
import { StoreState, useSelector, AppNotificationSeverity } from 'app/types';
import { Trans } from '../../../core/internationalization';
import { ROUTES } from '../constants';
export function DataSourceDetailsPage() {
@@ -32,9 +33,11 @@ function NotFoundDatasource() {
return (
<Alert severity={AppNotificationSeverity.Warning} title="">
Maybe you mistyped the URL or the plugin with the id <Badge text={id} color="orange" /> is unavailable.
<br />
To see a list of available datasources please <a href={ROUTES.AddNewConnection}>click here</a>.
<Trans i18nKey="connections.not-found-datasource.body">
Maybe you mistyped the URL or the plugin with the id <Badge text={id} color="orange" /> is unavailable.
<br />
To see a list of available datasources please <TextLink href={ROUTES.AddNewConnection}>click here</TextLink>.
</Trans>
</Alert>
);
}
@@ -90,8 +90,10 @@ export function NoAccessModal({ item, isOpen, onDismiss }: NoAccessModalProps) {
</div>
<div>
<p>
Editors cannot add new connections. You may check to see if it is already configured in{' '}
<a href="/connections/datasources">Data sources</a>.
<Trans i18nKey="connections.no-access-modal.editor-warning">
Editors cannot add new connections. You may check to see if it is already configured in{' '}
<a href="/connections/datasources">Data sources</a>.
</Trans>
</p>
<p>
<Trans i18nKey="connections.no-access-modal.connection-contact-grafana-admin">
@@ -15,6 +15,8 @@ export function EmbeddedDashboardTestPage() {
pageNav={{ text: 'Embedding dashboard', subTitle: 'Showing dashboard: Panel Tests - Pie chart' }}
layout={PageLayoutType.Canvas}
>
{/* this is a test page, no need to translate */}
{/* eslint-disable-next-line @grafana/no-untranslated-strings */}
<Box paddingY={2}>Internal url state: {state}</Box>
<EmbeddedDashboard uid="lVE-2YFMz" initialState={state} onStateChange={setState} />
</Page>
@@ -19,8 +19,8 @@ import {
FeatureBadge,
Select,
ClipboardButton,
Icon,
Stack,
TextLink,
} from '@grafana/ui';
import { t, Trans } from 'app/core/internationalization';
import { contextSrv } from 'app/core/services/context_srv';
@@ -77,23 +77,22 @@ export function HelpWizard({ panel, onClose }: Props) {
<Stack direction="column" gap={1}>
<Stack direction="row" gap={1}>
<FeatureBadge featureState={FeatureState.beta} />
<a
href="https://grafana.com/docs/grafana/latest/troubleshooting/"
target="blank"
className="external-link"
rel="noopener noreferrer"
>
Troubleshooting docs <Icon name="external-link-alt" />
</a>
<TextLink href="https://grafana.com/docs/grafana/latest/troubleshooting/" external>
<Trans i18nKey="dashboard-scene.help-wizard.troubleshooting-docs">Troubleshooting docs</Trans>
</TextLink>
</Stack>
<span className="muted">
To request troubleshooting help, send a snapshot of this panel to Grafana Labs Technical Support. The
snapshot contains query response data and panel settings.
<Trans i18nKey="dashboard-scene.help-wizard.troubleshooting-request-help">
To request troubleshooting help, send a snapshot of this panel to Grafana Labs Technical Support. The
snapshot contains query response data and panel settings.
</Trans>
</span>
{hasSupportBundleAccess && (
<span className="muted">
You can also retrieve a support bundle containing information concerning your Grafana instance and
configured datasources in the <a href="/support-bundles">support bundles section</a>.
<Trans i18nKey="dashboard-scene-help-wizard.support-bundle">
You can also retrieve a support bundle containing information concerning your Grafana instance and
configured datasources in the <TextLink href="/support-bundles">support bundles section</TextLink>.
</Trans>
</span>
)}
</Stack>
@@ -127,7 +126,7 @@ export function HelpWizard({ panel, onClose }: Props) {
</ClipboardButton>
) : (
<Button icon="download-alt" onClick={service.onDownloadDashboard}>
Download ({snapshotSize})
<Trans i18nKey="dashboard-scene.help-wizard.download-snapshot">Download ({{ snapshotSize }})</Trans>
</Button>
)}
</div>
@@ -151,7 +150,10 @@ export function HelpWizard({ panel, onClose }: Props) {
<>
<Field
label={t('dashboard-scene.help-wizard.label-randomize-data', 'Randomize data')}
description="Modify the original data to hide sensitive information. Note the lengths will stay the same, and duplicate values will be equal."
description={t(
'dashboard-scene.help-wizard.description-randomize-data',
'Modify the original data to hide sensitive information. Note the lengths will stay the same, and duplicate values will be equal.'
)}
>
<Stack>
<InlineSwitch
@@ -180,11 +182,13 @@ export function HelpWizard({ panel, onClose }: Props) {
<Field
label={t('dashboard-scene.help-wizard.label-support-snapshot', 'Support snapshot')}
description={`Panel: ${panelTitle}`}
description={t('dashboard-scene.help-wizard.description-support-snapshot', 'Panel: {{panelTitle}}', {
panelTitle,
})}
>
<Stack>
<Button icon="download-alt" onClick={service.onDownloadDashboard}>
Dashboard ({snapshotSize})
<Trans i18nKey="dashboard-scene.help-wizard.download-dashboard">Dashboard ({{ snapshotSize }})</Trans>
</Button>
<ClipboardButton
icon="github"
@@ -11,7 +11,7 @@ import {
SceneObjectRef,
} from '@grafana/scenes';
import { Alert, Drawer, Tab, TabsBar } from '@grafana/ui';
import { t } from 'app/core/internationalization';
import { t, Trans } from 'app/core/internationalization';
import { getDataSourceWithInspector } from 'app/features/dashboard/components/Inspector/hooks';
import { supportsDataQuery } from 'app/features/dashboard/components/PanelEditor/utils';
import { InspectTab } from 'app/features/inspector/types';
@@ -139,7 +139,9 @@ function PanelInspectRenderer({ model }: SceneComponentProps<PanelInspectDrawer>
<Alert
title={t('dashboard-scene.panel-inspect-renderer.title-panel-plugin-not-loaded', 'Panel plugin not loaded')}
>
Make sure the panel you want to inspect is visible and has been displayed before opening inspect.
<Trans i18nKey="dashboard-scene.panel-inspect-renderer.body-panel-plugin-not-loaded">
Make sure the panel you want to inspect is visible and has been displayed before opening inspect.
</Trans>
</Alert>
)}
{currentTab && currentTab.Component && <currentTab.Component model={currentTab} />}
@@ -35,7 +35,9 @@ export const ScenesNewRuleFromPanelButton = ({ panel, className }: ScenesNewRule
'No alerting capable query found'
)}
>
Cannot create alerts from this panel because no query to an alerting capable datasource is found.
<Trans i18nKey="dashboard-scene.scenes-new-rule-from-panel-button.body-no-alerting-capable-query-found">
Cannot create alerts from this panel because no query to an alerting capable datasource is found.
</Trans>
</Alert>
);
}
@@ -400,7 +400,9 @@ export function PanelDataQueriesTabRendered({ model }: SceneComponentProps<Panel
variant="secondary"
data-testid={selectors.components.QueryTab.addExpression}
>
<span>Expression&nbsp;</span>
<span>
<Trans i18nKey="dashboard-scene.panel-data-queries-tab-rendered.expression">Expression&nbsp;</Trans>
</span>
</Button>
)}
{model.renderExtraActions()}
@@ -5,6 +5,7 @@ import { GrafanaTheme2 } from '@grafana/data';
import { selectors } from '@grafana/e2e-selectors';
import { SceneComponentProps, VizPanel } from '@grafana/scenes';
import { Button, Spinner, ToolbarButton, useStyles2 } from '@grafana/ui';
import { t } from 'app/core/internationalization';
import { useEditPaneCollapsed } from '../edit-pane/shared';
import { NavToolbarActions } from '../scene/NavToolbarActions';
@@ -53,12 +54,15 @@ export function PanelEditorRenderer({ model }: SceneComponentProps<PanelEditor>)
{splitterState.collapsed && (
<div className={styles.expandOptionsWrapper}>
<ToolbarButton
tooltip={'Open options pane'}
tooltip={t('dashboard-scene.panel-editor-renderer.tooltip-open-options-pane', 'Open options pane')}
icon={'arrow-to-right'}
onClick={onToggleCollapse}
variant="canvas"
className={styles.rotate180}
aria-label={'Open options pane'}
aria-label={t(
'dashboard-scene.panel-editor-renderer.aria-label-open-options-pane',
'Open options pane'
)}
/>
</div>
)}
@@ -127,13 +131,13 @@ function VizAndDataPane({ model }: SceneComponentProps<PanelEditor>) {
{splitterState.collapsed && (
<div className={styles.expandDataPane}>
<Button
tooltip={'Open query pane'}
tooltip={t('dashboard-scene.viz-and-data-pane.tooltip-open-query-pane', 'Open query pane')}
icon={'arrow-to-right'}
onClick={onToggleCollapse}
variant="secondary"
size="sm"
className={styles.openDataPaneButton}
aria-label={'Open query pane'}
aria-label={t('dashboard-scene.viz-and-data-pane.aria-label-open-query-pane', 'Open query pane')}
/>
</div>
)}
@@ -1,5 +1,6 @@
import { SceneComponentProps, SceneObjectBase, SceneObjectState, SceneObjectRef } from '@grafana/scenes';
import { Drawer, Tab, TabsBar } from '@grafana/ui';
import { t } from 'app/core/internationalization';
import { SaveDashboardDiff } from 'app/features/dashboard/components/SaveDashboard/SaveDashboardDiff';
import { useIsProvisionedNG } from 'app/features/provisioning/hooks/useIsProvisionedNG';
@@ -59,10 +60,14 @@ export class SaveDashboardDrawer extends SceneObjectBase<SaveDashboardDrawerStat
const tabs = (
<TabsBar>
<Tab label={'Details'} active={!showDiff} onChangeTab={() => model.setState({ showDiff: false })} />
<Tab
label={t('dashboard-scene.save-dashboard-drawer.tabs.label-details', 'Details')}
active={!showDiff}
onChangeTab={() => model.setState({ showDiff: false })}
/>
{changesCount > 0 && (
<Tab
label={'Changes'}
label={t('dashboard-scene.save-dashboard-drawer.tabs.label-changes', 'Changes')}
active={showDiff}
onChangeTab={() => model.setState({ showDiff: true })}
counter={changesCount}
@@ -110,7 +110,10 @@ export function SaveDashboardForm({ dashboard, drawer, changeInfo }: Props) {
severity="error"
>
<p>
Your changes will be lost when you update the plugin. Use <strong>Save As</strong> to create custom version.
<Trans i18nKey="dashboard-scene.save-dashboard-form.render-footer.body-plugin-dashboard">
Your changes will be lost when you update the plugin. Use <strong>Save as</strong> to create custom
version.
</Trans>
</p>
<Box paddingTop={2}>
<Stack alignItems="center">
@@ -162,9 +165,11 @@ export function SaveDashboardForm({ dashboard, drawer, changeInfo }: Props) {
severity="warning"
>
<p>
Because you're using new dashboards features only supported on new Grafana dashboard schema format, the
dashboard will be saved in the new format. Please make sure you want to perform this action or you prefer to
save the dashboard as a new copy.
<Trans i18nKey="dashboard-scene.save-dashboard-form.body-dashboard-drastically-changed">
Because you're using new dashboards features only supported on new Grafana dashboard schema format, the
dashboard will be saved in the new format. Please make sure you want to perform this action or you prefer
to save the dashboard as a new copy.
</Trans>
</p>
</Alert>
)}
@@ -211,7 +216,10 @@ export function SaveDashboardFormCommonOptions({ drawer, changeInfo }: SaveDashb
'dashboard-scene.save-dashboard-form-common-options.save-timerange-label-update-default-time-range',
'Update default time range'
)}
description={'Will make current time range the new default'}
description={t(
'dashboard-scene.save-dashboard-form-common-options.save-timerange-description-current-range-default',
'Will make current time range the new default'
)}
data-testid={selectors.pages.SaveDashboardModal.saveTimerange}
/>
)}
@@ -61,7 +61,9 @@ export function NameAlreadyExistsError({ cancelButton, saveButton }: NameAlready
severity="error"
>
<p>
A dashboard with the same name in selected folder already exists. Would you still like to save this dashboard?
<Trans i18nKey="dashboard-scene.name-already-exists-error.body-name-already-exists">
A dashboard with the same name in selected folder already exists. Would you still like to save this dashboard?
</Trans>
</p>
<Box paddingTop={2}>
<Stack alignItems="center">
@@ -183,8 +183,10 @@ export class JsonModelEditView extends SceneObjectBase<JsonModelEditViewState> i
severity="error"
>
<p>
Your changes will be lost when you update the plugin. Use <strong>Save As</strong> to create custom
version.
<Trans i18nKey="dashboard-scene.json-model-edit-view.render-save-button-and-error.body-plugin-dashboard">
Your changes will be lost when you update the plugin. Use <strong>Save as</strong> to create custom
version.
</Trans>
</p>
<Box paddingTop={2}>
<Stack alignItems="center">{saveButton(true)}</Stack>
@@ -215,7 +215,10 @@ export const AnnotationSettingsEdit = ({ annotation, editIndex, panels, onUpdate
</Field>
<Field
label={t('dashboard-scene.annotation-settings-edit.label-hidden', 'Hidden')}
description="Annotation queries can be toggled on or off at the top of the dashboard. With this option checked this toggle will be hidden."
description={t(
'dashboard-scene.annotation-settings-edit.description-hidden',
'Annotation queries can be toggled on or off at the top of the dashboard. With this option checked this toggle will be hidden.'
)}
>
<Checkbox
name="hide"
@@ -95,7 +95,11 @@ export const AnnotationSettingsList = ({ annotations, onNew, onEdit, onMove, onD
<DeleteButton
size="sm"
onConfirm={() => onDelete(idx)}
aria-label={`Delete query with title "${annotation.name}"`}
aria-label={t(
'dashboard-scene.annotation-settings-list.delete-aria-label',
'Delete query with title "{{title}}"',
{ title: annotation.name }
)}
/>
)}
</td>
@@ -106,7 +106,11 @@ export function DashboardLinkList({
</td>
<td style={{ width: '1%' }} role="gridcell">
<DeleteButton
aria-label={`Delete link with title "${link.title}"`}
aria-label={t(
'dashboard-scene.dashboard-link-list.delete-aria-label',
'Delete link with title "{{title}}"',
{ title: link.title }
)}
size="sm"
onConfirm={() => onDelete(idx)}
/>
@@ -60,6 +60,7 @@ export function DataSourceVariableForm({
<VariableTextField
defaultValue={regex}
name="Instance name filter"
// eslint-disable-next-line @grafana/no-untranslated-strings
placeholder="/.*-(.*)-.*/"
onBlur={onRegExBlur}
description={
@@ -59,7 +59,10 @@ export function IntervalVariableForm({
<VariableCheckboxField
value={autoEnabled}
name="Auto option"
description="Dynamically calculates interval by dividing time range by the count specified"
description={t(
'dashbaord-scene.interval-variable-form.description-auto-option',
'Dynamically calculates interval by dividing time range by the count specified'
)}
onChange={onAutoEnabledChange}
testId={selectors.pages.Dashboard.Settings.Variables.Edit.IntervalVariable.autoEnabledCheckbox}
/>
@@ -67,7 +70,10 @@ export function IntervalVariableForm({
<div className={styles.autoFields}>
<VariableSelectField
name="Step count"
description="How many times the current time range should be divided to calculate the value"
description={t(
'dashboard-scene.interval-variable-form.description-step-count',
'How many times the current time range should be divided to calculate the value'
)}
value={stepCount}
options={STEP_OPTIONS}
onChange={onAutoCountChanged}
@@ -3,7 +3,7 @@ import * as React from 'react';
import { GrafanaTheme2 } from '@grafana/data';
import { Checkbox, Button, Tag, ModalsController, useStyles2 } from '@grafana/ui';
import { Trans } from 'app/core/internationalization';
import { t, Trans } from 'app/core/internationalization';
import { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';
import { DecoratedRevisionModel } from '../VersionsEditView';
@@ -46,7 +46,11 @@ export const VersionHistoryTable = ({ versions, canCompare, onCheck, onRestore }
<tr key={version.id}>
<td>
<Checkbox
aria-label={`Toggle selection of version ${version.version}`}
aria-label={t(
'dashboard-scene.version-history-table.aria-label-toggle-selection',
'Toggle selection of version {{version}}',
{ version: version.version }
)}
className={css({
display: 'inline',
})}
@@ -9,6 +9,7 @@ import { ConfigPublicDashboardBase } from 'app/features/dashboard/components/Sha
import { PublicDashboard } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils';
import { AccessControlAction } from 'app/types';
import { Trans } from '../../../../core/internationalization';
import { shareDashboardType } from '../../../dashboard/components/ShareModal/utils';
import { getDashboardSceneFor } from '../../utils/utils';
import { ShareModal } from '../ShareModal';
@@ -49,7 +50,9 @@ export function ConfigPublicDashboard({ model, publicDashboard, isGetLoading }:
confirmText: 'Revoke public URL',
body: (
<p className={styles.description}>
Are you sure you want to revoke this URL? The dashboard will no longer be public.
<Trans i18nKey="public-dashboard.config.revoke-body">
Are you sure you want to revoke this URL? The dashboard will no longer be public.
</Trans>
</p>
),
onDismiss: () => {
@@ -30,7 +30,14 @@ export const VariableUsagesButton = ({ id, usages, isAdhoc }: Props) => {
});
return (
<NetworkGraphModal show={false} title={`Showing usages for: $${id}`} nodes={nodes} edges={network.edges}>
<NetworkGraphModal
show={false}
title={t('dashboard-scene.variable-usages-button.title-show-usages', 'Showing usages for: {{variableId}}', {
variableId: `$${id}`,
})}
nodes={nodes}
edges={network.edges}
>
{({ showModal }) => {
return (
<IconButton
+77 -3
View File
@@ -2080,7 +2080,9 @@
"title": "There are no custom annotation queries added yet"
},
"standard-annotation-query-editor": {
"events-found": "{{numEvents}} events (from {{numFields}} fields)",
"no-events-found": "No events found",
"no-query-editor": "Annotations are not supported. This datasource needs to export a QueryEditor",
"test-annotation-query": "Test annotation query",
"title-query-result": "Query result"
}
@@ -2104,6 +2106,8 @@
"message": "No API keys found"
},
"migrate-to-service-accounts-card": {
"body-no-api-keys-found": "No API keys were found. If you reload the browser, this page will not be available anymore.",
"body-switch-service-accounts": "API keys are deprecated and will be removed from Grafana on Jan 31, 2025. Each API key will be migrated into a service account with a token and will continue to work as they were. We encourage you to migrate your API keys to service accounts now. <docsLink />",
"docs-link": {
"about-migration": "Find out more about the migration here."
},
@@ -2111,13 +2115,20 @@
"migration-box-desc": {
"migrating": "Migrating all API keys will hide the API keys tab."
},
"modal-title": "Migrate API keys to service accounts",
"title-no-api-keys-found": "No API keys found",
"title-switch-service-accounts": "Switch from API keys to service accounts"
},
"migration-summary": {
"close": "Close",
"failed": "<0>Failed: </0>{{failed}}",
"failed-details": "<0>Failed details: </0>{{details}}",
"failed-ids": "<0>Failed api key IDs: </0>{{ids}}",
"migrated": "<0>Migrated: </0>{{migrated}}",
"migration-complete": "Migration complete! Please note, while there might be a few API keys flagged as `failed migrations`, rest assured, all of your API keys are fully functional and operational. Please try again or contact support.",
"migration-successful": "Migration Successful!",
"title-migration-summary": "Migration summary"
"title-migration-summary": "Migration summary",
"total": "<0>Total: </0>{{total}}"
}
},
"app-chrome": {
@@ -2135,10 +2146,15 @@
"auth-config-page-unconnected": {
"auth-settings": "Auth settings"
},
"auth-drawer-unconneced": {
"subtitle": "Configure auth settings. Find out more in our <2>documentation</2>."
},
"auth-drawer-unconnected": {
"advanced-auth": "Advanced Auth",
"enable-insecure-email-lookup": "Enable insecure email lookup",
"enable-insecure-email-lookup-description": "Allow users to use the same email address to log into Grafana with different identity providers.",
"reset": "Reset",
"reset-tooltip": "This action will disregard any saved changes and load the configuration from the configuration file.",
"title-auth-settings": "Auth settings"
},
"configure-auth-cta": {
@@ -2151,8 +2167,10 @@
"label-reset-to-default-values": "Reset to default values"
},
"discard": "Discard",
"enabled-label-enabled": "Enabled",
"label-enabled": "Enabled",
"reset-configuration": "Are you sure you want to reset this configuration?",
"reset-configuration-description": "After resetting these settings Grafana will use the provider configuration from the system (config file/environment variables) if any.",
"title-more-actions": "More actions",
"title-reset": "Reset",
"tooltip-more-actions": "More actions"
@@ -2162,6 +2180,9 @@
"title-open-id-connect-discovery-url": "OpenID Connect Discovery URL"
}
},
"auth-config-auth-config-page-unconnected": {
"subtitle": "Manage your auth settings and configure single sign-on. Find out more in our <2>documentation</2>."
},
"bookmarks-page": {
"empty": {
"message": "It looks like you haven’t created any bookmarks yet",
@@ -2288,6 +2309,11 @@
},
"text-this-repository-is-read-only": "If you have direct access to the target, copy the JSON and paste it there."
},
"canvas": {
"not-found-display": {
"not-found": "<0>Not found: </0><config />"
}
},
"carousel": {
"close": "Close",
"error": "Something went wrong loading images",
@@ -2367,12 +2393,17 @@
},
"connections-redirect-notice": {
"aria-label-link-to-connections": "Link to Connections",
"body": "Data sources have a new home! You can discover new data sources or manage existing ones in the Connections page, accessible from the main menu.",
"go-to-connections": "Go to connections"
},
"no-access-modal": {
"connection-contact-grafana-admin": "To add a new connection, contact your Grafana admin.",
"editor-warning": "Editors cannot add new connections. You may check to see if it is already configured in <2>Data sources</2>.",
"okay": "Okay"
},
"not-found-datasource": {
"body": "Maybe you mistyped the URL or the plugin with the id <1></1> is unavailable.<3></3>To see a list of available datasources please <5>click here</5>."
},
"search": {
"aria-label-search-all": "Search all",
"placeholder": "Search all"
@@ -2508,6 +2539,11 @@
"type-tooltip": "The type of transformation that will be applied to the source data."
}
},
"dashbaord-scene": {
"interval-variable-form": {
"description-auto-option": "Dynamically calculates interval by dividing time range by the count specified"
}
},
"dashboard": {
"actions": {
"open-settings": "Settings"
@@ -3278,6 +3314,7 @@
"delete": "Delete",
"description-color-annotation-event-markers": "Color to use for the annotation event markers",
"description-enabled-annotation-query-issued-every-dashboard": "When enabled the annotation query is issued every dashboard refresh",
"description-hidden": "Annotation queries can be toggled on or off at the top of the dashboard. With this option checked this toggle will be hidden.",
"label-color": "Color",
"label-data-source": "Data source",
"label-enabled": "Enabled",
@@ -3290,6 +3327,7 @@
},
"annotation-settings-list": {
"data-source": "Data source",
"delete-aria-label": "Delete query with title \"{{title}}\"",
"new-query": "New query",
"query-name": "Query name",
"tooltip-move-down": "Move down",
@@ -3329,6 +3367,7 @@
"placeholder-open-dashboard": "Open dashboard"
},
"dashboard-link-list": {
"delete-aria-label": "Delete link with title \"{{title}}\"",
"info": "Info",
"new-link": "New link",
"tooltip-copy-link": "Copy link",
@@ -3369,6 +3408,10 @@
},
"help-wizard": {
"copy-to-clipboard": "Copy to clipboard",
"description-randomize-data": "Modify the original data to hide sensitive information. Note the lengths will stay the same, and duplicate values will be equal.",
"description-support-snapshot": "Panel: {{panelTitle}}",
"download-dashboard": "Dashboard ({{snapshotSize}})",
"download-snapshot": "Download ({{snapshotSize}})",
"label-randomize-data": "Randomize data",
"label-support-snapshot": "Support snapshot",
"label-template": "Template",
@@ -3376,7 +3419,9 @@
"randomize-labels-label-labels": "Labels",
"randomize-string-values-label-string-values": "String values",
"title-complete-git-hub-comment-clipboard": "Copy a complete GitHub comment to the clipboard",
"title-get-help-with-this-panel": "Get help with this panel"
"title-get-help-with-this-panel": "Get help with this panel",
"troubleshooting-docs": "Troubleshooting docs",
"troubleshooting-request-help": "To request troubleshooting help, send a snapshot of this panel to Grafana Labs Technical Support. The snapshot contains query response data and panel settings."
},
"inspect-data-tab": {
"no-data-found": "No data found"
@@ -3386,6 +3431,7 @@
},
"interval-variable-form": {
"description-calculated-value-below-threshold": "The calculated value will not go below this threshold",
"description-step-count": "How many times the current time range should be divided to calculate the value",
"interval-options": "Interval options"
},
"json-model-edit-view": {
@@ -3393,6 +3439,7 @@
"cancel": "Cancel"
},
"render-save-button-and-error": {
"body-plugin-dashboard": "Your changes will be lost when you update the plugin. Use <1>Save as</1> to create custom version.",
"title-failed-to-save-dashboard": "Failed to save dashboard",
"title-plugin-dashboard": "Plugin dashboard",
"title-someone-else-has-updated-this-dashboard": "Someone else has updated this dashboard",
@@ -3400,6 +3447,7 @@
}
},
"name-already-exists-error": {
"body-name-already-exists": "A dashboard with the same name in selected folder already exists. Would you still like to save this dashboard?",
"title-name-already-exists": "Name already exists"
},
"panel-data-alerting-tab-rendered": {
@@ -3410,7 +3458,8 @@
"title-dashboard-not-saved": "Dashboard not saved"
},
"panel-data-queries-tab-rendered": {
"add-query": "Add query"
"add-query": "Add query",
"expression": "Expression "
},
"panel-data-transformations-tab-rendered": {
"add-another-transformation": "Add another transformation",
@@ -3421,7 +3470,12 @@
"table-view-aria-label-toggletableview": "Toggle table view",
"table-view-label-table-view": "Table view"
},
"panel-editor-renderer": {
"aria-label-open-options-pane": "Open options pane",
"tooltip-open-options-pane": "Open options pane"
},
"panel-inspect-renderer": {
"body-panel-plugin-not-loaded": "Make sure the panel you want to inspect is visible and has been displayed before opening inspect.",
"title-panel-plugin-not-loaded": "Panel plugin not loaded"
},
"panel-viz-type-picker": {
@@ -3461,14 +3515,22 @@
"title-failed-to-save-dashboard": "Failed to save dashboard"
}
},
"save-dashboard-drawer": {
"tabs": {
"label-changes": "Changes",
"label-details": "Details"
}
},
"save-dashboard-form": {
"aria-label-message": "message",
"body-dashboard-drastically-changed": "Because you're using new dashboards features only supported on new Grafana dashboard schema format, the dashboard will be saved in the new format. Please make sure you want to perform this action or you prefer to save the dashboard as a new copy.",
"cancel-button": {
"cancel": "Cancel"
},
"label-message": "Message",
"placeholder-describe-changes-optional": "Add a note to describe your changes (optional).",
"render-footer": {
"body-plugin-dashboard": "Your changes will be lost when you update the plugin. Use <1>Save as</1> to create custom version.",
"no-changes-to-save": "No changes to save",
"title-failed-to-save-dashboard": "Failed to save dashboard",
"title-plugin-dashboard": "Plugin dashboard",
@@ -3480,6 +3542,7 @@
"save-dashboard-form-common-options": {
"save-refresh-description-current-refresh-default": "Will make the current refresh the new default",
"save-refresh-label-update-default-refresh-value": "Update default refresh value",
"save-timerange-description-current-range-default": "Will make current time range the new default",
"save-timerange-label-update-default-time-range": "Update default time range",
"save-variables-description-current-values-default": "Will make the current values the new default",
"save-variables-label-update-default-variable-values": "Update default variable values"
@@ -3517,6 +3580,7 @@
"title-validation-failed": "Dashboard title validation failed."
},
"scenes-new-rule-from-panel-button": {
"body-no-alerting-capable-query-found": "Cannot create alerts from this panel because no query to an alerting capable datasource is found.",
"new-alert-rule": "New alert rule",
"title-no-alerting-capable-query-found": "No alerting capable query found"
},
@@ -3580,6 +3644,7 @@
"label-show-on-dashboard": "Show on dashboard"
},
"variable-usages-button": {
"title-show-usages": "Showing usages for: {{variableId}}",
"tooltip-show-usages": "Show usages"
},
"variable-values-preview": {
@@ -3594,6 +3659,7 @@
"tooltip-reset-version": "Reset version"
},
"version-history-table": {
"aria-label-toggle-selection": "Toggle selection of version {{version}}",
"date": "Date",
"notes": "Notes",
"restore": "Restore",
@@ -3608,10 +3674,17 @@
"aria-label-change-visualization": "Change visualization",
"tooltip-click-to-change-visualization": "Click to change visualization"
},
"viz-and-data-pane": {
"aria-label-open-query-pane": "Open query pane",
"tooltip-open-query-pane": "Open query pane"
},
"viz-panel-links-renderer": {
"aria-label-panel-links": "Panel links"
}
},
"dashboard-scene-help-wizard": {
"support-bundle": "You can also retrieve a support bundle containing information concerning your Grafana instance and configured datasources in the <1>support bundles section</1>."
},
"dashboard-settings": {
"annotations": {
"title": "Annotations"
@@ -6652,6 +6725,7 @@
"email-share-type-option-label": "Only specified people",
"pause-sharing-dashboard-label": "Pause sharing dashboard",
"public-share-type-option-label": "Anyone with a link",
"revoke-body": "Are you sure you want to revoke this URL? The dashboard will no longer be public.",
"revoke-public-URL-button": "Revoke public URL",
"revoke-public-URL-button-title": "Revoke public URL",
"settings-title": "Settings"