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 3fd90eb41c0 UI: Complete the Spanish (es) translation (#76087)
3fd90eb41c0 is described below

commit 3fd90eb41c058ddd30623ae7955cfadf18d83fe8
Author: Brent Bovenzi <[email protected]>
AuthorDate: Wed Nov 4 10:22:47 2026 -0500

    UI: Complete the Spanish (es) translation (#76087)
    
    * UI: Complete the Spanish (es) translation
    
    The Spanish locale had drifted to 78.8% coverage as new features landed.
    The Dag version comparison, loop iterations, drain-then-pause scheduling
    and the Dag bundles browser all shipped English-only strings, so Spanish
    users saw English mixed into those screens.
    
    Terminology follows the decisions reached in review on the earlier
    Spanish PRs: technical loanwords (Job, Log, Heartbeat, Upstream,
    Downstream, Bundle, Callback) stay in English, UI labels take title
    case, and start and end dates read "Fecha Inicial" and "Fecha Final".
    
    Co-Authored-By: Claude <[email protected]>
    
    * UI: Use the Spanish "de" form for counted millions
    
    Spanish resolves the CLDR "many" plural category at exact multiples of a
    million, where a numeral takes "de" before the noun it quantifies, so a
    _many form that merely repeats _other reads ungrammatically at those
    counts. The forms where no noun follows the numeral are left alone.
    
    Co-Authored-By: Claude <[email protected]>
    
    * UI: Correct the Spanish plural guidance in the translation skill
    
    The guideline told translators that Spanish uses only _one and _other and
    that _many must repeat _other, which is what produced the ungrammatical
    _many forms this branch just fixed. Left as is, the next translation run
    would follow it and undo them.
    
    Co-Authored-By: Claude <[email protected]>
    
    ---------
    
    Co-authored-by: Claude <[email protected]>
---
 .agents/skills/airflow-translations/locales/es.md  |  34 +++++-
 .../airflow/ui/public/i18n/locales/es/admin.json   |  15 +++
 .../airflow/ui/public/i18n/locales/es/assets.json  |   5 +
 .../airflow/ui/public/i18n/locales/es/browse.json  |  35 ++++++
 .../airflow/ui/public/i18n/locales/es/common.json  |  82 ++++++++++++-
 .../ui/public/i18n/locales/es/components.json      |  41 ++++++-
 .../src/airflow/ui/public/i18n/locales/es/dag.json | 134 +++++++++++++++++++++
 .../airflow/ui/public/i18n/locales/es/dags.json    |  38 +++++-
 .../ui/public/i18n/locales/es/dashboard.json       |  22 +++-
 .../airflow/ui/public/i18n/locales/es/hitl.json    |   3 +
 10 files changed, 402 insertions(+), 7 deletions(-)

diff --git a/.agents/skills/airflow-translations/locales/es.md 
b/.agents/skills/airflow-translations/locales/es.md
index 416b4a84114..64029a93e7b 100644
--- a/.agents/skills/airflow-translations/locales/es.md
+++ b/.agents/skills/airflow-translations/locales/es.md
@@ -129,11 +129,39 @@ that **must be used consistently**:
 
 ### Plural Forms
 
-- Spanish uses i18next suffixes `_one` and `_other` only.
-  `_many` and `_other` must always use the same translation:
+- Spanish uses the i18next suffixes `_one`, `_many` and `_other`. All three are
+  required — `PLURAL_SUFFIXES["es"]` in
+  `dev/breeze/src/airflow_breeze/commands/ui_commands.py` lists them, and a key
+  that omits `_many` falls through to the English `fallbackLng` rather than to
+  the Spanish `_other`.
+
+- `_many` resolves **only at exact multiples of a million** (1.000.000,
+  2.000.000, …). 1.500.000 and 1.000.001 resolve to `_other`.
+
+- At those counts a numeral takes **`de`** before the noun it quantifies
+  ("un millón **de** tareas"), so a `_many` form that merely repeats `_other`
+  reads ungrammatically. When the string interpolates a count directly in front
+  of a noun, add `de`:
+
+  ```json
+  "change_one": "{{count, number}} cambio",
+  "change_many": "{{count, number}} de cambios",
+  "change_other": "{{count, number}} cambios"
+  ```
+
+- When no noun follows the numeral — the count stands alone in brackets, or the
+  noun is elided — `de` does not apply and `_many` matches `_other`:
+
+  ```json
+  "requiredActionCount_many": "Acciones Requeridas ({{count, number}})",
+  "teams.more_many": "y {{count, number}} más"
+  ```
+
+- A bare noun with no numeral in the string is likewise unaffected:
 
   ```json
   "task_one": "Tarea",
+  "task_many": "Tareas",
   "task_other": "Tareas"
   ```
 
@@ -222,7 +250,7 @@ Note: these titles require a full phrase in Spanish — do 
not shorten at the ex
 - Match tone, style, gender agreement, and casing from existing `es/*.json` 
files
 - Use neutral, international Spanish readable across all Spanish-speaking 
regions
 - Preserve all i18next placeholders: `{{count, number}}`, `{{dagName}}`, 
`{{hotkey}}`, etc.
-- Provide all needed plural suffixes (`_one`, `_other`) for each plural key
+- Provide all needed plural suffixes (`_one`, `_many`, `_other`) for each 
plural key
 - Check existing translations before adding new ones to maintain consistency
 
 **DON'T:**
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
index d6ad489461a..2a02f42ed71 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/es/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/admin.json
@@ -10,6 +10,7 @@
     "columns": {
       "section": "Sección"
     },
+    "config_many": "Configuraciones",
     "config_one": "Configuración",
     "config_other": "Configuraciones"
   },
@@ -21,22 +22,28 @@
       "host": "Host",
       "port": "Puerto"
     },
+    "connection_many": "Conexiones",
     "connection_one": "Conexión",
     "connection_other": "Conexiones",
     "delete": {
+      "deleteConnection_many": "Eliminar {{count, number}} de conexiones",
       "deleteConnection_one": "Eliminar 1 conexión",
       "deleteConnection_other": "Eliminar {{count, number}} conexiones",
+      "firstConfirmMessage_many": "Estás a punto de eliminar las siguientes 
conexiones:",
       "firstConfirmMessage_one": "Estás a punto de eliminar la siguiente 
conexión:",
       "firstConfirmMessage_other": "Estás a punto de eliminar las siguientes 
conexiones:",
       "title": "Eliminar Conexión"
     },
+    "duplicate": "Duplicar $t(connections.connection_one)",
     "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",
