Files
MatchLiveTv/backend/config/locales/admin.it.yml
T
eminuxandCursor 8a07c5d569 Aggiunge heatmaps first-party (click/scroll) con pagina admin Analytics.
Raccoglie eventi aggregati dietro consenso cookie, senza PII né tracking su admin/regia/live/replay; GA4 resta invariato.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 22:50:15 +02:00

569 lines
22 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
it:
admin:
layout:
title: "Match Live TV — Admin"
nav:
dashboard: Dashboard
ops: Ops
announcements: Avvisi
clubs: Società e squadre
billing: Fatturazione
youtube: YouTube
sessions: Sessioni
analytics: Analytics
stream_nodes: Nodi stream
password: Password
logout: Esci
flash:
login_required: Accedi per continuare
login_success: Accesso effettuato
invalid_credentials: Username o password non validi
logout_success: Disconnesso
password_current_incorrect: Password attuale non corretta
password_too_short: La nuova password deve avere almeno 8 caratteri
password_too_long: La nuova password non può superare i 72 caratteri
password_too_weak: "La nuova password deve includere almeno 3 tra: minuscole, maiuscole, numeri e simboli"
password_same_as_current: La nuova password deve essere diversa da quella attuale
password_mismatch: Le password non coincidono
password_updated: Password aggiornata
ops_acknowledged: Incidente preso in carico
ops_resolved: Incidente risolto
ops_muted: Notifiche sospese per 24 ore
stream_node_created: "Nodo lab %{slug} provisionato."
stream_node_destroyed: "Nodo %{slug} rimosso."
stream_node_draining: "Nodo %{slug} in drain (niente nuove sessioni)."
autoscale_kill_on: "Kill-switch autoscaler attivato. Nessun scale-out automatico."
autoscale_kill_off: "Kill-switch autoscaler disattivato (serve comunque STREAM_AUTOSCALE_ENABLED=1)."
comped_granted: "Abbonamento omaggio %{plan} attivato per %{club}."
comped_revoked: "Abbonamento omaggio revocato per %{club}."
session_already_terminated: "Sessione già terminata (%{status})."
session_stopped: Sessione terminata.
session_stop_error: "Errore durante la chiusura: %{error}"
session_terminated_no_regia: "Sessione terminata: impossibile generare il link regia."
session_regia_generated: Link regia generato.
invoice_upload_hint: Carica il PDF dalla lista «Pagamenti da fatturare».
invoice_draft_created: Bozza creata. Carica il PDF dalla pagina Fatturazione o qui sotto.
invoice_issued: "Fattura %{number} emessa e inviata a %{email}."
invoice_updated: "Fattura %{number} aggiornata."
invoice_uploaded: "Fattura caricata e inviata a %{email}."
quote_saved: "Prezzo concordato salvato per %{club}: %{plan} a %{amount}."
quote_revoked: "Prezzo concordato revocato per %{club}."
transfer_confirmed: "Bonifico confermato: piano %{plan} attivo per %{club}."
transfer_cancelled: Bonifico in attesa annullato.
youtube_not_configured: Configura YOUTUBE_CLIENT_ID e YOUTUBE_CLIENT_SECRET in .env
announcement_created: Avviso salvato
announcement_updated: Avviso aggiornato
announcement_destroyed: Avviso eliminato
common:
free_plan: Free
yes: "Sì"
no: "No"
dash: "—"
live_page: Pagina live
auth:
new:
title: Accesso admin
username_label: Username
password_label: Password
submit: Accedi
initial_credentials_html: "Credenziali iniziali: <code>admin</code> / <code>AdminPass123</code>. Cambia la password dopo il primo accesso."
passwords:
edit:
title: Cambia password
current_password_label: Password attuale
new_password_label: "Nuova password (min. 8, almeno 3 tipi di caratteri)"
confirm_password_label: Conferma nuova password
submit: Salva password
cancel: Annulla
dashboard:
kpi:
active_sessions: Sessioni attive
active_sessions_sub: in diretta ora
today: Trasmesse oggi
today_sub: "%{duration} di streaming"
month: Trasmesse questo mese
month_sub: "%{duration} totali"
teams: Squadre
teams_sub: "%{count} utenti"
cpu: CPU
cpu_sub: "load %{one} / %{five} / %{fifteen}"
ram: RAM
ram_sub: "%{used} / %{total}"
network: Banda (totale)
network_sub: "↑ %{tx} · ↓ %{rx}"
recordings: Replay in archivio
recordings_sub: "%{count} registrazioni"
charts:
cpu: CPU (%)
ram: RAM (%)
ops_panel:
title: Stato piattaforma (Ops)
critical: "%{count} incidente/i critico/i aperto/i"
view_dashboard: Vedi dashboard Ops
warnings: "%{count} warning"
dashboard_link: Dashboard Ops
none_html: "Nessun incidente aperto. %{link}"
disk:
system_title: Disco sistema
free_label: "Libero: %{free} (%{percent}% usato)"
not_available: Metriche disco non disponibili
recordings_title: Archivio registrazioni
recordings_content: "Contenuto registrazioni: %{size}"
recordings_not_mounted: "Percorso %{path} non montato"
sessions:
title: Sessioni attive
table:
match: Partita
status: Stato
ingest: Ingest
start: Inizio
link: Link
none: Nessuna sessione attiva in questo momento.
detail: Dettaglio
stop: Termina
stop_confirm: Terminare questa sessione?
regia: Regia
teams:
title: Squadre
matches_count: "%{count} partite"
view_all: "Vedi società (%{count} squadre)"
stream_nodes:
title: Nodi streaming
providers: "Cloud: %{cloud} · DNS: %{dns}"
actions_title: Azioni
table_title: Nodi registrati
empty: Nessun nodo registrato.
free_slots:
one: "%{count} libero"
other: "%{count} liberi"
kpi:
autoscaler: Autoscaler
kill_switch: KILL
kind: "modalità %{kind}"
free_slots: Slot liberi
soft_slots: "soglia soft ≤ %{soft}"
spare: Spare
warm_spare: warm spare pronti
overflow: Overflow
overflow_nodes: nodi cloud/lab
budget: Budget stimato
budget_of: "su €%{budget}/mese (%{ok})"
autoscale: "Autoscaler %{enabled} · free_slots=%{free} (soft≤%{soft}) · spare=%{spare}/%{warm} · overflow=%{overflow}/%{max} · kind=%{kind}"
autoscale_budget: "budget €%{eur}/€%{budget} (%{ok})"
kill_switch_active: "KILL-SWITCH ATTIVO"
engage_kill_switch: "Kill-switch ON"
clear_kill_switch: "Kill-switch OFF"
kill_switch_confirm: "Bloccare immediatamente l'autoscaler? I nodi esistenti restano accesi."
provision_lab: Provisiona lab
provision_cloud: Provisiona Hetzner
provision_cloud_confirm: "Creare un server Hetzner Cloud + record DNS su mltv-stream.net? Verrà addebitato fino allo spegnimento."
hetzner_token_missing: "Imposta HCLOUD_TOKEN per abilitare il provisioning Cloud."
drain: Drain
destroy: Elimina
destroy_confirm: "Eliminare il nodo %{slug}?"
hosts_title: Record DNS lab (snippet /etc/hosts)
col:
slug: Slug
role: Ruolo
status: Stato
slots: Slot
hostname: Hostname
provider: Provider
ops:
kpi:
critical: Critici aperti
warning: Warning aperti
total: Totale aperti
open:
title: Incidenti aperti
table:
severity: Severità
kind: Tipo
title: Titolo
occurrences: Occ.
last_seen: Ultimo
none: Nessun incidente aperto. La piattaforma risulta sana.
actions:
acknowledge: Preso in carico
resolve: Risolvi
mute: Mute 24h
resolved:
title: Risolti (ultimi 30 giorni)
table:
resolved_at: Risolto
none: Nessun incidente risolto di recente.
clubs:
index:
title: Società e squadre
subtitle_html: "Abbonamenti omaggio (sponsor / promozioni) e stato YouTube per squadra. Pagamenti Stripe: %{billing_link}."
billing_link: Fatturazione
table:
club: Società
plan: Piano
teams: Squadre
comped: Omaggio
stripe: Stripe
quote: Concordato
manage: Gestisci
invoices: Fatture
show:
back: "← Società e squadre"
sport_label: "Sport: %{sport}"
recordings_archive: Archivio replay
billing_link: Pagamenti e fatture
youtube_platform_link: Canale YouTube piattaforma
youtube_club_label: "YouTube società:"
youtube_connected: (collegato)
youtube_premium_full_not_connected: Premium Full — canale società non collegato (usa Match Live TV)
no_channel_hint_html: "Senza canale collegato, lapp usa il canale Match Live TV. %{link}."
link_channel: Collega canale (pagina società)
teams_title: Squadre
no_teams: Nessuna squadra registrata.
table:
team: Squadra
sport: Sport
matches_and_details: Partite e dettagli
replay: Replay
comped:
title: Abbonamento omaggio
description: "Sponsor o promozione: assegna Premium Light/Full senza pagamento Stripe. Revocabile in qualsiasi momento."
active_label: "Attivo:"
since_label_html: "Dal %{date}"
by_admin: "· admin %{username}"
stripe_note: "Nota: esiste anche un abbonamento Stripe collegato; lomaggio ha priorità sul piano."
revoke_button: Revoca omaggio (torna Free o ripristina Stripe)
revoke_confirm: "Revocare labbonamento omaggio per %{club}?"
current_plan: "Piano attuale: %{plan}"
stripe_active: "· pagamento Stripe attivo"
plan_label: Piano
reason_label: "Motivo (es. sponsor 2026)"
reason_placeholder: "Sponsor, promozione…"
grant_button: Concedi omaggio
quote:
title: Prezzo concordato (bonifico)
description: "Importo commerciale per questa società: piano, cadenza e cifra in euro. In billing la società vede solo questo prezzo e può pagare solo con bonifico. L'omaggio (0 €) resta nella card sopra."
none: Nessun prezzo concordato. La società paga a listino (carta o bonifico).
active_html: "<strong>%{plan}</strong> · %{interval} · <strong>%{amount}</strong>"
note_label: "Nota:"
plan_label: Piano
interval_label: Cadenza
interval_yearly: Annuale
interval_monthly: Mensile
amount_label: "Importo (€)"
amount_placeholder: "es. 150 oppure 150,00"
commercial_note_label: Nota commerciale (opzionale)
save_button: Salva prezzo concordato
revoke_button: Revoca prezzo concordato
revoke_confirm: "Revocare il prezzo concordato per %{club}? Tornerà il listino (carta + bonifico)."
teams:
show:
back: "← %{club}"
sport_label: "Sport: %{sport}"
club_label_html: "Società: %{club} · %{replay_link} · %{billing_link}"
replay_link: Replay squadra
billing_link: Pagamenti e fatture
youtube_label: "YouTube:"
youtube_platform_default_no_oauth: ", default senza OAuth società"
youtube_platform_channel: "(canale piattaforma%{suffix})"
youtube_club_channel: (canale società)
youtube_not_ready: non pronto
no_channel_hint_html: "Senza canale collegato, lapp usa il canale Match Live TV. %{link}."
link_channel: Collega canale (pagina società)
matches_title: Partite
sessions:
index:
title: Sessioni di streaming
lead: Cerca per società, squadra, avversario o sede. Filtra per stato, piattaforma, nodo e periodo.
results: "Mostrate %{shown} di %{total}"
none: Nessuna sessione trovata con questi filtri.
filters:
q: Cerca
q_placeholder: Società, squadra, avversario…
status: Stato
platform: Piattaforma
club: Società
node: Nodo ingest
from: Da
to: A
any: Tutti
apply: Filtra
reset: Azzera
table:
club: Società
match: Match
status: Stato
started: Inizio
ended: Fine
duration: Durata
ingest: Ingest
disconnects: Disconnessioni
link: Link
detail: Dettaglio
regia: Regia
show:
title: "Sessione %{id}"
heading: Dettaglio sessione
back: "← Torna alle sessioni"
club_label: "Società:"
summary_title: Riepilogo
timing_title: Tempi
ingest_title: Ingest e media
devices_title: Dispositivi
events_title: Eventi
events_none: Nessun evento registrato.
status_label: "Stato:"
stop_button: Termina sessione
stop_confirm: "Terminare la trasmissione? Il path RTMP verrà rimosso e lo stato passerà a ended."
match_label: "Match: %{team} vs %{opponent}"
youtube_studio: YouTube Studio
broadcast: Broadcast
open_replays: Apri replay società
audio_muted: Audio muto
audio_on: Audio attivo
ingest_node: "Nodo ingest:"
rtmp_ingest: "RTMP ingest:"
fields:
id: ID
club: Società
team: Squadra
opponent: Avversario
operator: Operatore
platform: Piattaforma
privacy: Privacy
quality: Qualità
min_quality: Qualità minima
audio: Audio
created: Creata
started: Inizio
ended: Fine
duration: Durata
disconnects: Disconnessioni
scheduled: Partita programmata
location: Sede
node: Nodo
rtmp: RTMP ingest
hls: HLS
recording: Replay
devices:
role: Ruolo
network: Rete
battery: Batteria
bitrate: Bitrate
fps: FPS
last_seen: Ultimo contatto
table:
type: Tipo
when: Quando
meta: Dettagli
links:
watch_title: Link diretta
none: Nessun link video disponibile per questa sessione.
regia_title: Link regia
terminated: Sessione terminata — link regia non disponibile.
regia_label: Regia
valid_until: "Valido fino a %{date}"
active_exists: Esiste già un link regia attivo (lURL non è recuperabile). Generane uno nuovo se serve condividerlo di nuovo.
none_active: Nessun link regia attivo. Genera un link da condividere con chi gestisce il punteggio.
generate_button: Genera link regia
ingest:
none: "—"
role:
home: Home-lab
lab: Lab
cloud: Hetzner
analytics:
missing_path: Seleziona una pagina.
filters:
from: Da
to: A
device: Device
any: Tutti
apply: Filtra
reset: Azzera
index:
title: Analytics sito
lead: Heatmap e scroll aggregati (first-party), solo con consenso statistico. Nessun dato personale.
none: Nessun dato nel periodo selezionato.
heatmap: Heatmap
table:
path: Pagina
pageviews: Pageview
clicks: Click
avg_scroll: Scroll medio
max_scroll: Scroll max
show:
title: Heatmap pagina
back: "← Torna ad Analytics"
summary: Riepilogo
scroll_depth: Profondità di scroll
scroll_hint: "Media %{avg}% · massimo %{max}%"
heatmap_title: Mappa click
no_clicks: Nessun click aggregato per questa pagina nel periodo.
billing:
index:
title: Pagamenti da fatturare
description: "Pagamenti Stripe pagati senza PDF fattura. Genera il PDF nei tuoi sistemi, poi caricalo qui: viene associato al pagamento e inviato via email al cliente."
transfers_title: Bonifici in attesa
transfers_description: "La società ha chiesto di pagare con bonifico: il piano non è ancora attivo. Conferma dopo l'accredito (puoi allegare subito il PDF fattura)."
transfers_none: Nessun bonifico in attesa.
transfers_table:
club: Società
plan: Piano
amount: Importo
holder: Intestatario
iban: IBAN
causal: Causale
requested: Richiesto
confirm_button: Conferma pagamento e attiva
cancel_button: Annulla richiesta
cancel_confirm: Annullare questa richiesta di bonifico?
pdf_optional: PDF fattura (opzionale)
kind_quote: prezzo concordato
kind_list: listino
filter_label: "Filtra società:"
filter_all: Tutte
incomplete_profile_warning: Dati fatturazione incompleti
no_billing_data: Nessun dato di fatturazione — il cliente deve completare il profilo.
pdf_label: PDF fattura
upload_button: Carica PDF e invia al cliente
none_pending: "Nessun pagamento in attesa di fattura%{club}."
none_pending_for_club: " per %{club}"
uploaded_title: Fatture già caricate
table:
date: Data
club: Società
description: Descrizione
amount: Importo
invoice: Fattura
status: Stato
back_dashboard: "← Dashboard"
billing_invoices:
index:
title: "Fatturazione — %{club}"
back_dashboard: "← Dashboard"
new_invoice: Nuova fattura (senza pagamento)
payments_title: Pagamenti
table:
date: Data
description: Descrizione
amount: Importo
invoice: Fattura
pdf_suffix: " (PDF)"
edit_send_pdf: Modifica / invia PDF
create_invoice: Crea fattura
no_payments: Nessun pagamento registrato per questa società.
all_invoices_title: Tutte le fatture
table2:
number: Numero
date: Data
amount: Importo
status: Stato
payment: Pagamento
edit: Modifica
no_invoices: Nessuna fattura.
new:
title: "Nuova fattura — %{club}"
linked_payment: "Collegata al pagamento del %{date} (%{amount})."
number_label: Numero fattura
issued_on_label: Data emissione
amount_label: "Importo (€)"
notes_label: Note interne (opzionale)
hint: Salva la bozza, poi carica il PDF e inviala al cliente dalla schermata successiva.
submit: Crea bozza fattura
back: "← Pagamenti e fatture"
edit:
title: "Fattura %{number} — %{club}"
status_label: "Stato:"
sent_at: "· Inviata il %{date}"
number_label: Numero fattura
issued_on_label: Data emissione
amount_label: "Importo (€)"
payment_info: "Pagamento: %{description} — %{amount}"
pdf_label: PDF fattura
pdf_already: "PDF già caricato: %{filename}"
notes_label: Note interne
save_draft: Salva bozza
issue_send: Emetti e invia via email
issue_confirm: "Inviare la fattura a %{email}?"
back: "← Pagamenti e fatture"
youtube:
platform_token:
title: Token canale Match Live TV
page_title: "Token YouTube — Match Live TV"
channel_label: "Canale: %{title}"
success: "Collegamento riuscito. Copia subito questa riga:"
env_hint_html: "Aggiungi in <code>/opt/matchlivetv/infra/.env</code>:"
not_shown_again_html: "Non verrà mostrato di nuovo. Poi: <code>docker compose -f docker-compose.prod.yml restart rails sidekiq</code>"
no_refresh_token_html: "Google non ha restituito un refresh token. In <a href=\"https://myaccount.google.com/permissions\" target=\"_blank\" rel=\"noopener\">account Google → accesso app</a> revoca «Match Live TV», poi ripeti da <a href=\"/admin/youtube/platform\">/admin/youtube/platform</a>."
back_dashboard: "← Dashboard admin"
club_recordings:
index:
title: "Replay — %{club}"
announcements:
index:
title: Avvisi
lead: Messaggi verso le app, il sito pubblico e l'area riservata — manutenzione, aggiornamenti o comunicazioni.
new: Nuovo avviso
table_title: Avvisi
none: Nessun avviso. Crea il primo per notificare app e sito.
new:
title: Nuovo avviso
edit:
title: Modifica avviso
table:
status: Stato
kind: Tipo
title: Messaggio
channels: Destinazioni
window: Finestra
actions:
edit: Modifica
delete: Elimina
delete_confirm: Eliminare questo avviso? Non sarà più visibile nelle destinazioni scelte.
kind:
info: Informazione
maintenance: Manutenzione
update: Aggiornamento app
severity:
info: Info
warning: Attenzione
critical: Critico
status:
draft: Bozza
published: Pubblicato
archived: Archiviato
channels:
android: App Android
ios: App iOS
web_public: Sito pubblico
web_private: Area riservata
window:
always: Sempre (finché pubblicato)
from: "Da %{time}"
until: "Fino a %{time}"
form:
kind: Tipo
severity: Gravità
status: Stato
channels: Dove mostrarlo
channels_hint: "Puoi selezionare una o più destinazioni. Android e iOS sono indipendenti: se il testo deve essere diverso, crea due avvisi. L'area riservata è visibile dopo il login (società, squadre, account)."
title: Titolo
body: Testo
starts_at: Inizio visibilità
ends_at: Fine visibilità
window_hint: Lascia vuoto per mostrare subito e finché resta pubblicato.
action_url: Link (facoltativo)
action_url_hint: Per gli aggiornamenti, se vuoto l'app apre lo store della piattaforma (Play Store su Android, App Store su iOS).
action_label: Etichetta del pulsante
locales_legend: Testo per lingua
locales_hint: Compila tutte le lingue dell'app (italiano, inglese, francese, tedesco, spagnolo). L'italiano è obbligatorio; se una lingua manca, l'app usa inglese e poi italiano.
locale_required: obbligatorio
dismissible: L'utente può chiudere l'avviso
dismissible_hint: Togli la spunta per avvisi di manutenzione che devono restare visibili.
submit_create: Salva avviso
submit_update: Aggiorna avviso
cancel: Annulla