feat: FASE 2 - Client Base (layout, login, navbar, tema, i18n)
Implementazione completa del frontend Flask: - Layout base.html con TailwindCSS CDN, dark/light theme, flash messages - Navbar responsive role-based (Maker, MeasurementTec, Metrologist, Admin) - Login page professionale con form + API integration - Profilo utente: nome, lingua, tema, badge ruoli - Sistema tema dark/light: CSS variables + Alpine.js store + localStorage - i18n completo IT/EN: Flask-Babel (.po) + alpinejs-i18n (JSON) - API Client riscritto: error handling normalizzato, no crash su 4xx/5xx - CSRF protection con Flask-WTF su tutti i form - Logo aziendale dinamico da system_settings - Asset SVG: tmflow-logo.svg + tmflow-icon.svg (favicon) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"numpad": {
|
||||
"title": "Tastierino Numerico",
|
||||
"clear": "Cancella",
|
||||
"submit": "Conferma",
|
||||
"decimal": "Virgola",
|
||||
"close": "Chiudi"
|
||||
},
|
||||
"measurement": {
|
||||
"pass": "Conforme",
|
||||
"warning": "Attenzione",
|
||||
"fail": "Non Conforme",
|
||||
"value": "Valore",
|
||||
"next": "Prossima misura"
|
||||
},
|
||||
"common": {
|
||||
"loading": "Caricamento...",
|
||||
"save": "Salva",
|
||||
"cancel": "Annulla",
|
||||
"confirm": "Conferma",
|
||||
"delete": "Elimina",
|
||||
"edit": "Modifica",
|
||||
"search": "Cerca...",
|
||||
"noResults": "Nessun risultato",
|
||||
"close": "Chiudi",
|
||||
"error": "Errore",
|
||||
"success": "Successo",
|
||||
"warning": "Attenzione",
|
||||
"info": "Info",
|
||||
"page": "Pagina",
|
||||
"of": "di",
|
||||
"previous": "Precedente",
|
||||
"next": "Successivo"
|
||||
},
|
||||
"theme": {
|
||||
"light": "Chiaro",
|
||||
"dark": "Scuro",
|
||||
"toggle": "Cambia tema"
|
||||
},
|
||||
"language": {
|
||||
"switch": "Cambia lingua",
|
||||
"it": "Italiano",
|
||||
"en": "English"
|
||||
},
|
||||
"auth": {
|
||||
"login": "Accedi al sistema",
|
||||
"username": "Username",
|
||||
"password": "Password",
|
||||
"signIn": "Accedi",
|
||||
"invalidCredentials": "Credenziali non valide",
|
||||
"enterCredentials": "Inserisci username e password",
|
||||
"forgotPassword": "Hai dimenticato la password? Contatta l'amministratore",
|
||||
"welcome": "Benvenuto, {name}!",
|
||||
"logoutSuccess": "Logout effettuato",
|
||||
"loginRequired": "Effettua il login per continuare"
|
||||
},
|
||||
"nav": {
|
||||
"measurements": "Misure",
|
||||
"recipes": "Ricette",
|
||||
"statistics": "Statistiche",
|
||||
"admin": "Admin",
|
||||
"users": "Utenti",
|
||||
"settings": "Impostazioni",
|
||||
"profile": "Profilo",
|
||||
"logout": "Esci"
|
||||
},
|
||||
"profile": {
|
||||
"title": "Profilo Utente",
|
||||
"displayName": "Nome Visualizzato",
|
||||
"language": "Lingua",
|
||||
"theme": "Tema",
|
||||
"roles": "Ruoli",
|
||||
"saveChanges": "Salva Modifiche",
|
||||
"updateSuccess": "Profilo aggiornato con successo"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user