diff --git a/messages/de.json b/messages/de.json index b110d098..d242a6bf 100644 --- a/messages/de.json +++ b/messages/de.json @@ -44,6 +44,7 @@ "Agreed Clearing Date": "Vereinbarter Clearingtermin", "Alienbrain": "Alienbrain", "All": "Alle", + "All the levels are expanded": "Alle Level werden erweitert", "Analyst": "Analysten", "Applicable": "Anwendbar", "Application Software": "Anwendungssoftware", @@ -83,7 +84,7 @@ "Business Area Line": "Geschäftsbereich/Linie", "CHECKED": "CHECED", "CLEARING": "CLEARING", - "CLI attachment not found in the release!": "CLI-Anhang nicht im Release gefunden!", + "CLI attachment not found in the release": "CLI-Anhang wurde in der Version nicht gefunden", "CODE_SNIPPET": "Code Snippet", "COMPLETE": "ZUSAMMENFASSUNG", "COMPONENTS WITH THE SAME IDENTIFIER": "KOMPONENTEN MIT DERSELBEN BEZEICHNUNG [NAME]", @@ -166,7 +167,7 @@ "Cloud Service": "Cloud Service", "Code Snippet": "Code Snippet", "Code snippet": "Code-Auszug", - "Collapse all": "", + "Collapse all": "Alles einklappen", "Comment": "Anmerkung", "Comment on Moderation Decision": "Kommentar zur Moderationsentscheidung", "Comment on Moderation Request": "Kommentar zur Moderationsanfrage", @@ -183,6 +184,7 @@ "Component Obligation": "Komponentenverpflichtung", "Component Owner": "Komponentenbesitzer", "Component Type": "Komponententyp", + "Component Type Filter": "Komponententypfilter", "Component is Duplicate": "Komponenten sind Duplicate", "Component is created": "Komponente wird erstellt", "Component license information (Combined)": "Komponenten-Lizenzinformationen (kombiniert)", @@ -390,7 +392,7 @@ "Everyone": "Alle", "Exact Match": "Exaktes Match", "Exact_Match_Info": "Das Suchergebnis zeigt Elemente an, die genau mit der Eingabe übereinstimmen. \nEntspricht der Verwendung von (\") um das Suchwort. Wird auf den Komponentennamen angewendet.", - "Expand Next Level": "", + "Expand Next Level": "Erweitern Sie die nächste Ebene", "Expert": "Sachverständige", "Expiration Date": "Verfallsdatum", "Export SBOM": "Ausfuhr SBOM", @@ -405,6 +407,7 @@ "External ids": "Außenids", "External link for more information": "", "FSF Free/Libre?": "", + "Failed to load source file with error": "Fehler beim Laden der Quelldatei", "Field Name": "Feldname", "File name": "Dateiname", "Finalized License Scan Report": "Letzter Lizenz-Scan-Bericht", @@ -516,8 +519,10 @@ "License Type": "Lizenztyp", "License Types": "Lizenzarten", "License added successfully!": "", + "License name": "Lizenzname", "License removed successfully!": "", "License shortname is already taken!": "", + "License type": "Lizenz-Typ", "License updated failed!": "", "License updated successfully!": "", "Licenses": "Lizenzen", @@ -530,6 +535,7 @@ "Link to Projects": "Link zu Projekten", "Linked Obligations": "", "Linked Packages": "Verknüpfte Pakete", + "Linked Projects": "Verknüpfte Projekte", "Linked Releases": "Linked Releases", "Linked Releases and Projects": "Linked Releases und Projekte", "Links": "Links", @@ -548,6 +554,7 @@ "Mainline": "Hauptlinie", "Mainline State": "Mainline-Staat", "Matched By": "Abgestimmt von", + "Main licenses": "Hauptlizenzen", "Matched by": "Passend von", "Material Index Number": "Material Index Nummer", "Me and Moderators": "Ich und Moderatoren", @@ -566,6 +573,7 @@ "Modified On": "Geändert auf", "Monotone": "Monoton", "Multiple CLI are found in release!": "Mehrere CLI sind in Release gefunden!", + "Multiple approved CLI are found in the release": "In der Version sind mehrere genehmigte CLI enthalten", "My Components": "Meine Komponenten", "My Projects": "Meine Projekte", "My Subscriptions": "Meine Abonnements", @@ -587,9 +595,11 @@ "New Release": "Neue Veröffentlichung", "No": "Nein", "No Records Found": "Keine Daten gefunden", + "No applicable parser has been found for the attachment": "Für den Anhang wurde kein geeigneter Parser gefunden", "No attachments yet": "Noch keine Anhänge.", "No changes in attachments": "Keine Änderungen an den Anhängen", "No changes in basic details": "Keine Änderungen in grundlegenden Details", + "No linked releases or projects": "Keine verknüpften Veröffentlichungen oder Projekte", "No previous selection found If you have writing permissions to this project your selection will be stored automatically when downloading": "Keine vorherige Auswahl gefunden. \nWenn Sie Schreibrechte für dieses Projekt haben, wird Ihre Auswahl beim Herunterladen automatisch gespeichert.", "No recent components available": "Keine aktuellen Komponenten verfügbar", "No recent releases available": "Keine aktuellen Veröffentlichungen verfügbar", @@ -647,6 +657,7 @@ "Pending": "Ausstehend", "Pending Input": "Ausstehende Eingabe", "Perforce": "Perforce", + "Phase Out": "Ausstieg", "Phase-out date": "Phase-out-Datum", "Phase-out since": "Phase-out seit", "PhaseOut": "Phase Out", @@ -703,6 +714,7 @@ "RELEASES WITH MORE THAN ONE SOURCE ATTACHMENT": "VERÖFFENTLICHUNGEN MIT MEHR ALS EINEM QUELLENANHANG", "RELEASES WITH THE SAME IDENTIFIER": "VERÖFFENTLICHUNGEN MIT DERSELBEN IDENTIFIZIERUNG [NAME(VERSION)]", "RELEASE_MAIN_STATE": "Open: Bisher nicht entschieden Mainline: Organisation oder Person denkt, dass die Nutzung dieser Software empfohlen wird, die mehrere Versionen enthalten Spezifische: Die Software wird im Allgemeinen nicht empfohlen, aber für spezielle Anwendungsfall oder für diese bestimmte Version ist es in Phaseout akzeptabel: Die Software hat Probleme, bitte beachten Sie, es bald zu entfernen, wenn in Gebrauch Denied: Software, die nicht genutzt werden darf. Zum Beispiel Software, die keine Lizenzierung hat", + "REPORT_APPROVED": "Bericht genehmigt", "REPORT_AVAILABLE": "Bericht verfügbar", "REPOSITORY_TYPE": "Repository-Typ", "REST API Token": "REST-API-Token", @@ -722,12 +734,15 @@ "Release": "Freigeben", "Release Aggregate Data": "Veröffentlichung Gesamtdaten", "Release Clearing State": "Clearing-Status freigeben", + "Release Clearing State Filter": "Clearing-Statusfilter freigeben", "Release Create failed": "Erstelle Fehler", "Release Date of this Release": "Veröffentlichungsdatum dieser Veröffentlichung", "Release Mainline State": "Release Mainline State", "Release Name": "Release-Name", "Release Overview": "Über uns", "Release Path": "Release-Pfad", + "Release Relation": "", + "Release Relation Filter": "Beziehungsfilter freigeben", "Release Repository": "Repository veröffentlichen", "Release Summary": "Zusammenfassung", "Release Vendor": "Lassen Sie mich los", @@ -856,6 +871,7 @@ "Source Code Tool-Made": "Quelle Code Tool-Made", "Source file": "Quelldatei", "Source file (Self-made)": "Quelle-Datei (Self-made)", + "Source file information not found in CLI": "Informationen zur Quelldatei wurden in der CLI nicht gefunden", "Special risk Open Source Software": "Spezialrisiko Open Source Software", "Special risks 3rd party software": "Sonderrisiken Software für Dritte", "Specific": "Spezifisch", @@ -967,6 +983,7 @@ "Vendors": "Verkäufer", "Verification": "Überprüfung", "Version": "Version", + "View file list": "Dateiliste anzeigen", "Visibility": "Sichtbarkeit", "Visual SourceSafe": "Visual SourceSafe", "Vulnerabilities": "Schwachstellen", @@ -987,6 +1004,7 @@ "Vulnerability with the same External Id already exists": "Schwachstelle mit demselben externen Id existiert bereits", "Vulnerable Configuration": "Vulnerable Konfiguration", "Vulnerable configurations": "Vulnerable Konfigurationen", + "Warning": "Warnung", "Weighting": "Gewichtung", "Welcome to SW360!": "Willkommen bei SW360!", "Wiki": "Wiki", @@ -1028,11 +1046,27 @@ "key": "Schlüssel", "learn_more_components": "Erfahren Sie mehr über Komponententypen.", "n a modified list": "n / A. (geänderte Liste)", + "mainline_state_denied_tooltip": "Software, deren Nutzung nicht gestattet ist. \nZum Beispiel Software, für die es keine Lizenz gibt", + "mainline_state_mainline_tooltip": "Die Organisation oder Person ist der Meinung, dass die Verwendung dieser Software empfohlen wird, die mehrere Versionen umfasst", + "mainline_state_open_tooltip": "Bisher noch nicht entschieden", + "mainline_state_phaseout_tooltip": "Es gibt Probleme mit der Software. Bitte entfernen Sie sie bald, wenn Sie sie verwenden", + "mainline_state_specific_tooltip": "Die Software wird im Allgemeinen nicht empfohlen, ist aber für spezielle Anwendungsfälle oder für diese bestimmte Version akzeptabel", "number of the vulnerabilities were matched by": "{count} der Schwachstellen wurden von {matchedBy}", "number_of_attachments_not_match_condition": "Es muss genau ein Quell-Ansatz sein, aber es gibt {count} bei dieser Freigabe. Bitte kommen Sie zurück, sobald Sie das korrigiert haben.", "other documents might use the licenses": "Hinweis: Andere Dokumente können die Lizenzen verwenden.", "owner_account_unit": "Rechnungseinheit des Eigentümers erfassen", "project_cannot_be_created": "Projekt kann nicht erstellt/updated", + "release_relation_code_snippest_tooltip": "Aus der Referenzfreigabe wird ein Fragment verwendet", + "release_relation_contained_tooltip": "Wenn Sie einfach nicht wissen, ob es dynamisch verknüpft ist", + "release_relation_dynamic_linked_tooltip": "Software dynamisch verknüpft – wie der Name schon sagt", + "release_relation_interal_use_tooltip": "Wird zum Erstellen oder Bauen verwendet oder? \ndas Produkt oder die Projekte, aber nicht geliefert", + "release_relation_optional_tooltip": "Ist kein zwingender Bestandteil der Installation", + "release_relation_referred_tooltip": "Verweisen auf ein eigenständiges, verwendetes anderes Teil", + "release_relation_side_by_side_tooltip": "Bisher noch nicht entschieden", + "release_relation_standalone_tooltip": "Die Software wird als eigenständige Lieferung bereitgestellt, d. h. \ntechnisch nicht verbunden", + "release_relation_static_linked_tooltip": "Statisch verknüpfte Software – wie der Name schon sagt", + "release_relation_to_be_replaced_tooltip": "Ist vorhanden, sollte aber ausgezogen werden", + "release_relation_unknown_tooltip": "Wenn Sie es einfach nicht wissen", "to edit the project relation": "zur Bearbeitung der Projektbeziehung", "updated successfully": "Erfolgreich geupdated!", "vector": "Vektor", diff --git a/messages/en.json b/messages/en.json index ed940cb5..85e775eb 100644 --- a/messages/en.json +++ b/messages/en.json @@ -44,6 +44,7 @@ "Agreed Clearing Date": "Agreed Clearing Date", "Alienbrain": "Alienbrain", "All": "All", + "All the levels are expanded": "All the levels are expanded", "Analyst": "Analyst", "Applicable": "Applicable", "Application Software": "Application Software", @@ -83,7 +84,7 @@ "Business Area Line": "Business Area/Line", "CHECKED": "CHECKED", "CLEARING": "CLEARING", - "CLI attachment not found in the release!": "CLI attachment not found in the release!", + "CLI attachment not found in the release": "CLI attachment not found in the release", "CODE_SNIPPET": "Code Snippet", "COMPLETE": "COMPLETE", "COMPONENTS WITH THE SAME IDENTIFIER": "COMPONENTS WITH THE SAME IDENTIFIER [NAME]", @@ -183,6 +184,7 @@ "Component Obligation": "Component Obligation", "Component Owner": "Component Owner", "Component Type": "Component Type", + "Component Type Filter": "Component Type Filter", "Component is Duplicate": "Component is Duplicate", "Component is created": "Component is created", "Component license information (Combined)": "Component license information (Combined)", @@ -405,6 +407,7 @@ "External ids": "External ids", "External link for more information": "External link for more information", "FSF Free/Libre?": "FSF Free/Libre?", + "Failed to load source file with error": "Failed to load source file with error", "Field Name": "Field Name", "File name": "File name", "Finalized License Scan Report": "Finalized License Scan Report", @@ -516,8 +519,10 @@ "License Type": "License Type", "License Types": "License Types", "License added successfully!": "License added successfully!", + "License name": "License name", "License removed successfully!": "License removed successfully!", "License shortname is already taken!": "License shortname is already taken!", + "License type": "License type", "License updated failed!": "License updated failed!", "License updated successfully!": "License updated successfully!", "Licenses": "Licenses", @@ -530,6 +535,7 @@ "Link to Projects": "Link to Projects", "Linked Obligations": "Linked Obligations", "Linked Packages": "Linked Packages", + "Linked Projects": "Linked Projects", "Linked Releases": "Linked Releases", "Linked Releases and Projects": "Linked Releases and Projects", "Links": "Links", @@ -547,6 +553,7 @@ "Main Licenses": "Main Licenses", "Mainline": "Mainline", "Mainline State": "Mainline State", + "Main licenses": "Main licenses", "Matched By": "Matched By", "Matched by": "Matched by", "Material Index Number": "Material Index Number", @@ -566,6 +573,7 @@ "Modified On": "Modified On", "Monotone": "Monotone", "Multiple CLI are found in release!": "Multiple CLI are found in release!", + "Multiple approved CLI are found in the release": "Multiple approved CLI are found in the release", "My Components": "My Components", "My Projects": "My Projects", "My Subscriptions": "My Subscriptions", @@ -587,9 +595,11 @@ "New Release": "New Release", "No": "No", "No Records Found": "No Records Found", + "No applicable parser has been found for the attachment": "No applicable parser has been found for the attachment", "No attachments yet": "No attachments yet.", "No changes in attachments": "No changes in attachments", "No changes in basic details": "No changes in basic details", + "No linked releases or projects": "No linked releases or projects", "No previous selection found If you have writing permissions to this project your selection will be stored automatically when downloading": "No previous selection found. If you have writing permissions to this project, your selection will be stored automatically when downloading.", "No recent components available": "No recent components available", "No recent releases available": "No recent releases available", @@ -647,6 +657,7 @@ "Pending": "Pending", "Pending Input": "Pending Input", "Perforce": "Perforce", + "Phase Out": "Phase Out", "Phase-out date": "Phase-out date", "Phase-out since": "Phase-out since", "PhaseOut": "PhaseOut", @@ -703,6 +714,7 @@ "RELEASES WITH MORE THAN ONE SOURCE ATTACHMENT": "RELEASES WITH MORE THAN ONE SOURCE ATTACHMENT", "RELEASES WITH THE SAME IDENTIFIER": "RELEASES WITH THE SAME IDENTIFIER [NAME(VERSION)]", "RELEASE_MAIN_STATE": "Open: Not decided so far Mainline: Organisation or person thinks that use of this software is recommended, which included multiple versions Specific: The software is not recommended in general, but for special use case or for this particular version it is acceptable In Phaseout: The software has issues, please consider removing it soon, if in use Denied: Software which is not allowed for use. For example, software that does not have licensing", + "REPORT_APPROVED": "Report Approved", "REPORT_AVAILABLE": "Report Available", "REPOSITORY_TYPE": "Repository Type", "REST API Token": "REST API Token", @@ -722,12 +734,15 @@ "Release": "Release", "Release Aggregate Data": "Release Aggregate Data", "Release Clearing State": "Release Clearing State", + "Release Clearing State Filter": "Release Clearing State Filter", "Release Create failed": "Release Create failed", "Release Date of this Release": "Release Date of this Release", "Release Mainline State": "Release Mainline State", "Release Name": "Release Name", "Release Overview": "Release Overview", "Release Path": "Release Path", + "Release Relation": "Release Relation", + "Release Relation Filter": "Release Relation Filter", "Release Repository": "Release Repository", "Release Summary": "Release Summary", "Release Vendor": "Release Vendor", @@ -856,6 +871,7 @@ "Source Code Tool-Made": "Source Code Tool-Made", "Source file": "Source file", "Source file (Self-made)": "Source file (Self-made)", + "Source file information not found in CLI": "Source file information not found in CLI", "Special risk Open Source Software": "Special risk Open Source Software", "Special risks 3rd party software": "Special risks 3rd party software", "Specific": "Specific", @@ -967,6 +983,7 @@ "Vendors": "Vendors", "Verification": "Verification", "Version": "Version", + "View file list": "View file list", "Visibility": "Visibility", "Visual SourceSafe": "Visual SourceSafe", "Vulnerabilities": "Vulnerabilities", @@ -987,6 +1004,7 @@ "Vulnerability with the same External Id already exists": "Vulnerability with the same External Id already exists", "Vulnerable Configuration": "Vulnerable Configuration", "Vulnerable configurations": "Vulnerable configurations", + "Warning": "Warning", "Weighting": "Weighting", "Welcome to SW360!": "Welcome to SW360!", "Wiki": "Wiki", @@ -1028,11 +1046,27 @@ "key": "key", "learn_more_components": "Learn more about component types.", "n a modified list": "n.a. (modified list)", + "mainline_state_denied_tooltip": "Software which is not allowed for use. For example, software that does not have licensing", + "mainline_state_mainline_tooltip": "Organisation or person thinks that use of this software is recommended, which included multiple versions", + "mainline_state_open_tooltip": "Not decided so far", + "mainline_state_phaseout_tooltip": "The software has issues, please consider removing it soon, if in use", + "mainline_state_specific_tooltip": "The software is not recommended in general, but for special use case or for this particular version it is acceptable", "number of the vulnerabilities were matched by": "{count} of the vulnerabilities were matched by {matchedBy}", "number_of_attachments_not_match_condition": "There has to be exactly one source attachment, but there are {count} at this release. Please come back once you corrected that.", "other documents might use the licenses": "Note: other documents might use the licenses.", "owner_account_unit": "Enter owner's accounting unit", "project_cannot_be_created": "Project cannot be created/updated", + "release_relation_code_snippest_tooltip": "From references release, a fragment is used", + "release_relation_contained_tooltip": "If you just do not know whether it is dynamically linked", + "release_relation_dynamic_linked_tooltip": "Software dynamically linked - as the name says", + "release_relation_interal_use_tooltip": "Used for creating or building or ? the product or projects but not delivered", + "release_relation_optional_tooltip": "Is not mandatory part of the installation", + "release_relation_referred_tooltip": "Referencing a stand alone used other part", + "release_relation_side_by_side_tooltip": "Not decided so far", + "release_relation_standalone_tooltip": "Software is given as standalone delivery, ie. not technically connected", + "release_relation_static_linked_tooltip": "Software statically linked - as the name says", + "release_relation_to_be_replaced_tooltip": "Is there but should be moved out", + "release_relation_unknown_tooltip": "If you just do not know", "to edit the project relation": "to edit the project relation", "updated successfully": "updated successfully!", "vector": "vector", diff --git a/messages/es.json b/messages/es.json index f7f56b26..7f6caa4c 100644 --- a/messages/es.json +++ b/messages/es.json @@ -44,6 +44,7 @@ "Agreed Clearing Date": "Fecha de compensación acordada", "Alienbrain": "Alienbrain", "All": "Todos", + "All the levels are expanded": "Todos los niveles están ampliados.", "Analyst": "Analista", "Applicable": "Aplicable", "Application Software": "Software de aplicación", @@ -83,7 +84,7 @@ "Business Area Line": "Área/Línea de Negocio", "CHECKED": "CHECKED", "CLEARING": "CLARO", - "CLI attachment not found in the release!": "¡Apego CLI no encontrado en la liberación!", + "CLI attachment not found in the release": "¡Apego CLI no encontrado en la liberación", "CODE_SNIPPET": "Code Snippet", "COMPLETE": "COMPLETO", "COMPONENTS WITH THE SAME IDENTIFIER": "COMPONENTES CON EL MISMO IDENTIFICADOR [NOMBRE]", @@ -166,7 +167,7 @@ "Cloud Service": "Servicio Cloud", "Code Snippet": "Code Snippet", "Code snippet": "Fragmento de código", - "Collapse all": "", + "Collapse all": "Desplegar todo", "Comment": "Comentario", "Comment on Moderation Decision": "Comentar sobre la decisión de moderación", "Comment on Moderation Request": "Comentar sobre la solicitud de moderación", @@ -183,6 +184,7 @@ "Component Obligation": "Obligación del componente", "Component Owner": "Propietario del componente", "Component Type": "Tipo de componente", + "Component Type Filter": "Filtro de tipo de componente", "Component is Duplicate": "Componente es Duplicate", "Component is created": "Componente creado", "Component license information (Combined)": "Información sobre la licencia de componentes (combinado)", @@ -390,7 +392,7 @@ "Everyone": "Todos", "Exact Match": "Partido Exacto", "Exact_Match_Info": "El resultado de la búsqueda mostrará elementos que coincidan exactamente con la entrada. \nEquivale a utilizar (\") alrededor de la palabra clave de búsqueda. Se aplica al nombre del componente.", - "Expand Next Level": "", + "Expand Next Level": "Expandir el siguiente nivel", "Expert": "Expert", "Expiration Date": "Fecha de caducidad", "Export SBOM": "Export SBOM", @@ -405,6 +407,7 @@ "External ids": "Vacunas externas", "External link for more information": "", "FSF Free/Libre?": "", + "Failed to load source file with error": "No se pudo cargar el archivo fuente con error", "Field Name": "Nombre del campo", "File name": "Nombre del archivo", "Finalized License Scan Report": "Informe de exploración de licencia finalizada", @@ -516,8 +519,10 @@ "License Type": "Tipo de licencia", "License Types": "Tipos de licencia", "License added successfully!": "", + "License name": "Nombre de la licencia", "License removed successfully!": "", "License shortname is already taken!": "", + "License type": "Tipo de licencia", "License updated failed!": "", "License updated successfully!": "", "Licenses": "Licencias", @@ -530,6 +535,7 @@ "Link to Projects": "Enlace a Proyectos", "Linked Obligations": "", "Linked Packages": "Paquetes vinculados", + "Linked Projects": "Proyectos vinculados", "Linked Releases": "Comunicados vinculados", "Linked Releases and Projects": "Comunicados y proyectos vinculados", "Links": "Enlaces", @@ -548,6 +554,7 @@ "Mainline": "Línea principal", "Mainline State": "Estado principal", "Matched By": "Emparejado por", + "Main licenses": "Licencias principales", "Matched by": "Coincidido por", "Material Index Number": "Número del índice de material", "Me and Moderators": "Yo y Moderadores", @@ -566,6 +573,7 @@ "Modified On": "Modificado en", "Monotone": "Monotone", "Multiple CLI are found in release!": "Múltiples CLI se encuentran en liberación!", + "Multiple approved CLI are found in the release": "En la versión se encuentran varias CLI aprobadas", "My Components": "Mis componentes", "My Projects": "Mis proyectos", "My Subscriptions": "Mis Suscripciones", @@ -587,9 +595,11 @@ "New Release": "Nuevo lanzamiento", "No": "No", "No Records Found": "No Records Found", + "No applicable parser has been found for the attachment": "No se ha encontrado ningún analizador aplicable para el archivo adjunto.", "No attachments yet": "Todavía no hay apegos.", "No changes in attachments": "No hay cambios en los archivos adjuntos.", "No changes in basic details": "Sin cambios en los detalles básicos.", + "No linked releases or projects": "No hay lanzamientos ni proyectos vinculados", "No previous selection found If you have writing permissions to this project your selection will be stored automatically when downloading": "No se encontró ninguna selección anterior. \nSi tiene permisos de escritura para este proyecto, su selección se almacenará automáticamente al descargarlo.", "No recent components available": "No hay componentes recientes disponibles", "No recent releases available": "No hay lanzamientos recientes disponibles", @@ -647,6 +657,7 @@ "Pending": "Pendiente", "Pending Input": "Entrada pendientePendiente", "Perforce": "Perforce", + "Phase Out": "Reducir progresivamente", "Phase-out date": "Fecha de eliminación", "Phase-out since": "Fase de salida desde", "PhaseOut": "PhaseOut", @@ -703,6 +714,7 @@ "RELEASES WITH MORE THAN ONE SOURCE ATTACHMENT": "LANZAMIENTOS CON MÁS DE UNA FUENTE ADJUNTA", "RELEASES WITH THE SAME IDENTIFIER": "LANZAMIENTOS CON EL MISMO IDENTIFICADOR [NOMBRE(VERSIÓN)]", "RELEASE_MAIN_STATE": "Abierto: No decidido hasta ahora Mainline: Organización o persona piensa que se recomienda el uso de este software, que incluye múltiples versiones Específicas: El software no se recomienda en general, pero para caso de uso especial o para esta versión en particular es aceptable En Fase: El software tiene problemas, por favor considere eliminarlo pronto, si en uso Denied: Software que no está permitido para uso. Por ejemplo, software que no tiene licencias", + "REPORT_APPROVED": "Informe aprobado", "REPORT_AVAILABLE": "Informe disponible", "REPOSITORY_TYPE": "Tipo de depósito", "REST API Token": "Token API REST", @@ -722,12 +734,15 @@ "Release": "Liberación", "Release Aggregate Data": "Liberar datos agregados", "Release Clearing State": "Liberar estado de compensación", + "Release Clearing State Filter": "Liberar filtro de estado de borrado", "Release Create failed": "Crear falló", "Release Date of this Release": "Fecha de lanzamiento de este comunicado", "Release Mainline State": "Estado de la liberación", "Release Name": "Nombre de la versión", "Release Overview": "Sinopsis de liberación", "Release Path": "Ruta de lanzamiento", + "Release Relation": "", + "Release Relation Filter": "Filtro de relación de publicación", "Release Repository": "Repositorio de liberación", "Release Summary": "Resumen", "Release Vendor": "Vendedor de lanzamiento", @@ -856,6 +871,7 @@ "Source Code Tool-Made": "Fuente Code Tool-Made", "Source file": "Archivo fuente", "Source file (Self-made)": "Archivo fuente (auto-hecha)", + "Source file information not found in CLI": "La información del archivo fuente no se encuentra en la CLI", "Special risk Open Source Software": "Riesgo especial Software de código abierto", "Special risks 3rd party software": "Riesgos especiales Software de terceros", "Specific": "Específico", @@ -967,6 +983,7 @@ "Vendors": "Vendedores", "Verification": "Verificación", "Version": "Versión", + "View file list": "Ver lista de archivos", "Visibility": "Visibilidad", "Visual SourceSafe": "Fuente visualSafe", "Vulnerabilities": "Vulnerabilidad", @@ -987,6 +1004,7 @@ "Vulnerability with the same External Id already exists": "Vulnerabilidad con el mismo Id Externo ya existe", "Vulnerable Configuration": "Configuración Vulnerable", "Vulnerable configurations": "Configuraciones vulnerables", + "Warning": "Advertencia", "Weighting": "Peso", "Welcome to SW360!": "Bienvenido a SW360!", "Wiki": "Wiki", @@ -1028,11 +1046,27 @@ "key": "clave", "learn_more_components": "Más información sobre los tipos de componentes.", "n a modified list": "n / A. (lista modificada)", + "mainline_state_denied_tooltip": "Software cuyo uso no está permitido. \nPor ejemplo, software que no tiene licencia.", + "mainline_state_mainline_tooltip": "La organización o persona cree que se recomienda el uso de este software, que incluye varias versiones.", + "mainline_state_open_tooltip": "No decidido hasta el momento", + "mainline_state_phaseout_tooltip": "El software tiene problemas; considere eliminarlo pronto, si está en uso.", + "mainline_state_specific_tooltip": "El software no se recomienda en general, pero para casos de uso especiales o para esta versión particular es aceptable.", "number of the vulnerabilities were matched by": "{contador} de las vulnerabilidades fueron igualadas por {matchedBy}", "number_of_attachments_not_match_condition": "Tiene que haber exactamente un apego fuente, pero hay {cuenta} en esta liberación. Por favor, vuelve una vez que lo corrigiste.", "other documents might use the licenses": "Nota: otros documentos podrían usar las licencias.", "owner_account_unit": "Ingrese la unidad de contabilidad del propietario", "project_cannot_be_created": "El proyecto no puede crearse ni actualizarse", + "release_relation_code_snippest_tooltip": "De la publicación de referencias, se utiliza un fragmento.", + "release_relation_contained_tooltip": "Si simplemente no sabes si está vinculado dinámicamente", + "release_relation_dynamic_linked_tooltip": "Software vinculado dinámicamente, como su nombre lo indica", + "release_relation_interal_use_tooltip": "¿Se utiliza para crear o construir o? \nel producto o proyectos pero no entregados", + "release_relation_optional_tooltip": "No es parte obligatoria de la instalación.", + "release_relation_referred_tooltip": "Hacer referencia a una parte independiente usada otra parte", + "release_relation_side_by_side_tooltip": "No decidido hasta el momento", + "release_relation_standalone_tooltip": "El software se proporciona como entrega independiente, es decir. \ntécnicamente no conectado", + "release_relation_static_linked_tooltip": "Software vinculado estáticamente, como su nombre lo indica", + "release_relation_to_be_replaced_tooltip": "¿Está ahí pero debería ser trasladado?", + "release_relation_unknown_tooltip": "Si simplemente no lo sabes", "to edit the project relation": "para editar la relación del proyecto", "updated successfully": "actualizado exitosamente!", "vector": "vector", diff --git a/messages/fr.json b/messages/fr.json index bfa73a0c..a9046732 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -44,6 +44,7 @@ "Agreed Clearing Date": "Date de compensation convenue", "Alienbrain": "Autres", "All": "Tous", + "All the levels are expanded": "Tous les niveaux sont étendus", "Analyst": "Analyste", "Applicable": "En vigueur", "Application Software": "Logiciel d'application", @@ -83,7 +84,7 @@ "Business Area Line": "Domaine/Ligne d'activité", "CHECKED": "CONTRÔLE", "CLEARING": "CLAIRIÈRE", - "CLI attachment not found in the release!": "Pièce jointe CLI non trouvée dans la version !", + "CLI attachment not found in the release": "Pièce jointe CLI non trouvée dans la version", "CODE_SNIPPET": "Extrait de code", "COMPLETE": "REMPLIR", "COMPONENTS WITH THE SAME IDENTIFIER": "COMPOSANTS AVEC LE MÊME IDENTIFIANT [NOM]", @@ -166,7 +167,7 @@ "Cloud Service": "Service Cloud", "Code Snippet": "Extrait de code", "Code snippet": "Extrait de code", - "Collapse all": "", + "Collapse all": "Tout réduire", "Comment": "Commentaire", "Comment on Moderation Decision": "Commentaire sur la décision de modération", "Comment on Moderation Request": "Commentaire sur la demande de modération", @@ -183,6 +184,7 @@ "Component Obligation": "Obligation du composant", "Component Owner": "Propriétaire de la composante", "Component Type": "Type de composant", + "Component Type Filter": "Filtre de type de composant", "Component is Duplicate": "Composante double", "Component is created": "Le composant est créé", "Component license information (Combined)": "Informations sur la licence des composants (combinés)", @@ -390,7 +392,7 @@ "Everyone": "Tous", "Exact Match": "Correspondance exacte", "Exact_Match_Info": "Le résultat de la recherche affichera les éléments correspondant exactement à l’entrée. \nÉquivaut à l'utilisation de (\") autour du mot-clé de recherche. Appliqué au nom du composant.", - "Expand Next Level": "", + "Expand Next Level": "Développer le niveau suivant", "Expert": "Expert", "Expiration Date": "Date d'expiration", "Export SBOM": "Exportation", @@ -405,6 +407,7 @@ "External ids": "Identifications externes", "External link for more information": "", "FSF Free/Libre?": "", + "Failed to load source file with error": "Échec du chargement du fichier source avec erreur", "Field Name": "Nom du champ", "File name": "Nom du fichier", "Finalized License Scan Report": "Rapport final d'analyse de licence", @@ -516,8 +519,10 @@ "License Type": "Type de licence", "License Types": "Types de licences", "License added successfully!": "", + "License name": "Nom de la licence", "License removed successfully!": "", "License shortname is already taken!": "", + "License type": "Type de licence", "License updated failed!": "", "License updated successfully!": "", "Licenses": "Licences", @@ -530,6 +535,7 @@ "Link to Projects": "Lien vers des projets", "Linked Obligations": "", "Linked Packages": "Forfaits liés", + "Linked Projects": "Projets liés", "Linked Releases": "Communiqués liés", "Linked Releases and Projects": "Communiqués et projets liés", "Links": "Liens", @@ -548,6 +554,7 @@ "Mainline": "Ligne principale", "Mainline State": "État de la ligne principale", "Matched By": "Correspondant à", + "Main licenses": "Principales licences", "Matched by": "Corrigé par", "Material Index Number": "Numéro index du matériau", "Me and Moderators": "Moi et les modérateurs", @@ -566,6 +573,7 @@ "Modified On": "Modifié le", "Monotone": "Monotone", "Multiple CLI are found in release!": "Plusieurs CLI se trouvent en liberté !", + "Multiple approved CLI are found in the release": "Plusieurs CLI approuvées se trouvent dans la version", "My Components": "Mes composants", "My Projects": "Mes projets", "My Subscriptions": "Mes abonnements", @@ -587,9 +595,11 @@ "New Release": "Nouvelle version", "No": "Numéro", "No Records Found": "Aucun document trouvé", + "No applicable parser has been found for the attachment": "Aucun analyseur applicable n'a été trouvé pour la pièce jointe", "No attachments yet": "Pas encore de pièces jointes.", "No changes in attachments": "Aucun changement dans les pièces jointes", "No changes in basic details": "Aucun changement dans les détails de base", + "No linked releases or projects": "Aucune version ou projet lié", "No previous selection found If you have writing permissions to this project your selection will be stored automatically when downloading": "Aucune sélection précédente trouvée. \nSi vous disposez des autorisations d'écriture sur ce projet, votre sélection sera automatiquement stockée lors du téléchargement.", "No recent components available": "Aucun composant récent disponible", "No recent releases available": "Aucune version récente disponible", @@ -647,6 +657,7 @@ "Pending": "En attente", "Pending Input": "En attente d'entrée", "Perforce": "Force", + "Phase Out": "Élimination progressive", "Phase-out date": "Date d ' élimination", "Phase-out since": "Élimination progressive depuis", "PhaseOut": "Sortie progressive", @@ -703,6 +714,7 @@ "RELEASES WITH MORE THAN ONE SOURCE ATTACHMENT": "", "RELEASES WITH THE SAME IDENTIFIER": "SORTIES AVEC LE MÊME IDENTIFIANT [NOM(VERSION)]", "RELEASE_MAIN_STATE": "Open: Pas encore décidé Mainline: L'organisation ou la personne pense que l'utilisation de ce logiciel est recommandée, qui comprend plusieurs versions spécifiques: Le logiciel n'est pas recommandé en général, mais pour le cas d'utilisation spéciale ou pour cette version particulière, il est acceptable dans Phaseout: Le logiciel a des problèmes, veuillez envisager de le supprimer rapidement, si en usage Refusé: Logiciel qui n'est pas autorisé à être utilisé. Par exemple, les logiciels qui n'ont pas de licence", + "REPORT_APPROVED": "Rapport approuvé", "REPORT_AVAILABLE": "Rapport disponible", "REPOSITORY_TYPE": "Type de dépôt", "REST API Token": "Jeton API REST", @@ -722,12 +734,15 @@ "Release": "Libération", "Release Aggregate Data": "Publication des données agrégées", "Release Clearing State": "Libérer l'état d'effacement", + "Release Clearing State Filter": "Filtrer l'état d'effacement de la version", "Release Create failed": "La publication Créer a échoué", "Release Date of this Release": "Date de sortie", "Release Mainline State": "État principal de libération", "Release Name": "Nom de la version", "Release Overview": "Aperçu de la publication", "Release Path": "Chemin de sortie", + "Release Relation": "", + "Release Relation Filter": "Filtre de relation de publication", "Release Repository": "Dépôt de publication", "Release Summary": "Résumé de la publication", "Release Vendor": "Fournisseur de mainlevée", @@ -856,6 +871,7 @@ "Source Code Tool-Made": "Outil de code source", "Source file": "Fichier source", "Source file (Self-made)": "Fichier source (auto-fait)", + "Source file information not found in CLI": "Informations sur le fichier source introuvables dans la CLI", "Special risk Open Source Software": "Risque spécial Logiciel Open Source", "Special risks 3rd party software": "Risques spéciaux Logiciels tiers", "Specific": "Spécifique", @@ -967,6 +983,7 @@ "Vendors": "Fournisseurs", "Verification": "Vérification", "Version": "Version", + "View file list": "Afficher la liste des fichiers", "Visibility": "Visibilité", "Visual SourceSafe": "Source visuelle sûre", "Vulnerabilities": "Vulnérabilité", @@ -987,6 +1004,7 @@ "Vulnerability with the same External Id already exists": "La vulnérabilité avec le même Id externe existe déjà", "Vulnerable Configuration": "Configuration vulnérable", "Vulnerable configurations": "Configurations vulnérables", + "Warning": "Avertissement", "Weighting": "Pondération", "Welcome to SW360!": "Bienvenue au SW360 !", "Wiki": "Wiki", @@ -1028,11 +1046,27 @@ "key": "clé", "learn_more_components": "En savoir plus sur les types de composants.", "n a modified list": "n / A. (liste modifiée)", + "mainline_state_denied_tooltip": "Logiciel dont l'utilisation est interdite. \nPar exemple, un logiciel sans licence", + "mainline_state_mainline_tooltip": "L'organisation ou la personne pense que l'utilisation de ce logiciel est recommandée, qui comprenait plusieurs versions", + "mainline_state_open_tooltip": "Pas encore décidé", + "mainline_state_phaseout_tooltip": "Le logiciel a des problèmes, veuillez envisager de le supprimer bientôt, s'il est utilisé", + "mainline_state_specific_tooltip": "Le logiciel n'est pas recommandé en général, mais pour des cas d'utilisation particuliers ou pour cette version particulière, il est acceptable", "number of the vulnerabilities were matched by": "{compte} des vulnérabilités ont été jumelées par {comparé par}", "number_of_attachments_not_match_condition": "Il doit y avoir exactement une pièce jointe source, mais il y a {count} à cette publication. Revenez une fois que vous l'avez corrigé.", "other documents might use the licenses": "Remarque : d'autres documents pourraient utiliser les licences.", "owner_account_unit": "Inscrivez l'unité comptable du propriétaire", "project_cannot_be_created": "Le projet ne peut pas être créé/mise à jour", + "release_relation_code_snippest_tooltip": "A partir de la publication des références, un fragment est utilisé", + "release_relation_contained_tooltip": "Si vous ne savez tout simplement pas s'il est lié dynamiquement", + "release_relation_dynamic_linked_tooltip": "Logiciel lié dynamiquement - comme son nom l'indique", + "release_relation_interal_use_tooltip": "Utilisé pour créer ou construire ou ? \nle produit ou les projets mais non livrés", + "release_relation_optional_tooltip": "N'est pas une partie obligatoire de l'installation", + "release_relation_referred_tooltip": "Référencement d'une autre pièce utilisée seule", + "release_relation_side_by_side_tooltip": "Pas encore décidé", + "release_relation_standalone_tooltip": "Le logiciel est fourni sous forme de livraison autonome, c'est-à-dire. \npas techniquement connecté", + "release_relation_static_linked_tooltip": "Logiciel lié statiquement - comme son nom l'indique", + "release_relation_to_be_replaced_tooltip": "Y a-t-il mais devrait être déplacé", + "release_relation_unknown_tooltip": "Si tu ne sais tout simplement pas", "to edit the project relation": "pour modifier la relation du projet", "updated successfully": "Mis à jour avec succés!", "vector": "vecteur", diff --git a/messages/ja.json b/messages/ja.json index ea6b6838..ca532d38 100644 --- a/messages/ja.json +++ b/messages/ja.json @@ -44,6 +44,7 @@ "Agreed Clearing Date": "合意された清算日", "Alienbrain": "エイリアンブレイン", "All": "All", + "All the levels are expanded": "すべてのレベルが拡張されます", "Analyst": "アナリスト", "Applicable": "該当する", "Application Software": "アプリケーションソフトウェア", @@ -83,7 +84,7 @@ "Business Area Line": "ビジネスエリア/ライン", "CHECKED": "チェック済み", "CLEARING": "クリアリング", - "CLI attachment not found in the release!": "CLI attachment not found in the release!", + "CLI attachment not found in the release": "CLI attachment not found in the release", "CODE_SNIPPET": "コードスニペット", "COMPLETE": "完了", "COMPONENTS WITH THE SAME IDENTIFIER": "同じ識別子 [名前] を持つコンポーネント", @@ -166,7 +167,7 @@ "Cloud Service": "クラウドサービス", "Code Snippet": "コードスニペット", "Code snippet": "コードスニペット", - "Collapse all": "", + "Collapse all": "すべて折りたたむ", "Comment": "Comment", "Comment on Moderation Decision": "モデレーション決定に対するコメント", "Comment on Moderation Request": "モデレーションリクエストに対するコメント", @@ -183,6 +184,7 @@ "Component Obligation": "コンポーネントの義務", "Component Owner": "コンポーネントオーナー", "Component Type": "コンポーネントタイプ", + "Component Type Filter": "コンポーネントタイプフィルター", "Component is Duplicate": "コンポーネントが重複しています", "Component is created": "コンポーネントが作成されました", "Component license information (Combined)": "コンポーネントライセンス情報(複合)", @@ -390,7 +392,7 @@ "Everyone": "みんな", "Exact Match": "完全に一致", "Exact_Match_Info": "", - "Expand Next Level": "", + "Expand Next Level": "次のレベルを展開", "Expert": "エキスパート", "Expiration Date": "有効期限", "Export SBOM": "Export SBOM", @@ -405,6 +407,7 @@ "External ids": "外部ID", "External link for more information": "", "FSF Free/Libre?": "", + "Failed to load source file with error": "エラーでソースファイルのロードに失敗しました", "Field Name": "フィールド名", "File name": "ファイル名", "Finalized License Scan Report": "ライセンススキャンレポート完成", @@ -516,8 +519,10 @@ "License Type": "ライセンスの種類", "License Types": "License Types", "License added successfully!": "", + "License name": "ライセンス名", "License removed successfully!": "", "License shortname is already taken!": "", + "License type": "ライセンスの種類", "License updated failed!": "", "License updated successfully!": "", "Licenses": "ライセンス", @@ -530,6 +535,7 @@ "Link to Projects": "Link to Projects", "Linked Obligations": "", "Linked Packages": "リンクされたパッケージ", + "Linked Projects": "リンクされたプロジェクト", "Linked Releases": "リンクされたリリース", "Linked Releases and Projects": "リンクされたリリースとプロジェクト", "Links": "リンク", @@ -548,6 +554,7 @@ "Mainline": "幹線", "Mainline State": "メインラインの状態", "Matched By": "一致者", + "Main licenses": "主なライセンス", "Matched by": "匹配者", "Material Index Number": "部品識別番号", "Me and Moderators": "私とモデレータ", @@ -566,6 +573,7 @@ "Modified On": "変更された", "Monotone": "単調", "Multiple CLI are found in release!": "Multiple CLI are found in release!", + "Multiple approved CLI are found in the release": "リリース内に複数の承認済み CLI が見つかります", "My Components": "私のコンポーネント", "My Projects": "私のプロジェクト", "My Subscriptions": "私の定期購読", @@ -587,9 +595,11 @@ "New Release": "New Release", "No": "否", "No Records Found": "レコードが見つかりませんでした", + "No applicable parser has been found for the attachment": "添付ファイルに該当するパーサーが見つかりませんでした", "No attachments yet": "添付ファイルはまだありません", "No changes in attachments": "添付ファイルに変更はありません", "No changes in basic details": "基本的な内容に変更はありません", + "No linked releases or projects": "リンクされたリリースまたはプロジェクトはありません", "No previous selection found If you have writing permissions to this project your selection will be stored automatically when downloading": "以前の選択が見つかりません。\nこのプロジェクトへの書き込み権限がある場合、選択内容はダウンロード時に自動的に保存されます。", "No recent components available": "利用可能な最近のコンポーネントはありません", "No recent releases available": "利用可能な最近のリリースはありません", @@ -647,6 +657,7 @@ "Pending": "保留中", "Pending Input": "保留中の入力", "Perforce": "パーフォース", + "Phase Out": "段階的廃止", "Phase-out date": "段階的廃止日", "Phase-out since": "以降段階的に廃止", "PhaseOut": "フェーズアウト", @@ -703,6 +714,7 @@ "RELEASES WITH MORE THAN ONE SOURCE ATTACHMENT": "複数のソースが添付されたリリース", "RELEASES WITH THE SAME IDENTIFIER": "同じ識別子 [名前(バージョン)] を持つリリース", "RELEASE_MAIN_STATE": "未解決: 現在のところ決定されていません メインライン: 複数のバージョンが含まれるこのソフトウェアの使用が推奨されていると組織または個人が考えています 特定: このソフトウェアは一般的に推奨されませんが、特殊な使用例またはこの特定のバージョンでは許容されます フェーズアウト中:\nソフトウェアには問題があります。使用中の場合は、すぐに削除することを検討してください。 拒否: 使用が許可されていないソフトウェア。\nたとえば、ライセンスのないソフトウェアなど", + "REPORT_APPROVED": "レポートが承認されました", "REPORT_AVAILABLE": "レポートあり", "REPOSITORY_TYPE": "Repository Type", "REST API Token": "REST APIトークン", @@ -722,12 +734,15 @@ "Release": "发行版本", "Release Aggregate Data": "集計データのリリース", "Release Clearing State": "クリア状態を解放する", + "Release Clearing State Filter": "クリア状態フィルターを解放する", "Release Create failed": "Release Create failed", "Release Date of this Release": "本リリースの公開日", "Release Mainline State": "リリースメインライン状態", "Release Name": "リリース名", "Release Overview": "リリース概要", "Release Path": "リリースパス", + "Release Relation": "", + "Release Relation Filter": "リリース関係フィルター", "Release Repository": "リリースリポジトリ", "Release Summary": "リリース概要", "Release Vendor": "リリースベンダー", @@ -856,6 +871,7 @@ "Source Code Tool-Made": "ツール生成のソースコード", "Source file": "ソースファイル", "Source file (Self-made)": "ソースファイル(自作)", + "Source file information not found in CLI": "CLI でソース ファイル情報が見つかりません", "Special risk Open Source Software": "特別なリスク オープンソース ソフトウェア", "Special risks 3rd party software": "特別なリスクがあるサードパーティ製ソフトウェア", "Specific": "特定の", @@ -967,6 +983,7 @@ "Vendors": "ベンダー", "Verification": "验证", "Version": "バージョン", + "View file list": "ファイルリストを表示する", "Visibility": "可視性", "Visual SourceSafe": "ビジュアルソースセーフ", "Vulnerabilities": "脆弱性", @@ -987,6 +1004,7 @@ "Vulnerability with the same External Id already exists": "同じ外部 ID の脆弱性がすでに存在します", "Vulnerable Configuration": "脆弱な構成", "Vulnerable configurations": "脆弱な構成", + "Warning": "警告", "Weighting": "重み付け", "Welcome to SW360!": "SW360へようこそ!", "Wiki": "Wiki", @@ -1028,11 +1046,27 @@ "key": "鍵", "learn_more_components": "コンポーネントの種類について詳しくは、こちらをご覧くだ い。", "n a modified list": "いや。 (変更されたリスト)", + "mainline_state_denied_tooltip": "使用が許可されていないソフトウェア。\nたとえば、ライセンスのないソフトウェアなど", + "mainline_state_mainline_tooltip": "複数のバージョンが含まれるこのソフトウェアの使用が推奨されていると考えている組織または個人", + "mainline_state_open_tooltip": "今のところ決まっていない", + "mainline_state_phaseout_tooltip": "ソフトウェアには問題があります。使用中の場合はすぐに削除することを検討してください。", + "mainline_state_specific_tooltip": "このソフトウェアは一般的に推奨されませんが、特殊な使用例またはこの特定のバージョンでは許容されます。", "number of the vulnerabilities were matched by": "{count} of the vulnerabilities were matched by {matchedBy}", "number_of_attachments_not_match_condition": "There has to be exactly one source attachment, but there are {count} at this release. Please come back once you corrected that.", "other documents might use the licenses": "注意:その他の文書はライセンスを使用する場合があります。", "owner_account_unit": "所有者の会計単位を入力してください", "project_cannot_be_created": "プロジェクトを作成/更新できない", + "release_relation_code_snippest_tooltip": "リファレンスリリースからはフラグメントが使用されます", + "release_relation_contained_tooltip": "動的にリンクされているかどうかだけがわからない場合", + "release_relation_dynamic_linked_tooltip": "ソフトウェアは動的にリンクされます - 名前のとおり", + "release_relation_interal_use_tooltip": "作成または構築するために使用されますか?\n製品またはプロジェクトが納品されていない", + "release_relation_optional_tooltip": "インストールの必須部分ではありません", + "release_relation_referred_tooltip": "スタンドアロンで使用される他のパーツを参照する", + "release_relation_side_by_side_tooltip": "今のところ決まっていない", + "release_relation_standalone_tooltip": "ソフトウェアはスタンドアロンの配信として提供されます。\n技術的に接続されていない", + "release_relation_static_linked_tooltip": "ソフトウェアは静的にリンクされます - 名前が示すとおり", + "release_relation_to_be_replaced_tooltip": "存在するが移動する必要がある", + "release_relation_unknown_tooltip": "ただ知らないだけなら", "to edit the project relation": "プロジェクト関係を編集するには", "updated successfully": "更新成功!", "vector": "ベクター", diff --git a/messages/ko.json b/messages/ko.json index 4c018235..eb08b462 100644 --- a/messages/ko.json +++ b/messages/ko.json @@ -44,6 +44,7 @@ "Agreed Clearing Date": "합의된 청산일", "Alienbrain": "외국인brain", "All": "모든 것", + "All the levels are expanded": "모든 레벨이 확장되었습니다.", "Analyst": "항문핥기", "Applicable": "해당되는", "Application Software": "Application 소프트웨어", @@ -83,7 +84,7 @@ "Business Area Line": "사업영역/라인", "CHECKED": "구매하기", "CLEARING": "청산", - "CLI attachment not found in the release!": "릴리스에서 찾을 수없는 클립!", + "CLI attachment not found in the release": "릴리스에서 찾을 수없는 클립", "CODE_SNIPPET": "코드 Snippet", "COMPLETE": "계정 관리", "COMPONENTS WITH THE SAME IDENTIFIER": "동일한 식별자 [이름]을 가진 구성 요소", @@ -166,7 +167,7 @@ "Cloud Service": "클라우드 서비스", "Code Snippet": "코드 Snippet", "Code snippet": "코드 조각", - "Collapse all": "", + "Collapse all": "모든 축소", "Comment": "이름 *", "Comment on Moderation Decision": "중재 결정에 대한 의견", "Comment on Moderation Request": "중재 요청에 대한 의견", @@ -183,6 +184,7 @@ "Component Obligation": "구성요소 의무", "Component Owner": "Component 소유자", "Component Type": "Component 유형", + "Component Type Filter": "구성요소 유형 필터", "Component is Duplicate": "성분은 Duplicate입니다", "Component is created": "구성 요소는", "Component license information (Combined)": "구성요소 라이선스 정보(Combined)", @@ -390,7 +392,7 @@ "Everyone": "한국어", "Exact Match": "Exact 일치", "Exact_Match_Info": "", - "Expand Next Level": "", + "Expand Next Level": "다음 레벨 확장", "Expert": "주요 특징", "Expiration Date": "만료 날짜", "Export SBOM": "SBOM 수출", @@ -405,6 +407,7 @@ "External ids": "외부 ids", "External link for more information": "", "FSF Free/Libre?": "", + "Failed to load source file with error": "오류로 인해 소스 파일을 로드하지 못했습니다.", "Field Name": "필드 이름", "File name": "파일 이름", "Finalized License Scan Report": "최종 라이센스 검사 보고서", @@ -516,8 +519,10 @@ "License Type": "라이센스 유형", "License Types": "라이센스 유형", "License added successfully!": "", + "License name": "라이센스 이름", "License removed successfully!": "", "License shortname is already taken!": "", + "License type": "라이센스 유형", "License updated failed!": "", "License updated successfully!": "", "Licenses": "이름 *", @@ -530,6 +535,7 @@ "Link to Projects": "프로젝트", "Linked Obligations": "", "Linked Packages": "연결된 패키지", + "Linked Projects": "연결된 프로젝트", "Linked Releases": "링크드 릴리즈", "Linked Releases and Projects": "링크드 릴리즈 및 프로젝트", "Links": "연결", @@ -548,6 +554,7 @@ "Mainline": "메인라인", "Mainline State": "메인라인 상태", "Matched By": "일치 기준", + "Main licenses": "주요 라이선스", "Matched by": "에 의해 일치", "Material Index Number": "물자 색인 수", "Me and Moderators": "나 및 Moderators", @@ -566,6 +573,7 @@ "Modified On": "관련 기사", "Monotone": "모노톤", "Multiple CLI are found in release!": "Multiple CLI가 출시되었습니다!", + "Multiple approved CLI are found in the release": "여러 개의 승인된 CLI가 릴리스에 있습니다.", "My Components": "내 부품", "My Projects": "내 프로젝트", "My Subscriptions": "내 구독", @@ -587,9 +595,11 @@ "New Release": "새로운 출시", "No": "이름 *", "No Records Found": "기록 없음", + "No applicable parser has been found for the attachment": "첨부 파일에 적용 가능한 파서를 찾을 수 없습니다.", "No attachments yet": "아직 첨부되지 않았습니다.", "No changes in attachments": "첨부파일에 변경사항이 없습니다.", "No changes in basic details": "기본 사항에는 변화가 없습니다.", + "No linked releases or projects": "연결된 릴리스 또는 프로젝트가 없습니다.", "No previous selection found If you have writing permissions to this project your selection will be stored automatically when downloading": "이전 선택 항목이 없습니다. \n이 프로젝트에 대한 쓰기 권한이 있는 경우 다운로드 시 선택 사항이 자동으로 저장됩니다.", "No recent components available": "사용 가능한 최신 구성 요소가 없습니다.", "No recent releases available": "최신 릴리스가 없습니다.", @@ -647,6 +657,7 @@ "Pending": "보류 중", "Pending Input": "보류 중인 입력", "Perforce": "관련 제품", + "Phase Out": "단계적으로 중단", "Phase-out date": "단계 아웃 날짜", "Phase-out since": "이후의 단계", "PhaseOut": "단계Out", @@ -703,6 +714,7 @@ "RELEASES WITH MORE THAN ONE SOURCE ATTACHMENT": "둘 이상의 소스 첨부 파일이 포함된 릴리스", "RELEASES WITH THE SAME IDENTIFIER": "동일한 식별자 [이름(버전)]을 사용하는 릴리스", "RELEASE_MAIN_STATE": "Open: 지금까지 수정되지 않음 Mainline: Organisation or person thinks that use of this software is recommended, which include multiple version Specific: 소프트웨어는 일반적으로 권장되지 않지만 특수 사용 케이스 또는이 특정 버전은 Phaseout에서 허용됩니다. 소프트웨어에는 문제가 있습니다, 그것을 빨리 제거하는 것을 고려하십시오, 사용 Denied에서: 사용 할 수없는 소프트웨어. 예를 들어, 라이선스가 없는 소프트웨어", + "REPORT_APPROVED": "보고서 승인됨", "REPORT_AVAILABLE": "자주 묻는 질문", "REPOSITORY_TYPE": "저장소 유형", "REST API Token": "REST API 토큰", @@ -722,12 +734,15 @@ "Release": "제품정보", "Release Aggregate Data": "Aggregate Data에 대한 정보", "Release Clearing State": "릴리즈 클리어 상태", + "Release Clearing State Filter": "릴리스 지우기 상태 필터", "Release Create failed": "생성 실패", "Release Date of this Release": "출시 날짜", "Release Mainline State": "메인 라인 상태", "Release Name": "릴리스 이름", "Release Overview": "공지사항", "Release Path": "릴리스 경로", + "Release Relation": "", + "Release Relation Filter": "릴리즈 관계 필터", "Release Repository": "출시 Repository", "Release Summary": "공지사항", "Release Vendor": "출시 Vendor", @@ -856,6 +871,7 @@ "Source Code Tool-Made": "소스 코드 Tool-Made", "Source file": "소스 파일", "Source file (Self-made)": "소스 파일 (Self-made)", + "Source file information not found in CLI": "CLI에서 소스 파일 정보를 찾을 수 없습니다.", "Special risk Open Source Software": "특수 위험 오픈 소스 소프트웨어", "Special risks 3rd party software": "특별 위험 3rd 파티 소프트웨어", "Specific": "특정한", @@ -967,6 +983,7 @@ "Vendors": "회사 소개", "Verification": "회사연혁", "Version": "이름 *", + "View file list": "파일 목록 보기", "Visibility": "제품정보", "Visual SourceSafe": "비주얼 소스Safe", "Vulnerabilities": "취약점", @@ -987,6 +1004,7 @@ "Vulnerability with the same External Id already exists": "동일한 외부 Id를 가진 취약점은 이미 존재합니다", "Vulnerable Configuration": "취약한 윤곽", "Vulnerable configurations": "Vulnerable 윤곽", + "Warning": "경고", "Weighting": "무게를 달기", "Welcome to SW360!": "SW360에 오신 것을 환영합니다!", "Wiki": "다운로드", @@ -1028,11 +1046,27 @@ "key": "주요 특징", "learn_more_components": "구성요소 유형에 대해 자세히 알아보세요.", "n a modified list": "해당 없음 (수정된 목록)", + "mainline_state_denied_tooltip": "사용이 허용되지 않는 소프트웨어입니다. \n예를 들어 라이센스가 없는 소프트웨어", + "mainline_state_mainline_tooltip": "조직이나 개인은 여러 버전이 포함된 이 소프트웨어의 사용을 권장한다고 생각합니다.", + "mainline_state_open_tooltip": "현재까지 결정되지 않음", + "mainline_state_phaseout_tooltip": "소프트웨어에 문제가 있습니다. 사용 중인 경우 즉시 제거하는 것이 좋습니다.", + "mainline_state_specific_tooltip": "이 소프트웨어는 일반적으로 권장되지 않지만 특별한 사용 사례나 이 특정 버전의 경우 허용됩니다.", "number of the vulnerabilities were matched by": "이름 * 취약점의 일치 이름 *", "number_of_attachments_not_match_condition": "정확히 하나의 소스 첨부 파일이 있지만,이 릴리스에서 {count}이 있습니다. 한 번에 다시 오십시오.", "other documents might use the licenses": "참고 : 다른 문서는 라이센스를 사용할 수 있습니다.", "owner_account_unit": "소유자의 회계 단위를 입력하십시오", "project_cannot_be_created": "프로젝트는 만들 수 없습니다/업데이트", + "release_relation_code_snippest_tooltip": "참조 릴리스에서 조각이 사용됩니다.", + "release_relation_contained_tooltip": "단지 동적으로 연결되어 있는지 알 수 없는 경우", + "release_relation_dynamic_linked_tooltip": "동적으로 연결된 소프트웨어 - 이름에서 알 수 있듯이", + "release_relation_interal_use_tooltip": "생성하거나 구축하는 데 사용됩니다. \n제품 또는 프로젝트는 제공되지 않았지만", + "release_relation_optional_tooltip": "설치의 필수 부분은 아닙니다", + "release_relation_referred_tooltip": "독립형으로 사용된 다른 부품 참조", + "release_relation_side_by_side_tooltip": "현재까지 결정되지 않음", + "release_relation_standalone_tooltip": "소프트웨어는 독립형으로 제공됩니다. \n기술적으로 연결되지 않음", + "release_relation_static_linked_tooltip": "정적으로 연결된 소프트웨어 - 이름에서 알 수 있듯이", + "release_relation_to_be_replaced_tooltip": "있긴 하지만 밖으로 옮겨야 합니다", + "release_relation_unknown_tooltip": "그냥 모른다면", "to edit the project relation": "프로젝트 관계 편집", "updated successfully": "성공적으로 업데이트되었습니다!", "vector": "벡터 벡터", diff --git a/messages/pt-BR.json b/messages/pt-BR.json index 33c29e0e..31095cc6 100644 --- a/messages/pt-BR.json +++ b/messages/pt-BR.json @@ -44,6 +44,7 @@ "Agreed Clearing Date": "Data de compensação acordada", "Alienbrain": "NOT TRANSLATED", "All": "Todas", + "All the levels are expanded": "Todos os níveis são expandidos", "Analyst": "Analista", "Applicable": "Aplicável", "Application Software": "Aplicação do Software", @@ -83,7 +84,7 @@ "Business Area Line": "Área/Linha de Negócios", "CHECKED": "VERIFICADO", "CLEARING": "LIMPEZA", - "CLI attachment not found in the release!": "Anexo CLI não encontrado no release!", + "CLI attachment not found in the release": "Anexo CLI não encontrado no release", "CODE_SNIPPET": "Trecho do Código", "COMPLETE": "COMPLETADO", "COMPONENTS WITH THE SAME IDENTIFIER": "COMPONENTES COM O MESMO IDENTIFICADOR [NOME]", @@ -166,7 +167,7 @@ "Cloud Service": "Serviço na Nuvem", "Code Snippet": "Trecho do Código", "Code snippet": "Fragmento de código", - "Collapse all": "", + "Collapse all": "Recolher todos", "Comment": "Comentário", "Comment on Moderation Decision": "Comentário sobre a decisão de moderação", "Comment on Moderation Request": "Comentário sobre solicitação de moderação", @@ -183,6 +184,7 @@ "Component Obligation": "Obrigação de Componente", "Component Owner": "Proprietário do Componente", "Component Type": "Tipo de Componente", + "Component Type Filter": "Filtro de tipo de componente", "Component is Duplicate": "O componente está duplicado", "Component is created": "O componente foi criado", "Component license information (Combined)": "Informações de licença de componente (Combinado)", @@ -390,7 +392,7 @@ "Everyone": "Todos", "Exact Match": "Correspondência exata", "Exact_Match_Info": "", - "Expand Next Level": "", + "Expand Next Level": "Expanda o próximo nível", "Expert": "Especialista", "Expiration Date": "Data de validade", "Export SBOM": "Exportar SBOM", @@ -405,6 +407,7 @@ "External ids": "IDs externos", "External link for more information": "", "FSF Free/Libre?": "", + "Failed to load source file with error": "Falha ao carregar o arquivo de origem com erro", "Field Name": "Nome do Campo", "File name": "Nome do arquivo", "Finalized License Scan Report": "Relatório Finalizado de Digitalização de Licença", @@ -516,8 +519,10 @@ "License Type": "Tipo de Licença", "License Types": "License Types", "License added successfully!": "", + "License name": "Nome da licença", "License removed successfully!": "", "License shortname is already taken!": "", + "License type": "Tipo de licença", "License updated failed!": "", "License updated successfully!": "", "Licenses": "Licenças", @@ -530,6 +535,7 @@ "Link to Projects": "Link para projetos", "Linked Obligations": "", "Linked Packages": "Pacotes Vinculados", + "Linked Projects": "Projetos vinculados", "Linked Releases": "Releases vinculados", "Linked Releases and Projects": "Releases e Projetos Vinculados", "Links": "Ligações", @@ -548,6 +554,7 @@ "Mainline": "Linha principal", "Mainline State": "Estado da linha principal", "Matched By": "Correspondido por", + "Main licenses": "Licenças principais", "Matched by": "Correspondido por", "Material Index Number": "Número do índice de Material", "Me and Moderators": "Eu e os moderadores", @@ -566,6 +573,7 @@ "Modified On": "Modificado em", "Monotone": "Apenas uma tonalidade", "Multiple CLI are found in release!": "Múltiplas CLIs são encontradas no release!", + "Multiple approved CLI are found in the release": "Várias CLI aprovadas são encontradas na versão", "My Components": "Meus componentes", "My Projects": "Meus projetos", "My Subscriptions": "Minhas assinaturas", @@ -587,9 +595,11 @@ "New Release": "Novo release", "No": "Não", "No Records Found": "Nenhum Registo Encontrado", + "No applicable parser has been found for the attachment": "Nenhum analisador aplicável foi encontrado para o anexo", "No attachments yet": "Ainda não há anexos.", "No changes in attachments": "Sem alterações nos anexos", "No changes in basic details": "Sem alterações nos detalhes básicos", + "No linked releases or projects": "Não há lançamentos ou projetos vinculados", "No previous selection found If you have writing permissions to this project your selection will be stored automatically when downloading": "Nenhuma seleção anterior encontrada. \nSe você tiver permissão de gravação para este projeto, sua seleção será armazenada automaticamente durante o download.", "No recent components available": "Nenhum componente recente disponível", "No recent releases available": "Nenhum lançamento recente disponível", @@ -647,6 +657,7 @@ "Pending": "Pendente", "Pending Input": "Entrada pendente", "Perforce": "Perforce", + "Phase Out": "Acabar", "Phase-out date": "Data de eliminação progressiva", "Phase-out since": "Eliminação progressiva desde", "PhaseOut": "Eliminação progressiva", @@ -703,6 +714,7 @@ "RELEASES WITH MORE THAN ONE SOURCE ATTACHMENT": "LANÇAMENTOS COM MAIS DE UM ANEXO DE FONTE", "RELEASES WITH THE SAME IDENTIFIER": "LANÇAMENTOS COM O MESMO IDENTIFICADOR [NOME(VERSÃO)]", "RELEASE_MAIN_STATE": "Aberto: Não decidido até agora Mainline: Organização ou pessoa acha que o uso deste software é recomendado, que incluiu várias versões Específico: O software não é recomendado em geral, mas para casos de uso especiais ou para esta versão específica é aceitável In Phaseout: O software tem problemas, considere removê-lo em breve, se em uso Negado: Software que não é permitido para uso. Por exemplo, softwares que não possuem licenciamento", + "REPORT_APPROVED": "Relatório aprovado", "REPORT_AVAILABLE": "Relatório disponível", "REPOSITORY_TYPE": "Tipo de repositório", "REST API Token": "Token da API REST", @@ -722,12 +734,15 @@ "Release": "Liberação", "Release Aggregate Data": "Liberar Dados Agregados", "Release Clearing State": "Liberar estado de compensação", + "Release Clearing State Filter": "Liberar filtro de estado de limpeza", "Release Create failed": "Falha ao liberar criação", "Release Date of this Release": "Data de release desta versão", "Release Mainline State": "Liberar estado da linha principal", "Release Name": "Nome da versão", "Release Overview": "Visão geral da versão", "Release Path": "Caminho de lançamento", + "Release Relation": "", + "Release Relation Filter": "Filtro de relação de liberação", "Release Repository": "Repositório de Liberação", "Release Summary": "Resumo de release", "Release Vendor": "Liberar para o fornecedor", @@ -856,6 +871,7 @@ "Source Code Tool-Made": "Ferramenta de código-fonte - Feita", "Source file": "Arquivo fonte", "Source file (Self-made)": "Arquivo fonte (Self-made)", + "Source file information not found in CLI": "Informações do arquivo de origem não encontradas na CLI", "Special risk Open Source Software": "Software de código aberto de risco especial", "Special risks 3rd party software": "Riscos especiais software DE terceiros", "Specific": "Específico", @@ -967,6 +983,7 @@ "Vendors": "Fornecedores", "Verification": "Verificação", "Version": "Versão", + "View file list": "Ver lista de arquivos", "Visibility": "Visibilidade", "Visual SourceSafe": "Visual SourceSafe", "Vulnerabilities": "Vulnerabilidades", @@ -987,6 +1004,7 @@ "Vulnerability with the same External Id already exists": "Vulnerabilidade com o mesmo ID externo já existe", "Vulnerable Configuration": "Configuração vulnerável", "Vulnerable configurations": "Configurações vulneráveis", + "Warning": "Aviso", "Weighting": "Ponderação", "Welcome to SW360!": "Bem-vindo ao SW360!", "Wiki": "Wiki", @@ -1028,11 +1046,27 @@ "key": "chave", "learn_more_components": "Saiba mais sobre os tipos de componentes.", "n a modified list": "n / D. (lista modificada)", + "mainline_state_denied_tooltip": "Software cujo uso não é permitido. \nPor exemplo, software que não possui licenciamento", + "mainline_state_mainline_tooltip": "Organização ou pessoa pensa que é recomendado o uso deste software, que inclui múltiplas versões", + "mainline_state_open_tooltip": "Não decidido até agora", + "mainline_state_phaseout_tooltip": "O software tem problemas, considere removê-lo logo, se estiver em uso", + "mainline_state_specific_tooltip": "O software não é recomendado em geral, mas para casos de uso especiais ou para esta versão específica é aceitável", "number of the vulnerabilities were matched by": "{count} das vulnerabilidades foram correspondidas por {matchedBy}", "number_of_attachments_not_match_condition": "Tem que haver exatamente um anexo de origem, mas há {count} nesta versão. Por favor, volte depois de corrigir isso.", "other documents might use the licenses": "Nota: outros documentos podem utilizar as licenças.", "owner_account_unit": "Insira a unidade contábil do proprietário", "project_cannot_be_created": "O projeto não pode ser criado/atualizado", + "release_relation_code_snippest_tooltip": "Da liberação de referências, um fragmento é usado", + "release_relation_contained_tooltip": "Se você simplesmente não sabe se ele está vinculado dinamicamente", + "release_relation_dynamic_linked_tooltip": "Software vinculado dinamicamente - como o nome diz", + "release_relation_interal_use_tooltip": "Usado para criar ou construir ou? \no produto ou projetos, mas não entregue", + "release_relation_optional_tooltip": "Não é parte obrigatória da instalação", + "release_relation_referred_tooltip": "Referenciando uma outra peça usada isoladamente", + "release_relation_side_by_side_tooltip": "Não decidido até agora", + "release_relation_standalone_tooltip": "O software é fornecido como entrega autônoma, ou seja. \nnão está tecnicamente conectado", + "release_relation_static_linked_tooltip": "Software vinculado estaticamente - como o nome diz", + "release_relation_to_be_replaced_tooltip": "Existe, mas deve ser removido", + "release_relation_unknown_tooltip": "Se você simplesmente não sabe", "to edit the project relation": "para editar a relação do projeto", "updated successfully": "Atualizado com sucesso!", "vector": "vector", diff --git a/messages/vi.json b/messages/vi.json index 4802370b..73041344 100644 --- a/messages/vi.json +++ b/messages/vi.json @@ -44,6 +44,7 @@ "Agreed Clearing Date": "Ngày thanh toán đã đồng ý", "Alienbrain": "Não người ngoài hành tinh", "All": "Tất cả", + "All the levels are expanded": "Tất cả các cấp độ được mở rộng", "Analyst": "Nhà phân tích", "Applicable": "Áp dụng", "Application Software": "Phần mềm ứng dụng", @@ -83,7 +84,7 @@ "Business Area Line": "Khu vực/Lĩnh vực kinh doanh", "CHECKED": "ĐÃ KIỂM TRA", "CLEARING": "XÓA", - "CLI attachment not found in the release!": "Không tìm thấy tệp đính kèm CLI trong bản phát hành!", + "CLI attachment not found in the release": "Không tìm thấy tệp đính kèm CLI trong bản phát hành", "CODE_SNIPPET": "Đoạn mã", "COMPLETE": "HOÀN THÀNH", "COMPONENTS WITH THE SAME IDENTIFIER": "CÁC THÀNH PHẦN CÓ CÙNG NHẬN DẠNG [TÊN]", @@ -166,7 +167,7 @@ "Cloud Service": "Dịch vụ điện toán đám mây", "Code Snippet": "Đoạn mã", "Code snippet": "Đoạn mã", - "Collapse all": "", + "Collapse all": "Thu gọn tất cả", "Comment": "Bình luận", "Comment on Moderation Decision": "Bình luận về Quyết định kiểm duyệt", "Comment on Moderation Request": "Nhận xét về Yêu cầu kiểm duyệt", @@ -183,6 +184,7 @@ "Component Obligation": "Nghĩa vụ thành phần", "Component Owner": "Chủ sở hữu thành phần", "Component Type": "Loại thành phần", + "Component Type Filter": "Bộ lọc loại thành phần", "Component is Duplicate": "Thành phần bị trùng lặp", "Component is created": "Thành phần được tạo", "Component license information (Combined)": "Thông tin giấy phép thành phần (Kết hợp)", @@ -390,7 +392,7 @@ "Everyone": "Mọi người", "Exact Match": "Kết hợp chuẩn xác", "Exact_Match_Info": "", - "Expand Next Level": "", + "Expand Next Level": "Mở rộng cấp độ tiếp theo", "Expert": "Chuyên gia", "Expiration Date": "Ngày hết hạn", "Export SBOM": "Xuất SBOM", @@ -405,6 +407,7 @@ "External ids": "Id bên ngoài", "External link for more information": "", "FSF Free/Libre?": "", + "Failed to load source file with error": "Không thể tải tập tin nguồn có lỗi", "Field Name": "Tên trường", "File name": "Tên tập tin", "Finalized License Scan Report": "Báo cáo quét giấy phép cuối cùng", @@ -516,8 +519,10 @@ "License Type": "Loại giấy phép", "License Types": "Các loại giấy phép", "License added successfully!": "", + "License name": "Tên giấy phép", "License removed successfully!": "", "License shortname is already taken!": "", + "License type": "Loại giấy phép", "License updated failed!": "", "License updated successfully!": "", "Licenses": "Giấy phép", @@ -530,6 +535,7 @@ "Link to Projects": "Liên kết tới các dự án", "Linked Obligations": "", "Linked Packages": "Gói được liên kết", + "Linked Projects": "Dự án được liên kết", "Linked Releases": "Các bản phát hành được liên kết", "Linked Releases and Projects": "Các bản phát hành và dự án được liên kết", "Links": "Liên kết", @@ -548,6 +554,7 @@ "Mainline": "Đường chính", "Mainline State": "Trạng thái tuyến chính", "Matched By": "Phù hợp bởi", + "Main licenses": "Giấy phép chính", "Matched by": "Phù hợp bởi", "Material Index Number": "Số chỉ mục vật liệu", "Me and Moderators": "Tôi và người điều hành", @@ -566,6 +573,7 @@ "Modified On": "Đã sửa đổi Bật", "Monotone": "Giọng bằng bằng", "Multiple CLI are found in release!": "Nhiều CLI được tìm thấy trong bản phát hành!", + "Multiple approved CLI are found in the release": "Nhiều CLI đã được phê duyệt được tìm thấy trong bản phát hành", "My Components": "Thành phần của tôi", "My Projects": "Những dự án của tôi", "My Subscriptions": "Đăng ký của tôi", @@ -587,9 +595,11 @@ "New Release": "Phiên bản mới", "No": "KHÔNG", "No Records Found": "Không có dữ liệu được tìm thấy", + "No applicable parser has been found for the attachment": "Không tìm thấy trình phân tích cú pháp thích hợp nào cho tệp đính kèm", "No attachments yet": "Chưa có tệp đính kèm nào.", "No changes in attachments": "Không có thay đổi trong tệp đính kèm", "No changes in basic details": "Không có thay đổi về chi tiết cơ bản", + "No linked releases or projects": "Không có bản phát hành hoặc dự án được liên kết", "No previous selection found If you have writing permissions to this project your selection will be stored automatically when downloading": "Không tìm thấy lựa chọn trước đó. \nNếu bạn có quyền ghi vào dự án này, lựa chọn của bạn sẽ được lưu trữ tự động khi tải xuống.", "No recent components available": "Không có thành phần nào gần đây", "No recent releases available": "Không có bản phát hành gần đây", @@ -647,6 +657,7 @@ "Pending": "Chưa giải quyết", "Pending Input": "Đầu vào đang chờ xử lý", "Perforce": "cưỡng bức", + "Phase Out": "Loại bỏ dần", "Phase-out date": "Ngày hết hạn", "Phase-out since": "Loại bỏ dần kể từ", "PhaseOut": "giai đoạn ra", @@ -703,6 +714,7 @@ "RELEASES WITH MORE THAN ONE SOURCE ATTACHMENT": "PHÁT HÀNH VỚI NHIỀU ĐÍNH KÈM NGUỒN", "RELEASES WITH THE SAME IDENTIFIER": "PHÁT HÀNH VỚI CÙNG NHẬN DẠNG [TÊN(PHIÊN BẢN)]", "RELEASE_MAIN_STATE": "Mở: Cho đến nay chưa được quyết định Tuyến chính: Tổ chức hoặc cá nhân cho rằng nên sử dụng phần mềm này, bao gồm nhiều phiên bản Cụ thể: Phần mềm nói chung không được khuyến nghị, nhưng đối với trường hợp sử dụng đặc biệt hoặc đối với phiên bản cụ thể này thì có thể chấp nhận Trong Giai đoạn loại bỏ: \nPhần mềm có vấn đề, đề nghị sớm gỡ bỏ nếu đang sử dụng Denied: Phần mềm không được phép sử dụng. \nVí dụ: phần mềm không có giấy phép", + "REPORT_APPROVED": "Báo cáo được phê duyệt", "REPORT_AVAILABLE": "Báo cáo có sẵn", "REPOSITORY_TYPE": "Loại kho lưu trữ", "REST API Token": "Mã thông báo API REST", @@ -722,12 +734,15 @@ "Release": "Giải phóng", "Release Aggregate Data": "Phát hành dữ liệu tổng hợp", "Release Clearing State": "Phát hành trạng thái thanh toán bù trừ", + "Release Clearing State Filter": "Phát hành bộ lọc trạng thái xóa", "Release Create failed": "Phát hành Tạo không thành công", "Release Date of this Release": "Ngày phát hành của bản phát hành này", "Release Mainline State": "Phát hành trạng thái tuyến chính", "Release Name": "Tên phát hành", "Release Overview": "Tổng quan về bản phát hành", "Release Path": "Đường dẫn phát hành", + "Release Relation": "", + "Release Relation Filter": "Bộ lọc quan hệ phát hành", "Release Repository": "Kho lưu trữ phát hành", "Release Summary": "Tóm tắt phát hành", "Release Vendor": "Nhà cung cấp phát hành", @@ -856,6 +871,7 @@ "Source Code Tool-Made": "Mã nguồn được tạo bởi công cụ", "Source file": "Tệp nguồn", "Source file (Self-made)": "Tệp nguồn (Tự tạo)", + "Source file information not found in CLI": "Không tìm thấy thông tin tệp nguồn trong CLI", "Special risk Open Source Software": "Rủi ro đặc biệt Phần mềm mã nguồn mở", "Special risks 3rd party software": "Rủi ro đặc biệt Phần mềm của bên thứ 3", "Specific": "Cụ thể", @@ -967,6 +983,7 @@ "Vendors": "Nhà cung cấp", "Verification": "xác minh", "Version": "Phiên bản", + "View file list": "Xem danh sách tệp", "Visibility": "Hiển thị", "Visual SourceSafe": "Nguồn trực quanAn toàn", "Vulnerabilities": "Lỗ hổng", @@ -987,6 +1004,7 @@ "Vulnerability with the same External Id already exists": "Lỗ hổng có cùng Id bên ngoài đã tồn tại", "Vulnerable Configuration": "Cấu hình dễ bị tổn thương", "Vulnerable configurations": "Cấu hình dễ bị tổn thương", + "Warning": "Cảnh báo", "Weighting": "Trọng số", "Welcome to SW360!": "Chào mừng đến với SW360!", "Wiki": "Wiki", @@ -1028,11 +1046,27 @@ "key": "chìa khóa", "learn_more_components": "Tìm hiểu thêm về các loại thành phần.", "n a modified list": "không (danh sách đã sửa đổi)", + "mainline_state_denied_tooltip": "Phần mềm không được phép sử dụng. \nVí dụ: phần mềm không có giấy phép", + "mainline_state_mainline_tooltip": "Tổ chức hoặc cá nhân cho rằng nên sử dụng phần mềm này, bao gồm nhiều phiên bản", + "mainline_state_open_tooltip": "Chưa quyết định cho đến nay", + "mainline_state_phaseout_tooltip": "Phần mềm có vấn đề mong bạn cân nhắc gỡ bỏ sớm nếu đang sử dụng", + "mainline_state_specific_tooltip": "Phần mềm nói chung không được khuyến nghị, nhưng đối với trường hợp sử dụng đặc biệt hoặc đối với phiên bản cụ thể này thì có thể chấp nhận được", "number of the vulnerabilities were matched by": "{count} số các lỗ hổng đã được so khớp bởi {matchedBy}", "number_of_attachments_not_match_condition": "Phải có chính xác một tệp đính kèm nguồn nhưng có {count} ở bản phát hành này. \nVui lòng quay lại sau khi bạn sửa lỗi đó.", "other documents might use the licenses": "Lưu ý: các tài liệu khác có thể sử dụng giấy phép.", "owner_account_unit": "Nhập đơn vị kế toán chủ sở hữu", "project_cannot_be_created": "Dự án không thể được tạo/cập nhật", + "release_relation_code_snippest_tooltip": "Từ bản phát hành tài liệu tham khảo, một đoạn được sử dụng", + "release_relation_contained_tooltip": "Nếu bạn không biết liệu nó có được liên kết động hay không", + "release_relation_dynamic_linked_tooltip": "Phần mềm được liên kết động - đúng như tên gọi", + "release_relation_interal_use_tooltip": "Được sử dụng để tạo hoặc xây dựng hoặc ? \nsản phẩm hoặc dự án nhưng chưa được giao", + "release_relation_optional_tooltip": "Không phải là phần bắt buộc của quá trình cài đặt", + "release_relation_referred_tooltip": "Tham khảo một phần độc lập được sử dụng phần khác", + "release_relation_side_by_side_tooltip": "Chưa quyết định cho đến nay", + "release_relation_standalone_tooltip": "Phần mềm được cung cấp dưới dạng phân phối độc lập, tức là. \nkhông được kết nối về mặt kỹ thuật", + "release_relation_static_linked_tooltip": "Phần mềm được liên kết tĩnh - đúng như tên gọi", + "release_relation_to_be_replaced_tooltip": "Có nhưng nên chuyển đi", + "release_relation_unknown_tooltip": "Nếu bạn không biết", "to edit the project relation": "để chỉnh sửa mối quan hệ dự án", "updated successfully": "cập nhật thành công!", "vector": "vectơ", diff --git a/messages/zh-CN.json b/messages/zh-CN.json index 4ae36b30..b49ab25d 100644 --- a/messages/zh-CN.json +++ b/messages/zh-CN.json @@ -44,6 +44,7 @@ "Agreed Clearing Date": "约定清算日期", "Alienbrain": "外星人大脑", "All": "全部", + "All the levels are expanded": "所有级别均已扩展", "Analyst": "分析师", "Applicable": "适用的", "Application Software": "应用程序软件", @@ -83,7 +84,7 @@ "Business Area Line": "营业区域/线路", "CHECKED": "已检查", "CLEARING": "清算", - "CLI attachment not found in the release!": "版本中未找到 CLI 附件!", + "CLI attachment not found in the release": "版本中未找到 CLI 附件", "CODE_SNIPPET": "代码片段", "COMPLETE": "完全的", "COMPONENTS WITH THE SAME IDENTIFIER": "具有相同标识符 [名称] 的组件", @@ -166,7 +167,7 @@ "Cloud Service": "云服务", "Code Snippet": "代码片段", "Code snippet": "代码片段", - "Collapse all": "", + "Collapse all": "全部收缩", "Comment": "评论", "Comment on Moderation Decision": "对审核决定的评论", "Comment on Moderation Request": "对审核请求的评论", @@ -183,6 +184,7 @@ "Component Obligation": "组成部分义务", "Component Owner": "组件所有者", "Component Type": "元件类型", + "Component Type Filter": "组件类型过滤器", "Component is Duplicate": "组件重复", "Component is created": "组件已创建", "Component license information (Combined)": "组件许可证信息(组合)", @@ -390,7 +392,7 @@ "Everyone": "每个人", "Exact Match": "完全符合", "Exact_Match_Info": "", - "Expand Next Level": "", + "Expand Next Level": "展开下一个级别", "Expert": "专家", "Expiration Date": "截止日期", "Export SBOM": "导出SBOM", @@ -405,6 +407,7 @@ "External ids": "外部 ID", "External link for more information": "", "FSF Free/Libre?": "", + "Failed to load source file with error": "无法加载源文件并出现错误", "Field Name": "字段名称", "File name": "文件名", "Finalized License Scan Report": "最终的许可证扫描报告", @@ -516,8 +519,10 @@ "License Type": "许可证类型", "License Types": "License Types", "License added successfully!": "", + "License name": "许可证名称", "License removed successfully!": "", "License shortname is already taken!": "", + "License type": "许可证类型", "License updated failed!": "", "License updated successfully!": "", "Licenses": "许可证", @@ -530,6 +535,7 @@ "Link to Projects": "项目链接", "Linked Obligations": "", "Linked Packages": "链接包", + "Linked Projects": "关联项目", "Linked Releases": "链接版本", "Linked Releases and Projects": "链接的版本和项目", "Links": "链接", @@ -548,6 +554,7 @@ "Mainline": "主线", "Mainline State": "主线状态", "Matched By": "匹配者", + "Main licenses": "主要许可证", "Matched by": "匹配者", "Material Index Number": "材料索引号", "Me and Moderators": "我和版主", @@ -566,6 +573,7 @@ "Modified On": "修改于", "Monotone": "单调", "Multiple CLI are found in release!": "发布中发现多个 CLI!", + "Multiple approved CLI are found in the release": "版本中发现多个经过批准的 CLI", "My Components": "我的组件", "My Projects": "我的项目", "My Subscriptions": "我的订阅", @@ -587,9 +595,11 @@ "New Release": "新发布", "No": "不", "No Records Found": "没有找到记录", + "No applicable parser has been found for the attachment": "未找到适用于附件的解析器", "No attachments yet": "还没有附件。", "No changes in attachments": "附件没有变化", "No changes in basic details": "基本细节没有变化", + "No linked releases or projects": "没有链接的版本或项目", "No previous selection found If you have writing permissions to this project your selection will be stored automatically when downloading": "找不到以前的选择。\n如果您对此项目具有写入权限,则下载时将自动存储您的选择。", "No recent components available": "没有可用的最新组件", "No recent releases available": "没有可用的最新版本", @@ -647,6 +657,7 @@ "Pending": "待办的", "Pending Input": "等待输入", "Perforce": "佩福斯", + "Phase Out": "淘汰", "Phase-out date": "逐步淘汰日期", "Phase-out since": "逐步淘汰自", "PhaseOut": "淘汰", @@ -703,6 +714,7 @@ "RELEASES WITH MORE THAN ONE SOURCE ATTACHMENT": "具有多个源附件的版本", "RELEASES WITH THE SAME IDENTIFIER": "具有相同标识符的版本 [名称(版本)]", "RELEASE_MAIN_STATE": "开放:尚未决定 主线:组织或个人认为推荐使用该软件,包括多个版本 具体:一般不推荐该软件,但对于特殊用例或特定版本是可以接受的 逐步淘汰:\n该软件有问题,如果正在使用,请考虑尽快将其删除。 拒绝:不允许使用该软件。\n例如,没有许可的软件", + "REPORT_APPROVED": "报告已获批准", "REPORT_AVAILABLE": "可用报告", "REPOSITORY_TYPE": "存储库类型", "REST API Token": "REST API 令牌", @@ -722,12 +734,15 @@ "Release": "发布", "Release Aggregate Data": "发布汇总数据", "Release Clearing State": "释放清算状态", + "Release Clearing State Filter": "释放清除状态过滤器", "Release Create failed": "发布创建失败", "Release Date of this Release": "本版本的发布日期", "Release Mainline State": "发布主线状态", "Release Name": "发布名称", "Release Overview": "发布概述", "Release Path": "发布路径", + "Release Relation": "", + "Release Relation Filter": "发布关系过滤器", "Release Repository": "发布存储库", "Release Summary": "发布摘要", "Release Vendor": "发布商", @@ -856,6 +871,7 @@ "Source Code Tool-Made": "源代码工具制作", "Source file": "源文件", "Source file (Self-made)": "源文件(自制)", + "Source file information not found in CLI": "CLI 中未找到源文件信息", "Special risk Open Source Software": "特殊风险开源软件", "Special risks 3rd party software": "特殊风险 第三方软件", "Specific": "具体的", @@ -967,6 +983,7 @@ "Vendors": "供应商", "Verification": "确认", "Version": "版本", + "View file list": "查看文件列表", "Visibility": "能见度", "Visual SourceSafe": "视觉源安全", "Vulnerabilities": "漏洞", @@ -987,6 +1004,7 @@ "Vulnerability with the same External Id already exists": "具有相同外部 ID 的漏洞已存在", "Vulnerable Configuration": "易受攻击的配置", "Vulnerable configurations": "易受攻击的配置", + "Warning": "警告", "Weighting": "加权", "Welcome to SW360!": "欢迎来到SW360!", "Wiki": "维基百科", @@ -1028,11 +1046,27 @@ "key": "钥匙", "learn_more_components": "了解有关组件类型的更多信息。", "n a modified list": "不适用(修改后的列表)", + "mainline_state_denied_tooltip": "不允许使用的软件。\n例如,没有许可的软件", + "mainline_state_mainline_tooltip": "认为推荐使用本软件的组织或个人,该软件包含多个版本", + "mainline_state_open_tooltip": "暂时还没决定", + "mainline_state_phaseout_tooltip": "该软件有问题,如果正在使用,请考虑尽快删除", + "mainline_state_specific_tooltip": "一般情况下不推荐使用该软件,但对于特殊用例或此特定版本是可以接受的", "number of the vulnerabilities were matched by": "{count} 个漏洞与 {matchedBy} 匹配", "number_of_attachments_not_match_condition": "必须只有一个源附件,但此版本中有 {count} 个。\n更正后请回来。", "other documents might use the licenses": "注:其他文件可能使用许可证。", "owner_account_unit": "输入所有者的会计单位", "project_cannot_be_created": "无法创建/更新项目", + "release_relation_code_snippest_tooltip": "从参考版本来看,使用了一个片段", + "release_relation_contained_tooltip": "如果你只是不知道是否是动态链接的", + "release_relation_dynamic_linked_tooltip": "软件动态链接 - 顾名思义", + "release_relation_interal_use_tooltip": "用于创建或构建或?\n尚未交付的产品或项目", + "release_relation_optional_tooltip": "不是安装的强制部分", + "release_relation_referred_tooltip": "引用独立使用的其他部分", + "release_relation_side_by_side_tooltip": "暂时还没决定", + "release_relation_standalone_tooltip": "软件作为独立交付提供,即。\n技术上没有联系", + "release_relation_static_linked_tooltip": "静态链接的软件 - 顾名思义", + "release_relation_to_be_replaced_tooltip": "有但应该搬出去", + "release_relation_unknown_tooltip": "如果你只是不知道", "to edit the project relation": "编辑项目关系", "updated successfully": "更新成功!", "vector": "向量", diff --git a/messages/zh-TW.json b/messages/zh-TW.json index 8acf3cb4..c9d3f6f3 100644 --- a/messages/zh-TW.json +++ b/messages/zh-TW.json @@ -44,6 +44,7 @@ "Agreed Clearing Date": "約定清算日期", "Alienbrain": "异形", "All": "全部", + "All the levels are expanded": "所有級別均已擴展", "Analyst": "分析员", "Applicable": "適用的", "Application Software": "應用程式軟體", @@ -83,7 +84,7 @@ "Business Area Line": "營業區/線路", "CHECKED": "檢查", "CLEARING": "清算", - "CLI attachment not found in the release!": "解禁中找不到 CLI 附件 !", + "CLI attachment not found in the release": "解禁中找不到 CLI 附件", "CODE_SNIPPET": "代碼片段", "COMPLETE": "完整", "COMPONENTS WITH THE SAME IDENTIFIER": "具有相同識別符 [名稱] 的元件", @@ -166,7 +167,7 @@ "Cloud Service": "云端服務", "Code Snippet": "代碼片段", "Code snippet": "程式碼片段", - "Collapse all": "", + "Collapse all": "全部收縮", "Comment": "註解", "Comment on Moderation Decision": "對審核決定的評論", "Comment on Moderation Request": "對審核請求的評論", @@ -183,6 +184,7 @@ "Component Obligation": "組成部分義務", "Component Owner": "构成部分所有者", "Component Type": "元件類型", + "Component Type Filter": "組件類型過濾器", "Component is Duplicate": "元件是复制", "Component is created": "元件已建立", "Component license information (Combined)": "元件授權資訊 (合并)", @@ -390,7 +392,7 @@ "Everyone": "各位", "Exact Match": "完全匹配", "Exact_Match_Info": "", - "Expand Next Level": "", + "Expand Next Level": "展開下一個級別", "Expert": "專家", "Expiration Date": "截止日期", "Export SBOM": "匯出 SBOM", @@ -405,6 +407,7 @@ "External ids": "外部代碼", "External link for more information": "", "FSF Free/Libre?": "", + "Failed to load source file with error": "無法載入來源檔案並出現錯誤", "Field Name": "字段名稱", "File name": "文件名", "Finalized License Scan Report": "已敲定的執照掃描報告", @@ -516,8 +519,10 @@ "License Type": "授權型態", "License Types": "授權類型", "License added successfully!": "", + "License name": "許可證名稱", "License removed successfully!": "", "License shortname is already taken!": "", + "License type": "許可證類型", "License updated failed!": "", "License updated successfully!": "", "Licenses": "執照", @@ -530,6 +535,7 @@ "Link to Projects": "連結到專案", "Linked Obligations": "", "Linked Packages": "連結包", + "Linked Projects": "關聯項目", "Linked Releases": "已連結的放行", "Linked Releases and Projects": "連結的釋放與專案", "Links": "連結", @@ -548,6 +554,7 @@ "Mainline": "主線", "Mainline State": "主線狀態", "Matched By": "匹配者", + "Main licenses": "主要許可證", "Matched by": "匹配", "Material Index Number": "材料索引號", "Me and Moderators": "我和主持人", @@ -566,6 +573,7 @@ "Modified On": "修改于", "Monotone": "莫諾", "Multiple CLI are found in release!": "多個CLI在放行中找到!", + "Multiple approved CLI are found in the release": "版本中發現多個經過批准的 CLI", "My Components": "我的元件", "My Projects": "我的專案", "My Subscriptions": "我的訂閱", @@ -587,9 +595,11 @@ "New Release": "新增放行", "No": "不", "No Records Found": "找不到紀錄", + "No applicable parser has been found for the attachment": "未找到適用於附件的解析器", "No attachments yet": "還沒有附件", "No changes in attachments": "附件沒有變化", "No changes in basic details": "基本細節沒有變化", + "No linked releases or projects": "沒有連結的版本或項目", "No previous selection found If you have writing permissions to this project your selection will be stored automatically when downloading": "找不到以前的選擇。\n如果您對此項目具有寫入權限,則下載時將自動儲存您的選擇。", "No recent components available": "沒有可用的最新組件", "No recent releases available": "沒有可用的最新版本", @@ -647,6 +657,7 @@ "Pending": "待辦的", "Pending Input": "等待輸入", "Perforce": "強力", + "Phase Out": "淘汰", "Phase-out date": "淘汰日期", "Phase-out since": "自", "PhaseOut": "淘汰", @@ -703,6 +714,7 @@ "RELEASES WITH MORE THAN ONE SOURCE ATTACHMENT": "具有多個來源附件的版本", "RELEASES WITH THE SAME IDENTIFIER": "具有相同識別符的版本 [名稱(版本)]", "RELEASE_MAIN_STATE": "Open: 尚未決定主線: Organization 或 person 認為建議使用此軟體, 其中包括多個版本 Special: 此軟體不是一般的建議, 但對於特殊用途或此特定版本, 軟體有問題, 禁止使用的軟體 。 例如,沒有授權的軟體", + "REPORT_APPROVED": "報告已獲批准", "REPORT_AVAILABLE": "可用的報告", "REPOSITORY_TYPE": "主目錄類型", "REST API Token": "REST API 令牌", @@ -722,12 +734,15 @@ "Release": "釋放", "Release Aggregate Data": "釋放集合資料", "Release Clearing State": "釋放清算狀態", + "Release Clearing State Filter": "釋放清除狀態過濾器", "Release Create failed": "釋放失敗", "Release Date of this Release": "此放行日期", "Release Mainline State": "釋放主線狀態", "Release Name": "發布名稱", "Release Overview": "釋放概述", "Release Path": "發布路徑", + "Release Relation": "", + "Release Relation Filter": "發布關係過濾器", "Release Repository": "釋放仓库", "Release Summary": "发布摘要", "Release Vendor": "釋放供应商", @@ -856,6 +871,7 @@ "Source Code Tool-Made": "來源碼工具- Made", "Source file": "來源檔案", "Source file (Self-made)": "來源檔案( 自制)", + "Source file information not found in CLI": "CLI 中未找到來源文件信息", "Special risk Open Source Software": "特殊風險開源軟體", "Special risks 3rd party software": "特殊風險 第三方軟體", "Specific": "具體的", @@ -967,6 +983,7 @@ "Vendors": "供应商", "Verification": "核查", "Version": "版本", + "View file list": "查看文件列表", "Visibility": "可见度", "Visual SourceSafe": "視覺來源安全", "Vulnerabilities": "脆弱性", @@ -987,6 +1004,7 @@ "Vulnerability with the same External Id already exists": "同樣的外部元件的脆弱程度已經存在", "Vulnerable Configuration": "脆弱配置", "Vulnerable configurations": "脆弱配置", + "Warning": "警告", "Weighting": "重量", "Welcome to SW360!": "歡迎來到SW360!", "Wiki": "維基", @@ -1028,11 +1046,27 @@ "key": "按鍵", "learn_more_components": "了解更多元件類型 。", "n a modified list": "不適用(修改後的清單)", + "mainline_state_denied_tooltip": "不允許使用的軟體。\n例如,沒有許可的軟體", + "mainline_state_mainline_tooltip": "認為推薦使用本軟體的組織或個人,該軟體包含多個版本", + "mainline_state_open_tooltip": "暫時還沒決定", + "mainline_state_phaseout_tooltip": "軟體有問題,如果正在使用,請考慮盡快刪除", + "mainline_state_specific_tooltip": "一般情況下不建議使用該軟體,但對於特殊用例或此特定版本是可以接受的", "number of the vulnerabilities were matched by": "{計數} 与脆弱性相匹配 {匹配By}", "number_of_attachments_not_match_condition": "必須有一個來源附件, 但此放行時有 {count} 。 校正了再回來吧", "other documents might use the licenses": "注:其他文件可能使用许可证。", "owner_account_unit": "輸入所有者核算單位", "project_cannot_be_created": "專案無法建立/ 更新", + "release_relation_code_snippest_tooltip": "從參考版本來看,使用了一個片段", + "release_relation_contained_tooltip": "如果你只是不知道是否是動態連結的", + "release_relation_dynamic_linked_tooltip": "軟體動態連結 - 顧名思義", + "release_relation_interal_use_tooltip": "用於創建或建置或?\n尚未交付的產品或項目", + "release_relation_optional_tooltip": "不是安裝的強制部分", + "release_relation_referred_tooltip": "引用獨立使用的其他部分", + "release_relation_side_by_side_tooltip": "暫時還沒決定", + "release_relation_standalone_tooltip": "軟體作為獨立交付提供,即。\n技術上沒有聯繫", + "release_relation_static_linked_tooltip": "靜態連結的軟體 - 顧名思義", + "release_relation_to_be_replaced_tooltip": "有但應該搬出去", + "release_relation_unknown_tooltip": "如果你只是不知道", "to edit the project relation": "要編輯專案關係", "updated successfully": "更新成功!", "vector": "向量", diff --git a/src/app/[locale]/components/releases/detail/[id]/components/AssessmentSummaryInfo.tsx b/src/app/[locale]/components/releases/detail/[id]/components/AssessmentSummaryInfo.tsx index d8db96e5..d2329a31 100644 --- a/src/app/[locale]/components/releases/detail/[id]/components/AssessmentSummaryInfo.tsx +++ b/src/app/[locale]/components/releases/detail/[id]/components/AssessmentSummaryInfo.tsx @@ -106,7 +106,7 @@ const AssessmentSummaryInfo = ({ embeddedAttachments, releaseId }: Props) => { )} {cliAttachmentNumber == 0 && ( - {t('CLI attachment not found in the release!')} + {t('CLI attachment not found in the release')}! )} {cliAttachmentNumber > 1 && ( diff --git a/src/app/[locale]/projects/detail/[id]/components/ClearingStateBadge.tsx b/src/app/[locale]/projects/detail/[id]/components/ClearingStateBadge.tsx new file mode 100644 index 00000000..03be3205 --- /dev/null +++ b/src/app/[locale]/projects/detail/[id]/components/ClearingStateBadge.tsx @@ -0,0 +1,98 @@ +// Copyright (C) TOSHIBA CORPORATION, 2024. Part of the SW360 Frontend Project. +// Copyright (C) Toshiba Software Development (Vietnam) Co., Ltd., 2024. Part of the SW360 Frontend Project. + +// This program and the accompanying materials are made +// available under the terms of the Eclipse Public License 2.0 +// which is available at https://www.eclipse.org/legal/epl-2.0/ + +// SPDX-License-Identifier: EPL-2.0 +// License-Filename: LICENSE + +'use client' + +import { Tooltip, OverlayTrigger } from 'react-bootstrap' + +interface Props { + isRelease: boolean + clearingState: string + projectState?: string + t?: any +} + +const capitalize = (text: string) => { + return text + ? text.split('_').reduce((s, c) => s + ' ' + (c.charAt(0) + c.substring(1).toLocaleLowerCase()), '').trim() + : '' +} + +const ReleaseClearingStateMapping: {[k: string]: string} = { + 'NEW_CLEARING': 'NEW_CLEARING', + 'APPROVED': 'REPORT_APPROVED', + 'REPORT_AVAILABLE': 'REPORT_AVAILABLE', + 'SCAN_AVAILABLE': 'SCAN_AVAILABLE', + 'SENT_TO_CLEARING_TOOL': 'SENT_TO_CLEARING_TOOL', + 'UNDER_CLEARING': 'UNDER_CLEARING', + 'INTERNAL_USE_SCAN_AVAILABLE': 'INTERNAL_USE_SCAN_AVAILABLE', + 'NEW': 'NEW_CLEARING', + 'REPORT_APPROVED': 'REPORT_APPROVED', +} + +const ClearingStateBadge = ({ isRelease, clearingState, projectState, t }: Props) => { + + return ( +
+ { + (isRelease === true) + ? + {`${t('Release Clearing State')}: ${t(ReleaseClearingStateMapping[clearingState])}`} + } + > + {(clearingState === 'NEW_CLEARING' || clearingState === 'NEW') ? ( + {'CS'} + ) : (clearingState === 'REPORT_AVAILABLE') ? ( + {'CS'} + ) : (clearingState === 'UNDER_CLEARING') ? ( + {'CS'} + ) : (clearingState === 'INTERNAL_USE_SCAN_AVAILABLE') ? ( + {'CS'} + ) : (clearingState === 'SENT_TO_CLEARING_TOOL' || clearingState === 'SCAN_AVAILABLE') ? ( + {'CS'} + ): ( + {'CS'} + )} + + : + <> + {`${t('Project State')}: ${t(capitalize(projectState))}`} + } + > + {projectState === 'ACTIVE' ? ( + {'PS'} + ) : ( + {'PS'} + )} + + {`${t('Project Clearing State')}: ${t(capitalize(clearingState))}`} + } + > + {clearingState === 'OPEN' ? ( + {'CS'} + ) : clearingState === 'IN_PROGRESS' ? ( + {'CS'} + ) : ( + {'CS'} + )} + + + } +
+ ) +} + +export default ClearingStateBadge \ No newline at end of file diff --git a/src/app/[locale]/projects/detail/[id]/components/DependencyNetworkListView.tsx b/src/app/[locale]/projects/detail/[id]/components/DependencyNetworkListView.tsx new file mode 100644 index 00000000..3e8cb570 --- /dev/null +++ b/src/app/[locale]/projects/detail/[id]/components/DependencyNetworkListView.tsx @@ -0,0 +1,413 @@ +// Copyright (C) TOSHIBA CORPORATION, 2024. Part of the SW360 Frontend Project. +// Copyright (C) Toshiba Software Development (Vietnam) Co., Ltd., 2024. Part of the SW360 Frontend Project. + +// This program and the accompanying materials are made +// available under the terms of the Eclipse Public License 2.0 +// which is available at https://www.eclipse.org/legal/epl-2.0/ + +// SPDX-License-Identifier: EPL-2.0 +// License-Filename: LICENSE + +'use client' + +import { ApiUtils } from '@/utils' +import { getSession } from 'next-auth/react' +import { useTranslations } from 'next-intl' +import { Table, _ } from 'next-sw360' +import React, { ChangeEvent, useEffect, useState } from 'react' +import { Spinner, Tooltip, OverlayTrigger, ButtonGroup, Dropdown } from 'react-bootstrap' +import Link from 'next/link' +import { FaPencilAlt } from 'react-icons/fa' +import { GoSingleSelect } from "react-icons/go" +import DropdownButton from 'react-bootstrap/DropdownButton' +import Form from 'react-bootstrap/Form' +import styles from '../detail.module.css' +import { + releaseTypes, projectTypes, + releaseRelations, projectRelations, + releaseClearingStates, projectClearingState +} from './LicenseClearingFilters' +import ClearingStateBadge from './ClearingStateBadge' + +interface ListViewData { + isAccessible: boolean + clearingState: string + mainLicenses: string + type: string + projectMainlineState: string + relation: string + isRelease: boolean | string + releaseMainlineState: string + projectOrigin: string + name: string + releaseOrigin: string + comment: string + id: string + projectState?: string +} + +const upperCaseWithUnderscore = (text: string) => { + return text + ? text.trim().toUpperCase().replace(/ /g, '_') + : undefined +} + +const nameFormatter = (name: string) => { + if (name.length <= 40) + return <>{name} + + return ( + {name}}> + + {name.slice(0, 40)}... + + + ) +} + +const includesIgnoreCase = (array: Array, element: string) => { + console.log(array.some(item => item.toLowerCase() === element.toLowerCase())) + return array.some(item => item.toLowerCase() === element.toLowerCase()) +} + +const filterOptions: { [k: string]: Array } = { + 'types': [...Object.values(releaseTypes), ...Object.values(projectTypes)], + 'relations': [...Object.values(releaseRelations), ...Object.values(projectRelations)], + 'states': [...Object.values(releaseClearingStates), ...Object.values(projectClearingState)], +} + +const DependencyNetworkListView = ({ + projectId, +}: { + projectId: string +}) => { + const t = useTranslations('default') + const [data, setData] = useState(undefined) + const [displayedData, setDisplayedData] = useState(undefined) + const [search, setSearch] = useState({ keyword: '' }) + + const [filters, setFilters] = useState<{ [k: string]: Array }>(filterOptions) + const language = { noRecordsFound: t('No linked releases or projects') } + + const updateFilters = (event: React.ChangeEvent) => { + const filterName = event.target.name + if (event.target.checked == true) { + if (filters[filterName].length === filterOptions[filterName].length) { + setFilters({ + ...filters, + [filterName]: [event.target.value] + }) + } else { + setFilters({ + ...filters, + [filterName]: [...filters[filterName], event.target.value] + }) + } + } else { + if (filters[filterName].length === 1) { + setFilters({ + ...filters, + [filterName]: [...filterOptions[filterName]] + }) + } else { + setFilters({ + ...filters, + [filterName]: [...filters[filterName].filter(el => el != event.target.value)] + }) + } + } + } + + const columns = [ + { + id: 'licenseClearing.name', + name: t('Name'), + width: '12%', + formatter: (data: ListViewData) => _( + (data.isRelease === "true") + ? + {nameFormatter(data.name)} + : + {nameFormatter(data.name)} + ), + sort: { + compare: (data1: ListViewData, data2: ListViewData) => data1.name.localeCompare(data2.name) + } + }, + { + id: 'licenseClearing.type', + name: _( + <> + {t('Component Type Filter')}}> + {t('Type')} {' '} + + } + id='types-filter-dropdown-btn' + className={`${styles['dropdown-btn']}`} + > + {t('Component Type')} + + { + Object.values(releaseTypes).map((releaseType: string) => + + + + ) + } + + + ), + width: '7%', + sort: true, + }, + { + id: 'licenseClearing.projectPath', + name: t('Project Path'), + width: '11%', + sort: true, + }, + { + id: 'licenseClearing.releasePath', + name: t('Release Path'), + width: '14%', + sort: true, + }, + { + id: 'licenseClearing.relation', + name: _( + <> + {t('Release Relation Filter')}}> + {t('Relation')} {' '} + + } + id='relations-filter-dropdown-btn' + className={`${styles['dropdown-btn']}`} + > + {t('Release Relation')} + + { + Object.values(releaseRelations).map((relation: string) => + + + + ) + } + + + ), + width: '8%', + sort: true, + }, + { + id: 'licenseClearing.mainLicenses', + name: t('Main licenses'), + width: '10%', + formatter: (mainLicenses: string) => + _( + <> + { + mainLicenses && mainLicenses.split(',').map((license): React.ReactNode => ( +
  • + + {license} + +
  • + )) + .reduce((prev, curr): React.ReactNode[] => [prev, ', ', curr]) + } + + ), + sort: { + compare: (mainLicenses1: string, mainLicenses2: string) => mainLicenses1.localeCompare(mainLicenses2) + } + }, + { + id: 'licenseClearing.state', + name: _( + <> + {t('Release Clearing State Filter')}}> + {t('State')} {' '} + + } + id='states-filter-dropdown-btn' + className={`${styles['dropdown-btn']}`} + > + {t('Release Clearing State')} + + { + Object.values(releaseClearingStates).map((state: string) => + + + + ) + } + + + ), + width: '7%', + formatter: (data: ListViewData) => + _( +
    + +
    + ), + sort: { + compare: (data1: ListViewData, data2: ListViewData) => data1.clearingState.localeCompare(data2.clearingState) + } + }, + { + id: 'licenseClearing.releaseMainlineState', + name: t('Release Mainline State'), + width: '8%', + sort: true, + }, + { + id: 'licenseClearing.projectMainlineState', + name: t('Project Mainline State'), + width: '8%', + sort: true, + }, + { + id: 'licenseClearing.comment', + name: t('Comment'), + width: '10%', + sort: true, + }, + { + id: 'licenseClearing.actions', + name: t('Actions'), + sort: false, + width: '5%', + }, + ] + + useEffect(() => { + ;(async () => { + const session = await getSession() + try { + const listViewResponse = await ApiUtils.GET( + `projects/network/${projectId}/listView`, + session.user.access_token + ) + + const listViewData = await listViewResponse.json() as Array + const tableData = listViewData.map((data: ListViewData) => [ + data, + data.type, + data.projectOrigin, + data.releaseOrigin ? data.releaseOrigin : '', + data.relation, + data.mainLicenses ? data.mainLicenses : '', + data, + data.releaseMainlineState ? data.releaseMainlineState : '', + data.projectMainlineState ? data.projectMainlineState : '', + data.comment ? data.comment : '', + _( +
    + {t('Edit')}}> + + + + +
    + ), + ]) + setData(tableData) + filterData(tableData) + } catch (e) { + console.error(e) + } + })() + }, []) + + const filterData = (data: Array>) => { + const filteredData = data.filter((item: Array) => + includesIgnoreCase(filters.types, item[1]) + && includesIgnoreCase(filters.relations, item[4]) + && includesIgnoreCase(filters.states, item[6].clearingState) + ) + + setDisplayedData(filteredData) + } + + useEffect(() => { + if (data === undefined) return + filterData(data) + }, [filters]) + + const doSearch = (event: ChangeEvent) => { + setSearch(event.target.value === '' ? undefined : { keyword: event.target.value }) + } + + return ( + <> + {displayedData ? ( +
    +
    + + +
    + + + ) : ( +
    + +
    + )} + + ) +} + +const compare = (preState: { projectId: string }, nextState: { projectId: string }) => { + return preState.projectId === nextState.projectId +} + +export default React.memo(DependencyNetworkListView, compare) diff --git a/src/app/[locale]/projects/detail/[id]/components/DependencyNetworkTreeView.tsx b/src/app/[locale]/projects/detail/[id]/components/DependencyNetworkTreeView.tsx new file mode 100644 index 00000000..3f6e22b9 --- /dev/null +++ b/src/app/[locale]/projects/detail/[id]/components/DependencyNetworkTreeView.tsx @@ -0,0 +1,620 @@ +// Copyright (C) TOSHIBA CORPORATION, 2024. Part of the SW360 Frontend Project. +// Copyright (C) Toshiba Software Development (Vietnam) Co., Ltd., 2024. Part of the SW360 Frontend Project. + +// This program and the accompanying materials are made +// available under the terms of the Eclipse Public License 2.0 +// which is available at https://www.eclipse.org/legal/epl-2.0/ + +// SPDX-License-Identifier: EPL-2.0 +// License-Filename: LICENSE + +'use client' + +import { useTranslations } from 'next-intl' +import { _, TreeTable, EnumValueWithToolTip } from 'next-sw360' +import React, { useEffect, useState, useRef, useCallback, ChangeEvent } from 'react' +import { Tooltip, OverlayTrigger, ButtonGroup, Dropdown, DropdownButton, Spinner } from 'react-bootstrap' +import { GoSingleSelect } from 'react-icons/go' +import Form from 'react-bootstrap/Form' +import styles from '../detail.module.css' +import Link from 'next/link' +import { FaPencilAlt, FaSort } from 'react-icons/fa' +import { Attachment, Embedded, NodeData } from '@/object-types' +import ClearingStateBadge from './ClearingStateBadge' +import Alert from 'react-bootstrap/Alert' +import { + releaseTypes, projectTypes, + releaseRelations, projectRelations, + releaseClearingStates, projectClearingState +} from './LicenseClearingFilters' +import CommonUtils from '@/utils/common.utils' +import { ApiUtils } from '@/utils/index' +import { getSession } from 'next-auth/react' +import TogglerLicenseList from './TogglerLicenseList' + +interface Props { + projectId: string +} + +interface ReleaseClearingState { + id: string + index?: number + vendor?: string + name?: string + version?: string + longName?: string + releaseRelationship?: string + mainlineState?: string + hasSubreleases?: boolean + clearingState?: string + attachments?: null | Array + componentType?: string + licenseIds?: null | Array + comment?: string + otherLicenseIds?: null | Array + accessible?: boolean + projectId?: string + releaseMainLineState?: string + linkedReleases?: Array + ref?: ReleaseClearingState + isExpanded?: boolean +} + +interface ProjectClearingState { + id: string + name?: string + relation?: string + version?: string + projectType?: string + state?: string + clearingState?: string + subprojects?: Array + linkedReleases?: Array + ref?: ProjectClearingState + isExpanded?: boolean +} + +type ClearingState = ReleaseClearingState & ProjectClearingState + +type EmbeddedReleaseLinks = Embedded + +const filterOptions: { [k: string]: Array } = { + types: [...Object.keys(releaseTypes), ...Object.keys(projectTypes)], + relations: [...Object.keys(releaseRelations), ...Object.keys(projectRelations)], + states: [...Object.keys(releaseClearingStates), ...Object.keys(projectClearingState)], +} + +const nameFormatter = (name: string) => { + if (name.length <= 40) + return <>{name} + + return ( + {name}}> + + {name.slice(0, 40)}... + + + ) +} + +const DependencyNetworkTreeView = ({ projectId }: Props) => { + const t = useTranslations('default') + const [filters, setFilters] = useState<{ [k: string]: Array }>(filterOptions) + const [sortOption, setSortOption] = useState(undefined) + const language = { noRecordsFound: t('No linked releases or projects') } + const [isExpandedAllMessageShow, setIsExpandedAllMessageShow] = useState(false) + const [search, setSearch] = useState({ keyword: '' }) + const hasExpanded = useRef(false) + + const [data, setData] = useState(undefined) + + const [treeData, setTreeData] = useState([]) + + const [noOfLinkedResources, setNoOfLinkedResources] = useState({ + releases: 0, + projects: 0 + }) + + const updateFilters = (event: React.ChangeEvent) => { + const filterName = event.target.name + if (event.target.checked == true) { + if (filters[filterName].length === filterOptions[filterName].length) { + setFilters({ + ...filterOptions, + [filterName]: [event.target.value] + }) + } else { + setFilters({ + ...filterOptions, + [filterName]: [...filters[filterName], event.target.value] + }) + } + } else { + if (filters[filterName].length === 1) { + setFilters({ + ...filterOptions, + [filterName]: [...filterOptions[filterName]] + }) + } else { + setFilters({ + ...filterOptions, + [filterName]: [...filters[filterName].filter(el => el != event.target.value)] + }) + } + } + } + + const expandNextLevel = () => { + hasExpanded.current = false + Object.values(treeData).map((node: NodeData) => findNextToExpand(node)) + if (!hasExpanded.current) { + setIsExpandedAllMessageShow(true) + } + } + + const findNextToExpand = (node: NodeData) => { + if (node.isExpanded) { + Object.values(node.children).map((item) => findNextToExpand(item)) + return + } + + if (node.isExpandable) { + hasExpanded.current = true + onExpand(node) + } + } + + const onExpand = async (item: NodeData) => { + if (item.isNodeFetched) { + item.isExpanded = true + item.additionalData.node.isExpanded = true + setTreeData([...treeData]) + return + } + + const session = await getSession() + if (item.additionalData.isRelease === false) { + const response = await ApiUtils.GET(`projects/network/${item.additionalData.node.id}/linkedResources`, session.user.access_token) + const responseData = await response.json() as ProjectClearingState + item.additionalData.node.linkedReleases = responseData.linkedReleases + item.additionalData.node.subprojects = responseData.subprojects + item.additionalData.node.isExpanded = true + item.isNodeFetched = true + setData({ ...data }) + } else { + const response = await ApiUtils.GET(`projects/network/${item.additionalData.node.projectId}/releases?path=${item.additionalData.releaseIndexPath.filter((el: number) => el !== undefined).join('->')}`, session.user.access_token) + const responseData = await response.json() as EmbeddedReleaseLinks + item.additionalData.node.linkedReleases = responseData._embedded['sw360:releaseLinks'] + item.additionalData.node.isExpanded = true + item.isNodeFetched = true + setData({ ...data }) + } + return item + } + + const collapseAll = () => { + const allCollapsed = Object.values(treeData).map((node: NodeData): NodeData => { + node.isExpanded = false + node.additionalData.node.isExpanded = false + return node + }) + setTreeData(allCollapsed) + setIsExpandedAllMessageShow(false) + } + + const sortColumn = (columnName: string) => { + if (sortOption === undefined || sortOption.col !== columnName) { + setSortOption({ + col: columnName, + sortAscending: true + }) + return + } + + setSortOption({ + ...sortOption, + sortAscending: !sortOption.sortAscending + }) + } + + const compareFn = (obj1: ClearingState, obj2: ClearingState) => { + let propName = sortOption.col as keyof ClearingState + if (propName === 'releaseRelationship' && obj1[propName] === undefined) { + propName = 'relation' + } + if (propName === 'componentType' && obj1[propName] === undefined) { + propName = 'projectType' + } + + let obj1Prop, obj2Prop + + if (propName === 'name') { + obj1Prop = convertToString(obj1[propName] + obj1['version']) + obj2Prop = convertToString(obj2[propName] + obj2['version']) + } else { + obj1Prop = convertToString(obj1[propName]) + obj2Prop = convertToString(obj2[propName]) + } + + if (sortOption.sortAscending) { + return obj1Prop.localeCompare(obj2Prop) + } + return obj2Prop.localeCompare(obj1Prop) + } + + const convertToString = (item: unknown) => { + if (!item) + return '' + if (typeof item === 'string') + return item + return item.toString() + } + + const sortData = (data: ProjectClearingState): ProjectClearingState => { + if (sortOption === undefined) + return data + + const sortedLinkedReleases = [...data.linkedReleases].sort(compareFn) + const sortedSubProjects = [...data.subprojects].sort(compareFn) + return { ...data, linkedReleases: sortedLinkedReleases, subprojects: sortedSubProjects } + } + + const columns = [ + { + id: 'licenseClearing.name', + name: _( + <> + {(isExpandedAllMessageShow) && + setIsExpandedAllMessageShow(false)} + className={styles['expanded-all-message']} dismissible> + {t('All the levels are expanded')}! + + } +
    + {t('Name')} + sortColumn('name')} /> + { + (noOfLinkedResources.releases !== 0 || noOfLinkedResources.projects !== 0) && <> + {' ('} + expandNextLevel()} className='expand-next text-primary'>{t('Expand Next Level')} + {' | '} + collapseAll()} className='collapse-all text-primary'>{t('Collapse all')} + {') '} + + } +
    + { + (noOfLinkedResources.releases !== 0 || noOfLinkedResources.projects !== 0) &&
    + {t('Linked Releases')}: {noOfLinkedResources.releases}, {' '} + {t('Linked Projects')}: {noOfLinkedResources.projects} +
    + } + + ), + width: '26%' + }, + { + id: 'licenseClearing.type', + name: _( + <> + {t('Component Type Filter')}}> + {t('Type')} {' '} + + } + id='types-filter-dropdown-btn' + className={`${styles['dropdown-btn']}`} + > + {t('Component Type')} + + { + Object.keys(releaseTypes).map((releaseType: string) => + + + + ) + } + + sortColumn('componentType')} /> + + ), + width: '10%', + }, + { + id: 'licenseClearing.relation', + name: _( + <> + {t('Release Relation Filter')}}> + {t('Relation')} {' '} + + } + id='relations-filter-dropdown-btn' + className={`${styles['dropdown-btn']}`} + > + {t('Release Relation')} + + { + Object.keys(releaseRelations).map((relation: string) => + + + + ) + } + + sortColumn('releaseRelationship')} /> + + ), + width: '10%', + }, + { + id: 'licenseClearing.mainLicenses', + name: _( + <> + {t('Main licenses')} + sortColumn('licenseIds')} /> + + ), + width: '9%', + }, + { + id: 'licenseClearing.otherLicenses', + name: t('Other licenses'), + width: '8%', + }, + { + id: 'licenseClearing.state', + name: _( + <> + {t('Release Clearing State Filter')}}> + {t('State')} {' '} + + } + id='states-filter-dropdown-btn' + className={`${styles['dropdown-btn']}`} + > + {t('Release Clearing State')} + + { + Object.keys(releaseClearingStates).map((state: string) => + + + + ) + } + + + ), + width: '7%' + }, + { + id: 'licenseClearing.releaseMainlineState', + name: _( + <> + {t('Release Mainline State')} + sortColumn('releaseMainLineState')} /> + + ), + width: '6%', + }, + { + id: 'licenseClearing.projectMainlineState', + name: _( + <> + {t('Project Mainline State')} + sortColumn('mainlineState')} /> + + ), + width: '6%', + }, + { + id: 'licenseClearing.comment', + name: t('Comment'), + width: '10%', + }, + { + id: 'licenseClearing.actions', + name: t('Actions'), + width: '5%', + }, + ] + + const convertClearingStatusDataToTableNode = (item: ClearingState, isRelease: boolean, releaseIndexPath?: Array): NodeData => { + const rowData = [ + (isRelease) + ? (item.accessible) + ? + {nameFormatter(`${item.name} ${item.version}`)} + : + item.longName + : {nameFormatter(`${item.name} ${item.version}`)}, + (isRelease) ? releaseTypes[item.componentType] : projectTypes[item.projectType], + (isRelease) ? : projectRelations[item.relation], + (item.licenseIds) && , + (item.otherLicenseIds) && , + (item.accessible || !isRelease) && , + (isRelease) ? : '', + (isRelease) ? : '', + CommonUtils.nullToEmptyString(item.comment), + (item.accessible || !isRelease) &&
    + {t('Edit')}}> + + + + +
    + ] + + return { + rowData: rowData, + children: [ + ...((item.linkedReleases) ? Object.values(item.linkedReleases).map((subItem) => convertClearingStatusDataToTableNode(subItem, true, [...((releaseIndexPath) ? releaseIndexPath : []), item.index])) : []), + ...((item.subprojects) ? Object.values(item.subprojects).map((subItem) => convertClearingStatusDataToTableNode(subItem, false)) : []) + ], + isExpanded: item.isExpanded, + isExpandable: (isRelease) ? item.hasSubreleases : true, + isNodeFetched: !CommonUtils.isNullEmptyOrUndefinedArray(item.linkedReleases) || !CommonUtils.isNullEmptyOrUndefinedArray(item.subprojects) || item.isExpanded, + additionalData: { + node: item.ref ? item.ref : item, + isRelease: isRelease, + releaseIndexPath: (releaseIndexPath) ? [...releaseIndexPath, item.index] : [], + projectOrigin: item.projectId + } + } + } + + function filterData(data: ProjectClearingState) { + const filterRelease = (release: ReleaseClearingState): ReleaseClearingState => { + if (!CommonUtils.isNullEmptyOrUndefinedArray(release.linkedReleases)) { + const subNodes: Array = release.linkedReleases.map(subRelease => filterRelease(subRelease)).filter(el => el !== undefined) + if (subNodes.length) return { ...release, linkedReleases: subNodes, ref: release } + } + if ( + filters.types.includes(release.componentType) && + filters.relations.includes(release.releaseRelationship) && + filters.states.includes(release.clearingState) + ) { + return { ...release, ref: release } + } + return undefined + } + + const filterProject = (project: ProjectClearingState) => { + const filteredReleases = (project.linkedReleases) ? project.linkedReleases.map(release => filterRelease(release)).filter(el => el !== undefined) : [] + const filteredProjects: Array = project.subprojects + ? project.subprojects + .map((prj) => { + const filteredProject = filterProject(prj) + if (prj.isExpanded !== true) { + return undefined + } + if (CommonUtils.isNullEmptyOrUndefinedArray(filteredProject.linkedReleases) + && CommonUtils.isNullEmptyOrUndefinedArray(filteredProject.subprojects) + ) + return undefined + return filteredProject + }).filter(prj => prj !== undefined) + : [] + return { ...project, subprojects: filteredProjects, linkedReleases: filteredReleases, ref: project } + } + + return filterProject(data) + } + + useEffect(() => { + if (data === undefined) return + + setNoOfLinkedResources({ + releases: !CommonUtils.isNullEmptyOrUndefinedArray(data.linkedReleases) ? data.linkedReleases.length : 0, + projects: !CommonUtils.isNullEmptyOrUndefinedArray(data.subprojects) ? data.subprojects.length : 0 + }) + + const sortedData = sortData(data) + const filteredData = + ( + filters.types.length === filterOptions.types.length && + filters.relations.length === filterOptions.relations.length && + filters.states.length === filterOptions.states.length + ) ? sortedData : filterData(sortedData) + + const treeData = [ + ...(!CommonUtils.isNullEmptyOrUndefinedArray(filteredData.linkedReleases) ? Object.values(filteredData.linkedReleases).map( + (item) => convertClearingStatusDataToTableNode(item, true, []) + ) : []), + ...(!CommonUtils.isNullEmptyOrUndefinedArray(filteredData.subprojects) ? Object.values(filteredData.subprojects).map( + (item) => convertClearingStatusDataToTableNode(item, false) + ) : []) + ] + + setTreeData(treeData) + }, [data, filters, sortOption]) + + const onLoadFetch = useCallback( + async () => { + const session = await getSession() + const response = await ApiUtils.GET(`projects/network/${projectId}/linkedResources`, session.user.access_token) + const responseData = await response.json() + setData(responseData) + }, [projectId] + ) + + useEffect(() => { + onLoadFetch() + }, []) + + const doSearch = (event: ChangeEvent) => { + setSearch(event.target.value === '' ? undefined : { keyword: event.target.value }) + } + + return ( + <> +
    + +
    +
    + { + data + ? + + : +
    + +
    + } +
    + + ) +} + +const compare = (preState: { projectId: string }, nextState: { projectId: string }) => { + return preState.projectId === nextState.projectId +} + +export default React.memo(DependencyNetworkTreeView, compare) \ No newline at end of file diff --git a/src/app/[locale]/projects/detail/[id]/components/LicenseClearing.tsx b/src/app/[locale]/projects/detail/[id]/components/LicenseClearing.tsx index e76f561a..5829aa58 100644 --- a/src/app/[locale]/projects/detail/[id]/components/LicenseClearing.tsx +++ b/src/app/[locale]/projects/detail/[id]/components/LicenseClearing.tsx @@ -15,6 +15,11 @@ import { Button, Dropdown, Nav, Tab } from 'react-bootstrap' import ListView from './ListView' import TreeView from './TreeView' import { useRouter } from 'next/navigation' +import { ENABLE_FLEXIBLE_PROJECT_RELEASE_RELATIONSHIP } from '@/utils/env' +import dynamic from 'next/dynamic' + +const DependencyNetworkListView = dynamic(() => import('./DependencyNetworkListView'), { ssr: false }) +const DependencyNetworkTreeView = dynamic(() => import('./DependencyNetworkTreeView'), { ssr: false }) export default function LicenseClearing({ projectId, @@ -104,10 +109,22 @@ export default function LicenseClearing({ - + { + ENABLE_FLEXIBLE_PROJECT_RELEASE_RELATIONSHIP === 'true' + ? + + : + + } - + { + ENABLE_FLEXIBLE_PROJECT_RELEASE_RELATIONSHIP === 'true' + ? + + : + + } diff --git a/src/app/[locale]/projects/detail/[id]/components/LicenseClearingFilters.ts b/src/app/[locale]/projects/detail/[id]/components/LicenseClearingFilters.ts new file mode 100644 index 00000000..2b681f03 --- /dev/null +++ b/src/app/[locale]/projects/detail/[id]/components/LicenseClearingFilters.ts @@ -0,0 +1,65 @@ +// Copyright (C) TOSHIBA CORPORATION, 2024. Part of the SW360 Frontend Project. +// Copyright (C) Toshiba Software Development (Vietnam) Co., Ltd., 2024. Part of the SW360 Frontend Project. + +// This program and the accompanying materials are made +// available under the terms of the Eclipse Public License 2.0 +// which is available at https://www.eclipse.org/legal/epl-2.0/ + +// SPDX-License-Identifier: EPL-2.0 +// License-Filename: LICENSE + +export const releaseClearingStates: { [k: string]: string } = { + 'NEW_CLEARING': 'New', + 'APPROVED': 'Report Approved', + 'REPORT_AVAILABLE': 'Report Available', + 'SCAN_AVAILABLE': 'Scan Available', + 'SENT_TO_CLEARING_TOOL': 'Sent To Clearing Tool', + 'UNDER_CLEARING': 'Under Clearing' +} + +export const releaseRelations: { [k: string]: string } = { + 'UNKNOWN': 'Unknown', + 'CONTAINED': 'Contained', + 'REFERRED': 'Related', + 'DYNAMICALLY_LINKED': 'Dynamically Linked', + 'STATICALLY_LINKED': 'Statically Linked', + 'SIDE_BY_SIDE': 'Side By Side', + 'STANDALONE': 'Standalone', + 'INTERNAL_USE': 'Internal Use', + 'OPTIONAL': 'Optional', + 'TO_BE_REPLACED': 'To Be Replaced', + 'CODE_SNIPPET': 'Code Snippet', +} + +export const releaseTypes: { [k: string]: string } = { + 'OSS': 'OSS', + 'COTS': 'COTS', + 'INTERNAL': 'Internal', + 'INNER_SOURCE': 'Inner Source', + 'SERVICE': 'Service', + 'FREESOFTWARE': 'Freeware', + 'CODE_SNIPPET': 'Code Snippet', +} + +export const projectTypes: { [k: string]: string } = { + 'PRODUCT': 'Product', + 'CUSTOMER_PROJECT': 'Customer Project', + 'INTERNAL_PROJECT': 'Internal Project', + 'SERVICE': 'Service', + 'INNER_SOURCE': 'Inner Source', + 'CLOUND_BACKEND': 'Cloud Backend', +} + +export const projectRelations: { [k: string]: string } = { + 'UNKNOWN': 'Unknown', + 'DUPLICATE': 'Duplicate', + 'CONTAINED': 'Is a subproject', + 'REFERRED': 'Related', +} + +export const projectClearingState: { [k: string]: string } = { + 'OPEN': 'Open', + 'IN_PROGRESS': 'In Progress', + 'CLOSED': 'Closed', + 'INTERNAL_USE_SCAN_AVAILABLE': 'Internal use scan available' +} diff --git a/src/app/[locale]/projects/detail/[id]/components/ProjectDetailTab.tsx b/src/app/[locale]/projects/detail/[id]/components/ProjectDetailTab.tsx index 6a6bbb95..b8d930b0 100644 --- a/src/app/[locale]/projects/detail/[id]/components/ProjectDetailTab.tsx +++ b/src/app/[locale]/projects/detail/[id]/components/ProjectDetailTab.tsx @@ -82,7 +82,7 @@ export default function ViewProjects({ projectId }: { projectId: string }) { return ( <> -
    +
    diff --git a/src/app/[locale]/projects/detail/[id]/components/TogglerLicenseList.tsx b/src/app/[locale]/projects/detail/[id]/components/TogglerLicenseList.tsx new file mode 100644 index 00000000..3107ebe7 --- /dev/null +++ b/src/app/[locale]/projects/detail/[id]/components/TogglerLicenseList.tsx @@ -0,0 +1,187 @@ +// Copyright (C) TOSHIBA CORPORATION, 2024. Part of the SW360 Frontend Project. +// Copyright (C) Toshiba Software Development (Vietnam) Co., Ltd., 2024. Part of the SW360 Frontend Project. + +// This program and the accompanying materials are made +// available under the terms of the Eclipse Public License 2.0 +// which is available at https://www.eclipse.org/legal/epl-2.0/ + +// SPDX-License-Identifier: EPL-2.0 +// License-Filename: LICENSE + +'use client' + +import { BsCaretDownFill, BsCaretRightFill } from 'react-icons/bs' +import ViewFileListIcon from './ViewFileListIcon' +import CommonUtils from '@/utils/common.utils' +import React, { useCallback, useEffect, useState } from 'react' +import { Button, Modal } from 'react-bootstrap' +import { TiWarningOutline } from 'react-icons/ti' +import { ApiUtils } from '@/utils/index' +import { getSession } from 'next-auth/react' +import { IoMdInformationCircleOutline } from 'react-icons/io' + +interface LicenseData { + licenseType: string + licenseSpdxId: string + licenseName: string + sourcesFiles: Array +} + +interface LicensesToSourcesMapping { + releaseId: string + releaseName: string + attachmentName?: string + licensesData?: Array + status: string + message?: string +} + +const sortIgnoreCase = (array: Array) => array.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' })) + +const TogglerLicenseList = ({ licenses, releaseId, t }: { licenses?: Array, releaseId: string, t: any }) => { + const [toggle, setToggle] = useState(false) + const [isFileModalOpen, setIsFileModalOpen] = useState(false) + const [selectedLicense, setSelectedLicense] = useState(undefined) + + return ( + !CommonUtils.isNullEmptyOrUndefinedArray(licenses) + && +
    + { + (licenses.length > 1) + ? + (toggle) + ? + <> +
    setToggle(!toggle)} />
    +
    + {Object.values(sortIgnoreCase(licenses)).map((license): React.ReactNode => + + {license} {' '} + { setIsFileModalOpen(true); setSelectedLicense(license) }} /> + + ).reduce((prev, curr): React.ReactNode[] => [prev, <>{','}
    , curr]) + } +
    + + : + <> +
    setToggle(!toggle)} />
    +
    +
    + {sortIgnoreCase(licenses)[0]} {' '} + { setIsFileModalOpen(true); setSelectedLicense(license) }} /> +
    + {'...'} +
    + + : +
    + {licenses[0]} {' '} + { setIsFileModalOpen(true); setSelectedLicense(license) }} /> +
    + } + +
    + ) +} + +interface FileListModalProps { + license?: string + releaseId: string + isFileModalOpen: boolean + setIsFileModalOpen: React.Dispatch> + t: any +} + +const FileListModal = ({ license, releaseId, isFileModalOpen, setIsFileModalOpen, t }: FileListModalProps) => { + const [licensesToSourceFilesMapping, setLicensesToSourceFilesMapping] = useState(undefined) + const [licenseMappingData, setLicenseMappingData] = useState(undefined) + + const closeModal = () => { + setLicenseMappingData(undefined) + setLicensesToSourceFilesMapping(undefined) + setIsFileModalOpen(false) + } + + const fetchReleasesToFilesMapping = useCallback(async () => { + const session = await getSession() + const response = await ApiUtils.GET(`releases/${releaseId}/licensesToSourceFiles`, session.user.access_token) + const data = await response.json() + setLicensesToSourceFilesMapping(data) + if (data.status === 'success') { + for (const licenseData of data.licensesData) { + if ( + (licenseData.licenseName.toUpperCase() === license.toUpperCase()) + && !CommonUtils.isNullEmptyOrUndefinedArray(licenseData.sourcesFiles) + ) { + setLicenseMappingData(licenseData) + break + } + } + } + }, [releaseId, license]) + + useEffect(() => { + if (!isFileModalOpen) return + fetchReleasesToFilesMapping() + }, [isFileModalOpen, fetchReleasesToFilesMapping]) + + return ( + (licensesToSourceFilesMapping) && + { closeModal() }} + backdrop='static' + className={`view-file-list ${licensesToSourceFilesMapping.status === 'failure' ? 'modal-warning' : 'modal-info'}`} + size='lg' + centered + > + + + { + licensesToSourceFilesMapping.status === 'failure' + ? + <> {t('Warning')} + : + <> {licensesToSourceFilesMapping.releaseName} + } + + + + { + licensesToSourceFilesMapping.status === 'failure' + ? +
    + {t('Failed to load source file with error')}: {t(licensesToSourceFilesMapping.message)}! +
    + : +
    +
    + {t('File name')}: {licensesToSourceFilesMapping.attachmentName} +
    +
    + {t('License type')}: {(licenseMappingData) ? licenseMappingData.licenseType : ''} +
    +
    + {t('License name')}: {license} +
    +
      + {licenseMappingData ? + Object.values(licenseMappingData.sourcesFiles).map(fileName => + <>{fileName.split(/\s+|\n+/).map((name: string) =>
    • {name}
    • )} + ) + :
    • {t('Source file information not found in CLI')}!
    • + } +
    +
    + } +
    + + + +
    + ) +} + +export default TogglerLicenseList \ No newline at end of file diff --git a/src/app/[locale]/projects/detail/[id]/components/ViewFileListIcon.tsx b/src/app/[locale]/projects/detail/[id]/components/ViewFileListIcon.tsx new file mode 100644 index 00000000..999cc7ed --- /dev/null +++ b/src/app/[locale]/projects/detail/[id]/components/ViewFileListIcon.tsx @@ -0,0 +1,33 @@ +// Copyright (C) TOSHIBA CORPORATION, 2024. Part of the SW360 Frontend Project. +// Copyright (C) Toshiba Software Development (Vietnam) Co., Ltd., 2024. Part of the SW360 Frontend Project. + +// This program and the accompanying materials are made +// available under the terms of the Eclipse Public License 2.0 +// which is available at https://www.eclipse.org/legal/epl-2.0/ + +// SPDX-License-Identifier: EPL-2.0 +// License-Filename: LICENSE + +'use client' + +import { Tooltip, OverlayTrigger } from 'react-bootstrap' +import { IoMdInformationCircle } from 'react-icons/io' + +interface Props { + license: string, + t: any, + openModal: (license: string) => void +} + +const ViewFileListIcon = ({ license, t, openModal }: Props) => { + return ( + {t('View file list')}}> + openModal(license)}> + + + + ) +} + + +export default ViewFileListIcon \ No newline at end of file diff --git a/src/app/[locale]/projects/detail/[id]/detail.module.css b/src/app/[locale]/projects/detail/[id]/detail.module.css index b9262c58..a7675dde 100644 --- a/src/app/[locale]/projects/detail/[id]/detail.module.css +++ b/src/app/[locale]/projects/detail/[id]/detail.module.css @@ -44,3 +44,82 @@ .icon-btn:hover { cursor: pointer; } + +.state-box { + border-bottom-right-radius: 5px; + border-top-right-radius: 5px; + color: #FFF; + height: 25px; + padding: 0 4px; + font-weight: bold; + line-height: 25px; + text-align: center; +} + +.dropdown-btn button{ + background: none !important; + border: 0px !important; + padding: 0px !important; +} + +.dropdown-btn button:focus{ + background: none !important; + border: 0px !important; +} + +.dropdown-btn button:hover{ + background: none !important; + border: 0px !important; +} + +.dropdown-btn button::after { + display: none !important; +} + +.dropdown-btn svg { + color: white !important; +} + +.selection { + padding-left: 2.5rem; +} + +.dropdown-btn > div { + font-size: 0.875rem !important; + width: 240px !important; +} + +.table-search-box { + width: 15%; +} + +.table-search-box label{ + width: 60px; +} + +.table-search-box input{ + line-height: 1.2rem !important; +} + +.expanded-all-message { + padding: 0.5rem !important; + margin-bottom: 0px !important; +} + +.expanded-all-message [type='button'] { + padding: 17px !important; +} + +.list-view-search-box { + width: 25%; + right: 0px; +} + +.list-view-search-box label{ + width: 60px; +} + +.list-view-search-box input{ + width: 83%; + line-height: 1.2rem !important; +} diff --git a/src/components/sw360/EnumValueWithToolTip/EnumValueWIthToolTip.tsx b/src/components/sw360/EnumValueWithToolTip/EnumValueWIthToolTip.tsx new file mode 100644 index 00000000..74f7722c --- /dev/null +++ b/src/components/sw360/EnumValueWithToolTip/EnumValueWIthToolTip.tsx @@ -0,0 +1,55 @@ +// Copyright (C) TOSHIBA CORPORATION, 2024. Part of the SW360 Frontend Project. +// Copyright (C) Toshiba Software Development (Vietnam) Co., Ltd., 2024. Part of the SW360 Frontend Project. + +// This program and the accompanying materials are made +// available under the terms of the Eclipse Public License 2.0 +// which is available at https://www.eclipse.org/legal/epl-2.0/ + +// SPDX-License-Identifier: EPL-2.0 +// License-Filename: LICENSE + +import { Tooltip, OverlayTrigger } from 'react-bootstrap' + +const MainlineStates: { [k: string]: string } = { + 'OPEN': 'mainline_state_open_tooltip', + 'MAINLINE': 'mainline_state_mainline_tooltip', + 'SPECIFIC': 'mainline_state_specific_tooltip', + 'PHASEOUT': 'mainline_state_phaseout_tooltip', + 'DENIED': 'mainline_state_denied_tooltip' +} + +const ReleaseRelations: { [k: string]: string } = { + 'UNKNOWN': 'release_relation_unknown_tooltip', + 'CONTAINED': 'release_relation_contained_tooltip', + 'REFERRED': 'release_relation_referred_tooltip', + 'DYNAMICALLY_LINKED': 'release_relation_dynamic_linked_tooltip', + 'STATICALLY_LINKED': 'release_relation_static_linked_tooltip', + 'SIDE_BY_SIDE': 'release_relation_side_by_side_tooltip', + 'STANDALONE': 'release_relation_standalone_tooltip', + 'INTERNAL_USE': 'release_relation_interal_use_tooltip', + 'OPTIONAL': 'release_relation_optional_tooltip', + 'TO_BE_REPLACED': 'release_relation_to_be_replaced_tooltip', + 'CODE_SNIPPET': 'release_relation_code_snippest_tooltip', +} + +const EnumValues: { [k: string]: string } = { + ...MainlineStates, + ...ReleaseRelations, +} + +const EnumValueWithToolTip = ({ value, t }: { value: string, t: any }) => { + + return ( + {t(EnumValues[value] as never)} + } + > + + {t(value as never)} + + + ) +} + +export default EnumValueWithToolTip \ No newline at end of file diff --git a/src/components/sw360/TreeTable/TreeTable.tsx b/src/components/sw360/TreeTable/TreeTable.tsx index b7dd9f00..f6baa639 100644 --- a/src/components/sw360/TreeTable/TreeTable.tsx +++ b/src/components/sw360/TreeTable/TreeTable.tsx @@ -16,6 +16,10 @@ import { BsCaretDownFill, BsCaretRightFill } from 'react-icons/bs' import { NodeData } from '@/object-types' import { Table, _ } from 'next-sw360' +import { OneDArray, TColumn } from 'gridjs/dist/src/types' +import { ComponentChild } from 'preact' +import { SearchConfig } from 'gridjs/dist/src/view/plugin/search/search' +import { Language } from '../Table/Table' interface Props { children: React.ReactNode @@ -35,20 +39,32 @@ const PaddedCell: React.FC = ({ collapseRow, }) => { return ( - // style={{paddingLeft: `${padLength * 1.5}rem`}} -
    - {parent && - (needExpand ? ( - - ) : ( - - ))}{' '} +
    + + {parent && + (needExpand ? ( + + ) : ( + + ))}{' '} + {children}
    ) } -const TreeTable = ({ data, setData, columns }: any) => { +interface TreeTableProps { + data: Array + setData: React.Dispatch>> + columns: OneDArray + onExpand?: (item: NodeData) => void + search?: SearchConfig | boolean + language?: Language + selector?: boolean + sort?: boolean +} + +const TreeTable = ({ data, setData, columns, onExpand, search, language, selector, sort }: TreeTableProps) => { const [tabledata, setTableData] = useState([]) useEffect(() => { const newData: any = [] @@ -60,8 +76,12 @@ const TreeTable = ({ data, setData, columns }: any) => { }, [data]) const expandRow = (item: NodeData) => { - item.isExpanded = true - setData([...data]) + if (!onExpand) { + item.isExpanded = true + setData([...data]) + return + } + onExpand(item) } const collapseRow = (item: NodeData) => { @@ -99,7 +119,7 @@ const TreeTable = ({ data, setData, columns }: any) => { } const manipulateData = (item: NodeData, level = 0, newData: any = []) => { - if (item.children.length > 0) { + if (item.children.length > 0 || item.isExpandable) { const isExpanded: boolean = item.isExpanded newData.push(parseRowData(item, isExpanded, true, level)) if (isExpanded) { @@ -111,6 +131,6 @@ const TreeTable = ({ data, setData, columns }: any) => { } } - return
    + return
    } export default TreeTable diff --git a/src/components/sw360/index.ts b/src/components/sw360/index.ts index 21836d83..1acbc5d8 100644 --- a/src/components/sw360/index.ts +++ b/src/components/sw360/index.ts @@ -31,6 +31,7 @@ import ThemeSwitcher from './ThemeSwitcher/ThemeSwitcher' import ToastMessage from './ToastContainer/Toast' import GlobalMessages from './GlobalMessages' import SelectUsersDialog from './SearchUsersDialog/SelectUsersDialog' +import EnumValueWithToolTip from './EnumValueWithToolTip/EnumValueWIthToolTip' // Table component // Strictly derived from gridjs-react with dedicated changes @@ -66,5 +67,6 @@ export { VendorDialog, GlobalMessages, SelectUsersDialog, + EnumValueWithToolTip, _, } diff --git a/src/object-types/NodeData.ts b/src/object-types/NodeData.ts index 706619d1..8b97786a 100644 --- a/src/object-types/NodeData.ts +++ b/src/object-types/NodeData.ts @@ -11,7 +11,10 @@ interface NodeData { rowData: Array isExpanded?: boolean - children: Array + children?: Array + isExpandable?: boolean + isNodeFetched?: boolean + additionalData?: any // You can add any thing to this field, this will help you customize fetching function when expanding } export default NodeData diff --git a/src/styles/globals.css b/src/styles/globals.css index d20e5548..132a4245 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -1058,3 +1058,107 @@ input[type='date'] { font-size: small; border-radius: 5px; } + +.state-box { + color: #FFF; + height: 25px; + padding: 0 4px; + font-weight: bold; + line-height: 25px; + text-align: center; + display: inline-block; +} + +.clearingStateOpen { + background-color: rgba(220, 53, 69, 0.7); +} + +.clearingStateReportAvailable { + background-color: #2e5aac; +} + +.clearingStateInProgress { + background-color: rgba(255, 193, 7, 0.7); +} + +.clearingStateApproved { + background-color: rgba(40, 167, 69, 0.7); +} + +.clearingStateUnknown { + background-color: #dee2e6; +} + +.clearingStateSentToClearingTool { + background-color: #F7941E; +} + +.tab-content { + padding-left: 0px !important; +} + +.capsule-left { + border-bottom-left-radius: 5px; + border-top-left-radius: 5px; +} + +.capsule-right { + border-bottom-right-radius: 5px; + border-top-right-radius: 5px; +} + +.projectStateActive { + background-color: rgba(40, 167, 69, 0.7); +} + +.projectStateInactive { + background-color: #dee2e6; +} + +.indenter { + display: inline-block; + margin: 0; + padding-right: 5px; + text-align: right; + box-sizing: content-box !important; + width: 19px; +} + +svg.cursor { + cursor: pointer +} + +.btn-light:hover { + background-color: #e2e4ea !important; + border-color: transparent !important; + color: #272833 !important; +} + +.modal-warning .modal-header { + background-color: #fff4ec; + border-color: #ff8f39; + color: #b95000; +} + +.modal-info .modal-header { + background-color: #eef2fa; + border-color: #89a7e0; + color: #2e5aac; +} + +a.text-primary:hover, a.text-primary:focus { + color: #c26c07 !important; +} + +a.text-primary { + color: var(--sw360-primary-color) !important; +} + +.cursor-pointer { + cursor: pointer; +} + +.tooltip-inner { + max-width: 600px !important; + font-size: 13px !important; +} diff --git a/src/styles/gridjs/sw360.css b/src/styles/gridjs/sw360.css index b2b18ba2..344be5de 100644 --- a/src/styles/gridjs/sw360.css +++ b/src/styles/gridjs/sw360.css @@ -202,10 +202,12 @@ table.gridjs-table { td.gridjs-td { border: 1px solid #e5e7eb; - padding: 12px 24px; + padding: 12px 14px; background-color: #fff; box-sizing: content-box; font-size: 14px; + word-break: break-all; + text-align: justify; } td.gridjs-td:first-child { border-left: none; @@ -377,3 +379,7 @@ th.gridjs-th:last-child { text-decoration: underline; color: var(--sw360-primary-background-color); } + +th.gridjs-th .gridjs-th-content { + overflow: visible !important; +} diff --git a/src/utils/common.utils.ts b/src/utils/common.utils.ts index 549148f4..134bc2df 100644 --- a/src/utils/common.utils.ts +++ b/src/utils/common.utils.ts @@ -279,6 +279,8 @@ const extractEmailsAndFullNamesFromUsers = (users: Array) => { }, {} as { [k: string]: string }) } +const nullToEmptyString = (item: string | null | undefined) => item ? item : '' + const CommonUtils = { isNullOrUndefined, isNullEmptyOrUndefinedString, @@ -294,6 +296,7 @@ const CommonUtils = { fillDate, fillTime, readDateTime + nullToEmptyString, } export default CommonUtils diff --git a/src/utils/env.ts b/src/utils/env.ts index 8599cb70..99297ad7 100644 --- a/src/utils/env.ts +++ b/src/utils/env.ts @@ -12,3 +12,4 @@ export const SW360_API_URL: string | undefined = process.env.NEXT_PUBLIC_SW360_API_URL; export const AUTH_TOKEN : string | undefined = process.env.NEXT_PUBLIC_AUTH_TOKEN; export const SPDX_ENABLE: string | undefined = process.env.NEXT_PUBLIC_SPDX_ENABLE; +export const ENABLE_FLEXIBLE_PROJECT_RELEASE_RELATIONSHIP : string | undefined = process.env.NEXT_PUBLIC_ENABLE_FLEXIBLE_PROJECT_RELEASE_RELATIONSHIP;