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: "한국어" },