Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions e2e-tests/playwright/e2e/localization/locale.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
import frRhdh from "../../../../translations/rhdh_v1.8_s3281-fr-C.json" with { type: "json" };
import frCorePlugins from "../../../../translations/core-plugins_v1.8_s3281-fr-C.json" with { type: "json" };
import frCommunityPlugins from "../../../../translations/community-plugins_v1.8_s3281-fr-C.json" with { type: "json" };
import frRhdhPlugins from "../../../../translations/rhdh-plugins__v1.8_s3281-fr-C.json" with { type: "json" };
import frRhdh from "../../../../translations/rhdh-reference-2025-12-05-fr-C.json" with { type: "json" };
import frCommunityPlugins from "../../../../translations/community-plugins-reference-2025-12-05-fr-C.json" with { type: "json" };
import frRhdhPlugins from "../../../../translations/rhdh-plugins-reference-2025-12-05-fr-C.json" with { type: "json" };
import frMissingTranslations from "../../../../translations/test/missing-fr-translations.json" with { type: "json" };

import en from "../../../../translations/test/all-v1.8_s3281-en.json" with { type: "json" };

const fr = {
...frRhdh,
...frCorePlugins,
...frCommunityPlugins,
...frRhdhPlugins,
...frMissingTranslations,
Expand Down
5 changes: 4 additions & 1 deletion e2e-tests/playwright/utils/accessibility.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ export async function runAccessibilityTests(
testInfo: TestInfo,
attachName = "accessibility-scan-results.violations.json",
) {
const accessibilityScanResults = await new AxeBuilder({ page })
// Type mismatch between Playwright's Page and AxeBuilder's expected type
const accessibilityScanResults = await new AxeBuilder({ page } as unknown as {
page: typeof page;
})
.withTags(["wcag2a", "wcag2aa", "wcag21a", "wcag21aa"])
.disableRules(["color-contrast"])
.analyze();
Expand Down
1 change: 1 addition & 0 deletions packages/app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
"@types/node": "22.19.1",
"@types/react": "18.3.27",
"@types/react-dom": "18.3.7",
"eslint-plugin-unused-imports": "^4.1.4",
"prettier": "3.7.4",
"typescript": "5.9.3"
},
Expand Down
3 changes: 3 additions & 0 deletions packages/app/src/components/catalog/translations/catalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,8 @@ export const catalogTranslations = createTranslationResource({
ref: catalogTranslationRef,
translations: {
en: () => import('./catalog-en'),
fr: () => import('./fr'),
it: () => import('./it'),
ja: () => import('./ja'),
},
});
120 changes: 120 additions & 0 deletions packages/app/src/components/catalog/translations/fr.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
/*
* Copyright Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';
import { catalogTranslationRef } from '@backstage/plugin-catalog/alpha';

export default createTranslationMessages({
ref: catalogTranslationRef,
full: false,
messages: {
'indexPage.createButtonTitle': 'Self-service',
'indexPage.title': 'Catalogue {{orgName}}',
'indexPage.supportButtonContent':
'Toutes les entités de votre catalogue de logiciels',
'aboutCard.title': 'À propos',
'aboutCard.refreshButtonTitle':
"Actualisation de l'entité de planification",
'aboutCard.editButtonTitle': 'Modifier les métadonnées',
'aboutCard.createSimilarButtonTitle': 'Créer quelque chose de similaire',
'aboutCard.refreshScheduledMessage': 'Actualisation programmée',
'aboutCard.launchTemplate': 'Modèle de lancement',
'aboutCard.viewTechdocs': 'Voir TechDocs',
'aboutCard.viewSource': 'Voir la source',
'aboutCard.descriptionField.label': 'Description',
'aboutCard.descriptionField.value': 'Aucune description',
'aboutCard.ownerField.label': 'Propriétaire',
'aboutCard.ownerField.value': 'Pas de propriétaire',
'aboutCard.domainField.label': 'Domaine',
'aboutCard.domainField.value': 'Pas de domaine',
'aboutCard.systemField.label': 'Système',
'aboutCard.systemField.value': 'Pas de système',
'aboutCard.parentComponentField.label': 'Composant parent',
'aboutCard.parentComponentField.value': 'Aucun composant parent',
'aboutCard.typeField.label': 'Taper',
'aboutCard.lifecycleField.label': 'Cycle de vie',
'aboutCard.tagsField.label': 'Mots-clés',
'aboutCard.tagsField.value': 'Aucune balise',
'aboutCard.targetsField.label': 'Cibles',
'searchResultItem.lifecycle': 'Cycle de vie',
'searchResultItem.Owner': 'Propriétaire',
'catalogTable.warningPanelTitle':
'Impossible de récupérer les entités du catalogue.',
'catalogTable.viewActionTitle': 'Voir',
'catalogTable.editActionTitle': 'Modifier',
'catalogTable.starActionTitle': 'Ajouter aux favoris',
'catalogTable.unStarActionTitle': 'Supprimer des favoris',
'dependencyOfComponentsCard.title': 'Dépendance des composants',
'dependencyOfComponentsCard.emptyMessage':
'Aucun composant ne dépend de ce composant',
'dependsOnComponentsCard.title': 'Cela dépend des composants',
'dependsOnComponentsCard.emptyMessage':
"Aucun composant n'est une dépendance de ce composant",
'dependsOnResourcesCard.title': 'Cela dépend des ressources',
'dependsOnResourcesCard.emptyMessage':
"Aucune ressource n'est une dépendance de ce composant",
'entityContextMenu.copiedMessage': 'Copié!',
'entityContextMenu.moreButtonTitle': 'Plus',
'entityContextMenu.inspectMenuTitle': "Inspecter l'entité",
'entityContextMenu.copyURLMenuTitle': "Copier l'URL de l'entité",
'entityContextMenu.unregisterMenuTitle': "Désenregistrer l'entité",
'entityLabelsCard.title': 'Étiquettes',
'entityLabelsCard.emptyDescription':
"Aucune étiquette définie pour cette entité. Vous pouvez ajouter des étiquettes à votre entité YAML comme indiqué dans l'exemple en surbrillance ci-dessous :",
'entityLabelsCard.readMoreButtonTitle': 'En savoir plus',
'entityLabels.warningPanelTitle': 'Entité non trouvée',
'entityLabels.ownerLabel': 'Propriétaire',
'entityLabels.lifecycleLabel': 'Cycle de vie',
'entityLinksCard.title': 'Links',
'entityLinksCard.emptyDescription':
"Aucun lien défini pour cette entité. Vous pouvez ajouter des liens vers votre entité YAML comme indiqué dans l'exemple en surbrillance ci-dessous :",
'entityLinksCard.readMoreButtonTitle': 'En savoir plus',
'entityNotFound.title': "L'entité n'a pas été trouvée",
'entityNotFound.description':
'Vous voulez nous aider à construire cela ? Consultez notre documentation de mise en route.',
'entityNotFound.docButtonTitle': 'DOCUMENTS',
'deleteEntity.dialogTitle':
'Êtes-vous sûr de vouloir supprimer cette entité ?',
'deleteEntity.deleteButtonTitle': 'Supprimer',
'deleteEntity.cancelButtonTitle': 'Annuler',
'deleteEntity.description':
"Cette entité n'est référencée par aucun emplacement et ne reçoit donc pas de mises à jour. Cliquez ici pour supprimer.",
entityProcessingErrorsDescription: "L'erreur ci-dessous provient de",
entityRelationWarningDescription:
"Cette entité a des relations avec d'autres entités, qui ne peuvent pas être trouvées dans le catalogue. Les entités non trouvées sont : ",
'hasComponentsCard.title': 'Contient des composants',
'hasComponentsCard.emptyMessage':
'Aucun composant ne fait partie de ce système',
'hasResourcesCard.title': 'Dispose de ressources',
'hasResourcesCard.emptyMessage':
'Aucune ressource ne fait partie de ce système',
'hasSubcomponentsCard.title': 'A des sous-composants',
'hasSubcomponentsCard.emptyMessage':
'Aucun sous-composant ne fait partie de ce composant',
'hasSubdomainsCard.title': 'A des sous-domaines',
'hasSubdomainsCard.emptyMessage':
'Aucun sous-domaine ne fait partie de ce domaine',
'hasSystemsCard.title': 'A des systèmes',
'hasSystemsCard.emptyMessage': 'Aucun système ne fait partie de ce domaine',
'relatedEntitiesCard.emptyHelpLinkTitle': 'Apprenez à changer cela',
'systemDiagramCard.title': 'Diagramme du système',
'systemDiagramCard.description':
'Utilisez le pincement et le zoom pour vous déplacer dans le diagramme.',
'systemDiagramCard.edgeLabels.partOf': 'une partie de',
'systemDiagramCard.edgeLabels.provides': 'fournit',
'systemDiagramCard.edgeLabels.dependsOn': 'dépend de',
},
});
26 changes: 26 additions & 0 deletions packages/app/src/components/catalog/translations/it.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* Copyright Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';
import { catalogTranslationRef } from '@backstage/plugin-catalog/alpha';

export default createTranslationMessages({
ref: catalogTranslationRef,
full: false,
messages: {
'indexPage.createButtonTitle': 'Self-service',
},
});
26 changes: 26 additions & 0 deletions packages/app/src/components/catalog/translations/ja.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* Copyright Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';
import { catalogTranslationRef } from '@backstage/plugin-catalog/alpha';

export default createTranslationMessages({
ref: catalogTranslationRef,
full: false,
messages: {
'indexPage.createButtonTitle': 'セルフサービス',
},
});
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,8 @@ export const catalogImportTranslations = createTranslationResource({
ref: catalogImportTranslationRef,
translations: {
en: () => import('./catalog-import-en'),
fr: () => import('./fr'),
it: () => import('./it'),
ja: () => import('./ja'),
},
});
130 changes: 130 additions & 0 deletions packages/app/src/translations/catalog-import/fr.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
/*
* Copyright Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';
import { catalogImportTranslationRef } from '@backstage/plugin-catalog-import/alpha';

export default createTranslationMessages({
ref: catalogImportTranslationRef,
full: false,
messages: {
'defaultImportPage.headerTitle': 'Importer un dépôt Git existant',
'importInfoCard.title': 'Importer un dépôt Git existant',
'buttons.back': 'Arrière',
'defaultImportPage.contentHeaderTitle':
'Commencez à suivre votre composant dans {{appTitle}}',
'defaultImportPage.supportTitle':
"Commencez à suivre votre composant dans {{appTitle}} en l'ajoutant au catalogue de logiciels.",
'importInfoCard.deepLinkTitle':
'En savoir plus sur le catalogue de logiciels',
'importInfoCard.linkDescription':
"Saisissez l'URL de votre référentiel de code source pour l'ajouter à {{appTitle}}.",
'importInfoCard.fileLinkTitle': "Lien vers un fichier d'entité existant",
'importInfoCard.examplePrefix': 'Exemple: ',
'importInfoCard.fileLinkDescription':
"L'assistant analyse le fichier, prévisualise les entités et les ajoute au catalogue {{appTitle}}.",
'importInfoCard.githubIntegration.title': 'Lien vers un référentiel',
'importInfoCard.githubIntegration.label': 'GitHub uniquement',
'importInfoCard.exampleDescription':
"L'assistant découvre tous les fichiers {{catalogFilename}} dans le référentiel, prévisualise les entités et les ajoute au catalogue {{appTitle}}.",
'importInfoCard.preparePullRequestDescription':
"Si aucune entité n'est trouvée, l'assistant préparera une Pull Request qui ajoute un exemple de {{catalogFilename}} et prépare le catalogue {{appTitle}} pour charger toutes les entités dès que la Pull Request est fusionnée.",
'importStepper.singleLocation.title': 'Sélectionner des emplacements',
'importStepper.singleLocation.description': 'Lieux découverts : 1',
'importStepper.multipleLocations.title': 'Sélectionner des emplacements',
'importStepper.multipleLocations.description':
'Lieux découverts : {{length, number}}',
'importStepper.noLocation.title': "Créer une demande d'extraction",
'importStepper.noLocation.createPr.detailsTitle':
"Détails de la demande d'extraction",
'importStepper.noLocation.createPr.titleLabel':
"Titre de la demande d'extraction",
'importStepper.noLocation.createPr.titlePlaceholder':
"Ajouter des fichiers descripteurs d'entités de catalogue Backstage",
'importStepper.noLocation.createPr.bodyLabel':
"Corps de la demande d'extraction",
'importStepper.noLocation.createPr.bodyPlaceholder':
'Un texte descriptif avec prise en charge Markdown',
'importStepper.noLocation.createPr.configurationTitle':
"Configuration de l'entité",
'importStepper.noLocation.createPr.componentNameLabel':
'Nom du composant créé',
'importStepper.noLocation.createPr.componentNamePlaceholder':
'mon-composant',
'importStepper.noLocation.createPr.ownerLoadingText':
'Chargement des groupes…',
'importStepper.noLocation.createPr.ownerHelperText':
'Sélectionnez un propriétaire dans la liste ou entrez une référence à un groupe ou à un utilisateur',
'importStepper.noLocation.createPr.ownerErrorHelperText': 'valeur requise',
'importStepper.noLocation.createPr.ownerLabel': "Propriétaire de l'entité",
'importStepper.noLocation.createPr.ownerPlaceholder': 'mon-groupe',
'importStepper.noLocation.createPr.codeownersHelperText':
"AVERTISSEMENT : cette opération peut échouer si aucun fichier CODEOWNERS n'est trouvé à l'emplacement cible.",
'importStepper.analyze.title': "Sélectionnez l'URL",
'importStepper.prepare.title': "Actions d'importation",
'importStepper.prepare.description': 'Facultatif',
'importStepper.review.title': 'Revoir',
'importStepper.finish.title': 'Finition',
'stepFinishImportLocation.backButtonText': 'Enregistrer un autre',
'stepFinishImportLocation.repository.title':
'La Pull Request suivante a été ouverte : ',
'stepFinishImportLocation.repository.description':
'Vos entités seront importées dès que la Pull Request sera fusionnée.',
'stepFinishImportLocation.locations.new':
'Les entités suivantes ont été ajoutées au catalogue :',
'stepFinishImportLocation.locations.existing':
'Une actualisation a été déclenchée pour les emplacements suivants :',
'stepFinishImportLocation.locations.viewButtonText':
'Afficher le composant',
'stepFinishImportLocation.locations.backButtonText': 'Enregistrer un autre',
'stepInitAnalyzeUrl.error.repository':
'Impossible de générer des entités pour votre référentiel',
'stepInitAnalyzeUrl.error.locations':
"Il n'y a aucune entité à cet endroit",
'stepInitAnalyzeUrl.error.default':
"Résultat d'analyse inconnu reçu de type {{type}}. Veuillez contacter l'équipe d'assistance.",
'stepInitAnalyzeUrl.error.url': 'Doit commencer par http:// ou https://.',
'stepInitAnalyzeUrl.urlHelperText':
"Saisissez le chemin complet vers votre fichier d'entité pour commencer à suivre votre composant",
'stepInitAnalyzeUrl.nextButtonText': 'Analyser',
'stepPrepareCreatePullRequest.description':
"Vous avez entré un lien vers un référentiel {{integrationType}} mais aucun {{catalogFilename}} n'a pu être trouvé. Utilisez ce formulaire pour ouvrir une Pull Request qui en crée une.",
'stepPrepareCreatePullRequest.previewPr.title':
"Aperçu de la demande d'extraction",
'stepPrepareCreatePullRequest.previewPr.subheader':
'Créer une nouvelle Pull Request',
'stepPrepareCreatePullRequest.previewCatalogInfo.title':
'Aperçu des entités',
'stepPrepareCreatePullRequest.nextButtonText':
'Créer des relations publiques',
'stepPrepareSelectLocations.locations.description':
'Sélectionnez un ou plusieurs emplacements présents dans votre dépôt git :',
'stepPrepareSelectLocations.locations.selectAll': 'Sélectionner tout',
'stepPrepareSelectLocations.existingLocations.description':
'Ces emplacements existent déjà dans le catalogue :',
'stepPrepareSelectLocations.nextButtonText': 'Revoir',
'stepReviewLocation.prepareResult.title':
'La Pull Request suivante a été ouverte : ',
'stepReviewLocation.prepareResult.description':
"Vous pouvez déjà importer l'emplacement et {{appTitle}} récupérera les entités dès que la Pull Request sera fusionnée.",
'stepReviewLocation.catalog.exists':
'Les emplacements suivants existent déjà dans le catalogue :',
'stepReviewLocation.catalog.new':
'Les entités suivantes seront ajoutées au catalogue :',
'stepReviewLocation.refresh': 'Rafraîchir',
'stepReviewLocation.import': 'Importer',
},
});
27 changes: 27 additions & 0 deletions packages/app/src/translations/catalog-import/it.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';
import { catalogImportTranslationRef } from '@backstage/plugin-catalog-import/alpha';

export default createTranslationMessages({
ref: catalogImportTranslationRef,
full: false,
messages: {
'defaultImportPage.headerTitle': 'Importa un repository Git esistente',
'importInfoCard.title': 'Importa un repository Git esistente',
},
});
Loading
Loading