Cattura periodica client-side (con consenso), storage ActiveStorage e overlay allineato all’immagine. Co-authored-by: Cursor <cursoragent@cursor.com>
581 lines
23 KiB
YAML
581 lines
23 KiB
YAML
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, 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: "<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, l’app 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 (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
|
||
|
||
analytics:
|
||
missing_path: Seleziona una pagina.
|
||
filters:
|
||
from: Da
|
||
to: A
|
||
device: Device
|
||
any: Tutti
|
||
apply: Filtra
|
||
reset: Azzera
|
||
layer: Livello
|
||
layer_move: Movimenti mouse
|
||
layer_click: Click
|
||
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
|
||
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 della pagina. Verde = poco, rosso = molto.
|
||
preview_title: Screenshot pagina
|
||
preview_unavailable: Anteprima non disponibile per path con placeholder (es. /clubs/:id).
|
||
snapshot_missing: Nessuno screenshot ancora. Visita la pagina sul sito con consenso analytics (desktop) e 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.
|
||
|
||
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
|
||
|