+      "connectionTypeFields": "Campos de {{connectionType}}",
       "connectionTypeRequired": "El Tipo de Conexión es requerido",
       "extraFieldsJson": "Campos Extra (tipo JSON)",
       "helperText": "¿Falta el Tipo de conexión? Asegúrate de haber instalado 
el paquete de proveedores de Airflow correspondiente.",
+      "helperTextForDuplicatedRedactedFields": "Los campos redactados ('***') 
no se copian. Complétalos para la nueva conexión.",
       "helperTextForRedactedFields": "Los campos redactados ('***') 
permanecerán sin cambios si no se modifican.",
       "selectConnectionType": "Seleccionar Tipo de Conexión",
       "standardFields": "Campos Estándar"
@@ -97,6 +104,7 @@
       "schedulerJob": "SchedulerJob",
       "triggererJob": "TriggererJob"
     },
+    "job_many": "Jobs",
     "job_one": "Job",
     "job_other": "Jobs"
   },
@@ -104,8 +112,10 @@
     "columns": {
       "source": "Origen"
     },
+    "importError_many": "Errores de Importación de Plugins",
     "importError_one": "Error de Importación de Plugin",
     "importError_other": "Errores de Importación de Plugins",
+    "plugin_many": "Plugins",
     "plugin_one": "Plugin",
     "plugin_other": "Plugins",
     "searchPlaceholder": "Buscar por archivo"
@@ -128,6 +138,7 @@
       "slotsHelperText": "Use -1 para slots ilimitados."
     },
     "noPoolsFound": "No se encontraron pools",
+    "pool_many": "Pools",
     "pool_one": "Pool",
     "pool_other": "Pools",
     "searchPlaceholder": "Buscar Pools",
@@ -142,6 +153,7 @@
       "packageName": "Nombre del Paquete",
       "version": "Versión"
     },
+    "provider_many": "Providers",
     "provider_one": "Provider",
     "provider_other": "Providers"
   },
@@ -151,8 +163,10 @@
       "isEncrypted": "Está Encriptada"
     },
     "delete": {
+      "deleteVariable_many": "Eliminar {{count, number}} de Variables",
       "deleteVariable_one": "Eliminar 1 Variable",
       "deleteVariable_other": "Eliminar {{count, number}} Variables",
+      "firstConfirmMessage_many": "Estás a punto de eliminar las siguientes 
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",
@@ -190,6 +204,7 @@
     },
     "noRowsMessage": "No se encontraron variables",
     "searchPlaceholder": "Buscar Claves",
+    "variable_many": "Variables",
     "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
index b8ba9505b3f..eb6ffd7e942 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/es/assets.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/assets.json
@@ -1,8 +1,10 @@
 {
   "additional_data": "Datos Adicionales",
+  "alias_many": "Alias",
   "alias_one": "Alias",
   "alias_other": "Alias",
   "aliases": "Alias",
+  "asset_many": "Assets",
   "asset_one": "Asset",
   "asset_other": "Assets",
   "assetStateStore": {
@@ -16,6 +18,7 @@
     "deleteWarning": "El Asset perderá esta entrada de almacenamiento de 
estado persistente.",
     "edit": "Editar Almacenamiento de Estado de Asset",
     "emptyState": "El almacenamiento de estado de Asset almacena valores con 
alcance en la identidad de un Asset, compartidos entre todas las ejecuciones 
del Dag. Los workers pueden escribir en el almacenamiento de estado de Asset 
mediante el Task SDK.",
+    "entry_many": "Entradas",
     "entry_one": "Entrada",
     "entry_other": "Entradas",
     "lastUpdatedBy": "Última Actualización Realizada Por",
@@ -49,6 +52,7 @@
   "events": "Eventos",
   "filters": {
     "groupPlaceholder": "Buscar grupo",
+    "hasEvents": "Tiene Eventos",
     "lastEventDateRange": "Fecha del Último Evento"
   },
   "group": "Grupo",
@@ -59,6 +63,7 @@
   "scheduling": "Programación",
   "searchPlaceholder": "Buscar Assets",
   "taskDependencies": "Dependencias de Tareas",
+  "watcher_many": "Watchers",
   "watcher_one": "Watcher",
   "watcher_other": "Watchers",
   "watchers": "Watchers"
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
index 279886b558f..42dee39555b 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/es/browse.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/browse.json
@@ -10,12 +10,45 @@
       "eventType": "Tipo de Evento"
     }
   },
+  "dagBundles": {
+    "active": "Activo",
+    "columns": {
+      "active": "Activo",
+      "importErrors": "Errores de Importación",
+      "lastRefreshed": "Última Actualización",
+      "name": "Nombre",
+      "version": "Versión"
+    },
+    "detail": {
+      "status": "Estado"
+    },
+    "files": {
+      "columns": {
+        "file": "Archivo",
+        "lastParsed": "Último Análisis",
+        "parseDuration": "Duración del Análisis"
+      },
+      "file_many": "Archivos",
+      "file_one": "Archivo",
+      "file_other": "Archivos",
+      "importErrorGone": "Este error de importación ya no está registrado. 
Probablemente se corrigió con un nuevo análisis.",
+      "neverParsed": "Nunca",
+      "showImportError_many": "Ver {{count, number}} de errores",
+      "showImportError_one": "Ver error",
+      "showImportError_other": "Ver {{count, number}} errores"
+    },
+    "inactive": "Inactivo",
+    "neverRefreshed": "Nunca",
+    "notRefreshedYet": "Aún no actualizado",
+    "notVersioned": "Sin versionar"
+  },
   "deadlines": {
     "columns": {
       "alertName": "Nombre de Alerta",
       "deadlineTime": "Hora del Plazo",
       "status": "Estado"
     },
+    "deadline_many": "Plazos",
     "deadline_one": "Plazo",
     "deadline_other": "Plazos",
     "filters": {
@@ -39,6 +72,7 @@
     "columns": {
       "dag": "Dag",
       "key": "Clave",
+      "timestamp": "Timestamp",
       "value": "Valor"
     },
     "delete": {
@@ -56,6 +90,7 @@
       "successTitle": "XCom Actualizado",
       "title": "Editar XCom"
     },
+    "entry_many": "Entradas de XCom",
     "entry_one": "Entrada de XCom",
     "entry_other": "Entradas de XCom",
     "key": "Clave",
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
index f445446ca1e..4905316a16b 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/es/common.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/common.json
@@ -15,18 +15,22 @@
     "lightMode": "Modo Claro",
     "systemMode": "Seguir Configuración del Sistema"
   },
+  "asset_many": "Assets",
   "asset_one": "Asset",
   "asset_other": "Assets",
+  "assetEvent_many": "Eventos de Asset",
   "assetEvent_one": "Evento de Asset",
   "assetEvent_other": "Eventos de Asset",
   "assetInactive": {
     "tooltip": "El Asset upstream ha sido desactivado; el programador retiene 
la evaluación de particiones hasta que se reactive."
   },
+  "backfill_many": "Backfills",
   "backfill_one": "Backfill",
   "backfill_other": "Backfills",
   "breadcrumb": "Ruta de navegación",
   "browse": {
     "auditLog": "Log de Auditoría",
+    "dagBundles": "Dag Bundles",
     "deadlines": "Plazos",
     "jobs": "Jobs",
     "requiredActions": "Acciones Requeridas",
@@ -35,12 +39,18 @@
   "collapseAllExtra": "Colapsar todos los extra json",
   "collapseDetailsPanel": "Colapsar Detalles del Panel",
   "consumingAsset": "Asset Consumidor",
+  "createdAssetEvent_many": "Eventos de Asset Creados",
   "createdAssetEvent_one": "Evento de Asset Creado",
   "createdAssetEvent_other": "Eventos de Asset Creados",
+  "dag_many": "Dags",
   "dag_one": "Dag",
   "dag_other": "Dags",
+  "dagBundle_many": "Dag Bundles",
+  "dagBundle_one": "Dag Bundle",
+  "dagBundle_other": "Dag Bundles",
   "dagDetails": {
     "activeRuns": "Ejecuciones Activas",
+    "bundleVersion": "Versión del Bundle",
     "catchup": "Catchup",
     "dagRunTimeout": "Tiempo de Espera de la Ejecución del Dag",
     "defaultArgs": "Argumentos por Defecto",
@@ -85,6 +95,7 @@
     "triggeredBy": "Activado por",
     "triggeringUser": "Nombre del Usuario que Activa"
   },
+  "dagRun_many": "Ejecuciones del Dag",
   "dagRun_one": "Ejecución del Dag",
   "dagRun_other": "Ejecuciones del Dag",
   "dagRunId": "ID de la Ejecución del Dag",
@@ -122,6 +133,7 @@
       "title": "Acceso Denegado"
     }
   },
