// Italian translations
window.LANG_IT = {
  // Common
  common: {
    save: "Salva",
    cancel: "Annulla",
    confirm: "Conferma",
    loading: "Caricamento...",
    success: "Successo",
    failed: "Fallito",
    delete: "Elimina",
    edit: "Modifica",
    add: "Aggiungi",
    enable: "Abilita",
    disable: "Disabilita",
    enabled: "Abilitato",
    disabled: "Disabilitato",
    yes: "Sì",
    no: "No",
    on: "Attivo",
    off: "Disattivo",
    apply: "Applica",
    reset: "Ripristina",
    refresh: "Aggiorna",
    close: "Chiudi",
    back: "Indietro",
    next: "Avanti",
    previous: "Precedente",
    submit: "Invia",
    action: "Azione",
    chinese: "中文",
    traditionalChinese: "繁體中文",
    english: "English",
    spanish: "Español",
    japanese: "日本語",
    korean: "한국어",
    german: "Deutsch",
    french: "Français",
    portuguese: "Português",
    russian: "Русский",
    italian: "Italiano",
    turkish: "Türkçe",
    continue: "Continua",
    copy: "Copia",
    copied: "Copiato"
  },

  preview: {
    flvRequired: "Abilitare il flusso FLV.",
    flvOrHlsRequired: "Abilitare almeno uno stream live: FLV o HLS.",
    hlsUnsupportedEnableFlv: "L'anteprima HLS non è supportata da questo browser. Abilitare FLV."
  },

  play: {
    mainFlvRequired: "È necessario abilitare il flusso FLV principale",
    browserFlvUnsupported: "Questo browser non supporta la riproduzione FLV. Utilizzare un browser moderno come Chrome, Edge o Firefox"
  },

  // Page titles
  title: {
    encoder: "Encoder H.265/H.264",
    status: "Stato",
    mainStream: "Flusso Principale",
    subStream1: "Flusso Secondario 1",
    subStream2: "Flusso Secondario 2",
    subStream3: "Flusso Secondario 3",
    videoSettings: "Impostazioni Video",
    audioSettings: "Impostazioni Audio",
    advancedSettings: "Impostazioni Avanzate",
    osdMain: "OSD - Flusso Principale",
    osdSub1: "OSD - Flusso Secondario 1",
    osdSub2: "OSD - Flusso Secondario 2",
    osdSub3: "OSD - Flusso Secondario 3",
    logoUpload: "Caricamento LOGO",
    network: "Impostazioni di Rete",
    record: "Impostazioni Registrazione",
    gb28181: "GB28181",
    wifi: "Impostazioni WIFI",
    g4: "Impostazioni 4G/5G",
    password: "Impostazioni Password",
    serial: "Trasporto Seriale",
    update: "Aggiornamento e Backup",
    reboot: "Riavvia Dispositivo",
    timedReboot: "Riavvio Programmato",
    factoryReset: "Ripristino di Fabbrica",
    recordFiles: "File Registrazione",
    netTest: "Test di Rete",
    recordSet: "Impostazioni Registrazione",
    alirtcTokenPage: "AliRTC Token"
  },

  // Menu
  menu: {
    status: "Stato",
    encoder: "Encoder",
    mainStream: "Flusso Principale",
    subStream1: "Flusso Secondario 1",
    subStream2: "Flusso Secondario 2",
    subStream3: "Flusso Secondario 3",
    videoSettings: "Impostazioni Video",
    audioSettings: "Impostazioni Audio",
    advancedSettings: "Impostazioni Avanzate",
    osd: "OSD",
    logoUpload: "Caricamento LOGO",
    system: "Sistema",
    network: "Rete",
    record: "Registrazione",
    gb28181: "GB28181",
    wifi: "WIFI",
    g4: "4G/5G",
    password: "Password",
    serial: "Trasporto Seriale",
    update: "Aggiornamento e Backup",
    reboot: "Riavvio",
    timedReboot: "Riavvio Programmato",
    factoryReset: "Ripristino di Fabbrica"
  },

  // Status page
  status: {
    // Device status
    deviceStatus: "Stato Dispositivo",
    runningTime: "Tempo di Funzionamento: ",
    runtimeDayWithTime: "{0}g {1}",
    deviceTime: "Ora Dispositivo: ",
    syncTime: " (Sincronizza ora con dispositivo)",
    cpuUsage: "Utilizzo CPU: ",
    memoryUsage: "Utilizzo Memoria: ",
    codecUsage: "Utilizzo Risorse di Codifica: ",
    encPpsUsage: "Utilizzo Risorse di Codifica: ",
    memoryWarning: " (Se l'utilizzo della memoria è troppo alto dopo 1 minuto dall'avvio, disabilitare alcuni flussi HLS o ridurre il bitrate)",
    cpuWarning: " (Se l'utilizzo CPU rimane sopra l'85%, disabilitare alcuni flussi o ridurre la risoluzione dei flussi secondari)",
    networkStatus: "Stato Rete: ",
    inputVideo: "Video in Ingresso: ",
    inputVideoStatus: "Stato video in ingresso: ",
    vgaAutoAdjust: " (Regolazione Auto VGA)",
    capturedFrames: "Frame Video Catturati: ",
    lostFrames: "Frame Video Persi: ",
    audioSampleRate: "Frequenza Audio in Ingresso: ",
    inputAudioStatus: "Stato audio in ingresso: ",
    capturedAudioFrames: "Frame Audio Catturati: ",
    bFrameMode: "Modalità di compressione avanzata: ",
    bFrameModeEnabled: "Abilitato",
    packetsSent: "Pacchetti Inviati: ",
    netTestLink: " (Test di Rete e Log di Sistema)",
    packetsDropped: "Pacchetti Persi: ",
    canAccessInternet: "Accesso Internet",
    canAccessInternetIP: "Accesso IP Internet",
    lanOnly: "Solo LAN",
    localNetwork: "Rete Locale",

    // Recording status
    recordStatus: "Stato Registrazione",
    recordType: "Tipo Registrazione: ",
    diskStatus: "Stato Disco: ",
    diskNotExist: "Non Trovato",
    mountStatus: "Stato Montaggio: ",
    notMounted: "Non Montato",
    mounted: "Montato",
    totalSpace: "Spazio Totale: ",
    freeSpace: "Spazio Libero: ",
    recordingStatus: "Stato Registrazione: ",
    diskFull: "Disco Pieno",
    diskSlow: "Disco Troppo Lento",
    recordFileList: "Lista File Registrazione",
    notRecording: "Non in Registrazione",
    recording: "In Registrazione",
    recordingNoVideo: " (I file potrebbero non essere salvati senza ingresso video)",
    startRecord: "(Avvia Registrazione)",
    stopRecord: "(Ferma Registrazione)",
    usbTfCard: "USB/Scheda TF",

    // DHCP status
    dhcpStatus: "Stato DHCP",
    ip: "IP: ",
    subnetMask: "Maschera di Sottorete: ",
    gateway: "Gateway: ",

    // WIFI status
    wifiStatus: "Stato WIFI",
    wifiDisabled: "WIFI: Disabilitato",
    wifiState: "Stato WIFI: ",
    wifiSSID: "SSID WIFI: ",
    wifiIP: "IP WIFI: ",
    wifiMAC: "MAC WIFI: ",
    wifiRSSI: "Segnale WIFI (RSSI): ",
    wifiFreq: "Frequenza WIFI: ",
    wifiConnected: "Connesso",
    wifiDisconnected: "Disconnesso",
    wifiConnecting: "Connessione in corso (Se la connessione richiede troppo tempo, verificare le impostazioni WIFI)",

    // 4G/5G status
    g4Status: "Stato 4G/5G",
    g4Disabled: "4G/5G: Disabilitato",
    status: "Stato: ",
    imei: "IMEI: ",
    mode: "Modalità: ",
    signalStrength: "Intensità Segnale: ",
    noSignal: "Nessun Segnale",
    noSigPicOnly: "Only transmit no-signal image:",

    gpsTime: "Ora GPS: ",
    gpsLocation: "Posizione GPS: ",
    gpsHeight: "Altitudine GPS: ",
    onlineTime: "Tempo Online: ",
    receivedBytes: "Ricevuti: ",
    sentBytes: "Inviati: ",
    g4Connected: "Connesso",
    g4Connecting: "Connessione in corso",
    g4Disconnected: "Disconnesso",
    timeHour: "h",
    timeMinute: "m",
    timeSecond: "s",

    // Streams
    mainStream: "Flusso Principale",
    subStream1: "Flusso Secondario 1",
    subStream2: "Flusso Secondario 2",
    subStream3: "Flusso Secondario 3",
    streamDisabled: "Disabilitato (I flussi secondari sono disabilitati quando il frame rate del flusso principale è 31-60 fps)",
    codecType: "Codec: ",
    encodeResolution: "Risoluzione Codifica: ",
    videoBitrate: "Bitrate Video: ",
    realTimeBitrate: "Bitrate in Tempo Reale: ",
    realTimeFps: "FPS in Tempo Reale: ",
    videoEncoded: "Video Codificato: ",
    reconnect: " (Riconnetti)",
	    previewWebRTC: "Anteprima Video (WebRTC)",
	    previewHTML5: "Anteprima Video (HTML5)",
	    previewLowLatency: "Anteprima video (bassa latenza)",

    // URL related
    disabled: "Disabilitato",
    connected: "Connesso",
    disconnected: "Disconnesso",
    statusNormal: "Normale",
    statusNoData: "Nessun dato",
    bufferPackets: "Pacchetti Buffer",
    bufferPacketsLabel: "Pacchetti Buffer: ",
    pushSpeed: "Velocità Push",
    pushSpeedLabel: "Velocità Push: ",
    pushed: "Inviato",
    pushedLabel: "Inviato: ",
    sendBytesLabel: "Dati inviati: ",
    memoryUsed: "Memoria Utilizzata",
    memoryUsedLabel: "Memoria Utilizzata: ",
    cacheFiles: "File Cache",
    cacheFilesLabel: "File Cache: ",
    multicastUrl: "URL Multicast: ",
    mjpgUrl: "URL Stream MJPG: ",
    jpgUrl: "URL Stream JPG: ",
    tsUrl: "URL Stream TS: ",
    flvUrl: "URL Stream FLV: ",
    hlsTsUrl: "URL Stream HLS TS: ",
    hlsMp4Url: "URL Stream HLS MP4: ",
    mp4Url: "URL Stream MP4: ",
    rtspUrl: "URL Stream RTSP: ",
    rtmpUrl: "URL Stream RTMP: ",
    srtListenerUrl: "URL Listener SRT: ",
    webrtcP2pUrl: "URL Stream WebRTC P2P: ",
    rtmpPushUrlAny: "URL Pubblicazione RTMP(S)/RTSP {0}: ",
    rtmpPushUrlAny0: "URL Pubblicazione RTMP(S)/RTSP 0: ",
    rtmpPushUrlAny1: "URL Pubblicazione RTMP(S)/RTSP 1: ",
    rtmpPushUrlAny2: "URL Pubblicazione RTMP(S)/RTSP 2: ",
    rtmpPushUrl: "URL Pubblicazione RTMP(S) {0}: ",
    rtspPushUrl: "URL Pubblicazione RTSP {0}: ",
    srtCallerUrl: "URL Caller SRT: ",
    hlsPushUrl: "URL PUSH HLS: ",
    icecastPushUrl: "URL PUSH ICECAST: ",
    shoutcastPushUrl: "URL PUSH Shoutcast: ",
    whipLabel: "WHIP: ",
    viewers: "Spettatori",
    viewersLabel: "Spettatori: ",

    // TRTC status
    trtcRoomId: "ID Stanza TRTC: ",
    inRoom: "Nella Stanza",
    notInRoom: "Non Nella Stanza",
    initializingServer: "Inizializzazione connessione server",
    serverDisconnected: "Server disconnesso",
    connectingServer: "Connessione al server",
    serverConnected: "Connesso al server",
    networkUnknown: "Stato rete sconosciuto",
    networkExcellent: "Rete eccellente",
    networkGood: "Rete buona",
    networkNormal: "Rete normale",
    networkPoor: "Rete scarsa",
    networkBad: "Rete cattiva",
    networkNotMeet: "La rete non soddisfa i requisiti minimi TRTC",
    errorCode: "Codice Errore",
    errorCodeLabel: "Codice Errore: ",
    trtcError1: "Errore generale, controllare i file di log per la risoluzione",
    trtcError100: "Errore logica business: chiamata illegale",
    trtcError101: "Errore logica business: parametro illegale",
    trtcError102: "Impossibile leggere attualmente, riprovare",
    trtcError103: "Impossibile connettersi alla rete",
    trtcError200: "Impossibile entrare nella stanza",
    trtcError201: "Parametro user_sig non valido",
    trtcError202: "Formato ID stanza non valido",
    trtcError203: "sdk_app_id non valido",
    trtcError204: "Servizio non disponibile. Verificare che i minuti del pacchetto siano > 0 e che l'account Tencent Cloud non sia scaduto",
    trtcError205: "Utente espulso dalla stanza dal server",

    // WHIP status
    whipInitializing: "Inizializzazione",
    whipConnected: "Connesso",
    whipDisconnected: "Disconnesso",
    whipUnknown: "Stato Sconosciuto",
    alirtcLabel: "AliRTC: ",
    alirtcConnecting: "Connessione in corso",
    alirtcConnected: "Connesso",
    alirtcDisconnected: "Disconnesso",
    alirtcUnknown: "Stato Sconosciuto",
    alirtcRoomId: "ID Stanza AliRTC: ",
    alirtcRoomIdLabel: "ID stanza: ",
    alirtcUserIdLabel: "ID utente: ",
    alirtcUserNameLabel: "Nome utente: ",
    alirtcVideoBitrateLabel: "Video: ",
    alirtcAudioBitrateLabel: "Audio: ",
    alirtcRttLabel: "RTT: ",

    // GB28181
    gb28181: "GB28181: ",
    gb28181Online: "Online",
    gb28181Offline: "Offline"
  },

  // Reboot page
  reboot: {
    title: "Riavvia Dispositivo",
    description: "Fare clic su questo pulsante per riavviare l'encoder.",
    button: "Riavvia",
    success: "Comando di riavvio inviato!",
    failed: "Riavvio fallito!",
    confirm: "Sei sicuro di voler riavviare il dispositivo?"
  },

  // Factory reset page
  reset: {
    title: "Ripristino di Fabbrica",
    description: "Fare clic su questo pulsante per ripristinare tutte le impostazioni dell'encoder ai valori predefiniti di fabbrica.",
    button: "Ripristina",
    success: "Ripristino di fabbrica riuscito! Il sistema si riavvierà automaticamente, attendere.",
    failed: "Ripristino di fabbrica fallito!",
    confirm: "Sei sicuro di voler ripristinare le impostazioni di fabbrica?"
  },

  // Scheduled reboot page
  timedReboot: {
    title: "Riavvio Programmato",
    enable: "Riavvio Programmato",
    enableLabel: "Riavvio Programmato:",
    timeLabel: "Ora Riavvio:",
    enabled: "Abilita",
    disabled: "Disabilita",
    time: "Ora Riavvio",
    weekdays: "Giorni Riavvio",
    everyday: "Ogni giorno",
    monday: "Lunedì",
    tuesday: "Martedì",
    wednesday: "Mercoledì",
    thursday: "Giovedì",
    friday: "Venerdì",
    saturday: "Sabato",
    sunday: "Domenica",
    save: "Salva",
    saveSuccess: "Impostazioni salvate!",
    saveFailed: "Impostazioni fallite!",
    invalidTime: "Valore ora non valido!"
  },

  // Network test page
  netTest: {
    title: "Test di Rete e Log di Sistema",
    command: "Comando:",
    run: "Esegui",
    address: "Indirizzo:",
    result: "Risultato:",
    invalidAddr: "Inserire un indirizzo valido!"
  },

  // Record files page
  recordFiles: {
    title: "Lista File",
    fileName: "Nome File",
    time: "Ora",
    fileSize: "Dimensione File",
    action: "Azione",
    delete: "Elimina",
    confirmDelete: "Sei sicuro di voler eliminare",
    deleteSuccess: "Comando di eliminazione inviato con successo!",
    deleteFailed: "Eliminazione fallita!",
    noFiles: "Nessun file di registrazione",
    loadError: "Caricamento fallito"
  },

  // Password settings page
  password: {
    title: "Impostazioni Password",
    oldPassword: "Vecchia Password",
    oldPasswordLabel: "Vecchia Password:",
    newPassword: "Nuova Password",
    newPasswordLabel: "Nuova Password:",
    confirmPassword: "Conferma Password",
    confirmPasswordLabel: "Conferma Password:",
    save: "Salva",
    success: "Impostazioni salvate!",
    failed: "Impostazione password fallita, verificare che la vecchia password sia corretta!",
    mismatch: "Le nuove password non corrispondono!",
    empty: "La password non può essere vuota!"
  },

  // Encoding common (only actually used keys)
  encoding: {
    sameAsInput: "Stessa risoluzione dell'ingresso",
    mp3Required: "Impostare la codifica audio su MP3!",
    choosePrimaryColor: "Scegli il colore principale",
    toggleTheme: "Cambia tema"
  },

  // OSD settings
  osd: {
    title: "Impostazioni OSD",
    mainStream: "OSD Flusso Principale",
    subStream1: "OSD Flusso Secondario 1",
    subStream2: "OSD Flusso Secondario 2",
    subStream3: "OSD Flusso Secondario 3",
    alpha: "Trasparenza",
    alphaLabel: "Trasparenza:",
    alphaRange: "[0-255]",
    alphaError: "La trasparenza deve essere un intero tra 0-128!",
    region: "Regione",
    regionLabel: "Regione:",
    region1: "Regione 1",
    region2: "Regione 2",
    region3: "Regione 3",
    region4: "Regione 4",
    type: "Tipo",
    typeLabel: "Tipo:",
    typeText: "Testo",
    typeImage: "Immagine",
    typeScroll: "Testo Scorrevole",
    typeTime: "Ora",
    timeFormatLabel: "Formato ora:",
    position: "Posizione",
    positionLabel: "Posizione:",
    speed: "Velocità",
    speedLabel: "Velocità:",
    xLabel: "X:",
    yLabel: "Y:",
    textLabel: "Testo:",
    fontSize: "Dimensione Font",
    fontSizeLabel: "Dimensione Font:",
    fontSizeRange: "[8-72]",
    backgroundColor: "Colore Sfondo",
    backgroundLabel: "Colore Sfondo:",
    bgTransparent: "Trasparente",
    bgWhite: "Bianco",
    bgBlack: "Nero",
    fontColor: "Colore Font",
    fontColorLabel: "Colore Font:",
    pickColor: "Scegli Colore",
    closeColor: "Chiudi",
    logoLabel: "LOGO:",
    success: "Impostazioni salvate con successo!",
    failed: "Impostazioni fallite!",
    xRangeError: "{0} Il valore X deve essere un intero tra 0-{1}!",
    yRangeError: "{0} Il valore Y deve essere un intero tra 0-{1}!",
    textEmpty: "{0} il testo non può essere vuoto!",
    fontSizeError: "{0} la dimensione del font deve essere un intero tra 8-72!",
    speedRangeError: "{0} il valore della velocità deve essere un intero tra 0-30!",
    positionRangeError: "{0} il valore della posizione deve essere un intero tra 0-{1}!",
    selectLogo: "Selezionare un LOGO per {0}!",
    webrtcPreview: "Anteprima video"
  },

  // LOGO upload
  logo: {
    title: "Caricamento LOGO",
    logoLabel: "LOGO:",
    upload: "Carica",
    hint: "Caricare un'immagine PNG o BMP a 24 bit inferiore a 500KB (0xF1F1F1 è trasparente),",
    hint2: "nome file: logo1.bmp / logo2.bmp / logo3.bmp / logo4.bmp,",
    hint3: "oppure logo1.png / logo2.png / logo3.png / logo4.png",
    noFileSelected: "Selezionare un file da caricare!",
    invalidFile: "Caricare immagini come richiesto!",
    uploadSuccess: "Caricamento riuscito!",
    uploadFailed: "Caricamento fallito!",
    imageSizeExceeded: "Dimensione file immagine superata!",
    imageResolutionExceeded: "Risoluzione file immagine superata!",
    storageInsufficient: "File aggiornamento troppo grande, spazio di archiviazione insufficiente!"
  },

  // WIFI settings
  wifi: {
    title: "Impostazioni WIFI",
    mode: "Modalità",
    ap: "Access Point",
    sta: "Modalità Client",
    ssid: "SSID",
    password: "Password",
    security: "Sicurezza",
    channel: "Canale",
    scan: "Scansione",
    connect: "Connetti",
    disconnect: "Disconnetti",
    status: "Stato",
    connected: "Connesso",
    disconnected: "Disconnesso",
    signalStrength: "Intensità Segnale",
    basicSettings: "Impostazioni Base",
    wifiModule: "Modulo Wifi:",
    wifiMode: "Modalità Wifi:",
    staMode: "Modalità STA",
    apMode: "Modalità AP",
    mainConfig: "Configurazione WIFI Principale",
    backupConfig1: "Configurazione WIFI Backup 1",
    backupConfig2: "Configurazione WIFI Backup 2",
    apModeSettings: "Modalità AP",
    wifiList: "Lista Wifi:",
    wifiEssid: "Essid Wifi:",
    wifiPassword: "Password Wifi:",
    wifiDhcp: "DHCP Wifi:",
    wifiIp: "IP Wifi:",
    wifiNetmask: "Netmask Wifi:",
    wifiGateway: "Gateway Wifi:",
    backupEnable1: "Config Backup 1:",
    backupEnable2: "Config Backup 2:",
    wifiBand: "Banda Wifi:",
    wifiChannel: "Canale Wifi:",
    refresh: "Aggiorna",
    success: "Impostazioni salvate con successo!",
    failed: "Salvataggio impostazioni fallito!",
    mainConfigEmpty: "Configurazione WIFI Principale: {0} non può essere vuoto!",
    mainConfigInvalid: "Configurazione WIFI Principale: formato {0} non valido!",
    backupConfigEmpty: "WIFI {0}: {1} non può essere vuoto!",
    backupConfigInvalid: "WIFI {0}: formato {1} non valido!",
    ipAddr: "Indirizzo IP",
    netmask: "Netmask",
    gateway: "Gateway",
    essidEmpty: "Il nome WiFi non può essere vuoto!",
    passwordTooShort: "La password WiFi deve essere di almeno 8 caratteri!"
  },

  // 4G/5G settings
  cellular: {
    title: "Impostazioni 4G/5G",
    enable: "Abilita",
    apn: "APN",
    username: "Nome Utente",
    password: "Password",
    status: "Stato",
    signalStrength: "Intensità Segnale",
    operator: "Operatore",
    connected: "Connesso",
    disconnected: "Disconnesso",
    connecting: "Connessione in corso...",
    module: "Modulo 4G/5G:",
    apnLabel: "APN:",
    usernameLabel: "Nome Utente:",
    passwordLabel: "Password:",
    authType: "Tipo Autenticazione:",
    dnsOrder: "Ordine DNS 4G/5G:",
    authNone: "Nessuno",
    authPap: "PAP",
    authChap: "CHAP",
    authChapPap: "CHAP+PAP",
    success: "Impostazioni salvate con successo!",
    failed: "Salvataggio impostazioni fallito!"
  },

  // Upgrade and backup
  updateBackup: {
    title: "Aggiornamento Sistema",
    uploadTitle: "Carica Firmware e Configurazione",
    backupTitle: "Backup Firmware e Configurazione",
    systemVersion: "Versione Sistema",
    systemVersionLabel: "Versione Sistema: ",
    hardware: "Hardware",
    hardwareLabel: "Hardware: ",
    selectFile: "Seleziona File",
    selectFileLabel: "Seleziona File:",
    uploadHint: "Nome file caricamento: up.rar o box.ini",
    uploadWarning: "Non caricare simultaneamente. Non spegnere durante il caricamento.",
    upload: "Carica",
    backupFirmware: "Backup Firmware",
    backupConfig: "Backup Configurazione",
    noFileSelected: "Selezionare un file da caricare!",
    uploadSuccess: "Caricamento riuscito, riavviare il sistema!",
    uploadFailed: "Caricamento fallito!",
    kernelUpdating: "L'aggiornamento del kernel richiederà alcuni minuti. Non riavviare il sistema. Il dispositivo si riavvierà automaticamente al completamento.",
    kernelUpdatingBin: "L'aggiornamento del kernel richiederà alcuni minuti. Non riavviare il sistema. Il dispositivo si riavvierà automaticamente al completamento!",
    imageSizeExceeded: "Dimensione file immagine superata!",
    imageResolutionExceeded: "Risoluzione file immagine superata!",
    storageInsufficient: "File aggiornamento troppo grande, spazio di archiviazione insufficiente!"
  },

  // Serial transport settings
  serial: {
    title: "Trasporto Seriale",
    frpTitle: "Impostazioni Client FRP",
    serialTitle: "Passthrough Porta Seriale",
    enable: "Abilita",
    disable: "Disabilita",
    enableLabel: "Abilita:",
    serverAddr: "Indirizzo Server",
    serverAddrLabel: "Indirizzo Server:",
    serverPort: "Porta Server",
    serverPortLabel: "Porta Server:",
    serverToken: "Token Server",
    serverTokenLabel: "Token Server:",
    channel: "Canale",
    channel1: "Canale 1",
    channel2: "Canale 2",
    channel3: "Canale 3",
    channel4: "Canale 4",
    protocolLabel: "Protocollo:",
    localPort: "Porta Locale",
    localPortLabel: "Porta Locale:",
    remotePort: "Porta Remota",
    remotePortLabel: "Porta Remota:",
    serialMode: "Modalità Seriale",
    serialModeLabel: "Modalità:",
    server: "Server",
    client: "Client",
    baudRate: "Baud Rate",
    baudRateLabel: "Baud Rate:",
    listenPort: "Porta Ascolto",
    listenPortLabel: "Porta Ascolto:",
    save: "Salva",
    success: "Impostazioni salvate, riavviare il dispositivo!",
    failed: "Impostazioni fallite!",
    emptyError: "Le impostazioni non possono essere vuote!",
    portRangeError: "La porta TCP di ascolto deve essere un intero tra 1-65500!",
    frpAddrEmpty: "L'indirizzo del server FRP non può essere vuoto!",
    frpPortError: "La porta del server FRP deve essere un intero tra 1-65500!"
  },

  // Advanced Settings
  advanced: {
    title: "Impostazioni Avanzate",
    // Section titles
    videoInput: "Ingresso Video",
    avTransmission: "Trasmissione A/V",
    recordSettings: "Impostazioni Registrazione",
    hlsSettings: "Impostazioni HLS",
    networkTransmission: "Trasmissione Stream",
    serviceSettings: "Impostazioni Servizio",
    logSettings: "Impostazioni Log",
    encoderParams: "Parametri Encoder",
    imageEnhancement: "Miglioramento Immagine",
    autoRestart: "Riavvio Automatico",
    // Video Input
    edidSelect: "Selezione EDID:",
    colorGamut: "Gamma Colori:",
    colorRange: "Range Colori:",
    bFrameMode: "Advanced compression mode:",

    interlaceMode: "Modalità Interlacciato:",
    noSignal: "Nessun Segnale:",
    noSigPicOnly: "Only transmit no-signal image:",

    vgaAutoAdjust: "Regolazione Auto VGA all'Avvio:",
    interlaceWeaving: "Interlacciamento (unisci campi)",
    interlaceBottom: "Solo campo inferiore",
    interlaceTop: "Solo campo superiore",
    interlaceBobbing: "Bobbing (campo a frame)",
    noSignalHide: "Nascondi",
    noSignalImage: "Show no-signal image",
    noSignalColor: "Mostra colore solido",
    // A/V Transmission
    videoOnly: "Solo Video:",
    audioOnly: "Solo Audio:",
    avSync: "Sincronizzazione A/V:",
    audioDelay: "Ritardo Audio (ms):",
    syncAuto: "Auto",
    syncResample: "Ricampiona",
    audioDelayHint: "Valori negativi anticipano l'audio, valori positivi lo ritardano. Usare solo per la regolazione della sincronizzazione A/V.",
    // Recording Settings
    recordType: "Tipo Registrazione:",
    cycleRecord: "Registrazione Ciclica:",
    recordSplitTime: "Tempo Divisione Registrazione (sec):",
    // HLS Settings
    hlsSplitTime: "Tempo Segmento HLS (sec):",
    hlsBufferNum: "Numero Segmenti HLS:",
    hlsIndexUri: "URI Indice Globale HLS:",
    // Network Transmission
    tsMuxer: "Muxer TS:",
    sliceNumber: "SLICE Number:",

    netDropThreshold: "Soglia Perdita Pacchetti:",
    tsOnce: "Pacchetti TS per Invio:",
    rtspPackType: "Incapsulamento RTSP:",
    multicastType: "Tipo Multicast:",
    enableSap: "Abilita SAP:",
    mtuSize: "Dimensione MTU:",
    ethSpeed: "Ethernet speed:",

    natAddr: "NAT mapped address:",

    udpTtl: "TTL UDP:",
    udpSockBuf: "UDP SOCKET_BUF_SIZE:",
    rtpH264PacketMode: "Pacchettizzazione RTP H264:",
    packetizeByAccessUnit: "packetize_by_access_unit",
    packetizeByNalu: "packetize_by_nalu",
    vlcCompat: "Compatibile VLC",
    ffmpegCompat: "Compatibile FFMPEG",
    esStream: "Stream ES",
    tsStream: "Stream TS",
    // Service Settings
    tsRtspAuth: "Autenticazione TS/RTSP Richiesta:",
    httpNoAuth: "Accesso Web Senza Autenticazione:",
    netCheck: "Controllo Stato Rete:",
    telnetService: "Servizio Telnet:",
    sambaService: "Servizio Samba:",
    onvifService: "Servizio ONVIF:",
    onvifLocation: "ONVIF Location:",
    onvifMode: "Modalità ONVIF:",
    onvifModeLegacy: "Legacy XML (porta HTTP/ONVIF condivisa)",
    onvifModeProfileST: "Profile S/T (porta ONVIF dedicata)",
    onvifModeProfileSCompat: "Profile S compatibile Hikvision (porta ONVIF dedicata)",
    onvifPassword: "ONVIF password required:",

    rtspDefaultStream: "Stream Predefinito RTSP:",
    vmixCompat: "Compatibile VMix:",
    readOnlyConfig: "Lock all settings:",

    telnetLan: "Solo LAN",
    // Log Settings
    localLog: "Servizio Log Locale:",
    trtcLogLevel: "Livello log SDK TRTC:",
    alirtcLogLevel: "Livello log SDK AliRTC:",
    sdkLogDebug: "Debug",
    sdkLogInfo: "Info",
    sdkLogWarning: "Avviso",
    sdkLogError: "Errore",
    sdkLogFatal: "Fatale",
    sdkLogNone: "Nessuno",
    lokiAddr: "Indirizzo Server Loki:",
    lokiPort: "Porta Server Loki:",
    // Encoder Parameters
    sliceSplit: "Divisione SLICE:",
    sliceBytes: "Byte SLICE:",
    minQp: "MIN_QP:",
    maxQp: "MAX_QP:",
    deblocking: "Deblocking filter:",
    deblockingAlpha: "Deblocking alpha:",
    deblockingBeta: "Deblocking beta:",



    debreath: "Debreathing:",
    sar: "PAR:",
    cbrOnlyHint: "Efficace solo quando la modalità di controllo bitrate è impostata su CBR",
    // Image Enhancement
    contrastEnhance: "Miglioramento Contrasto:",
    sharpnessEnhance: "Miglioramento Nitidezza:",
    lumaSfStrength: "Riduzione Rumore Spaziale Luma:",
    lumaTfStrength: "Riduzione Rumore Temporale Luma:",
    chromaSfStrength: "Riduzione Rumore Spaziale Chroma:",
    chromaTfStrength: "Riduzione Rumore Temporale Chroma:",
    // Auto Restart
    kickAllOnChange: "Disconnetti Utenti al Cambio Ingresso:",
    noVideoReboot: "Riavvio Auto Senza Video:",
    noAudioReboot: "Riavvio Auto Senza Audio:",
    picStillRestart: "Restart on frozen video:",

    // Button
    save: "Salva",
    // Messages
    success: "Impostazioni salvate, riavviare il dispositivo!",
    failed: "Impostazioni fallite!",
    emptyError: "Le impostazioni non possono essere vuote!",
    netDropError: "La soglia di perdita pacchetti deve essere un intero tra 50-50000!",
    tsOnceError: "TS packets per send must be an integer between 3-128!",
    sliceError: "SLICE Number must be an integer between 1-255!",
    minQpError: "MIN_QP deve essere un intero tra 1-35!",
    maxQpError: "MAX_QP deve essere maggiore di MIN_QP e massimo 50!",
    udpTtlError: "TTL UDP deve essere un intero tra 1-254!",
    contrastError: "Il miglioramento contrasto deve essere un intero tra 0-63!",
    sharpnessError: "Il miglioramento nitidezza deve essere un intero tra 0-16!",
    lumaSfError: "La riduzione rumore spaziale luma deve essere un intero tra 0-255!",
    lumaTfError: "La riduzione rumore temporale luma deve essere un intero tra 0-63!",
    chromaSfError: "La riduzione rumore spaziale chroma deve essere un intero tra 0-255!",
    chromaTfError: "La riduzione rumore temporale chroma deve essere un intero tra 0-32!",
    hlsSplitError: "Il tempo segmento HLS deve essere un intero tra 3-20!",
    hlsBufferError: "Il numero segmenti HLS deve essere un intero tra 3-20!",
    hlsUriError: "Formato URI indice globale HLS non valido!",
    udpSockBufError: "UDP SOCKET_BUF_SIZE deve essere un intero tra 0-20971520!",
    mtuError: "La dimensione MTU deve essere un intero tra 500-1500!",
    deblockingAlphaError: "Deblocking alpha must be an integer between -6 and 6!",
    deblockingBetaError: "Deblocking beta must be an integer between -6 and 6!",


    audioCacheError: "Il ritardo audio deve essere un intero tra -2000 e 2000!",
    recordSplitError: "Il tempo divisione registrazione deve essere un intero tra 60-7200!",
    lokiPortError: "La porta del server Loki deve essere tra 1-65500"
  },

  // Audio Encoding Settings
  audioEnc: {
    title: "Impostazioni Audio",
    // Tabs
    tabAudio: "Impostazioni Audio",
    tabOnvif: "Audio ONVIF",
    // Tips
    tipAudio: "Non impostare il guadagno del volume digitale troppo alto, potrebbe causare distorsione o introdurre rumore.<br>Nella maggior parte dei casi, impostare il guadagno a 0.<br>Regolare il volume complessivo usando i controlli front-end.",
    tipOnvif: "Per connettersi a NVR, impostare la codifica RTSP G711 su 'Abilita e ricampiona a 8K'",
    // Audio Settings
    audioInput: "Ingresso Audio:",
    sampleRate: "Frequenza di Campionamento:",
    codec: "Codec:",
    channel: "Canali:",
    bitrate: "Bitrate:",
    digitalGain: "Guadagno Volume Digitale:",
    analogGain: "Guadagno Volume Analogico:",
    denoise: "Riduzione Rumore:",
    denoiseStrength: "Intensità Riduzione Rumore (dB):",
    pteG711: "PTE Stream G711:",
    // Audio Input Options
    inputDigital: "Digitale",
    inputAnalog: "Analogico",
    inputMixed: "Misto",
    // Sample Rate Options
    sampleSameAsInput: "Stessa dell'ingresso",
    // ONVIF Audio
    rtspG711: "Codifica RTSP G711:",
    rtspG711Resample: "Abilita e ricampiona a 8K",
    g711Codec: "Codec G711:",
    // Buttons and Messages
    save: "Salva",
    success: "Impostazioni salvate!",
    failed: "Impostazioni fallite!",
    emptyError: "Le impostazioni non possono essere vuote!",
    bitrateError: "Il bitrate deve essere un intero tra {0}-{1}!",
    gainError: "Il guadagno volume digitale deve essere un intero tra -50 e 50!",
    denoiseError: "L'intensità riduzione rumore deve essere un intero tra 1-100!",
    analogVolEmpty: "Il guadagno volume analogico non può essere vuoto!",
    analogVolError: "Il guadagno volume analogico deve essere un intero tra {0} e {1}!"
  },

  // Recording Settings Page
  recordSet: {
    title: "Impostazioni Registrazione",
    // Card Titles
    statusTitle: "Stato Registrazione",
    settingsTitle: "Impostazioni Registrazione",
    // Status
    recordType: "Tipo Registrazione:",
    diskStatus: "Stato Disco:",
    currentAddr: "Indirizzo Corrente:",
    mountDevice: "Dispositivo Montato:",
    mountStatus: "Stato Montaggio:",
    totalSpace: "Spazio Totale:",
    freeSpace: "Spazio Libero:",
    recordStatus: "Stato Registrazione:",
    recordFiles: "File Registrazione:",
    fileList: "Lista File",
    // Disk Status
    diskNotExist: "Non Presente",
    diskFull: "Disco Pieno",
    diskSlow: "Disco Troppo Lento",
    mounted: "Montato",
    unmounted: "Smontato",
    notRecording: "Non in Registrazione",
    recording: "In Registrazione",
    noVideoWarning: " (I file potrebbero non essere salvati senza ingresso video)",
    // Action Links
    startRecord: "(Avvia Registrazione)",
    stopRecord: "(Ferma Registrazione)",
    mountDisk: "(Monta Disco)",
    unmountDisk: "(Smonta Disco)",
    deleteAll: "(Elimina Tutte le Registrazioni)",
    // Settings
    storageType: "Tipo Archiviazione:",
    partition: "Partizione:",
    partitionInfo: "Info Partizione:",
    diskInfo: "Info Disco:",
    formatDisk: "(Riformatta Disco)",
    exampleAddr: "Indirizzo Esempio:",
    storageAddr: "Indirizzo Archiviazione:",
    username: "Nome Utente:",
    password: "Password:",
    // Storage Type Options
    storageDisabled: "Disabilitato",
    storageUsb: "USB/Scheda TF",
    storageNfs: "NFS",
    storageSamba: "SAMBA/CIFS",
    // Format Dialog
    formatTitle: "Informazioni Disco",
    formatDevice: "Dispositivo:",
    formatType: "Tipo:",
    formatModel: "Modello:",
    formatRemovable: "Rimovibile:",
    formatPartTable: "Tabella Partizioni:",
    formatCapacity: "Capacità:",
    formatPartitions: "Informazioni Partizione",
    formatPartition: "Partizione",
    formatAvailable: "(disponibile)",
    formatTotal: "(totale)",
    formatConfirm: "Continuare con la formattazione del disco?",
    formatDanger: "Attenzione: La formattazione ripartizionerà e tutti i dati andranno persi. Continuare?",
    formatContinue: "Continua",
    formatCancel: "Annulla",
    formatConfirmBtn: "Conferma",
    formatting: "Formattazione...",
    // Buttons and Messages
    save: "Salva",
    yes: "Sì",
    no: "No",
    success: "Impostazioni salvate!",
    failed: "Impostazioni fallite!",
    formatSuccess: "Formattazione riuscita!",
    formatFailed: "Formattazione fallita!",
    deleteSuccess: "Comando di eliminazione inviato!",
    deleteFailed: "Eliminazione fallita!",
    confirmDeleteAll: "Eliminare tutti i file di registrazione?",
    recordingWarning: "Registrazione in corso. Fermare la registrazione prima di smontare.",
    diskMountedWarning: "Il disco è montato. Smontare prima di formattare.",
    diskMountedSettingWarning: "Il disco è montato. Smontare prima di modificare le impostazioni.",
    partitionNotExist: "La partizione non esiste",
    partitionRemoved: " (Rimossa)",
    // Address Validation
    addrEmpty: "L'indirizzo di archiviazione non può essere vuoto!",
    addrNfsFormat: "Formato indirizzo non valido, deve contenere il separatore ':'",
    addrIpError: "Formato indirizzo IP non valido",
    addrPathSlash: "Il percorso deve iniziare con '/'",
    addrPathInvalid: "Il percorso contiene caratteri non validi",
    addrSambaStart: "L'indirizzo deve iniziare con '\\\\'",
    addrSambaFormat: "Indirizzo non valido, deve contenere IP e percorso separati da '\\'",
    addrPathEmpty: "Il percorso non può essere vuoto",
    addrPathChars: "Il percorso contiene caratteri non validi, sono ammessi solo lettere, numeri, trattini bassi e trattini",
    // Disk size info "{available} / {total}"
    diskSizeInfo: "{0} (disponibile) / {1} (totale)"
  },
  // GB28181 Settings
  gb28181: {
    title: "Impostazioni GB28181",
    basicSettings: "Impostazioni Base",
    heartbeatSettings: "Impostazioni Heartbeat",
    sipServerSettings: "Impostazioni Server SIP",
    authSettings: "Impostazioni Autenticazione",
    enable: "Abilita:",
    disabled: "Disabilitato",
    enabled: "Abilitato",
    localSipPort: "Porta SIP Locale:",
    videoChannelId: "ID Canale Video:",
    streamSelect: "Selezione Stream:",
    mainStream: "Flusso Principale",
    subStream1: "Flusso Secondario 1",
    subStream2: "Flusso Secondario 2",
    subStream3: "Flusso Secondario 3",
    regExpiry: "Scadenza Registrazione:",
    heartbeatCycle: "Ciclo Heartbeat:",
    maxHeartbeatTimeout: "Timeout Massimo Heartbeat:",
    sipServerId: "ID Server SIP:",
    sipServerDomain: "Dominio Server SIP:",
    sipServerAddr: "Indirizzo Server SIP:",
    sipServerPort: "Porta Server SIP:",
    sipUserId: "ID Utente SIP:",
    sipPassword: "Password SIP:",
    emptyError: "Le impostazioni non possono essere vuote!",
    localPortError: "La porta SIP locale deve essere un intero tra 1-65500!",
    serverPortError: "La porta del server SIP deve essere un intero tra 1-65500!",
    regExpiryError: "La scadenza registrazione deve essere un intero tra 100-100000!",
    heartbeatError: "Il ciclo heartbeat deve essere un intero tra 5-3600!",
    maxTimeoutError: "Il timeout massimo heartbeat deve essere un intero tra 3-255!",
    success: "Impostazioni salvate con successo!",
    failed: "Impostazioni fallite!"
  },
  // Video Source Settings
  videoSource: {
    title: "Impostazioni Sorgente Video",
    videoInput: "Impostazioni Ingresso Video",
    brightAdjust: "Regolazione Luminosità Ingresso",
    videoOutput: "Impostazioni Uscita Video",
    inputFormat: "Formato Ingresso Video:",
    yuv422: "YUV422",
    yuv420: "YUV420 (Rotazione Supportata)",
    rotation: "Angolo Rotazione:",
    flipMirror: "Capovolgi/Specchia:",
    flipDisable: "Disabilitato",
    mirror: "Specchia",
    flip: "Capovolgi",
    flipAndMirror: "Specchia e Capovolgi",
    cropEnable: "Ritaglio Video:",
    cropLeft: "Punto Iniziale Ritaglio (Sinistra):",
    cropTop: "Punto Iniziale Ritaglio (Alto):",
    cropWidth: "Larghezza Ritaglio:",
    cropHeight: "Altezza Ritaglio:",
    monochrome: "Monocromatico:",
    colorMode: "Modalità Colore Ingresso:",
    unknown: "Sconosciuto",
    brightEnable: "Regolazione Luminosità:",
    gain: "Guadagno:",
    gainHint: "[10-1000], predefinito 100",
    offset: "Offset:",
    offsetHint: "[0-100], predefinito 0",
    note: "Nota:",
    brightNote1: "1. Luminosità = (Luminosità Originale * Guadagno / 100) + Offset",
    brightNote2: "2. La regolazione luminosità funziona solo in modalità colore ingresso RGB",
    outputRes: "Risoluzione Uscita Video:",
    auto: "Auto",
    cscEnable: "Regolazione CSC:",
    luminance: "Luminanza:",
    contrast: "Contrasto:",
    hue: "Tonalità:",
    saturation: "Saturazione:",
    cscHint: "[0-100], predefinito 50",
    rotateHint: "Le rotazioni di 180° e 270° possono essere ottenute combinando la rotazione 0°/90° con capovolgimento/specchio.",
    emptyError: "Le impostazioni non possono essere vuote!",
    gainError: "Il guadagno deve essere un intero tra 10-1000!",
    offsetError: "L'offset deve essere un intero tra 0-100!",
    leftError: "Il valore sinistro deve essere un intero tra 0-{0}!",
    topError: "Il valore superiore deve essere un intero tra 0-{0}!",
    widthError: "Il valore larghezza deve essere un intero tra 400-{0}!",
    heightError: "Il valore altezza deve essere un intero tra 400-{0}!",
    luminanceError: "La luminanza deve essere un intero tra 0-100!",
    contrastError: "Il contrasto deve essere un intero tra 0-100!",
    hueError: "La tonalità deve essere un intero tra 0-100!",
    saturationError: "La saturazione deve essere un intero tra 0-100!",
    success: "Impostazioni salvate con successo!",
    failed: "Impostazioni fallite!"
  },
  // Network Settings
  network: {
    title: "Impostazioni di Rete",
    ipv4Title: "Impostazioni IPv4",
    ipv6Status: "Stato IPv6",
    ipv6Title: "Impostazioni IPv6",
    ipv6TypeGlobal: "IP Globale",
    ipv6TypeLinkLocal: "IP Link-Local",
    ipv6TypeUniqueLocal: "IP Locale",
    ipv6TypeMulticast: "IP Multicast",
    ipv6TypeGeneric: "IP",
    ipv6StatusGateway: "Gateway",
    dnsTitle: "Impostazioni DNS",
    ntpTitle: "Impostazioni NTP",
    portTitle: "Impostazioni Porte",
    httpsTitle: "Impostazioni HTTPS",
    hostnameTitle: "Impostazioni HOSTNAME",
    dhcp: "DHCP:",
    dhcpHint: "Dopo aver abilitato DHCP, il dispositivo può essere trovato dagli strumenti di ricerca compatibili ONVIF.",
    ipAddr: "Indirizzo IP:",
    netmask: "Maschera di Sottorete:",
    gateway: "Gateway Cablato:",
    macAddr: "Indirizzo MAC:",
    defaultGateway: "Gateway Predefinito:",
    lanFirst: "Cablato Prima",
    wifiFirst: "WIFI Prima",
    g4First: "4G/5G Prima",
    ipv6Mode: "Modalità:",
    ipv6Disable: "Disabilitato",
    ipv6Auto: "Configurazione Auto",
    ipv6Manual: "Configurazione Manuale",
    ipv6Addr: "Indirizzo IPv6:",
    ipv6Prefix: "Lunghezza Prefisso IPv6:",
    ipv6Gateway: "Gateway Predefinito IPv6:",
    dns1: "DNS1:",
    dns2: "DNS2:",
    ntpSync: "Sincronizzazione NTP:",
    ntpServer: "Server:",
    timezone: "Fuso Orario:",
    httpPort1: "Porta HTTP 1:",
    httpPort2: "Porta HTTP 2:",
    rtspPort1: "Porta RTSP 1:",
    rtspPort2: "Porta RTSP 2:",
    onvifPort: "Porta ONVIF:",
    httpsService: "Servizio HTTPS:",
    httpsPort1: "Porta HTTPS 1:",
    httpsPort2: "Porta HTTPS 2:",
    httpsPrivatePass: "Password Chiave Privata HTTPS:",
    socks5Title: "SOCKS5 Proxy",
    socks5Enable: "SOCKS5 Proxy:",
    socks5Host: "Proxy Host:",
    socks5Port: "Proxy Port:",
    socks5User: "Username:",
    socks5Pass: "Password:",
    socks5AuthHint: "(Optional authentication, username and password must both be set)",
    privatePassHint: "(Lasciare vuoto se senza password)",
    uploadCert: "Carica Certificato:",
    uploadCertHint: "(Il nome file deve essere private.key o public.crt. Non caricare simultaneamente o spegnere durante il caricamento)",
    uploadBtn: "Carica Certificato",
    deleteCert: "Elimina Certificato",
    hostname: "HOSTNAME:",
    mdnsService: "Servizio mDNS:",
    mdnsAddr: "Indirizzo Accesso mDNS:",
    portRange: "[1-65500]",
    prefixRange: "[0-128]",
    emptyError: "Le impostazioni non possono essere vuote!",
    ipError: "Formato indirizzo IP non valido!",
    netmaskError: "Formato maschera di sottorete non valido!",
    gatewayError: "Formato gateway non valido!",
    dns1Error: "Formato DNS primario non valido!",
    dns2Error: "Formato DNS secondario non valido!",
    macError: "Formato indirizzo MAC non valido!",
    httpPort1Error: "La porta HTTP 1 deve essere un intero tra 1-65500!",
    httpPort2Error: "La porta HTTP 2 deve essere un intero tra 1-65500!",
    rtspPort1Error: "La porta RTSP 1 deve essere un intero tra 1-65500!",
    rtspPort2Error: "La porta RTSP 2 deve essere un intero tra 1-65500!",
    httpsPort1Error: "La porta HTTPS 1 deve essere un intero tra 1-65500!",
    httpsPort2Error: "La porta HTTPS 2 deve essere un intero tra 1-65500!",
    onvifPortError: "La porta ONVIF deve essere un intero tra 1-65500!",
    httpBothDisableError: "La porta HTTP 1 e la porta 2 non possono essere entrambe disabilitate!",
    httpsBothDisableError: "Quando HTTPS è abilitato, la porta 1 e la porta 2 non possono essere entrambe disabilitate!",
    socks5HostError: "Invalid SOCKS5 proxy host!",
    socks5PortError: "SOCKS5 proxy port must be an integer between 1-65535!",
    socks5AuthPairError: "SOCKS5 username and password must both be set or both be empty!",
    socks5AuthLengthError: "SOCKS5 username and password must not exceed 255 characters!",
    ntpEmptyError: "Il server NTP non può essere vuoto!",
    ntpFormatError: "Indirizzo server NTP non valido!",
    hostnameEmptyError: "HOSTNAME non può essere vuoto!",
    hostnameFormatError: "HOSTNAME non valido!\n\n1. HOSTNAME non deve superare 63 caratteri!\n2. Sono ammessi solo lettere (a-z), numeri (0-9), trattini (-) e trattini bassi (_)!\n3. '-' e '_' non possono apparire consecutivamente, da soli, o all'inizio/fine!",
    deleteCertConfirm: "Sei sicuro di voler eliminare il certificato HTTPS caricato?",
    selectFile: "Selezionare un file da caricare!",
    uploadSuccess: "Caricamento riuscito!",
    uploadFailed: "Caricamento fallito!",
    fileSizeError: "Dimensione file immagine superata!",
    fileResError: "Risoluzione immagine superata!",
    spaceError: "File aggiornamento troppo grande, spazio di archiviazione insufficiente!",
    deleteSuccess: "Eliminato con successo!",
    deleteFailed: "Eliminazione fallita!",
    successReboot: "Impostazioni salvate, riavviare il dispositivo!",
    failed: "Impostazioni fallite!"
  },

  // Output Settings Page (Stream Settings)
  output: {
    // Tab names
    tabs: {
      encode: "Codifica",
      ts: "TS/Multicast",
      mjpeg: "MJPEG",
      rtsp: "RTSP",
      rtmp: "RTMP",
      srt: "SRT",
      webrtc: "WebRTC",
      trtc: "TRTC",
      alirtc: "AliRTC",
      hls: "HLS",
      other: "MP4/FLV/Altro"
    },

    // Encoding settings
    encode: {
      codecType: "Tipo Codec:",
      frameRate: "Frame Rate:",
      sameAsInput: "Stesso frame rate dell'ingresso",
      auto: "Auto",
      customFrameRate: "Frame rate personalizzato",
      customFrameRateLabel: "Frame Rate Personalizzato:",
      gopInterval: "Intervallo GOP (frame):",
      bitrate: "Bitrate (kbit):",
      qualityRange: "Range Qualità:",
      qualityStrict: "Rigoroso (Alto)",
      qualityTight: "Stretto (Quasi-Alto~Alto)",
      qualityNormal: "Normale (Medio~Alto)",
      qualityLoose: "Ampio (Quasi-Basso~Alto)",
      qualityWide: "Molto Ampio (Basso~Alto)",
      mjpegQuality: "Qualità MJPEG:",
      outputResolution: "Risoluzione Uscita:",
      h264Profile: "Profilo H.264:",
      bitrateControl: "Controllo Bitrate:",
      cbrStableRange: "CBR Stability Range:",
      cbrStableMin: "min",
      cbrStableMax: "max",
      bFramesMode: "B-Frame Mode:",
      bFramesDisable: "Disabled",
      bFramesIbp: "IBP",
      bFramesIbbp: "IBBP",
      // Tips
      tipCodec: "H.265 fornisce una qualità video migliore rispetto a H.264. Usare H.265 se il decoder lo supporta.",
      tipVbr: "In modalità VBR, il bitrate è regolato dal \"Range Qualità\"; il Range Qualità limita i valori QP;<br>Selezionando \"Quasi-Alto~Alto\" o \"Alto\" si ottiene un bitrate effettivo molto elevato, rendendo il bitrate impostato insignificante;<br>Solo quando il Range Qualità è \"Quasi-Basso~Alto\" il bitrate ha valore di riferimento;",
      tipCbr: "\"CBR Forte\" è usato per sistemi CATV per garantire un bitrate TS stabile. Con \"CBR Forte\" a 1080P, il bitrate non dovrebbe essere inferiore a 5000kbit/s, 8000kbit/s raccomandato.",
      tipGop: "Assumendo che il frame rate video in ingresso sia n, valori comuni sono 60, 50, 30, 25;<br>L'intervallo GOP è tipicamente impostato a n * 2, valori comuni sono 120, 100, 60, 50;<br>Quando il frame rate è impostato su Auto, se n > 30, il frame rate di codifica è n / 2, altrimenti è uguale a n"
    },

    // TS/Multicast settings
    ts: {
      tsUri: "URL Stream TS:",
      multicastIp: "IP Multicast:",
      multicastPort: "Porta Multicast:",
      sapName: "Nome SAP:",
      tsVideoPid: "PID Video TS:",
      tsAudioPid: "PID Audio TS:",
      tsTransportStreamId: "ID Transport Stream TS:",
      tsOriginalNetworkId: "ID Rete Originale TS:",
      tsPmtStartPid: "PID Iniziale PMT TS:",
      tsStartPid: "PID Iniziale TS:",
      tsTablesVersion: "Versione Tabelle TS:",
      tsServiceId: "ID Servizio TS:",
      tsServiceName: "Nome Servizio TS:",
      tsProviderName: "Nome Provider TS:",
      tsPcrPeriod: "Periodo PCR TS (ms):",
      conformSystemB: "Conforme a Sistema B (DVB):",
      tsNullPacket: "Pacchetti Nulli TS:",
      noInsert: "Non inserire",
      insert12: "Inserisci (1.2x)",
      insert13: "Inserisci (1.3x)",
      insert15: "Inserisci (1.5x)",
      insert20: "Inserisci (2x)",
      insert25: "Inserisci (2.5x)",
      tsTdt: "TDT TS:",
      // Tips
      tipMulticast: "L'indirizzo multicast può anche accettare indirizzi broadcast o unicast, il sistema rileverà automaticamente.",
      tipVlc: "Se VLC non può riprodurre multicast, verificare se il computer ha più schede di rete, provare a passare a un'altra scheda.",
      tipSap: "Il nome SAP può essere visualizzato sui dispositivi supportati, come la playlist di VLC -> Rete Locale.",
      tipAdvanced: "Le impostazioni avanzate TS generalmente non necessitano di regolazione.",
      tipIptv: "Quando ci si connette a sistemi IPTV, i pacchetti nulli TS dovrebbero essere regolati a 1.3x, il dispositivo inserirà automaticamente pacchetti nulli per garantire un bitrate stabile;<br>Questa impostazione si applica solo alla modalità \"CBR Forte\"."
    },

    // MJPEG settings

    mjpeg: {

      jpgUri: "JPG Image URL:",

      mjpgUri: "MJPG Stream URL:",

      // Tips

      tipJpg: "JPG is a still image; MJPG is a motion image.",

      tipMjpg: "Both can be opened directly in a browser."

    },


    // RTSP settings
    rtsp: {
      rtspUri: "URL Stream RTSP:",
      enableMulticast: "Abilita (Multicast)",
      enableTcpOnly: "Abilita (Solo TCP)",
      multicastIp: "IP Multicast RTSP:",
      multicastPort: "Porta Multicast RTSP:",
      // Tips
      tipEnable: "Se Abilita è selezionato, il trasporto effettivo (UDP o TCP) è determinato dal client. Per esempio, in VLC puoi selezionare \"RTP over RTSP(TCP)\" per usare TCP.",
      tipTcpOnly: "Selezionando Abilita (Solo TCP) si forza il dispositivo a usare TCP.",
      tipUdp: "UDP potrebbe occasionalmente perdere pacchetti a causa di problemi di rete. Se tutti i client lo supportano, TCP è raccomandato.",
      tipMulticast: "Selezionando Abilita (Multicast) verranno usate 4 porte consecutive a partire dalla \"Porta Multicast RTSP\"."
    },

    // RTMP settings
    rtmp: {
      rtmpUri: "URL Stream RTMP:",
      publishUri0: "URL Pubblicazione RTMP(S)/RTSP 0:",
      publishUri1: "URL Pubblicazione RTMP(S)/RTSP 1:",
      publishUri2: "URL Pubblicazione RTMP(S)/RTSP 2:",
      mode: "Modalità streaming RTMP:",
      modeStandard: "Standard (Enhanced RTMP)",
      modeLegacy: "Legacy (CodecID 12)",
      // Tips
      tipPublish: "Gli URL di pubblicazione 0-2 sono per inviare stream ad altri server RTMP/RTSP LAN o pubblici, supportando H.265/H.264.",
      tipBuiltin: "Questo dispositivo ha un server RTMP integrato che supporta la ricezione H.264/H.265;<br>Se l'URL del flusso RTMP è impostato su \"/live/0\", PotPlayer può riprodurre tramite http://IP-dispositivo/live/0.",
      tipMode: "La modalità streaming RTMP si applica solo a H.265 e influisce anche sul flusso FLV;"
    },

    // SRT settings
    srt: {
      listenerUri: "URL Listener SRT:",
      callerUri: "URL Caller SRT:",
      // Tips
      tipListener: "La modalità SRT Listener ascolta su una porta locale per i player che vogliono ricevere lo stream.<br>Per esempio, imposta srt://0.0.0.0:9000;<br>VLC può quindi riprodurre \"srt://IP-dispositivo:9000\".<br>Aggiungere streamid esempio:<br>srt://0.0.0.0:9000?streamid=channel100<br>Aggiungere password esempio (minimo 10 caratteri):<br>srt://0.0.0.0:9000?passphrase=0123456789<br>Aggiungere streamid e password:<br>srt://0.0.0.0:9000?streamid=channel100&passphrase=0123456789",
      tipCaller: "La modalità SRT Caller invia lo stream a un altro server, es.:<br>srt://live.example.com:9000?streamid=channel100&latency=120&maxbw=8000000",
      tipParams: "Parametri SRT supportati (vedere protocollo SRT per dettagli):<br>streamid - identificatore stream per multiplexing<br>passphrase - password crittografia, SRT richiede 10-79 caratteri<br>pbkeylen - lunghezza chiave: 16 (AES-128), 24 (AES-192), 32 (AES-256)<br>latency - latenza in ms (20-8000ms)<br>maxbw - larghezza banda max in byte/sec<br>rcvbuf - dimensione buffer ricezione<br>sndbuf - dimensione buffer invio<br>ipttl - valore IP TTL<br>conntimeo - timeout connessione in ms"
    },

    // WebRTC settings
    webrtc: {
      preview: "Anteprima WebRTC:",
      whipServer: "Server WHIP:",
      whipToken: "Token Bearer WHIP:",
      p2pServer: "Server P2P:",
      p2pUuid: "UUID P2P:",
      p2pToken: "Token Auth P2P:",
      p2pAuthToken: "Token Auth P2P:",
      regenerate: "Rigenera",
      // Tips
      tipPreview: "L'anteprima WebRTC nei browser principali supporta video H.264 e codifica audio Opus/G.711.<br>Impostare l'audio su Opus fornisce risultati migliori. Se non impostato su Opus, predefinito G.711 8K.",
      tipWhip: "Lo streaming WHIP si connette a server WHIP standard. Copiare l'indirizzo dal server.<br>Il token Bearer può essere vuoto.",
      tipP2p: "Dopo aver abilitato il server P2P, l'URL di visualizzazione è mostrato nella pagina di stato.<br>Il token auth P2P può essere vuoto.",
      tipP2pNote: "P2P potrebbe non connettersi in ambienti intranet complessi."
    },

    // TRTC settings
    trtc: {
      roomId: "ID Stanza TRTC:",
      userId: "Nome Utente TRTC:",
      roomKey: "Chiave Stanza TRTC:",
      userSig: "UserSig TRTC:",
      sdkAppId: "SDKAppID TRTC:",
      roomIdType: "Tipo ID Stanza TRTC:",
      roomIdNumber: "Numero",
      roomIdString: "Stringa",
      // Short enum labels for template use
      number: "Numero",
      string: "Stringa",
      // Tips
      tipTrtc: "Invia stream al server Tencent TRTC. Copiare l'indirizzo dal server.<br>Tencent TRTC attualmente supporta solo H.264."
    },

    alirtc: {
      roomId: "ID Stanza AliRTC:",
      userId: "ID Utente AliRTC:",
      userName: "Nome Utente AliRTC:",
      region: "Regione AliRTC:",
      token: "AliRTC Token:",
      tipAliRtcToken: "Invia stream ad Alibaba Cloud RTC con supporto H.265/H.264.<br>Puoi inserire direttamente il token fornito dal servizio oppure fare clic su AliRTC Token per generare un token con AppID/AppKey nella pagina separata.<br>Se il token è vuoto, all'avvio il dispositivo proverà a generarlo automaticamente usando AppID/AppKey salvati nella pagina separata.<br>Se cambiano ID stanza, ID utente o nome utente, potrebbe essere necessario rigenerare il token."
    },

    alirtcTokenPage: {
      title: "AliRTC Token",
      roomId: "ID Stanza AliRTC:",
      userId: "ID Utente AliRTC:",
      userName: "Nome Utente AliRTC:",
      appId: "AliRTC AppID:",
      appKey: "AliRTC AppKey:",
      token: "AliRTC Token:",
      generate: "Genera e salva token",
      appFieldsRequired: "AliRTC AppID e AppKey sono obbligatori.",
      identityRequired: "ID stanza, ID utente e nome utente AliRTC sono obbligatori nelle impostazioni di output del flusso corrente.",
      generateSuccess: "Il token AliRTC è stato generato e salvato.",
      generateFailed: "Generazione del token AliRTC non riuscita.",
      unavailable: "AliRTC non è disponibile su questo dispositivo."
    },

    // HLS settings
    hls: {
      hlsTsUri: "URL Stream HLS TS:",
      hlsMp4Uri: "URL Stream HLS MP4:",
      hlsPushUri: "URL PUSH HLS:",
      hlsPushUrl: "URL PUSH HLS:",
      // Tips
      tipHls: "Quando HLS TS/MP4 è abilitato, il dispositivo memorizza i dati in memoria in base al tempo e al numero di segmenti nelle impostazioni avanzate.<br>Impostando sia tempo segmento che numero a 3 si riduce l'utilizzo memoria.",
      tipPush: "L'URL di pubblicazione HLS è per inviare a server come YouTube."
    },

    // MP4/FLV/Other settings
    other: {
      mp4Uri: "URL Stream MP4:",
      flvUri: "URL Stream FLV:",
      icecastUri: "URL PUSH ICECAST:",
      icecastPushUrl: "URL PUSH ICECAST:",
      shoutcastUri: "URL PUSH Shoutcast:",
      shoutcastPushUrl: "URL PUSH Shoutcast:",
      // Tips
      tipMp4: "Quando lo stream MP4 è abilitato, può essere riprodotto direttamente nel browser.<br>Lo stream FLV supporta H.265/H.264 su questo dispositivo, ma VLC e altri player attualmente supportano solo H.264.<br>ICECAST/Shoutcast supporta solo MP3, per inviare a server audio.",
      tipShoutcast: "Shoutcast supporta v1 e v2;<br>Esempi:<br>http://password@shoutcast_server:8000<br>http://password@shoutcast_server:8000?sid=100<br>http://password@shoutcast_server:8000?icy-name=Stream&icy-genre=Pop<br>Formato:<br>http://password@IP-server:porta-ascolto[?params...]; il nome utente può essere omesso (predefinito \"source\").<br>Usare la \"porta di ascolto\" del server, il dispositivo si connetterà automaticamente alla porta sorgente (porta ascolto + 1).<br>Parametri supportati:<br>sid: ID stream Shoutcast v2 (predefinito 1)<br>icy-name: nome stream (opzionale)<br>icy-genre: genere (opzionale)<br>icy-url: URL sito web (opzionale)<br>icy-pub: pubblico 0/1 (opzionale)"
    },

    // Common
    common: {
      save: "Salva",
      disabled: "Disabilitato",
      enabled: "Abilitato"
    },

    // Error and success messages
    messages: {
      success: "Impostazioni salvate!",
      failed: "Impostazioni fallite!",
      emptyError: "Le impostazioni non possono essere vuote!",
      trtcH264Only: "Quando TRTC è abilitato, è supportata solo la codifica H.264. Cambiato automaticamente.",
      mp3Required: "Impostare la codifica audio su MP3!",
      subStreamDisabled: "Sub-stream settings are disabled.",
      // Encoding validation
      frameRateError: "Il frame rate deve essere un intero tra 5-60!",
      gopError: "L'intervallo GOP deve essere un intero tra 5-300!",
      mjpegQualityError: "La qualità MJPEG deve essere un intero tra 10-99!",
      hlsBitrateWarning: "Bitrate non nel range 32~8000, stream HLS TS/MP4/PUSH disabilitati.",
      trtcCodecWarning: "Il codec non è H.264, TRTC disabilitato.",
      alirtcFieldsRequired: "Quando AliRTC è abilitato, AppID, AppKey, ID stanza, ID utente e nome utente sono obbligatori.",
      alirtcIdentityRequired: "Quando AliRTC è abilitato, ID stanza, ID utente e nome utente non possono essere vuoti.",
      hlsBitrateError: "Bitrate non nel range 32~8000, impossibile abilitare stream HLS TS/MP4/PUSH",
      // SRT validation
      srtListenerPortError: "La porta SRT Listener deve essere un intero tra 1-65535!",
      srtListenerFormatError: "Formato URL SRT Listener non valido!",
      srtCallerFormatError: "Formato URL SRT Caller non valido!",
      srtPasswordLengthError: "La lunghezza password SRT deve essere tra 10-32!",
      srtLatencyError: "La latenza SRT deve essere un intero tra 1-10000!",
      srtBandwidthError: "La larghezza banda SRT deve essere un intero tra 0-102400!",
      // RTMP validation
      rtmpFormatError: "L'URL di pubblicazione deve iniziare con rtmp://, rtmps://, rtsp:// o rtmpt://",
      // HLS validation
      hlsFormatError: "Formato URL pubblicazione HLS non valido!",
      // RTSP validation
      rtspMulticastIpError: "Formato IP multicast RTSP non valido!",
      rtspMulticastPortError: "La porta multicast RTSP deve essere un intero tra 1-65535!",
      // TS validation
      multicastIpError: "Formato IP multicast non valido!",
      multicastPortError: "La porta multicast deve essere un intero tra 1-65535!",
      tsTransportIdError: "L'ID Transport Stream TS deve essere un intero tra 1-65535!",
      tsNetworkIdError: "L'ID Rete Originale TS deve essere un intero tra 1-65535!",
      tsPmtPidError: "Il PID Iniziale PMT TS deve essere un intero tra 16-7936!",
      tsStartPidError: "Il PID Iniziale TS deve essere un intero tra 32-3840!",
      tsPidConflict: "Il PID Iniziale TS e il PID Iniziale PMT TS devono essere diversi!",
      tsVersionError: "La versione Tabelle TS deve essere un intero tra 0-31!",
      tsServiceIdError: "L'ID Servizio TS deve essere un intero tra 1-65535!",
      tsVideoPidError: "Il PID Video TS deve essere un intero tra 16-8190!",
      tsAudioPidError: "Il PID Audio TS deve essere un intero tra 16-8190!",
      tsVideoPidConflict: "Il PID Video TS e il PID Audio TS devono essere diversi!",
      tsAudioPmtConflict: "Il PID Audio TS e il PID Iniziale PMT TS devono essere diversi!",
      tsVideoPmtConflict: "Il PID Video TS e il PID Iniziale PMT TS devono essere diversi!",
      // Other validation
      icecastFormatError: "Formato URL pubblicazione Icecast non valido!",
      shoutcastFormatError: "Formato URL pubblicazione Shoutcast non valido!"
    }
  }
};
