From 0be2541b5cc0072441038ea3bce161e6ef0595c0 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 17 Mar 2026 13:02:06 +0100 Subject: [PATCH] Promote translation refs from alpha to stable entry points Add each plugin and package translation ref to the corresponding stable entry point, changing the JSDoc tag from @alpha to @public. The alpha entry points now re-export with a @deprecated annotation so existing consumers continue to work. Affected packages: core-components, api-docs, catalog, catalog-graph, catalog-import, catalog-react, home, home-react, kubernetes, kubernetes-cluster, kubernetes-react, notifications, org, scaffolder, scaffolder-react, search, search-react, user-settings. Signed-off-by: Patrik Oldsberg Made-with: Cursor --- .../promote-translation-refs-stable-minor.md | 10 + .../promote-translation-refs-stable-patch.md | 16 ++ packages/core-components/report-alpha.api.md | 2 +- packages/core-components/report.api.md | 64 ++++++ packages/core-components/src/alpha.ts | 8 +- packages/core-components/src/index.ts | 1 + packages/core-components/src/translation.ts | 2 +- plugins/api-docs/report-alpha.api.md | 2 +- plugins/api-docs/report.api.md | 37 ++++ plugins/api-docs/src/alpha.tsx | 8 +- plugins/api-docs/src/index.ts | 1 + plugins/api-docs/src/translation.ts | 2 +- plugins/catalog-graph/report-alpha.api.md | 2 +- plugins/catalog-graph/report.api.md | 29 +++ plugins/catalog-graph/src/alpha.tsx | 8 +- plugins/catalog-graph/src/index.ts | 1 + plugins/catalog-graph/src/translation.ts | 2 +- plugins/catalog-import/report-alpha.api.md | 2 +- plugins/catalog-import/report.api.md | 80 +++++++- plugins/catalog-import/src/alpha.tsx | 10 +- plugins/catalog-import/src/index.ts | 1 + plugins/catalog-import/src/translation.ts | 2 +- plugins/catalog-react/report-alpha.api.md | 2 +- plugins/catalog-react/report.api.md | 96 +++++++++ plugins/catalog-react/src/alpha/index.ts | 8 +- plugins/catalog-react/src/index.ts | 1 + plugins/catalog-react/src/translation.ts | 2 +- plugins/catalog/report-alpha.api.md | 2 +- plugins/catalog/report.api.md | 99 ++++++++++ plugins/catalog/src/alpha/index.ts | 8 +- plugins/catalog/src/alpha/translation.ts | 2 +- plugins/catalog/src/index.ts | 1 + plugins/home-react/report-alpha.api.md | 4 +- plugins/home-react/report.api.md | 11 ++ plugins/home-react/src/alpha.ts | 8 +- plugins/home-react/src/index.ts | 1 + plugins/home-react/src/translation.ts | 4 +- plugins/home/report-alpha.api.md | 2 +- plugins/home/report.api.md | 34 ++++ plugins/home/src/alpha.tsx | 8 +- plugins/home/src/index.ts | 1 + plugins/home/src/translation.ts | 2 +- .../kubernetes-cluster/report-alpha.api.md | 2 +- plugins/kubernetes-cluster/report.api.md | 10 + plugins/kubernetes-cluster/src/alpha.ts | 8 +- plugins/kubernetes-cluster/src/index.ts | 1 + plugins/kubernetes-cluster/src/translation.ts | 2 +- plugins/kubernetes-react/report-alpha.api.md | 2 +- plugins/kubernetes-react/report.api.md | 86 ++++++++ plugins/kubernetes-react/src/alpha.ts | 8 +- plugins/kubernetes-react/src/index.ts | 1 + plugins/kubernetes-react/src/translation.ts | 2 +- plugins/kubernetes/report-alpha.api.md | 2 +- plugins/kubernetes/report.api.md | 14 ++ plugins/kubernetes/src/alpha/index.ts | 8 +- plugins/kubernetes/src/alpha/translation.ts | 2 +- plugins/kubernetes/src/index.ts | 1 + plugins/notifications/report-alpha.api.md | 2 +- plugins/notifications/report.api.md | 66 +++++++ plugins/notifications/src/alpha.tsx | 8 +- plugins/notifications/src/index.ts | 1 + plugins/notifications/src/translation.ts | 2 +- plugins/org/report-alpha.api.md | 2 +- plugins/org/report.api.md | 30 +++ plugins/org/src/alpha.tsx | 8 +- plugins/org/src/index.ts | 1 + plugins/org/src/translation.ts | 2 +- plugins/scaffolder-react/report-alpha.api.md | 12 +- plugins/scaffolder-react/report.api.md | 26 +++ plugins/scaffolder-react/src/alpha.ts | 8 +- plugins/scaffolder-react/src/index.ts | 1 + plugins/scaffolder-react/src/translation.ts | 2 +- plugins/scaffolder/report-alpha.api.md | 2 +- plugins/scaffolder/report.api.md | 187 ++++++++++++++++++ plugins/scaffolder/src/alpha/index.ts | 8 +- plugins/scaffolder/src/index.ts | 1 + plugins/scaffolder/src/translation.ts | 2 +- plugins/search-react/report-alpha.api.md | 2 +- plugins/search-react/report.api.md | 19 ++ plugins/search-react/src/alpha/index.ts | 8 +- plugins/search-react/src/index.ts | 1 + plugins/search-react/src/translation.ts | 2 +- plugins/search/report-alpha.api.md | 2 +- plugins/search/report.api.md | 15 ++ plugins/search/src/alpha.tsx | 9 +- plugins/search/src/index.ts | 1 + plugins/search/src/translation.ts | 2 +- plugins/user-settings/report-alpha.api.md | 2 +- plugins/user-settings/report.api.md | 58 ++++++ plugins/user-settings/src/alpha.tsx | 8 +- plugins/user-settings/src/index.ts | 1 + plugins/user-settings/src/translation.ts | 2 +- 92 files changed, 1171 insertions(+), 67 deletions(-) create mode 100644 .changeset/promote-translation-refs-stable-minor.md create mode 100644 .changeset/promote-translation-refs-stable-patch.md diff --git a/.changeset/promote-translation-refs-stable-minor.md b/.changeset/promote-translation-refs-stable-minor.md new file mode 100644 index 0000000000..6bf063bde7 --- /dev/null +++ b/.changeset/promote-translation-refs-stable-minor.md @@ -0,0 +1,10 @@ +--- +'@backstage/plugin-catalog-react': minor +'@backstage/plugin-catalog': minor +'@backstage/plugin-scaffolder-react': minor +'@backstage/plugin-scaffolder': minor +'@backstage/plugin-search-react': minor +'@backstage/plugin-search': minor +--- + +Promoted the plugin's translation ref to the stable package entry point. It was previously only available through the alpha entry point. diff --git a/.changeset/promote-translation-refs-stable-patch.md b/.changeset/promote-translation-refs-stable-patch.md new file mode 100644 index 0000000000..6cd963a368 --- /dev/null +++ b/.changeset/promote-translation-refs-stable-patch.md @@ -0,0 +1,16 @@ +--- +'@backstage/core-components': patch +'@backstage/plugin-api-docs': patch +'@backstage/plugin-catalog-graph': patch +'@backstage/plugin-catalog-import': patch +'@backstage/plugin-home-react': patch +'@backstage/plugin-home': patch +'@backstage/plugin-kubernetes-cluster': patch +'@backstage/plugin-kubernetes-react': patch +'@backstage/plugin-kubernetes': patch +'@backstage/plugin-notifications': patch +'@backstage/plugin-org': patch +'@backstage/plugin-user-settings': patch +--- + +Promoted the plugin's translation ref to the stable package entry point. It was previously only available through the alpha entry point. diff --git a/packages/core-components/report-alpha.api.md b/packages/core-components/report-alpha.api.md index f373dd56ff..e7a36c7df9 100644 --- a/packages/core-components/report-alpha.api.md +++ b/packages/core-components/report-alpha.api.md @@ -5,7 +5,7 @@ ```ts import { TranslationRef } from '@backstage/frontend-plugin-api'; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const coreComponentsTranslationRef: TranslationRef< 'core-components', { diff --git a/packages/core-components/report.api.md b/packages/core-components/report.api.md index d487cc00b0..ac6dc5ca15 100644 --- a/packages/core-components/report.api.md +++ b/packages/core-components/report.api.md @@ -54,6 +54,7 @@ import { SVGProps } from 'react'; import { TabProps } from '@material-ui/core/Tab'; import { Theme } from '@material-ui/core/styles'; import { TooltipProps } from '@material-ui/core/Tooltip'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; import { WithStyles } from '@material-ui/core/styles'; // @public @@ -222,6 +223,69 @@ export interface CopyTextButtonProps { tooltipText?: string; } +// @public (undocumented) +export const coreComponentsTranslationRef: TranslationRef< + 'core-components', + { + readonly 'table.filter.title': 'Filters'; + readonly 'table.filter.placeholder': 'All results'; + readonly 'table.filter.clearAll': 'Clear all'; + readonly 'table.body.emptyDataSourceMessage': 'No records to display'; + readonly 'table.header.actions': 'Actions'; + readonly 'table.toolbar.search': 'Filter'; + readonly 'table.pagination.labelDisplayedRows': '{from}-{to} of {count}'; + readonly 'table.pagination.firstTooltip': 'First Page'; + readonly 'table.pagination.labelRowsSelect': 'rows'; + readonly 'table.pagination.lastTooltip': 'Last Page'; + readonly 'table.pagination.nextTooltip': 'Next Page'; + readonly 'table.pagination.previousTooltip': 'Previous Page'; + readonly 'emptyState.missingAnnotation.title': 'Missing Annotation'; + readonly 'emptyState.missingAnnotation.actionTitle': 'Add the annotation to your component YAML as shown in the highlighted example below:'; + readonly 'emptyState.missingAnnotation.readMore': 'Read more'; + readonly 'signIn.title': 'Sign In'; + readonly 'signIn.loginFailed': 'Login failed'; + readonly 'signIn.customProvider.title': 'Custom User'; + readonly 'signIn.customProvider.subtitle': 'Enter your own User ID and credentials.\n This selection will not be stored.'; + readonly 'signIn.customProvider.userId': 'User ID'; + readonly 'signIn.customProvider.tokenInvalid': 'Token is not a valid OpenID Connect JWT Token'; + readonly 'signIn.customProvider.continue': 'Continue'; + readonly 'signIn.customProvider.idToken': 'ID Token (optional)'; + readonly 'signIn.guestProvider.title': 'Guest'; + readonly 'signIn.guestProvider.enter': 'Enter'; + readonly 'signIn.guestProvider.subtitle': 'Enter as a Guest User.\n You will not have a verified identity, meaning some features might be unavailable.'; + readonly skipToContent: 'Skip to content'; + readonly 'copyTextButton.tooltipText': 'Text copied to clipboard'; + readonly 'simpleStepper.finish': 'Finish'; + readonly 'simpleStepper.reset': 'Reset'; + readonly 'simpleStepper.next': 'Next'; + readonly 'simpleStepper.skip': 'Skip'; + readonly 'simpleStepper.back': 'Back'; + readonly 'errorPage.title': 'Looks like someone dropped the mic!'; + readonly 'errorPage.subtitle': 'ERROR {{status}}: {{statusMessage}}'; + readonly 'errorPage.goBack': 'Go back'; + readonly 'errorPage.showMoreDetails': 'Show more details'; + readonly 'errorPage.showLessDetails': 'Show less details'; + readonly 'supportConfig.default.title': 'Support Not Configured'; + readonly 'supportConfig.default.linkTitle': 'Add `app.support` config key'; + readonly 'errorBoundary.title': 'Please contact {{slackChannel}} for help.'; + readonly 'oauthRequestDialog.message': 'Sign-in to allow {{appTitle}} access to {{provider}} APIs and identities.'; + readonly 'oauthRequestDialog.title': 'Login Required'; + readonly 'oauthRequestDialog.authRedirectTitle': 'This will trigger a http redirect to OAuth Login.'; + readonly 'oauthRequestDialog.login': 'Log in'; + readonly 'oauthRequestDialog.rejectAll': 'Reject All'; + readonly 'supportButton.title': 'Support'; + readonly 'supportButton.close': 'Close'; + readonly 'alertDisplay.message_one': '({{ count }} newer message)'; + readonly 'alertDisplay.message_other': '({{ count }} newer messages)'; + readonly 'autoLogout.stillTherePrompt.title': 'Logging out due to inactivity'; + readonly 'autoLogout.stillTherePrompt.buttonText': "Yes! Don't log me out"; + readonly 'dependencyGraph.fullscreenTooltip': 'Toggle fullscreen'; + readonly 'proxiedSignInPage.title': 'You do not appear to be signed in. Please try reloading the browser page.'; + readonly 'logViewer.searchField.placeholder': 'Search'; + readonly 'logViewer.downloadBtn.tooltip': 'Download logs'; + } +>; + // @public export function CreateButton(props: CreateButtonProps): JSX_2.Element | null; diff --git a/packages/core-components/src/alpha.ts b/packages/core-components/src/alpha.ts index e1f7678bae..b85e10fe70 100644 --- a/packages/core-components/src/alpha.ts +++ b/packages/core-components/src/alpha.ts @@ -13,4 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export * from './translation'; +import { coreComponentsTranslationRef as _coreComponentsTranslationRef } from './translation'; + +/** + * @public + * @deprecated Import from `@backstage/core-components` instead. + */ +export const coreComponentsTranslationRef = _coreComponentsTranslationRef; diff --git a/packages/core-components/src/index.ts b/packages/core-components/src/index.ts index 3c5e708360..2006858599 100644 --- a/packages/core-components/src/index.ts +++ b/packages/core-components/src/index.ts @@ -25,3 +25,4 @@ export * from './hooks'; export * from './icons'; export * from './layout'; export * from './overridableComponents'; +export { coreComponentsTranslationRef } from './translation'; diff --git a/packages/core-components/src/translation.ts b/packages/core-components/src/translation.ts index 1c063195c9..d6012273e9 100644 --- a/packages/core-components/src/translation.ts +++ b/packages/core-components/src/translation.ts @@ -16,7 +16,7 @@ import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; -/** @alpha */ +/** @public */ export const coreComponentsTranslationRef = createTranslationRef({ id: 'core-components', messages: { diff --git a/plugins/api-docs/report-alpha.api.md b/plugins/api-docs/report-alpha.api.md index 4afa55ce77..8e64334b09 100644 --- a/plugins/api-docs/report-alpha.api.md +++ b/plugins/api-docs/report-alpha.api.md @@ -26,7 +26,7 @@ import { RouteRef } from '@backstage/core-plugin-api'; import { RouteRef as RouteRef_2 } from '@backstage/frontend-plugin-api'; import { TranslationRef } from '@backstage/frontend-plugin-api'; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const apiDocsTranslationRef: TranslationRef< 'api-docs', { diff --git a/plugins/api-docs/report.api.md b/plugins/api-docs/report.api.md index 370cbb3e0e..5e7dd8f056 100644 --- a/plugins/api-docs/report.api.md +++ b/plugins/api-docs/report.api.md @@ -19,6 +19,7 @@ import { RouteRef } from '@backstage/core-plugin-api'; import { TableColumn } from '@backstage/core-components'; import { TableOptions } from '@backstage/core-components'; import { TableProps } from '@backstage/core-components'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; import { UserListFilterKind } from '@backstage/plugin-catalog-react'; // @public (undocumented) @@ -62,6 +63,42 @@ const apiDocsPlugin: BackstagePlugin< export { apiDocsPlugin }; export { apiDocsPlugin as plugin }; +// @public (undocumented) +export const apiDocsTranslationRef: TranslationRef< + 'api-docs', + { + readonly 'apiDefinitionCard.error.title': 'Could not fetch the API'; + readonly 'apiDefinitionCard.rawButtonTitle': 'Raw'; + readonly 'apiDefinitionDialog.closeButtonTitle': 'Close'; + readonly 'apiDefinitionDialog.tabsAriaLabel': 'API definition options'; + readonly 'apiDefinitionDialog.rawButtonTitle': 'Raw'; + readonly 'apiDefinitionDialog.toggleButtonAriaLabel': 'Toggle API Definition Dialog'; + readonly 'defaultApiExplorerPage.title': 'APIs'; + readonly 'defaultApiExplorerPage.subtitle': '{{orgName}} API Explorer'; + readonly 'defaultApiExplorerPage.pageTitleOverride': 'APIs'; + readonly 'defaultApiExplorerPage.createButtonTitle': 'Register Existing API'; + readonly 'defaultApiExplorerPage.supportButtonTitle': 'All your APIs'; + readonly 'consumedApisCard.error.title': 'Could not load APIs'; + readonly 'consumedApisCard.title': 'Consumed APIs'; + readonly 'consumedApisCard.emptyContent.title': 'This {{entity}} does not consume any APIs.'; + readonly 'hasApisCard.error.title': 'Could not load APIs'; + readonly 'hasApisCard.title': 'APIs'; + readonly 'hasApisCard.emptyContent.title': 'This {{entity}} does not contain any APIs.'; + readonly 'providedApisCard.error.title': 'Could not load APIs'; + readonly 'providedApisCard.title': 'Provided APIs'; + readonly 'providedApisCard.emptyContent.title': 'This {{entity}} does not provide any APIs.'; + readonly 'apiEntityColumns.typeTitle': 'Type'; + readonly 'apiEntityColumns.apiDefinitionTitle': 'API Definition'; + readonly 'consumingComponentsCard.error.title': 'Could not load components'; + readonly 'consumingComponentsCard.title': 'Consumers'; + readonly 'consumingComponentsCard.emptyContent.title': 'No component consumes this API.'; + readonly 'providingComponentsCard.error.title': 'Could not load components'; + readonly 'providingComponentsCard.title': 'Providers'; + readonly 'providingComponentsCard.emptyContent.title': 'No component provides this API.'; + readonly apisCardHelpLinkTitle: 'Learn how to change this.'; + } +>; + // @public export const ApiExplorerIndexPage: ( props: DefaultApiExplorerPageProps, diff --git a/plugins/api-docs/src/alpha.tsx b/plugins/api-docs/src/alpha.tsx index 2724619a68..967e1c1168 100644 --- a/plugins/api-docs/src/alpha.tsx +++ b/plugins/api-docs/src/alpha.tsx @@ -234,4 +234,10 @@ export default createFrontendPlugin({ ], }); -export { apiDocsTranslationRef } from './translation'; +import { apiDocsTranslationRef as _apiDocsTranslationRef } from './translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-api-docs` instead. + */ +export const apiDocsTranslationRef = _apiDocsTranslationRef; diff --git a/plugins/api-docs/src/index.ts b/plugins/api-docs/src/index.ts index 49b2805aad..ae344890b0 100644 --- a/plugins/api-docs/src/index.ts +++ b/plugins/api-docs/src/index.ts @@ -34,3 +34,4 @@ export { EntityProvidedApisCard, EntityProvidingComponentsCard, } from './plugin'; +export { apiDocsTranslationRef } from './translation'; diff --git a/plugins/api-docs/src/translation.ts b/plugins/api-docs/src/translation.ts index a6a43952bc..289115fd3a 100644 --- a/plugins/api-docs/src/translation.ts +++ b/plugins/api-docs/src/translation.ts @@ -17,7 +17,7 @@ import { createTranslationRef } from '@backstage/frontend-plugin-api'; /** - * @alpha + * @public */ export const apiDocsTranslationRef = createTranslationRef({ id: 'api-docs', diff --git a/plugins/catalog-graph/report-alpha.api.md b/plugins/catalog-graph/report-alpha.api.md index f9d4542625..b9b92cf3e4 100644 --- a/plugins/catalog-graph/report-alpha.api.md +++ b/plugins/catalog-graph/report-alpha.api.md @@ -22,7 +22,7 @@ import { RouteRef } from '@backstage/core-plugin-api'; import { RouteRef as RouteRef_2 } from '@backstage/frontend-plugin-api'; import { TranslationRef } from '@backstage/frontend-plugin-api'; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const catalogGraphTranslationRef: TranslationRef< 'catalog-graph', { diff --git a/plugins/catalog-graph/report.api.md b/plugins/catalog-graph/report.api.md index 74b9713cf2..4a948ce262 100644 --- a/plugins/catalog-graph/report.api.md +++ b/plugins/catalog-graph/report.api.md @@ -15,6 +15,7 @@ import { MouseEvent as MouseEvent_2 } from 'react'; import { MouseEventHandler } from 'react'; import { ReactNode } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; // @public export const ALL_RELATION_PAIRS: RelationPairs; @@ -69,6 +70,34 @@ export const catalogGraphPlugin: BackstagePlugin< // @public export const catalogGraphRouteRef: RouteRef; +// @public (undocumented) +export const catalogGraphTranslationRef: TranslationRef< + 'catalog-graph', + { + readonly 'catalogGraphCard.title': 'Relations'; + readonly 'catalogGraphCard.deepLinkTitle': 'View graph'; + readonly 'catalogGraphPage.title': 'Catalog Graph'; + readonly 'catalogGraphPage.filterToggleButtonTitle': 'Filters'; + readonly 'catalogGraphPage.supportButtonDescription': 'Start tracking your component in by adding it to the software catalog.'; + readonly 'catalogGraphPage.simplifiedSwitchLabel': 'Simplified'; + readonly 'catalogGraphPage.mergeRelationsSwitchLabel': 'Merge relations'; + readonly 'catalogGraphPage.zoomOutDescription': 'Use pinch & zoom to move around the diagram. Click to change active node, shift click to navigate to entity.'; + readonly 'catalogGraphPage.curveFilter.title': 'Curve'; + readonly 'catalogGraphPage.curveFilter.curveStepBefore': 'Step Before'; + readonly 'catalogGraphPage.curveFilter.curveMonotoneX': 'Monotone X'; + readonly 'catalogGraphPage.directionFilter.title': 'Direction'; + readonly 'catalogGraphPage.directionFilter.leftToRight': 'Left to right'; + readonly 'catalogGraphPage.directionFilter.rightToLeft': 'Right to left'; + readonly 'catalogGraphPage.directionFilter.topToBottom': 'Top to bottom'; + readonly 'catalogGraphPage.directionFilter.bottomToTop': 'Bottom to top'; + readonly 'catalogGraphPage.maxDepthFilter.title': 'Max depth'; + readonly 'catalogGraphPage.maxDepthFilter.inputPlaceholder': '∞ Infinite'; + readonly 'catalogGraphPage.maxDepthFilter.clearButtonAriaLabel': 'clear max depth'; + readonly 'catalogGraphPage.selectedKindsFilter.title': 'Kinds'; + readonly 'catalogGraphPage.selectedRelationsFilter.title': 'Relations'; + } +>; + // @public (undocumented) export type CustomLabelClassKey = 'text' | 'secondary'; diff --git a/plugins/catalog-graph/src/alpha.tsx b/plugins/catalog-graph/src/alpha.tsx index a2a8c7eb5e..eda6d7b1e2 100644 --- a/plugins/catalog-graph/src/alpha.tsx +++ b/plugins/catalog-graph/src/alpha.tsx @@ -107,4 +107,10 @@ export default createFrontendPlugin({ extensions: [CatalogGraphPage, CatalogGraphEntityCard, CatalogGraphApi], }); -export { catalogGraphTranslationRef } from './translation'; +import { catalogGraphTranslationRef as _catalogGraphTranslationRef } from './translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-catalog-graph` instead. + */ +export const catalogGraphTranslationRef = _catalogGraphTranslationRef; diff --git a/plugins/catalog-graph/src/index.ts b/plugins/catalog-graph/src/index.ts index 95ac5048cb..119e4e4952 100644 --- a/plugins/catalog-graph/src/index.ts +++ b/plugins/catalog-graph/src/index.ts @@ -36,3 +36,4 @@ export type { } from './lib/types'; export { Direction } from './lib/types'; export type { TransformationContext } from './lib/graph-transformations'; +export { catalogGraphTranslationRef } from './translation'; diff --git a/plugins/catalog-graph/src/translation.ts b/plugins/catalog-graph/src/translation.ts index 84b76f965d..846188f5c0 100644 --- a/plugins/catalog-graph/src/translation.ts +++ b/plugins/catalog-graph/src/translation.ts @@ -15,7 +15,7 @@ */ import { createTranslationRef } from '@backstage/frontend-plugin-api'; -/** @alpha */ +/** @public */ export const catalogGraphTranslationRef = createTranslationRef({ id: 'catalog-graph', messages: { diff --git a/plugins/catalog-import/report-alpha.api.md b/plugins/catalog-import/report-alpha.api.md index b58b641050..bc60f6fab7 100644 --- a/plugins/catalog-import/report-alpha.api.md +++ b/plugins/catalog-import/report-alpha.api.md @@ -18,7 +18,7 @@ import { RouteRef } from '@backstage/core-plugin-api'; import { RouteRef as RouteRef_2 } from '@backstage/frontend-plugin-api'; import { TranslationRef } from '@backstage/frontend-plugin-api'; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const catalogImportTranslationRef: TranslationRef< 'catalog-import', { diff --git a/plugins/catalog-import/report.api.md b/plugins/catalog-import/report.api.md index 238231e498..7eff3a7a9c 100644 --- a/plugins/catalog-import/report.api.md +++ b/plugins/catalog-import/report.api.md @@ -6,7 +6,7 @@ import { ApiRef } from '@backstage/frontend-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { CatalogApi } from '@backstage/catalog-client'; -import { catalogImportTranslationRef } from '@backstage/plugin-catalog-import/alpha'; +import { catalogImportTranslationRef as catalogImportTranslationRef_2 } from '@backstage/plugin-catalog-import/alpha'; import { ComponentProps } from 'react'; import { CompoundEntityRef } from '@backstage/catalog-model'; import { ConfigApi } from '@backstage/core-plugin-api'; @@ -26,6 +26,7 @@ import { ScmIntegrationRegistry } from '@backstage/integration'; import { SubmitHandler } from 'react-hook-form'; import { TextFieldProps } from '@material-ui/core/TextField/TextField'; import { TranslationFunction } from '@backstage/core-plugin-api/alpha'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; import { UseFormProps } from 'react-hook-form'; import { UseFormReturn } from 'react-hook-form'; @@ -141,13 +142,86 @@ const catalogImportPlugin: BackstagePlugin< export { catalogImportPlugin }; export { catalogImportPlugin as plugin }; +// @public (undocumented) +export const catalogImportTranslationRef: TranslationRef< + 'catalog-import', + { + readonly 'buttons.back': 'Back'; + readonly 'defaultImportPage.headerTitle': 'Register an existing component'; + readonly 'defaultImportPage.contentHeaderTitle': 'Start tracking your component in {{appTitle}}'; + readonly 'defaultImportPage.supportTitle': 'Start tracking your component in {{appTitle}} by adding it to the software catalog.'; + readonly 'importInfoCard.title': 'Register an existing component'; + readonly 'importInfoCard.deepLinkTitle': 'Learn more about the Software Catalog'; + readonly 'importInfoCard.linkDescription': 'Enter the URL to your source code repository to add it to {{appTitle}}.'; + readonly 'importInfoCard.fileLinkTitle': 'Link to an existing entity file'; + readonly 'importInfoCard.examplePrefix': 'Example: '; + readonly 'importInfoCard.fileLinkDescription': 'The wizard analyzes the file, previews the entities, and adds them to the {{appTitle}} catalog.'; + readonly 'importInfoCard.exampleDescription': 'The wizard discovers all {{catalogFilename}} files in the repository, previews the entities, and adds them to the {{appTitle}} catalog.'; + readonly 'importInfoCard.preparePullRequestDescription': 'If no entities are found, the wizard will prepare a Pull Request that adds an example {{catalogFilename}} and prepares the {{appTitle}} catalog to load all entities as soon as the Pull Request is merged.'; + readonly 'importInfoCard.githubIntegration.label': 'GitHub only'; + readonly 'importInfoCard.githubIntegration.title': 'Link to a repository'; + readonly 'importStepper.finish.title': 'Finish'; + readonly 'importStepper.singleLocation.title': 'Select Locations'; + readonly 'importStepper.singleLocation.description': 'Discovered Locations: 1'; + readonly 'importStepper.multipleLocations.title': 'Select Locations'; + readonly 'importStepper.multipleLocations.description': 'Discovered Locations: {{length, number}}'; + readonly 'importStepper.noLocation.title': 'Create Pull Request'; + readonly 'importStepper.noLocation.createPr.detailsTitle': 'Pull Request Details'; + readonly 'importStepper.noLocation.createPr.titleLabel': 'Pull Request Title'; + readonly 'importStepper.noLocation.createPr.titlePlaceholder': 'Add Backstage catalog entity descriptor files'; + readonly 'importStepper.noLocation.createPr.bodyLabel': 'Pull Request Body'; + readonly 'importStepper.noLocation.createPr.bodyPlaceholder': 'A describing text with Markdown support'; + readonly 'importStepper.noLocation.createPr.configurationTitle': 'Entity Configuration'; + readonly 'importStepper.noLocation.createPr.componentNameLabel': 'Name of the created component'; + readonly 'importStepper.noLocation.createPr.componentNamePlaceholder': 'my-component'; + readonly 'importStepper.noLocation.createPr.ownerLoadingText': 'Loading groups…'; + readonly 'importStepper.noLocation.createPr.ownerHelperText': 'Select an owner from the list or enter a reference to a Group or a User'; + readonly 'importStepper.noLocation.createPr.ownerErrorHelperText': 'required value'; + readonly 'importStepper.noLocation.createPr.ownerLabel': 'Entity Owner'; + readonly 'importStepper.noLocation.createPr.ownerPlaceholder': 'my-group'; + readonly 'importStepper.noLocation.createPr.codeownersHelperText': 'WARNING: This may fail if no CODEOWNERS file is found at the target location.'; + readonly 'importStepper.analyze.title': 'Select URL'; + readonly 'importStepper.prepare.title': 'Import Actions'; + readonly 'importStepper.prepare.description': 'Optional'; + readonly 'importStepper.review.title': 'Review'; + readonly 'stepFinishImportLocation.repository.title': 'The following Pull Request has been opened: '; + readonly 'stepFinishImportLocation.repository.description': 'Your entities will be imported as soon as the Pull Request is merged.'; + readonly 'stepFinishImportLocation.locations.new': 'The following entities have been added to the catalog:'; + readonly 'stepFinishImportLocation.locations.backButtonText': 'Register another'; + readonly 'stepFinishImportLocation.locations.existing': 'A refresh was triggered for the following locations:'; + readonly 'stepFinishImportLocation.locations.viewButtonText': 'View Component'; + readonly 'stepFinishImportLocation.backButtonText': 'Register another'; + readonly 'stepInitAnalyzeUrl.error.default': 'Received unknown analysis result of type {{type}}. Please contact the support team.'; + readonly 'stepInitAnalyzeUrl.error.url': 'Must start with http:// or https://.'; + readonly 'stepInitAnalyzeUrl.error.repository': "Couldn't generate entities for your repository"; + readonly 'stepInitAnalyzeUrl.error.locations': 'There are no entities at this location'; + readonly 'stepInitAnalyzeUrl.urlHelperText': 'Enter the full path to your entity file to start tracking your component'; + readonly 'stepInitAnalyzeUrl.nextButtonText': 'Analyze'; + readonly 'stepPrepareCreatePullRequest.description': 'You entered a link to a {{integrationType}} repository but a {{catalogFilename}} could not be found. Use this form to open a Pull Request that creates one.'; + readonly 'stepPrepareCreatePullRequest.nextButtonText': 'Create PR'; + readonly 'stepPrepareCreatePullRequest.previewPr.title': 'Preview Pull Request'; + readonly 'stepPrepareCreatePullRequest.previewPr.subheader': 'Create a new Pull Request'; + readonly 'stepPrepareCreatePullRequest.previewCatalogInfo.title': 'Preview Entities'; + readonly 'stepPrepareSelectLocations.locations.description': 'Select one or more locations that are present in your git repository:'; + readonly 'stepPrepareSelectLocations.locations.selectAll': 'Select All'; + readonly 'stepPrepareSelectLocations.nextButtonText': 'Review'; + readonly 'stepPrepareSelectLocations.existingLocations.description': 'These locations already exist in the catalog:'; + readonly 'stepReviewLocation.refresh': 'Refresh'; + readonly 'stepReviewLocation.import': 'Import'; + readonly 'stepReviewLocation.catalog.new': 'The following entities will be added to the catalog:'; + readonly 'stepReviewLocation.catalog.exists': 'The following locations already exist in the catalog:'; + readonly 'stepReviewLocation.prepareResult.title': 'The following Pull Request has been opened: '; + readonly 'stepReviewLocation.prepareResult.description': 'You can already import the location and {{appTitle}} will fetch the entities as soon as the Pull Request is merged.'; + } +>; + // Warning: (ae-forgotten-export) The symbol "StepperProvider" needs to be exported by the entry point index.d.ts // // @public export function defaultGenerateStepper( flow: ImportFlows, defaults: StepperProvider, - t: TranslationFunction, + t: TranslationFunction, ): StepperProvider; // @public @@ -216,7 +290,7 @@ export interface ImportStepperProps { generateStepper?: ( flow: ImportFlows, defaults: StepperProvider, - t: TranslationFunction, + t: TranslationFunction, ) => StepperProvider; // (undocumented) initialUrl?: string; diff --git a/plugins/catalog-import/src/alpha.tsx b/plugins/catalog-import/src/alpha.tsx index a00eb39988..0a1f3b9f4e 100644 --- a/plugins/catalog-import/src/alpha.tsx +++ b/plugins/catalog-import/src/alpha.tsx @@ -34,7 +34,13 @@ import { catalogApiRef } from '@backstage/plugin-catalog-react'; import { RequirePermission } from '@backstage/plugin-permission-react'; import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha'; -export * from './translation'; +import { catalogImportTranslationRef as _catalogImportTranslationRef } from './translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-catalog-import` instead. + */ +export const catalogImportTranslationRef = _catalogImportTranslationRef; // TODO: It's currently possible to override the import page with a custom one. We need to decide // whether this type of override is typically done with an input or by overriding the entire extension. @@ -91,5 +97,3 @@ export default createFrontendPlugin({ importPage: rootRouteRef, }, }); - -export { catalogImportTranslationRef } from './translation'; diff --git a/plugins/catalog-import/src/index.ts b/plugins/catalog-import/src/index.ts index 149c3e55c6..1174d812f7 100644 --- a/plugins/catalog-import/src/index.ts +++ b/plugins/catalog-import/src/index.ts @@ -27,3 +27,4 @@ export { } from './plugin'; export * from './components'; export * from './api'; +export { catalogImportTranslationRef } from './translation'; diff --git a/plugins/catalog-import/src/translation.ts b/plugins/catalog-import/src/translation.ts index 6fcb33f11c..ca4d2e18fa 100644 --- a/plugins/catalog-import/src/translation.ts +++ b/plugins/catalog-import/src/translation.ts @@ -16,7 +16,7 @@ import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; -/** @alpha */ +/** @public */ export const catalogImportTranslationRef = createTranslationRef({ id: 'catalog-import', messages: { diff --git a/plugins/catalog-react/report-alpha.api.md b/plugins/catalog-react/report-alpha.api.md index 3cf5bc652c..a5bf8d6fd5 100644 --- a/plugins/catalog-react/report-alpha.api.md +++ b/plugins/catalog-react/report-alpha.api.md @@ -36,7 +36,7 @@ export const CatalogFilterBlueprint: ExtensionBlueprint<{ dataRefs: never; }>; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const catalogReactTranslationRef: TranslationRef< 'catalog-react', { diff --git a/plugins/catalog-react/report.api.md b/plugins/catalog-react/report.api.md index 3ae36ce941..f7f195c226 100644 --- a/plugins/catalog-react/report.api.md +++ b/plugins/catalog-react/report.api.md @@ -31,6 +31,7 @@ import { SystemEntity } from '@backstage/catalog-model'; import { TableColumn } from '@backstage/core-components'; import { TableOptions } from '@backstage/core-components'; import { TextFieldProps } from '@material-ui/core/TextField'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; import { TypographyProps } from '@material-ui/core/Typography'; // @public (undocumented) @@ -158,6 +159,101 @@ export type CatalogReactEntitySearchBarClassKey = 'searchToolbar' | 'input'; // @public (undocumented) export type CatalogReactEntityTagPickerClassKey = 'input'; +// @public (undocumented) +export const catalogReactTranslationRef: TranslationRef< + 'catalog-react', + { + readonly 'catalogFilter.title': 'Filters'; + readonly 'catalogFilter.buttonTitle': 'Filters'; + readonly 'entityKindPicker.title': 'Kind'; + readonly 'entityKindPicker.errorMessage': 'Failed to load entity kinds'; + readonly 'entityLifecyclePicker.title': 'Lifecycle'; + readonly 'entityNamespacePicker.title': 'Namespace'; + readonly 'entityOwnerPicker.title': 'Owner'; + readonly 'entityProcessingStatusPicker.title': 'Processing Status'; + readonly 'entityTagPicker.title': 'Tags'; + readonly 'entityPeekAheadPopover.title': 'Drill into the entity to see all of the tags.'; + readonly 'entityPeekAheadPopover.entityCardActionsAriaLabel': 'Show'; + readonly 'entityPeekAheadPopover.entityCardActionsTitle': 'Show details'; + readonly 'entityPeekAheadPopover.emailCardAction.title': 'Email {{email}}'; + readonly 'entityPeekAheadPopover.emailCardAction.ariaLabel': 'Email'; + readonly 'entityPeekAheadPopover.emailCardAction.subTitle': 'mailto {{email}}'; + readonly 'entitySearchBar.placeholder': 'Search'; + readonly 'entityTypePicker.title': 'Type'; + readonly 'entityTypePicker.errorMessage': 'Failed to load entity types'; + readonly 'entityTypePicker.optionAllTitle': 'all'; + readonly 'favoriteEntity.addToFavorites': 'Add to favorites'; + readonly 'favoriteEntity.removeFromFavorites': 'Remove from favorites'; + readonly 'inspectEntityDialog.title': 'Entity Inspector'; + readonly 'inspectEntityDialog.closeButtonTitle': 'Close'; + readonly 'inspectEntityDialog.tabsAriaLabel': 'Inspector options'; + readonly 'inspectEntityDialog.ancestryPage.title': 'Ancestry'; + readonly 'inspectEntityDialog.ancestryPage.description': 'This is the ancestry of entities above the current one - as in, the chain(s) of entities down to the current one, where {{processorsLink}} child entities that ultimately led to the current one existing. Note that this is a completely different mechanism from relations.'; + readonly 'inspectEntityDialog.ancestryPage.processorsLink': 'processors emitted'; + readonly 'inspectEntityDialog.colocatedPage.title': 'Colocated'; + readonly 'inspectEntityDialog.colocatedPage.description': 'These are the entities that are colocated with this entity - as in, they originated from the same data source (e.g. came from the same YAML file), or from the same origin (e.g. the originally registered URL).'; + readonly 'inspectEntityDialog.colocatedPage.alertNoLocation': 'Entity had no location information.'; + readonly 'inspectEntityDialog.colocatedPage.alertNoEntity': 'There were no other entities on this location.'; + readonly 'inspectEntityDialog.colocatedPage.locationHeader': 'At the same location'; + readonly 'inspectEntityDialog.colocatedPage.originHeader': 'At the same origin'; + readonly 'inspectEntityDialog.jsonPage.title': 'Entity as JSON'; + readonly 'inspectEntityDialog.jsonPage.description': 'This is the raw entity data as received from the catalog, on JSON form.'; + readonly 'inspectEntityDialog.overviewPage.title': 'Overview'; + readonly 'inspectEntityDialog.overviewPage.metadata.title': 'Metadata'; + readonly 'inspectEntityDialog.overviewPage.labels': 'Labels'; + readonly 'inspectEntityDialog.overviewPage.status.title': 'Status'; + readonly 'inspectEntityDialog.overviewPage.identity.title': 'Identity'; + readonly 'inspectEntityDialog.overviewPage.annotations': 'Annotations'; + readonly 'inspectEntityDialog.overviewPage.tags': 'Tags'; + readonly 'inspectEntityDialog.overviewPage.relation.title': 'Relations'; + readonly 'inspectEntityDialog.yamlPage.title': 'Entity as YAML'; + readonly 'inspectEntityDialog.yamlPage.description': 'This is the raw entity data as received from the catalog, on YAML form.'; + readonly 'inspectEntityDialog.tabNames.json': 'Raw JSON'; + readonly 'inspectEntityDialog.tabNames.yaml': 'Raw YAML'; + readonly 'inspectEntityDialog.tabNames.overview': 'Overview'; + readonly 'inspectEntityDialog.tabNames.ancestry': 'Ancestry'; + readonly 'inspectEntityDialog.tabNames.colocated': 'Colocated'; + readonly 'unregisterEntityDialog.title': 'Are you sure you want to unregister this entity?'; + readonly 'unregisterEntityDialog.cancelButtonTitle': 'Cancel'; + readonly 'unregisterEntityDialog.deleteButtonTitle': 'Delete Entity'; + readonly 'unregisterEntityDialog.deleteEntitySuccessMessage': 'Removed entity {{entityName}}'; + readonly 'unregisterEntityDialog.onlyDeleteStateTitle': 'This entity does not seem to originate from a registered location. You therefore only have the option to delete it outright from the catalog.'; + readonly 'unregisterEntityDialog.errorStateTitle': 'Internal error: Unknown state'; + readonly 'unregisterEntityDialog.bootstrapState.title': 'You cannot unregister this entity, since it originates from a protected Backstage configuration (location "{{location}}"). If you believe this is in error, please contact the {{appTitle}} integrator.'; + readonly 'unregisterEntityDialog.bootstrapState.advancedDescription': 'You have the option to delete the entity itself from the catalog. Note that this should only be done if you know that the catalog file has been deleted at, or moved from, its origin location. If that is not the case, the entity will reappear shortly as the next refresh round is performed by the catalog.'; + readonly 'unregisterEntityDialog.bootstrapState.advancedOptions': 'Advanced Options'; + readonly 'unregisterEntityDialog.unregisterState.title': 'This action will unregister the following entities:'; + readonly 'unregisterEntityDialog.unregisterState.description': 'To undo, just re-register the entity in {{appTitle}}.'; + readonly 'unregisterEntityDialog.unregisterState.subTitle': 'Located at the following location:'; + readonly 'unregisterEntityDialog.unregisterState.advancedDescription': 'You also have the option to delete the entity itself from the catalog. Note that this should only be done if you know that the catalog file has been deleted at, or moved from, its origin location. If that is not the case, the entity will reappear shortly as the next refresh round is performed by the catalog.'; + readonly 'unregisterEntityDialog.unregisterState.advancedOptions': 'Advanced Options'; + readonly 'unregisterEntityDialog.unregisterState.unregisterButtonTitle': 'Unregister Location'; + readonly 'userListPicker.defaultOrgName': 'Company'; + readonly 'userListPicker.orgFilterAllLabel': 'All'; + readonly 'userListPicker.personalFilter.title': 'Personal'; + readonly 'userListPicker.personalFilter.ownedLabel': 'Owned'; + readonly 'userListPicker.personalFilter.starredLabel': 'Starred'; + readonly 'entityTableColumnTitle.name': 'Name'; + readonly 'entityTableColumnTitle.type': 'Type'; + readonly 'entityTableColumnTitle.label': 'Label'; + readonly 'entityTableColumnTitle.title': 'Title'; + readonly 'entityTableColumnTitle.description': 'Description'; + readonly 'entityTableColumnTitle.system': 'System'; + readonly 'entityTableColumnTitle.namespace': 'Namespace'; + readonly 'entityTableColumnTitle.domain': 'Domain'; + readonly 'entityTableColumnTitle.tags': 'Tags'; + readonly 'entityTableColumnTitle.owner': 'Owner'; + readonly 'entityTableColumnTitle.lifecycle': 'Lifecycle'; + readonly 'entityTableColumnTitle.targets': 'Targets'; + readonly 'entityRelationCard.emptyHelpLinkTitle': 'Learn how to change this.'; + readonly 'missingAnnotationEmptyState.title': 'Missing Annotation'; + readonly 'missingAnnotationEmptyState.readMore': 'Read more'; + readonly 'missingAnnotationEmptyState.annotationYaml': 'Add the annotation to your {{entityKind}} YAML as shown in the highlighted example below:'; + readonly 'missingAnnotationEmptyState.generateDescription_one': 'The annotation {{annotations}} is missing. You need to add the annotation to your {{entityKind}} if you want to enable this tool.'; + readonly 'missingAnnotationEmptyState.generateDescription_other': 'The annotations {{annotations}} are missing. You need to add the annotations to your {{entityKind}} if you want to enable this tool.'; + } +>; + // @public (undocumented) export type CatalogReactUserListPickerClassKey = | 'root' diff --git a/plugins/catalog-react/src/alpha/index.ts b/plugins/catalog-react/src/alpha/index.ts index a4c8daa83b..dfd151da8a 100644 --- a/plugins/catalog-react/src/alpha/index.ts +++ b/plugins/catalog-react/src/alpha/index.ts @@ -16,7 +16,13 @@ export * from './blueprints'; export * from './converters'; -export { catalogReactTranslationRef } from '../translation'; +import { catalogReactTranslationRef as _catalogReactTranslationRef } from '../translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-catalog-react` instead. + */ +export const catalogReactTranslationRef = _catalogReactTranslationRef; export { isOwnerOf } from '../utils/isOwnerOf'; export { useEntityPermission } from '../hooks/useEntityPermission'; export * from '../components/EntityTable/TitleColumn'; diff --git a/plugins/catalog-react/src/index.ts b/plugins/catalog-react/src/index.ts index 2b1664abe2..1f58e5f6f9 100644 --- a/plugins/catalog-react/src/index.ts +++ b/plugins/catalog-react/src/index.ts @@ -34,3 +34,4 @@ export * from './overridableComponents'; export { getEntityRelations, getEntitySourceLocation } from './utils'; export type { EntitySourceLocation } from './utils'; export * from './deprecated'; +export { catalogReactTranslationRef } from './translation'; diff --git a/plugins/catalog-react/src/translation.ts b/plugins/catalog-react/src/translation.ts index 77e0162e8b..db0c796424 100644 --- a/plugins/catalog-react/src/translation.ts +++ b/plugins/catalog-react/src/translation.ts @@ -16,7 +16,7 @@ import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; -/** @alpha */ +/** @public */ export const catalogReactTranslationRef = createTranslationRef({ id: 'catalog-react', messages: { diff --git a/plugins/catalog/report-alpha.api.md b/plugins/catalog/report-alpha.api.md index a26143a1f6..76539e776f 100644 --- a/plugins/catalog/report-alpha.api.md +++ b/plugins/catalog/report-alpha.api.md @@ -32,7 +32,7 @@ import { SearchResultItemExtensionPredicate } from '@backstage/plugin-search-rea import { SearchResultListItemBlueprintParams } from '@backstage/plugin-search-react/alpha'; import { TranslationRef } from '@backstage/frontend-plugin-api'; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const catalogTranslationRef: TranslationRef< 'catalog', { diff --git a/plugins/catalog/report.api.md b/plugins/catalog/report.api.md index cebf1fd503..84d9a8bd91 100644 --- a/plugins/catalog/report.api.md +++ b/plugins/catalog/report.api.md @@ -39,6 +39,7 @@ import { TableColumn } from '@backstage/core-components'; import { TableOptions } from '@backstage/core-components'; import { TableProps } from '@backstage/core-components'; import { TabProps } from '@material-ui/core/Tab'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; import { UserListFilterKind } from '@backstage/plugin-catalog-react'; // @public (undocumented) @@ -215,6 +216,104 @@ export interface CatalogTableRow { // @public (undocumented) export type CatalogTableToolbarClassKey = 'root' | 'text'; +// @public (undocumented) +export const catalogTranslationRef: TranslationRef< + 'catalog', + { + readonly 'deleteEntity.description': 'This entity is not referenced by any location and is therefore not receiving updates.'; + readonly 'deleteEntity.cancelButtonTitle': 'Cancel'; + readonly 'deleteEntity.deleteButtonTitle': 'Delete'; + readonly 'deleteEntity.dialogTitle': 'Are you sure you want to delete this entity?'; + readonly 'deleteEntity.actionButtonTitle': 'Delete entity'; + readonly 'indexPage.title': '{{orgName}} Catalog'; + readonly 'indexPage.createButtonTitle': 'Create'; + readonly 'indexPage.supportButtonContent': 'All your software catalog entities'; + readonly 'entityPage.notFoundMessage': 'There is no {{kind}} with the requested {{link}}.'; + readonly 'entityPage.notFoundLinkText': 'kind, namespace, and name'; + readonly 'aboutCard.title': 'About'; + readonly 'aboutCard.unknown': 'unknown'; + readonly 'aboutCard.refreshButtonTitle': 'Schedule entity refresh'; + readonly 'aboutCard.editButtonTitle': 'Edit Metadata'; + readonly 'aboutCard.editButtonAriaLabel': 'Edit'; + readonly 'aboutCard.createSimilarButtonTitle': 'Create something similar'; + readonly 'aboutCard.refreshScheduledMessage': 'Refresh scheduled'; + readonly 'aboutCard.refreshButtonAriaLabel': 'Refresh'; + readonly 'aboutCard.launchTemplate': 'Launch Template'; + readonly 'aboutCard.viewTechdocs': 'View TechDocs'; + readonly 'aboutCard.viewSource': 'View Source'; + readonly 'aboutCard.descriptionField.value': 'No description'; + readonly 'aboutCard.descriptionField.label': 'Description'; + readonly 'aboutCard.ownerField.value': 'No Owner'; + readonly 'aboutCard.ownerField.label': 'Owner'; + readonly 'aboutCard.domainField.value': 'No Domain'; + readonly 'aboutCard.domainField.label': 'Domain'; + readonly 'aboutCard.systemField.value': 'No System'; + readonly 'aboutCard.systemField.label': 'System'; + readonly 'aboutCard.parentComponentField.value': 'No Parent Component'; + readonly 'aboutCard.parentComponentField.label': 'Parent Component'; + readonly 'aboutCard.typeField.label': 'Type'; + readonly 'aboutCard.lifecycleField.label': 'Lifecycle'; + readonly 'aboutCard.tagsField.value': 'No Tags'; + readonly 'aboutCard.tagsField.label': 'Tags'; + readonly 'aboutCard.targetsField.label': 'Targets'; + readonly 'searchResultItem.type': 'Type'; + readonly 'searchResultItem.kind': 'Kind'; + readonly 'searchResultItem.owner': 'Owner'; + readonly 'searchResultItem.lifecycle': 'Lifecycle'; + readonly 'catalogTable.allFilters': 'All'; + readonly 'catalogTable.warningPanelTitle': 'Could not fetch catalog entities.'; + readonly 'catalogTable.viewActionTitle': 'View'; + readonly 'catalogTable.editActionTitle': 'Edit'; + readonly 'catalogTable.starActionTitle': 'Add to favorites'; + readonly 'catalogTable.unStarActionTitle': 'Remove from favorites'; + readonly 'dependencyOfComponentsCard.title': 'Dependency of components'; + readonly 'dependencyOfComponentsCard.emptyMessage': 'No component depends on this component.'; + readonly 'dependsOnComponentsCard.title': 'Depends on components'; + readonly 'dependsOnComponentsCard.emptyMessage': 'No component is a dependency of this component.'; + readonly 'dependsOnResourcesCard.title': 'Depends on resources'; + readonly 'dependsOnResourcesCard.emptyMessage': 'No resource is a dependency of this component.'; + readonly 'entityContextMenu.copiedMessage': 'Copied!'; + readonly 'entityContextMenu.moreButtonTitle': 'More'; + readonly 'entityContextMenu.inspectMenuTitle': 'Inspect entity'; + readonly 'entityContextMenu.copyURLMenuTitle': 'Copy entity URL'; + readonly 'entityContextMenu.unregisterMenuTitle': 'Unregister entity'; + readonly 'entityContextMenu.moreButtonAriaLabel': 'more'; + readonly 'entityLabelsCard.title': 'Labels'; + readonly 'entityLabelsCard.readMoreButtonTitle': 'Read more'; + readonly 'entityLabelsCard.columnKeyLabel': 'Label'; + readonly 'entityLabelsCard.columnValueLabel': 'Value'; + readonly 'entityLabelsCard.emptyDescription': 'No labels defined for this entity. You can add labels to your entity YAML as shown in the highlighted example below:'; + readonly 'entityLabels.ownerLabel': 'Owner'; + readonly 'entityLabels.warningPanelTitle': 'Entity not found'; + readonly 'entityLabels.lifecycleLabel': 'Lifecycle'; + readonly 'entityLinksCard.title': 'Links'; + readonly 'entityLinksCard.readMoreButtonTitle': 'Read more'; + readonly 'entityLinksCard.emptyDescription': 'No links defined for this entity. You can add links to your entity YAML as shown in the highlighted example below:'; + readonly 'entityNotFound.title': 'Entity was not found'; + readonly 'entityNotFound.description': 'Want to help us build this? Check out our Getting Started documentation.'; + readonly 'entityNotFound.docButtonTitle': 'DOCS'; + readonly 'entityTabs.tabsAriaLabel': 'Tabs'; + readonly entityProcessingErrorsDescription: 'The error below originates from'; + readonly entityRelationWarningDescription: "This entity has relations to other entities, which can't be found in the catalog.\n Entities not found are: "; + readonly 'hasComponentsCard.title': 'Has components'; + readonly 'hasComponentsCard.emptyMessage': 'No component is part of this system.'; + readonly 'hasResourcesCard.title': 'Has resources'; + readonly 'hasResourcesCard.emptyMessage': 'No resource is part of this system.'; + readonly 'hasSubcomponentsCard.title': 'Has subcomponents'; + readonly 'hasSubcomponentsCard.emptyMessage': 'No subcomponent is part of this component.'; + readonly 'hasSubdomainsCard.title': 'Has subdomains'; + readonly 'hasSubdomainsCard.emptyMessage': 'No subdomain is part of this domain.'; + readonly 'hasSystemsCard.title': 'Has systems'; + readonly 'hasSystemsCard.emptyMessage': 'No system is part of this domain.'; + readonly 'relatedEntitiesCard.emptyHelpLinkTitle': 'Learn how to change this.'; + readonly 'systemDiagramCard.title': 'System Diagram'; + readonly 'systemDiagramCard.description': 'Use pinch & zoom to move around the diagram.'; + readonly 'systemDiagramCard.edgeLabels.dependsOn': 'depends on'; + readonly 'systemDiagramCard.edgeLabels.partOf': 'part of'; + readonly 'systemDiagramCard.edgeLabels.provides': 'provides'; + } +>; + // @public (undocumented) export type ColumnBreakpoints = Record; diff --git a/plugins/catalog/src/alpha/index.ts b/plugins/catalog/src/alpha/index.ts index c9f4c8c4b7..a563a0ee90 100644 --- a/plugins/catalog/src/alpha/index.ts +++ b/plugins/catalog/src/alpha/index.ts @@ -16,4 +16,10 @@ export { default } from './plugin'; -export * from './translation'; +import { catalogTranslationRef as _catalogTranslationRef } from './translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-catalog` instead. + */ +export const catalogTranslationRef = _catalogTranslationRef; diff --git a/plugins/catalog/src/alpha/translation.ts b/plugins/catalog/src/alpha/translation.ts index 240dea6407..19738844e4 100644 --- a/plugins/catalog/src/alpha/translation.ts +++ b/plugins/catalog/src/alpha/translation.ts @@ -16,7 +16,7 @@ import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; -/** @alpha */ +/** @public */ export const catalogTranslationRef = createTranslationRef({ id: 'catalog', messages: { diff --git a/plugins/catalog/src/index.ts b/plugins/catalog/src/index.ts index 303677b68a..2c1e81f803 100644 --- a/plugins/catalog/src/index.ts +++ b/plugins/catalog/src/index.ts @@ -100,3 +100,4 @@ export type { } from './components/HasSystemsCard'; export type { RelatedEntitiesCardProps } from './components/RelatedEntitiesCard'; export type { CatalogSearchResultListItemProps } from './components/CatalogSearchResultListItem'; +export { catalogTranslationRef } from './alpha/translation'; diff --git a/plugins/home-react/report-alpha.api.md b/plugins/home-react/report-alpha.api.md index 0de77172a0..f8d2b7cb35 100644 --- a/plugins/home-react/report-alpha.api.md +++ b/plugins/home-react/report-alpha.api.md @@ -125,7 +125,7 @@ export const homePageWidgetDataRef: ConfigurableExtensionDataRef< {} >; -// @alpha +// @public @deprecated (undocumented) export const homeReactTranslationRef: TranslationRef< 'home-react', { @@ -134,4 +134,6 @@ export const homeReactTranslationRef: TranslationRef< readonly 'cardExtension.settingsButtonTitle': 'Settings'; } >; + +// (No @packageDocumentation comment for this package) ``` diff --git a/plugins/home-react/report.api.md b/plugins/home-react/report.api.md index 26ef6267aa..0444010dea 100644 --- a/plugins/home-react/report.api.md +++ b/plugins/home-react/report.api.md @@ -9,6 +9,7 @@ import { JSX as JSX_3 } from 'react'; import { Overrides } from '@material-ui/core/styles/overrides'; import { RJSFSchema } from '@rjsf/utils'; import { StyleRules } from '@material-ui/core/styles/withStyles'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; import { UiSchema } from '@rjsf/utils'; // @public (undocumented) @@ -81,6 +82,16 @@ export function createCardExtension(options: { settings?: CardSettings; }): Extension<(props: CardExtensionProps) => JSX_2.Element>; +// @public +export const homeReactTranslationRef: TranslationRef< + 'home-react', + { + readonly 'settingsModal.title': 'Settings'; + readonly 'settingsModal.closeButtonTitle': 'Close'; + readonly 'cardExtension.settingsButtonTitle': 'Settings'; + } +>; + // @public (undocumented) export type PluginHomeComponentsNameToClassKey = { PluginHomeContentModal: PluginHomeContentModalClassKey; diff --git a/plugins/home-react/src/alpha.ts b/plugins/home-react/src/alpha.ts index 00b7a7bed7..677e27f5e1 100644 --- a/plugins/home-react/src/alpha.ts +++ b/plugins/home-react/src/alpha.ts @@ -23,7 +23,13 @@ * * @packageDocumentation */ -export { homeReactTranslationRef } from './translation'; +import { homeReactTranslationRef as _homeReactTranslationRef } from './translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-home-react` instead. + */ +export const homeReactTranslationRef = _homeReactTranslationRef; export { HomePageWidgetBlueprint, type HomePageWidgetBlueprintParams, diff --git a/plugins/home-react/src/index.ts b/plugins/home-react/src/index.ts index 54602dc814..f24d85b2b8 100644 --- a/plugins/home-react/src/index.ts +++ b/plugins/home-react/src/index.ts @@ -31,3 +31,4 @@ export type { CardConfig, } from './extensions'; export * from './overridableComponents'; +export { homeReactTranslationRef } from './translation'; diff --git a/plugins/home-react/src/translation.ts b/plugins/home-react/src/translation.ts index 1a8fd9f1bf..ab67d4b37e 100644 --- a/plugins/home-react/src/translation.ts +++ b/plugins/home-react/src/translation.ts @@ -17,9 +17,9 @@ import { createTranslationRef } from '@backstage/frontend-plugin-api'; /** * Translation reference for the home-react plugin. - * Contains localized text strings for home page components and settings modals. + * Contains localized text strings for home page components and widgets. * - * @alpha + * @public */ export const homeReactTranslationRef = createTranslationRef({ id: 'home-react', diff --git a/plugins/home/report-alpha.api.md b/plugins/home/report-alpha.api.md index 0269f471fe..6b1f89c779 100644 --- a/plugins/home/report-alpha.api.md +++ b/plugins/home/report-alpha.api.md @@ -206,7 +206,7 @@ const _default: OverridableFrontendPlugin< >; export default _default; -// @alpha +// @public @deprecated (undocumented) export const homeTranslationRef: TranslationRef< 'home', { diff --git a/plugins/home/report.api.md b/plugins/home/report.api.md index a90d5755ac..2d5f8ddecc 100644 --- a/plugins/home/report.api.md +++ b/plugins/home/report.api.md @@ -23,6 +23,7 @@ import { ReactNode } from 'react'; import { RendererProps as RendererProps_2 } from '@backstage/plugin-home-react'; import { RouteRef } from '@backstage/core-plugin-api'; import { StorageApi } from '@backstage/core-plugin-api'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; import { Variant } from '@material-ui/core/styles/createTypography'; // @public @@ -176,6 +177,39 @@ export const homePlugin: BackstagePlugin< {} >; +// @public +export const homeTranslationRef: TranslationRef< + 'home', + { + readonly 'starredEntities.noStarredEntitiesMessage': 'Click the star beside an entity name to add it to this list!'; + readonly 'addWidgetDialog.title': 'Add new widget to dashboard'; + readonly 'customHomepageButtons.cancel': 'Cancel'; + readonly 'customHomepageButtons.clearAll': 'Clear all'; + readonly 'customHomepageButtons.edit': 'Edit'; + readonly 'customHomepageButtons.restoreDefaults': 'Restore defaults'; + readonly 'customHomepageButtons.addWidget': 'Add widget'; + readonly 'customHomepageButtons.save': 'Save'; + readonly 'customHomepage.noWidgets': "No widgets added. Start by clicking the 'Add widget' button."; + readonly 'widgetSettingsOverlay.cancelButtonTitle': 'Cancel'; + readonly 'widgetSettingsOverlay.editSettingsTooptip': 'Edit settings'; + readonly 'widgetSettingsOverlay.deleteWidgetTooltip': 'Delete widget'; + readonly 'widgetSettingsOverlay.submitButtonTitle': 'Submit'; + readonly 'starredEntityListItem.removeFavoriteEntityTitle': 'Remove entity from favorites'; + readonly 'visitList.empty.title': 'There are no visits to show yet.'; + readonly 'visitList.empty.description': 'Once you start using Backstage, your visits will appear here as a quick link to carry on where you left off.'; + readonly 'visitList.few.title': 'The more pages you visit, the more pages will appear here.'; + readonly 'quickStart.title': 'Onboarding'; + readonly 'quickStart.description': 'Get started with Backstage'; + readonly 'quickStart.learnMoreLinkTitle': 'Learn more'; + readonly 'visitedByType.action.viewMore': 'View more'; + readonly 'visitedByType.action.viewLess': 'View less'; + readonly 'featuredDocsCard.empty.title': 'No documents to show'; + readonly 'featuredDocsCard.empty.description': 'Create your own document. Check out our Getting Started Information'; + readonly 'featuredDocsCard.empty.learnMoreLinkTitle': 'DOCS'; + readonly 'featuredDocsCard.learnMoreTitle': 'LEARN MORE'; + } +>; + // @public export const isOperator: (s: string) => s is Operators; diff --git a/plugins/home/src/alpha.tsx b/plugins/home/src/alpha.tsx index 194f322317..d4f350693d 100644 --- a/plugins/home/src/alpha.tsx +++ b/plugins/home/src/alpha.tsx @@ -225,4 +225,10 @@ export default createFrontendPlugin({ }, }); -export { homeTranslationRef } from './translation'; +import { homeTranslationRef as _homeTranslationRef } from './translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-home` instead. + */ +export const homeTranslationRef = _homeTranslationRef; diff --git a/plugins/home/src/index.ts b/plugins/home/src/index.ts index 3a6f152d03..35bd43460d 100644 --- a/plugins/home/src/index.ts +++ b/plugins/home/src/index.ts @@ -42,3 +42,4 @@ export * from './assets'; export * from './homePageComponents'; export * from './deprecated'; export * from './api'; +export { homeTranslationRef } from './translation'; diff --git a/plugins/home/src/translation.ts b/plugins/home/src/translation.ts index 480e2850b9..89cb0756d4 100644 --- a/plugins/home/src/translation.ts +++ b/plugins/home/src/translation.ts @@ -19,7 +19,7 @@ import { createTranslationRef } from '@backstage/frontend-plugin-api'; * Translation reference for the home plugin. * Contains localized text strings for home page components and widgets. * - * @alpha + * @public */ export const homeTranslationRef = createTranslationRef({ id: 'home', diff --git a/plugins/kubernetes-cluster/report-alpha.api.md b/plugins/kubernetes-cluster/report-alpha.api.md index 2ce9c33c47..2220ffb5fe 100644 --- a/plugins/kubernetes-cluster/report-alpha.api.md +++ b/plugins/kubernetes-cluster/report-alpha.api.md @@ -5,7 +5,7 @@ ```ts import { TranslationRef } from '@backstage/frontend-plugin-api'; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const kubernetesClusterTranslationRef: TranslationRef< 'kubernetes-cluster', { diff --git a/plugins/kubernetes-cluster/report.api.md b/plugins/kubernetes-cluster/report.api.md index 2c9a4c93ef..29669f19a8 100644 --- a/plugins/kubernetes-cluster/report.api.md +++ b/plugins/kubernetes-cluster/report.api.md @@ -5,6 +5,7 @@ ```ts import { Entity } from '@backstage/catalog-model'; import { JSX as JSX_2 } from 'react/jsx-runtime'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; // @public export const EntityKubernetesClusterContent: ( @@ -17,6 +18,15 @@ export type EntityKubernetesClusterContentProps = {}; // @public (undocumented) export const isKubernetesClusterAvailable: (entity: Entity) => boolean; +// @public (undocumented) +export const kubernetesClusterTranslationRef: TranslationRef< + 'kubernetes-cluster', + { + readonly 'kubernetesClusterContentPage.permissionAlert.message': "To view Kubernetes objects, contact your portal administrator to give you the 'kubernetes.clusters.read' permission."; + readonly 'kubernetesClusterContentPage.permissionAlert.title': 'Permission required'; + } +>; + // @public (undocumented) export const Router: () => JSX_2.Element; ``` diff --git a/plugins/kubernetes-cluster/src/alpha.ts b/plugins/kubernetes-cluster/src/alpha.ts index e49b7ac9c9..a2d816dc36 100644 --- a/plugins/kubernetes-cluster/src/alpha.ts +++ b/plugins/kubernetes-cluster/src/alpha.ts @@ -14,4 +14,10 @@ * limitations under the License. */ -export { kubernetesClusterTranslationRef } from './translation'; +import { kubernetesClusterTranslationRef as _kubernetesClusterTranslationRef } from './translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-kubernetes-cluster` instead. + */ +export const kubernetesClusterTranslationRef = _kubernetesClusterTranslationRef; diff --git a/plugins/kubernetes-cluster/src/index.ts b/plugins/kubernetes-cluster/src/index.ts index 6171b151e4..650101880c 100644 --- a/plugins/kubernetes-cluster/src/index.ts +++ b/plugins/kubernetes-cluster/src/index.ts @@ -25,3 +25,4 @@ export { type EntityKubernetesClusterContentProps, } from './plugin'; export { Router, isKubernetesClusterAvailable } from './Router'; +export { kubernetesClusterTranslationRef } from './translation'; diff --git a/plugins/kubernetes-cluster/src/translation.ts b/plugins/kubernetes-cluster/src/translation.ts index ba99c6744e..aac274a617 100644 --- a/plugins/kubernetes-cluster/src/translation.ts +++ b/plugins/kubernetes-cluster/src/translation.ts @@ -15,7 +15,7 @@ */ import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; -/** @alpha */ +/** @public */ export const kubernetesClusterTranslationRef = createTranslationRef({ id: 'kubernetes-cluster', messages: { diff --git a/plugins/kubernetes-react/report-alpha.api.md b/plugins/kubernetes-react/report-alpha.api.md index f638bf6789..b7b8c5fcb1 100644 --- a/plugins/kubernetes-react/report-alpha.api.md +++ b/plugins/kubernetes-react/report-alpha.api.md @@ -5,7 +5,7 @@ ```ts import { TranslationRef } from '@backstage/frontend-plugin-api'; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const kubernetesReactTranslationRef: TranslationRef< 'kubernetes-react', { diff --git a/plugins/kubernetes-react/report.api.md b/plugins/kubernetes-react/report.api.md index bb8057b2e8..e9631fac38 100644 --- a/plugins/kubernetes-react/report.api.md +++ b/plugins/kubernetes-react/report.api.md @@ -34,6 +34,7 @@ import { Pod } from 'kubernetes-models/v1'; import { Pod as Pod_2 } from 'kubernetes-models/v1/Pod'; import { ProfileInfoApi } from '@backstage/core-plugin-api'; import { ReactNode } from 'react'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; import type { TypeMeta } from '@kubernetes-models/base'; import type { V1Job } from '@kubernetes/client-node'; import type { V1ObjectMeta } from '@kubernetes/client-node'; @@ -554,6 +555,91 @@ export class KubernetesProxyClient { }>; } +// @public (undocumented) +export const kubernetesReactTranslationRef: TranslationRef< + 'kubernetes-react', + { + readonly 'namespace.label': 'namespace:'; + readonly 'namespace.labelWithValue': 'namespace: {{namespace}}'; + readonly 'events.noEventsFound': 'No events found'; + readonly 'events.eventTooltip': '{{eventType}} event'; + readonly 'events.firstEvent': 'First event {{timeAgo}} (count: {{count}})'; + readonly 'cluster.label': 'Cluster'; + readonly 'cluster.pods': 'pods'; + readonly 'cluster.pods_one': '{{count}} pod'; + readonly 'cluster.pods_other': '{{count}} pods'; + readonly 'cluster.podsWithErrors': 'pods with errors'; + readonly 'cluster.podsWithErrors_one': '{{count}} pod with errors'; + readonly 'cluster.podsWithErrors_other': '{{count}} pods with errors'; + readonly 'cluster.noPodsWithErrors': 'No pods with errors'; + readonly 'pods.pods_one': '{{count}} pod'; + readonly 'pods.pods_other': '{{count}} pods'; + readonly 'podsTable.columns.name': 'name'; + readonly 'podsTable.columns.id': 'ID'; + readonly 'podsTable.columns.status': 'status'; + readonly 'podsTable.columns.phase': 'phase'; + readonly 'podsTable.columns.containersReady': 'containers ready'; + readonly 'podsTable.columns.totalRestarts': 'total restarts'; + readonly 'podsTable.columns.cpuUsage': 'CPU usage %'; + readonly 'podsTable.columns.memoryUsage': 'Memory usage %'; + readonly 'podsTable.unknown': 'unknown'; + readonly 'podsTable.status.running': 'Running'; + readonly 'podsTable.status.ok': 'OK'; + readonly 'errorPanel.message': 'There was a problem retrieving some Kubernetes resources for the entity: {{entityName}}. This could mean that the Error Reporting card is not completely accurate.'; + readonly 'errorPanel.title': 'There was a problem retrieving Kubernetes objects'; + readonly 'errorPanel.errorsLabel': 'Errors'; + readonly 'errorPanel.clusterLabel': 'Cluster'; + readonly 'errorPanel.clusterLabelValue': 'Cluster: {{cluster}}'; + readonly 'errorPanel.fetchError': 'Error communicating with Kubernetes: {{errorType}}, message: {{message}}'; + readonly 'errorPanel.resourceError': "Error fetching Kubernetes resource: '{{resourcePath}}', error: {{errorType}}, status code: {{statusCode}}"; + readonly 'fixDialog.title': '{{podName}} - {{errorType}}'; + readonly 'fixDialog.events': 'Events:'; + readonly 'fixDialog.helpButton': 'Help'; + readonly 'fixDialog.detectedError': 'Detected error:'; + readonly 'fixDialog.causeExplanation': 'Cause explanation:'; + readonly 'fixDialog.fix': 'Fix:'; + readonly 'fixDialog.crashLogs': 'Crash logs:'; + readonly 'fixDialog.openDocs': 'Open docs'; + readonly 'fixDialog.ariaLabels.close': 'close'; + readonly 'fixDialog.ariaLabels.fixIssue': 'fix issue'; + readonly 'podDrawer.buttons.delete': 'Delete Pod'; + readonly 'podDrawer.cpuRequests': 'CPU requests'; + readonly 'podDrawer.cpuLimits': 'CPU limits'; + readonly 'podDrawer.memoryRequests': 'Memory requests'; + readonly 'podDrawer.memoryLimits': 'Memory limits'; + readonly 'podDrawer.resourceUtilization': 'Resource utilization'; + readonly 'hpa.minReplicas': 'min replicas'; + readonly 'hpa.maxReplicas': 'max replicas'; + readonly 'hpa.replicasSummary': 'min replicas {{min}} / max replicas {{max}}'; + readonly 'hpa.currentCpuUsage': 'current CPU usage:'; + readonly 'hpa.currentCpuUsageLabel': 'current CPU usage: {{value}}%'; + readonly 'hpa.targetCpuUsage': 'target CPU usage:'; + readonly 'hpa.targetCpuUsageLabel': 'target CPU usage: {{value}}%'; + readonly 'errorReporting.columns.name': 'name'; + readonly 'errorReporting.columns.kind': 'kind'; + readonly 'errorReporting.columns.namespace': 'namespace'; + readonly 'errorReporting.columns.messages': 'messages'; + readonly 'errorReporting.columns.cluster': 'cluster'; + readonly 'errorReporting.title': 'Error Reporting'; + readonly 'podLogs.title': 'No logs emitted'; + readonly 'podLogs.description': 'No logs were emitted by the container'; + readonly 'podLogs.buttonText': 'Logs'; + readonly 'podLogs.titleTemplate': '{{podName}} - {{containerName}} logs on cluster {{clusterName}}'; + readonly 'podLogs.buttonAriaLabel': 'get logs'; + readonly 'podExecTerminal.buttonText': 'Terminal'; + readonly 'podExecTerminal.titleTemplate': '{{podName}} - {{containerName}} terminal shell on cluster {{clusterName}}'; + readonly 'podExecTerminal.buttonAriaLabel': 'open terminal'; + readonly 'kubernetesDrawer.yaml': 'YAML'; + readonly 'kubernetesDrawer.closeDrawer': 'Close the drawer'; + readonly 'kubernetesDrawer.managedFields': 'Managed Fields'; + readonly 'kubernetesDrawer.unknownName': 'unknown name'; + readonly 'linkErrorPanel.message': "Could not format the link to the dashboard of your cluster named '{{clusterName}}'. Its dashboardApp property has been set to '{{dashboardApp}}.'"; + readonly 'linkErrorPanel.title': 'There was a problem formatting the link to the Kubernetes dashboard'; + readonly 'linkErrorPanel.errorsLabel': 'Errors:'; + readonly 'kubernetesDialog.closeAriaLabel': 'close'; + } +>; + // @public (undocumented) export const KubernetesStructuredMetadataTableDrawer: < T extends KubernetesDrawerable, diff --git a/plugins/kubernetes-react/src/alpha.ts b/plugins/kubernetes-react/src/alpha.ts index 411bd78878..212f3b3e96 100644 --- a/plugins/kubernetes-react/src/alpha.ts +++ b/plugins/kubernetes-react/src/alpha.ts @@ -14,6 +14,10 @@ * limitations under the License. */ -import { kubernetesReactTranslationRef } from './translation'; +import { kubernetesReactTranslationRef as _kubernetesReactTranslationRef } from './translation'; -export { kubernetesReactTranslationRef }; +/** + * @public + * @deprecated Import from `@backstage/plugin-kubernetes-react` instead. + */ +export const kubernetesReactTranslationRef = _kubernetesReactTranslationRef; diff --git a/plugins/kubernetes-react/src/index.ts b/plugins/kubernetes-react/src/index.ts index 326b363b05..e52ac76d49 100644 --- a/plugins/kubernetes-react/src/index.ts +++ b/plugins/kubernetes-react/src/index.ts @@ -28,3 +28,4 @@ export * from './api'; export * from './kubernetes-auth-provider'; export * from './components'; export * from './types'; +export { kubernetesReactTranslationRef } from './translation'; diff --git a/plugins/kubernetes-react/src/translation.ts b/plugins/kubernetes-react/src/translation.ts index 0420cc04bf..bc8f3d99da 100644 --- a/plugins/kubernetes-react/src/translation.ts +++ b/plugins/kubernetes-react/src/translation.ts @@ -16,7 +16,7 @@ import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; -/** @alpha */ +/** @public */ export const kubernetesReactTranslationRef = createTranslationRef({ id: 'kubernetes-react', messages: { diff --git a/plugins/kubernetes/report-alpha.api.md b/plugins/kubernetes/report-alpha.api.md index 7086976724..d114524b89 100644 --- a/plugins/kubernetes/report-alpha.api.md +++ b/plugins/kubernetes/report-alpha.api.md @@ -240,7 +240,7 @@ const _default: OverridableFrontendPlugin< >; export default _default; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const kubernetesTranslationRef: TranslationRef< 'kubernetes', { diff --git a/plugins/kubernetes/report.api.md b/plugins/kubernetes/report.api.md index b9450e650d..8a6b02a7aa 100644 --- a/plugins/kubernetes/report.api.md +++ b/plugins/kubernetes/report.api.md @@ -7,6 +7,7 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; import { JSX as JSX_2 } from 'react/jsx-runtime'; import { RouteRef } from '@backstage/core-plugin-api'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; // Warning: (ae-missing-release-tag) "EntityKubernetesContent" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -37,6 +38,19 @@ const kubernetesPlugin: BackstagePlugin< export { kubernetesPlugin }; export { kubernetesPlugin as plugin }; +// @public (undocumented) +export const kubernetesTranslationRef: TranslationRef< + 'kubernetes', + { + readonly 'entityContent.title': 'Kubernetes'; + readonly 'kubernetesContentPage.title': 'Your Clusters'; + readonly 'kubernetesContentPage.emptyState.title': 'No Kubernetes resources'; + readonly 'kubernetesContentPage.emptyState.description': 'No resources on any known clusters for {{entityName}}'; + readonly 'kubernetesContentPage.permissionAlert.message': "To view Kubernetes objects, contact your portal administrator to give you the 'kubernetes.clusters.read' and 'kubernetes.resources.read' permission."; + readonly 'kubernetesContentPage.permissionAlert.title': 'Permission required'; + } +>; + // Warning: (ae-missing-release-tag) "Router" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) diff --git a/plugins/kubernetes/src/alpha/index.ts b/plugins/kubernetes/src/alpha/index.ts index 23888f968f..02fad57851 100644 --- a/plugins/kubernetes/src/alpha/index.ts +++ b/plugins/kubernetes/src/alpha/index.ts @@ -13,5 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { kubernetesTranslationRef } from './translation'; +import { kubernetesTranslationRef as _kubernetesTranslationRef } from './translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-kubernetes` instead. + */ +export const kubernetesTranslationRef = _kubernetesTranslationRef; export { default } from './plugin'; diff --git a/plugins/kubernetes/src/alpha/translation.ts b/plugins/kubernetes/src/alpha/translation.ts index 238bd3b084..17ebe90de0 100644 --- a/plugins/kubernetes/src/alpha/translation.ts +++ b/plugins/kubernetes/src/alpha/translation.ts @@ -15,7 +15,7 @@ */ import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; -/** @alpha */ +/** @public */ export const kubernetesTranslationRef = createTranslationRef({ id: 'kubernetes', messages: { diff --git a/plugins/kubernetes/src/index.ts b/plugins/kubernetes/src/index.ts index 3651a861fc..54abb07bc3 100644 --- a/plugins/kubernetes/src/index.ts +++ b/plugins/kubernetes/src/index.ts @@ -29,3 +29,4 @@ export type { EntityKubernetesContentProps } from './plugin'; export { Router, isKubernetesAvailable } from './Router'; // TODO remove this re-export as a breaking change after a couple of releases export * from '@backstage/plugin-kubernetes-react'; +export { kubernetesTranslationRef } from './alpha/translation'; diff --git a/plugins/notifications/report-alpha.api.md b/plugins/notifications/report-alpha.api.md index e1feed0cde..84731628ae 100644 --- a/plugins/notifications/report-alpha.api.md +++ b/plugins/notifications/report-alpha.api.md @@ -120,7 +120,7 @@ const _default: OverridableFrontendPlugin< >; export default _default; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const notificationsTranslationRef: TranslationRef< 'plugin.notifications', { diff --git a/plugins/notifications/report.api.md b/plugins/notifications/report.api.md index 2c056d4e91..21dc817d91 100644 --- a/plugins/notifications/report.api.md +++ b/plugins/notifications/report.api.md @@ -15,6 +15,7 @@ import { NotificationSeverity } from '@backstage/plugin-notifications-common'; import { NotificationStatus } from '@backstage/plugin-notifications-common'; import { RouteRef } from '@backstage/core-plugin-api'; import { TableProps } from '@backstage/core-components'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; // @public (undocumented) export type GetNotificationsCommonOptions = { @@ -187,6 +188,71 @@ export type NotificationsTableProps = Pick< pageSize: number; }; +// @public (undocumented) +export const notificationsTranslationRef: TranslationRef< + 'plugin.notifications', + { + readonly 'table.errors.markAllReadFailed': 'Failed to mark all notifications as read'; + readonly 'table.pagination.labelDisplayedRows': '{from}-{to} of {count}'; + readonly 'table.pagination.firstTooltip': 'First Page'; + readonly 'table.pagination.labelRowsSelect': 'rows'; + readonly 'table.pagination.lastTooltip': 'Last Page'; + readonly 'table.pagination.nextTooltip': 'Next Page'; + readonly 'table.pagination.previousTooltip': 'Previous Page'; + readonly 'table.emptyMessage': 'No records to display'; + readonly 'table.bulkActions.markAllRead': 'Mark all read'; + readonly 'table.bulkActions.markSelectedAsRead': 'Mark selected as read'; + readonly 'table.bulkActions.returnSelectedAmongUnread': 'Return selected among unread'; + readonly 'table.bulkActions.saveSelectedForLater': 'Save selected for later'; + readonly 'table.bulkActions.undoSaveForSelected': 'Undo save for selected'; + readonly 'table.confirmDialog.title': 'Are you sure?'; + readonly 'table.confirmDialog.markAllReadDescription': 'Mark all notifications as read.'; + readonly 'table.confirmDialog.markAllReadConfirmation': 'Mark All'; + readonly 'filters.view.all': 'All'; + readonly 'filters.view.label': 'View'; + readonly 'filters.view.read': 'Read notifications'; + readonly 'filters.view.saved': 'Saved'; + readonly 'filters.view.unread': 'Unread notifications'; + readonly 'filters.title': 'Filters'; + readonly 'filters.severity.normal': 'Normal'; + readonly 'filters.severity.high': 'High'; + readonly 'filters.severity.low': 'Low'; + readonly 'filters.severity.label': 'Min severity'; + readonly 'filters.severity.critical': 'Critical'; + readonly 'filters.topic.label': 'Topic'; + readonly 'filters.topic.anyTopic': 'Any topic'; + readonly 'filters.createdAfter.label': 'Sent out'; + readonly 'filters.createdAfter.placeholder': 'Notifications since'; + readonly 'filters.createdAfter.last24h': 'Last 24h'; + readonly 'filters.createdAfter.lastWeek': 'Last week'; + readonly 'filters.createdAfter.anyTime': 'Any time'; + readonly 'filters.sortBy.origin': 'Origin'; + readonly 'filters.sortBy.label': 'Sort by'; + readonly 'filters.sortBy.placeholder': 'Field to sort by'; + readonly 'filters.sortBy.newest': 'Newest on top'; + readonly 'filters.sortBy.oldest': 'Oldest on top'; + readonly 'filters.sortBy.topic': 'Topic'; + readonly 'settings.table.origin': 'Origin'; + readonly 'settings.table.topic': 'Topic'; + readonly 'settings.title': 'Notification settings'; + readonly 'settings.errors.useNotificationFormat': 'useNotificationFormat must be used within a NotificationFormatProvider'; + readonly 'settings.errorTitle': 'Failed to load settings'; + readonly 'settings.noSettingsAvailable': 'No notification settings available, check back later'; + readonly 'sidebar.title': 'Notifications'; + readonly 'sidebar.errors.markAsReadFailed': 'Failed to mark notification as read'; + readonly 'sidebar.errors.fetchNotificationFailed': 'Failed to fetch notification'; + readonly 'notificationsPage.title': 'Notifications'; + readonly 'notificationsPage.tableTitle.all_one': 'All notifications ({{count}})'; + readonly 'notificationsPage.tableTitle.all_other': 'All notifications ({{count}})'; + readonly 'notificationsPage.tableTitle.saved_one': 'Saved notifications ({{count}})'; + readonly 'notificationsPage.tableTitle.saved_other': 'Saved notifications ({{count}})'; + readonly 'notificationsPage.tableTitle.unread_one': 'Unread notifications ({{count}})'; + readonly 'notificationsPage.tableTitle.unread_other': 'Unread notifications ({{count}})'; + readonly 'notificationsPage.tableTitle.read_one': 'Read notifications ({{count}})'; + readonly 'notificationsPage.tableTitle.read_other': 'Read notifications ({{count}})'; + } +>; + // @public (undocumented) export type UpdateNotificationsOptions = { ids: string[]; diff --git a/plugins/notifications/src/alpha.tsx b/plugins/notifications/src/alpha.tsx index b930373a46..9c2196e525 100644 --- a/plugins/notifications/src/alpha.tsx +++ b/plugins/notifications/src/alpha.tsx @@ -56,4 +56,10 @@ export default createFrontendPlugin({ extensions: [page, api], }); -export { notificationsTranslationRef } from './translation'; +import { notificationsTranslationRef as _notificationsTranslationRef } from './translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-notifications` instead. + */ +export const notificationsTranslationRef = _notificationsTranslationRef; diff --git a/plugins/notifications/src/index.ts b/plugins/notifications/src/index.ts index 25565f1ae1..b67ae9b108 100644 --- a/plugins/notifications/src/index.ts +++ b/plugins/notifications/src/index.ts @@ -17,3 +17,4 @@ export { notificationsPlugin, NotificationsPage } from './plugin'; export * from './api'; export { useNotificationsApi } from './hooks'; export * from './components'; +export { notificationsTranslationRef } from './translation'; diff --git a/plugins/notifications/src/translation.ts b/plugins/notifications/src/translation.ts index d810ed9966..f8c2749c42 100644 --- a/plugins/notifications/src/translation.ts +++ b/plugins/notifications/src/translation.ts @@ -16,7 +16,7 @@ import { createTranslationRef } from '@backstage/frontend-plugin-api'; -/** @alpha */ +/** @public */ export const notificationsTranslationRef = createTranslationRef({ id: 'plugin.notifications', messages: { diff --git a/plugins/org/report-alpha.api.md b/plugins/org/report-alpha.api.md index 44fd429bfa..0b8d974be5 100644 --- a/plugins/org/report-alpha.api.md +++ b/plugins/org/report-alpha.api.md @@ -202,7 +202,7 @@ const _default: OverridableFrontendPlugin< >; export default _default; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const orgTranslationRef: TranslationRef< 'org', { diff --git a/plugins/org/report.api.md b/plugins/org/report.api.md index d51a45e3f7..2fa5e7a285 100644 --- a/plugins/org/report.api.md +++ b/plugins/org/report.api.md @@ -7,6 +7,7 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { ExternalRouteRef } from '@backstage/core-plugin-api'; import { IconComponent } from '@backstage/core-plugin-api'; import { JSX as JSX_2 } from 'react/jsx-runtime'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; // @public (undocumented) export type ComponentsGridClassKey = @@ -85,6 +86,35 @@ const orgPlugin: BackstagePlugin< export { orgPlugin }; export { orgPlugin as plugin }; +// @public (undocumented) +export const orgTranslationRef: TranslationRef< + 'org', + { + readonly 'groupProfileCard.groupNotFound': 'Group not found'; + readonly 'groupProfileCard.editIconButtonTitle': 'Edit Metadata'; + readonly 'groupProfileCard.refreshIconButtonTitle': 'Schedule entity refresh'; + readonly 'groupProfileCard.refreshIconButtonAriaLabel': 'Refresh'; + readonly 'groupProfileCard.listItemTitle.email': 'Email'; + readonly 'groupProfileCard.listItemTitle.entityRef': 'Entity Ref'; + readonly 'groupProfileCard.listItemTitle.parentGroup': 'Parent Group'; + readonly 'groupProfileCard.listItemTitle.childGroups': 'Child Groups'; + readonly 'membersListCard.title': '{{groupName}} members'; + readonly 'membersListCard.cardLabel': 'User page for {{memberName}}'; + readonly 'membersListCard.noMembersDescription': 'This group has no members.'; + readonly 'membersListCard.noSearchResult': 'Found no members matching "{{searchTerm}}".'; + readonly 'membersListCard.aggregateMembersToggle.label': 'Include subgroups'; + readonly 'ownershipCard.title': 'Ownership'; + readonly 'ownershipCard.aggregateRelationsToggle.label': 'Include indirect ownership'; + readonly 'userProfileCard.editIconButtonTitle': 'Edit Metadata'; + readonly 'userProfileCard.listItemTitle.email': 'Email'; + readonly 'userProfileCard.listItemTitle.memberOf': 'Member of'; + readonly 'userProfileCard.userNotFound': 'User not found'; + readonly 'userProfileCard.moreGroupButtonTitle': '...More ({{number}})'; + readonly 'userProfileCard.allGroupDialog.title': "All {{name}}'s groups:"; + readonly 'userProfileCard.allGroupDialog.closeButtonTitle': 'Close'; + } +>; + // @public (undocumented) export const OwnershipCard: (props: { entityFilterKind?: string[]; diff --git a/plugins/org/src/alpha.tsx b/plugins/org/src/alpha.tsx index 4e11463781..89acb8a6ee 100644 --- a/plugins/org/src/alpha.tsx +++ b/plugins/org/src/alpha.tsx @@ -130,4 +130,10 @@ export default createFrontendPlugin({ }, }); -export { orgTranslationRef } from './translation'; +import { orgTranslationRef as _orgTranslationRef } from './translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-org` instead. + */ +export const orgTranslationRef = _orgTranslationRef; diff --git a/plugins/org/src/index.ts b/plugins/org/src/index.ts index 33671697d6..90f475bb60 100644 --- a/plugins/org/src/index.ts +++ b/plugins/org/src/index.ts @@ -29,3 +29,4 @@ export { EntityUserProfileCard, } from './plugin'; export * from './components'; +export { orgTranslationRef } from './translation'; diff --git a/plugins/org/src/translation.ts b/plugins/org/src/translation.ts index b5309d14e7..aa1c248c17 100644 --- a/plugins/org/src/translation.ts +++ b/plugins/org/src/translation.ts @@ -16,7 +16,7 @@ import { createTranslationRef } from '@backstage/frontend-plugin-api'; /** - * @alpha + * @public */ export const orgTranslationRef = createTranslationRef({ id: 'org', diff --git a/plugins/scaffolder-react/report-alpha.api.md b/plugins/scaffolder-react/report-alpha.api.md index 84c88bd319..a6c9fbb232 100644 --- a/plugins/scaffolder-react/report-alpha.api.md +++ b/plugins/scaffolder-react/report-alpha.api.md @@ -307,16 +307,11 @@ export type ScaffolderReactComponentsNameToClassKey = { // @alpha (undocumented) export type ScaffolderReactTemplateCategoryPickerClassKey = 'root' | 'label'; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const scaffolderReactTranslationRef: TranslationRef< 'scaffolder-react', { readonly 'workflow.noDescription': 'No description'; - readonly 'stepper.backButtonText': 'Back'; - readonly 'stepper.nextButtonText': 'Next'; - readonly 'stepper.createButtonText': 'Create'; - readonly 'stepper.reviewButtonText': 'Review'; - readonly 'stepper.stepIndexLabel': 'Step {{index, number}}'; readonly 'passwordWidget.content': 'This widget is insecure. Please use [`ui:field: Secret`](https://backstage.io/docs/features/software-templates/writing-templates/#using-secrets) instead of `ui:widget: password`'; readonly 'scaffolderPageContextMenu.createLabel': 'Create'; readonly 'scaffolderPageContextMenu.moreLabel': 'more'; @@ -324,6 +319,11 @@ export const scaffolderReactTranslationRef: TranslationRef< readonly 'scaffolderPageContextMenu.actionsLabel': 'Installed Actions'; readonly 'scaffolderPageContextMenu.tasksLabel': 'Task List'; readonly 'scaffolderPageContextMenu.templatingExtensionsLabel': 'Templating Extensions'; + readonly 'stepper.backButtonText': 'Back'; + readonly 'stepper.nextButtonText': 'Next'; + readonly 'stepper.createButtonText': 'Create'; + readonly 'stepper.reviewButtonText': 'Review'; + readonly 'stepper.stepIndexLabel': 'Step {{index, number}}'; readonly 'templateCategoryPicker.title': 'Categories'; readonly 'templateCard.noDescription': 'No description'; readonly 'templateCard.chooseButtonText': 'Choose'; diff --git a/plugins/scaffolder-react/report.api.md b/plugins/scaffolder-react/report.api.md index 5c0ef0d2be..9b9b00ad02 100644 --- a/plugins/scaffolder-react/report.api.md +++ b/plugins/scaffolder-react/report.api.md @@ -56,6 +56,7 @@ import { TemplateGlobalFunction as TemplateGlobalFunction_2 } from '@backstage/p import { TemplateGlobalValue as TemplateGlobalValue_2 } from '@backstage/plugin-scaffolder-common'; import { TemplateParameterSchema as TemplateParameterSchema_2 } from '@backstage/plugin-scaffolder-common'; import { TemplatesType } from '@rjsf/utils'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; import { UIOptionsType } from '@rjsf/utils'; import { UiSchema } from '@rjsf/utils'; import { ValidatorType } from '@rjsf/utils'; @@ -240,6 +241,31 @@ export type ScaffolderOutputLink = ScaffolderOutputLink_2; // @public @deprecated (undocumented) export type ScaffolderOutputText = ScaffolderOutputText_2; +// @public (undocumented) +export const scaffolderReactTranslationRef: TranslationRef< + 'scaffolder-react', + { + readonly 'workflow.noDescription': 'No description'; + readonly 'passwordWidget.content': 'This widget is insecure. Please use [`ui:field: Secret`](https://backstage.io/docs/features/software-templates/writing-templates/#using-secrets) instead of `ui:widget: password`'; + readonly 'scaffolderPageContextMenu.createLabel': 'Create'; + readonly 'scaffolderPageContextMenu.moreLabel': 'more'; + readonly 'scaffolderPageContextMenu.editorLabel': 'Manage Templates'; + readonly 'scaffolderPageContextMenu.actionsLabel': 'Installed Actions'; + readonly 'scaffolderPageContextMenu.tasksLabel': 'Task List'; + readonly 'scaffolderPageContextMenu.templatingExtensionsLabel': 'Templating Extensions'; + readonly 'stepper.backButtonText': 'Back'; + readonly 'stepper.nextButtonText': 'Next'; + readonly 'stepper.createButtonText': 'Create'; + readonly 'stepper.reviewButtonText': 'Review'; + readonly 'stepper.stepIndexLabel': 'Step {{index, number}}'; + readonly 'templateCategoryPicker.title': 'Categories'; + readonly 'templateCard.noDescription': 'No description'; + readonly 'templateCard.chooseButtonText': 'Choose'; + readonly 'cardHeader.detailBtnTitle': 'Show template entity details'; + readonly 'templateOutputs.title': 'Text Output'; + } +>; + // @public export type ScaffolderRJSFField< T = any, diff --git a/plugins/scaffolder-react/src/alpha.ts b/plugins/scaffolder-react/src/alpha.ts index e18c758b3d..ab04bbf3f3 100644 --- a/plugins/scaffolder-react/src/alpha.ts +++ b/plugins/scaffolder-react/src/alpha.ts @@ -16,4 +16,10 @@ export * from './next'; -export { scaffolderReactTranslationRef } from './translation'; +import { scaffolderReactTranslationRef as _scaffolderReactTranslationRef } from './translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-scaffolder-react` instead. + */ +export const scaffolderReactTranslationRef = _scaffolderReactTranslationRef; diff --git a/plugins/scaffolder-react/src/index.ts b/plugins/scaffolder-react/src/index.ts index e73df50fce..bfffa342a1 100644 --- a/plugins/scaffolder-react/src/index.ts +++ b/plugins/scaffolder-react/src/index.ts @@ -22,3 +22,4 @@ export * from './api'; export * from './hooks'; export * from './layouts'; export * from './utils'; +export { scaffolderReactTranslationRef } from './translation'; diff --git a/plugins/scaffolder-react/src/translation.ts b/plugins/scaffolder-react/src/translation.ts index 18da2f58e7..367710f214 100644 --- a/plugins/scaffolder-react/src/translation.ts +++ b/plugins/scaffolder-react/src/translation.ts @@ -15,7 +15,7 @@ */ import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; -/** @alpha */ +/** @public */ export const scaffolderReactTranslationRef = createTranslationRef({ id: 'scaffolder-react', messages: { diff --git a/plugins/scaffolder/report-alpha.api.md b/plugins/scaffolder/report-alpha.api.md index b2cd1bbcbe..e864b310d8 100644 --- a/plugins/scaffolder/report-alpha.api.md +++ b/plugins/scaffolder/report-alpha.api.md @@ -523,7 +523,7 @@ export type ScaffolderTemplateFormPreviewerClassKey = | 'textArea' | 'preview'; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const scaffolderTranslationRef: TranslationRef< 'scaffolder', { diff --git a/plugins/scaffolder/report.api.md b/plugins/scaffolder/report.api.md index 7a34ac1cc2..a57f21f13c 100644 --- a/plugins/scaffolder/report.api.md +++ b/plugins/scaffolder/report.api.md @@ -49,6 +49,7 @@ import { TemplateGroupFilter } from '@backstage/plugin-scaffolder-react'; import { TemplateListPageProps } from '@backstage/plugin-scaffolder/alpha'; import { TemplateParameterSchema as TemplateParameterSchema_2 } from '@backstage/plugin-scaffolder-common'; import { TemplateWizardPageProps } from '@backstage/plugin-scaffolder/alpha'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; import { z } from 'zod/v3'; // @public @deprecated (undocumented) @@ -614,6 +615,192 @@ export type ScaffolderTaskOutput = ScaffolderTaskOutput_3; // @public @deprecated (undocumented) export type ScaffolderTaskStatus = ScaffolderTaskStatus_2; +// @public (undocumented) +export const scaffolderTranslationRef: TranslationRef< + 'scaffolder', + { + readonly 'fields.entityNamePicker.title': 'Name'; + readonly 'fields.entityNamePicker.description': 'Unique name of the component'; + readonly 'fields.entityPicker.title': 'Entity'; + readonly 'fields.entityPicker.description': 'An entity from the catalog'; + readonly 'fields.entityTagsPicker.title': 'Tags'; + readonly 'fields.entityTagsPicker.description': "Add any relevant tags, hit 'Enter' to add new tags. Valid format: [a-z0-9+#] separated by [-], at most 63 characters"; + readonly 'fields.multiEntityPicker.title': 'Entity'; + readonly 'fields.multiEntityPicker.description': 'An entity from the catalog'; + readonly 'fields.myGroupsPicker.title': 'Entity'; + readonly 'fields.myGroupsPicker.description': 'An entity from the catalog'; + readonly 'fields.ownedEntityPicker.title': 'Entity'; + readonly 'fields.ownedEntityPicker.description': 'An entity from the catalog'; + readonly 'fields.ownerPicker.title': 'Owner'; + readonly 'fields.ownerPicker.description': 'The owner of the component'; + readonly 'fields.azureRepoPicker.organization.title': 'Organization'; + readonly 'fields.azureRepoPicker.organization.description': 'The Organization that this repo will belong to'; + readonly 'fields.azureRepoPicker.project.title': 'Project'; + readonly 'fields.azureRepoPicker.project.description': 'The Project that this repo will belong to'; + readonly 'fields.bitbucketRepoPicker.project.title': 'Allowed Projects'; + readonly 'fields.bitbucketRepoPicker.project.description': 'The Project that this repo will belong to'; + readonly 'fields.bitbucketRepoPicker.project.inputTitle': 'Projects'; + readonly 'fields.bitbucketRepoPicker.workspaces.title': 'Allowed Workspaces'; + readonly 'fields.bitbucketRepoPicker.workspaces.description': 'The Workspace that this repo will belong to'; + readonly 'fields.bitbucketRepoPicker.workspaces.inputTitle': 'Workspaces'; + readonly 'fields.gerritRepoPicker.parent.title': 'Parent'; + readonly 'fields.gerritRepoPicker.parent.description': 'The project parent that the repo will belong to'; + readonly 'fields.gerritRepoPicker.owner.title': 'Owner'; + readonly 'fields.gerritRepoPicker.owner.description': 'The owner of the project (optional)'; + readonly 'fields.giteaRepoPicker.owner.title': 'Owner Available'; + readonly 'fields.giteaRepoPicker.owner.description': 'Gitea namespace where this repository will belong to. It can be the name of organization, group, subgroup, user, or the project.'; + readonly 'fields.giteaRepoPicker.owner.inputTitle': 'Owner'; + readonly 'fields.githubRepoPicker.owner.title': 'Owner Available'; + readonly 'fields.githubRepoPicker.owner.description': 'The organization, user or project that this repo will belong to'; + readonly 'fields.githubRepoPicker.owner.inputTitle': 'Owner'; + readonly 'fields.gitlabRepoPicker.owner.title': 'Owner Available'; + readonly 'fields.gitlabRepoPicker.owner.description': 'GitLab namespace where this repository will belong to. It can be the name of organization, group, subgroup, user, or the project.'; + readonly 'fields.gitlabRepoPicker.owner.inputTitle': 'Owner'; + readonly 'fields.repoUrlPicker.host.title': 'Host'; + readonly 'fields.repoUrlPicker.host.description': 'The host where the repository will be created'; + readonly 'fields.repoUrlPicker.repository.title': 'Repositories Available'; + readonly 'fields.repoUrlPicker.repository.description': 'The name of the repository'; + readonly 'fields.repoUrlPicker.repository.inputTitle': 'Repository'; + readonly 'fields.repoOwnerPicker.title': 'Owner'; + readonly 'fields.repoOwnerPicker.description': 'The owner of the repository'; + readonly 'aboutCard.launchTemplate': 'Launch Template'; + readonly 'actionsPage.content.emptyState.title': 'No information to display'; + readonly 'actionsPage.content.emptyState.description': 'There are no actions installed or there was an issue communicating with backend.'; + readonly 'actionsPage.content.searchFieldPlaceholder': 'Search for an action'; + readonly 'actionsPage.title': 'Installed actions'; + readonly 'actionsPage.action.input': 'Input'; + readonly 'actionsPage.action.output': 'Output'; + readonly 'actionsPage.action.examples': 'Examples'; + readonly 'actionsPage.subtitle': 'This is the collection of all installed actions'; + readonly 'actionsPage.pageTitle': 'Create a New Component'; + readonly 'listTaskPage.content.emptyState.title': 'No information to display'; + readonly 'listTaskPage.content.emptyState.description': 'There are no tasks or there was an issue communicating with backend.'; + readonly 'listTaskPage.content.tableCell.template': 'Template'; + readonly 'listTaskPage.content.tableCell.status': 'Status'; + readonly 'listTaskPage.content.tableCell.owner': 'Owner'; + readonly 'listTaskPage.content.tableCell.created': 'Created'; + readonly 'listTaskPage.content.tableCell.taskID': 'Task ID'; + readonly 'listTaskPage.content.tableTitle': 'Tasks'; + readonly 'listTaskPage.title': 'List template tasks'; + readonly 'listTaskPage.subtitle': 'All tasks that have been started'; + readonly 'listTaskPage.pageTitle': 'Templates Tasks'; + readonly 'ownerListPicker.title': 'Task Owner'; + readonly 'ownerListPicker.options.all': 'All'; + readonly 'ownerListPicker.options.owned': 'Owned'; + readonly 'ongoingTask.title': 'Run of'; + readonly 'ongoingTask.contextMenu.cancel': 'Cancel'; + readonly 'ongoingTask.contextMenu.retry': 'Retry'; + readonly 'ongoingTask.contextMenu.startOver': 'Start Over'; + readonly 'ongoingTask.contextMenu.hideLogs': 'Hide Logs'; + readonly 'ongoingTask.contextMenu.showLogs': 'Show Logs'; + readonly 'ongoingTask.contextMenu.hideButtonBar': 'Hide Button Bar'; + readonly 'ongoingTask.contextMenu.showButtonBar': 'Show Button Bar'; + readonly 'ongoingTask.subtitle': 'Task {{taskId}}'; + readonly 'ongoingTask.pageTitle.hasTemplateName': 'Run of {{templateName}}'; + readonly 'ongoingTask.pageTitle.noTemplateName': 'Scaffolder Run'; + readonly 'ongoingTask.cancelButtonTitle': 'Cancel'; + readonly 'ongoingTask.retryButtonTitle': 'Retry'; + readonly 'ongoingTask.startOverButtonTitle': 'Start Over'; + readonly 'ongoingTask.hideLogsButtonTitle': 'Hide Logs'; + readonly 'ongoingTask.showLogsButtonTitle': 'Show Logs'; + readonly 'templateEditorForm.stepper.emptyText': 'There are no spec parameters in the template to preview.'; + readonly 'renderSchema.undefined': 'No schema defined'; + readonly 'renderSchema.tableCell.name': 'Name'; + readonly 'renderSchema.tableCell.type': 'Type'; + readonly 'renderSchema.tableCell.title': 'Title'; + readonly 'renderSchema.tableCell.description': 'Description'; + readonly 'templatingExtensions.content.values.title': 'Values'; + readonly 'templatingExtensions.content.values.notAvailable': 'There are no global template values defined.'; + readonly 'templatingExtensions.content.emptyState.title': 'No information to display'; + readonly 'templatingExtensions.content.emptyState.description': 'There are no templating extensions available or there was an issue communicating with the backend.'; + readonly 'templatingExtensions.content.filters.title': 'Filters'; + readonly 'templatingExtensions.content.filters.schema.input': 'Input'; + readonly 'templatingExtensions.content.filters.schema.output': 'Output'; + readonly 'templatingExtensions.content.filters.schema.arguments': 'Arguments'; + readonly 'templatingExtensions.content.filters.examples': 'Examples'; + readonly 'templatingExtensions.content.filters.notAvailable': 'There are no template filters defined.'; + readonly 'templatingExtensions.content.filters.metadataAbsent': 'Filter metadata unavailable'; + readonly 'templatingExtensions.content.functions.title': 'Functions'; + readonly 'templatingExtensions.content.functions.schema.output': 'Output'; + readonly 'templatingExtensions.content.functions.schema.arguments': 'Arguments'; + readonly 'templatingExtensions.content.functions.examples': 'Examples'; + readonly 'templatingExtensions.content.functions.notAvailable': 'There are no global template functions defined.'; + readonly 'templatingExtensions.content.functions.metadataAbsent': 'Function metadata unavailable'; + readonly 'templatingExtensions.content.searchFieldPlaceholder': 'Search for an extension'; + readonly 'templatingExtensions.title': 'Templating Extensions'; + readonly 'templatingExtensions.subtitle': 'This is the collection of available templating extensions'; + readonly 'templatingExtensions.pageTitle': 'Templating Extensions'; + readonly 'templateTypePicker.title': 'Categories'; + readonly 'templateIntroPage.title': 'Manage Templates'; + readonly 'templateIntroPage.subtitle': 'Edit, preview, and try out templates, forms, and custom fields'; + readonly 'templateFormPage.title': 'Template Editor'; + readonly 'templateFormPage.subtitle': 'Edit, preview, and try out templates forms'; + readonly 'templateCustomFieldPage.title': 'Custom Field Explorer'; + readonly 'templateCustomFieldPage.subtitle': 'Edit, preview, and try out custom fields'; + readonly 'templateEditorPage.title': 'Template Editor'; + readonly 'templateEditorPage.subtitle': 'Edit, preview, and try out templates and template forms'; + readonly 'templateEditorPage.dryRunResults.title': 'Dry-run results'; + readonly 'templateEditorPage.dryRunResultsList.title': 'Result {{resultId}}'; + readonly 'templateEditorPage.dryRunResultsList.deleteButtonTitle': 'Delete result'; + readonly 'templateEditorPage.dryRunResultsList.downloadButtonTitle': 'Download as .zip'; + readonly 'templateEditorPage.dryRunResultsView.tab.output': 'Output'; + readonly 'templateEditorPage.dryRunResultsView.tab.log': 'Log'; + readonly 'templateEditorPage.dryRunResultsView.tab.files': 'Files'; + readonly 'templateEditorPage.taskStatusStepper.skippedStepTitle': 'Skipped'; + readonly 'templateEditorPage.customFieldExplorer.preview.title': 'Template Spec'; + readonly 'templateEditorPage.customFieldExplorer.fieldForm.title': 'Field Options'; + readonly 'templateEditorPage.customFieldExplorer.fieldForm.applyButtonTitle': 'Apply'; + readonly 'templateEditorPage.customFieldExplorer.selectFieldLabel': 'Choose Custom Field Extension'; + readonly 'templateEditorPage.customFieldExplorer.fieldPreview.title': 'Field Preview'; + readonly 'templateEditorPage.templateEditorBrowser.closeConfirmMessage': 'Are you sure? Unsaved changes will be lost'; + readonly 'templateEditorPage.templateEditorBrowser.saveIconTooltip': 'Save all files'; + readonly 'templateEditorPage.templateEditorBrowser.reloadIconTooltip': 'Reload directory'; + readonly 'templateEditorPage.templateEditorBrowser.closeIconTooltip': 'Close directory'; + readonly 'templateEditorPage.templateEditorIntro.title': 'Get started by choosing one of the options below'; + readonly 'templateEditorPage.templateEditorIntro.loadLocal.title': 'Load Template Directory'; + readonly 'templateEditorPage.templateEditorIntro.loadLocal.description': 'Load a local template directory, allowing you to both edit and try executing your own template.'; + readonly 'templateEditorPage.templateEditorIntro.loadLocal.unsupportedTooltip': 'Only supported in some Chromium-based browsers with the page loaded over HTTPS'; + readonly 'templateEditorPage.templateEditorIntro.createLocal.title': 'Create New Template'; + readonly 'templateEditorPage.templateEditorIntro.createLocal.description': 'Create a local template directory, allowing you to both edit and try executing your own template.'; + readonly 'templateEditorPage.templateEditorIntro.createLocal.unsupportedTooltip': 'Only supported in some Chromium-based browsers with the page loaded over HTTPS'; + readonly 'templateEditorPage.templateEditorIntro.formEditor.title': 'Template Form Playground'; + readonly 'templateEditorPage.templateEditorIntro.formEditor.description': 'Preview and edit a template form, either using a sample template or by loading a template from the catalog.'; + readonly 'templateEditorPage.templateEditorIntro.fieldExplorer.title': 'Custom Field Explorer'; + readonly 'templateEditorPage.templateEditorIntro.fieldExplorer.description': 'View and play around with available installed custom field extensions.'; + readonly 'templateEditorPage.templateEditorTextArea.saveIconTooltip': 'Save file'; + readonly 'templateEditorPage.templateEditorTextArea.refreshIconTooltip': 'Reload file'; + readonly 'templateEditorPage.templateEditorTextArea.emptyStateParagraph': 'Please select an action on the file menu.'; + readonly 'templateEditorPage.templateFormPreviewer.title': 'Load Existing Template'; + readonly 'templateListPage.title': 'Create a new component'; + readonly 'templateListPage.subtitle': 'Create new software components using standard templates in your organization'; + readonly 'templateListPage.pageTitle': 'Create a new component'; + readonly 'templateListPage.templateGroups.defaultTitle': 'Templates'; + readonly 'templateListPage.templateGroups.otherTitle': 'Other Templates'; + readonly 'templateListPage.contentHeader.supportButtonTitle': 'Create new software components using standard templates. Different templates create different kinds of components (services, websites, documentation, ...).'; + readonly 'templateListPage.contentHeader.registerExistingButtonTitle': 'Register Existing Component'; + readonly 'templateListPage.additionalLinksForEntity.viewTechDocsTitle': 'View TechDocs'; + readonly 'templateWizardPage.title': 'Create a new component'; + readonly 'templateWizardPage.subtitle': 'Create new software components using standard templates in your organization'; + readonly 'templateWizardPage.pageTitle': 'Create a new component'; + readonly 'templateWizardPage.templateWithTitle': 'Create new {{templateTitle}}'; + readonly 'templateWizardPage.pageContextMenu.editConfigurationTitle': 'Edit Configuration'; + readonly 'templateEditorToolbar.customFieldExplorerTooltip': 'Custom Fields Explorer'; + readonly 'templateEditorToolbar.installedActionsDocumentationTooltip': 'Installed Actions Documentation'; + readonly 'templateEditorToolbar.templatingExtensionsDocumentationTooltip': 'Templating Extensions Documentation'; + readonly 'templateEditorToolbar.addToCatalogButton': 'Publish'; + readonly 'templateEditorToolbar.addToCatalogDialogTitle': 'Publish changes'; + readonly 'templateEditorToolbar.addToCatalogDialogContent.stepsIntroduction': 'Follow the instructions below to create or update a template:'; + readonly 'templateEditorToolbar.addToCatalogDialogContent.stepsListItems': 'Save the template files in a local directory\nCreate a pull request to a new or existing git repository\nIf the template already exists, the changes will be reflected in the software catalog once the pull request gets merged\nBut if you are creating a new template, follow the documentation linked below to register the new template repository in software catalog'; + readonly 'templateEditorToolbar.addToCatalogDialogActions.documentationUrl': 'https://backstage.io/docs/features/software-templates/adding-templates/'; + readonly 'templateEditorToolbar.addToCatalogDialogActions.documentationButton': 'Go to the documentation'; + readonly 'templateEditorToolbarFileMenu.button': 'File'; + readonly 'templateEditorToolbarFileMenu.options.openDirectory': 'Open template directory'; + readonly 'templateEditorToolbarFileMenu.options.createDirectory': 'Create template directory'; + readonly 'templateEditorToolbarFileMenu.options.closeEditor': 'Close template editor'; + readonly 'templateEditorToolbarTemplatesMenu.button': 'Templates'; + } +>; + // @public @deprecated (undocumented) export type ScaffolderUseTemplateSecrets = ScaffolderUseTemplateSecrets_2; diff --git a/plugins/scaffolder/src/alpha/index.ts b/plugins/scaffolder/src/alpha/index.ts index a0b30fd3df..4d3366644c 100644 --- a/plugins/scaffolder/src/alpha/index.ts +++ b/plugins/scaffolder/src/alpha/index.ts @@ -22,7 +22,13 @@ export { type ScaffolderTemplateFormPreviewerClassKey, } from './components'; -export { scaffolderTranslationRef } from '../translation'; +import { scaffolderTranslationRef as _scaffolderTranslationRef } from '../translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-scaffolder` instead. + */ +export const scaffolderTranslationRef = _scaffolderTranslationRef; export * from './api'; export { formFieldsApiRef, diff --git a/plugins/scaffolder/src/index.ts b/plugins/scaffolder/src/index.ts index cc89c656eb..84c9d56ebe 100644 --- a/plugins/scaffolder/src/index.ts +++ b/plugins/scaffolder/src/index.ts @@ -38,3 +38,4 @@ export { export * from './components'; export * from './deprecated'; +export { scaffolderTranslationRef } from './translation'; diff --git a/plugins/scaffolder/src/translation.ts b/plugins/scaffolder/src/translation.ts index 94a3fb590f..d0f332e2fa 100644 --- a/plugins/scaffolder/src/translation.ts +++ b/plugins/scaffolder/src/translation.ts @@ -15,7 +15,7 @@ */ import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; -/** @alpha */ +/** @public */ export const scaffolderTranslationRef = createTranslationRef({ id: 'scaffolder', messages: { diff --git a/plugins/search-react/report-alpha.api.md b/plugins/search-react/report-alpha.api.md index 2f7b32ab16..335a499318 100644 --- a/plugins/search-react/report-alpha.api.md +++ b/plugins/search-react/report-alpha.api.md @@ -96,7 +96,7 @@ export interface SearchFilterResultTypeBlueprintParams { value: string; } -// @alpha (undocumented) +// @public @deprecated (undocumented) export const searchReactTranslationRef: TranslationRef< 'search-react', { diff --git a/plugins/search-react/report.api.md b/plugins/search-react/report.api.md index d4b7592682..21fc5e2e94 100644 --- a/plugins/search-react/report.api.md +++ b/plugins/search-react/report.api.md @@ -28,6 +28,7 @@ import { SearchResult as SearchResult_2 } from '@backstage/plugin-search-common' import { SearchResultSet } from '@backstage/plugin-search-common'; import { SetStateAction } from 'react'; import { TextFieldProps } from '@material-ui/core/TextField'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; import { TypographyProps } from '@material-ui/core/Typography'; // @public (undocumented) @@ -296,6 +297,24 @@ export type SearchPaginationProps = Omit< | 'hasNextPage' >; +// @public (undocumented) +export const searchReactTranslationRef: TranslationRef< + 'search-react', + { + readonly 'searchBar.title': 'Search'; + readonly 'searchBar.placeholder': 'Search in {{org}}'; + readonly 'searchBar.clearButtonTitle': 'Clear'; + readonly 'searchFilter.allOptionTitle': 'All'; + readonly 'searchPagination.limitLabel': 'Results per page:'; + readonly 'searchPagination.limitText': 'of {{num}}'; + readonly noResultsDescription: 'Sorry, no results were found'; + readonly 'searchResultGroup.linkTitle': 'See All'; + readonly 'searchResultGroup.addFilterButtonTitle': 'Add filter'; + readonly 'searchResultPager.next': 'Next'; + readonly 'searchResultPager.previous': 'Previous'; + } +>; + // @public export const SearchResult: (props: SearchResultProps) => JSX_2.Element; diff --git a/plugins/search-react/src/alpha/index.ts b/plugins/search-react/src/alpha/index.ts index 7c44f59d56..390a13cb4c 100644 --- a/plugins/search-react/src/alpha/index.ts +++ b/plugins/search-react/src/alpha/index.ts @@ -14,4 +14,10 @@ * limitations under the License. */ export * from './blueprints'; -export { searchReactTranslationRef } from '../translation'; +import { searchReactTranslationRef as _searchReactTranslationRef } from '../translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-search-react` instead. + */ +export const searchReactTranslationRef = _searchReactTranslationRef; diff --git a/plugins/search-react/src/index.ts b/plugins/search-react/src/index.ts index 8b234e3c05..e376c67185 100644 --- a/plugins/search-react/src/index.ts +++ b/plugins/search-react/src/index.ts @@ -34,3 +34,4 @@ export type { SearchContextState, SearchContextValue, } from './context'; +export { searchReactTranslationRef } from './translation'; diff --git a/plugins/search-react/src/translation.ts b/plugins/search-react/src/translation.ts index e4c394d952..6105f74651 100644 --- a/plugins/search-react/src/translation.ts +++ b/plugins/search-react/src/translation.ts @@ -17,7 +17,7 @@ import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; /** - * @alpha + * @public */ export const searchReactTranslationRef = createTranslationRef({ id: 'search-react', diff --git a/plugins/search/report-alpha.api.md b/plugins/search/report-alpha.api.md index e3f2d6108a..bcfb720c36 100644 --- a/plugins/search/report-alpha.api.md +++ b/plugins/search/report-alpha.api.md @@ -359,7 +359,7 @@ export const searchPage: OverridableExtensionDefinition<{ }; }>; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const searchTranslationRef: TranslationRef< 'search', { diff --git a/plugins/search/report.api.md b/plugins/search/report.api.md index c066d0ff47..73d5a948c3 100644 --- a/plugins/search/report.api.md +++ b/plugins/search/report.api.md @@ -10,6 +10,7 @@ import { ReactNode } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; import { SearchBarBaseProps } from '@backstage/plugin-search-react'; import { SearchResultSet } from '@backstage/plugin-search-common'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; // @public (undocumented) export const HomePageSearchBar: ( @@ -78,6 +79,20 @@ const searchPlugin: BackstagePlugin< export { searchPlugin as plugin }; export { searchPlugin }; +// @public (undocumented) +export const searchTranslationRef: TranslationRef< + 'search', + { + readonly 'searchModal.viewFullResults': 'View Full Results'; + readonly 'searchType.tabs.allTitle': 'All'; + readonly 'searchType.allResults': 'All Results'; + readonly 'searchType.accordion.collapse': 'Collapse'; + readonly 'searchType.accordion.numberOfResults': '{{number}} results'; + readonly 'searchType.accordion.allTitle': 'All'; + readonly 'sidebarSearchModal.title': 'Search'; + } +>; + // @public (undocumented) export const SearchType: { (props: SearchTypeProps): JSX_2.Element; diff --git a/plugins/search/src/alpha.tsx b/plugins/search/src/alpha.tsx index 9625f5e946..c9ba79a52c 100644 --- a/plugins/search/src/alpha.tsx +++ b/plugins/search/src/alpha.tsx @@ -285,5 +285,10 @@ export default createFrontendPlugin({ }, }); -/** @alpha */ -export { searchTranslationRef } from './translation'; +import { searchTranslationRef as _searchTranslationRef } from './translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-search` instead. + */ +export const searchTranslationRef = _searchTranslationRef; diff --git a/plugins/search/src/index.ts b/plugins/search/src/index.ts index 66b032c83c..fc579c55cc 100644 --- a/plugins/search/src/index.ts +++ b/plugins/search/src/index.ts @@ -51,3 +51,4 @@ export { searchPlugin as plugin, searchPlugin, } from './plugin'; +export { searchTranslationRef } from './translation'; diff --git a/plugins/search/src/translation.ts b/plugins/search/src/translation.ts index 37f86b9218..58b5b72c77 100644 --- a/plugins/search/src/translation.ts +++ b/plugins/search/src/translation.ts @@ -17,7 +17,7 @@ import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; /** - * @alpha + * @public */ export const searchTranslationRef = createTranslationRef({ id: 'search', diff --git a/plugins/user-settings/report-alpha.api.md b/plugins/user-settings/report-alpha.api.md index c99709d777..9d6439c1df 100644 --- a/plugins/user-settings/report-alpha.api.md +++ b/plugins/user-settings/report-alpha.api.md @@ -155,7 +155,7 @@ export const settingsNavItem: OverridableExtensionDefinition<{ }; }>; -// @alpha (undocumented) +// @public @deprecated (undocumented) export const userSettingsTranslationRef: TranslationRef< 'user-settings', { diff --git a/plugins/user-settings/report.api.md b/plugins/user-settings/report.api.md index 2994f2c13c..0b2d683e7a 100644 --- a/plugins/user-settings/report.api.md +++ b/plugins/user-settings/report.api.md @@ -26,6 +26,7 @@ import { SignalApi } from '@backstage/plugin-signals-react'; import { StorageApi } from '@backstage/core-plugin-api'; import { StorageValueSnapshot } from '@backstage/core-plugin-api'; import { TabProps } from '@material-ui/core/Tab'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; // @public (undocumented) export const DefaultProviderSettings: (props: { @@ -163,6 +164,63 @@ export type UserSettingsTabProps = PropsWithChildren<{ // @public (undocumented) export const UserSettingsThemeToggle: () => JSX_2.Element; +// @public (undocumented) +export const userSettingsTranslationRef: TranslationRef< + 'user-settings', + { + readonly 'featureFlags.title': 'Feature Flags'; + readonly 'featureFlags.description': 'Please refresh the page when toggling feature flags'; + readonly 'featureFlags.filterTitle': 'Filter'; + readonly 'featureFlags.clearFilter': 'Clear filter'; + readonly 'featureFlags.emptyFlags.title': 'No Feature Flags'; + readonly 'featureFlags.emptyFlags.action.title': 'An example for how to add a feature flag is highlighted below:'; + readonly 'featureFlags.emptyFlags.action.readMoreButtonTitle': 'Read More'; + readonly 'featureFlags.emptyFlags.description': 'Feature Flags make it possible for plugins to register features in Backstage for users to opt into. You can use this to split out logic in your code for manual A/B testing, etc.'; + readonly 'featureFlags.flagItem.title.disable': 'Disable'; + readonly 'featureFlags.flagItem.title.enable': 'Enable'; + readonly 'featureFlags.flagItem.subtitle.registeredInApplication': 'Registered in the application'; + readonly 'featureFlags.flagItem.subtitle.registeredInPlugin': 'Registered in {{pluginId}} plugin'; + readonly 'languageToggle.select': 'Select language {{language}}'; + readonly 'languageToggle.title': 'Language'; + readonly 'languageToggle.description': 'Change the language'; + readonly 'themeToggle.select': 'Select {{theme}}'; + readonly 'themeToggle.title': 'Theme'; + readonly 'themeToggle.description': 'Change the theme mode'; + readonly 'themeToggle.names.auto': 'Auto'; + readonly 'themeToggle.names.dark': 'Dark'; + readonly 'themeToggle.names.light': 'Light'; + readonly 'themeToggle.selectAuto': 'Select Auto Theme'; + readonly 'signOutMenu.title': 'Sign Out'; + readonly 'signOutMenu.moreIconTitle': 'more'; + readonly 'pinToggle.title': 'Pin Sidebar'; + readonly 'pinToggle.description': 'Prevent the sidebar from collapsing'; + readonly 'pinToggle.ariaLabelTitle': 'Pin Sidebar Switch'; + readonly 'pinToggle.switchTitles.unpin': 'Unpin Sidebar'; + readonly 'pinToggle.switchTitles.pin': 'Pin Sidebar'; + readonly 'identityCard.title': 'Backstage Identity'; + readonly 'identityCard.noIdentityTitle': 'No Backstage Identity'; + readonly 'identityCard.userEntity': 'User Entity'; + readonly 'identityCard.ownershipEntities': 'Ownership Entities'; + readonly 'defaultProviderSettings.description': 'Provides authentication towards {{provider}} APIs and identities'; + readonly 'emptyProviders.title': 'No Authentication Providers'; + readonly 'emptyProviders.action.title': 'Open app-config.yaml and make the changes as highlighted below:'; + readonly 'emptyProviders.action.readMoreButtonTitle': 'Read More'; + readonly 'emptyProviders.description': 'You can add Authentication Providers to Backstage which allows you to use these providers to authenticate yourself.'; + readonly 'providerSettingsItem.title.signOut': 'Sign out from {{title}}'; + readonly 'providerSettingsItem.title.signIn': 'Sign in to {{title}}'; + readonly 'providerSettingsItem.buttonTitle.signOut': 'Sign out'; + readonly 'providerSettingsItem.buttonTitle.signIn': 'Sign in'; + readonly 'authProviders.title': 'Available Providers'; + readonly 'defaultSettingsPage.tabsTitle.featureFlags': 'Feature Flags'; + readonly 'defaultSettingsPage.tabsTitle.authProviders': 'Authentication Providers'; + readonly 'defaultSettingsPage.tabsTitle.general': 'General'; + readonly 'settingsLayout.title': 'Settings'; + readonly sidebarTitle: 'Settings'; + readonly 'profileCard.title': 'Profile'; + readonly 'appearanceCard.title': 'Appearance'; + } +>; + // @public (undocumented) export const useUserProfile: () => | { diff --git a/plugins/user-settings/src/alpha.tsx b/plugins/user-settings/src/alpha.tsx index 87b858fcec..c2273285e6 100644 --- a/plugins/user-settings/src/alpha.tsx +++ b/plugins/user-settings/src/alpha.tsx @@ -23,7 +23,13 @@ import { import SettingsIcon from '@material-ui/icons/Settings'; import { settingsRouteRef } from './plugin'; -export * from './translation'; +import { userSettingsTranslationRef as _userSettingsTranslationRef } from './translation'; + +/** + * @public + * @deprecated Import from `@backstage/plugin-user-settings` instead. + */ +export const userSettingsTranslationRef = _userSettingsTranslationRef; const userSettingsPage = PageBlueprint.makeWithOverrides({ inputs: { diff --git a/plugins/user-settings/src/index.ts b/plugins/user-settings/src/index.ts index e64d3c926c..84693ed602 100644 --- a/plugins/user-settings/src/index.ts +++ b/plugins/user-settings/src/index.ts @@ -27,3 +27,4 @@ export { UserSettingsPage, } from './plugin'; export * from './components'; +export { userSettingsTranslationRef } from './translation'; diff --git a/plugins/user-settings/src/translation.ts b/plugins/user-settings/src/translation.ts index 7445a415f2..c57789f1c5 100644 --- a/plugins/user-settings/src/translation.ts +++ b/plugins/user-settings/src/translation.ts @@ -16,7 +16,7 @@ import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; -/** @alpha */ +/** @public */ export const userSettingsTranslationRef = createTranslationRef({ id: 'user-settings', messages: {