feat(oxibadge): add settings screen for shifts, rounding and language
Check, format and test / build (push) Successful in 10m22s

Add a settings screen (gear button on the month-confirmation screen)
to configure the expected shift times, the rounding step, the
interface language, and the time clock address — replacing the old
onboarding-only connection flow. Settings persist to the same
preferences.toml as the reader address, under a single load_settings/
save_settings command pair.

The review screen's "fix shifts" action now redistributes stacked
punches by nearest configured shift time instead of blind position,
and a stacked cell manually cleared down to one entry no longer
leaves a dangling empty input.

Assisted-by: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 18:29:57 +02:00
parent acd3efeac6
commit b65e85f908
26 changed files with 1397 additions and 118 deletions
+42
View File
@@ -115,5 +115,47 @@
"back_to_review": "Torna alla revisione",
"round_and_export": "Arrotonda ed esporta",
"export_anyway": "Esporta comunque"
},
"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"
}
}