+  "event_many": "Eventos",
   "event_one": "Evento",
   "event_other": "Eventos",
   "expand": {
@@ -135,18 +147,25 @@
     "all": "Todos",
     "and": "Y",
     "any": "Cualquiera",
+    "hiddenAsset": "Asset oculto",
     "or": "O"
   },
   "filter": "Filtro",
   "filters": {
     "addFilter": "Agregar Filtro",
+    "allIterations": "Todas",
     "completedAt": "Completado en",
     "date": "Fecha",
     "durationFrom": "Duración Desde",
     "durationTo": "Duración Hasta",
     "endTime": "Hora de Fin",
+    "iteration": "Iteración",
     "logicalDateFrom": "Fecha Lógica Desde",
     "logicalDateTo": "Fecha Lógica Hasta",
+    "loop": "Bucle",
+    "loopAllIterations": "{{loop}} todas",
+    "loopIteration": "{{loop}} {{index}}",
+    "loopPlaceholder": "Seleccionar un bucle",
     "maxActiveRunsFrom": "Máximo de Ejecuciones Activas Desde",
     "maxActiveRunsTo": "Máximo de Ejecuciones Activas Hasta",
     "removeFilter": "Eliminar Filtro",
@@ -156,6 +175,7 @@
     "selectDateRange": "Seleccionar Rango de Fechas",
     "selectDateTime": "Seleccionar Fecha y Hora",
     "startTime": "Hora de Inicio",
+    "switchIteration": "Cambiar de iteración",
     "time": "Hora"
   },
   "fullscreen": {
@@ -164,6 +184,12 @@
   "generateToken": "Generar Token",
   "includedIn": "Incluido en",
   "key": "Clave",
+  "loading": "Cargando…",
+  "logLevel": {
+    "hide": "Ocultar Niveles de Log",
+    "hotkey": "l",
+    "show": "Mostrar Niveles de Log"
+  },
   "logicalDate": "Fecha Lógica",
   "logout": "Cerrar Sesión",
   "logoutConfirmation": "Estás a punto de cerrar sesión de la aplicación.",
@@ -190,6 +216,7 @@
     "plugins": "Plugins",
     "security": "Seguridad"
   },
+  "no": "No",
   "noItemsFound": "No se encontraron {{modelName}}",
   "note": {
     "add": "Agregar una nota",
@@ -202,14 +229,17 @@
     "write": "Escribir"
   },
   "overallStatus": "Estado General",
+  "partition_many": "Particiones",
   "partition_one": "Partición",
   "partition_other": "Particiones",
+  "partitionedDagRun_many": "Ejecuciones del Dag Particionadas",
   "partitionedDagRun_one": "Ejecución del Dag Particionada",
   "partitionedDagRun_other": "Ejecuciones del Dag Particionadas",
   "partitionedDagRunDetail": {
     "receivedAssetEvents": "Eventos de Asset Recibidos"
   },
   "pause": "Pausar",
