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 13f230c7185 [RFC] Feat(ui): add italian translation + CODEOWNER 
(#52342)
13f230c7185 is described below

commit 13f230c7185b8afa35c59871c88c3f75769b3dec
Author: Aldo <[email protected]>
AuthorDate: Thu Sep 11 11:57:19 2025 -0300

    [RFC] Feat(ui): add italian translation + CODEOWNER (#52342)
    
    * feat: add italian translation
    
    * add italian into the dropdown
    
    * add second codeowner
    
    * apply feedback on dark/light mode
    
    * fix articoli irregolari
    
    * fix lint
    
    * reduce gap coverage
    
    * add plurals
    
    * add new keys
    
    * fix static check
---
 .github/CODEOWNERS                                 |   1 +
 .github/boring-cyborg.yml                          |   3 +
 .../airflow/ui/public/i18n/locales/it/admin.json   | 183 +++++++++++
 .../airflow/ui/public/i18n/locales/it/assets.json  |  30 ++
 .../airflow/ui/public/i18n/locales/it/browse.json  |  26 ++
 .../airflow/ui/public/i18n/locales/it/common.json  | 343 +++++++++++++++++++++
 .../ui/public/i18n/locales/it/components.json      | 150 +++++++++
 .../src/airflow/ui/public/i18n/locales/it/dag.json | 162 ++++++++++
 .../airflow/ui/public/i18n/locales/it/dags.json    |  97 ++++++
 .../ui/public/i18n/locales/it/dashboard.json       |  49 +++
 .../airflow/ui/public/i18n/locales/it/hitl.json    |  38 +++
 .../airflow/ui/public/i18n/locales/it/tasks.json   |  10 +
 airflow-core/src/airflow/ui/src/i18n/config.ts     |   1 +
 dev/i18n/check_translations_completeness.py        |   1 +
 14 files changed, 1094 insertions(+)

diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 1a7fe898951..3a80d90fa42 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -46,6 +46,7 @@ airflow-core/src/airflow/ui/public/i18n/locales/fr/ 
@pierrejeambrun @vincbeck
 airflow-core/src/airflow/ui/public/i18n/locales/he/ @eladkal @shahar1 
@romsharon98 # +@Dev-iL
 airflow-core/src/airflow/ui/public/i18n/locales/hi/ @vatsrahul1001
 airflow-core/src/airflow/ui/public/i18n/locales/hu/ @jscheffl @potiuk # 
+@majorosdonat
+airflow-core/src/airflow/ui/public/i18n/locales/it/ @bbovenzi # + @aoelvp94
 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
 airflow-core/src/airflow/ui/public/i18n/locales/pl/ @potiuk @mobuchowski # + 
@kacpermuda
diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml
index b7ea2675340..67c3d343826 100644
--- a/.github/boring-cyborg.yml
+++ b/.github/boring-cyborg.yml
@@ -396,6 +396,9 @@ labelPRBasedOnFilePath:
   translation:hu:
     - airflow-core/src/airflow/ui/public/i18n/locales/hu/*
 
+  translation:it:
+    - airflow-core/src/airflow/ui/public/i18n/locales/it/*
+
   translation:ko:
     - airflow-core/src/airflow/ui/public/i18n/locales/ko/*
 
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/it/admin.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/it/admin.json
new file mode 100644
index 00000000000..398f9496f97
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/admin.json
@@ -0,0 +1,183 @@
+{
+  "columns": {
+    "description": "Descrizione",
+    "key": "Chiave",
+    "name": "Nome",
+    "value": "Valore"
+  },
+  "config": {
+    "columns": {
+      "section": "Sezione"
+    },
+    "title": "Configurazione di Airflow"
+  },
+  "connections": {
+    "add": "Aggiungi Connessione",
+    "columns": {
+      "connectionId": "ID Connessione",
+      "connectionType": "Tipo di Connessione",
+      "host": "Host",
+      "port": "Port"
+    },
+    "connection_many": "Connessioni",
+    "connection_one": "Connessione",
+    "connection_other": "Connessioni",
+    "connection_zero": "Nessuna connessione",
+    "delete": {
+      "deleteConnection_many": "Elimina {{count}} connessioni",
+      "deleteConnection_one": "Elimina 1 connessione",
+      "deleteConnection_other": "Elimina {{count}} connessioni",
+      "deleteConnection_zero": "Nessuna connessione da eliminare",
+      "firstConfirmMessage_many": "Stai per eliminare le seguenti 
connessioni:",
+      "firstConfirmMessage_one": "Stai per eliminare la seguente connessione:",
+      "firstConfirmMessage_other": "Stai per eliminare le seguenti 
connessioni:",
+      "firstConfirmMessage_zero": "Nessuna connessione da eliminare:",
+      "title": "Elimina Connessione"
+    },
+    "edit": "Modifica Connessione",
+    "form": {
+      "connectionIdRequired": "L'ID della connessione è obbligatorio",
+      "connectionIdRequirement": "L'ID della connessione non può contenere 
solo spazi",
+      "connectionTypeRequired": "Il tipo di connessione è obbligatorio",
+      "extraFields": "Campi Extra",
+      "extraFieldsJson": "Campi Extra JSON",
+      "helperText": "Il tipo di connessione è mancante? Assicurati di aver 
installato il pacchetto corrispondente di Airflow Providers.",
+      "helperTextForRedactedFields": "I campi redatti ('***') rimarranno 
invariati se non modificati.",
+      "selectConnectionType": "Seleziona Tipo di Connessione",
+      "standardFields": "Campi Standard"
+    },
+    "nothingFound": {
+      "description": "Le connessioni definite tramite variabili d'ambiente o 
gestori di segreti non sono elencate qui.",
+      "documentationLink": "Scopri di più nella documentazione di Airflow.",
+      "learnMore": "Queste sono risolte in fase di runtime e non sono visibili 
nell'interfaccia utente.",
+      "title": "Nessuna connessione trovata!"
+    },
+    "searchPlaceholder": "Cerca Connessioni",
+    "test": "Test Connessione",
+    "testDisabled": "La funzione di test della connessione è disabilitata. Per 
favore contatta un amministratore per abilitarla.",
+    "typeMeta": {
+      "error": "Impossibile recuperare il tipo di connessione",
+      "standardFields": {
+        "description": "Descrizione",
+        "host": "Host",
+        "login": "Login",
+        "password": "Password",
+        "port": "Porta",
+        "url_schema": "Schema"
+      }
+    }
+  },
+  "deleteActions": {
+    "button": "Elimina",
+    "modal": {
+      "confirmButton": "Sì, Elimina",
+      "secondConfirmMessage": "Questa azione è permanente e non può essere 
annullata.",
+      "thirdConfirmMessage": "Confermi di voler procedere?"
+    },
+    "selected": "Selezionato",
+    "tooltip": "Elimina le connessioni selezionate"
+  },
+  "formActions": {
+    "reset": "Resetta",
+    "save": "Salva"
+  },
+  "plugins": {
+    "columns": {
+      "source": "Fonte"
+    },
+    "importError_many": "Errori di Importazione Plugin",
+    "importError_one": "Errore di Importazione Plugin",
+    "importError_other": "Errori di Importazione Plugin",
+    "importError_zero": "Nessun errore di importazione plugin",
+    "searchPlaceholder": "Cerca per file"
+  },
+  "pools": {
+    "add": "Aggiungi Pool",
+    "deferredSlotsIncluded": "Slots Deferiti Inclusi",
+    "delete": {
+      "title": "Elimina Pool",
+      "warning": "Questo rimuoverà tutti i metadati relativi al pool e 
potrebbe influenzare le tare che lo utilizzano."
+    },
+    "edit": "Modifica Pool",
+    "form": {
+      "checkbox": "Seleziona per includere le tare deferite quando si 
calcolano gli slot liberi del pool",
+      "description": "Descrizione",
+      "includeDeferred": "Includi Deferiti",
+      "nameMaxLength": "Il nome può contenere un massimo di 256 caratteri",
+      "nameRequired": "Il nome è obbligatorio",
+      "slots": "Slot"
+    },
+    "noPoolsFound": "Nessun pool trovato",
+    "pool_many": "Pools",
+    "pool_one": "Pool",
+    "pool_other": "Pools",
+    "pool_zero": "Nessun pool",
+    "searchPlaceholder": "Cerca Pools",
+    "sort": {
+      "asc": "Nome (A-Z)",
+      "desc": "Nome (Z-A)",
+      "placeholder": "Ordina per"
+    }
+  },
+  "providers": {
+    "columns": {
+      "packageName": "Nome del Pacchetto",
+      "version": "Versione"
+    }
+  },
+  "variables": {
+    "add": "Aggiungi Variabile",
+    "columns": {
+      "isEncrypted": "È Crittografata"
+    },
+    "delete": {
+      "deleteVariable_many": "Elimina {{count}} Variabili",
+      "deleteVariable_one": "Elimina 1 Variabile",
+      "deleteVariable_other": "Elimina {{count}} Variabili",
+      "deleteVariable_zero": "Nessuna variabile da eliminare",
+      "firstConfirmMessage_many": "Stai per eliminare le seguenti variabili:",
+      "firstConfirmMessage_one": "Stai per eliminare la seguente variabile:",
+      "firstConfirmMessage_other": "Stai per eliminare le seguenti variabili:",
+      "firstConfirmMessage_zero": "Nessuna variabile da eliminare:",
+      "title": "Elimina Variabile",
+      "tooltip": "Elimina le variabili selezionate"
+    },
+    "edit": "Modifica Variabile",
+    "export": "Esporta",
+    "exportTooltip": "Esporta le variabili selezionate",
+    "form": {
+      "invalidJson": "JSON non valido",
+      "keyMaxLength": "La chiave può contenere un massimo di 250 caratteri",
+      "keyRequired": "La chiave è obbligatoria",
+      "valueRequired": "Il valore è obbligatorio"
+    },
+    "import": {
+      "button": "Importa",
+      "conflictResolution": "Seleziona la risoluzione dei conflitti delle 
variabili",
+      "errorParsingJsonFile": "Errore nell'analisi del file JSON: Carica un 
file JSON contenente le variabili (es. {\"key\": \"value\", ...}).",
+      "options": {
+        "fail": {
+          "description": "Fallisce l'importazione se vengono rilevate 
variabili esistenti.",
+          "title": "Fallisci"
+        },
+        "overwrite": {
+          "description": "Sovrascrive la variabile in caso di conflitto.",
+          "title": "Sovrascrivi"
+        },
+        "skip": {
+          "description": "Salta l'importazione delle variabili che già 
esistono.",
+          "title": "Salta"
+        }
+      },
+      "title": "Importa Variabili",
+      "upload": "Carica un File JSON",
+      "uploadPlaceholder": "Carica un file JSON contenente le variabili (es. 
{\"key\": \"value\", ...})"
+    },
+    "noRowsMessage": "Nessuna variabile trovata",
+    "searchPlaceholder": "Cerca Chiavi",
+    "variable_many": "Variabili",
+    "variable_one": "Variabile",
+    "variable_other": "Variabili",
+    "variable_zero": "Nessuna variabile"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/it/assets.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/it/assets.json
new file mode 100644
index 00000000000..c19d3f3c752
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/assets.json
@@ -0,0 +1,30 @@
+{
+  "consumingDags": "Consuming Dags",
+  "createEvent": {
+    "button": "Create Event",
+    "manual": {
+      "description": "Manually create an Asset Event",
+      "extra": "Asset Event Extra",
+      "label": "Manual"
+    },
+    "materialize": {
+      "description": "Trigger the Dag upstream of this asset",
+      "descriptionWithDag": "Trigger the Dag upstream of this asset: 
{{dagName}}",
+      "label": "Materialize",
+      "unpauseDag": "Unpause {{dagName}} on trigger"
+    },
+    "success": {
+      "manualDescription": "Manual asset event creation was successful.",
+      "manualTitle": "Asset Event Created",
+      "materializeDescription": "Upstream Dag {{dagId}} was triggered 
successfully.",
+      "materializeTitle": "Materializing Asset"
+    },
+    "title": "Create Asset Event for {{name}}"
+  },
+  "group": "Group",
+  "lastAssetEvent": "Last Asset Event",
+  "name": "Name",
+  "producingTasks": "Producing Tasks",
+  "scheduledDags": "DAG Programmati",
+  "searchPlaceholder": "Search Assets"
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/it/browse.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/it/browse.json
new file mode 100644
index 00000000000..47b8b64b407
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/browse.json
@@ -0,0 +1,26 @@
+{
+  "auditLog": {
+    "actions": {
+      "collapseAllExtra": "Collassa tutti i json extra",
+      "expandAllExtra": "Espandi tutti i json extra"
+    },
+    "columns": {
+      "event": "Evento",
+      "extra": "Extra",
+      "user": "Utente",
+      "when": "Quando"
+    },
+    "filters": {
+      "eventType": "Tipo di Evento"
+    },
+    "title": "Registro di Controllo (Logs)"
+  },
+  "xcom": {
+    "columns": {
+      "dag": "DAG",
+      "key": "Chiave",
+      "value": "Valore"
+    },
+    "title": "XCom"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/it/common.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/it/common.json
new file mode 100644
index 00000000000..0f8ecb5603d
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/common.json
@@ -0,0 +1,343 @@
+{
+  "admin": {
+    "Config": "Configurazione",
+    "Connections": "Connessioni",
+    "Plugins": "Plugins",
+    "Pools": "Pools",
+    "Providers": "Provider",
+    "Variables": "Variabili"
+  },
+  "allOperators": "Tutti gli Operatori",
+  "appearance": {
+    "appearance": "Aspetto",
+    "darkMode": "Modalità scura",
+    "lightMode": "Modalità chiara",
+    "systemMode": "Segui impostazioni di sistema"
+  },
+  "asset_many": "Assets",
+  "asset_one": "Asset",
+  "asset_other": "Assets",
+  "asset_zero": "Nessun asset",
+  "assetEvent_many": "Eventi Asset",
+  "assetEvent_one": "Evento Asset",
+  "assetEvent_other": "Eventi Asset",
+  "assetEvent_zero": "Nessun evento asset",
+  "backfill_many": "Backfills",
+  "backfill_one": "Backfill",
+  "backfill_other": "Backfills",
+  "backfill_zero": "Nessun backfill",
+  "browse": {
+    "auditLog": "Registro di Controllo (Logs)",
+    "requiredActions": "Azioni Richieste",
+    "xcoms": "XComs"
+  },
+  "collapseDetailsPanel": "Collassa i Dettagli",
+  "createdAssetEvent_many": "Eventi Asset Creati",
+  "createdAssetEvent_one": "Evento Asset Creato",
+  "createdAssetEvent_other": "Eventi Asset Creati",
+  "createdAssetEvent_zero": "Nessun evento asset creato",
+  "dag_many": "DAGs",
+  "dag_one": "DAG",
+  "dag_other": "DAGs",
+  "dag_zero": "Nessun DAG",
+  "dagDetails": {
+    "catchup": "Catchup",
+    "dagRunTimeout": "Timeout del Run del DAG",
+    "defaultArgs": "Argomenti di Default",
+    "description": "Descrizione",
+    "documentation": "Documentazione del DAG",
+    "fileLocation": "Percorso del File",
+    "hasTaskConcurrencyLimits": "Ha Limiti di Concorrenza dei Task",
+    "lastExpired": "Ultimo Scaduto",
+    "lastParseDuration": "Durata dell'ultimo parsing",
+    "lastParsed": "Ultimo Parsed",
+    "latestDagVersion": "Ultima Versione del DAG",
+    "latestRun": "Ultimo Run del DAG",
+    "maxActiveRuns": "Numero massimo di Runs attive",
+    "maxActiveTasks": "Numero massimo di Tasks attive",
+    "maxConsecutiveFailedDagRuns": "Numero massimo di Runs falliti consecutivi 
del DAG",
+    "nextRun": "Prossimo Run",
+    "owner": "Proprietario",
+    "params": "Parametri",
+    "schedule": "Programmazione",
+    "tags": "Tag"
+  },
+  "dagId": "ID del DAG",
+  "dagRun": {
+    "conf": "Conf",
+    "dagVersions": "Versioni del DAG",
+    "dataIntervalEnd": "Data Intervallo Fine",
+    "dataIntervalStart": "Data Intervallo Inizio",
+    "lastSchedulingDecision": "Ultima Decisione di Programmazione",
+    "queuedAt": "In Coda il",
+    "runAfter": "Esegui dopo",
+    "runType": "Tipo di Run",
+    "sourceAssetEvent": "Evento Asset di Origine",
+    "triggeredBy": "Triggered da",
+    "triggeringUser": "Nome Utente che ha Attivato"
+  },
+  "dagRun_many": "Run del DAG",
+  "dagRun_one": "Run del DAG",
+  "dagRun_other": "Run del DAG",
+  "dagRun_zero": "Nessun run del DAG",
+  "dagRunId": "ID del Run del DAG",
+  "dagWarnings": "Avvisi/Errori del DAG",
+  "defaultToGraphView": "Default to vista grafica",
+  "defaultToGridView": "Default to vista griglia",
+  "direction": "Direzione",
+  "docs": {
+    "documentation": "Documentazione",
+    "githubRepo": "Repository GitHub",
+    "restApiReference": "Riferimento API REST"
+  },
+  "duration": "Durata",
+  "endDate": "Data di Fine",
+  "error": {
+    "back": "Indietro",
+    "defaultMessage": "Si è verificato un errore imprevisto",
+    "home": "Home",
+    "notFound": "Pagina non trovata",
+    "title": "Errore"
+  },
+  "expand": {
+    "collapse": "Collassa",
+    "expand": "Espandi",
+    "hotkey": "e",
+    "tooltip": "Premi {{hotkey}} per attivare/disattivare espansione"
+  },
+  "expression": {
+    "all": "Tutti",
+    "and": "E",
+    "any": "Qualunque",
+    "or": "O"
+  },
+  "filters": {
+    "dagDisplayNamePlaceholder": "Filtra per DAG",
+    "keyPlaceholder": "Filtra per chiave XCom",
+    "logicalDateFromPlaceholder": "Data Logica Da",
+    "logicalDateToPlaceholder": "Data Logica A",
+    "mapIndexPlaceholder": "Filtra per Map Index",
+    "runAfterFromPlaceholder": "Esegui Dopo Da",
+    "runAfterToPlaceholder": "Esegui Dopo A",
+    "runIdPlaceholder": "Filtra per ID Run",
+    "taskIdPlaceholder": "Filtra per ID Task",
+    "triggeringUserPlaceholder": "Filtra per utente scatenante"
+  },
+  "logicalDate": "Data Logica",
+  "logout": "Esci",
+  "logoutConfirmation": "Stai per uscire dall'applicazione.",
+  "mapIndex": "Mappa Index",
+  "modal": {
+    "cancel": "Annulla",
+    "confirm": "Conferma",
+    "delete": {
+      "button": "Elimina",
+      "confirmation": "Confermi di voler eliminare {{resourceName}}? Questa 
azione non può essere annullata."
+    }
+  },
+  "nav": {
+    "admin": "Amministrazione",
+    "assets": "Asset",
+    "browse": "Sfoglia",
+    "dags": "DAG",
+    "docs": "Documentazione",
+    "home": "Home",
+    "legacyFabViews": "Legacy View",
+    "plugins": "Plugins",
+    "security": "Sicurezza"
+  },
+  "noItemsFound": "Nessun {{modelName}} trovato",
+  "note": {
+    "add": "Aggiungi una nota",
+    "dagRun": "Nota del Run del DAG",
+    "label": "Note",
+    "placeholder": "Aggiungi una nota...",
+    "taskInstance": "Nota dell'Istanza di Task"
+  },
+  "pools": {
+    "deferred": "In Attesa",
+    "open": "Aperto",
+    "pools_many": "Pools",
+    "pools_one": "Pool",
+    "pools_other": "Pools",
+    "pools_zero": "Nessun pool",
+    "queued": "In Coda",
+    "running": "In Esecuzione",
+    "scheduled": "Programmato"
+  },
+  "runId": "ID del Run",
+  "runTypes": {
+    "asset_triggered": "Asset Triggered",
+    "backfill": "Backfill",
+    "manual": "Manuale",
+    "scheduled": "Programmato"
+  },
+  "scroll": {
+    "direction": {
+      "bottom": "In basso",
+      "top": "In alto"
+    },
+    "tooltip": "Premi {{hotkey}} per scorrere a {{direction}}"
+  },
+  "seconds": "{{count}}s",
+  "security": {
+    "actions": "Azioni",
+    "permissions": "Permessi",
+    "resources": "Risorse",
+    "roles": "Ruoli",
+    "users": "Utenti"
+  },
+  "selectLanguage": "Seleziona la Lingua",
+  "showDetailsPanel": "Mostra il Pannello dei Dettagli",
+  "source": {
+    "hide": "Nascondi Sorgente",
+    "hotkey": "s",
+    "show": "Mostra Sorgente"
+  },
+  "sourceAssetEvent_many": "Eventi Asset di Origine",
+  "sourceAssetEvent_one": "Evento Asset di Origine",
+  "sourceAssetEvent_other": "Eventi Asset di Origine",
+  "sourceAssetEvent_zero": "Nessun evento asset di origine",
+  "startDate": "Data di Inizio",
+  "state": "Stato",
+  "states": {
+    "deferred": "In Attesa",
+    "failed": "Fallito",
+    "no_status": "Nessun Stato",
+    "none": "Nessun Stato",
+    "planned": "Pianificato",
+    "queued": "In Coda",
+    "removed": "Rimosso",
+    "restarting": "Riavviato",
+    "running": "In Esecuzione",
+    "scheduled": "Programmato",
+    "skipped": "Saltato",
+    "success": "Successo",
+    "up_for_reschedule": "Da Reschedulare",
+    "up_for_retry": "Da Riavviare",
+    "upstream_failed": "Upstream Fallito"
+  },
+  "table": {
+    "completedAt": "Completato il",
+    "createdAt": "Creato il",
+    "filterByTag": "Filtra DAG per tag",
+    "filterColumns": "Filtra le colonne della tabella",
+    "filterReset_many": "Resetta filtri",
+    "filterReset_one": "Resetta filtro",
+    "filterReset_other": "Resetta filtri",
+    "filterReset_zero": "Nessun filtro da resettare",
+    "from": "Da",
+    "maxActiveRuns": "Numero massimo di Runs attive",
+    "noTagsFound": "Nessun tag trovato",
+    "tagMode": {
+      "all": "Tutti",
+      "any": "Qualunque"
+    },
+    "tagPlaceholder": "Filtra per tag",
+    "to": "A"
+  },
+  "task": {
+    "documentation": "Documentazione del Task",
+    "lastInstance": "Ultima Istanza",
+    "operator": "Operatore",
+    "triggerRule": "Regola di Trigger"
+  },
+  "task_many": "Tasks",
+  "task_one": "Task",
+  "task_other": "Tasks",
+  "task_zero": "Nessun task",
+  "taskGroup": "Gruppo di Task",
+  "taskId": "ID del Task",
+  "taskInstance": {
+    "dagVersion": "Versione del DAG",
+    "executor": "Executor",
+    "executorConfig": "Configurazione dell'Executor",
+    "hostname": "Nome delHost",
+    "maxTries": "Numero massimo di Tentativi",
+    "pid": "PID",
+    "pool": "Pool",
+    "poolSlots": "Slot del Pool",
+    "priorityWeight": "Peso di Priorità",
+    "queue": "Coda",
+    "queuedWhen": "In Coda il",
+    "scheduledWhen": "Programmato il",
+    "triggerer": {
+      "assigned": "Triggerer Assegnato",
+      "class": "Classe del Trigger",
+      "createdAt": "Creato il",
+      "id": "ID del Trigger",
+      "latestHeartbeat": "Ultimo Heartbeat del Trigger",
+      "title": "Info del Trigger"
+    },
+    "unixname": "Nome Unix"
+  },
+  "taskInstance_many": "Istanze di Task",
+  "taskInstance_one": "Istanza di Task",
+  "taskInstance_other": "Istanze di Task",
+  "taskInstance_zero": "Nessuna istanza di task",
+  "timeRange": {
+    "last12Hours": "Ultimi 12 Ore",
+    "last24Hours": "Ultimi 24 Ore",
+    "lastHour": "Ultima Ora",
+    "pastWeek": "Settimana Scorsa"
+  },
+  "timestamp": {
+    "hide": "Nascondi Timestamp",
+    "hotkey": "t",
+    "show": "Mostra Timestamp"
+  },
+  "timezone": "Fuso Orario",
+  "timezoneModal": {
+    "current-timezone": "Ora corrente in",
+    "placeholder": "Seleziona un fuso orario",
+    "title": "Seleziona il Fuso Orario",
+    "utc": "UTC (Tempo Coordinato Universale)"
+  },
+  "toaster": {
+    "bulkDelete": {
+      "error": "Eliminazione in Massa di {{resourceName}} Fallita",
+      "success": {
+        "description": "{{count}} {{resourceName}} sono stati eliminati con 
successo. Chiavi: {{keys}}",
+        "title": "Eliminazione in Massa di {{resourceName}} Richiesta Inviata"
+      }
+    },
+    "create": {
+      "error": "Creazione di {{resourceName}} Fallita",
+      "success": {
+        "description": "{{resourceName}} è stato creato con successo.",
+        "title": "Creazione di {{resourceName}} Richiesta Inviata"
+      }
+    },
+    "delete": {
+      "error": "Eliminazione di {{resourceName}} Fallita",
+      "success": {
+        "description": "{{resourceName}} è stato eliminato con successo.",
+        "title": "Eliminazione di {{resourceName}} Richiesta Inviata"
+      }
+    },
+    "import": {
+      "error": "Importazione di {{resourceName}} Fallita",
+      "success": {
+        "description": "{{count}} {{resourceName}} sono stati importati con 
successo.",
+        "title": "Importazione di {{resourceName}} Richiesta Inviata"
+      }
+    },
+    "update": {
+      "error": "Aggiornamento di {{resourceName}} Fallita",
+      "success": {
+        "description": "{{resourceName}} è stato aggiornato con successo.",
+        "title": "Aggiornamento di {{resourceName}} Richiesta Inviata"
+      }
+    }
+  },
+  "total": "Totale {{state}}",
+  "triggered": "Triggered",
+  "tryNumber": "Numero di Tentativo",
+  "user": "Utente",
+  "wrap": {
+    "hotkey": "w",
+    "tooltip": "Premi {{hotkey}} per abilitare il wrap",
+    "unwrap": "Disabilita il wrap",
+    "wrap": "Abilita il wrap"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/it/components.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/it/components.json
new file mode 100644
index 00000000000..ed4e21766ba
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/components.json
@@ -0,0 +1,150 @@
+{
+  "backfill": {
+    "affected_many": "{{count}} runs verranno attivati.",
+    "affected_one": "1 run verrà attivato.",
+    "affected_other": "{{count}} runs verranno attivati.",
+    "affected_zero": "Nessun run verrà attivato.",
+    "affectedNone": "Nessun run corrispondente ai criteri selezionati.",
+    "allRuns": "Tutti i Run",
+    "backwards": "Run all'indietro",
+    "dateRange": "Intervallo di Date",
+    "dateRangeFrom": "Da",
+    "dateRangeTo": "A",
+    "errorStartDateBeforeEndDate": "La Data di Inizio deve essere precedente 
alla Data di Fine",
+    "maxRuns": "Numero massimo di Runs attive",
+    "missingAndErroredRuns": "Run Mancanti ed Errati",
+    "missingRuns": "Run Mancanti",
+    "reprocessBehavior": "Comportamento di Reprocesso",
+    "run": "Correre Backfill",
+    "selectDescription": "Esegui questo DAG per un intervallo di date",
+    "selectLabel": "Backfill",
+    "title": "Correre Backfill",
+    "toaster": {
+      "success": {
+        "description": "Backfill jobs sono stati attivati con successo.",
+        "title": "Backfill generato"
+      }
+    },
+    "tooltip": "Backfill richiede un programma",
+    "unpause": "Sospendi {{dag_display_name}} al trigger",
+    "validation": {
+      "datesRequired": "Devi fornire sia la Data di Inizio che la Data di 
Fine.",
+      "startBeforeEnd": "La Data di Inizio deve essere precedente o uguale 
alla Data di Fine."
+    }
+  },
+  "banner": {
+    "backfillInProgress": "Backfill in corso",
+    "cancel": "Annulla backfill",
+    "pause": "Sospendi backfill",
+    "unpause": "Sospendi backfill"
+  },
+  "clipboard": {
+    "copy": "Copia"
+  },
+  "close": "Chiudi",
+  "configForm": {
+    "advancedOptions": "Opzioni Avanzate",
+    "configJson": "Configurazione JSON",
+    "invalidJson": "Formato JSON non valido: {{errorMessage}}"
+  },
+  "dagWarnings": {
+    "error_many": "{{count}} Errori",
+    "error_one": "1 Errore",
+    "error_other": "{{count}} Errori",
+    "error_zero": "Nessun errore",
+    "errorAndWarning": "1 Errore e {{warningText}}",
+    "warning_many": "{{count}} Avvisi",
+    "warning_one": "1 Avviso",
+    "warning_other": "{{count}} Avvisi",
+    "warning_zero": "Nessun avviso"
+  },
+  "durationChart": {
+    "duration": "Durata (secondi)",
+    "lastDagRun_many": "Ultimi {{count}} Run del DAG",
+    "lastDagRun_one": "Ultimo Run del DAG",
+    "lastDagRun_other": "Ultimi {{count}} Run del DAG",
+    "lastDagRun_zero": "Nessun run del DAG",
+    "lastTaskInstance_many": "Ultime {{count}} Istanze di Task",
+    "lastTaskInstance_one": "Ultima Istanza di Task",
+    "lastTaskInstance_other": "Ultime {{count}} Istanze di Task",
+    "lastTaskInstance_zero": "Nessuna istanza di task",
+    "queuedDuration": "Durata in coda",
+    "runAfter": "Esegui dopo",
+    "runDuration": "Durata del Run"
+  },
+  "fileUpload": {
+    "files_many": "{{count}} file",
+    "files_one": "1 file",
+    "files_other": "{{count}} file",
+    "files_zero": "Nessun file"
+  },
+  "flexibleForm": {
+    "placeholder": "Seleziona Valore",
+    "placeholderArray": "Inserisci ogni stringa su una nuova riga",
+    "placeholderExamples": "Inizia a digitare per vedere le opzioni",
+    "placeholderMulti": "Seleziona uno o più valori",
+    "validationErrorArrayNotArray": "Il valore deve essere un array.",
+    "validationErrorArrayNotNumbers": "Tutti gli elementi dell'array devono 
essere numeri.",
+    "validationErrorArrayNotObject": "Tutti gli elementi dell'array devono 
essere oggetti.",
+    "validationErrorRequired": "Questo campo è obbligatorio"
+  },
+  "graph": {
+    "directionDown": "Da Superiore a Inferiore",
+    "directionLeft": "Da Destra a Sinistra",
+    "directionRight": "Da Sinistra a Destra",
+    "directionUp": "Da Inferiore a Superiore",
+    "downloadImage": "Scarica l'immagine del grafico",
+    "downloadImageError": "Impossibile scaricare l'immagine del grafico.",
+    "downloadImageErrorTitle": "Scaricamento Fallito",
+    "otherDagRuns": "+Altri Run del DAG",
+    "taskCount_many": "{{count}} Tasks",
+    "taskCount_one": "{{count}} Task",
+    "taskCount_other": "{{count}} Tasks",
+    "taskCount_zero": "Nessun task",
+    "taskGroup": "Task Group"
+  },
+  "limitedList": "+{{count}} altro",
+  "logs": {
+    "file": "File",
+    "location": "linea {{line}} in {{name}}"
+  },
+  "reparseDag": "Reparse Dag",
+  "sortedAscending": "ordinato in ordine crescente",
+  "sortedDescending": "ordinato in ordine decrescente",
+  "sortedUnsorted": "non ordinato",
+  "taskTries": "Tentativi di Task",
+  "toggleCardView": "Mostra la vista in card",
+  "toggleTableView": "Mostra la vista in tabella",
+  "triggerDag": {
+    "button": "Trigger",
+    "loading": "Caricamento informazioni del DAG...",
+    "loadingFailed": "Impossibile caricare le informazioni del DAG. Per 
favore, riprova.",
+    "runIdHelp": "Opzionale - verrà generato se non fornito",
+    "selectDescription": "Triggera un singolo run di questo DAG",
+    "selectLabel": "Singolo Run",
+    "title": "Trigger del DAG",
+    "toaster": {
+      "success": {
+        "description": "Il run del DAG è stato attivato con successo.",
+        "title": "Run del DAG attivato"
+      }
+    },
+    "unpause": "Sospendi {{dagDisplayName}} al trigger"
+  },
+  "trimText": {
+    "details": "Dettagli",
+    "empty": "Vuoto",
+    "noContent": "Nessun contenuto disponibile."
+  },
+  "versionDetails": {
+    "bundleLink": "Link del Bundle",
+    "bundleName": "Nome del Bundle",
+    "bundleVersion": "Versione del Bundle",
+    "createdAt": "Creato il",
+    "versionId": "ID della Versione"
+  },
+  "versionSelect": {
+    "dagVersion": "Versione del DAG",
+    "versionCode": "v{{versionCode}}"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/it/dag.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/it/dag.json
new file mode 100644
index 00000000000..24dbeba3a07
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/dag.json
@@ -0,0 +1,162 @@
+{
+  "allRuns": "Tutti i Run",
+  "blockingDeps": {
+    "dependency": "Dipendenza",
+    "reason": "Motivo",
+    "title": "Dipendenze che bloccano la Task da essere pianificata"
+  },
+  "calendar": {
+    "daily": "Giornaliero",
+    "hourly": "Orario",
+    "legend": {
+      "less": "Meno",
+      "more": "Più"
+    },
+    "navigation": {
+      "nextMonth": "Mese successivo",
+      "nextYear": "Anno successivo",
+      "previousMonth": "Mese precedente",
+      "previousYear": "Anno precedente"
+    },
+    "noData": "Nessun dato disponibile",
+    "noRuns": "Nessun run",
+    "totalRuns": "Run Totali",
+    "week": "Settimana {{weekNumber}}",
+    "weekdays": {
+      "friday": "Ven",
+      "monday": "Lun",
+      "saturday": "Sab",
+      "sunday": "Dom",
+      "thursday": "Gio",
+      "tuesday": "Mar",
+      "wednesday": "Mer"
+    }
+  },
+  "code": {
+    "bundleUrl": "URL del Bundle",
+    "noCode": "Nessun Codice Trovato",
+    "parseDuration": "Durata del parsing",
+    "parsedAt": "Parsato il:"
+  },
+  "extraLinks": "Extra Links",
+  "grid": {
+    "buttons": {
+      "resetToLatest": "Resetta al più recente",
+      "toggleGroup": "Attiva/Disattiva gruppo"
+    }
+  },
+  "header": {
+    "buttons": {
+      "advanced": "Avanzato",
+      "dagDocs": "Documentazione DAG"
+    }
+  },
+  "logs": {
+    "allLevels": "Tutti i Livelli di Log",
+    "allSources": "Tutte le Fonti",
+    "critical": "CRITICO",
+    "debug": "DEBUG",
+    "error": "ERRORE",
+    "fullscreen": {
+      "button": "Schermo Intero",
+      "tooltip": "Premi {{hotkey}} per schermo intero"
+    },
+    "info": "INFO",
+    "noTryNumber": "Nessun numero di tentativo",
+    "settings": "Impostazioni Log",
+    "viewInExternal": "Visualizza i logs in {{name}} (tentativo {{attempt}})",
+    "warning": "AVVISO"
+  },
+  "navigation": {
+    "navigation": "Navigazione: Shift+{{arrow}}",
+    "toggleGroup": "Attiva/Disattiva gruppo: Spazio"
+  },
+  "overview": {
+    "buttons": {
+      "failedRun_many": "Run falliti",
+      "failedRun_one": "Run fallito",
+      "failedRun_other": "Run falliti",
+      "failedRun_zero": "Nessun Run fallito",
+      "failedTask_many": "Task falliti",
+      "failedTask_one": "Task fallito",
+      "failedTask_other": "Task falliti",
+      "failedTask_zero": "Nessun Task fallito",
+      "failedTaskInstance_many": "Istanze di Task fallite",
+      "failedTaskInstance_one": "Istanza di Task fallita",
+      "failedTaskInstance_other": "Istanze di Task fallite",
+      "failedTaskInstance_zero": "Nessuna istanza di Task fallita"
+    },
+    "charts": {
+      "assetEvent_many": "Eventi di Asset Creati",
+      "assetEvent_one": "Evento di Asset Creato",
+      "assetEvent_other": "Eventi di Asset Creati",
+      "assetEvent_zero": "Nessun evento di asset creato"
+    },
+    "failedLogs": {
+      "hideLogs": "Nascondi Logs",
+      "showLogs": "Mostra Logs",
+      "title": "Logs delle Task fallite recenti",
+      "viewFullLogs": "Visualizza i logs completi"
+    }
+  },
+  "panel": {
+    "buttons": {
+      "options": "Opzioni",
+      "showGantt": "Mostra Gantt",
+      "showGraphShortcut": "Mostra Grafico (Premi g)",
+      "showGridShortcut": "Mostra Griglia (Premi g)"
+    },
+    "dagRuns": {
+      "label": "Numero di Run del DAG"
+    },
+    "dependencies": {
+      "label": "Dipendenze",
+      "options": {
+        "allDagDependencies": "Tutte le Dipendenze del DAG",
+        "externalConditions": "Condizioni Esterne",
+        "onlyTasks": "Solo le Task"
+      },
+      "placeholder": "Dipendenze"
+    },
+    "graphDirection": {
+      "label": "Direzione del Grafico"
+    }
+  },
+  "paramsFailed": "Impossibile caricare i parametri",
+  "parse": {
+    "toaster": {
+      "error": {
+        "description": "La richiesta di parsing del DAG è fallita. Potrebbero 
esserci richieste di parsing in sospeso da processare.",
+        "title": "Parsing del DAG fallito"
+      },
+      "success": {
+        "description": "Il DAG dovrebbe essere riparsat presto.",
+        "title": "Richiesta di riparsing inviata con successo"
+      }
+    }
+  },
+  "tabs": {
+    "assetEvents": "Eventi di Asset",
+    "auditLog": "Registro di Controllo (Logs)",
+    "backfills": "Backfills",
+    "calendar": "Calendario",
+    "code": "Codice",
+    "details": "Dettagli",
+    "logs": "Logs",
+    "mappedTaskInstances_many": "Istanze di Task [{{count}}]",
+    "mappedTaskInstances_one": "Istanza di Task [{{count}}]",
+    "mappedTaskInstances_other": "Istanze di Task [{{count}}]",
+    "mappedTaskInstances_zero": "Nessuna istanza di task mappata",
+    "overview": "Panoramica",
+    "renderedTemplates": "Template Renderizzato",
+    "requiredActions": "Azioni Richieste",
+    "runs": "Run",
+    "taskInstances": "Istanze di Task",
+    "tasks": "Tasks",
+    "xcom": "XCom"
+  },
+  "taskGroups": {
+    "collapseAll": "Collassa tutti i gruppi di task",
+    "expandAll": "Espandi tutti i gruppi di task"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/it/dags.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/it/dags.json
new file mode 100644
index 00000000000..23443f1ce67
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/dags.json
@@ -0,0 +1,97 @@
+{
+  "assetSchedule": "{{count}} di {{total}} assets aggiornati",
+  "dagActions": {
+    "delete": {
+      "button": "Elimina DAG",
+      "warning": "Questo rimuoverà tutti i metadati relativi al DAG, compresi 
i Run e le Task."
+    }
+  },
+  "favoriteDag": "DAG Preferito",
+  "filters": {
+    "allRunTypes": "Tutti i Tipi di Run",
+    "allStates": "Tutti gli Stati",
+    "favorite": {
+      "all": "Tutti",
+      "favorite": "Preferito",
+      "unfavorite": "Rimuovi dai preferiti"
+    },
+    "paused": {
+      "active": "Attivo",
+      "all": "Tutti",
+      "paused": "In Pausa"
+    },
+    "runIdPatternFilter": "Cerca DAG Runs",
+    "triggeringUserNameFilter": "Cerca per Utente che ha Attivato"
+  },
+  "ownerLink": "Link dell'Owner per {{owner}}",
+  "runAndTaskActions": {
+    "affectedTasks": {
+      "noItemsFound": "Nessuna task trovata.",
+      "title": "Task interessati: {{count}}"
+    },
+    "clear": {
+      "button": "Pulisci {{type}}",
+      "buttonTooltip": "Premi shift+c per pulire",
+      "error": "Impossibile pulire {{type}}",
+      "title": "Pulisci {{type}}"
+    },
+    "delete": {
+      "button": "Elimina {{type}}",
+      "dialog": {
+        "resourceName": "{{type}} {{id}}",
+        "title": "Elimina {{type}}",
+        "warning": "Questo rimuoverà tutti i metadati relativi a {{type}}."
+      },
+      "error": "Errore nell'eliminazione di {{type}}",
+      "success": {
+        "description": "La richiesta di eliminazione di {{type}} è stata 
completata con successo.",
+        "title": "{{type}} Eliminato con Successo"
+      }
+    },
+    "markAs": {
+      "button": "Marca {{type}} come...",
+      "buttonTooltip": {
+        "failed": "Premi shift+f per marcare come fallito",
+        "success": "Premi shift+s per marcare come successo"
+      },
+      "title": "Marca {{type}} come {{state}}"
+    },
+    "options": {
+      "downstream": "Downstream",
+      "existingTasks": "Pulisci le task esistenti",
+      "future": "Futuro",
+      "onlyFailed": "Pulisci solo le task fallite",
+      "past": "Passato",
+      "queueNew": "Inserisci nuove task",
+      "runOnLatestVersion": "Esegui con l'ultima versione del bundle",
+      "upstream": "Upstream"
+    }
+  },
+  "search": {
+    "advanced": "Ricerca Avanzata",
+    "clear": "Pulisci la ricerca",
+    "dags": "Cerca DAG",
+    "hotkey": "+K",
+    "tasks": "Cerca Task"
+  },
+  "sort": {
+    "displayName": {
+      "asc": "Ordina per Nome (A-Z)",
+      "desc": "Ordina per Nome (Z-A)"
+    },
+    "lastRunStartDate": {
+      "asc": "Ordina per Data di Inizio del Run più Recente (Prima-Ultimo)",
+      "desc": "Ordina per Data di Inizio del Run più Recente (Ultimo-Prima)"
+    },
+    "lastRunState": {
+      "asc": "Ordina per Stato del Run più Recente (A-Z)",
+      "desc": "Ordina per Stato del Run più Recente (Z-A)"
+    },
+    "nextDagRun": {
+      "asc": "Ordina per Next DAG Run (Prima-Ultimo)",
+      "desc": "Ordina per Next DAG Run (Ultimo-Prima)"
+    },
+    "placeholder": "Ordina per"
+  },
+  "unfavoriteDag": "Rimuovi DAG dai Preferiti"
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/it/dashboard.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/it/dashboard.json
new file mode 100644
index 00000000000..12a236e561b
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/dashboard.json
@@ -0,0 +1,49 @@
+{
+  "favorite": {
+    "favoriteDags_many": "{{count}} DAGs preferiti",
+    "favoriteDags_one": "Primo {{count}} DAG preferito",
+    "favoriteDags_other": "Primi {{count}} DAGs preferiti",
+    "favoriteDags_zero": "Nessun DAG preferito",
+    "noDagRuns": "Non ci sono ancora DagRun per questo dag.",
+    "noFavoriteDags": "Nessun preferito ancora. Clicca sull'icona stella 
accanto a un Dag nella lista per aggiungerlo ai tuoi preferiti."
+  },
+  "group": "Gruppo",
+  "health": {
+    "dagProcessor": "Processore DAG",
+    "health": "Salute",
+    "healthy": "Sano",
+    "lastHeartbeat": "Ultimo Heartbeat",
+    "metaDatabase": "Database di metadati",
+    "scheduler": "Pianificatrice",
+    "status": "Stato",
+    "triggerer": "Triggerer",
+    "unhealthy": "Malato"
+  },
+  "history": "Cronologia",
+  "importErrors": {
+    "dagImportError_many": "Errori di Importazione DAG",
+    "dagImportError_one": "Errore di Importazione DAG",
+    "dagImportError_other": "Errori di Importazione DAG",
+    "dagImportError_zero": "Nessun errore di importazione DAG",
+    "searchByFile": "Cerca per file",
+    "timestamp": "Timestamp"
+  },
+  "managePools": "Gestisci Pools",
+  "noAssetEvents": "Nessun evento di asset trovato.",
+  "poolSlots": "Slot del Pool",
+  "sortBy": {
+    "newestFirst": "Più Recenti",
+    "oldestFirst": "Più Vecchi"
+  },
+  "source": "Fonte",
+  "stats": {
+    "activeDags": "DAG Attivi",
+    "failedDags": "DAG Falliti",
+    "queuedDags": "DAG In Attesa",
+    "requiredActions": "Azioni Richieste",
+    "runningDags": "DAG In Esecuzione",
+    "stats": "Statistiche"
+  },
+  "uri": "Uri",
+  "welcome": "Benvenuto"
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/it/hitl.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/it/hitl.json
new file mode 100644
index 00000000000..5a76d6035d7
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/hitl.json
@@ -0,0 +1,38 @@
+{
+  "filters": {
+    "response": {
+      "all": "Tutte",
+      "pending": "In attesa",
+      "received": "Ricevute"
+    }
+  },
+  "requiredAction_many": "Azioni richieste",
+  "requiredAction_one": "Azione richiesta",
+  "requiredAction_other": "Azioni richieste",
+  "requiredAction_zero": "Nessuna azione richiesta",
+  "requiredActionCount_many": "Azioni richieste ({{count}})",
+  "requiredActionCount_one": "Azione richiesta ({{count}})",
+  "requiredActionCount_other": "Azioni richieste ({{count}})",
+  "requiredActionCount_zero": "Nessuna azione richiesta",
+  "requiredActionState": "Stato dell'Azione richiesta",
+  "response": {
+    "error": "Errore nella Risposta",
+    "optionsDescription": "Scegli le tue opzioni per questa istanza di task",
+    "optionsLabel": "Opzioni",
+    "received": "Risposta ricevuta il ",
+    "respond": "Rispondi",
+    "success": "Risposta di {{taskId}} riuscita",
+    "title": "Istanza di Task Umana - {{taskId}}"
+  },
+  "state": {
+    "approvalReceived": "Approvazione ricevuta",
+    "approvalRequired": "Approvazione richiesta",
+    "choiceReceived": "Scelta ricevuta",
+    "choiceRequired": "Scelta richiesta",
+    "noResponseReceived": "Nessuna risposta ricevuta",
+    "rejectionReceived": "Rifiuto ricevuto",
+    "responseReceived": "Risposta ricevuta",
+    "responseRequired": "Risposta richiesta"
+  },
+  "subject": "Oggetto"
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/it/tasks.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/it/tasks.json
new file mode 100644
index 00000000000..fe9b2b2c83f
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/tasks.json
@@ -0,0 +1,10 @@
+{
+  "mapped": "Mappato",
+  "notMapped": "Non mappato",
+  "retries": "Tentativi",
+  "searchTasks": "Cerca attività",
+  "selectMapped": "Seleziona mappato",
+  "selectOperator": "Seleziona operatore",
+  "selectRetryValues": "Seleziona valori di Retry",
+  "selectTriggerRules": "Seleziona regole di Trigger"
+}
diff --git a/airflow-core/src/airflow/ui/src/i18n/config.ts 
b/airflow-core/src/airflow/ui/src/i18n/config.ts
index f4d2d07e230..671f74f6212 100644
--- a/airflow-core/src/airflow/ui/src/i18n/config.ts
+++ b/airflow-core/src/airflow/ui/src/i18n/config.ts
@@ -31,6 +31,7 @@ export const supportedLanguages = [
   { code: "he", name: "עברית" },
   { code: "hi", name: "हिन्दी" },
   { code: "hu", name: "Magyar" },
+  { code: "it", name: "Italiano" },
   { code: "ko", name: "한국어" },
   { code: "nl", name: "Nederlands" },
   { code: "pl", name: "Polski" },
diff --git a/dev/i18n/check_translations_completeness.py 
b/dev/i18n/check_translations_completeness.py
index f2469a3b425..0386aaa3c47 100755
--- a/dev/i18n/check_translations_completeness.py
+++ b/dev/i18n/check_translations_completeness.py
@@ -59,6 +59,7 @@ PLURAL_SUFFIXES = {
     "he": ["_one", "_two", "_other"],
     "hi": MOST_COMMON_PLURAL_SUFFIXES,
     "hu": MOST_COMMON_PLURAL_SUFFIXES,
+    "it": ["_zero", "_one", "_many", "_other"],
     "ko": ["_other"],
     "nl": MOST_COMMON_PLURAL_SUFFIXES,
     "pl": ["_one", "_few", "_many", "_other"],


Reply via email to