This is an automated email from the ASF dual-hosted git repository.

young pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-dashboard.git


The following commit(s) were added to refs/heads/master by this push:
     new cf9444e18 feat(i18n): add Spanish (es) translations for common.json 
(#3182)
cf9444e18 is described below

commit cf9444e18075a5219318b293ae4107f93fce582b
Author: Ajinkya Pathak <ajinkyapathak...@gmail.com>
AuthorDate: Fri Aug 29 13:53:56 2025 +0530

    feat(i18n): add Spanish (es) translations for common.json (#3182)
---
 src/components/Header/LanguageMenu.tsx |   1 +
 src/config/i18n.ts                     |   4 +
 src/locales/es/common.json             | 368 +++++++++++++++++++++++++++++++++
 vite.config.ts                         |   2 +-
 4 files changed, 374 insertions(+), 1 deletion(-)

diff --git a/src/components/Header/LanguageMenu.tsx 
b/src/components/Header/LanguageMenu.tsx
index 6b7602560..44b7a4d61 100644
--- a/src/components/Header/LanguageMenu.tsx
+++ b/src/components/Header/LanguageMenu.tsx
@@ -25,6 +25,7 @@ const LangMap: Record<keyof Resources, string> = {
   en: 'English',
   de: 'Deutsch',
   zh: '中文',
+  es: 'Español',
 };
 
 const TranslationProgress = ({ lang }: { lang: string }) => {
diff --git a/src/config/i18n.ts b/src/config/i18n.ts
index 4c061d032..e14746e52 100644
--- a/src/config/i18n.ts
+++ b/src/config/i18n.ts
@@ -20,6 +20,7 @@ import { initReactI18next } from 'react-i18next';
 import de_common from '@/locales/de/common.json';
 import en_common from '@/locales/en/common.json';
 import zh_common from '@/locales/zh/common.json';
+import es_common from '@/locales/es/common.json'; 
 
 export const resources = {
   en: {
@@ -31,6 +32,9 @@ export const resources = {
   zh: {
     common: zh_common,
   },
+  es: {
+    common: es_common, 
+  },
 } as const;
 
 export type Resources = typeof resources;
diff --git a/src/locales/es/common.json b/src/locales/es/common.json
new file mode 100644
index 000000000..1af5a22b8
--- /dev/null
+++ b/src/locales/es/common.json
@@ -0,0 +1,368 @@
+{
+  "apisix": {
+    "dashboard": "Panel de APISIX",
+    "logo": "Logo de APISIX"
+  },
+  "consumerGroups": {
+    "singular": "Grupo de Consumidores"
+  },
+  "consumers": {
+    "singular": "Consumidor"
+  },
+  "credentials": {
+    "singular": "Credencial"
+  },
+  "form": {
+    "basic": {
+      "desc": "Descripción",
+      "labels": {
+        "errorFormat": "El formato de la etiqueta es incorrecto, debe ser 
`clave:valor`",
+        "key": "Clave",
+        "placeholder": "Introduce texto como `clave:valor`, luego presiona 
Enter o fuera de foco",
+        "title": "Etiquetas",
+        "value": "Valor"
+      },
+      "name": "Nombre",
+      "status": "Estado",
+      "statusOption": {
+        "0": "Deshabilitado",
+        "1": "Habilitado"
+      },
+      "title": "Información Básica"
+    },
+    "btn": {
+      "add": "Añadir",
+      "addARow": "Añadir una fila",
+      "cancel": "Cancelar",
+      "delete": "Eliminar",
+      "edit": "Editar",
+      "save": "Guardar",
+      "upload": "Subir",
+      "view": "Ver"
+    },
+    "consumers": {
+      "groupId": "ID de Grupo",
+      "username": "Nombre de usuario"
+    },
+    "disabled": "Deshabilitado, haga clic en el interruptor para habilitar",
+    "general": {
+      "title": "General"
+    },
+    "info": {
+      "create_time": "Creado en",
+      "id": "ID",
+      "title": "Información",
+      "update_time": "Actualizado en"
+    },
+    "json": {
+      "parseError": "El formato JSON no es válido"
+    },
+    "plugins": {
+      "addPlugin": "Añadir Plugin",
+      "configId": "ID de Configuración de Plugin",
+      "editPlugin": "Editar Plugin",
+      "label": "Plugins",
+      "searchForSelectedPlugins": "Buscar Plugins Seleccionados",
+      "selectPlugins": {
+        "title": "Seleccionar Plugins"
+      },
+      "viewPlugin": "Ver Plugin"
+    },
+    "protos": {
+      "content": "Contenido",
+      "contentPlaceholder": "Pegar o subir archivo {{fileTypes}}"
+    },
+    "routes": {
+      "enableWebsocket": "Habilitar WebSocket",
+      "filterFunc": "Función de Filtro",
+      "host": "Host",
+      "hosts": "Hosts",
+      "matchRules": "Reglas de Coincidencia",
+      "methods": "Métodos HTTP",
+      "priority": "Prioridad",
+      "remoteAddr": "Dirección Remota",
+      "remoteAddrs": "Direcciones Remotas",
+      "service": "Servicio",
+      "uri": "URI",
+      "uris": "URIs",
+      "vars": "Variables"
+    },
+    "search": "Buscar",
+    "secrets": {
+      "aws": {
+        "access_key_id": "ID de Clave de Acceso",
+        "endpoint_url": "URL de Endpoint",
+        "region": "Región",
+        "secret_access_key": "Clave de Acceso Secreta",
+        "session_token": "Token de Sesión"
+      },
+      "gcp": {
+        "auth": "Autenticación",
+        "auth_config": "Configuración de Autenticación",
+        "auth_file": "Archivo de Autenticación",
+        "client_email": "Correo del Cliente",
+        "entries_uri": "URI de Entradas",
+        "private_key": "Clave Privada",
+        "project_id": "ID de Proyecto",
+        "scope": "Alcance",
+        "ssl_verify": "Verificación SSL",
+        "token_uri": "URI de Token"
+      },
+      "manager": "Gestor de Secretos",
+      "managerConfig": "Configuración del Gestor",
+      "title": "Configuración de Secretos",
+      "vault": {
+        "namespace": "Espacio de Nombres",
+        "prefix": "Prefijo",
+        "token": "Token",
+        "uri": "URI"
+      }
+    },
+    "services": {
+      "enableWebsocket": "Habilitar WebSocket",
+      "hosts": "Hosts",
+      "script": "Script",
+      "settings": "Configuración del Servicio"
+    },
+    "ssls": {
+      "cert": "Certificado",
+      "cert_key_list": {
+        "add": "Añadir un par",
+        "delete": "Eliminar el par",
+        "title": "Certificados y Claves"
+      },
+      "client": {
+        "ca": "Certificado CA del Cliente",
+        "depth": "Profundidad de Verificación",
+        "skipMtlsUriRegex": "Omitir mTLS URI Regex",
+        "title": "Cliente"
+      },
+      "key": "Clave Privada",
+      "sni": "SNI",
+      "snis": "SNIs",
+      "ssl_protocols": "Protocolos SSL",
+      "type": "Tipo de Certificado"
+    },
+    "streamRoutes": {
+      "protocol": {
+        "conf": "Configuración",
+        "logger": "Logger",
+        "name": "Nombre del Protocolo",
+        "superiorId": "ID Superior",
+        "title": "Información del Protocolo"
+      },
+      "remoteAddr": "Dirección Remota",
+      "server": "Servidor",
+      "serverAddr": "Dirección del Servidor",
+      "serverPort": "Puerto del Servidor",
+      "sni": "SNI"
+    },
+    "tagsInput": {
+      "placeholder": "Introduce texto, luego presiona Enter o fuera de foco"
+    },
+    "upload": {
+      "fileOverSize": "el tamaño del archivo es demasiado grande",
+      "readError": "error de lectura del archivo:"
+    },
+    "upstreams": {
+      "checks": {
+        "active": {
+          "concurrency": "Concurrencia",
+          "healthy": {
+            "http_statuses": "Estados HTTP",
+            "interval": "Intervalo",
+            "successes": "Éxitos",
+            "title": "Saludable"
+          },
+          "host": "Host",
+          "http_path": "Ruta HTTP",
+          "http_request_headers": "Cabeceras de Solicitud HTTP",
+          "https_verify_certificate": "Verificar Certificado HTTPS",
+          "port": "Puerto",
+          "timeout": "Tiempo de Espera",
+          "title": "Activo",
+          "type": "Tipo",
+          "unhealthy": {
+            "http_failures": "Fallos HTTP",
+            "http_statuses": "Estados HTTP",
+            "interval": "Intervalo",
+            "tcp_failures": "Fallos TCP",
+            "timeouts": "Tiempos de Espera",
+            "title": "No Saludable"
+          }
+        },
+        "passive": {
+          "healthy": {
+            "http_statuses": "Estados HTTP",
+            "successes": "Éxitos",
+            "title": "Saludable"
+          },
+          "title": "Pasivo",
+          "type": "Tipo",
+          "unhealthy": {
+            "http_failures": "Fallos HTTP",
+            "http_statuses": "Estados HTTP",
+            "tcp_failures": "Fallos TCP",
+            "timeouts": "Tiempos de Espera",
+            "title": "No Saludable"
+          }
+        },
+        "title": "Verificaciones de Salud"
+      },
+      "connectionConfiguration": "Configuración de Conexión",
+      "discoveryArgs": {
+        "title": "Argumentos de Descubrimiento"
+      },
+      "discoveryType": {
+        "title": "Tipo de Descubrimiento"
+      },
+      "findUpstreamFrom": "Encontrar Upstream desde",
+      "hashOn": "Hash en",
+      "hashOnDesc": "Esto será válido cuando `type` sea `chash`",
+      "identifier": "Identificador de Upstream",
+      "inline": "Configuración Inline de Upstream",
+      "keepalivePool": {
+        "idleTimeout": "Tiempo de Inactividad",
+        "requests": "Solicitudes",
+        "size": "Tamaño",
+        "title": "Pool Keepalive"
+      },
+      "key": "Clave",
+      "keyDesc": "Esto será válido cuando `type` sea `chash`",
+      "loadBalancing": "Balanceo de Carga",
+      "nodes": {
+        "action": {
+          "title": "Acción"
+        },
+        "add": "Añadir Nodo",
+        "host": {
+          "title": "Host"
+        },
+        "port": {
+          "title": "Puerto"
+        },
+        "priority": {
+          "title": "Prioridad"
+        },
+        "title": "Nodos",
+        "weight": {
+          "title": "Peso"
+        }
+      },
+      "passHost": "Pasar Host",
+      "retries": "Reintentos",
+      "retry": "Reintentar",
+      "retryTimeout": "Tiempo de espera de reintento",
+      "scheme": "Esquema",
+      "serviceDiscovery": {
+        "serviceName": "Nombre del Servicio",
+        "title": "Descubrimiento de Servicios"
+      },
+      "serviceId": "ID de Servicio",
+      "serviceName": {
+        "title": "Nombre del Servicio"
+      },
+      "timeout": {
+        "connect": "Conectar",
+        "read": "Leer",
+        "send": "Enviar",
+        "title": "Tiempo de Espera"
+      },
+      "title": "Upstream",
+      "tls": {
+        "clientCert": "Certificado del Cliente",
+        "clientCertId": "ID del Certificado del Cliente",
+        "clientCertKeyPair": "Par Certificado/Clave del Cliente",
+        "clientKey": "Clave del Cliente",
+        "title": "TLS",
+        "verify": "Verificar"
+      },
+      "type": "Tipo",
+      "updateTime": "Hora de Actualización",
+      "upstreamHost": "Host de Upstream",
+      "upstreamHostDesc": "Configura esto cuando `pass_host` sea `rewrite`",
+      "upstreamId": "ID de Upstream"
+    }
+  },
+  "globalRules": {
+    "singular": "Regla Global"
+  },
+  "help-us-translate": "¡Ayúdanos a Traducir!",
+  "info": {
+    "add": {
+      "success": "Añadido {{name}} con éxito",
+      "title": "Añadir {{name}}"
+    },
+    "delete": {
+      "content": "¿Desea eliminar el {{name}}?",
+      "success": "Eliminado {{name}} con éxito",
+      "title": "Eliminar {{name}}"
+    },
+    "detail": {
+      "title": "Detalle de {{name}}"
+    },
+    "edit": {
+      "success": "Editado {{name}} con éxito",
+      "title": "Editar {{name}}"
+    }
+  },
+  "mark": {
+    "question": "¿?"
+  },
+  "noData": "Sin Datos",
+  "or": "O",
+  "pluginConfigs": {
+    "singular": "Configuración de Plugin"
+  },
+  "pluginMetadata": {
+    "search": "Buscar Metadatos de Plugin",
+    "singular": "Metadatos de Plugin"
+  },
+  "protos": {
+    "singular": "Proto"
+  },
+  "routes": {
+    "singular": "Ruta"
+  },
+  "seconds": "Segundos",
+  "secrets": {
+    "singular": "Secreto"
+  },
+  "services": {
+    "singular": "Servicio"
+  },
+  "settings": {
+    "adminKey": "Clave de Administrador",
+    "title": "Configuraciones",
+    "ui-commit-sha": "SHA de Commit de la UI"
+  },
+  "sources": {
+    "consumerGroups": "Grupos de Consumidores",
+    "consumers": "Consumidores",
+    "credentials": "Credenciales",
+    "globalRules": "Reglas Globales",
+    "pluginConfigs": "Configuraciones de Plugins",
+    "pluginMetadata": "Metadatos de Plugins",
+    "protos": "Protos",
+    "routes": "Rutas",
+    "secrets": "Secretos",
+    "services": "Servicios",
+    "ssls": "SSLs",
+    "streamRoutes": "Rutas de Stream",
+    "upstreams": "Upstreams"
+  },
+  "ssls": {
+    "singular": "SSL"
+  },
+  "streamRoutes": {
+    "singular": "Ruta de Stream"
+  },
+  "table": {
+    "actions": "Acciones",
+    "disabled": "Deshabilitado",
+    "enabled": "Habilitado"
+  },
+  "upstreams": {
+    "singular": "Upstream"
+  }
+}
diff --git a/vite.config.ts b/vite.config.ts
index e3377ab56..6aab2b25a 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -76,7 +76,7 @@ export default defineConfig({
       semicolons: false,
     }),
     i18nProgress({
-      langs: ['en', 'de', 'zh'],
+      langs: ['en', 'es', 'de', 'zh'],
       baseLang: 'en',
       getTranslationDir: (lang) => `./src/locales/${lang}`,
     }),

Reply via email to