+  "pendingDagRun_many": "{{count, number}} de Ejecuciones del Dag Pendientes",
   "pendingDagRun_one": "{{count, number}} Ejecución del Dag Pendiente",
   "pendingDagRun_other": "{{count, number}} Ejecuciones del Dag Pendientes",
   "presetFilters": {
@@ -262,6 +292,10 @@
   "selected": "Seleccionado",
   "settings": {
     "clearing": {
+      "keepTaskState": {
+        "helper": "Conservar por defecto las entradas del almacenamiento de 
estado de tarea al limpiar instancias de tarea, en lugar de descartarlas.",
+        "label": "Conservar el estado de tarea al limpiar"
+      },
       "preventRunningTask": {
         "helper": "Omitir las tareas que están en ejecución al limpiar 
instancias de tarea.",
         "label": "Evitar limpiar tareas en ejecución"
@@ -276,6 +310,13 @@
       },
       "title": "Limpieza"
     },
+    "dagsList": {
+      "recentTasks": {
+        "helper": "Mostrar los estados recientes de las tareas de cada Dag en 
la lista de Dags. Desactívalo para omitir su carga, lo que puede ayudar en 
despliegues con muchos Dags.",
+        "label": "Mostrar tareas recientes"
+      },
+      "title": "Lista de Dags"
+    },
     "description": "Estas preferencias se guardan solo en este navegador y se 
aplican en toda la aplicación.",
     "general": {
       "landingPage": {
@@ -293,6 +334,10 @@
         "helper": "Dirección de disposición para los gráficos de Dag y de 
Asset que no hayas configurado individualmente.",
         "label": "Dirección predeterminada del gráfico"
       },
+      "taskGroupsExpanded": {
+        "helper": "Expandir los grupos de tareas en los Dags donde no hayas 
guardado una selección de grupos. Las selecciones existentes se conservan.",
+        "label": "Expandir grupos de tareas por defecto"
+      },
       "title": "Gráfico"
     },
     "marking": {
@@ -302,6 +347,13 @@
       },
       "title": "Marcado"
     },
+    "search": {
+      "matchAnywhere": {
+        "helper": "$t(search.advanced.description) Las elecciones de cada 
barra de búsqueda y los enlaces compartidos siguen teniendo prioridad.",
+        "label": "Coincidir en cualquier parte por defecto"
+      },
+      "title": "Búsqueda"
+    },
     "taskInstance": {
       "defaultTab": {
         "helper": "Pestaña que se muestra primero al abrir una instancia de 
tarea. Los enlaces a una pestaña específica siguen abriendo esa pestaña.",
@@ -340,10 +392,13 @@
       "scrollBottom": "Desplazarse hacia abajo",
       "scrollTop": "Desplazarse hacia arriba",
       "searchDags": "Buscar $t(dag_other)",
+      "selectGridCellRange": "Seleccionar un rango de $t(taskInstance_other) o 
$t(taskGroup_other) (no tareas de bucle)",
       "showHelp": "Mostrar $t(shortcuts.title)",
       "toggleExpand": "Expandir o colapsar todos los grupos",
       "toggleFullscreen": "Alternar pantalla completa",
       "toggleGraphGrid": "Alternar vista de gráfico / cuadrícula",
+      "toggleGridCellSelection": "Agregar o quitar una $t(taskInstance_one) o 
un $t(taskGroup_one) de la selección (no tareas de bucle)",
+      "toggleLogLevel": "Alternar niveles de log",
       "toggleSource": "Alternar fuente",
       "toggleTaskGroup": "Expandir o colapsar $t(taskGroup_one)",
       "toggleTimestamp": "Alternar marcas de tiempo",
@@ -355,6 +410,7 @@
   "showDetailsPanel": "Mostrar Panel de Detalles",
   "signedInAs": "Sesión iniciada como",
   "slot": "Slot",
+  "slot_many": "Slots",
   "slot_one": "Slot",
   "slot_other": "Slots",
   "source": {
@@ -362,6 +418,7 @@
     "hotkey": "s",
     "show": "Mostrar Fuente"
   },
+  "sourceAssetEvent_many": "Eventos de Asset Fuente",
   "sourceAssetEvent_one": "Evento de Asset Fuente",
   "sourceAssetEvent_other": "Eventos de Asset Fuente",
   "startDate": "Fecha Inicial",
@@ -373,6 +430,7 @@
     "no_status": "Sin Estado",
     "none": "Sin Estado",
     "open": "Abierto",
+    "pending": "Pendiente",
     "planned": "Planificado",
     "queued": "En Cola",
     "removed": "Removido",
@@ -386,11 +444,14 @@
     "upstream_failed": "Fallido en Upstream"
   },
   "switchDag": "Cambiar de $t(dag_one)",
+  "switchDagRun": "Cambiar de $t(dagRun_one)",
+  "switchMapIndex": "Cambiar de $t(mapIndex)",
   "table": {
     "completedAt": "Completado en",
     "createdAt": "Creado en",
     "filterByTag": "Filtrar Dags por etiqueta",
     "filterColumns": "Filtrar columnas de la tabla",
+    "filterReset_many": "Restablecer filtros",
     "filterReset_one": "Restablecer filtro",
     "filterReset_other": "Restablecer filtros",
     "from": "Desde",
@@ -416,11 +477,13 @@
     "triggerRule": "Regla de Activación",
     "waitForDownstream": "Esperar Downstream"
   },
+  "task_many": "Tareas",
   "task_one": "Tarea",
   "task_other": "Tareas",
   "taskGroup": {
     "documentation": "Documentación del Grupo de Tareas"
   },
+  "taskGroup_many": "Grupos de Tareas",
   "taskGroup_one": "Grupo de Tareas",
   "taskGroup_other": "Grupos de Tareas",
   "taskId": "ID de la Tarea",
@@ -431,6 +494,9 @@
     "executorConfig": "Configuración del Executor",
     "hostname": "Nombre de Host",
     "id": "ID",
+    "iteration": "Iteración",
+    "loopDecision": "Decisión",
+    "loopIterations": "Iteraciones Ejecutadas",
     "maxTries": "Máximo de Intentos",
     "pid": "PID",
     "pool": "Pool",
@@ -439,7 +505,13 @@
     "queue": "Cola",
     "queuedWhen": "En Cola en",
     "renderedMapIndex": "Map Index Renderizado",
+    "retryAt": "Reintentar en",
     "scheduledWhen": "Programado en",
+    "stateReason": "Motivo del Estado",
+    "stateReasonSummary": {
+      "failed": "Detenido en el intento {{tryNumber}} de {{totalTries}}",
+      "upForRetry": "Reintentando después del intento {{tryNumber}} de 
{{totalTries}}"
+    },
     "trigger": "Trigger",
     "triggerer": {
       "assigned": "Triggerer Asignado",
@@ -452,18 +524,25 @@
     },
     "unixname": "Nombre de Unix"
   },
+  "taskInstance_many": "Instancias de Tarea",
   "taskInstance_one": "Instancia de Tarea",
   "taskInstance_other": "Instancias de Tarea",
   "teams": {
+    "more_many": "y {{count, number}} más",
     "more_one": "y {{count, number}} más",
     "more_other": "y {{count, number}} más",
     "none": "Sin equipo",
     "title": "Equipos"
   },
   "timeRange": {
+    "anyTime": "Cualquier Momento",
+    "in": "en",
+    "last7Days": "Últimos 7 Días",
     "last12Hours": "Últimas 12 Horas",
     "last24Hours": "Últimas 24 Horas",
+    "last30Days": "Últimos 30 Días",
     "lastHour": "Última Hora",
+    "latestRun": "Última Ejecución",
     "pastWeek": "Semana Pasada"
   },
   "timestamp": {
@@ -556,5 +635,6 @@
     "tooltip": "Presiona {{hotkey}} para alternar el 'envolver'",
     "unwrap": "Desenvolver",
     "wrap": "Envolver"
-  }
+  },
+  "yes": "Sí"
 }
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
index 06183fc5876..7559701e529 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/es/components.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/components.json
@@ -1,5 +1,6 @@
 {
   "backfill": {
+    "affected_many": "Se activarán {{count, number}} de ejecuciones.",
     "affected_one": "1 ejecución será activada.",
     "affected_other": "Se activarán {{count, number}} ejecuciones.",
     "affectedNone": "No hay ejecuciones que coincidan con los criterios 
seleccionados.",
@@ -18,6 +19,7 @@
     "notCreatedReason": "Motivo de No Creación",
     "overrideExistingParams": "Sobrescribir parámetros en ejecuciones 
existentes",
     "partitionRange": "Rango de Particiones",
+    "partitionsAffected_many": "Se aplicará backfill a {{count, number}} de 
particiones:",
     "partitionsAffected_one": "Se aplicará backfill a 1 partición:",
     "partitionsAffected_other": "Se aplicará backfill a {{count, number}} 
particiones:",
     "partitionsNone": "No hay particiones que coincidan con el rango 
seleccionado.",
@@ -65,6 +67,7 @@
       "runtime varying value": "Valor variable en tiempo de ejecución",
       "task group cycle": "Ciclo en el grupo de tareas"
     },
+    "warning_many": "{{count, number}} de Advertencias",
     "warning_one": "1 Advertencia",
     "warning_other": "{{count, number}} Advertencias"
   },
