@@ -113,7 +116,7 @@ export const CatalogTable = (props: CatalogTableProps) => {
const defaultActions: TableProps
['actions'] = [
({ entity }) => {
const url = entity.metadata.annotations?.[ANNOTATION_VIEW_URL];
- const title = 'View';
+ const title = t('catalogTable.viewActionTitle');
return {
icon: () => (
@@ -132,7 +135,7 @@ export const CatalogTable = (props: CatalogTableProps) => {
},
({ entity }) => {
const url = entity.metadata.annotations?.[ANNOTATION_EDIT_URL];
- const title = 'Edit';
+ const title = t('catalogTable.editActionTitle');
return {
icon: () => (
@@ -151,7 +154,9 @@ export const CatalogTable = (props: CatalogTableProps) => {
},
({ entity }) => {
const isStarred = isStarredEntity(entity);
- const title = isStarred ? 'Remove from favorites' : 'Add to favorites';
+ const title = isStarred
+ ? t('catalogTable.unStarActionTitle')
+ : t('catalogTable.starActionTitle');
return {
cellStyle: { paddingLeft: '1em' },
diff --git a/plugins/catalog/src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.tsx b/plugins/catalog/src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.tsx
index d87b558048..617d009d4f 100644
--- a/plugins/catalog/src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.tsx
+++ b/plugins/catalog/src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.tsx
@@ -23,6 +23,8 @@ import {
componentEntityHelpLink,
RelatedEntitiesCard,
} from '../RelatedEntitiesCard';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/** @public */
export interface DependencyOfComponentsCardProps {
@@ -33,7 +35,11 @@ export interface DependencyOfComponentsCardProps {
export function DependencyOfComponentsCard(
props: DependencyOfComponentsCardProps,
) {
- const { variant = 'gridItem', title = 'Dependency of components' } = props;
+ const { t } = useTranslationRef(catalogTranslationRef);
+ const {
+ variant = 'gridItem',
+ title = t('dependencyOfComponentsCard.title'),
+ } = props;
return (
diff --git a/plugins/catalog/src/components/DependsOnComponentsCard/DependsOnComponentsCard.tsx b/plugins/catalog/src/components/DependsOnComponentsCard/DependsOnComponentsCard.tsx
index f4ea850b9b..fe56ea582b 100644
--- a/plugins/catalog/src/components/DependsOnComponentsCard/DependsOnComponentsCard.tsx
+++ b/plugins/catalog/src/components/DependsOnComponentsCard/DependsOnComponentsCard.tsx
@@ -27,6 +27,8 @@ import {
componentEntityHelpLink,
RelatedEntitiesCard,
} from '../RelatedEntitiesCard';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/** @public */
export interface DependsOnComponentsCardProps {
@@ -37,9 +39,10 @@ export interface DependsOnComponentsCardProps {
}
export function DependsOnComponentsCard(props: DependsOnComponentsCardProps) {
+ const { t } = useTranslationRef(catalogTranslationRef);
const {
variant = 'gridItem',
- title = 'Depends on components',
+ title = t('dependsOnComponentsCard.title'),
columns = componentEntityColumns,
tableOptions = {},
} = props;
@@ -50,7 +53,7 @@ export function DependsOnComponentsCard(props: DependsOnComponentsCardProps) {
entityKind="Component"
relationType={RELATION_DEPENDS_ON}
columns={columns}
- emptyMessage="No component is a dependency of this component"
+ emptyMessage={t('dependsOnComponentsCard.emptyMessage')}
emptyHelpLink={componentEntityHelpLink}
asRenderableEntities={asComponentEntities}
tableOptions={tableOptions}
diff --git a/plugins/catalog/src/components/DependsOnResourcesCard/DependsOnResourcesCard.tsx b/plugins/catalog/src/components/DependsOnResourcesCard/DependsOnResourcesCard.tsx
index d99a9df387..281bfd8766 100644
--- a/plugins/catalog/src/components/DependsOnResourcesCard/DependsOnResourcesCard.tsx
+++ b/plugins/catalog/src/components/DependsOnResourcesCard/DependsOnResourcesCard.tsx
@@ -27,6 +27,8 @@ import {
RelatedEntitiesCard,
resourceEntityColumns,
} from '../RelatedEntitiesCard';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/** @public */
export interface DependsOnResourcesCardProps {
@@ -37,9 +39,10 @@ export interface DependsOnResourcesCardProps {
}
export function DependsOnResourcesCard(props: DependsOnResourcesCardProps) {
+ const { t } = useTranslationRef(catalogTranslationRef);
const {
variant = 'gridItem',
- title = 'Depends on resources',
+ title = t('dependsOnResourcesCard.title'),
columns = resourceEntityColumns,
tableOptions = {},
} = props;
@@ -50,7 +53,7 @@ export function DependsOnResourcesCard(props: DependsOnResourcesCardProps) {
entityKind="Resource"
relationType={RELATION_DEPENDS_ON}
columns={columns}
- emptyMessage="No resource is a dependency of this component"
+ emptyMessage={t('dependsOnResourcesCard.emptyMessage')}
emptyHelpLink={componentEntityHelpLink}
asRenderableEntities={asResourceEntities}
tableOptions={tableOptions}
diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx
index a173773e35..5b740038a1 100644
--- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx
+++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx
@@ -33,6 +33,8 @@ import { catalogEntityDeletePermission } from '@backstage/plugin-catalog-common/
import { UnregisterEntity, UnregisterEntityOptions } from './UnregisterEntity';
import { useApi, alertApiRef } from '@backstage/core-plugin-api';
import useCopyToClipboard from 'react-use/esm/useCopyToClipboard';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/** @public */
export type EntityContextMenuClassKey = 'button';
@@ -70,6 +72,7 @@ export function EntityContextMenu(props: EntityContextMenuProps) {
onUnregisterEntity,
onInspectEntity,
} = props;
+ const { t } = useTranslationRef(catalogTranslationRef);
const [anchorEl, setAnchorEl] = useState();
const classes = useStyles();
const unregisterPermission = useEntityPermission(
@@ -90,12 +93,12 @@ export function EntityContextMenu(props: EntityContextMenuProps) {
useEffect(() => {
if (!copyState.error && copyState.value) {
alertApi.post({
- message: 'Copied!',
+ message: t('entityContextMenu.copiedMessage'),
severity: 'info',
display: 'transient',
});
}
- }, [copyState, alertApi]);
+ }, [copyState, alertApi, t]);
const extraItems = UNSTABLE_extraContextMenuItems && [
...UNSTABLE_extraContextMenuItems.map(item => (
@@ -117,7 +120,7 @@ export function EntityContextMenu(props: EntityContextMenuProps) {
return (
<>
-
+
-
+
diff --git a/plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.tsx b/plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.tsx
index 3de890097b..08496d4819 100644
--- a/plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.tsx
+++ b/plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.tsx
@@ -19,6 +19,8 @@ import ListItemIcon from '@material-ui/core/ListItemIcon';
import ListItemText from '@material-ui/core/ListItemText';
import MenuItem from '@material-ui/core/MenuItem';
import CancelIcon from '@material-ui/icons/Cancel';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
type VisibleType = 'visible' | 'hidden' | 'disable';
@@ -40,6 +42,7 @@ export function UnregisterEntity(props: UnregisterEntityProps) {
onUnregisterEntity,
onClose,
} = props;
+ const { t } = useTranslationRef(catalogTranslationRef);
const isBoolean =
typeof unregisterEntityOptions?.disableUnregister === 'boolean';
@@ -65,7 +68,7 @@ export function UnregisterEntity(props: UnregisterEntityProps) {
-
+
);
}
diff --git a/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsCard.tsx b/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsCard.tsx
index 0b1448bb1f..d48b45f054 100644
--- a/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsCard.tsx
+++ b/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsCard.tsx
@@ -25,6 +25,8 @@ import {
import { EntityLabelsEmptyState } from './EntityLabelsEmptyState';
import Typography from '@material-ui/core/Typography';
import { makeStyles } from '@material-ui/core/styles';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/** @public */
export interface EntityLabelsCardProps {
@@ -42,6 +44,7 @@ export const EntityLabelsCard = (props: EntityLabelsCardProps) => {
const { variant, title } = props;
const { entity } = useEntity();
const classes = useStyles();
+ const { t } = useTranslationRef(catalogTranslationRef);
const columns: TableColumn<{ key: string; value: string }>[] = [
{
@@ -61,7 +64,7 @@ export const EntityLabelsCard = (props: EntityLabelsCardProps) => {
const labels = entity?.metadata?.labels;
return (
-
+
{!labels || Object.keys(labels).length === 0 ? (
) : (
diff --git a/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx b/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx
index 5f5db0baa5..16d0a3a897 100644
--- a/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx
+++ b/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx
@@ -19,6 +19,8 @@ import Typography from '@material-ui/core/Typography';
import { makeStyles } from '@material-ui/core/styles';
import React from 'react';
import { CodeSnippet } from '@backstage/core-components';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
const ENTITY_YAML = `metadata:
name: example
@@ -39,12 +41,12 @@ const useStyles = makeStyles(
export function EntityLabelsEmptyState() {
const classes = useStyles();
+ const { t } = useTranslationRef(catalogTranslationRef);
return (
<>
- No labels defined for this entity. You can add labels to your entity
- YAML as shown in the highlighted example below:
+ {t('entityLabelsCard.emptyDescription')}
- Read more
+ {t('entityLabelsCard.readMoreButtonTitle')}
>
);
diff --git a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx
index 274972283f..bbc7792acb 100644
--- a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx
+++ b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx
@@ -53,6 +53,8 @@ import React, { useEffect, useState } from 'react';
import { useLocation, useNavigate } from 'react-router-dom';
import { EntityContextMenu } from '../EntityContextMenu/EntityContextMenu';
import { rootRouteRef, unregisterRedirectRouteRef } from '../../routes';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/** @public */
export type EntityLayoutRouteProps = {
@@ -117,11 +119,12 @@ function headerProps(
function EntityLabels(props: { entity: Entity }) {
const { entity } = props;
const ownedByRelations = getEntityRelations(entity, RELATION_OWNED_BY);
+ const { t } = useTranslationRef(catalogTranslationRef);
return (
<>
{ownedByRelations.length > 0 && (
)}
@@ -234,6 +237,7 @@ export const EntityLayout = (props: EntityLayoutProps) => {
const navigate = useNavigate();
const catalogRoute = useRouteRef(rootRouteRef);
const unregisterRedirectRoute = useRouteRef(unregisterRedirectRouteRef);
+ const { t } = useTranslationRef(catalogTranslationRef);
const cleanUpAfterRemoval = async () => {
setConfirmationDialogOpen(false);
@@ -286,7 +290,7 @@ export const EntityLayout = (props: EntityLayoutProps) => {
{NotFoundComponent ? (
NotFoundComponent
) : (
-
+
There is no {kind} with the requested{' '}
kind, namespace, and name
diff --git a/plugins/catalog/src/components/EntityLinksCard/EntityLinksCard.tsx b/plugins/catalog/src/components/EntityLinksCard/EntityLinksCard.tsx
index ebc551c29f..b5d8269a0b 100644
--- a/plugins/catalog/src/components/EntityLinksCard/EntityLinksCard.tsx
+++ b/plugins/catalog/src/components/EntityLinksCard/EntityLinksCard.tsx
@@ -22,6 +22,8 @@ import { LinksGridList } from './LinksGridList';
import { ColumnBreakpoints } from './types';
import { IconComponent, useApp } from '@backstage/core-plugin-api';
import { InfoCard, InfoCardVariants } from '@backstage/core-components';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
+import { catalogTranslationRef } from '../../translation';
/** @public */
export interface EntityLinksCardProps {
@@ -33,6 +35,7 @@ export const EntityLinksCard = (props: EntityLinksCardProps) => {
const { cols = undefined, variant } = props;
const { entity } = useEntity();
const app = useApp();
+ const { t } = useTranslationRef(catalogTranslationRef);
const iconResolver = (key?: string): IconComponent =>
key ? app.getSystemIcon(key) ?? LanguageIcon : LanguageIcon;
@@ -40,7 +43,7 @@ export const EntityLinksCard = (props: EntityLinksCardProps) => {
const links = entity?.metadata?.links;
return (
-
+
{!links || links.length === 0 ? (
) : (
diff --git a/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx b/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx
index 81009c5393..09362385f9 100644
--- a/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx
+++ b/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx
@@ -19,6 +19,8 @@ import Typography from '@material-ui/core/Typography';
import { makeStyles } from '@material-ui/core/styles';
import React from 'react';
import { CodeSnippet } from '@backstage/core-components';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
+import { catalogTranslationRef } from '../../translation';
const ENTITY_YAML = `metadata:
name: example
@@ -44,12 +46,12 @@ const useStyles = makeStyles(
export function EntityLinksEmptyState() {
const classes = useStyles();
+ const { t } = useTranslationRef(catalogTranslationRef);
return (
<>
- No links defined for this entity. You can add links to your entity YAML
- as shown in the highlighted example below:
+ {t('entityLinksCard.emptyDescription')}
- Read more
+ {t('entityLinksCard.readMoreButtonTitle')}
>
);
diff --git a/plugins/catalog/src/components/EntityNotFound/EntityNotFound.tsx b/plugins/catalog/src/components/EntityNotFound/EntityNotFound.tsx
index 479edf3984..252005dff5 100644
--- a/plugins/catalog/src/components/EntityNotFound/EntityNotFound.tsx
+++ b/plugins/catalog/src/components/EntityNotFound/EntityNotFound.tsx
@@ -20,6 +20,8 @@ import Button from '@material-ui/core/Button';
import Typography from '@material-ui/core/Typography';
import { makeStyles } from '@material-ui/core/styles';
import { Illo } from './Illo';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
const useStyles = makeStyles(theme => ({
container: {
@@ -45,24 +47,24 @@ const useStyles = makeStyles(theme => ({
export function EntityNotFound() {
const classes = useStyles();
+ const { t } = useTranslationRef(catalogTranslationRef);
return (
- Entity was not found
+ {t('entityNotFound.title')}
- Want to help us build this? Check out our Getting Started
- documentation.
+ {t('entityNotFound.description')}
diff --git a/plugins/catalog/src/components/EntityOrphanWarning/DeleteEntityDialog.tsx b/plugins/catalog/src/components/EntityOrphanWarning/DeleteEntityDialog.tsx
index 603f2040d9..c9c24a14a1 100644
--- a/plugins/catalog/src/components/EntityOrphanWarning/DeleteEntityDialog.tsx
+++ b/plugins/catalog/src/components/EntityOrphanWarning/DeleteEntityDialog.tsx
@@ -23,6 +23,8 @@ import DialogTitle from '@material-ui/core/DialogTitle';
import React, { useState } from 'react';
import { alertApiRef, useApi } from '@backstage/core-plugin-api';
import { assertError } from '@backstage/errors';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
interface DeleteEntityDialogProps {
open: boolean;
@@ -36,6 +38,7 @@ export function DeleteEntityDialog(props: DeleteEntityDialogProps) {
const [busy, setBusy] = useState(false);
const catalogApi = useApi(catalogApiRef);
const alertApi = useApi(alertApiRef);
+ const { t } = useTranslationRef(catalogTranslationRef);
const onDelete = async () => {
setBusy(true);
@@ -54,7 +57,7 @@ export function DeleteEntityDialog(props: DeleteEntityDialogProps) {
return (
diff --git a/plugins/catalog/src/components/EntityOrphanWarning/EntityOrphanWarning.tsx b/plugins/catalog/src/components/EntityOrphanWarning/EntityOrphanWarning.tsx
index 8a17559681..10a10e54fd 100644
--- a/plugins/catalog/src/components/EntityOrphanWarning/EntityOrphanWarning.tsx
+++ b/plugins/catalog/src/components/EntityOrphanWarning/EntityOrphanWarning.tsx
@@ -22,6 +22,8 @@ import { useNavigate } from 'react-router-dom';
import { DeleteEntityDialog } from './DeleteEntityDialog';
import { useRouteRef } from '@backstage/core-plugin-api';
import { rootRouteRef } from '../../routes';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/**
* Returns true if the given entity has the orphan annotation given by the
@@ -44,6 +46,7 @@ export function EntityOrphanWarning() {
const catalogLink = useRouteRef(rootRouteRef);
const [confirmationDialogOpen, setConfirmationDialogOpen] = useState(false);
const { entity } = useEntity();
+ const { t } = useTranslationRef(catalogTranslationRef);
const cleanUpAfterRemoval = async () => {
setConfirmationDialogOpen(false);
@@ -53,8 +56,7 @@ export function EntityOrphanWarning() {
return (
<>
setConfirmationDialogOpen(true)}>
- This entity is not referenced by any location and is therefore not
- receiving updates. Click here to delete.
+ {t('deleteEntity.description')}
i.error &&
@@ -95,6 +97,7 @@ export function EntityProcessingErrorsPanel() {
const { loading, error, value } = useAsync(async () => {
return getOwnAndAncestorsErrors(entityRef, catalogApi);
}, [entityRef, catalogApi]);
+ const { t } = useTranslationRef(catalogTranslationRef);
if (error) {
return (
@@ -115,7 +118,7 @@ export function EntityProcessingErrorsPanel() {
{stringifyEntityRef(entity) !==
stringifyEntityRef(ancestorError.entity) && (
- The error below originates from{' '}
+ {t('entityProcessingErrorsDescription')}{' '}
)}
diff --git a/plugins/catalog/src/components/EntityRelationWarning/EntityRelationWarning.tsx b/plugins/catalog/src/components/EntityRelationWarning/EntityRelationWarning.tsx
index 13542a32b4..2ce9120bf0 100644
--- a/plugins/catalog/src/components/EntityRelationWarning/EntityRelationWarning.tsx
+++ b/plugins/catalog/src/components/EntityRelationWarning/EntityRelationWarning.tsx
@@ -26,6 +26,8 @@ import useAsync from 'react-use/esm/useAsync';
import Box from '@material-ui/core/Box';
import { ResponseErrorPanel } from '@backstage/core-components';
import { useApi, ApiHolder } from '@backstage/core-plugin-api';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
async function getRelationWarnings(entity: Entity, catalogApi: CatalogApi) {
const entityRefRelations = entity.relations?.map(
@@ -80,6 +82,7 @@ export function EntityRelationWarning() {
const { loading, error, value } = useAsync(async () => {
return getRelationWarnings(entity, catalogApi);
}, [entity, catalogApi]);
+ const { t } = useTranslationRef(catalogTranslationRef);
if (error) {
return (
@@ -95,10 +98,8 @@ export function EntityRelationWarning() {
return (
<>
-
- This entity has relations to other entities, which can't be found in the
- catalog.
- Entities not found are: {value.join(', ')}
+
+ {t('entityRelationWarningDescription')} {value.join(', ')}
>
);
diff --git a/plugins/catalog/src/components/HasComponentsCard/HasComponentsCard.tsx b/plugins/catalog/src/components/HasComponentsCard/HasComponentsCard.tsx
index 9071dac030..917543dd12 100644
--- a/plugins/catalog/src/components/HasComponentsCard/HasComponentsCard.tsx
+++ b/plugins/catalog/src/components/HasComponentsCard/HasComponentsCard.tsx
@@ -23,6 +23,8 @@ import {
componentEntityHelpLink,
RelatedEntitiesCard,
} from '../RelatedEntitiesCard';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/** @public */
export interface HasComponentsCardProps {
@@ -31,7 +33,8 @@ export interface HasComponentsCardProps {
}
export function HasComponentsCard(props: HasComponentsCardProps) {
- const { variant = 'gridItem', title = 'Has components' } = props;
+ const { t } = useTranslationRef(catalogTranslationRef);
+ const { variant = 'gridItem', title = t('hasComponentsCard.title') } = props;
return (
diff --git a/plugins/catalog/src/components/HasResourcesCard/HasResourcesCard.tsx b/plugins/catalog/src/components/HasResourcesCard/HasResourcesCard.tsx
index 5af7eec258..d11f10c882 100644
--- a/plugins/catalog/src/components/HasResourcesCard/HasResourcesCard.tsx
+++ b/plugins/catalog/src/components/HasResourcesCard/HasResourcesCard.tsx
@@ -23,6 +23,8 @@ import {
resourceEntityColumns,
resourceEntityHelpLink,
} from '../RelatedEntitiesCard';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/** @public */
export interface HasResourcesCardProps {
@@ -31,7 +33,8 @@ export interface HasResourcesCardProps {
}
export function HasResourcesCard(props: HasResourcesCardProps) {
- const { variant = 'gridItem', title = 'Has resources' } = props;
+ const { t } = useTranslationRef(catalogTranslationRef);
+ const { variant = 'gridItem', title = t('hasResourcesCard.title') } = props;
return (
);
diff --git a/plugins/catalog/src/components/HasSubcomponentsCard/HasSubcomponentsCard.tsx b/plugins/catalog/src/components/HasSubcomponentsCard/HasSubcomponentsCard.tsx
index ac40c82435..d81349794a 100644
--- a/plugins/catalog/src/components/HasSubcomponentsCard/HasSubcomponentsCard.tsx
+++ b/plugins/catalog/src/components/HasSubcomponentsCard/HasSubcomponentsCard.tsx
@@ -22,6 +22,8 @@ import {
componentEntityColumns,
RelatedEntitiesCard,
} from '../RelatedEntitiesCard';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/** @public */
export interface HasSubcomponentsCardProps {
@@ -31,10 +33,11 @@ export interface HasSubcomponentsCardProps {
}
export function HasSubcomponentsCard(props: HasSubcomponentsCardProps) {
+ const { t } = useTranslationRef(catalogTranslationRef);
const {
variant = 'gridItem',
tableOptions = {},
- title = 'Has subcomponents',
+ title = t('hasSubcomponentsCard.title'),
} = props;
return (
diff --git a/plugins/catalog/src/components/HasSystemsCard/HasSystemsCard.tsx b/plugins/catalog/src/components/HasSystemsCard/HasSystemsCard.tsx
index d6da465ffa..cee45a95c5 100644
--- a/plugins/catalog/src/components/HasSystemsCard/HasSystemsCard.tsx
+++ b/plugins/catalog/src/components/HasSystemsCard/HasSystemsCard.tsx
@@ -23,6 +23,8 @@ import {
systemEntityColumns,
systemEntityHelpLink,
} from '../RelatedEntitiesCard';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/** @public */
export interface HasSystemsCardProps {
@@ -31,7 +33,8 @@ export interface HasSystemsCardProps {
}
export function HasSystemsCard(props: HasSystemsCardProps) {
- const { variant = 'gridItem', title = 'Has systems' } = props;
+ const { t } = useTranslationRef(catalogTranslationRef);
+ const { variant = 'gridItem', title = t('hasSystemsCard.title') } = props;
return (
);
diff --git a/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx b/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx
index eb37973c27..dd1359482d 100644
--- a/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx
+++ b/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx
@@ -31,6 +31,8 @@ import {
TableColumn,
TableOptions,
} from '@backstage/core-components';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/** @public */
export type RelatedEntitiesCardProps = {
@@ -72,6 +74,7 @@ export function RelatedEntitiesCard(
tableOptions = {},
} = props;
+ const { t } = useTranslationRef(catalogTranslationRef);
const { entity } = useEntity();
const { entities, loading, error } = useRelatedEntities(entity, {
type: relationType,
@@ -102,7 +105,9 @@ export function RelatedEntitiesCard(
{emptyMessage}
- Learn how to change this.
+
+ {t('relatedEntitiesCard.emptyHelpLinkTitle')}
+
}
diff --git a/plugins/catalog/src/components/SystemDiagramCard/SystemDiagramCard.tsx b/plugins/catalog/src/components/SystemDiagramCard/SystemDiagramCard.tsx
index 22466b1464..5e485d672b 100644
--- a/plugins/catalog/src/components/SystemDiagramCard/SystemDiagramCard.tsx
+++ b/plugins/catalog/src/components/SystemDiagramCard/SystemDiagramCard.tsx
@@ -46,6 +46,8 @@ import {
} from '@backstage/core-components';
import { useApi, useRouteRef } from '@backstage/core-plugin-api';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/** @public */
export type SystemDiagramCardClassKey =
@@ -164,6 +166,7 @@ function RenderNode(props: DependencyGraphTypes.RenderNodeProps) {
export function SystemDiagramCard() {
const { entity } = useEntity();
const theme = useTheme();
+ const { t } = useTranslationRef(catalogTranslationRef);
const currentSystemName = entity.metadata.name;
const currentSystemNode = stringifyEntityRef(entity);
const systemNodes = new Array<{ id: string; kind: string; name: string }>();
@@ -211,7 +214,7 @@ export function SystemDiagramCard() {
systemEdges.push({
from: currentSystemNode,
to: stringifyEntityRef(foundDomain),
- label: 'part of',
+ label: t('systemDiagramCard.edgeLabels.partOf'),
}),
);
@@ -235,7 +238,7 @@ export function SystemDiagramCard() {
systemEdges.push({
from: stringifyEntityRef(catalogItem),
to: stringifyEntityRef(foundRelation),
- label: 'part of',
+ label: t('systemDiagramCard.edgeLabels.partOf'),
}),
);
@@ -247,7 +250,7 @@ export function SystemDiagramCard() {
systemEdges.push({
from: stringifyEntityRef(catalogItem),
to: stringifyEntityRef(foundRelation),
- label: 'provides',
+ label: t('systemDiagramCard.edgeLabels.provides'),
}),
);
@@ -259,7 +262,7 @@ export function SystemDiagramCard() {
systemEdges.push({
from: stringifyEntityRef(catalogItem),
to: stringifyEntityRef(foundRelation),
- label: 'depends on',
+ label: t('systemDiagramCard.edgeLabels.dependsOn'),
}),
);
}
@@ -272,7 +275,7 @@ export function SystemDiagramCard() {
}
return (
-
+
- Use pinch & zoom
- to move around the diagram.
+
+ {t('systemDiagramCard.description')}
);
diff --git a/plugins/catalog/src/translation.ts b/plugins/catalog/src/translation.ts
index bd27069fde..2699b58542 100644
--- a/plugins/catalog/src/translation.ts
+++ b/plugins/catalog/src/translation.ts
@@ -23,6 +23,141 @@ export const catalogTranslationRef = createTranslationRef({
indexPage: {
title: `{{orgName}} Catalog`,
createButtonTitle: 'Create',
+ supportButtonContent: 'All your software catalog entities',
+ },
+ aboutCard: {
+ title: 'About',
+ refreshButtonTitle: 'Schedule entity refresh',
+ editButtonTitle: 'Edit Metadata',
+ createSimilarButtonTitle: 'Create something similar',
+ refreshScheduledMessage: 'Refresh scheduled',
+ launchTemplate: 'Launch Template',
+ viewTechdocs: 'View TechDocs',
+ viewSource: 'View Source',
+ descriptionField: {
+ label: 'Description',
+ value: 'No description',
+ },
+ ownerField: {
+ label: 'Owner',
+ value: 'No Owner',
+ },
+ domainField: {
+ label: 'Domain',
+ value: 'No Domain',
+ },
+ systemField: {
+ label: 'System',
+ value: 'No System',
+ },
+ parentComponentField: {
+ label: 'Parent Component',
+ value: 'No Parent Component',
+ },
+ typeField: {
+ label: 'Type',
+ },
+ lifecycleField: {
+ label: 'Lifecycle',
+ },
+ tagsField: {
+ label: 'Tags',
+ value: 'No Tags',
+ },
+ targetsField: {
+ label: 'Targets',
+ },
+ },
+ searchResultItem: {
+ lifecycle: 'Lifecycle',
+ Owner: 'Owner',
+ },
+ catalogTable: {
+ warningPanelTitle: 'Could not fetch catalog entities.',
+ viewActionTitle: 'View',
+ editActionTitle: 'Edit',
+ starActionTitle: 'Add to favorites',
+ unStarActionTitle: 'Remove from favorites',
+ },
+ dependencyOfComponentsCard: {
+ title: 'Dependency of components',
+ emptyMessage: 'No component depends on this component',
+ },
+ dependsOnComponentsCard: {
+ title: 'Depends on components',
+ emptyMessage: 'No component is a dependency of this component',
+ },
+ dependsOnResourcesCard: {
+ title: 'Depends on resources',
+ emptyMessage: 'No resource is a dependency of this component',
+ },
+ entityContextMenu: {
+ copiedMessage: 'Copied!',
+ moreButtonTitle: 'More',
+ inspectMenuTitle: 'Inspect entity',
+ copyURLMenuTitle: 'Copy entity URL',
+ unregisterMenuTitle: 'Unregister entity',
+ },
+ entityLabelsCard: {
+ title: 'Labels',
+ emptyDescription:
+ 'No labels defined for this entity. You can add labels to your entity YAML as shown in the highlighted example below:',
+ readMoreButtonTitle: 'Read more',
+ },
+ entityLabels: {
+ warningPanelTitle: 'Entity not found',
+ ownerLabel: 'Owner',
+ lifecycleLabel: 'Lifecycle',
+ },
+ entityLinksCard: {
+ title: 'Links',
+ emptyDescription:
+ 'No links defined for this entity. You can add links to your entity YAML as shown in the highlighted example below:',
+ readMoreButtonTitle: 'Read more',
+ },
+ entityNotFound: {
+ title: 'Entity was not found',
+ description:
+ 'Want to help us build this? Check out our Getting Started documentation.',
+ docButtonTitle: 'DOCS',
+ },
+ deleteEntity: {
+ dialogTitle: 'Are you sure you want to delete this entity?',
+ deleteButtonTitle: 'Delete',
+ cancelButtonTitle: 'Cancel',
+ description:
+ 'This entity is not referenced by any location and is therefore not receiving updates. Click here to delete.',
+ },
+ entityProcessingErrorsDescription: 'The error below originates from',
+ entityRelationWarningDescription:
+ "This entity has relations to other entities, which can't be found in the catalog.\n Entities not found are: ",
+ hasComponentsCard: {
+ title: 'Has components',
+ emptyMessage: 'No component is part of this system',
+ },
+ hasResourcesCard: {
+ title: 'Has resources',
+ emptyMessage: 'No resource is part of this system',
+ },
+ hasSubcomponentsCard: {
+ title: 'Has subcomponents',
+ emptyMessage: 'No subcomponent is part of this component',
+ },
+ hasSystemsCard: {
+ title: 'Has systems',
+ emptyMessage: 'No system is part of this domain',
+ },
+ relatedEntitiesCard: {
+ emptyHelpLinkTitle: 'Learn how to change this.',
+ },
+ systemDiagramCard: {
+ title: 'System Diagram',
+ description: 'Use pinch & zoo to move around the diagram.',
+ edgeLabels: {
+ partOf: 'part of',
+ provides: 'provides',
+ dependsOn: 'depends on',
+ },
},
},
});