Files
Nitro-V3/public/configuration/housekeeping-texts-it.example
T
simoleo89 b8675b9dc3 feat(hk): reveal-and-copy card for reset password (+ catalog cleanup)
Two things in one commit because they sit on top of each other:

1. **Reset password reveal card.** The emulator's
   `HousekeepingResetUserPasswordEvent` already returns the freshly
   generated 12-char plaintext in the action-result `message`, but
   the client was leaking it through the standard success-banner
   pipeline — auto-dismiss in 4s, truncated, no copy button. Operators
   were missing it.

   - New `<HousekeepingPasswordReveal />` card mounted in the panel
     header (between the status banner and tab content). Stays put
     until manually dismissed.
   - `useHousekeepingStore` gains a dedicated `passwordReveal` slot
     (`{ userId, username, password }`) plus `revealPassword()` /
     `clearPasswordReveal()` setters. Sensitive data, kept OUT of the
     generic banner / toast pipeline.
   - `useHousekeepingActions.resetUserPassword` no longer routes
     through `wrap()` — it intercepts the result, lifts the
     plaintext into the reveal slot, and uses a localizable success
     key (`housekeeping.action.reset_password.done`) for the banner so
     the password itself never lands there.
   - Copy button uses `navigator.clipboard.writeText` in secure
     contexts with a `document.execCommand('copy')` fallback for
     http:// deployments. Confirmation icon flips to a checkmark for
     ~1.6s on success. The input is `select-all` + auto-select on
     focus so Ctrl+C is also a manual fallback.
   - 8 new i18n keys (EN + IT, .example + runtime UITexts.json5 /
     UITexts.en.json5).

2. **Catalog admin cleanup ported from the PR branch.** The dev
   branch was still carrying the catalog admin code (handlers, hooks,
   store slots, i18n keys) even though the local renderer is on the
   catalog-stripped `feat/housekeeping-packets` branch — typecheck
   was breaking because the catalog composers no longer exist on the
   linked renderer. Stripped here to match: 4 catalog actions
   removed from `HousekeepingActionType`, `HousekeepingApi.ts`,
   `useHousekeepingActions`, `useHousekeepingStore`. The CATALOG tab
   id is gone from `HousekeepingTabId`. Catalog interfaces
   (`IHousekeepingCatalogPage` / `IHousekeepingCatalogOffer`) are
   dropped. 17 catalog i18n keys removed per locale. Two test files
   updated to match.
2026-05-24 16:56:39 +02:00

158 lines
8.8 KiB
Plaintext