@@ -77,8 +80,10 @@
   },
   "durationChart": {
     "duration": "Duración (segundos)",
+    "lastDagRun_many": "Últimas {{count, number}} de Ejecuciones de Dag",
     "lastDagRun_one": "Última Ejecución de Dag",
     "lastDagRun_other": "Últimas {{count, number}} Ejecuciones de Dag",
+    "lastTaskInstance_many": "Últimas {{count, number}} de Instancias de 
Tarea",
     "lastTaskInstance_one": "Última Instancia de Tarea",
     "lastTaskInstance_other": "Últimas {{count, number}} Instancias de Tarea",
     "medianTotalDuration": "Total: {{duration}}",
@@ -87,6 +92,7 @@
     "runDuration": "Duración de la Ejecución"
   },
   "fileUpload": {
+    "files_many": "{{count, number}} de archivos",
     "files_one": "{{count, number}} archivo",
     "files_other": "{{count, number}} archivos"
   },
@@ -111,18 +117,26 @@
     "downloadImageError": "Error al descargar la imagen.",
     "downloadImageErrorTitle": "Descarga Fallida",
     "otherDagRuns": "+Otras Ejecuciones de Dag",
+    "taskCount_many": "{{count, number}} de Tareas",
     "taskCount_one": "{{count, number}} Tarea",
     "taskCount_other": "{{count, number}} Tareas",
     "taskGroup": "Grupo de Tareas",
     "zoomToTask": "Zoom a la tarea seleccionada"
   },
+  "jsonPreview": {
+    "items_many": "{{count, number}} de elementos",
+    "items_one": "1 elemento",
+    "items_other": "{{count, number}} elementos"
+  },
   "limitedList": "+{{count, number}} más",
   "limitedList.allItems": "Todos los {{count, number}} elementos:",
+  "limitedList.allTags_many": "Todas las Etiquetas ({{count, number}})",
   "limitedList.allTags_one": "Todas las Etiquetas (1)",
   "limitedList.allTags_other": "Todas las Etiquetas ({{count, number}})",
   "limitedList.clickToInteract": "Haz clic en una etiqueta para filtrar Dags",
   "limitedList.clickToOpenFull": "Haz clic en \"+{{count, number}} más\" para 
ver la lista completa",
   "limitedList.copyPasteText": "Puedes copiar y pegar el texto de arriba",
+  "limitedList.showingItems_many": "Mostrando {{count, number}} de elementos",
   "limitedList.showingItems_one": "Mostrando 1 elemento",
   "limitedList.showingItems_other": "Mostrando {{count, number}} elementos",
   "logs": {
@@ -133,11 +147,25 @@
     "hide": "Ocultar valor",
     "show": "Mostrar valor"
   },
+  "pausedDag": {
+    "drain": "Drenar",
+    "drainDescription": "Las ejecuciones sin terminar continúan, pero no se 
crean ejecuciones programadas. Los backfills pausados siguen pausados. El Dag 
se pausa de nuevo cuando todas las ejecuciones sin terminar finalizan.",
+    "keepPaused": "Mantener pausado",
+    "keepPausedDescription": "Las ejecuciones nuevas y las sin terminar 
esperan hasta que el Dag se reanude.",
+    "title": "El Dag está pausado",
+    "unfinishedRunsWillRun_many": "{{count, number}} de ejecuciones del Dag 
sin terminar se iniciarán o reanudarán.",
+    "unfinishedRunsWillRun_one": "1 ejecución del Dag sin terminar se iniciará 
o reanudará.",
+    "unfinishedRunsWillRun_other": "{{count, number}} ejecuciones del Dag sin 
terminar se iniciarán o reanudarán.",
+    "unpause": "Reanudar",
+    "unpauseDescription": "El Dag pasa a estar activo: las ejecuciones sin 
terminar continúan y la programación se reanuda. Los backfills pausados siguen 
pausados."
+  },
   "reparseDag": "Reanalizar Dag",
   "slowestTaskInstances": {
     "empty": "No hay instancias de tarea completadas en este rango",
     "title": "Instancias de Tarea Más Lentas"
   },
+  "sort": "ordenar",
+  "sortMultiColumnHint": "Mantén Shift y haz clic para ordenar por varias 
columnas",
   "sortedAscending": "ordenado ascendente",
   "sortedDescending": "ordenado descendente",
   "sortedUnsorted": "sin ordenar",
@@ -154,15 +182,24 @@
   "toggleTableView": "Mostrar vista de tabla",
   "triggerDag": {
     "button": "Trigger",
+    "dagStartEndDate": {
+      "both": "Fecha Inicial del Dag: {{startDate}}, Fecha Final: {{endDate}}",
+      "end": "Fecha Final del Dag: {{endDate}}",
+      "noTaskWillRun": "No se ejecutará ninguna tarea.",
+      "start": "Fecha Inicial del Dag: {{startDate}}"
+    },
     "dataInterval": "Intervalo de Datos",
     "dataIntervalAuto": "Inferido de la Fecha Lógica y la Programación",
     "dataIntervalManual": "Especificar Manualmente",
+    "editConfigAndTrigger": "Editar configuración y activar",
     "intervalEnd": "Fin",
     "intervalStart": "Inicio",
     "loading": "Cargando información del Dag...",
     "loadingFailed": "Error al cargar la información del Dag. Por favor, 
inténtalo de nuevo.",
     "manualRunDenied": "Las ejecuciones manuales no están permitidas para este 
Dag",
     "partitionKeyHelp": "Opcional - solo aplica a Dags particionados",
+    "recentConfig": "Configuraciones recientes",
+    "recentConfigPlaceholder": "Seleccionar una configuración reciente",
     "runIdHelp": "Opcional - se generará si no se proporciona",
     "selectDescription": "Activar una ejecución única de este Dag",
     "selectLabel": "Ejecución Única",
@@ -176,7 +213,8 @@
         "title": "Ejecución del Dag Activada"
       }
     },
