Files
eminuxandCursor cc95fcacbf Permette all’admin di forzare anagrafica, fiscali, owner, staff e inviti.
Ops può correggere dati clienti errati (es. email titolare) dalla scheda società senza interventi manuali sul DB.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 18:18:18 +02:00

772 lines
31 KiB
YAML
Raw Permalink 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
stream_concurrency: Abusi account
analytics: Analytics
costs: Costi
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.
club_updated: "Dati aggiornati per %{club}."
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
cost_entry_created: Voce di costo registrata.
cost_entry_updated: Voce di costo aggiornata.
cost_entry_destroyed: Voce di costo eliminata.
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}"
concurrency_panel:
title: Abusi account (seconda diretta)
count: "%{count} tentativo/i negli ultimi 30 giorni"
view_all: Vedi tutti
none: Nessun tentativo registrato.
none_html: "Nessun tentativo di seconda diretta dallo stesso account. %{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
client: Client
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.
stream_concurrency:
index:
title: Abusi account
lead: Tentativi di avviare una seconda diretta con lo stesso account mentre unaltra era già in corso (connecting, live, reconnecting o in pausa).
results: "Mostrate %{shown} di %{total}"
none: Nessun tentativo registrato.
kpi:
lookback: Ultimi 30 giorni
lookback_sub: tentativi bloccati
two_devices: Due dispositivi
two_devices_sub: modelli telefono diversi
filters:
q: Cerca
q_placeholder: Email, società, partita…
two_devices: Filtro
two_devices_hint: Solo tentativi da dispositivi diversi
apply: Filtra
reset: Reset
table:
when: Quando
account: Account
club: Società
occupying: Diretta già in corso
attempted: Tentativo bloccato
action:
start: avvio
resume: ripresa
badge:
two_devices: 2 telefoni
same_or_unknown: stesso device / n.d.
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
billing_profile: Dati fiscali
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à)
profile_title: Anagrafica e dati fiscali
owner_title: Titolare account
owner_name: Nome
owner_email: Email
owner_none: Nessun titolare associato.
billing_title: Dati di fatturazione
billing_none: Nessun dato di fatturazione compilato.
teams_title: Squadre
no_teams: Nessuna squadra registrata.
table:
team: Squadra
sport: Sport
matches_and_details: Partite e dettagli
replay: Replay
concurrency_title: Tentativi di seconda diretta
concurrency_lead: Stesso account che ha provato ad avviare unaltra diretta mentre ne era già in corso una.
concurrency_none: Nessun tentativo registrato per questa società.
concurrency_all: Vedi tutti gli abusi account
edit_link: Modifica dati
edit:
back: "← Torna alla società"
title: "Modifica %{club}"
lead: "Forza i dati inseriti dal cliente: anagrafica, fatturazione, titolare, staff, inviti e squadre."
cancel: Annulla
submit: Salva modifiche
billing_hint: Puoi salvare anche un profilo incompleto; il badge in scheda rifletterà lo stato.
staff_hint: Utenti già collegati alle squadre della società (inclusi eventuali titolari).
staff_none: Nessuno staff collegato alle squadre.
invitations_hint: Solo inviti ancora in attesa di accettazione.
invitations_none: Nessun invito in attesa.
sections:
club: Anagrafica società
billing: Dati di fatturazione
owner: Titolare account
staff: Staff e invitati accettati
invitations: Inviti in attesa
teams: Squadre
fields:
name: Nome società
sport: Sport
primary_color: Colore primario
secondary_color: Colore secondario
logo_url: URL logo
owner_name: Nome titolare
owner_email: Email titolare
staff_name: Nome
staff_email: Email
invitation_team: Squadra
invitation_email: Email invito
team_name: Nome squadra
team_sport: Sport squadra
errors:
owner_missing: Nessun titolare associato a questa società.
email_taken: "Email già in uso: %{email}"
billing_status:
complete: Completo
incomplete: Incompleto
absent: Assenti
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
client: Client
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.
concurrency_title: Tentativi di seconda diretta
concurrency_lead: Questo account ha provato ad avviare unaltra diretta mentre questa era già in corso (o è stato bloccato da unaltra sessione dello stesso account).
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
client_os: Sistema
app_version: Versione app
device: Dispositivo
os_version: Versione OS
carrier: Operatore telefonico
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: "—"
decommissioned: "(nodo rimosso)"
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
chart_path: Pagina (grafico)
chart_path_all: Tutte le pagine
layer: Livello
layer_move: Movimenti mouse
layer_click: Click
devices:
mobile: Mobile
tablet: Tablet
desktop: Desktop
index:
title: Analytics sito
lead: Heatmap movimenti/click e scroll aggregati (first-party), solo con consenso statistico. Nessun dato personale.
none: Nessun dato nel periodo selezionato.
heatmap: Heatmap
chart_for_path: Grafico
trend_title: Andamento pageview
trend_lead: Totale pageview di tutte le pagine, giorno per giorno. Usa gli stessi filtri Da / A / Device. Scegli una pagina nel filtro oppure clicca «Grafico» in tabella.
trend_lead_path: "Pageview giorno per giorno solo per %{path} (stessi filtri Da / A / Device)."
trend_total_label: Pageview totali (tutte le pagine)
trend_total_label_path: Pageview della pagina selezionata
trend_total_hint: "%{from} → %{to}"
hide_chart: Nascondi grafico
show_chart: Mostra grafico
pages_title: Dettaglio per pagina
pages_lead: Pageview e engagement nel periodo filtrato, spezzati per path. Usa «Grafico» per vedere landamento di una sola pagina.
table:
path: Pagina
pageviews: Pageview
moves: Movimenti
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_moves: Mappa movimenti mouse
heatmap_clicks: Mappa click
heatmap_hint: Overlay colorato sullo screenshot %{device}. Verde = poco, rosso = molto. I dati non vengono mischiati tra dispositivi.
device_tabs_label: Dispositivo
preview_title: Screenshot pagina
preview_unavailable: Anteprima non disponibile per path con placeholder (es. /clubs/:id).
snapshot_missing: Nessuno screenshot per %{device}. Visita la pagina sul sito con quel dispositivo e consenso analytics, poi riprova tra qualche secondo.
snapshot_meta: "Screenshot %{device} · catturato %{at}"
no_points: Nessun punto aggregato per questo livello nel periodo.
heatmap_title: Mappa click
no_clicks: Nessun click aggregato per questa pagina nel periodo.
preview:
title: Anteprima senza tracciamento
lead: Visita il sito pubblico senza registrare pageview, click, movimenti o screenshot heatmap. Utile per test in produzione.
active: Modalità anteprima attiva su questo browser (7 giorni o fino a disattivazione).
enable: Attiva anteprima staff
disable: Disattiva anteprima
open_site: Apri sito
enabled: Anteprima staff attivata. Il sito non registrerà analytics su questo browser.
disabled: Anteprima staff disattivata.
costs:
index:
title: Analisi costi
lead: Inserisci i costi mensili della piattaforma e confronta costo, utilizzo e revenue. I KPI si ricalcolano automaticamente quando modifichi le voci.
month: Mese
apply: Applica
entries_title: Voci di costo del mese
entries_lead: Puoi aggiungere più voci (es. server, storage, banda). Il totale è la somma delle voci del mese.
add_entry: Aggiungi voce
no_entries: Nessuna voce di costo per questo mese. Aggiungi il costo della piattaforma per vedere i KPI.
clubs_title: Costo allocato per società
clubs_lead: Il costo infrastruttura è ripartito proporzionalmente alle ore trasmesse nel mese.
no_clubs: Nessuna diretta terminata in questo mese.
trends_title: Trend (ultimi 12 mesi)
kpi:
platform_cost: Costo piattaforma
revenue: Revenue incassata
margin: Margine
margin_pct: Margine %
hours: Ore trasmesse
sessions: Dirette
clubs_active: Società attive
storage: Storage replay
cost_per_hour: Costo / ora stream
cost_per_session: Costo / diretta
cost_per_club: Costo / società attiva
revenue_per_hour: Revenue / ora stream
cost_per_gb: Costo / GB storage
storage_note: Storage cumulativo attuale (non mensile).
charts:
cost_revenue: Costo vs revenue
cost_per_hour: Costo per ora trasmessa
hours: Ore trasmesse
table:
label: Voce
amount: Importo
notes: Note
club: Società
plan: Piano
hours: Ore
hours_share: Quota ore
allocated_cost: Costo allocato
revenue: Revenue
margin: Margine
cost_per_hour: €/ora
cost_per_session: €/diretta
storage: Storage
entries:
new_title: Nuova voce di costo
edit_title: Modifica voce di costo
month: Mese
label: Descrizione
label_hint: Es. Hetzner, nodi stream CPX, S3, banda egress.
amount: Importo (€)
notes: Note
save: Salva
cancel: Annulla
delete: Elimina
delete_confirm: Eliminare questa voce di costo?
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