diff --git a/frontend/public/mockServiceWorker.js b/frontend/public/mockServiceWorker.js index 2eec3ee33..1f24a6f36 100644 --- a/frontend/public/mockServiceWorker.js +++ b/frontend/public/mockServiceWorker.js @@ -1,4 +1,4 @@ -/* eslint-disable */ + /* tslint:disable */ /** diff --git a/frontend/src/components/ListViewComponent.tsx b/frontend/src/components/ListViewComponent.tsx index 24b8d9e24..41df66b1e 100644 --- a/frontend/src/components/ListViewComponent.tsx +++ b/frontend/src/components/ListViewComponent.tsx @@ -107,7 +107,7 @@ const ListViewComponent = ({ setResourceFilters(initialResourceFilters); lastInitialFiltersRef.current = initialResourceFilters; } - }, [initialResourceFilters]); // eslint-disable-line react-hooks/exhaustive-deps + }, [initialResourceFilters]); // Add useEffect to notify parent of resource data changes useEffect(() => { diff --git a/frontend/src/locales/strings.es.json b/frontend/src/locales/strings.es.json index a4b5e792f..6aba98c2a 100644 --- a/frontend/src/locales/strings.es.json +++ b/frontend/src/locales/strings.es.json @@ -65,8 +65,105 @@ "clear": "Limpiar", "of": "de", "items": "elemento{{count, plural, one {} other {s}}}", + "items_plural": "{{count}} items", "filteredFrom": "filtrado de" }, + "admin": { + "users": { + "title": "Gestión de Usuarios", + "subtitle": "Usuarios del Sistema", + "description": "Gestionar usuarios del sistema y sus permisos", + "searchPlaceholder": "Buscar usuarios por nombre, rol o permisos...", + "refresh": "Actualizar Usuarios", + "addUser": "Añadir Usuario", + "noUsers": "No se encontraron Usuarios", + "noUsersDescription": "No hay usuarios en el sistema todavía. Haz clic en 'Añadir Usuario' para crear tu primer usuario.", + "noPermissions": "Sin permisos asignados", + "filters": { + "title": "Filtros", + "reset": "Restablecer Filtros", + "role": "Rol", + "allRoles": "Todos los Roles", + "permission": "Permiso", + "anyPermission": "Cualquier Permiso", + "permissionLevel": "Nivel de Permiso", + "anyLevel": "Cualquier Nivel", + "sortBy": "Ordenar Por", + "created": "Fecha de Creación", + "ascending": "Ascendente", + "descending": "Descendente", + "active": "Filtros Activos", + "roleFilter": "Rol", + "permissionFilter": "Permiso", + "levelFilter": "Nivel", + "searchFilter": "Búsqueda" + }, + "actions": { + "addUser": "Añadir Usuario", + "editUser": "Editar Usuario", + "add": "Añadir Usuario", + "update": "Actualizar Usuario", + "delete": "Eliminar Usuario", + "edit": "Editar", + "deleteUser": "Eliminar Usuario" + }, + "table": { + "username": "Nombre de Usuario", + "role": "Rol", + "permissions": "Permisos", + "actions": "Acciones" + }, + "roles": { + "admin": "Administrador", + "user": "Usuario" + }, + "permissions": { + "users": "Usuarios", + "resources": "Recursos", + "system": "Sistema", + "dashboard": "Tablero", + "levels": { + "read": "Lectura", + "write": "Escritura", + "none": "Ninguno" + } + }, + "form": { + "username": "Nombre de Usuario", + "usernamePlaceholder": "Introducir nombre de usuario", + "password": "Contraseña", + "passwordPlaceholder": "Introducir contraseña", + "passwordOptional": "Contraseña (opcional)", + "passwordOptionalPlaceholder": "Introducir nueva contraseña o dejar en blanco", + "confirmPassword": "Confirmar Contraseña", + "confirmPasswordPlaceholder": "Confirmar contraseña", + "isAdmin": "Acceso de Administrador", + "permissions": "Permisos de Componentes", + "cancel": "Cancelar", + "optional": "opcional" + }, + "delete": { + "title": "Eliminar Usuario", + "confirmTitle": "Confirmar Eliminación", + "confirmMessage": "¿Estás seguro de que deseas eliminar al usuario \"{{username}}\"? Esta acción no se puede deshacer.", + "confirm": "Eliminar Usuario" + }, + "errors": { + "fetchFailed": "Error al obtener usuarios", + "missingFields": "Por favor completa todos los campos requeridos", + "passwordMismatch": "Las contraseñas no coinciden", + "addFailed": "Error al añadir usuario", + "updateFailed": "Error al actualizar usuario", + "deleteFailed": "Error al eliminar usuario", + "invalidUsername": "El nombre de usuario solo puede contener letras, números, guiones bajos y guiones." + }, + "success": { + "userAdded": "Usuario añadido exitosamente", + "userUpdated": "Usuario actualizado exitosamente", + "userDeleted": "Usuario eliminado exitosamente" + } + } + }, "installationPage": { "successSection": { "installed": "está correctamente instalado y cumple con los requisitos de versión." @@ -109,6 +206,12 @@ "prerequisites": "Requisitos previos", "title": "Requisitos del Sistema", "description": "Asegúrate de tener estas herramientas instaladas antes de continuar", + "kubeflexDescription": "KubeFlex CLI tool (required version ≥ 0.8.0)", + "ocmDescription": "Open Cluster Management CLI (required version between 0.7 and 0.11)", + "helmDescription": "Kubernetes package manager (required version ≥ 3.0.0)", + "kubectlDescription": "Kubernetes command-line tool (required version ≥ 1.27.0)", + "kindDescription": "Tool for running local Kubernetes clusters (required version ≥ 0.20.0)", + "dockerDescription": "Container runtime (required version ≥ 20.0.0)", "status": { "success": "Éxito", "warnings": "Advertencias", @@ -118,8 +221,9 @@ "coreRequirements": "Requisitos Básicos", "demoEnvironmentRequirements": "Requisitos del Entorno de Demostración", "buttons": { - "refresh": "Actualizar", - "nextInstallation": "Siguiente: Instalación" + "nextInstallation": "Siguiente: Instalación", + "checking": "Checking...", + "refresh": "Actualizar" } }, "installation": { @@ -197,7 +301,10 @@ "preparingInstructions": "Preparando instrucciones de instalación...", "followInstructions": "Sigue las instrucciones CLI a continuación para instalar KubeStellar", "loadInstructionsFailed": "No se pudieron cargar las instrucciones de instalación. Por favor, actualiza la página e intenta nuevamente.", - "installationDetected": "¡Se detectó la instalación de KubeStellar! Redirigiendo a la página de inicio de sesión..." + "installationDetected": "¡Se detectó la instalación de KubeStellar! Redirigiendo a la página de inicio de sesión...", + "recheckingPrerequisites": "Rechecking prerequisites...", + "prerequisitesRechecked": "Prerequisites rechecked successfully", + "recheckFailed": "Failed to recheck prerequisites" } }, "header": { @@ -214,7 +321,12 @@ "goToHome": "Ir a la página principal", "logoAlt": "Logo de KubeStellar", "themeToggleTip": "Alt+Q para cambiar el tema", - "switchTheme": "Cambiar a modo {{mode}}" + "switchTheme": "Cambiar a modo {{mode}}", + "switchLanguage": "Switch language", + "selectLanguage": "Select Language", + "enterFullscreen": "Enter fullscreen mode", + "exitFullscreen": "Exit fullscreen mode", + "fullscreen": "Toggle fullscreen mode" }, "login": { "controlPlane": "Plano de control", @@ -340,6 +452,8 @@ "label": "Etiqueta", "editvalue": "Se requieren tanto la clave como el valor", "manage": "Gestionar etiquetas", + "bulkTooltipDisabled": "Select at least 2 clusters to enable bulk labeling", + "bulkTooltipEnabled": "Manage labels for selected clusters", "clearFilter": "Limpiar filtro", "searchLabelsPlaceholder": "Buscar etiquetas...", "bulkEditTitle": "Editar etiquetas para {{count}} clusters", @@ -729,7 +843,17 @@ "expandAll": "Expandir todos los nodos hijos de todos los nodos padre", "collapseAll": "Colapsar todos los nodos hijos de todos los nodos padre", "zoomIn": "Acercar", - "zoomOut": "Alejar" + "zoomOut": "Alejar", + "resetZoom": "Reset Zoom", + "edgeStyle": "Edge Style", + "curvy": "Curvy", + "square": "Square", + "fullscreen": "Enter Fullscreen", + "exitFullscreen": "Exit Fullscreen" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" }, "nodeLabel": { "labels": "Etiquetas:", @@ -781,15 +905,34 @@ "selectContainer": "Seleccionar contenedor", "noContainersFound": "No se encontraron contenedores" }, + "logs": { + "previousLogs": "Previous Logs", + "currentLogs": "Current Logs", + "selectLogsContainer": "Select logs container" + }, "errors": { "failedLoadClusterDetails": "No se pudieron cargar los detalles del clúster.", "failedLoadDetails": "No se pudieron cargar los detalles de {{type}}.", "apiNotImplemented": "API no implementada para actualizar el pod \"{{resourceName}}\"", - "failedFetchContainers": "No se pudo obtener la lista de contenedores" + "failedFetchContainers": "No se pudo obtener la lista de contenedores", + "failedFetchLogsContainers": "Failed to fetch container list for logs", + "failedConnectExec": "Failed to connect to exec session", + "failedInitExec": "Failed to initialize exec session", + "failedUpdate": "Failed to update manifest", + "resourceNotFound": "Resource not found", + "permissionDenied": "Permission denied", + "invalidManifest": "Invalid manifest format", + "namespaceRequired": "Namespace is required" + }, + "success": { + "manifestUpdated": "Manifest updated successfully" }, "cluster": { "active": "Activo" }, + "exec": { + "connected": "Connected" + }, "noManifest": "No hay manifiesto disponible" }, "treeView": { @@ -814,6 +957,23 @@ "fullscreen": { "toggle": "Alternar vista de pantalla completa" }, + "zoomControls": { + "groupByResource": "Group By Resource/Kind", + "expandAll": "Expand all the child nodes of all parent nodes", + "collapseAll": "Collapse all the child nodes of all parent nodes", + "zoomIn": "Zoom In", + "zoomOut": "Zoom Out", + "resetZoom": "Reset Zoom", + "edgeStyle": "Edge Style", + "curvy": "Curvy", + "square": "Square", + "fullscreen": "Enter Fullscreen", + "exitFullscreen": "Exit Fullscreen" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" + }, "contextMenu": { "details": "Detalles", "delete": "Eliminar", @@ -1181,8 +1341,7 @@ "title": "Etiquetas:", "key": "Clave", "value": "Valor", - "add": "Agregar", - "count": "{{count}} etiquetas únicas en {{total}}" + "add": "Agregar" }, "creatingConnection": "Creando conexión:", "previewDialog": { @@ -1643,7 +1802,9 @@ "successWithUser": "Inicio de sesión exitoso para el usuario: {{username}}. Redirigiendo a {{path}}", "invalidCredentials": "Credenciales inválidas", "authFailed": "Autenticación fallida. Verifica tus credenciales.", - "noToken": "No se recibió token del servidor" + "noToken": "No se recibió token del servidor", + "invalidRequest": "Invalid request. Please check your input and try again.", + "serverError": "Server error. Please try again later." } }, "kubestellarData": { @@ -1781,17 +1942,25 @@ "invalidResponseFormat": "Formato de respuesta inválido del servidor", "unknownError": "Ocurrió un error desconocido al obtener recursos.", "errorLoading": "Error al cargar recursos", - "downloadLogs": "Descargar registros", "namespace": "Espacio de Nombres", "created": "Creado", - "filteredByContext": "Filtrado por contexto: {{context}}", - "showingResourceCount": "Mostrando {{showing}} de {{total}} recursos totales", - "resourceStats": "{{raw}} recursos sin procesar detectados, {{processed}} procesados", + "downloadLogs": "Descargar registros", "pagination": { - "prev": "Anterior", - "next": "Siguiente", "showing": "Mostrando de {{from}} a {{to}} de {{total}} entradas", - "filtered": " (filtrado por el contexto {{context}})" + "filtered": " (filtrado por el contexto {{context}})", + "prev": "Anterior", + "next": "Siguiente" + }, + "resourceStats": "{{raw}} recursos sin procesar detectados, {{processed}} procesados", + "filteredByContext": "Filtrado por contexto: {{context}}", + "showingResourceCount": "Mostrando {{showing}} de {{total}} recursos totales", + "noWorkloads": { + "title": "No se Encontraron Cargas de Trabajo", + "noResourcesForContext": "No se encontraron recursos para el contexto {{context}}", + "resourcesFilteredOut": "Los recursos están disponibles pero fueron filtrados", + "getStarted": "Empieza creando tu primera carga de trabajo", + "resourcesAvailable": "{{count}} recursos disponibles en total, pero ninguno coincide con el filtro actual", + "noMatchingFilters": "No resources match the current filters" }, "troubleshooting": { "title": "Prueba estos pasos de solución de problemas:", @@ -1799,13 +1968,6 @@ "step2": "2. Verifica que la configuración CORS del servidor permita solicitudes desde http://localhost:5173", "step3": "3. Si el servidor usa CORS con comodín (*), no puede aceptar solicitudes con credenciales", "step4": "4. Verifica la consola del navegador para ver mensajes de error detallados" - }, - "noWorkloads": { - "title": "No se Encontraron Cargas de Trabajo", - "noResourcesForContext": "No se encontraron recursos para el contexto {{context}}", - "resourcesFilteredOut": "Los recursos están disponibles pero fueron filtrados", - "getStarted": "Empieza creando tu primera carga de trabajo", - "resourcesAvailable": "{{count}} recursos disponibles en total, pero ninguno coincide con el filtro actual" } }, "kubeconfigImport": { @@ -1938,13 +2100,6 @@ "arrows": "↑↓", "enter": "↵" }, - "sections": { - "navigation": "Navegación", - "visualizations": "Visualizaciones", - "help": "Ayuda", - "account": "Cuenta", - "admin": "Administración" - }, "commands": { "home": { "title": "Inicio", @@ -1954,9 +2109,13 @@ "title": "Gestor de Plugins", "description": "Gestionar y supervisar los plugins de KubeStellar" }, - "clusters": { - "title": "Clústeres Administrados", - "description": "Administrar clústeres de Kubernetes" + "managedClusters": { + "title": "Managed Clusters", + "description": "Manage Kubernetes clusters" + }, + "Grafana": { + "title": "Grafana Dashboard", + "description": "Grafana Dashboard" }, "workloads": { "title": "Cargas de trabajo", @@ -1991,10 +2150,21 @@ "description": "Salir de tu cuenta", "infoMessage": "Has cerrado sesión exitosamente." }, + "metricsDashboard": { + "title": "Metrics Dashboard", + "description": "Monitor system performance and metrics" + }, "galaxyMarketplace": { "title": "Mercado Galaxy", "description": "Descubre e instala complementos desde el Mercado Galaxy" } + }, + "sections": { + "navigation": "Navegación", + "admin": "Administración", + "visualizations": "Visualizaciones", + "help": "Ayuda", + "account": "Cuenta" } }, "menu": { @@ -2007,12 +2177,14 @@ "items": { "home": "Inicio", "managedClusters": "Clústeres Administrados", - "grafana": "Grafana", + "Grafana": "Grafana Dashboard", "stagedWorkloads": "Cargas de Trabajo Preparadas", "bindingPolicies": "Políticas de Vinculación", "deployedWorkloads": "Cargas de Trabajo Desplegadas", + "resourceExplorer": "Object Explorer", "pluginManager": "Gestor de Plugins", "userManagement": "Gestión de Usuarios", + "metricsDashboard": "Metrics Dashboard", "galaxyMarketplace": "Mercado Galaxy" } }, @@ -2062,7 +2234,8 @@ "details": "Detalles", "uninstall": "Desinstalar", "reload": "Recargar", - "settings": "Configuración" + "settings": "Configuración", + "feedback": "Feedback" } }, "details": { @@ -2097,11 +2270,16 @@ "title": "Confirmar deshabilitación del plugin", "message": "Deshabilitar \"{{name}}\" detendrá toda la funcionalidad del plugin. Puedes volver a habilitarlo más tarde.", "confirm": "Sí, deshabilitar" + }, + "enable": { + "title": "Confirm Plugin Enable", + "message": "Enabling \"{{name}}\" will activate all plugin functionality and make it available for use.", + "confirm": "Yes, Enable" } }, "marketplace": { "title": "Mercado Galaxy de KubeStellar", - "description": "Descubre e instala plugins para mejorar tu experiencia con KubeStellar", + "subtitle": "Discover and install plugins to enhance your KubeStellar experience", "browse": "Explorar Plugins Disponibles", "featured": "Plugins Destacados", "categories": "Categorías", @@ -2127,100 +2305,352 @@ } } }, - "admin": { - "users": { - "title": "Gestión de Usuarios", - "subtitle": "Usuarios del Sistema", - "description": "Gestionar usuarios del sistema y sus permisos", - "searchPlaceholder": "Buscar usuarios por nombre, rol o permisos...", - "refresh": "Actualizar Usuarios", - "addUser": "Añadir Usuario", - "noUsers": "No se encontraron Usuarios", - "noUsersDescription": "No hay usuarios en el sistema todavía. Haz clic en 'Añadir Usuario' para crear tu primer usuario.", - "noPermissions": "Sin permisos asignados", - "filters": { - "title": "Filtros", - "reset": "Restablecer Filtros", - "role": "Rol", - "allRoles": "Todos los Roles", - "permission": "Permiso", - "anyPermission": "Cualquier Permiso", - "permissionLevel": "Nivel de Permiso", - "anyLevel": "Cualquier Nivel", - "sortBy": "Ordenar Por", - "created": "Fecha de Creación", - "ascending": "Ascendente", - "descending": "Descendente", - "active": "Filtros Activos", - "roleFilter": "Rol", - "permissionFilter": "Permiso", - "levelFilter": "Nivel", - "searchFilter": "Búsqueda" + "marketplace": { + "title": "KubeStellar Galaxy Marketplace", + "subtitle": "Discover and install plugins to enhance your KubeStellar experience", + "searchPlaceholder": "Search plugins, authors, categories...", + "filters": "Filters", + "sortPopular": "Most Popular", + "sortRating": "Highest Rated", + "sortNewest": "Recently Added", + "searchResults": "Search Results", + "allPlugins": "All Plugins", + "clearFilters": "Clear Filters", + "loadMore": "Load More Plugins", + "adminPanel": "Admin Panel", + "categories": { + "all": "All Plugins", + "management": "Management", + "monitoring": "Monitoring", + "security": "Security", + "networking": "Networking", + "storage": "Storage", + "database": "Database", + "ai": "AI & Machine Learning", + "devops": "DevOps", + "automation": "Automation", + "integration": "Integration", + "analytics": "Analytics", + "backup": "Backup & Recovery", + "compliance": "Compliance", + "testing": "Testing", + "development": "Development Tools" + }, + "plugin": { + "status": { + "active": "Active", + "inactive": "Inactive", + "loading": "Loading", + "error": "Error", + "installed": "Installed", + "notInstalled": "Not Installed" }, "actions": { - "addUser": "Añadir Usuario", - "editUser": "Editar Usuario", - "add": "Añadir Usuario", - "update": "Actualizar Usuario", - "delete": "Eliminar Usuario", - "edit": "Editar", - "deleteUser": "Eliminar Usuario" - }, - "table": { - "username": "Nombre de Usuario", - "role": "Rol", - "permissions": "Permisos", - "actions": "Acciones" - }, - "roles": { - "admin": "Administrador", - "user": "Usuario" - }, - "permissions": { - "users": "Usuarios", - "resources": "Recursos", - "system": "Sistema", - "dashboard": "Tablero", - "levels": { - "read": "Lectura", - "write": "Escritura", - "none": "Ninguno" - } + "install": "Install", + "uninstall": "Uninstall", + "enable": "Enable", + "disable": "Disable", + "update": "Update", + "viewDetails": "View Details", + "download": "Download", + "rate": "Rate", + "review": "Review", + "share": "Share", + "report": "Report Issue" + }, + "details": { + "overview": "Overview", + "details": "Details", + "feedback": "Feedback", + "documentation": "Documentation", + "dependencies": "Dependencies", + "reviews": "Reviews", + "changelog": "Changelog", + "license": "License", + "author": "Author", + "version": "Version", + "lastUpdated": "Last Updated", + "createdAt": "Created At", + "downloads": "Downloads", + "rating": "Rating", + "category": "Category", + "tags": "Tags", + "size": "Size", + "compatibility": "Compatibility", + "requirements": "Requirements", + "installation": "Installation", + "configuration": "Configuration", + "usage": "Usage", + "troubleshooting": "Troubleshooting" + }, + "feedback": { + "title": "Plugin Feedback", + "rating": "Rating", + "comment": "Comment", + "submit": "Submit Feedback", + "submitting": "Submitting...", + "success": "Feedback submitted successfully", + "error": "Failed to submit feedback", + "placeholder": "Tell us about your experience with this plugin...", + "ratingRequired": "Please provide a rating", + "commentRequired": "Please provide a comment" + }, + "installation": { + "title": "Installation", + "installing": "Installing...", + "success": "Plugin installed successfully", + "error": "Failed to install plugin", + "confirm": "Are you sure you want to install this plugin?", + "requirements": "Requirements", + "dependencies": "Dependencies", + "steps": "Installation Steps", + "verification": "Verification" + } + }, + "featured": { + "title": "Featured Plugins", + "subtitle": "Hand-picked plugins for the best experience", + "viewAll": "View All Featured", + "noFeatured": "No featured plugins available", + "loading": "Loading featured plugins..." + }, + "admin": { + "title": "Marketplace Administration", + "overview": "Overview", + "plugins": "Plugins", + "users": "Users", + "settings": "Settings", + "stats": { + "totalPlugins": "Total Plugins", + "pendingReviews": "Pending Reviews", + "totalDownloads": "Total Downloads", + "activeUsers": "Active Users" }, - "form": { - "username": "Nombre de Usuario", - "usernamePlaceholder": "Introducir nombre de usuario", - "password": "Contraseña", - "passwordPlaceholder": "Introducir contraseña", - "passwordOptional": "Contraseña (opcional)", - "passwordOptionalPlaceholder": "Introducir nueva contraseña o dejar en blanco", - "confirmPassword": "Confirmar Contraseña", - "confirmPasswordPlaceholder": "Confirmar contraseña", - "isAdmin": "Acceso de Administrador", - "permissions": "Permisos de Componentes", - "cancel": "Cancelar", - "optional": "opcional" + "actions": { + "uploadPlugin": "Upload Plugin", + "deletePlugin": "Delete Plugin", + "approvePlugin": "Approve Plugin", + "rejectPlugin": "Reject Plugin", + "featurePlugin": "Feature Plugin", + "unfeaturePlugin": "Unfeature Plugin" + }, + "upload": { + "title": "Upload New Plugin", + "selectFile": "Select Plugin File", + "dragDrop": "Drag & Drop plugin file here", + "supportedFormats": "Supported formats: .tar.gz, .zip", + "maxSize": "Maximum file size: 100MB", + "uploading": "Uploading...", + "success": "Plugin uploaded successfully", + "error": "Failed to upload plugin" }, "delete": { - "title": "Eliminar Usuario", - "confirmTitle": "Confirmar Eliminación", - "confirmMessage": "¿Estás seguro de que deseas eliminar al usuario \"{{username}}\"? Esta acción no se puede deshacer.", - "confirm": "Eliminar Usuario" - }, - "errors": { - "fetchFailed": "Error al obtener usuarios", - "missingFields": "Por favor completa todos los campos requeridos", - "passwordMismatch": "Las contraseñas no coinciden", - "addFailed": "Error al añadir usuario", - "updateFailed": "Error al actualizar usuario", - "deleteFailed": "Error al eliminar usuario", - "invalidUsername": "El nombre de usuario solo puede contener letras, números, guiones bajos y guiones." - }, - "success": { - "userAdded": "Usuario añadido exitosamente", - "userUpdated": "Usuario actualizado exitosamente", - "userDeleted": "Usuario eliminado exitosamente" - } + "title": "Delete Plugin", + "confirm": "Are you sure you want to delete \"{{name}}\"? This action cannot be undone.", + "deleting": "Deleting...", + "success": "Plugin deleted successfully", + "error": "Failed to delete plugin" + }, + "quickActions": "Quick Actions", + "uploadNewPlugin": "Upload New Plugin", + "reviewPlugins": "Review Plugins", + "searchPlugins": "Search plugins...", + "allStatus": "All Status", + "active": "Active", + "inactive": "Inactive", + "loadingPlugins": "Loading plugins...", + "noPluginsFound": "No plugins found.", + "userManagement": "User Management", + "userManagementComingSoon": "User management features coming soon.", + "adminSettings": "Admin Settings", + "settingsComingSoon": "Settings panel coming soon.", + "marketplaceManagement": "Marketplace Management", + "adminPanel": "Admin Panel" + }, + "search": { + "noResults": "No plugins found", + "noResultsDescription": "Try adjusting your search terms or browse all plugins", + "clearSearch": "Clear search", + "searching": "Searching...", + "resultsCount": "{{count}} plugin{{count, plural, one {} other {s}}} found" + }, + "errors": { + "failedToLoad": "Failed to load marketplace data", + "failedToInstall": "Failed to install plugin", + "failedToUninstall": "Failed to uninstall plugin", + "failedToEnable": "Failed to enable plugin", + "failedToDisable": "Failed to disable plugin", + "failedToSubmitFeedback": "Failed to submit feedback", + "pluginNotFound": "Plugin not found", + "installationFailed": "Installation failed", + "networkError": "Network error occurred", + "serverError": "Server error occurred" + }, + "success": { + "pluginInstalled": "Plugin installed successfully", + "pluginUninstalled": "Plugin uninstalled successfully", + "pluginEnabled": "Plugin enabled successfully", + "pluginDisabled": "Plugin disabled successfully", + "feedbackSubmitted": "Feedback submitted successfully", + "pluginUpdated": "Plugin updated successfully" + }, + "loading": { + "loadingPlugins": "Loading amazing plugins...", + "discoveringGalaxy": "Discovering the galaxy of possibilities", + "loadingMarketplace": "Loading marketplace...", + "loadingPlugin": "Loading plugin details...", + "installingPlugin": "Installing plugin...", + "uninstallingPlugin": "Uninstalling plugin..." + }, + "empty": { + "noPlugins": "No plugins found", + "noPluginsDescription": "No plugins match your current filters", + "showAllPlugins": "Show All Plugins", + "noFeaturedPlugins": "No featured plugins available", + "noCategories": "No categories available", + "noSearchResults": "No search results found" + }, + "backToMarketplace": "Back to Marketplace", + "enable": "Enable", + "disable": "Disable", + "install": "Install", + "uninstall": "Uninstall", + "by": "By", + "overview": "Overview", + "details": "Details", + "feedback": "Feedback", + "docSection": "Documentation", + "description": "Description", + "dependencies": "Dependencies", + "keyFeatures": "Key Features", + "technicalDetails": "Technical Details", + "generalInfo": "General Information", + "version": "Version", + "lastUpdated": "Last Updated", + "author": "Author", + "license": "License", + "category": "Category", + "requirements": "Requirements", + "kubestellarVersion": "KubeStellar Version", + "platforms": "Platforms", + "fileSize": "File Size", + "pluginIdentifiers": "Plugin Identifiers", + "tags": "Tags", + "userFeedback": "User Feedback", + "leaveFeedback": "Leave Feedback", + "yourFeedback": "Your Feedback", + "rating": "Rating", + "comments": "Comments", + "delete": { + "confirmTitle": "Delete Plugin", + "confirmLabel": "Type the plugin name to confirm:", + "confirmPlaceholder": "Enter plugin name here", + "mismatch": "Plugin name does not match", + "confirmed": "Plugin name confirmed", + "deleteButton": "Delete Plugin", + "deleting": "Deleting Plugin...", + "deletingMessage": "Please wait while we remove your plugin.", + "success": "Plugin Deleted Successfully!", + "error": "Delete Failed", + "tryAgain": "Try Again", + "title": "Delete Plugin" + }, + "upload": { + "dragDrop": "Drag and drop your plugin here", + "browseFiles": "Browse Files", + "requirements": "Upload Requirements:", + "reviewFile": "Review Your Plugin", + "uploadPlugin": "Upload Plugin", + "uploading": "Uploading Plugin...", + "success": "Plugin Uploaded Successfully!", + "error": "Upload Failed", + "tryAgain": "Try Again", + "title": "Upload Plugin", + "supportedFormat": "or click to browse. Supported format: .tar.gz", + "confirmUpload": "Please confirm the details below before uploading", + "processingFile": "Processing your plugin file. This may take a moment.", + "successMessage": "Your plugin has been uploaded and is now available in the marketplace.", + "errorMessage": "Something went wrong while uploading your plugin.", + "invalidFileType": "Invalid file type. Please upload a .tar.gz file.", + "fileTooLarge": "File size too large. Maximum size is 50MB." + }, + "common": { + "featured": "FEATURED", + "viewDetails": "View Details", + "installNow": "Install Now", + "installing": "Installing...", + "installed": "Installed", + "uninstalling": "Uninstalling...", + "rating": "rating", + "downloads": "downloads", + "updated": "Updated", + "recently": "recently", + "by": "by", + "unknownAuthor": "Unknown author", + "noDescription": "No description available", + "premiumPlugins": "Discover Premium Plugins", + "enhanceWorkflow": "Enhance your workflow with powerful plugins designed specifically for Kubernetes and cloud-native environments.", + "exploreMarketplace": "Explore Marketplace", + "suggestedCategories": ["Monitoring", "Security", "Development", "Deployment", "Storage"], + "noPluginsFound": "No plugins found", + "tryAdjustingSearch": "Try adjusting your search terms or browse all plugins", + "noMatchingFilters": "No plugins match your current filters", + "showAllPlugins": "Show All Plugins", + "remaining": "remaining", + "allPlugins": "All Plugins", + "plugin": "plugin", + "plugins": "plugins", + "tags": "Tags:", + "license": "License", + "created": "Created", + "routes": "Routes", + "loadTime": "Load Time", + "endpoints": "endpoint", + "endpoints_plural": "endpoints", + "seconds": "s", + "misc": "Misc", + "installPlugin": "Install Plugin", + "noRoutes": "No API routes defined", + "noWidgets": "No widgets available", + "noAssets": "No assets loaded", + "unnamedPlugin": "Unnamed Plugin", + "defaultVersion": "1.0.0", + "versionPrefix": "v" + }, + "documentation": { + "title": "Documentation", + "overview": "Overview", + "installation": "Installation", + "apiReference": "API Reference", + "codeExamples": "Code Examples", + "practicalExamples": "Practical examples to help you get started with", + "tutorials": "Tutorials", + "faq": "FAQ", + "troubleshooting": "Troubleshooting", + "installationGuide": "Installation Guide", + "followSteps": "Follow these steps to install and configure", + "inEnvironment": "in your KubeStellar environment.", + "keyFeatures": "Key Features", + "requirements": "Requirements", + "welcomeMessage": "Welcome to the comprehensive documentation for", + "extendsCapabilities": "extends KubeStellar's capabilities with advanced features designed to enhance your multi-cluster management experience.", + "powerfulPlugin": "This powerful plugin provides essential functionality for modern Kubernetes environments, offering seamless integration with existing workflows and robust performance monitoring capabilities.", + "advancedMultiCluster": "Advanced multi-cluster synchronization", + "realTimeMonitoring": "Real-time monitoring and alerting", + "automatedScaling": "Automated scaling and optimization", + "securityPolicy": "Security policy enforcement", + "comprehensiveAPI": "Comprehensive API coverage", + "kubestellarVersion": "KubeStellar v1.0.0 or higher", + "kubernetesVersion": "Kubernetes 1.19+", + "ramMinimum": "512MB RAM minimum (1GB recommended)", + "networkConnectivity": "Network connectivity to target clusters", + "validCredentials": "Valid authentication credentials", + "copy": "Copy", + "copied": "Copied!", + "fileFormat": "File format: .tar.gz only", + "maxFileSize": "Maximum file size: 50MB", + "mustContain": "Must contain plugin.yml file", + "validStructure": "Valid plugin structure required" } }, "notFoundPage": { @@ -2252,6 +2682,148 @@ } ] }, + "resources": { + "search": "Search objects...", + "kind": "Kind", + "namespace": "Namespace", + "labels": "Labels", + "labels_plural": "{{count}} labels", + "filterByKind": "Filter by object kind", + "filterByNamespace": "Filter by namespace", + "filterByStatus": "Filter by status", + "filterByLabel": "Filter by label", + "clearFilters": "Clear Filters", + "noLabelsFound": "No labels found", + "noMatchingFilters": "No objects match the current filters", + "title": "Object Explorer", + "selectKind": "Select Kind / Object", + "selectNamespace": "Select Namespace", + "applyFilters": "Apply Filters", + "results": "Results", + "created": "Created", + "noResourcesFound": "No objects found matching the criteria", + "selectResourceAndNamespace": "Select an object kind and namespace to begin", + "refresh": "Refresh", + "toggleFilters": "Toggle filters", + "description": "Explore and manage Kubernetes objects across your clusters", + "autoRefresh": "Auto-refresh", + "viewMode": { + "grid": "Grid View", + "list": "List View", + "table": "Table View", + "gridLabel": "grid view", + "listLabel": "list view", + "tableLabel": "table view" + }, + "objectSelection": "Object Selection & Filters", + "searchPlaceholder": "Search object kinds...", + "quickSearchPlaceholder": "Quick search objects...", + "bulkActions": { + "resourcesSelected": "{{count}} {{objectText}} selected", + "clearSelection": "Clear Selection", + "viewDetails": "View Details", + "export": "Export" + }, + "sorting": { + "sortBy": "Sort by", + "name": "Sort by Name", + "kind": "Sort by Kind", + "namespace": "Sort by Namespace", + "createdAt": "Sort by Created" + }, + "emptyState": { + "readyToExplore": "Ready to explore", + "noResourcesFound": "No objects found", + "noResourcesDescription": "No objects match your current filters. Try adjusting your search criteria or clearing filters.", + "getStartedDescription": "Select an object kind and namespace to begin exploring your Kubernetes objects.", + "getStarted": "Get Started", + "clearFilters": "Clear Filters" + }, + "actions": { + "view": "View", + "viewDetails": "View Details", + "editYaml": "Edit YAML", + "delete": "Delete", + "more": "More" + }, + "filters": { + "activeFilters": "Active Filters:", + "kindFilter": "Kind: {{kind}}", + "namespaceFilter": "Namespace: {{namespace}}", + "labelFilter": "{{key}}: {{value}}", + "clear": "Clear ({{count}})" + }, + "menus": { + "resourceKinds": "Object Kinds ({{count}})", + "namespaces": "Namespaces ({{count}})", + "labels": "Labels ({{count}} keys)", + "noLabelsFound": "No labels found in the current objects", + "active": "Active" + }, + "stats": { + "resourceOverview": "Object Overview", + "topResourceKinds": "Top Object Kinds", + "topNamespaces": "Top Namespaces" + }, + "table": { + "name": "Name", + "kind": "Kind", + "namespace": "Namespace", + "status": "Status", + "age": "Age", + "createdAt": "Created", + "labels": "Labels", + "actions": "Actions" + }, + "preview": { + "objectDetails": "Object Details", + "namespace": "Namespace", + "createdAt": "Created", + "uid": "UID", + "noLabels": "No labels", + "labels": "Labels" + }, + "time": { + "justNow": "Just now", + "hoursAgo": "{{count}}h ago", + "daysAgo": "{{count}}d ago" + }, + "loading": { + "resources": "Loading resources...", + "applying": "Applying filters...", + "refreshing": "Refreshing..." + }, + "errors": { + "loadFailed": "Failed to load resources", + "filterFailed": "Failed to apply filters", + "actionFailed": "Action failed" + }, + "notifications": { + "filtersApplied": "Filters applied successfully", + "resourcesRefreshed": "Resources refreshed successfully" + }, + "subtitle": "Explore and manage Kubernetes resources", + "status": { + "healthy": "Healthy", + "warning": "Warning", + "error": "Error", + "active": "Active", + "unknown": "Unknown", + "running": "Running", + "pending": "Pending", + "failed": "Failed", + "progressing": "Progressing", + "scheduled": "Scheduled", + "waiting": "Waiting", + "ready": "Ready", + "notReady": "Not Ready", + "succeeded": "Succeeded", + "outOfSync": "Out of Sync", + "missing": "Missing", + "synced": "Synced" + }, + "unknown": "Unknown" + }, "validation": { "missingRequiredFields": "Faltan campos obligatorios" } diff --git a/frontend/src/locales/strings.fr.json b/frontend/src/locales/strings.fr.json index 4f48ca78c..0e22a19a7 100644 --- a/frontend/src/locales/strings.fr.json +++ b/frontend/src/locales/strings.fr.json @@ -68,6 +68,102 @@ "items_plural": "{{count}} éléments", "filteredFrom": "filtré à partir de" }, + "admin": { + "users": { + "title": "Gestion des Utilisateurs", + "subtitle": "Utilisateurs du Système", + "description": "Gérer les utilisateurs du système et leurs permissions", + "searchPlaceholder": "Rechercher des utilisateurs par nom, rôle ou permissions...", + "refresh": "Actualiser les Utilisateurs", + "addUser": "Ajouter un Utilisateur", + "noUsers": "Aucun Utilisateur Trouvé", + "noUsersDescription": "Il n'y a pas encore d'utilisateurs dans le système. Cliquez sur 'Ajouter un Utilisateur' pour créer votre premier utilisateur.", + "noPermissions": "Aucune permission attribuée", + "filters": { + "title": "Filtres", + "reset": "Réinitialiser les Filtres", + "role": "Rôle", + "allRoles": "Tous les Rôles", + "permission": "Permission", + "anyPermission": "N'importe quelle Permission", + "permissionLevel": "Niveau de Permission", + "anyLevel": "N'importe quel Niveau", + "sortBy": "Trier Par", + "created": "Date de Création", + "ascending": "Ascendant", + "descending": "Descendant", + "active": "Filtres Actifs", + "roleFilter": "Rôle", + "permissionFilter": "Permission", + "levelFilter": "Niveau", + "searchFilter": "Recherche" + }, + "actions": { + "addUser": "Ajouter un Utilisateur", + "editUser": "Modifier un Utilisateur", + "add": "Ajouter un Utilisateur", + "update": "Mettre à jour l'Utilisateur", + "delete": "Supprimer l'Utilisateur", + "edit": "Modifier", + "deleteUser": "Supprimer l'Utilisateur" + }, + "table": { + "username": "Nom d'Utilisateur", + "role": "Rôle", + "permissions": "Permissions", + "actions": "Actions" + }, + "roles": { + "admin": "Administrateur", + "user": "Utilisateur" + }, + "permissions": { + "users": "Utilisateurs", + "resources": "Ressources", + "system": "Système", + "dashboard": "Tableau de Bord", + "levels": { + "read": "Lecture", + "write": "Écriture", + "none": "Aucun" + } + }, + "form": { + "username": "Nom d'Utilisateur", + "usernamePlaceholder": "Entrez le nom d'utilisateur", + "password": "Mot de Passe", + "passwordPlaceholder": "Entrez le mot de passe", + "passwordOptional": "Mot de Passe (optionnel)", + "passwordOptionalPlaceholder": "Entrez un nouveau mot de passe ou laissez vide", + "confirmPassword": "Confirmer le Mot de Passe", + "confirmPasswordPlaceholder": "Confirmez le mot de passe", + "isAdmin": "Accès Administrateur", + "permissions": "Permissions des Composants", + "cancel": "Annuler", + "optional": "optionnel" + }, + "delete": { + "title": "Supprimer l'Utilisateur", + "confirmTitle": "Confirmer la Suppression", + "confirmMessage": "Êtes-vous sûr de vouloir supprimer l'utilisateur \"{{username}}\" ? Cette action ne peut pas être annulée.", + "confirm": "Supprimer l'Utilisateur" + }, + "errors": { + "fetchFailed": "Échec de la récupération des utilisateurs", + "missingFields": "Veuillez remplir tous les champs requis", + "passwordMismatch": "Les mots de passe ne correspondent pas", + "addFailed": "Échec de l'ajout de l'utilisateur", + "updateFailed": "Échec de la mise à jour de l'utilisateur", + "deleteFailed": "Échec de la suppression de l'utilisateur", + "invalidUsername": "Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets bas et des tirets." + }, + "success": { + "userAdded": "Utilisateur ajouté avec succès", + "userUpdated": "Utilisateur mis à jour avec succès", + "userDeleted": "Utilisateur supprimé avec succès" + } + } + }, "installationPage": { "successSection": { "installed": "est correctement installé et répond aux exigences de version." @@ -110,6 +206,12 @@ "prerequisites": "Prérequis", "title": "Prérequis système", "description": "Assurez-vous que ces outils sont installés avant de continuer", + "kubeflexDescription": "KubeFlex CLI tool (required version ≥ 0.8.0)", + "ocmDescription": "Open Cluster Management CLI (required version between 0.7 and 0.11)", + "helmDescription": "Kubernetes package manager (required version ≥ 3.0.0)", + "kubectlDescription": "Kubernetes command-line tool (required version ≥ 1.27.0)", + "kindDescription": "Tool for running local Kubernetes clusters (required version ≥ 0.20.0)", + "dockerDescription": "Container runtime (required version ≥ 20.0.0)", "status": { "success": "Succès", "warnings": "Avertissements", @@ -119,8 +221,9 @@ "coreRequirements": "Exigences principales", "demoEnvironmentRequirements": "Exigences de l'environnement de démonstration", "buttons": { - "refresh": "Rafraîchir", - "nextInstallation": "Suivant : Installation" + "nextInstallation": "Suivant : Installation", + "checking": "Checking...", + "refresh": "Rafraîchir" } }, "installation": { @@ -198,7 +301,10 @@ "preparingInstructions": "Préparation des instructions d'installation...", "followInstructions": "Suivez les instructions CLI ci-dessous pour installer KubeStellar", "loadInstructionsFailed": "Échec du chargement des instructions d'installation. Veuillez actualiser la page et réessayer.", - "installationDetected": "Installation de KubeStellar détectée ! Redirection vers la page de connexion..." + "installationDetected": "Installation de KubeStellar détectée ! Redirection vers la page de connexion...", + "recheckingPrerequisites": "Rechecking prerequisites...", + "prerequisitesRechecked": "Prerequisites rechecked successfully", + "recheckFailed": "Failed to recheck prerequisites" } }, "header": { @@ -215,7 +321,12 @@ "goToHome": "Aller à la page d'accueil", "logoAlt": "Logo KubeStellar", "themeToggleTip": "Alt+Q pour changer de thème", - "switchTheme": "Passer en mode {{mode}}" + "switchTheme": "Passer en mode {{mode}}", + "switchLanguage": "Switch language", + "selectLanguage": "Select Language", + "enterFullscreen": "Enter fullscreen mode", + "exitFullscreen": "Exit fullscreen mode", + "fullscreen": "Toggle fullscreen mode" }, "login": { "controlPlane": "Plan de contrôle", @@ -341,6 +452,8 @@ "label": "Étiquette", "editvalue": "La clé et la valeur sont toutes deux requises", "manage": "Gérer les étiquettes", + "bulkTooltipDisabled": "Select at least 2 clusters to enable bulk labeling", + "bulkTooltipEnabled": "Manage labels for selected clusters", "clearFilter": "Effacer le filtre", "searchLabelsPlaceholder": "Rechercher des étiquettes...", "bulkEditTitle": "Modifier les étiquettes pour {{count}} clusters", @@ -730,7 +843,17 @@ "expandAll": "Développer tous les nœuds enfants de tous les nœuds parents", "collapseAll": "Réduire tous les nœuds enfants de tous les nœuds parents", "zoomIn": "Agrandir", - "zoomOut": "Rétrécir" + "zoomOut": "Rétrécir", + "resetZoom": "Reset Zoom", + "edgeStyle": "Edge Style", + "curvy": "Curvy", + "square": "Square", + "fullscreen": "Enter Fullscreen", + "exitFullscreen": "Exit Fullscreen" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" }, "nodeLabel": { "labels": "Étiquettes :", @@ -782,15 +905,34 @@ "selectContainer": "Sélectionner un conteneur", "noContainersFound": "Aucun conteneur trouvé" }, + "logs": { + "previousLogs": "Previous Logs", + "currentLogs": "Current Logs", + "selectLogsContainer": "Select logs container" + }, "errors": { "failedLoadClusterDetails": "Échec du chargement des détails du cluster.", "failedLoadDetails": "Échec du chargement des détails de {{type}}.", "apiNotImplemented": "API non implémentée pour la mise à jour du pod « {{resourceName}} »", - "failedFetchContainers": "Échec de la récupération de la liste des conteneurs" + "failedFetchContainers": "Échec de la récupération de la liste des conteneurs", + "failedFetchLogsContainers": "Failed to fetch container list for logs", + "failedConnectExec": "Failed to connect to exec session", + "failedInitExec": "Failed to initialize exec session", + "failedUpdate": "Failed to update manifest", + "resourceNotFound": "Resource not found", + "permissionDenied": "Permission denied", + "invalidManifest": "Invalid manifest format", + "namespaceRequired": "Namespace is required" + }, + "success": { + "manifestUpdated": "Manifest updated successfully" }, "cluster": { "active": "Actif" }, + "exec": { + "connected": "Connected" + }, "noManifest": "Aucun manifeste disponible" }, "treeView": { @@ -815,6 +957,23 @@ "fullscreen": { "toggle": "Basculer en mode plein écran" }, + "zoomControls": { + "groupByResource": "Group By Resource/Kind", + "expandAll": "Expand all the child nodes of all parent nodes", + "collapseAll": "Collapse all the child nodes of all parent nodes", + "zoomIn": "Zoom In", + "zoomOut": "Zoom Out", + "resetZoom": "Reset Zoom", + "edgeStyle": "Edge Style", + "curvy": "Curvy", + "square": "Square", + "fullscreen": "Enter Fullscreen", + "exitFullscreen": "Exit Fullscreen" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" + }, "contextMenu": { "details": "Détails", "delete": "Supprimer", @@ -1178,13 +1337,11 @@ "selectClusters": "Sélectionner les clusters ici", "matches": "Correspondances : {{count}} {{resourceType}}" }, - "labels": { "title": "Étiquettes :", "key": "Clé", "value": "Valeur", - "add": "Ajouter", - "count": "{{count}} étiquettes uniques sur {{total}}" + "add": "Ajouter" }, "creatingConnection": "Création de la connexion :", "previewDialog": { @@ -1645,7 +1802,9 @@ "successWithUser": "Connexion réussie pour l'utilisateur : {{username}}. Redirection vers {{path}}", "invalidCredentials": "Identifiants invalides", "authFailed": "Échec de l'authentification. Veuillez vérifier vos identifiants.", - "noToken": "Aucun jeton reçu du serveur" + "noToken": "Aucun jeton reçu du serveur", + "invalidRequest": "Invalid request. Please check your input and try again.", + "serverError": "Server error. Please try again later." } }, "kubestellarData": { @@ -1783,17 +1942,25 @@ "invalidResponseFormat": "Format de réponse invalide du serveur", "unknownError": "Une erreur inconnue est survenue lors de la récupération des ressources.", "errorLoading": "Erreur lors du chargement des ressources", - "downloadLogs": "Télécharger les journaux", "namespace": "Espace de noms", "created": "Créé", - "filteredByContext": "Filtré par contexte : {{context}}", - "showingResourceCount": "Affichage de {{showing}} sur {{total}} ressources totales", - "resourceStats": "{{raw}} ressources brutes détectées, {{processed}} traitées", + "downloadLogs": "Télécharger les journaux", "pagination": { - "prev": "Précédent", - "next": "Suivant", "showing": "Affichage de {{from}} à {{to}} sur {{total}} entrées", - "filtered": " (filtré par le contexte {{context}})" + "filtered": " (filtré par le contexte {{context}})", + "prev": "Précédent", + "next": "Suivant" + }, + "resourceStats": "{{raw}} ressources brutes détectées, {{processed}} traitées", + "filteredByContext": "Filtré par contexte : {{context}}", + "showingResourceCount": "Affichage de {{showing}} sur {{total}} ressources totales", + "noWorkloads": { + "title": "Aucune charge de travail trouvée", + "noResourcesForContext": "Aucune ressource trouvée pour le contexte {{context}}", + "resourcesFilteredOut": "Des ressources sont disponibles mais filtrées", + "getStarted": "Commencez par créer votre première charge de travail", + "resourcesAvailable": "{{count}} ressources totales disponibles, mais aucune ne correspond au filtre actuel", + "noMatchingFilters": "No resources match the current filters" }, "troubleshooting": { "title": "Essayez ces étapes de dépannage :", @@ -1801,13 +1968,6 @@ "step2": "2. Vérifiez que la configuration CORS du serveur autorise les requêtes depuis http://localhost:5173", "step3": "3. Si le serveur utilise un CORS générique (*), il ne peut pas accepter les requêtes avec des identifiants", "step4": "4. Consultez la console du navigateur pour des messages d'erreur détaillés" - }, - "noWorkloads": { - "title": "Aucune charge de travail trouvée", - "noResourcesForContext": "Aucune ressource trouvée pour le contexte {{context}}", - "resourcesFilteredOut": "Des ressources sont disponibles mais filtrées", - "getStarted": "Commencez par créer votre première charge de travail", - "resourcesAvailable": "{{count}} ressources totales disponibles, mais aucune ne correspond au filtre actuel" } }, "kubeconfigImport": { @@ -1940,13 +2100,6 @@ "arrows": "↑↓", "enter": "↵" }, - "sections": { - "navigation": "Navigation", - "visualizations": "Visualisations", - "help": "Aide", - "account": "Compte", - "admin": "Administration" - }, "commands": { "home": { "title": "Accueil", @@ -1956,9 +2109,13 @@ "title": "Gestionnaire de Plugins", "description": "Gérer et surveiller les plugins de KubeStellar" }, - "clusters": { - "title": "Clusters Gérés", - "description": "Gérer les clusters Kubernetes" + "managedClusters": { + "title": "Managed Clusters", + "description": "Manage Kubernetes clusters" + }, + "Grafana": { + "title": "Grafana Dashboard", + "description": "Grafana Dashboard" }, "workloads": { "title": "Charges de travail", @@ -1993,10 +2150,21 @@ "description": "Se déconnecter de votre compte", "infoMessage": "Vous avez été déconnecté avec succès." }, + "metricsDashboard": { + "title": "Metrics Dashboard", + "description": "Monitor system performance and metrics" + }, "galaxyMarketplace": { "title": "Marché Galaxy KubeStellar", "description": "Découvrez et installez des plugins pour améliorer votre expérience KubeStellar" } + }, + "sections": { + "navigation": "Navigation", + "admin": "Administration", + "visualizations": "Visualisations", + "help": "Aide", + "account": "Compte" } }, "menu": { @@ -2009,12 +2177,14 @@ "items": { "home": "Accueil", "managedClusters": "Clusters Gérés", - "grafana": "Grafana", + "Grafana": "Grafana Dashboard", "stagedWorkloads": "Charges en attente", "bindingPolicies": "Politiques d'assignation", "deployedWorkloads": "Charges déployées", + "resourceExplorer": "Object Explorer", "pluginManager": "Gestionnaire de Plugins", "userManagement": "Gestion des Utilisateurs", + "metricsDashboard": "Metrics Dashboard", "galaxyMarketplace": "Marché Galaxy KubeStellar" } }, @@ -2064,7 +2234,8 @@ "details": "Détails", "uninstall": "Désinstaller", "reload": "Recharger", - "settings": "Paramètres" + "settings": "Paramètres", + "feedback": "Feedback" } }, "details": { @@ -2099,10 +2270,16 @@ "title": "Confirmer la désactivation du plugin", "message": "La désactivation de \"{{name}}\" arrêtera toutes les fonctionnalités du plugin. Vous pourrez le réactiver plus tard.", "confirm": "Oui, désactiver" + }, + "enable": { + "title": "Confirm Plugin Enable", + "message": "Enabling \"{{name}}\" will activate all plugin functionality and make it available for use.", + "confirm": "Yes, Enable" } }, "marketplace": { "title": "Marketplace de Plugins", + "subtitle": "Discover and install plugins to enhance your KubeStellar experience", "browse": "Parcourir les plugins disponibles", "featured": "Plugins en vedette", "categories": "Catégories", @@ -2128,100 +2305,352 @@ } } }, - "admin": { - "users": { - "title": "Gestion des Utilisateurs", - "subtitle": "Utilisateurs du Système", - "description": "Gérer les utilisateurs du système et leurs permissions", - "searchPlaceholder": "Rechercher des utilisateurs par nom, rôle ou permissions...", - "refresh": "Actualiser les Utilisateurs", - "addUser": "Ajouter un Utilisateur", - "noUsers": "Aucun Utilisateur Trouvé", - "noUsersDescription": "Il n'y a pas encore d'utilisateurs dans le système. Cliquez sur 'Ajouter un Utilisateur' pour créer votre premier utilisateur.", - "noPermissions": "Aucune permission attribuée", - "filters": { - "title": "Filtres", - "reset": "Réinitialiser les Filtres", - "role": "Rôle", - "allRoles": "Tous les Rôles", - "permission": "Permission", - "anyPermission": "N'importe quelle Permission", - "permissionLevel": "Niveau de Permission", - "anyLevel": "N'importe quel Niveau", - "sortBy": "Trier Par", - "created": "Date de Création", - "ascending": "Ascendant", - "descending": "Descendant", - "active": "Filtres Actifs", - "roleFilter": "Rôle", - "permissionFilter": "Permission", - "levelFilter": "Niveau", - "searchFilter": "Recherche" + "marketplace": { + "title": "KubeStellar Galaxy Marketplace", + "subtitle": "Discover and install plugins to enhance your KubeStellar experience", + "searchPlaceholder": "Search plugins, authors, categories...", + "filters": "Filters", + "sortPopular": "Most Popular", + "sortRating": "Highest Rated", + "sortNewest": "Recently Added", + "searchResults": "Search Results", + "allPlugins": "All Plugins", + "clearFilters": "Clear Filters", + "loadMore": "Load More Plugins", + "adminPanel": "Admin Panel", + "categories": { + "all": "All Plugins", + "management": "Management", + "monitoring": "Monitoring", + "security": "Security", + "networking": "Networking", + "storage": "Storage", + "database": "Database", + "ai": "AI & Machine Learning", + "devops": "DevOps", + "automation": "Automation", + "integration": "Integration", + "analytics": "Analytics", + "backup": "Backup & Recovery", + "compliance": "Compliance", + "testing": "Testing", + "development": "Development Tools" + }, + "plugin": { + "status": { + "active": "Active", + "inactive": "Inactive", + "loading": "Loading", + "error": "Error", + "installed": "Installed", + "notInstalled": "Not Installed" }, "actions": { - "addUser": "Ajouter un Utilisateur", - "editUser": "Modifier un Utilisateur", - "add": "Ajouter un Utilisateur", - "update": "Mettre à jour l'Utilisateur", - "delete": "Supprimer l'Utilisateur", - "edit": "Modifier", - "deleteUser": "Supprimer l'Utilisateur" - }, - "table": { - "username": "Nom d'Utilisateur", - "role": "Rôle", - "permissions": "Permissions", - "actions": "Actions" - }, - "roles": { - "admin": "Administrateur", - "user": "Utilisateur" - }, - "permissions": { - "users": "Utilisateurs", - "resources": "Ressources", - "system": "Système", - "dashboard": "Tableau de Bord", - "levels": { - "read": "Lecture", - "write": "Écriture", - "none": "Aucun" - } + "install": "Install", + "uninstall": "Uninstall", + "enable": "Enable", + "disable": "Disable", + "update": "Update", + "viewDetails": "View Details", + "download": "Download", + "rate": "Rate", + "review": "Review", + "share": "Share", + "report": "Report Issue" + }, + "details": { + "overview": "Overview", + "details": "Details", + "feedback": "Feedback", + "documentation": "Documentation", + "dependencies": "Dependencies", + "reviews": "Reviews", + "changelog": "Changelog", + "license": "License", + "author": "Author", + "version": "Version", + "lastUpdated": "Last Updated", + "createdAt": "Created At", + "downloads": "Downloads", + "rating": "Rating", + "category": "Category", + "tags": "Tags", + "size": "Size", + "compatibility": "Compatibility", + "requirements": "Requirements", + "installation": "Installation", + "configuration": "Configuration", + "usage": "Usage", + "troubleshooting": "Troubleshooting" + }, + "feedback": { + "title": "Plugin Feedback", + "rating": "Rating", + "comment": "Comment", + "submit": "Submit Feedback", + "submitting": "Submitting...", + "success": "Feedback submitted successfully", + "error": "Failed to submit feedback", + "placeholder": "Tell us about your experience with this plugin...", + "ratingRequired": "Please provide a rating", + "commentRequired": "Please provide a comment" + }, + "installation": { + "title": "Installation", + "installing": "Installing...", + "success": "Plugin installed successfully", + "error": "Failed to install plugin", + "confirm": "Are you sure you want to install this plugin?", + "requirements": "Requirements", + "dependencies": "Dependencies", + "steps": "Installation Steps", + "verification": "Verification" + } + }, + "featured": { + "title": "Featured Plugins", + "subtitle": "Hand-picked plugins for the best experience", + "viewAll": "View All Featured", + "noFeatured": "No featured plugins available", + "loading": "Loading featured plugins..." + }, + "admin": { + "title": "Marketplace Administration", + "overview": "Overview", + "plugins": "Plugins", + "users": "Users", + "settings": "Settings", + "stats": { + "totalPlugins": "Total Plugins", + "pendingReviews": "Pending Reviews", + "totalDownloads": "Total Downloads", + "activeUsers": "Active Users" }, - "form": { - "username": "Nom d'Utilisateur", - "usernamePlaceholder": "Entrez le nom d'utilisateur", - "password": "Mot de Passe", - "passwordPlaceholder": "Entrez le mot de passe", - "passwordOptional": "Mot de Passe (optionnel)", - "passwordOptionalPlaceholder": "Entrez un nouveau mot de passe ou laissez vide", - "confirmPassword": "Confirmer le Mot de Passe", - "confirmPasswordPlaceholder": "Confirmez le mot de passe", - "isAdmin": "Accès Administrateur", - "permissions": "Permissions des Composants", - "cancel": "Annuler", - "optional": "optionnel" + "actions": { + "uploadPlugin": "Upload Plugin", + "deletePlugin": "Delete Plugin", + "approvePlugin": "Approve Plugin", + "rejectPlugin": "Reject Plugin", + "featurePlugin": "Feature Plugin", + "unfeaturePlugin": "Unfeature Plugin" + }, + "upload": { + "title": "Upload New Plugin", + "selectFile": "Select Plugin File", + "dragDrop": "Drag & Drop plugin file here", + "supportedFormats": "Supported formats: .tar.gz, .zip", + "maxSize": "Maximum file size: 100MB", + "uploading": "Uploading...", + "success": "Plugin uploaded successfully", + "error": "Failed to upload plugin" }, "delete": { - "title": "Supprimer l'Utilisateur", - "confirmTitle": "Confirmer la Suppression", - "confirmMessage": "Êtes-vous sûr de vouloir supprimer l'utilisateur \"{{username}}\" ? Cette action ne peut pas être annulée.", - "confirm": "Supprimer l'Utilisateur" - }, - "errors": { - "fetchFailed": "Échec de la récupération des utilisateurs", - "missingFields": "Veuillez remplir tous les champs requis", - "passwordMismatch": "Les mots de passe ne correspondent pas", - "addFailed": "Échec de l'ajout de l'utilisateur", - "updateFailed": "Échec de la mise à jour de l'utilisateur", - "deleteFailed": "Échec de la suppression de l'utilisateur", - "invalidUsername": "Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets bas et des tirets." - }, - "success": { - "userAdded": "Utilisateur ajouté avec succès", - "userUpdated": "Utilisateur mis à jour avec succès", - "userDeleted": "Utilisateur supprimé avec succès" - } + "title": "Delete Plugin", + "confirm": "Are you sure you want to delete \"{{name}}\"? This action cannot be undone.", + "deleting": "Deleting...", + "success": "Plugin deleted successfully", + "error": "Failed to delete plugin" + }, + "quickActions": "Quick Actions", + "uploadNewPlugin": "Upload New Plugin", + "reviewPlugins": "Review Plugins", + "searchPlugins": "Search plugins...", + "allStatus": "All Status", + "active": "Active", + "inactive": "Inactive", + "loadingPlugins": "Loading plugins...", + "noPluginsFound": "No plugins found.", + "userManagement": "User Management", + "userManagementComingSoon": "User management features coming soon.", + "adminSettings": "Admin Settings", + "settingsComingSoon": "Settings panel coming soon.", + "marketplaceManagement": "Marketplace Management", + "adminPanel": "Admin Panel" + }, + "search": { + "noResults": "No plugins found", + "noResultsDescription": "Try adjusting your search terms or browse all plugins", + "clearSearch": "Clear search", + "searching": "Searching...", + "resultsCount": "{{count}} plugin{{count, plural, one {} other {s}}} found" + }, + "errors": { + "failedToLoad": "Failed to load marketplace data", + "failedToInstall": "Failed to install plugin", + "failedToUninstall": "Failed to uninstall plugin", + "failedToEnable": "Failed to enable plugin", + "failedToDisable": "Failed to disable plugin", + "failedToSubmitFeedback": "Failed to submit feedback", + "pluginNotFound": "Plugin not found", + "installationFailed": "Installation failed", + "networkError": "Network error occurred", + "serverError": "Server error occurred" + }, + "success": { + "pluginInstalled": "Plugin installed successfully", + "pluginUninstalled": "Plugin uninstalled successfully", + "pluginEnabled": "Plugin enabled successfully", + "pluginDisabled": "Plugin disabled successfully", + "feedbackSubmitted": "Feedback submitted successfully", + "pluginUpdated": "Plugin updated successfully" + }, + "loading": { + "loadingPlugins": "Loading amazing plugins...", + "discoveringGalaxy": "Discovering the galaxy of possibilities", + "loadingMarketplace": "Loading marketplace...", + "loadingPlugin": "Loading plugin details...", + "installingPlugin": "Installing plugin...", + "uninstallingPlugin": "Uninstalling plugin..." + }, + "empty": { + "noPlugins": "No plugins found", + "noPluginsDescription": "No plugins match your current filters", + "showAllPlugins": "Show All Plugins", + "noFeaturedPlugins": "No featured plugins available", + "noCategories": "No categories available", + "noSearchResults": "No search results found" + }, + "backToMarketplace": "Back to Marketplace", + "enable": "Enable", + "disable": "Disable", + "install": "Install", + "uninstall": "Uninstall", + "by": "By", + "overview": "Overview", + "details": "Details", + "feedback": "Feedback", + "docSection": "Documentation", + "description": "Description", + "dependencies": "Dependencies", + "keyFeatures": "Key Features", + "technicalDetails": "Technical Details", + "generalInfo": "General Information", + "version": "Version", + "lastUpdated": "Last Updated", + "author": "Author", + "license": "License", + "category": "Category", + "requirements": "Requirements", + "kubestellarVersion": "KubeStellar Version", + "platforms": "Platforms", + "fileSize": "File Size", + "pluginIdentifiers": "Plugin Identifiers", + "tags": "Tags", + "userFeedback": "User Feedback", + "leaveFeedback": "Leave Feedback", + "yourFeedback": "Your Feedback", + "rating": "Rating", + "comments": "Comments", + "delete": { + "confirmTitle": "Delete Plugin", + "confirmLabel": "Type the plugin name to confirm:", + "confirmPlaceholder": "Enter plugin name here", + "mismatch": "Plugin name does not match", + "confirmed": "Plugin name confirmed", + "deleteButton": "Delete Plugin", + "deleting": "Deleting Plugin...", + "deletingMessage": "Please wait while we remove your plugin.", + "success": "Plugin Deleted Successfully!", + "error": "Delete Failed", + "tryAgain": "Try Again", + "title": "Delete Plugin" + }, + "upload": { + "dragDrop": "Drag and drop your plugin here", + "browseFiles": "Browse Files", + "requirements": "Upload Requirements:", + "reviewFile": "Review Your Plugin", + "uploadPlugin": "Upload Plugin", + "uploading": "Uploading Plugin...", + "success": "Plugin Uploaded Successfully!", + "error": "Upload Failed", + "tryAgain": "Try Again", + "title": "Upload Plugin", + "supportedFormat": "or click to browse. Supported format: .tar.gz", + "confirmUpload": "Please confirm the details below before uploading", + "processingFile": "Processing your plugin file. This may take a moment.", + "successMessage": "Your plugin has been uploaded and is now available in the marketplace.", + "errorMessage": "Something went wrong while uploading your plugin.", + "invalidFileType": "Invalid file type. Please upload a .tar.gz file.", + "fileTooLarge": "File size too large. Maximum size is 50MB." + }, + "common": { + "featured": "FEATURED", + "viewDetails": "View Details", + "installNow": "Install Now", + "installing": "Installing...", + "installed": "Installed", + "uninstalling": "Uninstalling...", + "rating": "rating", + "downloads": "downloads", + "updated": "Updated", + "recently": "recently", + "by": "by", + "unknownAuthor": "Unknown author", + "noDescription": "No description available", + "premiumPlugins": "Discover Premium Plugins", + "enhanceWorkflow": "Enhance your workflow with powerful plugins designed specifically for Kubernetes and cloud-native environments.", + "exploreMarketplace": "Explore Marketplace", + "suggestedCategories": ["Monitoring", "Security", "Development", "Deployment", "Storage"], + "noPluginsFound": "No plugins found", + "tryAdjustingSearch": "Try adjusting your search terms or browse all plugins", + "noMatchingFilters": "No plugins match your current filters", + "showAllPlugins": "Show All Plugins", + "remaining": "remaining", + "allPlugins": "All Plugins", + "plugin": "plugin", + "plugins": "plugins", + "tags": "Tags:", + "license": "License", + "created": "Created", + "routes": "Routes", + "loadTime": "Load Time", + "endpoints": "endpoint", + "endpoints_plural": "endpoints", + "seconds": "s", + "misc": "Misc", + "installPlugin": "Install Plugin", + "noRoutes": "No API routes defined", + "noWidgets": "No widgets available", + "noAssets": "No assets loaded", + "unnamedPlugin": "Unnamed Plugin", + "defaultVersion": "1.0.0", + "versionPrefix": "v" + }, + "documentation": { + "title": "Documentation", + "overview": "Overview", + "installation": "Installation", + "apiReference": "API Reference", + "codeExamples": "Code Examples", + "practicalExamples": "Practical examples to help you get started with", + "tutorials": "Tutorials", + "faq": "FAQ", + "troubleshooting": "Troubleshooting", + "installationGuide": "Installation Guide", + "followSteps": "Follow these steps to install and configure", + "inEnvironment": "in your KubeStellar environment.", + "keyFeatures": "Key Features", + "requirements": "Requirements", + "welcomeMessage": "Welcome to the comprehensive documentation for", + "extendsCapabilities": "extends KubeStellar's capabilities with advanced features designed to enhance your multi-cluster management experience.", + "powerfulPlugin": "This powerful plugin provides essential functionality for modern Kubernetes environments, offering seamless integration with existing workflows and robust performance monitoring capabilities.", + "advancedMultiCluster": "Advanced multi-cluster synchronization", + "realTimeMonitoring": "Real-time monitoring and alerting", + "automatedScaling": "Automated scaling and optimization", + "securityPolicy": "Security policy enforcement", + "comprehensiveAPI": "Comprehensive API coverage", + "kubestellarVersion": "KubeStellar v1.0.0 or higher", + "kubernetesVersion": "Kubernetes 1.19+", + "ramMinimum": "512MB RAM minimum (1GB recommended)", + "networkConnectivity": "Network connectivity to target clusters", + "validCredentials": "Valid authentication credentials", + "copy": "Copy", + "copied": "Copied!", + "fileFormat": "File format: .tar.gz only", + "maxFileSize": "Maximum file size: 50MB", + "mustContain": "Must contain plugin.yml file", + "validStructure": "Valid plugin structure required" } }, "notFoundPage": { @@ -2253,6 +2682,148 @@ } ] }, + "resources": { + "search": "Search objects...", + "kind": "Kind", + "namespace": "Namespace", + "labels": "Labels", + "labels_plural": "{{count}} labels", + "filterByKind": "Filter by object kind", + "filterByNamespace": "Filter by namespace", + "filterByStatus": "Filter by status", + "filterByLabel": "Filter by label", + "clearFilters": "Clear Filters", + "noLabelsFound": "No labels found", + "noMatchingFilters": "No objects match the current filters", + "title": "Object Explorer", + "selectKind": "Select Kind / Object", + "selectNamespace": "Select Namespace", + "applyFilters": "Apply Filters", + "results": "Results", + "created": "Created", + "noResourcesFound": "No objects found matching the criteria", + "selectResourceAndNamespace": "Select an object kind and namespace to begin", + "refresh": "Refresh", + "toggleFilters": "Toggle filters", + "description": "Explore and manage Kubernetes objects across your clusters", + "autoRefresh": "Auto-refresh", + "viewMode": { + "grid": "Grid View", + "list": "List View", + "table": "Table View", + "gridLabel": "grid view", + "listLabel": "list view", + "tableLabel": "table view" + }, + "objectSelection": "Object Selection & Filters", + "searchPlaceholder": "Search object kinds...", + "quickSearchPlaceholder": "Quick search objects...", + "bulkActions": { + "resourcesSelected": "{{count}} {{objectText}} selected", + "clearSelection": "Clear Selection", + "viewDetails": "View Details", + "export": "Export" + }, + "sorting": { + "sortBy": "Sort by", + "name": "Sort by Name", + "kind": "Sort by Kind", + "namespace": "Sort by Namespace", + "createdAt": "Sort by Created" + }, + "emptyState": { + "readyToExplore": "Ready to explore", + "noResourcesFound": "No objects found", + "noResourcesDescription": "No objects match your current filters. Try adjusting your search criteria or clearing filters.", + "getStartedDescription": "Select an object kind and namespace to begin exploring your Kubernetes objects.", + "getStarted": "Get Started", + "clearFilters": "Clear Filters" + }, + "actions": { + "view": "View", + "viewDetails": "View Details", + "editYaml": "Edit YAML", + "delete": "Delete", + "more": "More" + }, + "filters": { + "activeFilters": "Active Filters:", + "kindFilter": "Kind: {{kind}}", + "namespaceFilter": "Namespace: {{namespace}}", + "labelFilter": "{{key}}: {{value}}", + "clear": "Clear ({{count}})" + }, + "menus": { + "resourceKinds": "Object Kinds ({{count}})", + "namespaces": "Namespaces ({{count}})", + "labels": "Labels ({{count}} keys)", + "noLabelsFound": "No labels found in the current objects", + "active": "Active" + }, + "stats": { + "resourceOverview": "Object Overview", + "topResourceKinds": "Top Object Kinds", + "topNamespaces": "Top Namespaces" + }, + "table": { + "name": "Name", + "kind": "Kind", + "namespace": "Namespace", + "status": "Status", + "age": "Age", + "createdAt": "Created", + "labels": "Labels", + "actions": "Actions" + }, + "preview": { + "objectDetails": "Object Details", + "namespace": "Namespace", + "createdAt": "Created", + "uid": "UID", + "noLabels": "No labels", + "labels": "Labels" + }, + "time": { + "justNow": "Just now", + "hoursAgo": "{{count}}h ago", + "daysAgo": "{{count}}d ago" + }, + "loading": { + "resources": "Loading resources...", + "applying": "Applying filters...", + "refreshing": "Refreshing..." + }, + "errors": { + "loadFailed": "Failed to load resources", + "filterFailed": "Failed to apply filters", + "actionFailed": "Action failed" + }, + "notifications": { + "filtersApplied": "Filters applied successfully", + "resourcesRefreshed": "Resources refreshed successfully" + }, + "subtitle": "Explore and manage Kubernetes resources", + "status": { + "healthy": "Healthy", + "warning": "Warning", + "error": "Error", + "active": "Active", + "unknown": "Unknown", + "running": "Running", + "pending": "Pending", + "failed": "Failed", + "progressing": "Progressing", + "scheduled": "Scheduled", + "waiting": "Waiting", + "ready": "Ready", + "notReady": "Not Ready", + "succeeded": "Succeeded", + "outOfSync": "Out of Sync", + "missing": "Missing", + "synced": "Synced" + }, + "unknown": "Unknown" + }, "validation": { "missingRequiredFields": "Champs obligatoires manquants" } diff --git a/frontend/src/locales/strings.hi.json b/frontend/src/locales/strings.hi.json index 6752e5a4a..1a95bac1d 100644 --- a/frontend/src/locales/strings.hi.json +++ b/frontend/src/locales/strings.hi.json @@ -221,9 +221,9 @@ "coreRequirements": "मुख्य आवश्यकताएं", "demoEnvironmentRequirements": "डेमो वातावरण आवश्यकताएं", "buttons": { - "refresh": "रीफ्रेश करें", "nextInstallation": "आगे: इंस्टॉलेशन", - "checking": "जांच रहे हैं..." + "checking": "जांच रहे हैं...", + "refresh": "रीफ्रेश करें" } }, "installation": { @@ -452,6 +452,8 @@ "label": "लेबल", "editvalue": "Key और value दोनों आवश्यक हैं", "manage": "लेबल्स प्रबंधित करें", + "bulkTooltipDisabled": "बल्क लेबलिंग सक्षम करने के लिए कम से कम 2 क्लस्टर्स चुनें", + "bulkTooltipEnabled": "चयनित क्लस्टर्स के लिए लेबल्स प्रबंधित करें", "clearFilter": "फ़िल्टर साफ़ करें", "searchLabelsPlaceholder": "लेबल्स खोजें...", "bulkEditTitle": "{{count}} क्लस्टर्स के लिए लेबल्स संपादित करें", @@ -501,9 +503,7 @@ "cannotDeleteUsed": "लेबल्स Binding Policy में उपयोग हो रहे हैं और हटाए नहीं जा सकते। कृपया पहले policy हटाएं।", "bulkUpdateSuccess": "सभी {{count}} क्लस्टर्स के लिए लेबल्स अपडेट किए गए", "bulkUpdatePartial": "{{success}} क्लस्टर्स के लिए लेबल्स अपडेट किए गए, {{failures}} क्लस्टर्स के लिए विफल", - "bulkUpdateFail": "सभी {{count}} क्लस्टर्स के लिए लेबल्स अपडेट करने में विफल", - "bulkTooltipDisabled": "बल्क लेबलिंग सक्षम करने के लिए कम से कम 2 क्लस्टर्स चुनें", - "bulkTooltipEnabled": "चयनित क्लस्टर्स के लिए लेबल्स प्रबंधित करें" + "bulkUpdateFail": "सभी {{count}} क्लस्टर्स के लिए लेबल्स अपडेट करने में विफल" }, "dialog": { "selectMultipleClusters": "कई क्लस्टर्स चुनें", @@ -851,6 +851,10 @@ "fullscreen": "पूर्ण स्क्रीन में जाएं", "exitFullscreen": "पूर्ण स्क्रीन से बाहर निकलें" }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" + }, "nodeLabel": { "labels": "लेबल्स:", "noLabels": "कोई लेबल्स नहीं" @@ -920,16 +924,16 @@ "invalidManifest": "अमान्य मैनिफेस्ट प्रारूप", "namespaceRequired": "नेमस्पेस आवश्यक है" }, - "cluster": { - "active": "सक्रिय" - }, - "noManifest": "कोई manifest उपलब्ध नहीं", "success": { "manifestUpdated": "मैनिफेस्ट सफलतापूर्वक अपडेट किया गया" }, + "cluster": { + "active": "सक्रिय" + }, "exec": { "connected": "कनेक्टेड" - } + }, + "noManifest": "कोई manifest उपलब्ध नहीं" }, "treeView": { "title": "वर्कलोड्स प्रबंधित करें", @@ -953,17 +957,6 @@ "fullscreen": { "toggle": "पूर्ण स्क्रीन view टॉगल करें" }, - "contextMenu": { - "details": "विवरण", - "delete": "हटाएं", - "edit": "संपादित करें", - "logs": "लॉग्स" - }, - "deleteDialog": { - "title": "संसाधन हटाने की पुष्टि करें", - "message": "क्या आप वाकई \"{{name}}\" को हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती।", - "confirm": "हाँ, हटाएं" - }, "zoomControls": { "groupByResource": "Resource/Kind द्वारा समूहीकृत करें", "expandAll": "सभी parent nodes के सभी child nodes को विस्तृत करें", @@ -976,6 +969,21 @@ "square": "वर्गाकार", "fullscreen": "पूर्ण स्क्रीन में जाएं", "exitFullscreen": "पूर्ण स्क्रीन से बाहर निकलें" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" + }, + "contextMenu": { + "details": "विवरण", + "delete": "हटाएं", + "edit": "संपादित करें", + "logs": "लॉग्स" + }, + "deleteDialog": { + "title": "संसाधन हटाने की पुष्टि करें", + "message": "क्या आप वाकई \"{{name}}\" को हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती।", + "confirm": "हाँ, हटाएं" } }, "quickConnect": { @@ -1934,25 +1942,18 @@ "invalidResponseFormat": "सर्वर से अमान्य प्रतिक्रिया प्रारूप", "unknownError": "संसाधन प्राप्त करते समय अज्ञात त्रुटि हुई।", "errorLoading": "संसाधन लोड करने में त्रुटि", - "downloadLogs": "लॉग्स डाउनलोड करें", "namespace": "Namespace", "created": "बनाया गया", - "filteredByContext": "Context द्वारा फ़िल्टर किया गया: {{context}}", - "showingResourceCount": "कुल {{total}} में से {{showing}} संसाधन दिखा रहे हैं", - "resourceStats": "{{raw}} raw संसाधन detected, {{processed}} प्रसंस्करित", + "downloadLogs": "लॉग्स डाउनलोड करें", "pagination": { - "prev": "पिछला", - "next": "अगला", "showing": "{{total}} entries में से {{from}} से {{to}} दिखा रहे हैं", - "filtered": " ({{context}} context द्वारा फ़िल्टर किया गया)" - }, - "troubleshooting": { - "title": "ये troubleshooting चरण आज़माएं:", - "step1": "1. जांचें कि backend server http://localhost:4000 पर चल रहा है", - "step2": "2. सत्यापित करें कि सर्वर का CORS configuration http://localhost:5173 से requests की अनुमति देता है", - "step3": "3. यदि सर्वर wildcard (*) CORS का उपयोग करता है, तो यह credentials के साथ requests स्वीकार नहीं कर सकता", - "step4": "4. विस्तृत त्रुटि संदेशों के लिए browser console जांचें" + "filtered": " ({{context}} context द्वारा फ़िल्टर किया गया)", + "prev": "पिछला", + "next": "अगला" }, + "resourceStats": "{{raw}} raw संसाधन detected, {{processed}} प्रसंस्करित", + "filteredByContext": "Context द्वारा फ़िल्टर किया गया: {{context}}", + "showingResourceCount": "कुल {{total}} में से {{showing}} संसाधन दिखा रहे हैं", "noWorkloads": { "title": "कोई वर्कलोड्स नहीं मिले", "noResourcesForContext": "{{context}} context के लिए कोई संसाधन नहीं मिले", @@ -1960,6 +1961,13 @@ "getStarted": "अपना पहला वर्कलोड बनाकर शुरुआत करें", "resourcesAvailable": "{{count}} कुल संसाधन उपलब्ध हैं, लेकिन कोई वर्तमान फ़िल्टर से मेल नहीं खाता", "noMatchingFilters": "वर्तमान फ़िल्टर्स से कोई संसाधन मेल नहीं खाते" + }, + "troubleshooting": { + "title": "ये troubleshooting चरण आज़माएं:", + "step1": "1. जांचें कि backend server http://localhost:4000 पर चल रहा है", + "step2": "2. सत्यापित करें कि सर्वर का CORS configuration http://localhost:5173 से requests की अनुमति देता है", + "step3": "3. यदि सर्वर wildcard (*) CORS का उपयोग करता है, तो यह credentials के साथ requests स्वीकार नहीं कर सकता", + "step4": "4. विस्तृत त्रुटि संदेशों के लिए browser console जांचें" } }, "kubeconfigImport": { @@ -2101,6 +2109,10 @@ "title": "प्लगइन मैनेजर", "description": "KubeStellar प्लगइन्स प्रबंधित और निगरानी करें" }, + "managedClusters": { + "title": "प्रबंधित क्लस्टर", + "description": "कुबेरनेट्स क्लस्टर प्रबंधित करें" + }, "Grafana": { "title": "ग्राफाना डैशबोर्ड", "description": "ग्राफाना डैशबोर्ड खोलें" @@ -2138,18 +2150,13 @@ "description": "अपने खाते से साइन आउट करें", "infoMessage": "आपको सफलतापूर्वक लॉग आउट कर दिया गया है।" }, - "galaxyMarketplace": { - "title": "गैलेक्सी मार्केटप्लेस", - "description": "गैलेक्सी मार्केटप्लेस से प्लगइन्स खोजें और इंस्टॉल करें" - }, - "managedClusters": { - "title": "प्रबंधित क्लस्टर", - "description": "कुबेरनेट्स क्लस्टर प्रबंधित करें" - }, - "metricsDashboard": { "title": "मेट्रिक्स डैशबोर्ड", "description": "सिस्टम प्रदर्शन और मेट्रिक्स मॉनिटर करें" + }, + "galaxyMarketplace": { + "title": "गैलेक्सी मार्केटप्लेस", + "description": "गैलेक्सी मार्केटप्लेस से प्लगइन्स खोजें और इंस्टॉल करें" } }, "sections": { @@ -2169,16 +2176,16 @@ }, "items": { "home": "होम", + "managedClusters": "प्रबंधित क्लस्टर", "Grafana": "ग्राफाना डैशबोर्ड", "stagedWorkloads": "स्टेज्ड वर्कलोड्स", "bindingPolicies": "बाइंडिंग नीतियाँ", "deployedWorkloads": "परिनियोजित वर्कलोड्स", + "resourceExplorer": "ऑब्जेक्ट एक्सप्लोरर", "pluginManager": "प्लगइन मैनेजर", "userManagement": "उपयोगकर्ता प्रबंधन", "metricsDashboard": "मेट्रिक्स डैशबोर्ड", - "galaxyMarketplace": "गैलेक्सी मार्केटप्लेस", - "managedClusters": "प्रबंधित क्लस्टर", - "resourceExplorer": "ऑब्जेक्ट एक्सप्लोरर" + "galaxyMarketplace": "गैलेक्सी मार्केटप्लेस" } }, "plugins": { @@ -2512,6 +2519,7 @@ "overview": "अवलोकन", "details": "विवरण", "feedback": "प्रतिक्रिया", + "docSection": "Documentation", "description": "विवरण", "dependencies": "निर्भरताएं", "keyFeatures": "मुख्य विशेषताएं", @@ -2674,9 +2682,6 @@ } ] }, - "validation": { - "missingRequiredFields": "आवश्यक फ़ील्ड्स गायब हैं" - }, "resources": { "search": "संसाधन खोजें...", "kind": "प्रकार", @@ -2818,5 +2823,8 @@ "synced": "सिंक किया गया" }, "unknown": "अज्ञात" + }, + "validation": { + "missingRequiredFields": "आवश्यक फ़ील्ड्स गायब हैं" } } diff --git a/frontend/src/locales/strings.it.json b/frontend/src/locales/strings.it.json index fc33b97ad..f5d82efbf 100644 --- a/frontend/src/locales/strings.it.json +++ b/frontend/src/locales/strings.it.json @@ -206,6 +206,12 @@ "prerequisites": "Prerequisiti", "title": "Prerequisiti di sistema", "description": "Assicurati che questi strumenti siano installati prima di procedere", + "kubeflexDescription": "KubeFlex CLI tool (required version ≥ 0.8.0)", + "ocmDescription": "Open Cluster Management CLI (required version between 0.7 and 0.11)", + "helmDescription": "Kubernetes package manager (required version ≥ 3.0.0)", + "kubectlDescription": "Kubernetes command-line tool (required version ≥ 1.27.0)", + "kindDescription": "Tool for running local Kubernetes clusters (required version ≥ 0.20.0)", + "dockerDescription": "Container runtime (required version ≥ 20.0.0)", "status": { "success": "Successo", "warnings": "Avvertenze", @@ -215,8 +221,9 @@ "coreRequirements": "Requisiti principali", "demoEnvironmentRequirements": "Requisiti ambiente demo", "buttons": { - "refresh": "Ricarica", - "nextInstallation": "Avanti: Installazione" + "nextInstallation": "Avanti: Installazione", + "checking": "Checking...", + "refresh": "Ricarica" } }, "installation": { @@ -294,7 +301,10 @@ "preparingInstructions": "Preparazione delle istruzioni di installazione…", "followInstructions": "Segui le istruzioni CLI qui sotto per installare KubeStellar", "loadInstructionsFailed": "Caricamento istruzioni fallito. Ricarica la pagina e riprova.", - "installationDetected": "Installazione di KubeStellar rilevata! Reindirizzamento alla pagina di login…" + "installationDetected": "Installazione di KubeStellar rilevata! Reindirizzamento alla pagina di login…", + "recheckingPrerequisites": "Rechecking prerequisites...", + "prerequisitesRechecked": "Prerequisites rechecked successfully", + "recheckFailed": "Failed to recheck prerequisites" } }, "header": { @@ -311,7 +321,12 @@ "goToHome": "Vai alla pagina iniziale", "logoAlt": "Logo KubeStellar", "themeToggleTip": "Alt+Q per cambiare tema", - "switchTheme": "Passa alla modalità {{mode}}" + "switchTheme": "Passa alla modalità {{mode}}", + "switchLanguage": "Switch language", + "selectLanguage": "Select Language", + "enterFullscreen": "Enter fullscreen mode", + "exitFullscreen": "Exit fullscreen mode", + "fullscreen": "Toggle fullscreen mode" }, "login": { "controlPlane": "Pannello di Controllo", @@ -437,6 +452,8 @@ "label": "Etichetta", "editvalue": "Sono richiesti sia chiave che valore", "manage": "Gestisci etichette", + "bulkTooltipDisabled": "Select at least 2 clusters to enable bulk labeling", + "bulkTooltipEnabled": "Manage labels for selected clusters", "clearFilter": "Cancella filtro", "searchLabelsPlaceholder": "Cerca etichette…", "bulkEditTitle": "Modifica etichette per {{count}} cluster", @@ -826,7 +843,17 @@ "expandAll": "Espandi tutti i nodi figli", "collapseAll": "Comprimi tutti i nodi figli", "zoomIn": "Ingrandisci", - "zoomOut": "Rimpicciolisci" + "zoomOut": "Rimpicciolisci", + "resetZoom": "Reset Zoom", + "edgeStyle": "Edge Style", + "curvy": "Curvy", + "square": "Square", + "fullscreen": "Enter Fullscreen", + "exitFullscreen": "Exit Fullscreen" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" }, "nodeLabel": { "labels": "Etichette:", @@ -888,11 +915,24 @@ "failedLoadDetails": "Caricamento dettagli di {{type}} fallito.", "apiNotImplemented": "API non implementata per l'aggiornamento del pod \"{{resourceName}}\"", "failedFetchContainers": "Recupero elenco container fallito", - "failedFetchLogsContainers": "Recupero elenco container per log fallito" + "failedFetchLogsContainers": "Recupero elenco container per log fallito", + "failedConnectExec": "Failed to connect to exec session", + "failedInitExec": "Failed to initialize exec session", + "failedUpdate": "Failed to update manifest", + "resourceNotFound": "Resource not found", + "permissionDenied": "Permission denied", + "invalidManifest": "Invalid manifest format", + "namespaceRequired": "Namespace is required" + }, + "success": { + "manifestUpdated": "Manifest updated successfully" }, "cluster": { "active": "Attivo" }, + "exec": { + "connected": "Connected" + }, "noManifest": "Nessun manifesto disponibile" }, "treeView": { @@ -917,6 +957,23 @@ "fullscreen": { "toggle": "Attiva/disattiva vista a schermo intero" }, + "zoomControls": { + "groupByResource": "Group By Resource/Kind", + "expandAll": "Expand all the child nodes of all parent nodes", + "collapseAll": "Collapse all the child nodes of all parent nodes", + "zoomIn": "Zoom In", + "zoomOut": "Zoom Out", + "resetZoom": "Reset Zoom", + "edgeStyle": "Edge Style", + "curvy": "Curvy", + "square": "Square", + "fullscreen": "Enter Fullscreen", + "exitFullscreen": "Exit Fullscreen" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" + }, "contextMenu": { "details": "Dettagli", "delete": "Elimina", @@ -1885,17 +1942,25 @@ "invalidResponseFormat": "Formato di risposta non valido dal server", "unknownError": "Errore sconosciuto durante il recupero delle risorse.", "errorLoading": "Errore nel Caricamento delle Risorse", - "downloadLogs": "Scarica log", "namespace": "Namespace", "created": "Creato", - "filteredByContext": "Filtrato per contesto: {{context}}", - "showingResourceCount": "Visualizzazione di {{showing}} su {{total}} risorse totali", - "resourceStats": "{{raw}} risorse grezze rilevate, {{processed}} elaborate", + "downloadLogs": "Scarica log", "pagination": { - "prev": "Precedente", - "next": "Successivo", "showing": "Visualizzazione da {{from}} a {{to}} di {{total}} voci", - "filtered": " (filtrato per contesto {{context}})" + "filtered": " (filtrato per contesto {{context}})", + "prev": "Precedente", + "next": "Successivo" + }, + "resourceStats": "{{raw}} risorse grezze rilevate, {{processed}} elaborate", + "filteredByContext": "Filtrato per contesto: {{context}}", + "showingResourceCount": "Visualizzazione di {{showing}} su {{total}} risorse totali", + "noWorkloads": { + "title": "Nessun Carico di Lavoro Trovato", + "noResourcesForContext": "Nessuna risorsa trovata per il contesto {{context}}", + "resourcesFilteredOut": "Le risorse sono disponibili ma filtrate", + "getStarted": "Inizia creando il tuo primo carico di lavoro", + "resourcesAvailable": "{{count}} risorse totali disponibili, ma nessuna corrisponde al filtro attuale", + "noMatchingFilters": "No resources match the current filters" }, "troubleshooting": { "title": "Prova questi passaggi per la risoluzione dei problemi:", @@ -1903,13 +1968,6 @@ "step2": "2. Verifica che la configurazione CORS del server consenta richieste da http://localhost:5173", "step3": "3. Se il server utilizza CORS wildcard (*), non può accettare richieste con credenziali", "step4": "4. Controlla la console del browser per messaggi di errore dettagliati" - }, - "noWorkloads": { - "title": "Nessun Carico di Lavoro Trovato", - "noResourcesForContext": "Nessuna risorsa trovata per il contesto {{context}}", - "resourcesFilteredOut": "Le risorse sono disponibili ma filtrate", - "getStarted": "Inizia creando il tuo primo carico di lavoro", - "resourcesAvailable": "{{count}} risorse totali disponibili, ma nessuna corrisponde al filtro attuale" } }, "kubeconfigImport": { @@ -2051,14 +2109,22 @@ "title": "Gestore Plugin", "description": "Gestisci e monitora i plugin di KubeStellar" }, - "clusters": { - "title": "Cluster Remoti", - "description": "Gestisci i cluster Kubernetes" + "managedClusters": { + "title": "Managed Clusters", + "description": "Manage Kubernetes clusters" + }, + "Grafana": { + "title": "Grafana Dashboard", + "description": "Grafana Dashboard" }, "workloads": { "title": "Carichi di Lavoro", "description": "Gestisci i carichi di lavoro tra i cluster" }, + "resourceExplorer": { + "title": "Object Explorer", + "description": "Search and filter Kubernetes objects" + }, "bindingPolicies": { "title": "Policy di Binding", "description": "Gestisci le policy di binding" @@ -2084,6 +2150,10 @@ "description": "Esci dal tuo account", "infoMessage": "Disconnessione avvenuta con successo." }, + "metricsDashboard": { + "title": "Metrics Dashboard", + "description": "Monitor system performance and metrics" + }, "galaxyMarketplace": { "title": "Mercato Galaxy", "description": "Scopri e installa plugin dal Mercato Galaxy" @@ -2107,13 +2177,14 @@ "items": { "home": "Home", "managedClusters": "Cluster Gestiti", - "grafana": "Grafana", - "remoteClusters": "Cluster Remoti", + "Grafana": "Grafana Dashboard", "stagedWorkloads": "Carichi di Lavoro In Preparazione", "bindingPolicies": "Policy di Binding", "deployedWorkloads": "Carichi di Lavoro Distribuiti", + "resourceExplorer": "Object Explorer", "pluginManager": "Gestore Plugin", "userManagement": "Gestione Utenti", + "metricsDashboard": "Metrics Dashboard", "galaxyMarketplace": "Mercato Galaxy" } }, @@ -2208,7 +2279,7 @@ }, "marketplace": { "title": "KubeStellar Galaxy Marketplace", - "description": "Scopri e installa plugin per migliorare la tua esperienza KubeStellar", + "subtitle": "Discover and install plugins to enhance your KubeStellar experience", "browse": "Sfoglia Plugin Disponibili", "featured": "Plugin In Evidenza", "categories": "Categorie", @@ -2233,5 +2304,527 @@ "placeholder": "Hai suggerimenti per miglioramenti?" } } + }, + "marketplace": { + "title": "KubeStellar Galaxy Marketplace", + "subtitle": "Discover and install plugins to enhance your KubeStellar experience", + "searchPlaceholder": "Search plugins, authors, categories...", + "filters": "Filters", + "sortPopular": "Most Popular", + "sortRating": "Highest Rated", + "sortNewest": "Recently Added", + "searchResults": "Search Results", + "allPlugins": "All Plugins", + "clearFilters": "Clear Filters", + "loadMore": "Load More Plugins", + "adminPanel": "Admin Panel", + "categories": { + "all": "All Plugins", + "management": "Management", + "monitoring": "Monitoring", + "security": "Security", + "networking": "Networking", + "storage": "Storage", + "database": "Database", + "ai": "AI & Machine Learning", + "devops": "DevOps", + "automation": "Automation", + "integration": "Integration", + "analytics": "Analytics", + "backup": "Backup & Recovery", + "compliance": "Compliance", + "testing": "Testing", + "development": "Development Tools" + }, + "plugin": { + "status": { + "active": "Active", + "inactive": "Inactive", + "loading": "Loading", + "error": "Error", + "installed": "Installed", + "notInstalled": "Not Installed" + }, + "actions": { + "install": "Install", + "uninstall": "Uninstall", + "enable": "Enable", + "disable": "Disable", + "update": "Update", + "viewDetails": "View Details", + "download": "Download", + "rate": "Rate", + "review": "Review", + "share": "Share", + "report": "Report Issue" + }, + "details": { + "overview": "Overview", + "details": "Details", + "feedback": "Feedback", + "documentation": "Documentation", + "dependencies": "Dependencies", + "reviews": "Reviews", + "changelog": "Changelog", + "license": "License", + "author": "Author", + "version": "Version", + "lastUpdated": "Last Updated", + "createdAt": "Created At", + "downloads": "Downloads", + "rating": "Rating", + "category": "Category", + "tags": "Tags", + "size": "Size", + "compatibility": "Compatibility", + "requirements": "Requirements", + "installation": "Installation", + "configuration": "Configuration", + "usage": "Usage", + "troubleshooting": "Troubleshooting" + }, + "feedback": { + "title": "Plugin Feedback", + "rating": "Rating", + "comment": "Comment", + "submit": "Submit Feedback", + "submitting": "Submitting...", + "success": "Feedback submitted successfully", + "error": "Failed to submit feedback", + "placeholder": "Tell us about your experience with this plugin...", + "ratingRequired": "Please provide a rating", + "commentRequired": "Please provide a comment" + }, + "installation": { + "title": "Installation", + "installing": "Installing...", + "success": "Plugin installed successfully", + "error": "Failed to install plugin", + "confirm": "Are you sure you want to install this plugin?", + "requirements": "Requirements", + "dependencies": "Dependencies", + "steps": "Installation Steps", + "verification": "Verification" + } + }, + "featured": { + "title": "Featured Plugins", + "subtitle": "Hand-picked plugins for the best experience", + "viewAll": "View All Featured", + "noFeatured": "No featured plugins available", + "loading": "Loading featured plugins..." + }, + "admin": { + "title": "Marketplace Administration", + "overview": "Overview", + "plugins": "Plugins", + "users": "Users", + "settings": "Settings", + "stats": { + "totalPlugins": "Total Plugins", + "pendingReviews": "Pending Reviews", + "totalDownloads": "Total Downloads", + "activeUsers": "Active Users" + }, + "actions": { + "uploadPlugin": "Upload Plugin", + "deletePlugin": "Delete Plugin", + "approvePlugin": "Approve Plugin", + "rejectPlugin": "Reject Plugin", + "featurePlugin": "Feature Plugin", + "unfeaturePlugin": "Unfeature Plugin" + }, + "upload": { + "title": "Upload New Plugin", + "selectFile": "Select Plugin File", + "dragDrop": "Drag & Drop plugin file here", + "supportedFormats": "Supported formats: .tar.gz, .zip", + "maxSize": "Maximum file size: 100MB", + "uploading": "Uploading...", + "success": "Plugin uploaded successfully", + "error": "Failed to upload plugin" + }, + "delete": { + "title": "Delete Plugin", + "confirm": "Are you sure you want to delete \"{{name}}\"? This action cannot be undone.", + "deleting": "Deleting...", + "success": "Plugin deleted successfully", + "error": "Failed to delete plugin" + }, + "quickActions": "Quick Actions", + "uploadNewPlugin": "Upload New Plugin", + "reviewPlugins": "Review Plugins", + "searchPlugins": "Search plugins...", + "allStatus": "All Status", + "active": "Active", + "inactive": "Inactive", + "loadingPlugins": "Loading plugins...", + "noPluginsFound": "No plugins found.", + "userManagement": "User Management", + "userManagementComingSoon": "User management features coming soon.", + "adminSettings": "Admin Settings", + "settingsComingSoon": "Settings panel coming soon.", + "marketplaceManagement": "Marketplace Management", + "adminPanel": "Admin Panel" + }, + "search": { + "noResults": "No plugins found", + "noResultsDescription": "Try adjusting your search terms or browse all plugins", + "clearSearch": "Clear search", + "searching": "Searching...", + "resultsCount": "{{count}} plugin{{count, plural, one {} other {s}}} found" + }, + "errors": { + "failedToLoad": "Failed to load marketplace data", + "failedToInstall": "Failed to install plugin", + "failedToUninstall": "Failed to uninstall plugin", + "failedToEnable": "Failed to enable plugin", + "failedToDisable": "Failed to disable plugin", + "failedToSubmitFeedback": "Failed to submit feedback", + "pluginNotFound": "Plugin not found", + "installationFailed": "Installation failed", + "networkError": "Network error occurred", + "serverError": "Server error occurred" + }, + "success": { + "pluginInstalled": "Plugin installed successfully", + "pluginUninstalled": "Plugin uninstalled successfully", + "pluginEnabled": "Plugin enabled successfully", + "pluginDisabled": "Plugin disabled successfully", + "feedbackSubmitted": "Feedback submitted successfully", + "pluginUpdated": "Plugin updated successfully" + }, + "loading": { + "loadingPlugins": "Loading amazing plugins...", + "discoveringGalaxy": "Discovering the galaxy of possibilities", + "loadingMarketplace": "Loading marketplace...", + "loadingPlugin": "Loading plugin details...", + "installingPlugin": "Installing plugin...", + "uninstallingPlugin": "Uninstalling plugin..." + }, + "empty": { + "noPlugins": "No plugins found", + "noPluginsDescription": "No plugins match your current filters", + "showAllPlugins": "Show All Plugins", + "noFeaturedPlugins": "No featured plugins available", + "noCategories": "No categories available", + "noSearchResults": "No search results found" + }, + "backToMarketplace": "Back to Marketplace", + "enable": "Enable", + "disable": "Disable", + "install": "Install", + "uninstall": "Uninstall", + "by": "By", + "overview": "Overview", + "details": "Details", + "feedback": "Feedback", + "docSection": "Documentation", + "description": "Description", + "dependencies": "Dependencies", + "keyFeatures": "Key Features", + "technicalDetails": "Technical Details", + "generalInfo": "General Information", + "version": "Version", + "lastUpdated": "Last Updated", + "author": "Author", + "license": "License", + "category": "Category", + "requirements": "Requirements", + "kubestellarVersion": "KubeStellar Version", + "platforms": "Platforms", + "fileSize": "File Size", + "pluginIdentifiers": "Plugin Identifiers", + "tags": "Tags", + "userFeedback": "User Feedback", + "leaveFeedback": "Leave Feedback", + "yourFeedback": "Your Feedback", + "rating": "Rating", + "comments": "Comments", + "delete": { + "confirmTitle": "Delete Plugin", + "confirmLabel": "Type the plugin name to confirm:", + "confirmPlaceholder": "Enter plugin name here", + "mismatch": "Plugin name does not match", + "confirmed": "Plugin name confirmed", + "deleteButton": "Delete Plugin", + "deleting": "Deleting Plugin...", + "deletingMessage": "Please wait while we remove your plugin.", + "success": "Plugin Deleted Successfully!", + "error": "Delete Failed", + "tryAgain": "Try Again", + "title": "Delete Plugin" + }, + "upload": { + "dragDrop": "Drag and drop your plugin here", + "browseFiles": "Browse Files", + "requirements": "Upload Requirements:", + "reviewFile": "Review Your Plugin", + "uploadPlugin": "Upload Plugin", + "uploading": "Uploading Plugin...", + "success": "Plugin Uploaded Successfully!", + "error": "Upload Failed", + "tryAgain": "Try Again", + "title": "Upload Plugin", + "supportedFormat": "or click to browse. Supported format: .tar.gz", + "confirmUpload": "Please confirm the details below before uploading", + "processingFile": "Processing your plugin file. This may take a moment.", + "successMessage": "Your plugin has been uploaded and is now available in the marketplace.", + "errorMessage": "Something went wrong while uploading your plugin.", + "invalidFileType": "Invalid file type. Please upload a .tar.gz file.", + "fileTooLarge": "File size too large. Maximum size is 50MB." + }, + "common": { + "featured": "FEATURED", + "viewDetails": "View Details", + "installNow": "Install Now", + "installing": "Installing...", + "installed": "Installed", + "uninstalling": "Uninstalling...", + "rating": "rating", + "downloads": "downloads", + "updated": "Updated", + "recently": "recently", + "by": "by", + "unknownAuthor": "Unknown author", + "noDescription": "No description available", + "premiumPlugins": "Discover Premium Plugins", + "enhanceWorkflow": "Enhance your workflow with powerful plugins designed specifically for Kubernetes and cloud-native environments.", + "exploreMarketplace": "Explore Marketplace", + "suggestedCategories": ["Monitoring", "Security", "Development", "Deployment", "Storage"], + "noPluginsFound": "No plugins found", + "tryAdjustingSearch": "Try adjusting your search terms or browse all plugins", + "noMatchingFilters": "No plugins match your current filters", + "showAllPlugins": "Show All Plugins", + "remaining": "remaining", + "allPlugins": "All Plugins", + "plugin": "plugin", + "plugins": "plugins", + "tags": "Tags:", + "license": "License", + "created": "Created", + "routes": "Routes", + "loadTime": "Load Time", + "endpoints": "endpoint", + "endpoints_plural": "endpoints", + "seconds": "s", + "misc": "Misc", + "installPlugin": "Install Plugin", + "noRoutes": "No API routes defined", + "noWidgets": "No widgets available", + "noAssets": "No assets loaded", + "unnamedPlugin": "Unnamed Plugin", + "defaultVersion": "1.0.0", + "versionPrefix": "v" + }, + "documentation": { + "title": "Documentation", + "overview": "Overview", + "installation": "Installation", + "apiReference": "API Reference", + "codeExamples": "Code Examples", + "practicalExamples": "Practical examples to help you get started with", + "tutorials": "Tutorials", + "faq": "FAQ", + "troubleshooting": "Troubleshooting", + "installationGuide": "Installation Guide", + "followSteps": "Follow these steps to install and configure", + "inEnvironment": "in your KubeStellar environment.", + "keyFeatures": "Key Features", + "requirements": "Requirements", + "welcomeMessage": "Welcome to the comprehensive documentation for", + "extendsCapabilities": "extends KubeStellar's capabilities with advanced features designed to enhance your multi-cluster management experience.", + "powerfulPlugin": "This powerful plugin provides essential functionality for modern Kubernetes environments, offering seamless integration with existing workflows and robust performance monitoring capabilities.", + "advancedMultiCluster": "Advanced multi-cluster synchronization", + "realTimeMonitoring": "Real-time monitoring and alerting", + "automatedScaling": "Automated scaling and optimization", + "securityPolicy": "Security policy enforcement", + "comprehensiveAPI": "Comprehensive API coverage", + "kubestellarVersion": "KubeStellar v1.0.0 or higher", + "kubernetesVersion": "Kubernetes 1.19+", + "ramMinimum": "512MB RAM minimum (1GB recommended)", + "networkConnectivity": "Network connectivity to target clusters", + "validCredentials": "Valid authentication credentials", + "copy": "Copy", + "copied": "Copied!", + "fileFormat": "File format: .tar.gz only", + "maxFileSize": "Maximum file size: 50MB", + "mustContain": "Must contain plugin.yml file", + "validStructure": "Valid plugin structure required" + } + }, + "notFoundPage": { + "logoAlt": "KubeStellar Logo", + "mainTitle": "404 - Page Not Found", + "description": "The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.", + "returnHomeButton": "Return to Home", + "tryAgainButton": "Try Again", + "quotes": [ + { + "text": "In the vast universe of code, sometimes we get lost among the stars.", + "author": "Anonymous Developer" + }, + { + "text": "The path less traveled is often not found for a reason.", + "author": "Web Explorer" + }, + { + "text": "Not all who wander are lost, but this page definitely is.", + "author": "J.R.R. Token" + }, + { + "text": "Success is not final, 404 is not fatal: it's the courage to navigate that counts.", + "author": "Winston Codehill" + }, + { + "text": "The best way to predict the future is to implement proper routing.", + "author": "Alan Turning" + } + ] + }, + "resources": { + "search": "Search objects...", + "kind": "Kind", + "namespace": "Namespace", + "labels": "Labels", + "labels_plural": "{{count}} labels", + "filterByKind": "Filter by object kind", + "filterByNamespace": "Filter by namespace", + "filterByStatus": "Filter by status", + "filterByLabel": "Filter by label", + "clearFilters": "Clear Filters", + "noLabelsFound": "No labels found", + "noMatchingFilters": "No objects match the current filters", + "title": "Object Explorer", + "selectKind": "Select Kind / Object", + "selectNamespace": "Select Namespace", + "applyFilters": "Apply Filters", + "results": "Results", + "created": "Created", + "noResourcesFound": "No objects found matching the criteria", + "selectResourceAndNamespace": "Select an object kind and namespace to begin", + "refresh": "Refresh", + "toggleFilters": "Toggle filters", + "description": "Explore and manage Kubernetes objects across your clusters", + "autoRefresh": "Auto-refresh", + "viewMode": { + "grid": "Grid View", + "list": "List View", + "table": "Table View", + "gridLabel": "grid view", + "listLabel": "list view", + "tableLabel": "table view" + }, + "objectSelection": "Object Selection & Filters", + "searchPlaceholder": "Search object kinds...", + "quickSearchPlaceholder": "Quick search objects...", + "bulkActions": { + "resourcesSelected": "{{count}} {{objectText}} selected", + "clearSelection": "Clear Selection", + "viewDetails": "View Details", + "export": "Export" + }, + "sorting": { + "sortBy": "Sort by", + "name": "Sort by Name", + "kind": "Sort by Kind", + "namespace": "Sort by Namespace", + "createdAt": "Sort by Created" + }, + "emptyState": { + "readyToExplore": "Ready to explore", + "noResourcesFound": "No objects found", + "noResourcesDescription": "No objects match your current filters. Try adjusting your search criteria or clearing filters.", + "getStartedDescription": "Select an object kind and namespace to begin exploring your Kubernetes objects.", + "getStarted": "Get Started", + "clearFilters": "Clear Filters" + }, + "actions": { + "view": "View", + "viewDetails": "View Details", + "editYaml": "Edit YAML", + "delete": "Delete", + "more": "More" + }, + "filters": { + "activeFilters": "Active Filters:", + "kindFilter": "Kind: {{kind}}", + "namespaceFilter": "Namespace: {{namespace}}", + "labelFilter": "{{key}}: {{value}}", + "clear": "Clear ({{count}})" + }, + "menus": { + "resourceKinds": "Object Kinds ({{count}})", + "namespaces": "Namespaces ({{count}})", + "labels": "Labels ({{count}} keys)", + "noLabelsFound": "No labels found in the current objects", + "active": "Active" + }, + "stats": { + "resourceOverview": "Object Overview", + "topResourceKinds": "Top Object Kinds", + "topNamespaces": "Top Namespaces" + }, + "table": { + "name": "Name", + "kind": "Kind", + "namespace": "Namespace", + "status": "Status", + "age": "Age", + "createdAt": "Created", + "labels": "Labels", + "actions": "Actions" + }, + "preview": { + "objectDetails": "Object Details", + "namespace": "Namespace", + "createdAt": "Created", + "uid": "UID", + "noLabels": "No labels", + "labels": "Labels" + }, + "time": { + "justNow": "Just now", + "hoursAgo": "{{count}}h ago", + "daysAgo": "{{count}}d ago" + }, + "loading": { + "resources": "Loading resources...", + "applying": "Applying filters...", + "refreshing": "Refreshing..." + }, + "errors": { + "loadFailed": "Failed to load resources", + "filterFailed": "Failed to apply filters", + "actionFailed": "Action failed" + }, + "notifications": { + "filtersApplied": "Filters applied successfully", + "resourcesRefreshed": "Resources refreshed successfully" + }, + "subtitle": "Explore and manage Kubernetes resources", + "status": { + "healthy": "Healthy", + "warning": "Warning", + "error": "Error", + "active": "Active", + "unknown": "Unknown", + "running": "Running", + "pending": "Pending", + "failed": "Failed", + "progressing": "Progressing", + "scheduled": "Scheduled", + "waiting": "Waiting", + "ready": "Ready", + "notReady": "Not Ready", + "succeeded": "Succeeded", + "outOfSync": "Out of Sync", + "missing": "Missing", + "synced": "Synced" + }, + "unknown": "Unknown" + }, + "validation": { + "missingRequiredFields": "Missing required fields" } } diff --git a/frontend/src/locales/strings.ja.json b/frontend/src/locales/strings.ja.json index 686faf1ef..f7559b576 100644 --- a/frontend/src/locales/strings.ja.json +++ b/frontend/src/locales/strings.ja.json @@ -206,6 +206,12 @@ "prerequisites": "前提条件", "title": "システムの前提条件", "description": "次のツールがインストールされていることを確認してください", + "kubeflexDescription": "KubeFlex CLI tool (required version ≥ 0.8.0)", + "ocmDescription": "Open Cluster Management CLI (required version between 0.7 and 0.11)", + "helmDescription": "Kubernetes package manager (required version ≥ 3.0.0)", + "kubectlDescription": "Kubernetes command-line tool (required version ≥ 1.27.0)", + "kindDescription": "Tool for running local Kubernetes clusters (required version ≥ 0.20.0)", + "dockerDescription": "Container runtime (required version ≥ 20.0.0)", "status": { "success": "成功", "warnings": "警告", @@ -215,8 +221,9 @@ "coreRequirements": "基本要件", "demoEnvironmentRequirements": "デモ環境の要件", "buttons": { - "refresh": "更新", - "nextInstallation": "次へ:インストール" + "nextInstallation": "次へ:インストール", + "checking": "Checking...", + "refresh": "更新" } }, "installation": { @@ -294,7 +301,10 @@ "preparingInstructions": "インストール手順を準備中...", "followInstructions": "以下のCLIインストール手順に従ってKubeStellarをインストールしてください", "loadInstructionsFailed": "インストール手順の読み込みに失敗しました。ページを更新して再試行してください。", - "installationDetected": "KubeStellarのインストールが検出されました。ログインページにリダイレクト中..." + "installationDetected": "KubeStellarのインストールが検出されました。ログインページにリダイレクト中...", + "recheckingPrerequisites": "Rechecking prerequisites...", + "prerequisitesRechecked": "Prerequisites rechecked successfully", + "recheckFailed": "Failed to recheck prerequisites" } }, "header": { @@ -311,7 +321,12 @@ "goToHome": "ホームページへ移動", "logoAlt": "KubeStellarのロゴ", "themeToggleTip": "Alt+Qでテーマを切り替え", - "switchTheme": "{{mode}}モードに切り替え" + "switchTheme": "{{mode}}モードに切り替え", + "switchLanguage": "Switch language", + "selectLanguage": "Select Language", + "enterFullscreen": "Enter fullscreen mode", + "exitFullscreen": "Exit fullscreen mode", + "fullscreen": "Toggle fullscreen mode" }, "login": { "controlPlane": "コントロールプレーン", @@ -437,6 +452,8 @@ "label": "ラベル", "editvalue": "キーと値の両方が必要です", "manage": "ラベルを管理", + "bulkTooltipDisabled": "Select at least 2 clusters to enable bulk labeling", + "bulkTooltipEnabled": "Manage labels for selected clusters", "clearFilter": "フィルターをクリア", "searchLabelsPlaceholder": "ラベルを検索...", "bulkEditTitle": "{{count}} クラスターのラベルを編集", @@ -826,7 +843,17 @@ "expandAll": "すべての親ノードの子ノードを展開", "collapseAll": "すべての親ノードの子ノードを折りたたむ", "zoomIn": "ズームイン", - "zoomOut": "ズームアウト" + "zoomOut": "ズームアウト", + "resetZoom": "Reset Zoom", + "edgeStyle": "Edge Style", + "curvy": "Curvy", + "square": "Square", + "fullscreen": "Enter Fullscreen", + "exitFullscreen": "Exit Fullscreen" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" }, "nodeLabel": { "labels": "ラベル:", @@ -878,15 +905,34 @@ "selectContainer": "コンテナを選択", "noContainersFound": "コンテナが見つかりません" }, + "logs": { + "previousLogs": "Previous Logs", + "currentLogs": "Current Logs", + "selectLogsContainer": "Select logs container" + }, "errors": { "failedLoadClusterDetails": "クラスターの詳細の読み込みに失敗しました。", "failedLoadDetails": "{{type}} の詳細の読み込みに失敗しました。", "apiNotImplemented": "Pod「{{resourceName}}」の更新用 API は未実装です", - "failedFetchContainers": "コンテナ一覧の取得に失敗しました" + "failedFetchContainers": "コンテナ一覧の取得に失敗しました", + "failedFetchLogsContainers": "Failed to fetch container list for logs", + "failedConnectExec": "Failed to connect to exec session", + "failedInitExec": "Failed to initialize exec session", + "failedUpdate": "Failed to update manifest", + "resourceNotFound": "Resource not found", + "permissionDenied": "Permission denied", + "invalidManifest": "Invalid manifest format", + "namespaceRequired": "Namespace is required" + }, + "success": { + "manifestUpdated": "Manifest updated successfully" }, "cluster": { "active": "アクティブ" }, + "exec": { + "connected": "Connected" + }, "noManifest": "マニフェストは利用できません" }, "treeView": { @@ -911,6 +957,23 @@ "fullscreen": { "toggle": "全画面表示の切り替え" }, + "zoomControls": { + "groupByResource": "Group By Resource/Kind", + "expandAll": "Expand all the child nodes of all parent nodes", + "collapseAll": "Collapse all the child nodes of all parent nodes", + "zoomIn": "Zoom In", + "zoomOut": "Zoom Out", + "resetZoom": "Reset Zoom", + "edgeStyle": "Edge Style", + "curvy": "Curvy", + "square": "Square", + "fullscreen": "Enter Fullscreen", + "exitFullscreen": "Exit Fullscreen" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" + }, "contextMenu": { "details": "詳細", "delete": "削除", @@ -1278,8 +1341,7 @@ "title": "ラベル:", "key": "キー", "value": "値", - "add": "追加", - "count": "{{total}}に対して{{count}}件の一意なラベル" + "add": "追加" }, "creatingConnection": "接続を作成中:", "previewDialog": { @@ -1662,18 +1724,6 @@ "enterYamlJson": "YAML または JSON の内容を入力してください。", "needMetadataName": "少なくとも 1 つのドキュメントに 'metadata.name' が必要です。" } - }, - "workloads": { - "title": "ワークロード", - "description": "クラスター間のワークロードを管理する" - }, - "resourceExplorer": { - "title": "オブジェクトエクスプローラー", - "description": "Kubernetesオブジェクトを検索およびフィルタリングする" - }, - "bindingPolicies": { - "title": "バインディングポリシー", - "description": "ワークロードの分配に関するバインディングポリシーを作成・管理します" } }, "visualization": { @@ -1752,7 +1802,9 @@ "successWithUser": "ユーザー「{{username}}」でのログインに成功しました。{{path}} にリダイレクト中です", "invalidCredentials": "認証情報が無効です", "authFailed": "認証に失敗しました。認証情報を確認してください。", - "noToken": "サーバーからトークンを受信できませんでした" + "noToken": "サーバーからトークンを受信できませんでした", + "invalidRequest": "Invalid request. Please check your input and try again.", + "serverError": "Server error. Please try again later." } }, "kubestellarData": { @@ -1890,17 +1942,25 @@ "invalidResponseFormat": "サーバーからの応答形式が無効です", "unknownError": "リソースの取得中に不明なエラーが発生しました。", "errorLoading": "リソースの読み込みエラー", - "downloadLogs": "ログをダウンロード", "namespace": "Namespace", "created": "作成日", - "filteredByContext": "コンテキストでフィルタ: {{context}}", - "showingResourceCount": "{{total}} 件中 {{showing}} 件を表示中", - "resourceStats": "{{raw}} 件の未処理リソース、{{processed}} 件の処理済みリソースを検出", + "downloadLogs": "ログをダウンロード", "pagination": { - "prev": "前へ", - "next": "次へ", "showing": "{{total}} 件中 {{from}} 件目から {{to}} 件目を表示中", - "filtered": "({{context}} コンテキストでフィルタ中)" + "filtered": "({{context}} コンテキストでフィルタ中)", + "prev": "前へ", + "next": "次へ" + }, + "resourceStats": "{{raw}} 件の未処理リソース、{{processed}} 件の処理済みリソースを検出", + "filteredByContext": "コンテキストでフィルタ: {{context}}", + "showingResourceCount": "{{total}} 件中 {{showing}} 件を表示中", + "noWorkloads": { + "title": "ワークロードが見つかりません", + "noResourcesForContext": "{{context}} コンテキストに該当するリソースが見つかりませんでした", + "resourcesFilteredOut": "リソースは存在しますが、現在のフィルター条件では表示されません", + "getStarted": "最初のワークロードを作成して開始しましょう", + "resourcesAvailable": "合計 {{count}} 件のリソースがありますが、現在のフィルター条件には一致しません", + "noMatchingFilters": "No resources match the current filters" }, "troubleshooting": { "title": "次のトラブルシューティング手順をお試しください:", @@ -1908,13 +1968,6 @@ "step2": "2. サーバーの CORS 設定が http://localhost:5173 からのリクエストを許可しているか確認", "step3": "3. サーバーがワイルドカード(*)CORS を使用している場合、認証付きリクエストは受け付けません", "step4": "4. 詳細なエラーメッセージはブラウザのコンソールを確認" - }, - "noWorkloads": { - "title": "ワークロードが見つかりません", - "noResourcesForContext": "{{context}} コンテキストに該当するリソースが見つかりませんでした", - "resourcesFilteredOut": "リソースは存在しますが、現在のフィルター条件では表示されません", - "getStarted": "最初のワークロードを作成して開始しましょう", - "resourcesAvailable": "合計 {{count}} 件のリソースがありますが、現在のフィルター条件には一致しません" } }, "kubeconfigImport": { @@ -2047,13 +2100,6 @@ "arrows": "↑↓", "enter": "↵" }, - "sections": { - "navigation": "ナビゲーション", - "visualizations": "可視化", - "help": "ヘルプ", - "account": "アカウント", - "admin": "管理" - }, "commands": { "home": { "title": "ホーム", @@ -2063,9 +2109,13 @@ "title": "プラグインマネージャー", "description": "KubeStellarプラグインの管理と監視" }, - "clusters": { - "title": "リモートクラスタ", - "description": "Kubernetes クラスタを管理" + "managedClusters": { + "title": "管理クラスター", + "description": "Kubernetesクラスターを管理" + }, + "Grafana": { + "title": "Grafana Dashboard", + "description": "Grafana Dashboard" }, "workloads": { "title": "ワークロード", @@ -2100,14 +2150,21 @@ "description": "アカウントからサインアウト", "infoMessage": "正常にログアウトしました。" }, + "metricsDashboard": { + "title": "Metrics Dashboard", + "description": "Monitor system performance and metrics" + }, "galaxyMarketplace": { "title": "ギャラクシーマーケットプレイス", "description": "ギャラクシーマーケットプレイスからプラグインを見つけてインストールしましょう" - }, - "managedClusters": { - "title": "管理クラスター", - "description": "Kubernetesクラスターを管理" } + }, + "sections": { + "navigation": "ナビゲーション", + "admin": "管理", + "visualizations": "可視化", + "help": "ヘルプ", + "account": "アカウント" } }, "menu": { @@ -2119,15 +2176,16 @@ }, "items": { "home": "ホーム", - "remoteClusters": "リモートクラスタ", + "managedClusters": "管理クラスター", + "Grafana": "Grafana Dashboard", "stagedWorkloads": "ステージ済みワークロード", "bindingPolicies": "バインディングポリシー", "deployedWorkloads": "デプロイ済みワークロード", + "resourceExplorer": "Object Explorer", "pluginManager": "プラグインマネージャー", "userManagement": "ユーザー管理", - "galaxyMarketplace": "ギャラクシーマーケットプレイス", - "managedClusters": "管理クラスター", - "grafana": "グラファナ" + "metricsDashboard": "Metrics Dashboard", + "galaxyMarketplace": "ギャラクシーマーケットプレイス" } }, "plugins": { @@ -2176,7 +2234,8 @@ "details": "詳細", "uninstall": "アンインストール", "reload": "再読み込み", - "settings": "設定" + "settings": "設定", + "feedback": "Feedback" } }, "details": { @@ -2211,11 +2270,16 @@ "title": "プラグインの無効化確認", "message": "「{{name}}」を無効化すると、すべての機能が停止します。後で再度有効化できます。", "confirm": "はい、無効化します" + }, + "enable": { + "title": "Confirm Plugin Enable", + "message": "Enabling \"{{name}}\" will activate all plugin functionality and make it available for use.", + "confirm": "Yes, Enable" } }, "marketplace": { "title": "KubeStellar Galaxy マーケットプレイス", - "description": "KubeStellarの体験を向上させるプラグインを見つけてインストール", + "subtitle": "Discover and install plugins to enhance your KubeStellar experience", "browse": "利用可能なプラグインを参照", "featured": "おすすめプラグイン", "categories": "カテゴリ", @@ -2241,6 +2305,354 @@ } } }, + "marketplace": { + "title": "KubeStellar Galaxy Marketplace", + "subtitle": "Discover and install plugins to enhance your KubeStellar experience", + "searchPlaceholder": "Search plugins, authors, categories...", + "filters": "Filters", + "sortPopular": "Most Popular", + "sortRating": "Highest Rated", + "sortNewest": "Recently Added", + "searchResults": "Search Results", + "allPlugins": "All Plugins", + "clearFilters": "Clear Filters", + "loadMore": "Load More Plugins", + "adminPanel": "Admin Panel", + "categories": { + "all": "All Plugins", + "management": "Management", + "monitoring": "Monitoring", + "security": "Security", + "networking": "Networking", + "storage": "Storage", + "database": "Database", + "ai": "AI & Machine Learning", + "devops": "DevOps", + "automation": "Automation", + "integration": "Integration", + "analytics": "Analytics", + "backup": "Backup & Recovery", + "compliance": "Compliance", + "testing": "Testing", + "development": "Development Tools" + }, + "plugin": { + "status": { + "active": "Active", + "inactive": "Inactive", + "loading": "Loading", + "error": "Error", + "installed": "Installed", + "notInstalled": "Not Installed" + }, + "actions": { + "install": "Install", + "uninstall": "Uninstall", + "enable": "Enable", + "disable": "Disable", + "update": "Update", + "viewDetails": "View Details", + "download": "Download", + "rate": "Rate", + "review": "Review", + "share": "Share", + "report": "Report Issue" + }, + "details": { + "overview": "Overview", + "details": "Details", + "feedback": "Feedback", + "documentation": "Documentation", + "dependencies": "Dependencies", + "reviews": "Reviews", + "changelog": "Changelog", + "license": "License", + "author": "Author", + "version": "Version", + "lastUpdated": "Last Updated", + "createdAt": "Created At", + "downloads": "Downloads", + "rating": "Rating", + "category": "Category", + "tags": "Tags", + "size": "Size", + "compatibility": "Compatibility", + "requirements": "Requirements", + "installation": "Installation", + "configuration": "Configuration", + "usage": "Usage", + "troubleshooting": "Troubleshooting" + }, + "feedback": { + "title": "Plugin Feedback", + "rating": "Rating", + "comment": "Comment", + "submit": "Submit Feedback", + "submitting": "Submitting...", + "success": "Feedback submitted successfully", + "error": "Failed to submit feedback", + "placeholder": "Tell us about your experience with this plugin...", + "ratingRequired": "Please provide a rating", + "commentRequired": "Please provide a comment" + }, + "installation": { + "title": "Installation", + "installing": "Installing...", + "success": "Plugin installed successfully", + "error": "Failed to install plugin", + "confirm": "Are you sure you want to install this plugin?", + "requirements": "Requirements", + "dependencies": "Dependencies", + "steps": "Installation Steps", + "verification": "Verification" + } + }, + "featured": { + "title": "Featured Plugins", + "subtitle": "Hand-picked plugins for the best experience", + "viewAll": "View All Featured", + "noFeatured": "No featured plugins available", + "loading": "Loading featured plugins..." + }, + "admin": { + "title": "Marketplace Administration", + "overview": "Overview", + "plugins": "Plugins", + "users": "Users", + "settings": "Settings", + "stats": { + "totalPlugins": "Total Plugins", + "pendingReviews": "Pending Reviews", + "totalDownloads": "Total Downloads", + "activeUsers": "Active Users" + }, + "actions": { + "uploadPlugin": "Upload Plugin", + "deletePlugin": "Delete Plugin", + "approvePlugin": "Approve Plugin", + "rejectPlugin": "Reject Plugin", + "featurePlugin": "Feature Plugin", + "unfeaturePlugin": "Unfeature Plugin" + }, + "upload": { + "title": "Upload New Plugin", + "selectFile": "Select Plugin File", + "dragDrop": "Drag & Drop plugin file here", + "supportedFormats": "Supported formats: .tar.gz, .zip", + "maxSize": "Maximum file size: 100MB", + "uploading": "Uploading...", + "success": "Plugin uploaded successfully", + "error": "Failed to upload plugin" + }, + "delete": { + "title": "Delete Plugin", + "confirm": "Are you sure you want to delete \"{{name}}\"? This action cannot be undone.", + "deleting": "Deleting...", + "success": "Plugin deleted successfully", + "error": "Failed to delete plugin" + }, + "quickActions": "Quick Actions", + "uploadNewPlugin": "Upload New Plugin", + "reviewPlugins": "Review Plugins", + "searchPlugins": "Search plugins...", + "allStatus": "All Status", + "active": "Active", + "inactive": "Inactive", + "loadingPlugins": "Loading plugins...", + "noPluginsFound": "No plugins found.", + "userManagement": "User Management", + "userManagementComingSoon": "User management features coming soon.", + "adminSettings": "Admin Settings", + "settingsComingSoon": "Settings panel coming soon.", + "marketplaceManagement": "Marketplace Management", + "adminPanel": "Admin Panel" + }, + "search": { + "noResults": "No plugins found", + "noResultsDescription": "Try adjusting your search terms or browse all plugins", + "clearSearch": "Clear search", + "searching": "Searching...", + "resultsCount": "{{count}} plugin{{count, plural, one {} other {s}}} found" + }, + "errors": { + "failedToLoad": "Failed to load marketplace data", + "failedToInstall": "Failed to install plugin", + "failedToUninstall": "Failed to uninstall plugin", + "failedToEnable": "Failed to enable plugin", + "failedToDisable": "Failed to disable plugin", + "failedToSubmitFeedback": "Failed to submit feedback", + "pluginNotFound": "Plugin not found", + "installationFailed": "Installation failed", + "networkError": "Network error occurred", + "serverError": "Server error occurred" + }, + "success": { + "pluginInstalled": "Plugin installed successfully", + "pluginUninstalled": "Plugin uninstalled successfully", + "pluginEnabled": "Plugin enabled successfully", + "pluginDisabled": "Plugin disabled successfully", + "feedbackSubmitted": "Feedback submitted successfully", + "pluginUpdated": "Plugin updated successfully" + }, + "loading": { + "loadingPlugins": "Loading amazing plugins...", + "discoveringGalaxy": "Discovering the galaxy of possibilities", + "loadingMarketplace": "Loading marketplace...", + "loadingPlugin": "Loading plugin details...", + "installingPlugin": "Installing plugin...", + "uninstallingPlugin": "Uninstalling plugin..." + }, + "empty": { + "noPlugins": "No plugins found", + "noPluginsDescription": "No plugins match your current filters", + "showAllPlugins": "Show All Plugins", + "noFeaturedPlugins": "No featured plugins available", + "noCategories": "No categories available", + "noSearchResults": "No search results found" + }, + "backToMarketplace": "Back to Marketplace", + "enable": "Enable", + "disable": "Disable", + "install": "Install", + "uninstall": "Uninstall", + "by": "By", + "overview": "Overview", + "details": "Details", + "feedback": "Feedback", + "docSection": "Documentation", + "description": "Description", + "dependencies": "Dependencies", + "keyFeatures": "Key Features", + "technicalDetails": "Technical Details", + "generalInfo": "General Information", + "version": "Version", + "lastUpdated": "Last Updated", + "author": "Author", + "license": "License", + "category": "Category", + "requirements": "Requirements", + "kubestellarVersion": "KubeStellar Version", + "platforms": "Platforms", + "fileSize": "File Size", + "pluginIdentifiers": "Plugin Identifiers", + "tags": "Tags", + "userFeedback": "User Feedback", + "leaveFeedback": "Leave Feedback", + "yourFeedback": "Your Feedback", + "rating": "Rating", + "comments": "Comments", + "delete": { + "confirmTitle": "Delete Plugin", + "confirmLabel": "Type the plugin name to confirm:", + "confirmPlaceholder": "Enter plugin name here", + "mismatch": "Plugin name does not match", + "confirmed": "Plugin name confirmed", + "deleteButton": "Delete Plugin", + "deleting": "Deleting Plugin...", + "deletingMessage": "Please wait while we remove your plugin.", + "success": "Plugin Deleted Successfully!", + "error": "Delete Failed", + "tryAgain": "Try Again", + "title": "Delete Plugin" + }, + "upload": { + "dragDrop": "Drag and drop your plugin here", + "browseFiles": "Browse Files", + "requirements": "Upload Requirements:", + "reviewFile": "Review Your Plugin", + "uploadPlugin": "Upload Plugin", + "uploading": "Uploading Plugin...", + "success": "Plugin Uploaded Successfully!", + "error": "Upload Failed", + "tryAgain": "Try Again", + "title": "Upload Plugin", + "supportedFormat": "or click to browse. Supported format: .tar.gz", + "confirmUpload": "Please confirm the details below before uploading", + "processingFile": "Processing your plugin file. This may take a moment.", + "successMessage": "Your plugin has been uploaded and is now available in the marketplace.", + "errorMessage": "Something went wrong while uploading your plugin.", + "invalidFileType": "Invalid file type. Please upload a .tar.gz file.", + "fileTooLarge": "File size too large. Maximum size is 50MB." + }, + "common": { + "featured": "FEATURED", + "viewDetails": "View Details", + "installNow": "Install Now", + "installing": "Installing...", + "installed": "Installed", + "uninstalling": "Uninstalling...", + "rating": "rating", + "downloads": "downloads", + "updated": "Updated", + "recently": "recently", + "by": "by", + "unknownAuthor": "Unknown author", + "noDescription": "No description available", + "premiumPlugins": "Discover Premium Plugins", + "enhanceWorkflow": "Enhance your workflow with powerful plugins designed specifically for Kubernetes and cloud-native environments.", + "exploreMarketplace": "Explore Marketplace", + "suggestedCategories": ["Monitoring", "Security", "Development", "Deployment", "Storage"], + "noPluginsFound": "No plugins found", + "tryAdjustingSearch": "Try adjusting your search terms or browse all plugins", + "noMatchingFilters": "No plugins match your current filters", + "showAllPlugins": "Show All Plugins", + "remaining": "remaining", + "allPlugins": "All Plugins", + "plugin": "plugin", + "plugins": "plugins", + "tags": "Tags:", + "license": "License", + "created": "Created", + "routes": "Routes", + "loadTime": "Load Time", + "endpoints": "endpoint", + "endpoints_plural": "endpoints", + "seconds": "s", + "misc": "Misc", + "installPlugin": "Install Plugin", + "noRoutes": "No API routes defined", + "noWidgets": "No widgets available", + "noAssets": "No assets loaded", + "unnamedPlugin": "Unnamed Plugin", + "defaultVersion": "1.0.0", + "versionPrefix": "v" + }, + "documentation": { + "title": "Documentation", + "overview": "Overview", + "installation": "Installation", + "apiReference": "API Reference", + "codeExamples": "Code Examples", + "practicalExamples": "Practical examples to help you get started with", + "tutorials": "Tutorials", + "faq": "FAQ", + "troubleshooting": "Troubleshooting", + "installationGuide": "Installation Guide", + "followSteps": "Follow these steps to install and configure", + "inEnvironment": "in your KubeStellar environment.", + "keyFeatures": "Key Features", + "requirements": "Requirements", + "welcomeMessage": "Welcome to the comprehensive documentation for", + "extendsCapabilities": "extends KubeStellar's capabilities with advanced features designed to enhance your multi-cluster management experience.", + "powerfulPlugin": "This powerful plugin provides essential functionality for modern Kubernetes environments, offering seamless integration with existing workflows and robust performance monitoring capabilities.", + "advancedMultiCluster": "Advanced multi-cluster synchronization", + "realTimeMonitoring": "Real-time monitoring and alerting", + "automatedScaling": "Automated scaling and optimization", + "securityPolicy": "Security policy enforcement", + "comprehensiveAPI": "Comprehensive API coverage", + "kubestellarVersion": "KubeStellar v1.0.0 or higher", + "kubernetesVersion": "Kubernetes 1.19+", + "ramMinimum": "512MB RAM minimum (1GB recommended)", + "networkConnectivity": "Network connectivity to target clusters", + "validCredentials": "Valid authentication credentials", + "copy": "Copy", + "copied": "Copied!", + "fileFormat": "File format: .tar.gz only", + "maxFileSize": "Maximum file size: 50MB", + "mustContain": "Must contain plugin.yml file", + "validStructure": "Valid plugin structure required" + } + }, "notFoundPage": { "logoAlt": "KubeStellarロゴ", "mainTitle": "404 - ページが見つかりません", @@ -2270,6 +2682,148 @@ } ] }, + "resources": { + "search": "Search objects...", + "kind": "Kind", + "namespace": "Namespace", + "labels": "Labels", + "labels_plural": "{{count}} labels", + "filterByKind": "Filter by object kind", + "filterByNamespace": "Filter by namespace", + "filterByStatus": "Filter by status", + "filterByLabel": "Filter by label", + "clearFilters": "Clear Filters", + "noLabelsFound": "No labels found", + "noMatchingFilters": "No objects match the current filters", + "title": "Object Explorer", + "selectKind": "Select Kind / Object", + "selectNamespace": "Select Namespace", + "applyFilters": "Apply Filters", + "results": "Results", + "created": "Created", + "noResourcesFound": "No objects found matching the criteria", + "selectResourceAndNamespace": "Select an object kind and namespace to begin", + "refresh": "Refresh", + "toggleFilters": "Toggle filters", + "description": "Explore and manage Kubernetes objects across your clusters", + "autoRefresh": "Auto-refresh", + "viewMode": { + "grid": "Grid View", + "list": "List View", + "table": "Table View", + "gridLabel": "grid view", + "listLabel": "list view", + "tableLabel": "table view" + }, + "objectSelection": "Object Selection & Filters", + "searchPlaceholder": "Search object kinds...", + "quickSearchPlaceholder": "Quick search objects...", + "bulkActions": { + "resourcesSelected": "{{count}} {{objectText}} selected", + "clearSelection": "Clear Selection", + "viewDetails": "View Details", + "export": "Export" + }, + "sorting": { + "sortBy": "Sort by", + "name": "Sort by Name", + "kind": "Sort by Kind", + "namespace": "Sort by Namespace", + "createdAt": "Sort by Created" + }, + "emptyState": { + "readyToExplore": "Ready to explore", + "noResourcesFound": "No objects found", + "noResourcesDescription": "No objects match your current filters. Try adjusting your search criteria or clearing filters.", + "getStartedDescription": "Select an object kind and namespace to begin exploring your Kubernetes objects.", + "getStarted": "Get Started", + "clearFilters": "Clear Filters" + }, + "actions": { + "view": "View", + "viewDetails": "View Details", + "editYaml": "Edit YAML", + "delete": "Delete", + "more": "More" + }, + "filters": { + "activeFilters": "Active Filters:", + "kindFilter": "Kind: {{kind}}", + "namespaceFilter": "Namespace: {{namespace}}", + "labelFilter": "{{key}}: {{value}}", + "clear": "Clear ({{count}})" + }, + "menus": { + "resourceKinds": "Object Kinds ({{count}})", + "namespaces": "Namespaces ({{count}})", + "labels": "Labels ({{count}} keys)", + "noLabelsFound": "No labels found in the current objects", + "active": "Active" + }, + "stats": { + "resourceOverview": "Object Overview", + "topResourceKinds": "Top Object Kinds", + "topNamespaces": "Top Namespaces" + }, + "table": { + "name": "Name", + "kind": "Kind", + "namespace": "Namespace", + "status": "Status", + "age": "Age", + "createdAt": "Created", + "labels": "Labels", + "actions": "Actions" + }, + "preview": { + "objectDetails": "Object Details", + "namespace": "Namespace", + "createdAt": "Created", + "uid": "UID", + "noLabels": "No labels", + "labels": "Labels" + }, + "time": { + "justNow": "Just now", + "hoursAgo": "{{count}}h ago", + "daysAgo": "{{count}}d ago" + }, + "loading": { + "resources": "Loading resources...", + "applying": "Applying filters...", + "refreshing": "Refreshing..." + }, + "errors": { + "loadFailed": "Failed to load resources", + "filterFailed": "Failed to apply filters", + "actionFailed": "Action failed" + }, + "notifications": { + "filtersApplied": "Filters applied successfully", + "resourcesRefreshed": "Resources refreshed successfully" + }, + "subtitle": "Explore and manage Kubernetes resources", + "status": { + "healthy": "Healthy", + "warning": "Warning", + "error": "Error", + "active": "Active", + "unknown": "Unknown", + "running": "Running", + "pending": "Pending", + "failed": "Failed", + "progressing": "Progressing", + "scheduled": "Scheduled", + "waiting": "Waiting", + "ready": "Ready", + "notReady": "Not Ready", + "succeeded": "Succeeded", + "outOfSync": "Out of Sync", + "missing": "Missing", + "synced": "Synced" + }, + "unknown": "Unknown" + }, "validation": { "missingRequiredFields": "必須フィールドがありません" } diff --git a/frontend/src/locales/strings.pt.json b/frontend/src/locales/strings.pt.json index 4b4db4e7d..094455d60 100644 --- a/frontend/src/locales/strings.pt.json +++ b/frontend/src/locales/strings.pt.json @@ -1,12 +1,103 @@ { - "raiseIssue": "Reportar um problema", + "common": { + "changes": "Changes", + "clusterLabel": "Cluster Label", + "workloadLabel": "Workload Label", + "workloads": "Workloads", + "clearCanvas": "Clear Canvas", + "clearFilter": "Clear Filter", + "cancel": "Cancel", + "save": "Save", + "edit": "Edit", + "delete": "Delete", + "create": "Create", + "add": "Add", + "refresh": "Refresh", + "search": "Search", + "connect": "Connect", + "import": "Import", + "loading": "Loading...", + "success": "Success", + "error": "Error", + "warning": "Warning", + "actions": "Actions", + "status": { + "status": "Status", + "active": "Active", + "inactive": "Inactive", + "pending": "Pending", + "checking": "Checking", + "success": "Success", + "warning": "Version mismatch", + "error": "Missing", + "installed": "Installed" + }, + "noResource": "No {{resource}} specified", + "copy": "Copy", + "close": "Close", + "update": "Update", + "unknown": "Unknown", + "workload": "Workload", + "tryAgain": "Try Again", + "confirm": "Confirm", + "continue": "Continue", + "back": "Back", + "submit": "Submit", + "settings": "Settings", + "help": "Help", + "details": "Details", + "view": "View", + "yes": "Yes", + "no": "No", + "all": "All", + "none": "None", + "ok": "OK", + "finish": "Finish", + "next": "Next", + "retry": "Retry", + "previous": "Previous", + "page": "Page", + "sync": "Sync", + "clearAll": "Clear All", + "fitView": "Fit View", + "clearSearch": "Clear Search", + "clearFilters": "Clear Filters", + "clear": "Clear", + "of": "of", + "items": "{{count}} item", + "items_plural": "{{count}} items", + "filteredFrom": "filtered from" + }, "admin": { "users": { "title": "Gerenciamento de Usuários", "subtitle": "Usuários do Sistema", + "description": "Manage system users and their permissions", + "searchPlaceholder": "Search users by name, role, or permissions...", + "refresh": "Refresh Users", + "addUser": "Add User", "noUsers": "Nenhum Usuário Encontrado", "noUsersDescription": "Não há usuários no sistema ainda. Clique em 'Adicionar Usuário' para criar seu primeiro usuário.", "noPermissions": "Nenhuma permissão atribuída", + "filters": { + "title": "Filters", + "reset": "Reset Filters", + "role": "Role", + "allRoles": "All Roles", + "permission": "Permission", + "anyPermission": "Any Permission", + "permissionLevel": "Permission Level", + "anyLevel": "Any Level", + "sortBy": "Sort By", + "created": "Creation Date", + "ascending": "Ascending", + "descending": "Descending", + "active": "Active Filters", + "roleFilter": "Role", + "permissionFilter": "Permission", + "levelFilter": "Level", + "searchFilter": "Search" + }, "actions": { "addUser": "Adicionar Usuário", "editUser": "Editar Usuário", @@ -73,7 +164,1685 @@ } } }, + "installationPage": { + "successSection": { + "installed": "is correctly installed and meets the version requirements." + }, + "errorSection": { + "title": "Installation Instructions", + "viewGuide": "View installation guide" + }, + "statusBadge": { + "installed": "Installed", + "versionMismatch": "Version mismatch", + "missing": "Missing", + "checking": "Checking" + }, + "codeBlock": { + "bash": "bash" + }, + "title": "Installation", + "verification": "Verification", + "installCommand": "Run the following command to install", + "verifyCommand": "Verify installation with", + "welcome": "Welcome to KubeStellar", + "gettingStarted": "Get started with KubeStellar by setting up your development environment. Follow our guided installation process to deploy your demo system.", + "tabs": { + "prerequisites": "Prerequisites", + "installation": "Installation" + }, + "sidebarSteps": { + "title": "Installation Steps", + "description": "Follow these steps to set up KubeStellar", + "checkPrerequisites": "Check Prerequisites", + "checkPrerequisitesDescription": "Ensure you have all the required tools installed", + "installKubestellar": "Install KubeStellar", + "installKubestellarDescription": "Deploy KubeStellar using the CLI commands", + "startUsingKubestellar": "Start Using KubeStellar", + "startUsingKubestellarDescription": "Log in and begin managing your clusters" + }, + "documentationLink": "View full installation guide", + "prerequisites": { + "prerequisites": "Prerequisites", + "title": "System Prerequisites", + "description": "Ensure these tools are installed before proceeding", + "kubeflexDescription": "KubeFlex CLI tool (required version ≥ 0.8.0)", + "ocmDescription": "Open Cluster Management CLI (required version between 0.7 and 0.11)", + "helmDescription": "Kubernetes package manager (required version ≥ 3.0.0)", + "kubectlDescription": "Kubernetes command-line tool (required version ≥ 1.27.0)", + "kindDescription": "Tool for running local Kubernetes clusters (required version ≥ 0.20.0)", + "dockerDescription": "Container runtime (required version ≥ 20.0.0)", + "status": { + "success": "Success", + "warnings": "Warnings", + "missing": "Missing", + "checking": "Checking" + }, + "coreRequirements": "Core Requirements", + "demoEnvironmentRequirements": "Demo Environment Requirements", + "buttons": { + "nextInstallation": "Next: Installation", + "checking": "Checking...", + "refresh": "Refresh" + } + }, + "installation": { + "title": "Install KubeStellar", + "description": "Choose your platform and run the installation script", + "installPrerequisitesFirst": { + "title": "Install Prerequisites First", + "description": "Before running the installation script, ensure you have all the required prerequisites installed on your system.", + "button": "View Install Prerequisites" + }, + "platform": "Platform", + "platforms": { + "kind": "kind", + "k3d": "k3d" + }, + "installationScript": "Installation Script", + "scriptInstructions": "Run this command in your terminal to install KubeStellar with", + "installationProcess": { + "title": "Installation Process:", + "steps": [ + "Creates and configures local clusters", + "Installs KubeStellar components and dependencies", + "Sets up proper networking and permissions", + "Configures a demo environment" + ] + }, + "importantNotes": { + "title": "Important Notes:", + "notes": [ + "Installation may take several minutes to complete", + "Ensure you have sufficient system resources available", + "Keep the terminal window open until installation finishes", + "Check the terminal output for any error messages" + ] + }, + "afterInstallation": { + "title": "After Installation:", + "steps": [ + "Verify the installation by checking cluster status", + "Review the getting started documentation", + "Begin managing your KubeStellar environment" + ] + }, + "buttons": { + "backPrerequisites": "Back: Prerequisites", + "startInstallation": "Start Installation", + "installing": "Installing..." + } + }, + "checkingStatus": { + "title": "Checking KubeStellar installation status...", + "description": "This should only take a moment. We're checking if KubeStellar is already installed on your system." + }, + "checkError": { + "title": "Status Check Failed", + "description": "Unable to check if KubeStellar is installed. This could be due to a connection issue with the backend service or the server may be temporarily unavailable.", + "retryButton": "Retry Connection", + "persistenceNote": "If the problem persists, please check your network connection or contact your system administrator." + }, + "footer": { + "copyright": "KubeStellar", + "documentation": "Documentation", + "github": "GitHub", + "description": "KubeStellar is an open-source project. For support, feature requests, or bug reports, please visit our GitHub repository." + }, + "skipPrerequisitesNotice": { + "title": "Prerequisites Check Skipped", + "description": "Prerequisites check has been disabled in this environment. You can proceed directly to installation.", + "note": "Note: Ensure you have installed all required tools manually before running the installation commands." + }, + "toasts": { + "alreadyInstalled": "KubeStellar is already installed! Redirecting to login...", + "notInstalled": "Kubeflex cluster not found. Follow steps to set up KubeStellar environment.", + "checkFailed": "Failed to check KubeStellar status", + "preparingInstructions": "Preparing installation instructions...", + "followInstructions": "Follow the CLI installation instructions below to install KubeStellar", + "loadInstructionsFailed": "Failed to load installation instructions. Please refresh the page and try again.", + "installationDetected": "KubeStellar installation detected! Redirecting to login page...", + "recheckingPrerequisites": "Rechecking prerequisites...", + "prerequisitesRechecked": "Prerequisites rechecked successfully", + "recheckFailed": "Failed to recheck prerequisites" + } + }, + "header": { + "themeToggle": "Toggle theme", + "dashboard": "Dashboard", + "clusters": "Clusters", + "workloads": "Workloads", + "policies": "Policies", + "settings": "Settings", + "logout": "Logout", + "language": "Language", + "importCluster": "Import Cluster", + "menu": "Menu", + "goToHome": "Go to home page", + "logoAlt": "KubeStellar Logo", + "themeToggleTip": "Alt+Q to toggle theme", + "switchTheme": "Switch to {{mode}} mode", + "switchLanguage": "Switch language", + "selectLanguage": "Select Language", + "enterFullscreen": "Enter fullscreen mode", + "exitFullscreen": "Exit fullscreen mode", + "fullscreen": "Toggle fullscreen mode" + }, + "login": { + "controlPlane": "Control Plane", + "layout": { + "logoAlt": "KubeStellar", + "tagline": "Seamless Multi-Cluster Management", + "taglineEmphasis": "Built for the Future.", + "fullscreen": "Toggle full screen", + "welcomeBack": "Welcome Back", + "accessDashboard": "Access Your Dashboard", + "enterCredentials": "Enter your credentials below", + "needHelp": "Need help?", + "contactSupport": "Contact Support" + }, + "loading": { + "logoAlt": "KubeStellar", + "initializing": "Initializing KubeStellar Environment..." + }, + "form": { + "username": "Username", + "password": "Password", + "rememberMe": "Remember me", + "signIn": "Sign In to KubeStellar", + "signingIn": "Signing in...", + "showPassword": "Show password", + "hidePassword": "Hide password", + "errors": { + "usernameRequired": "Username is required", + "passwordRequired": "Password is required" + } + } + }, + "clusters": { + "title": "Manage Clusters", + "subtitle": "Manage and monitor your Kubernetes clusters", + "searchPlaceholder": "Search clusters by name, label, status or context...", + "importCluster": "Import Cluster", + "activeFilters": "Active Filters:", + "search": "Search", + "noClustersFound": "No Clusters Found", + "noClustersMatchBoth": "No clusters match both your search and filter criteria", + "noClustersMatchSearch": "No clusters match your search term", + "noClustersMatchFilter": "No clusters match your filter selection", + "noClustersAvailable": "No clusters available yet. Import your first cluster to get started.", + "importYourFirst": "Import Your First Cluster", + "filteredByLabel": "Filter by Label", + "actions": { + "viewDetails": "View Details", + "editLabels": "Edit Labels", + "copyName": "Copy Name", + "detachCluster": "Detach Cluster" + }, + "status": { + "title": "Status", + "active": "Active", + "inactive": "Inactive", + "pending": "Pending" + }, + "table": { + "name": "Name", + "labels": "Labels", + "creationTime": "Creation Time", + "context": "Context", + "status": "Status", + "actions": "Actions" + }, + "quickConnect": { + "title": "Connect via Quick Connect", + "description": "Import your cluster using the quick connect feature", + "clusterName": "Cluster Name", + "clusterNamePlaceholder": "Enter a name for your cluster", + "token": "Token", + "tokenPlaceholder": "Enter your token", + "hubApiServer": "Hub API Server", + "hubApiServerPlaceholder": "Enter hub API server URL", + "steps": { + "step1": { + "title": "Choose Your Cluster", + "description": "Select a cluster from the dropdown above" + }, + "step2": { + "title": "One-Click Onboarding", + "description": "Click \"Onboard Cluster\" button to start the automated process" + }, + "step3": { + "title": "Instant Connection", + "description": "Your cluster will be automatically onboarded without manual commands" + } + } + }, + "manualImport": { + "title": "Manual Cluster Setup", + "subtitle": "Recommended", + "description": "Follow the steps below to manually import your cluster using kubectl commands", + "generateCommand": "Generate Command", + "copyCommand": "Copy Command", + "runInTerminal": "Run in Terminal", + "commandGenerated": "Command Generated Successfully", + "selectCluster": "Select Cluster", + "generateImportCommand": "Generate Import Command", + "importCommand": "Import Command" + }, + "apiUrl": { + "title": "Connect via API/URL", + "description": "Import your cluster by providing the API endpoint and authentication details", + "endpoint": "API/URL Endpoint", + "endpointPlaceholder": "https://kubernetes.example.com:6443", + "token": "Authentication Token (Optional)", + "tokenPlaceholder": "Enter authentication token if required", + "connectImport": "Connect & Import" + }, + "excluded": [ + "kubestellar-report", + "kube-node-lease", + "kube-public", + "default", + "kube-system", + "open-cluster-management-hub", + "open-cluster-management", + "local-path-storage" + ], + "labels": { + "label": "Label", + "editvalue": "Both key and value are required", + "manage": "Manage Labels", + "bulkTooltipDisabled": "Select at least 2 clusters to enable bulk labeling", + "bulkTooltipEnabled": "Manage labels for selected clusters", + "clearFilter": "Clear Filter", + "searchLabelsPlaceholder": "Search labels...", + "bulkEditTitle": "Edit Labels for {{count}} Clusters", + "editTitle": "Edit Labels for {{name}}", + "bulkEditDescription": "You are editing labels for {{count}} clusters. The changes will be applied to all selected clusters.", + "keyPlaceholder": "e.g. environment", + "valuePlaceholder": "e.g. production", + "protectedLabelsCannotBeModified": "🔒 Protected labels cannot be modified.", + "exitSearch": "Exit search", + "saveChanges": "Save changes", + "saveChangesButton": "Save Changes", + "tooltipTitle": "Clusters:", + "noLabelsAvailable": "No cluster labels available. Please add clusters with labels to use in binding policies.", + "noLabelsMatchSearch": "No labels match your search.", + "noLabelsFound": "No labels found in available clusters.", + "clickToAdd": "Click on a label to add it to the canvas", + "edit": "Edit Labels", + "add": "Add Labels", + "for": "for", + "bulkEdit": "Bulk Edit Mode", + "appendToExisting": "Append to existing labels", + "key": "Label Key", + "value": "Label Value", + "noLabels": "No labels added yet", + "noMatchingLabels": "No matching labels found", + "addYourFirst": "Add your first label using the fields above to help organize this cluster.", + "tip": "Tip: Press Enter to move between fields, or double-click labels to edit them", + "tryDifferentSearch": "Try a different search term or clear the search", + "count": "{{count}} label{{count, plural, one {} other {s}}}", + "description": "Add, edit, or remove labels to organize and categorize your cluster.", + "defaultProtected": "Default label - Cannot be modified", + "bindingProtected": "Used in binding policy - Cannot be modified", + "manageLabels": "Manage Labels", + "bulkLabels": "Bulk Labels", + "editValue": "Edit label", + "removeLabel": "Delete label", + "cancelEdit": "Cancel editing", + "added": "Added new label: {{key}}", + "updated": "Updated existing label: {{key}}", + "removed": "Removed label: {{key}}", + "updateSuccess": "Label updated successfully", + "duplicate": "Label with key \"{{key}}\" already exists", + "protected": "Cannot modify protected label: {{key}}", + "finishEditing": "Finish Editing", + "noClustersToEdit": "No clusters available to edit", + "noClustersSelected": "No clusters selected", + "cannotDeleteUsed": "Labels are used in Binding Policy and cannot be deleted. Please remove the policy first.", + "bulkUpdateSuccess": "Labels updated for all {{count}} clusters", + "bulkUpdatePartial": "Labels updated for {{success}} clusters, failed for {{failures}} clusters", + "bulkUpdateFail": "Failed to update labels for all {{count}} clusters" + }, + "dialog": { + "selectMultipleClusters": "Select Multiple Clusters", + "selectClusterToEdit": "Select Cluster to Edit", + "selectedCount": "{{count}} selected", + "editClustersButton": "Edit {{count}} Clusters" + }, + "list": { + "more": "more", + "title": "Manage Clusters", + "subtitle": "Manage and monitor your Kubernetes clusters", + "searchPlaceholder": "Search clusters by name, label, status or context...", + "import": "Import Cluster", + "noResults": "No clusters found", + "name": "Name", + "creationTime": "Creation Time", + "context": "Context", + "description": "Manage and monitor your Kubernetes clusters", + "filter": "Status Filter", + "activeFilters": "Active Filters:", + "searchFilter": "Search: \"{{query}}\"", + "statusFilter": "Status: {{value}}", + "labelFilter": "Label: {{key}}={{value}}", + "clearAll": "Clear All", + "showingResults": "{{count}} result{{count, plural, one {} other {s}}}", + "clearSearch": "Press Esc to clear search", + "importCluster": "Import Cluster", + "importYourFirst": "Import Your First Cluster", + "searchLabelsPlaceholder": "Search labels...", + "search": "Search", + "label": "Label", + "filteredByLabel": "Filtered by label:", + "filterByLabel": "Click to filter by this label", + "noClustersFound": "No Clusters Found", + "noClustersMatchBoth": "No clusters match both your search and filter criteria", + "noClustersMatchSearch": "No clusters match your search term", + "noClustersMatchFilter": "No clusters match your filter selection", + "noClustersAvailable": "No clusters available yet. Import your first cluster to get started.", + "table": { + "name": "Name", + "labels": "Labels", + "creationTime": "Creation Time", + "context": "Context", + "status": "Status", + "actions": "Actions" + }, + "status": { + "active": "Active", + "inactive": "Inactive", + "pending": "Pending" + }, + "actions": { + "viewDetails": "View Details", + "editLabels": "Edit Labels", + "copyName": "Copy Name", + "detachCluster": "Detach Cluster" + }, + "labels": { + "edit": "Edit Labels", + "add": "Add Labels", + "bulkEdit": "Bulk Edit Mode", + "appendToExisting": "Append to existing labels", + "key": "Label Key", + "value": "Label Value", + "noLabels": "No labels added yet", + "noMatchingLabels": "No matching labels found", + "addYourFirst": "Add your first label using the fields above to help organize this cluster.", + "tip": "Tip: Press Enter to move between fields, or double-click labels to edit them", + "tryDifferentSearch": "Try a different search term or clear the search", + "count": "{{count}} label{{count, plural, one {} other {s}}}", + "description": "Add, edit, or remove labels to organize and categorize your cluster.", + "defaultProtected": "Default label - Cannot be modified", + "bindingProtected": "Used in binding policy - Cannot be modified", + "manage": "Manage Labels" + } + }, + "details": { + "title": "Cluster Details", + "overview": "Overview", + "labels": "Labels", + "resources": "Resources", + "status": "Status", + "events": "Events", + "logs": "Logs" + }, + "clusterDetailDialog": { + "title": "Cluster Details", + "loading": "Loading cluster information...", + "error": { + "title": "Failed to load cluster details", + "description": "There was an error retrieving information for this cluster." + }, + "status": { + "available": "Available", + "unavailable": "Unavailable" + }, + "kubernetes": "Kubernetes {{version}}", + "createdOn": "Created on {{date}}", + "labels": "Labels", + "labelCount": "{{count}} labels", + "noLabels": "No labels have been assigned to this cluster", + "capacityResources": "Capacity & Resources", + "cpuCores": "CPU Cores", + "memory": "Memory", + "podCapacity": "Pod Capacity", + "lastRefreshed": "Last refreshed", + "noClusterSelected": "No cluster selected" + }, + "dashboard": { + "title": "Dashboard", + "lastUpdatedJustNow": "Last updated: just now", + "status": "Status: Optimal", + "other": "Other", + "distribution": "Distribution", + "state": "Pending or inactive", + "otherClusters": "Other Clusters", + "hoverFormula": "Hover to see the formula breakdown", + "healthScore": "Health Score Formula", + "clusterHealth": "Overall Cluster Health", + "clusterStatus": "Cluster Status", + "welcome": "Welcome to the KubeStellar management dashboard", + "errorLoading": "Error loading cluster information", + "addCluster": "Add Cluster", + "notAvailable": "N/A", + "invalidDate": "Invalid Date", + "managedClusters": "Managed Clusters", + "grafana": "Grafana", + "total": "total", + "viewAll": "View all", + "cpuCapacity": "CPU Capacity", + "memoryCapacity": "Memory Capacity", + "podCapacity": "Pod Capacity", + "podCapacityLabel": "Pod Capacity", + "active": "Active", + "inactive": "Inactive", + "noManagedClusters": "No managed clusters found", + "importCluster": "Import Cluster", + "showMoreClusters": "Show more clusters", + "clustersActive": "Clusters Active", + "systemHealth": "System Health", + "refresh": "Refresh", + "noRecentActivity": "No recent activity found", + "recentActivity": "Recent Activity", + "resourceUtilization": "Resource Utilization", + "clusterMetrics": "Based on cluster metrics", + "pods": { + "formula": "Pod Health Formula", + "calculation": "Calculated based on the ratio of healthy pods to total pods across all namespaces.", + "status": "Factors in pod status, readiness probes, and liveness checks", + "value": "Higher values indicate better cluster health", + "formulaDesc": "(Running Pods / Total Pods) × 100%", + "health": "Pod Health" + }, + "cpu": { + "usage": "CPU Usage", + "formula": "CPU Usage Formula", + "calculation": "Calculated as the percentage of allocated CPU resources currently in use across all nodes in the cluster.", + "value": "Lower values indicate better resource availability", + "formulaDesc": "(Used CPU Cores / Total CPU Cores) × 100%", + "health": "Lower values indicate better performance" + }, + "memory": { + "usage": "Memory Usage", + "formula": "Memory Usage Formula", + "calculation": "Calculated as the percentage of allocated memory resources currently in use across all nodes in the cluster.", + "value": "Lower values indicate better resource availability", + "formulaDesc": "(Used Memory / Total Memory) × 100%" + }, + "stats": { + "running": "Running and available", + "totalClusters": "Total Clusters", + "activeClusters": "Active Clusters", + "bindingPolicies": "Binding Policies", + "currentContext": "Current Context", + "none": "None" + }, + "health": { + "excellent": "Excellent", + "good": "Good", + "fair": "Fair", + "needsAttention": "Needs Attention", + "critical": "Critical" + }, + "guide": { + "title": "Dashboard Guide", + "clusterStats": "Cluster Stats", + "clusterStatsDesc": "Shows total and active clusters. Hover over metrics to see detailed information about how they're calculated.", + "healthMetrics": "Health Metrics", + "healthMetricsDesc": "Displays CPU, memory usage, and pod health. Green indicators show good health, amber requires attention.", + "recentActivity": "Recent Activity", + "recentActivityDesc": "Shows recent changes to clusters and policies. Click on a cluster to view detailed information.", + "proTip": "Pro Tip", + "proTipDesc": "Hover over any metric or chart to see detailed information about how it's calculated and what actions you can take." + } + }, + "detach": { + "title": "Detach Cluster", + "confirmation": "Are you sure you want to detach the following cluster?", + "context": "Context", + "warning": "Warning: This action will remove the cluster from management. It will no longer be visible or controlled from this interface.", + "detaching": "Detaching...", + "detach": "Detach Cluster" + } + }, + "webSocket": { + "errors": { + "notConnected": "WebSocket is not connected", + "closingError": "Error closing WebSocket:", + "expectedStringData": "Expected string data for JSON parsing", + "processingFailed": "Failed to process WebSocket message", + "connectionError": "WebSocket error" + } + }, + "wdsQueries": { + "errors": { + "fetchWorkloads": "Failed to fetch workloads", + "errorFetchingWorkloads": "Error fetching workloads:", + "fetchWorkloadDetails": "Failed to fetch workload details", + "errorFetchingWorkloadDetails": "Error fetching workload details:", + "statusFetchFailed": "Status fetch failed:", + "createWorkloadFailed": "Failed to create workload", + "errorCreatingWorkload": "Error creating workload:", + "uploadFileFailed": "Failed to upload file", + "errorUploadingFile": "Error uploading file:", + "updateWorkloadFailed": "Failed to update workload", + "errorUpdatingWorkload": "Error updating workload:", + "scaleWorkloadFailed": "Failed to scale workload", + "errorScalingWorkload": "Error scaling workload:", + "deleteWorkloadFailed": "Failed to delete workload", + "errorDeletingWorkload": "Error deleting workload:", + "fetchWorkloadLogsFailed": "Failed to fetch workload logs", + "errorFetchingWorkloadLogs": "Error fetching workload logs:" + }, + "success": { + "workloadCreated": "Workload created successfully", + "fileUploaded": "File uploaded successfully", + "workloadUpdated": "Workload updated successfully", + "workloadScaled": "Scaled workload to {{replicas}} replicas", + "workloadDeleted": "Workload deleted successfully" + }, + "defaults": { + "deploymentKind": "deployment", + "defaultNamespace": "default" + } + }, + "clusterQueries": { + "status": { + "available": "Available", + "unavailable": "Unavailable" + }, + "logging": { + "clusterOnboardRequestPayload": "[DEBUG] Cluster onboard request payload:", + "clusterOnboardResponse": "[DEBUG] Cluster onboard response:", + "onboardSuccessful": "[DEBUG] Cluster onboard mutation successful, invalidating clusters query cache", + "onboardError": "[DEBUG] Cluster onboard mutation error:", + "mutationStart": "[DEBUG] ========== MUTATION START ==========", + "context": "[DEBUG] Context:", + "cluster": "[DEBUG] Cluster:", + "originalLabels": "[DEBUG] Original Labels:", + "deletedLabels": "[DEBUG] Deleted Labels:", + "processingBulkUpdate": "[DEBUG] Processing bulk label update for {{count}} clusters", + "addingDeletedLabels": "[DEBUG] Adding deleted labels as empty values:", + "finalLabels": "[DEBUG] Final labels being sent to backend:", + "apiPayload": "[DEBUG] API payload:", + "apiResponse": "[DEBUG] API response:", + "apiError": "[DEBUG] API error:", + "labelsUpdated": "[DEBUG] Labels updated successfully, invalidating clusters query cache", + "errorUpdatingLabels": "[DEBUG] Error updating cluster labels:", + "detachingCluster": "[DEBUG] Detaching cluster:", + "detachSuccessful": "[DEBUG] Cluster detach successful, invalidating clusters query cache", + "detachError": "[DEBUG] Cluster detach mutation error:", + "skippingDetailsFetch": "[DEBUG] Skipping details fetch for virtual bulk cluster" + }, + "messages": { + "applyLabelsToMultipleClusters": "Will apply labels to {{count}} clusters" + }, + "defaults": { + "virtualBulkOperationId": "virtual-bulk-operation" + } + }, + "bpQueries": { + "logging": { + "fetchingPolicyDetails": "Fetching complete details for binding policy: {{policyName}}", + "receivedResponses": "Received responses from both API endpoints", + "foundPolicyDetails": "Found policy details in main BP response:", + "receivedStatusData": "Received status data:", + "yamlFromResponse": "Using YAML directly from response root", + "yamlFromMetadata": "Using YAML from metadata.annotations.yaml", + "yamlAvailable": "Extracted YAML content for policy {{policyName}} is available ({{length}} chars)", + "noYamlFound": "No YAML content found for policy {{policyName}}", + "parsedYaml": "Parsed YAML:", + "errorParsingYaml": "Error parsing YAML:", + "usingStatus": "Using status \"{{status}}\" from status API endpoint", + "finalPolicyObject": "Final policy object:", + "extractedUniqueWorkloads": "Extracted {{count}} unique workloads total", + "rawBindingPolicies": "Raw binding policies:" + }, + "errors": { + "policyNotFound": "Policy {{policyName}} not found in the main response", + "errorParsingJson": "Error parsing JSON from raw fieldsv1:", + "resourcesNull": "Resources is null for namespace {{namespace}}, resourceType {{resourceType}}", + "resourcesNullClusterScoped": "Resources is null for cluster-scoped resourceType {{resourceType}}" + } + }, + "wecsTopology": { + "title": "Remote-Cluster Treeview", + "createWorkload": "Create Workload", + "viewModes": { + "tiles": "Tiles", + "list": "List" + }, + "note": "Note: Default, Kubernetes system, and OpenShift namespaces are filtered out from this view.", + "emptyState": { + "title": "No Workloads Found", + "description": "Get started by creating your first workload" + }, + "contextMenu": { + "details": "Details", + "edit": "Edit", + "logs": "Logs", + "execPods": "Exec Pods" + }, + "fullscreen": { + "toggle": "Toggle fullscreen view" + }, + "timeAgo": { + "today": "Today", + "days": "{{count}} day", + "days_plural": "{{count}} days" + }, + "status": { + "active": "Active", + "inactive": "Inactive" + }, + "zoomControls": { + "groupByResource": "Group By Resource/Kind", + "expandAll": "Expand all the child nodes of all parent nodes", + "collapseAll": "Collapse all the child nodes of all parent nodes", + "zoomIn": "Zoom In", + "zoomOut": "Zoom Out", + "resetZoom": "Reset Zoom", + "edgeStyle": "Edge Style", + "curvy": "Curvy", + "square": "Square", + "fullscreen": "Enter Fullscreen", + "exitFullscreen": "Exit Fullscreen" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" + }, + "nodeLabel": { + "labels": "Labels:", + "noLabels": "No labels" + } + }, + "wecsDetailsPanel": { + "common": { + "update": "Update", + "sync": "Sync", + "delete": "Delete", + "close": "Close", + "unknown": "Unknown", + "na": "N/A", + "today": "Today", + "daysAgo": "{{count}} days ago" + }, + "buttons": { + "clearTerminal": "Clear Terminal", + "minimize": "Minimize", + "maximize": "Maximize" + }, + "tabs": { + "summary": "SUMMARY", + "edit": "EDIT", + "logs": "LOGS", + "execPods": "EXEC PODS" + }, + "terminal": { + "connecting": "Connecting to pod shell in container {{containerName}}...", + "connected": "Connected to pod shell in container {{containerName}}", + "connectionClosed": "Connection closed", + "connectionNotActive": "Connection not active. Cannot send command.", + "errorConnecting": "Error connecting to pod. Please try again." + }, + "format": { + "yaml": "YAML", + "json": "JSON" + }, + "table": { + "kind": "KIND", + "name": "NAME", + "namespace": "NAMESPACE", + "createdAt": "CREATED AT", + "context": "CONTEXT", + "labels": "LABELS" + }, + "containers": { + "selectContainer": "Select container", + "noContainersFound": "No containers found" + }, + "logs": { + "previousLogs": "Previous Logs", + "currentLogs": "Current Logs", + "selectLogsContainer": "Select logs container" + }, + "errors": { + "failedLoadClusterDetails": "Failed to load cluster details.", + "failedLoadDetails": "Failed to load {{type}} details.", + "apiNotImplemented": "API not implemented for updating pod \"{{resourceName}}\"", + "failedFetchContainers": "Failed to fetch container list", + "failedFetchLogsContainers": "Failed to fetch container list for logs", + "failedConnectExec": "Failed to connect to exec session", + "failedInitExec": "Failed to initialize exec session", + "failedUpdate": "Failed to update manifest", + "resourceNotFound": "Resource not found", + "permissionDenied": "Permission denied", + "invalidManifest": "Invalid manifest format", + "namespaceRequired": "Namespace is required" + }, + "success": { + "manifestUpdated": "Manifest updated successfully" + }, + "cluster": { + "active": "Active" + }, + "exec": { + "connected": "Connected" + }, + "noManifest": "No manifest available" + }, + "treeView": { + "title": "Manage Workloads", + "createWorkload": "Create Workload", + "note": "Note: Default, Kubernetes system, and OpenShift namespaces are filtered out from this view.", + "filteringContext": "Filtering: Showing only resources from the {{context}} context.", + "unknown": "Unknown", + "viewModes": { + "tiles": "Tiles", + "list": "List" + }, + "timeAgo": { + "today": "Today", + "days": "{{count}} day", + "days_plural": "{{count}} days" + }, + "emptyState": { + "title": "No Workloads Found", + "description": "Get started by creating your first workload" + }, + "fullscreen": { + "toggle": "Toggle fullscreen view" + }, + "zoomControls": { + "groupByResource": "Group By Resource/Kind", + "expandAll": "Expand all the child nodes of all parent nodes", + "collapseAll": "Collapse all the child nodes of all parent nodes", + "zoomIn": "Zoom In", + "zoomOut": "Zoom Out", + "resetZoom": "Reset Zoom", + "edgeStyle": "Edge Style", + "curvy": "Curvy", + "square": "Square", + "fullscreen": "Enter Fullscreen", + "exitFullscreen": "Exit Fullscreen" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" + }, + "contextMenu": { + "details": "Details", + "delete": "Delete", + "edit": "Edit", + "logs": "Logs" + }, + "deleteDialog": { + "title": "Confirm Resource Deletion", + "message": "Are you sure you want to delete \"{{name}}\"? This action cannot be undone.", + "confirm": "Yes, Delete" + } + }, + "quickConnect": { + "title": "One-Click Cluster Setup", + "description": "Simplified, automated cluster onboarding with zero commands. Select your cluster and let the system handle the rest.", + "selectCluster": "Select a Kubernetes Cluster", + "searchingClusters": "Searching for available clusters...", + "errorLoadingClusters": "Error Loading Clusters", + "automatedOnboarding": "Automated Cluster Onboarding", + "new": "New", + "automatedDescription": "This is the simplest way to connect your Kubernetes cluster. Select a cluster and click the Onboard button to directly connect it without any manual commands.", + "retry": "Retry", + "chooseCluster": "Choose a cluster...", + "noClusters": "No clusters available", + "discoveredClusters": { + "title": "Discovered Clusters", + "description": "These are clusters discovered in your environment. Select one to continue." + }, + "refreshClustersList": "Refresh clusters list", + "howToConnect": "How to Connect Your Cluster", + "steps": { + "step1": { + "title": "Choose Your Cluster", + "description": "Select a cluster from the dropdown above" + }, + "step2": { + "title": "One-Click Onboarding", + "description": "Click \"Onboard Cluster\" button to start the automated process" + }, + "step3": { + "title": "Instant Connection", + "description": "Your cluster will be automatically onboarded without manual commands" + } + }, + "whyUseAutomated": "Why Use Automated Onboarding?", + "approaches": { + "automated": { + "title": "Automated Approach (New)", + "features": [ + "One-click setup process", + "No manual command execution", + "Streamlined experience", + "Reduced chance of errors" + ] + }, + "manual": { + "title": "Manual Approach (Legacy)", + "features": [ + "Copy and run commands manually", + "Multiple CLI steps required", + "More complex process", + "Requires command line knowledge" + ] + } + }, + "buttons": { + "onboarding": "Onboarding...", + "onboard": "Onboard Cluster", + "back": "Back", + "close": "Close", + "openDashboard": "Open Cluster Dashboard", + "goToDashboard": "Go to Dashboard" + }, + "success": { + "title": "Cluster Onboarded Successfully", + "clusterAdded": "Cluster added successfully", + "clusterAvailable": "Your cluster is now available in the platform", + "message": "Cluster {{clusterName}} has been successfully onboarded to the platform.", + "detailMessage": "Your cluster {{clusterName}} has been successfully onboarded. Here's what you can do next:", + "nextSteps": { + "viewManage": { + "title": "View & Manage", + "description": "Access your cluster through the dashboard to view resources and status" + }, + "deployApps": { + "title": "Deploy Applications", + "description": "Deploy containerized applications and services to your cluster" + }, + "configureSettings": { + "title": "Configure Settings", + "description": "Customize and configure your cluster settings and policies" + } + } + } + }, + "bindingPolicy": { + "editPolicy": "Edit Policy", + "saveAndCreatePolicy": "Save & Create Policy", + "title": "Manage Binding Policies", + "description": "Create and manage binding policies for workload distribution", + "createBindingPolicy": "Create Binding Policy", + "noBindingPolicies": "No Binding Policies Found", + "noBindingPoliciesDescription": "No binding policies available", + "noBindingPoliciesWithFilter": "No binding policies match your {{status}} filter criteria", + "notifications": { + "fetchError": "Failed to fetch binding policies", + "createSuccess": "Binding policy created successfully", + "createError": "Failed to create binding policy", + "deleteSuccess": "Binding policy \"{{name}}\" deleted successfully", + "deleteError": "Failed to delete binding policy", + "deleteManySuccess": "{{count}} binding {{count, plural, one {policy} other {policies}}} deleted successfully", + "deleteManyError": "Failed to delete binding policies", + "deploySuccess": "Deployment completed successfully", + "deployError": "Deployment failed", + "yamlGenerateError": "Failed to generate binding policy YAML", + "quickConnectError": "Failed to create binding policy", + "labelsAssignedTitle": "Labels Assigned", + "policyBindingCreatedTitle": "Policy Binding Created", + "labelsAssignedChip": "Labels help target policies to specific resources", + "policyBindingCreatedChip": "Binding created for policy propagation" + }, + "tabs": { + "selectItems": "Click and Drop", + "yaml": "YAML", + "uploadFile": "Upload File" + }, + "upload": { + "createNamespaceAutomatically": "Create Namespace Automatically", + "chooseDifferentYaml": "Choose Different YAML File", + "filePreview": "File Preview", + "chooseOrDrag": "Choose or Drag & Drop a YAML File", + "or": "- or -", + "chooseYaml": "Choose YAML File", + "uploadAndDeploy": "Upload and Deploy", + "dropHere": "Drop YAML File Here", + "chooseOrUpload": "Choose or Upload a YAML File", + "selectFile": "Select YAML File", + "acceptedFormats": "Accepted formats: .yaml, .yml", + "chooseDifferentFile": "Choose Different File" + }, + "previewGeneratedYaml": "Preview Generated YAML", + "deployBindingPolicies": "Deploy Binding Policies", + "deployBindingPolicy": "Deploy Binding Policy", + "creating": "Creating...", + "loadingResources": "Loading Resources...", + "deploying": "Deploying...", + "table": { + "name": "Binding Policy Name", + "clusters": "Clusters", + "workload": "Resources", + "creationDate": "Creation Date", + "status": "Status", + "actions": "Actions", + "noClusters": "No target clusters defined", + "noWorkloads": "No workloads defined" + }, + "yamlGeneration": { + "resourceRequired": "At least one resource type must be specified", + "resourceRequiredYaml": "At least one resource type must be specified for YAML generation" + }, + "quickConnect": { + "unknownWorkload": "unknown", + "unknownLocationGroup": "unknown" + }, + "loading": "Loading...", + "unknown": "Unknown", + "visualization": { + "title": "Binding Policy Network", + "policies": "{{count}} Policies", + "targetCluster": "Target Cluster", + "clusters": "{{count}} Clusters", + "workloads": "{{count}} Workloads", + "showWorkloads": "Show Workloads", + "highlightActive": "Highlight Active", + "refresh": "Refresh visualization", + "fitView": "Fit View", + "search": "Search nodes... (⌘+K)", + "legend": "Legend", + "policyPreview": "Policy Preview", + "policyDistribution": "Policy Distribution", + "previewMode": "Preview Mode", + "workloadSource": "Workload Source", + "matchingWorkloads": "{{count}} matching workload{{count, plural, one {} other {s}}}", + "matchRateShort": "{{matchRate}}% Match", + "targetClusters": "Target Clusters ({{count}})", + "moreClusters": "+{{count}} more", + "policyInsights": "Policy Insights", + "status": "Status", + "lastModified": "Last Modified", + "notModified": "Not modified", + "matchRate": "Match Rate", + "matchRateLong": "{{matchRate}}% of available clusters", + "legendItems": { + "activePolicy": "Active Policy", + "cluster": "Cluster", + "workload": "Workload", + "activeConnection": "Active Connection", + "inactiveConnection": "Inactive Connection" + }, + "layout": { + "title": "Layout", + "horizontal": "Horizontal", + "vertical": "Vertical", + "radial": "Radial" + }, + "empty": { + "title": "No Visualization Data", + "description": "There are no binding policies, clusters, or workloads to visualize. Create some resources to see them in this view." + }, + "error": { + "title": "Visualization Error", + "description": "An error occurred while rendering the visualization." + }, + "loading": "Loading visualization...", + "searchResources": "Search Resources", + "noNodesFound": "No nodes found matching \"{{searchTerm}}\"" + }, + "policyName": "Policy Name", + "namespace": "Namespace", + "propagationMode": "Propagation Mode", + "updateStrategy": "Update Strategy", + "resources": "Resources", + "advanced": "Advanced Settings", + "basic": "Basic Settings", + "scheduling": "Scheduling Rules", + "yaml": "YAML", + "modes": { + "downsyncOnly": "Downsync Only", + "upsyncOnly": "Upsync Only", + "bidirectionalSync": "Bidirectional Sync" + }, + "strategies": { + "serverSideApply": "Server Side Apply", + "forceApply": "Force Apply", + "rollingUpdate": "Rolling Update", + "blueGreenDeployment": "Blue-Green Deployment" + }, + "deploymentType": { + "allClusters": "All Available Clusters", + "selectedClusters": "Selected Clusters" + }, + "confirm": { + "title": "Confirm Binding Policy Deployment", + "description": "You are about to deploy {{count}} binding policies. Please review them before proceeding.", + "deploy": "Deploy Policies", + "deploying": "Deploying...", + "viewYaml": "View YAML" + }, + "emptyState": { + "noClusters": { + "title": "No Ready Clusters", + "description": "No clusters are currently available for binding. You need to have at least one cluster in \"Ready\" state before creating binding policies.", + "button": "Manage Clusters" + }, + "noWorkloads": { + "title": "No Workloads Found", + "description": "No workloads are available. Please ensure you have access to workloads.", + "button": "Go to Workloads" + }, + "noResources": { + "title": "No Clusters or Workloads Found", + "description": "You need both clusters and workloads to create binding policies.", + "button": "View Resources" + }, + "noPolicies": { + "title": "No Binding Policies Found", + "description": "Get started by creating your first binding policy", + "button": "Create Binding Policy" + } + }, + "loadingCanvas": "Loading canvas data...", + "selection": { + "infoAlert": "This interface is using simulated responses to create binding policies. Select clusters and workloads from the lists to add them to the canvas, then click on a workload and then a cluster to create a binding policy connection.", + "helpDialog": { + "title": "Create Binding Policies with Direct Connections", + "intro": "Follow these steps to create binding policies:", + "steps": { + "selectClusters": "1. Select clusters from the left panel to include in the canvas", + "selectWorkloads": "2. Select workloads from the right panel to include in the canvas", + "createConnection": "3. Click on a workload first, then a cluster to create a direct connection", + "fillDetails": "4. Fill in the policy details in the dialog that appears", + "deploy": "5. Use the 'Deploy Binding Policies' button to simulate deployment" + }, + "gotIt": "Got it", + "helpDialog": { + "title": "How to Create Binding Policies", + "intro": "Follow these steps to create binding policies:", + "steps": { + "selectLabels": "1. Select labels to add to the canvas", + "selectLabelsDesc": "Click on clusters from the left panel and workloads from the right panel to add them to the binding policy canvas", + "deploy": "2. Deploy your policies", + "deployDesc": "Click 'Deploy Binding Policies' to create and deploy binding policies that connect workloads to clusters based on the selected labels" + }, + "tip": "Tip: The label-based approach allows you to create powerful binding policies that automatically apply to all resources matching the selected labels, both now and in the future.", + "dontShowAgain": "Don't Show Again", + "tooltip": "View selection instructions" + } + } + }, + "messages": { + "noSelectedPolicies": "No policies selected for deletion", + "invalidPolicyNames": "Error: Some selected policy names are invalid", + "partialDeleteSuccess": "Deleted {{success}} policies, but failed to delete {{failures}} policies", + "deleteError": "Error deleting binding policies: {{errorMessage}}", + "updateSuccess": "Binding Policy \"{{name}}\" updated successfully", + "updateError": "Error updating binding policy \"{{name}}\"", + "simulatedAssignment": "Successfully assigned {{policy}} to {{targetType}} {{target}}", + "policyCreatedSuccess": "Successfully created binding policy: {{name}}" + }, + "editDialog": { + "title": "Edit Binding Policy", + "infoTitle": "Info", + "info": "Edit your binding policy configuration. Changes will be applied after saving.", + "name": "Binding Policy Name", + "save": "Save Changes", + "unsavedTitle": "Unsaved Changes", + "unsavedWarning": "Warning", + "unsavedInfo": "You have unsaved changes. Are you sure you want to close without saving?", + "continueEditing": "Continue Editing", + "discard": "Discard Changes" + }, + "deleteDialog": { + "title": "Delete Binding Policy", + "confirm": "Are you sure you want to delete the binding policy \"{{name}}\"? This action cannot be undone." + }, + "header": { + "searchPlaceholder": "Search policies by name, label or status", + "clearSearch": "Press Esc to clear search", + "deleteSelected": "Delete Selected", + "create": "Create Binding Policy", + "activeFilters": "Active Filters:", + "search": "Search", + "status": "Status", + "clearAll": "Clear All" + }, + "statusFilter": { + "all": "All Status", + "active": "Active", + "pending": "Pending", + "inactive": "Inactive", + "label": "Status Filter" + }, + "availableItems": { + "title": "Available Items", + "subtitle": "Select and add policies, clusters, or workloads to the canvas by clicking on them.", + "policy-list": "Policies", + "cluster-list": "Clusters", + "workload-list": "Workloads", + "clickToAdd": "Click an item to add it to the canvas", + "none": "No {{title}} available" + }, + "canvas": { + "policiesOnCanvas": "Policies on Canvas:", + "clusters": "{{count}} Clusters", + "workloads": "{{count}} Workloads", + "status": "Status:", + "namespace": "Namespace:", + "namespaces": "Namespaces:", + "clustersOnCanvas": "Clusters on Canvas:", + "workloadsOnCanvas": "Workloads on Canvas:", + "selectClusters": "Select Clusters here", + "matches": "Matches: {{count}} {{resourceType}}" + }, + "labels": { + "title": "Labels:", + "key": "Key", + "value": "Value", + "add": "Add" + }, + "creatingConnection": "Creating connection:", + "previewDialog": { + "title": "Policy Preview & Insights", + "visualizationTab": "Visualization", + "detailsTab": "Details", + "matchingDetails": "Matching Details", + "matchedClusters": "Matched Clusters ({{count}})", + "clusterStatus": "{{name}} - {{status}}", + "labels": "Labels: {{labels}}", + "matchedWorkloads": "Matched Workloads ({{count}})", + "workloadNamespace": "{{name}} ({{namespace}})" + }, + "policyNameDialog": { + "title": "Name Your Binding Policy", + "policyName": "Policy Name", + "generateNew": "Generate new name", + "placeholder": "Enter binding policy name...", + "invalid": "Name must be lowercase alphanumeric with hyphens, max 253 characters", + "helper": "Use lowercase letters, numbers, and hyphens only", + "namingTipsTitle": "💡 Naming Tips:", + "namingTips": "Use descriptive names like \"frontend-to-production\" or \"database-sync-policy\" for better organization.", + "creating": "Creating...", + "createPolicy": "Create Policy" + }, + "configureDialog": { + "title": "Configure Binding Policy", + "creatingFor": "Creating Binding Policy for:", + "creatingForDesc": "This will create a binding policy that links the {{sourceType}} to the {{targetType}}.", + "tabs": { + "basic": "Basic", + "advanced": "Advanced", + "scheduling": "Scheduling", + "yaml": "YAML" + }, + "nameHelper": "Name of the binding policy", + "namespaceHelper": "Namespace for the binding policy", + "updateStrategyHelper": "Select how changes to resources should be applied to clusters. Add clusters and workloads by selecting them from the panels.", + "addCustomLabels": "Add custom labels", + "labelsTooltip": "Labels help identify and select resources", + "tolerationsTitle": "Tolerations (Advanced)", + "tolerationExpression": "Toleration Expression", + "tolerationRequired": "Toleration is required", + "schedulingRules": "Scheduling Rules", + "schedulingTooltip": "Define conditions that must be met for a cluster to receive this workload", + "resource": "Resource", + "resource.cpu": "CPU Cores", + "resource.memory": "Memory", + "resource.storage": "Storage", + "resource.pods": "Available Pods", + "operator": "Operator", + "activeRules": "Active Rules:", + "noSchedulingRules": "No scheduling rules added. The policy will apply to all matching clusters regardless of their resources.", + "yamlPreview": "YAML Preview", + "yamlPreviewInfo": "This is a preview of the YAML that will be applied. You can make changes in the other tabs to update this preview." + } + }, + "workloads": { + "label": { + "title": "Workload Label *", + "prefix": "kubestellar.io/workload:", + "helpTextError": "Label not found", + "helpText": "Workload label is key:value pair. Key is constant and defaulted to 'kubestellar.io/workload', you can only change the value." + }, + "github": { + "repositoryUrlLabel": "Repository URL *", + "pathLabel": "Path *", + "branchLabel": "Branch (default: main) *", + "credentialsLabel": "Credentials", + "credentialsTip": "Select or add credentials for private repositories", + "addCredentials": "Add Cred", + "webhooksLabel": "Webhooks", + "webhooksTip": "Select or add a webhook for automated deployments", + "addWebhook": "Add Webhook", + "previousDeploymentsTitle": "List of Previous Deployments", + "loadingPreviousDeployments": "Loading previous deployments...", + "noPreviousDeployments": "No previous deployments available.", + "confirmResourceDeletion": "Confirm Resource Deletion", + "deleteConfirmation": "Are you sure you want to delete \"{{name}}\"? This action cannot be undone.", + "yesDelete": "Yes, Delete", + "apply": "Apply", + "deploying": "Deploying...", + "createFromYourGitHub": "Create from your Github", + "deployFromPopularRepositories": "Deploy from popular repositories", + "listOfPreviousDeployments": "List of Previous Deployments", + "repositoryUrl": "Repository URL *", + "repositoryUrlPlaceholder": "e.g., https://github.com/username/repo", + "repositoryUrlTip": "Use a valid GitHub repository URL", + "path": "Path *", + "pathPlaceholder": "e.g., /path/to/yaml", + "pathTip": "Specify the path to your YAML files in the repository", + "branch": "Branch (default: main) *", + "branchPlaceholder": "e.g., master, dev-branch", + "branchTip": "Specify the branch to deploy from", + "credentials": "Credentials", + "credentialsPlaceholder": "e.g., username-pat", + "title": "Create from your GitHub Repository and deploy!", + "tab": { + "importFromGitHub": "Import from GitHub", + "selectRepositorySource": "Select a repository source to import your application", + "repositorySource": "Repository Source", + "selectRepository": "Select a Repository", + "repositoryDetails": "Repository Details", + "selectedRepository": "Selected Repository:" + }, + "options": { + "yourGitHub": { + "title": "Your GitHub Repository", + "description": "Import from your own GitHub repository" + }, + "enterprise": { + "title": "Enterprise Repository", + "description": "Import from a GitHub Enterprise repository" + }, + "public": { + "title": "Public Repository", + "description": "Import from any public GitHub repository" + }, + "popular": { + "title": "Popular Repositories", + "description": "Choose from our curated list of examples" + }, + "placeholder": { + "yourGitHub": "Your GitHub Repository form would go here", + "enterprise": "Enterprise Repository form would go here", + "public": "Public Repository form would go here" + } + } + }, + "artifactHub": { + "searchPackages": "Search Packages", + "directDeploy": "Deploy Helm Chart from Artifact Hub", + "listRepositories": "List Repositories", + "form": { + "packageId": "Package ID *", + "packageIdTooltip": "Format: helm/repository-name/chart-name (e.g., helm/bitnami/nginx)", + "packageIdPlaceholder": "helm/bitnami/nginx", + "packageIdTip": "Specify the Helm chart package ID (e.g., helm/bitnami/nginx)", + "version": "Version (default: latest)", + "versionTooltip": "Chart version to deploy (e.g., 13.2.12). If not specified, latest will be used.", + "versionPlaceholder": "13.2.12 (leave empty for latest)", + "versionTip": "Specify the version to deploy (leave empty for latest)", + "releaseName": "Release Name *", + "releaseNameTooltip": "Name to identify your Helm release", + "releaseNamePlaceholder": "my-nginx", + "releaseNameTip": "Specify the name of the Helm release", + "namespace": "Namespace", + "namespaceTooltip": "Kubernetes namespace to deploy to", + "namespacePlaceholder": "default", + "namespaceTip": "Specify the namespace to deploy to (defaults to 'default')", + "customValues": "Custom Values", + "customValuesTooltip": "Format: key=value,key2=value2 (e.g., service.type=LoadBalancer,service.port=80)", + "customValuesPlaceholder": "service.type=LoadBalancer,service.port=80", + "customValuesTip": "Custom configuration values for your Helm chart (key=value format)" + }, + "validation": { + "selectPackage": "Please select a package first", + "enterWorkloadLabel": "Please enter a workload label", + "enterPackageId": "Please enter a package ID.", + "enterReleaseName": "Please enter a release name." + }, + "buttons": { + "close": "Close", + "apply": "Apply" + }, + "searchPackagesForm": { + "searchHint": "Start typing to search for Helm packages on Artifact Hub", + "errorMessage": { + "enterSearchTerm": "Please enter a search term", + "noPackagesFound": "No packages found for '{{query}}'", + "searchFailed": "Search failed: {{message}}" + }, + "serviceConfig": { + "title": "Service Configuration", + "serviceType": "Service Type", + "servicePort": "Service Port" + }, + "packageDetails": { + "stars": "Stars", + "repository": "Repository:", + "verified": "Verified", + "namespace": "Namespace" + } + }, + "repositoriesList": { + "tip": "Repositories are sources for Helm charts, click on a card to see more details", + "loading": "Loading repositories...", + "noRepositories": "No repositories available", + "official": "Official", + "helm": "Helm", + "other": "Other", + "organization": "Organization:", + "user": "User:", + "url": "URL:" + } + }, + "yaml": { + "createNamespaceAutomatically": "Create Namespace Automatically", + "editor": "YAML Editor", + "deploy": "Deploy" + }, + "helm": { + "createOwn": "Create your own Helm chart", + "popularCharts": "Deploy from popular Helm charts", + "prevCharts": "Previously Deployed Helm Charts", + "form": { + "repositoryName": "Repository Name *", + "repositoryNameTip": "Specify the name of the Helm repository", + "repositoryNamePlaceholder": "e.g., my-helm-repo", + "repositoryUrl": "Repository URL *", + "repositoryUrlTip": "Use a valid Helm repository URL", + "repositoryUrlPlaceholder": "e.g., https://charts.helm.sh/stable", + "chartName": "Chart Name *", + "chartNameTip": "Specify the name of the Helm chart to deploy", + "chartNamePlaceholder": "e.g., nginx", + "releaseName": "Release Name *", + "releaseNameTip": "Specify the release name for this Helm deployment", + "releaseNamePlaceholder": "e.g., my-release", + "version": "Version (default: latest)", + "versionTip": "Specify the chart version to deploy", + "versionPlaceholder": "e.g., 1.2.3", + "namespace": "Namespace *", + "namespaceTip": "Specify the namespace for the Helm chart", + "namespacePlaceholder": "e.g., default, my-namespace", + "searchChartLabel": "Search Helm Chart" + }, + "userCharts": { + "loading": "Loading user charts...", + "noCharts": "No user-created charts available.", + "delete": "Delete", + "confirmDeletion": "Confirm Resource Deletion", + "deleteConfirmation": "Are you sure you want to delete \"{{chartId}}\"? This action cannot be undone.", + "deleteSuccess": "Chart {{chartId}} deleted successfully!", + "deleteError": "Chart {{chartId}} not deleted!" + }, + "buttons": { + "cancel": "Cancel", + "deploying": "Deploying...", + "apply": "Apply" + }, + "messages": { + "selectChart": "Please select a Helm chart to deploy.", + "deploySuccess": "Selected {{chartName}} Helm chart deployed successfully!", + "deployFailureReuse": "Deployment failed: failed to install chart: cannot re-use a name that is still in use!", + "deployFailure": "Failed to deploy popular Helm chart!" + } + }, + "list": { + "title": "Workloads", + "create": "Create Workload", + "filter": "Filter Workloads", + "noWorkloads": "No workloads found", + "createFirst": "Create your first workload to get started" + }, + "tabs": { + "yaml": "YAML", + "helm": "Helm", + "github": "GitHub", + "artifactHub": "Artifact Hub" + }, + "createOptions": { + "title": "Create Workload", + "subtitle": "Create Workloads", + "yaml": { + "createNamespaceAutomatically": "Create Namespace Automatically", + "deploy": "Deploy", + "cancel": "Cancel" + }, + "file": { + "title": "From File", + "dragDrop": "Drag & Drop your YAML or JSON file here", + "browse": "Browse", + "selectFile": "Select YAML or JSON file", + "fileSelected": "File selected", + "fileSize": "File size", + "deploy": "Deploy", + "cancel": "Cancel", + "noFileSelected": "No file selected.", + "invalidFile": "Please upload a valid YAML or JSON file." + }, + "github": { + "title": "GitHub", + "workloadLabel": "Workload Label", + "workloadLabelPlaceholder": "Enter value for label 'kubestellar.io/workload'", + "repositoryUrl": "Repository URL", + "repositoryUrlPlaceholder": "e.g., https://github.com/username/repo", + "path": "Path", + "pathPlaceholder": "e.g., /path/to/yaml", + "branch": "Branch (default: main)", + "branchPlaceholder": "e.g., master, dev-branch", + "credentials": "Credentials", + "webhook": "Webhook", + "addCredentials": "Add Credentials", + "addWebhook": "Add Webhook", + "deploy": "Deploy", + "cancel": "Cancel" + }, + "helm": { + "title": "Helm", + "repoName": "Repository Name", + "repoNamePlaceholder": "e.g., bitnami", + "repoUrl": "Repository URL", + "repoUrlPlaceholder": "e.g., https://charts.bitnami.com/bitnami", + "chartName": "Chart Name", + "chartNamePlaceholder": "e.g., nginx", + "releaseName": "Release Name", + "releaseNamePlaceholder": "e.g., my-release", + "version": "Version (leave empty for latest)", + "versionPlaceholder": "e.g., 1.0.0", + "namespace": "Namespace", + "namespacePlaceholder": "e.g., default", + "workloadLabel": "Workload Label", + "workloadLabelPlaceholder": "Enter value for label 'kubestellar.io/workload'", + "deploy": "Deploy", + "cancel": "Cancel", + "userCharts": { + "title": "List of user created Charts", + "deleteSuccess": "Chart {{chartId}} deleted successfully!", + "deleteError": "Chart {{chartId}} not deleted!", + "loading": "Loading user charts...", + "noCharts": "No user-created charts available.", + "delete": "Delete", + "confirmDeletion": "Confirm Resource Deletion", + "deleteConfirmation": "Are you sure you want to delete \"{{chartId}}\"? This action cannot be undone." + } + }, + "artifactHub": { + "title": "Artifact Hub", + "searchPlaceholder": "Search for Helm charts...", + "selectPackage": "Please select a package.", + "enterReleaseName": "Please enter a release name." + }, + "credentials": { + "title": "Add Credentials", + "username": "GitHub Username", + "usernamePlaceholder": "Enter your GitHub username", + "token": "Personal Access Token", + "tokenPlaceholder": "Enter your GitHub personal access token", + "add": "Add", + "cancel": "Cancel", + "fillBoth": "Please fill in both GitHub Username and Personal Access Token." + }, + "webhook": { + "title": "Add Webhook", + "url": "Webhook URL", + "urlPlaceholder": "Enter webhook URL", + "token": "Personal Access Token", + "tokenPlaceholder": "Enter personal access token for webhook", + "add": "Add", + "cancel": "Cancel", + "fillBoth": "Please fill in both Webhook URL and Personal Access Token." + }, + "cancelConfirmation": { + "title": "Discard Changes?", + "message": "You have unsaved changes. Are you sure you want to cancel?", + "confirm": "Yes, Discard", + "cancel": "No, Keep Editing" + }, + "notifications": { + "workloadDeploySuccess": "Workload Deploy successful!", + "deploymentSuccess": "Deployment successful!", + "helmDeploySuccess": "Helm chart deployed successfully!", + "artifactHubDeploySuccess": "Artifact Hub deployment successful!", + "credentialAddedSuccess": "Credential added successfully!", + "webhookAddedSuccess": "Webhook added successfully!", + "deploymentConflict": "Conflict error: Deployment already in progress!", + "workloadAlreadyExists": "Failed to create {{kind}} {{name}} in namespace {{namespace}}, workload is already exists or Namespace {{namespace}} not Found", + "unknownWorkloadExists": "Failed to create Unknown {{name}} workload is already exists", + "helmDeployFailed": "Deployment failed: failed to install chart: cannot re-use a name that is still in use!", + "gitRepoError": "Failed to clone repository, fill correct url and path !", + "enterWorkloadLabel": "Please enter Workload Label.", + "invalidWorkloadLabel": "You can only enter value, key is constant and defauled to 'kubestellar.io/workload'.", + "enterGitRepo": "Please enter Git repository.", + "enterPath": "Please enter Path.", + "enterRepoName": "Please enter a repository name.", + "enterRepoUrl": "Please enter a repository URL.", + "enterChartName": "Please enter a chart name.", + "enterReleaseName": "Please enter a release name.", + "enterNamespace": "Please enter a namespace.", + "enterYamlJson": "Please enter YAML or JSON content.", + "needMetadataName": "At least one document must have 'metadata.name'" + } + } + }, + "visualization": { + "policyDistribution": "{{count}} Connections", + "clusters": { + "edge": "Edge Cluster", + "aiInference": "AI Inferencing Cluster", + "aiTraining": "AI Training Cluster", + "service": "Service Cluster", + "compute": "Compute Cluster", + "descriptions": { + "edge": "Edge computing resources for low-latency processing", + "aiInference": "Real-time AI model inference and prediction services", + "aiTraining": "High-performance compute for AI model training", + "service": "Core microservices and API endpoints", + "compute": "General-purpose compute resources" + } + }, + "title": "Visualization", + "controls": "View Controls", + "zoom": "Zoom", + "searchResources": "Search Resources" + }, + "namespaces": { + "default": "default", + "create": "Create Namespace", + "select": "Select Namespace" + }, + "errors": { + "policyNameRequired": "Policy name is required", + "policyNotFound": "Policy {{name}} not found", + "parseError": "Unable to parse binding policies response", + "unexpectedFormat": "Unexpected API response format", + "error": "Error", + "required": "This field is required", + "invalidFormat": "Invalid format", + "connectionFailed": "Connection failed", + "forbidden": "You don't have permission to access this resource", + "serverError": "Server error occurred", + "notFound": "Resource not found", + "timeout": "Request timed out", + "unknown": "An unknown error occurred", + "contextNameRequired": "Context name is required", + "versionRequired": "KubeStellar version is required", + "operationTimeout": "Operation timed out. The process might still be running in the background.", + "failedToCreateContext": "Failed to create context", + "creatingContext": "Error creating context:", + "websocketConnectionFailed": "Could not connect to the server. Please check your network connection and try again.", + "websocketClosedUnexpectedly": "WebSocket connection closed unexpectedly", + "fetchingContexts": "Error fetching contexts:" + }, + "contexts": { + "filterByContext": "Filter by context", + "allContexts": "All Contexts", + "showingAllContexts": "Showing resources from all contexts", + "filteringByContext": "Filtering to show only {{context}} context", + "createdSuccessfully": "Context created successfully!", + "websocketClosed": "WebSocket connection closed:", + "contextCreatedSuccess": "Context \"{{contextName}}\" created successfully!", + "createNewContext": "Create New Context", + "contextName": "Context Name", + "kubestellarVersion": "KubeStellar Version", + "creating": "Creating...", + "createContext": "Create Context" + }, + "policySelectionStore": { + "labelsAssigned": "Labels automatically assigned to {{itemType}} {{itemId}}", + "policyAssigned": "Successfully assigned {{policyName}} to {{targetType}} {{targetName}}", + "clusterAlreadyAssigned": "Cluster {{targetName}} is already assigned to policy {{policyName}}", + "workloadAlreadyAssigned": "Workload {{targetName}} is already assigned to policy {{policyName}}" + }, + "auth": { + "login": { + "success": "Login successful", + "error": "Login error:", + "successWithUser": "Login successful for user: {{username}}. Redirecting to {{path}}", + "invalidCredentials": "Invalid username or password. Please try again.", + "authFailed": "Authentication failed. Please check your credentials.", + "noToken": "No token received from server", + "invalidRequest": "Invalid request. Please check your input and try again.", + "serverError": "Server error. Please try again later." + } + }, + "kubestellarData": { + "logging": { + "clustersApiResponse": "Clusters API Response:", + "processedClusters": "Processed clusters:", + "errorFetchingClusters": "Error fetching clusters:", + "processedWorkloads": "Processed workloads:", + "errorFetchingWorkloads": "Error fetching workloads:", + "errorFetchingPolicies": "Error fetching policies:", + "assigningPolicy": "Assigning policy {{policyName}} to {{targetType}} {{targetName}}" + }, + "errors": { + "failedFetchClusters": "Failed to fetch clusters", + "failedFetchWorkloads": "Failed to fetch workloads", + "failedFetchPolicies": "Failed to fetch policies", + "errorAssigningPolicy": "Error assigning policy:", + "failedToAssign": "Failed to assign {{policyName}} to {{targetType}} {{targetName}}" + }, + "success": { + "successfullyAssigned": "Successfully assigned {{policyName}} to {{targetType}} {{targetName}}" + }, + "defaults": { + "unknown": "Unknown", + "ready": "Ready", + "deployment": "Deployment", + "defaultNamespace": "default", + "active": "Active", + "alwaysMatch": "AlwaysMatch" + } + }, "profileSection": { + "logoutMessage": "You have been successfully logged out.", + "account": "Account", + "admin": "Admin", + "helpSupport": "Help & Support", + "raiseIssue": "Report an Issue", + "signOut": "Sign Out", "changePassword": "Alterar senha", "changePasswordSubtitle": "Por favor, insira sua senha atual e escolha uma nova.", "currentPassword": "Senha atual", @@ -88,6 +1857,233 @@ "changePasswordButton": "Alterar senha", "passwordsMatch": "As senhas coincidem!" }, + "onboardingLogs": { + "onboarding": "Onboarding", + "complete": "Complete", + "connecting": "Connecting to log stream...", + "errors": { + "websocketFailed": "WebSocket connection failed. Please try again.", + "connectionFailed": "Failed to connect to log stream. Please try again." + }, + "status": { + "processing": "Processing", + "verifying": "Verifying", + "available": "Available", + "completed": "Completed", + "error": "Error" + } + }, + "newAppDialog": { + "title": "Create New App", + "githubUrl": "GitHub URL", + "path": "Path", + "deploy": "Deploy" + }, + "navbar": { + "generateLog": "Generate Log", + "toggleTheme": "Toggle theme", + "brandName": "KubestellarUI", + "its": "ITS", + "wds": "WDS", + "logFilename": "kubestellarui.log", + "generateLogError": "Failed to generate log. Please try again." + }, + "manualImportTab": { + "loadingClusters": "Loading available clusters...", + "errorLoadingClusters": "Error loading clusters", + "title": "Manual Cluster Setup", + "recommended": "Recommended", + "description": "This is the simplest way to connect your Kubernetes cluster. Select a cluster and click the Onboard Cluster button to directly connect it to your platform without any manual commands.", + "selectCluster": "Select a cluster to connect", + "chooseCluster": "Choose a cluster...", + "noClusters": "No clusters available", + "discoveredClusters": "These are clusters discovered in your environment. Select one to continue.", + "refreshClustersList": "Refresh clusters list", + "howToConnect": "How to connect your cluster", + "steps": { + "selectCluster": "Select a cluster from the dropdown above", + "clickOnboard": "Click \"Onboard Cluster\" button to directly connect your cluster", + "autoOnboard": "Your cluster will be automatically onboarded without manual commands" + }, + "connectionError": "Connection Error", + "installationGuide": "Installation Guide:", + "installCommand": "To install clusteradm, run:", + "commandCopied": "Installation command copied!", + "onboarding": "Onboarding...", + "onboardCluster": "Onboard Cluster", + "clusterAddedSuccess": "Cluster has been added to the platform", + "clusterOnboardedSuccess": "Your cluster {{clusterName}} has been successfully onboarded. You can now:", + "nextSteps": { + "viewManage": "View and manage the cluster in the dashboard", + "deployApps": "Deploy applications and services to the cluster", + "configureSettings": "Configure and manage the cluster settings" + }, + "viewDashboard": "View Cluster in Dashboard", + "goToDashboard": "Go to Dashboard" + }, + "logModal": { + "connectedToStream": "Connected to log stream...", + "connectionClosed": "Complete Logs. Connection closed.", + "retryConnection": "Connection closed. Please retry.", + "logs": "Logs", + "loadingLogs": "Loading logs..." + }, + "loadingFallback": { + "loadingContent": "Loading content..." + }, + "listView": { + "connecting": "Connecting to the server...", + "receivingWorkloads": "Receiving workloads...", + "receivedWorkloadsSoFar": "Received {{count}} workloads so far", + "allWorkloadsReceived": "All {{count}} workloads received", + "connectionLost": "Connection lost. Showing {{count}} workloads", + "connectionError": "Failed to connect to the server. Trying alternative method...", + "fetchingFallback": "Fetching workloads using alternative method...", + "invalidResponseFormat": "Invalid response format from server", + "unknownError": "An unknown error occurred while fetching workloads", + "errorLoading": "Error loading workloads", + "namespace": "Namespace", + "created": "Created", + "downloadLogs": "Download logs", + "pagination": { + "showing": "Showing {{from}}-{{to}} of {{total}}", + "filtered": " in {{context}} context", + "prev": "Previous", + "next": "Next" + }, + "resourceStats": "{{raw}} raw resources processed into {{processed}} workloads", + "filteredByContext": "Filtered by context: {{context}}", + "showingResourceCount": "Showing {{showing}} of {{total}} resources", + "noWorkloads": { + "title": "No workloads found", + "noResourcesForContext": "No resources found for context: {{context}}", + "resourcesFilteredOut": "All resources have been filtered out", + "getStarted": "Create your first workload to get started", + "resourcesAvailable": "{{count}} resources available in other contexts", + "noMatchingFilters": "No resources match the current filters" + }, + "troubleshooting": { + "title": "Troubleshooting steps:", + "step1": "1. Check your network connection", + "step2": "2. Ensure the backend server is running", + "step3": "3. Verify your authentication credentials", + "step4": "4. Try refreshing the page" + } + }, + "kubeconfigImport": { + "title": "Upload Kubeconfig File", + "description": "Import your cluster by uploading a kubeconfig file", + "dragAndDrop": "Drag and drop your kubeconfig file here", + "or": "- or -", + "browseFiles": "Browse Files", + "importCluster": "Import Cluster" + }, + "importClusters": { + "title": "Import Cluster", + "description": "Connect your Kubernetes cluster to the platform", + "tabs": { + "quickConnect": "Quick Connect", + "kubeconfig": "Kubeconfig", + "apiUrl": "API/URL" + }, + "abortDialog": { + "title": "Abort Onboarding Process", + "warning": "Are you sure you want to abort onboarding? All progress will be lost.", + "continue": "Continue Onboarding", + "confirm": "Yes, Abort" + }, + "fileUpload": { + "selected": "File \"{{filename}}\" selected. Upload functionality to be implemented." + }, + "icons": { + "quickConnect": "quick connect", + "kubeconfig": "kubeconfig", + "apiUrl": "api url", + "ariaLabel": "import" + } + }, + "groupPanel": { + "close": "Close panel", + "tableAriaLabel": "Group items table", + "table": { + "name": "Name", + "groupKind": "Group/Kind", + "syncOrder": "Sync Order", + "namespace": "Namespace", + "createdAt": "Created At" + }, + "notAvailable": "N/A" + }, + "downloadLogsModal": { + "title": "Download Logs", + "fileSize": "File size", + "download": "Download" + }, + "footer": { + "commit": "Commit", + "viewCommit": "View commit details on GitHub" + }, + "downloadLogsButton": { + "title": "Download logs", + "placeholder": { + "header": "Logs for pod {{podName}} in namespace {{namespace}} on cluster {{cluster}}", + "generated": "Generated at: {{date}}", + "noContent": "Log content not available directly. Please use the streaming logs feature." + }, + "toast": { + "success": "Downloaded logs for {{podName}}", + "error": "Failed to download logs" + } + }, + "detachmentLogsDialog": { + "title": "Detaching Cluster: {{clusterName}}", + "logs": "Detachment Logs", + "connected": "Connected", + "disconnected": "Disconnected", + "connecting": "Connecting to detachment service...", + "completedSuccessfully": "Cluster detachment completed successfully.", + "done": "Done" + }, + "addWebhookDialog": { + "copiedToClipboard": "Copied to clipboard!", + "setupWebhook": "Setup Webhook", + "localDevSmee": "Local Development Using Smee.io", + "installSmee": "Install Smee Client (npm install -g smee-client).", + "goToSmee": "Go to Smee.io and create a new channel.", + "copySmeeUrl": "Copy the generated Smee.io URL.", + "runSmeeClient": "Run Smee client to forward webhooks to your local Go backend:", + "smeeCommand": "smee --url smee-url --target {{baseUrl}}/api/webhook", + "smeeCommandCopy": "smee --url --target {{baseUrl}}/api/webhook", + "configureWebhookSmee": "Configure the webhook in your external service using the Smee.io URL.", + "startGoBackend": "Start your Go backend and ensure it listens at /api/webhook.", + "testWebhook": "Test the webhook.", + "vmIp4000": "Webhook on a Virtual Machine (VM) Using IP:4000", + "ensureGoBackend4000": "Ensure your Go backend is running on port 4000 and handling /api/webhook.", + "openPort4000": "Open port 4000 in your firewall/security group (UFW, AWS, GCP, or Azure).", + "findPublicIp": "Find your public IP (curl ifconfig.me) and add.", + "configureWebhookVm": "Configure the webhook in your external service using:", + "vmWebhookUrl": "http://your-public-ip:4000/api/webhook", + "vmWebhookUrlCopy": "http://:4000/api/webhook", + "testWebhookOtherMachine": "Test the webhook from another machine.", + "keepGoServerRunning": "Keep your Go server running in the background (nohup or systemd)." + }, + "cancelConfirmationDialog": { + "title": "Cancel Workload Creation", + "titlePolicy": "Cancel Policy Creation", + "warning": "Warning", + "message": "Are you sure you want to cancel? All changes will be lost.", + "continueEditing": "Continue Editing", + "yesCancel": "Yes, Cancel" + }, + "addCredentialsDialog": { + "title": "Add Credentials", + "usernameLabel": "Github Username *", + "usernamePlaceholder": "e.g., onkar717", + "usernameTip": "Enter your GitHub username", + "tokenLabel": "Personal Access Token (PAT) *", + "tokenPlaceholder": "e.g., ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "tokenTip": "Enter your GitHub Personal Access Token" + }, "commandPalette": { "ariaLabel": "Abrir paleta de comandos", "title": "Paleta de comandos (Ctrl+K)", @@ -104,13 +2100,6 @@ "arrows": "↑↓", "enter": "↵" }, - "sections": { - "navigation": "Navegação", - "visualizations": "Visualizações", - "help": "Ajuda", - "account": "Conta", - "admin": "Administração" - }, "commands": { "home": { "title": "Início", @@ -124,10 +2113,18 @@ "title": "Clusters Gerenciados", "description": "Gerenciar clusters Kubernetes" }, + "Grafana": { + "title": "Grafana Dashboard", + "description": "Grafana Dashboard" + }, "workloads": { "title": "Workloads", "description": "Gerenciar workloads entre clusters" }, + "resourceExplorer": { + "title": "Object Explorer", + "description": "Search and filter Kubernetes objects" + }, "bindingPolicies": { "title": "Políticas de binding", "description": "Configurar políticas de binding" @@ -153,10 +2150,21 @@ "description": "Sair da sua conta", "infoMessage": "Você saiu com sucesso." }, + "metricsDashboard": { + "title": "Metrics Dashboard", + "description": "Monitor system performance and metrics" + }, "galaxyMarketplace": { "title": "Mercado Galaxy", "description": "Descubra e instale plugins do Mercado Galaxy" } + }, + "sections": { + "navigation": "Navegação", + "admin": "Administração", + "visualizations": "Visualizações", + "help": "Ajuda", + "account": "Conta" } }, "menu": { @@ -173,14 +2181,648 @@ "stagedWorkloads": "Workloads Preparados", "bindingPolicies": "Políticas de binding", "deployedWorkloads": "Workloads Implantados", + "resourceExplorer": "Object Explorer", "pluginManager": "Gerenciador de Plugins", "userManagement": "Gerenciamento de Usuários", + "metricsDashboard": "Metrics Dashboard", "galaxyMarketplace": "Mercado Galaxy" } }, + "plugins": { + "title": "Plugin Manager", + "description": "Manage and monitor KubeStellar plugins", + "install": { + "title": "Install New Plugin", + "methods": { + "local": "Local Path", + "github": "GitHub" + }, + "localPlaceholder": "Please select a file", + "githubPlaceholder": "https://github.com/user/plugin-repo", + "browse": "Browse", + "installLocal": "Install from Local Path", + "installGithub": "Install from GitHub", + "localHelp": "Install a plugin from a local directory on your system. Click Browse to select a folder or manually enter the full path.", + "githubHelp": "GitHub installation is not yet implemented. Use local path installation for now.", + "placeholder": "Plugin URL, GitHub repository, or local path", + "button": "Install", + "installing": "Installing...", + "success": "Plugin installed successfully", + "error": "Failed to install plugin" + }, + "list": { + "title": "Installed Plugins", + "noPlugins": "No plugins installed", + "noPluginsDescription": "Get started by installing your first plugin", + "searchPlaceholder": "Search plugins by name, author, or status...", + "total": "Total", + "active": "Active", + "inactive": "Inactive" + }, + "card": { + "version": "v{{version}}", + "author": "by {{author}}", + "status": { + "active": "Active", + "inactive": "Inactive", + "loading": "Loading", + "error": "Error" + }, + "actions": { + "enable": "Enable", + "disable": "Disable", + "details": "Details", + "uninstall": "Uninstall", + "reload": "Reload", + "settings": "Settings", + "feedback": "Feedback" + } + }, + "details": { + "title": "Plugin Details", + "information": "Information", + "configuration": "Configuration", + "routes": "API Routes", + "widgets": "Widgets", + "assets": "Assets", + "noRoutes": "No API routes defined", + "noWidgets": "No widgets available", + "noAssets": "No assets loaded" + }, + "notifications": { + "enableSuccess": "Plugin {{name}} enabled successfully", + "enableError": "Failed to enable plugin {{name}}", + "disableSuccess": "Plugin {{name}} disabled successfully", + "disableError": "Failed to disable plugin {{name}}", + "uninstallSuccess": "Plugin {{name}} uninstalled successfully", + "uninstallError": "Failed to uninstall plugin {{name}}", + "reloadSuccess": "Plugin {{name}} reloaded successfully", + "reloadError": "Failed to reload plugin {{name}}", + "fetchError": "Failed to load plugin data" + }, + "confirmations": { + "uninstall": { + "title": "Confirm Plugin Uninstallation", + "message": "Are you sure you want to uninstall \"{{name}}\"? This action cannot be undone and will remove all plugin data.", + "confirm": "Yes, Uninstall" + }, + "disable": { + "title": "Confirm Plugin Disable", + "message": "Disabling \"{{name}}\" will stop all plugin functionality. You can re-enable it later.", + "confirm": "Yes, Disable" + }, + "enable": { + "title": "Confirm Plugin Enable", + "message": "Enabling \"{{name}}\" will activate all plugin functionality and make it available for use.", + "confirm": "Yes, Enable" + } + }, + "marketplace": { + "title": "KubeStellar Galaxy Marketplace", + "subtitle": "Discover and install plugins to enhance your KubeStellar experience", + "browse": "Browse Available Plugins", + "featured": "Featured Plugins", + "categories": "Categories", + "search": "Search marketplace..." + }, + "development": { + "title": "Plugin Development", + "createNew": "Create New Plugin", + "template": "Use Template", + "documentation": "View Documentation", + "examples": "Examples" + }, + "feedback": { + "title": "Share Your Feedback", + "rate": "Rate this plugin", + "comment": { + "title": "Your Comment", + "placeholder": "Tell us about your experience" + }, + "suggestion": { + "title": "Suggestions for Improvement", + "placeholder": "Any suggestions for Improvements ?" + } + } + }, "marketplace": { "title": "KubeStellar Galaxy Marketplace", - "description": "Descubra e instale plugins para melhorar sua experiência KubeStellar" + "subtitle": "Discover and install plugins to enhance your KubeStellar experience", + "searchPlaceholder": "Search plugins, authors, categories...", + "filters": "Filters", + "sortPopular": "Most Popular", + "sortRating": "Highest Rated", + "sortNewest": "Recently Added", + "searchResults": "Search Results", + "allPlugins": "All Plugins", + "clearFilters": "Clear Filters", + "loadMore": "Load More Plugins", + "adminPanel": "Admin Panel", + "categories": { + "all": "All Plugins", + "management": "Management", + "monitoring": "Monitoring", + "security": "Security", + "networking": "Networking", + "storage": "Storage", + "database": "Database", + "ai": "AI & Machine Learning", + "devops": "DevOps", + "automation": "Automation", + "integration": "Integration", + "analytics": "Analytics", + "backup": "Backup & Recovery", + "compliance": "Compliance", + "testing": "Testing", + "development": "Development Tools" + }, + "plugin": { + "status": { + "active": "Active", + "inactive": "Inactive", + "loading": "Loading", + "error": "Error", + "installed": "Installed", + "notInstalled": "Not Installed" + }, + "actions": { + "install": "Install", + "uninstall": "Uninstall", + "enable": "Enable", + "disable": "Disable", + "update": "Update", + "viewDetails": "View Details", + "download": "Download", + "rate": "Rate", + "review": "Review", + "share": "Share", + "report": "Report Issue" + }, + "details": { + "overview": "Overview", + "details": "Details", + "feedback": "Feedback", + "documentation": "Documentation", + "dependencies": "Dependencies", + "reviews": "Reviews", + "changelog": "Changelog", + "license": "License", + "author": "Author", + "version": "Version", + "lastUpdated": "Last Updated", + "createdAt": "Created At", + "downloads": "Downloads", + "rating": "Rating", + "category": "Category", + "tags": "Tags", + "size": "Size", + "compatibility": "Compatibility", + "requirements": "Requirements", + "installation": "Installation", + "configuration": "Configuration", + "usage": "Usage", + "troubleshooting": "Troubleshooting" + }, + "feedback": { + "title": "Plugin Feedback", + "rating": "Rating", + "comment": "Comment", + "submit": "Submit Feedback", + "submitting": "Submitting...", + "success": "Feedback submitted successfully", + "error": "Failed to submit feedback", + "placeholder": "Tell us about your experience with this plugin...", + "ratingRequired": "Please provide a rating", + "commentRequired": "Please provide a comment" + }, + "installation": { + "title": "Installation", + "installing": "Installing...", + "success": "Plugin installed successfully", + "error": "Failed to install plugin", + "confirm": "Are you sure you want to install this plugin?", + "requirements": "Requirements", + "dependencies": "Dependencies", + "steps": "Installation Steps", + "verification": "Verification" + } + }, + "featured": { + "title": "Featured Plugins", + "subtitle": "Hand-picked plugins for the best experience", + "viewAll": "View All Featured", + "noFeatured": "No featured plugins available", + "loading": "Loading featured plugins..." + }, + "admin": { + "title": "Marketplace Administration", + "overview": "Overview", + "plugins": "Plugins", + "users": "Users", + "settings": "Settings", + "stats": { + "totalPlugins": "Total Plugins", + "pendingReviews": "Pending Reviews", + "totalDownloads": "Total Downloads", + "activeUsers": "Active Users" + }, + "actions": { + "uploadPlugin": "Upload Plugin", + "deletePlugin": "Delete Plugin", + "approvePlugin": "Approve Plugin", + "rejectPlugin": "Reject Plugin", + "featurePlugin": "Feature Plugin", + "unfeaturePlugin": "Unfeature Plugin" + }, + "upload": { + "title": "Upload New Plugin", + "selectFile": "Select Plugin File", + "dragDrop": "Drag & Drop plugin file here", + "supportedFormats": "Supported formats: .tar.gz, .zip", + "maxSize": "Maximum file size: 100MB", + "uploading": "Uploading...", + "success": "Plugin uploaded successfully", + "error": "Failed to upload plugin" + }, + "delete": { + "title": "Delete Plugin", + "confirm": "Are you sure you want to delete \"{{name}}\"? This action cannot be undone.", + "deleting": "Deleting...", + "success": "Plugin deleted successfully", + "error": "Failed to delete plugin" + }, + "quickActions": "Quick Actions", + "uploadNewPlugin": "Upload New Plugin", + "reviewPlugins": "Review Plugins", + "searchPlugins": "Search plugins...", + "allStatus": "All Status", + "active": "Active", + "inactive": "Inactive", + "loadingPlugins": "Loading plugins...", + "noPluginsFound": "No plugins found.", + "userManagement": "User Management", + "userManagementComingSoon": "User management features coming soon.", + "adminSettings": "Admin Settings", + "settingsComingSoon": "Settings panel coming soon.", + "marketplaceManagement": "Marketplace Management", + "adminPanel": "Admin Panel" + }, + "search": { + "noResults": "No plugins found", + "noResultsDescription": "Try adjusting your search terms or browse all plugins", + "clearSearch": "Clear search", + "searching": "Searching...", + "resultsCount": "{{count}} plugin{{count, plural, one {} other {s}}} found" + }, + "errors": { + "failedToLoad": "Failed to load marketplace data", + "failedToInstall": "Failed to install plugin", + "failedToUninstall": "Failed to uninstall plugin", + "failedToEnable": "Failed to enable plugin", + "failedToDisable": "Failed to disable plugin", + "failedToSubmitFeedback": "Failed to submit feedback", + "pluginNotFound": "Plugin not found", + "installationFailed": "Installation failed", + "networkError": "Network error occurred", + "serverError": "Server error occurred" + }, + "success": { + "pluginInstalled": "Plugin installed successfully", + "pluginUninstalled": "Plugin uninstalled successfully", + "pluginEnabled": "Plugin enabled successfully", + "pluginDisabled": "Plugin disabled successfully", + "feedbackSubmitted": "Feedback submitted successfully", + "pluginUpdated": "Plugin updated successfully" + }, + "loading": { + "loadingPlugins": "Loading amazing plugins...", + "discoveringGalaxy": "Discovering the galaxy of possibilities", + "loadingMarketplace": "Loading marketplace...", + "loadingPlugin": "Loading plugin details...", + "installingPlugin": "Installing plugin...", + "uninstallingPlugin": "Uninstalling plugin..." + }, + "empty": { + "noPlugins": "No plugins found", + "noPluginsDescription": "No plugins match your current filters", + "showAllPlugins": "Show All Plugins", + "noFeaturedPlugins": "No featured plugins available", + "noCategories": "No categories available", + "noSearchResults": "No search results found" + }, + "backToMarketplace": "Back to Marketplace", + "enable": "Enable", + "disable": "Disable", + "install": "Install", + "uninstall": "Uninstall", + "by": "By", + "overview": "Overview", + "details": "Details", + "feedback": "Feedback", + "docSection": "Documentation", + "description": "Descubra e instale plugins para melhorar sua experiência KubeStellar", + "dependencies": "Dependencies", + "keyFeatures": "Key Features", + "technicalDetails": "Technical Details", + "generalInfo": "General Information", + "version": "Version", + "lastUpdated": "Last Updated", + "author": "Author", + "license": "License", + "category": "Category", + "requirements": "Requirements", + "kubestellarVersion": "KubeStellar Version", + "platforms": "Platforms", + "fileSize": "File Size", + "pluginIdentifiers": "Plugin Identifiers", + "tags": "Tags", + "userFeedback": "User Feedback", + "leaveFeedback": "Leave Feedback", + "yourFeedback": "Your Feedback", + "rating": "Rating", + "comments": "Comments", + "delete": { + "confirmTitle": "Delete Plugin", + "confirmLabel": "Type the plugin name to confirm:", + "confirmPlaceholder": "Enter plugin name here", + "mismatch": "Plugin name does not match", + "confirmed": "Plugin name confirmed", + "deleteButton": "Delete Plugin", + "deleting": "Deleting Plugin...", + "deletingMessage": "Please wait while we remove your plugin.", + "success": "Plugin Deleted Successfully!", + "error": "Delete Failed", + "tryAgain": "Try Again", + "title": "Delete Plugin" + }, + "upload": { + "dragDrop": "Drag and drop your plugin here", + "browseFiles": "Browse Files", + "requirements": "Upload Requirements:", + "reviewFile": "Review Your Plugin", + "uploadPlugin": "Upload Plugin", + "uploading": "Uploading Plugin...", + "success": "Plugin Uploaded Successfully!", + "error": "Upload Failed", + "tryAgain": "Try Again", + "title": "Upload Plugin", + "supportedFormat": "or click to browse. Supported format: .tar.gz", + "confirmUpload": "Please confirm the details below before uploading", + "processingFile": "Processing your plugin file. This may take a moment.", + "successMessage": "Your plugin has been uploaded and is now available in the marketplace.", + "errorMessage": "Something went wrong while uploading your plugin.", + "invalidFileType": "Invalid file type. Please upload a .tar.gz file.", + "fileTooLarge": "File size too large. Maximum size is 50MB." + }, + "common": { + "featured": "FEATURED", + "viewDetails": "View Details", + "installNow": "Install Now", + "installing": "Installing...", + "installed": "Installed", + "uninstalling": "Uninstalling...", + "rating": "rating", + "downloads": "downloads", + "updated": "Updated", + "recently": "recently", + "by": "by", + "unknownAuthor": "Unknown author", + "noDescription": "No description available", + "premiumPlugins": "Discover Premium Plugins", + "enhanceWorkflow": "Enhance your workflow with powerful plugins designed specifically for Kubernetes and cloud-native environments.", + "exploreMarketplace": "Explore Marketplace", + "suggestedCategories": ["Monitoring", "Security", "Development", "Deployment", "Storage"], + "noPluginsFound": "No plugins found", + "tryAdjustingSearch": "Try adjusting your search terms or browse all plugins", + "noMatchingFilters": "No plugins match your current filters", + "showAllPlugins": "Show All Plugins", + "remaining": "remaining", + "allPlugins": "All Plugins", + "plugin": "plugin", + "plugins": "plugins", + "tags": "Tags:", + "license": "License", + "created": "Created", + "routes": "Routes", + "loadTime": "Load Time", + "endpoints": "endpoint", + "endpoints_plural": "endpoints", + "seconds": "s", + "misc": "Misc", + "installPlugin": "Install Plugin", + "noRoutes": "No API routes defined", + "noWidgets": "No widgets available", + "noAssets": "No assets loaded", + "unnamedPlugin": "Unnamed Plugin", + "defaultVersion": "1.0.0", + "versionPrefix": "v" + }, + "documentation": { + "title": "Documentation", + "overview": "Overview", + "installation": "Installation", + "apiReference": "API Reference", + "codeExamples": "Code Examples", + "practicalExamples": "Practical examples to help you get started with", + "tutorials": "Tutorials", + "faq": "FAQ", + "troubleshooting": "Troubleshooting", + "installationGuide": "Installation Guide", + "followSteps": "Follow these steps to install and configure", + "inEnvironment": "in your KubeStellar environment.", + "keyFeatures": "Key Features", + "requirements": "Requirements", + "welcomeMessage": "Welcome to the comprehensive documentation for", + "extendsCapabilities": "extends KubeStellar's capabilities with advanced features designed to enhance your multi-cluster management experience.", + "powerfulPlugin": "This powerful plugin provides essential functionality for modern Kubernetes environments, offering seamless integration with existing workflows and robust performance monitoring capabilities.", + "advancedMultiCluster": "Advanced multi-cluster synchronization", + "realTimeMonitoring": "Real-time monitoring and alerting", + "automatedScaling": "Automated scaling and optimization", + "securityPolicy": "Security policy enforcement", + "comprehensiveAPI": "Comprehensive API coverage", + "kubestellarVersion": "KubeStellar v1.0.0 or higher", + "kubernetesVersion": "Kubernetes 1.19+", + "ramMinimum": "512MB RAM minimum (1GB recommended)", + "networkConnectivity": "Network connectivity to target clusters", + "validCredentials": "Valid authentication credentials", + "copy": "Copy", + "copied": "Copied!", + "fileFormat": "File format: .tar.gz only", + "maxFileSize": "Maximum file size: 50MB", + "mustContain": "Must contain plugin.yml file", + "validStructure": "Valid plugin structure required" + } + }, + "notFoundPage": { + "logoAlt": "KubeStellar Logo", + "mainTitle": "404 - Page Not Found", + "description": "The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.", + "returnHomeButton": "Return to Home", + "tryAgainButton": "Try Again", + "quotes": [ + { + "text": "In the vast universe of code, sometimes we get lost among the stars.", + "author": "Anonymous Developer" + }, + { + "text": "The path less traveled is often not found for a reason.", + "author": "Web Explorer" + }, + { + "text": "Not all who wander are lost, but this page definitely is.", + "author": "J.R.R. Token" + }, + { + "text": "Success is not final, 404 is not fatal: it's the courage to navigate that counts.", + "author": "Winston Codehill" + }, + { + "text": "The best way to predict the future is to implement proper routing.", + "author": "Alan Turning" + } + ] + }, + "resources": { + "search": "Search objects...", + "kind": "Kind", + "namespace": "Namespace", + "labels": "Labels", + "labels_plural": "{{count}} labels", + "filterByKind": "Filter by object kind", + "filterByNamespace": "Filter by namespace", + "filterByStatus": "Filter by status", + "filterByLabel": "Filter by label", + "clearFilters": "Clear Filters", + "noLabelsFound": "No labels found", + "noMatchingFilters": "No objects match the current filters", + "title": "Object Explorer", + "selectKind": "Select Kind / Object", + "selectNamespace": "Select Namespace", + "applyFilters": "Apply Filters", + "results": "Results", + "created": "Created", + "noResourcesFound": "No objects found matching the criteria", + "selectResourceAndNamespace": "Select an object kind and namespace to begin", + "refresh": "Refresh", + "toggleFilters": "Toggle filters", + "description": "Explore and manage Kubernetes objects across your clusters", + "autoRefresh": "Auto-refresh", + "viewMode": { + "grid": "Grid View", + "list": "List View", + "table": "Table View", + "gridLabel": "grid view", + "listLabel": "list view", + "tableLabel": "table view" + }, + "objectSelection": "Object Selection & Filters", + "searchPlaceholder": "Search object kinds...", + "quickSearchPlaceholder": "Quick search objects...", + "bulkActions": { + "resourcesSelected": "{{count}} {{objectText}} selected", + "clearSelection": "Clear Selection", + "viewDetails": "View Details", + "export": "Export" + }, + "sorting": { + "sortBy": "Sort by", + "name": "Sort by Name", + "kind": "Sort by Kind", + "namespace": "Sort by Namespace", + "createdAt": "Sort by Created" + }, + "emptyState": { + "readyToExplore": "Ready to explore", + "noResourcesFound": "No objects found", + "noResourcesDescription": "No objects match your current filters. Try adjusting your search criteria or clearing filters.", + "getStartedDescription": "Select an object kind and namespace to begin exploring your Kubernetes objects.", + "getStarted": "Get Started", + "clearFilters": "Clear Filters" + }, + "actions": { + "view": "View", + "viewDetails": "View Details", + "editYaml": "Edit YAML", + "delete": "Delete", + "more": "More" + }, + "filters": { + "activeFilters": "Active Filters:", + "kindFilter": "Kind: {{kind}}", + "namespaceFilter": "Namespace: {{namespace}}", + "labelFilter": "{{key}}: {{value}}", + "clear": "Clear ({{count}})" + }, + "menus": { + "resourceKinds": "Object Kinds ({{count}})", + "namespaces": "Namespaces ({{count}})", + "labels": "Labels ({{count}} keys)", + "noLabelsFound": "No labels found in the current objects", + "active": "Active" + }, + "stats": { + "resourceOverview": "Object Overview", + "topResourceKinds": "Top Object Kinds", + "topNamespaces": "Top Namespaces" + }, + "table": { + "name": "Name", + "kind": "Kind", + "namespace": "Namespace", + "status": "Status", + "age": "Age", + "createdAt": "Created", + "labels": "Labels", + "actions": "Actions" + }, + "preview": { + "objectDetails": "Object Details", + "namespace": "Namespace", + "createdAt": "Created", + "uid": "UID", + "noLabels": "No labels", + "labels": "Labels" + }, + "time": { + "justNow": "Just now", + "hoursAgo": "{{count}}h ago", + "daysAgo": "{{count}}d ago" + }, + "loading": { + "resources": "Loading resources...", + "applying": "Applying filters...", + "refreshing": "Refreshing..." + }, + "errors": { + "loadFailed": "Failed to load resources", + "filterFailed": "Failed to apply filters", + "actionFailed": "Action failed" + }, + "notifications": { + "filtersApplied": "Filters applied successfully", + "resourcesRefreshed": "Resources refreshed successfully" + }, + "subtitle": "Explore and manage Kubernetes resources", + "status": { + "healthy": "Healthy", + "warning": "Warning", + "error": "Error", + "active": "Active", + "unknown": "Unknown", + "running": "Running", + "pending": "Pending", + "failed": "Failed", + "progressing": "Progressing", + "scheduled": "Scheduled", + "waiting": "Waiting", + "ready": "Ready", + "notReady": "Not Ready", + "succeeded": "Succeeded", + "outOfSync": "Out of Sync", + "missing": "Missing", + "synced": "Synced" + }, + "unknown": "Unknown" }, "validation": { "missingRequiredFields": "Campos obrigatórios ausentes" diff --git a/frontend/src/locales/strings.zh-Hans.json b/frontend/src/locales/strings.zh-Hans.json index 9be89a2ab..ce4893a57 100644 --- a/frontend/src/locales/strings.zh-Hans.json +++ b/frontend/src/locales/strings.zh-Hans.json @@ -1,98 +1,103 @@ { - "raiseIssue": "报告问题", - "profileSection": { - "changePassword": "修改密码", - "changePasswordSubtitle": "请输入您当前的密码并选择一个新密码。", - "currentPassword": "当前密码", - "newPassword": "新密码", - "confirmNewPassword": "确认新密码", - "passwordChangedSuccess": "密码修改成功。", - "passwordChangedError": "修改密码失败。", - "passwordsDoNotMatch": "新密码不匹配。", - "passwordRequired": "密码是必填项。", - "errorCurrentPasswordIncorrect": "当前密码不正确", + "common": { + "changes": "更改", + "clusterLabel": "集群标签", + "workloadLabel": "工作负载标签", + "workloads": "工作负载", + "clearCanvas": "清除画布", + "clearFilter": "清除筛选器", "cancel": "取消", - "changePasswordButton": "修改密码", - "passwordsMatch": "密码匹配!" - }, - "commandPalette": { - "ariaLabel": "打开命令面板", - "title": "命令面板(Ctrl+K)", - "badge": "K", - "searchPlaceholder": "搜索命令...", - "noCommandsFound": "未找到命令。请尝试其他搜索词。", - "footer": { - "navigate": "导航", - "select": "选择", - "shortcut": "Ctrl+K" - }, - "kbd": { - "esc": "ESC", - "arrows": "↑↓", - "enter": "↵" - }, - "sections": { - "navigation": "导航", - "visualizations": "可视化", - "help": "帮助", - "account": "账户", - "admin": "管理" + "save": "保存", + "edit": "编辑", + "delete": "删除", + "create": "创建", + "add": "添加", + "refresh": "刷新", + "search": "搜索", + "connect": "连接", + "import": "导入", + "loading": "加载中...", + "success": "成功", + "error": "错误", + "warning": "警告", + "actions": "操作", + "status": { + "status": "状态", + "active": "活动中", + "inactive": "未激活", + "pending": "待定", + "checking": "检查中", + "success": "成功", + "warning": "版本不匹配", + "error": "缺失", + "installed": "已安装" }, - "commands": { - "home": { - "title": "首页", - "description": "前往仪表盘" - }, - "plugin": { - "title": "插件管理器", - "description": "管理和监控 KubeStellar 插件" - }, - "managedClusters": { - "title": "管理集群", - "description": "管理Kubernetes集群" - }, - "workloads": { - "title": "工作负载", - "description": "跨集群管理工作负载" - }, - "bindingPolicies": { - "title": "绑定策略", - "description": "配置绑定策略" - }, - "userManagement": { - "title": "用户管理", - "description": "管理系统用户和权限" - }, - "wdsTreeview": { - "title": "WDS 树视图", - "description": "可视化工作负载分布" - }, - "wecsTreeview": { - "title": "WECS 树视图", - "description": "可视化已部署工作负载结构" - }, - "documentation": { - "title": "打开文档", - "description": "启动 KubeStellar 文档" - }, - "logout": { - "title": "退出登录", - "description": "退出您的账户", - "infoMessage": "您已成功退出登录。" - }, - "galaxyMarketplace": { - "title": "银河市场", - "description": "在银河市场中发现并安装插件" - } - } + "noResource": "未指定{{resource}}", + "copy": "复制", + "close": "关闭", + "update": "更新", + "unknown": "未知", + "workload": "工作负载", + "tryAgain": "重试", + "confirm": "确认", + "continue": "继续", + "back": "返回", + "submit": "提交", + "settings": "设置", + "help": "帮助", + "details": "详情", + "view": "查看", + "yes": "是", + "no": "否", + "all": "全部", + "none": "无", + "ok": "确定", + "finish": "完成", + "next": "下一步", + "retry": "重试", + "previous": "上一步", + "page": "页面", + "sync": "同步", + "clearAll": "全部清除", + "fitView": "适应视图", + "clearSearch": "清除搜索", + "clearFilters": "清除筛选条件", + "clear": "清除", + "of": "共", + "items": "{{count}} 项", + "items_plural": "{{count}} 项", + "filteredFrom": "筛选自" }, "admin": { "users": { "title": "用户管理", "subtitle": "系统用户", + "description": "Manage system users and their permissions", + "searchPlaceholder": "Search users by name, role, or permissions...", + "refresh": "Refresh Users", + "addUser": "Add User", "noUsers": "未找到用户", "noUsersDescription": "系统中还没有用户。点击\"添加用户\"创建您的第一个用户。", "noPermissions": "未分配权限", + "filters": { + "title": "Filters", + "reset": "Reset Filters", + "role": "Role", + "allRoles": "All Roles", + "permission": "Permission", + "anyPermission": "Any Permission", + "permissionLevel": "Permission Level", + "anyLevel": "Any Level", + "sortBy": "Sort By", + "created": "Creation Date", + "ascending": "Ascending", + "descending": "Descending", + "active": "Active Filters", + "roleFilter": "Role", + "permissionFilter": "Permission", + "levelFilter": "Level", + "searchFilter": "Search" + }, "actions": { "addUser": "添加用户", "editUser": "编辑用户", @@ -159,95 +164,14 @@ } } }, - "menu": { - "catalogs": { - "main": "主要", - "management": "管理", - "plugins": "插件", - "admin": "管理" + "installationPage": { + "successSection": { + "installed": "is correctly installed and meets the version requirements." }, - "items": { - "home": "首页", - "managedClusters": "管理集群", - "grafana": "监控面板", - "stagedWorkloads": "已暂存工作负载", - "bindingPolicies": "绑定策略", - "deployedWorkloads": "已部署工作负载", - "pluginManager": "插件管理器", - "userManagement": "用户管理", - "galaxyMarketplace": "银河市场" - } - }, - "common": { - "changes": "更改", - "clusterLabel": "集群标签", - "workloadLabel": "工作负载标签", - "workloads": "工作负载", - "clearCanvas": "清除画布", - "clearFilter": "清除筛选器", - "cancel": "取消", - "save": "保存", - "edit": "编辑", - "delete": "删除", - "create": "创建", - "add": "添加", - "refresh": "刷新", - "search": "搜索", - "connect": "连接", - "import": "导入", - "loading": "加载中...", - "success": "成功", - "error": "错误", - "warning": "警告", - "actions": "操作", - "status": { - "status": "状态", - "active": "活动中", - "inactive": "未激活", - "pending": "待定", - "checking": "检查中", - "success": "成功", - "warning": "版本不匹配", - "error": "缺失", - "installed": "已安装" + "errorSection": { + "title": "Installation Instructions", + "viewGuide": "View installation guide" }, - "noResource": "未指定{{resource}}", - "copy": "复制", - "close": "关闭", - "update": "更新", - "unknown": "未知", - "workload": "工作负载", - "tryAgain": "重试", - "confirm": "确认", - "continue": "继续", - "back": "返回", - "submit": "提交", - "settings": "设置", - "help": "帮助", - "details": "详情", - "view": "查看", - "yes": "是", - "no": "否", - "all": "全部", - "none": "无", - "ok": "确定", - "finish": "完成", - "next": "下一步", - "retry": "重试", - "previous": "上一步", - "page": "页面", - "sync": "同步", - "clearAll": "全部清除", - "fitView": "适应视图", - "clearSearch": "清除搜索", - "clearFilters": "清除筛选条件", - "clear": "清除", - "of": "共", - "items": "{{count}} 项", - "items_plural": "{{count}} 项", - "filteredFrom": "筛选自" - }, - "installationPage": { "statusBadge": { "installed": "已安装", "versionMismatch": "版本不匹配", @@ -282,6 +206,12 @@ "prerequisites": "前提条件", "title": "系统前提条件", "description": "请在继续之前确保已安装以下工具", + "kubeflexDescription": "KubeFlex CLI tool (required version ≥ 0.8.0)", + "ocmDescription": "Open Cluster Management CLI (required version between 0.7 and 0.11)", + "helmDescription": "Kubernetes package manager (required version ≥ 3.0.0)", + "kubectlDescription": "Kubernetes command-line tool (required version ≥ 1.27.0)", + "kindDescription": "Tool for running local Kubernetes clusters (required version ≥ 0.20.0)", + "dockerDescription": "Container runtime (required version ≥ 20.0.0)", "status": { "success": "成功", "warnings": "警告", @@ -291,8 +221,9 @@ "coreRequirements": "核心要求", "demoEnvironmentRequirements": "演示环境要求", "buttons": { - "refresh": "刷新", - "nextInstallation": "下一步:安装" + "nextInstallation": "下一步:安装", + "checking": "Checking...", + "refresh": "刷新" } }, "installation": { @@ -366,7 +297,10 @@ "preparingInstructions": "正在准备安装指令...", "followInstructions": "请按照以下 CLI 安装指令安装 KubeStellar", "loadInstructionsFailed": "加载安装指令失败。请刷新页面并重试。", - "installationDetected": "检测到已安装 KubeStellar。正在跳转到登录页面..." + "installationDetected": "检测到已安装 KubeStellar。正在跳转到登录页面...", + "recheckingPrerequisites": "Rechecking prerequisites...", + "prerequisitesRechecked": "Prerequisites rechecked successfully", + "recheckFailed": "Failed to recheck prerequisites" } }, "header": { @@ -383,7 +317,12 @@ "goToHome": "返回主页", "logoAlt": "KubeStellar 标志", "themeToggleTip": "Alt+Q 切换主题", - "switchTheme": "切换为 {{mode}} 模式" + "switchTheme": "切换为 {{mode}} 模式", + "switchLanguage": "Switch language", + "selectLanguage": "Select Language", + "enterFullscreen": "Enter fullscreen mode", + "exitFullscreen": "Exit fullscreen mode", + "fullscreen": "Toggle fullscreen mode" }, "login": { "controlPlane": "控制平面", @@ -509,6 +448,8 @@ "label": "标签", "editvalue": "键和值都是必需的", "manage": "管理标签", + "bulkTooltipDisabled": "Select at least 2 clusters to enable bulk labeling", + "bulkTooltipEnabled": "Manage labels for selected clusters", "clearFilter": "清除筛选器", "searchLabelsPlaceholder": "搜索标签...", "bulkEditTitle": "编辑 {{count}} 个集群的标签", @@ -685,6 +626,7 @@ "notAvailable": "不可用", "invalidDate": "无效日期", "managedClusters": "受管集群", + "grafana": "Grafana", "total": "总计", "viewAll": "查看全部", "cpuCapacity": "CPU 容量", @@ -897,7 +839,17 @@ "expandAll": "展开所有父节点的子节点", "collapseAll": "折叠所有父节点的子节点", "zoomIn": "放大", - "zoomOut": "缩小" + "zoomOut": "缩小", + "resetZoom": "Reset Zoom", + "edgeStyle": "Edge Style", + "curvy": "Curvy", + "square": "Square", + "fullscreen": "Enter Fullscreen", + "exitFullscreen": "Exit Fullscreen" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" }, "nodeLabel": { "labels": "标签:", @@ -949,15 +901,34 @@ "selectContainer": "选择容器", "noContainersFound": "未找到容器" }, + "logs": { + "previousLogs": "Previous Logs", + "currentLogs": "Current Logs", + "selectLogsContainer": "Select logs container" + }, "errors": { "failedLoadClusterDetails": "加载集群详情失败。", "failedLoadDetails": "加载 {{type}} 详情失败。", "apiNotImplemented": "更新 pod \"{{resourceName}}\" 的 API 未实现", - "failedFetchContainers": "获取容器列表失败" + "failedFetchContainers": "获取容器列表失败", + "failedFetchLogsContainers": "Failed to fetch container list for logs", + "failedConnectExec": "Failed to connect to exec session", + "failedInitExec": "Failed to initialize exec session", + "failedUpdate": "Failed to update manifest", + "resourceNotFound": "Resource not found", + "permissionDenied": "Permission denied", + "invalidManifest": "Invalid manifest format", + "namespaceRequired": "Namespace is required" + }, + "success": { + "manifestUpdated": "Manifest updated successfully" }, "cluster": { "active": "活跃" }, + "exec": { + "connected": "Connected" + }, "noManifest": "无可用清单" }, "treeView": { @@ -982,6 +953,23 @@ "fullscreen": { "toggle": "切换全屏视图" }, + "zoomControls": { + "groupByResource": "Group By Resource/Kind", + "expandAll": "Expand all the child nodes of all parent nodes", + "collapseAll": "Collapse all the child nodes of all parent nodes", + "zoomIn": "Zoom In", + "zoomOut": "Zoom Out", + "resetZoom": "Reset Zoom", + "edgeStyle": "Edge Style", + "curvy": "Curvy", + "square": "Square", + "fullscreen": "Enter Fullscreen", + "exitFullscreen": "Exit Fullscreen" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" + }, "contextMenu": { "details": "详情", "delete": "删除", @@ -1243,31 +1231,31 @@ } }, "loadingCanvas": "正在加载画布数据...", - "dragDrop": { - "infoAlert": "此界面使用模拟响应来创建绑定策略。从列表中选择集群和工作负载将它们添加到画布,然后点击工作负载,再点击集群以创建绑定策略连接。", + "selection": { + "infoAlert": "This interface is using simulated responses to create binding policies. Select clusters and workloads from the lists to add them to the canvas, then click on a workload and then a cluster to create a binding policy connection.", "helpDialog": { - "title": "通过直接连接创建绑定策略", - "intro": "按照以下步骤创建绑定策略:", + "title": "Create Binding Policies with Direct Connections", + "intro": "Follow these steps to create binding policies:", "steps": { - "selectClusters": "1. 从左侧面板选择集群以包含在画布中", - "selectWorkloads": "2. 从右侧面板选择工作负载以包含在画布中", - "createConnection": "3. 先点击工作负载,然后点击集群以创建直接连接", - "fillDetails": "4. 在出现的对话框中填写策略详细信息", - "deploy": "5. 使用\"部署绑定策略\"按钮模拟部署" + "selectClusters": "1. Select clusters from the left panel to include in the canvas", + "selectWorkloads": "2. Select workloads from the right panel to include in the canvas", + "createConnection": "3. Click on a workload first, then a cluster to create a direct connection", + "fillDetails": "4. Fill in the policy details in the dialog that appears", + "deploy": "5. Use the 'Deploy Binding Policies' button to simulate deployment" }, - "gotIt": "明白了", + "gotIt": "Got it", "helpDialog": { - "title": "如何创建绑定策略", - "intro": "按照以下步骤创建绑定策略:", + "title": "How to Create Binding Policies", + "intro": "Follow these steps to create binding policies:", "steps": { - "selectLabels": "1. 选择标签添加到画布", - "selectLabelsDesc": "从左侧面板点击集群,从右侧面板点击工作负载,将它们添加到绑定策略画布", - "deploy": "2. 部署您的策略", - "deployDesc": "点击\"部署绑定策略\"创建并部署基于选定标签的绑定策略,将工作负载连接到集群" + "selectLabels": "1. Select labels to add to the canvas", + "selectLabelsDesc": "Click on clusters from the left panel and workloads from the right panel to add them to the binding policy canvas", + "deploy": "2. Deploy your policies", + "deployDesc": "Click 'Deploy Binding Policies' to create and deploy binding policies that connect workloads to clusters based on the selected labels" }, - "tip": "提示:基于标签的方法允许您创建强大的绑定策略,自动应用于所有匹配选定标签的资源,无论是现在还是将来。", - "dontShowAgain": "不再显示", - "tooltip": "查看选择说明" + "tip": "Tip: The label-based approach allows you to create powerful binding policies that automatically apply to all resources matching the selected labels, both now and in the future.", + "dontShowAgain": "Don't Show Again", + "tooltip": "View selection instructions" } } }, @@ -1339,8 +1327,7 @@ "title": "标签:", "key": "键", "value": "值", - "add": "添加", - "count": "{{total}} 中的 {{count}} 个唯一标签" + "add": "添加" }, "creatingConnection": "正在创建连接:", "previewDialog": { @@ -1545,6 +1532,7 @@ "helm": { "createOwn": "创建您自己的 Helm chart", "popularCharts": "从热门 Helm chart 部署", + "prevCharts": "Previously Deployed Helm Charts", "form": { "repositoryName": "仓库名称 *", "repositoryNameTip": "指定 Helm 仓库的名称", @@ -1787,11 +1775,11 @@ "creating": "正在创建...", "createContext": "创建上下文" }, - "policyDragDropStore": { - "labelsAssigned": "标签已自动分配给 {{itemType}} {{itemId}}", - "policyAssigned": "成功将 {{policyName}} 分配给 {{targetType}} {{targetName}}", - "clusterAlreadyAssigned": "集群 {{targetName}} 已分配给策略 {{policyName}}", - "workloadAlreadyAssigned": "工作负载 {{targetName}} 已分配给策略 {{policyName}}" + "policySelectionStore": { + "labelsAssigned": "Labels automatically assigned to {{itemType}} {{itemId}}", + "policyAssigned": "Successfully assigned {{policyName}} to {{targetType}} {{targetName}}", + "clusterAlreadyAssigned": "Cluster {{targetName}} is already assigned to policy {{policyName}}", + "workloadAlreadyAssigned": "Workload {{targetName}} is already assigned to policy {{policyName}}" }, "auth": { "login": { @@ -1800,7 +1788,9 @@ "successWithUser": "用户 {{username}} 登录成功。正在重定向到 {{path}}", "invalidCredentials": "无效凭据", "authFailed": "身份验证失败。请检查您的凭据。", - "noToken": "未从服务器接收到令牌" + "noToken": "未从服务器接收到令牌", + "invalidRequest": "Invalid request. Please check your input and try again.", + "serverError": "Server error. Please try again later." } }, "kubestellarData": { @@ -1832,6 +1822,27 @@ "alwaysMatch": "始终匹配" } }, + "profileSection": { + "logoutMessage": "You have been successfully logged out.", + "account": "Account", + "admin": "Admin", + "helpSupport": "Help & Support", + "raiseIssue": "Report an Issue", + "signOut": "Sign Out", + "changePassword": "修改密码", + "changePasswordSubtitle": "请输入您当前的密码并选择一个新密码。", + "currentPassword": "当前密码", + "newPassword": "新密码", + "confirmNewPassword": "确认新密码", + "passwordChangedSuccess": "密码修改成功。", + "passwordChangedError": "修改密码失败。", + "passwordsDoNotMatch": "新密码不匹配。", + "passwordRequired": "密码是必填项。", + "errorCurrentPasswordIncorrect": "当前密码不正确", + "cancel": "取消", + "changePasswordButton": "修改密码", + "passwordsMatch": "密码匹配!" + }, "onboardingLogs": { "onboarding": "入驻", "complete": "完成", @@ -1917,17 +1928,25 @@ "invalidResponseFormat": "服务器响应格式无效", "unknownError": "获取资源时发生未知错误。", "errorLoading": "加载资源时出错", - "downloadLogs": "下载日志", "namespace": "命名空间", "created": "已创建", - "filteredByContext": "按上下文筛选:{{context}}", - "showingResourceCount": "显示 {{total}} 个总资源中的 {{showing}} 个", - "resourceStats": "检测到 {{raw}} 个原始资源,已处理 {{processed}} 个", + "downloadLogs": "下载日志", "pagination": { - "prev": "上一页", - "next": "下一页", "showing": "显示第 {{from}} 到 {{to}} 项,共 {{total}} 项", - "filtered": "(按 {{context}} 上下文筛选)" + "filtered": "(按 {{context}} 上下文筛选)", + "prev": "上一页", + "next": "下一页" + }, + "resourceStats": "检测到 {{raw}} 个原始资源,已处理 {{processed}} 个", + "filteredByContext": "按上下文筛选:{{context}}", + "showingResourceCount": "显示 {{total}} 个总资源中的 {{showing}} 个", + "noWorkloads": { + "title": "未找到工作负载", + "noResourcesForContext": "未找到 {{context}} 上下文的资源", + "resourcesFilteredOut": "资源可用但已被筛选掉", + "getStarted": "创建您的第一个工作负载以开始使用", + "resourcesAvailable": "共有 {{count}} 个资源可用,但没有匹配当前筛选器", + "noMatchingFilters": "No resources match the current filters" }, "troubleshooting": { "title": "尝试以下故障排除步骤:", @@ -1935,13 +1954,6 @@ "step2": "2. 验证服务器的 CORS 配置是否允许来自 http://localhost:5173 的请求", "step3": "3. 如果服务器使用通配符 (*) CORS,则无法接受带有凭据的请求", "step4": "4. 检查浏览器控制台的详细错误消息" - }, - "noWorkloads": { - "title": "未找到工作负载", - "noResourcesForContext": "未找到 {{context}} 上下文的资源", - "resourcesFilteredOut": "资源可用但已被筛选掉", - "getStarted": "创建您的第一个工作负载以开始使用", - "resourcesAvailable": "共有 {{count}} 个资源可用,但没有匹配当前筛选器" } }, "kubeconfigImport": { @@ -2058,9 +2070,745 @@ "tokenPlaceholder": "例如:ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "tokenTip": "输入您的 GitHub 个人访问令牌" }, + "commandPalette": { + "ariaLabel": "打开命令面板", + "title": "命令面板(Ctrl+K)", + "badge": "K", + "searchPlaceholder": "搜索命令...", + "noCommandsFound": "未找到命令。请尝试其他搜索词。", + "footer": { + "navigate": "导航", + "select": "选择", + "shortcut": "Ctrl+K" + }, + "kbd": { + "esc": "ESC", + "arrows": "↑↓", + "enter": "↵" + }, + "commands": { + "home": { + "title": "首页", + "description": "前往仪表盘" + }, + "plugin": { + "title": "插件管理器", + "description": "管理和监控 KubeStellar 插件" + }, + "managedClusters": { + "title": "管理集群", + "description": "管理Kubernetes集群" + }, + "Grafana": { + "title": "Grafana Dashboard", + "description": "Grafana Dashboard" + }, + "workloads": { + "title": "工作负载", + "description": "跨集群管理工作负载" + }, + "resourceExplorer": { + "title": "Object Explorer", + "description": "Search and filter Kubernetes objects" + }, + "bindingPolicies": { + "title": "绑定策略", + "description": "配置绑定策略" + }, + "userManagement": { + "title": "用户管理", + "description": "管理系统用户和权限" + }, + "wdsTreeview": { + "title": "WDS 树视图", + "description": "可视化工作负载分布" + }, + "wecsTreeview": { + "title": "WECS 树视图", + "description": "可视化已部署工作负载结构" + }, + "documentation": { + "title": "打开文档", + "description": "启动 KubeStellar 文档" + }, + "logout": { + "title": "退出登录", + "description": "退出您的账户", + "infoMessage": "您已成功退出登录。" + }, + "metricsDashboard": { + "title": "Metrics Dashboard", + "description": "Monitor system performance and metrics" + }, + "galaxyMarketplace": { + "title": "银河市场", + "description": "在银河市场中发现并安装插件" + } + }, + "sections": { + "navigation": "导航", + "admin": "管理", + "visualizations": "可视化", + "help": "帮助", + "account": "账户" + } + }, + "menu": { + "catalogs": { + "main": "主要", + "management": "管理", + "plugins": "插件", + "admin": "管理" + }, + "items": { + "home": "首页", + "managedClusters": "管理集群", + "Grafana": "Grafana Dashboard", + "stagedWorkloads": "已暂存工作负载", + "bindingPolicies": "绑定策略", + "deployedWorkloads": "已部署工作负载", + "resourceExplorer": "Object Explorer", + "pluginManager": "插件管理器", + "userManagement": "用户管理", + "metricsDashboard": "Metrics Dashboard", + "galaxyMarketplace": "银河市场" + } + }, + "plugins": { + "title": "Plugin Manager", + "description": "Manage and monitor KubeStellar plugins", + "install": { + "title": "Install New Plugin", + "methods": { + "local": "Local Path", + "github": "GitHub" + }, + "localPlaceholder": "Please select a file", + "githubPlaceholder": "https://github.com/user/plugin-repo", + "browse": "Browse", + "installLocal": "Install from Local Path", + "installGithub": "Install from GitHub", + "localHelp": "Install a plugin from a local directory on your system. Click Browse to select a folder or manually enter the full path.", + "githubHelp": "GitHub installation is not yet implemented. Use local path installation for now.", + "placeholder": "Plugin URL, GitHub repository, or local path", + "button": "Install", + "installing": "Installing...", + "success": "Plugin installed successfully", + "error": "Failed to install plugin" + }, + "list": { + "title": "Installed Plugins", + "noPlugins": "No plugins installed", + "noPluginsDescription": "Get started by installing your first plugin", + "searchPlaceholder": "Search plugins by name, author, or status...", + "total": "Total", + "active": "Active", + "inactive": "Inactive" + }, + "card": { + "version": "v{{version}}", + "author": "by {{author}}", + "status": { + "active": "Active", + "inactive": "Inactive", + "loading": "Loading", + "error": "Error" + }, + "actions": { + "enable": "Enable", + "disable": "Disable", + "details": "Details", + "uninstall": "Uninstall", + "reload": "Reload", + "settings": "Settings", + "feedback": "Feedback" + } + }, + "details": { + "title": "Plugin Details", + "information": "Information", + "configuration": "Configuration", + "routes": "API Routes", + "widgets": "Widgets", + "assets": "Assets", + "noRoutes": "No API routes defined", + "noWidgets": "No widgets available", + "noAssets": "No assets loaded" + }, + "notifications": { + "enableSuccess": "Plugin {{name}} enabled successfully", + "enableError": "Failed to enable plugin {{name}}", + "disableSuccess": "Plugin {{name}} disabled successfully", + "disableError": "Failed to disable plugin {{name}}", + "uninstallSuccess": "Plugin {{name}} uninstalled successfully", + "uninstallError": "Failed to uninstall plugin {{name}}", + "reloadSuccess": "Plugin {{name}} reloaded successfully", + "reloadError": "Failed to reload plugin {{name}}", + "fetchError": "Failed to load plugin data" + }, + "confirmations": { + "uninstall": { + "title": "Confirm Plugin Uninstallation", + "message": "Are you sure you want to uninstall \"{{name}}\"? This action cannot be undone and will remove all plugin data.", + "confirm": "Yes, Uninstall" + }, + "disable": { + "title": "Confirm Plugin Disable", + "message": "Disabling \"{{name}}\" will stop all plugin functionality. You can re-enable it later.", + "confirm": "Yes, Disable" + }, + "enable": { + "title": "Confirm Plugin Enable", + "message": "Enabling \"{{name}}\" will activate all plugin functionality and make it available for use.", + "confirm": "Yes, Enable" + } + }, + "marketplace": { + "title": "KubeStellar Galaxy Marketplace", + "subtitle": "Discover and install plugins to enhance your KubeStellar experience", + "browse": "Browse Available Plugins", + "featured": "Featured Plugins", + "categories": "Categories", + "search": "Search marketplace..." + }, + "development": { + "title": "Plugin Development", + "createNew": "Create New Plugin", + "template": "Use Template", + "documentation": "View Documentation", + "examples": "Examples" + }, + "feedback": { + "title": "Share Your Feedback", + "rate": "Rate this plugin", + "comment": { + "title": "Your Comment", + "placeholder": "Tell us about your experience" + }, + "suggestion": { + "title": "Suggestions for Improvement", + "placeholder": "Any suggestions for Improvements ?" + } + } + }, "marketplace": { "title": "KubeStellar Galaxy 市场", - "description": "发现并安装插件以增强您的 KubeStellar 体验" + "subtitle": "Discover and install plugins to enhance your KubeStellar experience", + "searchPlaceholder": "Search plugins, authors, categories...", + "filters": "Filters", + "sortPopular": "Most Popular", + "sortRating": "Highest Rated", + "sortNewest": "Recently Added", + "searchResults": "Search Results", + "allPlugins": "All Plugins", + "clearFilters": "Clear Filters", + "loadMore": "Load More Plugins", + "adminPanel": "Admin Panel", + "categories": { + "all": "All Plugins", + "management": "Management", + "monitoring": "Monitoring", + "security": "Security", + "networking": "Networking", + "storage": "Storage", + "database": "Database", + "ai": "AI & Machine Learning", + "devops": "DevOps", + "automation": "Automation", + "integration": "Integration", + "analytics": "Analytics", + "backup": "Backup & Recovery", + "compliance": "Compliance", + "testing": "Testing", + "development": "Development Tools" + }, + "plugin": { + "status": { + "active": "Active", + "inactive": "Inactive", + "loading": "Loading", + "error": "Error", + "installed": "Installed", + "notInstalled": "Not Installed" + }, + "actions": { + "install": "Install", + "uninstall": "Uninstall", + "enable": "Enable", + "disable": "Disable", + "update": "Update", + "viewDetails": "View Details", + "download": "Download", + "rate": "Rate", + "review": "Review", + "share": "Share", + "report": "Report Issue" + }, + "details": { + "overview": "Overview", + "details": "Details", + "feedback": "Feedback", + "documentation": "Documentation", + "dependencies": "Dependencies", + "reviews": "Reviews", + "changelog": "Changelog", + "license": "License", + "author": "Author", + "version": "Version", + "lastUpdated": "Last Updated", + "createdAt": "Created At", + "downloads": "Downloads", + "rating": "Rating", + "category": "Category", + "tags": "Tags", + "size": "Size", + "compatibility": "Compatibility", + "requirements": "Requirements", + "installation": "Installation", + "configuration": "Configuration", + "usage": "Usage", + "troubleshooting": "Troubleshooting" + }, + "feedback": { + "title": "Plugin Feedback", + "rating": "Rating", + "comment": "Comment", + "submit": "Submit Feedback", + "submitting": "Submitting...", + "success": "Feedback submitted successfully", + "error": "Failed to submit feedback", + "placeholder": "Tell us about your experience with this plugin...", + "ratingRequired": "Please provide a rating", + "commentRequired": "Please provide a comment" + }, + "installation": { + "title": "Installation", + "installing": "Installing...", + "success": "Plugin installed successfully", + "error": "Failed to install plugin", + "confirm": "Are you sure you want to install this plugin?", + "requirements": "Requirements", + "dependencies": "Dependencies", + "steps": "Installation Steps", + "verification": "Verification" + } + }, + "featured": { + "title": "Featured Plugins", + "subtitle": "Hand-picked plugins for the best experience", + "viewAll": "View All Featured", + "noFeatured": "No featured plugins available", + "loading": "Loading featured plugins..." + }, + "admin": { + "title": "Marketplace Administration", + "overview": "Overview", + "plugins": "Plugins", + "users": "Users", + "settings": "Settings", + "stats": { + "totalPlugins": "Total Plugins", + "pendingReviews": "Pending Reviews", + "totalDownloads": "Total Downloads", + "activeUsers": "Active Users" + }, + "actions": { + "uploadPlugin": "Upload Plugin", + "deletePlugin": "Delete Plugin", + "approvePlugin": "Approve Plugin", + "rejectPlugin": "Reject Plugin", + "featurePlugin": "Feature Plugin", + "unfeaturePlugin": "Unfeature Plugin" + }, + "upload": { + "title": "Upload New Plugin", + "selectFile": "Select Plugin File", + "dragDrop": "Drag & Drop plugin file here", + "supportedFormats": "Supported formats: .tar.gz, .zip", + "maxSize": "Maximum file size: 100MB", + "uploading": "Uploading...", + "success": "Plugin uploaded successfully", + "error": "Failed to upload plugin" + }, + "delete": { + "title": "Delete Plugin", + "confirm": "Are you sure you want to delete \"{{name}}\"? This action cannot be undone.", + "deleting": "Deleting...", + "success": "Plugin deleted successfully", + "error": "Failed to delete plugin" + }, + "quickActions": "Quick Actions", + "uploadNewPlugin": "Upload New Plugin", + "reviewPlugins": "Review Plugins", + "searchPlugins": "Search plugins...", + "allStatus": "All Status", + "active": "Active", + "inactive": "Inactive", + "loadingPlugins": "Loading plugins...", + "noPluginsFound": "No plugins found.", + "userManagement": "User Management", + "userManagementComingSoon": "User management features coming soon.", + "adminSettings": "Admin Settings", + "settingsComingSoon": "Settings panel coming soon.", + "marketplaceManagement": "Marketplace Management", + "adminPanel": "Admin Panel" + }, + "search": { + "noResults": "No plugins found", + "noResultsDescription": "Try adjusting your search terms or browse all plugins", + "clearSearch": "Clear search", + "searching": "Searching...", + "resultsCount": "{{count}} plugin{{count, plural, one {} other {s}}} found" + }, + "errors": { + "failedToLoad": "Failed to load marketplace data", + "failedToInstall": "Failed to install plugin", + "failedToUninstall": "Failed to uninstall plugin", + "failedToEnable": "Failed to enable plugin", + "failedToDisable": "Failed to disable plugin", + "failedToSubmitFeedback": "Failed to submit feedback", + "pluginNotFound": "Plugin not found", + "installationFailed": "Installation failed", + "networkError": "Network error occurred", + "serverError": "Server error occurred" + }, + "success": { + "pluginInstalled": "Plugin installed successfully", + "pluginUninstalled": "Plugin uninstalled successfully", + "pluginEnabled": "Plugin enabled successfully", + "pluginDisabled": "Plugin disabled successfully", + "feedbackSubmitted": "Feedback submitted successfully", + "pluginUpdated": "Plugin updated successfully" + }, + "loading": { + "loadingPlugins": "Loading amazing plugins...", + "discoveringGalaxy": "Discovering the galaxy of possibilities", + "loadingMarketplace": "Loading marketplace...", + "loadingPlugin": "Loading plugin details...", + "installingPlugin": "Installing plugin...", + "uninstallingPlugin": "Uninstalling plugin..." + }, + "empty": { + "noPlugins": "No plugins found", + "noPluginsDescription": "No plugins match your current filters", + "showAllPlugins": "Show All Plugins", + "noFeaturedPlugins": "No featured plugins available", + "noCategories": "No categories available", + "noSearchResults": "No search results found" + }, + "backToMarketplace": "Back to Marketplace", + "enable": "Enable", + "disable": "Disable", + "install": "Install", + "uninstall": "Uninstall", + "by": "By", + "overview": "Overview", + "details": "Details", + "feedback": "Feedback", + "docSection": "Documentation", + "description": "发现并安装插件以增强您的 KubeStellar 体验", + "dependencies": "Dependencies", + "keyFeatures": "Key Features", + "technicalDetails": "Technical Details", + "generalInfo": "General Information", + "version": "Version", + "lastUpdated": "Last Updated", + "author": "Author", + "license": "License", + "category": "Category", + "requirements": "Requirements", + "kubestellarVersion": "KubeStellar Version", + "platforms": "Platforms", + "fileSize": "File Size", + "pluginIdentifiers": "Plugin Identifiers", + "tags": "Tags", + "userFeedback": "User Feedback", + "leaveFeedback": "Leave Feedback", + "yourFeedback": "Your Feedback", + "rating": "Rating", + "comments": "Comments", + "delete": { + "confirmTitle": "Delete Plugin", + "confirmLabel": "Type the plugin name to confirm:", + "confirmPlaceholder": "Enter plugin name here", + "mismatch": "Plugin name does not match", + "confirmed": "Plugin name confirmed", + "deleteButton": "Delete Plugin", + "deleting": "Deleting Plugin...", + "deletingMessage": "Please wait while we remove your plugin.", + "success": "Plugin Deleted Successfully!", + "error": "Delete Failed", + "tryAgain": "Try Again", + "title": "Delete Plugin" + }, + "upload": { + "dragDrop": "Drag and drop your plugin here", + "browseFiles": "Browse Files", + "requirements": "Upload Requirements:", + "reviewFile": "Review Your Plugin", + "uploadPlugin": "Upload Plugin", + "uploading": "Uploading Plugin...", + "success": "Plugin Uploaded Successfully!", + "error": "Upload Failed", + "tryAgain": "Try Again", + "title": "Upload Plugin", + "supportedFormat": "or click to browse. Supported format: .tar.gz", + "confirmUpload": "Please confirm the details below before uploading", + "processingFile": "Processing your plugin file. This may take a moment.", + "successMessage": "Your plugin has been uploaded and is now available in the marketplace.", + "errorMessage": "Something went wrong while uploading your plugin.", + "invalidFileType": "Invalid file type. Please upload a .tar.gz file.", + "fileTooLarge": "File size too large. Maximum size is 50MB." + }, + "common": { + "featured": "FEATURED", + "viewDetails": "View Details", + "installNow": "Install Now", + "installing": "Installing...", + "installed": "Installed", + "uninstalling": "Uninstalling...", + "rating": "rating", + "downloads": "downloads", + "updated": "Updated", + "recently": "recently", + "by": "by", + "unknownAuthor": "Unknown author", + "noDescription": "No description available", + "premiumPlugins": "Discover Premium Plugins", + "enhanceWorkflow": "Enhance your workflow with powerful plugins designed specifically for Kubernetes and cloud-native environments.", + "exploreMarketplace": "Explore Marketplace", + "suggestedCategories": ["Monitoring", "Security", "Development", "Deployment", "Storage"], + "noPluginsFound": "No plugins found", + "tryAdjustingSearch": "Try adjusting your search terms or browse all plugins", + "noMatchingFilters": "No plugins match your current filters", + "showAllPlugins": "Show All Plugins", + "remaining": "remaining", + "allPlugins": "All Plugins", + "plugin": "plugin", + "plugins": "plugins", + "tags": "Tags:", + "license": "License", + "created": "Created", + "routes": "Routes", + "loadTime": "Load Time", + "endpoints": "endpoint", + "endpoints_plural": "endpoints", + "seconds": "s", + "misc": "Misc", + "installPlugin": "Install Plugin", + "noRoutes": "No API routes defined", + "noWidgets": "No widgets available", + "noAssets": "No assets loaded", + "unnamedPlugin": "Unnamed Plugin", + "defaultVersion": "1.0.0", + "versionPrefix": "v" + }, + "documentation": { + "title": "Documentation", + "overview": "Overview", + "installation": "Installation", + "apiReference": "API Reference", + "codeExamples": "Code Examples", + "practicalExamples": "Practical examples to help you get started with", + "tutorials": "Tutorials", + "faq": "FAQ", + "troubleshooting": "Troubleshooting", + "installationGuide": "Installation Guide", + "followSteps": "Follow these steps to install and configure", + "inEnvironment": "in your KubeStellar environment.", + "keyFeatures": "Key Features", + "requirements": "Requirements", + "welcomeMessage": "Welcome to the comprehensive documentation for", + "extendsCapabilities": "extends KubeStellar's capabilities with advanced features designed to enhance your multi-cluster management experience.", + "powerfulPlugin": "This powerful plugin provides essential functionality for modern Kubernetes environments, offering seamless integration with existing workflows and robust performance monitoring capabilities.", + "advancedMultiCluster": "Advanced multi-cluster synchronization", + "realTimeMonitoring": "Real-time monitoring and alerting", + "automatedScaling": "Automated scaling and optimization", + "securityPolicy": "Security policy enforcement", + "comprehensiveAPI": "Comprehensive API coverage", + "kubestellarVersion": "KubeStellar v1.0.0 or higher", + "kubernetesVersion": "Kubernetes 1.19+", + "ramMinimum": "512MB RAM minimum (1GB recommended)", + "networkConnectivity": "Network connectivity to target clusters", + "validCredentials": "Valid authentication credentials", + "copy": "Copy", + "copied": "Copied!", + "fileFormat": "File format: .tar.gz only", + "maxFileSize": "Maximum file size: 50MB", + "mustContain": "Must contain plugin.yml file", + "validStructure": "Valid plugin structure required" + } + }, + "notFoundPage": { + "logoAlt": "KubeStellar Logo", + "mainTitle": "404 - Page Not Found", + "description": "The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.", + "returnHomeButton": "Return to Home", + "tryAgainButton": "Try Again", + "quotes": [ + { + "text": "In the vast universe of code, sometimes we get lost among the stars.", + "author": "Anonymous Developer" + }, + { + "text": "The path less traveled is often not found for a reason.", + "author": "Web Explorer" + }, + { + "text": "Not all who wander are lost, but this page definitely is.", + "author": "J.R.R. Token" + }, + { + "text": "Success is not final, 404 is not fatal: it's the courage to navigate that counts.", + "author": "Winston Codehill" + }, + { + "text": "The best way to predict the future is to implement proper routing.", + "author": "Alan Turning" + } + ] + }, + "resources": { + "search": "Search objects...", + "kind": "Kind", + "namespace": "Namespace", + "labels": "Labels", + "labels_plural": "{{count}} labels", + "filterByKind": "Filter by object kind", + "filterByNamespace": "Filter by namespace", + "filterByStatus": "Filter by status", + "filterByLabel": "Filter by label", + "clearFilters": "Clear Filters", + "noLabelsFound": "No labels found", + "noMatchingFilters": "No objects match the current filters", + "title": "Object Explorer", + "selectKind": "Select Kind / Object", + "selectNamespace": "Select Namespace", + "applyFilters": "Apply Filters", + "results": "Results", + "created": "Created", + "noResourcesFound": "No objects found matching the criteria", + "selectResourceAndNamespace": "Select an object kind and namespace to begin", + "refresh": "Refresh", + "toggleFilters": "Toggle filters", + "description": "Explore and manage Kubernetes objects across your clusters", + "autoRefresh": "Auto-refresh", + "viewMode": { + "grid": "Grid View", + "list": "List View", + "table": "Table View", + "gridLabel": "grid view", + "listLabel": "list view", + "tableLabel": "table view" + }, + "objectSelection": "Object Selection & Filters", + "searchPlaceholder": "Search object kinds...", + "quickSearchPlaceholder": "Quick search objects...", + "bulkActions": { + "resourcesSelected": "{{count}} {{objectText}} selected", + "clearSelection": "Clear Selection", + "viewDetails": "View Details", + "export": "Export" + }, + "sorting": { + "sortBy": "Sort by", + "name": "Sort by Name", + "kind": "Sort by Kind", + "namespace": "Sort by Namespace", + "createdAt": "Sort by Created" + }, + "emptyState": { + "readyToExplore": "Ready to explore", + "noResourcesFound": "No objects found", + "noResourcesDescription": "No objects match your current filters. Try adjusting your search criteria or clearing filters.", + "getStartedDescription": "Select an object kind and namespace to begin exploring your Kubernetes objects.", + "getStarted": "Get Started", + "clearFilters": "Clear Filters" + }, + "actions": { + "view": "View", + "viewDetails": "View Details", + "editYaml": "Edit YAML", + "delete": "Delete", + "more": "More" + }, + "filters": { + "activeFilters": "Active Filters:", + "kindFilter": "Kind: {{kind}}", + "namespaceFilter": "Namespace: {{namespace}}", + "labelFilter": "{{key}}: {{value}}", + "clear": "Clear ({{count}})" + }, + "menus": { + "resourceKinds": "Object Kinds ({{count}})", + "namespaces": "Namespaces ({{count}})", + "labels": "Labels ({{count}} keys)", + "noLabelsFound": "No labels found in the current objects", + "active": "Active" + }, + "stats": { + "resourceOverview": "Object Overview", + "topResourceKinds": "Top Object Kinds", + "topNamespaces": "Top Namespaces" + }, + "table": { + "name": "Name", + "kind": "Kind", + "namespace": "Namespace", + "status": "Status", + "age": "Age", + "createdAt": "Created", + "labels": "Labels", + "actions": "Actions" + }, + "preview": { + "objectDetails": "Object Details", + "namespace": "Namespace", + "createdAt": "Created", + "uid": "UID", + "noLabels": "No labels", + "labels": "Labels" + }, + "time": { + "justNow": "Just now", + "hoursAgo": "{{count}}h ago", + "daysAgo": "{{count}}d ago" + }, + "loading": { + "resources": "Loading resources...", + "applying": "Applying filters...", + "refreshing": "Refreshing..." + }, + "errors": { + "loadFailed": "Failed to load resources", + "filterFailed": "Failed to apply filters", + "actionFailed": "Action failed" + }, + "notifications": { + "filtersApplied": "Filters applied successfully", + "resourcesRefreshed": "Resources refreshed successfully" + }, + "subtitle": "Explore and manage Kubernetes resources", + "status": { + "healthy": "Healthy", + "warning": "Warning", + "error": "Error", + "active": "Active", + "unknown": "Unknown", + "running": "Running", + "pending": "Pending", + "failed": "Failed", + "progressing": "Progressing", + "scheduled": "Scheduled", + "waiting": "Waiting", + "ready": "Ready", + "notReady": "Not Ready", + "succeeded": "Succeeded", + "outOfSync": "Out of Sync", + "missing": "Missing", + "synced": "Synced" + }, + "unknown": "Unknown" }, "validation": { "missingRequiredFields": "缺少必填字段" diff --git a/frontend/src/locales/strings.zh-Hant.json b/frontend/src/locales/strings.zh-Hant.json index 0b112bcb0..ef8d382bb 100644 --- a/frontend/src/locales/strings.zh-Hant.json +++ b/frontend/src/locales/strings.zh-Hant.json @@ -1,22 +1,2077 @@ { - "raiseIssue": "回報問題", + "common": { + "changes": "更改", + "clusterLabel": "叢集標籤", + "workloadLabel": "工作負載標籤", + "workloads": "工作負載", + "clearCanvas": "清除畫布", + "clearFilter": "清除篩選器", + "cancel": "取消", + "save": "儲存", + "edit": "編輯", + "delete": "刪除", + "create": "建立", + "add": "新增", + "refresh": "重新整理", + "search": "搜尋", + "connect": "連線", + "import": "匯入", + "loading": "載入中...", + "success": "成功", + "error": "錯誤", + "warning": "警告", + "actions": "操作", + "status": { + "status": "狀態", + "active": "活動中", + "inactive": "未啟用", + "pending": "待定", + "checking": "檢查中", + "success": "成功", + "warning": "版本不匹配", + "error": "缺失", + "installed": "已安裝" + }, + "noResource": "未指定{{resource}}", + "copy": "複製", + "close": "關閉", + "update": "更新", + "unknown": "未知", + "workload": "工作負載", + "tryAgain": "重試", + "confirm": "確認", + "continue": "繼續", + "back": "返回", + "submit": "提交", + "settings": "設定", + "help": "幫助", + "details": "詳情", + "view": "檢視", + "yes": "是", + "no": "否", + "all": "全部", + "none": "無", + "ok": "確定", + "finish": "完成", + "next": "下一步", + "retry": "重試", + "previous": "上一步", + "page": "頁面", + "sync": "同步", + "clearAll": "全部清除", + "fitView": "適應檢視", + "clearSearch": "清除搜尋", + "clearFilters": "清除篩選條件", + "clear": "清除", + "of": "共", + "items": "{{count}} 項", + "items_plural": "{{count}} 項", + "filteredFrom": "篩選自" + }, + "admin": { + "users": { + "title": "使用者管理", + "subtitle": "系統使用者", + "description": "Manage system users and their permissions", + "searchPlaceholder": "Search users by name, role, or permissions...", + "refresh": "Refresh Users", + "addUser": "Add User", + "noUsers": "未找到使用者", + "noUsersDescription": "系統中還沒有使用者。點選\"新增使用者\"建立您的第一個使用者。", + "noPermissions": "未分配許可權", + "filters": { + "title": "Filters", + "reset": "Reset Filters", + "role": "Role", + "allRoles": "All Roles", + "permission": "Permission", + "anyPermission": "Any Permission", + "permissionLevel": "Permission Level", + "anyLevel": "Any Level", + "sortBy": "Sort By", + "created": "Creation Date", + "ascending": "Ascending", + "descending": "Descending", + "active": "Active Filters", + "roleFilter": "Role", + "permissionFilter": "Permission", + "levelFilter": "Level", + "searchFilter": "Search" + }, + "actions": { + "addUser": "新增使用者", + "editUser": "編輯使用者", + "add": "新增使用者", + "update": "更新使用者", + "delete": "刪除使用者", + "edit": "編輯", + "deleteUser": "刪除使用者" + }, + "table": { + "username": "使用者名稱", + "role": "角色", + "permissions": "許可權", + "actions": "操作" + }, + "roles": { + "admin": "管理員", + "user": "使用者" + }, + "permissions": { + "users": "使用者", + "resources": "資源", + "system": "系統", + "dashboard": "儀表板", + "levels": { + "read": "讀取", + "write": "寫入", + "none": "無" + } + }, + "form": { + "username": "使用者名稱", + "usernamePlaceholder": "輸入使用者名稱", + "password": "密碼", + "passwordPlaceholder": "輸入密碼", + "passwordOptional": "密碼(可選)", + "passwordOptionalPlaceholder": "輸入新密碼或留空", + "confirmPassword": "確認密碼", + "confirmPasswordPlaceholder": "確認密碼", + "isAdmin": "管理員訪問許可權", + "permissions": "元件許可權", + "cancel": "取消", + "optional": "可選" + }, + "delete": { + "title": "刪除使用者", + "confirmTitle": "確認刪除", + "confirmMessage": "您確定要刪除使用者\"{{username}}\"嗎?此操作無法撤消。", + "confirm": "刪除使用者" + }, + "errors": { + "fetchFailed": "獲取使用者失敗", + "missingFields": "請填寫所有必填欄位", + "passwordMismatch": "密碼不匹配", + "addFailed": "新增使用者失敗", + "updateFailed": "更新使用者失敗", + "deleteFailed": "刪除使用者失敗", + "invalidUsername": "使用者名稱只能包含字母、數字、下劃線和連字元" + }, + "success": { + "userAdded": "使用者新增成功", + "userUpdated": "使用者更新成功", + "userDeleted": "使用者刪除成功" + } + } + }, + "installationPage": { + "successSection": { + "installed": "is correctly installed and meets the version requirements." + }, + "errorSection": { + "title": "Installation Instructions", + "viewGuide": "View installation guide" + }, + "statusBadge": { + "installed": "已安裝", + "versionMismatch": "版本不匹配", + "missing": "缺失", + "checking": "檢查中" + }, + "codeBlock": { + "bash": "bash" + }, + "title": "安裝", + "verification": "驗證", + "installCommand": "執行以下命令進行安裝", + "verifyCommand": "使用以下命令驗證安裝", + "welcome": "歡迎使用 KubeStellar", + "gettingStarted": "透過設定開發環境開始使用 KubeStellar。按照引導式安裝流程部署演示系統。", + "tabs": { + "prerequisites": "前提條件", + "installation": "安裝" + }, + "sidebarSteps": { + "title": "安裝步驟", + "description": "按照以下步驟設定 KubeStellar", + "checkPrerequisites": "檢查前提條件", + "checkPrerequisitesDescription": "確保已安裝所有必需工具", + "installKubestellar": "安裝 KubeStellar", + "installKubestellarDescription": "使用 CLI 命令部署 KubeStellar", + "startUsingKubestellar": "開始使用 KubeStellar", + "startUsingKubestellarDescription": "登入並開始管理叢集" + }, + "documentationLink": "檢視完整安裝指南", + "prerequisites": { + "prerequisites": "前提條件", + "title": "系統前提條件", + "description": "請在繼續之前確保已安裝以下工具", + "kubeflexDescription": "KubeFlex CLI tool (required version ≥ 0.8.0)", + "ocmDescription": "Open Cluster Management CLI (required version between 0.7 and 0.11)", + "helmDescription": "Kubernetes package manager (required version ≥ 3.0.0)", + "kubectlDescription": "Kubernetes command-line tool (required version ≥ 1.27.0)", + "kindDescription": "Tool for running local Kubernetes clusters (required version ≥ 0.20.0)", + "dockerDescription": "Container runtime (required version ≥ 20.0.0)", + "status": { + "success": "成功", + "warnings": "警告", + "missing": "缺失", + "checking": "檢查中" + }, + "coreRequirements": "核心要求", + "demoEnvironmentRequirements": "演示環境要求", + "buttons": { + "nextInstallation": "下一步:安裝", + "checking": "Checking...", + "refresh": "重新整理" + } + }, + "installation": { + "title": "安裝 KubeStellar", + "description": "選擇您的平臺並執行安裝指令碼", + "installPrerequisitesFirst": { + "title": "先安裝前提條件", + "description": "在執行安裝指令碼之前,請確保系統中已安裝所有必需的前提條件。", + "button": "檢視安裝前提條件" + }, + "platform": "平臺", + "platforms": { + "kind": "kind", + "k3d": "k3d" + }, + "installationScript": "安裝指令碼", + "scriptInstructions": "在終端中執行此命令以使用以下方式安裝 KubeStellar", + "installationProcess": { + "title": "安裝過程:", + "steps": [ + "建立並配置本地叢集", + "安裝 KubeStellar 元件及其依賴項", + "設定正確的網路和許可權", + "配置演示環境" + ] + }, + "importantNotes": { + "title": "重要說明:", + "notes": [ + "安裝可能需要幾分鐘才能完成", + "請確保系統資源充足", + "在安裝完成前請保持終端視窗開啟", + "檢查終端輸出中的任何錯誤資訊" + ] + }, + "afterInstallation": { + "title": "安裝後:", + "steps": ["透過檢查叢集狀態驗證安裝", "檢視入門文件", "開始管理您的 KubeStellar 環境"] + }, + "buttons": { + "backPrerequisites": "上一步:前提條件", + "startInstallation": "開始安裝", + "installing": "正在安裝..." + } + }, + "checkingStatus": { + "title": "正在檢查 KubeStellar 安裝狀態...", + "description": "這隻需片刻時間。我們正在檢查系統中是否已安裝 KubeStellar。" + }, + "checkError": { + "title": "狀態檢查失敗", + "description": "無法檢查 KubeStellar 是否已安裝。可能是由於後端服務連線問題或伺服器暫時不可用。", + "retryButton": "重試連線", + "persistenceNote": "如果問題仍然存在,請檢查您的網路連線或聯絡系統管理員。" + }, + "footer": { + "copyright": "KubeStellar", + "documentation": "文件", + "github": "GitHub", + "description": "KubeStellar 是一個開源專案。如需支援、功能請求或報告錯誤,請訪問我們的 GitHub 倉庫。" + }, + "skipPrerequisitesNotice": { + "title": "已跳過前提條件檢查", + "description": "當前環境中已停用前提條件檢查。您可以直接進行安裝。", + "note": "注意:請確保在執行安裝命令之前手動安裝所有必需工具。" + }, + "toasts": { + "alreadyInstalled": "KubeStellar 已安裝!正在跳轉到登入頁面...", + "notInstalled": "未發現 Kubeflex 叢集。請按照步驟設定 KubeStellar 環境。", + "checkFailed": "檢查 KubeStellar 狀態失敗", + "preparingInstructions": "正在準備安裝指令...", + "followInstructions": "請按照以下 CLI 安裝指令安裝 KubeStellar", + "loadInstructionsFailed": "載入安裝指令失敗。請重新整理頁面並重試。", + "installationDetected": "檢測到已安裝 KubeStellar。正在跳轉到登入頁面...", + "recheckingPrerequisites": "Rechecking prerequisites...", + "prerequisitesRechecked": "Prerequisites rechecked successfully", + "recheckFailed": "Failed to recheck prerequisites" + } + }, + "header": { + "themeToggle": "切換主題", + "dashboard": "儀表盤", + "clusters": "叢集", + "workloads": "工作負載", + "policies": "策略", + "settings": "設定", + "logout": "退出登入", + "language": "語言", + "importCluster": "匯入叢集", + "menu": "選單", + "goToHome": "返回主頁", + "logoAlt": "KubeStellar 標誌", + "themeToggleTip": "Alt+Q 切換主題", + "switchTheme": "切換為 {{mode}} 模式", + "switchLanguage": "Switch language", + "selectLanguage": "Select Language", + "enterFullscreen": "Enter fullscreen mode", + "exitFullscreen": "Exit fullscreen mode", + "fullscreen": "Toggle fullscreen mode" + }, + "login": { + "controlPlane": "控制平面", + "layout": { + "logoAlt": "KubeStellar", + "tagline": "無縫多叢集管理", + "taglineEmphasis": "為未來而生。", + "fullscreen": "切換全屏", + "welcomeBack": "歡迎回來", + "accessDashboard": "進入儀表盤", + "enterCredentials": "請輸入您的憑據", + "needHelp": "需要幫助?", + "contactSupport": "聯絡支援" + }, + "loading": { + "logoAlt": "KubeStellar", + "initializing": "正在初始化 KubeStellar 環境..." + }, + "form": { + "username": "使用者名稱", + "password": "密碼", + "rememberMe": "記住我", + "signIn": "登入 KubeStellar", + "signingIn": "正在登入...", + "showPassword": "顯示密碼", + "hidePassword": "隱藏密碼", + "errors": { + "usernameRequired": "使用者名稱為必填項", + "passwordRequired": "密碼為必填項" + } + } + }, + "clusters": { + "title": "管理叢集", + "subtitle": "管理和監控您的 Kubernetes 叢集", + "searchPlaceholder": "按名稱、標籤、狀態或上下文搜尋叢集...", + "importCluster": "匯入叢集", + "activeFilters": "活動篩選器:", + "search": "搜尋", + "noClustersFound": "未找到叢集", + "noClustersMatchBoth": "沒有叢集同時匹配您的搜尋和篩選條件", + "noClustersMatchSearch": "沒有叢集匹配您的搜尋詞", + "noClustersMatchFilter": "沒有叢集匹配您的篩選選擇", + "noClustersAvailable": "尚無可用叢集。匯入您的第一個叢集以開始使用。", + "importYourFirst": "匯入您的第一個叢集", + "filteredByLabel": "按標籤篩選", + "actions": { + "viewDetails": "檢視詳情", + "editLabels": "編輯標籤", + "copyName": "複製名稱", + "detachCluster": "分離叢集" + }, + "status": { + "title": "狀態", + "active": "活躍", + "inactive": "非活躍", + "pending": "待處理" + }, + "table": { + "name": "名稱", + "labels": "標籤", + "creationTime": "建立時間", + "context": "上下文", + "status": "狀態", + "actions": "操作" + }, + "quickConnect": { + "title": "透過快速連線進行連線", + "description": "使用快速連線功能匯入您的叢集", + "clusterName": "叢集名稱", + "clusterNamePlaceholder": "為您的叢集輸入名稱", + "token": "令牌", + "tokenPlaceholder": "輸入您的令牌", + "hubApiServer": "中心 API 伺服器", + "hubApiServerPlaceholder": "輸入中心 API 伺服器 URL", + "steps": { + "step1": { + "title": "選擇您的叢集", + "description": "從上面的下拉列表中選擇一個叢集" + }, + "step2": { + "title": "一鍵入駐", + "description": "點選\"入駐叢集\"按鈕開始自動化流程" + }, + "step3": { + "title": "即時連線", + "description": "您的叢集將自動入駐,無需手動命令" + } + } + }, + "manualImport": { + "title": "手動叢集設定", + "subtitle": "推薦", + "description": "按照以下步驟使用 kubectl 命令手動匯入您的叢集", + "generateCommand": "生成命令", + "copyCommand": "複製命令", + "runInTerminal": "在終端中執行", + "commandGenerated": "命令生成成功", + "selectCluster": "選擇叢集", + "generateImportCommand": "生成匯入命令", + "importCommand": "匯入命令" + }, + "apiUrl": { + "title": "透過 API/URL 連線", + "description": "透過提供 API 端點和身份驗證詳細資訊來匯入您的叢集", + "endpoint": "API/URL 端點", + "endpointPlaceholder": "https://kubernetes.example.com:6443", + "token": "身份驗證令牌(可選)", + "tokenPlaceholder": "如果需要,請輸入身份驗證令牌", + "connectImport": "連線並匯入" + }, + "excluded": [ + "kubestellar-report", + "kube-node-lease", + "kube-public", + "default", + "kube-system", + "open-cluster-management-hub", + "open-cluster-management", + "local-path-storage" + ], + "labels": { + "label": "標籤", + "editvalue": "鍵和值都是必需的", + "manage": "管理標籤", + "bulkTooltipDisabled": "Select at least 2 clusters to enable bulk labeling", + "bulkTooltipEnabled": "Manage labels for selected clusters", + "clearFilter": "清除篩選器", + "searchLabelsPlaceholder": "搜尋標籤...", + "bulkEditTitle": "編輯 {{count}} 個叢集的標籤", + "editTitle": "編輯 {{name}} 的標籤", + "bulkEditDescription": "您正在編輯 {{count}} 個叢集的標籤。更改將應用於所有選定的叢集。", + "keyPlaceholder": "例如:environment", + "valuePlaceholder": "例如:production", + "protectedLabelsCannotBeModified": "🔒 受保護的標籤無法修改。", + "exitSearch": "退出搜尋", + "saveChanges": "儲存更改", + "saveChangesButton": "儲存更改", + "tooltipTitle": "叢集:", + "noLabelsAvailable": "沒有可用的叢集標籤。請新增帶有標籤的叢集以在繫結策略中使用。", + "noLabelsMatchSearch": "沒有標籤匹配您的搜尋。", + "noLabelsFound": "在可用叢集中未找到標籤。", + "clickToAdd": "點選標籤將其新增到畫布", + "edit": "編輯標籤", + "add": "新增標籤", + "for": "為", + "bulkEdit": "批次編輯模式", + "appendToExisting": "附加到現有標籤", + "key": "標籤鍵", + "value": "標籤值", + "noLabels": "尚未新增標籤", + "noMatchingLabels": "未找到匹配的標籤", + "addYourFirst": "使用上面的欄位新增您的第一個標籤,以幫助組織此叢集。", + "tip": "提示:按 Enter 鍵在欄位間移動,或雙擊標籤進行編輯", + "tryDifferentSearch": "嘗試不同的搜尋詞或清除搜尋", + "count": "{{count}} 個標籤{{count, plural, one {} other {}}}", + "description": "新增、編輯或刪除標籤以組織和分類您的叢集。", + "defaultProtected": "預設標籤 - 無法修改", + "bindingProtected": "在繫結策略中使用 - 無法修改", + "manageLabels": "管理標籤", + "bulkLabels": "批次標籤", + "editValue": "編輯標籤", + "removeLabel": "刪除標籤", + "cancelEdit": "取消編輯", + "added": "已新增新標籤:{{key}}", + "updated": "已更新現有標籤:{{key}}", + "removed": "已刪除標籤:{{key}}", + "updateSuccess": "標籤更新成功", + "duplicate": "鍵為\"{{key}}\"的標籤已存在", + "protected": "無法修改受保護的標籤:{{key}}", + "finishEditing": "完成編輯", + "noClustersToEdit": "沒有可編輯的叢集", + "noClustersSelected": "未選擇叢集", + "cannotDeleteUsed": "標籤在繫結策略中使用,無法刪除。請先刪除策略。", + "bulkUpdateSuccess": "已為所有 {{count}} 個叢集更新標籤", + "bulkUpdatePartial": "已為 {{success}} 個叢集更新標籤,{{failures}} 個叢集失敗", + "bulkUpdateFail": "為所有 {{count}} 個叢集更新標籤失敗" + }, + "dialog": { + "selectMultipleClusters": "選擇多個叢集", + "selectClusterToEdit": "選擇要編輯的叢集", + "selectedCount": "已選擇 {{count}} 個", + "editClustersButton": "編輯 {{count}} 個叢集" + }, + "list": { + "more": "更多", + "title": "管理叢集", + "subtitle": "管理和監控您的 Kubernetes 叢集", + "searchPlaceholder": "按名稱、標籤、狀態或上下文搜尋叢集...", + "import": "匯入叢集", + "noResults": "未找到叢集", + "name": "名稱", + "creationTime": "建立時間", + "context": "上下文", + "description": "管理和監控您的 Kubernetes 叢集", + "filter": "狀態篩選器", + "activeFilters": "活動篩選器:", + "searchFilter": "搜尋:\"{{query}}\"", + "statusFilter": "狀態:{{value}}", + "labelFilter": "標籤:{{key}}={{value}}", + "clearAll": "清除全部", + "showingResults": "{{count}} 個結果{{count, plural, one {} other {}}}", + "clearSearch": "按 Esc 鍵清除搜尋", + "importCluster": "匯入叢集", + "importYourFirst": "匯入您的第一個叢集", + "searchLabelsPlaceholder": "搜尋標籤...", + "search": "搜尋", + "label": "標籤", + "filteredByLabel": "按標籤篩選:", + "filterByLabel": "點選按此標籤篩選", + "noClustersFound": "未找到叢集", + "noClustersMatchBoth": "沒有叢集同時匹配您的搜尋和篩選條件", + "noClustersMatchSearch": "沒有叢集匹配您的搜尋詞", + "noClustersMatchFilter": "沒有叢集匹配您的篩選選擇", + "noClustersAvailable": "尚無可用叢集。匯入您的第一個叢集以開始使用。", + "table": { + "name": "名稱", + "labels": "標籤", + "creationTime": "建立時間", + "context": "上下文", + "status": "狀態", + "actions": "操作" + }, + "status": { + "active": "活躍", + "inactive": "非活躍", + "pending": "待處理" + }, + "actions": { + "viewDetails": "檢視詳情", + "editLabels": "編輯標籤", + "copyName": "複製名稱", + "detachCluster": "分離叢集" + }, + "labels": { + "edit": "編輯標籤", + "add": "新增標籤", + "bulkEdit": "批次編輯模式", + "appendToExisting": "附加到現有標籤", + "key": "標籤鍵", + "value": "標籤值", + "noLabels": "尚未新增標籤", + "noMatchingLabels": "未找到匹配的標籤", + "addYourFirst": "使用上面的欄位新增您的第一個標籤,以幫助組織此叢集。", + "tip": "提示:按 Enter 鍵在欄位間移動,或雙擊標籤進行編輯", + "tryDifferentSearch": "嘗試不同的搜尋詞或清除搜尋", + "count": "{{count}} 個標籤{{count, plural, one {} other {}}}", + "description": "新增、編輯或刪除標籤以組織和分類您的叢集。", + "defaultProtected": "預設標籤 - 無法修改", + "bindingProtected": "在繫結策略中使用 - 無法修改", + "manage": "管理標籤" + } + }, + "details": { + "title": "叢集詳情", + "overview": "概覽", + "labels": "標籤", + "resources": "資源", + "status": "狀態", + "events": "事件", + "logs": "日誌" + }, + "clusterDetailDialog": { + "title": "叢集詳情", + "loading": "正在載入叢集資訊...", + "error": { + "title": "載入叢集詳情失敗", + "description": "檢索此叢集資訊時出錯。" + }, + "status": { + "available": "可用", + "unavailable": "不可用" + }, + "kubernetes": "Kubernetes {{version}}", + "createdOn": "創建於 {{date}}", + "labels": "標籤", + "labelCount": "{{count}} 個標籤", + "noLabels": "此叢集未分配標籤", + "capacityResources": "容量和資源", + "cpuCores": "CPU 核心數", + "memory": "記憶體", + "podCapacity": "Pod 容量", + "lastRefreshed": "最後重新整理時間", + "noClusterSelected": "未選擇叢集" + }, + "dashboard": { + "title": "儀表盤", + "lastUpdatedJustNow": "最後更新:剛剛", + "status": "狀態:良好", + "other": "其他", + "distribution": "分佈", + "state": "待處理或非活躍", + "otherClusters": "其他叢集", + "hoverFormula": "懸停檢視公式明細", + "healthScore": "健康評分公式", + "clusterHealth": "整體叢集健康狀況", + "clusterStatus": "叢集狀態", + "welcome": "歡迎使用 KubeStellar 管理儀表盤", + "errorLoading": "載入叢集資訊時出錯", + "addCluster": "新增叢集", + "notAvailable": "不可用", + "invalidDate": "無效日期", + "managedClusters": "受管叢集", + "grafana": "Grafana", + "total": "總計", + "viewAll": "檢視全部", + "cpuCapacity": "CPU 容量", + "memoryCapacity": "記憶體容量", + "podCapacity": "Pod 容量", + "podCapacityLabel": "Pod 容量", + "active": "活躍", + "inactive": "非活躍", + "noManagedClusters": "未找到受管叢集", + "importCluster": "匯入叢集", + "showMoreClusters": "顯示更多叢集", + "clustersActive": "叢集活躍", + "systemHealth": "系統健康狀況", + "refresh": "重新整理", + "noRecentActivity": "未找到最近活動", + "recentActivity": "最近活動", + "resourceUtilization": "資源利用率", + "clusterMetrics": "基於叢集指標", + "pods": { + "formula": "Pod 健康公式", + "calculation": "基於所有名稱空間中健康 Pod 與總 Pod 的比率計算。", + "status": "考慮 Pod 狀態、就緒探針和存活檢查", + "value": "數值越高表示叢集健康狀況越好", + "formulaDesc": "(執行中的 Pod / 總 Pod 數) × 100%", + "health": "Pod 健康狀況" + }, + "cpu": { + "usage": "CPU 使用率", + "formula": "CPU 使用率公式", + "calculation": "計算為叢集中所有節點當前正在使用的已分配 CPU 資源百分比。", + "value": "數值越低表示資源可用性越好", + "formulaDesc": "(已使用 CPU 核心數 / 總 CPU 核心數) × 100%", + "health": "數值越低表示效能越好" + }, + "memory": { + "usage": "記憶體使用率", + "formula": "記憶體使用率公式", + "calculation": "計算為叢集中所有節點當前正在使用的已分配記憶體資源百分比。", + "value": "數值越低表示資源可用性越好", + "formulaDesc": "(已使用記憶體 / 總記憶體) × 100%" + }, + "stats": { + "running": "執行且可用", + "totalClusters": "總叢集數", + "activeClusters": "活躍叢集", + "bindingPolicies": "繫結策略", + "currentContext": "當前上下文", + "none": "無" + }, + "health": { + "excellent": "優秀", + "good": "良好", + "fair": "一般", + "needsAttention": "需要關注", + "critical": "嚴重" + }, + "guide": { + "title": "儀表盤指南", + "clusterStats": "叢集統計", + "clusterStatsDesc": "顯示總叢集數和活躍叢集數。將滑鼠懸停在指標上可檢視其計算方式的詳細資訊。", + "healthMetrics": "健康指標", + "healthMetricsDesc": "顯示 CPU、記憶體使用率和 Pod 健康狀況。綠色指示器表示良好健康狀況,黃色需要關注。", + "recentActivity": "最近活動", + "recentActivityDesc": "顯示叢集和策略的最近更改。點選叢集檢視詳細資訊。", + "proTip": "專業提示", + "proTipDesc": "將滑鼠懸停在任何指標或圖表上,可檢視其計算方式和可採取操作的詳細資訊。" + } + }, + "detach": { + "title": "分離叢集", + "confirmation": "您確定要分離以下叢集嗎?", + "context": "上下文", + "warning": "警告:此操作將從管理中移除叢集。它將不再可見或可從此介面控制。", + "detaching": "正在分離...", + "detach": "分離叢集" + } + }, + "webSocket": { + "errors": { + "notConnected": "WebSocket 未連線", + "closingError": "關閉 WebSocket 時出錯:", + "expectedStringData": "JSON 解析需要字串資料", + "processingFailed": "處理 WebSocket 訊息失敗", + "connectionError": "WebSocket 連線錯誤" + } + }, + "wdsQueries": { + "errors": { + "fetchWorkloads": "獲取工作負載失敗", + "errorFetchingWorkloads": "獲取工作負載時出錯:", + "fetchWorkloadDetails": "獲取工作負載詳情失敗", + "errorFetchingWorkloadDetails": "獲取工作負載詳情時出錯:", + "statusFetchFailed": "狀態獲取失敗:", + "createWorkloadFailed": "建立工作負載失敗", + "errorCreatingWorkload": "建立工作負載時出錯:", + "uploadFileFailed": "上傳檔案失敗", + "errorUploadingFile": "上傳檔案時出錯:", + "updateWorkloadFailed": "更新工作負載失敗", + "errorUpdatingWorkload": "更新工作負載時出錯:", + "scaleWorkloadFailed": "擴縮工作負載失敗", + "errorScalingWorkload": "擴縮工作負載時出錯:", + "deleteWorkloadFailed": "刪除工作負載失敗", + "errorDeletingWorkload": "刪除工作負載時出錯:", + "fetchWorkloadLogsFailed": "獲取工作負載日誌失敗", + "errorFetchingWorkloadLogs": "獲取工作負載日誌時出錯:" + }, + "success": { + "workloadCreated": "工作負載建立成功", + "fileUploaded": "檔案上傳成功", + "workloadUpdated": "工作負載更新成功", + "workloadScaled": "工作負載已擴縮至 {{replicas}} 個副本", + "workloadDeleted": "工作負載刪除成功" + }, + "defaults": { + "deploymentKind": "deployment", + "defaultNamespace": "default" + } + }, + "clusterQueries": { + "status": { + "available": "可用", + "unavailable": "不可用" + }, + "logging": { + "clusterOnboardRequestPayload": "[除錯] 叢集入駐請求載荷:", + "clusterOnboardResponse": "[除錯] 叢集入駐響應:", + "onboardSuccessful": "[除錯] 叢集入駐變更成功,使叢集查詢快取失效", + "onboardError": "[除錯] 叢集入駐變更錯誤:", + "mutationStart": "[除錯] ========== 變更開始 ==========", + "context": "[除錯] 上下文:", + "cluster": "[除錯] 叢集:", + "originalLabels": "[除錯] 原始標籤:", + "deletedLabels": "[除錯] 已刪除標籤:", + "processingBulkUpdate": "[除錯] 正在處理 {{count}} 個叢集的批次標籤更新", + "addingDeletedLabels": "[除錯] 將已刪除的標籤新增為空值:", + "finalLabels": "[除錯] 傳送到後端的最終標籤:", + "apiPayload": "[除錯] API 載荷:", + "apiResponse": "[除錯] API 響應:", + "apiError": "[除錯] API 錯誤:", + "labelsUpdated": "[除錯] 標籤更新成功,使叢集查詢快取失效", + "errorUpdatingLabels": "[除錯] 更新叢集標籤時出錯:", + "detachingCluster": "[除錯] 正在分離叢集:", + "detachSuccessful": "[除錯] 叢集分離成功,使叢集查詢快取失效", + "detachError": "[除錯] 叢集分離變更錯誤:", + "skippingDetailsFetch": "[除錯] 跳過虛擬批次叢集的詳情獲取" + }, + "messages": { + "applyLabelsToMultipleClusters": "將對 {{count}} 個叢集應用標籤" + }, + "defaults": { + "virtualBulkOperationId": "virtual-bulk-operation" + } + }, + "bpQueries": { + "logging": { + "fetchingPolicyDetails": "正在獲取繫結策略的完整詳情:{{policyName}}", + "receivedResponses": "已從兩個 API 端點接收到響應", + "foundPolicyDetails": "在主 BP 響應中找到策略詳情:", + "receivedStatusData": "已接收狀態資料:", + "yamlFromResponse": "直接從響應根部使用 YAML", + "yamlFromMetadata": "從 metadata.annotations.yaml 使用 YAML", + "yamlAvailable": "策略 {{policyName}} 的提取 YAML 內容可用({{length}} 個字元)", + "noYamlFound": "未找到策略 {{policyName}} 的 YAML 內容", + "parsedYaml": "已解析的 YAML:", + "errorParsingYaml": "解析 YAML 時出錯:", + "usingStatus": "使用來自狀態 API 端點的狀態\"{{status}}\"", + "finalPolicyObject": "最終策略物件:", + "extractedUniqueWorkloads": "共提取了 {{count}} 個唯一工作負載", + "rawBindingPolicies": "原始繫結策略:" + }, + "errors": { + "policyNotFound": "在主響應中未找到策略 {{policyName}}", + "errorParsingJson": "從原始 fieldsv1 解析 JSON 時出錯:", + "resourcesNull": "名稱空間 {{namespace}}、資源型別 {{resourceType}} 的資源為空", + "resourcesNullClusterScoped": "叢集範圍資源型別 {{resourceType}} 的資源為空" + } + }, + "wecsTopology": { + "title": "遠端叢集樹檢視", + "createWorkload": "建立工作負載", + "viewModes": { + "tiles": "磁貼", + "list": "列表" + }, + "note": "注意:此檢視中已過濾掉預設、Kubernetes 系統和 OpenShift 名稱空間。", + "emptyState": { + "title": "未找到工作負載", + "description": "建立您的第一個工作負載以開始使用" + }, + "contextMenu": { + "details": "詳情", + "edit": "編輯", + "logs": "日誌", + "execPods": "執行 Pod" + }, + "fullscreen": { + "toggle": "切換全屏檢視" + }, + "timeAgo": { + "today": "今天", + "days": "{{count}} 天", + "days_plural": "{{count}} 天" + }, + "status": { + "active": "活躍", + "inactive": "非活躍" + }, + "zoomControls": { + "groupByResource": "按資源/型別分組", + "expandAll": "展開所有父節點的子節點", + "collapseAll": "摺疊所有父節點的子節點", + "zoomIn": "放大", + "zoomOut": "縮小", + "resetZoom": "Reset Zoom", + "edgeStyle": "Edge Style", + "curvy": "Curvy", + "square": "Square", + "fullscreen": "Enter Fullscreen", + "exitFullscreen": "Exit Fullscreen" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" + }, + "nodeLabel": { + "labels": "標籤:", + "noLabels": "無標籤" + } + }, + "wecsDetailsPanel": { + "common": { + "update": "更新", + "sync": "同步", + "delete": "刪除", + "close": "關閉", + "unknown": "未知", + "na": "不可用", + "today": "今天", + "daysAgo": "{{count}} 天前" + }, + "buttons": { + "clearTerminal": "清除終端", + "minimize": "最小化", + "maximize": "最大化" + }, + "tabs": { + "summary": "摘要", + "edit": "編輯", + "logs": "日誌", + "execPods": "執行 PODS" + }, + "terminal": { + "connecting": "正在連線到容器 {{containerName}} 中的 pod shell...", + "connected": "已連線到容器 {{containerName}} 中的 pod shell", + "connectionClosed": "連線已關閉", + "connectionNotActive": "連線未啟用。無法傳送命令。", + "errorConnecting": "連線到 pod 時出錯。請重試。" + }, + "format": { + "yaml": "YAML", + "json": "JSON" + }, + "table": { + "kind": "型別", + "name": "名稱", + "namespace": "名稱空間", + "createdAt": "建立時間", + "context": "上下文", + "labels": "標籤" + }, + "containers": { + "selectContainer": "選擇容器", + "noContainersFound": "未找到容器" + }, + "logs": { + "previousLogs": "Previous Logs", + "currentLogs": "Current Logs", + "selectLogsContainer": "Select logs container" + }, + "errors": { + "failedLoadClusterDetails": "載入叢集詳情失敗。", + "failedLoadDetails": "載入 {{type}} 詳情失敗。", + "apiNotImplemented": "更新 pod \"{{resourceName}}\" 的 API 未實現", + "failedFetchContainers": "獲取容器列表失敗", + "failedFetchLogsContainers": "Failed to fetch container list for logs", + "failedConnectExec": "Failed to connect to exec session", + "failedInitExec": "Failed to initialize exec session", + "failedUpdate": "Failed to update manifest", + "resourceNotFound": "Resource not found", + "permissionDenied": "Permission denied", + "invalidManifest": "Invalid manifest format", + "namespaceRequired": "Namespace is required" + }, + "success": { + "manifestUpdated": "Manifest updated successfully" + }, + "cluster": { + "active": "活躍" + }, + "exec": { + "connected": "Connected" + }, + "noManifest": "無可用清單" + }, + "treeView": { + "title": "管理工作負載", + "createWorkload": "建立工作負載", + "note": "注意:預設、Kubernetes 系統和 OpenShift 名稱空間已從此檢視中過濾。", + "filteringContext": "篩選:僅顯示來自 {{context}} 上下文的資源。", + "unknown": "未知", + "viewModes": { + "tiles": "磁貼", + "list": "列表" + }, + "timeAgo": { + "today": "今天", + "days": "{{count}} 天", + "days_plural": "{{count}} 天" + }, + "emptyState": { + "title": "未找到工作負載", + "description": "建立您的第一個工作負載以開始使用" + }, + "fullscreen": { + "toggle": "切換全屏檢視" + }, + "zoomControls": { + "groupByResource": "Group By Resource/Kind", + "expandAll": "Expand all the child nodes of all parent nodes", + "collapseAll": "Collapse all the child nodes of all parent nodes", + "zoomIn": "Zoom In", + "zoomOut": "Zoom Out", + "resetZoom": "Reset Zoom", + "edgeStyle": "Edge Style", + "curvy": "Curvy", + "square": "Square", + "fullscreen": "Enter Fullscreen", + "exitFullscreen": "Exit Fullscreen" + }, + "hideControls": { + "hide": "Hide Controls", + "show": "Show Controls" + }, + "contextMenu": { + "details": "詳情", + "delete": "刪除", + "edit": "編輯", + "logs": "日誌" + }, + "deleteDialog": { + "title": "確認刪除資源", + "message": "您確定要刪除\"{{name}}\"嗎?此操作無法撤銷。", + "confirm": "是的,刪除" + } + }, + "quickConnect": { + "title": "一鍵叢集設定", + "description": "簡化的自動化叢集入駐,無需命令。選擇您的叢集,讓系統處理其餘工作。", + "selectCluster": "選擇 Kubernetes 叢集", + "searchingClusters": "正在搜尋可用叢集...", + "errorLoadingClusters": "載入叢集時出錯", + "automatedOnboarding": "自動化叢集入駐", + "new": "新功能", + "automatedDescription": "這是連線您的 Kubernetes 叢集最簡單的方式。選擇一個叢集並點選入駐按鈕即可直接連線,無需任何手動命令。", + "retry": "重試", + "chooseCluster": "選擇叢集...", + "noClusters": "沒有可用叢集", + "discoveredClusters": { + "title": "發現的叢集", + "description": "這些是在您的環境中發現的叢集。選擇一個以繼續。" + }, + "refreshClustersList": "重新整理叢集列表", + "howToConnect": "如何連線您的叢集", + "steps": { + "step1": { + "title": "選擇您的叢集", + "description": "從上面的下拉列表中選擇一個叢集" + }, + "step2": { + "title": "一鍵入駐", + "description": "點選\"入駐叢集\"按鈕開始自動化流程" + }, + "step3": { + "title": "即時連線", + "description": "您的叢集將自動入駐,無需手動命令" + } + }, + "whyUseAutomated": "為什麼使用自動化入駐?", + "approaches": { + "automated": { + "title": "自動化方式(新功能)", + "features": ["一鍵設定流程", "無需手動執行命令", "流線化體驗", "減少出錯機會"] + }, + "manual": { + "title": "手動方式(傳統)", + "features": ["手動複製並執行命令", "需要多個 CLI 步驟", "更復雜的流程", "需要命令列知識"] + } + }, + "buttons": { + "onboarding": "正在入駐...", + "onboard": "入駐叢集", + "back": "返回", + "close": "關閉", + "openDashboard": "開啟叢集儀表盤", + "goToDashboard": "前往儀表盤" + }, + "success": { + "title": "叢集入駐成功", + "clusterAdded": "叢集新增成功", + "clusterAvailable": "您的叢集現在可在平臺中使用", + "message": "叢集 {{clusterName}} 已成功入駐到平臺。", + "detailMessage": "您的叢集 {{clusterName}} 已成功入駐。以下是您接下來可以做的事情:", + "nextSteps": { + "viewManage": { + "title": "檢視和管理", + "description": "透過儀表盤訪問您的叢集以檢視資源和狀態" + }, + "deployApps": { + "title": "部署應用程式", + "description": "將容器化應用程式和服務部署到您的叢集" + }, + "configureSettings": { + "title": "配置設定", + "description": "自定義和配置您的叢集設定和策略" + } + } + } + }, + "bindingPolicy": { + "editPolicy": "編輯策略", + "saveAndCreatePolicy": "儲存並建立策略", + "title": "管理繫結策略", + "description": "建立和管理工作負載分發的繫結策略", + "createBindingPolicy": "建立繫結策略", + "noBindingPolicies": "未找到繫結策略", + "noBindingPoliciesDescription": "沒有可用的繫結策略", + "noBindingPoliciesWithFilter": "沒有繫結策略匹配您的 {{status}} 篩選條件", + "notifications": { + "fetchError": "獲取繫結策略失敗", + "createSuccess": "繫結策略建立成功", + "createError": "建立繫結策略失敗", + "deleteSuccess": "繫結策略\"{{name}}\"刪除成功", + "deleteError": "刪除繫結策略失敗", + "deleteManySuccess": "{{count}} 個繫結{{count, plural, one {策略} other {策略}}}刪除成功", + "deleteManyError": "刪除繫結策略失敗", + "deploySuccess": "部署完成成功", + "deployError": "部署失敗", + "yamlGenerateError": "生成繫結策略 YAML 失敗", + "quickConnectError": "建立繫結策略失敗", + "labelsAssignedTitle": "標籤已分配", + "policyBindingCreatedTitle": "策略繫結已建立", + "labelsAssignedChip": "標籤幫助將策略定向到特定資源", + "policyBindingCreatedChip": "為策略傳播建立的繫結" + }, + "tabs": { + "selectItems": "選擇專案", + "yaml": "YAML", + "uploadFile": "上傳檔案" + }, + "upload": { + "createNamespaceAutomatically": "自動建立名稱空間", + "chooseDifferentYaml": "選擇不同的 YAML 檔案", + "filePreview": "檔案預覽", + "chooseOrDrag": "選擇或拖放 YAML 檔案", + "or": "- 或 -", + "chooseYaml": "選擇 YAML 檔案", + "uploadAndDeploy": "上傳並部署", + "dropHere": "在此放置 YAML 檔案", + "chooseOrUpload": "選擇或上傳 YAML 檔案", + "selectFile": "選擇 YAML 檔案", + "acceptedFormats": "接受的格式:.yaml, .yml", + "chooseDifferentFile": "選擇不同的檔案" + }, + "previewGeneratedYaml": "預覽生成的 YAML", + "deployBindingPolicies": "部署繫結策略", + "deployBindingPolicy": "部署繫結策略", + "creating": "正在建立...", + "loadingResources": "正在載入資源...", + "deploying": "正在部署...", + "table": { + "name": "繫結策略名稱", + "clusters": "叢集", + "workload": "工作負載", + "creationDate": "建立日期", + "status": "狀態", + "actions": "操作", + "noClusters": "未定義目標叢集", + "noWorkloads": "未定義工作負載" + }, + "yamlGeneration": { + "resourceRequired": "必須指定至少一種資源型別", + "resourceRequiredYaml": "YAML 生成必須指定至少一種資源型別" + }, + "quickConnect": { + "unknownWorkload": "未知", + "unknownLocationGroup": "未知" + }, + "loading": "正在載入...", + "unknown": "未知", + "visualization": { + "title": "繫結策略網路", + "policies": "{{count}} 個策略", + "targetCluster": "目標叢集", + "clusters": "{{count}} 個叢集", + "workloads": "{{count}} 個工作負載", + "showWorkloads": "顯示工作負載", + "highlightActive": "高亮活躍項", + "refresh": "重新整理視覺化", + "fitView": "適合檢視", + "search": "搜尋節點... (⌘+K)", + "legend": "圖例", + "policyPreview": "策略預覽", + "policyDistribution": "策略分佈", + "previewMode": "預覽模式", + "workloadSource": "工作負載源", + "matchingWorkloads": "{{count}} 個匹配的工作負載{{count, plural, one {} other {}}}", + "matchRateShort": "{{matchRate}}% 匹配", + "targetClusters": "目標叢集 ({{count}})", + "moreClusters": "+{{count}} 個更多", + "policyInsights": "策略洞察", + "status": "狀態", + "lastModified": "最後修改時間", + "notModified": "未修改", + "matchRate": "匹配率", + "matchRateLong": "可用叢集的 {{matchRate}}%", + "legendItems": { + "activePolicy": "活躍策略", + "cluster": "叢集", + "workload": "工作負載", + "activeConnection": "活躍連線", + "inactiveConnection": "非活躍連線" + }, + "layout": { + "title": "佈局", + "horizontal": "水平", + "vertical": "垂直", + "radial": "徑向" + }, + "empty": { + "title": "無視覺化資料", + "description": "沒有繫結策略、叢集或工作負載可供視覺化。建立一些資源以在此檢視中檢視它們。" + }, + "error": { + "title": "視覺化錯誤", + "description": "渲染視覺化時發生錯誤。" + }, + "loading": "正在載入視覺化...", + "searchResources": "搜尋資源", + "noNodesFound": "未找到匹配\"{{searchTerm}}\"的節點" + }, + "policyName": "策略名稱", + "namespace": "名稱空間", + "propagationMode": "傳播模式", + "updateStrategy": "更新策略", + "resources": "資源", + "advanced": "高階設定", + "basic": "基本設定", + "scheduling": "排程規則", + "yaml": "YAML", + "modes": { + "downsyncOnly": "僅下行同步", + "upsyncOnly": "僅上行同步", + "bidirectionalSync": "雙向同步" + }, + "strategies": { + "serverSideApply": "服務端應用", + "forceApply": "強制應用", + "rollingUpdate": "滾動更新", + "blueGreenDeployment": "藍綠部署" + }, + "deploymentType": { + "allClusters": "所有可用叢集", + "selectedClusters": "選定叢集" + }, + "confirm": { + "title": "確認繫結策略部署", + "description": "您即將部署 {{count}} 個繫結策略。請在繼續之前審查它們。", + "deploy": "部署策略", + "deploying": "正在部署...", + "viewYaml": "檢視 YAML" + }, + "emptyState": { + "noClusters": { + "title": "沒有就緒的叢集", + "description": "當前沒有可用於繫結的叢集。在建立繫結策略之前,您需要至少有一個處於\"就緒\"狀態的叢集。", + "button": "管理叢集" + }, + "noWorkloads": { + "title": "未找到工作負載", + "description": "沒有可用的工作負載。請確保您有權訪問工作負載。", + "button": "轉到工作負載" + }, + "noResources": { + "title": "未找到叢集或工作負載", + "description": "您需要叢集和工作負載才能建立繫結策略。", + "button": "檢視資源" + }, + "noPolicies": { + "title": "未找到繫結策略", + "description": "透過建立您的第一個繫結策略開始使用", + "button": "建立繫結策略" + } + }, + "loadingCanvas": "正在載入畫布資料...", + "selection": { + "infoAlert": "This interface is using simulated responses to create binding policies. Select clusters and workloads from the lists to add them to the canvas, then click on a workload and then a cluster to create a binding policy connection.", + "helpDialog": { + "title": "Create Binding Policies with Direct Connections", + "intro": "Follow these steps to create binding policies:", + "steps": { + "selectClusters": "1. Select clusters from the left panel to include in the canvas", + "selectWorkloads": "2. Select workloads from the right panel to include in the canvas", + "createConnection": "3. Click on a workload first, then a cluster to create a direct connection", + "fillDetails": "4. Fill in the policy details in the dialog that appears", + "deploy": "5. Use the 'Deploy Binding Policies' button to simulate deployment" + }, + "gotIt": "Got it", + "helpDialog": { + "title": "How to Create Binding Policies", + "intro": "Follow these steps to create binding policies:", + "steps": { + "selectLabels": "1. Select labels to add to the canvas", + "selectLabelsDesc": "Click on clusters from the left panel and workloads from the right panel to add them to the binding policy canvas", + "deploy": "2. Deploy your policies", + "deployDesc": "Click 'Deploy Binding Policies' to create and deploy binding policies that connect workloads to clusters based on the selected labels" + }, + "tip": "Tip: The label-based approach allows you to create powerful binding policies that automatically apply to all resources matching the selected labels, both now and in the future.", + "dontShowAgain": "Don't Show Again", + "tooltip": "View selection instructions" + } + } + }, + "messages": { + "noSelectedPolicies": "未選擇要刪除的策略", + "invalidPolicyNames": "錯誤:一些選定的策略名稱無效", + "partialDeleteSuccess": "刪除了 {{success}} 個策略,但刪除 {{failures}} 個策略失敗", + "deleteError": "刪除繫結策略時出錯:{{errorMessage}}", + "updateSuccess": "繫結策略\"{{name}}\"更新成功", + "updateError": "更新繫結策略\"{{name}}\"時出錯", + "simulatedAssignment": "成功將 {{policy}} 分配給 {{targetType}} {{target}}", + "policyCreatedSuccess": "成功建立繫結策略:{{name}}" + }, + "editDialog": { + "title": "編輯繫結策略", + "infoTitle": "資訊", + "info": "編輯您的繫結策略配置。更改將在儲存後應用。", + "name": "繫結策略名稱", + "save": "儲存更改", + "unsavedTitle": "未儲存的更改", + "unsavedWarning": "警告", + "unsavedInfo": "您有未儲存的更改。確定要在不儲存的情況下關閉嗎?", + "continueEditing": "繼續編輯", + "discard": "丟棄更改" + }, + "deleteDialog": { + "title": "刪除繫結策略", + "confirm": "您確定要刪除繫結策略\"{{name}}\"嗎?此操作無法撤銷。" + }, + "header": { + "searchPlaceholder": "按名稱、標籤或狀態搜尋策略", + "clearSearch": "按 Esc 鍵清除搜尋", + "deleteSelected": "刪除選定項", + "create": "建立繫結策略", + "activeFilters": "活動篩選器:", + "search": "搜尋", + "status": "狀態", + "clearAll": "清除全部" + }, + "statusFilter": { + "all": "所有狀態", + "active": "活躍", + "pending": "待處理", + "inactive": "非活躍", + "label": "狀態篩選器" + }, + "availableItems": { + "title": "可用專案", + "subtitle": "透過點選選擇策略、叢集或工作負載並將其新增到畫布。", + "policy-list": "策略", + "cluster-list": "叢集", + "workload-list": "工作負載", + "clickToAdd": "點選專案將其新增到畫布", + "none": "沒有可用的 {{title}}" + }, + "canvas": { + "policiesOnCanvas": "畫布上的策略:", + "clusters": "{{count}} 個叢集", + "workloads": "{{count}} 個工作負載", + "status": "狀態:", + "namespace": "名稱空間:", + "namespaces": "名稱空間:", + "clustersOnCanvas": "畫布上的叢集:", + "workloadsOnCanvas": "畫布上的工作負載:", + "selectClusters": "在此選擇叢集", + "matches": "匹配:{{count}} 個 {{resourceType}}" + }, + "labels": { + "title": "標籤:", + "key": "鍵", + "value": "值", + "add": "新增" + }, + "creatingConnection": "正在建立連線:", + "previewDialog": { + "title": "策略預覽和洞察", + "visualizationTab": "視覺化", + "detailsTab": "詳情", + "matchingDetails": "匹配詳情", + "matchedClusters": "匹配的叢集 ({{count}})", + "clusterStatus": "{{name}} - {{status}}", + "labels": "標籤:{{labels}}", + "matchedWorkloads": "匹配的工作負載 ({{count}})", + "workloadNamespace": "{{name}} ({{namespace}})" + }, + "policyNameDialog": { + "title": "為您的繫結策略命名", + "policyName": "策略名稱", + "generateNew": "生成新名稱", + "placeholder": "輸入繫結策略名稱...", + "invalid": "名稱必須是小寫字母數字加連字元,最多 253 個字元", + "helper": "僅使用小寫字母、數字和連字元", + "namingTipsTitle": "💡 命名提示:", + "namingTips": "使用描述性名稱,如\"frontend-to-production\"或\"database-sync-policy\"以便更好地組織。", + "creating": "正在建立...", + "createPolicy": "建立策略" + }, + "configureDialog": { + "title": "配置繫結策略", + "creatingFor": "正在為以下項建立繫結策略:", + "creatingForDesc": "這將建立一個將 {{sourceType}} 連結到 {{targetType}} 的繫結策略。", + "tabs": { + "basic": "基本", + "advanced": "高階", + "scheduling": "排程", + "yaml": "YAML" + }, + "nameHelper": "繫結策略的名稱", + "namespaceHelper": "繫結策略的名稱空間", + "updateStrategyHelper": "選擇如何將資源更改應用到叢集。透過從面板中選擇來新增叢集和工作負載。", + "addCustomLabels": "新增自定義標籤", + "labelsTooltip": "標籤幫助識別和選擇資源", + "tolerationsTitle": "容忍度(高階)", + "tolerationExpression": "容忍度表示式", + "tolerationRequired": "容忍度是必需的", + "schedulingRules": "排程規則", + "schedulingTooltip": "定義叢集接收此工作負載必須滿足的條件", + "resource": "資源", + "resource.cpu": "CPU 核心數", + "resource.memory": "記憶體", + "resource.storage": "儲存", + "resource.pods": "可用 Pod 數", + "operator": "運算子", + "activeRules": "活動規則:", + "noSchedulingRules": "未新增排程規則。策略將應用於所有匹配的叢集,不考慮其資源。", + "yamlPreview": "YAML 預覽", + "yamlPreviewInfo": "這是將要應用的 YAML 預覽。您可以在其他標籤頁中進行更改以更新此預覽。" + } + }, + "workloads": { + "label": { + "title": "工作負載標籤 *", + "prefix": "kubestellar.io/workload:", + "helpTextError": "未找到標籤", + "helpText": "工作負載標籤是鍵值對。鍵是常量且預設為 'kubestellar.io/workload',您只能更改值。" + }, + "github": { + "repositoryUrlLabel": "倉庫 URL *", + "pathLabel": "路徑 *", + "branchLabel": "分支(預設:main)*", + "credentialsLabel": "憑據", + "credentialsTip": "為私有倉庫選擇或新增憑據", + "addCredentials": "新增憑據", + "webhooksLabel": "Webhook", + "webhooksTip": "為自動化部署選擇或新增 webhook", + "addWebhook": "新增 Webhook", + "previousDeploymentsTitle": "先前部署列表", + "loadingPreviousDeployments": "正在載入先前部署...", + "noPreviousDeployments": "沒有可用的先前部署。", + "confirmResourceDeletion": "確認資源刪除", + "deleteConfirmation": "您確定要刪除 \"{{name}}\" 嗎?此操作無法撤銷。", + "yesDelete": "是的,刪除", + "apply": "應用", + "deploying": "正在部署...", + "createFromYourGitHub": "從您的 GitHub 建立", + "deployFromPopularRepositories": "從熱門倉庫部署", + "listOfPreviousDeployments": "先前部署列表", + "repositoryUrl": "倉庫 URL *", + "repositoryUrlPlaceholder": "例如:https://github.com/username/repo", + "repositoryUrlTip": "使用有效的 GitHub 倉庫 URL", + "path": "路徑 *", + "pathPlaceholder": "例如:/path/to/yaml", + "pathTip": "指定倉庫中 YAML 檔案的路徑", + "branch": "分支(預設:main)*", + "branchPlaceholder": "例如:master、dev-branch", + "branchTip": "指定要部署的分支", + "credentials": "憑據", + "credentialsPlaceholder": "例如:username-pat", + "title": "從您的 GitHub 倉庫建立並部署!", + "tab": { + "importFromGitHub": "從 GitHub 匯入", + "selectRepositorySource": "選擇倉庫源以匯入您的應用程式", + "repositorySource": "倉庫源", + "selectRepository": "選擇倉庫", + "repositoryDetails": "倉庫詳情", + "selectedRepository": "已選擇的倉庫:" + }, + "options": { + "yourGitHub": { + "title": "您的 GitHub 倉庫", + "description": "從您自己的 GitHub 倉庫匯入" + }, + "enterprise": { + "title": "企業倉庫", + "description": "從 GitHub 企業倉庫匯入" + }, + "public": { + "title": "公共倉庫", + "description": "從任何公共 GitHub 倉庫匯入" + }, + "popular": { + "title": "熱門倉庫", + "description": "從我們精選的示例列表中選擇" + }, + "placeholder": { + "yourGitHub": "您的 GitHub 倉庫表單將顯示在此處", + "enterprise": "企業倉庫表單將顯示在此處", + "public": "公共倉庫表單將顯示在此處" + } + } + }, + "artifactHub": { + "searchPackages": "搜尋包", + "directDeploy": "從 Artifact Hub 部署 Helm Chart", + "listRepositories": "列出倉庫", + "form": { + "packageId": "包 ID *", + "packageIdTooltip": "格式:helm/repository-name/chart-name(例如:helm/bitnami/nginx)", + "packageIdPlaceholder": "helm/bitnami/nginx", + "packageIdTip": "指定 Helm chart 包 ID(例如:helm/bitnami/nginx)", + "version": "版本(預設:latest)", + "versionTooltip": "要部署的 chart 版本(例如:13.2.12)。如果未指定,將使用最新版本。", + "versionPlaceholder": "13.2.12(留空表示使用最新版本)", + "versionTip": "指定要部署的版本(留空表示使用最新版本)", + "releaseName": "釋出名稱 *", + "releaseNameTooltip": "用於標識您的 Helm 釋出的名稱", + "releaseNamePlaceholder": "my-nginx", + "releaseNameTip": "指定 Helm 釋出的名稱", + "namespace": "名稱空間", + "namespaceTooltip": "要部署到的 Kubernetes 名稱空間", + "namespacePlaceholder": "default", + "namespaceTip": "指定要部署到的名稱空間(預設為 'default')", + "customValues": "自定義值", + "customValuesTooltip": "格式:key=value,key2=value2(例如:service.type=LoadBalancer,service.port=80)", + "customValuesPlaceholder": "service.type=LoadBalancer,service.port=80", + "customValuesTip": "Helm chart 的自定義配置值(key=value 格式)" + }, + "validation": { + "selectPackage": "請先選擇一個包", + "enterWorkloadLabel": "請輸入工作負載標籤", + "enterPackageId": "請輸入包 ID。", + "enterReleaseName": "請輸入釋出名稱。" + }, + "buttons": { + "close": "關閉", + "apply": "應用" + }, + "searchPackagesForm": { + "searchHint": "開始輸入以在 Artifact Hub 上搜索 Helm 包", + "errorMessage": { + "enterSearchTerm": "請輸入搜尋詞", + "noPackagesFound": "未找到 '{{query}}' 的包", + "searchFailed": "搜尋失敗:{{message}}" + }, + "serviceConfig": { + "title": "服務配置", + "serviceType": "服務型別", + "servicePort": "服務埠" + }, + "packageDetails": { + "stars": "星標", + "repository": "倉庫:", + "verified": "已驗證", + "namespace": "名稱空間" + } + }, + "repositoriesList": { + "tip": "倉庫是 Helm chart 的來源,點選卡片檢視更多詳情", + "loading": "正在載入倉庫...", + "noRepositories": "沒有可用的倉庫", + "official": "官方", + "helm": "Helm", + "other": "其他", + "organization": "組織:", + "user": "使用者:", + "url": "URL:" + } + }, + "yaml": { + "createNamespaceAutomatically": "自動建立名稱空間", + "editor": "YAML 編輯器", + "deploy": "部署" + }, + "helm": { + "createOwn": "建立您自己的 Helm chart", + "popularCharts": "從熱門 Helm chart 部署", + "prevCharts": "Previously Deployed Helm Charts", + "form": { + "repositoryName": "倉庫名稱 *", + "repositoryNameTip": "指定 Helm 倉庫的名稱", + "repositoryNamePlaceholder": "例如:my-helm-repo", + "repositoryUrl": "倉庫 URL *", + "repositoryUrlTip": "使用有效的 Helm 倉庫 URL", + "repositoryUrlPlaceholder": "例如:https://charts.helm.sh/stable", + "chartName": "Chart 名稱 *", + "chartNameTip": "指定要部署的 Helm chart 名稱", + "chartNamePlaceholder": "例如:nginx", + "releaseName": "釋出名稱 *", + "releaseNameTip": "指定此 Helm 部署的釋出名稱", + "releaseNamePlaceholder": "例如:my-release", + "version": "版本(預設:latest)", + "versionTip": "指定要部署的 chart 版本", + "versionPlaceholder": "例如:1.2.3", + "namespace": "名稱空間 *", + "namespaceTip": "指定 Helm chart 的名稱空間", + "namespacePlaceholder": "例如:default、my-namespace", + "searchChartLabel": "搜尋 Helm Chart" + }, + "userCharts": { + "loading": "正在載入使用者 chart...", + "noCharts": "沒有可用的使用者建立的 chart。", + "delete": "刪除", + "confirmDeletion": "確認資源刪除", + "deleteConfirmation": "您確定要刪除 \"{{chartId}}\" 嗎?此操作無法撤銷。", + "deleteSuccess": "Chart {{chartId}} 刪除成功!", + "deleteError": "Chart {{chartId}} 刪除失敗!" + }, + "buttons": { + "cancel": "取消", + "deploying": "正在部署...", + "apply": "應用" + }, + "messages": { + "selectChart": "請選擇要部署的 Helm chart。", + "deploySuccess": "選擇的 {{chartName}} Helm chart 部署成功!", + "deployFailureReuse": "部署失敗:安裝 chart 失敗:無法重複使用仍在使用的名稱!", + "deployFailure": "熱門 Helm chart 部署失敗!" + } + }, + "list": { + "title": "工作負載", + "create": "建立工作負載", + "filter": "篩選工作負載", + "noWorkloads": "未找到工作負載", + "createFirst": "建立您的第一個工作負載以開始使用" + }, + "tabs": { + "yaml": "YAML", + "helm": "Helm", + "github": "GitHub", + "artifactHub": "Artifact Hub" + }, + "createOptions": { + "title": "建立工作負載", + "subtitle": "建立工作負載", + "yaml": { + "createNamespaceAutomatically": "自動建立名稱空間", + "deploy": "部署", + "cancel": "取消" + }, + "file": { + "title": "從檔案", + "dragDrop": "拖放您的 YAML 或 JSON 檔案到此處", + "browse": "瀏覽", + "selectFile": "選擇 YAML 或 JSON 檔案", + "fileSelected": "檔案已選擇", + "fileSize": "檔案大小", + "deploy": "部署", + "cancel": "取消", + "noFileSelected": "未選擇檔案。", + "invalidFile": "請上傳有效的 YAML 或 JSON 檔案。" + }, + "github": { + "title": "GitHub", + "workloadLabel": "工作負載標籤", + "workloadLabelPlaceholder": "為標籤 'kubestellar.io/workload' 輸入值", + "repositoryUrl": "倉庫 URL", + "repositoryUrlPlaceholder": "例如:https://github.com/username/repo", + "path": "路徑", + "pathPlaceholder": "例如:/path/to/yaml", + "branch": "分支(預設:main)", + "branchPlaceholder": "例如:master、dev-branch", + "credentials": "憑據", + "webhook": "Webhook", + "addCredentials": "新增憑據", + "addWebhook": "新增 Webhook", + "deploy": "部署", + "cancel": "取消" + }, + "helm": { + "title": "Helm", + "repoName": "倉庫名稱", + "repoNamePlaceholder": "例如:bitnami", + "repoUrl": "倉庫 URL", + "repoUrlPlaceholder": "例如:https://charts.bitnami.com/bitnami", + "chartName": "Chart 名稱", + "chartNamePlaceholder": "例如:nginx", + "releaseName": "釋出名稱", + "releaseNamePlaceholder": "例如:my-release", + "version": "版本(留空表示使用最新版本)", + "versionPlaceholder": "例如:1.0.0", + "namespace": "名稱空間", + "namespacePlaceholder": "例如:default", + "workloadLabel": "工作負載標籤", + "workloadLabelPlaceholder": "為標籤 'kubestellar.io/workload' 輸入值", + "deploy": "部署", + "cancel": "取消", + "userCharts": { + "title": "使用者建立的 Chart 列表", + "deleteSuccess": "Chart {{chartId}} 刪除成功!", + "deleteError": "Chart {{chartId}} 刪除失敗!", + "loading": "正在載入使用者 chart...", + "noCharts": "沒有可用的使用者建立的 chart。", + "delete": "刪除", + "confirmDeletion": "確認資源刪除", + "deleteConfirmation": "您確定要刪除 \"{{chartId}}\" 嗎?此操作無法撤銷。" + } + }, + "artifactHub": { + "title": "Artifact Hub", + "searchPlaceholder": "搜尋 Helm chart...", + "selectPackage": "請選擇一個包。", + "enterReleaseName": "請輸入釋出名稱。" + }, + "credentials": { + "title": "新增憑據", + "username": "GitHub 使用者名稱", + "usernamePlaceholder": "輸入您的 GitHub 使用者名稱", + "token": "個人訪問令牌", + "tokenPlaceholder": "輸入您的 GitHub 個人訪問令牌", + "add": "新增", + "cancel": "取消", + "fillBoth": "請填寫 GitHub 使用者名稱和個人訪問令牌。" + }, + "webhook": { + "title": "新增 Webhook", + "url": "Webhook URL", + "urlPlaceholder": "輸入 webhook URL", + "token": "個人訪問令牌", + "tokenPlaceholder": "輸入 webhook 的個人訪問令牌", + "add": "新增", + "cancel": "取消", + "fillBoth": "請填寫 Webhook URL 和個人訪問令牌。" + }, + "cancelConfirmation": { + "title": "丟棄更改?", + "message": "您有未儲存的更改。您確定要取消嗎?", + "confirm": "是的,丟棄", + "cancel": "不,繼續編輯" + }, + "notifications": { + "workloadDeploySuccess": "工作負載部署成功!", + "deploymentSuccess": "部署成功!", + "helmDeploySuccess": "Helm chart 部署成功!", + "artifactHubDeploySuccess": "Artifact Hub 部署成功!", + "credentialAddedSuccess": "憑據新增成功!", + "webhookAddedSuccess": "Webhook 新增成功!", + "deploymentConflict": "衝突錯誤:部署已在進行中!", + "workloadAlreadyExists": "在名稱空間 {{namespace}} 中建立 {{kind}} {{name}} 失敗,工作負載已存在或名稱空間 {{namespace}} 未找到", + "unknownWorkloadExists": "建立未知 {{name}} 工作負載失敗,已存在", + "helmDeployFailed": "部署失敗:安裝 chart 失敗:無法重複使用仍在使用的名稱!", + "gitRepoError": "克隆倉庫失敗,請填寫正確的 URL 和路徑!", + "enterWorkloadLabel": "請輸入工作負載標籤。", + "invalidWorkloadLabel": "您只能輸入值,鍵是常量且預設為 'kubestellar.io/workload'。", + "enterGitRepo": "請輸入 Git 倉庫。", + "enterPath": "請輸入路徑。", + "enterRepoName": "請輸入倉庫名稱。", + "enterRepoUrl": "請輸入倉庫 URL。", + "enterChartName": "請輸入 chart 名稱。", + "enterReleaseName": "請輸入釋出名稱。", + "enterNamespace": "請輸入名稱空間。", + "enterYamlJson": "請輸入 YAML 或 JSON 內容。", + "needMetadataName": "至少一個文件必須具有 'metadata.name'" + } + } + }, + "visualization": { + "policyDistribution": "{{count}} 個連線", + "clusters": { + "edge": "邊緣叢集", + "aiInference": "AI 推理叢集", + "aiTraining": "AI 訓練叢集", + "service": "服務叢集", + "compute": "計算叢集", + "descriptions": { + "edge": "用於低延遲處理的邊緣計算資源", + "aiInference": "即時 AI 模型推理和預測服務", + "aiTraining": "用於 AI 模型訓練的高效能計算", + "service": "核心微服務和 API 端點", + "compute": "通用計算資源" + } + }, + "title": "視覺化", + "controls": "檢視控制", + "zoom": "縮放", + "searchResources": "搜尋資源" + }, + "namespaces": { + "default": "預設", + "create": "建立名稱空間", + "select": "選擇名稱空間" + }, + "errors": { + "policyNameRequired": "策略名稱是必需的", + "policyNotFound": "未找到策略 {{name}}", + "parseError": "無法解析繫結策略響應", + "unexpectedFormat": "API 響應格式異常", + "error": "錯誤", + "required": "此欄位是必需的", + "invalidFormat": "格式無效", + "connectionFailed": "連線失敗", + "forbidden": "您沒有許可權訪問此資源", + "serverError": "伺服器錯誤", + "notFound": "未找到資源", + "timeout": "請求超時", + "unknown": "發生未知錯誤", + "contextNameRequired": "上下文名稱是必需的", + "versionRequired": "KubeStellar 版本是必需的", + "operationTimeout": "操作超時。程序可能仍在後臺執行。", + "failedToCreateContext": "建立上下文失敗", + "creatingContext": "建立上下文時出錯:", + "websocketConnectionFailed": "無法連線到伺服器。請檢查您的網路連線並重試。", + "websocketClosedUnexpectedly": "WebSocket 連線意外關閉", + "fetchingContexts": "獲取上下文時出錯:" + }, + "contexts": { + "filterByContext": "按上下文篩選", + "allContexts": "所有上下文", + "showingAllContexts": "顯示來自所有上下文的資源", + "filteringByContext": "篩選以僅顯示 {{context}} 上下文", + "createdSuccessfully": "上下文建立成功!", + "websocketClosed": "WebSocket 連線已關閉:", + "contextCreatedSuccess": "上下文\"{{contextName}}\"建立成功!", + "createNewContext": "建立新上下文", + "contextName": "上下文名稱", + "kubestellarVersion": "KubeStellar 版本", + "creating": "正在建立...", + "createContext": "建立上下文" + }, + "policySelectionStore": { + "labelsAssigned": "Labels automatically assigned to {{itemType}} {{itemId}}", + "policyAssigned": "Successfully assigned {{policyName}} to {{targetType}} {{targetName}}", + "clusterAlreadyAssigned": "Cluster {{targetName}} is already assigned to policy {{policyName}}", + "workloadAlreadyAssigned": "Workload {{targetName}} is already assigned to policy {{policyName}}" + }, + "auth": { + "login": { + "success": "登入成功", + "error": "登入錯誤:", + "successWithUser": "使用者 {{username}} 登入成功。正在重定向到 {{path}}", + "invalidCredentials": "無效憑據", + "authFailed": "身份驗證失敗。請檢查您的憑據。", + "noToken": "未從伺服器接收到令牌", + "invalidRequest": "Invalid request. Please check your input and try again.", + "serverError": "Server error. Please try again later." + } + }, + "kubestellarData": { + "logging": { + "clustersApiResponse": "叢集 API 響應:", + "processedClusters": "已處理的叢集:", + "errorFetchingClusters": "獲取叢集時出錯:", + "processedWorkloads": "已處理的工作負載:", + "errorFetchingWorkloads": "獲取工作負載時出錯:", + "errorFetchingPolicies": "獲取策略時出錯:", + "assigningPolicy": "正在將策略 {{policyName}} 分配給 {{targetType}} {{targetName}}" + }, + "errors": { + "failedFetchClusters": "獲取叢集失敗", + "failedFetchWorkloads": "獲取工作負載失敗", + "failedFetchPolicies": "獲取策略失敗", + "errorAssigningPolicy": "分配策略時出錯:", + "failedToAssign": "將 {{policyName}} 分配給 {{targetType}} {{targetName}} 失敗" + }, + "success": { + "successfullyAssigned": "成功將 {{policyName}} 分配給 {{targetType}} {{targetName}}" + }, + "defaults": { + "unknown": "未知", + "ready": "就緒", + "deployment": "部署", + "defaultNamespace": "預設", + "active": "活躍", + "alwaysMatch": "始終匹配" + } + }, "profileSection": { + "logoutMessage": "You have been successfully logged out.", + "account": "Account", + "admin": "Admin", + "helpSupport": "Help & Support", + "raiseIssue": "Report an Issue", + "signOut": "Sign Out", "changePassword": "修改密碼", - "changePasswordSubtitle": "請輸入您目前的密碼並選擇一個新密碼。", - "currentPassword": "目前的密碼", + "changePasswordSubtitle": "請輸入您當前的密碼並選擇一個新密碼。", + "currentPassword": "當前密碼", "newPassword": "新密碼", "confirmNewPassword": "確認新密碼", "passwordChangedSuccess": "密碼修改成功。", - "passwordChangedError": "密碼修改失敗。", - "passwordsDoNotMatch": "新密碼不相符。", - "passwordRequired": "密碼為必填項。", - "errorCurrentPasswordIncorrect": "目前的密碼不正確", + "passwordChangedError": "修改密碼失敗。", + "passwordsDoNotMatch": "新密碼不匹配。", + "passwordRequired": "密碼是必填項。", + "errorCurrentPasswordIncorrect": "當前密碼不正確", "cancel": "取消", "changePasswordButton": "修改密碼", - "passwordsMatch": "密碼相符!" + "passwordsMatch": "密碼匹配!" + }, + "onboardingLogs": { + "onboarding": "入駐", + "complete": "完成", + "connecting": "正在連線到日誌流...", + "errors": { + "websocketFailed": "WebSocket 連線失敗。請重試。", + "connectionFailed": "連線到日誌流失敗。請重試。" + }, + "status": { + "processing": "處理中", + "verifying": "驗證中", + "available": "可用", + "completed": "已完成", + "error": "錯誤" + } + }, + "newAppDialog": { + "title": "建立新應用", + "githubUrl": "GitHub URL", + "path": "路徑", + "deploy": "部署" + }, + "navbar": { + "generateLog": "生成日誌", + "toggleTheme": "切換主題", + "brandName": "KubestellarUI", + "its": "ITS", + "wds": "WDS", + "logFilename": "kubestellarui.log", + "generateLogError": "生成日誌失敗。請重試。" + }, + "manualImportTab": { + "loadingClusters": "正在載入可用叢集...", + "errorLoadingClusters": "載入叢集時出錯", + "title": "手動叢集設定", + "recommended": "推薦", + "description": "這是連線您的 Kubernetes 叢集最簡單的方式。選擇一個叢集並點選入駐叢集按鈕,即可直接將其連線到您的平臺,無需任何手動命令。", + "selectCluster": "選擇要連線的叢集", + "chooseCluster": "選擇叢集...", + "noClusters": "沒有可用的叢集", + "discoveredClusters": "這些是在您的環境中發現的叢集。選擇一個以繼續。", + "refreshClustersList": "重新整理叢集列表", + "howToConnect": "如何連線您的叢集", + "steps": { + "selectCluster": "從上面的下拉列表中選擇一個叢集", + "clickOnboard": "點選\"入駐叢集\"按鈕直接連線您的叢集", + "autoOnboard": "您的叢集將自動入駐,無需手動命令" + }, + "connectionError": "連線錯誤", + "installationGuide": "安裝指南:", + "installCommand": "要安裝 clusteradm,請執行:", + "commandCopied": "安裝命令已複製!", + "onboarding": "正在入駐...", + "onboardCluster": "入駐叢集", + "clusterAddedSuccess": "叢集已新增到平臺", + "clusterOnboardedSuccess": "您的叢集 {{clusterName}} 已成功入駐。您現在可以:", + "nextSteps": { + "viewManage": "在儀表盤中檢視和管理叢集", + "deployApps": "將應用程式和服務部署到叢集", + "configureSettings": "配置和管理叢集設定" + }, + "viewDashboard": "在儀表盤中檢視叢集", + "goToDashboard": "前往儀表盤" + }, + "logModal": { + "connectedToStream": "已連線到日誌流...", + "connectionClosed": "日誌完整。連線已關閉。", + "retryConnection": "連線已關閉。請重試。", + "logs": "日誌", + "loadingLogs": "正在載入日誌..." + }, + "loadingFallback": { + "loadingContent": "正在載入內容..." + }, + "listView": { + "connecting": "正在連線到伺服器...", + "receivingWorkloads": "正在接收工作負載...", + "receivedWorkloadsSoFar": "目前已接收 {{count}} 個工作負載...", + "allWorkloadsReceived": "已接收所有 {{count}} 個工作負載", + "connectionLost": "連線丟失。顯示已接收的 {{count}} 個工作負載。", + "connectionError": "與伺服器的連線丟失或失敗。正在嘗試備用方法...", + "fetchingFallback": "正在獲取資源(備用方法)...", + "invalidResponseFormat": "伺服器響應格式無效", + "unknownError": "獲取資源時發生未知錯誤。", + "errorLoading": "載入資源時出錯", + "namespace": "名稱空間", + "created": "已建立", + "downloadLogs": "下載日誌", + "pagination": { + "showing": "顯示第 {{from}} 到 {{to}} 項,共 {{total}} 項", + "filtered": "(按 {{context}} 上下文篩選)", + "prev": "上一頁", + "next": "下一頁" + }, + "resourceStats": "檢測到 {{raw}} 個原始資源,已處理 {{processed}} 個", + "filteredByContext": "按上下文篩選:{{context}}", + "showingResourceCount": "顯示 {{total}} 個總資源中的 {{showing}} 個", + "noWorkloads": { + "title": "未找到工作負載", + "noResourcesForContext": "未找到 {{context}} 上下文的資源", + "resourcesFilteredOut": "資源可用但已被篩選掉", + "getStarted": "建立您的第一個工作負載以開始使用", + "resourcesAvailable": "共有 {{count}} 個資源可用,但沒有匹配當前篩選器", + "noMatchingFilters": "No resources match the current filters" + }, + "troubleshooting": { + "title": "嘗試以下故障排除步驟:", + "step1": "1. 檢查後端伺服器是否在 http://localhost:4000 執行", + "step2": "2. 驗證伺服器的 CORS 配置是否允許來自 http://localhost:5173 的請求", + "step3": "3. 如果伺服器使用萬用字元 (*) CORS,則無法接受帶有憑據的請求", + "step4": "4. 檢查瀏覽器控制檯的詳細錯誤訊息" + } + }, + "kubeconfigImport": { + "title": "上傳 Kubeconfig 檔案", + "description": "透過上傳 kubeconfig 檔案匯入您的叢集", + "dragAndDrop": "將您的 kubeconfig 檔案拖放到這裡", + "or": "- 或 -", + "browseFiles": "瀏覽檔案", + "importCluster": "匯入叢集" + }, + "importClusters": { + "title": "匯入叢集", + "description": "將您的 Kubernetes 叢集連線到平臺", + "tabs": { + "quickConnect": "快速連線", + "kubeconfig": "Kubeconfig", + "apiUrl": "API/URL" + }, + "abortDialog": { + "title": "中止入駐流程", + "warning": "您確定要中止入駐嗎?所有進度將丟失。", + "continue": "繼續入駐", + "confirm": "是的,中止" + }, + "fileUpload": { + "selected": "已選擇檔案\"{{filename}}\"。上傳功能待實現。" + }, + "icons": { + "quickConnect": "快速連線", + "kubeconfig": "kubeconfig", + "apiUrl": "api url", + "ariaLabel": "匯入" + } + }, + "groupPanel": { + "close": "關閉面板", + "tableAriaLabel": "組專案表格", + "table": { + "name": "名稱", + "groupKind": "組/型別", + "syncOrder": "同步順序", + "namespace": "名稱空間", + "createdAt": "建立時間" + }, + "notAvailable": "不可用" + }, + "downloadLogsModal": { + "title": "下載日誌", + "fileSize": "檔案大小", + "download": "下載" + }, + "footer": { + "commit": "提交", + "viewCommit": "在 GitHub 上檢視提交詳情" + }, + "downloadLogsButton": { + "title": "下載日誌", + "placeholder": { + "header": "叢集 {{cluster}} 上名稱空間 {{namespace}} 中 Pod {{podName}} 的日誌", + "generated": "生成時間:{{date}}", + "noContent": "日誌內容不可直接獲取。請使用流式日誌功能。" + }, + "toast": { + "success": "已下載 {{podName}} 的日誌", + "error": "下載日誌失敗" + } + }, + "detachmentLogsDialog": { + "title": "正在分離叢集:{{clusterName}}", + "logs": "分離日誌", + "connected": "已連線", + "disconnected": "已斷開連線", + "connecting": "正在連線到分離服務...", + "completedSuccessfully": "叢集分離已成功完成。", + "done": "完成" + }, + "addWebhookDialog": { + "copiedToClipboard": "已複製到剪貼簿!", + "setupWebhook": "設定 Webhook", + "localDevSmee": "使用 Smee.io 進行本地開發", + "installSmee": "安裝 Smee 客戶端 (npm install -g smee-client)。", + "goToSmee": "訪問 Smee.io 並建立新通道。", + "copySmeeUrl": "複製生成的 Smee.io URL。", + "runSmeeClient": "執行 Smee 客戶端將 webhook 轉發到您的本地 Go 後端:", + "smeeCommand": "smee --url smee-url --target {{baseUrl}}/api/webhook", + "smeeCommandCopy": "smee --url --target {{baseUrl}}/api/webhook", + "configureWebhookSmee": "使用 Smee.io URL 在您的外部服務中配置 webhook。", + "startGoBackend": "啟動您的 Go 後端並確保它在 /api/webhook 處監聽。", + "testWebhook": "測試 webhook。", + "vmIp4000": "在虛擬機器 (VM) 上使用 IP:4000 配置 Webhook", + "ensureGoBackend4000": "確保您的 Go 後端在埠 4000 上執行並處理 /api/webhook。", + "openPort4000": "在您的防火牆/安全組中開放埠 4000 (UFW、AWS、GCP 或 Azure)。", + "findPublicIp": "查詢您的公網 IP (curl ifconfig.me) 並新增。", + "configureWebhookVm": "使用以下地址在您的外部服務中配置 webhook:", + "vmWebhookUrl": "http://your-public-ip:4000/api/webhook", + "vmWebhookUrlCopy": "http://:4000/api/webhook", + "testWebhookOtherMachine": "從另一臺機器測試 webhook。", + "keepGoServerRunning": "保持您的 Go 伺服器在後臺執行 (nohup 或 systemd)。" + }, + "cancelConfirmationDialog": { + "title": "取消工作負載建立", + "titlePolicy": "取消策略建立", + "warning": "警告", + "message": "您確定要取消嗎?所有更改將丟失。", + "continueEditing": "繼續編輯", + "yesCancel": "是的,取消" + }, + "addCredentialsDialog": { + "title": "新增憑據", + "usernameLabel": "Github 使用者名稱 *", + "usernamePlaceholder": "例如:onkar717", + "usernameTip": "輸入您的 GitHub 使用者名稱", + "tokenLabel": "個人訪問令牌 (PAT) *", + "tokenPlaceholder": "例如:ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "tokenTip": "輸入您的 GitHub 個人訪問令牌" }, "commandPalette": { - "ariaLabel": "打開命令面板", + "ariaLabel": "開啟命令面板", "title": "命令面板(Ctrl+K)", "badge": "K", "searchPlaceholder": "搜尋命令...", @@ -31,154 +2086,731 @@ "arrows": "↑↓", "enter": "↵" }, - "sections": { - "navigation": "導航", - "visualizations": "可視化", - "help": "幫助", - "account": "帳戶", - "admin": "管理" - }, "commands": { "home": { "title": "首頁", - "description": "前往儀表板" + "description": "前往儀表盤" }, "plugin": { - "title": "插件管理器", - "description": "管理和監控 KubeStellar 插件" + "title": "外掛管理器", + "description": "管理和監控 KubeStellar 外掛" }, "managedClusters": { "title": "管理叢集", - "description": "管理 Kubernetes 叢集" + "description": "管理Kubernetes叢集" + }, + "Grafana": { + "title": "Grafana Dashboard", + "description": "Grafana Dashboard" }, "workloads": { "title": "工作負載", "description": "跨叢集管理工作負載" }, + "resourceExplorer": { + "title": "Object Explorer", + "description": "Search and filter Kubernetes objects" + }, "bindingPolicies": { - "title": "綁定策略", - "description": "配置綁定策略" + "title": "繫結策略", + "description": "配置繫結策略" }, "userManagement": { "title": "使用者管理", - "description": "管理系統使用者與權限" + "description": "管理系統使用者和許可權" }, "wdsTreeview": { - "title": "WDS 樹狀圖", - "description": "可視化工作負載分布" + "title": "WDS 樹檢視", + "description": "視覺化工作負載分佈" }, "wecsTreeview": { - "title": "WECS 樹狀圖", - "description": "可視化已部署工作負載結構" + "title": "WECS 樹檢視", + "description": "視覺化已部署工作負載結構" }, "documentation": { - "title": "打開文件", + "title": "開啟文件", "description": "啟動 KubeStellar 文件" }, "logout": { - "title": "登出", - "description": "登出您的帳戶", - "infoMessage": "您已成功登出。" + "title": "退出登入", + "description": "退出您的賬戶", + "infoMessage": "您已成功退出登入。" + }, + "metricsDashboard": { + "title": "Metrics Dashboard", + "description": "Monitor system performance and metrics" }, "galaxyMarketplace": { "title": "銀河市場", - "description": "在銀河市場中探索並安裝插件" - } - } - }, - "admin": { - "users": { - "title": "用戶管理", - "subtitle": "系統用戶", - "noUsers": "未找到用戶", - "noUsersDescription": "系統中還沒有用戶。點擊\"添加用戶\"創建您的第一個用戶。", - "noPermissions": "未分配權限", - "actions": { - "addUser": "添加用戶", - "editUser": "編輯用戶", - "add": "添加用戶", - "update": "更新用戶", - "delete": "刪除用戶", - "edit": "編輯", - "deleteUser": "刪除用戶" - }, - "table": { - "username": "用戶名", - "role": "角色", - "permissions": "權限", - "actions": "操作" - }, - "roles": { - "admin": "管理員", - "user": "用戶" - }, - "permissions": { - "users": "用戶", - "resources": "資源", - "system": "系統", - "dashboard": "儀表板", - "levels": { - "read": "讀取", - "write": "寫入", - "none": "無" - } - }, - "form": { - "username": "用戶名", - "usernamePlaceholder": "輸入用戶名", - "password": "密碼", - "passwordPlaceholder": "輸入密碼", - "passwordOptional": "密碼(可選)", - "passwordOptionalPlaceholder": "輸入新密碼或留空", - "confirmPassword": "確認密碼", - "confirmPasswordPlaceholder": "確認密碼", - "isAdmin": "管理員訪問權限", - "permissions": "組件權限", - "cancel": "取消", - "optional": "可選" - }, - "delete": { - "title": "刪除用戶", - "confirmTitle": "確認刪除", - "confirmMessage": "您確定要刪除用戶\"{{username}}\"嗎?此操作無法撤消。", - "confirm": "刪除用戶" - }, - "errors": { - "fetchFailed": "獲取用戶失敗", - "missingFields": "請填寫所有必填欄位", - "passwordMismatch": "密碼不匹配", - "addFailed": "添加用戶失敗", - "updateFailed": "更新用戶失敗", - "deleteFailed": "刪除用戶失敗", - "invalidUsername": "用戶名只能包含字母、數字、底線和連字符" - }, - "success": { - "userAdded": "用戶添加成功", - "userUpdated": "用戶更新成功", - "userDeleted": "用戶刪除成功" + "description": "在銀河市場中發現並安裝外掛" } + }, + "sections": { + "navigation": "導航", + "admin": "管理", + "visualizations": "視覺化", + "help": "幫助", + "account": "賬戶" } }, "menu": { "catalogs": { "main": "主要", "management": "管理", - "plugins": "插件", + "plugins": "外掛", "admin": "管理" }, "items": { "home": "首頁", "managedClusters": "管理叢集", + "Grafana": "Grafana Dashboard", "stagedWorkloads": "已暫存工作負載", - "bindingPolicies": "綁定策略", + "bindingPolicies": "繫結策略", "deployedWorkloads": "已部署工作負載", - "pluginManager": "插件管理器", - "userManagement": "用戶管理", + "resourceExplorer": "Object Explorer", + "pluginManager": "外掛管理器", + "userManagement": "使用者管理", + "metricsDashboard": "Metrics Dashboard", "galaxyMarketplace": "銀河市場" } }, + "plugins": { + "title": "Plugin Manager", + "description": "Manage and monitor KubeStellar plugins", + "install": { + "title": "Install New Plugin", + "methods": { + "local": "Local Path", + "github": "GitHub" + }, + "localPlaceholder": "Please select a file", + "githubPlaceholder": "https://github.com/user/plugin-repo", + "browse": "Browse", + "installLocal": "Install from Local Path", + "installGithub": "Install from GitHub", + "localHelp": "Install a plugin from a local directory on your system. Click Browse to select a folder or manually enter the full path.", + "githubHelp": "GitHub installation is not yet implemented. Use local path installation for now.", + "placeholder": "Plugin URL, GitHub repository, or local path", + "button": "Install", + "installing": "Installing...", + "success": "Plugin installed successfully", + "error": "Failed to install plugin" + }, + "list": { + "title": "Installed Plugins", + "noPlugins": "No plugins installed", + "noPluginsDescription": "Get started by installing your first plugin", + "searchPlaceholder": "Search plugins by name, author, or status...", + "total": "Total", + "active": "Active", + "inactive": "Inactive" + }, + "card": { + "version": "v{{version}}", + "author": "by {{author}}", + "status": { + "active": "Active", + "inactive": "Inactive", + "loading": "Loading", + "error": "Error" + }, + "actions": { + "enable": "Enable", + "disable": "Disable", + "details": "Details", + "uninstall": "Uninstall", + "reload": "Reload", + "settings": "Settings", + "feedback": "Feedback" + } + }, + "details": { + "title": "Plugin Details", + "information": "Information", + "configuration": "Configuration", + "routes": "API Routes", + "widgets": "Widgets", + "assets": "Assets", + "noRoutes": "No API routes defined", + "noWidgets": "No widgets available", + "noAssets": "No assets loaded" + }, + "notifications": { + "enableSuccess": "Plugin {{name}} enabled successfully", + "enableError": "Failed to enable plugin {{name}}", + "disableSuccess": "Plugin {{name}} disabled successfully", + "disableError": "Failed to disable plugin {{name}}", + "uninstallSuccess": "Plugin {{name}} uninstalled successfully", + "uninstallError": "Failed to uninstall plugin {{name}}", + "reloadSuccess": "Plugin {{name}} reloaded successfully", + "reloadError": "Failed to reload plugin {{name}}", + "fetchError": "Failed to load plugin data" + }, + "confirmations": { + "uninstall": { + "title": "Confirm Plugin Uninstallation", + "message": "Are you sure you want to uninstall \"{{name}}\"? This action cannot be undone and will remove all plugin data.", + "confirm": "Yes, Uninstall" + }, + "disable": { + "title": "Confirm Plugin Disable", + "message": "Disabling \"{{name}}\" will stop all plugin functionality. You can re-enable it later.", + "confirm": "Yes, Disable" + }, + "enable": { + "title": "Confirm Plugin Enable", + "message": "Enabling \"{{name}}\" will activate all plugin functionality and make it available for use.", + "confirm": "Yes, Enable" + } + }, + "marketplace": { + "title": "KubeStellar Galaxy Marketplace", + "subtitle": "Discover and install plugins to enhance your KubeStellar experience", + "browse": "Browse Available Plugins", + "featured": "Featured Plugins", + "categories": "Categories", + "search": "Search marketplace..." + }, + "development": { + "title": "Plugin Development", + "createNew": "Create New Plugin", + "template": "Use Template", + "documentation": "View Documentation", + "examples": "Examples" + }, + "feedback": { + "title": "Share Your Feedback", + "rate": "Rate this plugin", + "comment": { + "title": "Your Comment", + "placeholder": "Tell us about your experience" + }, + "suggestion": { + "title": "Suggestions for Improvement", + "placeholder": "Any suggestions for Improvements ?" + } + } + }, "marketplace": { - "title": "KubeStellar Galaxy 市集", - "description": "探索並安裝插件以提升您的 KubeStellar 體驗" + "title": "KubeStellar Galaxy 市場", + "subtitle": "發現並安裝插件以增強您的 KubeStellar 體驗", + "searchPlaceholder": "搜索插件、作者、類別...", + "filters": "篩選", + "sortPopular": "最受歡迎", + "sortRating": "最高評分", + "sortNewest": "最近添加", + "searchResults": "搜索結果", + "allPlugins": "所有插件", + "clearFilters": "清除篩選", + "loadMore": "加載更多插件", + "adminPanel": "管理面板", + "categories": { + "all": "所有插件", + "management": "管理", + "monitoring": "監控", + "security": "安全", + "networking": "網絡", + "storage": "儲存", + "database": "數據庫", + "ai": "人工智能與機器學習", + "devops": "DevOps", + "automation": "自動化", + "integration": "集成", + "analytics": "分析", + "backup": "備份與恢復", + "compliance": "合規", + "testing": "測試", + "development": "開發工具" + }, + "plugin": { + "status": { + "active": "活躍", + "inactive": "非活躍", + "loading": "加載中", + "error": "錯誤", + "installed": "已安裝", + "notInstalled": "未安裝" + }, + "actions": { + "install": "安裝", + "uninstall": "解除安裝", + "enable": "啟用", + "disable": "禁用", + "update": "更新", + "viewDetails": "查看詳情", + "download": "下載", + "rate": "評分", + "review": "評價", + "share": "分享", + "report": "報告問題" + }, + "details": { + "overview": "概覽", + "details": "詳情", + "feedback": "反饋", + "documentation": "文檔", + "dependencies": "依賴項", + "reviews": "評價", + "changelog": "變更日誌", + "license": "許可證", + "author": "作者", + "version": "版本", + "lastUpdated": "最後更新", + "createdAt": "創建於", + "downloads": "下載", + "rating": "評分", + "category": "類別", + "tags": "標籤", + "size": "大小", + "compatibility": "兼容性", + "requirements": "要求", + "installation": "安裝", + "configuration": "配置", + "usage": "使用", + "troubleshooting": "故障排除" + }, + "feedback": { + "title": "插件反饋", + "rating": "評分", + "comment": "評論", + "submit": "提交反饋", + "submitting": "提交中...", + "success": "反饋提交成功", + "error": "提交反饋失敗", + "placeholder": "告訴我們您對此插件的體驗...", + "ratingRequired": "請提供評分", + "commentRequired": "請提供評論" + }, + "installation": { + "title": "安裝", + "installing": "安裝中...", + "success": "插件安裝成功", + "error": "安裝插件失敗", + "confirm": "您確定要安裝此插件嗎?", + "requirements": "要求", + "dependencies": "依賴項", + "steps": "安裝步驟", + "verification": "驗證" + } + }, + "featured": { + "title": "精選插件", + "subtitle": "為最佳體驗精選的插件", + "viewAll": "查看所有精選", + "noFeatured": "沒有可用的精選插件", + "loading": "正在加載精選插件..." + }, + "admin": { + "title": "市場管理", + "overview": "概覽", + "plugins": "插件", + "users": "使用者", + "settings": "設置", + "stats": { + "totalPlugins": "插件總數", + "pendingReviews": "待審核評價", + "totalDownloads": "總下載量", + "activeUsers": "活躍使用者" + }, + "actions": { + "uploadPlugin": "上傳插件", + "deletePlugin": "刪除插件", + "approvePlugin": "批准插件", + "rejectPlugin": "拒絕插件", + "featurePlugin": "精選插件", + "unfeaturePlugin": "取消精選插件" + }, + "upload": { + "title": "上傳新插件", + "selectFile": "選擇插件文件", + "dragDrop": "拖放插件文件到此處", + "supportedFormats": "支持的格式:.tar.gz, .zip", + "maxSize": "最大文件大小:100MB", + "uploading": "上傳中...", + "success": "插件上傳成功", + "error": "上傳插件失敗" + }, + "delete": { + "title": "刪除插件", + "confirm": "您確定要刪除 \"{{name}}\" 嗎?此操作無法撤銷。", + "deleting": "刪除中...", + "success": "插件刪除成功", + "error": "刪除插件失敗" + }, + "quickActions": "快速操作", + "uploadNewPlugin": "上傳新插件", + "reviewPlugins": "審核插件", + "searchPlugins": "搜索插件...", + "allStatus": "所有狀態", + "active": "活躍", + "inactive": "非活躍", + "loadingPlugins": "正在加載插件...", + "noPluginsFound": "未找到插件。", + "userManagement": "使用者管理", + "userManagementComingSoon": "使用者管理功能即將推出。", + "adminSettings": "管理設置", + "settingsComingSoon": "設置面板即將推出。", + "marketplaceManagement": "市場管理", + "adminPanel": "管理面板" + }, + "search": { + "noResults": "未找到插件", + "noResultsDescription": "嘗試調整您的搜索詞或瀏覽所有插件", + "clearSearch": "清除搜索", + "searching": "搜索中...", + "resultsCount": "找到 {{count}} 個插件{{count, plural, one {} other {}}} " + }, + "errors": { + "failedToLoad": "加載市場數據失敗", + "failedToInstall": "安裝插件失敗", + "failedToUninstall": "解除安裝插件失敗", + "failedToEnable": "啟用插件失敗", + "failedToDisable": "禁用插件失敗", + "failedToSubmitFeedback": "提交反饋失敗", + "pluginNotFound": "未找到插件", + "installationFailed": "安裝失敗", + "networkError": "網絡錯誤", + "serverError": "伺服器錯誤" + }, + "success": { + "pluginInstalled": "插件安裝成功", + "pluginUninstalled": "插件解除安裝成功", + "pluginEnabled": "插件啟用成功", + "pluginDisabled": "插件禁用成功", + "feedbackSubmitted": "反饋提交成功", + "pluginUpdated": "插件更新成功" + }, + "loading": { + "loadingPlugins": "正在加載精彩插件...", + "discoveringGalaxy": "正在探索無限可能", + "loadingMarketplace": "正在加載市場...", + "loadingPlugin": "Loading plugin details...", + "installingPlugin": "Installing plugin...", + "uninstallingPlugin": "Uninstalling plugin..." + }, + "empty": { + "noPlugins": "No plugins found", + "noPluginsDescription": "No plugins match your current filters", + "showAllPlugins": "Show All Plugins", + "noFeaturedPlugins": "No featured plugins available", + "noCategories": "No categories available", + "noSearchResults": "No search results found" + }, + "backToMarketplace": "Back to Marketplace", + "enable": "Enable", + "disable": "Disable", + "install": "Install", + "uninstall": "Uninstall", + "by": "By", + "overview": "Overview", + "details": "Details", + "feedback": "Feedback", + "docSection": "Documentation", + "description": "發現並安裝外掛以增強您的 KubeStellar 體驗", + "dependencies": "Dependencies", + "keyFeatures": "Key Features", + "technicalDetails": "Technical Details", + "generalInfo": "General Information", + "version": "Version", + "lastUpdated": "Last Updated", + "author": "Author", + "license": "License", + "category": "Category", + "requirements": "Requirements", + "kubestellarVersion": "KubeStellar Version", + "platforms": "Platforms", + "fileSize": "File Size", + "pluginIdentifiers": "Plugin Identifiers", + "tags": "Tags", + "userFeedback": "User Feedback", + "leaveFeedback": "Leave Feedback", + "yourFeedback": "Your Feedback", + "rating": "Rating", + "comments": "Comments", + "delete": { + "confirmTitle": "Delete Plugin", + "confirmLabel": "Type the plugin name to confirm:", + "confirmPlaceholder": "Enter plugin name here", + "mismatch": "Plugin name does not match", + "confirmed": "Plugin name confirmed", + "deleteButton": "Delete Plugin", + "deleting": "Deleting Plugin...", + "deletingMessage": "Please wait while we remove your plugin.", + "success": "Plugin Deleted Successfully!", + "error": "Delete Failed", + "tryAgain": "Try Again", + "title": "Delete Plugin" + }, + "upload": { + "dragDrop": "Drag and drop your plugin here", + "browseFiles": "Browse Files", + "requirements": "Upload Requirements:", + "reviewFile": "Review Your Plugin", + "uploadPlugin": "Upload Plugin", + "uploading": "Uploading Plugin...", + "success": "Plugin Uploaded Successfully!", + "error": "Upload Failed", + "tryAgain": "Try Again", + "title": "Upload Plugin", + "supportedFormat": "or click to browse. Supported format: .tar.gz", + "confirmUpload": "Please confirm the details below before uploading", + "processingFile": "Processing your plugin file. This may take a moment.", + "successMessage": "Your plugin has been uploaded and is now available in the marketplace.", + "errorMessage": "Something went wrong while uploading your plugin.", + "invalidFileType": "Invalid file type. Please upload a .tar.gz file.", + "fileTooLarge": "File size too large. Maximum size is 50MB." + }, + "common": { + "featured": "FEATURED", + "viewDetails": "View Details", + "installNow": "Install Now", + "installing": "Installing...", + "installed": "Installed", + "uninstalling": "Uninstalling...", + "rating": "rating", + "downloads": "downloads", + "updated": "Updated", + "recently": "recently", + "by": "by", + "unknownAuthor": "Unknown author", + "noDescription": "No description available", + "premiumPlugins": "Discover Premium Plugins", + "enhanceWorkflow": "Enhance your workflow with powerful plugins designed specifically for Kubernetes and cloud-native environments.", + "exploreMarketplace": "Explore Marketplace", + "suggestedCategories": ["Monitoring", "Security", "Development", "Deployment", "Storage"], + "noPluginsFound": "No plugins found", + "tryAdjustingSearch": "Try adjusting your search terms or browse all plugins", + "noMatchingFilters": "No plugins match your current filters", + "showAllPlugins": "Show All Plugins", + "remaining": "remaining", + "allPlugins": "All Plugins", + "plugin": "plugin", + "plugins": "plugins", + "tags": "Tags:", + "license": "License", + "created": "Created", + "routes": "Routes", + "loadTime": "Load Time", + "endpoints": "endpoint", + "endpoints_plural": "endpoints", + "seconds": "s", + "misc": "Misc", + "installPlugin": "Install Plugin", + "noRoutes": "No API routes defined", + "noWidgets": "No widgets available", + "noAssets": "No assets loaded", + "unnamedPlugin": "Unnamed Plugin", + "defaultVersion": "1.0.0", + "versionPrefix": "v" + }, + "documentation": { + "title": "Documentation", + "overview": "Overview", + "installation": "Installation", + "apiReference": "API Reference", + "codeExamples": "Code Examples", + "practicalExamples": "Practical examples to help you get started with", + "tutorials": "Tutorials", + "faq": "FAQ", + "troubleshooting": "Troubleshooting", + "installationGuide": "Installation Guide", + "followSteps": "Follow these steps to install and configure", + "inEnvironment": "in your KubeStellar environment.", + "keyFeatures": "Key Features", + "requirements": "Requirements", + "welcomeMessage": "Welcome to the comprehensive documentation for", + "extendsCapabilities": "extends KubeStellar's capabilities with advanced features designed to enhance your multi-cluster management experience.", + "powerfulPlugin": "This powerful plugin provides essential functionality for modern Kubernetes environments, offering seamless integration with existing workflows and robust performance monitoring capabilities.", + "advancedMultiCluster": "Advanced multi-cluster synchronization", + "realTimeMonitoring": "Real-time monitoring and alerting", + "automatedScaling": "Automated scaling and optimization", + "securityPolicy": "Security policy enforcement", + "comprehensiveAPI": "Comprehensive API coverage", + "kubestellarVersion": "KubeStellar v1.0.0 or higher", + "kubernetesVersion": "Kubernetes 1.19+", + "ramMinimum": "512MB RAM minimum (1GB recommended)", + "networkConnectivity": "Network connectivity to target clusters", + "validCredentials": "Valid authentication credentials", + "copy": "Copy", + "copied": "Copied!", + "fileFormat": "File format: .tar.gz only", + "maxFileSize": "Maximum file size: 50MB", + "mustContain": "Must contain plugin.yml file", + "validStructure": "Valid plugin structure required" + } + }, + "notFoundPage": { + "logoAlt": "KubeStellar Logo", + "mainTitle": "404 - Page Not Found", + "description": "The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.", + "returnHomeButton": "Return to Home", + "tryAgainButton": "Try Again", + "quotes": [ + { + "text": "In the vast universe of code, sometimes we get lost among the stars.", + "author": "Anonymous Developer" + }, + { + "text": "The path less traveled is often not found for a reason.", + "author": "Web Explorer" + }, + { + "text": "Not all who wander are lost, but this page definitely is.", + "author": "J.R.R. Token" + }, + { + "text": "Success is not final, 404 is not fatal: it's the courage to navigate that counts.", + "author": "Winston Codehill" + }, + { + "text": "The best way to predict the future is to implement proper routing.", + "author": "Alan Turning" + } + ] + }, + "resources": { + "search": "搜尋物件...", + "kind": "類型", + "namespace": "命名空間", + "labels": "標籤", + "labels_plural": "{{count}} 個標籤", + "filterByKind": "按物件類型篩選", + "filterByNamespace": "按命名空間篩選", + "filterByStatus": "按狀態篩選", + "filterByLabel": "按標籤篩選", + "clearFilters": "清除篩選", + "noLabelsFound": "未找到標籤", + "noMatchingFilters": "沒有符合當前篩選條件的物件", + "title": "物件瀏覽器", + "selectKind": "選擇類型/物件", + "selectNamespace": "選擇命名空間", + "applyFilters": "應用篩選", + "results": "結果", + "created": "創建於", + "noResourcesFound": "未找到符合條件的物件", + "selectResourceAndNamespace": "選擇物件類型和命名空間以開始", + "refresh": "刷新", + "toggleFilters": "切換篩選", + "description": "跨集群探索和管理 Kubernetes 物件", + "autoRefresh": "自動刷新", + "viewMode": { + "grid": "網格視圖", + "list": "列表視圖", + "table": "表格視圖", + "gridLabel": "網格視圖", + "listLabel": "列表視圖", + "tableLabel": "表格視圖" + }, + "objectSelection": "物件選擇與篩選", + "searchPlaceholder": "搜尋物件類型...", + "quickSearchPlaceholder": "快速搜尋物件...", + "bulkActions": { + "resourcesSelected": "已選擇 {{count}} 個 {{objectText}}", + "clearSelection": "清除選擇", + "viewDetails": "查看詳情", + "export": "導出" + }, + "sorting": { + "sortBy": "排序方式", + "name": "按名稱排序", + "kind": "按類型排序", + "namespace": "按命名空間排序", + "createdAt": "按創建時間排序" + }, + "emptyState": { + "readyToExplore": "準備探索", + "noResourcesFound": "未找到物件", + "noResourcesDescription": "沒有符合當前篩選條件的物件。嘗試調整搜尋條件或清除篩選。", + "getStartedDescription": "選擇一種物件類型和命名空間以開始探索您的 Kubernetes 物件。", + "getStarted": "開始使用", + "clearFilters": "清除篩選" + }, + "actions": { + "view": "查看", + "viewDetails": "查看詳情", + "editYaml": "編輯 YAML", + "delete": "刪除", + "more": "更多" + }, + "filters": { + "activeFilters": "當前篩選:", + "kindFilter": "類型:{{kind}}", + "namespaceFilter": "命名空間:{{namespace}}", + "labelFilter": "{{key}}: {{value}}", + "clear": "清除 ({{count}})" + }, + "menus": { + "resourceKinds": "物件類型 ({{count}})", + "namespaces": "命名空間 ({{count}})", + "labels": "標籤 ({{count}} 個鍵)", + "noLabelsFound": "當前物件中未找到標籤", + "active": "活躍" + }, + "stats": { + "resourceOverview": "物件概覽", + "topResourceKinds": "熱門物件類型", + "topNamespaces": "熱門命名空間" + }, + "table": { + "name": "名稱", + "kind": "類型", + "namespace": "命名空間", + "status": "狀態", + "age": "年齡", + "createdAt": "創建時間", + "labels": "標籤", + "actions": "操作" + }, + "preview": { + "objectDetails": "物件詳情", + "namespace": "命名空間", + "createdAt": "創建時間", + "uid": "UID", + "noLabels": "無標籤", + "labels": "標籤" + }, + "time": { + "justNow": "剛剛", + "hoursAgo": "{{count}}小時前", + "daysAgo": "{{count}}天前" + }, + "loading": { + "resources": "加載物件中...", + "applying": "應用篩選中...", + "refreshing": "刷新中..." + }, + "errors": { + "loadFailed": "加載物件失敗", + "filterFailed": "篩選失敗", + "actionFailed": "操作失敗" + }, + "notifications": { + "filtersApplied": "篩選已應用", + "resourcesRefreshed": "物件列表已刷新" + }, + "subtitle": "探索和管理 Kubernetes 資源", + "status": { + "healthy": "健康", + "warning": "警告", + "error": "錯誤", + "active": "活躍", + "unknown": "未知", + "running": "運行中", + "pending": "待處理", + "failed": "失敗", + "progressing": "進行中", + "scheduled": "已調度", + "waiting": "等待中", + "ready": "就緒", + "notReady": "未就緒", + "succeeded": "成功", + "outOfSync": "不同步", + "missing": "缺失", + "synced": "已同步" + }, + "unknown": "未知" + }, + "validation": { + "missingRequiredFields": "缺少必填欄位" } } diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index 6a473bf3c..a4d64bd2d 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -41,7 +41,6 @@ declare global { console.log('[MSW] worker started'); } catch (err) { - // eslint-disable-next-line no-console console.warn('[MSW] failed to start', err); } }