This is an automated email from the ASF dual-hosted git repository. vatsrahul1001 pushed a commit to branch changes-3.4.0rc3 in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 2f66e64828d0fbcd99e685be33e8972c4ecfd882 Author: Brent Bovenzi <[email protected]> AuthorDate: Wed Nov 4 11:48:44 2026 -0500 [v3-4-test] UI: Complete the Italian translation (#76464) * [v3-4-test] UI: Complete the Italian translation (#76411) Italian coverage had fallen to about 51%, so screens that landed after the last translation pass showed English to Italian users. Exact multiples of a million select the _many plural, and that form needs "di" before the noun. The locale guide records the rule so a later translation pass does not copy _other back over it. (cherry picked from commit cf5017be3c107b4616e78178cf2818d682bb0ae9) Co-authored-by: Aldo <[email protected]> Co-authored-by: Cursor <[email protected]> * Drop Italian keys that v3-4-test does not use The backport carried the translation commit across unchanged, so it brought 15 keys whose English strings only exist on main. They are dead weight on this branch and `breeze ui check-translation-completeness` reports every one of them as unused. CI does not catch this: the workflow runs that check with `|| true`. Co-Authored-By: Claude <[email protected]> --------- Co-authored-by: Aldo <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Claude <[email protected]> --- .agents/skills/airflow-translations/locales/it.md | 65 +++- .../airflow/ui/public/i18n/locales/it/admin.json | 55 +++- .../airflow/ui/public/i18n/locales/it/assets.json | 46 ++- .../airflow/ui/public/i18n/locales/it/browse.json | 85 ++++- .../airflow/ui/public/i18n/locales/it/common.json | 344 +++++++++++++++++++-- .../ui/public/i18n/locales/it/components.json | 111 ++++++- .../src/airflow/ui/public/i18n/locales/it/dag.json | 265 +++++++++++++++- .../airflow/ui/public/i18n/locales/it/dags.json | 68 +++- .../ui/public/i18n/locales/it/dashboard.json | 47 ++- .../airflow/ui/public/i18n/locales/it/hitl.json | 17 +- 10 files changed, 1035 insertions(+), 68 deletions(-) diff --git a/.agents/skills/airflow-translations/locales/it.md b/.agents/skills/airflow-translations/locales/it.md index 4fb8a351e6b..0533bc9cbac 100644 --- a/.agents/skills/airflow-translations/locales/it.md +++ b/.agents/skills/airflow-translations/locales/it.md @@ -3,7 +3,64 @@ # Italian (`it`) translation guidelines -No locale-specific guidance has been authored yet for Italian. Until this file -is filled in, follow the global rules in the parent -[airflow-translations SKILL.md](../SKILL.md). Contributions to this guide are -welcome. +Follow the [global translation rules](../SKILL.md) and the existing strings in +`airflow-core/src/airflow/ui/public/i18n/locales/it/`. Use standard Italian +suitable for a technical interface. + +## Terminology + +Keep `Airflow`, `Dag`/`Dags`, `Task`/`Tasks`, `Asset`/`Assets`, `Pool`/`Pools`, +`Plugin`/`Plugins`, `Provider`/`Providers`, `Backfill`, `Job`/`Jobs`, `Bundle`, +`Callback`, `XCom`, `Trigger`, `Heartbeat`, `Slot`, `Upstream`, `Downstream`, +`Log`, `JSON`, `ID`, `PID`, `UTC` and `Schema` in English. + +Use the wording already in the locale: `Run del Dag`, `Connessione`, +`Variabile`, `Programmazione`, `Proprietario`, `Etichette`, `Pulisci` for +clearing a task instance, and `Cercare` in search placeholders. `Scadenza` is +the word for a deadline. A loop is `Ciclo`; one pass of it is `Iterazione`. + +Do not copy an awkward existing string into a new key. `Mostrando`, for +example, is not Italian. + +## Plurals + +Italian needs `_zero`, `_one`, `_many` and `_other` +(`PLURAL_SUFFIXES["it"]`). A key that omits `_many` falls through to the +English `fallbackLng` rather than to the Italian `_other`. + +`_many` resolves only at exact multiples of a million (1.000.000, 2.000.000, +…). 1.500.000 and 1.000.001 resolve to `_other`. `_zero` is the explicit +zero-count message (`Nessun` / `Nessuna` / `Nessuno`). + +At those million counts a numeral takes **`di`** before the noun it quantifies +("un milione **di** task"), so a `_many` form that merely repeats `_other` +reads ungrammatically when the string interpolates a count directly in front +of a noun: + +```json +"change_one": "{{count, number}} modifica", +"change_many": "{{count, number}} di modifiche", +"change_other": "{{count, number}} modifiche", +"change_zero": "Nessuna modifica" +``` + +When the count stands in brackets and does not quantify the following noun, +`di` does not apply and `_many` matches `_other`: + +```json +"requiredActionCount_many": "Azioni richieste ({{count, number}})" +``` + +`altri` is still a quantified word, so `teams.more_many` is +`e {{count, number}} di altri`. A bare noun with no numeral in the string is +unaffected: + +```json +"task_one": "Task", +"task_many": "Tasks", +"task_other": "Tasks", +"task_zero": "Nessun task" +``` + +The UI prints the count as digits (`1.000.000`), not as the words "un milione". +Keep `{{count, number}}` anyway: that is the form i18next selects `_many` for. 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 index 12cb7ada51d..315616e3351 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/it/admin.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/admin.json @@ -3,12 +3,17 @@ "description": "Descrizione", "key": "Chiave", "name": "Nome", + "team": "Team", "value": "Valore" }, "config": { "columns": { "section": "Sezione" - } + }, + "config_many": "Configurazioni", + "config_one": "Configurazione", + "config_other": "Configurazioni", + "config_zero": "Nessuna configurazione" }, "connections": { "add": "Aggiungi Connessione", @@ -23,7 +28,7 @@ "connection_other": "Connessioni", "connection_zero": "Nessuna connessione", "delete": { - "deleteConnection_many": "Elimina {{count, number}} connessioni", + "deleteConnection_many": "Elimina {{count, number}} di connessioni", "deleteConnection_one": "Elimina 1 connessione", "deleteConnection_other": "Elimina {{count, number}} connessioni", "deleteConnection_zero": "Nessuna connessione da eliminare", @@ -33,13 +38,16 @@ "firstConfirmMessage_zero": "Nessuna connessione da eliminare:", "title": "Elimina Connessione" }, + "duplicate": "Duplica $t(connections.connection_one)", "edit": "Modifica Connessione", "form": { "connectionIdRequired": "L'ID della connessione è obbligatorio", "connectionIdRequirement": "L'ID della connessione non può contenere solo spazi", + "connectionTypeFields": "Campi di {{connectionType}}", "connectionTypeRequired": "Il tipo di connessione è obbligatorio", "extraFieldsJson": "Campi Extra JSON", "helperText": "Il tipo di connessione è mancante? Assicurati di aver installato il pacchetto corrispondente di Airflow Providers.", + "helperTextForDuplicatedRedactedFields": "I campi oscurati ('***') non vengono copiati. Compilali per la nuova connessione.", "helperTextForRedactedFields": "I campi redatti ('***') rimarranno invariati se non modificati.", "selectConnectionType": "Seleziona Tipo di Connessione", "standardFields": "Campi Standard" @@ -53,6 +61,12 @@ "searchPlaceholder": "Cercare Connessioni", "test": "Test Connessione", "testDisabled": "La funzione di test della connessione è disabilitata. Per favore contatta un amministratore per abilitarla.", + "testError": { + "title": "Test di $t(connections.connection_one) fallito" + }, + "testSuccess": { + "title": "Test di $t(connections.connection_one) riuscito" + }, "typeMeta": { "error": "Impossibile recuperare il tipo di connessione", "standardFields": { @@ -78,6 +92,27 @@ "formActions": { "save": "Salva" }, + "jobs": { + "columns": { + "executorClass": "Classe dell'Executor", + "hostname": "Nome host", + "id": "ID", + "jobType": "Tipo di Job", + "latestHeartbeat": "Ultimo Heartbeat", + "unixname": "Nome Unix" + }, + "filters": { + "allStates": "Tutti gli stati", + "allTypes": "Tutti i tipi", + "dagProcessorJob": "DagProcessorJob", + "schedulerJob": "SchedulerJob", + "triggererJob": "TriggererJob" + }, + "job_many": "Jobs", + "job_one": "Job", + "job_other": "Jobs", + "job_zero": "Nessun Job" + }, "plugins": { "columns": { "source": "Fonte" @@ -86,6 +121,10 @@ "importError_one": "Errore di Importazione Plugin", "importError_other": "Errori di Importazione Plugin", "importError_zero": "Nessun errore di importazione plugin", + "plugin_many": "Plugins", + "plugin_one": "Plugin", + "plugin_other": "Plugins", + "plugin_zero": "Nessun Plugin", "searchPlaceholder": "Cercare per file" }, "pools": { @@ -102,7 +141,8 @@ "includeDeferred": "Includi Deferiti", "nameMaxLength": "Il nome può contenere un massimo di 256 caratteri", "nameRequired": "Il nome è obbligatorio", - "slots": "Slot" + "slots": "Slot", + "slotsHelperText": "Usa -1 per slot illimitati." }, "noPoolsFound": "Nessun pool trovato", "pool_many": "Pools", @@ -120,7 +160,11 @@ "columns": { "packageName": "Nome del Pacchetto", "version": "Versione" - } + }, + "provider_many": "Providers", + "provider_one": "Provider", + "provider_other": "Providers", + "provider_zero": "Nessun Provider" }, "variables": { "add": "Aggiungi Variabile", @@ -128,7 +172,7 @@ "isEncrypted": "È Crittografata" }, "delete": { - "deleteVariable_many": "Elimina {{count, number}} Variabili", + "deleteVariable_many": "Elimina {{count, number}} di Variabili", "deleteVariable_one": "Elimina 1 Variabile", "deleteVariable_other": "Elimina {{count, number}} Variabili", "deleteVariable_zero": "Nessuna variabile da eliminare", @@ -164,6 +208,7 @@ "title": "Salta" } }, + "parsingFile": "Analisi del file...", "title": "Importa Variabili", "upload": "Carica un File JSON", "uploadPlaceholder": "Carica un file JSON contenente le variabili (es. {\"key\": \"value\", ...})" 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 index bb94a3cf908..16418afb7f6 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/it/assets.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/assets.json @@ -1,5 +1,36 @@ { + "additional_data": "Dati aggiuntivi", + "alias_many": "Alias", + "alias_one": "Alias", + "alias_other": "Alias", + "alias_zero": "Nessun alias", + "aliases": "Alias", + "asset_many": "Assets", + "asset_one": "Asset", + "asset_other": "Assets", + "asset_zero": "Nessun asset", + "assetStateStore": { + "add": "Aggiungi store di stato dell'Asset", + "clearAll": { + "resource": "tutto lo store di stato degli Asset", + "title": "Cancella tutto lo store di stato degli Asset", + "warning": "Lo store di stato degli Asset verrà azzerato. I Task che lo usano per coordinare il lavoro perderanno la memoria persistente." + }, + "delete": "Elimina lo store di stato dell'Asset", + "deleteWarning": "L'Asset perderà questa voce dello store di stato persistente.", + "edit": "Modifica lo store di stato dell'Asset", + "emptyState": "Lo store di stato dell'Asset memorizza valori legati all'identità di un Asset, condivisi tra tutti i run del Dag. I worker possono scrivere nello store di stato dell'Asset tramite il Task SDK.", + "entry_many": "Voci", + "entry_one": "Voce", + "entry_other": "Voci", + "entry_zero": "Nessuna voce", + "lastUpdatedBy": "Ultimo aggiornamento di", + "lastUpdatedByApi": "API", + "lastUpdatedByWatcher": "Watcher", + "title": "Store di stato dell'Asset" + }, "consumingDags": "Dag Consumatori", + "consumingTasks": "Task che consumano", "createEvent": { "button": "Creare un Evento", "manual": { @@ -21,10 +52,23 @@ }, "title": "Creare Evento Asset per {{name}}" }, + "events": "Eventi", + "filters": { + "groupPlaceholder": "Cercare un gruppo", + "hasEvents": "Ha eventi", + "lastEventDateRange": "Data dell'ultimo evento" + }, "group": "Gruppo", "lastAssetEvent": "Ultimo Evento Asset", "name": "Nome", "producingTasks": "Task Produttori", "scheduledDags": "Dag Programmati", - "searchPlaceholder": "Cercare Assets" + "scheduling": "Programmazione", + "searchPlaceholder": "Cercare Assets", + "taskDependencies": "Dipendenze dei Task", + "watcher_many": "Watchers", + "watcher_one": "Watcher", + "watcher_other": "Watchers", + "watcher_zero": "Nessun Watcher", + "watchers": "Watchers" } 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 index a30e7bbb5c6..9d3f9126f2e 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/it/browse.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/browse.json @@ -10,12 +10,95 @@ "eventType": "Tipo di Evento" } }, + "dagBundles": { + "active": "Attivo", + "columns": { + "active": "Attivo", + "importErrors": "Errori di importazione", + "lastRefreshed": "Ultimo aggiornamento", + "name": "Nome", + "version": "Versione" + }, + "detail": { + "status": "Stato" + }, + "files": { + "columns": { + "file": "File", + "lastParsed": "Ultima analisi", + "parseDuration": "Durata dell'analisi" + }, + "file_many": "File", + "file_one": "File", + "file_other": "File", + "file_zero": "Nessun file", + "importErrorGone": "Questo errore di importazione non è più registrato. Probabilmente è stato corretto da una nuova analisi.", + "neverParsed": "Mai", + "showImportError_many": "Vedi {{count, number}} di errori", + "showImportError_one": "Vedi errore", + "showImportError_other": "Vedi {{count, number}} errori", + "showImportError_zero": "Nessun errore" + }, + "inactive": "Inattivo", + "neverRefreshed": "Mai", + "notRefreshedYet": "Non ancora aggiornato", + "notVersioned": "Senza versione" + }, + "deadlines": { + "columns": { + "alertName": "Nome dell'avviso", + "deadlineTime": "Ora della scadenza", + "status": "Stato" + }, + "deadline_many": "Scadenze", + "deadline_one": "Scadenza", + "deadline_other": "Scadenze", + "deadline_zero": "Nessuna scadenza", + "filters": { + "status": "Stato", + "statusOptions": { + "all": "Tutte", + "missed": "Non rispettate", + "pending": "In sospeso" + } + }, + "title": "Scadenze" + }, "xcom": { + "add": { + "error": "Impossibile aggiungere l'XCom", + "errorTitle": "Errore", + "success": "XCom aggiunto", + "successTitle": "XCom aggiunto", + "title": "Aggiungi XCom" + }, "columns": { "dag": "Dag", "key": "Chiave", + "timestamp": "Timestamp", "value": "Valore" }, - "title": "XCom" + "delete": { + "error": "Impossibile eliminare l'XCom", + "errorTitle": "Errore", + "success": "XCom eliminato", + "successTitle": "XCom eliminato", + "title": "Elimina XCom", + "warning": "Eliminare questo XCom? L'azione non può essere annullata." + }, + "edit": { + "error": "Impossibile aggiornare l'XCom", + "errorTitle": "Errore", + "success": "XCom aggiornato", + "successTitle": "XCom aggiornato", + "title": "Modifica XCom" + }, + "entry_many": "Voci XCom", + "entry_one": "Voce XCom", + "entry_other": "Voci XCom", + "entry_zero": "Nessuna voce XCom", + "key": "Chiave", + "title": "XCom", + "value": "Valore" } } 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 index 50b5a20522e..dd195d83973 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/it/common.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/common.json @@ -8,6 +8,7 @@ "Variables": "Variabili" }, "allOperators": "Tutti gli Operatori", + "allTeams": "Tutti i Team", "appearance": { "appearance": "Aspetto", "darkMode": "Modalità scura", @@ -22,17 +23,25 @@ "assetEvent_one": "Evento Asset", "assetEvent_other": "Eventi Asset", "assetEvent_zero": "Nessun evento asset", + "assetInactive": { + "tooltip": "L'Asset upstream è stato disattivato; lo scheduler sospende la valutazione delle partizioni finché non viene riattivato." + }, "backfill_many": "Backfills", "backfill_one": "Backfill", "backfill_other": "Backfills", "backfill_zero": "Nessun backfill", + "breadcrumb": "Percorso di navigazione", "browse": { "auditLog": "Registro di Controllo (Logs)", + "dagBundles": "Dag Bundles", + "deadlines": "Scadenze", + "jobs": "Jobs", "requiredActions": "Azioni Richieste", "xcoms": "XComs" }, "collapseAllExtra": "Collassa tutti i json extra", "collapseDetailsPanel": "Collassa i Dettagli", + "consumingAsset": "Asset che consuma", "createdAssetEvent_many": "Eventi Asset Creati", "createdAssetEvent_one": "Evento Asset Creato", "createdAssetEvent_other": "Eventi Asset Creati", @@ -41,7 +50,13 @@ "dag_one": "Dag", "dag_other": "Dags", "dag_zero": "Nessun Dag", + "dagBundle_many": "Dag Bundles", + "dagBundle_one": "Dag Bundle", + "dagBundle_other": "Dag Bundles", + "dagBundle_zero": "Nessun Dag Bundle", "dagDetails": { + "activeRuns": "Run attivi", + "bundleVersion": "Versione del Bundle", "catchup": "Catchup", "dagRunTimeout": "Timeout del Run del Dag", "defaultArgs": "Argomenti di Default", @@ -61,7 +76,8 @@ "owner": "Proprietario", "params": "Parametri", "schedule": "Programmazione", - "tags": "Etichette" + "tags": "Etichette", + "team": "Team" }, "dagId": "ID del Dag", "dagRun": { @@ -75,6 +91,9 @@ }, "expectedDuration": "Durata Prevista", "lastSchedulingDecision": "Ultima Decisione di Programmazione", + "mappedPartitionKey": "Chiave di partizione mappata", + "partitionDate": "Data della partizione", + "partitionKey": "Chiave di partizione", "queuedAt": "In Coda il", "runAfter": "Esegui dopo", "runType": "Tipo di Run", @@ -87,8 +106,12 @@ "dagRun_other": "Run del Dag", "dagRun_zero": "Nessun run del Dag", "dagRunId": "ID del Run del Dag", - "defaultToGraphView": "Default to vista grafica", - "defaultToGridView": "Default to vista griglia", + "dagRunState": "Stato del run del Dag", + "delete": "Elimina", + "diff": "Diff", + "diffCompareWith": "Confronta con", + "diffExit": "Esci dal diff", + "diffSelectVersionToCompare": "Seleziona la versione da confrontare", "direction": "Direzione", "docs": { "documentation": "Documentazione", @@ -101,14 +124,26 @@ "tooltip": "Premi {{hotkey}} per scaricare i log" }, "duration": "Durata", + "edit": "Modifica", "endDate": "Data di Fine", "error": { "back": "Indietro", "defaultMessage": "Si è verificato un errore imprevisto", "home": "Home", + "invalidUrl": "Pagina non trovata. Controlla l'URL e riprova.", "notFound": "Pagina non trovata", "title": "Errore" }, + "errors": { + "forbidden": { + "description": "Non hai il permesso di eseguire questa azione.", + "title": "Accesso negato" + } + }, + "event_many": "Eventi", + "event_one": "Evento", + "event_other": "Eventi", + "event_zero": "Nessun evento", "expand": { "collapse": "Collassa", "expand": "Espandi", @@ -120,62 +155,125 @@ "all": "Tutti", "and": "E", "any": "Qualunque", + "hiddenAsset": "Asset nascosto", "or": "O" }, "filter": "Filtro", "filters": { + "addFilter": "Aggiungi filtro", + "allIterations": "Tutte", + "completedAt": "Completato il", + "date": "Data", "durationFrom": "Durata da", "durationTo": "Durata a", + "endTime": "Ora di fine", + "iteration": "Iterazione", "logicalDateFrom": "Data Logica Da", "logicalDateTo": "Data Logica A", + "loop": "Ciclo", + "loopAllIterations": "{{loop}} tutte", + "loopIteration": "{{loop}} {{index}}", + "loopPlaceholder": "Seleziona un ciclo", + "maxActiveRunsFrom": "Run attivi massimi da", + "maxActiveRunsTo": "Run attivi massimi a", + "removeFilter": "Rimuovi filtro", "runAfterFrom": "Esegui Dopo Da", - "runAfterTo": "Esegui Dopo A" + "runAfterTo": "Esegui Dopo A", + "searchAsset": "Cercare Asset", + "selectDateRange": "Seleziona un intervallo di date", + "selectDateTime": "Seleziona data e ora", + "startTime": "Ora di inizio", + "switchIteration": "Cambia iterazione", + "time": "Ora" + }, + "fullscreen": { + "tooltip": "Premi {{hotkey}} per la schermata intera" + }, + "generateToken": "Genera token", + "includedIn": "Incluso in", + "key": "Chiave", + "loading": "Caricamento…", + "logLevel": { + "hide": "Nascondi i livelli di Log", + "hotkey": "l", + "show": "Mostra i livelli di Log" }, "logicalDate": "Data Logica", "logout": "Esci", "logoutConfirmation": "Stai per uscire dall'applicazione.", "mapIndex": "Mappa Index", "modal": { + "add": "Aggiungi", "cancel": "Annulla", "confirm": "Conferma", "delete": { "button": "Elimina", "confirmation": "Confermi di voler eliminare {{resourceName}}? Questa azione non può essere annullata." - } + }, + "save": "Salva" }, "nav": { "admin": "Amministrazione", "assets": "Asset", "browse": "Sfoglia", "dags": "Dag", + "dashboard": "Dashboard", "docs": "Documentazione", "home": "Home", "legacyFabViews": "Legacy View", "plugins": "Plugins", "security": "Sicurezza" }, + "no": "No", "noItemsFound": "Nessun {{modelName}} trovato", "note": { "add": "Aggiungi una nota", "dagRun": "Nota del Run del Dag", + "edit": "Modifica la nota", "label": "Note", "placeholder": "Aggiungi una nota...", - "taskInstance": "Nota dell'Istanza di Task" + "preview": "Anteprima", + "taskInstance": "Nota dell'Istanza di Task", + "write": "Scrivi" }, - "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" + "overallStatus": "Stato generale", + "partition_many": "Partizioni", + "partition_one": "Partizione", + "partition_other": "Partizioni", + "partition_zero": "Nessuna partizione", + "partitionedDagRun_many": "Run del Dag partizionati", + "partitionedDagRun_one": "Run del Dag partizionato", + "partitionedDagRun_other": "Run del Dag partizionati", + "partitionedDagRun_zero": "Nessun Run del Dag partizionato", + "partitionedDagRunDetail": { + "receivedAssetEvents": "Eventi Asset ricevuti" + }, + "pause": "Metti in pausa", + "pendingDagRun_many": "{{count, number}} di Run del Dag in sospeso", + "pendingDagRun_one": "{{count, number}} Run del Dag in sospeso", + "pendingDagRun_other": "{{count, number}} Run del Dag in sospeso", + "pendingDagRun_zero": "Nessun Run del Dag in sospeso", + "presetFilters": { + "deleteTitle": "Elimina il filtro salvato", + "deleteWarning": "I filtri salvati sono memorizzati solo in questo browser.", + "duplicate": "Il filtro salvato \"{{name}}\" contiene già questa stessa configurazione.", + "empty": "Nessun filtro salvato", + "info": { + "default": "Fissa un filtro salvato come predefinito e viene applicato automaticamente quando apri questa pagina senza filtri.", + "save": "Salva i filtri e l'ordinamento attuali come filtro salvato con un nome, e puoi tornarci in qualsiasi momento.", + "storage": "I filtri salvati sono memorizzati in questo browser." + }, + "namePlaceholder": "Nome del filtro salvato", + "nothingToSave": "Niente da salvare. Applica filtri o un ordinamento per salvare un filtro.", + "save": "Salva", + "setDefault": "Imposta come predefinito", + "title": "Filtri salvati", + "unsetDefault": "Rimuovi il predefinito" }, "reset": "Resetta", "runId": "ID del Run", "runTypes": { + "asset_materialization": "Materializzazione di Asset", "asset_triggered": "Asset Triggered", "backfill": "Backfill", "manual": "Manuale", @@ -188,6 +286,12 @@ }, "tooltip": "Premi {{hotkey}} per scorrere a {{direction}}" }, + "search": { + "advanced": { + "description": "Corrispondenza in qualsiasi punto del valore (ricerca per sottostringa). Più lenta nelle installazioni grandi perché non può usare l'indice B-tree predefinito. Vedi la sezione della documentazione sugli indici personalizzati dei metadati.", + "title": "Corrispondenza ovunque" + } + }, "security": { "actions": "Azioni", "permissions": "Permessi", @@ -196,7 +300,129 @@ "users": "Utenti" }, "selectLanguage": "Seleziona la Lingua", + "selected": "Selezionato", + "settings": { + "clearing": { + "keepTaskState": { + "helper": "Conserva per impostazione predefinita le voci dello store di stato del Task quando pulisci le istanze di Task, invece di scartarle.", + "label": "Conserva lo stato del Task durante la pulizia" + }, + "preventRunningTask": { + "helper": "Salta i Task in esecuzione quando pulisci le istanze di Task.", + "label": "Non pulire i Task in esecuzione" + }, + "runSelection": { + "helper": "Opzioni selezionate per impostazione predefinita quando pulisci un run del Dag.", + "label": "Selezione predefinita per la pulizia del run" + }, + "taskSelection": { + "helper": "Opzioni selezionate per impostazione predefinita quando pulisci le istanze di Task.", + "label": "Selezione predefinita per la pulizia dei Task" + }, + "title": "Pulizia" + }, + "dagsList": { + "recentTasks": { + "helper": "Mostra gli stati recenti dei Task di ogni Dag nella lista dei Dag. Disattivalo per non caricarli: può aiutare nelle installazioni con molti Dag.", + "label": "Mostra i Task recenti" + }, + "title": "Lista dei Dag" + }, + "description": "Queste preferenze sono salvate solo in questo browser e valgono in tutta l'applicazione.", + "general": { + "landingPage": { + "helper": "Pagina mostrata quando apri Airflow.", + "label": "Pagina iniziale", + "options": { + "dags": "Dag", + "dashboard": "Dashboard" + } + }, + "title": "Generale" + }, + "graph": { + "defaultDirection": { + "helper": "Direzione del layout per i grafici di Dag e Asset che non hai impostato singolarmente.", + "label": "Direzione predefinita del grafico" + }, + "taskGroupsExpanded": { + "helper": "Espandi i gruppi di Task nei Dag in cui non hai salvato una selezione di gruppi. Le selezioni esistenti restano.", + "label": "Espandi i gruppi di Task per impostazione predefinita" + }, + "title": "Grafico" + }, + "marking": { + "taskSelection": { + "helper": "Opzioni selezionate per impostazione predefinita quando marchi lo stato di un'istanza di Task.", + "label": "Selezione predefinita per la marcatura" + }, + "title": "Marcatura" + }, + "search": { + "matchAnywhere": { + "helper": "$t(search.advanced.description) Le scelte di ogni barra di ricerca e i link condivisi hanno comunque la precedenza.", + "label": "Corrispondenza ovunque per impostazione predefinita" + }, + "title": "Ricerca" + }, + "taskInstance": { + "defaultTab": { + "helper": "Scheda mostrata per prima quando apri un'istanza di Task. I link a una scheda specifica aprono comunque quella scheda.", + "label": "Scheda predefinita dell'istanza di Task" + }, + "title": "Istanza di Task" + }, + "title": "Impostazioni" + }, + "shortcuts": { + "categories": { + "code": "Codice", + "dagView": "Vista del Dag", + "filters": "Filtri", + "global": "Globali", + "logs": "Log", + "navigation": "Navigazione", + "runActions": "Azioni su run e Task", + "search": "Ricerca" + }, + "descriptions": { + "clearRun": "Pulisci $t(dagRun_one)", + "clearTaskInstance": "Pulisci $t(taskInstance_one)", + "downloadLogs": "Scarica i Log", + "focusFilterSearch": "Vai alla ricerca dei filtri", + "focusLogSearch": "Cerca nei Log", + "focusSearch": "Vai alla ricerca", + "markRunFailed": "Marca $t(dagRun_one) come fallito", + "markRunSuccess": "Marca $t(dagRun_one) come successo", + "markTaskFailed": "Marca $t(task_one) come fallito", + "markTaskGroupFailed": "Marca $t(taskGroup_one) come fallito", + "markTaskGroupSuccess": "Marca $t(taskGroup_one) come successo", + "markTaskSuccess": "Marca $t(task_one) come successo", + "navigateTasks": "Naviga $t(task_other)", + "openGraphFilters": "Apri i filtri del grafico", + "scrollBottom": "Vai in fondo", + "scrollTop": "Vai in cima", + "searchDags": "Cercare $t(dag_other)", + "showHelp": "Mostra $t(shortcuts.title)", + "toggleExpand": "Espandi o comprimi tutti i gruppi", + "toggleFullscreen": "Attiva o disattiva la schermata intera", + "toggleGraphGrid": "Passa da grafico a griglia", + "toggleLogLevel": "Attiva o disattiva i livelli di Log", + "toggleSource": "Attiva o disattiva la sorgente", + "toggleTaskGroup": "Espandi o comprimi $t(taskGroup_one)", + "toggleTimestamp": "Attiva o disattiva i timestamp", + "toggleWrap": "Attiva o disattiva $t(wrap.wrap)" + }, + "empty": "In questa pagina non ci sono scorciatoie da tastiera.", + "title": "Scorciatoie da tastiera" + }, "showDetailsPanel": "Mostra il Pannello dei Dettagli", + "signedInAs": "Accesso effettuato come", + "slot": "Slot", + "slot_many": "Slots", + "slot_one": "Slot", + "slot_other": "Slots", + "slot_zero": "Nessuno slot", "source": { "hide": "Nascondi Sorgente", "hotkey": "s", @@ -209,10 +435,13 @@ "startDate": "Data di Inizio", "state": "Stato", "states": { + "awaiting_input": "In attesa di input", "deferred": "In Attesa", "failed": "Fallito", "no_status": "Nessun Stato", "none": "Nessun Stato", + "open": "Aperto", + "pending": "In sospeso", "planned": "Pianificato", "queued": "In Coda", "removed": "Rimosso", @@ -225,6 +454,9 @@ "up_for_retry": "Da Riavviare", "upstream_failed": "Upstream Fallito" }, + "switchDag": "Cambia $t(dag_one)", + "switchDagRun": "Cambia $t(dagRun_one)", + "switchMapIndex": "Cambia $t(mapIndex)", "table": { "completedAt": "Completato il", "createdAt": "Creato il", @@ -236,30 +468,49 @@ "filterReset_zero": "Nessun filtro da resettare", "from": "Da", "maxActiveRuns": "Numero massimo di Runs attive", + "noResultsFound": "Nessun risultato", "noTagsFound": "Nessuna etichetta trovata", + "noTeamsFound": "Nessun Team trovato", + "ownerPlaceholder": "Filtra per proprietario", "tagMode": { "all": "Tutti", "any": "Qualunque" }, "tagPlaceholder": "Filtra per etichetta", - "to": "A" + "to": "A", + "updatedAt": "Aggiornato il" }, "task": { + "dependsOnPast": "Dipende dal passato", "documentation": "Documentazione del Task", "lastInstance": "Ultima Istanza", "operator": "Operatore", - "triggerRule": "Regola di Trigger" + "retries": "Tentativi", + "triggerRule": "Regola di Trigger", + "waitForDownstream": "Attendi il Downstream" }, "task_many": "Tasks", "task_one": "Task", "task_other": "Tasks", "task_zero": "Nessun task", + "taskGroup": { + "documentation": "Documentazione del gruppo di Task" + }, + "taskGroup_many": "Gruppi di Task", + "taskGroup_one": "Gruppo di Task", + "taskGroup_other": "Gruppi di Task", + "taskGroup_zero": "Nessun gruppo di Task", "taskId": "ID del Task", "taskInstance": { + "additionalAttributes": "Attributi aggiuntivi dell'istanza di Task", "dagVersion": "Versione del Dag", "executor": "Executor", "executorConfig": "Configurazione dell'Executor", "hostname": "Nome delHost", + "id": "ID", + "iteration": "Iterazione", + "loopDecision": "Decisione", + "loopIterations": "Iterazioni eseguite", "maxTries": "Numero massimo di Tentativi", "pid": "PID", "pool": "Pool", @@ -267,12 +518,21 @@ "priorityWeight": "Peso di Priorità", "queue": "Coda", "queuedWhen": "In Coda il", + "renderedMapIndex": "Map Index renderizzato", + "retryAt": "Riprova il", "scheduledWhen": "Programmato il", + "stateReason": "Motivo dello stato", + "stateReasonSummary": { + "failed": "Interrotto al tentativo {{tryNumber}} di {{totalTries}}", + "upForRetry": "Nuovo tentativo dopo il tentativo {{tryNumber}} di {{totalTries}}" + }, + "trigger": "Trigger", "triggerer": { "assigned": "Triggerer Assegnato", "class": "Classe del Trigger", "createdAt": "Creato il", "id": "ID del Trigger", + "job": "Job del Triggerer", "latestHeartbeat": "Ultimo Heartbeat del Trigger", "title": "Info del Trigger" }, @@ -282,10 +542,23 @@ "taskInstance_one": "Istanza di Task", "taskInstance_other": "Istanze di Task", "taskInstance_zero": "Nessuna istanza di task", + "teams": { + "more_many": "e {{count, number}} di altri", + "more_one": "e {{count, number}} altro", + "more_other": "e {{count, number}} altri", + "more_zero": "e nessun altro", + "none": "Nessun Team", + "title": "Team" + }, "timeRange": { + "anyTime": "Qualsiasi momento", + "in": "fra", + "last7Days": "Ultimi 7 giorni", "last12Hours": "Ultimi 12 Ore", "last24Hours": "Ultimi 24 Ore", + "last30Days": "Ultimi 30 giorni", "lastHour": "Ultima Ora", + "latestRun": "Ultimo run", "pastWeek": "Settimana Scorsa" }, "timestamp": { @@ -301,6 +574,13 @@ "utc": "UTC (Tempo Coordinato Universale)" }, "toaster": { + "bulkClear": { + "error": "Pulizia in massa di {{resourceName}} fallita", + "success": { + "description": "{{count, number}} {{resourceName}} sono stati puliti con successo. Chiavi: {{keys}}", + "title": "Richiesta di pulizia in massa di {{resourceName}} inviata" + } + }, "bulkDelete": { "error": "Eliminazione in Massa di {{resourceName}} Fallita", "success": { @@ -308,6 +588,13 @@ "title": "Eliminazione in Massa di {{resourceName}} Richiesta Inviata" } }, + "bulkUpdate": { + "error": "Aggiornamento in massa di {{resourceName}} fallito", + "success": { + "description": "{{count, number}} {{resourceName}} sono stati aggiornati con successo. Chiavi: {{keys}}", + "title": "Richiesta di aggiornamento in massa di {{resourceName}} inviata" + } + }, "create": { "error": "Creazione di {{resourceName}} Fallita", "success": { @@ -337,14 +624,33 @@ } } }, + "tokenGeneration": { + "apiToken": "Token API", + "cliToken": "Token CLI", + "errorDescription": "Si è verificato un errore durante la generazione del token. Riprova.", + "errorTitle": "Generazione del token fallita", + "generate": "Genera", + "selectType": "Seleziona il tipo di token da generare.", + "title": "Genera token", + "tokenExpiresIn": "Questo token scade fra {{duration}}.", + "tokenGenerated": "Il token è stato generato.", + "tokenShownOnce": "Questo token viene mostrato una sola volta. Copialo ora." + }, "total": "Totale {{state}}", "triggered": "Triggered", "tryNumber": "Numero di Tentativo", + "unpause": "Riprendi", "user": "Utente", + "validation": { + "mustBeAtLeast": "Deve essere almeno {{min}}.", + "mustBeValidNumber": "Deve essere un numero valido." + }, + "value": "Valore", "wrap": { "hotkey": "w", "tooltip": "Premi {{hotkey}} per abilitare il wrap", "unwrap": "Disabilita il wrap", "wrap": "Abilita il wrap" - } + }, + "yes": "Sì" } 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 index 6d97b28d7fd..98b4cc21b0d 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/it/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/components.json @@ -1,6 +1,6 @@ { "backfill": { - "affected_many": "{{count, number}} runs verranno attivati.", + "affected_many": "{{count, number}} di runs verranno attivati.", "affected_one": "1 run verrà attivato.", "affected_other": "{{count, number}} runs verranno attivati.", "affected_zero": "Nessun run verrà attivato.", @@ -9,11 +9,27 @@ "backwards": "Run all'indietro", "dateRange": "Intervallo di Date", "errorStartDateBeforeEndDate": "La Data di Inizio deve essere precedente alla Data di Fine", + "exceptionReason": { + "alreadyExists": "Esiste già", + "inFlight": "In corso", + "unknown": "Sconosciuto" + }, "maxRuns": "Numero massimo di Runs attive", "missingAndErroredRuns": "Run Mancanti ed Errati", "missingRuns": "Run Mancanti", + "notCreatedReason": "Motivo della mancata creazione", + "overrideExistingParams": "Sovrascrivi i parametri dei run esistenti", + "partitionRange": "Intervallo di partizioni", + "partitionsAffected_many": "Verrà applicato il backfill a {{count, number}} di partizioni:", + "partitionsAffected_one": "Verrà applicato il backfill a 1 partizione:", + "partitionsAffected_other": "Verrà applicato il backfill a {{count, number}} partizioni:", + "partitionsAffected_zero": "Nessuna partizione a cui applicare il backfill:", + "partitionsNone": "Nessuna partizione corrisponde all'intervallo selezionato.", + "permissionDenied": "Dry run fallito: l'utente non ha il permesso di creare backfill.", "reprocessBehavior": "Comportamento di Reprocesso", "run": "Correre Backfill", + "scheduleNotBackfillable": "La programmazione di questo Dag non supporta i backfill", + "schedulerPriorityHint": "In ogni ciclo dello scheduler i run di backfill del Dag vengono ordinati dopo quelli che non sono backfill. I run di backfill possono restare in coda più a lungo se sono presenti altri run.", "selectDescription": "Esegui questo Dag per un intervallo di date", "selectLabel": "Backfill", "title": "Correre Backfill", @@ -26,7 +42,8 @@ "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." - } + }, + "viewSlots": "Vedi gli slot del Backfill #{{id}}" }, "banner": { "backfillInProgress": "Backfill in corso", @@ -43,10 +60,7 @@ "invalidJson": "Formato JSON non valido: {{errorMessage}}" }, "dagWarnings": { - "error_many": "{{count, number}} Errori", "error_one": "1 Errore", - "error_other": "{{count, number}} Errori", - "error_zero": "Nessun errore", "errorAndWarning": "1 Errore e {{warningText}}", "types": { "asset conflict": "Conflitto di Asset", @@ -55,32 +69,41 @@ "runtime varying value": "Valore variabile a runtime", "task group cycle": "Ciclo nel gruppo di task" }, - "warning_many": "{{count, number}} Avvisi", + "warning_many": "{{count, number}} di Avvisi", "warning_one": "1 Avviso", "warning_other": "{{count, number}} Avvisi", "warning_zero": "Nessun avviso" }, + "dateRangeFilter": { + "validation": { + "invalidDateFormat": "Formato della data non valido.", + "invalidTimeFormat": "Formato dell'ora non valido.", + "startBeforeEnd": "Data e ora di inizio devono precedere data e ora di fine" + } + }, "durationChart": { "duration": "Durata (secondi)", - "lastDagRun_many": "Ultimi {{count, number}} Runs del Dag", + "lastDagRun_many": "Ultimi {{count, number}} di Runs del Dag", "lastDagRun_one": "Ultimo Run del Dag", "lastDagRun_other": "Ultimi {{count, number}} Runs del Dag", "lastDagRun_zero": "Nessun run del Dag", - "lastTaskInstance_many": "Ultime {{count, number}} Istanze di Task", + "lastTaskInstance_many": "Ultime {{count, number}} di Istanze di Task", "lastTaskInstance_one": "Ultima Istanza di Task", "lastTaskInstance_other": "Ultime {{count, number}} Istanze di Task", "lastTaskInstance_zero": "Nessuna istanza di task", + "medianTotalDuration": "Totale: {{duration}}", "queuedDuration": "Durata in coda", "runAfter": "Esegui dopo", "runDuration": "Durata del Run" }, "fileUpload": { - "files_many": "{{count, number}} file", + "files_many": "{{count, number}} di file", "files_one": "1 file", "files_other": "{{count, number}} file", "files_zero": "Nessun file" }, "flexibleForm": { + "durationPlaceholder": "Inserisci la durata in formato ISO 8601", "placeholder": "Seleziona Valore", "placeholderArray": "Inserisci ogni stringa su una nuova riga", "placeholderExamples": "Inizia a digitare per vedere le opzioni", @@ -88,6 +111,7 @@ "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.", + "validationErrorDuration": "Formato di durata ISO 8601 non valido", "validationErrorRequired": "Questo campo è obbligatorio" }, "graph": { @@ -99,11 +123,18 @@ "downloadImageError": "Impossibile scaricare l'immagine del grafico.", "downloadImageErrorTitle": "Scaricamento Fallito", "otherDagRuns": "+Altri Runs del Dag", - "taskCount_many": "{{count, number}} Tasks", + "taskCount_many": "{{count, number}} di Tasks", "taskCount_one": "{{count, number}} Task", "taskCount_other": "{{count, number}} Tasks", "taskCount_zero": "Nessun task", - "taskGroup": "Task Group" + "taskGroup": "Task Group", + "zoomToTask": "Zoom sul Task selezionato" + }, + "jsonPreview": { + "items_many": "{{count, number}} di elementi", + "items_one": "1 elemento", + "items_other": "{{count, number}} elementi", + "items_zero": "Nessun elemento" }, "limitedList": "+{{count, number}} altro", "limitedList.allItems": "Tutti i {{count, number}} elementi:", @@ -114,7 +145,7 @@ "limitedList.clickToInteract": "Fai clic su un'etichetta per filtrare i Dag", "limitedList.clickToOpenFull": "Fai clic su \"+{{count, number}} altro\" per visualizzare tutto", "limitedList.copyPasteText": "Puoi copiare e incollare il testo sopra", - "limitedList.showingItems_many": "Mostrando {{count, number}} elementi", + "limitedList.showingItems_many": "Mostrando {{count, number}} di elementi", "limitedList.showingItems_one": "Mostrando 1 elemento", "limitedList.showingItems_other": "Mostrando {{count, number}} elementi", "limitedList.showingItems_zero": "Mostrando 0 elementi", @@ -122,27 +153,79 @@ "file": "File", "location": "linea {{line}} in {{name}}" }, + "passwordToggle": { + "hide": "Nascondi il valore", + "show": "Mostra il valore" + }, + "pausedDag": { + "drain": "Drena", + "drainDescription": "I run non terminati continuano, ma non vengono creati run programmati. I backfill in pausa restano in pausa. Il Dag torna in pausa quando tutti i run non terminati finiscono.", + "keepPaused": "Tieni in pausa", + "keepPausedDescription": "I run nuovi e quelli non terminati attendono finché il Dag non viene ripreso.", + "title": "Il Dag è in pausa", + "unfinishedRunsWillRun_many": "{{count, number}} di run del Dag non terminati verranno avviati o ripresi.", + "unfinishedRunsWillRun_one": "1 run del Dag non terminato verrà avviato o ripreso.", + "unfinishedRunsWillRun_other": "{{count, number}} run del Dag non terminati verranno avviati o ripresi.", + "unfinishedRunsWillRun_zero": "Nessun run del Dag non terminato verrà avviato o ripreso.", + "unpause": "Riprendi", + "unpauseDescription": "Il Dag diventa attivo: i run non terminati continuano e la programmazione riprende. I backfill in pausa restano in pausa." + }, "reparseDag": "Reparse Dag", + "slowestTaskInstances": { + "empty": "Nessuna istanza di Task completata in questo intervallo", + "title": "Istanze di Task più lente" + }, + "sort": "ordina", + "sortMultiColumnHint": "Tieni premuto Maiusc e fai clic per ordinare per più colonne", "sortedAscending": "ordinato in ordine crescente", "sortedDescending": "ordinato in ordine decrescente", "sortedUnsorted": "non ordinato", "taskTries": "Tentativi di Task", + "taskTryPlaceholder": "Tentativo del Task", + "team": { + "selector": { + "helperText": "Facoltativo. Limita l'uso a un Team specifico.", + "label": "Team", + "placeHolder": "Seleziona un Team" + } + }, "toggleCardView": "Mostra la vista in card", "toggleTableView": "Mostra la vista in tabella", "triggerDag": { "button": "Trigger", + "dagStartEndDate": { + "both": "Data di inizio del Dag: {{startDate}}, data di fine: {{endDate}}", + "end": "Data di fine del Dag: {{endDate}}", + "noTaskWillRun": "Nessun Task verrà eseguito.", + "start": "Data di inizio del Dag: {{startDate}}" + }, + "dataInterval": "Intervallo dei dati", + "dataIntervalAuto": "Dedotto dalla data logica e dalla programmazione", + "dataIntervalManual": "Specifica manualmente", + "editConfigAndTrigger": "Modifica la configurazione e attiva", + "intervalEnd": "Fine", + "intervalStart": "Inizio", "loading": "Caricamento informazioni del Dag...", "loadingFailed": "Impossibile caricare le informazioni del Dag. Per favore, riprova.", + "manualRunDenied": "I run manuali non sono consentiti per questo Dag", + "partitionKeyHelp": "Facoltativo: vale solo per i Dag partizionati", + "recentConfig": "Configurazioni recenti", + "recentConfigPlaceholder": "Seleziona una configurazione recente", "runIdHelp": "Opzionale - verrà generato se non fornito", "selectDescription": "Triggera un singolo run di questo Dag", "selectLabel": "Singolo Run", "title": "Trigger del Dag", "toaster": { + "error": { + "title": "Attivazione del Dag fallita" + }, "success": { "description": "Il run del Dag è stato attivato con successo.", "title": "Run del Dag attivato" } - } + }, + "triggerAgainWithConfig": "Attiva di nuovo con questa configurazione", + "triggerOptions": "Opzioni di attivazione" }, "trimText": { "details": "Dettagli", @@ -157,7 +240,9 @@ "versionId": "ID della Versione" }, "versionSelect": { + "allVersions": "Tutte le versioni", "dagVersion": "Versione del Dag", + "placeholder": "Seleziona la versione", "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 index fbb085ed308..4ff6614700a 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/it/dag.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/dag.json @@ -1,4 +1,5 @@ { + "allMapIndexes": "Tutti i Map Index", "allRuns": "Tutti i Run", "blockingDeps": { "dependency": "Dipendenza", @@ -6,6 +7,7 @@ "title": "Dipendenze che bloccano la Task da essere pianificata" }, "calendar": { + "backfill": "Backfill", "daily": "Giornaliero", "hourly": "Orario", "legend": { @@ -34,23 +36,79 @@ "wednesday": "Mer" } }, + "callbacks": { + "callback_many": "Callbacks", + "callback_one": "Callback", + "callback_other": "Callbacks", + "callback_zero": "Nessun Callback", + "columns": { + "alertName": "Avviso di scadenza", + "callback": "Callback", + "deadlineTime": "Ora della scadenza", + "missedBy": "Scostamento", + "type": "Tipo" + }, + "types": { + "executor": "Sincrono", + "triggerer": "Asincrono" + } + }, "code": { "bundleUrl": "URL del Bundle", "noCode": "Nessun Codice Trovato", "parseDuration": "Durata del parsing", "parsedAt": "Parsato il:" }, + "deadlineAlerts": { + "completionRule": "Deve completarsi entro {{interval}} da {{reference}}", + "completionRuleDynamic": "Deve completarsi entro un intervallo variabile misurato da {{reference}}", + "count_many": "{{count, number}} di scadenze", + "count_one": "{{count, number}} scadenza", + "count_other": "{{count, number}} scadenze", + "count_zero": "Nessuna scadenza", + "referenceType": { + "AverageRuntimeDeadline": "runtime medio", + "DagRunLogicalDateDeadline": "data logica", + "DagRunQueuedAtDeadline": "ora di messa in coda" + } + }, + "deadlineStatus": { + "actual": "Effettivo", + "expected": "Atteso", + "finishedEarly": "Terminato {{duration}} prima della scadenza", + "finishedLate": "Terminato {{duration}} dopo la scadenza", + "label": "Scadenza", + "met": "Rispettata", + "missed": "Non rispettata", + "missedCount_many": "{{count, number}} di scadenze non rispettate", + "missedCount_one": "{{count, number}} scadenza non rispettata", + "missedCount_other": "{{count, number}} scadenze non rispettate", + "missedCount_zero": "Nessuna scadenza non rispettata", + "mixedCount": "{{missedCount, number}} non rispettate, {{upcomingCount, number}} imminenti", + "stillRunning": "Ancora in esecuzione", + "upcoming": "Imminenti", + "upcomingCount_many": "{{count, number}} di scadenze imminenti", + "upcomingCount_one": "{{count, number}} scadenza imminente", + "upcomingCount_other": "{{count, number}} scadenze imminenti", + "upcomingCount_zero": "Nessuna scadenza imminente" + }, "extraLinks": "Extra Links", "grid": { "buttons": { + "newerRuns": "Run più recenti", + "olderRuns": "Run più vecchi", "resetToLatest": "Resetta al più recente", "toggleGroup": "Attiva/Disattiva gruppo" - } + }, + "runTypeLegend": "Legenda dei tipi di run" }, "header": { "buttons": { "advanced": "Avanzato", "dagDocs": "Documentazione sul Dag" + }, + "status": { + "deactivated": "Disattivato" } }, "logs": { @@ -59,19 +117,57 @@ "critical": "CRITICO", "debug": "DEBUG", "error": "ERRORE", - "fullscreen": { - "button": "Schermo Intero", - "tooltip": "Premi {{hotkey}} per schermo intero" - }, "info": "INFO", "noTryNumber": "Nessun numero di tentativo", + "search": { + "matchCount": "{{current, number}} di {{total, number}}", + "noMatches": "Nessuna corrispondenza", + "placeholder": "Cercare nei Log..." + }, "settings": "Impostazioni Log", + "tryNotStarted": "Questo tentativo non è ancora iniziato.", + "viewFailedTry": "Vedi i Log del tentativo fallito {{tryNumber}}", "viewInExternal": "Visualizza i logs in {{name}} (tentativo {{attempt}})", + "viewPreviousTry": "Vedi i Log del tentativo precedente {{tryNumber}}", + "waitingToRetry": "Il tentativo {{tryNumber}} è in attesa di un nuovo tentativo.", "warning": "AVVISO" }, - "navigation": { - "navigation": "Navigazione: Shift+{{arrow}}", - "toggleGroup": "Attiva/Disattiva gruppo: Spazio" + "loop": { + "history": { + "capLabel": "Limite: {{max}}", + "iterationsAxis": "Iterazioni", + "stats": { + "capHits": "Hanno raggiunto il limite", + "medianIterations": "Mediana delle iterazioni" + }, + "title": "Iterazioni per run" + }, + "iterationLabel": "Iterazione {{index}}", + "iterations": "Iterazioni", + "outcome": "Esito", + "reason": { + "cap_reached": "Ha raggiunto il limite di iterazioni ({{max}})", + "failed": "Fallito all'iterazione {{index}}", + "iteration_failed": "L'iterazione {{index}} è fallita in {{taskId}}", + "ran_to_cap": "Ha eseguito tutte le {{max}} iterazioni consentite", + "removed": "Rimosso", + "running": "In esecuzione", + "skipped": "Saltato", + "stopped_early": "Si è fermato prima, all'iterazione {{index}}" + }, + "rules": { + "behaviour": "Comportamento", + "boundedFor": "Esegue un numero fisso di iterazioni", + "exitCriteria": "Criterio di uscita", + "maxIterations": "Numero massimo di iterazioni", + "whileUntil": "Si ripete finché {{criteria}}" + } + }, + "notFound": { + "back": "Indietro", + "backToDags": "Torna ai Dag", + "message": "Il Dag \"{{dagId}}\" non esiste.", + "title": "Dag non trovato" }, "overview": { "buttons": { @@ -94,6 +190,10 @@ "assetEvent_other": "Eventi di Asset Creati", "assetEvent_zero": "Nessun evento di asset creato" }, + "deadlines": { + "showAll": "Mostra tutte", + "title": "Scadenze" + }, "failedLogs": { "hideLogs": "Nascondi Logs", "showLogs": "Mostra Logs", @@ -112,16 +212,49 @@ "label": "Numero di Runs del Dag" }, "dependencies": { - "label": "Dipendenze", - "options": { - "allDagDependencies": "Tutte le Dipendenze del Dag", - "externalConditions": "Condizioni Esterne", - "onlyTasks": "Solo le Task" - }, - "placeholder": "Dipendenze" + "allDagDependencies": "Tutte le dipendenze del Dag" }, "graphDirection": { "label": "Direzione del Grafico" + }, + "graphFilters": { + "clearFilters": "Pulisci i filtri", + "durationGte": "Durata minima (s)", + "durationGteHint": "Per i Task mappati misura l'intervallo totale di tutte le istanze", + "mapIndex": "Map index minimo", + "mapIndexHint": "Mostra i Task mappati espansi almeno fino a questo indice", + "selectStatus": "Seleziona lo stato", + "selectTaskGroup": "Seleziona il gruppo di Task", + "title": "Filtri dei Task" + }, + "showVersionIndicator": { + "label": "Mostra l'indicatore di versione", + "options": { + "hideAll": "Nascondi tutto", + "showAll": "Mostra tutto", + "showBundleVersion": "Mostra la versione del Bundle", + "showDagVersion": "Mostra la versione del Dag" + } + }, + "taskStreamFilter": { + "activeFilter": "Filtro attivo", + "clearFilter": "Pulisci il filtro", + "clickTask": "Fai clic su un Task per usarlo come radice del filtro", + "depth": "Profondità", + "direction": "Direzione", + "label": "Filtro", + "mode": "Modalità", + "modeTooltip": "La modalità statica mantiene la vista corrente quando passi ad altri Task. La modalità di attraversamento aggiorna il filtro attivo sul Task su cui fai clic, per seguire il Dag più facilmente.", + "modes": { + "static": "Statica", + "traverse": "Attraversamento" + }, + "options": { + "both": "Sia upstream sia downstream", + "downstream": "Downstream", + "upstream": "Upstream" + }, + "selectedTask": "Task selezionato" } }, "paramsFailed": "Impossibile caricare i parametri", @@ -142,6 +275,7 @@ "auditLog": "Registro di Controllo (Logs)", "backfills": "Backfills", "calendar": "Calendario", + "callbacks": "Callbacks", "code": "Codice", "details": "Dettagli", "logs": "Logs", @@ -154,11 +288,112 @@ "requiredActions": "Azioni Richieste", "runs": "Run", "taskInstances": "Istanze di Task", + "taskStateStore": "Store di stato del Task", "tasks": "Tasks", + "versions": "Versioni", "xcom": "XCom" }, "taskGroups": { "collapseAll": "Collassa tutti i gruppi di task", "expandAll": "Espandi tutti i gruppi di task" + }, + "taskStateStore": { + "add": "Aggiungi store di stato del Task", + "clearAll": { + "resource": "tutto lo store di stato dei Task", + "title": "Cancella tutto lo store di stato dei Task", + "warning": "Lo store di stato dei Task verrà azzerato. I Task che lo usano per seguire lavoro esterno non potranno riprenderlo senza rieseguire dall'inizio." + }, + "delete": "Elimina lo store di stato del Task", + "deleteWarning": "Il Task perderà questa memoria persistente. Se usa questa chiave per seguire lavoro esterno (per esempio un ID di lavoro esterno), non potrà riprenderlo.", + "edit": "Modifica lo store di stato del Task", + "emptyStore": "Lo store di stato del Task memorizza valori che restano tra un tentativo e l'altro. I worker possono scrivere nello store di stato del Task tramite il Task SDK.", + "entry_many": "Voci", + "entry_one": "Voce", + "entry_other": "Voci", + "entry_zero": "Nessuna voce", + "expiresAt": { + "column": "Scade il", + "custom": "Personalizzata", + "default": "Predefinita ({{interval}})", + "label": "Scadenza", + "never": "Mai" + }, + "title": "Store di stato del Task" + }, + "versions": { + "base": "Confronta da", + "categories": { + "asset": "Asset", + "authorization": "Autorizzazione", + "callback": "Callback", + "deadline": "Scadenza", + "dependency": "Dipendenza", + "metadata": "Metadati", + "param": "Parametro", + "provenance": "Provenienza", + "schedule": "Programmazione", + "task": "Task", + "unknown": "Sconosciuto" + }, + "codeAccess": "I valori richiedono l'accesso al codice del Dag", + "columns": { + "after": "Dopo", + "before": "Prima", + "category": "Categoria", + "impact": "Impatto", + "operation": "Operazione", + "path": "Percorso" + }, + "heading": "Versione {{base}} → Versione {{target}}", + "impacts": { + "authorization": "Autorizzazione", + "execution": "Esecuzione", + "metadata": "Metadati", + "provenance": "Provenienza", + "unknown": "Sconosciuto" + }, + "limitReached": { + "description": "Ci sono più modifiche di quante ne consenta il limite Massimo di modifiche. Alza il limite per vedere il resto.", + "descriptionDefault": "Ci sono più modifiche di quante ne consenta il limite predefinito. Alza Massimo di modifiche per vedere il resto.", + "title": "Sono mostrate solo le prime {{limit, number}} modifiche" + }, + "maxChanges": "Massimo di modifiche", + "maxChangesDefault": "Predefinito", + "noChanges": "Queste versioni hanno lo stesso stato.", + "operations": { + "added": "Aggiunto", + "changed": "Modificato", + "removed": "Rimosso" + }, + "pathOccurrences_many": "{{count, number}} di modifiche condividono questo percorso", + "pathOccurrences_one": "{{count, number}} modifica condivide questo percorso", + "pathOccurrences_other": "{{count, number}} modifiche condividono questo percorso", + "pathOccurrences_zero": "Nessuna modifica condivide questo percorso", + "pathOccurrencesAtLeast_many": "Almeno {{count, number}} di modifiche condividono questo percorso", + "pathOccurrencesAtLeast_one": "Almeno {{count, number}} modifica condivide questo percorso", + "pathOccurrencesAtLeast_other": "Almeno {{count, number}} modifiche condividono questo percorso", + "pathOccurrencesAtLeast_zero": "Nessuna modifica condivide questo percorso", + "record_many": "Record", + "record_one": "Record", + "record_other": "Record", + "record_zero": "Nessun record", + "schemaChange": "Schema serializzato {{baseSchema}} → {{targetSchema}}", + "selectPrompt": "Seleziona due versioni per vedere che cosa è cambiato.", + "summary_many": "{{count, number}} di modifiche", + "summary_one": "{{count, number}} modifica", + "summary_other": "{{count, number}} modifiche", + "summary_zero": "Nessuna modifica", + "summaryAtLeast_many": "Almeno {{count, number}} di modifiche", + "summaryAtLeast_one": "Almeno {{count, number}} modifica", + "summaryAtLeast_other": "Almeno {{count, number}} modifiche", + "summaryAtLeast_zero": "Nessuna modifica", + "target": "Confronta con", + "unavailable": { + "description": "Non è stato possibile confrontare queste versioni. Motivo:", + "title": "Confronto non disponibile", + "withoutReason": "Non è stato possibile confrontare queste versioni." + }, + "valuesHidden": "Valori nascosti" } } 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 index 5af8b24da40..00a8e1bc4fe 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/it/dags.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/dags.json @@ -6,6 +6,11 @@ "warning": "Questo rimuoverà tutti i metadati relativi al Dag, compresi i Run e le Task." } }, + "draining": { + "badgeTooltip": "Questo Dag va in pausa quando terminano i run in corso.", + "label": "In drenaggio", + "tooltip": "Drenaggio di {{dagDisplayName}} — va in pausa quando terminano i run in corso. Fai clic per riprendere." + }, "favoriteDag": "Dag Preferito", "filters": { "allRunTypes": "Tutti i Tipi di Run", @@ -15,14 +20,36 @@ "favorite": "Preferito", "unfavorite": "Rimuovi dai preferiti" }, + "favoriteState": "Stato preferito", + "favoriteStatePlaceholder": "Seleziona lo stato preferito…", + "noTimetableTypesFound": "Nessun tipo di programmazione trovato", "paused": { "active": "Attivo", "all": "Tutti", "paused": "In Pausa" }, - "runIdPatternFilter": "Cercare Dag Runs" + "pausedPlaceholder": "Seleziona lo stato di pausa…", + "pausedState": "Stato di pausa", + "requiresHitlAction": "Richiede un'azione HITL", + "runIdPatternFilter": "Cercare Dag Runs", + "runState": "Stato del run", + "runStatePlaceholder": "Seleziona lo stato del run…", + "timetableType": "Tipo di programmazione" + }, + "folders": { + "all": "Tutti i Dag", + "empty": "Nessuna cartella", + "hide": "Nascondi le cartelle", + "show": "Mostra le cartelle", + "title": "Cartelle" }, "ownerLink": "Link dell'Owner per {{owner}}", + "recentTaskStateCounts": { + "description": "Stato dei Task di tutti i run del Dag in corso o, se non ce n'è nessuno, del run più recente. Puoi disattivarlo nelle impostazioni utente.", + "label": "Task recenti", + "loading": "Caricamento dei conteggi di stato dei Task recenti", + "tooltip": "{{state}}: {{formattedCount}} — fai clic per filtrare i Task" + }, "runAndTaskActions": { "affectedTasks": { "noItemsFound": "Nessuna task trovata.", @@ -34,6 +61,15 @@ "error": "Impossibile pulire {{type}}", "title": "Pulisci {{type}}" }, + "clearAllMapped": { + "button": "Pulisci tutti i Task mappati", + "buttonTooltip": "Premi shift+c per pulire tutte le istanze di Task mappate", + "title": "Pulisci tutte le istanze di Task mappate" + }, + "confirmationDialog": { + "description": "Il Task è nello stato {{state}}, avviato dall'utente {{user}} alle {{time}}. \nNon puoi pulire questo Task finché l'esecuzione non è terminata, oppure finché un utente non deseleziona l'opzione \"Impedisci la riesecuzione se la task è in esecuzione\" nella finestra di pulizia.", + "title": "Impossibile pulire l'istanza di Task" + }, "delete": { "button": "Elimina {{type}}", "dialog": { @@ -53,25 +89,47 @@ "failed": "Premi shift+f per marcare come fallito", "success": "Premi shift+s per marcare come successo" }, + "skippedInfo": "Marcare un'istanza di Task come saltata registra che non è stata eseguita di proposito. I Task downstream vengono comunque valutati in base alle regole di trigger: con la regola predefinita \"all_success\" verranno saltati anch'essi. Si possono saltare solo le istanze che non hanno ancora iniziato l'esecuzione, e viene toccata solo questa istanza.", "title": "Marca {{type}} come {{state}}" }, "options": { "downstream": "Downstream", "existingTasks": "Pulisci le task esistenti", "future": "Futuro", + "keepTaskState": "Conserva lo stato del Task e riprendi", + "laterIterations": "Iterazioni successive", "onlyFailed": "Pulisci solo le task fallite", "past": "Passato", "preventRunningTasks": "Impedisci la riesecuzione se la task è in esecuzione", "queueNew": "Inserisci nuove task", "runOnLatestVersion": "Esegui con l'ultima versione del bundle", - "upstream": "Upstream" + "runOnLatestVersionForced": "Usa sempre l'ultima versione: non c'è una versione precedente a cui tornare", + "upstream": "Upstream", + "wholeExpansion": "Espansione completa" } }, + "runStateCounts": { + "label": "Stati dei run", + "loading": "Caricamento dei conteggi di stato dei run", + "tooltip": "{{state}}: {{formattedCount}} — fai clic per filtrare i run" + }, + "schedulingActions": { + "cancelDrain": "Annulla il drenaggio", + "drain": "Drena e poi metti in pausa", + "drainPrompt": "Questo Dag ha run in corso. Il drenaggio li lascia terminare prima che il Dag vada in pausa; mettere in pausa ora interrompe subito la programmazione, senza attenderli.", + "pauseNow": "Metti in pausa ora", + "pauseSelected": "Pausa / Drenaggio" + }, + "schedulingBanner": { + "message": "Questo Dag è in drenaggio. Andrà in pausa quando termineranno i run in corso." + }, "search": { "advanced": "RiCercare Avanzata", "clear": "Pulisci la ricerca", + "dagRuns": "Cercare $t(common:dagRun_other)", "dags": "Cercare Dag", "hotkey": "+K", + "mapIndexes": "Cercare $t(common:mapIndex)", "tasks": "Cercare Task" }, "sort": { @@ -79,9 +137,9 @@ "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)" + "lastRunAfter": { + "asc": "Ordina per ultimo run dopo (dal meno recente)", + "desc": "Ordina per ultimo run dopo (dal più recente)" }, "lastRunState": { "asc": "Ordina per Stato del Run più Recente (A-Z)", 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 index db693995ab2..08468e4115e 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/it/dashboard.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/dashboard.json @@ -1,6 +1,28 @@ { + "alerts": { + "seeLessContext": "Vedi meno", + "seeMoreContext": "Vedi di più", + "showMoreAlerts_many": "+{{count, number}} di altri avvisi", + "showMoreAlerts_one": "+{{count, number}} altro avviso", + "showMoreAlerts_other": "+{{count, number}} altri avvisi", + "showMoreAlerts_zero": "Nessun altro avviso" + }, + "deadlines": { + "pending": { + "empty": "Nessuna scadenza imminente", + "title": "Imminenti" + }, + "recentlyMissed": { + "empty": "Nessuna scadenza non rispettata", + "title": "Scadenze non rispettate" + }, + "showMore": "Mostra altro", + "title": "Scadenze" + }, + "deferredSlotsNotCounted": "Differiti non conteggiati negli slot: {{count, number}}", + "deferredSlotsNotCountedTooltip": "I Task differiti mostrati nella barra sono conteggiati negli slot del Pool. Quelli sotto la barra provengono da Pool che non conteggiano i Task differiti negli slot.", "favorite": { - "favoriteDags_many": "{{count, number}} Dags preferiti", + "favoriteDags_many": "Primi {{count, number}} di Dags preferiti", "favoriteDags_one": "Primo {{count, number}} Dag preferito", "favoriteDags_other": "Primi {{count, number}} Dags preferiti", "favoriteDags_zero": "Nessun Dag preferito", @@ -10,17 +32,35 @@ "group": "Gruppo", "health": { "dagProcessor": "Processore del Dag", + "degraded": "Degradato", + "degradedHint": { + "dagProcessor": "Alcuni Dag Bundle configurati non hanno un processore di Dag che li analizzi.", + "triggerer": "Alcuni Team non hanno un Triggerer che esegua i loro Task differiti." + }, + "down": "Non raggiungibile", "health": "Salute", "healthy": "Sano", + "instances": { + "bundles": "Bundle", + "hostname": "Host", + "team": "Team", + "title_many": "{{title}} — {{status}} ({{count, number}} istanze)", + "title_one": "{{title}} — {{status}} ({{count, number}} istanza)", + "title_other": "{{title}} — {{status}} ({{count, number}} istanze)", + "title_zero": "{{title}} — {{status}} (nessuna istanza)", + "unknownHostname": "Host sconosciuto" + }, "lastHeartbeat": "Ultimo Heartbeat", "metaDatabase": "Database di metadati", "scheduler": "Pianificatrice", "status": "Stato", "triggerer": "Triggerer", - "unhealthy": "Malato" + "unhealthy": "Malato", + "unknownStatus": "Sconosciuto" }, "history": "Cronologia", "importErrors": { + "bundle": "Bundle", "dagImportError_many": "Errori di Importazione Dag", "dagImportError_one": "Errore di Importazione Dag", "dagImportError_other": "Errori di Importazione Dag", @@ -33,7 +73,8 @@ "poolSlots": "Slot del Pool", "sortBy": { "newestFirst": "Più Recenti", - "oldestFirst": "Più Vecchi" + "oldestFirst": "Più Vecchi", + "placeholder": "Ordina per" }, "source": "Fonte", "stats": { 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 index e7fa3cc6bd4..a86d9b6413b 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/it/hitl.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/hitl.json @@ -1,8 +1,7 @@ { "filters": { "body": "Corpo", - "createdAtFrom": "Creato da", - "createdAtTo": "Creato fino a", + "createdAt": "Creato il", "response": { "all": "Tutte", "pending": "In attesa", @@ -29,6 +28,20 @@ "success": "Risposta di {{taskId}} riuscita", "title": "Istanza di Task Umana - {{taskId}}" }, + "review": { + "detail": { + "selectRequiredAction": "Seleziona un'azione richiesta per vedere i dettagli" + }, + "list": { + "completedRequiredActions": "Azioni richieste completate ({{count, number}})", + "loadError": "Impossibile caricare le azioni richieste", + "loadingActions": "Caricamento delle azioni richieste...", + "pendingRequiredActions": "Azioni richieste in sospeso ({{count, number}})" + }, + "openReviewDrawer": "Apri il pannello di revisione", + "pageLimitHint": "Qui sono mostrate solo le prime azioni. Usa \"$t(review.viewAll)\" per vederle tutte.", + "viewAll": "Vedi tutte le azioni richieste" + }, "state": { "approvalReceived": "Approvazione ricevuta", "approvalRequired": "Approvazione richiesta",
