diff --git a/package-lock.json b/package-lock.json
index 03d3ceb..abd23cf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -120,7 +120,6 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.5",
@@ -1018,7 +1017,6 @@
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-7.1.0.tgz",
"integrity": "sha512-fNxRUk1KhjSbnbuBxlWSnBLKLBNun52ZBTcs22H/xEEzM6Ap81ZFTQ4bZBxVQGQgVY0xugKGoRcCbaKjLQ3XZA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@fortawesome/fontawesome-common-types": "7.1.0"
},
@@ -3852,7 +3850,6 @@
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
"devOptional": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"undici-types": "~7.16.0"
}
@@ -3862,7 +3859,6 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.5.tgz",
"integrity": "sha512-keKxkZMqnDicuvFoJbzrhbtdLSPhj/rZThDlKWCDbgXmUg0rEUFtRssDXKYmtXluZlIqiC5VqkCgRwzuyLHKHw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"csstype": "^3.0.2"
}
@@ -3873,7 +3869,6 @@
"integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
"devOptional": true,
"license": "MIT",
- "peer": true,
"peerDependencies": {
"@types/react": "^19.2.0"
}
@@ -3941,7 +3936,6 @@
"integrity": "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.46.4",
"@typescript-eslint/types": "8.46.4",
@@ -4200,7 +4194,6 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"devOptional": true,
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -4357,7 +4350,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.8.25",
"caniuse-lite": "^1.0.30001754",
@@ -4800,8 +4792,7 @@
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz",
"integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/embla-carousel-react": {
"version": "8.6.0",
@@ -4961,7 +4952,6 @@
"integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
@@ -5601,7 +5591,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/runtime": "^7.27.6"
},
@@ -6538,7 +6527,6 @@
"version": "10.27.2",
"resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz",
"integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==",
- "peer": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/preact"
@@ -6822,7 +6810,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz",
"integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -6853,7 +6840,6 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
"integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"scheduler": "^0.27.0"
},
@@ -6896,7 +6882,6 @@
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.66.1.tgz",
"integrity": "sha512-2KnjpgG2Rhbi+CIiIBQQ9Df6sMGH5ExNyFl4Hw9qO7pIqMBR8Bvu9RQyjl3JM4vehzCh9soiNUM/xYMswb2EiA==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=18.0.0"
},
@@ -7035,7 +7020,6 @@
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.9.6.tgz",
"integrity": "sha512-2MkC2XSXq6HjGcihnx1s0DBWQETI4mlis4Ux7YTLvP67xnGxCvq+BcCQSO81qQHVUTM1V53tl4iVVaY5sReCOA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"react-router": "7.9.6"
},
@@ -7278,7 +7262,6 @@
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.2.tgz",
"integrity": "sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/estree": "1.0.8"
},
@@ -7537,8 +7520,7 @@
"version": "4.1.17",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz",
"integrity": "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/tapable": {
"version": "2.3.0",
@@ -7606,7 +7588,6 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=12"
},
@@ -7656,8 +7637,7 @@
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD",
- "peer": true
+ "license": "0BSD"
},
"node_modules/tsx": {
"version": "4.20.6",
@@ -7706,7 +7686,6 @@
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"devOptional": true,
"license": "Apache-2.0",
- "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -7900,7 +7879,6 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-7.2.2.tgz",
"integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.5.0",
@@ -7992,7 +7970,6 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=12"
},
@@ -8065,7 +8042,6 @@
"resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz",
"integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==",
"license": "MIT",
- "peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
diff --git a/src/layouts/panel/sidebar/user/language-selector.tsx b/src/layouts/panel/sidebar/user/language-selector.tsx
index 78a2192..264657f 100644
--- a/src/layouts/panel/sidebar/user/language-selector.tsx
+++ b/src/layouts/panel/sidebar/user/language-selector.tsx
@@ -44,6 +44,12 @@ export function SidebarLanguageSelector() {
Deutsch
+
+
+ 馃嚜馃嚫
+ Espa帽ol
+
+
diff --git a/src/locales/i18n.ts b/src/locales/i18n.ts
index c5cf147..c7cd742 100644
--- a/src/locales/i18n.ts
+++ b/src/locales/i18n.ts
@@ -3,6 +3,8 @@ import LanguageDetector from "i18next-browser-languagedetector";
import {initReactI18next} from "react-i18next";
import en_US from "./lang/en_US";
import de_DE from "./lang/de_DE";
+import es_ES from "./lang/es_ES";
+
const defaultLng = localStorage.getItem("i18nextLng") || "en_US";
document.documentElement.lang = defaultLng;
@@ -20,6 +22,7 @@ i18n
resources: {
en_US: {translation: en_US},
de_DE: {translation: de_DE},
+ es_ES: {translation: es_ES},
},
});
diff --git a/src/locales/lang/es_ES/es_ES.json b/src/locales/lang/es_ES/es_ES.json
new file mode 100644
index 0000000..ada5f6a
--- /dev/null
+++ b/src/locales/lang/es_ES/es_ES.json
@@ -0,0 +1,86 @@
+{
+ "error": {
+ "return": "Volver al sitio web",
+ "403": {
+ "title": "Acceso denegado",
+ "description": "No tienes permiso para acceder a este recurso."
+ },
+ "404": {
+ "title": "隆Ups! P谩gina no encontrada",
+ "description": "La p谩gina que buscas no existe o ha sido movida."
+ },
+ "500": {
+ "title": "隆Error interno del servidor!",
+ "description": "Por favor, disculpa las molestias."
+ }
+ },
+ "authentication": {
+ "login": {
+ "email": "Direcci贸n de correo electr贸nico",
+ "email.missing": "Por favor introduce una direcci贸n de correo electr贸nico",
+ "password": "Contrase帽a",
+ "password.missing": "Por favor introduce una contrase帽a",
+ "password.forgot": "驴Olvidaste tu contrase帽a?",
+ "remember": "Mantener sesi贸n iniciada",
+ "submit": "INICIAR SESI脫N",
+ "successful": "Has iniciado sesi贸n correctamente",
+ "failed": "Nombre de usuario o contrase帽a incorrectos."
+ }
+ },
+ "panel": {
+ "sidebar": {
+ "cluster": "Cl煤ster",
+ "clusters": "Cl煤steres",
+ "cluster.add": "Agregar cl煤ster",
+ "overview": "Resumen",
+ "nodes": "Nodos",
+ "workload": "Carga de trabajo",
+ "events": "Eventos",
+ "units": "Unidades",
+ "pods": "Pods",
+ "deployments": "Deployments",
+ "daemon.sets": "Daemon Sets",
+ "replica.sets": "Replica Sets",
+ "stateful.sets": "Stateful Sets",
+ "jobs": "Jobs",
+ "cron.jobs": "Cron Jobs",
+ "config": "Configuraci贸n",
+ "config.maps": "Config maps",
+ "secrets": "Secrets",
+ "network": "Red",
+ "services": "Servicios",
+ "storage": "Almacenamiento",
+ "pv": "PV",
+ "pvc": "PVC",
+ "security": "Seguridad",
+ "updates": "Actualizaciones",
+ "audits": "Auditor铆as",
+ "settings": "Configuraci贸n",
+ "language": "Idioma",
+ "theme": "Apariencia",
+ "theme.dark": "Oscuro",
+ "theme.light": "Claro",
+ "theme.system": "Sistema",
+ "logout": "Cerrar sesi贸n"
+ },
+ "header": {
+ "search": {
+ "placeholder": "Buscar...",
+ "ctrl": "CTRL",
+ "empty": "No se encontraron resultados.",
+ "popup": {
+ "placeholder": "Escribe un comando o busca...",
+ "heading": "Navegaci贸n",
+ "navigate": "para navegar",
+ "select": "para seleccionar",
+ "close": "para cerrar"
+ }
+ }
+ },
+ "page": {
+ "overview": {
+ "title": "Resumen"
+ }
+ }
+ }
+}
diff --git a/src/locales/lang/es_ES/index.ts b/src/locales/lang/es_ES/index.ts
new file mode 100644
index 0000000..13f0cda
--- /dev/null
+++ b/src/locales/lang/es_ES/index.ts
@@ -0,0 +1,5 @@
+import es_ES from "./es_ES.json";
+
+export default {
+ ...es_ES,
+};
\ No newline at end of file