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

bbovenzi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 6812dae1c26 [RFC] Feat (ui): Add spanish translation + Spanish lang 
codeowner (#52316)
6812dae1c26 is described below

commit 6812dae1c26b4e4ccb05ed83adcf8a2c2804be3e
Author: Aldo <[email protected]>
AuthorDate: Fri Jul 11 19:45:16 2025 +0200

    [RFC] Feat (ui): Add spanish translation + Spanish lang codeowner (#52316)
    
    * add spanish translations + codeownership cfg
    
    * fix typos
    
    * nit: more natural message
    
    * rm space
    
    * Update .github/CODEOWNERS to add bbovenzi as codeowner
    
    Co-authored-by: Jens Scheffler <[email protected]>
    
    * improve wording and fix typo
    
    * replace fecha wording to a standard
    
    * more inclusive text
    
    * welcome message more inclusive
    
    ---------
    
    Co-authored-by: Jens Scheffler <[email protected]>
---
 .github/CODEOWNERS                                 |   1 +
 .github/boring-cyborg.yml                          |   3 +
 .../airflow/ui/public/i18n/locales/es/admin.json   | 166 ++++++++++++
 .../airflow/ui/public/i18n/locales/es/assets.json  |  29 +++
 .../airflow/ui/public/i18n/locales/es/browse.json  |  23 ++
 .../airflow/ui/public/i18n/locales/es/common.json  | 280 +++++++++++++++++++++
 .../ui/public/i18n/locales/es/components.json      | 131 ++++++++++
 .../src/airflow/ui/public/i18n/locales/es/dag.json | 110 ++++++++
 .../airflow/ui/public/i18n/locales/es/dags.json    |  87 +++++++
 .../ui/public/i18n/locales/es/dashboard.json       |  38 +++
 airflow-core/src/airflow/ui/src/i18n/config.ts     |   1 +
 11 files changed, 869 insertions(+)

diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index d4fd7231233..78f7f7b8e7c 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -40,6 +40,7 @@
 # See: 
https://github.com/apache/airflow/blob/main/airflow-core/src/airflow/ui/public/i18n/README.md#43-engaged-translator
 airflow-core/src/airflow/ui/public/i18n/locales/ar/ @shahar1 @hussein-awala # 
+ @ahmadtfarhan
 airflow-core/src/airflow/ui/public/i18n/locales/de/ @jscheffl # + @TJaniF 
@m1racoli
+airflow-core/src/airflow/ui/public/i18n/locales/es/ @bbovenzi # + @aoelvp94
 airflow-core/src/airflow/ui/public/i18n/locales/he/ @eladkal @shahar1 
@romsharon98 # +@Dev-iL
 airflow-core/src/airflow/ui/public/i18n/locales/ko/ @jscheffl @potiuk # + 
@choo121600 @kgw7401 @0ne-stone
 airflow-core/src/airflow/ui/public/i18n/locales/nl/ @BasPH # + @DjVinnii
diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml
index 9c5a437d3e0..1bfdfafef6c 100644
--- a/.github/boring-cyborg.yml
+++ b/.github/boring-cyborg.yml
@@ -377,6 +377,9 @@ labelPRBasedOnFilePath:
   translation:de:
     - airflow-core/src/airflow/ui/public/i18n/locales/de/*
 
+  translation:es:
+    - airflow-core/src/airflow/ui/public/i18n/locales/es/*
+
   translation:fr:
     - airflow-core/src/airflow/ui/public/i18n/locales/fr/*
 
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/es/admin.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/es/admin.json
new file mode 100644
index 00000000000..10e1da9f850
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/admin.json
@@ -0,0 +1,166 @@
+{
+  "columns":{
+    "description": "Descripción",
+    "key": "Clave",
+    "name": "Nombre",
+    "value": "Valor"
+  },
+  "config":{
+    "columns":{
+      "section": "Sección"
+    },
+    "title": "Configuración de Airflow"
+  },
+  "connections":{
+    "add": "Agregar Conexión",
+    "columns":{
+      "connectionId": "ID de la Conexión",
+      "connectionType": "Tipo de Conexión",
+      "host": "Host",
+      "port": "Puerto"
+    },
+    "connection_one": "Conexión",
+    "connection_other": "Conexiones",
+    "delete":{
+      "deleteConnection_one": "Eliminar 1 conexión",
+      "deleteConnection_other": "Eliminar {{count}} conexiones",
+      "firstConfirmMessage_one": "Estás a punto de eliminar la siguiente 
conexión:",
+      "firstConfirmMessage_other": "Estas a punto de eliminar las siguientes 
conexiones:",
+      "title": "Eliminar Conexión"
+    },
+    "edit": "Editar Conexión",
+    "form":{
+      "connectionIdRequired": "El ID de la conexión es requerido",
+      "connectionIdRequirement": "El ID de la conexión no puede contener solo 
espacios",
+      "connectionTypeRequired": "El Tipo de Conexión es requerido",
+      "extraFields": "Campos Extra",
+      "extraFieldsJson": "Campos Extra (tipo JSON)",
+      "helperText": "¿Falta el Tipo de conexión? Asegúrate de haber instalado 
el paquete de proveedores de Airflow correspondiente.",
+      "selectConnectionType": "Seleccionar Tipo de Conexión",
+      "standardFields": "Campos Estándar"
+    },
+    "nothingFound": {
+        "description": "Las conexiones definidas a través de variables de 
entorno o gestores de secretos no se muestran aquí.",
+        "documentationLink": "Aprende más en la documentación de Airflow.",
+        "learnMore": "Estas se resuelven en tiempo de ejecución y no se 
muestran en la interfaz de usuario.",
+        "title": "No se encontraron conexiones!"
+    },
+    "searchPlaceholder": "Buscar Conexiones",
+    "test": "Prueba de Conexión",
+    "testDisabled": "La función de prueba de conexión está desactivada. Por 
favor, contacta a un administrador para activarla.",
+    "typeMeta": {
+      "error": "Error al recuperar la Metadata del Tipo de Conexión",
+      "standardFields": {
+        "description": "Descripción",
+        "host": "Host",
+        "login": "Login",
+        "password": "Contraseña",
+        "port": "Puerto",
+        "url_schema": "Esquema"
+      }
+    }
+  },
+  "deleteActions":{
+    "button": "Eliminar",
+    "modal":{
+      "confirmButton": "Sí, Eliminar",
+      "secondConfirmMessage": "Esta acción es permanente y no se puede 
deshacer.",
+      "thirdConfirmMessage": "¿Confirmas de que quieres proceder?"
+    },
+    "selected": "Seleccionado",
+    "tooltip": "Eliminar conexiones seleccionadas"
+  },
+  "formActions":{
+    "reset": "Restablecer",
+    "save": "Guardar"
+  },
+  "plugins": {
+    "columns": {
+      "source": "Origen"
+    },
+    "importError_one": "Error de Importación de Plugin",
+    "importError_other": "Errores de Importación de Plugins",
+    "searchPlaceholder": "Buscar por archivo"
+  },
+  "pools": {
+    "add": "Agregar Pool",
+    "deferredSlotsIncluded": "Slots Diferidos Incluidos",
+    "delete":{
+      "title": "Eliminar Pool",
+      "warning": "Esto eliminará toda la metadata relacionada con el pool y 
puede afectar a las tareas que usan este pool."
+    },
+    "edit": "Editar Pool",
+    "form": {
+      "checkbox": "Marcar para incluir tareas diferidas cuando se calculan los 
slots abiertos del pool",
+      "description": "Descripción",
+      "includeDeferred": "Incluir diferidos",
+      "nameMaxLength": "El nombre puede contener un máximo de 256 caracteres",
+      "nameRequired": "El nombre es requerido",
+      "slots": "Slots"
+    },
+    "noPoolsFound": "No se encontraron pools",
+    "pool_one": "Pool",
+    "pool_other": "Pools",
+    "searchPlaceholder": "Buscar Pools",
+    "sort": {
+      "asc": "Nombre (A-Z)",
+      "desc": "Nombre (Z-A)",
+      "placeholder": "Ordenar por"
+    }
+  },
+  "providers": {
+    "columns": {
+      "packageName": "Nombre del Paquete",
+      "version": "Versión"
+    }
+  },
+  "variables": {
+    "add": "Agregar Variable",
+    "columns": {
+      "isEncrypted": "Está encriptada"
+    },
+    "delete": {
+      "deleteVariable_one": "Eliminar 1 Variable",
+      "deleteVariable_other": "Eliminar {{count}} Variables",
+      "firstConfirmMessage_one": "Estás a punto de eliminar la siguiente 
variable:",
+      "firstConfirmMessage_other": "Estás a punto de eliminar las siguientes 
variables:",
+      "title": "Eliminar Variable",
+      "tooltip": "Eliminar variables seleccionadas"
+    },
+    "edit":  "Editar Variable",
+    "export": "Exportar",
+    "exportTooltip": "Exportar variables seleccionadas",
+    "form": {
+      "invalidJson": "JSON inválido",
+      "keyMaxLength": "La clave puede contener un máximo de 250 caracteres",
+      "keyRequired": "La clave es requerida",
+      "valueRequired": "El valor es requerido"
+    },
+    "import": {
+      "button": "Import",
+      "conflictResolution": "Seleccionar Resolución de Conflicto de Variables",
+      "errorParsingJsonFile": "Error al analizar el archivo JSON: Cargar un 
archivo JSON que contenga variables (e.g., {\"key\": \"value\", ...}).",
+      "options": {
+        "fail": {
+          "description": "Falla la importación si se detectan variables 
existentes.",
+          "title": "Fallar"
+        },
+        "overwrite": {
+          "description": "Sobrescribe la variable en caso de conflicto.",
+          "title": "Sobrescribir"
+        },
+        "skip": {
+          "description": "Omite la importación de variables que ya existen.",
+          "title": "Omitir"
+        }
+      },
+      "title": "Importar Variables",
+      "upload": "Cargar un Archivo JSON",
+      "uploadPlaceholder": "Cargar un archivo JSON que contenga variables 
(e.g., {\"key\": \"value\", ...})"
+    },
+    "noRowsMessage": "No se encontraron variables",
+    "searchPlaceholder": "Buscar Claves",
+    "variable_one": "Variable",
+    "variable_other": "Variables"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/es/assets.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/es/assets.json
new file mode 100644
index 00000000000..e321d17a127
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/assets.json
@@ -0,0 +1,29 @@
+{
+  "consumingDags": "Consumiendo DAGs",
+  "createEvent": {
+    "button": "Crear Evento",
+    "manual": {
+      "description": "Crear un Evento de Asset manualmente",
+      "extra": "Evento de Asset Extra",
+      "label": "Manual"
+    },
+    "materialize": {
+      "description": "Activar el DAG upstream de este asset",
+      "descriptionWithDag": "Activar el DAG upstream de este asset: 
{{dagName}}",
+      "label": "Materializar",
+      "unpauseDag": "Despausar {{dagName}} al activar"
+    },
+    "success": {
+      "manualDescription": "La creación de eventos de asset manual fue 
exitosa.",
+      "manualTitle": "Evento de Asset Creado",
+      "materializeDescription": "El DAG upstream {{dagId}} fue activado 
exitosamente.",
+      "materializeTitle": "Materializando Asset"
+    },
+    "title": "Crear Evento de Asset para {{name}}"
+  },
+  "group": "Grupo",
+  "lastAssetEvent": "Último Evento de Asset",
+  "name": "Nombre",
+  "producingTasks": "Tareas produciendo",
+  "searchPlaceholder": "Buscar Assets"
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/es/browse.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/es/browse.json
new file mode 100644
index 00000000000..7c747889f48
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/browse.json
@@ -0,0 +1,23 @@
+{
+  "auditLog":{
+    "actions": {
+      "collapseAllExtra": "Colapsar todos los extra json",
+      "expandAllExtra": "Expandir todos los extra json"
+    },
+    "columns":{
+      "event": "Evento",
+      "extra": "Extra",
+      "user": "Usuario",
+      "when": "Cuando"
+    },
+    "title": "Auditar Log"
+  },
+  "xcom":{
+    "columns":{
+      "dag": "DAG",
+      "key": "Clave",
+      "value": "Valor"
+    },
+    "title": "XCom"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/es/common.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/es/common.json
new file mode 100644
index 00000000000..9a00a8cb2a9
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/common.json
@@ -0,0 +1,280 @@
+{
+  "admin": {
+    "Config": "Configuración",
+    "Connections": "Conexiones",
+    "Plugins": "Plugins",
+    "Pools": "Pools",
+    "Providers": "Proveedores",
+    "Variables": "Variables"
+  },
+  "asset_one": "Asset",
+  "asset_other": "Assets",
+  "assetEvent_one": "Evento de Asset",
+  "assetEvent_other": "Eventos de Asset",
+  "backfill_one": "Backfill",
+  "backfill_other": "Backfills",
+  "browse": {
+    "auditLog": "Auditar Log",
+    "xcoms": "XComs"
+  },
+  "collapseDetailsPanel": "Colapsar Detalles del Panel",
+  "createdAssetEvent_one": "Evento de Asset Creado",
+  "createdAssetEvent_other": "Eventos de Asset Creados",
+  "dag_one": "DAG",
+  "dag_other": "DAGs",
+  "dagDetails": {
+    "catchup": "Catchup",
+    "concurrency": "Concurrencia",
+    "dagRunTimeout": "Tiempo de Ejecución del DAG",
+    "defaultArgs": "Argumentos por Defecto",
+    "description": "Descripción",
+    "documentation": "Documentación del DAG",
+    "fileLocation": "Ubicación del Archivo",
+    "hasTaskConcurrencyLimits": "Tiene límites de concurrencia de áreas",
+    "lastExpired": "Último Expirado",
+    "lastParsed": "Último Parseado",
+    "latestDagVersion": "Última Versión del DAG",
+    "latestRun": "Última Ejecución",
+    "maxActiveRuns": "Máximo de Ejecuciones Activas",
+    "maxActiveTasks": "Máximo de Tareas Activas",
+    "maxConsecutiveFailedDagRuns": "Máximo de Ejecuciones Fallidas 
Consecutivas del DAG",
+    "nextRun": "Siguiente Ejecución",
+    "owner": "Propietario",
+    "params": "Parámetros",
+    "schedule": "Programación",
+    "tags": "Etiquetas"
+  },
+  "dagId": "ID del DAG",
+  "dagRun": {
+    "conf": "Conf",
+    "dagVersions": "Versión(es) del DAG",
+    "dataIntervalEnd": "Intervalo de Datos Final",
+    "dataIntervalStart": "Intervalo de Datos Inicial",
+    "lastSchedulingDecision": "Última Decisión de Programación",
+    "queuedAt": "En Cola en",
+    "runAfter": "Ejecutar Después",
+    "runType": "Tipo de Ejecución",
+    "sourceAssetEvent": "Evento de Asset Fuente",
+    "triggeredBy": "Activado por"
+  },
+  "dagRun_one": "Ejecución del DAG",
+  "dagRun_other": "Ejecuciones del DAG",
+  "dagWarnings": "Advertencias/Errores del DAG",
+  "defaultToGraphView": "Por defecto a vista gráfica",
+  "defaultToGridView": "Por defecto a vista en cuadrícula",
+  "direction": "Dirección",
+  "docs": {
+    "documentation": "Documentación",
+    "githubRepo": "Repositorio de GitHub",
+    "restApiReference": "Referencia de REST API"
+  },
+  "duration": "Duración",
+  "endDate": "Fecha Final",
+  "error": {
+    "back": "Atrás",
+    "defaultMessage": "Ocurrió un error inesperado",
+    "home": "Inicio",
+    "notFound": "Página no encontrada",
+    "title": "Error"
+  },
+  "expression": {
+    "all": "Todos",
+    "and": "Y",
+    "any": "Cualquiera",
+    "or": "O"
+  },
+  "logicalDate": "Fecha Lógica",
+  "logout": "Cerrar Sesión",
+  "logoutConfirmation": "Estás a punto de cerrar sesión de la aplicación.",
+  "mapIndex": "Mapa de Índice",
+  "modal": {
+    "cancel": "Cancelar",
+    "confirm": "Confirmar",
+    "delete": {
+      "button": "Eliminar",
+      "confirmation": "¿Confirmas de querer eliminar {{resourceName}}? Esta 
acción no se puede deshacer."
+    }
+  },
+  "nav": {
+    "admin": "Administración",
+    "assets": "Assets",
+    "browse": "Navegar",
+    "dags": "DAGs",
+    "docs": "Docs",
+    "home": "Inicio",
+    "plugins": "Plugins",
+    "security": "Seguridad"
+  },
+  "noItemsFound": "No se encontraron {{modelName}}s",
+  "note": {
+    "add": "Agregar una nota",
+    "dagRun": "Nota de Ejecución del DAG",
+    "label": "Nota",
+    "placeholder": "Agregar una nota...",
+    "taskInstance": "Nota de Instancia de Tarea"
+  },
+  "pools": {
+    "deferred": "Diferido",
+    "open": "Abierto",
+    "pools_one": "pool",
+    "pools_other": "pools",
+    "queued": "En Cola",
+    "running": "En Ejecución",
+    "scheduled": "Programado"
+  },
+  "runId": "ID de la corrida",
+  "runTypes": {
+    "asset_triggered": "Asset Activado",
+    "backfill": "Backfill",
+    "manual": "Manual",
+    "scheduled": "Programado"
+  },
+  "scroll": {
+    "direction": {
+      "bottom": "abajo",
+      "top": "arriba"
+    },
+    "tooltip": "Presiona {{hotkey}} para desplazarte a {{direction}}"
+  },
+  "seconds": "{{count}}s",
+  "security": {
+    "actions": "Acciones",
+    "permissions": "Permisos",
+    "resources": "Recursos",
+    "roles": "Roles",
+    "users": "Usuarios"
+  },
+  "selectLanguage": "Seleccionar Idioma",
+  "showDetailsPanel": "Mostrar Panel de Detalles",
+  "sourceAssetEvent_one": "Evento de Asset Fuente",
+  "sourceAssetEvent_other": "Eventos de Asset Fuente",
+  "startDate": "Fecha Inicial",
+  "state": "Estado",
+  "states": {
+    "deferred": "Diferido",
+    "failed": "Fallido",
+    "no_status": "Sin Estado",
+    "none": "Sin Estado",
+    "queued": "En Cola",
+    "removed": "Removido",
+    "restarting": "Reiniciando",
+    "running": "En Ejecución",
+    "scheduled": "Programado",
+    "skipped": "Omitido",
+    "success": "Exitoso",
+    "up_for_reschedule": "Por Reprogramar",
+    "up_for_retry": "Por Reintentar",
+    "upstream_failed": "Fallido en Upstream"
+  },
+  "switchToDarkMode": "Cambiar a Modo Oscuro",
+  "switchToLightMode": "Cambiar a Modo Claro",
+  "table": {
+    "completedAt": "Completado en",
+    "createdAt": "Creado en",
+    "filterByTag": "Filtrar DAGs por etiqueta",
+    "filterColumns": "Filtrar columnas de la tabla",
+    "filterReset_one": "Restablecer filtro",
+    "filterReset_other": "Restablecer filtros",
+    "from": "Desde",
+    "maxActiveRuns": "Máximo de Ejecuciones Activas",
+    "noTagsFound": "No se encontraron etiquetas",
+    "tagMode": {
+      "all": "Todos",
+      "any": "Cualquiera"
+    },
+    "tagPlaceholder": "Filtrar por etiqueta",
+    "to": "Hasta"
+  },
+  "task": {
+    "documentation": "Documentación de la Tarea",
+    "lastInstance": "Última Instancia",
+    "operator": "Operador",
+    "triggerRule": "Regla de Activación"
+  },
+  "task_one": "Tarea",
+  "task_other": "Tareas",
+  "taskId": "ID de la Tarea",
+  "taskInstance": {
+    "dagVersion": "Versión del DAG",
+    "executor": "Executor",
+    "executorConfig": "Configuración del Executor",
+    "hostname": "Nombre de Host",
+    "maxTries": "Máximo de Intentos",
+    "pid": "PID",
+    "pool": "Pool",
+    "poolSlots": "Slots del Pool",
+    "priorityWeight": "Peso de Prioridad",
+    "queue": "Cola",
+    "queuedWhen": "En Cola en",
+    "scheduledWhen": "Programado en",
+    "triggerer": {
+      "assigned": "Triggerer Asignado",
+      "class": "Clase del Trigger",
+      "createdAt": "Tiempo de Creación del Trigger",
+      "id": "ID del Trigger",
+      "latestHeartbeat": "Último Heartbeat del Triggerer",
+      "title": "Información del Triggerer"
+    },
+    "unixname": "Nombre de Unix"
+  },
+  "taskInstance_one": "Instancia de Tarea",
+  "taskInstance_other": "Instancias de Tarea",
+  "timeRange": {
+    "last12Hours": "Últimas 12 Horas",
+    "last24Hours": "Últimas 24 Horas",
+    "lastHour": "Última Hora",
+    "pastWeek": "Semana Pasada"
+  },
+  "timezone": "Zona Horaria",
+  "timezoneModal": {
+    "current-timezone": "Hora actual en",
+    "placeholder": "Seleccionar una zona horaria",
+    "title": "Seleccionar Zona Horaria",
+    "utc": "UTC (Tiempo Universal Coordinado)"
+  },
+  "toaster": {
+    "bulkDelete": {
+      "error": "Eliminar {{resourceName}} Request Fallido",
+      "success": {
+        "description": "{{count}} {{resourceName}} han sido eliminados 
exitosamente. Claves: {{keys}}",
+        "title": "Eliminar {{resourceName}} Request Enviado"
+      }
+    },
+    "create": {
+      "error": "Crear {{resourceName}} Request Fallido",
+      "success": {
+        "description": "{{resourceName}} ha sido creado exitosamente.",
+        "title": "Crear {{resourceName}} Request Enviado"
+      }
+    },
+    "delete": {
+      "error": "Eliminar {{resourceName}} Request Fallido",
+      "success": {
+        "description": "{{resourceName}} ha sido eliminado exitosamente.",
+        "title": "Eliminar {{resourceName}} Request Enviado"
+      }
+    },
+    "import": {
+      "error": "Importar {{resourceName}} Request Fallido",
+      "success": {
+        "description": "{{count}} {{resourceName}} han sido importados 
exitosamente.",
+        "title": "Importar {{resourceName}} Request Enviado"
+      }
+    },
+    "update": {
+      "error": "Actualizar {{resourceName}} Request Fallido",
+      "success": {
+        "description": "{{resourceName}} ha sido actualizado exitosamente.",
+        "title": "Actualizar {{resourceName}} Request Enviado"
+      }
+    }
+  },
+  "triggered": "Activado",
+  "tryNumber": "Intento Número",
+  "user": "Usuario",
+  "wrap": {
+    "tooltip": "Presiona {{hotkey}} para alternar el 'envolver'",
+    "unwrap": "Desenvolver",
+    "wrap": "Envolver"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/es/components.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/es/components.json
new file mode 100644
index 00000000000..5be54f7d1c4
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/components.json
@@ -0,0 +1,131 @@
+{
+  "backfill": {
+    "affected_one": "1 ejecución será activada.",
+    "affected_other": "{{count}} ejecuciones serán activadas.",
+    "affectedNone": "No hay ejecuciones que coincidan con los criterios 
seleccionados.",
+    "backwards": "Ejecutar Hacia Atrás",
+    "dateRange": "Rango de Fechas",
+    "dateRangeFrom": "Desde",
+    "dateRangeTo": "Hasta",
+    "errorStartDateBeforeEndDate": "La Fecha Inicial debe ser antes de la 
Fecha Final",
+    "maxRuns": "Máximo de Ejecuciones Activas",
+    "reprocessBehavior": "Comportamiento de Reprocesamiento",
+    "run": "Ejecutar Backfill",
+    "selectDescription": "Ejecutar este DAG para un rango de fechas",
+    "selectLabel": "Backfill",
+    "title": "Ejecutar Backfill",
+    "toaster": {
+      "success": {
+        "description": "Backfill jobs han sido activados exitosamente.",
+        "title": "Backfill generado"
+      }
+    },
+    "tooltip": "Backfill requiere una programación",
+    "unpause": "Reanudar {{dag_display_name}} al activarse",
+    "validation": {
+      "datesRequired": "Ambos intervalos de Fecha Inicial y Fecha Final deben 
ser proporcionados.",
+      "startBeforeEnd": "El intervalo de Fecha Inicial debe ser menor o igual 
a la Fecha Final."
+    }
+  },
+  "banner": {
+    "backfillInProgress": "Backfill en progreso",
+    "cancel": "Cancelar backfill",
+    "pause": "Pausar backfill",
+    "unpause": "Reanudar backfill"
+  },
+  "clipboard": {
+    "copy": "Copiar"
+  },
+  "close": "Cerrar",
+  "configForm": {
+    "advancedOptions": "Opciones Avanzadas",
+    "configJson": "Configuración JSON",
+    "invalidJson": "Formato JSON inválido: {{errorMessage}}"
+  },
+  "dagWarnings": {
+    "error_one": "1 Error",
+    "errorAndWarning": "1 Error y {{warningText}}",
+    "warning_one": "1 Aviso",
+    "warning_other": "{{count}} Advertencias"
+  },
+  "durationChart": {
+    "duration": "Duración (segundos)",
+    "lastDagRun_one": "Última Ejecución de DAG",
+    "lastDagRun_other": "Últimas {{count}} Ejecuciones de DAG",
+    "lastTaskInstance_one": "Última Instancia de Tarea",
+    "lastTaskInstance_other": "Últimas {{count}} Instancias de Tarea",
+    "queuedDuration": "Duración en Cola",
+    "runAfter": "Ejecutar Después",
+    "runDuration": "Duración de la Ejecución"
+  },
+  "fileUpload": {
+    "files_other": "{{count}} archivos"
+  },
+  "flexibleForm": {
+    "placeholder": "Seleccionar Valor",
+    "placeholderArray": "Ingrese cada cadena en una nueva línea",
+    "placeholderExamples": "Comience a escribir para ver opciones",
+    "placeholderMulti": "Seleccionar uno o múltiples valores",
+    "validationErrorArrayNotArray": "El valor debe ser un array.",
+    "validationErrorArrayNotNumbers": "Todos los elementos en el array deben 
ser números.",
+    "validationErrorArrayNotObject": "Todos los elementos en el array deben 
ser objetos.",
+    "validationErrorRequired": "Este campo es requerido"
+  },
+  "graph": {
+    "directionDown": "De arriba a abajo",
+    "directionLeft": "De derecha a izquierda",
+    "directionRight": "De izquierda a derecha",
+    "directionUp": "De abajo a arriba",
+    "downloadImage": "Descargar imagen",
+    "downloadImageError": "Error al descargar la imagen.",
+    "downloadImageErrorTitle": "Descarga Fallida",
+    "otherDagRuns": "+Otras Ejecuciones de DAG",
+    "taskCount_one": "{{count}} Tarea",
+    "taskCount_other": "{{count}} Tareas",
+    "taskGroup": "Grupo de Tareas"
+  },
+  "limitedList": "+{{count}} más",
+  "logs": {
+    "file": "Archivo",
+    "location": "línea {{line}} en {{name}}"
+  },
+  "reparseDag": "Reparar DAG",
+  "sortedAscending": "ordenado ascendente",
+  "sortedDescending": "ordenado descendente",
+  "sortedUnsorted": "sin ordenar",
+  "taskTries": "Intentos de Tarea",
+  "toggleCardView": "Mostrar vista de tarjeta",
+  "toggleTableView": "Mostrar vista de tabla",
+  "triggerDag": {
+    "button": "Trigger",
+    "loading": "Cargando información del DAG...",
+    "loadingFailed": "Error al cargar la información del DAG. Por favor, 
inténtelo de nuevo.",
+    "runIdHelp": "Opcional - se generará si no se proporciona",
+    "selectDescription": "Activar una ejecución única de este DAG",
+    "selectLabel": "Ejecución Única",
+    "title": "Activar DAG",
+    "toaster": {
+      "success": {
+        "description": "La ejecución del DAG ha sido activada exitosamente.",
+        "title": "Ejecución del DAG Activada"
+      }
+    },
+    "unpause": "Reanudar {{dagDisplayName}} al activarse"
+  },
+  "trimText": {
+    "details": "Detalles",
+    "empty": "Vacío",
+    "noContent": "No hay contenido disponible."
+  },
+  "versionDetails": {
+    "bundleLink": "Enlace del Bundle",
+    "bundleName": "Nombre del Bundle",
+    "bundleVersion": "Versión del Bundle",
+    "createdAt": "Creado en",
+    "versionId": "ID de la Versión"
+  },
+  "versionSelect": {
+    "dagVersion": "Versión del DAG",
+    "versionCode": "v{{versionCode}}"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/es/dag.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/es/dag.json
new file mode 100644
index 00000000000..4d96f2abfdd
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/dag.json
@@ -0,0 +1,110 @@
+{
+  "allRuns": "Todas las Ejecuciones",
+  "blockingDeps": {
+    "dependency": "Dependencia",
+    "reason": "Razón",
+    "title": "Dependencias que bloquean la tarea de ser programada"
+  },
+  "code": {
+    "bundleUrl": "URL del Bundle",
+    "noCode": "No se encontró código",
+    "parsedAt": "Parseado en:"
+  },
+  "extraLinks": "Enlaces Extra",
+  "grid": {
+    "buttons": {
+      "resetToLatest": "Reiniciar a la última",
+      "toggleGroup": "Alternar grupo"
+    }
+  },
+  "header": {
+    "buttons": {
+      "dagDocs": "Documentacion del DAG"
+    }
+  },
+  "logs": {
+    "noTryNumber": "No hay número de intento",
+    "viewInExternal": "Ver logs en {{name}} (intento {{attempt}})"
+  },
+  "overview": {
+    "buttons": {
+      "failedRun_one": "Ejecución Fallida",
+      "failedRun_other": "Ejecuciones Fallidas",
+      "failedTask_one": "Tarea Fallida",
+      "failedTask_other": "Tareas Fallidas",
+      "failedTaskInstance_one": "Instancia de Tarea Fallida",
+      "failedTaskInstance_other": "Instancias de Tarea Fallidas"
+    },
+    "charts": {
+      "assetEvent_one": "Evento de Asset Creado",
+      "assetEvent_other": "Eventos de Asset Creados"
+    },
+    "failedLogs": {
+      "title": "Logs de Tareas Fallidas Recientes",
+      "viewFullLogs": "Ver logs completos"
+    }
+  },
+  "panel": {
+    "buttons": {
+      "options": "Opciones",
+      "showGraph": "Mostrar Gráfico",
+      "showGrid": "Mostrar Grilla"
+    },
+    "dagRuns": {
+      "label": "Número de Ejecuciones de DAG"
+    },
+    "dependencies": {
+      "label": "Dependencias",
+      "options": {
+        "allDagDependencies": "Todas las Dependencias de DAG",
+        "externalConditions": "Condiciones Externas",
+        "onlyTasks": "Solo tareas"
+      },
+      "placeholder": "Dependencias"
+    },
+    "graphDirection": {
+      "label": "Dirección del Gráfico"
+    }
+  },
+  "paramsFailed": "Error al cargar los parámetros",
+  "parse": {
+    "toaster": {
+      "error": {
+        "description": "El DAG no pudo ser reparado. Puede haber solicitudes 
de reparsing pendientes por procesar.",
+        "title": "El DAG no pudo ser reparado"
+      },
+      "success": {
+        "description": "El DAG debería reparsearse pronto.",
+        "title": "Solicitud de reparsing enviada exitosamente"
+      }
+    }
+  },
+  "tabs": {
+    "assetEvents": "Eventos de Asset",
+    "auditLog": "Auditoría de Log",
+    "backfills": "Backfills",
+    "code": "Código",
+    "details": "Detalles",
+    "logs": "Logs",
+    "mappedTaskInstances_one": "Instancia de Tarea [{{count}}]",
+    "mappedTaskInstances_other": "Instancias de Tarea [{{count}}]",
+    "overview": "Resumen",
+    "renderedTemplates": "Plantillas Renderizadas",
+    "runs": "Ejecuciones",
+    "taskInstances": "Instancias de Tarea",
+    "tasks": "Tareas",
+    "xcom": "XCom"
+  },
+  "taskGroups": {
+    "collapseAll": "Colapsar todos los grupos de tareas",
+    "expandAll": "Expandir todos los grupos de tareas"
+  },
+  "taskLogs": {
+    "allLogLevels": "Todos los Niveles de Log",
+    "allSources": "Todos los Orígenes",
+    "fullscreen": {
+      "button": "Pantalla completa",
+      "tooltip": "Presiona {{hotkey}} para pantalla completa"
+    }
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/es/dags.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/es/dags.json
new file mode 100644
index 00000000000..491e23dfc4b
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/dags.json
@@ -0,0 +1,87 @@
+{
+  "assetSchedule": "{{count}} de {{total}} assets actualizados",
+  "dagActions": {
+    "delete": {
+      "button": "Eliminar DAG",
+      "warning": "Esto eliminará toda la metadata relacionada con el DAG, 
incluyendo Ejecuciones y Tareas."
+    }
+  },
+  "filters": {
+    "allRunTypes": "Todos los Tipos de Ejecución",
+    "allStates": "Todos los Estados",
+    "paused": {
+      "active": "Activo",
+      "all": "Todos",
+      "paused": "Pausado"
+    }
+  },
+  "ownerLink": "Enlace de Propietario para {{owner}}",
+  "runAndTaskActions": {
+    "affectedTasks": {
+      "noItemsFound": "No se encontraron tareas.",
+      "title": "Tareas Afectadas: {{count}}"
+    },
+    "clear": {
+      "button": "Limpiar {{type}}",
+      "buttonTooltip": "Presiona shift+c para limpiar",
+      "error": "Error al limpiar {{type}}",
+      "title": "Limpiar {{type}}"
+    },
+    "delete": {
+      "button": "Eliminar {{type}}",
+      "dialog": {
+        "resourceName": "{{type}} {{id}}",
+        "title": "Eliminar {{type}}",
+        "warning": "Esto eliminará toda la metadata relacionada con el 
{{type}}."
+      },
+      "error": "Error al eliminar {{type}}",
+      "success": {
+        "description": "La solicitud de eliminación de {{type}} fue exitosa.",
+        "title": "{{type}} Eliminado Exitosamente"
+      }
+    },
+    "markAs": {
+      "button": "Marcar {{type}} como...",
+      "buttonTooltip": {
+        "failed": "Presiona shift+f para marcar como fallido",
+        "success": "Presiona shift+s para marcar como exitoso"
+      },
+      "title": "Marcar {{type}} como {{state}}"
+    },
+    "options": {
+      "downstream": "Downstream",
+      "existingTasks": "Limpiar tareas existentes",
+      "future": "Futuro",
+      "onlyFailed": "Limpiar solo tareas fallidas",
+      "past": "Pasado",
+      "queueNew": "Poner en cola nuevas tareas",
+      "upstream": "Upstream"
+    }
+  },
+  "search": {
+    "advanced": "Búsqueda Avanzada",
+    "clear": "Limpiar búsqueda",
+    "dags": "Buscar DAGs",
+    "hotkey": "+K",
+    "tasks": "Buscar Tareas"
+  },
+  "sort": {
+    "displayName": {
+      "asc": "Ordenar por Nombre (A-Z)",
+      "desc": "Ordenar por Nombre (Z-A)"
+    },
+    "lastRunStartDate": {
+      "asc": "Ordenar por Fecha Inicial de Ejecución (Más Antiguo-Más 
Reciente)",
+      "desc": "Ordenar por Fecha Inicial de Ejecución (Más Reciente-Más 
Antiguo)"
+    },
+    "lastRunState": {
+      "asc": "Ordenar por Estado de Ejecución (A-Z)",
+      "desc": "Ordenar por Estado de Ejecución (Z-A)"
+    },
+    "nextDagRun": {
+      "asc": "Ordenar por Ejecución de DAG (Más Antiguo-Más Reciente)",
+      "desc": "Ordenar por Ejecución de DAG (Más Reciente-Más Antiguo)"
+    },
+    "placeholder": "Ordenar por"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/es/dashboard.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/es/dashboard.json
new file mode 100644
index 00000000000..bc9ed1194d5
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/dashboard.json
@@ -0,0 +1,38 @@
+{
+  "group": "Grupo",
+  "health": {
+    "dagProcessor": "Procesador de DAGs",
+    "health": "Salud",
+    "healthy": "Saludable",
+    "lastHeartbeat": "Último Heartbeat",
+    "metaDatabase": "Base de datos de la metadata",
+    "scheduler": "Programador",
+    "status": "Estado",
+    "triggerer": "Triggerer",
+    "unhealthy": "No Saludable"
+  },
+  "history": "Historial",
+  "importErrors": {
+    "dagImportError_one": "Error de Importación de DAG",
+    "dagImportError_other": "Errores de Importación de DAGs",
+    "searchByFile": "Buscar por archivo",
+    "timestamp": "Timestamp"
+  },
+  "managePools": "Gestionar Pools",
+  "noAssetEvents": "No se encontraron Eventos de Asset.",
+  "poolSlots": "Slots del Pool",
+  "sortBy": {
+    "newestFirst": "Más Recientes",
+    "oldestFirst": "Más Antiguos"
+  },
+  "source": "Origen",
+  "stats": {
+    "activeDags": "DAGs Activos",
+    "failedDags": "DAGs Fallidos",
+    "queuedDags": "DAGs en Cola",
+    "runningDags": "DAGs en Ejecución",
+    "stats": "Estadísticas"
+  },
+  "uri": "URI",
+  "welcome": "Te damos la bienvenida"
+}
diff --git a/airflow-core/src/airflow/ui/src/i18n/config.ts 
b/airflow-core/src/airflow/ui/src/i18n/config.ts
index b8baea62312..86f25740bfc 100644
--- a/airflow-core/src/airflow/ui/src/i18n/config.ts
+++ b/airflow-core/src/airflow/ui/src/i18n/config.ts
@@ -25,6 +25,7 @@ export const supportedLanguages = [
   { code: "en", name: "English" },
   { code: "ar", name: "العربية" },
   { code: "de", name: "Deutsch" },
+  { code: "es", name: "Español" },
   { code: "fr", name: "Français" },
   { code: "he", name: "עברית" },
   { code: "ko", name: "한국어" },


Reply via email to