cards/apps/web/src/lib/i18n/it.ts
Till JS 3669a86599 feat(web): audio-front Upload-Widget + typing Aliases-Feld + Edit-Fixes
audio-front:
- AudioUploadField.svelte: Datei-Upload statt rohem media_ref-Textfeld;
  ruft uploadMedia() auf, zeigt Dateiname nach Upload + Replace-Button
- Karten-Erstellungsseite: AudioUploadField ersetzt das unbrauchbare Textfeld
- Edit-Seite: audio-front wird jetzt korrekt geladen (audio_ref + back statt
  dem falschen basic-else-Zweig) und gespeichert

typing:
- Aliases-Feld in Erstellungs- und Edit-Seite; kommagetrennte Alternativ-
  antworten werden in fields.aliases gespeichert und von checkTypingAnswer
  ausgewertet
- Edit-Seite: typing wird jetzt korrekt geladen (front + answer + aliases)

i18n: alle 5 Sprachen mit audio_upload_btn/uploading/failed/replace,
typing_aliases_label/hint

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 18:36:28 +02:00

330 lines
13 KiB
TypeScript

import type { TranslationNode } from './de.ts';
export const it: TranslationNode = {
app: {
name: 'Cards',
title_suffix: 'Cards',
},
nav: {
decks: 'Mazzi',
study: 'Studio',
explore: 'Libreria',
import: 'Importa',
stats: 'Statistiche',
login_dev: 'Accesso (dev)',
account: 'Account',
},
landing: {
welcome: 'Flashcard con ripetizione spaziata.',
intro:
"Cardecky è l'app di flashcard federata di mana e.V. — pianificatore FSRS, carte cloze, importazione Anki.",
cta_login: 'Accesso (dev)',
dev_user_prompt: 'ID utente (dev):',
},
decks: {
title: 'Mazzi',
new: 'Nuovo mazzo',
empty: 'Nessun mazzo.',
empty_cta: 'Crea il primo mazzo',
loading: 'Caricamento…',
error: 'Errore: {msg}',
card_count: '{n} carte',
card_count_one: '1 carta',
card_count_more: '{n} altre carte nel mazzo',
card_count_more_one: '1 altra carta nel mazzo',
due_count: '{n} da ripassare',
delete_confirm:
'Eliminare il mazzo "{name}"? Tutte le carte e i dati di ripasso andranno persi.',
deleted: 'Mazzo "{name}" eliminato',
delete_failed: 'Eliminazione non riuscita: {msg}',
},
deck_detail: {
back: '← Torna ai mazzi',
study_button: 'Studia',
new_card: 'Nuova carta',
empty: 'Nessuna carta in questo mazzo.',
empty_cta: 'Crea la prima carta →',
card_summary_due: '{cards} · {due} da ripassare',
card_delete_aria: 'Elimina carta',
card_delete_label: 'Elimina',
card_delete_confirm: 'Eliminare la carta? I ripassi verranno eliminati insieme ad essa.',
fan_aria: 'Carte aperte a ventaglio dal mazzo "{name}"',
card_open: 'Apri carta — {type}',
export_csv: 'CSV',
print_cards: 'Stampa',
},
deck_stack: {
aria_label: 'Mazzo "{name}" — {cards} carte, {due} da ripassare',
},
deck_edit: {
title: 'Modifica mazzo',
back: '← Torna al mazzo',
name_label: 'Nome',
description_label: 'Descrizione (opzionale)',
color_label: 'Colore',
save: 'Salva',
saving: 'Salvataggio…',
cancel: 'Annulla',
save_failed: 'Salvataggio non riuscito: {msg}',
saved: 'Mazzo salvato',
},
deck_new: {
title: 'Nuovo mazzo',
name_label: 'Nome',
description_label: 'Descrizione (opzionale)',
color_label: 'Colore (opzionale)',
create: 'Crea mazzo',
creating: 'Creazione…',
cancel: 'Annulla',
create_failed: 'Creazione non riuscita: {msg}',
},
card_new: {
title: 'Nuova carta',
back: '← Indietro',
deck_label: 'Mazzo',
type_label: 'Tipo',
type_basic: 'Base (fronte → retro)',
type_basic_reverse: 'Base + Inverso (fronte ↔ retro, 2 ripassi)',
type_cloze: 'Cloze (completamento, 1 ripasso per gruppo)',
front_label: 'Fronte (Markdown)',
back_label: 'Retro (Markdown)',
back_placeholder: 'Risposta',
front_placeholder: '# Markdown è supportato\n**grassetto**, _corsivo_, `codice`',
preview_label: 'Anteprima',
cloze_text_label: 'Testo con spazi (Markdown)',
cloze_text_placeholder: 'La capitale di {{c1::Francia}} è {{c2::Parigi}}.',
cloze_help: "{{c1::Risposta}} definisce uno spazio. Ogni ID gruppo (c1, c2, …) crea il proprio ripasso. Suggerimento opzionale: {{c1::Risposta::Suggerimento}} — il suggerimento sostituisce «…» nella domanda.",
cloze_no_clusters: 'È richiesto almeno un gruppo {{cN::…}}.',
cloze_clusters_detected: '{n} gruppi rilevati: c{ids} → {n} ripassi.',
cloze_preview_label: 'Anteprima (c{first} mascherato)',
cloze_extra_label: 'Extra (opzionale)',
cloze_extra_placeholder: 'Contesto aggiuntivo, mostrato sotto la risposta.',
create: 'Crea carta',
creating: 'Salvataggio…',
cancel: 'Annulla',
create_failed: 'Creazione non riuscita: {msg}',
toast_basic: 'Carta creata',
toast_basic_reverse: '2 ripassi inizializzati (fronte→retro, retro→fronte)',
toast_cloze: '{n} ripassi inizializzati (1 per gruppo)',
toast_image_occlusion: '{n} ripassi inizializzati (1 per maschera)',
type_image_occlusion: "Occlusione immagine (immagine + N maschere)",
type_typing: 'Digitazione (testo libero, corrispondenza approssimativa)',
type_multiple_choice: 'Scelta multipla (4 opzioni, distrattori IA)',
type_audio_front: 'Audio fronte (ascolta e rispondi)',
answer_label: 'Risposta (Markdown)',
answer_placeholder: 'Risposta corretta',
distractor_pool_label: 'Pool distrattori (opzionale)',
distractor_pool_placeholder: 'Un elemento per riga — usato se il mazzo è troppo piccolo per i distrattori IA',
audio_ref_label: 'Riferimento audio (media_ref)',
audio_ref_placeholder: 'es. abc123.mp3',
audio_upload_btn: '🎵 Carica file audio',
audio_uploading: 'Caricamento…',
audio_upload_failed: 'Caricamento fallito: {msg}',
audio_replace: 'Sostituisci',
typing_aliases_label: 'Alias (facoltativo)',
typing_aliases_hint: 'Risposte alternative separate da virgola — es. Parigi, Parigi (Francia)',
back_audio_label: 'Testo risposta (Markdown)',
toast_typing: 'Carta di digitazione creata',
toast_multiple_choice: 'Carta a scelta multipla creata',
toast_audio_front: 'Carta audio fronte creata',
decks_load_failed: 'Impossibile caricare i mazzi: {msg}',
},
card_edit: {
title: 'Modifica carta',
back: '← Torna al mazzo',
type_locked_help: 'Il tipo di carta non può essere modificato — la tabella dei ripassi dipende da esso.',
save: 'Salva',
saving: 'Salvataggio…',
cancel: 'Annulla',
delete: 'Elimina',
deleting: 'Eliminazione…',
delete_confirm: 'Eliminare la carta? I ripassi verranno eliminati insieme ad essa.',
updated: 'Carta aggiornata',
save_failed: 'Salvataggio non riuscito: {msg}',
delete_failed: 'Eliminazione non riuscita: {msg}',
deleted: 'Carta eliminata',
},
study: {
title: 'Studio',
empty: 'Nessun mazzo.',
none_due: 'Niente da ripassare al momento.',
study_now: 'Studia ora',
due_count: '{n} da ripassare',
},
study_session: {
back: '← Panoramica',
all_done: 'Ottimo! Tutte le carte in scadenza sono state ripassate.',
stats: 'Ripassi: {reviewed} · Da rivedere: {again}',
reveal: 'Mostra risposta',
reveal_hint: 'Spazio / Invio per rivelare',
grade_again: 'Di nuovo',
grade_hard: 'Difficile',
grade_good: 'Bene',
grade_easy: 'Facile',
grade_hint: '1=Di nuovo · 2=Difficile · 3=Bene · 4=Facile',
loading: 'Caricamento…',
error: 'Errore: {msg}',
manage_link: 'Gestisci carte →',
},
import: {
title: 'Importa',
intro: "Importa mazzi e carte da un file Anki (.apkg o .colpkg). La cronologia FSRS non viene importata — tutte le carte partono come «nuove».",
what_works_title: 'Cosa viene importato',
what_works_decks: 'Mazzi (la gerarchia Anki Foo::Bar diventa Foo / Bar).',
what_works_basic: 'Base + Base-Inverso: fronte/retro direttamente.',
what_works_cloze: 'Cloze: {{c1::…}} creato con sotto-indice per gruppo.',
what_works_media: 'Immagini + audio (incorporati come Markdown / tag <audio>).',
what_skipped_title: 'Cosa non viene importato',
what_skipped_media: '— (Immagini + audio vengono importati dallo Sprint 9k, vedi sopra)',
what_skipped_history: 'Cronologia di apprendimento FSRS (i ripassi Anki vengono deliberatamente azzerati).',
what_skipped_addons: 'Tipi di carte specifici dei componenti aggiuntivi (occlusione immagine, ecc.).',
anki_label: 'Importa da Anki',
dropzone: '📦 Trascina il file .apkg qui o fai clic',
dropzone_hint: 'Base, Base + Inverso, Cloze · Immagini + audio vengono importati (limite 25 MB per file).',
parsing: 'Lettura di {file}…',
preview_found: 'Trovato in',
preview_decks_one: '1 mazzo',
preview_decks: '{n} mazzi',
preview_cards_one: '1 carta',
preview_cards: '{n} carte',
preview_breakdown: '({basic} base, {basic_reverse} base-inverso, {cloze} cloze)',
preview_media: '{n} file multimediali verranno caricati',
preview_skipped: '{n} ignorato/i (tipo sconosciuto)',
preview_warnings: 'Avvisi ({n})',
cancel: 'Annulla',
import_now: 'Importa',
stage_media: 'Caricamento media · {current} / {total}',
stage_decks: 'Creazione mazzi · {current} / {total}',
stage_cards: 'Importazione carte · {current} / {total}',
stage_done: 'Completato.',
done_summary_one: '✓ {cards} carte in 1 mazzo.',
done_summary: '✓ {cards} carte in {decks} mazzi.',
done_dupes: '{n} duplicato/i ignorato/i (contenuto già presente).',
done_media: '{uploaded} media caricati, {failed} non riusciti.',
done_failures: '{n} errori',
done_more: 'Un altro file',
error_label: 'Errore: {msg}',
retry: 'Riprova',
tab_anki: 'Anki',
tab_csv: 'CSV',
tab_quizlet: 'Formato tab',
csv_label: 'Importa file CSV',
csv_dropzone: '📄 Trascina un file CSV qui o clicca',
csv_dropzone_hint:
'Formato: type,front,back — intestazione facoltativa. Supporta: basic, basic-reverse, cloze.',
csv_deck_label: 'Nome del mazzo',
csv_deck_placeholder: 'Il mio mazzo importato',
csv_done_summary: '✓ {cards} carte aggiunte a "{deck}".',
csv_format_title: 'Formato CSV',
csv_format_example:
'type,front,back\nbasic,What is 2+2?,4\nbasic-reverse,Paris,Capital of France\ncloze,"The {{c1::mitochondria}} are the powerhouse",',
csv_format_note: 'Senza colonna type, tutte le carte vengono create come basic.',
quizlet_label: 'Importa formato tabulato',
quizlet_hint:
'Funziona con Quizlet (tramite estensione), Excel, Notion, Google Sheets o qualsiasi strumento che copia righe separate da tabulazioni.',
quizlet_paste_label: 'Incolla testo (termine Tab definizione)',
quizlet_placeholder: 'Termine\tDefinizione',
quizlet_deck_label: 'Nome del mazzo',
quizlet_deck_placeholder: 'Il mio mazzo importato',
quizlet_preview: 'Anteprima',
quizlet_how_title: 'Da dove viene questo formato?',
quizlet_how_1: 'Excel / Google Sheets: seleziona due colonne, copia → incolla qui.',
quizlet_how_2: 'Tabella Notion: seleziona le colonne, copia → incolla qui.',
quizlet_how_3:
'Quizlet: l\'esportazione è a pagamento. Alternativa gratuita: installa l\'estensione "Quizlet Exporter" → esporta come CSV tabulato → incolla qui.',
},
print: {
title: 'Stampa {deck}',
loading: 'Caricamento…',
btn: 'Stampa',
back: '← Indietro',
n_cards_one: '1 carta',
n_cards: '{n} carte',
front: 'Fronte',
back_side: 'Retro',
},
inbox_banner: {
label: '📥 In arrivo',
count_one: "1 carta ricevuta da altre app",
count: "{n} carte ricevute da altre app",
cta: '— ordina →',
},
account: {
title: 'Account',
user_id_label: 'ID utente',
logout: 'Disconnetti',
edit_profile: 'Modifica profilo',
name_label: 'Nome',
name_placeholder: 'Il tuo nome',
save: 'Salva',
cancel: 'Annulla',
profile_saved: 'Profilo salvato',
phase2_hint:
"Note fase 2: l'identità è attualmente uno stub dev (sessionStorage). Con la federazione auth, passerà a un login mana-auth su auth.mana.how.",
export_title: 'Esporta dati',
export_intro:
'Scarica tutti i tuoi dati Cards in JSON — mazzi, carte, ripassi, sessioni di studio, tag, riferimenti media, import. GDPR Art. 15/20.',
export_button: 'Esporta dati',
export_loading: 'Caricamento…',
export_done: 'Esportazione scaricata: {decks} mazzi, {cards} carte, {reviews} ripassi.',
export_failed: 'Esportazione non riuscita: {msg}',
delete_title: 'Elimina account',
delete_intro:
"Elimina definitivamente tutti i tuoi dati Cards. GDPR Art. 17. Le altre app mana (Memoro, Who, …) conservano i propri dati indipendentemente — per eliminarli, fallo in ogni app o tramite la richiesta GDPR collettiva su mana-admin.",
delete_button: 'Elimina tutti i dati Cards',
delete_loading: 'Eliminazione…',
delete_confirm:
'TUTTI i tuoi dati Cards verranno eliminati definitivamente. Digita ELIMINA per confermare.',
delete_confirm_word: 'ELIMINA',
delete_done: 'Eliminato: {decks} mazzi, {imports} import.',
delete_failed: 'Eliminazione non riuscita: {msg}',
},
stats: {
title: 'Statistiche',
generated_at: 'Aggiornato al {date}',
decks: 'Mazzi',
cards: 'Carte',
reviews: 'Ripassi',
due_now: 'Da ripassare ora',
days_title: 'Giorni di studio',
streak: 'Serie: {n} giorni · ultimi 7 giorni: {total} ripassi',
streak_one: 'Serie: 1 giorno · ultimi 7 giorni: {total} ripassi',
fsrs_title: 'Stato FSRS',
fsrs_intro: 'Distribuzione dei tuoi ripassi tra gli stati FSRS.',
fsrs_new: 'Nuovo',
fsrs_learning: 'In apprendimento',
fsrs_review: 'Ripasso',
fsrs_relearning: 'Riapprendimento',
activity_title: 'Cronologia attività',
activity_desc: '{weeks} settimane · ogni cella = 1 giorno',
retention_title: 'Ritenzione',
retention_desc: 'Quota di ripassi senza ricadute.',
retention_reps: '{reps} ripassi',
retention_lapses: '{lapses} ricadute',
retention_none: 'Nessun ripasso ancora.',
forecast_title: 'Prossimi 7 giorni',
forecast_desc: 'Carte da ripassare per giorno.',
forecast_empty: 'Niente in programma.',
loading: 'Caricamento…',
error: 'Errore: {msg}',
},
common: {
empty: '(vuoto)',
skip_to_content: 'Vai al contenuto',
main_nav: 'Navigazione principale',
notifications: 'Notifiche',
language_switcher: 'Cambia lingua',
language_desc: "Scegli la lingua dell'app.",
},
image_occlusion: {
image_label: 'Scegli immagine',
uploading: "Caricamento immagine…",
not_an_image: "Il file non è un'immagine.",
canvas_aria: 'Canvas immagine — trascina per creare maschere',
draw_hint: "Disegna un rettangolo sull'immagine per creare una maschera.",
label_placeholder: 'Etichetta (opzionale)',
delete_mask: 'Elimina maschera',
no_image_selected: "Scegli prima un'immagine.",
no_masks: 'Crea almeno una maschera.',
},
};