{
"housekeeping.title": "Housekeeping",
"housekeeping.mode.light": "Light",
"housekeeping.tab.dashboard": "Dashboard",
"housekeeping.tab.users": "Utenti",
"housekeeping.tab.rooms": "Stanze",
"housekeeping.tab.economy": "Economia",
"housekeeping.tab.audit": "Audit",
"housekeeping.confirm.title": "Conferma azione",
"housekeeping.confirm.proceed": "Procedi",
"housekeeping.confirm.cancel": "Annulla",
"housekeeping.status.dismiss": "Chiudi",
"housekeeping.action.pending": "Azione in corso…",
"housekeeping.action.success": "Azione completata",
"housekeeping.action.error": "Azione fallita",
"housekeeping.action.reset_password.done": "Password resettata — la nuova password è mostrata sotto.",
"housekeeping.password.title": "%username% (#%id%) · nuova password",
"housekeeping.password.value_label": "Password generata",
"housekeeping.password.copy": "Copia",
"housekeeping.password.copied": "Copiata",
"housekeeping.password.copy_failed": "Copia fallita",
"housekeeping.password.dismiss": "Chiudi",
"housekeeping.password.hint": "Condividila con l'utente fuori dal client. La password viene mostrata una sola volta — chiudi questa card quando hai finito, non sarà più visibile.",
"housekeeping.error.invalid_input": "Input non valido — controlla l'id utente e il valore inserito.",
"housekeeping.error.user_not_found": "Utente non trovato.",
"housekeeping.error.user_offline": "Utente offline — questa azione funziona solo sugli utenti online.",
"housekeeping.error.target_unkickable": "Questo utente non può essere espulso.",
"housekeeping.error.ban_failed": "Impossibile applicare il ban — il server ha rifiutato la richiesta.",
"housekeeping.error.no_active_ban": "Nessun ban attivo da rimuovere per questo utente.",
"housekeeping.error.rank_not_found": "Rank non trovato — scegli un rank presente in permission_ranks.",
"housekeeping.error.db_failed": "Errore database — controlla il log dell'emulatore per l'eccezione SQL.",
"housekeeping.error.hash_failed": "Impossibile generare l'hash della nuova password — SHA-256 non disponibile sulla JVM.",
"housekeeping.error.room_not_found": "Stanza non trovata.",
"housekeeping.error.room_action_failed": "Impossibile applicare l'azione sulla stanza.",
"housekeeping.error.new_owner_not_found": "Nuovo proprietario non trovato.",
"housekeeping.error.economy_failed": "Impossibile applicare l'azione economy — controlla id utente e importo.",
"housekeeping.error.alert_empty": "Il messaggio di hotel-alert non può essere vuoto.",
"housekeeping.action.ban_h": "Ban %h%h",
"housekeeping.action.mute_min": "Mute %m%m",
"housekeeping.action.trade_lock_h": "Blocco scambi %h%h",
"housekeeping.action.kick": "Kick",
"housekeeping.action.unban": "Sblocca",
"housekeeping.action.force_disconnect": "Forza disconnessione",
"housekeeping.action.set_rank": "Imposta rank",
"housekeeping.action.reset_password": "Reset password",
"housekeeping.user.search.placeholder": "Cerca per nome…",
"housekeeping.user.search.button": "Cerca",
"housekeeping.user.clear": "Deseleziona",
"housekeeping.user.none": "Nessun utente selezionato — cerca uno qui sopra.",
"housekeeping.user.not_found": "Utente non trovato.",
"housekeeping.user.credits": "Crediti",
"housekeeping.user.duckets": "Pixel / duckets",
"housekeeping.user.diamonds": "Diamanti",
"housekeeping.user.audit_hint": "Ogni azione viene registrata nel tab Audit.",
"housekeeping.user.live.label": "Live (stanza corrente)",
"housekeeping.user.live.kick": "Kick",
"housekeeping.user.live.mute_2m": "Mute 2m",
"housekeeping.user.live.mute_10m": "Mute 10m",
"housekeeping.user.live.ban_h": "Ban 1h",
"housekeeping.user.live.ban_d": "Ban 1g",
"housekeeping.room.search.placeholder": "ID stanza…",
"housekeeping.room.search.button": "Cerca",
"housekeeping.room.clear": "Deseleziona",
"housekeeping.room.none": "Nessuna stanza selezionata — inserisci un ID.",
"housekeeping.room.not_found": "Stanza non trovata.",
"housekeeping.room.open": "Apri",
"housekeeping.room.close": "Chiudi",
"housekeeping.room.mute_min": "Mute %m%m",
"housekeeping.room.kick_all": "Kick tutti",
"housekeeping.room.kick_all.confirm": "Cacciare ogni utente attualmente nella stanza?",
"housekeeping.room.delete": "Elimina stanza",
"housekeeping.room.delete.confirm": "Eliminare la stanza e tutti i suoi mobili in modo permanente?",
"housekeeping.room.transfer": "Trasferisci",
"housekeeping.room.transfer.label": "Trasferisci proprietà",
"housekeeping.room.transfer.new_owner": "ID nuovo owner",
"housekeeping.economy.select_user": "Seleziona prima un utente nel tab Utenti.",
"housekeeping.economy.target": "Target: %username% (#%id%)",
"housekeeping.economy.give_credits": "Dai crediti",
"housekeeping.economy.give_duckets": "Dai duckets",
"housekeeping.economy.give_diamonds": "Dai diamanti",
"housekeeping.economy.grant_item": "Assegna",
"housekeeping.economy.grant_item.label": "Assegna oggetto del catalogo",
"housekeeping.economy.item_id": "ID oggetto",
"housekeeping.economy.item_quantity": "Q.tà",
"housekeeping.economy.set_hc_days": "Imposta giorni HC",
"housekeeping.hotel.alert.label": "Avviso a tutto l'hotel",
"housekeeping.hotel.alert.placeholder": "Messaggio mandato a ogni utente connesso…",
"housekeeping.hotel.alert.send": "Invia a tutti",
"housekeeping.hotel.alert.confirm": "Trasmettere un avviso di %count% caratteri a ogni utente connesso?",
"housekeeping.dashboard.title": "Panoramica",
"housekeeping.dashboard.refresh": "Aggiorna",
"housekeeping.dashboard.loading": "Caricamento dashboard…",
"housekeeping.dashboard.unavailable": "Dashboard non disponibile — verifica l'endpoint admin.",
"housekeeping.dashboard.online": "Online",
"housekeeping.dashboard.total_users": "%count% totali",
"housekeeping.dashboard.rooms_active": "Stanze attive",
"housekeeping.dashboard.total_rooms": "%count% totali",
"housekeeping.dashboard.peak_today": "Picco oggi",
"housekeeping.dashboard.peak_alltime": "Picco assoluto %count%",
"housekeeping.dashboard.pending_tickets": "Ticket",
"housekeeping.dashboard.sanctions_24h": "%count% sanzioni / 24h",
"housekeeping.dashboard.server": "Server",
"housekeeping.dashboard.recent_sanctions": "Sanzioni recenti",
"housekeeping.dashboard.recent_lookups": "Ricerche recenti",
"housekeeping.audit.title": "Audit log",
"housekeeping.audit.refresh": "Aggiorna",
"housekeeping.audit.filter.all": "Tutto",
"housekeeping.audit.filter.users": "Utenti",
"housekeeping.audit.filter.rooms": "Stanze",
"housekeeping.audit.filter.hotel": "Hotel",
"housekeeping.audit.search.placeholder": "Cerca attore / target / azione…",
"housekeeping.audit.empty": "Nessuna voce di audit.",
"housekeeping.audit.no_match": "Nessuna voce corrisponde ai filtri.",
"housekeeping.field.reason": "Motivo",
"housekeeping.field.reason.placeholder": "Motivo libero (opzionale)",
"housekeeping.field.duration": "Durata",
"housekeeping.reason.default": "Nessun motivo fornito.",
"housekeeping.menu.send_to_hk": "Manda all'HK",
"housekeeping.bulk.done": "Bulk completato",
"housekeeping.bulk.success": "Tutte le azioni bulk sono riuscite.",
"housekeeping.bulk.partial": "Bulk terminato con alcuni errori.",
"housekeeping.bulk.failed": "Ogni azione bulk è fallita.",
"housekeeping.bulk.confirm": "Applicare %action% a %count% utenti selezionati?",
"housekeeping.bulk.label": "%count% selezionati",
"housekeeping.bulk.clear": "Pulisci selezione",
"housekeeping.bulk.apply": "Applica ai selezionati",
"housekeeping.telemetry.title": "Telemetria",
"housekeeping.telemetry.empty": "Nessuna azione ancora osservata.",
"housekeeping.telemetry.reset": "Resetta metriche",
"housekeeping.live.no_room": "Nessuna stanza attiva.",
"housekeeping.live.kicked": "Cacciato dalla stanza.",
"housekeeping.live.banned": "Bannato dalla stanza.",
"housekeeping.live.muted": "Mutato nella stanza.",
"housekeeping.validation.empty_username": "Il nome utente non può essere vuoto.",
"housekeeping.validation.invalid_user_id": "ID utente non valido.",
"housekeeping.validation.invalid_room_id": "ID stanza non valido.",
"housekeeping.validation.invalid_amount": "Quantità non valida.",
"housekeeping.validation.amount_too_large": "Quantità oltre il limite di sicurezza.",
"housekeeping.validation.empty_reason": "Il motivo non può essere vuoto.",
"housekeeping.validation.invalid_hours": "Durata in ore non valida.",
"housekeeping.validation.invalid_rank": "Rank non valido — deve essere tra 1 e 12."
}