diff --git a/workspaces/adoption-insights/.changeset/petite-hairs-greet.md b/workspaces/adoption-insights/.changeset/petite-hairs-greet.md new file mode 100644 index 0000000000..1f8aa3060f --- /dev/null +++ b/workspaces/adoption-insights/.changeset/petite-hairs-greet.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-adoption-insights': patch +--- + +Added 'it' and 'ja' i18n support and updated 'fr' translation strings. diff --git a/workspaces/adoption-insights/plugins/adoption-insights/src/translations/fr.ts b/workspaces/adoption-insights/plugins/adoption-insights/src/translations/fr.ts index 4d5a90e530..ea44066ee4 100644 --- a/workspaces/adoption-insights/plugins/adoption-insights/src/translations/fr.ts +++ b/workspaces/adoption-insights/plugins/adoption-insights/src/translations/fr.ts @@ -18,89 +18,89 @@ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { adoptionInsightsTranslationRef } from './ref'; /** - * French translation for Adoption Insights. + * fr translation for plugin.adoption-insights. * @public */ const adoptionInsightsTranslationFr = createTranslationMessages({ ref: adoptionInsightsTranslationRef, messages: { + 'page.title': 'Adoption Insights', + 'header.title': 'Adoption Insights', + 'header.dateRange.today': "Aujourd'hui", + 'header.dateRange.lastWeek': 'La semaine dernière', + 'header.dateRange.lastMonth': 'Mois dernier', + 'header.dateRange.last28Days': 'Les 28 derniers jours', + 'header.dateRange.lastYear': "L'année dernière", + 'header.dateRange.dateRange': 'Plage de dates...', + 'header.dateRange.cancel': 'Annuler', + 'header.dateRange.ok': 'OK', + 'header.dateRange.defaultLabel': 'Les 28 derniers jours', + 'header.dateRange.title': 'Intervalle de temps', + 'header.dateRange.startDate': 'Date de départ', + 'header.dateRange.endDate': 'Date de fin', + 'activeUsers.title': 'Utilisateurs actifs', 'activeUsers.averagePrefix': "Le nombre moyen maximal d'utilisateurs actifs était de", - 'activeUsers.averageSuffix': ' pour cette période.', 'activeUsers.averageText': '{{count}} par {{period}}', - 'activeUsers.day': 'jour', + 'activeUsers.averageSuffix': ' pour cette période.', 'activeUsers.hour': 'heure', + 'activeUsers.day': 'jour', + 'activeUsers.week': 'semaine', + 'activeUsers.month': 'mois', 'activeUsers.legend.newUsers': 'Nouveaux utilisateurs', 'activeUsers.legend.returningUsers': 'Utilisateurs récurrents', - 'activeUsers.month': 'mois', - 'activeUsers.title': 'Utilisateurs actifs', - 'activeUsers.week': 'semaine', - 'catalogEntities.allTitle': 'Toutes les entités du catalogue', + 'templates.title': 'Meilleurs modèles', + 'templates.topNTitle': 'Meilleurs {{count}} modèles', + 'templates.allTitle': 'Tous les modèles', 'catalogEntities.title': 'Principales entités du catalogue', 'catalogEntities.topNTitle': 'Top {{count}} entités du catalogue', - 'common.csvFilename': 'utilisateurs_actifs', - 'common.downloading': 'Téléchargement...', - 'common.exportCSV': 'Exporter au format CSV', - 'common.filteredBy': 'filtré par', - 'common.invalidDateFormat': 'Format de date invalide', - 'common.noResults': 'Aucun résultat pour cette plage de dates.', - 'common.numberOfSearches': 'Nombre de recherches', - 'common.readMore': 'En savoir plus', - 'common.today': "Aujourd'hui", - 'common.yesterday': 'Hier', - 'filter.all': 'Tous', - 'filter.selectKind': 'Sélectionnez le type', - 'header.dateRange.cancel': 'Annuler', - 'header.dateRange.dateRange': 'Plage de dates...', - 'header.dateRange.defaultLabel': 'Les 28 derniers jours', - 'header.dateRange.endDate': 'Date de fin', - 'header.dateRange.last28Days': 'Les 28 derniers jours', - 'header.dateRange.lastMonth': 'Mois dernier', - 'header.dateRange.lastWeek': 'La semaine dernière', - 'header.dateRange.startDate': 'Date de début', - 'header.dateRange.lastYear': "L'année dernière", - 'header.dateRange.ok': 'OK', - 'header.dateRange.title': 'Plage de dates', - 'header.dateRange.today': "Aujourd'hui", - 'header.title': 'Adoption Insights', - 'page.title': 'Adoption Insights', - 'permission.description': - 'Pour afficher le plugin « Adoption Insights », contactez votre administrateur pour accorder les autorisations adoption-insights.events.read.', - 'permission.title': 'Autorisations manquantes', - 'plugins.allTitle': 'Tous les plugins', + 'catalogEntities.allTitle': 'Toutes les entités du catalogue', 'plugins.title': 'Meilleurs plugins', 'plugins.topNTitle': 'Meilleurs {{count}} plugins', + 'plugins.allTitle': 'Tous les plugins', + 'techDocs.title': 'Top TechDocs', + 'techDocs.topNTitle': 'Meilleurs {{count}} TechDocs', + 'techDocs.allTitle': 'Tous les TechDocs', + 'searches.title': 'Recherches les plus fréquentes', + 'searches.totalCount': '{{count}} recherches', 'searches.averagePrefix': 'Le nombre moyen de recherches était de', - 'searches.averageSuffix': ' pour cette période.', 'searches.averageText': '{{count}} par {{period}}', - 'searches.day': 'jour', + 'searches.averageSuffix': ' pour cette période.', 'searches.hour': 'heure', - 'searches.month': 'mois', - 'searches.title': 'Recherches les plus fréquentes', - 'searches.totalCount': '{{count}} recherches', + 'searches.day': 'jour', 'searches.week': 'semaine', - 'table.headers.entity': 'Entité', - 'table.headers.executions': 'Exécutions', - 'table.headers.kind': 'Gentil', - 'table.headers.lastUsed': 'Dernière utilisation', - 'table.headers.name': 'Nom', - 'table.headers.trend': "S'orienter", - 'table.headers.views': 'Vues', - 'table.pagination.topN': 'Meilleurs {{count}}', - 'techDocs.allTitle': 'Tous les TechDocs', - 'techDocs.title': 'Top TechDocs', - 'techDocs.topNTitle': 'Meilleurs {{count}} TechDocs', - 'templates.allTitle': 'Tous les modèles', - 'templates.title': 'Meilleurs modèles', - 'templates.topNTitle': 'Meilleurs {{count}} modèles', + 'searches.month': 'mois', + 'users.title': "Nombre total d'utilisateurs", 'users.haveLoggedIn': 'se sont connectés', + 'users.loggedInUsers': 'Utilisateurs connectés', 'users.licensed': 'Autorisé', 'users.licensedNotLoggedIn': 'Sous licence (non connecté)', - 'users.loggedInUsers': 'Utilisateurs connectés', 'users.ofTotal': 'de {{total}}', - 'users.title': "Nombre total d'utilisateurs", 'users.tooltip': "Définissez le nombre d'utilisateurs sous licence dans le fichier app-config.yaml", + 'table.headers.name': 'Nom', + 'table.headers.kind': 'Type', + 'table.headers.lastUsed': 'Dernière utilisation', + 'table.headers.views': 'Vues', + 'table.headers.executions': 'Exécutions', + 'table.headers.trend': "S'orienter", + 'table.headers.entity': 'Entité', + 'table.pagination.topN': 'Top {{count}}', + 'filter.all': 'Tous', + 'filter.selectKind': 'Sélectionnez le type', + 'common.noResults': 'Aucun résultat pour cette plage de dates.', + 'common.readMore': 'En savoir plus', + 'common.exportCSV': 'Exporter au format CSV', + 'common.downloading': 'Téléchargement...', + 'common.today': "Aujourd'hui", + 'common.yesterday': 'Hier', + 'common.numberOfSearches': 'Nombre de recherches', + 'common.filteredBy': 'filtré par', + 'common.invalidDateFormat': 'Format de date invalide', + 'common.csvFilename': 'utilisateurs_actifs', + 'permission.title': 'Autorisations manquantes', + 'permission.description': + 'Pour afficher le plugin « Adoption Insights », contactez votre administrateur pour accorder les autorisations adoption-insights.events.read.', }, }); diff --git a/workspaces/adoption-insights/plugins/adoption-insights/src/translations/it.ts b/workspaces/adoption-insights/plugins/adoption-insights/src/translations/it.ts index ac851bb06c..f5ab2003f4 100644 --- a/workspaces/adoption-insights/plugins/adoption-insights/src/translations/it.ts +++ b/workspaces/adoption-insights/plugins/adoption-insights/src/translations/it.ts @@ -18,7 +18,7 @@ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { adoptionInsightsTranslationRef } from './ref'; /** - * Italian translation for Adoption Insights. + * Italian translation for plugin.adoption-insights. * @public */ const adoptionInsightsTranslationIt = createTranslationMessages({ @@ -27,20 +27,20 @@ const adoptionInsightsTranslationIt = createTranslationMessages({ 'page.title': 'Adoption Insights', 'header.title': 'Adoption Insights', 'header.dateRange.today': 'Oggi', - 'header.dateRange.lastWeek': 'Settimana scorsa', - 'header.dateRange.lastMonth': 'Mese scorso', + 'header.dateRange.lastWeek': 'La settimana scorsa', + 'header.dateRange.lastMonth': 'Il mese scorso', 'header.dateRange.last28Days': 'Ultimi 28 giorni', - 'header.dateRange.lastYear': 'Anno scorso', + 'header.dateRange.lastYear': "L'anno scorso", 'header.dateRange.dateRange': 'Intervallo di date...', - 'header.dateRange.cancel': 'Annulla', + 'header.dateRange.cancel': 'Cancella', 'header.dateRange.ok': 'OK', 'header.dateRange.defaultLabel': 'Ultimi 28 giorni', 'header.dateRange.title': 'Intervallo di date', 'header.dateRange.startDate': 'Data di inizio', 'header.dateRange.endDate': 'Data di fine', - 'activeUsers.title': 'Utenti Attivi', + 'activeUsers.title': 'Utenti attivi', 'activeUsers.averagePrefix': - 'Il numero medio di utenti attivi di picco era', + 'Il conteggio del picco medio di utenti attivi era', 'activeUsers.averageText': '{{count}} per {{period}}', 'activeUsers.averageSuffix': ' per questo periodo.', 'activeUsers.hour': 'ora', @@ -49,21 +49,22 @@ const adoptionInsightsTranslationIt = createTranslationMessages({ 'activeUsers.month': 'mese', 'activeUsers.legend.newUsers': 'Nuovi utenti', 'activeUsers.legend.returningUsers': 'Utenti di ritorno', - 'templates.title': 'Top template', - 'templates.topNTitle': 'Top {{count}} template', - 'templates.allTitle': 'Tutti i template', - 'catalogEntities.title': 'Top entità del catalogo', - 'catalogEntities.topNTitle': 'Top {{count}} entità del catalogo', + 'templates.title': 'Modelli più popolari', + 'templates.topNTitle': 'I {{count}} modelli più popolari', + 'templates.allTitle': 'Tutti i modelli', + 'catalogEntities.title': 'Entità del catalogo più popolari', + 'catalogEntities.topNTitle': + 'Le {{count}} entità del catalogo più popolari', 'catalogEntities.allTitle': 'Tutte le entità del catalogo', - 'plugins.title': 'Top plugin', - 'plugins.topNTitle': 'Top {{count}} plugin', + 'plugins.title': 'I plugin più popolari', + 'plugins.topNTitle': 'I {{count}} plugin più popolari', 'plugins.allTitle': 'Tutti i plugin', - 'techDocs.title': 'Top TechDocs', - 'techDocs.topNTitle': 'Top {{count}} TechDocs', + 'techDocs.title': 'TechDocs più popolari', + 'techDocs.topNTitle': 'I {{count}} TechDocs più popolari', 'techDocs.allTitle': 'Tutti i TechDocs', - 'searches.title': 'Top ricerche', + 'searches.title': 'Ricerche più popolari', 'searches.totalCount': '{{count}} ricerche', - 'searches.averagePrefix': 'Il numero medio di ricerche era', + 'searches.averagePrefix': 'Il conteggio medio delle ricerche era', 'searches.averageText': '{{count}} per {{period}}', 'searches.averageSuffix': ' per questo periodo.', 'searches.hour': 'ora', @@ -71,13 +72,13 @@ const adoptionInsightsTranslationIt = createTranslationMessages({ 'searches.week': 'settimana', 'searches.month': 'mese', 'users.title': 'Numero totale di utenti', - 'users.haveLoggedIn': 'hanno effettuato il login', - 'users.loggedInUsers': 'Utenti connessi', + 'users.haveLoggedIn': 'registrati', + 'users.loggedInUsers': 'Utenti registrati', 'users.licensed': 'Con licenza', - 'users.licensedNotLoggedIn': 'Con licenza (non connessi)', - 'users.ofTotal': 'su {{total}}', + 'users.licensedNotLoggedIn': 'Con licenza (non registrato)', + 'users.ofTotal': 'di {{totale}}', 'users.tooltip': - 'Imposta il numero di utenti con licenza nel file app-config.yaml', + 'Imposta il numero di utenti con licenza in app-config.yaml', 'table.headers.name': 'Nome', 'table.headers.kind': 'Tipo', 'table.headers.lastUsed': 'Ultimo utilizzo', @@ -85,22 +86,22 @@ const adoptionInsightsTranslationIt = createTranslationMessages({ 'table.headers.executions': 'Esecuzioni', 'table.headers.trend': 'Tendenza', 'table.headers.entity': 'Entità', - 'table.pagination.topN': 'Top {{count}}', - 'filter.all': 'Tutti', - 'filter.selectKind': 'Seleziona tipo', + 'table.pagination.topN': '{{count}} più popolare', + 'filter.all': 'Tutto', + 'filter.selectKind': 'Selezionare il tipo', 'common.noResults': 'Nessun risultato per questo intervallo di date.', - 'common.readMore': 'Leggi di più', + 'common.readMore': 'Per saperne di più', 'common.exportCSV': 'Esporta CSV', - 'common.downloading': 'Download in corso...', + 'common.downloading': 'Scaricamento in corso...', 'common.today': 'Oggi', 'common.yesterday': 'Ieri', 'common.numberOfSearches': 'Numero di ricerche', - 'common.filteredBy': 'filtrato per', + 'common.filteredBy': 'filtrato da', 'common.invalidDateFormat': 'Formato data non valido', - 'common.csvFilename': 'utenti_attivi', - 'permission.title': 'Permessi mancanti', + 'common.csvFilename': 'active_users', + 'permission.title': 'Autorizzazioni mancanti', 'permission.description': - 'Per visualizzare il plugin "Adoption Insights", contatta il tuo amministratore per ottenere i permessi adoption-insights.events.read.', + 'Per visualizzare il plugin "Adoption Insights", richiedere all\'amministratore le autorizzazioni adoption-insights.events.read.', }, }); diff --git a/workspaces/adoption-insights/plugins/adoption-insights/src/translations/ja.ts b/workspaces/adoption-insights/plugins/adoption-insights/src/translations/ja.ts new file mode 100644 index 0000000000..19fe19cfd6 --- /dev/null +++ b/workspaces/adoption-insights/plugins/adoption-insights/src/translations/ja.ts @@ -0,0 +1,105 @@ +/* + * 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 { adoptionInsightsTranslationRef } from './ref'; + +/** + * Japanese translation for plugin.adoption-insights. + * @public + */ +const adoptionInsightsTranslationJa = createTranslationMessages({ + ref: adoptionInsightsTranslationRef, + messages: { + 'page.title': 'Adoption Insights', + 'header.title': 'Adoption Insights', + 'header.dateRange.today': '今日', + 'header.dateRange.lastWeek': '先週', + 'header.dateRange.lastMonth': '先月', + 'header.dateRange.last28Days': '過去 28 日間', + 'header.dateRange.lastYear': '去年', + 'header.dateRange.dateRange': '日付範囲...', + 'header.dateRange.cancel': 'キャンセル', + 'header.dateRange.ok': 'OK', + 'header.dateRange.defaultLabel': '過去 28 日間', + 'header.dateRange.title': '日付範囲', + 'header.dateRange.startDate': '開始日', + 'header.dateRange.endDate': '終了日', + 'activeUsers.title': 'アクティブユーザー', + 'activeUsers.averagePrefix': '平均ピークアクティブユーザー数は', + 'activeUsers.averageText': '{{period}} あたり {{count}}', + 'activeUsers.averageSuffix': ' でした (対象期間中)。', + 'activeUsers.hour': '時間', + 'activeUsers.day': '日', + 'activeUsers.week': '週', + 'activeUsers.month': '月', + 'activeUsers.legend.newUsers': '新規ユーザー', + 'activeUsers.legend.returningUsers': 'リピートユーザー', + 'templates.title': '上位のテンプレート', + 'templates.topNTitle': '上位 {{count}} 件のテンプレート', + 'templates.allTitle': 'すべてのテンプレート', + 'catalogEntities.title': '上位のカタログエンティティー', + 'catalogEntities.topNTitle': '上位 {{count}} 件のカタログエンティティー', + 'catalogEntities.allTitle': 'すべてのカタログエンティティー', + 'plugins.title': '上位のプラグイン', + 'plugins.topNTitle': '上位 {{count}} 件のプラグイン', + 'plugins.allTitle': 'すべてのプラグイン', + 'techDocs.title': '上位の TechDocs', + 'techDocs.topNTitle': '上位 {{count}} 件の TechDocs', + 'techDocs.allTitle': 'すべての TechDocs', + 'searches.title': '上位の検索', + 'searches.totalCount': '{{count}} 件の検索', + 'searches.averagePrefix': '平均検索回数は', + 'searches.averageText': '{{period}} あたり {{count}}', + 'searches.averageSuffix': ' でした (対象期間中)。', + 'searches.hour': '時間', + 'searches.day': '日', + 'searches.week': '週', + 'searches.month': '月', + 'users.title': '総ユーザー数', + 'users.haveLoggedIn': 'ログイン済み', + 'users.loggedInUsers': 'ログイン済みユーザー', + 'users.licensed': 'ライセンス保有', + 'users.licensedNotLoggedIn': 'ライセンス保有 (ログインなし)', + 'users.ofTotal': '{{total}} 中', + 'users.tooltip': 'ライセンスユーザー数は app-config.yaml で設定します', + 'table.headers.name': '名前', + 'table.headers.kind': '種類', + 'table.headers.lastUsed': '最終使用', + 'table.headers.views': '表示回数', + 'table.headers.executions': '実行回数', + 'table.headers.trend': 'トレンド', + 'table.headers.entity': 'エンティティー', + 'table.pagination.topN': '上位 {{count}} 件', + 'filter.all': 'すべて', + 'filter.selectKind': '種類の選択', + 'common.noResults': 'この日付範囲の結果はありません。', + 'common.readMore': 'さらに表示する', + 'common.exportCSV': 'CSV エクスポート', + 'common.downloading': 'ダウンロード中...', + 'common.today': '今日', + 'common.yesterday': '昨日', + 'common.numberOfSearches': '検索数', + 'common.filteredBy': 'フィルタリング条件', + 'common.invalidDateFormat': '無効な日付形式', + 'common.csvFilename': 'active_users', + 'permission.title': '権限の不足', + 'permission.description': + '"Adoption Insights" プラグインを表示するには、管理者に連絡して adoption-insights.events.read 権限を付与してもらうよう依頼してください。', + }, +}); + +export default adoptionInsightsTranslationJa; diff --git a/workspaces/ai-integrations/.changeset/cruel-pears-film.md b/workspaces/ai-integrations/.changeset/cruel-pears-film.md new file mode 100644 index 0000000000..a0a8cc9b38 --- /dev/null +++ b/workspaces/ai-integrations/.changeset/cruel-pears-film.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-ai-experience': patch +--- + +Added 'it' and 'ja' i18n support and updated 'fr' translation strings. diff --git a/workspaces/ai-integrations/plugins/ai-experience/src/translations/fr.ts b/workspaces/ai-integrations/plugins/ai-experience/src/translations/fr.ts index 58d462840a..bc4e490f01 100644 --- a/workspaces/ai-integrations/plugins/ai-experience/src/translations/fr.ts +++ b/workspaces/ai-integrations/plugins/ai-experience/src/translations/fr.ts @@ -13,55 +13,60 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { aiExperienceTranslationRef } from './ref'; +/** + * fr translation for plugin.ai-experience. + * @public + */ const aiExperienceTranslationFr = createTranslationMessages({ ref: aiExperienceTranslationRef, messages: { - 'accessibility.aiIllustration': "Illustration de l'IA", - 'accessibility.aiModelsIllustration': "Illustration des modèles d'IA", - 'accessibility.close': 'fermer', - 'common.guest': 'Invité', - 'common.latest': 'dernier', - 'common.more': 'plus', - 'common.template': 'Modèle', - 'common.viewMore': 'Voir plus', - 'greeting.goodAfternoon': 'Bon après-midi', - 'greeting.goodEvening': 'Bonne soirée', - 'greeting.goodMorning': 'Bonjour', - 'learn.explore.cta': 'Accéder au catalogue', - 'learn.explore.description': - 'Explorez les modèles, serveurs et modèles d’IA.', - 'learn.explore.title': 'Explorez', - 'learn.getStarted.cta': 'Accéder à la documentation technique', - 'learn.getStarted.description': 'En savoir plus sur Red Hat Developer Hub.', + 'page.title': "Expérience de l'IA", + 'page.subtitle': + "Explorer les modèles d'IA, les serveurs, les actualités et les ressources d'apprentissage", 'learn.getStarted.title': 'Commencer', - 'learn.learn.cta': "Accéder aux parcours d'apprentissage", + 'learn.getStarted.description': 'En savoir plus sur Red Hat Developer Hub.', + 'learn.getStarted.cta': 'Accéder à la documentation technique', + 'learn.explore.title': 'Explorer', + 'learn.explore.description': + 'Explorer les modèles, serveurs et modèles d’IA.', + 'learn.explore.cta': 'Accéder au catalogue', + 'learn.learn.title': 'Apprendre', 'learn.learn.description': 'Explorer et développer de nouvelles compétences en IA.', - 'learn.learn.title': 'Apprendre', - 'modal.cancel': 'Annuler', - 'modal.close': 'Fermer', - 'modal.edit': 'Modifier', - 'modal.save': 'Sauvegarder', - 'modal.title.edit': 'Modifier la pièce jointe', - 'modal.title.preview': 'Aperçu de la pièce jointe', + 'learn.learn.cta': "Accéder aux parcours d'apprentissage", + 'news.pageTitle': "Actualités de l'IA", 'news.fetchingRssFeed': 'Récupération du flux RSS', 'news.noContentAvailable': 'Aucun contenu disponible', 'news.noContentDescription': "Il semblerait que nous n'ayons pas pu obtenir de contenu à partir de ce flux RSS. Vous pouvez vérifier l'URL ou passer à une autre source en mettant à jour le fichier de configuration du plugin.", 'news.noRssContent': 'Aucun contenu RSS', - 'news.pageTitle': "Actualités de l'IA", - 'page.subtitle': - "Explorez les modèles d'IA, les serveurs, les actualités et les ressources d'apprentissage", - 'page.title': "Expérience de l'IA", - 'sections.discoverModels': - "Découvrez les modèles et services d'IA disponibles dans votre organisation", + 'modal.title.preview': 'Aperçu de la pièce jointe', + 'modal.title.edit': 'Modifier la pièce jointe', + 'modal.edit': 'Modifier', + 'modal.save': 'Sauvegarder', + 'modal.close': 'Fermer', + 'modal.cancel': 'Annuler', + 'common.viewMore': 'Voir davantage', + 'common.guest': 'Invité', + 'common.template': 'Modèle', + 'common.latest': 'dernier', + 'common.more': 'davantage', + 'greeting.goodMorning': 'Bonjour', + 'greeting.goodAfternoon': 'Bon après-midi', + 'greeting.goodEvening': 'Bonne soirée', 'sections.exploreAiModels': "Explorer les modèles d'IA", 'sections.exploreAiTemplates': "Explorer les modèles d'IA", + 'sections.discoverModels': + "Découvrez les modèles et services d'IA disponibles dans votre organisation", 'sections.viewAllModels': 'Voir tous les {{count}} modèles', 'sections.viewAllTemplates': 'Afficher tous les {{count}} modèles', + 'accessibility.close': 'fermer', + 'accessibility.aiIllustration': "Illustration de l'IA", + 'accessibility.aiModelsIllustration': "Illustration des modèles d'IA", }, }); diff --git a/workspaces/ai-integrations/plugins/ai-experience/src/translations/it.ts b/workspaces/ai-integrations/plugins/ai-experience/src/translations/it.ts new file mode 100644 index 0000000000..d48013b40d --- /dev/null +++ b/workspaces/ai-integrations/plugins/ai-experience/src/translations/it.ts @@ -0,0 +1,76 @@ +/* + * 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 { aiExperienceTranslationRef } from './ref'; + +/** + * Italian translation for plugin.ai-experience. + * @public + */ +const aiExperienceTranslationIt = createTranslationMessages({ + ref: aiExperienceTranslationRef, + messages: { + 'page.title': 'Esperienza di intelligenza artificiale', + 'page.subtitle': + "Esplora modelli, server, notizie e risorse di apprendimento sull'intelligenza artificiale", + 'learn.getStarted.title': 'Inizia', + 'learn.getStarted.description': 'Scopri di più su Red Hat Developer Hub.', + 'learn.getStarted.cta': 'Vai a Documenti tecnici', + 'learn.explore.title': 'Esplora', + 'learn.explore.description': + 'Esplora modelli e server di intelligenza artificiale.', + 'learn.explore.cta': 'Vai al Catalogo', + 'learn.learn.title': 'Apprendi', + 'learn.learn.description': + "Esplora e sviluppa nuove competenze sull'intelligenza artificiale.", + 'learn.learn.cta': 'Vai ai Percorsi di apprendimento', + 'news.pageTitle': "Notizie sull'intelligenza artificiale", + 'news.fetchingRssFeed': 'Recupero del feed RSS', + 'news.noContentAvailable': 'Nessun contenuto disponibile', + 'news.noContentDescription': + "Non è stato possibile ottenere contenuti dal feed RSS. Ricontrollare l'URL o passare a un'origine diversa aggiornando il file di configurazione del plugin.", + 'news.noRssContent': 'Nessun contenuto RSS', + 'modal.title.preview': 'Anteprima allegato', + 'modal.title.edit': 'Modifica allegato', + 'modal.edit': 'Modifica', + 'modal.save': 'Salva', + 'modal.close': 'Chiudi', + 'modal.cancel': 'Cancella', + 'common.viewMore': 'Visualizza altro', + 'common.guest': 'Ospite', + 'common.template': 'Modello', + 'common.latest': 'ultimo', + 'common.more': 'altro', + 'greeting.goodMorning': 'Buon giorno', + 'greeting.goodAfternoon': 'Buon pomeriggio', + 'greeting.goodEvening': 'Buona sera', + 'sections.exploreAiModels': 'Esplora i modelli di intelligenza artificiale', + 'sections.exploreAiTemplates': + 'Esplora i modelli di intelligenza artificiale', + 'sections.discoverModels': + 'Scopri i modelli e i servizi di intelligenza artificiale disponibili nella tua organizzazione', + 'sections.viewAllModels': 'Visualizza tutti i {{count}} modelli', + 'sections.viewAllTemplates': 'Visualizza tutti i {{count}} modelli', + 'accessibility.close': 'chiudi', + 'accessibility.aiIllustration': + "Illustrazione dell'intelligenza artificiale", + 'accessibility.aiModelsIllustration': + 'Illustrazione dei modelli di intelligenza artificiale', + }, +}); + +export default aiExperienceTranslationIt; diff --git a/workspaces/ai-integrations/plugins/ai-experience/src/translations/ja.ts b/workspaces/ai-integrations/plugins/ai-experience/src/translations/ja.ts new file mode 100644 index 0000000000..aae0655281 --- /dev/null +++ b/workspaces/ai-integrations/plugins/ai-experience/src/translations/ja.ts @@ -0,0 +1,73 @@ +/* + * 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 { aiExperienceTranslationRef } from './ref'; + +/** + * Japanese translation for plugin.ai-experience. + * @public + */ +const aiExperienceTranslationJa = createTranslationMessages({ + ref: aiExperienceTranslationRef, + messages: { + 'page.title': 'AI エクスペリエンス', + 'page.subtitle': 'AI モデル、サーバー、ニュース、学習リソースの探索', + 'learn.getStarted.title': 'スタート', + 'learn.getStarted.description': + 'Red Hat Developer Hub について学習しましょう。', + 'learn.getStarted.cta': 'Tech Docs に移動', + 'learn.explore.title': '探索', + 'learn.explore.description': + 'AI モデル、サーバー、テンプレートを探索しましょう。', + 'learn.explore.cta': 'カタログに移動', + 'learn.learn.title': '学習', + 'learn.learn.description': + 'AI 分野の新しいスキルを探索して習得しましょう。', + 'learn.learn.cta': 'ラーニングパスに移動', + 'news.pageTitle': 'AI ニュース', + 'news.fetchingRssFeed': 'RSS フィードを取得しています', + 'news.noContentAvailable': '利用可能なコンテンツがありません', + 'news.noContentDescription': + '該当する RSS フィードからコンテンツを取得できなかったようです。URL を再確認してください。プラグインの設定ファイルを更新して別のソースに切り替えることもできます。', + 'news.noRssContent': 'RSS コンテンツなし', + 'modal.title.preview': '添付ファイルのプレビュー', + 'modal.title.edit': '添付ファイルの編集', + 'modal.edit': '編集', + 'modal.save': '保存', + 'modal.close': '閉じる', + 'modal.cancel': 'キャンセル', + 'common.viewMore': '詳細の表示', + 'common.guest': 'ゲスト', + 'common.template': 'テンプレート', + 'common.latest': '最新', + 'common.more': '詳細', + 'greeting.goodMorning': 'おはようございます', + 'greeting.goodAfternoon': 'こんにちは', + 'greeting.goodEvening': 'こんばんは', + 'sections.exploreAiModels': 'AI モデルの探索', + 'sections.exploreAiTemplates': 'AI テンプレートの探索', + 'sections.discoverModels': + '組織内で利用可能な AI モデルおよびサービスを探す', + 'sections.viewAllModels': '{{count}} 個のモデルをすべて表示する', + 'sections.viewAllTemplates': '{{count}} 個のテンプレートをすべて表示する', + 'accessibility.close': '閉じる', + 'accessibility.aiIllustration': 'AI のイラスト', + 'accessibility.aiModelsIllustration': 'AI モデルのイラスト', + }, +}); + +export default aiExperienceTranslationJa; diff --git a/workspaces/bulk-import/.changeset/stupid-meals-pretend.md b/workspaces/bulk-import/.changeset/stupid-meals-pretend.md new file mode 100644 index 0000000000..7eb55d2003 --- /dev/null +++ b/workspaces/bulk-import/.changeset/stupid-meals-pretend.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-bulk-import': patch +--- + +Added 'it' and 'ja' i18n support and updated 'fr' translation strings. diff --git a/workspaces/bulk-import/plugins/bulk-import/src/translations/fr.ts b/workspaces/bulk-import/plugins/bulk-import/src/translations/fr.ts index 223333a7be..f0409e649b 100644 --- a/workspaces/bulk-import/plugins/bulk-import/src/translations/fr.ts +++ b/workspaces/bulk-import/plugins/bulk-import/src/translations/fr.ts @@ -18,239 +18,228 @@ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { bulkImportTranslationRef } from './ref'; +/** + * fr translation for plugin.bulk-import. + * @public + */ const bulkImportTranslationFr = createTranslationMessages({ ref: bulkImportTranslationRef, - full: true, messages: { - 'addRepositories.addSelected': 'Ajouter la sélection', - 'addRepositories.allRepositoriesAdded': - 'Tous les référentiels sont ajoutés', + 'page.title': 'Importation en masse', + 'page.subtitle': 'Importer des entités vers Red Hat Developer Hub', + 'page.addRepositoriesTitle': 'Ajouter des référentiels', + 'page.importEntitiesTitle': 'Importer des entités', + 'page.addRepositoriesSubtitle': + 'Ajoutez des référentiels à Red Hat Developer Hub en 4 étapes', + 'page.importEntitiesSubtitle': 'Importer vers Red Hat Developer Hub', + 'page.typeLink': 'Importation en masse', + 'sidebar.bulkImport': 'Importation en masse', + 'permissions.title': 'Autorisation requise', + 'permissions.addRepositoriesMessage': + "Pour ajouter des référentiels, contactez votre administrateur pour qu'il vous donne l'autorisation « bulk.import ».", + 'permissions.viewRepositoriesMessage': + "Pour afficher les référentiels ajoutés, contactez votre administrateur pour qu'il vous donne l'autorisation « bulk.import ».", + 'repositories.addedRepositories': 'Dépôts ajoutés', + 'repositories.importedEntities': 'Entités importées', + 'repositories.addedRepositoriesCount': 'Dépôts ajoutés ({{count}})', + 'repositories.importedEntitiesCount': 'Entités importées ({{count}})', + 'repositories.noRecordsFound': 'Aucun enregistrement trouvé', + 'repositories.refresh': 'Rafraîchir', + 'repositories.import': 'Importer', + 'repositories.removing': 'Suppression...', + 'repositories.deleteRepository': 'Supprimer le référentiel', + 'repositories.removeRepositoryQuestion': + 'Supprimer {{repoName}} {{repositoryText}} ?', + 'repositories.repositoryText': 'Dépôt', + 'repositories.removeRepositoryWarningScaffolder': + 'La suppression d’un référentiel efface toutes les informations de tâches de scaffolding.', + 'repositories.removeRepositoryWarning': + 'La suppression d’un référentiel efface toutes les informations associées de la page Catalogue.', + 'repositories.removeRepositoryWarningGitlab': + 'Sa suppression effacera toutes les informations associées de la page Catalogue.', + 'repositories.cannotRemoveRepositoryUrl': + "Impossible de supprimer le référentiel car l'URL du référentiel est manquante.", + 'repositories.unableToRemoveRepository': + 'Impossible de supprimer le dépôt. {{error}}', + 'repositories.removeTooltipDisabled': + 'Ce référentiel a été ajouté au fichier app-config. Pour le supprimer, modifiez directement le fichier', + 'repositories.removeTooltipRepositoryScaffolder': + 'Supprimer le référentiel et toutes les tâches de scaffolding associées', + 'repositories.errorOccuredWhileFetching': + "Une erreur s'est produite lors de la récupération de la demande d'extraction", + 'repositories.failedToCreatePullRequest': + "Échec de la création de la demande d'extraction", + 'repositories.errorOccured': "Une erreur s'est produite", + 'repositories.editCatalogInfoTooltip': + "Modifier la demande d'extraction catalog-info.yaml", + 'repositories.viewCatalogInfoTooltip': + 'Afficher le fichier catalog-info.yaml', + 'repositories.pr': 'PR', + 'status.alreadyImported': 'Déjà importé', + 'status.added': 'Ajouté', + 'status.waitingForApproval': "En attente d'approbation", + 'status.imported': 'Importé', + 'status.readyToImport': 'Prêt à importer', + 'errors.prErrorPermissions': + "Impossible de créer un nouveau PR en raison d'autorisations insuffisantes. Contactez votre administrateur.", + 'errors.catalogInfoExists': + "Étant donné que catalog-info.yaml existe déjà dans le référentiel, aucun nouveau PR ne sera créé. Cependant, l'entité sera toujours enregistrée dans la page du catalogue.", + 'errors.catalogEntityConflict': + "Impossible de créer un nouveau PR en raison d'un conflit d'entité de catalogue.", + 'errors.repoEmpty': + 'Impossible de créer un nouveau PR car le référentiel est vide. Envoyez un commit initial au référentiel.', + 'errors.codeOwnersNotFound': + 'Le fichier CODEOWNERS est manquant dans le référentiel. Ajoutez un fichier CODEOWNERS pour créer un nouveau PR.', + 'errors.errorOccurred': "Une erreur s'est produite", + 'errors.failedToCreatePullRequest': + "Échec de la création de la demande d'extraction", + 'validation.componentNameInvalid': + '"{{value}}" n\'est pas valide ; une chaîne contenant des séquences de [a-zA-Z0-9] séparées par l\'un des [-_.] est attendue, soit au maximum 63 caractères au total. Pour en savoir plus sur le format de fichier de catalogue, visitez : https://github.com/backstage/backstage/blob/master/docs/architecture-decisions/adr002-default-catalog-file-format.md', + 'validation.componentNameRequired': 'Le nom du composant est requis', + 'validation.entityOwnerRequired': "Le propriétaire de l'entité est requis", + 'validation.titleRequired': 'Le titre {{approvalTool}} est obligatoire', + 'validation.descriptionRequired': + 'La description de {{approvalTool}} est requise', + 'validation.keyValuePairFormat': + 'Chaque entrée doit avoir une clé et une valeur séparées par deux points.', + 'table.headers.name': 'Nom', + 'table.headers.url': 'URL', + 'table.headers.repoUrl': 'URL du dépôt', + 'table.headers.organization': 'Organisation', + 'table.headers.organizationGroup': 'Organisation/groupe', + 'table.headers.group': 'Groupe', + 'table.headers.status': 'Statut', + 'table.headers.lastUpdated': 'Dernière mise à jour', + 'table.headers.actions': 'Actes', + 'table.headers.catalogInfoYaml': 'catalogue-info.yaml', + 'table.pagination.rows5': '5 lignes', + 'table.pagination.rows10': '10 lignes', + 'table.pagination.rows20': '20 lignes', + 'table.pagination.rows50': '50 lignes', + 'table.pagination.rows100': '100 lignes', + 'steps.chooseApprovalTool': + "Choisissez l'outil d'approbation (GitHub/GitLab) pour la création de PR", + 'steps.chooseRepositories': + 'Choisissez les référentiels que vous souhaitez ajouter', + 'steps.chooseItems': 'Choisissez les éléments que vous souhaitez importer', + 'steps.generateCatalogInfo': + 'Générer un fichier catalog-info.yaml pour chaque référentiel', + 'steps.generateCatalogInfoItems': + 'Générer un fichier catalog-info.yaml pour chaque élément sélectionné', + 'steps.editPullRequest': + "Modifier les détails de la demande d'extraction si nécessaire", + 'steps.trackStatus': "Suivre l'état d'approbation", + 'addRepositories.approvalTool.title': "Outil d'approbation", 'addRepositories.approvalTool.description': - "Choisissez l'outil de contrôle de source pour la création de RP", + "Choisir l'outil d'approbation pour la création de RP", + 'addRepositories.approvalTool.tooltip': + "L'importation nécessite une approbation. Une fois la demande d'extraction/fusion approuvée, les référentiels/projets seront importés sur la page Catalogue.", 'addRepositories.approvalTool.github': 'GitHub', 'addRepositories.approvalTool.gitlab': 'GitLab', - 'addRepositories.approvalTool.title': 'Outil de contrôle de source', - 'addRepositories.approvalTool.tooltip': - "L'importation nécessite une approbation. Une fois la demande d'extraction approuvée, les référentiels seront importés sur la page Catalogue.", - 'addRepositories.clearSearch': 'recherche claire', - 'addRepositories.editPullRequest': "Modifier la demande d'extraction", - 'addRepositories.generateCatalogInfo': 'Générer catalog-info.yaml', - 'addRepositories.noRepositoriesFound': 'Aucun dépôt trouvé', - 'addRepositories.noSelection': 'Aucun', - 'addRepositories.preview': 'Aperçu', - 'addRepositories.repositoryType.group': 'Groupe', + 'addRepositories.repositoryType.title': 'Type de référentiel', + 'addRepositories.repositoryType.repository': 'Dépôt', 'addRepositories.repositoryType.organization': 'Organisation', 'addRepositories.repositoryType.project': 'Projet', - 'addRepositories.repositoryType.repository': 'Dépôt', - 'addRepositories.repositoryType.title': 'Type de référentiel', - 'addRepositories.searchPlaceholder': 'Rechercher', + 'addRepositories.repositoryType.group': 'Groupe', + 'addRepositories.searchPlaceholder': 'Recherche', + 'addRepositories.clearSearch': 'supprimer la recherche', + 'addRepositories.noRepositoriesFound': 'Aucun dépôt trouvé', + 'addRepositories.allRepositoriesAdded': + 'Tous les référentiels sont ajoutés', + 'addRepositories.noSelection': 'Aucun', 'addRepositories.selectRepositories': 'Sélectionner les référentiels', - 'addRepositories.selectedCount': '{{count}} sélectionné', - 'addRepositories.selectedLabel': 'Choisi', - 'addRepositories.selectedProjects': 'projets', 'addRepositories.selectedRepositories': 'dépôts', + 'addRepositories.selectedProjects': 'projets', + 'addRepositories.selectedLabel': 'Choisi', + 'addRepositories.selectedCount': '{{count}} sélectionné', + 'addRepositories.addSelected': 'Ajouter la sélection', + 'addRepositories.generateCatalogInfo': 'Générer catalog-info.yaml', + 'addRepositories.editPullRequest': "Modifier la demande d'extraction", + 'addRepositories.preview': 'Aperçu', 'catalogInfo.status.generating': 'Générateur', 'common.add': 'Ajouter', 'common.cancel': 'Annuler', 'common.close': 'Fermer', 'common.delete': 'Supprimer', - 'common.documentation': 'Documentation', 'common.edit': 'Modifier', 'common.filter': 'Filtre', 'common.import': 'Importer', - 'common.remove': 'Retirer', + 'common.remove': 'Supprimer', 'common.save': 'Sauvegarder', 'common.select': 'Sélectionner', 'common.update': 'Mise à jour', 'common.view': 'Voir', - 'errors.catalogEntityConflict': - "Impossible de créer un nouveau PR en raison d'un conflit d'entité de catalogue.", - 'errors.catalogInfoExists': - "Étant donné que catalog-info.yaml existe déjà dans le référentiel, aucun nouveau PR ne sera créé. Cependant, l'entité sera toujours enregistrée dans la page du catalogue.", - 'errors.codeOwnersNotFound': - 'Le fichier CODEOWNERS est manquant dans le référentiel. Ajoutez un fichier CODEOWNERS pour créer un nouveau PR.', - 'errors.errorOccurred': "Une erreur s'est produite", - 'errors.failedToCreatePullRequest': - "Échec de la création de la demande d'extraction", - 'errors.noIntegrationsConfigured': - "Aucune intégration GitHub ou GitLab n'est configurée. Veuillez ajouter au moins une intégration pour utiliser la fonction d'importation en masse.", - 'errors.addIntegrationsToConfig': - 'Pour résoudre ce problème, assurez-vous que les intégrations sont ajoutées à votre fichier de configuration Backstage (app-config.yaml).', - 'errors.prErrorPermissions': - "Impossible de créer un nouveau PR en raison d'autorisations insuffisantes. Contactez votre administrateur.", - 'errors.repoEmpty': - 'Impossible de créer un nouveau PR car le référentiel est vide. Envoyez un commit initial au référentiel.', - 'forms.footer.createPullRequest': "Créer une demande d'extraction", - 'forms.footer.createPullRequests': "Créer des demandes d'extraction", - 'forms.footer.selectRepositoryTooltip': 'Sélectionnez un dépôt à importer.', - 'forms.footer.createServiceNowTicket': 'Créer un ticket ServiceNow', - 'forms.footer.createServiceNowTickets': 'Créer des tickets ServiceNow', - 'forms.footer.importTooltip': - "Les fichiers Catalog-info.yaml doivent être générés pour l'importation.", - 'forms.footer.pullRequestTooltip': - "Les fichiers Catalog-info.yaml doivent être générés avant de créer une demande d'extraction", - 'forms.footer.serviceNowTooltip': - 'Les fichiers Catalog-info.yaml doivent être générés avant de créer un ticket ServiceNow', - 'page.addRepositoriesSubtitle': - 'Ajoutez des référentiels à Red Hat Developer Hub en 4 étapes', - 'page.addRepositoriesTitle': 'Ajouter des référentiels', - 'page.importEntitiesSubtitle': 'Importer vers Red Hat Developer Hub', - 'page.importEntitiesTitle': 'Importer des entités', - 'page.subtitle': 'Importer des entités vers Red Hat Developer Hub', - 'page.title': 'Importation en masse', - 'page.typeLink': 'Importation en masse', - 'permissions.addRepositoriesMessage': - "Pour ajouter des référentiels, contactez votre administrateur pour qu'il vous donne l'autorisation « bulk.import ».", - 'permissions.title': 'Autorisation requise', - 'permissions.viewRepositoriesMessage': - "Pour afficher les référentiels ajoutés, contactez votre administrateur pour qu'il vous donne l'autorisation « bulk.import ».", - 'previewFile.closeDrawer': 'Fermez le tiroir', + 'time.daysAgo': 'Il y a {{count}} jour(s)', + 'time.hoursAgo': 'Il y a {{count}} heure(s)', + 'time.minutesAgo': 'Il y a {{count}} minute(s)', + 'time.secondsAgo': 'Il y a {{count}} seconde(s)', + 'previewFile.previewFile': "Fichier d'aperçu", + 'previewFile.previewFiles': 'Aperçu des fichiers', 'previewFile.failedToCreatePR': 'Échec de la création du PR', + 'previewFile.prCreationUnsuccessful': + 'La création de PR a échoué pour certains référentiels. Cliquer sur « Modifier » pour voir la raison.', 'previewFile.failedToFetchPR': "Échec de la récupération de la demande d'extraction. Un nouveau YAML a été généré ci-dessous.", 'previewFile.invalidEntityYaml': "L'entité YAML dans votre demande d'extraction n'est pas valide (fichier vide ou apiVersion, kind ou metadata.name manquant). Un nouveau YAML a été généré ci-dessous.", - 'previewFile.keyValuePlaceholder': 'clé1 : valeur2 ; clé2 : valeur2', - 'previewFile.prCreationUnsuccessful': - 'La création de PR a échoué pour certains référentiels. Cliquez sur « Modifier » pour voir la raison.', + 'previewFile.pullRequestPendingApproval': + "Le [{{pullRequestText}}]({{pullRequestUrl}}) est en attente d'approbation", + 'previewFile.pullRequestText': "demande d'extraction", + 'previewFile.viewRepository': 'Afficher le référentiel', + 'previewFile.closeDrawer': 'Fermez le tiroir', + 'previewFile.keyValuePlaceholder': 'clé1 : valeur2 ; clé2 : valeur2', + 'previewFile.useSemicolonSeparator': + 'Utilisez un point-virgule pour séparer {{label}}', 'previewFile.preview': 'Aperçu', - 'previewFile.previewFile': "Fichier d'aperçu", - 'previewFile.previewFiles': 'Aperçu des fichiers', - 'previewFile.pullRequest.annotations': 'Annotations', + 'previewFile.pullRequest.title': "Demande d'extraction", + 'previewFile.pullRequest.mergeRequest': 'Demande de fusion', + 'previewFile.pullRequest.serviceNowTicket': 'Ticket ServiceNow', + 'previewFile.pullRequest.details': '{{tool}} détails', + 'previewFile.pullRequest.titleLabel': 'titre de {{outil}}', 'previewFile.pullRequest.bodyLabel': 'corps de {{outil}}', + 'previewFile.pullRequest.titlePlaceholder': + "Ajouter des fichiers descripteurs d'entités de catalogue Backstage", 'previewFile.pullRequest.bodyPlaceholder': 'Un texte descriptif avec prise en charge Markdown', - 'previewFile.pullRequest.codeOwnersWarning': - "AVERTISSEMENT : cette opération peut échouer si aucun fichier CODEOWNERS n'est trouvé à l'emplacement cible.", + 'previewFile.pullRequest.entityConfiguration': "Configuration de l'entité", 'previewFile.pullRequest.componentNameLabel': 'Nom du composant créé', 'previewFile.pullRequest.componentNamePlaceholder': 'Nom du composant', - 'previewFile.pullRequest.details': '{{tool}} détails', - 'previewFile.pullRequest.entityConfiguration': "Configuration de l'entité", - 'previewFile.pullRequest.entityOwnerHelper': - 'Sélectionnez un propriétaire dans la liste ou entrez une référence à un groupe ou à un utilisateur', 'previewFile.pullRequest.entityOwnerLabel': "Propriétaire de l'entité", 'previewFile.pullRequest.entityOwnerPlaceholder': 'groupes et utilisateurs', - 'previewFile.pullRequest.labels': 'Étiquettes', + 'previewFile.pullRequest.entityOwnerHelper': + 'Sélectionnez un propriétaire dans la liste ou entrez une référence à un groupe ou à un utilisateur', 'previewFile.pullRequest.loadingText': 'Chargement des groupes et des utilisateurs', - 'previewFile.pullRequest.mergeRequest': 'Demande de fusion', 'previewFile.pullRequest.previewEntities': 'Aperçu des entités', - 'previewFile.pullRequest.serviceNowTicket': 'Ticket ServiceNow', + 'previewFile.pullRequest.annotations': 'Annotations', + 'previewFile.pullRequest.labels': 'Étiquettes', 'previewFile.pullRequest.spec': 'Spécifications', - 'previewFile.pullRequest.title': "Demande d'extraction", - 'previewFile.pullRequest.titleLabel': 'titre de {{outil}}', - 'previewFile.pullRequest.titlePlaceholder': - "Ajouter des fichiers descripteurs d'entités de catalogue Backstage", 'previewFile.pullRequest.useCodeOwnersFile': "Utiliser le fichier *CODEOWNERS* comme propriétaire de l'entité", - 'previewFile.pullRequestPendingApproval': - "Le [{{pullRequestText}}]({{pullRequestUrl}}) est en attente d'approbation", - 'previewFile.pullRequestText': "demande d'extraction", - 'previewFile.useSemicolonSeparator': - 'Utilisez un point-virgule pour séparer {{label}}', - 'previewFile.viewRepository': 'Afficher le référentiel', - 'repositories.addedRepositories': 'Dépôts ajoutés', - 'repositories.addedRepositoriesCount': 'Dépôts ajoutés ({{count}})', - 'repositories.cannotRemoveRepositoryUrl': - "Impossible de supprimer le référentiel car l'URL du référentiel est manquante.", - 'repositories.deleteRepository': 'Supprimer le référentiel', - 'repositories.editCatalogInfoTooltip': - "Modifier la demande d'extraction catalog-info.yaml", - 'repositories.errorOccured': "Une erreur s'est produite", - 'repositories.errorOccuredWhileFetching': - "Une erreur s'est produite lors de la récupération de la demande d'extraction", - 'repositories.failedToCreatePullRequest': - "Échec de la création de la demande d'extraction", - 'repositories.import': 'Importer', - 'repositories.importedEntities': 'Entités importées', - 'repositories.importedEntitiesCount': 'Entités importées ({{count}})', - 'repositories.noRecordsFound': - "Aucun référentiel disponible pour l'importation.", - 'repositories.noProjectsFound': - "Aucun projet disponible pour l'importation.", - 'repositories.pr': 'PR', - 'repositories.refresh': 'Rafraîchir', - 'repositories.removeRepositoryQuestion': - 'Supprimer {{repoName}} {{repositoryText}} ?', - 'repositories.removeRepositoryWarning': - 'La suppression d’un référentiel efface toutes les informations associées de la page Catalogue.', - 'repositories.removeRepositoryWarningGitlab': - 'Sa suppression effacera toutes les informations associées de la page Catalogue.', - 'repositories.removeTooltipDisabled': - 'Ce référentiel a été ajouté au fichier app-config. Pour le supprimer, modifiez directement le fichier', - 'repositories.removing': 'Suppression...', - 'repositories.repositoryText': 'Dépôt', - 'repositories.removeRepositoryWarningScaffolder': - 'La suppression d’un dépôt supprimera également toutes les informations de tâche Scaffolder associées.', - 'repositories.unableToRemoveRepository': - 'Impossible de supprimer le dépôt. {{error}}', - 'repositories.removeTooltipRepositoryScaffolder': - 'Supprimer le dépôt et les informations de tâche Scaffolder associées', - 'repositories.viewCatalogInfoTooltip': - 'Afficher le fichier catalog-info.yaml', - 'sidebar.bulkImport': 'Importation en masse', - 'status.added': 'Ajouté', - 'status.alreadyImported': 'Déjà importé', - 'status.imported': 'Importé', - 'status.waitingForApproval': "En attente d'approbation", - 'status.readyToImport': 'Prêt à importer', - 'status.waitingForPullRequestToStart': - 'En attente du démarrage de la pull request', - 'status.missingConfigurations': 'Configurations manquantes', - 'status.failedCreatingPR': 'Échec de la création de la PR', - 'status.pullRequestRejected': 'Pull request rejetée', - 'steps.chooseApprovalTool': - 'Choisir un outil de contrôle de source pour la création de pull request', - 'steps.chooseItems': 'Choisissez les éléments que vous souhaitez importer', - 'steps.chooseRepositories': - 'Choisissez les référentiels que vous souhaitez ajouter', - 'steps.editPullRequest': 'Voir les détails de la pull/merge request', - 'steps.generateCatalogInfo': - 'Générer un fichier catalog-info.yaml pour chaque référentiel', - 'steps.generateCatalogInfoItems': - 'Générer un fichier catalog-info.yaml pour chaque élément sélectionné', - 'steps.trackStatus': "Suivre l'état d'approbation", - 'table.headers.actions': 'Actes', - 'table.headers.catalogInfoYaml': 'catalogue-info.yaml', - 'table.headers.group': 'Groupe', - 'table.headers.lastUpdated': 'Dernière mise à jour', - 'table.headers.name': 'Nom', - 'table.headers.organization': 'Organisation', - 'table.headers.organizationGroup': 'Organisation/groupe', - 'table.headers.repoUrl': 'URL du dépôt', - 'table.headers.status': 'Statut', - 'table.headers.taskStatus': 'Statut de la tâche', - 'table.headers.url': 'URL', - 'table.pagination.rows10': '10 lignes', - 'table.pagination.rows100': '100 lignes', - 'table.pagination.rows20': '20 lignes', - 'table.pagination.rows5': '5 lignes', - 'table.pagination.rows50': '50 lignes', - 'time.daysAgo': 'Il y a {{count}} jour(s)', - 'time.hoursAgo': 'Il y a {{count}} heure(s)', - 'time.minutesAgo': 'Il y a {{count}} minute(s)', - 'time.secondsAgo': 'Il y a {{count}} seconde(s)', - 'validation.componentNameInvalid': - '"{{value}}" n\'est pas valide ; une chaîne contenant des séquences de [a-zA-Z0-9] séparées par l\'un des [-_.] est attendue, soit au maximum 63 caractères au total. Pour en savoir plus sur le format de fichier de catalogue, visitez : https://github.com/backstage/backstage/blob/master/docs/architecture-decisions/adr002-default-catalog-file-format.md', - 'validation.componentNameRequired': 'Le nom du composant est requis', - 'validation.descriptionRequired': - 'La description de {{approvalTool}} est requise', - 'validation.entityOwnerRequired': "Le propriétaire de l'entité est requis", - 'validation.keyValuePairFormat': - 'Chaque entrée doit avoir une clé et une valeur séparées par deux points.', - 'validation.titleRequired': 'Le titre {{approvalTool}} est obligatoire', + 'previewFile.pullRequest.codeOwnersWarning': + "AVERTISSEMENT : cette opération peut échouer si aucun fichier CODEOWNERS n'est trouvé à l'emplacement cible.", + 'forms.footer.createServiceNowTicket': 'Créer un ticket ServiceNow', + 'forms.footer.createServiceNowTickets': 'Créer des tickets ServiceNow', + 'forms.footer.createPullRequest': "Créer une demande d'extraction", + 'forms.footer.createPullRequests': "Créer des demandes d'extraction", + 'forms.footer.serviceNowTooltip': + 'Les fichiers Catalog-info.yaml doivent être générés avant de créer un ticket ServiceNow', + 'forms.footer.importTooltip': + "Les fichiers Catalog-info.yaml doivent être générés pour l'importation.", + 'forms.footer.pullRequestTooltip': + "Les fichiers Catalog-info.yaml doivent être générés avant de créer une demande d'extraction", 'tasks.tasksFor': 'Tâches pour {{importJobStatusId}}', - 'tasks.taskId': 'ID de la tâche', - 'tasks.taskLink': 'Lien de la tâche', - 'tasks.viewTask': 'Voir la tâche', - 'tasks.loading': 'Chargement...', + 'tasks.taskId': 'ID de tâche', + 'tasks.taskLink': 'Lien pour les tâches', + 'tasks.viewTask': 'Afficher les tâches', + 'tasks.loading': 'Chargement en cours...', 'tasks.errorFetchingData': 'Erreur lors de la récupération des données', - 'tasks.taskCancelled': 'Annulée', - 'tasks.taskCompleted': 'Terminée', - 'tasks.taskFailed': 'Échouée', - 'tasks.taskOpen': 'Ouverte', - 'tasks.taskProcessing': 'En cours', - 'tasks.taskSkipped': 'Ignorée', + 'tasks.taskCancelled': 'Tâche annulée', + 'tasks.taskCompleted': 'Tâche complétée', + 'tasks.taskFailed': 'Tâche ayant échoué', + 'tasks.taskOpen': 'Tâche en cours', + 'tasks.taskProcessing': 'Traitement de la tâche en cours', + 'tasks.taskSkipped': 'Tâche ignorée', }, }); diff --git a/workspaces/bulk-import/plugins/bulk-import/src/translations/it.ts b/workspaces/bulk-import/plugins/bulk-import/src/translations/it.ts new file mode 100644 index 0000000000..2b679d7173 --- /dev/null +++ b/workspaces/bulk-import/plugins/bulk-import/src/translations/it.ts @@ -0,0 +1,244 @@ +/* + * 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 { bulkImportTranslationRef } from './ref'; + +/** + * Italian translation for plugin.bulk-import. + * @public + */ +const bulkImportTranslationIt = createTranslationMessages({ + ref: bulkImportTranslationRef, + messages: { + 'page.title': 'Importazione in blocco', + 'page.subtitle': 'Importa entità in Red Hat Developer Hub', + 'page.addRepositoriesTitle': 'Aggiungere repository', + 'page.importEntitiesTitle': 'Importare entità', + 'page.addRepositoriesSubtitle': + 'Aggiungere repository a Red Hat Developer Hub in 4 passaggi', + 'page.importEntitiesSubtitle': 'Importa in Red Hat Developer Hub', + 'page.typeLink': 'Importazione in blocco', + 'sidebar.bulkImport': 'Importazione in blocco', + 'permissions.title': 'Autorizzazione richiesta', + 'permissions.addRepositoriesMessage': + "Per aggiungere repository, contattare l'amministratore per ottenere l'autorizzazione 'bulk.import'.", + 'permissions.viewRepositoriesMessage': + "Per visualizzare i repository aggiunti, contattare l'amministratore per ottenere l'autorizzazione 'bulk.import'.", + 'repositories.addedRepositories': 'Repository aggiunti', + 'repositories.importedEntities': 'Entità importate', + 'repositories.addedRepositoriesCount': 'Repository aggiunti ({{count}})', + 'repositories.importedEntitiesCount': 'Entità importate ({{count}})', + 'repositories.noRecordsFound': 'Nessun record trovato', + 'repositories.refresh': 'Aggiorna', + 'repositories.import': 'Importa', + 'repositories.removing': 'Rimozione in corso...', + 'repositories.deleteRepository': 'Elimina repository', + 'repositories.removeRepositoryQuestion': + 'Eliminare {{repoName}} {{repositoryText}}?', + 'repositories.repositoryText': 'repository', + 'repositories.removeRepositoryWarningScaffolder': + 'La rimozione di un repository rimuove anche tutte le informazioni sulle attività di scaffolding associate.', + 'repositories.removeRepositoryWarning': + 'La rimozione di un repository cancella tutte le informazioni associate dalla pagina Catalogo.', + 'repositories.removeRepositoryWarningGitlab': + 'La rimozione elimina tutte le informazioni associate dalla pagina Catalogo.', + 'repositories.cannotRemoveRepositoryUrl': + "Impossibile rimuovere il repository perché l'URL del repository è mancante.", + 'repositories.unableToRemoveRepository': + 'Impossibile rimuovere il repository. {{error}}', + 'repositories.removeTooltipDisabled': + 'Questo repository è stato aggiunto al file app-config. Per rimuoverlo modificare direttamente il file', + 'repositories.removeTooltipRepositoryScaffolder': + "Elimina il repository e le informazioni sull'attività di scaffolding associata", + 'repositories.errorOccuredWhileFetching': + 'Si è verificato un errore durante il recupero della richiesta pull', + 'repositories.failedToCreatePullRequest': + 'Impossibile creare la richiesta pull', + 'repositories.errorOccured': 'Si è verificato un errore', + 'repositories.editCatalogInfoTooltip': + 'Modifica la richiesta pull catalog-info.yaml', + 'repositories.viewCatalogInfoTooltip': + 'Visualizza il file catalog-info.yaml', + 'repositories.pr': 'Richiesta pull', + 'status.alreadyImported': 'Già importata', + 'status.added': 'Aggiunta', + 'status.waitingForApproval': 'In attesa di approvazione', + 'status.imported': 'Importata', + 'status.readyToImport': "Pronto per l'importazione", + 'errors.prErrorPermissions': + "Impossibile creare una nuova richiesta pull a causa di autorizzazioni insufficienti. Contattare l'amministratore.", + 'errors.catalogInfoExists': + "Poiché catalog-info.yaml esiste già nel repository, non verrà creata alcuna nuova richiesta pull. Tuttavia, l'entità sarà comunque registrata nella pagina del catalogo.", + 'errors.catalogEntityConflict': + 'Impossibile creare una nuova richiesta pull a causa di un conflitto tra entità del catalogo.', + 'errors.repoEmpty': + 'Impossibile creare una nuova richiesta pull perché il repository è vuoto. Inviare un commit iniziale al repository.', + 'errors.codeOwnersNotFound': + 'Il file CODEOWNERS non è presente nel repository. Aggiungere un file CODEOWNERS per creare una nuova richiesta pull.', + 'errors.errorOccurred': 'Si è verificato un errore', + 'errors.failedToCreatePullRequest': 'Impossibile creare la richiesta pull', + 'validation.componentNameInvalid': + '"{{value}}" non è valido; è prevista una stringa composta da sequenze di [a-zA-Z0-9] separate da uno qualsiasi tra i simboli [-_.], per un massimo di 63 caratteri in totale. Per saperne di più sul formato del file catalogo, visitare: https://github.com/backstage/backstage/blob/master/docs/architecture-decisions/adr002-default-catalog-file-format.md', + 'validation.componentNameRequired': 'Il nome del componente è obbligatorio', + 'validation.entityOwnerRequired': + "Il proprietario dell'entità è obbligatorio", + 'validation.titleRequired': 'Il titolo {{approvalTool}} è obbligatorio', + 'validation.descriptionRequired': + 'La descrizione {{approvalTool}} è obbligatoria', + 'validation.keyValuePairFormat': + 'Ogni voce deve avere una chiave e un valore separati da due punti.', + 'table.headers.name': 'Nome', + 'table.headers.url': 'URL', + 'table.headers.repoUrl': 'URL del repository', + 'table.headers.organization': 'Organizzazione', + 'table.headers.organizationGroup': 'Organizzazione/gruppo', + 'table.headers.group': 'Gruppo', + 'table.headers.status': 'Stato', + 'table.headers.lastUpdated': 'Ultimo aggiornamento', + 'table.headers.actions': 'Azioni', + 'table.headers.catalogInfoYaml': 'catalogo-info.yaml', + 'table.pagination.rows5': '5 righe', + 'table.pagination.rows10': '10 righe', + 'table.pagination.rows20': '20 righe', + 'table.pagination.rows50': '50 righe', + 'table.pagination.rows100': '100 righe', + 'steps.chooseApprovalTool': + 'Scegliere lo strumento di approvazione (GitHub/GitLab) per la creazione di richieste pull', + 'steps.chooseRepositories': 'Scegliere i repository da aggiungere', + 'steps.chooseItems': 'Scegliere quali elementi importare', + 'steps.generateCatalogInfo': + 'Generare un file catalog-info.yaml per ogni repository', + 'steps.generateCatalogInfoItems': + 'Generare un file catalog-info.yaml per ogni elemento selezionato', + 'steps.editPullRequest': + 'Modificare i dettagli della richiesta pull se necessario', + 'steps.trackStatus': 'Tenere traccia dello stato di approvazione', + 'addRepositories.approvalTool.title': 'Strumento di approvazione', + 'addRepositories.approvalTool.description': + 'Scegliere lo strumento di approvazione per la creazione di richiesta pull', + 'addRepositories.approvalTool.tooltip': + "L'importazione richiede l'approvazione. Dopo l'approvazione della richiesta di pull/merge, i repository/progetti vengono importati nella pagina Catalogo.", + 'addRepositories.approvalTool.github': 'GitHub', + 'addRepositories.approvalTool.gitlab': 'GitLab', + 'addRepositories.repositoryType.title': 'Tipo di repository', + 'addRepositories.repositoryType.repository': 'Repository', + 'addRepositories.repositoryType.organization': 'Organizzazione', + 'addRepositories.repositoryType.project': 'Progetto', + 'addRepositories.repositoryType.group': 'Gruppo', + 'addRepositories.searchPlaceholder': 'Ricerca', + 'addRepositories.clearSearch': 'cancella ricerca', + 'addRepositories.noRepositoriesFound': 'Nessun repository trovato', + 'addRepositories.allRepositoriesAdded': + 'Tutti i repository sono stati aggiunti', + 'addRepositories.noSelection': 'Nessuno', + 'addRepositories.selectRepositories': 'Selezionare repository', + 'addRepositories.selectedRepositories': 'repository', + 'addRepositories.selectedProjects': 'progetti', + 'addRepositories.selectedLabel': 'Selezionato', + 'addRepositories.selectedCount': '{{count}} selezionati', + 'addRepositories.addSelected': 'Aggiungi selezionati', + 'addRepositories.generateCatalogInfo': 'Genera catalog-info.yaml', + 'addRepositories.editPullRequest': 'Modifica richiesta pull', + 'addRepositories.preview': 'Anteprima', + 'catalogInfo.status.generating': 'Generazione', + 'common.add': 'Aggiungi', + 'common.cancel': 'Cancella', + 'common.close': 'Chiudi', + 'common.delete': 'Elimina', + 'common.edit': 'Modifica', + 'common.filter': 'Filtra', + 'common.import': 'Importa', + 'common.remove': 'Rimuovi', + 'common.save': 'Salva', + 'common.select': 'Seleziona', + 'common.update': 'Aggiorna', + 'common.view': 'Visualizza', + 'time.daysAgo': '{{count}} giorno/i fa', + 'time.hoursAgo': '{{count}} ora/e fa', + 'time.minutesAgo': '{{count}} minuto/i fa', + 'time.secondsAgo': '{{count}} secondi fa', + 'previewFile.previewFile': 'Anteprima del file', + 'previewFile.previewFiles': 'Anteprima dei file', + 'previewFile.failedToCreatePR': 'Impossibile creare la richiesta pull', + 'previewFile.prCreationUnsuccessful': + 'La creazione delle richieste pull per alcuni repository non è riuscita. Cliccare su `Modifica` per vedere il motivo.', + 'previewFile.failedToFetchPR': + 'Impossibile recuperare la richiesta pull. Di seguito è stato generato un nuovo YAML.', + 'previewFile.invalidEntityYaml': + "L'entità YAML nella richiesta pull non è valida (file vuoto o apiVersion, kind o metadata.name mancanti). Di seguito è stato generato un nuovo YAML.", + 'previewFile.pullRequestPendingApproval': + '[{{pullRequestText}}]({{pullRequestUrl}}) è in attesa di approvazione', + 'previewFile.pullRequestText': 'richiesta pull', + 'previewFile.viewRepository': 'Visualizza repository', + 'previewFile.closeDrawer': 'Chiudi il riquadro', + 'previewFile.keyValuePlaceholder': 'key1: value2; key2: value2', + 'previewFile.useSemicolonSeparator': + 'Utilizzare il punto e virgola per separare {{label}}', + 'previewFile.preview': 'Anteprima', + 'previewFile.pullRequest.title': 'Richiesta pull', + 'previewFile.pullRequest.mergeRequest': 'Richiesta merge', + 'previewFile.pullRequest.serviceNowTicket': 'Ticket ServiceNow', + 'previewFile.pullRequest.details': 'Dettagli {{tool}}', + 'previewFile.pullRequest.titleLabel': 'Titolo {{tool}}', + 'previewFile.pullRequest.bodyLabel': 'Corpo {{tool}}', + 'previewFile.pullRequest.titlePlaceholder': + 'Aggiungere i file descrittori di entità del catalogo Backstage', + 'previewFile.pullRequest.bodyPlaceholder': + 'Un testo descrittivo con supporto Markdown', + 'previewFile.pullRequest.entityConfiguration': "Configurazione dell'entità", + 'previewFile.pullRequest.componentNameLabel': 'Nome del componente creato', + 'previewFile.pullRequest.componentNamePlaceholder': 'Nome del componente', + 'previewFile.pullRequest.entityOwnerLabel': "Proprietario dell'entità", + 'previewFile.pullRequest.entityOwnerPlaceholder': 'gruppi e utenti', + 'previewFile.pullRequest.entityOwnerHelper': + "Selezionare un proprietario dall'elenco o inserire un riferimento a un gruppo o a un utente", + 'previewFile.pullRequest.loadingText': 'Caricamento di gruppi e utenti', + 'previewFile.pullRequest.previewEntities': 'Anteprima entità', + 'previewFile.pullRequest.annotations': 'Annotazioni', + 'previewFile.pullRequest.labels': 'Etichette', + 'previewFile.pullRequest.spec': 'Specifiche', + 'previewFile.pullRequest.useCodeOwnersFile': + "Utilizzare il file *CODEOWNERS* come Proprietario dell'entità", + 'previewFile.pullRequest.codeOwnersWarning': + 'ATTENZIONE: questa operazione potrebbe non riuscire se la posizione di destinazione non contiene alcun file CODEOWNERS.', + 'forms.footer.createServiceNowTicket': 'Crea un ticket ServiceNow', + 'forms.footer.createServiceNowTickets': 'Crea ticket ServiceNow', + 'forms.footer.createPullRequest': 'Crea richiesta pull', + 'forms.footer.createPullRequests': 'Crea richieste pull', + 'forms.footer.serviceNowTooltip': + 'È necessario generare i file catalog-info.yaml prima di creare un ticket ServiceNow', + 'forms.footer.importTooltip': + "Per l'importazione è necessario generare i file Catalog-info.yaml.", + 'forms.footer.pullRequestTooltip': + 'È necessario generare i file catalog-info.yaml prima di creare una richiesta pull', + 'tasks.tasksFor': 'Attività per {{importJobStatusId}}', + 'tasks.taskId': 'ID attività', + 'tasks.taskLink': 'Collegamento attività', + 'tasks.viewTask': 'Visualizza attività', + 'tasks.loading': 'Caricamento...', + 'tasks.errorFetchingData': 'Errore durante il recupero dei dati', + 'tasks.taskCancelled': 'Attività annullata', + 'tasks.taskCompleted': 'Attività completata', + 'tasks.taskFailed': 'Attività non riuscita', + 'tasks.taskOpen': 'Attività aperta', + 'tasks.taskProcessing': 'Elaborazione delle attività', + 'tasks.taskSkipped': 'Attività ignorata', + }, +}); + +export default bulkImportTranslationIt; diff --git a/workspaces/bulk-import/plugins/bulk-import/src/translations/ja.ts b/workspaces/bulk-import/plugins/bulk-import/src/translations/ja.ts new file mode 100644 index 0000000000..5f35026d8d --- /dev/null +++ b/workspaces/bulk-import/plugins/bulk-import/src/translations/ja.ts @@ -0,0 +1,243 @@ +/* + * 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 { bulkImportTranslationRef } from './ref'; + +/** + * Japanese translation for plugin.bulk-import. + * @public + */ +const bulkImportTranslationJa = createTranslationMessages({ + ref: bulkImportTranslationRef, + messages: { + 'page.title': '一括インポート', + 'page.subtitle': 'Red Hat Developer Hub へのエンティティーのインポート', + 'page.addRepositoriesTitle': 'リポジトリーの追加', + 'page.importEntitiesTitle': 'エンティティーのインポート', + 'page.addRepositoriesSubtitle': + '4 ステップで Red Hat Developer Hub にリポジトリーを追加', + 'page.importEntitiesSubtitle': 'Red Hat Developer Hub へのインポート', + 'page.typeLink': '一括インポート', + 'sidebar.bulkImport': '一括インポート', + 'permissions.title': '権限が必要', + 'permissions.addRepositoriesMessage': + 'リポジトリーを追加するには、管理者に連絡して `bulk.import` 権限を付与してもらうよう依頼してください。', + 'permissions.viewRepositoriesMessage': + '追加されたリポジトリーを表示するには、管理者に連絡して `bulk.import` 権限を付与してもらうよう依頼してください。', + 'repositories.addedRepositories': '追加されたリポジトリー', + 'repositories.importedEntities': 'インポートされたエンティティー', + 'repositories.addedRepositoriesCount': '追加されたリポジトリー ({{count}})', + 'repositories.importedEntitiesCount': + 'インポートされたエンティティー ({{count}})', + 'repositories.noRecordsFound': 'レコードが見つかりません', + 'repositories.refresh': '更新', + 'repositories.import': 'インポート', + 'repositories.removing': '削除中...', + 'repositories.deleteRepository': 'リポジトリーの削除', + 'repositories.removeRepositoryQuestion': + '{{repoName}} {{repositoryText}} を削除しますか?', + 'repositories.repositoryText': 'リポジトリー', + 'repositories.removeRepositoryWarningScaffolder': + 'リポジトリーを削除すると、関連するすべての scaffolder タスク情報も削除されます。', + 'repositories.removeRepositoryWarning': + 'リポジトリーを削除すると、関連するすべての情報がカタログページから消去されます。', + 'repositories.removeRepositoryWarningGitlab': + '削除すると、関連するすべての情報がカタログページから消去されます。', + 'repositories.cannotRemoveRepositoryUrl': + 'リポジトリー URL がないため、リポジトリーを削除できません。', + 'repositories.unableToRemoveRepository': + 'リポジトリーを削除できません。{{error}}', + 'repositories.removeTooltipDisabled': + 'このリポジトリーは app-config ファイルに追加されています。削除するにはファイルを直接変更してください', + 'repositories.removeTooltipRepositoryScaffolder': + 'リポジトリーと関連する scaffolder タスク情報を削除します', + 'repositories.errorOccuredWhileFetching': + 'プルリクエストの取得中にエラーが発生しました', + 'repositories.failedToCreatePullRequest': + 'プルリクエストの作成に失敗しました', + 'repositories.errorOccured': 'エラーが発生しました', + 'repositories.editCatalogInfoTooltip': + 'catalog-info.yaml プルリクエストを編集する', + 'repositories.viewCatalogInfoTooltip': + 'catalog-info.yaml ファイルを表示する', + 'repositories.pr': 'PR', + 'status.alreadyImported': 'インポート済み', + 'status.added': '追加済み', + 'status.waitingForApproval': '承認待ち', + 'status.imported': 'インポート', + 'status.readyToImport': 'インポート準備完了', + 'errors.prErrorPermissions': + '権限が不十分なため、新しい PR を作成できませんでした。管理者に問い合わせてください。', + 'errors.catalogInfoExists': + 'catalog-info.yaml がリポジトリーにすでに存在するため、新しい PR は作成されません。ただし、エンティティーはカタログページに登録されます。', + 'errors.catalogEntityConflict': + 'カタログエンティティーの競合のため、新しい PR を作成できませんでした。', + 'errors.repoEmpty': + 'リポジトリーが空のため、新しい PR を作成できませんでした。最初のコミットをリポジトリーにプッシュしてください。', + 'errors.codeOwnersNotFound': + 'リポジトリーに CODEOWNERS ファイルがありません。新しい PR を作成するには、CODEOWNERS ファイルを追加してください。', + 'errors.errorOccurred': 'エラーが発生しました', + 'errors.failedToCreatePullRequest': 'プルリクエストの作成に失敗しました', + 'validation.componentNameInvalid': + '"{{value}}" は無効です。[a-zA-Z0-9] から成り、[-_.] のいずれかで区切られた一連の文字列 (合計最大 63 文字) が必要です。カタログファイル形式の詳細は、https://github.com/backstage/backstage/blob/master/docs/architecture-decisions/adr002-default-catalog-file-format.md を参照してください', + 'validation.componentNameRequired': 'コンポーネント名は必須です', + 'validation.entityOwnerRequired': 'エンティティー所有者は必須です', + 'validation.titleRequired': '{{approvalTool}} のタイトルは必須です', + 'validation.descriptionRequired': '{{approvalTool}} の説明は必須です', + 'validation.keyValuePairFormat': + '各エントリーは、コロンで区切ったキーと値の形で指定する必要があります。', + 'table.headers.name': '名前', + 'table.headers.url': 'URL', + 'table.headers.repoUrl': 'Git リポジトリー URL', + 'table.headers.organization': '組織', + 'table.headers.organizationGroup': '組織/グループ', + 'table.headers.group': 'グループ', + 'table.headers.status': 'ステータス', + 'table.headers.lastUpdated': '最終更新', + 'table.headers.actions': 'アクション', + 'table.headers.catalogInfoYaml': 'catalog-info.yaml', + 'table.pagination.rows5': '5 行', + 'table.pagination.rows10': '10 行', + 'table.pagination.rows20': '20 行', + 'table.pagination.rows50': '50 行', + 'table.pagination.rows100': '100 行', + 'steps.chooseApprovalTool': + 'PR 作成用の承認ツール (GitHub/GitLab) を選択する', + 'steps.chooseRepositories': '追加するリポジトリーを選択する', + 'steps.chooseItems': 'インポートする項目を選択する', + 'steps.generateCatalogInfo': + '各リポジトリーの catalog-info.yaml ファイルを生成する', + 'steps.generateCatalogInfoItems': + '選択した各項目の catalog-info.yaml ファイルを生成する', + 'steps.editPullRequest': '必要に応じてプルリクエストの詳細を編集する', + 'steps.trackStatus': '承認ステータスを追跡する', + 'addRepositories.approvalTool.title': '承認ツール', + 'addRepositories.approvalTool.description': + 'PR 作成用の承認ツールを選択する', + 'addRepositories.approvalTool.tooltip': + 'インポートには承認が必要です。プル/マージリクエストが承認されると、リポジトリー/プロジェクトがカタログページにインポートされます。', + 'addRepositories.approvalTool.github': 'GitHub', + 'addRepositories.approvalTool.gitlab': 'GitLab', + 'addRepositories.repositoryType.title': 'リポジトリーの種類', + 'addRepositories.repositoryType.repository': 'リポジトリー', + 'addRepositories.repositoryType.organization': '組織', + 'addRepositories.repositoryType.project': 'プロジェクト', + 'addRepositories.repositoryType.group': 'グループ', + 'addRepositories.searchPlaceholder': '検索', + 'addRepositories.clearSearch': '検索のクリア', + 'addRepositories.noRepositoriesFound': 'リポジトリーが見つかりません', + 'addRepositories.allRepositoriesAdded': + 'すべてのリポジトリーが追加されました', + 'addRepositories.noSelection': 'なし', + 'addRepositories.selectRepositories': 'リポジトリーの選択', + 'addRepositories.selectedRepositories': 'リポジトリー', + 'addRepositories.selectedProjects': 'プロジェクト', + 'addRepositories.selectedLabel': '選択済み', + 'addRepositories.selectedCount': '{{count}} 件を選択済み', + 'addRepositories.addSelected': '選択した項目の追加', + 'addRepositories.generateCatalogInfo': 'catalog-info.yaml の生成', + 'addRepositories.editPullRequest': 'プルリクエストの編集', + 'addRepositories.preview': 'プレビュー', + 'catalogInfo.status.generating': '生成中', + 'common.add': '追加', + 'common.cancel': 'キャンセル', + 'common.close': '閉じる', + 'common.delete': '削除', + 'common.edit': '編集', + 'common.filter': 'フィルター', + 'common.import': 'インポート', + 'common.remove': '削除', + 'common.save': '保存', + 'common.select': '選択', + 'common.update': '更新', + 'common.view': '表示', + 'time.daysAgo': '{{count}} 日前', + 'time.hoursAgo': '{{count}} 時間前', + 'time.minutesAgo': '{{count}} 分前', + 'time.secondsAgo': '{{count}} 秒前', + 'previewFile.previewFile': 'ファイルのプレビュー', + 'previewFile.previewFiles': 'ファイルのプレビュー', + 'previewFile.failedToCreatePR': 'PR の作成に失敗しました', + 'previewFile.prCreationUnsuccessful': + '一部のリポジトリーで PR の作成に失敗しました。理由を確認するには、`編集` をクリックしてください。', + 'previewFile.failedToFetchPR': + 'プルリクエストの取得に失敗しました。以下に新しい YAML が生成されました。', + 'previewFile.invalidEntityYaml': + 'プルリクエスト内のエンティティー YAML が無効です (ファイルが空であるか、apiVersion、kind、または metadata.name がありません)。以下に新しい YAML が生成されました。', + 'previewFile.pullRequestPendingApproval': + '[{{pullRequestText}}]({{pullRequestUrl}}) は承認待ちです', + 'previewFile.pullRequestText': 'プルリクエスト', + 'previewFile.viewRepository': 'リポジトリーの表示', + 'previewFile.closeDrawer': 'ドロワーを閉じる', + 'previewFile.keyValuePlaceholder': 'key1: value2; key2: value2', + 'previewFile.useSemicolonSeparator': + 'セミコロンを使用して {{label}} を区切ってください', + 'previewFile.preview': 'プレビュー', + 'previewFile.pullRequest.title': 'プルリクエスト', + 'previewFile.pullRequest.mergeRequest': 'マージリクエスト', + 'previewFile.pullRequest.serviceNowTicket': 'ServiceNow チケット', + 'previewFile.pullRequest.details': '{{tool}} の詳細', + 'previewFile.pullRequest.titleLabel': '{{tool}} のタイトル', + 'previewFile.pullRequest.bodyLabel': '{{tool}} のボディー', + 'previewFile.pullRequest.titlePlaceholder': + 'Backstage カタログエンティティー記述子ファイルの追加', + 'previewFile.pullRequest.bodyPlaceholder': '説明文 (Markdown 対応)', + 'previewFile.pullRequest.entityConfiguration': 'エンティティー設定', + 'previewFile.pullRequest.componentNameLabel': + '作成されるコンポーネントの名前', + 'previewFile.pullRequest.componentNamePlaceholder': 'コンポーネント名', + 'previewFile.pullRequest.entityOwnerLabel': 'エンティティー所有者', + 'previewFile.pullRequest.entityOwnerPlaceholder': 'グループとユーザー', + 'previewFile.pullRequest.entityOwnerHelper': + 'リストから所有者を選択するか、グループまたはユーザーへの参照を入力してください', + 'previewFile.pullRequest.loadingText': + 'グループとユーザーを読み込んでいます', + 'previewFile.pullRequest.previewEntities': 'エンティティーのプレビュー', + 'previewFile.pullRequest.annotations': 'アノテーション', + 'previewFile.pullRequest.labels': 'ラベル', + 'previewFile.pullRequest.spec': '仕様', + 'previewFile.pullRequest.useCodeOwnersFile': + 'エンティティー所有者として *CODEOWNERS* ファイルを使用する', + 'previewFile.pullRequest.codeOwnersWarning': + '警告: ターゲットの場所に CODEOWNERS ファイルが見つからない場合、失敗する可能性があります。', + 'forms.footer.createServiceNowTicket': 'ServiceNow チケットの作成', + 'forms.footer.createServiceNowTickets': 'ServiceNow チケットの作成', + 'forms.footer.createPullRequest': 'プルリクエストの作成', + 'forms.footer.createPullRequests': 'プルリクエストの作成', + 'forms.footer.serviceNowTooltip': + 'ServiceNow チケットを作成する前に、Catalog-info.yaml ファイルを生成する必要があります', + 'forms.footer.importTooltip': + 'インポート用に Catalog-info.yaml ファイルを生成する必要があります。', + 'forms.footer.pullRequestTooltip': + 'プルリクエストを作成する前に、Catalog-info.yaml ファイルを生成する必要があります', + 'tasks.tasksFor': '{{importJobStatusId}} のタスク', + 'tasks.taskId': 'タスク ID', + 'tasks.taskLink': 'タスクのリンク', + 'tasks.viewTask': 'タスクの表示', + 'tasks.loading': '読み込み中...', + 'tasks.errorFetchingData': 'データの取得中にエラーが発生しました', + 'tasks.taskCancelled': 'キャンセルされたタスク', + 'tasks.taskCompleted': '完了したタスク', + 'tasks.taskFailed': '失敗したタスク', + 'tasks.taskOpen': '未処理のタスク', + 'tasks.taskProcessing': '処理中のタスク', + 'tasks.taskSkipped': 'スキップされたタスク', + }, +}); + +export default bulkImportTranslationJa; diff --git a/workspaces/extensions/.changeset/sixty-tigers-cough.md b/workspaces/extensions/.changeset/sixty-tigers-cough.md new file mode 100644 index 0000000000..3497357dbf --- /dev/null +++ b/workspaces/extensions/.changeset/sixty-tigers-cough.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-marketplace': patch +--- + +Added 'it' and 'ja' i18n support and updated 'fr' translation strings. diff --git a/workspaces/extensions/plugins/extensions/src/translations/fr.ts b/workspaces/extensions/plugins/extensions/src/translations/fr.ts index 0a0ee24119..ac9cd04116 100644 --- a/workspaces/extensions/plugins/extensions/src/translations/fr.ts +++ b/workspaces/extensions/plugins/extensions/src/translations/fr.ts @@ -1,5 +1,5 @@ /* - * Copyright The Backstage Authors + * 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. @@ -21,287 +21,287 @@ const extensionsTranslationFr = createTranslationMessages({ ref: extensionsTranslationRef, full: true, messages: { - 'actions.actions': 'Actes', - 'actions.disable': 'Désactiver', - 'actions.edit': 'Modifier', - 'actions.editConfiguration': 'Modifier', - 'actions.editTitle': 'Modifier les configurations {{displayName}}', - 'actions.enable': 'Activer', - 'actions.install': 'Installer', - 'actions.installTitle': 'Installer {{displayName}}', - 'actions.pluginConfigurations': 'Configurations des plugins', - 'actions.packageConfiguration': 'Configuration du paquet', - 'actions.pluginCurrentlyDisabled': 'Plugin actuellement désactivé', - 'actions.pluginCurrentlyEnabled': 'Plugin actuellement activé', - 'actions.packageCurrentlyEnabled': 'Paquet actuellement activé', - 'actions.packageCurrentlyDisabled': 'Paquet actuellement désactivé', - 'actions.view': 'Voir', - 'alert.backendRestartRequired': 'Redémarrage du backend requis', - 'alert.extensionsExample': - "Pour l'activer, ajoutez ou modifiez la configuration des extensions dans votre fichier de configuration des plugins dynamiques.", + 'header.title': 'Extensions', + 'header.extensions': 'Extensions', + 'header.catalog': 'Catalogue', + 'header.installedPackages': 'Paquets installés', + 'header.installedPackagesWithCount': 'Paquets installés ({{count}})', + 'header.pluginsPage': 'Plugins', + 'header.packagesPage': 'Paquets', + 'header.collectionsPage': 'Collections', + 'button.install': 'Installer', + 'button.uninstall': 'Désinstaller', + 'button.enable': 'Activer', + 'button.disable': 'Désactiver', + 'button.update': 'Mise à jour', + 'button.save': 'Sauvegarder', + 'button.close': 'Fermer', + 'button.viewAll': 'Voir tous les plugins', + 'button.viewDocumentation': 'Voir la documentation', + 'button.viewInstalledPlugins': 'Afficher les plugins installés ({{count}})', + 'button.restart': 'Redémarrage requis', + 'status.notInstalled': 'Non installé', + 'status.installed': 'Installé', + 'status.disabled': 'Désactivé', + 'status.partiallyInstalled': 'Partiellement installé', + 'status.updateAvailable': 'Mise à jour disponible', + 'role.backend': 'Backend', + 'role.backendModule': 'Module backend', + 'role.frontend': "L'extrémité avant", + 'emptyState.noPluginsFound': 'Aucun plugin trouvé', + 'emptyState.mustEnableBackend': 'Doit activer le plugin backend Extensions', + 'emptyState.noPluginsDescription': + "Une erreur s'est produite lors du chargement des plugins. Vérifiez votre configuration ou consultez la documentation du plugin pour résoudre le problème. Vous pouvez également explorer d’autres plugins disponibles.", + 'emptyState.configureBackend': + "Configurez le plugin '@red-hat-developer-hub/backstage-plugin-extensions-backend'.", + 'alert.productionDisabled': + "L'installation du plugin est désactivée dans l'environnement de production.", 'alert.installationDisabled': "L'installation du plugin est désactivée.", 'alert.missingDynamicArtifact': - 'Ce paquet ne peut pas être géré. Pour activer les actions, une entité de catalogue avec le **spec.dynamicArtifact** requis doit être ajoutée.', + 'Impossible de gérer ce paquet. Pour activer les actions, un catalogue avec l’ **spec.dynamicArtifact** requis doit être ajouté.', 'alert.missingDynamicArtifactTitle': 'Le paquet ne peut pas être modifié', 'alert.missingDynamicArtifactForPlugin': - 'Ce plugin ne peut pas être géré. Pour activer les actions, une entité de catalogue avec le **spec.dynamicArtifact** requis doit être ajoutée à tous les paquets associés.', + 'Impossible de gérer ce plugin. Pour activer les actions, un catalogue avec l’ **spec.dynamicArtifact** requis doit être ajouté.', 'alert.missingDynamicArtifactTitlePlugin': 'Le plugin ne peut pas être modifié', - 'alert.multiplePluginRestart': - "Vous avez **{{count}}** plugins qui nécessitent un redémarrage de votre système backend pour terminer l'installation, la mise à jour, l'activation ou la désactivation.", - 'alert.productionDisabled': - "L'installation du plugin est désactivée dans l'environnement de production.", - 'alert.restartRequired': '{{count}} plugins installés', + 'alert.extensionsExample': + 'Pour l’activer, ajouter ou modifier la configuration des extensions dans votre fichier de configuration dynamic-plugins.', 'alert.singlePluginRestart': "Le plugin **{{pluginName}}** nécessite un redémarrage du système backend pour terminer l'installation, la mise à jour, l'activation ou la désactivation.", + 'alert.multiplePluginRestart': + "Vous avez **{{count}}** plugins qui nécessitent un redémarrage de votre système backend pour terminer l'installation, la mise à jour, l'activation ou la désactivation.", 'alert.singlePackageRestart': - "Le paquet **{{packageName}}** nécessite un redémarrage du système backend pour terminer l'installation, la mise à jour, l'activation ou la désactivation.", + 'Le paquet **{{packageName}}** nécessite un redémarrage du système backend pour terminer d’installer, mettre à jour, activer ou désactiver.', 'alert.multiplePackageRestart': - "Vous avez **{{count}}** paquets qui nécessitent un redémarrage de votre système backend pour terminer l'installation, la mise à jour, l'activation ou la désactivation.", + 'Vous avez **{{count}}** paquets nécessitant un redémarrge de votre système backend pour terminer d’installer, mettre à jour, activer ou désactiver.', + 'alert.restartRequired': '{{count}} plugins installés', + 'alert.backendRestartRequired': 'Redémarrage du backend requis', 'alert.viewPlugins': 'Afficher les plugins', 'alert.viewPackages': 'Afficher les paquets', - 'aria.closeDialog': 'Fermer la boîte de dialogue', - 'aria.collapseSection': 'Réduire la section', - 'aria.expandSection': 'Développer la section', - 'aria.filterBy': 'Filtrer par {{field}}', - 'aria.openPlugin': 'Ouvrir le plugin {{name}}', - 'aria.sortBy': 'Trier par {{field}}', - 'badges.addedByAdmin': "Plugins ajoutés par l'administrateur", - 'badges.certified': 'Certifié', - 'badges.certifiedBy': 'Certifié par {{provider}}', - 'badges.communityPlugin': 'Plugin communautaire', - 'badges.customPlugin': 'Plugin personnalisé', - 'badges.devPreview': 'Aperçu du développement (DP)', - 'badges.earlyStageExperimental': - 'Un plugin expérimental en phase de démarrage', - 'badges.gaAndSupported': 'Généralement disponible (GA) et pris en charge', - 'badges.gaAndSupportedBy': - 'Généralement disponible (GA) et pris en charge par {{provider}}', - 'badges.generallyAvailable': 'Généralement disponible (GA)', - 'badges.openSourceNoSupport': - 'Plugins open source, pas de support officiel', - 'badges.pluginInDevelopment': 'Plugin toujours en développement', - 'badges.productionReady': 'Prêt pour la production et pris en charge', - 'badges.productionReadyBy': - 'Prêt pour la production et pris en charge par {{provider}}', - 'badges.stableAndSecured': 'Stable et sécurisé par {{provider}}', - 'badges.techPreview': 'Aperçu technique (TP)', - 'badges.verified': 'Vérifié', - 'badges.verifiedBy': 'Vérifié par {{provider}}', - 'button.close': 'Fermer', - 'button.disable': 'Désactiver', - 'button.enable': 'Activer', - 'button.install': 'Installer', - 'button.restart': 'Redémarrage requis', - 'button.save': 'Sauvegarder', - 'button.uninstall': 'Désinstaller', - 'button.update': 'Mise à jour', - 'button.viewAll': 'Voir tous les plugins', - 'button.viewDocumentation': 'Voir la documentation', - 'button.viewInstalledPlugins': 'Afficher les plugins installés ({{count}})', - 'collection.featured.description': - 'Une collection organisée de plugins recommandés pour la plupart des utilisateurs', - 'collection.featured.title': 'Plugins en vedette', - 'collection.kubernetes': 'Kubernetes', - 'collection.monitoring': 'Surveillance', - 'collection.pluginCount': '{{count}} plugins', - 'collection.security': 'Sécurité', - 'collection.viewMore': 'Voir plus', - 'common.apply': 'Appliquer', + 'search.placeholder': 'Recherche', + 'search.clear': 'Effacer la recherche', + 'search.filter': 'Filtre', + 'search.clearFilter': 'Effacer le filtre', + 'search.category': 'Catégorie', + 'search.author': 'Auteur', + 'search.supportType': 'Type de support', + 'search.noResults': + 'Aucun plugin ne correspond à vos critères de recherche', + 'search.filterBy': 'Filtrer par', + 'search.clearFilters': 'Effacer les filtres', + 'search.noResultsFound': + 'Aucun résultat trouvé. Ajustez vos filtres et réessayez.', + 'common.links': 'Links', 'common.by': ' par ', - 'common.close': 'Fermer', 'common.comma': ', ', - 'common.couldNotApplyYaml': "Impossible d'appliquer YAML : {{error}}", - 'common.links': 'Links', 'common.noDescriptionAvailable': 'aucune description disponible', 'common.readMore': 'En savoir plus', + 'common.close': 'Fermer', + 'common.apply': 'Appliquer', + 'common.couldNotApplyYaml': "Impossible d'appliquer YAML : {{error}}", 'dialog.backendRestartRequired': 'Redémarrage du backend requis', 'dialog.packageRestartMessage': 'Pour terminer les modifications du paquet, redémarrez votre système backend.', 'dialog.pluginRestartMessage': 'Pour terminer les modifications du plugin, redémarrez votre système backend.', - 'emptyState.configureBackend': - "Configurez le plugin '@red-hat-developer-hub/backstage-plugin-extensions-backend'.", - 'emptyState.mustEnableBackend': 'Doit activer le plugin backend Extensions', - 'emptyState.noPluginsDescription': - "Une erreur s'est produite lors du chargement des plugins. Vérifiez votre configuration ou consultez la documentation du plugin pour résoudre le problème. Vous pouvez également explorer d’autres plugins disponibles.", - 'emptyState.noPluginsFound': 'Aucun plugin trouvé', - error: "Une erreur s'est produite", - 'errors.fileNotExists': - "Le fichier de configuration est incorrect, mal orthographié ou n'existe pas", - 'errors.fileNotExistsMessage': - "{{message}}. Veuillez revérifier le nom de fichier spécifié dans votre app-config.yaml si vous souhaitez activer cet outil comme indiqué dans l'exemple ci-dessous :", - 'errors.invalidConfigFile': 'Fichier de configuration non valide', - 'errors.invalidConfigMessage': - "Échec du chargement de « extensions.installation.saveToSingleFile.file ». {{message}}. Fournissez une configuration d'installation valide si vous souhaitez activer cet outil. Modifiez votre fichier dynamic-plugins.yaml comme indiqué dans l'exemple ci-dessous :", - 'errors.missingConfigFile': 'Fichier de configuration manquant', - 'errors.missingConfigMessage': - "{{message}}. Vous devez l'ajouter à votre app-config.yaml si vous souhaitez activer cet outil. Modifiez le fichier app-config.yaml comme indiqué dans l'exemple ci-dessous :", - 'errors.unknownError': - 'Erreur lors de la lecture du fichier de configuration. ', - 'header.catalog': 'Catalogue', - 'header.collectionsPage': 'Collections', - 'header.extensions': 'Extensions', - 'header.installedPackages': 'Paquets installés', - 'header.installedPackagesWithCount': 'Paquets installés ({{count}})', - 'header.packagesPage': 'Packages', - 'header.pluginsPage': 'Plugins', - 'header.title': 'Extensions', - 'install.aboutPlugin': 'À propos du plugin', - 'install.allPackages': 'Tous les paquets', - 'install.back': 'Arrière', - 'install.cancel': 'Annuler', - 'install.configurationRequired': 'Configuration requise', - 'install.customConfiguration': 'Configuration personnalisée', - 'install.download': 'Télécharger', - 'install.editInstructions': 'Modifier les instructions', - 'install.error': "Échec de l'installation du plugin", - 'install.errors.failedToSave': 'Échec de la sauvegarde', - 'install.errors.missingPackageField': - "Contenu de l'éditeur non valide : champ « package » manquant dans l'élément", - 'install.errors.missingPackageItem': - "Contenu de l'éditeur non valide : élément de package manquant", - 'install.errors.missingPluginsList': - "Contenu de l'éditeur non valide : liste des « plugins » manquante", - 'install.examples': 'Exemples', - 'install.installBackend': 'Installer le plugin back-end', - 'install.installFrontend': 'Installer le plugin frontal', - 'install.installProgress': 'Installation...', - 'install.installTemplates': 'Installer des modèles de logiciels', - 'install.installationInstructions': "Instructions d'installation", - 'install.instructions': 'Instructions', - 'install.optional': 'Facultatif', - 'install.packageUpdated': 'Paquet mis à jour', - 'install.packageEnabled': 'Paquet activé', - 'install.packageDisabled': 'Paquet désactivé', - 'install.pluginEnabled': 'Plugin activé', - 'install.pluginDisabled': 'Plugin désactivé', - 'install.pluginInstalled': 'Plugin installé', - 'install.pluginTabs': 'Onglets de plugins', - 'install.pluginUpdated': 'Plugin mis à jour', - 'install.required': 'Requis', - 'install.reset': 'Réinitialiser', - 'install.selectPackages': 'Sélectionnez les packages à installer', - 'install.settingUpPlugin': 'Configuration du plugin', - 'install.success': 'Plugin installé avec succès', - 'install.title': 'Installer le plugin', - 'installedPackages.table.columns.actions': 'Actes', + 'plugin.description': 'Description', + 'plugin.documentation': 'Documentation', + 'plugin.repository': 'Dépôt', + 'plugin.license': 'Licence', + 'plugin.version': 'Version', + 'plugin.author': 'Auteur', + 'plugin.authors': 'Auteurs', + 'plugin.tags': 'Mots-clés', + 'plugin.dependencies': 'Dépendances', + 'plugin.configuration': 'Configuration', + 'plugin.installation': 'Installation', + 'package.name': 'Nom du paquet :', + 'package.version': 'Version:', + 'package.dynamicPluginPath': 'Chemin du plugin dynamique :', + 'package.backstageRole': 'Rôle backstage:', + 'package.supportedVersions': 'Versions prises en charge :', + 'package.author': 'Auteur:', + 'package.support': 'Support:', + 'package.lifecycle': 'Cycle de vie:', + 'package.highlights': 'Points forts', + 'package.about': 'À propos', + 'package.notFound': 'Paquet {{namespace}}/{{name}} introuvable !', + 'package.notAvailable': 'Paquet {{name}} non disponible', + 'package.ensureCatalogEntity': + "Veillez à ce que l'entité de catalogue existe pour ce paquet.", + 'table.packageName': 'Nom du paquet', + 'table.version': 'Version', + 'table.role': 'Rôle', + 'table.supportedVersion': 'Version prise en charge', + 'table.status': 'Statut', + 'table.name': 'Nom', + 'table.action': 'Action', + 'table.description': 'Description', + 'table.versions': 'Versions', + 'table.plugins': 'Plugins', + 'table.packages': 'Paquets', + 'table.pluginsCount': 'Plugins ({{count}})', + 'table.packagesCount': 'Paquets ({{count}})', + 'table.pluginsTable': 'Tableau des plugins', + 'installedPackages.table.title': 'Paquets installés ({{count}})', + 'installedPackages.table.searchPlaceholder': 'Recherche', 'installedPackages.table.columns.name': 'Nom', - 'installedPackages.table.columns.packageName': 'nom du package npm', + 'installedPackages.table.columns.packageName': 'nom du paquet npm', 'installedPackages.table.columns.role': 'Rôle', 'installedPackages.table.columns.version': 'Version', - 'installedPackages.table.emptyMessages.noRecords': - 'Aucun enregistrement à afficher', - 'installedPackages.table.emptyMessages.noResults': - 'Aucun résultat trouvé. Essayez un autre terme de recherche.', - 'installedPackages.table.searchPlaceholder': 'Rechercher', - 'installedPackages.table.title': 'Paquets installés ({{count}})', + 'installedPackages.table.columns.actions': 'Actes', 'installedPackages.table.tooltips.packageProductionDisabled': - "Le paquet ne peut pas être géré dans l'environnement de production.", + 'Le paquet ne peut pas être géré en environnement de production.', 'installedPackages.table.tooltips.installationDisabled': - "Le paquet ne peut pas être géré car l'installation de plugins est désactivée. Pour l'activer, ajoutez ou modifiez la configuration des extensions dans votre fichier de configuration des plugins dynamiques.", + 'Le paquet ne peut pas être géré car le plugin d’installation est désactivé. Pour l’activer, ajouter ou modifier la configuration des extensions dans votre fichier de configuration dynamic-plugins.', 'installedPackages.table.tooltips.enableActions': - 'Pour activer les actions, ajoutez une entité de catalogue pour ce package', + 'Pour activer les actions, ajoutez une entité de catalogue pour ce paquet', 'installedPackages.table.tooltips.noDownloadPermissions': - "Vous n'avez pas la permission de télécharger la configuration. Contactez votre administrateur pour demander un accès ou une assistance.", + 'Vous n’avez pas l’autorisation de télécharger la configuration. Contactez votre administrateur pour demander un accès ou une assistance.', 'installedPackages.table.tooltips.noEditPermissions': - "Vous n'avez pas la permission de modifier la configuration. Contactez votre administrateur pour demander un accès ou une assistance.", + 'Vous n’avez pas la permission de modifier la configuration. Contactez votre administrateur pour demander un accès ou une assistance.', 'installedPackages.table.tooltips.noTogglePermissions': - "Vous n'avez pas la permission d'activer ou de désactiver les paquets. Contactez votre administrateur pour demander un accès ou une assistance.", + 'Vous n’avez pas la permission d’activer ou de désactiver les paquets. Contactez votre administrateur pour demander un accès ou une assistance.', 'installedPackages.table.tooltips.editPackage': 'Modifier la configuration du paquet', 'installedPackages.table.tooltips.downloadPackage': 'Télécharger la configuration du paquet', 'installedPackages.table.tooltips.enablePackage': 'Activer le paquet', 'installedPackages.table.tooltips.disablePackage': 'Désactiver le paquet', - loading: 'Chargement en cours...', - 'metadata.about': 'À propos', + 'installedPackages.table.emptyMessages.noResults': + 'Aucun résultat trouvé. Essayez un autre terme de recherche.', + 'installedPackages.table.emptyMessages.noRecords': + 'Aucun enregistrement à afficher', + 'actions.install': 'Installer', + 'actions.view': 'Voir', + 'actions.edit': 'Modifier', + 'actions.enable': 'Activer', + 'actions.disable': 'Désactiver', + 'actions.actions': 'Actes', + 'actions.editConfiguration': 'Modifier', + 'actions.pluginConfigurations': 'Configurations des plugins', + 'actions.packageConfiguration': 'Configuration du paquet', + 'actions.pluginCurrentlyEnabled': 'Plugin actuellement activé', + 'actions.pluginCurrentlyDisabled': 'Plugin actuellement désactivé', + 'actions.packageCurrentlyEnabled': 'Paquet actuellement activé', + 'actions.packageCurrentlyDisabled': 'Paquet actuellement désactivé', + 'actions.installTitle': 'Installer {{displayName}}', + 'actions.editTitle': 'Modifier les configurations {{displayName}}', 'metadata.by': ' par ', 'metadata.comma': ', ', - 'metadata.highlights': 'Points forts', - 'metadata.pluginNotFound': 'Plugin {{name}} non trouvé !', - 'metadata.pluginNotAvailable': "Le plugin {{name}} n'est pas disponible", + 'metadata.pluginNotFound': 'Plugin {{name}} non trouvé !', + 'metadata.pluginNotAvailable': 'Plugin {{name}} non disponible', 'metadata.ensureCatalogEntityPlugin': - "Assurez-vous qu'une entité de catalogue existe pour ce plugin.", + 'Veillez à ce que l’entité de catalogue existe pour ce paquet.', + 'metadata.highlights': 'Points forts', + 'metadata.about': 'À propos', 'metadata.publisher': 'Éditeur', 'metadata.supportProvider': 'Fournisseur de support', - 'metadata.entryName': "Nom d'entrée", - 'metadata.bySomeone': "par quelqu'un", + 'metadata.entryName': 'Nom de l’entrée', + 'metadata.bySomeone': 'par quelqu’un', 'metadata.category': 'Catégorie', 'metadata.versions': 'Versions', - 'metadata.backstageCompatibility': 'Version de compatibilité Backstage', - 'package.about': 'À propos', - 'package.author': 'Auteur:', - 'package.backstageRole': 'Rôle backstage:', - 'package.dynamicPluginPath': 'Chemin du plugin dynamique :', - 'package.highlights': 'Points forts', - 'package.lifecycle': 'Cycle de vie:', - 'package.name': 'Nom du package :', - 'package.notFound': 'Paquet {{namespace}}/{{name}} introuvable !', - 'package.notAvailable': "Le paquet {{name}} n'est pas disponible", - 'package.ensureCatalogEntity': - "Assurez-vous qu'une entité de catalogue existe pour ce paquet.", - 'package.support': 'Support:', - 'package.supportedVersions': 'Versions prises en charge :', - 'package.version': 'Version:', - 'plugin.author': 'Auteur', - 'plugin.authors': 'Auteurs', - 'plugin.configuration': 'Configuration', - 'plugin.dependencies': 'Dépendances', - 'plugin.description': 'Description', - 'plugin.documentation': 'Documentation', - 'plugin.installation': 'Installation', - 'plugin.license': 'Licence', - 'plugin.repository': 'Dépôt', - 'plugin.tags': 'Mots-clés', - 'plugin.version': 'Version', - retry: 'Réessayer', - 'role.backend': 'Backend', - 'role.backendModule': 'Module backend', - 'role.frontend': "L'extrémité avant", - 'search.author': 'Auteur', - 'search.category': 'Catégorie', - 'search.clear': 'Effacer la recherche', - 'search.clearFilter': 'Effacer le filtre', - 'search.clearFilters': 'Effacer les filtres', - 'search.filter': 'Filtre', - 'search.filterBy': 'Filtrer par', - 'search.noResults': - 'Aucun plugin ne correspond à vos critères de recherche', - 'search.noResultsFound': - 'Aucun résultat trouvé. Ajustez vos filtres et réessayez.', - 'search.placeholder': 'Rechercher', - 'search.supportType': 'Type de support', - 'status.disabled': 'Désactivé', - 'status.installed': 'Installé', - 'status.notInstalled': 'Non installé', - 'status.partiallyInstalled': 'Partiellement installé', - 'status.updateAvailable': 'Mise à jour disponible', + 'metadata.backstageCompatibility': 'Version de compatibilité backstage', 'supportTypes.certifiedBy': 'Certifié par {{value}} ({{count}})', - 'supportTypes.customPlugins': 'Plugins personnalisés ({{count}})', 'supportTypes.verifiedBy': 'Vérifié par {{value}} ({{count}})', - 'table.action': 'Action', - 'table.description': 'Description', - 'table.name': 'Nom', - 'table.packageName': 'Nom du package', - 'table.packages': 'Packages', - 'table.packagesCount': 'Paquets ({{count}})', - 'table.plugins': 'Plugins', - 'table.pluginsCount': 'Plugins ({{count}})', - 'table.pluginsTable': 'Tableau des plugins', - 'table.role': 'Rôle', - 'table.status': 'Statut', - 'table.supportedVersion': 'Version prise en charge', - 'table.version': 'Version', - 'table.versions': 'Versions', + 'supportTypes.customPlugins': 'Plugins personnalisés ({{count}})', + 'collection.kubernetes': 'Kubernetes', + 'collection.monitoring': 'Surveillance', + 'collection.security': 'Sécurité', + 'collection.viewMore': 'Voir davantage', + 'collection.pluginCount': '{{count}} plugins', + 'collection.featured.title': 'Plugins en vedette', + 'collection.featured.description': + 'Une collection organisée de plugins recommandés pour la plupart des utilisateurs', + 'install.title': 'Installer le plugin', + 'install.configurationRequired': 'Configuration requise', + 'install.optional': 'Facultatif', + 'install.required': 'Requis', + 'install.selectPackages': 'Sélectionnez les paquets à installer', + 'install.allPackages': 'Tous les paquets', + 'install.customConfiguration': 'Configuration personnalisée', + 'install.installProgress': 'Installation...', + 'install.success': 'Plugin installé avec succès', + 'install.error': "Échec de l'installation du plugin", + 'install.installFrontend': 'Installer le plugin frontal', + 'install.installBackend': 'Installer le plugin back-end', + 'install.installTemplates': 'Installer des modèles de logiciels', + 'install.installationInstructions': "Instructions d'installation", + 'install.download': 'Télécharger', + 'install.examples': 'Exemples', + 'install.cancel': 'Annuler', + 'install.reset': 'Réinitialiser', + 'install.pluginTabs': 'Onglets de plugins', + 'install.settingUpPlugin': 'Configuration du plugin', + 'install.aboutPlugin': 'À propos du plugin', + 'install.pluginUpdated': 'Plugin mis à jour', + 'install.pluginInstalled': 'Plugin installé', + 'install.instructions': 'Instructions', + 'install.editInstructions': 'Modifier les instructions', + 'install.back': 'Retour', + 'install.packageUpdated': 'Paquet mis à jour', + 'install.packageEnabled': 'Paquet activé', + 'install.packageDisabled': 'Paquet non activé', + 'install.pluginEnabled': 'Plugin activé', + 'install.pluginDisabled': 'Plugin non activé', + 'install.errors.missingPluginsList': + "Contenu de l'éditeur non valide : liste des « plugins » manquante", + 'install.errors.missingPackageItem': + "Contenu de l'éditeur non valide : élément de paquet manquant", + 'install.errors.missingPackageField': + "Contenu de l'éditeur non valide : champ « package » manquant dans l'élément", + 'install.errors.failedToSave': 'Échec de la sauvegarde', + loading: 'Chargement en cours...', + error: "Une erreur s'est produite", + retry: 'Réessayer', + 'errors.missingConfigFile': 'Fichier de configuration manquant', + 'errors.missingConfigMessage': + "{{message}}. Vous devez l'ajouter à votre app-config.yaml si vous souhaitez activer cet outil. Modifiez le fichier app-config.yaml comme indiqué dans l'exemple ci-dessous :", + 'errors.invalidConfigFile': 'Fichier de configuration non valide', + 'errors.invalidConfigMessage': + "Échec du chargement de « extensions.installation.saveToSingleFile.file ». {{message}}. Fournissez une configuration d'installation valide si vous souhaitez activer cet outil. Modifiez votre fichier dynamic-plugins.yaml comme indiqué dans l'exemple ci-dessous :", + 'errors.fileNotExists': + "Le fichier de configuration est incorrect, mal orthographié ou n'existe pas", + 'errors.fileNotExistsMessage': + "{{message}}. Veuillez revérifier le nom de fichier spécifié dans votre app-config.yaml si vous souhaitez activer cet outil comme indiqué dans l'exemple ci-dessous :", + 'errors.unknownError': + 'Erreur lors de la lecture du fichier de configuration. ', + 'tooltips.productionDisabled': + "L'installation du plugin est désactivée dans l'environnement de production.", 'tooltips.extensionsDisabled': - "L'installation du plugin est désactivée. Pour l'activer, ajoutez ou modifiez la configuration des extensions dans votre fichier de configuration des plugins dynamiques.", + "L'installation du plugin est désactivée. Pour l’activer, ajouter ou modifier la configuration des extensions dans votre fichier de configuration dynamic-plugins.", 'tooltips.noPermissions': "Vous n'avez pas l'autorisation d'installer des plugins ou d'afficher leurs configurations. Contactez votre administrateur pour demander un accès ou une assistance.", - 'tooltips.productionDisabled': - "L'installation du plugin est désactivée dans l'environnement de production.", 'tooltips.missingDynamicArtifact': - 'Ce {{type}} ne peut pas être géré. Pour activer les actions, une entité de catalogue avec le spec.dynamicArtifact requis doit être ajoutée.', + 'Impossible de gérer ce {{type}}. Pour activer les actions, un catalogue avec le spec.dynamicArtifact requis doit être ajouté.', + 'aria.openPlugin': 'Ouvrir le plugin {{name}}', + 'aria.closeDialog': 'Fermer la boîte de dialogue', + 'aria.expandSection': 'Développer la section', + 'aria.collapseSection': 'Réduire la section', + 'aria.sortBy': 'Trier par {{field}}', + 'aria.filterBy': 'Filtrer par {{field}}', + 'badges.certified': 'Certifié', + 'badges.certifiedBy': 'Certifié par {{provider}}', + 'badges.verified': 'Vérifié', + 'badges.verifiedBy': 'Vérifié par {{provider}}', + 'badges.customPlugin': 'Plugin personnalisé', + 'badges.stableAndSecured': 'Stable et sécurisé par {{provider}}', + 'badges.generallyAvailable': 'Généralement disponible (GA)', + 'badges.gaAndSupportedBy': + 'Généralement disponible (GA) et pris en charge par {{provider}}', + 'badges.gaAndSupported': 'Généralement disponible (GA) et pris en charge', + 'badges.productionReadyBy': + 'Prêt pour la production et pris en charge par {{provider}}', + 'badges.productionReady': 'Prêt pour la production et pris en charge', + 'badges.communityPlugin': 'Plugin communautaire', + 'badges.openSourceNoSupport': + 'Plugins open source, pas de support officiel', + 'badges.techPreview': 'Aperçu technique (TP)', + 'badges.pluginInDevelopment': 'Plugin toujours en développement', + 'badges.devPreview': 'Aperçu du développement (DP)', + 'badges.earlyStageExperimental': + 'Un plugin expérimental en phase de démarrage', + 'badges.addedByAdmin': "Plugins ajoutés par l'administrateur", }, }); diff --git a/workspaces/extensions/plugins/extensions/src/translations/it.ts b/workspaces/extensions/plugins/extensions/src/translations/it.ts index 057cca9163..478da20bf9 100644 --- a/workspaces/extensions/plugins/extensions/src/translations/it.ts +++ b/workspaces/extensions/plugins/extensions/src/translations/it.ts @@ -1,5 +1,5 @@ /* - * Copyright The Backstage Authors + * 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. @@ -21,7 +21,6 @@ const extensionsTranslationIt = createTranslationMessages({ ref: extensionsTranslationRef, full: true, messages: { - // Page headers and titles 'header.title': 'Estensioni', 'header.extensions': 'Estensioni', 'header.catalog': 'Catalogo', @@ -29,9 +28,7 @@ const extensionsTranslationIt = createTranslationMessages({ 'header.installedPackagesWithCount': 'Pacchetti installati ({{count}})', 'header.pluginsPage': 'Plugin', 'header.packagesPage': 'Pacchetti', - 'header.collectionsPage': 'Collezioni', - - // Navigation and buttons + 'header.collectionsPage': 'Raccolte', 'button.install': 'Installa', 'button.uninstall': 'Disinstalla', 'button.enable': 'Abilita', @@ -40,90 +37,75 @@ const extensionsTranslationIt = createTranslationMessages({ 'button.save': 'Salva', 'button.close': 'Chiudi', 'button.viewAll': 'Visualizza tutti i plugin', - 'button.viewDocumentation': 'Visualizza documentazione', - 'button.viewInstalledPlugins': 'Visualizza plugin installati ({{count}})', - 'button.restart': 'Riavvio richiesto', - - // Status labels + 'button.viewDocumentation': 'Visualizza la documentazione', + 'button.viewInstalledPlugins': 'Visualizza i plugin installati ({{count}})', + 'button.restart': 'È necessario riavviare', 'status.notInstalled': 'Non installato', 'status.installed': 'Installato', 'status.disabled': 'Disabilitato', 'status.partiallyInstalled': 'Parzialmente installato', 'status.updateAvailable': 'Aggiornamento disponibile', - - // Role labels 'role.backend': 'Backend', 'role.backendModule': 'Modulo backend', 'role.frontend': 'Frontend', - - // Empty states and errors 'emptyState.noPluginsFound': 'Nessun plugin trovato', 'emptyState.mustEnableBackend': - 'Devi abilitare il plugin backend delle Estensioni', + 'È necessario abilitare il plugin backend Estensioni', 'emptyState.noPluginsDescription': - 'Si è verificato un errore durante il caricamento dei plugin. Controlla la tua configurazione o consulta la documentazione del plugin per risolvere. Puoi anche esplorare altri plugin disponibili.', + 'Si è verificato un errore durante il caricamento dei plugin. Per risolvere il problema, controllare la configurazione o consultare la documentazione del plugin. È anche possibile verificare gli altri plugin disponibili.', 'emptyState.configureBackend': "Configura il plugin '@red-hat-developer-hub/backstage-plugin-extensions-backend'.", // Alerts and warnings 'alert.productionDisabled': - "L'installazione dei plugin è disabilitata nell'ambiente di produzione.", - 'alert.installationDisabled': "L'installazione dei plugin è disabilitata.", + "L'installazione del plugin è disabilitata nell'ambiente di produzione.", + 'alert.installationDisabled': "L'installazione del plugin è disabilitata.", 'alert.missingDynamicArtifact': - "Questo pacchetto non può essere gestito. Per abilitare le azioni, deve essere aggiunta un'entità del catalogo con il **spec.dynamicArtifact** richiesto.", - 'alert.missingDynamicArtifactTitle': - 'Il pacchetto non può essere modificato', + "Impossibile gestire questo pacchetto. Per abilitare le azioni, è necessario aggiungere un'entità Catalogo con lo **spec.dynamicArtifact** richiesto.", + 'alert.missingDynamicArtifactTitle': 'Impossibile modificare il pacchetto', 'alert.missingDynamicArtifactForPlugin': - "Questo plugin non può essere gestito. Per abilitare le azioni, deve essere aggiunta un'entità del catalogo con il **spec.dynamicArtifact** richiesto a tutti i pacchetti associati.", + "Impossibile gestire questo plugin. Per abilitare le azioni, è necessario aggiungere un'entità Catalogo con lo **spec.dynamicArtifact** richiesto a tutti i pacchetti associati.", 'alert.missingDynamicArtifactTitlePlugin': - 'Il plugin non può essere modificato', + 'Impossibile modificare il plugin', 'alert.extensionsExample': - 'Per abilitarlo, aggiungi o modifica la configurazione delle estensioni nel tuo file di configurazione dei plugin dinamici.', + 'Per abilitarla, aggiungere o modificare la configurazione delle estensioni nel file di configurazione dynamic-plugins.', 'alert.singlePluginRestart': - "Il plugin **{{pluginName}}** richiede un riavvio del sistema backend per completare l'installazione, l'aggiornamento, l'abilitazione o la disabilitazione.", + "Il plugin **{{pluginName}}** richiede il riavvio del sistema backend per completare l'installazione, l'aggiornamento, l'abilitazione o la disabilitazione.", 'alert.multiplePluginRestart': - "Hai **{{count}}** plugin che richiedono un riavvio del tuo sistema backend per completare l'installazione, l'aggiornamento, l'abilitazione o la disabilitazione.", + "Sono presenti **{{count}}** plugin che richiedono il riavvio del sistema backend per completare l'installazione, l'aggiornamento, l'abilitazione o la disabilitazione.", 'alert.singlePackageRestart': - "Il pacchetto **{{packageName}}** richiede un riavvio del sistema backend per completare l'installazione, l'aggiornamento, l'abilitazione o la disabilitazione.", + "Il pacchetto **{{packageName}}** richiede il riavvio del sistema backend per completare l'installazione, l'aggiornamento, l'abilitazione o la disabilitazione.", 'alert.multiplePackageRestart': - "Hai **{{count}}** pacchetti che richiedono un riavvio del tuo sistema backend per completare l'installazione, l'aggiornamento, l'abilitazione o la disabilitazione.", + "Sono presenti **{{count}}** pacchetti che richiedono il riavvio del sistema backend per completare l'installazione, l'aggiornamento, l'abilitazione o la disabilitazione.", 'alert.restartRequired': '{{count}} plugin installati', - 'alert.backendRestartRequired': 'Riavvio del backend richiesto', - 'alert.viewPlugins': 'Visualizza plugin', - 'alert.viewPackages': 'Visualizza pacchetti', - - // Search and filtering - 'search.placeholder': 'Cerca plugin...', + 'alert.backendRestartRequired': 'È necessario riavviare il backend', + 'alert.viewPlugins': 'Visualizza i plugin', + 'alert.viewPackages': 'Visualizza i pacchetti', + 'search.placeholder': 'Ricerca', 'search.clear': 'Cancella ricerca', 'search.filter': 'Filtra', 'search.clearFilter': 'Cancella filtro', - 'search.noResults': 'Nessun plugin corrisponde ai tuoi criteri di ricerca', - 'search.filterBy': 'Filtra per', - 'search.clearFilters': 'Cancella filtri', - 'search.noResultsFound': - 'Nessun risultato trovato. Modifica i tuoi filtri e riprova.', 'search.category': 'Categoria', 'search.author': 'Autore', 'search.supportType': 'Tipo di supporto', - - // General UI text + 'search.noResults': 'Nessun plugin corrisponde ai criteri di ricerca', + 'search.filterBy': 'Filtra per', + 'search.clearFilters': 'Cancella filtri', + 'search.noResultsFound': + 'Nessun risultato trovato. Regolare i filtri e riprovare.', 'common.links': 'Collegamenti', 'common.by': ' di ', 'common.comma': ', ', 'common.noDescriptionAvailable': 'nessuna descrizione disponibile', - 'common.readMore': 'Leggi di più', + 'common.readMore': 'Per saperne di più', 'common.close': 'Chiudi', 'common.apply': 'Applica', 'common.couldNotApplyYaml': 'Impossibile applicare YAML: {{error}}', - - // Dialogs - 'dialog.backendRestartRequired': 'Riavvio del backend richiesto', + 'dialog.backendRestartRequired': 'È necessario riavviare il backend', 'dialog.packageRestartMessage': - 'Per completare le modifiche del pacchetto, riavvia il tuo sistema backend.', + 'Per completare le modifiche al pacchetto, riavviare il sistema backend.', 'dialog.pluginRestartMessage': - 'Per completare le modifiche del plugin, riavvia il tuo sistema backend.', - - // Plugin details + 'Per completare le modifiche al plugin, riavviare il sistema backend.', 'plugin.description': 'Descrizione', 'plugin.documentation': 'Documentazione', 'plugin.repository': 'Repository', @@ -135,25 +117,21 @@ const extensionsTranslationIt = createTranslationMessages({ 'plugin.dependencies': 'Dipendenze', 'plugin.configuration': 'Configurazione', 'plugin.installation': 'Installazione', - - // Package details - 'package.name': 'Nome del pacchetto:', + 'package.name': 'Nome pacchetto:', 'package.version': 'Versione:', - 'package.dynamicPluginPath': 'Percorso del plugin dinamico:', + 'package.dynamicPluginPath': 'Percorso plugin dinamico:', 'package.backstageRole': 'Ruolo Backstage:', 'package.supportedVersions': 'Versioni supportate:', 'package.author': 'Autore:', 'package.support': 'Supporto:', 'package.lifecycle': 'Ciclo di vita:', - 'package.highlights': 'Punti salienti', + 'package.highlights': 'In evidenza', 'package.about': 'Informazioni', - 'package.notFound': 'Pacchetto {{namespace}}/{{name}} non trovato!', + 'package.notFound': 'Pacchetto {{namespace}}/{{name}} non trovato.', 'package.notAvailable': 'Il pacchetto {{name}} non è disponibile', 'package.ensureCatalogEntity': - "Assicurati che esista un'entità del catalogo per questo pacchetto.", - - // Tables and lists - 'table.packageName': 'Nome del pacchetto', + "Verificare l'esistenza di un'entità catalogo per questo pacchetto.", + 'table.packageName': 'Nome pacchetto', 'table.version': 'Versione', 'table.role': 'Ruolo', 'table.supportedVersion': 'Versione supportata', @@ -166,40 +144,37 @@ const extensionsTranslationIt = createTranslationMessages({ 'table.packages': 'Pacchetti', 'table.pluginsCount': 'Plugin ({{count}})', 'table.packagesCount': 'Pacchetti ({{count}})', - 'table.pluginsTable': 'Tabella plugin', - - // Installed packages table + 'table.pluginsTable': 'Tabella dei plugin', 'installedPackages.table.title': 'Pacchetti installati ({{count}})', - 'installedPackages.table.searchPlaceholder': 'Cerca', + 'installedPackages.table.searchPlaceholder': 'Ricerca', 'installedPackages.table.columns.name': 'Nome', 'installedPackages.table.columns.packageName': 'nome del pacchetto npm', 'installedPackages.table.columns.role': 'Ruolo', 'installedPackages.table.columns.version': 'Versione', 'installedPackages.table.columns.actions': 'Azioni', 'installedPackages.table.tooltips.packageProductionDisabled': - "Il pacchetto non può essere gestito nell'ambiente di produzione.", + "Impossibile gestire il pacchetto nell'ambiente di produzione.", 'installedPackages.table.tooltips.installationDisabled': - "Il pacchetto non può essere gestito perché l'installazione dei plugin è disabilitata. Per abilitarla, aggiungi o modifica la configurazione delle estensioni nel tuo file di configurazione dei plugin dinamici.", + "Impossibile gestire il pacchetto perché l'installazione del plugin è disabilitata. Per abilitarla, aggiungere o modificare la configurazione delle estensioni nel file di configurazione dynamic-plugins.", 'installedPackages.table.tooltips.enableActions': - "Per abilitare le azioni, aggiungi un'entità del catalogo per questo pacchetto", + "Per abilitare le azioni, aggiungere un'entità catalogo per questo pacchetto", 'installedPackages.table.tooltips.noDownloadPermissions': - 'Non hai il permesso di scaricare la configurazione. Contatta il tuo amministratore per richiedere accesso o assistenza.', + "L'utente non dispone dell'autorizzazione per scaricare la configurazione. Contattare l'amministratore per richiedere l'accesso o l'assistenza.", 'installedPackages.table.tooltips.noEditPermissions': - 'Non hai il permesso di modificare la configurazione. Contatta il tuo amministratore per richiedere accesso o assistenza.', + "L'utente non dispone dell'autorizzazione per modificare la configurazione. Contattare l'amministratore per richiedere l'accesso o l'assistenza.", 'installedPackages.table.tooltips.noTogglePermissions': - 'Non hai il permesso di abilitare o disabilitare i pacchetti. Contatta il tuo amministratore per richiedere accesso o assistenza.', + "L'utente non dispone dell'autorizzazione per abilitare o disabilitare i pacchetti. Contattare l'amministratore per richiedere l'accesso o l'assistenza.", 'installedPackages.table.tooltips.editPackage': - 'Modifica configurazione del pacchetto', + 'Modifica la configurazione del pacchetto', 'installedPackages.table.tooltips.downloadPackage': - 'Scarica configurazione del pacchetto', - 'installedPackages.table.tooltips.enablePackage': 'Abilita pacchetto', - 'installedPackages.table.tooltips.disablePackage': 'Disabilita pacchetto', + 'Scarica la configurazione del pacchetto', + 'installedPackages.table.tooltips.enablePackage': 'Abilita il pacchetto', + 'installedPackages.table.tooltips.disablePackage': + 'Disabilita il pacchetto', 'installedPackages.table.emptyMessages.noResults': - 'Nessun risultato trovato. Prova con un termine di ricerca diverso.', + 'Nessun risultato trovato. Provare un termine di ricerca diverso.', 'installedPackages.table.emptyMessages.noRecords': 'Nessun record da visualizzare', - - // Plugin actions and states 'actions.install': 'Installa', 'actions.view': 'Visualizza', 'actions.edit': 'Modifica', @@ -207,73 +182,65 @@ const extensionsTranslationIt = createTranslationMessages({ 'actions.disable': 'Disabilita', 'actions.actions': 'Azioni', 'actions.editConfiguration': 'Modifica', - 'actions.pluginConfigurations': 'Configurazioni del plugin', + 'actions.pluginConfigurations': 'Configurazioni dei plugin', 'actions.packageConfiguration': 'Configurazione del pacchetto', 'actions.pluginCurrentlyEnabled': 'Plugin attualmente abilitato', 'actions.pluginCurrentlyDisabled': 'Plugin attualmente disabilitato', 'actions.packageCurrentlyEnabled': 'Pacchetto attualmente abilitato', 'actions.packageCurrentlyDisabled': 'Pacchetto attualmente disabilitato', - 'actions.installTitle': 'Installa {{displayName}}', - 'actions.editTitle': 'Modifica configurazioni di {{displayName}}', - - // Plugin metadata + 'actions.installTitle': 'Installare {{displayName}}', + 'actions.editTitle': 'Modificare le configurazioni di {{displayName}}', 'metadata.by': ' di ', 'metadata.comma': ', ', - 'metadata.pluginNotFound': 'Plugin {{name}} non trovato!', + 'metadata.pluginNotFound': 'Plugin {{name}} non trovato.', 'metadata.pluginNotAvailable': 'Il plugin {{name}} non è disponibile', 'metadata.ensureCatalogEntityPlugin': - "Assicurati che esista un'entità del catalogo per questo plugin.", - 'metadata.highlights': 'Punti salienti', + "Verificare l'esistenza di un'entità catalogo per questo plugin.", + 'metadata.highlights': 'In evidenza', 'metadata.about': 'Informazioni', 'metadata.publisher': 'Editore', - 'metadata.supportProvider': 'Fornitore di supporto', - 'metadata.entryName': "Nome dell'entrata", - 'metadata.bySomeone': 'di qualcuno', + 'metadata.supportProvider': 'Fornitore del supporto', + 'metadata.entryName': 'Nome voce', + 'metadata.bySomeone': 'da qualcuno', 'metadata.category': 'Categoria', 'metadata.versions': 'Versioni', - 'metadata.backstageCompatibility': 'Versione di compatibilità Backstage', - - // Support type filters + 'metadata.backstageCompatibility': 'Versione compatibile con Backstage', 'supportTypes.certifiedBy': 'Certificato da {{value}} ({{count}})', 'supportTypes.verifiedBy': 'Verificato da {{value}} ({{count}})', 'supportTypes.customPlugins': 'Plugin personalizzati ({{count}})', - - // Collections 'collection.kubernetes': 'Kubernetes', 'collection.monitoring': 'Monitoraggio', 'collection.security': 'Sicurezza', - 'collection.viewMore': 'Visualizza di più', + 'collection.viewMore': 'Visualizza altro', 'collection.pluginCount': '{{count}} plugin', 'collection.featured.title': 'Plugin in evidenza', 'collection.featured.description': - 'Una collezione curata di plugin consigliati per la maggior parte degli utenti', - - // Installation and configuration - 'install.title': 'Installa Plugin', + 'Una raccolta selezionata di plugin in evidenza consigliati per la maggior parte degli utenti', + 'install.title': 'Installa il plugin', 'install.configurationRequired': 'Configurazione richiesta', 'install.optional': 'Opzionale', - 'install.required': 'Richiesto', - 'install.selectPackages': 'Seleziona pacchetti da installare', + 'install.required': 'Richiesta', + 'install.selectPackages': 'Selezionare i pacchetti da installare', 'install.allPackages': 'Tutti i pacchetti', 'install.customConfiguration': 'Configurazione personalizzata', 'install.installProgress': 'Installazione in corso...', - 'install.success': 'Plugin installato con successo', - 'install.error': 'Installazione del plugin fallita', - 'install.installFrontend': 'Installa plugin frontend', - 'install.installBackend': 'Installa plugin backend', + 'install.success': 'Plugin installato correttamente', + 'install.error': 'Impossibile installare il plugin', + 'install.installFrontend': 'Installa il plugin frontend', + 'install.installBackend': 'Installa il plugin backend', 'install.installTemplates': 'Installa modelli software', - 'install.installationInstructions': 'Istruzioni di installazione', - 'install.download': 'Scarica', + 'install.installationInstructions': "Istruzioni per l'installazione", + 'install.download': 'Scaricamento', 'install.examples': 'Esempi', - 'install.cancel': 'Annulla', - 'install.reset': 'Reimposta', - 'install.pluginTabs': 'Tab del plugin', - 'install.settingUpPlugin': 'Configurazione del plugin', + 'install.cancel': 'Cancella', + 'install.reset': 'Reset', + 'install.pluginTabs': 'Schede dei plugin', + 'install.settingUpPlugin': 'Impostazione del plugin', 'install.aboutPlugin': 'Informazioni sul plugin', 'install.pluginUpdated': 'Plugin aggiornato', 'install.pluginInstalled': 'Plugin installato', 'install.instructions': 'Istruzioni', - 'install.editInstructions': 'Modifica istruzioni', + 'install.editInstructions': 'Modifica le istruzioni', 'install.back': 'Indietro', 'install.packageUpdated': 'Pacchetto aggiornato', 'install.packageEnabled': 'Pacchetto abilitato', @@ -281,43 +248,37 @@ const extensionsTranslationIt = createTranslationMessages({ 'install.pluginEnabled': 'Plugin abilitato', 'install.pluginDisabled': 'Plugin disabilitato', 'install.errors.missingPluginsList': - "Contenuto dell'editor non valido: manca l'elenco 'plugins'", + "Contenuto dell'editor non valido: elenco 'plugin' mancante", 'install.errors.missingPackageItem': "Contenuto dell'editor non valido: elemento del pacchetto mancante", 'install.errors.missingPackageField': - "Contenuto dell'editor non valido: campo 'package' mancante nell'elemento", - 'install.errors.failedToSave': 'Salvataggio fallito', - - // Loading and error states - loading: 'Caricamento in corso...', + "Contenuto dell'editor non valido: campo 'pacchetto' mancante nell'elemento", + 'install.errors.failedToSave': 'Impossibile salvare', + loading: 'Caricamento...', error: 'Si è verificato un errore', - retry: 'Riprova', - - // Error messages + retry: 'Riprovare', 'errors.missingConfigFile': 'File di configurazione mancante', 'errors.missingConfigMessage': - "{{message}}. Devi aggiungerlo al tuo app-config.yaml se vuoi abilitare questo strumento. Modifica il file app-config.yaml come mostrato nell'esempio seguente:", + "{{message}}. Per abilitare questo strumento, è necessario aggiungerlo ad app-config.yaml. Modificare il file app-config.yaml come mostrato nell'esempio seguente:", 'errors.invalidConfigFile': 'File di configurazione non valido', 'errors.invalidConfigMessage': - "Errore nel caricamento di 'extensions.installation.saveToSingleFile.file'. {{message}}. Fornisci una configurazione di installazione valida se vuoi abilitare questo strumento. Modifica il tuo file dynamic-plugins.yaml come mostrato nell'esempio seguente:", + "Impossibile caricare 'extensions.installation.saveToSingleFile.file'. {{message}}. Per abilitare questo strumento, fornire una configurazione di installazione valida. Modificare il file dynamic-plugins.yaml come mostrato nell'esempio seguente:", 'errors.fileNotExists': - 'Il file di configurazione è errato, scritto male o non esiste', + 'Il file di configurazione non è corretto, non è scritto correttamente o non esiste', 'errors.fileNotExistsMessage': - "{{message}}. Ricontrolla il nome del file specificato nel tuo app-config.yaml se vuoi abilitare questo strumento come evidenziato nell'esempio seguente:", - 'errors.unknownError': 'Errore nella lettura del file di configurazione. ', - - // Tooltip messages + "{{message}}. Per abilitare questo strumento come evidenziato nell'esempio seguente, controllare nuovamente il nome del file specificato in app-config.yaml:", + 'errors.unknownError': + 'Errore durante la lettura del file di configurazione. ', 'tooltips.productionDisabled': - "L'installazione dei plugin è disabilitata nell'ambiente di produzione.", + "L'installazione del plugin è disabilitata nell'ambiente di produzione.", 'tooltips.extensionsDisabled': - "L'installazione dei plugin è disabilitata. Per abilitarla, aggiungi o modifica la configurazione delle estensioni nel tuo file di configurazione dei plugin dinamici.", + "L'installazione del plugin è disabilitata. Per abilitarla, aggiungere o modificare la configurazione delle estensioni nel file di configurazione dynamic-plugins.", 'tooltips.noPermissions': - 'Non hai il permesso di installare plugin o visualizzare le loro configurazioni. Contatta il tuo amministratore per richiedere accesso o assistenza.', + "L'utente non dispone delle autorizzazioni necessarie per installare plugin o visualizzarne le configurazioni. Contattare l'amministratore per richiedere l'accesso o l'assistenza.", 'tooltips.missingDynamicArtifact': - "Questo {{type}} non può essere gestito. Per abilitare le azioni, deve essere aggiunta un'entità del catalogo con il spec.dynamicArtifact richiesto.", - // Accessibility - 'aria.openPlugin': 'Apri plugin {{name}}', - 'aria.closeDialog': 'Chiudi dialogo', + "Impossibile gestire questo {{type}}. Per abilitare le azioni, è necessario aggiungere un'entità Catalogo con lo spec.dynamicArtifact richiesto.", + 'aria.openPlugin': 'Apri il plugin {{name}}', + 'aria.closeDialog': 'Chiudi finestra di dialogo', 'aria.expandSection': 'Espandi sezione', 'aria.collapseSection': 'Comprimi sezione', 'aria.sortBy': 'Ordina per {{field}}', @@ -327,21 +288,21 @@ const extensionsTranslationIt = createTranslationMessages({ 'badges.verified': 'Verificato', 'badges.verifiedBy': 'Verificato da {{provider}}', 'badges.customPlugin': 'Plugin personalizzato', - 'badges.stableAndSecured': 'Stabile e sicuro da {{provider}}', - 'badges.generallyAvailable': 'Generalmente disponibile (GA)', + 'badges.stableAndSecured': 'Stabile e protetto da {{provider}}', + 'badges.generallyAvailable': 'Generalmente disponibile', 'badges.gaAndSupportedBy': - 'Generalmente disponibile (GA) e supportato da {{provider}}', - 'badges.gaAndSupported': 'Generalmente disponibile (GA) e supportato', + 'Generalmente disponibile e supportato da {{provider}}', + 'badges.gaAndSupported': 'Generalmente disponibile e supportato', 'badges.productionReadyBy': 'Pronto per la produzione e supportato da {{provider}}', 'badges.productionReady': 'Pronto per la produzione e supportato', - 'badges.communityPlugin': 'Plugin della comunità', + 'badges.communityPlugin': 'Plugin della community', 'badges.openSourceNoSupport': 'Plugin open source, nessun supporto ufficiale', - 'badges.techPreview': 'Anteprima tecnica (TP)', - 'badges.pluginInDevelopment': 'Plugin ancora in sviluppo', - 'badges.devPreview': 'Anteprima sviluppatore (DP)', - 'badges.earlyStageExperimental': 'Un plugin sperimentale in fase iniziale', + 'badges.techPreview': 'Anteprima tecnica', + 'badges.pluginInDevelopment': 'Plugin ancora in fase di sviluppo', + 'badges.devPreview': 'Anteprima di sviluppo', + 'badges.earlyStageExperimental': 'Plugin sperimentale in fase iniziale', 'badges.addedByAdmin': "Plugin aggiunti dall'amministratore", }, }); diff --git a/workspaces/extensions/plugins/extensions/src/translations/ja.ts b/workspaces/extensions/plugins/extensions/src/translations/ja.ts new file mode 100644 index 0000000000..4696d4e3ce --- /dev/null +++ b/workspaces/extensions/plugins/extensions/src/translations/ja.ts @@ -0,0 +1,310 @@ +/* + * 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 { extensionsTranslationRef } from './ref'; + +/** + * Japanese translation for plugin.extensions. + * @public + */ +const extensionsTranslationJa = createTranslationMessages({ + ref: extensionsTranslationRef, + messages: { + 'header.title': '拡張機能', + 'header.extensions': '拡張機能', + 'header.catalog': 'カタログ', + 'header.installedPackages': 'インストール済みパッケージ', + 'header.installedPackagesWithCount': + 'インストール済みパッケージ ({{count}})', + 'header.pluginsPage': 'プラグイン', + 'header.packagesPage': 'パッケージ', + 'header.collectionsPage': 'コレクション', + 'button.install': 'インストール', + 'button.uninstall': 'アンインストール', + 'button.enable': '有効にする', + 'button.disable': '無効にする', + 'button.update': '更新', + 'button.save': '保存', + 'button.close': '閉じる', + 'button.viewAll': 'すべてのプラグインの表示', + 'button.viewDocumentation': 'ドキュメントの表示', + 'button.viewInstalledPlugins': + 'インストール済みプラグインの表示 ({{count}})', + 'button.restart': '再起動が必要です', + 'status.notInstalled': 'インストールされていません', + 'status.installed': 'インストール済み', + 'status.disabled': '無効', + 'status.partiallyInstalled': '部分的にインストール済み', + 'status.updateAvailable': '更新が利用可能', + 'role.backend': 'バックエンド', + 'role.backendModule': 'バックエンドモジュール', + 'role.frontend': 'フロントエンド', + 'emptyState.noPluginsFound': 'プラグインが見つかりません', + 'emptyState.mustEnableBackend': + 'Extensions バックエンドプラグインを有効にする必要があります', + 'emptyState.noPluginsDescription': + 'プラグインの読み込み中にエラーが発生しました。解決するには、設定を確認するか、プラグインのドキュメントを確認してください。利用可能な他のプラグインを探すこともできます。', + 'emptyState.configureBackend': + "'@red-hat-developer-hub/backstage-plugin-extensions-backend' プラグインを設定してください。", + 'alert.productionDisabled': + '実稼働環境ではプラグインのインストールが無効になっています。', + 'alert.installationDisabled': + 'プラグインのインストールが無効になっています。', + 'alert.missingDynamicArtifact': + 'このパッケージを管理できません。アクションを有効にするには、必要な **spec.dynamicArtifact** を持つカタログエンティティーを追加する必要があります。', + 'alert.missingDynamicArtifactTitle': 'パッケージを変更できません', + 'alert.missingDynamicArtifactForPlugin': + 'このプラグインを管理できません。アクションを有効にするには、必要な **spec.dynamicArtifact** を持つカタログエンティティーを、関連するすべてのパッケージに追加する必要があります。', + 'alert.missingDynamicArtifactTitlePlugin': 'プラグインを変更できません', + 'alert.extensionsExample': + 'これを有効にするには、dynamic-plugins 設定ファイルで拡張機能設定を追加または変更してください。', + 'alert.singlePluginRestart': + '**{{pluginName}}** プラグインが、インストール、更新、有効化、または無効化を完了するために、バックエンドシステムの再起動を必要としています。', + 'alert.multiplePluginRestart': + '**{{count}}** 個のプラグインが、インストール、更新、有効化、または無効化を完了するために、バックエンドシステムの再起動を必要としています。', + 'alert.singlePackageRestart': + '**{{packageName}}** パッケージが、インストール、更新、有効化、または無効化を完了するために、バックエンドシステムの再起動を必要としています。', + 'alert.multiplePackageRestart': + '**{{count}}** 個のパッケージが、インストール、更新、有効化、または無効化を完了するために、バックエンドシステムの再起動を必要としています。', + 'alert.restartRequired': + '{{count}} 個のプラグインがインストールされています', + 'alert.backendRestartRequired': 'バックエンドの再起動が必要です', + 'alert.viewPlugins': 'プラグインの表示', + 'alert.viewPackages': 'パッケージの表示', + 'search.placeholder': '検索', + 'search.clear': '検索のクリア', + 'search.filter': 'フィルター', + 'search.clearFilter': 'フィルターのクリア', + 'search.category': 'カテゴリー', + 'search.author': '作成者', + 'search.supportType': 'サポートタイプ', + 'search.noResults': '検索条件に一致するプラグインがありません', + 'search.filterBy': 'フィルター', + 'search.clearFilters': 'フィルターをクリア', + 'search.noResultsFound': + '結果が見つかりません。フィルターを調整してもう一度お試しください。', + 'common.links': 'リンク', + 'common.by': ' by ', + 'common.comma': ',', + 'common.noDescriptionAvailable': '説明がありません', + 'common.readMore': 'さらに表示する', + 'common.close': '閉じる', + 'common.apply': '適用', + 'common.couldNotApplyYaml': 'YAML を適用できませんでした: {{error}}', + 'dialog.backendRestartRequired': 'バックエンドの再起動が必要です', + 'dialog.packageRestartMessage': + 'パッケージの変更を完了するために、バックエンドシステムを再起動してください。', + 'dialog.pluginRestartMessage': + 'プラグインの変更を完了するために、バックエンドシステムを再起動してください。', + 'plugin.description': '説明', + 'plugin.documentation': 'ドキュメント', + 'plugin.repository': 'リポジトリー', + 'plugin.license': 'ライセンス', + 'plugin.version': 'バージョン', + 'plugin.author': '作成者', + 'plugin.authors': '作成者', + 'plugin.tags': 'タグ', + 'plugin.dependencies': '依存関係', + 'plugin.configuration': '設定', + 'plugin.installation': 'インストール', + 'package.name': 'パッケージ名:', + 'package.version': 'バージョン:', + 'package.dynamicPluginPath': '動的プラグインのパス:', + 'package.backstageRole': 'Backstage の役割:', + 'package.supportedVersions': 'サポートされているバージョン:', + 'package.author': '作成者:', + 'package.support': 'サポート:', + 'package.lifecycle': 'ライフサイクル:', + 'package.highlights': 'ハイライト', + 'package.about': '概要', + 'package.notFound': 'パッケージ {{namespace}}/{{name}} が見つかりません!', + 'package.notAvailable': 'パッケージ {{name}} は利用できません', + 'package.ensureCatalogEntity': + 'このパッケージのカタログエンティティーが存在することを確認してください。', + 'table.packageName': 'パッケージ名', + 'table.version': 'バージョン', + 'table.role': '役割', + 'table.supportedVersion': 'サポートされているバージョン', + 'table.status': 'ステータス', + 'table.name': '名前', + 'table.action': 'アクション', + 'table.description': '説明', + 'table.versions': 'バージョン', + 'table.plugins': 'プラグイン', + 'table.packages': 'パッケージ', + 'table.pluginsCount': 'プラグイン ({{count}})', + 'table.packagesCount': 'パッケージ ({{count}})', + 'table.pluginsTable': 'プラグインテーブル', + 'installedPackages.table.title': 'インストール済みパッケージ ({{count}})', + 'installedPackages.table.searchPlaceholder': '検索', + 'installedPackages.table.columns.name': '名前', + 'installedPackages.table.columns.packageName': 'npm パッケージ名', + 'installedPackages.table.columns.role': '役割', + 'installedPackages.table.columns.version': 'バージョン', + 'installedPackages.table.columns.actions': 'アクション', + 'installedPackages.table.tooltips.packageProductionDisabled': + 'パッケージは実稼働環境では管理できません。', + 'installedPackages.table.tooltips.installationDisabled': + 'プラグインのインストールが無効になっているため、パッケージを管理できません。これを有効にするには、dynamic-plugins 設定ファイルで拡張機能設定を追加または変更してください。', + 'installedPackages.table.tooltips.enableActions': + 'アクションを有効にするには、このパッケージのカタログエンティティーを追加してください', + 'installedPackages.table.tooltips.noDownloadPermissions': + '設定をダウンロードする権限がありません。管理者に連絡し、アクセス権を要求またはサポートを依頼してください。', + 'installedPackages.table.tooltips.noEditPermissions': + '設定を編集する権限がありません。管理者に連絡し、アクセス権を要求またはサポートを依頼してください。', + 'installedPackages.table.tooltips.noTogglePermissions': + 'パッケージを有効化または無効化する権限がありません。管理者に連絡し、アクセス権を要求またはサポートを依頼してください。', + 'installedPackages.table.tooltips.editPackage': 'パッケージ設定を編集する', + 'installedPackages.table.tooltips.downloadPackage': + 'パッケージ設定をダウンロードする', + 'installedPackages.table.tooltips.enablePackage': 'パッケージを有効にする', + 'installedPackages.table.tooltips.disablePackage': 'パッケージを無効にする', + 'installedPackages.table.emptyMessages.noResults': + '結果が見つかりません。別の検索語句を試してください。', + 'installedPackages.table.emptyMessages.noRecords': + '表示するレコードがありません', + 'actions.install': 'インストール', + 'actions.view': '表示', + 'actions.edit': '編集', + 'actions.enable': '有効にする', + 'actions.disable': '無効にする', + 'actions.actions': 'アクション', + 'actions.editConfiguration': '編集', + 'actions.pluginConfigurations': 'プラグインの設定', + 'actions.packageConfiguration': 'パッケージの設定', + 'actions.pluginCurrentlyEnabled': 'プラグインは現在有効です', + 'actions.pluginCurrentlyDisabled': 'プラグインは現在無効です', + 'actions.packageCurrentlyEnabled': 'パッケージは現在有効です', + 'actions.packageCurrentlyDisabled': 'パッケージは現在無効です', + 'actions.installTitle': '{{displayName}} のインストール', + 'actions.editTitle': '{{displayName}} 設定の編集', + 'metadata.by': ' by ', + 'metadata.comma': ',', + 'metadata.pluginNotFound': 'プラグイン {{name}} が見つかりません!', + 'metadata.pluginNotAvailable': 'プラグイン {{name}} は利用できません', + 'metadata.ensureCatalogEntityPlugin': + 'このプラグインのカタログエンティティーが存在することを確認してください。', + 'metadata.highlights': 'ハイライト', + 'metadata.about': '概要', + 'metadata.publisher': 'パブリッシャー', + 'metadata.supportProvider': 'サポートプロバイダー', + 'metadata.entryName': 'エントリー名', + 'metadata.bySomeone': '提供元不明', + 'metadata.category': 'カテゴリー', + 'metadata.versions': 'バージョン', + 'metadata.backstageCompatibility': 'Backstage 互換バージョン', + 'supportTypes.certifiedBy': '{{value}} により認定済み ({{count}})', + 'supportTypes.verifiedBy': '{{value}} により検証済み ({{count}})', + 'supportTypes.customPlugins': 'カスタムプラグイン ({{count}})', + 'collection.kubernetes': 'Kubernetes', + 'collection.monitoring': 'モニタリング', + 'collection.security': 'セキュリティー', + 'collection.viewMore': '詳細の表示', + 'collection.pluginCount': '{{count}} 個のプラグイン', + 'collection.featured.title': '注目のプラグイン', + 'collection.featured.description': + 'ほとんどのユーザーに推奨される注目の厳選プラグイン集', + 'install.title': 'プラグインのインストール', + 'install.configurationRequired': '必要な設定', + 'install.optional': '任意', + 'install.required': '必須', + 'install.selectPackages': 'インストールするパッケージの選択', + 'install.allPackages': 'すべてのパッケージ', + 'install.customConfiguration': 'カスタム設定', + 'install.installProgress': 'インストール...', + 'install.success': 'プラグインが正常にインストールされました', + 'install.error': 'プラグインのインストールに失敗しました', + 'install.installFrontend': 'フロントエンドプラグインのインストール', + 'install.installBackend': 'バックエンドプラグインのインストール', + 'install.installTemplates': 'ソフトウェアテンプレートのインストール', + 'install.installationInstructions': 'インストール手順', + 'install.download': 'ダウンロード', + 'install.examples': '例', + 'install.cancel': 'キャンセル', + 'install.reset': 'リセット', + 'install.pluginTabs': 'プラグインタブ', + 'install.settingUpPlugin': 'プラグインのセットアップ', + 'install.aboutPlugin': 'プラグインについて', + 'install.pluginUpdated': 'プラグインが更新されました', + 'install.pluginInstalled': 'プラグインがインストールされました', + 'install.instructions': '手順', + 'install.editInstructions': '編集手順', + 'install.back': '戻る', + 'install.packageUpdated': 'パッケージが更新されました', + 'install.packageEnabled': 'パッケージは有効です', + 'install.packageDisabled': 'パッケージは無効です', + 'install.pluginEnabled': 'プラグインは有効です', + 'install.pluginDisabled': 'プラグインは無効です', + 'install.errors.missingPluginsList': + "無効なエディターコンテンツ: 'plugins' リストがありません", + 'install.errors.missingPackageItem': + '無効なエディターコンテンツ: パッケージ項目がありません', + 'install.errors.missingPackageField': + "無効なエディターコンテンツ: 項目に 'package' フィールドがありません", + 'install.errors.failedToSave': '保存に失敗しました', + loading: '読み込み中...', + error: 'エラーが発生しました', + retry: '再試行', + 'errors.missingConfigFile': '設定ファイルが見つかりません', + 'errors.missingConfigMessage': + '{{メッセージ}}。このツールを有効にする場合は、app-config.yaml に設定を追加する必要があります。以下の例のように app-config.yaml ファイルを編集してください:', + 'errors.invalidConfigFile': '無効な設定ファイル', + 'errors.invalidConfigMessage': + "'extensions.installation.saveToSingleFile.file' の読み込みに失敗しました。{{message}}。このツールを有効にする場合は、有効なインストール設定を提供してください。以下の例のように dynamic-plugins.yaml ファイルを編集してください:", + 'errors.fileNotExists': + '設定ファイルが正しくないか、スペルミスがあるか、存在しません', + 'errors.fileNotExistsMessage': + '{{メッセージ}}。このツールを有効にする場合は、以下の例に示すように、app-config.yaml で指定されているファイル名を再確認してください:', + 'errors.unknownError': '設定ファイルの読み取り中にエラーが発生しました。', + 'tooltips.productionDisabled': + '実稼働環境ではプラグインのインストールが無効になっています。', + 'tooltips.extensionsDisabled': + 'プラグインのインストールが無効になっています。これを有効にするには、dynamic-plugins 設定ファイルで拡張機能設定を追加または変更してください。', + 'tooltips.noPermissions': + 'プラグインをインストールする権限またはその設定を表示する権限がありません。管理者に連絡し、アクセス権を要求またはサポートを依頼してください。', + 'tooltips.missingDynamicArtifact': + 'この {{type}} を管理できません。アクションを有効にするには、必要な spec.dynamicArtifact を持つカタログエンティティーを追加する必要があります。', + 'aria.openPlugin': 'プラグイン {{name}} を開く', + 'aria.closeDialog': 'ダイアログを閉じる', + 'aria.expandSection': 'セクションを展開', + 'aria.collapseSection': 'セクションを折りたたむ', + 'aria.sortBy': '{{field}} でソート', + 'aria.filterBy': '{{field}} でフィルタリング', + 'badges.certified': '認定済み', + 'badges.certifiedBy': '{{provider}} により認定済み', + 'badges.verified': '検証済み', + 'badges.verifiedBy': '{{provider}} により検証済み', + 'badges.customPlugin': 'カスタムプラグイン', + 'badges.stableAndSecured': '安定および {{provider}} により保護', + 'badges.generallyAvailable': '一般提供 (GA)', + 'badges.gaAndSupportedBy': + '一般提供 (GA) および {{provider}} のサポート対象', + 'badges.gaAndSupported': '一般提供 (GA) およびサポート対象', + 'badges.productionReadyBy': + '実稼働環境に対応および {{provider}} のサポート対象', + 'badges.productionReady': '実稼働環境に対応およびサポート対象', + 'badges.communityPlugin': 'コミュニティープラグイン', + 'badges.openSourceNoSupport': 'オープンソースプラグイン、公式サポートなし', + 'badges.techPreview': 'テクノロジープレビュー (TP)', + 'badges.pluginInDevelopment': 'まだ開発中のプラグイン', + 'badges.devPreview': '開発者プレビュー (DP)', + 'badges.earlyStageExperimental': '初期段階の実験的なプラグイン', + 'badges.addedByAdmin': '管理者によって追加されたプラグイン', + }, +}); + +export default extensionsTranslationJa; diff --git a/workspaces/global-floating-action-button/.changeset/dull-grapes-help.md b/workspaces/global-floating-action-button/.changeset/dull-grapes-help.md new file mode 100644 index 0000000000..52e98fe0b4 --- /dev/null +++ b/workspaces/global-floating-action-button/.changeset/dull-grapes-help.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-global-floating-action-button': patch +--- + +Added 'it' and 'ja' i18n support and updated 'fr' translation strings. diff --git a/workspaces/global-floating-action-button/plugins/global-floating-action-button/src/translations/fr.ts b/workspaces/global-floating-action-button/plugins/global-floating-action-button/src/translations/fr.ts index 9545a3b33e..5c367fe815 100644 --- a/workspaces/global-floating-action-button/plugins/global-floating-action-button/src/translations/fr.ts +++ b/workspaces/global-floating-action-button/plugins/global-floating-action-button/src/translations/fr.ts @@ -15,24 +15,27 @@ */ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; - import { globalFloatingActionButtonTranslationRef } from './ref'; +/** + * fr translation for plugin.global-floating-action-button. + * @public + */ const globalFloatingActionButtonTranslationFr = createTranslationMessages({ ref: globalFloatingActionButtonTranslationRef, messages: { 'fab.create.label': 'Créer', - 'fab.create.tooltip': 'Créer une entité', - 'fab.docs.label': 'Documentation', + 'fab.create.tooltip': "Créer l'entité", + 'fab.docs.label': 'Docs', 'fab.docs.tooltip': 'Documentation', 'fab.apis.label': 'APIs', 'fab.apis.tooltip': 'Documentation API', 'fab.github.label': 'GitHub', - 'fab.github.tooltip': 'Dépôt GitHub', - 'fab.bulkImport.label': 'Import en lot', - 'fab.bulkImport.tooltip': 'Enregistrer plusieurs dépôts en une seule fois', + 'fab.github.tooltip': 'Référentiel GitHub', + 'fab.bulkImport.label': 'Importation en masse', + 'fab.bulkImport.tooltip': 'Enregistrer plusieurs référentiel en masse', 'fab.quay.label': 'Quay', - 'fab.quay.tooltip': 'Registre de conteneurs Quay', + 'fab.quay.tooltip': 'Quay Container Registry', 'fab.menu.tooltip': 'Menu', }, }); diff --git a/workspaces/global-floating-action-button/plugins/global-floating-action-button/src/translations/it.ts b/workspaces/global-floating-action-button/plugins/global-floating-action-button/src/translations/it.ts new file mode 100644 index 0000000000..5c0f6cd2f5 --- /dev/null +++ b/workspaces/global-floating-action-button/plugins/global-floating-action-button/src/translations/it.ts @@ -0,0 +1,43 @@ +/* + * 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 { globalFloatingActionButtonTranslationRef } from './ref'; + +/** + * Italian translation for plugin.global-floating-action-button. + * @public + */ +const globalFloatingActionButtonTranslationIt = createTranslationMessages({ + ref: globalFloatingActionButtonTranslationRef, + messages: { + 'fab.create.label': 'Crea', + 'fab.create.tooltip': 'Crea entità', + 'fab.docs.label': 'Documenti', + 'fab.docs.tooltip': 'Documentazione', + 'fab.apis.label': 'API', + 'fab.apis.tooltip': 'Documentazione API', + 'fab.github.label': 'GitHub', + 'fab.github.tooltip': 'Repository GitHub', + 'fab.bulkImport.label': 'Importazione in blocco', + 'fab.bulkImport.tooltip': 'Registra più repository in blocco', + 'fab.quay.label': 'Quay', + 'fab.quay.tooltip': 'Registro dei container di Quay', + 'fab.menu.tooltip': 'Menu', + }, +}); + +export default globalFloatingActionButtonTranslationIt; diff --git a/workspaces/global-floating-action-button/plugins/global-floating-action-button/src/translations/ja.ts b/workspaces/global-floating-action-button/plugins/global-floating-action-button/src/translations/ja.ts new file mode 100644 index 0000000000..c13b8619c5 --- /dev/null +++ b/workspaces/global-floating-action-button/plugins/global-floating-action-button/src/translations/ja.ts @@ -0,0 +1,43 @@ +/* + * 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 { globalFloatingActionButtonTranslationRef } from './ref'; + +/** + * Japanese translation for plugin.global-floating-action-button. + * @public + */ +const globalFloatingActionButtonTranslationJa = createTranslationMessages({ + ref: globalFloatingActionButtonTranslationRef, + messages: { + 'fab.create.label': '作成', + 'fab.create.tooltip': 'エンティティーの作成', + 'fab.docs.label': 'ドキュメント', + 'fab.docs.tooltip': 'ドキュメント', + 'fab.apis.label': 'API', + 'fab.apis.tooltip': 'API ドキュメント', + 'fab.github.label': 'GitHub', + 'fab.github.tooltip': 'GitHub リポジトリー', + 'fab.bulkImport.label': '一括インポート', + 'fab.bulkImport.tooltip': '複数のリポジトリーを一括登録する', + 'fab.quay.label': 'Quay', + 'fab.quay.tooltip': 'Quay コンテナーレジストリー', + 'fab.menu.tooltip': 'メニュー', + }, +}); + +export default globalFloatingActionButtonTranslationJa; diff --git a/workspaces/global-header/.changeset/silly-wombats-wink.md b/workspaces/global-header/.changeset/silly-wombats-wink.md new file mode 100644 index 0000000000..570f869528 --- /dev/null +++ b/workspaces/global-header/.changeset/silly-wombats-wink.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-global-header': patch +--- + +Added 'it' and 'ja' i18n support and updated 'fr' translation strings. diff --git a/workspaces/global-header/plugins/global-header/src/translations/fr.ts b/workspaces/global-header/plugins/global-header/src/translations/fr.ts index 0fc970648d..547ced30bb 100644 --- a/workspaces/global-header/plugins/global-header/src/translations/fr.ts +++ b/workspaces/global-header/plugins/global-header/src/translations/fr.ts @@ -17,46 +17,50 @@ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { globalHeaderTranslationRef } from './ref'; +/** + * fr translation for plugin.global-header. + * @public + */ const globalHeaderTranslationFr = createTranslationMessages({ ref: globalHeaderTranslationRef, messages: { - 'applicationLauncher.developerHub': 'Centre des développeurs', - 'applicationLauncher.noLinksSubtitle': - "Configurez les liens d'application dans la configuration du plugin dynamique pour un accès rapide à partir d'ici.", - 'applicationLauncher.noLinksTitle': "Aucun lien d'application configuré", - 'applicationLauncher.rhdhLocal': 'RHDH Local', - 'applicationLauncher.sections.developerTools': 'Outils de développement', - 'applicationLauncher.sections.documentation': 'Documentation', - 'applicationLauncher.tooltip': "Lanceur d'applications", - 'create.registerComponent.subtitle': 'Importez-le sur la page du catalogue', - 'create.registerComponent.title': 'Enregistrer un composant', - 'create.templates.allTemplates': 'Tous les modèles', - 'create.templates.errorFetching': - 'Erreur lors de la récupération des modèles', - 'create.templates.noTemplatesAvailable': 'Aucun modèle disponible', - 'create.templates.sectionTitle': 'Utiliser un modèle', - 'create.title': 'Self-service', + 'help.tooltip': 'Aide', 'help.noSupportLinks': 'Aucun lien de support', 'help.noSupportLinksSubtitle': 'Votre administrateur doit configurer des liens d’assistance.', 'help.quickStart': 'Démarrage rapide', - 'help.supportTitle': 'Support', - 'help.tooltip': 'Aide', - 'notifications.title': 'Notifications', - 'notifications.unsupportedDismissOption': - 'Option de rejet non prise en charge « {{option}} », actuellement prise en charge « none », « session » ou « localstorage » !', - 'profile.myProfile': 'Mon profil', + 'help.supportTitle': 'Assistance', 'profile.picture': 'Photo de profil', 'profile.settings': 'Paramètres', - 'profile.signOut': 'se déconnecter', - 'search.errorFetching': 'Erreur lors de la récupération des résultats', - 'search.noResults': 'Aucun résultat trouvé', + 'profile.myProfile': 'Mon profil', + 'profile.signOut': 'Déconnection', 'search.placeholder': 'Recherche...', + 'search.noResults': 'Aucun résultat trouvé', + 'search.errorFetching': 'Erreur lors de la récupération des résultats', + 'applicationLauncher.tooltip': "Lanceur d'applications", + 'applicationLauncher.noLinksTitle': "Aucun lien d'application configuré", + 'applicationLauncher.noLinksSubtitle': + "Configurez les liens d'application dans la configuration du plugin dynamique pour un accès rapide à partir d'ici.", + 'applicationLauncher.developerHub': 'Centre des développeurs', + 'applicationLauncher.rhdhLocal': 'RHDH Local', + 'applicationLauncher.sections.documentation': 'Documentation', + 'applicationLauncher.sections.developerTools': 'Outils de développement', + 'starred.title': 'Vos articles favoris', + 'starred.removeTooltip': 'Supprimer de la liste', + 'starred.noItemsTitle': 'Aucun élément étoilé pour le moment', 'starred.noItemsSubtitle': "Cliquez sur l'icône étoile à côté du nom d'une entité pour l'enregistrer ici pour un accès rapide.", - 'starred.noItemsTitle': 'Aucun élément étoilé pour le moment', - 'starred.removeTooltip': 'Supprimer de la liste', - 'starred.title': 'Vos articles favoris', + 'notifications.title': 'Notifications', + 'notifications.unsupportedDismissOption': + 'Option de rejet non prise en charge « {{option}} », actuellement prise en charge « none », « session » ou « localstorage » !', + 'create.title': 'Self-service', + 'create.registerComponent.title': 'Enregistrer un composant', + 'create.registerComponent.subtitle': 'Importez-le sur la page du catalogue', + 'create.templates.sectionTitle': 'Utiliser un modèle', + 'create.templates.allTemplates': 'Tous les modèles', + 'create.templates.errorFetching': + 'Erreur lors de la récupération des modèles', + 'create.templates.noTemplatesAvailable': 'Aucun modèle disponible', }, }); diff --git a/workspaces/global-header/plugins/global-header/src/translations/it.ts b/workspaces/global-header/plugins/global-header/src/translations/it.ts index 277f5f7d43..b80aeb7080 100644 --- a/workspaces/global-header/plugins/global-header/src/translations/it.ts +++ b/workspaces/global-header/plugins/global-header/src/translations/it.ts @@ -17,44 +17,50 @@ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { globalHeaderTranslationRef } from './ref'; +/** + * Italian translation for plugin.global-header. + * @public + */ const globalHeaderTranslationIt = createTranslationMessages({ ref: globalHeaderTranslationRef, messages: { - 'help.tooltip': 'Aiuto', + 'help.tooltip': 'Guida', 'help.noSupportLinks': 'Nessun link di supporto', 'help.noSupportLinksSubtitle': - 'Il tuo amministratore deve configurare i link di supporto.', + "L'amministratore deve impostare i link di supporto.", 'help.quickStart': 'Avvio rapido', 'help.supportTitle': 'Supporto', 'profile.picture': 'Immagine del profilo', 'profile.settings': 'Impostazioni', 'profile.myProfile': 'Il mio profilo', - 'profile.signOut': 'Esci', + 'profile.signOut': 'Disconnetti', 'search.placeholder': 'Cerca...', 'search.noResults': 'Nessun risultato trovato', - 'search.errorFetching': 'Errore nel recupero dei risultati', - 'applicationLauncher.tooltip': 'Launcher applicazioni', - 'applicationLauncher.noLinksTitle': 'Nessun link applicazione configurato', + 'search.errorFetching': 'Errore durante il recupero dei risultati', + 'applicationLauncher.tooltip': 'Avvio applicazione', + 'applicationLauncher.noLinksTitle': + "Nessun collegamento all'applicazione configurato", 'applicationLauncher.noLinksSubtitle': - 'Configura i link delle applicazioni nella configurazione del plugin dinamico per un accesso rapido da qui.', + "Configurare i collegamenti all'applicazione nella configurazione del plugin dinamico per accedere rapidamente da qui.", 'applicationLauncher.developerHub': 'Developer Hub', 'applicationLauncher.rhdhLocal': 'RHDH Local', 'applicationLauncher.sections.documentation': 'Documentazione', 'applicationLauncher.sections.developerTools': 'Strumenti per sviluppatori', - 'starred.title': 'I tuoi elementi preferiti', - 'starred.removeTooltip': 'Rimuovi dalla lista', - 'starred.noItemsTitle': 'Nessun elemento preferito ancora', + 'starred.title': 'I tuoi articoli contrassegnati', + 'starred.removeTooltip': "Rimuovi dall'elenco", + 'starred.noItemsTitle': 'Non è stato ancora contrassegnato alcun articolo', 'starred.noItemsSubtitle': - "Clicca sull'icona stella accanto al nome di un'entità per salvarla qui per un accesso rapido.", + "Fare clic sull'icona a forma di stella accanto al nome di un'entità per salvarla qui e accedervi rapidamente.", 'notifications.title': 'Notifiche', 'notifications.unsupportedDismissOption': - 'Opzione di chiusura non supportata "{{option}}", attualmente supportate "none", "session" o "localstorage"!', - 'create.title': 'Autoservizio', - 'create.registerComponent.title': 'Registra un componente', - 'create.registerComponent.subtitle': 'Importalo nella pagina del catalogo', - 'create.templates.sectionTitle': 'Usa un modello', + 'Opzione di esclusione non supportata "{{option}}"; attualmente sono supportate le opzioni "none", "session" o "localstorage"!', + 'create.title': 'Self-service', + 'create.registerComponent.title': 'Registrare un componente', + 'create.registerComponent.subtitle': + 'Importare il componente nella pagina del catalogo', + 'create.templates.sectionTitle': 'Utilizzare un modello', 'create.templates.allTemplates': 'Tutti i modelli', - 'create.templates.errorFetching': 'Errore nel recupero dei modelli', + 'create.templates.errorFetching': 'Errore durante il recupero dei modelli', 'create.templates.noTemplatesAvailable': 'Nessun modello disponibile', }, }); diff --git a/workspaces/global-header/plugins/global-header/src/translations/ja.ts b/workspaces/global-header/plugins/global-header/src/translations/ja.ts new file mode 100644 index 0000000000..5c7ec2630e --- /dev/null +++ b/workspaces/global-header/plugins/global-header/src/translations/ja.ts @@ -0,0 +1,69 @@ +/* + * 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 { globalHeaderTranslationRef } from './ref'; + +/** + * Japanese translation for plugin.global-header. + * @public + */ +const globalHeaderTranslationJa = createTranslationMessages({ + ref: globalHeaderTranslationRef, + messages: { + 'help.tooltip': 'ヘルプ', + 'help.noSupportLinks': 'サポートリンクがありません', + 'help.noSupportLinksSubtitle': + '管理者がサポートリンクを設定する必要があります。', + 'help.quickStart': 'クイックスタート', + 'help.supportTitle': 'サポート', + 'profile.picture': 'プロファイル写真', + 'profile.settings': '設定', + 'profile.myProfile': 'マイプロファイル', + 'profile.signOut': 'サインアウト', + 'search.placeholder': '検索...', + 'search.noResults': '結果が見つかりません', + 'search.errorFetching': '結果の取得中にエラーが発生しました', + 'applicationLauncher.tooltip': 'アプリケーションランチャー', + 'applicationLauncher.noLinksTitle': + 'アプリケーションリンクが設定されていません', + 'applicationLauncher.noLinksSubtitle': + 'ここからすばやくアクセスできるように、動的プラグイン設定でアプリケーションリンクを設定してください。', + 'applicationLauncher.developerHub': 'Developer Hub', + 'applicationLauncher.rhdhLocal': 'RHDH Local', + 'applicationLauncher.sections.documentation': 'ドキュメント', + 'applicationLauncher.sections.developerTools': '開発者ツール', + 'starred.title': 'スター付き項目', + 'starred.removeTooltip': 'リストから削除', + 'starred.noItemsTitle': 'スター付き項目はまだありません', + 'starred.noItemsSubtitle': + 'エンティティーの名前の横にある星のアイコンをクリックすると、すぐにアクセスできるように、ここに保存されます。', + 'notifications.title': '通知', + 'notifications.unsupportedDismissOption': + '終了オプション "{{option}}" はサポートされていません。現在サポートされているのは、"none"、"session"、または "localstorage" です!', + 'create.title': 'セルフサービス', + 'create.registerComponent.title': 'コンポーネントの登録', + 'create.registerComponent.subtitle': 'カタログページへのインポート', + 'create.templates.sectionTitle': 'テンプレートの使用', + 'create.templates.allTemplates': 'すべてのテンプレート', + 'create.templates.errorFetching': + 'テンプレートの取得中にエラーが発生しました', + 'create.templates.noTemplatesAvailable': + '利用できるテンプレートがありません', + }, +}); + +export default globalHeaderTranslationJa; diff --git a/workspaces/homepage/.changeset/fifty-snakes-change.md b/workspaces/homepage/.changeset/fifty-snakes-change.md new file mode 100644 index 0000000000..ca03964bd1 --- /dev/null +++ b/workspaces/homepage/.changeset/fifty-snakes-change.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-dynamic-home-page': patch +--- + +Added 'it' and 'ja' i18n support and updated 'fr' translation strings. diff --git a/workspaces/homepage/plugins/dynamic-home-page/src/translations/fr.ts b/workspaces/homepage/plugins/dynamic-home-page/src/translations/fr.ts index a66eb9097c..47413d4ad6 100644 --- a/workspaces/homepage/plugins/dynamic-home-page/src/translations/fr.ts +++ b/workspaces/homepage/plugins/dynamic-home-page/src/translations/fr.ts @@ -18,61 +18,61 @@ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { homepageTranslationRef } from './ref'; /** - * French translation for Homepage. + * fr translation for plugin.dynamic-home-page. * @public */ const homepageTranslationFr = createTranslationMessages({ ref: homepageTranslationRef, messages: { - 'entities.close': 'fermer', - 'entities.description': - 'Parcourez les systèmes, les composants, les ressources et les API disponibles dans votre organisation.', - 'entities.empty': "Aucun catalogue de logiciels n'a encore été ajouté", - 'entities.emptyDescription': - 'Une fois les catalogues de logiciels ajoutés, cet espace présentera du contenu pertinent adapté à votre expérience.', - 'entities.error': 'Erreur inconnue', - 'entities.fetchError': 'Impossible de récupérer les données.', - 'entities.register': 'Enregistrer un composant', - 'entities.title': 'Explorez votre catalogue de logiciels', - 'entities.viewAll': 'Afficher toutes les {{count}} entités du catalogue', - 'featuredDocs.learnMore': ' En savoir plus', - 'header.local': 'Locale', 'header.welcome': 'Content de vous revoir!', 'header.welcomePersonalized': 'Bienvenue {{name}} !', + 'header.local': 'Locale', 'homePage.empty': "Aucune carte de page d'accueil (points de montage) configurée ou trouvée.", - 'onboarding.explore.ariaLabel': 'Accéder au catalogue', - 'onboarding.explore.buttonText': 'Accéder au catalogue', - 'onboarding.explore.description': - 'Explorez les composants, les API et les modèles.', - 'onboarding.explore.title': 'Explorez', - 'onboarding.getStarted.ariaLabel': - "Lire la documentation (s'ouvre dans un nouvel onglet)", - 'onboarding.getStarted.buttonText': 'Lire la documentation', - 'onboarding.getStarted.description': - 'En savoir plus sur Red Hat Developer Hub.', - 'onboarding.getStarted.title': 'Commencer', - 'onboarding.greeting.goodAfternoon': 'Bon après-midi', - 'onboarding.greeting.goodEvening': 'Bonne soirée', - 'onboarding.greeting.goodMorning': 'Bonjour', - 'onboarding.guest': 'Invité', - 'onboarding.learn.ariaLabel': "Accéder aux parcours d'apprentissage", - 'onboarding.learn.buttonText': "Accéder aux parcours d'apprentissage", - 'onboarding.learn.description': - 'Explorer et développer de nouvelles compétences.', - 'onboarding.learn.title': 'Apprendre', - 'quickAccess.error': 'Erreur inconnue', - 'quickAccess.fetchError': 'Impossible de récupérer les données.', + 'search.placeholder': 'Recherche', 'quickAccess.title': 'Accès rapide', - 'search.placeholder': 'Rechercher', + 'quickAccess.fetchError': 'Impossible de récupérer les données.', + 'quickAccess.error': 'Erreur inconnue', + 'featuredDocs.learnMore': ' En savoir plus', + 'templates.title': 'Explorer les modèles', + 'templates.fetchError': 'Impossible de récupérer les données.', + 'templates.error': 'Erreur inconnue', 'templates.empty': 'Aucun modèle ajouté pour le moment', 'templates.emptyDescription': 'Une fois les modèles ajoutés, cet espace présentera du contenu pertinent adapté à votre expérience.', - 'templates.error': 'Erreur inconnue', - 'templates.fetchError': 'Impossible de récupérer les données.', 'templates.register': 'Enregistrer un modèle', - 'templates.title': 'Explorer les modèles', 'templates.viewAll': 'Afficher tous les {{count}} modèles', + 'onboarding.greeting.goodMorning': 'Bonjour', + 'onboarding.greeting.goodAfternoon': 'Bon après-midi', + 'onboarding.greeting.goodEvening': 'Bonne soirée', + 'onboarding.guest': 'Invité', + 'onboarding.getStarted.title': 'Commencer', + 'onboarding.getStarted.description': + 'En savoir plus sur Red Hat Developer Hub.', + 'onboarding.getStarted.buttonText': 'Lire la documentation', + 'onboarding.getStarted.ariaLabel': + "Lire la documentation (s'ouvre dans un nouvel onglet)", + 'onboarding.explore.title': 'Explorer', + 'onboarding.explore.description': + 'Explorer les composants, les API et les modèles.', + 'onboarding.explore.buttonText': 'Accéder au catalogue', + 'onboarding.explore.ariaLabel': 'Accéder au catalogue', + 'onboarding.learn.title': 'Apprendre', + 'onboarding.learn.description': + 'Explorer et développer de nouvelles compétences.', + 'onboarding.learn.buttonText': "Accéder aux parcours d'apprentissage", + 'onboarding.learn.ariaLabel': "Accéder aux parcours d'apprentissage", + 'entities.title': 'Explorer votre catalogue de logiciels', + 'entities.fetchError': 'Impossible de récupérer les données.', + 'entities.error': 'Erreur inconnue', + 'entities.description': + 'Parcourir les systèmes, les composants, les ressources et les API disponibles dans votre organisation.', + 'entities.close': 'fermer', + 'entities.empty': "Aucun catalogue de logiciels n'a encore été ajouté", + 'entities.emptyDescription': + 'Une fois les catalogues de logiciels ajoutés, cet espace présentera du contenu pertinent adapté à votre expérience.', + 'entities.register': 'Enregistrer un composant', + 'entities.viewAll': 'Afficher toutes les {{count}} entités du catalogue', }, }); diff --git a/workspaces/homepage/plugins/dynamic-home-page/src/translations/it.ts b/workspaces/homepage/plugins/dynamic-home-page/src/translations/it.ts index 2bbd531223..eb95eccd4f 100644 --- a/workspaces/homepage/plugins/dynamic-home-page/src/translations/it.ts +++ b/workspaces/homepage/plugins/dynamic-home-page/src/translations/it.ts @@ -18,57 +18,58 @@ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { homepageTranslationRef } from './ref'; /** - * Italian translation for Homepage. + * Italian translation for plugin.dynamic-home-page. * @public */ const homepageTranslationIt = createTranslationMessages({ ref: homepageTranslationRef, messages: { - 'header.welcome': 'Bentornato!', - 'header.welcomePersonalized': 'Bentornato, {{name}}!', + 'header.welcome': 'Bentornato/a!', + 'header.welcomePersonalized': 'Bentornato/a, {{name}}!', 'header.local': 'Locale', 'homePage.empty': - 'Nessuna scheda della homepage (punti di montaggio) configurata o trovata.', - 'search.placeholder': 'Cerca', + 'Nessuna scheda home page (punto di montaggio) configurata o trovata.', + 'search.placeholder': 'Ricerca', 'quickAccess.title': 'Accesso rapido', 'quickAccess.fetchError': 'Impossibile recuperare i dati.', 'quickAccess.error': 'Errore sconosciuto', - 'featuredDocs.learnMore': ' Scopri di più', - 'templates.title': 'Esplora modelli', + 'featuredDocs.learnMore': ' Per saperne di più', + 'templates.title': 'Esplora i modelli', 'templates.fetchError': 'Impossibile recuperare i dati.', 'templates.error': 'Errore sconosciuto', - 'templates.empty': 'Nessun modello aggiunto ancora', + 'templates.empty': 'Non è stato ancora aggiunto alcun modello', 'templates.emptyDescription': - 'Una volta aggiunti i modelli, questo spazio mostrerà contenuti rilevanti personalizzati per la tua esperienza.', + "Una volta aggiunti i modelli, in quest'area verranno visualizzati contenuti pertinenti e personalizzati in base all'esperienza dell'utente.", 'templates.register': 'Registra un modello', 'templates.viewAll': 'Visualizza tutti i {{count}} modelli', - 'onboarding.greeting.goodMorning': 'Buongiorno', + 'onboarding.greeting.goodMorning': 'Buon giorno', 'onboarding.greeting.goodAfternoon': 'Buon pomeriggio', - 'onboarding.greeting.goodEvening': 'Buonasera', + 'onboarding.greeting.goodEvening': 'Buona sera', 'onboarding.guest': 'Ospite', 'onboarding.getStarted.title': 'Inizia', - 'onboarding.getStarted.description': 'Scopri Red Hat Developer Hub.', + 'onboarding.getStarted.description': + 'Scopri di più su Red Hat Developer Hub.', 'onboarding.getStarted.buttonText': 'Leggi la documentazione', 'onboarding.getStarted.ariaLabel': 'Leggi la documentazione (si apre in una nuova scheda)', 'onboarding.explore.title': 'Esplora', 'onboarding.explore.description': 'Esplora componenti, API e modelli.', - 'onboarding.explore.buttonText': 'Vai al catalogo', - 'onboarding.explore.ariaLabel': 'Vai al catalogo', - 'onboarding.learn.title': 'Impara', + 'onboarding.explore.buttonText': 'Vai al Catalogo', + 'onboarding.explore.ariaLabel': 'Vai al Catalogo', + 'onboarding.learn.title': 'Apprendi', 'onboarding.learn.description': 'Esplora e sviluppa nuove competenze.', - 'onboarding.learn.buttonText': 'Vai ai percorsi di apprendimento', - 'onboarding.learn.ariaLabel': 'Vai ai percorsi di apprendimento', - 'entities.title': 'Esplora il tuo catalogo software', + 'onboarding.learn.buttonText': 'Vai ai Percorsi di apprendimento', + 'onboarding.learn.ariaLabel': 'Vai ai Percorsi di apprendimento', + 'entities.title': 'Esplora il Catalogo software', 'entities.fetchError': 'Impossibile recuperare i dati.', 'entities.error': 'Errore sconosciuto', 'entities.description': - 'Sfoglia i sistemi, componenti, risorse e API disponibili nella tua organizzazione.', + 'Esplora i sistemi, i componenti, le risorse e le API disponibili nella tua organizzazione.', 'entities.close': 'chiudi', - 'entities.empty': 'Nessun catalogo software aggiunto ancora', + 'entities.empty': 'Non è stato ancora aggiunto alcun catalogo software', 'entities.emptyDescription': - 'Una volta aggiunti i cataloghi software, questo spazio mostrerà contenuti rilevanti personalizzati per la tua esperienza.', - 'entities.register': 'Registra un componente', + "Una volta aggiunti i cataloghi software, in quest'area verranno visualizzati contenuti pertinenti e personalizzati in base all'esperienza dell'utente.", + 'entities.register': 'Registrare un componente', 'entities.viewAll': 'Visualizza tutte le {{count}} entità del catalogo', }, }); diff --git a/workspaces/homepage/plugins/dynamic-home-page/src/translations/ja.ts b/workspaces/homepage/plugins/dynamic-home-page/src/translations/ja.ts new file mode 100644 index 0000000000..27af9c58a2 --- /dev/null +++ b/workspaces/homepage/plugins/dynamic-home-page/src/translations/ja.ts @@ -0,0 +1,78 @@ +/* + * 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 { homepageTranslationRef } from './ref'; + +/** + * Japanese translation for plugin.dynamic-home-page. + * @public + */ +const homepageTranslationJa = createTranslationMessages({ + ref: homepageTranslationRef, + messages: { + 'header.welcome': 'おかえりなさい!', + 'header.welcomePersonalized': 'おかえりなさい、{{name}}!', + 'header.local': 'ローカル', + 'homePage.empty': + 'ホームページカード (マウントポイント) が設定されていないか見つかりません。', + 'search.placeholder': '検索', + 'quickAccess.title': 'クイックアクセス', + 'quickAccess.fetchError': 'データを取得できませんでした。', + 'quickAccess.error': '不明なエラー', + 'featuredDocs.learnMore': ' 詳細', + 'templates.title': 'テンプレートの探索', + 'templates.fetchError': 'データを取得できませんでした。', + 'templates.error': '不明なエラー', + 'templates.empty': 'テンプレートはまだ追加されていません', + 'templates.emptyDescription': + 'テンプレートが追加されると、利用状況に合わせてカスタマイズされた関連コンテンツがこのスペースに表示されます。', + 'templates.register': 'テンプレートの登録', + 'templates.viewAll': '{{count}} 個のテンプレートをすべて表示する', + 'onboarding.greeting.goodMorning': 'おはようございます', + 'onboarding.greeting.goodAfternoon': 'こんにちは', + 'onboarding.greeting.goodEvening': 'こんばんは', + 'onboarding.guest': 'ゲスト', + 'onboarding.getStarted.title': 'スタート', + 'onboarding.getStarted.description': + 'Red Hat Developer Hub について学習しましょう。', + 'onboarding.getStarted.buttonText': 'ドキュメントを読む', + 'onboarding.getStarted.ariaLabel': + 'ドキュメントを読む (新しいタブで開きます)', + 'onboarding.explore.title': '探索', + 'onboarding.explore.description': + 'コンポーネント、API、テンプレートを探索しましょう。', + 'onboarding.explore.buttonText': 'カタログに移動', + 'onboarding.explore.ariaLabel': 'カタログに移動', + 'onboarding.learn.title': '学習', + 'onboarding.learn.description': '新しいスキルを探索して習得しましょう。', + 'onboarding.learn.buttonText': 'ラーニングパスに移動', + 'onboarding.learn.ariaLabel': 'ラーニングパスに移動', + 'entities.title': 'ソフトウェアカタログの探索', + 'entities.fetchError': 'データを取得できませんでした。', + 'entities.error': '不明なエラー', + 'entities.description': + '組織内で利用可能なシステム、コンポーネント、リソース、API を閲覧します。', + 'entities.close': '閉じる', + 'entities.empty': 'ソフトウェアカタログはまだ追加されていません', + 'entities.emptyDescription': + 'ソフトウェアカタログが追加されると、利用状況に合わせてカスタマイズされた関連コンテンツがこのスペースに表示されます。', + 'entities.register': 'コンポーネントの登録', + 'entities.viewAll': '{{count}} 個のカタログエンティティーをすべて表示する', + }, +}); + +export default homepageTranslationJa; diff --git a/workspaces/lightspeed/.changeset/kind-ducks-lay.md b/workspaces/lightspeed/.changeset/kind-ducks-lay.md new file mode 100644 index 0000000000..e94e926459 --- /dev/null +++ b/workspaces/lightspeed/.changeset/kind-ducks-lay.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-lightspeed': patch +--- + +Added 'it' and 'ja' i18n support and updated 'fr' translation strings. diff --git a/workspaces/lightspeed/plugins/lightspeed/src/translations/fr.ts b/workspaces/lightspeed/plugins/lightspeed/src/translations/fr.ts index d2a15643aa..1a4c332444 100644 --- a/workspaces/lightspeed/plugins/lightspeed/src/translations/fr.ts +++ b/workspaces/lightspeed/plugins/lightspeed/src/translations/fr.ts @@ -19,218 +19,173 @@ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { lightspeedTranslationRef } from './ref'; /** - * French translation for Developer Lightspeed. + * fr translation for plugin.lightspeed. * @public */ const lightspeedTranslationFr = createTranslationMessages({ ref: lightspeedTranslationRef, messages: { - // Page titles and headers 'page.title': 'Lightspeed', - 'page.subtitle': "Assistant de développement alimenté par l'IA", - - // Sample prompts - General Development - 'prompts.codeReadability.title': - "Obtenir de l'aide sur la lisibilité du code", + 'page.subtitle': 'Assistant de développement AI-POWERED', + 'prompts.codeReadability.title': 'Obtenir de l’aide pour Décrypter le Code', 'prompts.codeReadability.message': - 'Pouvez-vous suggérer des techniques que je peux utiliser pour rendre mon code plus lisible et maintenable ?', - 'prompts.debugging.title': "Obtenir de l'aide pour le débogage", + 'Pourriez-vous me suggérer des techniques qui puissent rendre mon code plus lisible et facile d’entretien?', + 'prompts.debugging.title': 'Aide Débogage', 'prompts.debugging.message': - "Mon application lance une erreur lors de la tentative de connexion à la base de données. Pouvez-vous m'aider à identifier le problème ?", - 'prompts.developmentConcept.title': 'Expliquer un concept de développement', + 'Mon application me renvoie une erreur lorsque j’essaie de me connecter à la base de données. Pouvez-vous m’aider à identifier le problème?', + 'prompts.developmentConcept.title': 'Expliquer un Concept de développement', 'prompts.developmentConcept.message': - "Pouvez-vous expliquer comment fonctionne l'architecture des microservices et ses avantages par rapport à une conception monolithique ?", - 'prompts.codeOptimization.title': 'Suggérer des optimisations de code', + 'Pourriez-vous m’expliquer comment l’architecture des microservices fonctionne et quels sont ses avantages par rapport à un design monolithic ?', + 'prompts.codeOptimization.title': 'Suggestions d’Optmisation de Code', 'prompts.codeOptimization.message': - "Pouvez-vous suggérer des moyens courants d'optimiser le code pour obtenir de meilleures performances ?", - 'prompts.documentation.title': 'Résumé de la documentation', + 'Pourriez-vous me suggérer les façons d’optimiser le code pour le rendre plus performant ?', + 'prompts.documentation.title': 'Récapitulatif de la documentation', 'prompts.documentation.message': - "Pouvez-vous résumer la documentation pour implémenter l'authentification OAuth 2.0 dans une application web ?", - 'prompts.gitWorkflows.title': 'Flux de travail avec Git', + 'Pourriez-vous résumer la documentation d’implémentation de l’authentification 2.0 dans un app web ?', + 'prompts.gitWorkflows.title': 'Flux de travail dans Git', 'prompts.gitWorkflows.message': - 'Je veux apporter des modifications au code sur une autre branche sans perdre mon travail existant. Quelle est la procédure pour faire cela en utilisant Git ?', - 'prompts.testingStrategies.title': 'Suggérer des stratégies de test', + 'Je souhaite changer le code sur une autre branche sans perdre mon travail existant. Quelle est la procédure pour ce faire sans utiliser Git ?', + 'prompts.testingStrategies.title': 'Suggestions de Stratégies pour Tester', 'prompts.testingStrategies.message': - 'Pouvez-vous recommander des stratégies de test courantes qui rendront mon application robuste et sans erreur ?', - 'prompts.sortingAlgorithms.title': 'Démystifier les algorithmes de tri', + 'Pourriez-vous me conseiller des stratégies communes pour tester qui puissent rendre mon application robuste et sans erreurs?', + 'prompts.sortingAlgorithms.title': + 'Démystification les Algorithmes de triage', 'prompts.sortingAlgorithms.message': - 'Pouvez-vous expliquer la différence entre un algorithme de tri rapide et un algorithme de tri par fusion, et quand utiliser chacun ?', - 'prompts.eventDriven.title': - "Comprendre l'architecture orientée événements", + 'Pourriez-vous m’expliquer quelle est la différence entre un triage rapide (quicksort) et un triage de regroupement (mergesort), et quand utiliser quoi?', + 'prompts.eventDriven.title': 'Comprendre l’Architecture basée-événement', 'prompts.eventDriven.message': - "Pouvez-vous expliquer ce qu'est l'architecture orientée événements et quand il est bénéfique de l'utiliser dans le développement de logiciels ?", - - // Sample prompts - RHDH Specific + 'Pourriez-vous m’expliquer l’architecture basée-événement et quand il faut l’utiliser pour le développement des logiciels?', 'prompts.tekton.title': 'Déployer avec Tekton', 'prompts.tekton.message': - "Pouvez-vous m'aider à automatiser le déploiement de mon application en utilisant des pipelines Tekton ?", - 'prompts.openshift.title': 'Créer un déploiement OpenShift', + 'Pourriez-vous m’aider à automatiser le déploiement de mon application en utilisant les pipelines Tekton ?', + 'prompts.openshift.title': 'Créer un Déploiement Openshift', 'prompts.openshift.message': - "Pouvez-vous me guider à travers la création d'un nouveau déploiement dans OpenShift pour une application conteneurisée ?", - 'prompts.rhdh.title': 'Commencer avec Red Hat Developer Hub', + 'Pourriez-vous me guider sur la façon de créer un nouveau développement Openshift pour une application conteneurisée ?', + 'prompts.rhdh.title': 'Guide de Démarrage de Red Hat Developer Hub', 'prompts.rhdh.message': - 'Pouvez-vous me guider à travers les premières étapes pour commencer à utiliser Developer Hub en tant que développeur, comme explorer le Catalogue de Logiciels et ajouter mon service ?', - - // Conversation history - 'conversation.delete.confirm.title': 'Supprimer le chat ?', + 'Pourriez-vous me guider pour les premières étapes de démarrage avec Developer Hub en tant que développeur, comme explorer le Software Catalog et ajouter mon service ?', + 'conversation.delete.confirm.title': 'Supprimer cette conversation ?', 'conversation.delete.confirm.message': - "Vous ne verrez plus ce chat ici. Cela supprimera également l'activité connexe comme les invites, les réponses et les commentaires de votre Activité Lightspeed.", + 'Vous ne verrez plus cette conversation ici. Cela supprimera également les activités associées comme les prompts, réponses, et commentaires de votre activité Lightspeed.', 'conversation.delete.confirm.action': 'Supprimer', - 'conversation.rename.confirm.title': 'Renommer le chat ?', + 'conversation.rename.confirm.title': 'Renommer la conversation ?', 'conversation.rename.confirm.action': 'Renommer', - 'conversation.rename.placeholder': 'Nom du chat', - 'conversation.action.error': 'Erreur survenue : {{error}}', - - // Permissions - 'permission.required.title': 'Permissions manquantes', + 'conversation.rename.placeholder': 'Nom de la conversation', + 'conversation.action.error': 'Erreur: {{error}}', + 'permission.required.title': 'Autorisations manquantes', 'permission.required.description': - "Pour voir le plugin lightspeed, contactez votre administrateur pour qu'il vous donne les permissions lightspeed.chat.read et lightspeed.chat.create.", - - // Disclaimers + 'Pour afficher le plugin lightspeed, veuillez contacter votre administrateur pour qu’il vous donne les permissionslightspeed.chat.read et lightspeed.chat.create .', 'disclaimer.withValidation': - "Cette fonctionnalité utilise la technologie IA. N'incluez pas d'informations personnelles ou d'autres informations sensibles dans votre saisie. Les interactions peuvent être utilisées pour améliorer les produits ou services de Red Hat.", + 'Cette fonctionnalité utilise la technologie AI. Ne pas inclure d’informations personnelles ou toute autre information sensible dans vos entrées de données. Des interactions pourront être utilisées pour améliorer les produits ou services de Red Hat.', 'disclaimer.withoutValidation': - "Cette fonctionnalité utilise la technologie IA. N'incluez pas d'informations personnelles ou d'autres informations sensibles dans votre saisie. Les interactions peuvent être utilisées pour améliorer les produits ou services de Red Hat.", - - // Footer and feedback + 'Cette fonctionnalité utilise la technologie AI. Ne pas inclure d’informations personnelles ou toute autre information sensible dans vos entrées de données. Des interactions pourront être utilisées pour améliorer les produits ou services de Red Hat.', 'footer.accuracy.label': - "Toujours examiner le contenu généré par l'IA avant utilisation.", - 'footer.accuracy.popover.title': "Vérifier l'exactitude", + 'Toujours vérifier le contenu AI généré avant utilisation.', + 'footer.accuracy.popover.title': 'Vérifier l’exactitude', 'footer.accuracy.popover.description': - "Bien que Developer Lightspeed s'efforce d'être exact, il y a toujours une possibilité d'erreurs. C'est une bonne pratique de vérifier les informations critiques auprès de sources fiables, surtout si c'est crucial pour la prise de décision ou les actions.", + 'Bien que Developer Lightspeed soit orienté sur l’exactitude, il y a toujours possibilité d’erreurs. Il est toujours bon de vérifier les informations critiques à partir de sources de confiance, surtout si c’est crucial pour prendre des décisions ou entreprendre des actions.', 'footer.accuracy.popover.image.alt': - "Image d'exemple pour le popover de note de bas de page", - 'footer.accuracy.popover.cta.label': 'Compris', + 'Exemple d’image de note de bas de page popover', + 'footer.accuracy.popover.cta.label': "J'ai compris!", 'footer.accuracy.popover.link.label': 'En savoir plus', - - // Common actions 'common.cancel': 'Annuler', 'common.close': 'Fermer', 'common.readMore': 'En savoir plus', - 'common.noSearchResults': 'Aucun résultat ne correspond à la recherche', - - // Menu items - 'menu.newConversation': 'Nouveau Chat', - - // Chat-specific UI elements + 'common.noSearchResults': 'Aucun résultat ne correspond à cette demande', + 'menu.newConversation': 'Nouvelle Conversation', 'chatbox.header.title': 'Developer Lightspeed', - 'chatbox.search.placeholder': 'Rechercher', + 'chatbox.search.placeholder': 'Recherche', 'chatbox.provider.other': 'Autre', - 'chatbox.emptyState.noPinnedChats': 'Aucun chat épinglé', - 'chatbox.emptyState.noRecentChats': 'Aucun chat récent', + 'chatbox.emptyState.noPinnedChats': 'Aucune conversation épinglée', + 'chatbox.emptyState.noRecentChats': 'Aucune conversation récente', 'chatbox.emptyState.noResults.title': 'Aucun résultat trouvé', 'chatbox.emptyState.noResults.body': - 'Ajustez votre requête de recherche et réessayez. Vérifiez votre orthographe ou essayez un terme plus général.', - 'chatbox.welcome.greeting': 'Bonjour, {{userName}}', - 'chatbox.welcome.description': "Comment puis-je vous aider aujourd'hui ?", + 'Ajuster votre recherche et essayer à nouveau. Vérifier votre orthographe et essayez un terme plus général.', + 'chatbox.welcome.greeting': 'Hello, {{userName}}', + 'chatbox.welcome.description': 'Comment puis-je vous aider ?', 'chatbox.message.placeholder': - 'Envoyez un message et téléchargez optionnellement un fichier JSON, YAML, ou TXT...', - 'chatbox.fileUpload.failed': 'Le téléchargement du fichier a échoué', + 'Envoyer un message et télécharger un fichier JSON, YAML, ou TXT...', + 'chatbox.fileUpload.failed': 'Le chargement de fichiers a échoué', 'chatbox.fileUpload.infoText': - 'Les types de fichiers pris en charge sont : .txt, .yaml, et .json. La taille maximale du fichier est de 25 Mo.', - - // Accessibility and ARIA labels - 'aria.chatbotSelector': 'Sélecteur de chatbot', + 'Types de fichiers pris en charge: .txt, .yaml, and .json. La taille maximale est de 25 MB.', + 'aria.chatbotSelector': 'Sélecteur Chatbot', 'aria.important': 'Important', - 'aria.chatHistoryMenu': 'Menu historique des chats', - 'aria.closeDrawerPanel': 'Fermer le panneau latéral', - 'aria.search.placeholder': 'Rechercher', - 'aria.searchPreviousConversations': 'Rechercher dans les chats précédents', - 'aria.resize': 'Redimensionner', + 'aria.chatHistoryMenu': 'Menu de l’historique de conversations', + 'aria.closeDrawerPanel': 'Fermer le panneau de tiroirs', + 'aria.search.placeholder': 'Recherche', + 'aria.searchPreviousConversations': 'Recherche des anciennes conversations', + 'aria.resize': 'Redimensionnement', 'aria.options.label': 'Options', - 'aria.scroll.down': 'Retour en bas', - 'aria.scroll.up': 'Retour en haut', - 'aria.settings.label': 'Options du chatbot', - - // Modal actions + 'aria.scroll.down': 'De haut en bas', + 'aria.scroll.up': 'De bas en haut', + 'aria.settings.label': 'Options Chatbot', 'modal.edit': 'Modifier', - 'modal.save': 'Enregistrer', + 'modal.save': 'Sauvegarder', 'modal.close': 'Fermer', 'modal.cancel': 'Annuler', - - // Conversation actions 'conversation.delete': 'Supprimer', 'conversation.rename': 'Renommer', 'conversation.addToPinnedChats': 'Épingler', - 'conversation.removeFromPinnedChats': 'Désépingler', + 'conversation.removeFromPinnedChats': 'Détacher', 'conversation.announcement.userMessage': - "Message de l'utilisateur : {{prompt}}. Le message du bot se charge.", - - // User states + 'Message en provenance de l’utilisateur: {{prompt}}. Message en provenance du Bot en cours de chargement.', 'user.guest': 'Invité', 'user.loading': '...', - - // Button tooltips and labels - 'tooltip.attach': 'Joindre', + 'tooltip.attach': 'Attacher', 'tooltip.send': 'Envoyer', - 'tooltip.microphone.active': "Arrêter d'écouter", - 'tooltip.microphone.inactive': 'Utiliser le microphone', - 'button.newChat': 'Nouveau chat', - 'tooltip.chatHistoryMenu': 'Menu historique des chats', + 'tooltip.microphone.active': 'Cessez d’écouter', + 'tooltip.microphone.inactive': 'Utilisez le micro', + 'button.newChat': 'Nouvelle Conversation', + 'tooltip.chatHistoryMenu': 'Menu de l’historique de conversations', 'tooltip.responseRecorded': 'Réponse enregistrée', - 'tooltip.backToTop': 'Retour en haut', - 'tooltip.backToBottom': 'Retour en bas', - 'tooltip.settings': 'Options du chatbot', - - // Modal titles + 'tooltip.backToTop': 'De bas en haut', + 'tooltip.backToBottom': 'De haut en bas', + 'tooltip.settings': 'Options Chatbot', 'modal.title.preview': 'Aperçu de la pièce jointe', 'modal.title.edit': 'Modifier la pièce jointe', - - // Alt texts for icons - 'icon.lightspeed.alt': 'icône lightspeed', - 'icon.permissionRequired.alt': 'icône de permission requise', - - // Message utilities + 'icon.lightspeed.alt': 'Icône Lightspeed', + 'icon.permissionRequired.alt': 'icône d’autorisation requise', 'message.options.label': 'Options', - - // File attachment errors - 'file.upload.error.alreadyExists': 'Le fichier existe déjà.', - 'file.upload.error.multipleFiles': "Plus d'un fichier a été téléchargé.", + 'file.upload.error.alreadyExists': 'Le fichier existe déjà', + 'file.upload.error.multipleFiles': 'Télécharger plus d’un fichier.', 'file.upload.error.unsupportedType': - 'Type de fichier non pris en charge. Les types pris en charge sont : .txt, .yaml, et .json.', + 'Type de fichier non pris en charge. Types de fichiers pris en charge: .txt, .yaml, and .json.', 'file.upload.error.fileTooLarge': - 'La taille de votre fichier est trop importante. Veuillez vous assurer que votre fichier fait moins de 25 Mo.', + 'Votre taille de fichier est trop grande. Veuillez vous assurer que votre fichier soit inférieur à 25MB.', 'file.upload.error.readFailed': - 'Échec de la lecture du fichier : {{errorMessage}}', - - // Developer error messages + 'Impossible de lire le fichier : {{errorMessage}}', 'error.context.fileAttachment': 'useFileAttachmentContext doit être dans un FileAttachmentContextProvider', - - // Feedback actions - 'feedback.form.title': 'Pourquoi avez-vous choisi cette évaluation ?', + 'feedback.form.title': 'Pourquoi avez-vous sélectionnée cette estimation ?', 'feedback.form.textAreaPlaceholder': - 'Fournissez des commentaires supplémentaires optionnels', + 'Veuillez-nous offrir des commentaires supplémentaires ?', 'feedback.form.submitWord': 'Soumettre', - 'feedback.tooltips.goodResponse': 'Bonne Réponse', - 'feedback.tooltips.badResponse': 'Mauvaise Réponse', + 'feedback.tooltips.goodResponse': 'Bonne réponse', + 'feedback.tooltips.badResponse': 'Mauvaise réponse', 'feedback.tooltips.copied': 'Copié', 'feedback.tooltips.copy': 'Copier', - 'feedback.tooltips.listening': 'Écoute', + 'feedback.tooltips.listening': 'En cours d’écoute', 'feedback.tooltips.listen': 'Écouter', - 'feedback.quickResponses.positive.helpful': 'Informations utiles', + 'feedback.quickResponses.positive.helpful': 'Information utile', 'feedback.quickResponses.positive.easyToUnderstand': 'Facile à comprendre', - 'feedback.quickResponses.positive.resolvedIssue': 'A résolu mon problème', + 'feedback.quickResponses.positive.resolvedIssue': + 'A pu résoudre mon problème', 'feedback.quickResponses.negative.didntAnswer': - "N'a pas répondu à ma question", + 'N’a pas répondu à ma question', 'feedback.quickResponses.negative.hardToUnderstand': 'Difficile à comprendre', - 'feedback.quickResponses.negative.notHelpful': 'Pas utile', - 'feedback.completion.title': 'Feedback soumis', + 'feedback.quickResponses.negative.notHelpful': 'Peu utile', + 'feedback.completion.title': 'Commentaire soumis', 'feedback.completion.body': - 'Nous avons reçu votre réponse. Merci de partager votre feedback !', - - // Conversation categorization - 'conversation.category.pinnedChats': 'Épinglés', + 'Nous avons reçu votre réponse. Merci de partager vos commentaires avec nous !', + 'conversation.category.pinnedChats': 'Épinglé', 'conversation.category.recent': 'Récent', - - // lightspeed settings - 'settings.pinned.enable': 'Activer les chats épinglés', - 'settings.pinned.disable': 'Désactiver les chats épinglés', + 'settings.pinned.enable': 'Activer les conversations épinglées', + 'settings.pinned.disable': 'Désactiver les conversations épinglées', 'settings.pinned.enabled.description': - 'Les chats épinglés sont actuellement activés', + 'Les conversation épinglées sont actuellement activées', 'settings.pinned.disabled.description': - 'Les chats épinglés sont actuellement désactivés', + 'Les conversations épinglées sont actuellement désactivées', }, }); diff --git a/workspaces/lightspeed/plugins/lightspeed/src/translations/it.ts b/workspaces/lightspeed/plugins/lightspeed/src/translations/it.ts new file mode 100644 index 0000000000..8024ca09f3 --- /dev/null +++ b/workspaces/lightspeed/plugins/lightspeed/src/translations/it.ts @@ -0,0 +1,193 @@ +/* + * 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 { lightspeedTranslationRef } from './ref'; + +/** + * Italian translation for plugin.lightspeed. + * @public + */ +const lightspeedTranslationIt = createTranslationMessages({ + ref: lightspeedTranslationRef, + messages: { + 'page.title': 'Lightspeed', + 'page.subtitle': + "Assistente allo sviluppo basato sull'intelligenza artificiale", + 'prompts.codeReadability.title': + 'Ottenere aiuto sulla leggibilità del codice', + 'prompts.codeReadability.message': + 'Puoi suggerirmi delle tecniche da utilizzare per rendere il mio codice più leggibile e gestibile?', + 'prompts.debugging.title': 'Ottenere aiuto con il debug', + 'prompts.debugging.message': + 'La mia applicazione genera un errore quando tenta di connettersi al database. Puoi aiutarmi a identificare il problema?', + 'prompts.developmentConcept.title': 'Spiegare un concetto di sviluppo', + 'prompts.developmentConcept.message': + "Puoi spiegarmi come funziona l'architettura dei microservizi e quali vantaggi ha rispetto alla progettazione monolitica?", + 'prompts.codeOptimization.title': 'Suggerimenti per ottimizzare il codice', + 'prompts.codeOptimization.message': + 'Puoi suggerirmi metodi comuni per ottimizzare il codice e ottenere prestazioni migliori?', + 'prompts.documentation.title': 'Riepilogo della documentazione', + 'prompts.documentation.message': + "Puoi riassumere la documentazione per implementare l'autenticazione OAuth 2.0 in un'app web?", + 'prompts.gitWorkflows.title': 'Flussi di lavoro con Git', + 'prompts.gitWorkflows.message': + "Voglio apportare modifiche al codice su un'altra diramazione, senza perdere il lavoro svolto in precedenza. Qual è la procedura per farlo utilizzando Git?", + 'prompts.testingStrategies.title': 'Suggerimenti su strategie di test', + 'prompts.testingStrategies.message': + 'Puoi consigliarmi alcune strategie di test comuni in grado di rendere la mia applicazione efficiente e priva di errori?', + 'prompts.sortingAlgorithms.title': 'Svelare gli algoritmi di ordinamento', + 'prompts.sortingAlgorithms.message': + 'Puoi spiegarmi la differenza tra un algoritmo quicksort e un algoritmo merge sort e quando utilizzare ognuno di essi?', + 'prompts.eventDriven.title': + "Comprendere l'architettura guidata dagli eventi", + 'prompts.eventDriven.message': + "Puoi spiegarmi cos'è l'architettura guidata dagli eventi e quando è utile utilizzarla nello sviluppo software?", + 'prompts.tekton.title': 'Deployment con Tekton', + 'prompts.tekton.message': + 'Puoi aiutarmi ad automatizzare il deployment della mia applicazione utilizzando le pipeline Tekton?', + 'prompts.openshift.title': 'Creare un deployment in OpenShift', + 'prompts.openshift.message': + "Puoi guidarmi nella creazione di un nuovo deployment in OpenShift per un'applicazione containerizzata?", + 'prompts.rhdh.title': 'Introduzione a Red Hat Developer Hub', + 'prompts.rhdh.message': + 'Puoi guidarmi nelle prime fasi per iniziare a utilizzare Developer Hub come sviluppatore, ad esempio esplorando il catalogo software e aggiungendo il mio servizio?', + 'conversation.delete.confirm.title': 'Eliminare la chat?', + 'conversation.delete.confirm.message': + 'Questa chat non sarà più visibile qui. Dalla tua attività Lightspeed verranno eliminate anche le attività correlate, come prompt, risposte e feedback.', + 'conversation.delete.confirm.action': 'Elimina', + 'conversation.rename.confirm.title': 'Rinominare la chat?', + 'conversation.rename.confirm.action': 'Rinomina', + 'conversation.rename.placeholder': 'Nome della chat', + 'conversation.action.error': 'Si è verificato un errore: {{error}}', + 'permission.required.title': 'Autorizzazioni mancanti', + 'permission.required.description': + "Per visualizzare il plugin Lightspeed, contattare l'amministratore per ottenere le autorizzazioni lightspeed.chat.read e lightspeed.chat.create.", + 'disclaimer.withValidation': + 'Questa funzione utilizza una tecnologia AI. Non includere nei dati immessi informazioni personali o altre informazioni sensibili. Le interazioni possono essere utilizzate per migliorare i prodotti o i servizi Red Hat.', + 'disclaimer.withoutValidation': + 'Questa funzione utilizza una tecnologia AI. Non includere nei dati immessi informazioni personali o altre informazioni sensibili. Le interazioni possono essere utilizzate per migliorare i prodotti o i servizi Red Hat.', + 'footer.accuracy.label': + "Esaminare sempre i contenuti generati dall'intelligenza artificiale prima di utilizzarli.", + 'footer.accuracy.popover.title': "Verificare l'accuratezza", + 'footer.accuracy.popover.description': + "Nonostante l'impegno di Developer Lightspeed a garantire la massima precisione, esiste sempre un margine di errore. È buona norma verificare le informazioni critiche confrontandole con fonti affidabili, soprattutto se sono essenziali per prendere decisioni o intraprendere azioni.", + 'footer.accuracy.popover.image.alt': + 'Immagine di esempio per il popover del piè di pagina', + 'footer.accuracy.popover.cta.label': 'Ho capito', + 'footer.accuracy.popover.link.label': 'Per saperne di più', + 'common.cancel': 'Cancella', + 'common.close': 'Chiudi', + 'common.readMore': 'Per saperne di più', + 'common.noSearchResults': 'Nessun risultato corrisponde alla ricerca', + 'menu.newConversation': 'Nuova chat', + 'chatbox.header.title': 'Sviluppatore Lightspeed', + 'chatbox.search.placeholder': 'Ricerca', + 'chatbox.provider.other': 'Altro', + 'chatbox.emptyState.noPinnedChats': 'Nessuna chat bloccata', + 'chatbox.emptyState.noRecentChats': 'Nessuna chat recente', + 'chatbox.emptyState.noResults.title': 'Nessun risultato trovato', + 'chatbox.emptyState.noResults.body': + "Modificare la query di ricerca e riprovare. Controllare l'ortografia o provare un termine più generico.", + 'chatbox.welcome.greeting': 'Ciao {{userName}},', + 'chatbox.welcome.description': 'come posso aiutarti oggi?', + 'chatbox.message.placeholder': + 'Invia un messaggio e, facoltativamente, carica un file JSON, YAML o TXT...', + 'chatbox.fileUpload.failed': 'Caricamento del file non riuscito', + 'chatbox.fileUpload.infoText': + 'I tipi di file supportati sono: .txt, .yaml e .json. La dimensione massima del file è 25 MB.', + 'aria.chatbotSelector': 'Selettore di chatbot', + 'aria.important': 'Importante', + 'aria.chatHistoryMenu': 'Menu cronologia chat', + 'aria.closeDrawerPanel': 'Chiudi riquadro', + 'aria.search.placeholder': 'Ricerca', + 'aria.searchPreviousConversations': 'Cerca conversazioni precedenti', + 'aria.resize': 'Ridimensiona', + 'aria.options.label': 'Opzioni', + 'aria.scroll.down': 'Torna alla fine', + 'aria.scroll.up': "Torna all'inizio", + 'aria.settings.label': 'Opzioni chatbot', + 'modal.edit': 'Modifica', + 'modal.save': 'Salva', + 'modal.close': 'Chiudi', + 'modal.cancel': 'Cancella', + 'conversation.delete': 'Elimina', + 'conversation.rename': 'Rinomina', + 'conversation.addToPinnedChats': 'Blocca', + 'conversation.removeFromPinnedChats': 'Sblocca', + 'conversation.announcement.userMessage': + "Messaggio dall'utente: {{prompt}}. Caricamento in corso del messaggio del bot.", + 'user.guest': 'Ospite', + 'user.loading': '...', + 'tooltip.attach': 'Allega', + 'tooltip.send': 'Invia', + 'tooltip.microphone.active': 'Non ascoltare più', + 'tooltip.microphone.inactive': 'Usa il microfono', + 'button.newChat': 'Nuova chat', + 'tooltip.chatHistoryMenu': 'Menu cronologia chat', + 'tooltip.responseRecorded': 'Risposta registrata', + 'tooltip.backToTop': "Torna all'inizio", + 'tooltip.backToBottom': 'Torna alla fine', + 'tooltip.settings': 'Opzioni chatbot', + 'modal.title.preview': 'Anteprima allegato', + 'modal.title.edit': 'Modifica allegato', + 'icon.lightspeed.alt': 'icona di lightspeed', + 'icon.permissionRequired.alt': 'icona di autorizzazione richiesta', + 'message.options.label': 'Opzioni', + 'file.upload.error.alreadyExists': 'Il file esiste già.', + 'file.upload.error.multipleFiles': 'È stato caricato più di un file.', + 'file.upload.error.unsupportedType': + 'Tipo di file non supportato. I tipi supportati sono: .txt, .yaml e .json.', + 'file.upload.error.fileTooLarge': + 'Dimensione del file troppo grande. Verificare che il file sia inferiore a 25 MB.', + 'file.upload.error.readFailed': + 'Impossibile leggere il file: {{errorMessage}}', + 'error.context.fileAttachment': + "useFileAttachmentContext deve essere all'interno di un FileAttachmentContextProvider", + 'feedback.form.title': 'Perché hai scelto questa valutazione?', + 'feedback.form.textAreaPlaceholder': + 'Fornire commenti aggiuntivi facoltativi', + 'feedback.form.submitWord': 'Invia', + 'feedback.tooltips.goodResponse': 'Risposta valida', + 'feedback.tooltips.badResponse': 'Risposta non valida', + 'feedback.tooltips.copied': 'Copiato', + 'feedback.tooltips.copy': 'Copia', + 'feedback.tooltips.listening': 'In ascolto', + 'feedback.tooltips.listen': 'Ascoltare', + 'feedback.quickResponses.positive.helpful': 'Informazioni utili', + 'feedback.quickResponses.positive.easyToUnderstand': 'Facile da capire', + 'feedback.quickResponses.positive.resolvedIssue': + 'Ha risolto il mio problema', + 'feedback.quickResponses.negative.didntAnswer': + 'Non ha risposto alla mia domanda', + 'feedback.quickResponses.negative.hardToUnderstand': 'Difficile da capire', + 'feedback.quickResponses.negative.notHelpful': 'Non utile', + 'feedback.completion.title': 'Feedback inviato', + 'feedback.completion.body': + 'Abbiamo ricevuto la tua risposta. Grazie per aver condiviso i tuoi commenti!', + 'conversation.category.pinnedChats': 'Bloccata', + 'conversation.category.recent': 'Recente', + 'settings.pinned.enable': 'Abilita le chat bloccate', + 'settings.pinned.disable': 'Disattiva le chat bloccate', + 'settings.pinned.enabled.description': + 'Le chat bloccate sono attualmente abilitate', + 'settings.pinned.disabled.description': + 'Le chat bloccate sono attualmente disabilitate', + }, +}); + +export default lightspeedTranslationIt; diff --git a/workspaces/lightspeed/plugins/lightspeed/src/translations/ja.ts b/workspaces/lightspeed/plugins/lightspeed/src/translations/ja.ts new file mode 100644 index 0000000000..03ff8d9555 --- /dev/null +++ b/workspaces/lightspeed/plugins/lightspeed/src/translations/ja.ts @@ -0,0 +1,187 @@ +/* + * 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 { lightspeedTranslationRef } from './ref'; + +/** + * Japanese translation for plugin.lightspeed. + * @public + */ +const lightspeedTranslationJa = createTranslationMessages({ + ref: lightspeedTranslationRef, + messages: { + 'page.title': 'Lightspeed', + 'page.subtitle': 'AI 搭載開発アシスタント', + 'prompts.codeReadability.title': 'コードの可読性に関するヘルプを利用する', + 'prompts.codeReadability.message': + 'コードの可読性と保守性を高めるための手法を提案してくれませんか?', + 'prompts.debugging.title': 'デバッグに関するヘルプを利用する', + 'prompts.debugging.message': + 'アプリケーションがデータベースに接続しようとするとエラーが発生します。問題の特定を手伝ってくれませんか?', + 'prompts.developmentConcept.title': '開発コンセプトを説明する', + 'prompts.developmentConcept.message': + 'マイクロサービスアーキテクチャーの仕組みと、モノリシックな設計と比べた利点について説明してくれませんか?', + 'prompts.codeOptimization.title': 'コードの最適化を提案する', + 'prompts.codeOptimization.message': + 'コードを最適化してパフォーマンスを向上させるための一般的な方法を提案してくれませんか?', + 'prompts.documentation.title': 'ドキュメントの要約', + 'prompts.documentation.message': + 'Web アプリケーションでの OAuth 2.0 認証の実装に関するドキュメントを要約してくれませんか?', + 'prompts.gitWorkflows.title': 'Git を使用したワークフロー', + 'prompts.gitWorkflows.message': + '既存の作業内容を失うことなく、別のブランチのコードに変更を加えたいです。Git を使用してこれを行うにはどうすればよいですか?', + 'prompts.testingStrategies.title': 'テスト方法を提案する', + 'prompts.testingStrategies.message': + '堅牢でエラーのないアプリケーションを構築するための一般的なテスト方法をいくつか提案してくれませんか?', + 'prompts.sortingAlgorithms.title': + 'ソートのアルゴリズムをわかりやすく説明する', + 'prompts.sortingAlgorithms.message': + 'クイックソートとマージソートのアルゴリズムの違いと、それぞれの使用タイミングについて説明してくれませんか?', + 'prompts.eventDriven.title': 'イベント駆動型アーキテクチャーを理解する', + 'prompts.eventDriven.message': + 'イベント駆動型アーキテクチャーとは何か、またそれをソフトウェア開発でどのようなときに使用すると有益かを説明してくれませんか?', + 'prompts.tekton.title': 'Tekton を使用したデプロイ', + 'prompts.tekton.message': + 'Tekton パイプラインを使用してアプリケーションのデプロイを自動化するのを手伝ってくれませんか?', + 'prompts.openshift.title': 'OpenShift デプロイメントの作成', + 'prompts.openshift.message': + 'コンテナー化されたアプリケーション用に OpenShift で新しいデプロイメントを作成する手順を説明してくれませんか?', + 'prompts.rhdh.title': 'Red Hat Developer Hub を使い始める', + 'prompts.rhdh.message': + 'ソフトウェアカタログの探索やサービスの追加など、開発者が Developer Hub を利用する際にまず何をすべきか教えてくれませんか?', + 'conversation.delete.confirm.title': 'チャットを削除しますか?', + 'conversation.delete.confirm.message': + 'このチャットはここに表示されなくなります。Lightspeed Activity からのプロンプト、回答、フィードバックなど、関連アクティビティーも削除されます。', + 'conversation.delete.confirm.action': '削除', + 'conversation.rename.confirm.title': 'チャットの名前を変更しますか?', + 'conversation.rename.confirm.action': '名前の変更', + 'conversation.rename.placeholder': 'チャット名', + 'conversation.action.error': 'エラーが発生しました: {{error}}', + 'permission.required.title': '権限の不足', + 'permission.required.description': + 'lightspeed プラグインを表示するには、管理者に連絡して lightspeed.chat.read および lightspeed.chat.create 権限を付与してもらうよう依頼してください。', + 'disclaimer.withValidation': + 'この機能は AI テクノロジーを使用します。入力内容に個人情報やその他の機密情報を含めないでください。やり取りの内容は、Red Hat の製品やサービスを改善するために使用される場合があります。', + 'disclaimer.withoutValidation': + 'この機能は AI テクノロジーを使用します。入力内容に個人情報やその他の機密情報を含めないでください。やり取りの内容は、Red Hat の製品やサービスを改善するために使用される場合があります。', + 'footer.accuracy.label': + 'AI によって生成されたコンテンツは、使用する前に必ず確認してください。', + 'footer.accuracy.popover.title': '正確性の確認', + 'footer.accuracy.popover.description': + 'Developer Lightspeed は正確性を期すよう努めておりますが、誤りが生じる可能性は常にあります。特に意思決定や行動に関わる重要な情報については、信頼できる情報源でその情報を確認することを推奨します。', + 'footer.accuracy.popover.image.alt': '脚注ポップオーバーのサンプル画像', + 'footer.accuracy.popover.cta.label': '了解しました', + 'footer.accuracy.popover.link.label': '詳細', + 'common.cancel': 'キャンセル', + 'common.close': '閉じる', + 'common.readMore': 'さらに表示する', + 'common.noSearchResults': '検索に一致する結果がありません', + 'menu.newConversation': '新しいチャット', + 'chatbox.header.title': 'Developer Lightspeed', + 'chatbox.search.placeholder': '検索', + 'chatbox.provider.other': 'その他', + 'chatbox.emptyState.noPinnedChats': '固定したチャットがありません', + 'chatbox.emptyState.noRecentChats': '最近のチャットがありません', + 'chatbox.emptyState.noResults.title': '結果が見つかりません', + 'chatbox.emptyState.noResults.body': + '検索クエリーを調整して再試行してください。スペルを確認するか、より一般的な用語をお試しください。', + 'chatbox.welcome.greeting': 'こんにちは、{{userName}}', + 'chatbox.welcome.description': '今日は何をお手伝いしましょうか?', + 'chatbox.message.placeholder': + 'メッセージを送信し、必要に応じて JSON、YAML、または TXT ファイルをアップロードします...', + 'chatbox.fileUpload.failed': 'ファイルのアップロードに失敗しました', + 'chatbox.fileUpload.infoText': + 'サポートされているファイルの種類は、.txt、.yaml、.json です。最大ファイルサイズは 25 MB です。', + 'aria.chatbotSelector': 'チャットボットセレクター', + 'aria.important': '重要', + 'aria.chatHistoryMenu': 'チャット履歴メニュー', + 'aria.closeDrawerPanel': 'ドロワーパネルを閉じる', + 'aria.search.placeholder': '検索', + 'aria.searchPreviousConversations': '以前の会話の検索', + 'aria.resize': 'サイズ変更', + 'aria.options.label': 'オプション', + 'aria.scroll.down': '一番下に戻る', + 'aria.scroll.up': '一番上に戻る', + 'aria.settings.label': 'チャットボットのオプション', + 'modal.edit': '編集', + 'modal.save': '保存', + 'modal.close': '閉じる', + 'modal.cancel': 'キャンセル', + 'conversation.delete': '削除', + 'conversation.rename': '名前の変更', + 'conversation.addToPinnedChats': '固定', + 'conversation.removeFromPinnedChats': '固定解除', + 'conversation.announcement.userMessage': + 'ユーザーからのメッセージ: {{prompt}}。ボットからのメッセージを読み込んでいます。', + 'user.guest': 'ゲスト', + 'user.loading': '...', + 'tooltip.attach': '割り当て', + 'tooltip.send': '送信', + 'tooltip.microphone.active': '聞き取りを停止', + 'tooltip.microphone.inactive': 'マイクを使用する', + 'button.newChat': '新しいチャット', + 'tooltip.chatHistoryMenu': 'チャット履歴メニュー', + 'tooltip.responseRecorded': '回答が記録されました', + 'tooltip.backToTop': '一番上に戻る', + 'tooltip.backToBottom': '一番下に戻る', + 'tooltip.settings': 'チャットボットのオプション', + 'modal.title.preview': '添付ファイルのプレビュー', + 'modal.title.edit': '添付ファイルの編集', + 'icon.lightspeed.alt': 'lightspeed アイコン', + 'icon.permissionRequired.alt': '権限不足アイコン', + 'message.options.label': 'オプション', + 'file.upload.error.alreadyExists': 'ファイルがすでに存在します。', + 'file.upload.error.multipleFiles': '複数のファイルをアップロードしました。', + 'file.upload.error.unsupportedType': + 'サポートされていないファイルタイプです。サポートされているタイプは、.txt、.yaml、.json です。', + 'file.upload.error.fileTooLarge': + 'ファイルサイズが大きすぎます。ファイルサイズが 25 MB 未満であることを確認してください。', + 'file.upload.error.readFailed': + 'ファイルの読み取りに失敗しました: {{errorMessage}}', + 'error.context.fileAttachment': + 'useFileAttachmentContext が FileAttachmentContextProvider 内に収まっている必要があります', + 'feedback.form.title': 'なぜこの評価を選んだのですか?', + 'feedback.form.textAreaPlaceholder': + 'その他ご意見をお聞かせください (任意)', + 'feedback.form.submitWord': '送信', + 'feedback.tooltips.goodResponse': '回答内容が良い', + 'feedback.tooltips.badResponse': '回答内容が悪い', + 'feedback.tooltips.copied': 'コピー済み', + 'feedback.tooltips.copy': 'コピー', + 'feedback.tooltips.listening': '聞き取り中', + 'feedback.tooltips.listen': '聞き取り', + 'feedback.quickResponses.positive.helpful': '情報が役に立つ', + 'feedback.quickResponses.positive.easyToUnderstand': 'わかりやすい', + 'feedback.quickResponses.positive.resolvedIssue': '問題が解決した', + 'feedback.quickResponses.negative.didntAnswer': + '質問に対する答えが得られなかった', + 'feedback.quickResponses.negative.hardToUnderstand': 'わかりにくい', + 'feedback.quickResponses.negative.notHelpful': '役に立たない', + 'feedback.completion.title': 'フィードバックを送信しました', + 'feedback.completion.body': + 'ご回答を受け取りました。ご意見をお聞かせいただきありがとうございました!', + 'conversation.category.pinnedChats': '固定', + 'conversation.category.recent': '最近', + 'settings.pinned.enable': 'チャットの固定の有効化', + 'settings.pinned.disable': 'チャットの固定の無効化', + 'settings.pinned.enabled.description': 'チャットの固定は現在有効です', + 'settings.pinned.disabled.description': 'チャットの固定は現在無効です', + }, +}); + +export default lightspeedTranslationJa; diff --git a/workspaces/orchestrator/.changeset/olive-bugs-swim.md b/workspaces/orchestrator/.changeset/olive-bugs-swim.md new file mode 100644 index 0000000000..bd07de7700 --- /dev/null +++ b/workspaces/orchestrator/.changeset/olive-bugs-swim.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-orchestrator': patch +--- + +Added 'it' and 'ja' i18n support and updated 'fr' translation strings. diff --git a/workspaces/orchestrator/plugins/orchestrator-backend/src/service/api/mapping/V2Mappings.test.ts b/workspaces/orchestrator/plugins/orchestrator-backend/src/service/api/mapping/V2Mappings.test.ts index 0d3ea7659b..8898f6ca4d 100644 --- a/workspaces/orchestrator/plugins/orchestrator-backend/src/service/api/mapping/V2Mappings.test.ts +++ b/workspaces/orchestrator/plugins/orchestrator-backend/src/service/api/mapping/V2Mappings.test.ts @@ -119,8 +119,8 @@ describe('scenarios to verify mapToProcessInstanceDTO', () => { setZone: true, }); const duration = Duration.fromMillis(end.diff(start).toMillis()) - .rescale() - .toHuman(); + .shiftTo('hours', 'minutes', 'seconds') + .toHuman({ unitDisplay: 'long' }); // Act const result = mapToProcessInstanceDTO(processIntanceV1); @@ -146,7 +146,6 @@ describe('scenarios to verify mapToProcessInstanceDTO', () => { ); expect(result.end).toEqual(processIntanceV1.end); expect(result.duration).toEqual(duration); - expect(result.duration).toEqual('1 hour'); expect(result.description).toEqual(processIntanceV1.description); expect(result.workflowdata).toEqual( // @ts-ignore diff --git a/workspaces/orchestrator/plugins/orchestrator-backend/src/service/api/mapping/V2Mappings.ts b/workspaces/orchestrator/plugins/orchestrator-backend/src/service/api/mapping/V2Mappings.ts index 89b1b831b5..c38a30c3f0 100644 --- a/workspaces/orchestrator/plugins/orchestrator-backend/src/service/api/mapping/V2Mappings.ts +++ b/workspaces/orchestrator/plugins/orchestrator-backend/src/service/api/mapping/V2Mappings.ts @@ -94,7 +94,9 @@ export function mapToProcessInstanceDTO( setZone: true, }); const duration = processInstance.end - ? Duration.fromMillis(end.diff(start).toMillis()).rescale().toHuman() + ? Duration.fromMillis(end.diff(start).toMillis()) + .shiftTo('hours', 'minutes', 'seconds') + .toHuman({ unitDisplay: 'long' }) : undefined; let variables: Record | undefined; diff --git a/workspaces/orchestrator/plugins/orchestrator/src/translations/fr.ts b/workspaces/orchestrator/plugins/orchestrator/src/translations/fr.ts index 993673d8f3..01cb47a963 100644 --- a/workspaces/orchestrator/plugins/orchestrator/src/translations/fr.ts +++ b/workspaces/orchestrator/plugins/orchestrator/src/translations/fr.ts @@ -18,72 +18,80 @@ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { orchestratorTranslationRef } from './ref'; +/** + * fr translation for plugin.orchestrator. + * @public + */ const orchestratorTranslationFr = createTranslationMessages({ ref: orchestratorTranslationRef, messages: { - 'page.title': 'Orchestrateur de Workflows', - 'page.tabs.workflows': 'Workflows', + 'page.title': 'Orchestrateur de flux de travail', + 'page.tabs.workflows': 'Flux de travail', 'page.tabs.allRuns': 'Toutes les exécutions', - 'page.tabs.workflowDetails': 'Détails du workflow', - 'page.tabs.workflowRuns': 'Exécutions de workflow', - 'table.title.workflows': 'Workflows', - 'table.title.allRuns': 'Toutes les exécutions ({{count}})', - 'table.title.allWorkflowRuns': 'Exécutions de workflow ({{count}})', + 'page.tabs.workflowDetails': 'Détails du flux de travail', + 'page.tabs.workflowRuns': "Le flux de travail s'exécute", + 'table.title.workflows': 'Flux de travail', + 'table.title.allRuns': 'Toutes les courses ({{count}})', + 'table.title.allWorkflowRuns': 'Exécutions du workflow ({{count}})', 'table.headers.name': 'Nom', - 'table.headers.runStatus': "Statut d'exécution", - 'table.headers.started': 'Démarré', + 'table.headers.runStatus': "État d'exécution", + 'table.headers.started': 'Commencé', 'table.headers.status': 'Statut', - 'table.headers.lastRun': 'Dernière exécution', - 'table.headers.lastRunStatus': 'Statut de la dernière exécution', - 'table.headers.workflowStatus': 'Statut du workflow', + 'table.headers.workflowStatus': 'Statut du flux de travail', 'table.headers.duration': 'Durée', 'table.headers.description': 'Description', - 'table.headers.workflowName': 'Nom du workflow', - 'table.actions.run': 'Exécuter', + 'table.headers.lastRun': 'Dernière course', + 'table.headers.lastRunStatus': 'Statut de la dernière exécution', + 'table.headers.workflowName': 'Nom du flux de travail', + 'table.actions.run': 'Exécution', 'table.actions.viewRuns': 'Voir les exécutions', - 'table.actions.viewInputSchema': "Voir le schéma d'entrée", - 'table.status.running': 'En cours', + 'table.actions.viewInputSchema': "Afficher le schéma d'entrée", + 'table.status.running': "En cours d'exécution", 'table.status.failed': 'Échoué', - 'table.status.completed': 'Terminé', - 'table.status.aborted': 'Interrompu', + 'table.status.completed': 'Complété', + 'table.status.aborted': 'Avorté', 'table.status.pending': 'En attente', 'table.status.active': 'Actif', 'table.filters.status': 'Statut', - 'table.filters.started': 'Démarré', + 'table.filters.started': 'Commencé', 'table.filters.startedOptions.today': "Aujourd'hui", 'table.filters.startedOptions.yesterday': 'Hier', 'table.filters.startedOptions.last7days': 'Les 7 derniers jours', - 'table.filters.startedOptions.thisMonth': 'Ce mois', + 'table.filters.startedOptions.thisMonth': 'Ce mois-ci', 'workflow.details': 'Détails', - 'workflow.definition': 'Définition du workflow', - 'workflow.progress': 'Progression du workflow', + 'workflow.definition': 'Définition du flux de travail', + 'workflow.progress': 'Progression du flux de travail', 'workflow.status.available': 'Disponible', - 'workflow.status.unavailable': 'Indisponible', - 'workflow.fields.workflow': 'Workflow', - 'workflow.fields.workflowStatus': 'Statut du workflow', - 'workflow.fields.runStatus': "Statut d'exécution", + 'workflow.status.unavailable': 'Non disponible', + 'workflow.fields.workflow': 'Flux de travail', + 'workflow.fields.workflowStatus': 'Statut du flux de travail', + 'workflow.fields.runStatus': "État d'exécution", 'workflow.fields.duration': 'Durée', 'workflow.fields.description': 'Description', - 'workflow.fields.started': 'Démarré', - 'workflow.errors.retriggerFailed': 'Redéclenchement échoué: {{reason}}', + 'workflow.fields.started': 'Commencé', 'workflow.fields.workflowId': "ID d'exécution", 'workflow.fields.workflowIdCopied': "ID d'exécution copié dans le presse-papiers", + 'workflow.errors.retriggerFailed': 'Échec du re-déclenchement : {{reason}}', 'workflow.errors.abortFailed': - "Interruption échouée: L'exécution a déjà été terminée.", - 'workflow.errors.abortFailedWithReason': 'Interruption échouée: {{reason}}', + "Échec de l'abandon : l'exécution a déjà été terminée.", + 'workflow.errors.abortFailedWithReason': "Échec de l'abandon : {{reason}}", 'workflow.errors.failedToLoadDetails': - "Impossible de charger les détails pour l'ID du workflow: {{id}}", + "Échec du chargement des détails de l'ID de workflow : {{id}}", 'workflow.messages.areYouSureYouWantToRunThisWorkflow': - 'Voulez-vous vraiment exécuter ce workflow ?', - 'workflow.buttons.run': 'Exécuter', - 'workflow.buttons.runWorkflow': 'Exécuter le workflow', - 'workflow.buttons.runAgain': 'Exécuter à nouveau', - 'workflow.buttons.running': 'En cours...', - 'workflow.buttons.fromFailurePoint': 'À partir du point de défaillance', - 'workflow.buttons.runFailedAgain': 'Redéclenchement échoué', - 'run.title': 'Exécuter le workflow', - 'run.pageTitle': '{{processName}} exécution', + 'Êtes-vous sûr de vouloir exécuter ce workflow ?', + 'workflow.messages.userNotAuthorizedExecute': + "L'utilisateur n'est pas autorisé à exécuter le workflow.", + 'workflow.messages.workflowDown': + "Le flux de travail est actuellement en panne ou dans un état d'erreur. L'exécuter maintenant peut échouer ou produire des résultats inattendus.", + 'workflow.buttons.run': 'Exécution', + 'workflow.buttons.runWorkflow': 'Exécuter le flux de travail', + 'workflow.buttons.runAgain': 'Courir à nouveau', + 'workflow.buttons.running': "En cours d'exécution", + 'workflow.buttons.fromFailurePoint': 'Du point de défaillance', + 'workflow.buttons.runFailedAgain': "L'exécution a échoué à nouveau", + 'run.title': 'Exécuter le flux de travail', + 'run.pageTitle': '{{processName}} exécuter', 'run.variables': "Variables d'exécution", 'run.inputs': 'Entrées', 'run.results': 'Résultats', @@ -91,42 +99,43 @@ const orchestratorTranslationFr = createTranslationMessages({ 'run.logs.title': "Journaux d'exécution", 'run.logs.noLogsAvailable': 'Aucun journal disponible pour cette exécution de workflow.', - 'run.abort.title': "Interrompre l'exécution du workflow ?", - 'run.abort.button': 'Interrompre', + 'run.abort.title': "Abandonner l'exécution du workflow ?", + 'run.abort.button': 'Avorter', 'run.abort.warning': - "L'interruption arrêtera immédiatement toutes les étapes en cours et en attente. Tout travail en cours sera perdu.", + "L'abandon arrêtera immédiatement toutes les étapes en cours et en attente. Tout travail en cours sera perdu.", 'run.abort.completed.title': 'Exécution terminée', 'run.abort.completed.message': - "Il n'est pas possible d'interrompre l'exécution car elle a déjà été terminée.", + "Il n'est pas possible d'interrompre l'exécution car elle est déjà terminée.", 'run.status.completed': 'Exécution terminée', 'run.status.failed': "L'exécution a échoué {{time}}", 'run.status.aborted': "L'exécution a été interrompue", 'run.status.completedWithMessage': 'Exécution terminée {{time}} avec message', + 'run.status.failedAt': "L'exécution a échoué {{time}}", 'run.status.completedAt': 'Exécution terminée {{time}}', 'run.status.running': - "Le workflow est en cours d'exécution. Démarré {{time}}", + "Le flux de travail est en cours d'exécution. Démarré {{time}}", 'run.status.runningWaitingAtNode': - "Le workflow est en cours d'exécution - en attente au nœud {{node}} depuis {{formattedTime}}", + "Le workflow est en cours d'exécution – en attente au nœud {{node}} depuis {{formattedTime}}", 'run.status.workflowIsRunning': - "Le workflow est en cours d'exécution. Démarré {{time}}", + "Le flux de travail est en cours d'exécution. Démarré {{time}}", 'run.status.noAdditionalInfo': - "Le workflow n'a pas fourni d'informations supplémentaires sur le statut.", + "Le flux de travail n'a fourni aucune information supplémentaire sur le statut.", 'run.status.resultsWillBeDisplayedHereOnceTheRunIsComplete': - "Les résultats seront affichés ici une fois que l'exécution sera terminée.", - 'run.retrigger': 'Redéclencher', - 'run.viewVariables': 'Voir les variables', - 'run.suggestedNextWorkflow': 'Workflow suggéré suivant', - 'run.suggestedNextWorkflows': 'Workflows suggérés suivants', - 'tooltips.completed': 'Terminé', + 'Les résultats seront affichés ici une fois l’exécution terminée.', + 'run.retrigger': 'Re-déclencher', + 'run.viewVariables': 'Afficher les variables', + 'run.suggestedNextWorkflow': 'Prochain flux de travail suggéré', + 'run.suggestedNextWorkflows': 'Prochains flux de travail suggérés', + 'tooltips.completed': 'Complété', 'tooltips.active': 'Actif', - 'tooltips.aborted': 'Interrompu', + 'tooltips.aborted': 'Avorté', 'tooltips.suspended': 'Suspendu', 'tooltips.pending': 'En attente', 'tooltips.workflowDown': - "Le workflow est actuellement indisponible ou dans un état d'erreur", + "Le flux de travail est actuellement interrompu ou dans un état d'erreur", 'tooltips.userNotAuthorizedAbort': - 'utilisateur non autorisé à interrompre le workflow', + "l'utilisateur n'est pas autorisé à interrompre le flux de travail", 'tooltips.userNotAuthorizedExecute': 'utilisateur non autorisé à exécuter le workflow', 'messages.noDataAvailable': 'Aucune donnée disponible', @@ -135,43 +144,28 @@ const orchestratorTranslationFr = createTranslationMessages({ 'messages.noInputSchemaWorkflow': "Aucun schéma d'entrée n'est défini pour ce workflow.", 'messages.workflowInstanceNoInputs': - "L'instance de workflow n'a pas d'entrées", + "L'instance de workflow n'a aucune entrée", 'messages.missingJsonSchema.title': - "Schéma JSON manquant pour le formulaire d'entrée", + 'Schéma JSON manquant pour le formulaire de saisie', 'messages.missingJsonSchema.message': "Ce workflow n'a pas de schéma JSON défini pour la validation des entrées. Vous pouvez toujours exécuter le workflow, mais la validation des entrées sera limitée.", 'messages.additionalDetailsAboutThisErrorAreNotAvailable': - "Aucune information supplémentaire sur cet erreur n'est disponible", - 'reviewStep.hiddenFieldsNote': - "Certains champs sont masqués sur cette page mais seront inclus dans la demande d'exécution du workflow.", + 'Des détails supplémentaires sur cette erreur ne sont pas disponibles', 'common.close': 'Fermer', 'common.cancel': 'Annuler', 'common.execute': 'Exécuter', 'common.details': 'Détails', - 'common.links': 'Liens', + 'common.links': 'Links', 'common.values': 'Valeurs', - 'common.unavailable': '---', 'common.back': 'Retour', - 'common.run': 'Exécuter', + 'common.run': 'Exécution', 'common.next': 'Suivant', - 'common.review': 'Réviser', - 'duration.aFewSeconds': 'quelques secondes', - 'duration.aSecond': 'une seconde', - 'duration.seconds': '{{count}} secondes', - 'duration.aMinute': 'une minute', - 'duration.minutes': '{{count}} minutes', - 'duration.anHour': 'une heure', - 'duration.hours': '{{count}} heures', - 'duration.aDay': 'un jour', - 'duration.days': '{{count}} jours', - 'duration.aMonth': 'un mois', - 'duration.months': '{{count}} mois', - 'duration.aYear': 'un an', - 'duration.years': '{{count}} ans', + 'common.review': 'Revue', + 'common.unavailable': '---', 'stepperObjectField.error': - "Le champ de l'objet du stepper n'est pas compatible avec les schémas qui ne contiennent pas de propriétés", + "Le champ d'objet Stepper n'est pas pris en charge pour les schémas qui ne contiennent pas de propriétés", 'formDecorator.error': - 'Le décorateur de formulaire doit fournir des données de contexte.', + 'Le décorateur de formulaire doit fournir des données contextuelles.', 'aria.close': 'fermer', }, }); diff --git a/workspaces/orchestrator/plugins/orchestrator/src/translations/it.ts b/workspaces/orchestrator/plugins/orchestrator/src/translations/it.ts index 13f15bc07f..3243aa8c16 100644 --- a/workspaces/orchestrator/plugins/orchestrator/src/translations/it.ts +++ b/workspaces/orchestrator/plugins/orchestrator/src/translations/it.ts @@ -18,157 +18,155 @@ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { orchestratorTranslationRef } from './ref'; +/** + * Italian translation for plugin.orchestrator. + * @public + */ const orchestratorTranslationIt = createTranslationMessages({ ref: orchestratorTranslationRef, messages: { - 'page.title': 'Orchestratore di Workflow', - 'page.tabs.workflows': 'Workflow', + 'page.title': 'Orchestratore del flusso di lavoro', + 'page.tabs.workflows': 'Flussi di lavoro', 'page.tabs.allRuns': 'Tutte le esecuzioni', - 'page.tabs.workflowDetails': 'Dettagli del workflow', - 'page.tabs.workflowRuns': 'Esecuzioni del workflow', - 'table.title.workflows': 'Workflow', + 'page.tabs.workflowDetails': 'Dettagli del flusso di lavoro', + 'page.tabs.workflowRuns': 'Esecuzioni del flusso di lavoro', + 'table.title.workflows': 'Flussi di lavoro', 'table.title.allRuns': 'Tutte le esecuzioni ({{count}})', - 'table.title.allWorkflowRuns': 'Esecuzioni del workflow ({{count}})', + 'table.title.allWorkflowRuns': + 'Esecuzioni del flusso di lavoro ({{count}})', 'table.headers.name': 'Nome', - 'table.headers.runStatus': 'Stato esecuzione', - 'table.headers.started': 'Avviato', + 'table.headers.runStatus': "Stato dell'esecuzione", + 'table.headers.started': 'Iniziata', 'table.headers.status': 'Stato', - 'table.headers.lastRun': 'Ultima esecuzione', - 'table.headers.lastRunStatus': "Stato dell'ultima esecuzione", - 'table.headers.workflowStatus': 'Stato del workflow', + 'table.headers.workflowStatus': 'Stato del flusso di lavoro', 'table.headers.duration': 'Durata', 'table.headers.description': 'Descrizione', - 'table.headers.workflowName': 'Nome del workflow', - 'table.actions.run': 'Esegui', + 'table.headers.lastRun': 'Ultima esecuzione', + 'table.headers.lastRunStatus': "Stato dell'ultima esecuzione", + 'table.headers.workflowName': 'Nome flusso di lavoro', + 'table.actions.run': 'Esecuzione', 'table.actions.viewRuns': 'Visualizza esecuzioni', 'table.actions.viewInputSchema': 'Visualizza schema di input', 'table.status.running': 'In esecuzione', - 'table.status.failed': 'Fallito', + 'table.status.failed': 'Non riuscito', 'table.status.completed': 'Completato', 'table.status.aborted': 'Interrotto', - 'table.status.pending': 'In attesa', + 'table.status.pending': 'In pausa', 'table.status.active': 'Attivo', 'table.filters.status': 'Stato', - 'table.filters.started': 'Avviato', + 'table.filters.started': 'Iniziata', 'table.filters.startedOptions.today': 'Oggi', 'table.filters.startedOptions.yesterday': 'Ieri', 'table.filters.startedOptions.last7days': 'Ultimi 7 giorni', 'table.filters.startedOptions.thisMonth': 'Questo mese', 'workflow.details': 'Dettagli', - 'workflow.definition': 'Definizione del workflow', - 'workflow.progress': 'Progresso del workflow', + 'workflow.definition': 'Definizione flusso di lavoro', + 'workflow.progress': 'Avanzamento flusso di lavoro', 'workflow.status.available': 'Disponibile', 'workflow.status.unavailable': 'Non disponibile', - 'workflow.fields.workflow': 'Workflow', - 'workflow.fields.workflowStatus': 'Stato del workflow', - 'workflow.fields.runStatus': 'Stato esecuzione', + 'workflow.fields.workflow': 'Flusso di lavoro', + 'workflow.fields.workflowStatus': 'Stato del flusso di lavoro', + 'workflow.fields.runStatus': "Stato dell'esecuzione", 'workflow.fields.duration': 'Durata', 'workflow.fields.description': 'Descrizione', - 'workflow.fields.started': 'Avviato', + 'workflow.fields.started': 'Iniziata', 'workflow.fields.workflowId': 'ID esecuzione', - 'workflow.fields.workflowIdCopied': 'ID esecuzione copiato nella clipboard', - 'workflow.errors.retriggerFailed': 'Riattivazione fallita: {{reason}}', + 'workflow.fields.workflowIdCopied': 'ID esecuzione copiato negli appunti', + 'workflow.errors.retriggerFailed': 'Riattivazione non riuscita: {{reason}}', 'workflow.errors.abortFailed': - "Interruzione fallita: L'esecuzione è già stata completata.", - 'workflow.errors.abortFailedWithReason': 'Interruzione fallita: {{reason}}', + "Interruzione non riuscita: l'esecuzione è già stata completata.", + 'workflow.errors.abortFailedWithReason': + 'Interruzione non riuscita: {{reason}}', 'workflow.errors.failedToLoadDetails': - "Impossibile caricare i dettagli per l'ID del workflow: {{id}}", + "Impossibile caricare i dettagli dell'ID del flusso di lavoro: {{id}}", 'workflow.messages.areYouSureYouWantToRunThisWorkflow': - 'Sei sicuro di voler eseguire questo workflow?', - 'workflow.buttons.run': 'Esegui', - 'workflow.buttons.runWorkflow': 'Esegui workflow', + 'Eseguire questo flusso di lavoro?', + 'workflow.messages.userNotAuthorizedExecute': + 'Utente non autorizzato a eseguire il flusso di lavoro.', + 'workflow.messages.workflowDown': + "Al momento lo stato del flusso di lavoro è inattivo o in errore. L'esecuzione potrebbe non riuscire o produrre risultati imprevisti.", + 'workflow.buttons.run': 'Esecuzione', + 'workflow.buttons.runWorkflow': 'Esegui flusso di lavoro', 'workflow.buttons.runAgain': 'Esegui di nuovo', - 'workflow.buttons.running': 'In esecuzione...', - 'workflow.buttons.fromFailurePoint': 'Dal punto di fallimento', - 'workflow.buttons.runFailedAgain': 'Riattivazione fallita', - 'run.title': 'Esegui workflow', - 'run.pageTitle': '{{processName}} esecuzione', - 'run.variables': 'Variabili di esecuzione', + 'workflow.buttons.running': 'Esecuzione in corso...', + 'workflow.buttons.fromFailurePoint': 'Dal punto di errore', + 'workflow.buttons.runFailedAgain': 'Esecuzione non riuscita di nuovo', + 'run.title': 'Esegui flusso di lavoro', + 'run.pageTitle': 'Esecuzione di {{processName}}', + 'run.variables': 'Esegui variabili', 'run.inputs': 'Input', 'run.results': 'Risultati', 'run.logs.viewLogs': 'Visualizza log', 'run.logs.title': 'Log di esecuzione', 'run.logs.noLogsAvailable': 'Nessun log disponibile per questa esecuzione del workflow.', - 'run.abort.title': "Interrompere l'esecuzione del workflow?", + 'run.abort.title': "Interrompere l'esecuzione del flusso di lavoro?", 'run.abort.button': 'Interrompi', 'run.abort.warning': - "L'interruzione fermerà immediatamente tutti i passaggi in corso e in attesa. Qualsiasi lavoro in corso andrà perso.", + "L'interruzione arresta immediatamente tutti i passaggi in corso e in sospeso. Tutti i lavori in corso andranno persi.", 'run.abort.completed.title': 'Esecuzione completata', 'run.abort.completed.message': "Non è possibile interrompere l'esecuzione poiché è già stata completata.", 'run.status.completed': 'Esecuzione completata', - 'run.status.failed': "L'esecuzione è fallita {{time}}", - 'run.status.aborted': "L'esecuzione è stata interrotta", + 'run.status.failed': 'Esecuzione non riuscita {{time}}', + 'run.status.aborted': 'Esecuzione interrotta', 'run.status.completedWithMessage': 'Esecuzione completata {{time}} con messaggio', + 'run.status.failedAt': 'Esecuzione non riuscita {{time}}', 'run.status.completedAt': 'Esecuzione completata {{time}}', - 'run.status.running': 'Il workflow è in esecuzione. Avviato {{time}}', + 'run.status.running': + 'Flusso di lavoro in esecuzione. Avviato alle {{time}}', 'run.status.runningWaitingAtNode': - 'Il workflow è in esecuzione - in attesa al nodo {{node}} dal {{formattedTime}}', + 'Flusso di lavoro in esecuzione: in attesa sul nodo {{node}} dalle {{formattedTime}}', 'run.status.workflowIsRunning': - 'Il workflow è in esecuzione. Avviato {{time}}', + 'Flusso di lavoro in esecuzione. Avviato alle {{time}}', 'run.status.noAdditionalInfo': - 'Il workflow non ha fornito informazioni aggiuntive sullo stato.', + 'Il flusso di lavoro non ha fornito ulteriori informazioni sullo stato.', 'run.status.resultsWillBeDisplayedHereOnceTheRunIsComplete': "I risultati verranno visualizzati qui una volta completata l'esecuzione.", 'run.retrigger': 'Riattiva', 'run.viewVariables': 'Visualizza variabili', - 'run.suggestedNextWorkflow': 'Workflow suggerito successivo', - 'run.suggestedNextWorkflows': 'Workflow suggeriti successivi', + 'run.suggestedNextWorkflow': 'Flusso di lavoro successivo suggerito', + 'run.suggestedNextWorkflows': 'Flussi di lavoro successivi suggeriti', 'tooltips.completed': 'Completato', 'tooltips.active': 'Attivo', 'tooltips.aborted': 'Interrotto', 'tooltips.suspended': 'Sospeso', - 'tooltips.pending': 'In attesa', + 'tooltips.pending': 'In pausa', 'tooltips.workflowDown': - 'Il workflow è attualmente non disponibile o in stato di errore', + 'Al momento il flusso di lavoro è inattivo o in errore', 'tooltips.userNotAuthorizedAbort': - 'utente non autorizzato a interrompere il workflow', + 'utente non autorizzato a interrompere il flusso di lavoro', 'tooltips.userNotAuthorizedExecute': - 'utente non autorizzato a eseguire il workflow', + 'utente non autorizzato a eseguire il flusso di lavoro', 'messages.noDataAvailable': 'Nessun dato disponibile', 'messages.noVariablesFound': 'Nessuna variabile trovata per questa esecuzione.', 'messages.noInputSchemaWorkflow': - 'Nessuno schema di input è definito per questo workflow.', - 'messages.workflowInstanceNoInputs': "L'istanza del workflow non ha input", + 'Nessuno schema di input definito per questo flusso di lavoro.', + 'messages.workflowInstanceNoInputs': + "L'istanza del flusso di lavoro non ha input", 'messages.missingJsonSchema.title': 'Schema JSON mancante per il modulo di input', 'messages.missingJsonSchema.message': - 'Questo workflow non ha uno schema JSON definito per la validazione degli input. Puoi comunque eseguire il workflow, ma la validazione degli input sarà limitata.', + "Nessuno schema JSON definito per la convalida dell'input di questo flusso di lavoro. È comunque possibile eseguire il flusso di lavoro, ma la convalida degli input sarà limitata.", 'messages.additionalDetailsAboutThisErrorAreNotAvailable': - 'Non sono disponibili dettagli aggiuntivi su questo errore', - 'reviewStep.hiddenFieldsNote': - 'Alcuni campi sono nascosti in questa pagina ma verranno inclusi nella richiesta di esecuzione del workflow.', + 'Non sono disponibili ulteriori dettagli su questo errore', 'common.close': 'Chiudi', - 'common.cancel': 'Annulla', + 'common.cancel': 'Cancella', 'common.execute': 'Esegui', 'common.details': 'Dettagli', 'common.links': 'Collegamenti', 'common.values': 'Valori', - 'common.unavailable': '---', 'common.back': 'Indietro', - 'common.run': 'Esegui', - 'common.next': 'Avanti', + 'common.run': 'Esecuzione', + 'common.next': 'Successivo', 'common.review': 'Revisione', - 'duration.aFewSeconds': 'alcuni secondi', - 'duration.aSecond': 'un secondo', - 'duration.seconds': '{{count}} secondi', - 'duration.aMinute': 'un minuto', - 'duration.minutes': '{{count}} minuti', - 'duration.anHour': "un'ora", - 'duration.hours': '{{count}} ore', - 'duration.aDay': 'un giorno', - 'duration.days': '{{count}} giorni', - 'duration.aMonth': 'un mese', - 'duration.months': '{{count}} mesi', - 'duration.aYear': 'un anno', - 'duration.years': '{{count}} anni', + 'common.unavailable': '---', 'stepperObjectField.error': - 'Il campo di oggetto dello stepper non è compatibile con gli schemi che non contengono proprietà', + "Il campo dell'oggetto Stepper non è supportato per lo schema che non contiene proprietà", 'formDecorator.error': - 'Il decoratore di form deve fornire dati di contesto.', + 'Il decorator del modulo deve fornire dati di contesto.', 'aria.close': 'chiudi', }, }); diff --git a/workspaces/orchestrator/plugins/orchestrator/src/translations/ja.ts b/workspaces/orchestrator/plugins/orchestrator/src/translations/ja.ts new file mode 100644 index 0000000000..8da18d8584 --- /dev/null +++ b/workspaces/orchestrator/plugins/orchestrator/src/translations/ja.ts @@ -0,0 +1,168 @@ +/* + * 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 { orchestratorTranslationRef } from './ref'; + +/** + * Japanese translation for plugin.orchestrator. + * @public + */ +const orchestratorTranslationJa = createTranslationMessages({ + ref: orchestratorTranslationRef, + messages: { + 'page.title': 'ワークフローオーケストレーター', + 'page.tabs.workflows': 'ワークフロー', + 'page.tabs.allRuns': 'すべての実行', + 'page.tabs.workflowDetails': 'ワークフロー詳細', + 'page.tabs.workflowRuns': 'ワークフロー実行', + 'table.title.workflows': 'ワークフロー', + 'table.title.allRuns': 'すべての実行 ({{count}})', + 'table.title.allWorkflowRuns': 'ワークフロー実行 ({{count}})', + 'table.headers.name': '名前', + 'table.headers.runStatus': '実行ステータス', + 'table.headers.started': '開始済み', + 'table.headers.status': 'ステータス', + 'table.headers.workflowStatus': 'ワークフローステータス', + 'table.headers.duration': '期間', + 'table.headers.description': '説明', + 'table.headers.lastRun': '最終実行', + 'table.headers.lastRunStatus': '最終実行のステータス', + 'table.headers.workflowName': 'ワークフロー名', + 'table.actions.run': '実行', + 'table.actions.viewRuns': '実行の表示', + 'table.actions.viewInputSchema': '入力スキーマの表示', + 'table.status.running': '実行中', + 'table.status.failed': '失敗', + 'table.status.completed': '完了済み', + 'table.status.aborted': '中止', + 'table.status.pending': '保留中', + 'table.status.active': 'アクティブ', + 'table.filters.status': 'ステータス', + 'table.filters.started': '開始済み', + 'table.filters.startedOptions.today': '今日', + 'table.filters.startedOptions.yesterday': '昨日', + 'table.filters.startedOptions.last7days': '過去 7 日間', + 'table.filters.startedOptions.thisMonth': '今月', + 'workflow.details': '詳細', + 'workflow.definition': 'ワークフロー定義', + 'workflow.progress': 'ワークフロー進捗', + 'workflow.status.available': '利用可能', + 'workflow.status.unavailable': '利用不可', + 'workflow.fields.workflow': 'ワークフロー', + 'workflow.fields.workflowStatus': 'ワークフローステータス', + 'workflow.fields.runStatus': '実行ステータス', + 'workflow.fields.duration': '期間', + 'workflow.fields.description': '説明', + 'workflow.fields.started': '開始済み', + 'workflow.fields.workflowId': '実行 ID', + 'workflow.fields.workflowIdCopied': + '実行 ID がクリップボードにコピーされました', + 'workflow.errors.retriggerFailed': '再トリガーに失敗しました: {{reason}}', + 'workflow.errors.abortFailed': + '中止に失敗しました: すでに実行が完了しています。', + 'workflow.errors.abortFailedWithReason': '中止に失敗しました: {{reason}}', + 'workflow.errors.failedToLoadDetails': + 'ワークフロー ID: {{id}} の詳細の読み込みに失敗しました', + 'workflow.messages.areYouSureYouWantToRunThisWorkflow': + 'このワークフローを実行してもよろしいですか?', + 'workflow.messages.userNotAuthorizedExecute': + 'ユーザーにワークフローの実行権限がありません。', + 'workflow.messages.workflowDown': + 'ワークフローは現在停止しているかエラー状態です。今実行すると、失敗や予期しない結果が生じる可能性があります。', + 'workflow.buttons.run': '実行', + 'workflow.buttons.runWorkflow': 'ワークフローの実行', + 'workflow.buttons.runAgain': '再実行', + 'workflow.buttons.running': '実行中...', + 'workflow.buttons.fromFailurePoint': '失敗箇所から', + 'workflow.buttons.runFailedAgain': '実行が再び失敗しました', + 'run.title': 'ワークフローの実行', + 'run.pageTitle': '{{processName}} の実行', + 'run.variables': '実行変数', + 'run.inputs': '入力', + 'run.results': '結果', + 'run.logs.viewLogs': 'ログを表示', + 'run.logs.title': '実行ログ', + 'run.logs.noLogsAvailable': 'このワークフロー実行のログは利用できません。', + 'run.abort.title': 'ワークフローの実行を中止しますか?', + 'run.abort.button': '中止', + 'run.abort.warning': + '中止すると、進行中および保留中のすべてのステップが直ちに停止されます。進行中の作業がすべて失われます。', + 'run.abort.completed.title': '実行完了', + 'run.abort.completed.message': + '実行はすでに完了しているため、中止することはできません。', + 'run.status.completed': '実行は完了しました', + 'run.status.failed': '実行は {{time}} に失敗しました', + 'run.status.aborted': '実行は中止されました', + 'run.status.completedWithMessage': + '実行は {{time}} に完了しました。メッセージ:', + 'run.status.failedAt': '実行は {{time}} に失敗しました', + 'run.status.completedAt': '実行は {{time}} に完了しました', + 'run.status.running': 'ワークフローは実行中です。{{time}} に開始', + 'run.status.runningWaitingAtNode': + 'ワークフローは実行中です - ノード {{node}} で {{formattedTime}} から待機しています', + 'run.status.workflowIsRunning': 'ワークフローは実行中です。{{time}} に開始', + 'run.status.noAdditionalInfo': + 'このワークフローにはステータスに関する追加情報はありません。', + 'run.status.resultsWillBeDisplayedHereOnceTheRunIsComplete': + '実行が完了すると、結果がここに表示されます。', + 'run.retrigger': '再トリガー', + 'run.viewVariables': '変数の表示', + 'run.suggestedNextWorkflow': '推奨される次のワークフロー', + 'run.suggestedNextWorkflows': '推奨される次のワークフロー', + 'tooltips.completed': '完了済み', + 'tooltips.active': 'アクティブ', + 'tooltips.aborted': '中止', + 'tooltips.suspended': '一時停止中', + 'tooltips.pending': '保留中', + 'tooltips.workflowDown': 'ワークフローは現在停止しているかエラー状態です', + 'tooltips.userNotAuthorizedAbort': + 'ユーザーにワークフローの中止権限がありません', + 'tooltips.userNotAuthorizedExecute': + 'ユーザーにワークフローの実行権限がありません', + 'messages.noDataAvailable': '利用可能なデータはありません', + 'messages.noVariablesFound': 'この実行の変数が見つかりません。', + 'messages.noInputSchemaWorkflow': + 'このワークフローには入力スキーマが定義されていません。', + 'messages.workflowInstanceNoInputs': + 'このワークフローインスタンスには入力がありません', + 'messages.missingJsonSchema.title': + '入力フォームの JSON スキーマがありません', + 'messages.missingJsonSchema.message': + 'このワークフローには、入力検証用に定義された JSON スキーマがありません。ワークフローの実行は可能ですが、入力の検証は限定的になります。', + 'messages.additionalDetailsAboutThisErrorAreNotAvailable': + 'このエラーに関する追加情報はありません', + 'common.close': '閉じる', + 'common.cancel': 'キャンセル', + 'common.execute': '実行', + 'common.details': '詳細', + 'common.links': 'リンク', + 'common.values': '値', + 'common.back': '戻る', + 'common.run': '実行', + 'common.next': '次へ', + 'common.review': '確認', + 'common.unavailable': '---', + 'stepperObjectField.error': + 'ステッパーオブジェクトフィールドは、プロパティーを含まないスキーマではサポートされていません', + 'formDecorator.error': + 'フォームデコレーターはコンテキストデータを提供する必要があります。', + 'aria.close': '閉じる', + }, +}); + +export default orchestratorTranslationJa; diff --git a/workspaces/quickstart/.changeset/eleven-parts-throw.md b/workspaces/quickstart/.changeset/eleven-parts-throw.md new file mode 100644 index 0000000000..b2c5a7fe47 --- /dev/null +++ b/workspaces/quickstart/.changeset/eleven-parts-throw.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-quickstart': patch +--- + +Added 'it' and 'ja' i18n support and updated 'fr' translation strings. diff --git a/workspaces/quickstart/packages/app/e2e-tests/quick-start-admin-guest.spec.ts b/workspaces/quickstart/packages/app/e2e-tests/quick-start-admin-guest.spec.ts index b671c59cb3..2a71699407 100644 --- a/workspaces/quickstart/packages/app/e2e-tests/quick-start-admin-guest.spec.ts +++ b/workspaces/quickstart/packages/app/e2e-tests/quick-start-admin-guest.spec.ts @@ -61,22 +61,60 @@ test.describe('Test Quick Start plugin', () => { }, ); - await page.getByText(translations.steps.setupAuthentication.title).click(); + // Click and verify setupAuthentication step + const setupAuthStep = page.getByText( + translations.steps.setupAuthentication.title, + ); + await setupAuthStep.click(); + // Wait for the step content to be visible + await page + .getByText(translations.steps.setupAuthentication.description) + .waitFor({ state: 'visible' }); await uiHelper.verifyButtonURL( translations.steps.setupAuthentication.ctaTitle, 'https://docs.redhat.com/en/documentation/red_hat_developer_hub/latest/html/authentication_in_red_hat_developer_hub/', { exact: false }, ); - await page.getByText(translations.steps.configureRbac.title).click(); + + // Click and verify configureRbac step + const configureRbacStep = page.getByText( + translations.steps.configureRbac.title, + ); + await configureRbacStep.click(); + await page + .getByText(translations.steps.configureRbac.description) + .waitFor({ state: 'visible' }); await uiHelper.verifyButtonURL( translations.steps.configureRbac.ctaTitle, '/rbac', ); - await page.getByText(translations.steps.configureGit.title).click(); - await uiHelper.verifyButtonURL( - translations.steps.configureGit.ctaTitle, + + // Click and verify configureGit step + // This is critical: both setupAuthentication and configureGit have the same CTA text "En savoir plus" in French + // So we need to ensure we're getting the button from the configureGit step, not the setupAuthentication step + const configureGitStepTitle = page.getByText( + translations.steps.configureGit.title, + ); + await configureGitStepTitle.click(); + // Wait for the configureGit step description to be visible to ensure the step has expanded + const configureGitDescription = page.getByText( + translations.steps.configureGit.description, + ); + await configureGitDescription.waitFor({ state: 'visible' }); + // Find the parent container (List) that contains both the description and the CTA + // The structure is: List > ListItem (description) > ListItem (CTA) + const parentList = configureGitDescription + .locator('..') // ListItemText + .locator('..') // ListItem + .locator('..'); // List + // Find the CTA button within this specific List container to avoid matching the setupAuthentication button + const configureGitCta = parentList + .getByRole('button', { name: translations.steps.configureGit.ctaTitle }) + .first(); + await configureGitCta.waitFor({ state: 'visible' }); + const href = await configureGitCta.getAttribute('href'); + expect(href).toContain( 'https://docs.redhat.com/en/documentation/red_hat_developer_hub/latest/html/integrating_red_hat_developer_hub_with_github/', - { exact: false }, ); await page.getByText(translations.steps.managePlugins.title).click(); await uiHelper.verifyButtonURL( diff --git a/workspaces/quickstart/packages/app/e2e-tests/quick-start-developer.spec.ts b/workspaces/quickstart/packages/app/e2e-tests/quick-start-developer.spec.ts index 47c3d20ab3..d8f2ab81d3 100644 --- a/workspaces/quickstart/packages/app/e2e-tests/quick-start-developer.spec.ts +++ b/workspaces/quickstart/packages/app/e2e-tests/quick-start-developer.spec.ts @@ -44,7 +44,71 @@ test.describe('Test Quick Start plugin', () => { }); test('Access Quick start as User', async ({ page }, testInfo: TestInfo) => { - await page.waitForTimeout(1000); + // Wait for the page to be ready + await page.waitForLoadState('domcontentloaded'); + + // Try to wait for the header text directly first (drawer might already be open) + // This is more reliable than checking for the class + try { + await page + .getByText(translations.header.title, { exact: true }) + .waitFor({ state: 'visible', timeout: 10000 }); + } catch { + // Header not visible, try to open the drawer + // First, check if drawer is already open via class + const drawerOpen = await page.evaluate(() => { + return document.body.classList.contains('quickstart-drawer-open'); + }); + + if (!drawerOpen) { + // Try to open via sidebar + try { + const quickstartSidebarItem = page + .locator('nav') + .getByText('Quickstart'); + await quickstartSidebarItem.waitFor({ + state: 'visible', + timeout: 5000, + }); + await quickstartSidebarItem.click(); + // Wait for header to appear after clicking + await page + .getByText(translations.header.title, { exact: true }) + .waitFor({ state: 'visible', timeout: 10000 }); + } catch { + // Sidebar item not available, try help menu button + try { + // Look for Quickstart button in help menu + const helpButton = page.getByRole('button', { name: /help|menu/i }); + if (await helpButton.isVisible({ timeout: 3000 })) { + await helpButton.click(); + const quickstartMenuItem = page.getByText('Quick start'); + await quickstartMenuItem.waitFor({ + state: 'visible', + timeout: 3000, + }); + await quickstartMenuItem.click(); + await page + .getByText(translations.header.title, { exact: true }) + .waitFor({ state: 'visible', timeout: 10000 }); + } + } catch { + // If all else fails, wait for drawer to open automatically + // This might happen if role detection is still in progress + await page + .getByText(translations.header.title, { exact: true }) + .waitFor({ state: 'visible', timeout: 15000 }); + } + } + } else { + // Drawer class says it's open, but content might not be rendered yet + await page + .getByText(translations.header.title, { exact: true }) + .waitFor({ state: 'visible', timeout: 10000 }); + } + } + + // Verify the header is visible await uiHelper.verifyText(translations.header.title); await runAccessibilityTests( page, diff --git a/workspaces/quickstart/packages/app/e2e-tests/utils/helper.ts b/workspaces/quickstart/packages/app/e2e-tests/utils/helper.ts index 24a2cddc64..a563324e62 100644 --- a/workspaces/quickstart/packages/app/e2e-tests/utils/helper.ts +++ b/workspaces/quickstart/packages/app/e2e-tests/utils/helper.ts @@ -63,8 +63,24 @@ export async function switchToLocale( page: Page, locale: string, ): Promise { + // Wait for the page to be ready and Settings link to be available + // Use a more reliable approach - wait for the Settings link with a reasonable timeout + await page.waitForLoadState('domcontentloaded'); + await page + .getByRole('link', { name: 'Settings' }) + .waitFor({ state: 'visible', timeout: 10000 }); await page.getByRole('link', { name: 'Settings' }).click(); + await page + .getByRole('button', { name: 'English' }) + .waitFor({ state: 'visible', timeout: 5000 }); await page.getByRole('button', { name: 'English' }).click(); + await page + .getByRole('option', { name: locale }) + .waitFor({ state: 'visible', timeout: 5000 }); await page.getByRole('option', { name: locale }).click(); + await page + .locator('a') + .filter({ hasText: 'Home' }) + .waitFor({ state: 'visible', timeout: 5000 }); await page.locator('a').filter({ hasText: 'Home' }).click(); } diff --git a/workspaces/quickstart/packages/app/e2e-tests/utils/translations.ts b/workspaces/quickstart/packages/app/e2e-tests/utils/translations.ts index da14368f6a..d565116708 100644 --- a/workspaces/quickstart/packages/app/e2e-tests/utils/translations.ts +++ b/workspaces/quickstart/packages/app/e2e-tests/utils/translations.ts @@ -19,6 +19,8 @@ import { quickstartMessages } from '../../../../plugins/quickstart/src/translati import quickstartTranslationDe from '../../../../plugins/quickstart/src/translations/de.js'; import quickstartTranslationFr from '../../../../plugins/quickstart/src/translations/fr.js'; import quickstartTranslationEs from '../../../../plugins/quickstart/src/translations/es.js'; +import quickstartTranslationIt from '../../../../plugins/quickstart/src/translations/it.js'; +import quickstartTranslationJa from '../../../../plugins/quickstart/src/translations/ja.js'; /* eslint-enable @backstage/no-relative-monorepo-imports */ export type QuickstartMessages = typeof quickstartMessages; @@ -52,6 +54,10 @@ export function getTranslations(locale: string) { return transform(quickstartTranslationDe.messages); case 'es': return transform(quickstartTranslationEs.messages); + case 'it': + return transform(quickstartTranslationIt.messages); + case 'ja': + return transform(quickstartTranslationJa.messages); default: return quickstartMessages; } diff --git a/workspaces/quickstart/plugins/quickstart/src/translations/fr.ts b/workspaces/quickstart/plugins/quickstart/src/translations/fr.ts index f8831bed43..0942a73495 100644 --- a/workspaces/quickstart/plugins/quickstart/src/translations/fr.ts +++ b/workspaces/quickstart/plugins/quickstart/src/translations/fr.ts @@ -17,77 +17,78 @@ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { quickstartTranslationRef } from './ref'; +/** + * fr translation for plugin.quickstart. + * @public + */ const quickstartTranslationFr = createTranslationMessages({ ref: quickstartTranslationRef, messages: { - 'button.closeDrawer': 'Fermer le tiroir', - 'button.openQuickstartGuide': 'Ouvrir le guide de démarrage rapide', - 'button.quickstart': 'Démarrage rapide', - 'content.emptyState.title': - "Le contenu de démarrage rapide n'est pas disponible pour votre rôle.", - 'dev.currentState': 'État actuel du tiroir : {{state}}', - 'dev.drawerControls': 'Commandes des tiroirs', - 'dev.instructions': 'Instructions', - 'dev.pageDescription': - 'Ceci est une page de test pour le plugin Quickstart. Utilisez les boutons ci-dessous pour interagir avec le tiroir de démarrage rapide.', - 'dev.pageTitle': 'Page de test du plugin de démarrage rapide', - 'dev.stateClosed': 'Fermé', - 'dev.stateOpen': 'Ouvrir', - 'dev.step1': - '1. Cliquez sur « Ouvrir le guide de démarrage rapide » pour ouvrir le tiroir', - 'dev.step2': '2. Parcourez les étapes de démarrage rapide', - 'dev.step3': - '3. Testez le suivi de la progression en complétant les étapes', - 'dev.step4': - "4. Le tiroir peut être fermé à l'aide du bouton de fermeture ou des commandes du tiroir", - 'dev.step5': - '5. La progression est automatiquement enregistrée dans le stockage local', - 'footer.hide': 'Cacher', - 'footer.notStarted': 'Non démarré', - 'footer.progress': '{{progress}}% de progrès', - 'header.subtitle': 'Nous vous guiderons à travers quelques étapes rapides', 'header.title': 'Commençons par vous familiariser avec Developer Hub', - 'item.collapseAriaLabel': 'Réduire les détails de {{title}}', - 'item.collapseButtonAriaLabel': "Réduire l'élément", - 'item.expandAriaLabel': 'Développer les détails de {{title}}', - 'item.expandButtonAriaLabel': "Développer l'élément", - - // New keys https://github.com/redhat-developer/rhdh-plugins/pull/1514 - 'button.gotIt': 'Compris !', + 'header.subtitle': 'Nous vous guiderons à travers quelques étapes rapides', 'steps.setupAuthentication.title': "Configurer l'authentification", 'steps.setupAuthentication.description': - "Configurez des identifiants de connexion sécurisés pour protéger votre compte contre l'accès non autorisé.", + 'Configurez des informations de connexion sécurisées pour protéger votre compte contre tout accès non autorisé.', 'steps.setupAuthentication.ctaTitle': 'En savoir plus', 'steps.configureRbac.title': 'Configurer RBAC', 'steps.configureRbac.description': - 'Attribuez des rôles et des permissions pour contrôler qui peut voir, créer ou modifier des ressources, assurant une collaboration sécurisée et efficace.', + 'Attribuez des rôles et des autorisations pour contrôler qui peut afficher, créer ou modifier des ressources, garantissant ainsi une collaboration sécurisée et efficace.', 'steps.configureRbac.ctaTitle': "Gérer l'accès", 'steps.configureGit.title': 'Configurer Git', 'steps.configureGit.description': - 'Connectez vos fournisseurs Git, comme GitHub, pour gérer le code, automatiser les flux de travail et intégrer avec les fonctionnalités de la plateforme.', + 'Connectez vos fournisseurs Git, tels que GitHub pour gérer le code, automatiser les flux de travail et intégrer les fonctionnalités de la plateforme.', 'steps.configureGit.ctaTitle': 'En savoir plus', 'steps.managePlugins.title': 'Gérer les plugins', 'steps.managePlugins.description': - 'Parcourez et installez des extensions pour ajouter des fonctionnalités, connecter avec des outils externes et personnaliser votre expérience.', + 'Parcourez et installez des extensions pour ajouter des fonctionnalités, vous connecter à des outils externes et personnaliser votre expérience.', 'steps.managePlugins.ctaTitle': 'Explorer les plugins', - 'steps.importApplication.title': 'Importer une application', + 'steps.importApplication.title': "Demande d'importation", 'steps.importApplication.description': - 'Importez votre code et vos services existants dans le catalogue pour les organiser et y accéder via votre portail développeur.', + 'Importez votre code et vos services existants dans le catalogue pour les organiser et y accéder via votre portail de développeur.', 'steps.importApplication.ctaTitle': 'Importer', - 'steps.learnAboutCatalog.title': 'Apprendre le Catalogue', + 'steps.learnAboutCatalog.title': 'En savoir plus sur le catalogue', 'steps.learnAboutCatalog.description': - 'Découvrez tous les composants logiciels, services et API, et consultez leurs propriétaires et leur documentation.', + 'Découvrir tous les composants logiciels, services et API, et affichez leurs propriétaires et leur documentation.', 'steps.learnAboutCatalog.ctaTitle': 'Voir le catalogue', 'steps.exploreSelfServiceTemplates.title': 'Explorer les modèles en libre-service', 'steps.exploreSelfServiceTemplates.description': - 'Utilisez nos modèles en libre-service pour configurer rapidement de nouveaux projets, services ou documentation.', + 'Utiliser nos modèles en libre-service pour configurer rapidement de nouveaux projets, services ou documentations.', 'steps.exploreSelfServiceTemplates.ctaTitle': 'Explorer les modèles', - 'steps.findAllLearningPaths.title': - "Trouver tous les parcours d'apprentissage", + 'steps.findAllLearningPaths.title': 'Trouver tous les Learning Paths', 'steps.findAllLearningPaths.description': - "Intégrez l'e-learning sur mesure dans vos flux de travail avec des parcours d'apprentissage pour accélérer l'intégration, combler les lacunes de compétences et promouvoir les meilleures pratiques.", - 'steps.findAllLearningPaths.ctaTitle': "Voir les parcours d'apprentissage", + 'Intégrez l’apprentissage en ligne personnalisé dans vos flux de travail avec Learning Paths pour accélérer l’intégration, combler les lacunes en matière de compétences et promouvoir les meilleures pratiques.', + 'steps.findAllLearningPaths.ctaTitle': 'Voir Learning Paths', + 'button.quickstart': 'Démarrage rapide', + 'button.openQuickstartGuide': 'Ouvrir le guide de démarrage rapide', + 'button.closeDrawer': 'Fermer le tiroir', + 'button.gotIt': "J'ai compris!", + 'footer.progress': '{{progress}}% de progrès', + 'footer.notStarted': 'Non démarré', + 'footer.hide': 'Cacher', + 'content.emptyState.title': + "Le contenu de démarrage rapide n'est pas disponible pour votre rôle.", + 'item.expandAriaLabel': 'Développer les détails de {{title}}', + 'item.collapseAriaLabel': 'Réduire les détails de {{title}}', + 'item.expandButtonAriaLabel': "Développer l'élément", + 'item.collapseButtonAriaLabel': "Réduire l'élément", + 'dev.pageTitle': 'Page de test du plugin de démarrage rapide', + 'dev.pageDescription': + 'Ceci est une page de test pour le plugin Quickstart. Utilisez les boutons ci-dessous pour interagir avec le tiroir de démarrage rapide.', + 'dev.drawerControls': 'Commandes des tiroirs', + 'dev.currentState': 'État actuel du tiroir : {{state}}', + 'dev.stateOpen': 'Ouvrir', + 'dev.stateClosed': 'Fermé', + 'dev.instructions': 'Instructions', + 'dev.step1': + '1. Cliquez sur « Ouvrir le guide de démarrage rapide » pour ouvrir le tiroir', + 'dev.step2': '2. Parcourez les étapes de démarrage rapide', + 'dev.step3': + '3. Testez le suivi de la progression en complétant les étapes', + 'dev.step4': + "4. Le tiroir peut être fermé à l'aide du bouton de fermeture ou des commandes du tiroir", + 'dev.step5': + '5. La progression est automatiquement enregistrée dans le stockage local', }, }); diff --git a/workspaces/quickstart/plugins/quickstart/src/translations/it.ts b/workspaces/quickstart/plugins/quickstart/src/translations/it.ts new file mode 100644 index 0000000000..e26448e4e6 --- /dev/null +++ b/workspaces/quickstart/plugins/quickstart/src/translations/it.ts @@ -0,0 +1,97 @@ +/* + * 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 { quickstartTranslationRef } from './ref'; + +/** + * Italian translation for plugin.quickstart. + * @public + */ +const quickstartTranslationIt = createTranslationMessages({ + ref: quickstartTranslationRef, + messages: { + 'header.title': 'Muoviamo insieme i primi passi con Developer Hub', + 'header.subtitle': 'Ti guideremo attraverso alcuni rapidi passaggi', + 'steps.setupAuthentication.title': "Impostazione dell'autenticazione", + 'steps.setupAuthentication.description': + "Impostazione di credenziali di accesso sicure per proteggere l'account da accessi non autorizzati.", + 'steps.setupAuthentication.ctaTitle': 'Per saperne di più', + 'steps.configureRbac.title': 'Configurazione di RBAC', + 'steps.configureRbac.description': + 'Assegnare ruoli e autorizzazioni per controllare chi può visualizzare, creare o modificare le risorse, per garantire una collaborazione sicura ed efficiente.', + 'steps.configureRbac.ctaTitle': "Gestisci l'accesso", + 'steps.configureGit.title': 'Configurazione di Git', + 'steps.configureGit.description': + 'Collegare i provider Git, come GitHub, per gestire il codice, automatizzare i flussi di lavoro e integrare le funzionalità della piattaforma.', + 'steps.configureGit.ctaTitle': 'Per saperne di più', + 'steps.managePlugins.title': 'Gestione dei plugin', + 'steps.managePlugins.description': + "Sfogliare e installare le estensioni per aggiungere funzionalità, connettersi a strumenti esterni e personalizzare l'esperienza utente.", + 'steps.managePlugins.ctaTitle': 'Esplora i plugin', + 'steps.importApplication.title': "Importare l'applicazione", + 'steps.importApplication.description': + 'Importare il codice e i servizi esistenti nel catalogo per organizzarli e accedervi tramite il portale per sviluppatori.', + 'steps.importApplication.ctaTitle': 'Importa', + 'steps.learnAboutCatalog.title': 'Analisi del catalogo', + 'steps.learnAboutCatalog.description': + 'Scoprire tutti i componenti software, i servizi e le API e visualizzarne proprietari e documentazione.', + 'steps.learnAboutCatalog.ctaTitle': 'Visualizza catalogo', + 'steps.exploreSelfServiceTemplates.title': + 'Esplorare i modelli self-service', + 'steps.exploreSelfServiceTemplates.description': + 'Utilizzare i nostri modelli self-service per configurare rapidamente nuovi progetti, servizi o documentazione.', + 'steps.exploreSelfServiceTemplates.ctaTitle': 'Esplora i modelli', + 'steps.findAllLearningPaths.title': + 'Individuare tutti i percorsi di apprendimento', + 'steps.findAllLearningPaths.description': + "Integrare l'e-learning personalizzato nei flussi di lavoro con i percorsi di apprendimento per accelerare l'onboarding, colmare le lacune di competenze e promuovere le best practice.", + 'steps.findAllLearningPaths.ctaTitle': + 'Visualizzare i percorsi di apprendimento', + 'button.quickstart': 'Avvio rapido', + 'button.openQuickstartGuide': "Apri la Guida all'avvio rapido", + 'button.closeDrawer': 'Chiudi riquadro', + 'button.gotIt': 'Ho capito!', + 'footer.progress': '{{progress}}% di avanzamento', + 'footer.notStarted': 'Non iniziato', + 'footer.hide': 'Nascondi', + 'content.emptyState.title': + 'Contenuto di avvio rapido non disponibile per il ruolo utente.', + 'item.expandAriaLabel': 'Espandi i dettagli di {{title}}', + 'item.collapseAriaLabel': 'Comprimi i dettagli di {{title}}', + 'item.expandButtonAriaLabel': 'Espandi elemento', + 'item.collapseButtonAriaLabel': 'Comprimi elemento', + 'dev.pageTitle': 'Pagina di prova del plugin di avvio rapido', + 'dev.pageDescription': + 'Questa è una pagina di prova per il plugin di avvio rapido. Utilizzare i pulsanti sottostanti per interagire con il riquadro di avvio rapido.', + 'dev.drawerControls': 'Comandi del riquadro', + 'dev.currentState': 'Stato attuale del riquadro: {{state}}', + 'dev.stateOpen': 'Aperto', + 'dev.stateClosed': 'Chiuso', + 'dev.instructions': 'Istruzioni', + 'dev.step1': + '1. Fare clic su "Apri la Guida all\'avvio rapido" per aprire il riquadro', + 'dev.step2': '2. Navigare tra i passaggi di avvio rapido', + 'dev.step3': + '3. Testare il monitoraggio dei progressi completando i passaggi', + 'dev.step4': + '4. È possibile chiudere il riquadro utilizzando il pulsante di chiusura o i comandi del riquadro stesso', + 'dev.step5': + '5. I progressi vengono salvati automaticamente su localStorage', + }, +}); + +export default quickstartTranslationIt; diff --git a/workspaces/quickstart/plugins/quickstart/src/translations/ja.ts b/workspaces/quickstart/plugins/quickstart/src/translations/ja.ts new file mode 100644 index 0000000000..a581cf5d05 --- /dev/null +++ b/workspaces/quickstart/plugins/quickstart/src/translations/ja.ts @@ -0,0 +1,93 @@ +/* + * 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 { quickstartTranslationRef } from './ref'; + +/** + * Japanese translation for plugin.quickstart. + * @public + */ +const quickstartTranslationJa = createTranslationMessages({ + ref: quickstartTranslationRef, + messages: { + 'header.title': 'Developer Hub を使い始めましょう', + 'header.subtitle': 'いくつかの簡単なステップをご案内します', + 'steps.setupAuthentication.title': '認証の設定', + 'steps.setupAuthentication.description': + '不正アクセスからアカウントを保護するために、セキュアなログイン認証情報を設定します。', + 'steps.setupAuthentication.ctaTitle': '詳細', + 'steps.configureRbac.title': 'RBAC の設定', + 'steps.configureRbac.description': + 'ロールと権限を割り当てて、リソースを表示、作成、または編集できるユーザーを制御し、セキュアで効率的なコラボレーションを実現できます。', + 'steps.configureRbac.ctaTitle': 'アクセスの管理', + 'steps.configureGit.title': 'Git の設定', + 'steps.configureGit.description': + 'GitHub などの Git プロバイダーを接続して、コードの管理、ワークフローの自動化、プラットフォーム機能との統合を行います。', + 'steps.configureGit.ctaTitle': '詳細', + 'steps.managePlugins.title': 'プラグインの管理', + 'steps.managePlugins.description': + '拡張機能を閲覧してインストールし、機能を追加したり、外部ツールと接続したり、エクスペリエンスをカスタマイズしたりできます。', + 'steps.managePlugins.ctaTitle': 'プラグインの探索', + 'steps.importApplication.title': 'アプリケーションのインポート', + 'steps.importApplication.description': + '既存のコードやサービスをカタログにインポートして整理し、開発者ポータルからアクセスできます。', + 'steps.importApplication.ctaTitle': 'インポート', + 'steps.learnAboutCatalog.title': 'カタログについて学ぶ', + 'steps.learnAboutCatalog.description': + 'すべてのソフトウェアコンポーネント、サービス、API を探索し、その所有者やドキュメントを確認できます。', + 'steps.learnAboutCatalog.ctaTitle': 'カタログの表示', + 'steps.exploreSelfServiceTemplates.title': + 'セルフサービステンプレートを探索する', + 'steps.exploreSelfServiceTemplates.description': + 'セルフサービステンプレートを使用して、新しいプロジェクト、サービス、またはドキュメントをすばやく設定できます。', + 'steps.exploreSelfServiceTemplates.ctaTitle': 'テンプレートの探索', + 'steps.findAllLearningPaths.title': 'すべてのラーニングパスを見る', + 'steps.findAllLearningPaths.description': + 'ラーニングパスを利用してカスタマイズした e ラーニングをワークフローに統合し、オンボーディングの加速、スキルギャップの解消、ベストプラクティスの浸透を実現できます。', + 'steps.findAllLearningPaths.ctaTitle': 'ラーニングパスの表示', + 'button.quickstart': 'クイックスタート', + 'button.openQuickstartGuide': 'クイックスタートガイドを開く', + 'button.closeDrawer': 'ドロワーを閉じる', + 'button.gotIt': '了解しました!', + 'footer.progress': '進捗 {{progress}}%', + 'footer.notStarted': '開始されていません', + 'footer.hide': '非表示', + 'content.emptyState.title': + '現在のロールではクイックスタートコンテンツを利用できません。', + 'item.expandAriaLabel': '{{title}} の詳細を展開', + 'item.collapseAriaLabel': '{{title}} の詳細を折りたたむ', + 'item.expandButtonAriaLabel': '項目を展開', + 'item.collapseButtonAriaLabel': '項目を折りたたむ', + 'dev.pageTitle': 'クイックスタートプラグインのテストページ', + 'dev.pageDescription': + 'これはクイックスタートプラグインのテストページです。以下のボタンを使用し、クイックスタートドロワーを操作してください。', + 'dev.drawerControls': 'ドロワーのコントロール', + 'dev.currentState': '現在のドロワーの状態: {{state}}', + 'dev.stateOpen': '開', + 'dev.stateClosed': '閉', + 'dev.instructions': '手順', + 'dev.step1': + '1."クイックスタートガイドを開く" をクリックしてドロワーを開きます', + 'dev.step2': '2.クイックスタートのステップを順に進めます', + 'dev.step3': '3.ステップを完了して進捗の追跡をテストします', + 'dev.step4': + '4.閉じるボタンまたはドロワー自体のコントロールを使用して、ドロワーを閉じることができます', + 'dev.step5': '5.進捗が自動的に localStorage に保存されます', + }, +}); + +export default quickstartTranslationJa; diff --git a/workspaces/scorecard/.changeset/quiet-cats-dance.md b/workspaces/scorecard/.changeset/quiet-cats-dance.md new file mode 100644 index 0000000000..3f6562611d --- /dev/null +++ b/workspaces/scorecard/.changeset/quiet-cats-dance.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-scorecard': patch +--- + +Added 'it' and 'ja' i18n translation support and updated 'fr' translations. diff --git a/workspaces/scorecard/plugins/scorecard/src/translations/fr.ts b/workspaces/scorecard/plugins/scorecard/src/translations/fr.ts index df9aaef7ac..fa0532811e 100644 --- a/workspaces/scorecard/plugins/scorecard/src/translations/fr.ts +++ b/workspaces/scorecard/plugins/scorecard/src/translations/fr.ts @@ -17,45 +17,39 @@ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { scorecardTranslationRef } from './ref'; +/** + * fr translation for plugin.scorecard. + * @public + */ const scorecardTranslationFr = createTranslationMessages({ ref: scorecardTranslationRef, - full: true, messages: { - // Empty state - 'emptyState.title': 'Aucune scorecard ajoutée pour le moment', + 'emptyState.title': "Aucune carte de score n'a encore été ajoutée", 'emptyState.description': - "Les scorecards vous aident à surveiller la santé des composants en un coup d'œil. Pour commencer, explorez notre documentation pour les directives de configuration.", + 'Les tableaux de bord vous aident à surveiller l’état des composants en un coup d’œil. Pour commencer, explorez notre documentation pour obtenir des instructions de configuration.', 'emptyState.button': 'Voir la documentation', - 'emptyState.altText': 'Aucune scorecard', - - // Permission required state - 'permissionRequired.title': 'Permission manquante', + 'emptyState.altText': 'Pas de tableau de bord', + 'permissionRequired.title': 'Autorisations manquantes', 'permissionRequired.description': - 'Pour voir le plugin Scorecard, contactez votre administrateur pour donner la {{permission}} permission.', - 'permissionRequired.button': 'Lire plus', - 'permissionRequired.altText': 'Permission requise', - - // Error messages + "Pour afficher le plugin Scorecard, contactez votre administrateur pour lui accorder l'autorisation {{permission}}.", + 'permissionRequired.button': 'En savoir plus', + 'permissionRequired.altText': 'Autorisation requise', 'errors.entityMissingProperties': - 'Entité manque de propriétés requises pour la recherche de scorecard', + "Entité manquant les propriétés requises pour la recherche dans la fiche d'évaluation", 'errors.invalidApiResponse': - "Format de réponse invalide de l'API scorecard", + "Format de réponse non valide de l'API de scorecard", 'errors.fetchError': - 'Erreur lors de la récupération des scorecards : {{error}}', - 'errors.metricDataUnavailable': 'Données de métrique indisponibles', + 'Erreur lors de la récupération des tableaux de bord : {{error}}', + 'errors.metricDataUnavailable': 'Données métriques indisponibles', 'errors.invalidThresholds': 'Seuils invalides', - - // Metric translations - 'metric.github.open_prs.title': 'GitHub PRs ouvertes', + 'metric.github.open_prs.title': 'GitHub ouvre des PR', 'metric.github.open_prs.description': - 'Nombre actuel de Pull Requests ouvertes pour un dépôt GitHub donné.', - 'metric.jira.open_issues.title': 'Jira tickets bloquants ouverts', + "Nombre actuel de requêtes d'extraction ouvertes pour un référentiel GitHub donné.", + 'metric.jira.open_issues.title': 'Jira ouvre des tickets bloquants', 'metric.jira.open_issues.description': 'Met en évidence le nombre de problèmes critiques et bloquants actuellement ouverts dans Jira.', - - // Threshold translations 'thresholds.success': 'Succès', - 'thresholds.warning': 'Avertissement', + 'thresholds.warning': 'Attention', 'thresholds.error': 'Erreur', }, }); diff --git a/workspaces/scorecard/plugins/scorecard/src/translations/it.ts b/workspaces/scorecard/plugins/scorecard/src/translations/it.ts new file mode 100644 index 0000000000..ccb6bcf29d --- /dev/null +++ b/workspaces/scorecard/plugins/scorecard/src/translations/it.ts @@ -0,0 +1,57 @@ +/* + * 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 { scorecardTranslationRef } from './ref'; + +/** + * Italian translation for plugin.scorecard. + * @public + */ +const scorecardTranslationIt = createTranslationMessages({ + ref: scorecardTranslationRef, + messages: { + 'emptyState.title': 'Non è stata ancora aggiunta alcuna scheda punteggio', + 'emptyState.description': + "Le schede punteggio aiutano a monitorare a colpo d'occhio l'integrità dei componenti. Per iniziare, consultare la documentazione per le linee guida di configurazione.", + 'emptyState.button': 'Visualizza la documentazione', + 'emptyState.altText': 'Nessuna scheda punteggio', + 'permissionRequired.title': 'Autorizzazione mancante', + 'permissionRequired.description': + "Per visualizzare il plugin Scorecard, contattare l'amministratore per richiedere l'autorizzazione {{permission}}.", + 'permissionRequired.button': 'Per saperne di più', + 'permissionRequired.altText': 'Autorizzazione richiesta', + 'errors.entityMissingProperties': + 'Entità priva delle proprietà richieste per la ricerca nella scheda punteggio', + 'errors.invalidApiResponse': + "Formato di risposta non valido dall'API della scheda punteggio", + 'errors.fetchError': + 'Errore durante il recupero delle schede punteggio: {{error}}', + 'errors.metricDataUnavailable': 'Dati metrici non disponibili', + 'errors.invalidThresholds': 'Soglie non valide', + 'metric.github.open_prs.title': 'Richieste pull aperte su GitHub', + 'metric.github.open_prs.description': + 'Conteggio attuale delle richieste pull aperte per uno specifico repository GitHub.', + 'metric.jira.open_issues.title': 'Ticket di blocco Jira aperti', + 'metric.jira.open_issues.description': + 'Evidenzia il numero di problemi critici e di blocco attualmente aperti in Jira.', + 'thresholds.success': 'Attività riuscita', + 'thresholds.warning': 'Avviso', + 'thresholds.error': 'Errore', + }, +}); + +export default scorecardTranslationIt; diff --git a/workspaces/scorecard/plugins/scorecard/src/translations/ja.ts b/workspaces/scorecard/plugins/scorecard/src/translations/ja.ts new file mode 100644 index 0000000000..e811ff7c58 --- /dev/null +++ b/workspaces/scorecard/plugins/scorecard/src/translations/ja.ts @@ -0,0 +1,57 @@ +/* + * 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 { scorecardTranslationRef } from './ref'; + +/** + * Japanese translation for plugin.scorecard. + * @public + */ +const scorecardTranslationJa = createTranslationMessages({ + ref: scorecardTranslationRef, + messages: { + 'emptyState.title': 'スコアカードはまだ追加されていません', + 'emptyState.description': + 'スコアカードを使用すると、コンポーネントの健全性を一目で監視できます。まず、セットアップ手順に関するドキュメントを参照してください。', + 'emptyState.button': 'ドキュメントの表示', + 'emptyState.altText': 'スコアカードなし', + 'permissionRequired.title': '権限がありません', + 'permissionRequired.description': + 'スコアカードプラグインを表示するには、管理者に連絡して {{permission}} 権限を付与してもらうよう依頼してください。', + 'permissionRequired.button': 'さらに表示する', + 'permissionRequired.altText': '権限が必要', + 'errors.entityMissingProperties': + 'スコアカードの検索に必要なプロパティーがエンティティーにありません', + 'errors.invalidApiResponse': 'スコアカード API からの応答形式が無効です', + 'errors.fetchError': + 'スコアカードの取得中にエラーが発生しました: {{error}}', + 'errors.metricDataUnavailable': 'メトリクスデータがありません', + 'errors.invalidThresholds': '無効なしきい値', + 'metric.github.open_prs.title': 'GitHub のオープン状態の PR', + 'metric.github.open_prs.description': + '特定の GitHub リポジトリーにおけるオープン状態のプルリクエストの数。', + 'metric.jira.open_issues.title': + 'Jira のオープン状態の進行を妨げているチケット', + 'metric.jira.open_issues.description': + 'Jira で現在オープン状態になっている、重大かつ進行を妨げている課題の数を明示します。', + 'thresholds.success': '成功', + 'thresholds.warning': '警告', + 'thresholds.error': 'エラー', + }, +}); + +export default scorecardTranslationJa; diff --git a/workspaces/translations/.changeset/bright-dogs-sing.md b/workspaces/translations/.changeset/bright-dogs-sing.md new file mode 100644 index 0000000000..60a46f9d07 --- /dev/null +++ b/workspaces/translations/.changeset/bright-dogs-sing.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-translations': patch +--- + +Added 'it' and 'ja' i18n translation support and updated 'fr' translations. diff --git a/workspaces/translations/plugins/translations-test/src/translations/fr.ts b/workspaces/translations/plugins/translations-test/src/translations/fr.ts index 5047f50038..ee126be6e5 100644 --- a/workspaces/translations/plugins/translations-test/src/translations/fr.ts +++ b/workspaces/translations/plugins/translations-test/src/translations/fr.ts @@ -17,41 +17,44 @@ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { translationsTestTranslationRef } from './ref'; -const quickstartTranslationDe = createTranslationMessages({ +/** + * fr translation for plugin.translations-test. + * @public + */ +const quickstartTranslationFr = createTranslationMessages({ ref: translationsTestTranslationRef, - full: false, messages: { - 'context.friend': 'Un ami', - 'context.friend_female': 'Une petite amie', - 'context.friend_male': 'Un petit ami', + 'page.title': 'Plugin de test de traductions', + 'page.subtitle': + "Un plugin pour tester les fonctionnalités de traduction et les fonctionnalités d'i18next", 'essentials.key': 'valeur de la clé', 'essentials.look.deep': 'valeur look deep', - 'formatting.intlDateTime': 'Le {{val, datetime}}', + 'interpolation.key': '{{what}} est {{how}}', + 'interpolation.nested.key': '{{what}} est {{how.value}}', + 'interpolation.complex.message': 'Voici un {{link}}.', + 'interpolation.complex.linkText': 'lien', 'formatting.intlNumber': 'Certains {{val, number}}', 'formatting.intlNumberWithOptions': 'Certains {{val, number(minimumFractionDigits: 2)}}', + 'formatting.intlDateTime': 'Le {{val, datetime}}', 'formatting.intlRelativeTime': 'Lorem {{val, relativetime}}', 'formatting.intlRelativeTimeWithOptions': 'Lorem {{val, relativetime(quarter)}}', 'formatting.intlRelativeTimeWithOptionsExplicit': 'Lorem {{val, relativetime(range: quarter; style: narrow;)}}', - 'interpolation.complex.linkText': 'lien', - 'interpolation.complex.message': 'Voici un {{link}}.', - 'interpolation.key': '{{what}} est {{how}}', - 'interpolation.nested.key': '{{what}} est {{how.value}}', - 'objects.tree.res': 'a ajouté {{something}}', - 'page.subtitle': - "Un plugin pour tester les fonctionnalités de traduction et les fonctionnalités d'i18next", - 'page.title': 'Plugin de test de traductions', - 'plurals.keyWithCount_one': '{{count}} article', - 'plurals.keyWithCount_other': '{{count}} articles', + 'plurals.key_zero': 'zéro', + 'plurals.key_one': 'un', + 'plurals.key_two': 'deux', 'plurals.key_few': 'peu', 'plurals.key_many': 'plusieurs', - 'plurals.key_one': 'un', 'plurals.key_other': 'autre', - 'plurals.key_two': 'deux', - 'plurals.key_zero': 'zéro', + 'plurals.keyWithCount_one': '{{count}} article', + 'plurals.keyWithCount_other': '{{count}} articles', + 'context.friend': 'Un ami', + 'context.friend_male': 'Un petit ami', + 'context.friend_female': 'Une petite amie', + 'objects.tree.res': 'a ajouté {{something}}', }, }); -export default quickstartTranslationDe; +export default quickstartTranslationFr; diff --git a/workspaces/translations/plugins/translations-test/src/translations/it.ts b/workspaces/translations/plugins/translations-test/src/translations/it.ts new file mode 100644 index 0000000000..420cf79fbb --- /dev/null +++ b/workspaces/translations/plugins/translations-test/src/translations/it.ts @@ -0,0 +1,60 @@ +/* + * 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 { translationsTestTranslationRef } from './ref'; + +/** + * Italian translation for plugin.translations-test. + * @public + */ +const quickstartTranslationIt = createTranslationMessages({ + ref: translationsTestTranslationRef, + messages: { + 'page.title': 'Plugin di prova delle traduzioni', + 'page.subtitle': + 'Plugin per testare la funzionalità delle traduzioni e le caratteristiche di i18next', + 'essentials.key': 'valore della chiave', + 'essentials.look.deep': "valore dell'analisi approfondita", + 'interpolation.key': '{{what}} è {{how}}', + 'interpolation.nested.key': '{{what}} è {{how.value}}', + 'interpolation.complex.message': 'Ecco un {{link}}.', + 'interpolation.complex.linkText': 'link', + 'formatting.intlNumber': 'Alcuni {{val, number}}', + 'formatting.intlNumberWithOptions': + 'Alcuni {{val, number(minimumFractionDigits: 2)}}', + 'formatting.intlDateTime': 'Il {{val, datetime}}', + 'formatting.intlRelativeTime': 'Lorem {{val, relativetime}}', + 'formatting.intlRelativeTimeWithOptions': + 'Lorem {{val, relativetime(quarter)}}', + 'formatting.intlRelativeTimeWithOptionsExplicit': + 'Lorem {{val, relativetime(range: quarter; style: narrow;)}}', + 'plurals.key_zero': 'zero', + 'plurals.key_one': 'uno', + 'plurals.key_two': 'due', + 'plurals.key_few': 'pochi', + 'plurals.key_many': 'molti', + 'plurals.key_other': 'altro', + 'plurals.keyWithCount_one': '{{count}} elemento', + 'plurals.keyWithCount_other': '{{count}} elementi', + 'context.friend': 'Un amico', + 'context.friend_male': 'Un fidanzato', + 'context.friend_female': 'Una ragazza', + 'objects.tree.res': 'aggiunto {{something}}', + }, +}); + +export default quickstartTranslationIt; diff --git a/workspaces/translations/plugins/translations-test/src/translations/ja.ts b/workspaces/translations/plugins/translations-test/src/translations/ja.ts new file mode 100644 index 0000000000..bcdc30c8b0 --- /dev/null +++ b/workspaces/translations/plugins/translations-test/src/translations/ja.ts @@ -0,0 +1,59 @@ +/* + * 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 { translationsTestTranslationRef } from './ref'; + +/** + * Japanese translation for plugin.translations-test. + * @public + */ +const quickstartTranslationJa = createTranslationMessages({ + ref: translationsTestTranslationRef, + messages: { + 'page.title': '翻訳テストプラグイン', + 'page.subtitle': '翻訳機能と i18next 機能をテストするためのプラグイン', + 'essentials.key': 'キーの値', + 'essentials.look.deep': '深い階層の参照の値', + 'interpolation.key': '{{what}} は {{how}} です', + 'interpolation.nested.key': '{{what}} は {{how.value}} です', + 'interpolation.complex.message': 'ここに {{link}} があります。', + 'interpolation.complex.linkText': 'リンク', + 'formatting.intlNumber': 'いくつかの {{val, number}}', + 'formatting.intlNumberWithOptions': + 'いくつかの {{val, number(minimumFractionDigits: 2)}}', + 'formatting.intlDateTime': '{{val, datetime}} に', + 'formatting.intlRelativeTime': 'Lorem {{val, relativetime}}', + 'formatting.intlRelativeTimeWithOptions': + 'Lorem {{val, relativetime(quarter)}}', + 'formatting.intlRelativeTimeWithOptionsExplicit': + 'Lorem {{val, relativetime(range: quarter; style: narrow;)}}', + 'plurals.key_zero': 'ゼロ', + 'plurals.key_one': '1', + 'plurals.key_two': '2', + 'plurals.key_few': '少数', + 'plurals.key_many': '多数', + 'plurals.key_other': 'その他', + 'plurals.keyWithCount_one': '{{count}} 件の項目', + 'plurals.keyWithCount_other': '{{count}} 件の項目', + 'context.friend': '友達', + 'context.friend_male': '彼氏', + 'context.friend_female': '彼女', + 'objects.tree.res': '{{something}} を追加しました', + }, +}); + +export default quickstartTranslationJa; diff --git a/workspaces/translations/plugins/translations/src/translations/fr.ts b/workspaces/translations/plugins/translations/src/translations/fr.ts index d2dab83219..7fc513d1b4 100644 --- a/workspaces/translations/plugins/translations/src/translations/fr.ts +++ b/workspaces/translations/plugins/translations/src/translations/fr.ts @@ -13,27 +13,32 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { translationsPluginTranslationRef } from './ref'; +/** + * fr translation for plugin.translations. + * @public + */ const translationsTranslationFr = createTranslationMessages({ ref: translationsPluginTranslationRef, messages: { - 'common.error': "Une erreur s'est produite", - 'common.loading': 'Chargement en cours...', - 'common.noData': 'Aucune donnée disponible', - 'common.refresh': 'Rafraîchir', - 'export.downloadButton': 'Télécharger les traductions par défaut (anglais)', - 'export.filename': 'traductions-{{timestamp}}.json', - 'export.title': 'Traductions', - 'language.displayFormat': '{{displayName}} ({{code}})', - 'page.subtitle': 'Gérer et afficher les traductions chargées', 'page.title': 'Traductions', - 'table.headers.key': 'Clé', + 'page.subtitle': 'Gérer et afficher les traductions chargées', + 'table.title': 'Traductions chargées ({{count}})', 'table.headers.refId': 'ID de réf', + 'table.headers.key': 'Clé', 'table.options.pageSize': 'Articles par page', 'table.options.pageSizeOptions': 'Afficher {{count}} éléments', - 'table.title': 'Traductions chargées ({{count}})', + 'export.title': 'Traductions', + 'export.downloadButton': 'Télécharger les traductions par défaut (anglais)', + 'export.filename': 'traductions-{{timestamp}}.json', + 'common.loading': 'Chargement en cours...', + 'common.error': "Une erreur s'est produite", + 'common.noData': 'Aucune donnée disponible', + 'common.refresh': 'Rafraîchir', + 'language.displayFormat': '{{displayName}} ({{code}})', }, }); diff --git a/workspaces/translations/plugins/translations/src/translations/it.ts b/workspaces/translations/plugins/translations/src/translations/it.ts index 6d259105bd..3d5882a009 100644 --- a/workspaces/translations/plugins/translations/src/translations/it.ts +++ b/workspaces/translations/plugins/translations/src/translations/it.ts @@ -16,6 +16,10 @@ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { translationsPluginTranslationRef } from './ref'; +/** + * Italian translation for plugin.translations. + * @public + */ const translationsTranslationIt = createTranslationMessages({ ref: translationsPluginTranslationRef, messages: { diff --git a/workspaces/translations/plugins/translations/src/translations/ja.ts b/workspaces/translations/plugins/translations/src/translations/ja.ts new file mode 100644 index 0000000000..0bf034e8c1 --- /dev/null +++ b/workspaces/translations/plugins/translations/src/translations/ja.ts @@ -0,0 +1,45 @@ +/* + * 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 { translationsPluginTranslationRef } from './ref'; + +/** + * Japanese translation for plugin.translations. + * @public + */ +const translationsTranslationJa = createTranslationMessages({ + ref: translationsPluginTranslationRef, + messages: { + 'page.title': '翻訳', + 'page.subtitle': '読み込まれた翻訳の管理および表示', + 'table.title': '読み込まれた翻訳 ({{count}})', + 'table.headers.refId': '参照 ID', + 'table.headers.key': 'キー', + 'table.options.pageSize': '1 ページの項目数', + 'table.options.pageSizeOptions': '{{count}} 件の項目を表示', + 'export.title': '翻訳', + 'export.downloadButton': 'デフォルトの翻訳のダウンロード (英語)', + 'export.filename': 'translations-{{timestamp}}.json', + 'common.loading': '読み込み中...', + 'common.error': 'エラーが発生しました', + 'common.noData': '利用可能なデータはありません', + 'common.refresh': '更新', + 'language.displayFormat': '{{displayName}} ({{code}})', + }, +}); + +export default translationsTranslationJa;