-    "triggerAgainWithConfig": "Activar de nuevo con esta configuración"
+    "triggerAgainWithConfig": "Activar de nuevo con esta configuración",
+    "triggerOptions": "Opciones de activación"
   },
   "trimText": {
     "details": "Detalles",
@@ -193,6 +231,7 @@
   "versionSelect": {
     "allVersions": "Todas las Versiones",
     "dagVersion": "Versión del Dag",
+    "placeholder": "Seleccionar versión",
     "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
index 32b4e2ddd4e..80bfdc2d1f9 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/es/dag.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/dag.json
@@ -1,4 +1,5 @@
 {
+  "allMapIndexes": "Todos los Map Index",
   "allRuns": "Todas las Ejecuciones",
   "blockingDeps": {
     "dependency": "Dependencia",
@@ -6,6 +7,7 @@
     "title": "Dependencias que bloquean la tarea de ser programada"
   },
   "calendar": {
+    "backfill": "Backfill",
     "daily": "Diario",
     "hourly": "Cada hora",
     "legend": {
@@ -34,6 +36,22 @@
       "wednesday": "Mié"
     }
   },
+  "callbacks": {
+    "callback_many": "Callbacks",
+    "callback_one": "Callback",
+    "callback_other": "Callbacks",
+    "columns": {
+      "alertName": "Alerta de Plazo",
+      "callback": "Callback",
+      "deadlineTime": "Hora del Plazo",
+      "missedBy": "Incumplido por",
+      "type": "Tipo"
+    },
+    "types": {
+      "executor": "Síncrono",
+      "triggerer": "Asíncrono"
+    }
+  },
   "code": {
     "bundleUrl": "URL del Bundle",
     "noCode": "No se encontró código",
@@ -43,6 +61,7 @@
   "deadlineAlerts": {
     "completionRule": "Debe completarse dentro de {{interval}} de 
{{reference}}",
     "completionRuleDynamic": "Debe completarse dentro de un intervalo variable 
medido desde {{reference}}",
+    "count_many": "{{count, number}} de plazos",
     "count_one": "{{count, number}} plazo",
     "count_other": "{{count, number}} plazos",
     "referenceType": {
@@ -59,11 +78,13 @@
     "label": "Plazo",
     "met": "Cumplido",
     "missed": "Incumplido",
+    "missedCount_many": "{{count, number}} de Plazos Incumplidos",
     "missedCount_one": "{{count, number}} Plazo Incumplido",
     "missedCount_other": "{{count, number}} Plazos Incumplidos",
     "mixedCount": "{{missedCount, number}} Incumplidos, {{upcomingCount, 
number}} Próximos",
     "stillRunning": "Aún en ejecución",
     "upcoming": "Próximos",
+    "upcomingCount_many": "{{count, number}} de Plazos Próximos",
     "upcomingCount_one": "{{count, number}} Plazo Próximo",
     "upcomingCount_other": "{{count, number}} Plazos Próximos"
   },
@@ -100,9 +121,44 @@
       "placeholder": "Buscar en logs..."
     },
     "settings": "Configuración de Logs",
+    "tryNotStarted": "Este intento aún no ha comenzado.",
+    "viewFailedTry": "Ver los logs del intento fallido {{tryNumber}}",
     "viewInExternal": "Ver logs en {{name}} (intento {{attempt}})",
+    "viewPreviousTry": "Ver los logs del intento anterior {{tryNumber}}",
+    "waitingToRetry": "El intento {{tryNumber}} está esperando para 
reintentarse.",
     "warning": "ADVERTENCIA"
   },
+  "loop": {
+    "history": {
+      "capLabel": "Límite: {{max}}",
+      "iterationsAxis": "Iteraciones",
+      "stats": {
+        "capHits": "Alcanzaron el límite",
+        "medianIterations": "Mediana de iteraciones"
+      },
+      "title": "Iteraciones por ejecución"
+    },
+    "iterationLabel": "Iteración {{index}}",
+    "iterations": "Iteraciones",
+    "outcome": "Resultado",
+    "reason": {
+      "cap_reached": "Alcanzó el límite de iteraciones ({{max}})",
+      "failed": "Falló en la iteración {{index}}",
+      "iteration_failed": "La iteración {{index}} falló en {{taskId}}",
+      "ran_to_cap": "Ejecutó las {{max}} iteraciones permitidas",
+      "removed": "Removido",
+      "running": "En Ejecución",
+      "skipped": "Omitido",
+      "stopped_early": "Se detuvo antes en la iteración {{index}}"
+    },
+    "rules": {
+      "behaviour": "Comportamiento",
+      "boundedFor": "Ejecuta un número fijo de iteraciones",
+      "exitCriteria": "Criterio de salida",
+      "maxIterations": "Máximo de iteraciones",
+      "whileUntil": "Se repite hasta {{criteria}}"
+    }
+  },
   "notFound": {
     "back": "Volver",
     "backToDags": "Volver a Dags",
@@ -111,14 +167,18 @@
   },
   "overview": {
     "buttons": {
+      "failedRun_many": "Ejecuciones Fallidas",
       "failedRun_one": "Ejecución Fallida",
       "failedRun_other": "Ejecuciones Fallidas",
+      "failedTask_many": "Tareas Fallidas",
       "failedTask_one": "Tarea Fallida",
       "failedTask_other": "Tareas Fallidas",
+      "failedTaskInstance_many": "Instancias de Tarea Fallidas",
       "failedTaskInstance_one": "Instancia de Tarea Fallida",
       "failedTaskInstance_other": "Instancias de Tarea Fallidas"
     },
     "charts": {
+      "assetEvent_many": "Eventos de Asset Creados",
       "assetEvent_one": "Evento de Asset Creado",
       "assetEvent_other": "Eventos de Asset Creados"
     },
@@ -207,9 +267,11 @@
     "auditLog": "Log de Auditoría",
     "backfills": "Backfills",
     "calendar": "Calendario",
+    "callbacks": "Callbacks",
     "code": "Código",
     "details": "Detalles",
     "logs": "Logs",
+    "mappedTaskInstances_many": "Instancias de Tarea [{{count, number}}]",
     "mappedTaskInstances_one": "Instancia de Tarea [{{count, number}}]",
     "mappedTaskInstances_other": "Instancias de Tarea [{{count, number}}]",
     "overview": "Resumen",
@@ -219,6 +281,7 @@
     "taskInstances": "Instancias de Tarea",
     "taskStateStore": "Almacenamiento de Estado de Tarea",
     "tasks": "Tareas",
+    "versions": "Versiones",
     "xcom": "XCom"
   },
   "taskGroups": {
@@ -236,6 +299,7 @@
     "deleteWarning": "La tarea perderá esta memoria persistente. Si la tarea 
usa esta clave para hacer seguimiento de trabajo externo (p. ej., un ID de 
trabajo externo), no podrá reanudarlo.",
     "edit": "Editar Almacenamiento de Estado de Tarea",
     "emptyStore": "El almacenamiento de estado de tarea almacena valores que 
persisten entre reintentos. Los workers pueden escribir en el almacenamiento de 
estado de tarea mediante el Task SDK.",
+    "entry_many": "Entradas",
     "entry_one": "Entrada",
     "entry_other": "Entradas",
     "expiresAt": {
@@ -246,5 +310,75 @@
       "never": "Nunca"
     },
     "title": "Almacenamiento de Estado de Tarea"
+  },
+  "versions": {
+    "base": "Comparar desde",
+    "categories": {
+      "asset": "Asset",
+      "authorization": "Autorización",
+      "callback": "Callback",
+      "deadline": "Plazo",
+      "dependency": "Dependencia",
+      "metadata": "Metadata",
+      "param": "Parámetro",
+      "provenance": "Procedencia",
+      "schedule": "Programación",
+      "task": "Tarea",
+      "unknown": "Desconocido"
+    },
+    "codeAccess": "Los valores requieren acceso al código del Dag",
+    "columns": {
+      "after": "Después",
+      "before": "Antes",
+      "category": "Categoría",
+      "impact": "Impacto",
+      "operation": "Operación",
+      "path": "Ruta"
+    },
+    "heading": "Versión {{base}} → Versión {{target}}",
+    "impacts": {
+      "authorization": "Autorización",
+      "execution": "Ejecución",
+      "metadata": "Metadata",
+      "provenance": "Procedencia",
+      "unknown": "Desconocido"
+    },
+    "limitReached": {
+      "description": "Hay más cambios de los que permite el límite de Máximo 
de cambios. Aumenta el límite para ver el resto.",
+      "descriptionDefault": "Hay más cambios de los que permite el límite 
predeterminado. Aumenta el Máximo de cambios para ver el resto.",
+      "title": "Mostrando solo los primeros {{limit, number}} cambios"
+    },
+    "maxChanges": "Máximo de cambios",
+    "maxChangesDefault": "Predeterminado",
+    "noChanges": "Estas versiones tienen el mismo estado.",
+    "operations": {
+      "added": "Agregado",
+      "changed": "Modificado",
+      "removed": "Eliminado"
+    },
+    "pathOccurrences_many": "{{count, number}} de cambios comparten esta ruta",
+    "pathOccurrences_one": "{{count, number}} cambio comparte esta ruta",
+    "pathOccurrences_other": "{{count, number}} cambios comparten esta ruta",
+    "pathOccurrencesAtLeast_many": "Al menos {{count, number}} de cambios 
comparten esta ruta",
+    "pathOccurrencesAtLeast_one": "Al menos {{count, number}} cambio comparte 
esta ruta",
+    "pathOccurrencesAtLeast_other": "Al menos {{count, number}} cambios 
comparten esta ruta",
+    "record_many": "Registros",
+    "record_one": "Registro",
+    "record_other": "Registros",
+    "schemaChange": "Schema serializado {{baseSchema}} → {{targetSchema}}",
+    "selectPrompt": "Selecciona dos versiones para ver qué cambió entre 
ellas.",
+    "summary_many": "{{count, number}} de cambios",
+    "summary_one": "{{count, number}} cambio",
+    "summary_other": "{{count, number}} cambios",
+    "summaryAtLeast_many": "Al menos {{count, number}} de cambios",
+    "summaryAtLeast_one": "Al menos {{count, number}} cambio",
+    "summaryAtLeast_other": "Al menos {{count, number}} cambios",
+    "target": "Comparar con",
+    "unavailable": {
+      "description": "No se pudieron comparar estas versiones. Motivo:",
+      "title": "Comparación no disponible",
+      "withoutReason": "No se pudieron comparar estas versiones."
+    },
+    "valuesHidden": "Valores ocultos"
   }
 }
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
index e72ff240797..089adb3ceff 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/es/dags.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/dags.json
@@ -6,6 +6,11 @@
       "warning": "Esto eliminará toda la metadata relacionada con el Dag, 
