This is an automated email from the ASF dual-hosted git repository. kaxilnaik pushed a commit to branch v3-1-test in repository https://gitbox.apache.org/repos/asf/airflow.git
commit de7e73a36e9e7f0a7715a50c9b72e664b3101209 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 (cherry picked from commit 13f230c7185b8afa35c59871c88c3f75769b3dec) --- .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"],
