import { formatFileSize } from "../kit-labels";
import type { UiKitLabels } from "../kit-labels";

/**
 * The kit's words in Italian: every namespace of {@link UiKitLabels}, for
 * `<UiKitProvider labels={UI_KIT_LABELS_IT}>`.
 *
 * Self-contained on purpose — nothing but the kit's own `formatFileSize` — so it works
 * as a starting point to copy and adjust. Counts and sizes are formatted with
 * `it-IT` digits; {@link uiKitLabelsIt} takes another number locale
 * (e.g. `"de-CH"` for 1’234) without touching the words.
 */
export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
  const num = new Intl.NumberFormat(numberLocale);
  const n = (value: number) => num.format(value);
  const plural = (count: number, one: string, many: string) => (count === 1 ? one : many);

  return {
    feedbackAttachment: {
      attachmentAdd: "Allega immagine",
      attachmentCapture: "Cattura schermata",
      attachmentPaste: "…oppure incolli uno screenshot dagli appunti.",
      attachmentRemove: "Rimuovi allegato",
      attachmentList: "Allegati",
      attachmentScreenshot: "Screenshot",
      attachmentRemoveFile: (name) => `Rimuovi ${name}`,
      attachmentLimit: (max) => `Massimo ${n(max)} ${max === 1 ? "allegato" : "allegati"}: ne rimuova uno per aggiungerne un altro.`,
      attachmentUploading: "Caricamento…",
    },
    feedbackDialog: {
      title: "Invia feedback",
      category: "Categoria",
      subject: "Oggetto",
      body: "Cosa è successo?",
      bodyOptional: "Cosa è successo? (facoltativo)",
      attachment: "Screenshot",
      submitHint: "Ctrl/⌘ + Invio per inviare",
      cancel: "Annulla",
      save: "Invia",
    },
    feedbackThread: {
      thread: "Commenti",
      empty: "Ancora nessun commento",
      loading: "Caricamento dei commenti…",
      you: "Lei",
      staff: "Team",
      attachments: "Allegati",
    },
    feedbackComposer: {
      field: "Scriva un commento",
      placeholder: "Scriva un commento…",
      send: "Invia",
      sendHint: (modifier) => `${modifier} + Invio per inviare`,
      sendHintEnter: "Invio per inviare, Maiusc + Invio per andare a capo",
    },
    accountSettings: {
      profile: {
        title: "Profilo",
        email: "Email",
        role: "Ruolo",
        memberSince: "Membro dal",
        displayName: "Nome visualizzato",
        save: "Salva",
      },
      password: {
        title: "Cambia password",
        current: "Password attuale",
        next: "Nuova password",
        confirm: "Conferma la nuova password",
        submit: "Cambia password",
        tooShort: "La nuova password è troppo corta.",
        mismatch: "Le password non coincidono.",
      },
      twoFactor: {
        status: "Autenticazione a due fattori",
        enabledText: "Attiva",
        disabledText: "Non attiva",
        enable: "Configura l’autenticazione a due fattori",
        scanHint:
          "Scansioni questo codice con la Sua app di autenticazione, poi inserisca il codice che mostra.",
        codeLabel: "Codice di verifica",
        verify: "Verifica e attiva",
        disableSection: "Disattiva l’autenticazione a due fattori",
        password: "Password attuale",
        disable: "Disattiva",
        qrAlt: "Codice QR per la Sua app di autenticazione",
        secretHint: "Non riesce a scansionarlo? Inserisca invece questa chiave nell’app:",
        copySecret: "Copia chiave",
      },
      passkeys: {
        title: "Passkey",
        description: "Acceda con impronta, volto o PIN del dispositivo invece che con una password.",
        descriptionAlongside: "Acceda con impronta, volto o PIN del dispositivo. La Sua password continua a funzionare.",
        empty: "Ancora nessuna passkey",
        loading: "Caricamento delle passkey…",
        list: "Le Sue passkey",
        nameLabel: "Nome (facoltativo)",
        namePlaceholder: "ad es. Portatile, Telefono",
        add: "Aggiungi passkey",
        adding: "In attesa del dispositivo…",
        rename: "Rinomina",
        renameItem: (name) => `Rinomina ${name}`,
        renameField: (name) => `Nuovo nome per ${name}`,
        save: "Salva",
        cancel: "Annulla",
        delete: "Elimina",
        deleteItem: (name) => `Elimina ${name}`,
        deleteConfirm: (name) => `Eliminare «${name}»? Non potrà più essere usata per accedere.`,
        confirmDelete: "Elimina passkey",
        created: (date) => `Aggiunta il ${date}`,
        lastUsed: (date) => `Ultimo uso: ${date}`,
        neverUsed: "Mai usata",
      },
    },
    measuredGrid: {
      view: "Vista tabella",
      cellsView: "Celle",
      textView: "Testo",
      addRow: "Aggiungi riga",
      removeRow: (row) => `Rimuovi riga ${row}`,
      clear: "Svuota tabella",
      pasteHint: "Incolli un blocco da un foglio di calcolo in qualsiasi cella",
      cell: (column, row) => `${column}, riga ${row}`,
      rowNumber: "Riga",
      rowActions: "Azioni riga",
      keyboardHint:
        "I tasti freccia spostano tra le celle. Digiti per sostituire una cella, F2 per modificarla, Esc per annullare la modifica. Invio scende e aggiunge una riga alla fine.",
      lineError: (line) => `Impossibile leggere la riga ${line}`,
      points: (count) => (count === 1 ? "1 punto" : `${count} punti`),
      problems: (count) =>
        count === 1 ? "1 cella non è un numero" : `${count} celle non sono numeri`,
    },
    pageContents: { title: "In questa pagina" },
    common: {
      dismiss: "Chiudi",
      close: "Chiudi",
      clear: "Cancella",
      search: "Cerca",
      done: "Fine",
      cancel: "Annulla",
      save: "Salva",
      back: "Indietro",
      next: "Avanti",
      remove: "Rimuovi",
      loading: "Caricamento…",
      noResults: "Nessun risultato",
      fieldValue: (field, value) => `${field}: ${value}`,
      opensInNewTab: "si apre in una nuova scheda",
    },
    dataTable: {
      columns: "Colonne",
      selectAllRows: "Seleziona tutte le righe",
      sortHint: "Faccia clic per ordinare · Maiusc+clic per aggiungere un ordinamento",
      filter: "Filtra",
      close: "Chiudi",
      selectRow: "Seleziona riga",
      autoSize: "Adatta larghezza colonne",
      loading: "Caricamento…",
      filters: "Filtri",
      clearAll: "Cancella tutto",
      done: "Fine",
      pageSize: "Righe per pagina",
      pageSizeAll: "Tutte",
      prevPage: "Pagina precedente",
      nextPage: "Pagina successiva",
      clearFilter: "Cancella filtro",
      filterPlaceholder: "Filtra…",
      selectFilter: "Seleziona",
      selectAll: "Tutti",
      selectNone: "Nessuno",
      dateFrom: "Dal",
      dateTo: "Al",
      numberMin: "Min",
      numberMax: "Max",
      numberAbs: "Valore assoluto",
      presets: {
        today: "Oggi",
        yesterday: "Ieri",
        this_week: "Questa settimana",
        last_week: "Settimana scorsa",
        last_7_days: "Ultimi 7 giorni",
        last_30_days: "Ultimi 30 giorni",
        this_month: "Questo mese",
        last_month: "Mese scorso",
        last_3_months: "Ultimi 3 mesi",
        ytd: "Da inizio anno",
        last_year: "Anno scorso",
      },
      table: "Tabella dati",
      filterResults: (shown, total) =>
        `${n(shown)} di ${n(total)} ${plural(total, "riga", "righe")}`,
      sortedAscending: (column) => `Ordinato per ${column}, crescente`,
      sortedDescending: (column) => `Ordinato per ${column}, decrescente`,
      sortCleared: (column) => `Ordinamento per ${column} rimosso`,
      pageChanged: (page, totalPages) => `Pagina ${n(page)} di ${n(totalPages)}`,
      pageRange: (from, to, total) => `${n(from)}–${n(to)} / ${n(total)}`,
      rowCount: (total) => n(total),
      columnsCount: (visible, total) => `Colonne (${n(visible)}/${n(total)})`,
      empty: "Nessuna voce",
      actions: "Azioni",
      edit: "Modifica",
      delete: "Elimina",
      booleanTrue: "Sì",
      booleanFalse: "No",
      booleanUnset: "Non impostato",
      sortBy: "Ordina per",
      sortDefault: "Ordine predefinito",
      sortAscending: "Crescente",
      sortDescending: "Decrescente",
    },
    miniCalendar: {
      previousMonth: "Mese precedente",
      nextMonth: "Mese successivo",
      // Already formatted in the provider's locale ("lunedì 14 settembre 2026").
      day: (date) => date,
      chooseStart: "Scelga una data di inizio",
      chooseEnd: "Scelga una data di fine",
      // "Data" is feminine and the formatted day cannot agree with a participle, so the
      // date follows a label instead of being the subject.
      startSelected: (date) => `Data di inizio: ${date}. Scelga una data di fine.`,
      rangeSelected: (from, to) =>
        `Periodo selezionato: da ${from} a ${to}. Scelga una data di inizio per ricominciare.`,
    },
    monthPicker: {
      previousYear: "Anno precedente",
      nextYear: "Anno successivo",
      panel: "Scegli un mese",
      month: (monthYear) => monthYear,
      previousMonth: "Mese precedente",
      nextMonth: "Mese successivo",
      today: "Oggi",
      yearPanel: "Scegli un anno",
      earlierYears: "Anni precedenti",
      laterYears: "Anni successivi",
      thisYear: "Quest’anno",
    },
    calendarHeatmap: {
      grid: "Valori giornalieri",
      day: (date, value) => `${date}: ${value}`,
      less: "Meno",
      more: "Più",
      truncated: (count) =>
        `Vengono mostrati i giorni più recenti; ${count === 1 ? "1 giorno precedente non è mostrato" : `${n(count)} giorni precedenti non sono mostrati`}.`,
    },
    datePicker: {
      apply: "Applica",
      cancel: "Annulla",
      presets: "Intervalli rapidi",
      panel: "Scegli una data",
      rangePanel: "Scegli un intervallo di date",
      clear: "Cancella",
      previousDay: "Giorno precedente",
      nextDay: "Giorno successivo",
      today: "Oggi",
    },
    popover: {
      panel: "Finestra a comparsa",
    },
    combobox: {
      search: "Cerca",
      noResults: "Nessun risultato",
      clear: "Cancella",
      loading: "Caricamento…",
      create: (query) => `Crea «${query}»`,
      selectedCount: (count) => `${n(count)} ${plural(count, "selezionato", "selezionati")}`,
      loadError: "Impossibile caricare i risultati",
      resultCount: (count) => `${n(count)} ${plural(count, "risultato", "risultati")}`,
      minChars: (count) => `Digiti almeno ${n(count)} ${plural(count, "carattere", "caratteri")}`,
    },
    multiSelect: {
      search: "Cerca",
      selectAll: "Seleziona tutto",
      clear: "Cancella",
      all: "Tutti",
      // The bare count, as in English: the trigger has always shown just the number.
      selectedCount: (count) => n(count),
    },
    calculator: {
      open: "Apri calcolatrice",
      panel: "Calcolatrice",
      calculation: "Calcolo",
      backspace: "Cancella ultimo carattere",
      clear: "Azzera",
      equals: "Uguale",
      done: "Fine",
      plus: "Più",
      minus: "Meno",
      times: "Per",
      divide: "Diviso",
      decimal: "Separatore decimale",
    },
    currency: {
      currency: "Valuta",
      search: "Cerca valuta",
    },
    chipInput: {
      // The quoted value is a citation; the participle agrees with the implied
      // "elemento" whatever the chip says.
      added: (value) => `«${value}» aggiunto`,
      removed: (value) => `«${value}» rimosso`,
      remove: "Rimuovi",
      atLimit: (max) => `Limite di ${n(max)} ${plural(max, "elemento", "elementi")} raggiunto`,
      duplicate: (value) => `«${value}» è già nell’elenco`,
    },
    swatchPicker: {
      none: "Nessun colore",
      mixed: "Misto: gli elementi selezionati hanno colori diversi",
    },
    iconPicker: {
      none: "Nessuna icona",
      mixed: "Misto: gli elementi selezionati hanno icone diverse",
      search: "Cerca icone",
      noResults: "Nessuna icona corrispondente",
      resultCount: (count) => `${n(count)} ${plural(count, "icona", "icone")}`,
    },
    fieldSync: {
      synced: "Salvato",
      edited: "Modifiche non salvate",
      pending: "Salvataggio…",
      error: "Impossibile salvare",
      retry: "Riprova",
    },
    passwordReveal: {
      show: "Mostra password",
      hide: "Nascondi password",
    },
    dangerConfirm: {
      arm: "Elimina…",
      confirm: "Elimina",
      cancel: "Annulla",
      prompt: "Questa operazione non può essere annullata.",
      password: "Password",
      phrase: (phrase) => `Digiti «${phrase}» per confermare`,
      acknowledge: "Ho letto cosa comporta questa operazione e desidero continuare.",
    },
    tabs: {
      add: "Aggiungi scheda",
      remove: (tab) => `Rimuovi ${tab}`,
    },
    appShell: {
      collapse: "Comprimi barra laterale",
      expand: "Espandi barra laterale",
      toggleGroup: (groupLabel) => `${groupLabel}: pagine`,
    },
    topBar: {
      theme: "Cambia tema",
      palette: "Preset di aspetto",
      language: "Lingua",
      switchRole: "Cambia ruolo",
      role: (value) => `Ruolo: ${value}`,
    },
    pickerSheet: {
      close: "Chiudi",
    },
    dialogFrame: {
      close: "Chiudi",
    },
    bulkActionBar: {
      selected: (count) => `${n(count)} ${count === 1 ? "selezionato" : "selezionati"}`,
      clear: "Annulla selezione",
      cleared: "Selezione annullata",
    },
    swipeableRow: {
      actions: "Azioni della riga",
    },
    file: {
      // The kit's own `Intl` unit formatting, pinned to this locale ("3,4 MB").
      size: (bytes) => formatFileSize(bytes, numberLocale),
    },
    filePicker: {
      dropzone: "Caricamento file",
      browse: "Sfoglia",
      empty: "Trascini qui un file",
      emptyMultiple: "Trascini qui i file",
      hint: (accept) => (accept ? `Accettati: ${accept}` : "Qualsiasi tipo di file"),
      busy: "Caricamento…",
      rejectedPick: (count) =>
        count === 1 ? "Il file non è stato aggiunto" : `Nessuno dei ${count} file è stato aggiunto`,
      // "file" is invariable in Italian ("1 file", "3 file"); only the verb agrees.
      rejectedType: (name) => `Il tipo di file di «${name}» non è supportato`,
      rejectedTypeOnly: (accept) => `Solo file ${accept}`,
      rejectedSize: (name, maxSize) => `«${name}» supera ${maxSize}`,
      rejectedCount: (name, maxFiles) =>
        `«${name}» non è stato aggiunto: al massimo ${n(maxFiles)} file`,
      rejectedInvalid: (name) => `«${name}» non può essere usato qui`,
      rejectedMany: (count) =>
        count === 1 ? "1 file non è stato aggiunto" : `${n(count)} file non sono stati aggiunti`,
      selected: (count, firstName) =>
        count === 1 ? `«${firstName}» selezionato` : `${n(count)} file selezionati`,
      remove: (name) => `Rimuovi «${name}»`,
      clearAll: "Rimuovi tutti i file",
      removed: (name) => `«${name}» rimosso`,
      cleared: "Tutti i file rimossi",
    },
    wizard: {
      done: "Fine",
      cancel: "Annulla",
      back: "Indietro",
      next: "Avanti",
      skip: "Salta",
      finish: "Fine",
      submitting: "Creazione in corso…",
      steps: "Passaggi",
      step: (current, total) => `Passaggio ${n(current)} di ${n(total)}`,
      cancelTitle: "Scartare questo modulo?",
      confirmCancel: "I dati inseriti andranno persi.",
      cancelConfirmLabel: "Scarta",
      cancelDismissLabel: "Continua a modificare",
      reviewTitle: "Riepilogo",
      edit: "Modifica",
      missingRequired: "Compili tutti i campi obbligatori.",
      genericError: "Si è verificato un errore",
    },
    tour: {
      next: "Avanti",
      back: "Indietro",
      skip: "Salta",
      done: "Fine",
      awaitClickHint: "Faccia clic sull’elemento evidenziato per continuare",
      step: (current, total) => `${n(current)} / ${n(total)}`,
    },
    commandPalette: {
      clear: "Cancella ricerca",
      submit: "Cerca",
      close: "Chiudi",
      placeholder: "Cerca…",
      empty: "Nessun risultato",
      loading: "Ricerca in corso…",
      dialog: "Ricerca",
      error: "Ricerca non riuscita. Riprovi.",
    },
    globalSearch: {
      trigger: "Cerca",
      placeholder: "Cerca o vai a…",
      shortcut: (keys) => `Cerca (${keys})`,
      suggestions: "Provi",
      results: "Risultati",
    },
    sparkline: {
      rising: (first, last) => `In aumento da ${first} a ${last}`,
      falling: (first, last) => `In calo da ${first} a ${last}`,
      flat: (value) => `Stabile a ${value}`,
      single: (value) => `Un solo valore: ${value}`,
      noData: "Nessun dato",
      named: (name, summary) => `${name}: ${summary}`,
    },
    statTile: {
      increase: (amount) => `In aumento di ${amount}`,
      decrease: (amount) => `In calo di ${amount}`,
      unchanged: "Nessuna variazione",
      better: (change) => `${change} (favorevole)`,
      worse: (change) => `${change} (sfavorevole)`,
      noValue: "Nessun dato",
      loading: "Caricamento…",
    },
    signaturePad: {
      label: "Firma",
      instructions: "Firmi nel riquadro con il mouse, il dito o una penna.",
      typedFallbackHint: "Se non può disegnare, scriva invece il Suo nome.",
      empty: "Ancora nessun tratto",
      signed: "Firma tracciata",
      undo: "Annulla l’ultimo tratto",
      clear: "Cancella",
      save: "Salva firma",
      useTyped: "Scrivi il nome",
      useDrawn: "Disegna la firma",
      typedName: "Nome e cognome",
      cleared: "Firma cancellata",
      undone: "Ultimo tratto rimosso",
      viewEmpty: "Non firmato",
      viewDrawn: "Firma autografa",
      viewTyped: (name) => `Firmato con il nome digitato ${name}`,
    },
    passwordStrength: {
      // Agrees with "password" (feminine in Italian).
      tooShort: "Troppo corta",
      weak: "Debole",
      fair: "Discreta",
      good: "Buona",
      strong: "Forte",
      announcement: (level) => `Sicurezza della password: ${level}`,
      // Unformatted, as in the English default.
      ruleLength: (minLength) =>
        `Almeno ${minLength} ${plural(minLength, "carattere", "caratteri")}`,
      ruleCase: "Maiuscole e minuscole",
      ruleDigit: "Un numero",
      ruleSymbol: "Un simbolo",
      optional: (rule) => `${rule} (facoltativo)`,
      met: "Soddisfatto:",
      notMet: "Non soddisfatto:",
      tooLong: (maxBytes) =>
        `Al massimo ${maxBytes} ${plural(maxBytes, "carattere", "caratteri")} (le lettere accentate e le emoji contano più di uno).`,
    },
    seriesChart: {
      resetZoom: "Reimposta zoom",
      zoomHint:
        "Trascini per ingrandire: una selezione più o meno quadrata ingrandisce entrambi gli assi, una lunga e sottile solo il proprio. Faccia doppio clic per ripristinare.",
      empty: "Nessun dato",
      legend: "Serie",
      points: "Valori del grafico",
    },
    pieChart: {
      slices: "Settori del grafico",
      slice: (label, value, percent) => `${label}: ${value} (${percent})`,
      total: "Totale",
      empty: "Nessun dato",
      legend: "Categorie",
    },
    confirmDialog: {
      confirm: "Conferma",
      cancel: "Annulla",
      typed: (text) => `Digiti «${text}» per confermare`,
    },
    floatingPanel: {
      close: "Chiudi",
      badge: (count) => `${n(count)} ${plural(count, "nuovo", "nuovi")}`,
    },
    copyButton: {
      copy: "Copia",
      copied: "Copiato",
      failed: "Copia non riuscita",
      copiedAnnouncement: "Copiato negli appunti",
      failedAnnouncement: "Impossibile copiare negli appunti",
    },
    list: {
      unread: "Non letto",
      opensInNewTab: "si apre in una nuova scheda",
    },
    breadcrumbs: {
      label: "Percorso di navigazione",
      showAll: "Mostra percorso completo",
    },
    toast: {
      close: "Chiudi notifica",
      notifications: "Notifiche",
      undo: "Annulla",
      redo: "Ripeti",
    },
    form: {
      save: "Salva",
      cancel: "Annulla",
      submitShortcut: (apple) => (apple ? "⌘ Invio" : "Ctrl+Invio"),
    },
    descriptionList: {
      empty: "—",
    },
    lineItems: {
      add: "Aggiungi riga",
      remove: (row) => `Rimuovi riga ${row}`,
      confirmRemove: (row) => `Rimuovere la riga ${row}? Prema di nuovo per confermare`,
      row: (row) => `Riga ${row}`,
      cell: (column, row) => `${column}, riga ${row}`,
      totals: "Totale",
    },
    progressBar: {
      unlimited: "Illimitato",
      overLimit: (amount) => `${amount} oltre il limite`,
    },
    signedAmount: {
      positive: (amount) => `più ${amount}`,
      negative: (amount) => `meno ${amount}`,
    },
    errorBoundary: {
      title: "Si è verificato un errore",
      message: "Impossibile mostrare questa parte della pagina. Riprovi o ricarichi la pagina.",
      retry: "Riprova",
      details: "Dettagli dell’errore",
      reload: "Ricarica",
      updateTitle: "È disponibile una nuova versione",
      updateMessage: "Una parte dell’app è cambiata da quando questa pagina è stata caricata. Ricarichi per ottenere la nuova versione.",
      offlineTitle: "Nessuna connessione",
      offlineMessage: "Impossibile caricare questa pagina senza connessione. Si riconnetta, poi ricarichi la pagina.",
      copyReport: "Copia il rapporto di errore",
      reported: "L’errore è stato segnalato automaticamente.",
      reportedAs: (reference) => `Segnalato con riferimento ${reference}`,
    },
    authedImage: {
      loading: "Caricamento immagine…",
      loadError: "Impossibile caricare l’immagine",
      failedImage: (alt) => `${alt}: impossibile caricare l’immagine`,
    },
    imageGrid: {
      list: "Immagini",
      item: (index, count) => `Immagine ${n(index)} di ${n(count)}`,
      actions: (name) => `Azioni per ${name}`,
    },
    lightbox: {
      dialog: "Visualizzatore immagini",
      close: "Chiudi",
      previous: "Immagine precedente",
      next: "Immagine successiva",
      counter: (index, count) => `${n(index)} / ${n(count)}`,
      position: (index, count) => `Immagine ${n(index)} di ${n(count)}`,
      download: "Scarica",
      zoom: "Ingrandisci",
      noPreview: "Nessuna anteprima disponibile per questo file",
      openInNewTab: "Apri in una nuova scheda",
    },
    writeLock: {
      reason: "Può visualizzarlo, ma non modificarlo.",
    },
    accountState: {
      // Agreeing with "account" (masculine): the chip is the state of an account.
      active: "Attivo",
      inactive: "Non attivo",
      invited: "Invitato",
      registered: "Registrato",
      unverified: "Non verificato",
      passwordChange: "Deve cambiare la password",
    },
    shareCard: {
      dialogTitle: "Condividi",
      close: "Chiudi",
      email: "Indirizzo email",
      emailOptional: "Indirizzo email (facoltativo)",
      // example.com is reserved for examples (RFC 2606); a localised domain is real.
      emailPlaceholder: "nome@example.com",
      invalidEmail: "Inserisca un indirizzo email completo.",
      role: "Ruolo",
      roleOf: (name) => `Ruolo di ${name}`,
      add: "Condividi",
      whoHasAccess: "Chi ha accesso",
      nobodyYet: "Nessun altro ha ancora accesso.",
      pending: "In attesa",
      openInvite: "Link di invito aperto",
      copyLink: "Copia link",
      team: "Team",
      teamHint: (name) => `Tutti i membri di ${name} avranno accesso.`,
      remove: "Rimuovi accesso",
      removeConfirm: (name) => `Rimuovere l’accesso di ${name}?`,
      revokePending: "Ritira invito",
      revokePendingConfirm: (name) => `Ritirare l’invito per ${name}?`,
      failed: "Non ha funzionato. Riprovi.",
      loading: "Caricamento…",
    },
    reauthDialog: {
      title: "Confermi la Sua identità",
      description: "Inserisca la password attuale per continuare.",
      password: "Password attuale",
      submit: "Continua",
      cancel: "Annulla",
    },
    serverWake: {
      slow: "Caricamento in corso: ci vuole più del solito.",
      waking: (appName) =>
        `Il server va in sospensione quando nessuno usa ${appName ?? "l’app"}, quindi la prima richiesta dopo una pausa deve riavviarlo. Può volerci un momento: non si perde nulla, la pagina si completa da sola.`,
    },
    legal: {
      navLabel: "Note legali",
    },
    characterCount: {
      count: (used, max) => `${n(used)} di ${n(max)} ${plural(max, "carattere", "caratteri")}`,
      remaining: (left) =>
        left === 1 ? "Resta 1 carattere" : `Restano ${n(left)} caratteri`,
      limitReached: "Limite di caratteri raggiunto",
    },
    countrySelect: {
      country: "Paese",
      search: "Cerca paese",
      others: "Altri paesi",
    },
    inlineEdit: {
      edit: (label) => `Modifica ${label}`,
      failed: "Non è stato possibile salvare la modifica.",
      empty: "Vuoto",
    },
    ibanInput: {
      format: "Un IBAN inizia con un codice paese di due lettere e due cifre di controllo.",
      country: (code) => `«${code}» non è il codice paese di un IBAN.`,
      length: (actual, expected) =>
        `Un IBAN di questo paese ha ${n(expected)} caratteri, questo ne ha ${n(actual)}.`,
      checksum: "Le cifre di controllo non corrispondono: probabilmente un carattere è stato digitato male.",
      qrRequired: "Questo è un IBAN normale. Una QR-fattura richiede il QR-IBAN del conto.",
      qrNotAllowed:
        "Questo è un QR-IBAN, che riceve solo pagamenti con QR-fattura. Inserisca l’IBAN normale del conto.",
    },
    phoneInput: {
      countryCode: "Prefisso internazionale",
      other: "Altro",
    },
    signChip: {
      outflow: "Uscita",
      inflow: "Entrata",
      // "premere per…": an instruction without a tu imperative, as the kit's Italian is formal.
      direction: (current, next) => `Direzione: ${current} – premere per passare a ${next}`,
    },
    translationReview: {
      statusMissing: "Mancante",
      statusUnreviewed: "Non rivisto",
      statusChanged: "Modificato dopo la revisione",
      statusNeedsChange: "Da modificare",
      statusApproved: "Approvato",
      statusFilter: "Stato",
      all: "Tutti",
      filterCount: (label, count) => `${label} · ${n(count)}`,
      source: "Testi",
      allSources: "Tutti i testi",
      namespace: "Area",
      allNamespaces: "Tutte le aree",
      search: "Cerca nelle chiavi e nei testi",
      placeholdersOnly: (count) => `Solo problemi di segnaposto (${n(count)})`,
      placeholderChip: "Segnaposto",
      key: "Chiave",
      statusColumn: "Stato",
      empty: "Nessun testo corrisponde a questi filtri.",
      missingText: "Mancante in questa lingua",
      progress: (approved, total) => `${n(approved)} di ${n(total)} ${plural(approved, "approvato", "approvati")}`,
      localeProgress: (approved, total) => `${n(approved)}/${n(total)}`,
      locales: "Lingue",
      approve: "Approva",
      flag: "Da modificare",
      suggest: "Proponi una traduzione",
      reset: "Segna come non rivisto",
      cancel: "Annulla",
      approveSelected: "Approva i selezionati",
      resetSelected: "Segna i selezionati come non rivisti",
      selectShown: "Seleziona tutti quelli mostrati",
      changedSince: "Questo testo è stato modificato dopo la revisione. Lo rilegga, per favore.",
      reviewedWording: "Formulazione al momento della revisione",
      reviewedReference: "Riferimento al momento della revisione",
      placeholderMismatch: (reference, text) =>
        `I segnaposto differiscono dal riferimento — riferimento: ${reference}; questo testo: ${text}. L’app vi inserisce dei valori, quindi devono restare esattamente come sono.`,
      lastApproved: (name, date) => `Approvato da ${name} il ${date}`,
      lastFlagged: (name, date) => `Segnato da modificare da ${name} il ${date}`,
      erasedReviewer: "un account eliminato",
      suggestion: "Formulazione migliore",
      translation: "Traduzione",
      note: "Nota (facoltativa)",
      notePlaceholder: "Cosa non va, o di cosa tenere conto",
      readOnly: "Può leggere questa lingua, ma non rivederla.",
      scope: (areas) => `La Sua revisione è limitata a: ${areas}.`,
      exportCorrections: (count) => `Esporta le correzioni (${n(count)})`,
      failed: "Non ha funzionato. Riprovi.",
    },
  };
}

export const UI_KIT_LABELS_IT: UiKitLabels = uiKitLabelsIt();