incluyendo Ejecuciones y Tareas."
     }
   },
+  "draining": {
+    "badgeTooltip": "Este Dag se pausa cuando terminen sus ejecuciones en 
curso.",
+    "label": "Drenando",
+    "tooltip": "Drenando {{dagDisplayName}} — se pausa cuando terminen las 
ejecuciones en curso. Haz clic para reanudar."
+  },
   "favoriteDag": "Dag Favorito",
   "filters": {
     "allRunTypes": "Todos los Tipos de Ejecución",
@@ -27,9 +32,24 @@
     "pausedState": "Estado de Pausa",
     "requiresHitlAction": "Requiere Acción HITL",
     "runIdPatternFilter": "Buscar Ejecuciones de Dag",
+    "runState": "Estado de la Ejecución",
+    "runStatePlaceholder": "Seleccionar estado de la ejecución…",
     "timetableType": "Tipo de Programación"
   },
+  "folders": {
+    "all": "Todos los Dags",
+    "empty": "No hay carpetas",
+    "hide": "Ocultar carpetas",
+    "show": "Mostrar carpetas",
+    "title": "Carpetas"
+  },
   "ownerLink": "Enlace de Propietario para {{owner}}",
+  "recentTaskStateCounts": {
+    "description": "Estado de las tareas de todas las ejecuciones del Dag en 
curso o, si no hay ninguna en curso, de la ejecución más reciente. Puedes 
desactivarlo en tu configuración de usuario.",
+    "label": "Tareas recientes",
+    "loading": "Cargando los conteos de estados de tareas recientes",
+    "tooltip": "{{state}}: {{formattedCount}} — haz clic para filtrar tareas"
+  },
   "runAndTaskActions": {
     "affectedTasks": {
       "noItemsFound": "No se encontraron tareas.",
@@ -69,19 +89,23 @@
         "failed": "Presiona shift+f para marcar como fallido",
         "success": "Presiona shift+s para marcar como exitoso"
       },
+      "skippedInfo": "Marcar una instancia de tarea como omitida registra que 
no se ejecutó de forma intencional. Las tareas downstream se siguen evaluando 
según sus reglas de activación: con la regla predeterminada \"all_success\" 
también se omitirán. Solo se pueden omitir las instancias de tarea que aún no 
han comenzado a ejecutarse, y solo se ve afectada esta instancia de tarea.",
       "title": "Marcar {{type}} como {{state}}"
     },
     "options": {
       "downstream": "Downstream",
       "existingTasks": "Limpiar tareas existentes",
       "future": "Futuro",
+      "keepTaskState": "Conservar el estado de tarea y reanudar",
+      "laterIterations": "Iteraciones posteriores",
       "onlyFailed": "Limpiar solo tareas fallidas",
       "past": "Pasado",
       "preventRunningTasks": "Evitar reejecución si la tarea está en 
ejecución",
       "queueNew": "Poner en cola nuevas tareas",
       "runOnLatestVersion": "Ejecutar en la última versión del bundle",
       "runOnLatestVersionForced": "Siempre usa la última — no hay una versión 
anterior a la que volver",
-      "upstream": "Upstream"
+      "upstream": "Upstream",
+      "wholeExpansion": "Expansión completa"
     }
   },
   "runStateCounts": {
@@ -89,11 +113,23 @@
     "loading": "Cargando conteos de estados de ejecución",
     "tooltip": "{{state}}: {{formattedCount}} — haz clic para filtrar 
ejecuciones"
   },
