From 9f1ca2e177039d06e33bb2119cf2efea5d268389 Mon Sep 17 00:00:00 2001 From: albanobattistella <34811668+albanobattistella@users.noreply.github.com> Date: Sat, 9 May 2026 15:58:48 +0200 Subject: [PATCH] Add Italian Translation --- frontend/js/i18n/it.js | 1108 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1108 insertions(+) create mode 100644 frontend/js/i18n/it.js diff --git a/frontend/js/i18n/it.js b/frontend/js/i18n/it.js new file mode 100644 index 0000000..00de295 --- /dev/null +++ b/frontend/js/i18n/it.js @@ -0,0 +1,1108 @@ +// Italian translations. This file is the source of truth for keys — +// every other locale should mirror its keys (or fall back to en). +export default { + // Nav (sidebar) + 'nav.displays': 'Schermi', + 'nav.content': 'Contenuti', + 'nav.playlists': 'Playlist', + 'nav.layouts': 'Layout', + 'nav.widgets': 'Widget', + 'nav.schedule': 'Programmazione', + 'nav.walls': 'Video Wall', + 'nav.reports': 'Report', + 'nav.kiosk': 'Chiosco', + 'nav.designer': 'Designer', + 'nav.activity': 'Attività', + 'nav.teams': 'Team', + 'nav.help': 'Aiuto', + 'nav.settings': 'Impostazioni', + 'nav.subscription': 'Abbonamento', + 'nav.admin': 'Admin', + + // Common (shared across views) + 'common.save': 'Salva', + 'common.cancel': 'Annulla', + 'common.delete': 'Elimina', + 'common.edit': 'Modifica', + 'common.done': 'Fatto', + 'common.loading': 'Caricamento...', + 'common.connected': 'Connesso', + 'common.disconnected': 'Disconnesso', + 'common.never': 'Mai', + 'common.just_now': 'Proprio ora', + 'common.minutes_ago': '{n}m fa', + 'common.hours_ago': '{n}h fa', + 'common.days_ago': '{n}g fa', + 'common.unknown': 'Sconosciuto', + + // Auth (login view) + 'auth.sign_in': 'Accedi', + 'auth.sign_out': 'Esci', + 'auth.create_account': 'Crea Account', + 'auth.create_admin_account': 'Crea Account Admin', + 'auth.email': 'Email', + 'auth.password': 'Password', + 'auth.name': 'Nome', + 'auth.placeholder_email': 'tu@esempio.it', + 'auth.placeholder_password': '••••••••', + 'auth.placeholder_name': 'Il tuo nome', + 'auth.placeholder_register_password': 'Almeno 6 caratteri', + 'auth.subtitle_setup': 'Crea il tuo account admin per iniziare', + 'auth.subtitle_signin': 'Accedi per gestire i tuoi schermi', + 'auth.trial_notice': 'I nuovi account ricevono una prova gratuita Pro di 14 giorni', + 'auth.divider_or': 'OPPURE', + 'auth.signin_google': 'Accedi con Google', + 'auth.signin_microsoft': 'Accedi con Microsoft', + 'auth.back_to_signin': 'Torna all\'accesso', + 'auth.support_access': 'Accesso Supporto', + 'auth.support_token_placeholder': 'Incolla il token di supporto', + 'auth.support_authenticate': 'Autenticati con Token di Supporto', + 'auth.terms': 'Termini di Servizio', + 'auth.privacy': 'Informativa sulla Privacy', + 'auth.error_email_password_required': 'Email e password richieste', + 'auth.error_password_min_6': 'La password deve contenere almeno 6 caratteri', + 'auth.error_login_failed': 'Accesso fallito', + 'auth.error_registration_failed': 'Registrazione fallita', + 'auth.error_paste_support_token': 'Incolla un token di supporto', + 'auth.error_support_failed': 'Accesso supporto fallito', + 'auth.error_google_failed': 'Accesso con Google fallito', + 'auth.error_microsoft_failed': 'Accesso con Microsoft fallito', + + // Dashboard + 'dashboard.title': 'Schermi', + 'dashboard.subtitle': 'Gestisci i tuoi schermi remoti', + 'dashboard.help_tip': 'I tuoi dispositivi associati. Verde = online, rosso = offline. Clicca su un dispositivo per gestire la sua playlist, visualizzare la telemetria o usare il controllo remoto.', + 'dashboard.add': 'Aggiungi Schermo', + 'dashboard.create_group': '+ Gruppo', + 'dashboard.search': 'Cerca schermi...', + 'dashboard.all_status': 'Tutti gli stati', + 'dashboard.online': 'Online', + 'dashboard.offline': 'Offline', + 'dashboard.awaiting_pairing': 'In attesa di associazione', + 'dashboard.no_preview': 'Nessuna anteprima disponibile', + 'dashboard.total_displays': 'Schermi Totali', + 'dashboard.ungrouped': 'Non raggruppati', + 'dashboard.no_displays': 'Nessun schermo presente', + 'dashboard.no_displays_desc': 'Installa l\'app ScreenTinker sulla tua TV e associala usando il pulsante sopra.', + 'dashboard.failed_to_load': 'Caricamento schermi fallito', + 'dashboard.unknown_playlist': 'Playlist sconosciuta', + 'dashboard.mixed_playlists': 'Playlist miste', + 'dashboard.playlist_label': 'Playlist: {name}', + 'dashboard.devices_count_one': '{n} dispositivo', + 'dashboard.devices_count_other': '{n} dispositivi', + 'dashboard.online_count': '{n} online', + 'dashboard.set_playlist_placeholder': 'Imposta Playlist...', + 'dashboard.send_command_placeholder': 'Invia Comando...', + 'dashboard.manage': 'Gestisci', + 'dashboard.manage_tooltip': 'Aggiungi/rimuovi dispositivi', + 'dashboard.delete_group_tooltip': 'Elimina gruppo', + 'dashboard.no_devices_in_group': 'Nessun dispositivo in questo gruppo. Clicca Gestisci per aggiungerne.', + 'dashboard.manage_group_subtitle': 'Seleziona i dispositivi per aggiungerli a questo gruppo', + 'dashboard.draft_suffix': '(bozza)', + // Group commands + 'dashboard.cmd.screen_on': 'Accendi Schermo', + 'dashboard.cmd.screen_off': 'Spegni Schermo', + 'dashboard.cmd.restart_app': 'Riavvia App', + 'dashboard.cmd.check_update': 'Controlla Aggiornamenti', + 'dashboard.cmd.reboot': 'Riavvia Sistema', + 'dashboard.cmd.shutdown': 'Spegni', + // Dashboard prompts/confirms + 'dashboard.prompt_group_name': 'Nome gruppo:', + 'dashboard.error_pairing_code': 'Inserisci un codice di associazione valido di 6 cifre', + 'dashboard.confirm_add_to_group': '{name} è già presente in: {groups}\n\nAggiungerlo anche a "{target}"?', + 'dashboard.confirm_assign_playlist': 'Assegnare la playlist "{playlist}" a tutti i dispositivi in "{group}"?', + 'dashboard.confirm_destructive_command': 'Eseguire {cmd} su tutti i {n} dispositivi in "{group}"?\n\nL\'azione è irreversibile.', + 'dashboard.confirm_delete_group': 'Eliminare questo gruppo? I dispositivi non verranno rimossi dal sistema.', + // Dashboard toasts + 'dashboard.toast.display_paired': 'Schermo associato con successo!', + 'dashboard.toast.group_created': 'Gruppo creato', + 'dashboard.toast.group_deleted': 'Gruppo eliminato', + 'dashboard.toast.already_in_group': '{name} è già in {group}', + 'dashboard.toast.moved_device': 'Spostato {name} in {group}', + 'dashboard.toast.removed_device_one': 'Rimosso {name} da 1 gruppo', + 'dashboard.toast.removed_device_other': 'Rimosso {name} da {n} gruppi', + 'dashboard.toast.playlist_assigned_one': 'Playlist assegnata a 1 dispositivo', + 'dashboard.toast.playlist_assigned_other': 'Playlist assegnata a {n} dispositivi', + 'dashboard.toast.command_sent': 'Comando {cmd} inviato a {sent}/{total} dispositivi', + 'dashboard.toast.command_sent_with_offline': 'Comando {cmd} inviato a {sent}/{total} dispositivi ({offline} offline)', + + // Content library + 'content.title': 'Libreria Contenuti', + 'content.subtitle': 'Carica e gestisci i tuoi file multimediali', + 'content.help_tip': 'Carica video e immagini qui. Seleziona più file per il caricamento di massa. Usa "URL Remoto" per lo streaming da fonti esterne. Clicca su un\'anteprima per visualizzarla.', + 'content.drop': 'Trascina i file qui o clicca per caricare', + 'content.upload_hint': 'Supporta MP4, WebM, AVI, MKV, JPEG, PNG, GIF, WebP', + 'content.upload_progress': 'Caricamento...', + 'content.upload_progress_named': 'Caricamento di {name}...', + 'content.upload_progress_named_pct': 'Caricamento di {name}... {pct}%', + // Remote URL panel + 'content.remote_url': 'URL Remoto', + 'content.remote_desc': 'Riproduci direttamente da un URL. Risparmia larghezza di banda locale.', + 'content.remote_url_placeholder': 'https://esempio.it', + 'content.remote_name_placeholder': 'Nome visualizzato (opzionale)', + 'content.remote_add_btn': 'Aggiungi URL Remoto', + // YouTube panel + 'content.youtube': 'YouTube', + 'content.youtube_desc': 'Incorpora un video di YouTube sui tuoi schermi.', + 'content.youtube_url_placeholder': 'https://youtube.com/watch?v=...', + 'content.youtube_name_placeholder': 'Nome visualizzato (opzionale)', + 'content.youtube_add_btn': 'Aggiungi Video YouTube', + // Search / folders + 'content.search_placeholder': 'Cerca contenuti...', + 'content.new_folder_btn': '+ Nuova Cartella', + 'content.breadcrumb_root': 'Tutti i Contenuti', + 'content.rename_btn': 'Rinomina', + 'content.delete_folder_btn': 'Elimina cartella', + 'content.prompt_folder_name': 'Nome cartella:', + 'content.prompt_rename_folder': 'Rinomina cartella:', + 'content.confirm_delete_folder': 'Eliminare questa cartella? I contenuti all\'interno torneranno al livello principale. Anche le sottocartelle verranno eliminate.', + // Empty states + 'content.empty_folder_title': 'Questa cartella è vuota', + 'content.empty_folder_desc': 'Trascina i contenuti qui o usa l\'azione Sposta.', + 'content.no_content': 'Ancora nessun contenuto', + 'content.no_content_desc': 'Carica video e immagini per iniziare.', + 'content.failed_to_load': 'Caricamento contenuti fallito', + // Item type labels + 'content.type_youtube': 'YouTube', + 'content.type_remote': 'URL Remoto', + 'content.type_remote_short': 'Remoto', + 'content.type_video': 'Video', + 'content.type_image': 'Immagine', + // Item action buttons + 'content.btn_edit': 'Modifica', + 'content.btn_delete': 'Elimina', + 'content.btn_confirm_delete': 'Confermi l\'eliminazione?', + 'content.btn_deleting': 'Eliminazione...', + // Edit modal + 'content.edit_modal_title': 'Modifica Contenuto', + 'content.label_filename': 'Nome file / Nome visualizzato', + 'content.label_remote_url_field': 'URL Remoto', + 'content.label_mime_type': 'Tipo MIME', + 'content.label_folder': 'Cartella', + 'content.label_replace_file': 'Sostituisci File', + 'content.replace_file_hint': 'Lascia vuoto per mantenere il file attuale', + 'content.folder_root_option': '— Root (Principale) —', + 'content.save_changes': 'Salva Modifiche', + // MIME options + 'content.mime.video_mp4': 'Video (MP4)', + 'content.mime.video_webm': 'Video (WebM)', + 'content.mime.image_jpeg': 'Immagine (JPEG)', + 'content.mime.image_png': 'Immagine (PNG)', + 'content.mime.image_gif': 'Immagine (GIF)', + 'content.mime.image_webp': 'Immagine (WebP)', + // Content errors / toasts + 'content.error_enter_url': 'Inserisci un URL', + 'content.error_enter_youtube_url': 'Inserisci un URL di YouTube', + 'content.error_update_failed': 'Aggiornamento fallito', + 'content.toast.remote_added': 'Contenuto remoto aggiunto', + 'content.toast.youtube_added': 'Video YouTube aggiunto', + 'content.toast.deleted': 'Contenuto eliminato', + 'content.toast.updated': 'Contenuto aggiornato', + 'content.toast.uploaded_named': '{name} caricato con successo', + 'content.toast.upload_failed_named': 'Caricamento di {name} fallito: {error}', + 'content.toast.folder_created_named': 'Cartella "{name}" creata', + 'content.toast.folder_renamed': 'Cartella rinominata', + 'content.toast.folder_deleted': 'Cartella eliminata', + 'content.toast.moved': 'Spostato', + 'content.toast.moved_to_root': 'Spostato nella cartella principale', + + // Device detail + 'device.back': 'Torna a Schermi', + 'device.owner_label': 'Proprietario: {owner}', + 'device.rename': 'Rinomina', + 'device.screenshot_btn': 'Screenshot', + 'device.remove': 'Rimuovi', + 'device.click_to_confirm': 'Clicca di nuovo per confermare', + 'device.prompt_new_name': 'Inserisci il nuovo nome:', + 'device.confirm_discard_draft': 'Scartare tutte le modifiche non pubblicate e tornare all\'ultima versione pubblicata?', + 'device.failed_load': 'Caricamento dispositivo fallito', + 'device.no_screenshot': 'Nessuno screenshot disponibile. Clicca "Screenshot" per catturarne uno.', + 'device.no_content_assigned': 'Nessun contenuto assegnato', + 'device.now_playing_id': 'In riproduzione: {id}', + 'device.playlist_count_one': '1 elemento in playlist', + 'device.playlist_count_other': '{n} elementi in playlist', + // Tabs + 'device.tab.now_playing': 'In riproduzione', + 'device.tab.now_playing_tip': "Screenshot dal vivo di ciò che è attualmente visualizzato su questo dispositivo.", + 'device.tab.playlist': 'Playlist', + 'device.tab.playlist_tip': 'Contenuti assegnati a questo dispositivo. Trascina gli elementi per riordinarli. Aggiungi media, widget o pagine chiosco.', + 'device.tab.info': 'Info Dispositivo', + 'device.tab.info_tip': 'Telemetria hardware, impostazioni orientamento, note e controlli del dispositivo.', + 'device.tab.remote': 'Telecomando', + 'device.tab.remote_tip': 'Visualizza lo schermo del dispositivo in tempo reale e invia comandi. Funziona su APK Android e web player.', + // Draft banner + 'device.draft.banner_title': 'Modifiche non pubblicate', + 'device.draft.devices_showing_published': 'I dispositivi mostrano ancora l\'ultima versione pubblicata.', + 'device.draft.never_published': 'Questa playlist non è mai stata pubblicata. I dispositivi non mostreranno nulla fino alla pubblicazione.', + 'device.draft.discard': 'Scarta', + 'device.draft.publish': 'Pubblica', + 'device.draft.publishing': 'Pubblicazione...', + // Layout selector + 'device.layout.label': 'Layout Schermo', + 'device.layout.fullscreen_default': 'Schermo intero (predefinito)', + 'device.layout.zones_count': '{name} ({n} zone)', + 'device.layout.template_zones_count': '[Modello] {name} ({n} zone)', + 'device.layout.apply': 'Applica', + // Playlist tab + 'device.playlist.label': 'Playlist', + 'device.playlist.no_playlist': 'Nessuna playlist', + 'device.playlist.copy_to_btn': 'Copia in...', + 'device.playlist.add_content_btn': 'Aggiungi Contenuto', + 'device.playlist.empty_title': 'Nessun contenuto assegnato', + 'device.playlist.empty_desc': "Aggiungi contenuti dalla tua libreria alla playlist di questo schermo.", + 'device.playlist_picker.with_count': '{name} — {n} elementi', + 'device.playlist_picker.with_auto': '{name} (auto) — {n} elementi', + // Info cards + 'device.info.status': 'Stato', + 'device.info.ip_address': 'Indirizzo IP', + 'device.info.battery': 'Batteria', + 'device.info.storage': 'Archiviazione', + 'device.info.size_free': '{size} liberi', + 'device.info.player_type': 'Tipo Player', + 'device.info.web_player': 'Web Player', + 'device.info.wifi': 'WiFi', + 'device.info.uptime': 'Tempo di attività', + 'device.info.android_version': 'Versione Android', + 'device.info.app_version': 'Versione App', + 'device.info.screen_resolution': 'Risoluzione Schermo', + 'device.info.ram': 'RAM', + 'device.info.cpu_usage': 'Utilizzo CPU', + // Uptime timeline + 'device.timeline.title': 'Cronologia Attività (Ultime 24 Ore)', + 'device.timeline.h24_ago': '24 ore fa', + 'device.timeline.now': 'Ora', + 'device.timeline.online': 'Online', + 'device.timeline.offline': 'Offline', + 'device.timeline.no_data': 'Nessun dato', + 'device.timeline.uptime_pct_tracked': '{pct}% attività ({n} min tracciati)', + 'device.timeline.uptime_pct_no_data': '{pct}% attività (nessun dato)', + // Form + 'device.form.orientation_label': 'Orientamento / Rotazione', + 'device.form.orientation.landscape': 'Orizzontale (0°)', + 'device.form.orientation.portrait': 'Verticale (90° orario)', + 'device.form.orientation.landscape_flipped': 'Orizzontale capovolto (180°)', + 'device.form.orientation.portrait_flipped': 'Verticale capovolto (270° orario)', + 'device.form.default_content_label': 'Contenuto Predefinito', + 'device.form.default_content_none': 'Nessuno (mostra "In attesa...")', + 'device.form.notes_label': 'Note', + 'device.form.notes_placeholder': 'Posizione, dettagli installazione, ecc.', + 'device.form.save_settings': 'Salva Impostazioni', + // Control buttons + 'device.ctl.reboot_device': 'Riavvia Dispositivo', + 'device.ctl.screen_off': 'Spegni Schermo', + 'device.ctl.screen_on': 'Accendi Schermo', + 'device.ctl.launch_player': 'Avvia Player', + 'device.ctl.force_update': 'Forza Aggiornamento', + 'device.ctl.shutdown': 'Spegni', + // Remote tab + 'device.remote.start_prompt': 'Clicca "Avvia Controllo" per iniziare', + 'device.remote.start': 'Avvia Controllo', + 'device.remote.stop': 'Ferma Controllo', + 'device.remote.vol_up': 'Vol +', + 'device.remote.vol_down': 'Vol -', + 'device.remote.home': 'Home', + 'device.remote.back': 'Indietro', + 'device.remote.recents': 'Recenti', + 'device.remote.power': 'Accensione', + 'device.remote.ok': 'OK', + 'device.remote.settings': 'Impostazioni', + 'device.remote.scrn_off': 'Schermo Off', + 'device.remote.scrn_on': 'Schermo On', + 'device.remote.enable_system_view': 'Attiva Vista di Sistema', + 'device.remote.system_view_tooltip': 'Chiede all\'utente del dispositivo di consentire l\'acquisizione completa dello schermo - permette la visualizzazione remota della home, impostazioni e altre app', + 'device.remote.system_view_hint': 'Richiede l\'approvazione una tantum sul dispositivo', + 'device.remote.waiting_for_approval': 'In attesa di approvazione dal dispositivo...', + 'device.remote.system_view_enabled': 'Vista di Sistema Attivata', + 'device.remote.unlocked_hint': 'Controlli di sistema e navigazione sbloccati', + // Playlist item + 'device.pl_item.widget_with_type': 'Widget ({type})', + 'device.pl_item.youtube': 'YouTube', + 'device.pl_item.video': 'Video', + 'device.pl_item.image': 'Immagine', + 'device.pl_item.zone_label': 'Zona: {id}', + 'device.pl_item.no_zone': 'Nessuna zona', + 'device.pl_item.mute': 'Disattiva Audio', + 'device.pl_item.unmute': 'Attiva Audio', + 'device.pl_item.remove': 'Rimuovi', + // Copy playlist + 'device.copy.no_other_devices': 'Nessun altro dispositivo su cui copiare', + 'device.copy.prompt': 'Su quale dispositivo vuoi copiare la playlist?\n\n{list}\n\nInserisci il numero:', + 'device.copy.invalid_selection': 'Selezione non valida', + 'device.copy.toast': 'Copiati {n} elementi su {device}', + // Add-content modal + 'device.assign.empty_all': 'Ancora nessun contenuto, widget o pagina chiosco. Crea qualcosa prima!', + 'device.assign.modal_title': 'Aggiungi alla Playlist', + 'device.assign.zone_label': 'Zona', + 'device.assign.zone_default': 'Predefinita (schermo intero)', + 'device.assign.duration_label': 'Durata visualizzazione (secondi, per immagini/widget)', + 'device.assign.tab.media': 'Media ({n})', + 'device.assign.tab.widgets': 'Widget ({n})', + 'device.assign.tab.kiosk': 'Chiosco ({n})', + 'device.assign.no_media': 'Nessun media ancora caricato', + 'device.assign.no_widgets': 'Nessun widget ancora creato.', + 'device.assign.no_kiosk': 'Nessuna pagina chiosco ancora presente.', + 'device.assign.create_one': 'Creane uno', + 'device.assign.add_selected': 'Aggiungi Selezionati', + 'device.assign.select_first': 'Seleziona prima qualcosa', + 'device.assign.kiosk_widget_name': 'Chiosco: {name}', + // Toasts + 'device.toast.screenshot_requested': 'Richiesta screenshot inviata', + 'device.toast.renamed': 'Schermo rinominato', + 'device.toast.removing': 'Rimozione in corso...', + 'device.toast.removed': 'Schermo rimosso', + 'device.toast.settings_saved': 'Impostazioni salvate', + 'device.toast.published': 'Playlist pubblicata — dispositivi aggiornati', + 'device.toast.draft_discarded': 'Bozza scartata', + 'device.toast.playlist_changed': 'Playlist modificata', + 'device.toast.layout_applied': 'Layout applicato', + 'device.toast.switched_to_fullscreen': 'Passato a schermo intero', + 'device.toast.added_to_playlist': 'Aggiunto alla playlist', + 'device.toast.unmuted': 'Audio attivato', + 'device.toast.muted': 'Audio disattivato', + 'device.toast.zone_updated': 'Zona aggiornata', + 'device.toast.removed_from_playlist': 'Contenuto rimosso dalla playlist', + 'device.toast.playlist_reordered': 'Playlist riordinata', + 'device.toast.reboot_sent': 'Comando di riavvio inviato', + 'device.toast.shutdown_sent': 'Comando di spegnimento inviato', + 'device.toast.screen_off_sent': 'Comando spegnimento schermo inviato', + 'device.toast.screen_on_sent': 'Comando accensione schermo inviato', + 'device.toast.launch_sent': 'Comando di avvio inviato', + 'device.toast.update_triggered': 'Controllo aggiornamenti avviato', + 'device.toast.remote_started': 'Sessione remota avviata', + + // Settings + 'settings.title': 'Impostazioni', + 'settings.subtitle': 'Configurazione del server e informazioni di installazione', + 'settings.account': 'Account', + 'settings.save_profile': 'Salva Profilo', + 'settings.change_password': 'Cambia Password', + 'settings.password_min_8': 'Deve contenere almeno 8 caratteri.', + 'settings.current_password': 'Password Attuale', + 'settings.new_password': 'Nuova Password', + 'settings.confirm_new_password': 'Conferma Nuova Password', + 'settings.sso_note': 'Hai effettuato l\'accesso tramite {provider}. Gestisci la tua password da lì.', + 'settings.license': 'Licenza', + 'settings.license_mit': 'Licenza MIT - tutte le funzionalità incluse.', + 'settings.platform_admin_link': 'Gli strumenti di amministrazione della piattaforma si trovano nella pagina', + 'settings.platform_admin_page_suffix': '.', + 'settings.user_management': 'Gestione Utenti', + 'settings.loading_users': 'Caricamento utenti...', + 'settings.white_label': 'White Label / Branding', + 'settings.white_label_desc': 'Personalizza l\'aspetto della dashboard e del player per i tuoi clienti.', + 'settings.brand_name': 'Nome del Brand', + 'settings.logo_url': 'URL del Logo', + 'settings.primary_color': 'Colore Primario', + 'settings.bg_color': 'Colore di Sfondo', + 'settings.custom_domain': 'Dominio Personalizzato', + 'settings.favicon_url': 'URL Favicon', + 'settings.custom_css': 'CSS Personalizzato (opzionale)', + 'settings.hide_branding': 'Nascondi branding "ScreenTinker"', + 'settings.save_branding': 'Salva Branding', + 'settings.preview': 'Anteprima', + 'settings.white_label_enterprise_only': 'Il branding personalizzato è disponibile solo nel piano Enterprise', + 'settings.view_plans': 'Visualizza i Piani', + 'settings.server_info': 'Informazioni sul Server', + 'settings.server_url': 'URL del Server', + 'settings.api_endpoint': 'Endpoint API', + 'settings.server_url_hint': 'Usa questo URL durante la configurazione dell\'app Android', + 'settings.setup_guide': 'Guida all\'installazione', + 'settings.setup_step_1': 'Installa l\'APK di ScreenTinker sulla tua TV tramite sideloading', + 'settings.setup_step_2_prefix': 'Apri l\'app e inserisci questo URL del server:', + 'settings.setup_step_3': 'L\'app mostrerà un codice di associazione di 6 cifre', + 'settings.setup_step_4': 'Clicca su "Aggiungi Schermo" nella dashboard e inserisci il codice', + 'settings.setup_step_5': 'Carica i contenuti nella Libreria Contenuti', + 'settings.setup_step_6': 'Assegna i contenuti alla Playlist dello schermo', + 'settings.your_data': 'I Tuoi Dati', + 'settings.your_data_desc': 'Esporta o importa i tuoi dispositivi, contenuti, layout, programmazioni e tutte le impostazioni. Usa questa funzione per migrare tra istanze cloud e self-hosted.', + 'settings.export_my_data': 'Esporta i Miei Dati', + 'settings.include_media_zip': 'Includi file multimediali (ZIP)', + 'settings.import_data': 'Importa Dati', + 'settings.language': 'Lingua', + 'settings.about': 'Informazioni', + 'settings.about_tagline': 'Sistema di gestione digital signage.', + 'settings.third_party_licenses': 'Licenze di Terze Parti', + // Import flow + 'settings.import.reading_file': 'Lettura del file...', + 'settings.import.zip_detected': 'Rilevata esportazione ZIP: {name} ({size} MB)
Contiene dati + file multimediali.', + 'settings.import.confirm': 'Conferma Importazione', + 'settings.import.invalid_file': 'File non valido. Deve essere un file JSON o ZIP esportato da ScreenTinker.', + 'settings.import.summary_devices': '{n} dispositivi', + 'settings.import.summary_content': '{n} contenuti', + 'settings.import.summary_widgets': '{n} widget', + 'settings.import.summary_layouts': '{n} layout', + 'settings.import.summary_schedules': '{n} programmazioni', + 'settings.import.summary_walls': '{n} video wall', + 'settings.import.summary_kiosk': '{n} pagine chiosco', + 'settings.import.found_summary': 'Trovati: {summary}.
Da: {email} (esportati il {date})', + 'settings.import.empty_export': 'esportazione vuota', + 'settings.import.uploading_zip': 'Caricamento e importazione in corso... Potrebbe richiedere del tempo per file di grandi dimensioni.', + 'settings.import.importing': 'Importazione...', + 'settings.import.complete': 'Importazione completata: {imported}.', + 'settings.import.pairing_codes_title': 'Codici di Associazione Dispositivi:', + 'settings.import.pairing_codes_hint': 'Inserisci questi codici su ciascun dispositivo per ricollegarli. Tutte le assegnazioni e le programmazioni verranno mantenute.', + 'settings.import.failed': 'Importazione fallita', + 'settings.import.failed_with_error': 'Importazione fallita: {error}', + 'settings.import.read_failed': 'Lettura del file fallita: {error}', + // Settings toasts + 'settings.toast.support_token_generated': 'Token di supporto generato (valido per {hours} ore)', + 'settings.toast.import_success': 'Dati importati con successo', + 'settings.toast.name_required': 'Il nome non può essere vuoto', + 'settings.toast.profile_saved': 'Profilo salvato', + 'settings.toast.current_password_required': 'Inserisci la tua password attuale', + 'settings.toast.new_password_min_8': 'La nuova password deve contenere almeno 8 caratteri', + 'settings.toast.passwords_dont_match': 'Le nuove password non corrispondono', + 'settings.toast.password_changed': 'Password cambiata', + 'settings.toast.branding_saved': 'Branding salvato', + 'settings.toast.preview_applied': 'Anteprima applicata (ricarica per annullare)', + 'settings.toast.plan_updated': 'Piano aggiornato', + 'settings.toast.user_removed': 'Utente rimosso', + // User management table + 'settings.user.col_user': 'Utente', + 'settings.user.col_auth': 'Autenticazione', + 'settings.user.col_role': 'Ruolo', + 'settings.user.col_plan': 'Piano', + 'settings.user.col_actions': 'Azioni', + 'settings.user.remove': 'Rimuovi', + 'settings.user.you': 'Tu', + 'settings.user.confirm': 'Confermi?', + 'settings.user.count_one': '1 utente registrato', + 'settings.user.count_other': '{n} utenti registrati', + 'settings.user.reset_password': 'Reimposta Password', + 'settings.user.prompt_reset_password': 'Inserisci una nuova password per {email} (minimo 8 caratteri):', + 'settings.toast.password_reset_for_user': 'Password reimpostata', + + // Widgets + 'widget.title': 'Widget', + 'widget.subtitle': 'Aggiungi contenuti dinamici ai tuoi layout', + 'widget.help_tip': 'Elementi di contenuto dinamico: orologi live, meteo, ticker RSS, testo, pagine web e feed social. Crea un widget e assegnalo alla playlist di un dispositivo.', + 'widget.new_widget': 'Nuovo Widget', + 'widget.configure': 'Configura Widget', + 'widget.preview': 'Anteprima', + 'widget.preview_title': 'Anteprima', + 'widget.close': 'Chiudi', + 'widget.edit_x': 'Modifica {type}', + 'widget.new_x': 'Nuovo {type}', + 'widget.empty_title': 'Ancora nessun widget', + 'widget.empty_desc': 'Crea un widget per aggiungere contenuti dinamici ai tuoi layout.', + 'widget.this_widget': 'questo widget', + 'widget.confirm_delete': 'Eliminare "{name}"? L\'azione è irreversibile.', + 'widget.toast.saved': 'Widget salvato', + 'widget.toast.deleted': 'Widget eliminato', + 'widget.toast.preview_failed': 'Anteprima fallita', + // Widget types + 'widget.type.clock.name': 'Orologio', + 'widget.type.clock.desc': 'Orologio digitale con data', + 'widget.type.weather.name': 'Meteo', + 'widget.type.weather.desc': 'Condizioni meteo attuali', + 'widget.type.rss.name': 'News Ticker', + 'widget.type.rss.desc': 'Feed RSS a scorrimento', + 'widget.type.text.name': 'Testo/HTML', + 'widget.type.text.desc': 'Testo personalizzato o contenuto HTML', + 'widget.type.webpage.name': 'Pagina Web', + 'widget.type.webpage.desc': 'Incorpora una pagina web', + 'widget.type.social.name': 'Feed Social', + 'widget.type.social.desc': 'Feed dei social media', + 'widget.type.directory_board.name': 'Albo Fornitori/Directory', + 'widget.type.directory_board.desc': 'Elenco scorrevole di inquilini/uffici per hall', + // Widget config form fields + 'widget.field.name': 'Nome Widget', + 'widget.field.format': 'Formato', + 'widget.field.format_12h': '12 Ore', + 'widget.field.format_24h': '24 Ore', + 'widget.field.timezone': 'Fuso Orario', + 'widget.field.font_size': 'Dimensione Font', + 'widget.field.font_size_px': 'Dimensione Font (px)', + 'widget.field.color': 'Colore', + 'widget.field.background': 'Sfondo', + 'widget.field.location': 'Località', + 'widget.field.location_placeholder': 'Città, Provincia', + 'widget.field.units': 'Unità', + 'widget.field.units_imperial': 'Imperiale (°F)', + 'widget.field.units_metric': 'Metrico (°C)', + 'widget.field.feed_url': 'URL del Feed', + 'widget.field.scroll_speed_seconds': 'Velocità Scorrimento (secondi)', + 'widget.field.max_items': 'Numero Massimo Elementi', + 'widget.field.html_content': 'Contenuto HTML', + 'widget.field.css_optional': 'CSS (opzionale)', + 'widget.field.url': 'URL', + 'widget.field.zoom_pct': 'Zoom (%)', + 'widget.field.refresh_interval': 'Intervallo di Aggiornamento (secondi, 0 = mai)', + 'widget.field.platform': 'Piattaforma', + 'widget.field.platform_twitter': 'Twitter/X', + 'widget.field.platform_instagram': 'Instagram', + 'widget.field.query': 'Ricerca/Query', + 'widget.field.query_placeholder': '@utente o #hashtag', + // Content picker + 'widget.picker.default_title': 'Seleziona Immagine', + 'widget.picker.select_logo': 'Seleziona Logo', + 'widget.picker.select_bg_images': 'Seleziona Immagini di Sfondo', + 'widget.picker.search': 'Cerca immagini...', + 'widget.picker.no_matches': 'Nessuna corrispondenza.', + 'widget.picker.no_images': 'Nessuna immagine nella libreria. Carica prima delle immagini dalla Libreria Contenuti.', + 'widget.picker.selected_count': '{n} selezionati', + // Directory Board + 'widget.dir.title_label': 'Titolo', + 'widget.dir.title_placeholder': 'Esempio: Centro Direzionale', + 'widget.dir.logo_label': 'Logo (opzionale)', + 'widget.dir.footer_text_label': 'Testo a Piè di Pagina', + 'widget.dir.footer_placeholder': 'Per informazioni: Contattare...', + 'widget.dir.bg_images_label': 'Immagini di Sfondo (opzionale)', + 'widget.dir.bg_images_hint': 'Le immagini sfumano ogni 15 secondi al 30% di opacità. Aggiungine più di una per la rotazione.', + 'widget.dir.add_bg_image': '+ Aggiungi Immagine di Sfondo', + 'widget.dir.theme': 'Tema', + 'widget.dir.theme_dark': 'Scuro', + 'widget.dir.theme_light': 'Chiaro', + 'widget.dir.scroll_speed': 'Velocità Scorrimento', + 'widget.dir.speed_slow': 'Lenta', + 'widget.dir.speed_medium': 'Media', + 'widget.dir.speed_fast': 'Veloce', + 'widget.dir.columns': 'Colonne', + 'widget.dir.columns_auto': 'Auto', + 'widget.dir.categories': 'Categorie', + 'widget.dir.add_category': '+ Aggiungi Categoria', + 'widget.dir.add_entry': '+ Aggiungi Voce', + 'widget.dir.empty_categories': 'Aggiungi il primo piano o dipartimento per iniziare', + 'widget.dir.no_entries': 'Ancora nessuna voce', + 'widget.dir.entry': 'voce', + 'widget.dir.entries': 'voci', + 'widget.dir.collapse': 'Comprimi', + 'widget.dir.expand': 'Espandi', + 'widget.dir.move_up': 'Sposta su', + 'widget.dir.move_down': 'Sposta giù', + 'widget.dir.delete_category': 'Elimina categoria', + 'widget.dir.delete_entry': 'Elimina voce', + 'widget.dir.unnamed': '(senza nome)', + 'widget.dir.confirm_delete_category': 'Eliminare la categoria "{name}" e tutte le sue voci?', + 'widget.dir.category_name_placeholder': 'es. Primo Piano', + 'widget.dir.entry_id_placeholder': '101', + 'widget.dir.entry_name_placeholder': 'Nome inquilino/ufficio', + 'widget.dir.entry_subtitle_placeholder': 'Dettagli (opzionale)', + 'widget.dir.available': 'Disponibile', + 'widget.dir.change': 'Cambia', + 'widget.dir.choose_logo': 'Scegli Logo', + 'widget.dir.remove_logo': 'Rimuovi', + 'widget.dir.no_bg_images': 'Nessuna immagine di sfondo selezionata', + 'widget.dir.remove_bg': 'Rimuovi', + + // Designer + 'designer.title': 'Content Designer', + 'designer.subtitle': 'Crea contenuti dinamici per la segnaletica', + 'designer.help_tip': 'Crea contenuti personalizzati con elementi live: orologi, meteo, ticker RSS, countdown e codici QR. Pubblica come widget o esporta come PNG.', + 'designer.load_design': 'Carica Progetto', + 'designer.export_png': 'Esporta PNG', + 'designer.publish': 'Pubblica nella Libreria', + 'designer.preview_hint': 'Clicca sugli elementi per selezionarli. Trascina per riposizionarli. L\'anteprima si aggiorna in tempo reale.', + 'designer.add_element': 'Aggiungi Elemento', + 'designer.background': 'Sfondo', + 'designer.bg_image': 'Immagine', + 'designer.properties': 'Proprietà', + 'designer.layers': 'Livelli', + 'designer.no_elements': 'Ancora nessun elemento', + 'designer.save_design_file': 'Salva File Progetto', + 'designer.qr_label': 'CODICE QR', + 'designer.loading_news': 'Caricamento notizie...', + 'designer.no_items': 'Nessun elemento', + 'designer.feed_unavailable': 'Feed non disponibile', + 'designer.countdown_now': 'ORA!', + 'designer.widget_name': 'Progetto {date}', + // Element buttons + 'designer.el.text': 'Testo', + 'designer.el.heading': 'Titolo', + 'designer.el.image': 'Immagine', + 'designer.el.video': 'Video', + 'designer.el.clock': 'Orologio', + 'designer.el.date': 'Data', + 'designer.el.weather': 'Meteo', + 'designer.el.ticker': 'Ticker', + 'designer.el.shape': 'Forma', + 'designer.el.qr': 'Codice QR', + 'designer.el.countdown': 'Countdown', + 'designer.el.webpage': 'Pagina Web', + // Backgrounds + 'designer.bg.black': 'Nero', + 'designer.bg.dark_blue': 'Blu Scuro', + 'designer.bg.dark_gradient': 'Gradiente Scuro', + 'designer.bg.blue_gradient': 'Gradiente Blu', + 'designer.bg.sunset': 'Tramonto', + 'designer.bg.ocean': 'Oceano', + 'designer.bg.forest': 'Foresta', + 'designer.bg.dark_red': 'Rosso Scuro', + 'designer.bg.white': 'Bianco', + // Defaults / prompts + 'designer.default.text': 'Il tuo testo qui', + 'designer.default.heading': 'TITOLO', + 'designer.default.coming_soon': 'In Arrivo', + 'designer.prompt.video_url': 'URL Video (MP4):', + 'designer.prompt.weather_location': 'Città, Provincia:', + 'designer.prompt.rss_url': 'URL Feed RSS:', + 'designer.prompt.qr_url': 'URL Codice QR:', + 'designer.prompt.countdown_date': 'Data obiettivo (AAAA-MM-GG):', + 'designer.prompt.webpage_url': 'URL Pagina Web:', + // Properties + 'designer.prop.text': 'Testo', + 'designer.prop.size': 'Dimensione', + 'designer.prop.font': 'Font', + 'designer.prop.color': 'Colore', + 'designer.prop.bold': 'Grassetto', + 'designer.prop.shadow': 'Ombra', + 'designer.prop.format': 'Formato', + 'designer.prop.show_seconds': 'Mostra secondi', + 'designer.prop.muted': 'Muto', + 'designer.prop.loop': 'Ripetizione', + 'designer.prop.opacity': 'Opacità', + 'designer.prop.shape': 'Forma', + 'designer.prop.location': 'Località', + 'designer.prop.feed_url': 'URL Feed', + 'designer.prop.speed': 'Velocità (secondi)', + 'designer.prop.text_color': 'Colore Testo', + 'designer.prop.bg_color': 'Colore Sfondo', + 'designer.prop.target_date': 'Data Obiettivo', + 'designer.prop.label': 'Etichetta', + // Toasts + 'designer.toast.published': 'Pubblicato come widget! Assegnalo a una zona del layout.', + 'designer.toast.publish_failed': 'Pubblicazione fallita', + 'designer.toast.export_failed': 'Esportazione fallita: {error}', + 'designer.toast.loaded': 'Progetto caricato', + 'designer.toast.invalid_file': 'File progetto non valido', + + // Playlists + 'playlist.title': 'Playlist', + 'playlist.subtitle': 'Crea e gestisci le playlist dei contenuti', + 'playlist.show_auto_generated': 'Mostra generate automaticamente', + 'playlist.new_playlist_btn': '+ Nuova Playlist', + 'playlist.new_playlist': 'Nuova Playlist', + 'playlist.empty_title': 'Ancora nessuna playlist', + 'playlist.empty_desc': 'Crea la tua prima playlist per organizzare i contenuti dei tuoi schermi.', + 'playlist.all_auto_generated': 'Tutte le playlist sono generate automaticamente. Attiva "Mostra generate automaticamente" per vederle.', + 'playlist.tag_auto': 'auto', + 'playlist.tag_draft': 'bozza', + 'playlist.item_count_one': '1 elemento', + 'playlist.item_count_other': '{n} elementi', + 'playlist.created_at': 'Creata il {date}', + 'playlist.display_count_one': '1 schermo', + 'playlist.display_count_other': '{n} schermi', + 'playlist.assigned_to_one': 'Assegnata a 1 schermo', + 'playlist.assigned_to_other': 'Assegnata a {n} schermi', + 'playlist.load_failed': 'Caricamento playlist fallito: {error}', + 'playlist.back_to_playlists': 'Torna alle Playlist', + 'playlist.name_placeholder': 'Nome playlist', + 'playlist.desc_placeholder': 'Descrizione (opzionale)', + 'playlist.create_btn': 'Crea', + 'playlist.add_desc_placeholder': 'Aggiungi una descrizione...', + 'playlist.click_to_rename': 'Clicca per rinominare', + 'playlist.click_to_edit_desc': 'Clicca per modificare la descrizione', + 'playlist.add_content': '+ Aggiungi Contenuto', + 'playlist.delete_playlist': 'Elimina Playlist', + 'playlist.back': 'Indietro', + 'playlist.items_empty': 'Questa playlist è vuota', + 'playlist.items_empty_hint': 'Clicca su "Aggiungi Contenuto" per inserire elementi.', + 'playlist.duration': 'Durata', + 'playlist.sec': 'sec', + 'playlist.move_up': 'Sposta su', + 'playlist.move_down': 'Sposta giù', + 'playlist.remove_item': 'Rimuovi elemento', + 'playlist.item_widget': 'Widget', + 'playlist.unknown_type': 'Tipo sconosciuto', + 'playlist.confirm_delete': 'Eliminare "{name}"? L\'azione è irreversibile.', + 'playlist.confirm_discard_draft': 'Scartare tutte le modifiche non pubblicate e tornare all\'ultima versione pubblicata?', + 'playlist.draft.banner_title': 'Modifiche non pubblicate', + 'playlist.draft.devices_showing_published': 'I dispositivi mostrano ancora l\'ultima versione pubblicata.', + 'playlist.draft.never_published': 'Questa playlist non è mai stata pubblicata. I dispositivi non mostreranno nulla fino alla pubblicazione.', + 'playlist.draft.discard_changes': 'Scarta Modifiche', + 'playlist.draft.publish': 'Pubblica', + 'playlist.draft.publishing': 'Pubblicazione...', + 'playlist.toast.created': 'Playlist creata', + 'playlist.toast.deleted': 'Playlist eliminata', + 'playlist.toast.published': 'Playlist pubblicata — dispositivi aggiornati', + 'playlist.toast.draft_discarded': 'Modifiche alla bozza scartate', + 'playlist.toast.item_removed': 'Elemento rimosso', + 'playlist.add_modal_title': 'Aggiungi Contenuto alla Playlist', + 'playlist.tab_content': 'Contenuti', + 'playlist.tab_widgets': 'Widget', + 'playlist.search_placeholder': 'Cerca...', + 'playlist.close': 'Chiudi', + 'playlist.no_content_found': 'Nessun contenuto trovato', + 'playlist.no_widgets_found': 'Nessun widget trovato', + 'playlist.add_btn': 'Aggiungi', + 'playlist.adding': 'Aggiunta in corso...', + 'playlist.added': 'Aggiunto', + + // Onboarding + 'onboarding.back': 'Indietro', + 'onboarding.next': 'Avanti', + 'onboarding.skip': 'Salta Configurazione', + 'onboarding.go_to_dashboard': 'Vai alla Dashboard', + 'onboarding.pair_display': 'Associa Schermo', + 'onboarding.step.welcome.title': 'Benvenuto su ScreenTinker!', + 'onboarding.step.welcome.intro': "Configuriamo il tutto in meno di 5 minuti.", + 'onboarding.step.welcome.guide_through': 'Questa procedura guidata ti aiuterà a:', + 'onboarding.step.welcome.bullet_download': 'Scaricare l\'app del player', + 'onboarding.step.welcome.bullet_pair': 'Associare il tuo primo schermo', + 'onboarding.step.welcome.bullet_upload': 'Caricare e assegnare i contenuti', + 'onboarding.step.player.title': 'Passaggio 1: Scarica l\'App Player', + 'onboarding.step.player.intro': 'Installa il player sul tuo dispositivo di visualizzazione.', + 'onboarding.step.player.android_label': 'APK Android', + 'onboarding.step.player.android_desc': 'TV box, tablet, Fire TV', + 'onboarding.step.player.web_label': 'Web Player', + 'onboarding.step.player.web_desc': 'Qualsiasi browser, Pi, ChromeOS', + 'onboarding.step.player.url_hint': 'Apri l\'app sullo schermo e inserisci questo URL del server:', + 'onboarding.step.pair.title': 'Passaggio 2: Associa lo Schermo', + 'onboarding.step.pair.intro': 'Inserisci il codice di 6 cifre mostrato sullo schermo.', + 'onboarding.step.pair.name_placeholder': 'Nome schermo (es. TV Atrio)', + 'onboarding.step.upload.title': 'Passaggio 3: Carica Contenuti', + 'onboarding.step.upload.intro': 'Carica un video o un\'immagine da visualizzare.', + 'onboarding.step.upload.click_to_select': 'Clicca per selezionare un file', + 'onboarding.step.upload.formats': 'MP4, WebM, JPEG, PNG, GIF', + 'onboarding.step.upload.uploading': 'Caricamento...', + 'onboarding.step.done.title': 'Tutto pronto!', + 'onboarding.step.done.intro': 'Il tuo schermo è associato e il contenuto è in riproduzione!', + 'onboarding.step.done.whats_next': 'E adesso?', + 'onboarding.step.done.next_content': 'Aggiungi altri contenuti nella Libreria Contenuti', + 'onboarding.step.done.next_layouts': 'Crea layout multi-zona in Layout', + 'onboarding.step.done.next_schedule': 'Imposta una programmazione nel calendario Programmazione', + 'onboarding.step.done.next_widgets': 'Aggiungi widget live (orologio, meteo, ticker) in Widget', + 'onboarding.step.done.next_kiosk': 'Crea schermi interattivi in Chiosco', + 'onboarding.step.done.next_designer': 'Progetta contenuti personalizzati nel Designer', + 'onboarding.toast.invalid_code': 'Inserisci un codice valido di 6 cifre', + 'onboarding.toast.pairing': 'Associazione...', + 'onboarding.toast.pair_failed': 'Associazione fallita', + 'onboarding.toast.pair_failed_with_error': 'Associazione fallita: {error}', + 'onboarding.toast.paired': 'Schermo associato!', + 'onboarding.toast.uploaded_assigning': 'Caricato! Assegnazione allo schermo...', + 'onboarding.toast.content_assigned': 'Contenuto caricato e assegnato!', + 'onboarding.toast.upload_failed': 'Caricamento fallito', + 'onboarding.toast.error_with_error': 'Errore: {error}', + + // Admin (platform admin panel) + 'admin.title': 'Amministratore di Piattaforma', + 'admin.subtitle': 'Controlli Superadmin - visibili solo a te', + 'admin.access_denied': 'Accesso Negato', + 'admin.access_denied_desc': 'È richiesto l\'accesso come amministratore di piattaforma.', + 'admin.all_users': 'Tutti gli Utenti', + 'admin.plans': 'Piani di Abbonamento', + 'admin.system': 'Sistema', + 'admin.col.user': 'Utente', + 'admin.col.auth': 'Autenticazione', + 'admin.col.last_login': 'Ultimo Accesso', + 'admin.col.role': 'Ruolo', + 'admin.col.plan': 'Piano', + 'admin.col.actions': 'Azioni', + 'admin.col.devices': 'Dispositivi', + 'admin.col.storage': 'Archiviazione', + 'admin.col.monthly': 'Mensile', + 'admin.col.yearly': 'Annuale', + 'admin.role.user': 'Utente', + 'admin.role.admin': 'Admin', + 'admin.role.superadmin': 'Superadmin', + 'admin.remove': 'Rimuovi', + 'admin.owner': 'Proprietario', + 'admin.confirm': 'Confermi?', + 'admin.total_users': '{n} utenti totali', + 'admin.unlimited': 'Illimitato', + 'admin.free': 'Gratis', + 'admin.version': 'Versione', + 'admin.frontend_hash': 'Hash Frontend', + 'admin.download_db_backup': 'Scarica Backup DB', + 'admin.server_status': 'Stato del Server', + 'admin.toast.role_updated': 'Ruolo aggiornato', + 'admin.toast.plan_updated': 'Piano aggiornato', + 'admin.toast.user_removed': 'Utente rimosso', + 'admin.reset_password': 'Reimposta Password', + 'admin.prompt_reset_password': 'Inserisci una nuova password per {email} (minimo 8 caratteri):', + 'admin.toast.password_min_8': 'La password deve contenere almeno 8 caratteri', + 'admin.toast.password_reset': 'Password reimpostata', + + // Schedule + 'schedule.title': 'Programmazione', + 'schedule.subtitle': 'Calendario di programmazione contenuti', + 'schedule.help_tip': 'Calendario settimanale visivo per la programmazione dei contenuti. Clicca su "Aggiungi Programmazione" per creare fasce orarie. Imposta la ricorrenza per i contenuti ripetitivi. La priorità più alta prevale su quella più bassa. Le programmazioni a livello di dispositivo prevalgono su quelle di gruppo.', + 'schedule.prev_week': '< Prec', + 'schedule.next_week': 'Succ >', + 'schedule.add_schedule': 'Aggiungi Programmazione', + 'schedule.edit_schedule': 'Modifica Programmazione', + 'schedule.apply_to': 'Applica a', + 'schedule.target_device': 'Dispositivo', + 'schedule.target_group': 'Gruppo', + 'schedule.group_devices_count': '{n} dispositivi', + 'schedule.no_groups_msg': 'Ancora nessun gruppo creato. Crea i gruppi nella pagina Schermi.', + 'schedule.zone_note': 'Nota: Le programmazioni basate sulle zone sono specifiche per ogni layout. Assicurati che tutti i dispositivi nel gruppo utilizzino lo stesso layout.', + 'schedule.playlist_override': 'Sovrascrittura Playlist', + 'schedule.no_playlist_override': '— Nessuna sovrascrittura playlist —', + 'schedule.draft_suffix': '(bozza)', + 'schedule.layout_override': 'Sovrascrittura Layout', + 'schedule.no_layout_override': '— Nessuna sovrascrittura layout —', + 'schedule.content_label': 'Contenuto', + 'schedule.content_hint': '(elemento singolo, opzionale)', + 'schedule.content_none': '— Nessuno —', + 'schedule.title_label': 'Titolo (opzionale)', + 'schedule.title_placeholder': 'es. Playlist Mattutina', + 'schedule.start_time': 'Ora Inizio', + 'schedule.end_time': 'Ora Fine', + 'schedule.repeat': 'Ripeti', + 'schedule.repeat_none': 'Nessuna ripetizione', + 'schedule.repeat_daily': 'Giornaliero', + 'schedule.repeat_weekdays': 'Giorni feriali', + 'schedule.repeat_weekends': 'Fine settimana', + 'schedule.repeat_weekly': 'Settimanale', + 'schedule.priority': 'Priorità', + 'schedule.color': 'Colore', + 'schedule.scheduled_label': 'Programmato', + 'schedule.tooltip_group_prefix': 'Gruppo: ', + 'schedule.tooltip_priority': 'Priorità: {n}', + 'schedule.day.sun': 'Dom', + 'schedule.day.mon': 'Lun', + 'schedule.day.tue': 'Mar', + 'schedule.day.wed': 'Mer', + 'schedule.day.thu': 'Gio', + 'schedule.day.fri': 'Ven', + 'schedule.day.sat': 'Sab', + 'schedule.hour_12am': '00:00', + 'schedule.hour_am': 'am', + 'schedule.hour_12pm': '12:00', + 'schedule.hour_pm': 'pm', + 'schedule.toast.no_groups': 'Nessun gruppo disponibile. Crea prima un gruppo.', + 'schedule.toast.saved': 'Programmazione salvata', + + // Reports + 'report.title': 'Report', + 'report.subtitle': 'Analisi proof-of-play e attività dei dispositivi', + 'report.help_tip': 'Analisi proof-of-play. Visualizza cosa è stato riprodotto, quando e su quale dispositivo. Filtra per intervallo di date e dispositivo. Esporta in CSV per la verifica pubblicitaria.', + 'report.export_csv': 'Esporta CSV', + 'report.device': 'Dispositivo', + 'report.all_devices': 'Tutti i dispositivi', + 'report.start_date': 'Data Inizio', + 'report.end_date': 'Data Fine', + 'report.load_report': 'Carica Report', + 'report.select_range': 'Seleziona un intervallo di date e clicca su Carica Report', + 'report.error': 'Errore', + 'report.total_plays': 'Riproduzioni Totali', + 'report.total_hours': 'Ore Totali', + 'report.unique_content': 'Contenuti Unici', + 'report.active_devices': 'Dispositivi Attivi', + 'report.avg_duration': 'Durata Media', + 'report.plays_per_day': 'Riproduzioni al Giorno', + 'report.plays_by_hour': 'Riproduzioni per Ora', + 'report.top_content': 'Contenuti più riprodotti', + 'report.by_device': 'Per Dispositivo', + 'report.no_data': 'Nessun dato', + 'report.col.content': 'Contenuto', + 'report.col.device': 'Dispositivo', + 'report.col.plays': 'Riproduzioni', + 'report.col.total_hours': 'Ore Totali', + 'report.col.completion': 'Completamento', + + // Kiosk + 'kiosk.title': 'Pagine Chiosco', + 'kiosk.subtitle': 'Crea interfacce touchscreen interattive', + 'kiosk.help_tip': 'Crea interfacce touchscreen interattive. Aggiungi pulsanti con icone e azioni. Include una schermata di attesa (idle) che appare dopo un periodo di inattività. Assegna le pagine ai dispositivi come widget.', + 'kiosk.new_page': 'Nuova Pagina Chiosco', + 'kiosk.prompt_name': 'Nome pagina chiosco:', + 'kiosk.empty_title': 'Ancora nessuna pagina chiosco', + 'kiosk.empty_desc': 'Crea un\'interfaccia touchscreen interattiva per i tuoi schermi.', + 'kiosk.label': 'Pagina Chiosco', + 'kiosk.preview': 'Anteprima', + 'kiosk.confirm_delete': 'Eliminare la pagina chiosco "{name}"? L\'azione è irreversibile.', + 'kiosk.toast.deleted': 'Pagina chiosco eliminata', + 'kiosk.toast.delete_failed': 'Eliminazione fallita', + 'kiosk.toast.saved': 'Pagina chiosco salvata', + 'kiosk.not_found': 'Pagina non trovata', + 'kiosk.back': 'Torna a Pagine Chiosco', + 'kiosk.page_settings': 'Impostazioni Pagina', + 'kiosk.title_label': 'Titolo', + 'kiosk.subtitle_label': 'Sottotitolo', + 'kiosk.logo_url': 'URL Logo', + 'kiosk.footer_text': 'Testo a Piè di Pagina', + 'kiosk.idle_title': 'Titolo Schermata di Attesa', + 'kiosk.idle_default': 'Tocca per Iniziare', + 'kiosk.idle_timeout': 'Timeout Inattività (secondi)', + 'kiosk.style': 'Stile', + 'kiosk.background': 'Sfondo', + 'kiosk.text_color': 'Colore Testo', + 'kiosk.columns': 'Colonne', + 'kiosk.button_color': 'Colore Pulsante', + 'kiosk.button_hover': 'Colore Pulsante al Passaggio', + 'kiosk.buttons': 'Pulsanti', + 'kiosk.add_btn': '+ Aggiungi', + 'kiosk.icon_placeholder': 'Emoji', + 'kiosk.label_placeholder': 'Etichetta', + 'kiosk.sublabel_placeholder': 'Sotto-etichetta', + 'kiosk.action_none': 'Nessuna azione', + 'kiosk.action_url': 'Apri URL', + 'kiosk.action_page': 'Vai alla pagina', + 'kiosk.url_placeholder': 'URL o pagina', + 'kiosk.no_buttons': 'Ancora nessun pulsante', + 'kiosk.new_button': 'Nuovo Pulsante', + + // Layout editor + 'layout.title': 'Layout', + 'layout.subtitle': 'Layout dello schermo e modelli', + 'layout.help_tip': 'Crea layout dello schermo multi-zona. Usa i modelli o creane di personalizzati. Trascina le zone per posizionarle e ridimensionale con la maniglia d\'angolo. Assegna i layout ai dispositivi nella scheda Playlist.', + 'layout.new_layout': 'Nuovo Layout', + 'layout.templates': 'Modelli', + 'layout.my_layouts': 'I miei Layout', + 'layout.empty_custom': 'Ancora nessun layout personalizzato', + 'layout.prompt_name': 'Nome layout:', + 'layout.default_zone_name': 'Principale', + 'layout.template_label': 'Modello', + 'layout.use_template': 'Usa Modello', + 'layout.zone_count_one': '1 zona', + 'layout.zone_count_other': '{n} zone', + 'layout.confirm_delete': 'Eliminare il layout "{name}"? L\'azione è irreversibile.', + 'layout.toast.deleted': 'Layout eliminato', + 'layout.toast.delete_failed': 'Eliminazione layout fallita', + 'layout.toast.saved': 'Layout salvato', + 'layout.not_found': 'Layout non trovato', + 'layout.back': 'Torna ai Layout', + 'layout.add_zone': 'Aggiungi Zona', + 'layout.zones': 'Zone', + 'layout.properties': 'Proprietà', + 'layout.delete_zone': 'Elimina Zona', + 'layout.zone_n': 'Zona {n}', + 'layout.prop.name': 'Nome', + 'layout.prop.x': 'X (%)', + 'layout.prop.y': 'Y (%)', + 'layout.prop.width': 'Larghezza (%)', + 'layout.prop.height': 'Altezza (%)', + 'layout.prop.type': 'Tipo', + 'layout.type_content': 'Contenuto', + 'layout.type_widget': 'Widget', + + // Video walls + 'wall.title': 'Video Wall', + 'wall.subtitle': 'Combina più schermi in un unico grande monitor', + 'wall.help_tip': 'Combina più schermi in un unico grande monitor. Imposta la dimensione della griglia, trascina i dispositivi nelle posizioni e regola la compensazione della cornice (bezel). Assegna i contenuti per la riproduzione su tutti i dispositivi.', + 'wall.new_wall': 'Nuovo Video Wall', + 'wall.prompt_name': 'Nome video wall:', + 'wall.empty_title': 'Ancora nessun video wall', + 'wall.empty_desc': 'Crea un video wall per combinare più schermi.', + 'wall.grid_summary': 'Griglia {cols}x{rows} • {n} dispositivi', + 'wall.not_found': 'Video wall non trovato', + 'wall.back': 'Torna ai Video Wall', + 'wall.delete_wall': 'Elimina Video Wall', + 'wall.grid_config': 'Configurazione Griglia', + 'wall.columns': 'Colonne', + 'wall.rows': 'Righe', + 'wall.h_bezel': 'Cornice Orizz. (px)', + 'wall.v_bezel': 'Cornice Vert. (px)', + 'wall.update': 'Aggiorna', + 'wall.content': 'Contenuto', + 'wall.no_content': 'Nessun contenuto', + 'wall.set_content': 'Imposta Contenuto', + 'wall.available_displays': 'Schermi Disponibili', + 'wall.all_assigned': 'Tutti i dispositivi assegnati', + 'wall.drop_here': 'Trascina qui', + 'wall.toast.placed': '{name} posizionato in [{col},{row}]', + 'wall.toast.grid_updated': 'Griglia aggiornata', + 'wall.toast.content_updated': 'Contenuto aggiornato', + 'wall.toast.deleted': 'Video wall eliminato', + + // Billing + 'billing.title': 'Abbonamento', + 'billing.subtitle': 'Gestisci il tuo piano e la fatturazione', + 'billing.current_plan': 'Piano Attuale', + 'billing.self_hosted': 'Self-Hosted', + 'billing.trial_days_left': 'Prova - {n} giorni rimasti', + 'billing.trial_ends': 'La tua prova del piano {plan} termina tra {n} giorni', + 'billing.trial_after': "Al termine della prova, passerai al piano Gratis (1 dispositivo). Effettua l'upgrade ora per mantenere tutti i tuoi dispositivi e funzionalità.", + 'billing.devices': 'Dispositivi', + 'billing.devices_lc': 'dispositivi', + 'billing.storage': 'Archiviazione', + 'billing.storage_lc': 'archiviazione', + 'billing.features': 'Funzionalità', + 'billing.feat.remote_control': 'Controllo Remoto', + 'billing.feat.remote_urls': 'URL Remoti', + 'billing.feat.priority_support': 'Supporto Prioritario', + 'billing.available_plans': 'Piani Disponibili', + 'billing.current': 'Attuale', + 'billing.unlimited': 'Illimitato', + 'billing.free': 'Gratis', + 'billing.per_month': '/mese', + 'billing.yearly_save': 'o ${price}/anno (risparmia il {pct}%)', + 'billing.monthly': 'Mensile', + 'billing.yearly': 'Annuale', + 'billing.manage_subscription': 'Gestisci Abbonamento', + 'billing.self_hosted_note': 'Modalità self-hosted: i piani possono essere assegnati dagli amministratori senza fatturazione.', + 'billing.failed_to_load': 'Caricamento fallito', + 'billing.toast.checkout_failed': 'Impossibile avviare il pagamento: {error}', + 'billing.toast.portal_failed': 'Impossibile aprire il portale di fatturazione: {error}', + 'billing.toast.payment_success': 'Pagamento riuscito! Il tuo piano è stato aggiornato.', + + // Teams + 'team.title': 'Team', + 'team.subtitle': 'Gestisci i team e l\'accesso condiviso', + 'team.help_tip': 'Crea dei team per condividere i dispositivi con altri utenti. I proprietari gestiscono il team, gli editor possono modificare contenuti/playlist, i visualizzatori possono solo monitorare.', + 'team.new_team': 'Nuovo Team', + 'team.prompt_name': 'Nome del team:', + 'team.empty_title': 'Ancora nessun team', + 'team.empty_desc': 'Crea un team per condividere i dispositivi con altri utenti.', + 'team.your_role': 'Il tuo ruolo: {role}', + 'team.member_count_one': '1 membro', + 'team.member_count_other': '{n} membri', + 'team.not_found': 'Team non trovato', + 'team.back': 'Torna ai Team', + 'team.delete_team': 'Elimina Team', + 'team.members_count': 'Membri ({n})', + 'team.invite': '+ Invita', + 'team.role_viewer': 'Visualizzatore', + 'team.role_editor': 'Editor', + 'team.role_owner': 'Proprietario', + 'team.remove': 'Rimuovi', + 'team.remove_from_team': 'Rimuovi dal team', + 'team.no_members': 'Ancora nessun membro', + 'team.shared_devices': 'Dispositivi Condivisi ({n})', + 'team.add_device': '+ Aggiungi dispositivo...', + 'team.no_devices': 'Nessun dispositivo condiviso con questo team', + 'team.prompt_email': 'Indirizzo email da invitare:', + 'team.prompt_role': 'Ruolo (visualizzatore, editor o proprietario):', + 'team.toast.invalid_role': 'Ruolo non valido', + 'team.toast.invitation_sent': 'Invito inviato', + 'team.toast.role_updated': 'Ruolo aggiornato', + 'team.toast.member_removed': 'Membro rimosso', + 'team.toast.device_added': 'Dispositivo aggiunto al team', + 'team.toast.device_removed': 'Dispositivo rimosso dal team', + 'team.toast.deleted': 'Team eliminato', + + // Activity log + 'activity.title': 'Registro Attività', + 'activity.subtitle': 'Tracciamento di tutte le azioni effettuate', + 'activity.load_more': 'Carica Altro', + 'activity.empty_title': 'Ancora nessuna attività', + 'activity.empty_desc': 'Le azioni appariranno qui man mano che utilizzerai il sistema.', + 'activity.system': 'Sistema', + 'activity.verb_created': 'ha creato', + 'activity.verb_updated': 'ha aggiornato', + 'activity.verb_deleted': 'ha eliminato', + 'activity.action_paired_device': 'ha associato un dispositivo', + 'activity.action_added_remote_content': 'ha aggiunto un contenuto remoto', + 'activity.noun_content': 'contenuto', + 'activity.noun_device': 'dispositivo', + 'activity.noun_playlist_assignment': 'assegnazione playlist', + 'activity.noun_assignment': 'assegnazione', + 'activity.noun_layout': 'layout', + 'activity.noun_widget': 'widget', + 'activity.noun_schedule': 'programmazione', + 'activity.noun_video_wall': 'video wall', + 'activity.alert_device_offline': 'avviso: il dispositivo è andato offline', + + // Help + 'help.title': 'Centro Assistenza', + 'help.subtitle': 'Guide rapide e FAQ', + 'help.faq': 'Domande Frequenti (FAQ)', + 'help.shortcuts': 'Scorciatoie da Tastiera', + 'help.shortcut_esc': 'Ripristina web player (sulla pagina del player)', + 'help.shortcut_f': 'Attiva/Disattiva schermo intero (web player)', + + // Add Display modal (in index.html) + 'add_display.title': 'Aggiungi Schermo', + 'add_display.intro': 'Inserisci il codice di associazione di 6 cifre mostrato sullo schermo.', + 'add_display.pairing_code': 'Codice di Associazione', + 'add_display.display_name': 'Nome Schermo (opzionale)', + 'add_display.name_placeholder': 'es. TV Atrio', + 'add_display.need_player': 'Ti serve l\'app player? Installane una per ottenere il codice:', + 'add_display.android_apk': 'APK Android', + 'add_display.web_player': 'Web Player', + 'add_display.raspberry_pi': 'Raspberry Pi', + 'add_display.windows': 'Windows', + 'add_display.smart_tv_note': 'Smart TV (LG/Samsung): apri il browser integrato e vai su /player', + 'add_display.pair_btn': 'Associa Schermo', +};