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
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: admin / AdminPass123. 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, l’app 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; l’omaggio ha priorità sul piano."
revoke_button: Revoca omaggio (torna Free o ripristina Stripe)
revoke_confirm: "Revocare l’abbonamento 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: "%{plan} · %{interval} · %{amount}"
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, l’app usa il canale Match Live TV. %{link}."
link_channel: Collega canale (pagina società)
matches_title: Partite
sessions:
index:
title: Sessioni di streaming
table:
match: Match
status: Stato
ingest: Ingest
disconnects: Disconnessioni
link: Link
detail: Dettaglio
regia: Regia
show:
title: "Sessione %{id}"
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
ingest_node: "Nodo ingest:"
rtmp_ingest: "RTMP ingest:"
events_title: Eventi
table:
type: Tipo
when: Quando
meta: Meta
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 (l’URL 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
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 /opt/matchlivetv/infra/.env:"
not_shown_again_html: "Non verrà mostrato di nuovo. Poi: docker compose -f docker-compose.prod.yml restart rails sidekiq"
no_refresh_token_html: "Google non ha restituito un refresh token. In account Google → accesso app revoca «Match Live TV», poi ripeti da /admin/youtube/platform."
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. 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. Sotto puoi impostare titolo, testo e link diversi per Android e iOS.
action_label: Etichetta del pulsante
android_override: Solo Android (facoltativo)
ios_override: Solo iOS (facoltativo)
platform_override_hint: Lascia vuoto per usare titolo, testo e link comuni. Compila solo se questa piattaforma deve vedere un messaggio o un link diverso.
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