+  "schedulingActions": {
+    "cancelDrain": "Cancelar el drenado",
+    "drain": "Drenar y luego pausar",
+    "drainPrompt": "Este Dag tiene ejecuciones en curso. Drenar permite que 
terminen antes de que el Dag se pause; pausar ahora detiene la programación de 
inmediato sin esperarlas.",
+    "pauseNow": "Pausar ahora",
+    "pauseSelected": "Pausar / Drenar"
+  },
+  "schedulingBanner": {
+    "message": "Este Dag se está drenando. Se pausará cuando terminen sus 
ejecuciones en curso."
+  },
   "search": {
     "advanced": "Búsqueda Avanzada",
     "clear": "Limpiar búsqueda",
+    "dagRuns": "Buscar $t(common:dagRun_other)",
     "dags": "Buscar Dags",
     "hotkey": "+K",
+    "mapIndexes": "Buscar $t(common:mapIndex)",
     "tasks": "Buscar Tareas"
   },
   "sort": {
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
index 609f6f9e967..89322cde4af 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/es/dashboard.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/dashboard.json
@@ -2,6 +2,7 @@
   "alerts": {
     "seeLessContext": "Ver menos",
     "seeMoreContext": "Ver más",
+    "showMoreAlerts_many": "+{{count, number}} de alertas más",
     "showMoreAlerts_one": "+{{count, number}} alerta más",
     "showMoreAlerts_other": "+{{count, number}} alertas más"
   },
@@ -20,6 +21,7 @@
   "deferredSlotsNotCounted": "Diferidos no contados en slots: {{count, 
number}}",
   "deferredSlotsNotCountedTooltip": "Las tareas diferidas mostradas en la 
barra se cuentan contra los slots del pool. Las tareas diferidas mostradas 
debajo de la barra provienen de pools que no cuentan las tareas diferidas 
contra los slots.",
   "favorite": {
+    "favoriteDags_many": "Primeros {{count, number}} de Dags Favoritos",
     "favoriteDags_one": "Primer {{count, number}} Dag Favorito",
     "favoriteDags_other": "Primeros {{count, number}} Dags Favoritos",
     "noDagRuns": "Aún no hay Ejecuciones de Dag para este Dag.",
@@ -28,17 +30,35 @@
   "group": "Grupo",
   "health": {
     "dagProcessor": "Procesador de Dags",
+    "degraded": "Degradado",
+    "degradedHint": {
+      "dagProcessor": "Algunos Dag bundles configurados no tienen un 
procesador de Dags que los analice.",
+      "triggerer": "Algunos equipos no tienen un triggerer ejecutando sus 
tareas diferidas."
+    },
+    "down": "Caído",
     "health": "Salud",
     "healthy": "Saludable",
+    "instances": {
+      "bundles": "Bundles",
+      "hostname": "Host",
+      "team": "Equipo",
+      "title_many": "{{title}} — {{status}} ({{count, number}} de instancias)",
+      "title_one": "{{title}} — {{status}} ({{count, number}} instancia)",
+      "title_other": "{{title}} — {{status}} ({{count, number}} instancias)",
+      "unknownHostname": "Host desconocido"
+    },
     "lastHeartbeat": "Último Heartbeat",
     "metaDatabase": "Base de datos de la metadata",
     "scheduler": "Programador",
     "status": "Estado",
     "triggerer": "Triggerer",
-    "unhealthy": "No Saludable"
+    "unhealthy": "No Saludable",
+    "unknownStatus": "Desconocido"
   },
   "history": "Historial",
   "importErrors": {
+    "bundle": "Bundle",
+    "dagImportError_many": "Errores de Importación de Dags",
     "dagImportError_one": "Error de Importación de Dag",
     "dagImportError_other": "Errores de Importación de Dags",
     "searchByFile": "Buscar por archivo",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/es/hitl.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/es/hitl.json
index 8d6761021ce..14db5625bac 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/es/hitl.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/hitl.json
@@ -8,8 +8,10 @@
       "received": "Revisadas"
     }
   },
+  "requiredAction_many": "Acciones Requeridas",
   "requiredAction_one": "Acción Requerida",
   "requiredAction_other": "Acciones Requeridas",
+  "requiredActionCount_many": "Acciones Requeridas ({{count, number}})",
   "requiredActionCount_one": "Acción Requerida ({{count, number}})",
   "requiredActionCount_other": "Acciones Requeridas ({{count, number}})",
   "requiredActionState": "Estado de Acción Requerida",
@@ -21,6 +23,7 @@
     "received": "Respuesta recibida en ",
     "respond": "Responder",
     "responded_by_user_name": "Respondido por (Nombre de Usuario)",
+    "selectAtLeastOne": "Selecciona al menos una opción",
     "success": "Respuesta de {{taskId}} exitosa",
     "title": "Instancia de Tarea Humana - {{taskId}}"
   },

Reply via email to