Check, format and test / build (push) Successful in 10m25s
The review screen now tracks whether there are edits not yet exported and asks for confirmation before discarding them: clicking back, or closing the app window entirely (intercepted via onCloseRequested, which needed a core:window:allow-destroy capability that wasn't granted by core:default). The confirmation dialog (ConfirmDialog.svelte) is generic, built on a shared ModalFrame extracted from ExportModal so the two don't duplicate the backdrop/box styling. Also adds undo: a per-row button (icon-only, left of the note, shown when that day has edits) reverts just that day instantly, and a per-employee "undo all" (icon in a red box, last among the header's tools) reverts every day for the current employee after a confirmation dialog, since that one can't be undone itself. ActionButton moves out of review/ next to IconButton/PillButton, since ConfirmDialog (outside the review feature) now uses it too. Assisted-by: Claude Sonnet 5 <noreply@anthropic.com>
193 lines
8.9 KiB
JSON
193 lines
8.9 KiB
JSON
{
|
||
"loading": "Caricamento...",
|
||
"onboarding": {
|
||
"title": "Benvenuto!",
|
||
"subtitle": "Collega Oxibadge al tuo timbratore inserendo il suo indirizzo IP e la porta.",
|
||
"host_label": "Indirizzo IP",
|
||
"port_label": "Porta",
|
||
"hint": "Trovi l'indirizzo nelle impostazioni di rete del timbratore.",
|
||
"button": {
|
||
"idle": "Testa connessione",
|
||
"testing": "Connessione in corso...",
|
||
"retry": "Riprova"
|
||
}
|
||
},
|
||
"confirm_month": {
|
||
"title": "Conferma del mese",
|
||
"subtitle": "Stai per confermare le timbrature di questo mese. Tocca il mese o l'anno per cambiarli.",
|
||
"change_month_aria": "Mese: {month}, cambia",
|
||
"change_year_aria": "Anno: {year}, cambia",
|
||
"close_aria": "Chiudi selezione",
|
||
"choose_month_aria": "Scegli il mese",
|
||
"choose_year_aria": "Scegli l'anno",
|
||
"month_option_aria": "{month} {year}",
|
||
"button": "Vai alle timbrature"
|
||
},
|
||
"loading_records": {
|
||
"title": "Scarico le timbrature...",
|
||
"description": "Sto leggendo dal timbratore le timbrature di <strong>{period}</strong>. Può richiedere qualche secondo."
|
||
},
|
||
"loading_employees": {
|
||
"title": "Recupero i dipendenti...",
|
||
"description": "Sto leggendo i nomi dei dipendenti registrati sul timbratore. Ci vuole solo un attimo."
|
||
},
|
||
"errors": {
|
||
"title": "Impossibile raggiungere il timbratore"
|
||
},
|
||
"review": {
|
||
"title": "Revisione timbrature",
|
||
"day_word": "{n, plural, one {1 giorno} other {{n} giorni}}",
|
||
"to_check": "da controllare",
|
||
"to_round": "da arrotondare",
|
||
"to_check_cap": "Da controllare",
|
||
"to_round_cap": "Da arrotondare",
|
||
"shift_1": "1° turno",
|
||
"shift_2": "2° turno",
|
||
"issue_stacked": "{total} timbrature tutte sul {shift}",
|
||
"issue_invalid_time": "Orario non valido (usa HH:MM)",
|
||
"issue_lunch_missing": "Pausa pranzo non timbrata",
|
||
"issue_missing_out": "Manca l’uscita del {shift}",
|
||
"issue_missing_in": "Manca l’entrata del {shift}",
|
||
"issue_out_before_in": "Uscita prima dell’entrata ({shift})",
|
||
"info_unrounded": "Orari non arrotondati a {step} min",
|
||
"note_empty": "Nessuna timbratura",
|
||
"note_lunch_added": "Pausa pranzo aggiunta",
|
||
"note_shifts_fixed": "Turni sistemati",
|
||
"note_edited": "{n, plural, one {1 orario modificato} other {{n} orari modificati}}",
|
||
"note_rounded": "{n, plural, one {1 orario arrotondato} other {{n} orari arrotondati}}",
|
||
"export_done": "Esportazione completata: {who}",
|
||
"everyone": "tutti i dipendenti",
|
||
"only_unrounded": "{days} con orari non arrotondati",
|
||
"confirm_title_all": "Ci sono {summary}",
|
||
"confirm_title_one": "{name} ha {summary}",
|
||
"close_menu_aria": "Chiudi menu",
|
||
"no_records": "Nessuna timbratura trovata per questo mese.",
|
||
"back_to_month": "Torna alla scelta del mese",
|
||
"export": "Esporta",
|
||
"export_options_aria": "Altre opzioni di esportazione",
|
||
"all_employees": "Tutti i dipendenti",
|
||
"employee_count": "{n} dipendenti",
|
||
"all_good": "tutto a posto",
|
||
"all_good_cap": "Tutto a posto",
|
||
"only_name": "Solo {name}",
|
||
"employees_nav_aria": "Dipendenti",
|
||
"search_employee": "Cerca dipendente",
|
||
"days_to_check_aria": "{n} giorni da controllare",
|
||
"days_to_round_aria": "{n} giorni da arrotondare",
|
||
"no_problem_aria": "Nessun problema",
|
||
"employee_name_aria": "Nome del dipendente",
|
||
"save_name": "Salva nome",
|
||
"save": "Salva",
|
||
"cancel": "Annulla",
|
||
"edit_name": "Modifica nome",
|
||
"days_worked": "giorni lavorati",
|
||
"total_hours": "ore totali",
|
||
"edited": "modificati",
|
||
"fix_shifts_title": "Riordina in ordine di orario le timbrature finite tutte nello stesso turno",
|
||
"fix_shifts": "Sistema turni ({days})",
|
||
"fix_shifts_short": "Sistema turni",
|
||
"add_lunch_title": "Inserisce la pausa {start}–{end} nei giorni con solo entrata del mattino e uscita della sera",
|
||
"add_lunch": "Aggiungi pausa pranzo ({days})",
|
||
"lunch_short": "Pausa",
|
||
"round_title": "Arrotonda all'orario più vicino",
|
||
"round_all": "Arrotonda a {step} min ({days})",
|
||
"round_short": "Arrotonda",
|
||
"day_filter_aria": "Filtro giorni",
|
||
"all_days": "Tutti i giorni",
|
||
"col_day": "Giorno",
|
||
"col_in": "Entrata",
|
||
"col_out": "Uscita",
|
||
"col_hours": "Ore",
|
||
"col_notes": "Note",
|
||
"col_in_1": "Entrata 1° turno",
|
||
"col_out_1": "Uscita 1° turno",
|
||
"col_in_2": "Entrata 2° turno",
|
||
"col_out_2": "Uscita 2° turno",
|
||
"cell_aria": "{label}, {col}",
|
||
"cell_aria_stacked": "{label}, {col} ({index} di {total})",
|
||
"fix_shifts_day_aria": "Sistema i turni di {label}",
|
||
"add_lunch_day_aria": "Aggiungi pausa pranzo {start}–{end} a {label}",
|
||
"round_day_aria": "Arrotonda gli orari di {label}",
|
||
"no_rows": "Nessun giorno da controllare per questo dipendente.",
|
||
"cancel_export_aria": "Annulla esportazione",
|
||
"export_warning_issues": "Se esporti ora, questi giorni finiranno nel file con orari mancanti, da verificare o non arrotondati. Puoi tornare indietro e sistemarli, oppure esportare comunque.",
|
||
"export_warning_unrounded": "Gli orari sono completi, ma alcuni non sono arrotondati a {step} minuti. Puoi arrotondarli automaticamente prima di esportare, oppure esportarli così come sono.",
|
||
"back_to_review": "Torna alla revisione",
|
||
"round_and_export": "Arrotonda ed esporta",
|
||
"export_anyway": "Esporta comunque",
|
||
"leave_confirm_title": "Modifiche non esportate",
|
||
"leave_confirm_message": "Se esci ora, le modifiche fatte in questa revisione andranno perse.",
|
||
"leave_anyway": "Esci senza esportare",
|
||
"undo_day_aria": "Annulla le modifiche di {label}",
|
||
"undo_short": "Annulla",
|
||
"undo_all": "Annulla modifiche",
|
||
"undo_all_title": "Ripristina gli orari di questo dipendente a quelli letti dal timbratore",
|
||
"undo_all_confirm_title": "Annullare tutte le modifiche?",
|
||
"undo_all_confirm_message": "Tutti gli orari modificati per questo dipendente torneranno a quelli letti dal timbratore. L'operazione non si può annullare.",
|
||
"undo_all_confirm": "Annulla tutte le modifiche"
|
||
},
|
||
"settings": {
|
||
"title": "Impostazioni",
|
||
"device_title": "Timbratore",
|
||
"device_desc": "Il timbratore da cui Oxibadge scarica le timbrature.",
|
||
"device_label": "Indirizzo",
|
||
"status_testing": "Verifica…",
|
||
"status_ok": "Raggiungibile",
|
||
"status_idle": "Non verificato",
|
||
"edit_address": "Modifica indirizzo",
|
||
"test_connection": "Testa connessione",
|
||
"ip_label": "Indirizzo IP",
|
||
"port_label": "Porta",
|
||
"ip_invalid": "Formato non valido, es. 192.168.1.100",
|
||
"cancel": "Annulla",
|
||
"confirm": "Conferma",
|
||
"shifts_title": "Turni previsti",
|
||
"shifts_desc": "L'orario di lavoro standard. La pausa tra i due turni è quella usata da \"Aggiungi pausa pranzo\" nella revisione.",
|
||
"shift_1": "1° turno",
|
||
"shift_2": "2° turno",
|
||
"shift_in": "Entrata",
|
||
"shift_out": "Uscita",
|
||
"shift_error_format": "Inserisci tutti gli orari nel formato HH:MM.",
|
||
"shift_error_out1": "L'uscita del 1° turno deve essere dopo l'entrata.",
|
||
"shift_error_in2": "Il 2° turno deve iniziare dopo la fine del 1°.",
|
||
"shift_error_out2": "L'uscita del 2° turno deve essere dopo l'entrata.",
|
||
"hours_per_day_label": "Ore previste",
|
||
"per_day": "al giorno",
|
||
"break_label": "Pausa",
|
||
"round_title": "Arrotondamento orari",
|
||
"round_desc": "Gli orari vengono arrotondati al multiplo più vicino.",
|
||
"round_example": "Es. {from} → {to}.",
|
||
"round_label": "Minuti",
|
||
"minutes_short": "min",
|
||
"round_range": "Da 1 a 60 minuti",
|
||
"language_title": "Lingua",
|
||
"language_desc": "La lingua dell'interfaccia di Oxibadge.",
|
||
"save_idle": "Le modifiche vengono salvate automaticamente",
|
||
"save_saving": "Salvataggio…",
|
||
"save_saved": "Modifiche salvate",
|
||
"save_invalid": "Non salvato: correggi l'errore",
|
||
"save_failed": "Salvataggio non riuscito",
|
||
"employees_title": "Dipendenti",
|
||
"employees_count": "{n, plural, one {1 dipendente} other {{n} dipendenti}}",
|
||
"manage_employees": "Gestisci dipendenti",
|
||
"close_aria": "Chiudi",
|
||
"employee_name_aria": "Nome del dipendente #{id}",
|
||
"edit_name_aria": "Modifica nome di {name}",
|
||
"remove_name_aria": "Rimuovi {name} dalla cache",
|
||
"employee_remove_confirm": "Rimuovere {name}? Al prossimo controllo verrà chiesto di nuovo il nome.",
|
||
"remove": "Rimuovi",
|
||
"no_employees_found": "Nessun dipendente trovato.",
|
||
"employees_local_note": "I nomi modificati valgono solo in Oxibadge: il timbratore non viene mai scritto."
|
||
},
|
||
"new_employees": {
|
||
"title": "Nuovi dipendenti",
|
||
"subtitle": "{n, plural, one {Sul timbratore c'è 1 dipendente nuovo.} other {Sul timbratore ci sono {n} dipendenti nuovi.}}",
|
||
"hint": "Correggi i nomi se serve: valgono solo in Oxibadge.",
|
||
"missing_placeholder": "nome mancante",
|
||
"name_aria": "Nome del dipendente #{id}",
|
||
"renamed_count": "{n, plural, one {1 nome modificato} other {{n} nomi modificati}}",
|
||
"missing_count": "{n, plural, one {1 nome mancante} other {{n} nomi mancanti}}",
|
||
"continue": "Continua"
|
||
}
|
||
}
|