Internationalisation: More markup (#103634)
* some manual markup * more markup * update count names
This commit is contained in:
+4
-115
@@ -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 = {
|
||||
|
||||
@@ -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}>›</span>
|
||||
</>
|
||||
)}
|
||||
|
||||
+4
-2
@@ -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>
|
||||
);
|
||||
}
|
||||
|
||||
+3
-1
@@ -400,7 +400,9 @@ export function PanelDataQueriesTabRendered({ model }: SceneComponentProps<Panel
|
||||
variant="secondary"
|
||||
data-testid={selectors.components.QueryTab.addExpression}
|
||||
>
|
||||
<span>Expression </span>
|
||||
<span>
|
||||
<Trans i18nKey="dashboard-scene.panel-data-queries-tab-rendered.expression">Expression </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)}
|
||||
/>
|
||||
|
||||
+1
@@ -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={
|
||||
|
||||
+8
-2
@@ -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}
|
||||
|
||||
+6
-2
@@ -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',
|
||||
})}
|
||||
|
||||
+4
-1
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user