Completa i18n IT/EN/FR/DE/ES su sito pubblico, area autenticata e admin.
Tutte le view marketing, legali, viewer, dashboard e admin usano t(); mailer utente-facing e flash localizzati; admin con LocaleResolver e selettore lingua. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,311 @@
|
||||
en:
|
||||
admin:
|
||||
layout:
|
||||
title: "Match Live TV — Admin"
|
||||
nav:
|
||||
dashboard: Dashboard
|
||||
ops: Ops
|
||||
clubs: Clubs & teams
|
||||
billing: Billing
|
||||
youtube: YouTube
|
||||
sessions: Sessions
|
||||
password: Password
|
||||
logout: Log out
|
||||
flash:
|
||||
login_required: Please log in to continue
|
||||
login_success: Signed in successfully
|
||||
invalid_credentials: Invalid username or password
|
||||
logout_success: Signed out
|
||||
password_current_incorrect: Current password is incorrect
|
||||
password_too_short: The new password must be at least 8 characters long
|
||||
password_mismatch: Passwords do not match
|
||||
password_updated: Password updated
|
||||
ops_acknowledged: Incident acknowledged
|
||||
ops_resolved: Incident resolved
|
||||
ops_muted: Notifications muted for 24 hours
|
||||
comped_granted: "%{plan} complimentary subscription activated for %{club}."
|
||||
comped_revoked: "Complimentary subscription revoked for %{club}."
|
||||
session_already_terminated: "Session already ended (%{status})."
|
||||
session_stopped: Session ended.
|
||||
session_stop_error: "Error while stopping: %{error}"
|
||||
session_terminated_no_regia: "Session ended: unable to generate the control link."
|
||||
session_regia_generated: Control link generated.
|
||||
invoice_upload_hint: Upload the PDF from the "Payments to invoice" list.
|
||||
invoice_draft_created: Draft created. Upload the PDF from the Billing page or below.
|
||||
invoice_issued: "Invoice %{number} issued and sent to %{email}."
|
||||
invoice_updated: "Invoice %{number} updated."
|
||||
invoice_uploaded: "Invoice uploaded and sent to %{email}."
|
||||
youtube_not_configured: Configure YOUTUBE_CLIENT_ID and YOUTUBE_CLIENT_SECRET in .env
|
||||
common:
|
||||
free_plan: Free
|
||||
yes: "Yes"
|
||||
no: "No"
|
||||
dash: "—"
|
||||
live_page: Live page
|
||||
auth:
|
||||
new:
|
||||
title: Admin login
|
||||
username_label: Username
|
||||
password_label: Password
|
||||
submit: Log in
|
||||
initial_credentials_html: "Initial credentials: <code>admin</code> / <code>admin</code>. Change the password after the first login."
|
||||
passwords:
|
||||
edit:
|
||||
title: Change password
|
||||
current_password_label: Current password
|
||||
new_password_label: "New password (min. 8 characters)"
|
||||
confirm_password_label: Confirm new password
|
||||
submit: Save password
|
||||
cancel: Cancel
|
||||
dashboard:
|
||||
kpi:
|
||||
active_sessions: Active sessions
|
||||
active_sessions_sub: live right now
|
||||
today: Streamed today
|
||||
today_sub: "%{duration} of streaming"
|
||||
month: Streamed this month
|
||||
month_sub: "%{duration} total"
|
||||
teams: Teams
|
||||
teams_sub: "%{count} users"
|
||||
cpu: CPU
|
||||
cpu_sub: "load %{one} / %{five} / %{fifteen}"
|
||||
ram: RAM
|
||||
ram_sub: "%{used} / %{total}"
|
||||
network: Bandwidth (total)
|
||||
network_sub: "↑ %{tx} · ↓ %{rx}"
|
||||
recordings: Recordings in archive
|
||||
recordings_sub: "%{count} recordings"
|
||||
charts:
|
||||
cpu: CPU (%)
|
||||
ram: RAM (%)
|
||||
ops_panel:
|
||||
title: Platform status (Ops)
|
||||
critical: "%{count} critical incident(s) open"
|
||||
view_dashboard: View Ops dashboard
|
||||
warnings: "%{count} warning(s)"
|
||||
dashboard_link: Ops dashboard
|
||||
none_html: "No open incidents. %{link}"
|
||||
disk:
|
||||
system_title: System disk
|
||||
free_label: "Free: %{free} (%{percent}% used)"
|
||||
not_available: Disk metrics not available
|
||||
recordings_title: Recordings archive
|
||||
recordings_content: "Recordings content: %{size}"
|
||||
recordings_not_mounted: "Path %{path} not mounted"
|
||||
sessions:
|
||||
title: Active sessions
|
||||
table:
|
||||
match: Match
|
||||
status: Status
|
||||
start: Start
|
||||
link: Link
|
||||
none: No active session right now.
|
||||
detail: Details
|
||||
stop: Stop
|
||||
stop_confirm: End this session?
|
||||
regia: Control
|
||||
teams:
|
||||
title: Teams
|
||||
matches_count: "%{count} matches"
|
||||
view_all: "View clubs (%{count} teams)"
|
||||
ops:
|
||||
kpi:
|
||||
critical: Critical open
|
||||
warning: Warnings open
|
||||
total: Total open
|
||||
open:
|
||||
title: Open incidents
|
||||
table:
|
||||
severity: Severity
|
||||
kind: Type
|
||||
title: Title
|
||||
occurrences: Occ.
|
||||
last_seen: Last seen
|
||||
none: No open incidents. The platform looks healthy.
|
||||
actions:
|
||||
acknowledge: Acknowledge
|
||||
resolve: Resolve
|
||||
mute: Mute 24h
|
||||
resolved:
|
||||
title: Resolved (last 30 days)
|
||||
table:
|
||||
resolved_at: Resolved
|
||||
none: No incidents resolved recently.
|
||||
clubs:
|
||||
index:
|
||||
title: Clubs & teams
|
||||
subtitle_html: "Complimentary subscriptions (sponsors / promotions) and YouTube status per team. Stripe payments: %{billing_link}."
|
||||
billing_link: Billing
|
||||
table:
|
||||
club: Club
|
||||
plan: Plan
|
||||
teams: Teams
|
||||
comped: Comp
|
||||
stripe: Stripe
|
||||
manage: Manage
|
||||
invoices: Invoices
|
||||
show:
|
||||
back: "← Clubs & teams"
|
||||
sport_label: "Sport: %{sport}"
|
||||
recordings_archive: Recordings archive
|
||||
billing_link: Payments & invoices
|
||||
youtube_platform_link: Platform YouTube channel
|
||||
youtube_club_label: "Club YouTube:"
|
||||
youtube_connected: (connected)
|
||||
youtube_premium_full_not_connected: Premium Full — club channel not connected (using Match Live TV)
|
||||
no_channel_hint_html: "Without a connected channel, the app uses the Match Live TV channel. %{link}."
|
||||
link_channel: Connect channel (club page)
|
||||
teams_title: Teams
|
||||
no_teams: No teams registered.
|
||||
table:
|
||||
team: Team
|
||||
sport: Sport
|
||||
matches_and_details: Matches & details
|
||||
replay: Replays
|
||||
comped:
|
||||
title: Complimentary subscription
|
||||
description: "Sponsor or promotion: grant Premium Light/Full without a Stripe payment. Revocable at any time."
|
||||
active_label: "Active:"
|
||||
since_label_html: "Since %{date}"
|
||||
by_admin: "· admin %{username}"
|
||||
stripe_note: "Note: a linked Stripe subscription also exists; the comp takes priority over the plan."
|
||||
revoke_button: Revoke comp (revert to Free or restore Stripe)
|
||||
revoke_confirm: "Revoke the complimentary subscription for %{club}?"
|
||||
current_plan: "Current plan: %{plan}"
|
||||
stripe_active: "· active Stripe payment"
|
||||
plan_label: Plan
|
||||
reason_label: "Reason (e.g. 2026 sponsor)"
|
||||
reason_placeholder: "Sponsor, promotion…"
|
||||
grant_button: Grant comp
|
||||
teams:
|
||||
show:
|
||||
back: "← %{club}"
|
||||
sport_label: "Sport: %{sport}"
|
||||
club_label_html: "Club: %{club} · %{replay_link} · %{billing_link}"
|
||||
replay_link: Team replays
|
||||
billing_link: Payments & invoices
|
||||
youtube_label: "YouTube:"
|
||||
youtube_platform_default_no_oauth: ", default without club OAuth"
|
||||
youtube_platform_channel: "(platform channel%{suffix})"
|
||||
youtube_club_channel: (club channel)
|
||||
youtube_not_ready: not ready
|
||||
no_channel_hint_html: "Without a connected channel, the app uses the Match Live TV channel. %{link}."
|
||||
link_channel: Connect channel (club page)
|
||||
matches_title: Matches
|
||||
sessions:
|
||||
index:
|
||||
title: Stream sessions
|
||||
table:
|
||||
match: Match
|
||||
status: Status
|
||||
disconnects: Disconnects
|
||||
link: Link
|
||||
detail: Details
|
||||
regia: Control
|
||||
show:
|
||||
title: "Session %{id}"
|
||||
status_label: "Status:"
|
||||
stop_button: End session
|
||||
stop_confirm: "End the broadcast? The RTMP path will be removed and the status will move to ended."
|
||||
match_label: "Match: %{team} vs %{opponent}"
|
||||
youtube_studio: YouTube Studio
|
||||
broadcast: Broadcast
|
||||
rtmp_ingest: "RTMP ingest:"
|
||||
events_title: Events
|
||||
table:
|
||||
type: Type
|
||||
when: When
|
||||
meta: Meta
|
||||
links:
|
||||
watch_title: Live link
|
||||
none: No video link available for this session.
|
||||
regia_title: Control link
|
||||
terminated: Session ended — control link not available.
|
||||
regia_label: Control
|
||||
valid_until: "Valid until %{date}"
|
||||
active_exists: An active control link already exists (the URL cannot be retrieved). Generate a new one if you need to share it again.
|
||||
none_active: No active control link. Generate a link to share with whoever manages the score.
|
||||
generate_button: Generate control link
|
||||
billing:
|
||||
index:
|
||||
title: Payments to invoice
|
||||
description: Stripe payments that are paid but have no invoice PDF yet. Generate the PDF in your systems, then upload it here — it will be linked to the payment and emailed to the customer.
|
||||
filter_label: "Filter clubs:"
|
||||
filter_all: All
|
||||
incomplete_profile_warning: Billing details incomplete
|
||||
no_billing_data: No billing details — the customer must complete their profile.
|
||||
pdf_label: Invoice PDF
|
||||
upload_button: Upload PDF and send to customer
|
||||
none_pending: "No payments awaiting an invoice%{club}."
|
||||
none_pending_for_club: " for %{club}"
|
||||
uploaded_title: Invoices already uploaded
|
||||
table:
|
||||
date: Date
|
||||
club: Club
|
||||
description: Description
|
||||
amount: Amount
|
||||
invoice: Invoice
|
||||
status: Status
|
||||
back_dashboard: "← Dashboard"
|
||||
billing_invoices:
|
||||
index:
|
||||
title: "Billing — %{club}"
|
||||
back_dashboard: "← Dashboard"
|
||||
new_invoice: New invoice (no payment)
|
||||
payments_title: Payments
|
||||
table:
|
||||
date: Date
|
||||
description: Description
|
||||
amount: Amount
|
||||
invoice: Invoice
|
||||
pdf_suffix: " (PDF)"
|
||||
edit_send_pdf: Edit / send PDF
|
||||
create_invoice: Create invoice
|
||||
no_payments: No payments recorded for this club.
|
||||
all_invoices_title: All invoices
|
||||
table2:
|
||||
number: Number
|
||||
date: Date
|
||||
amount: Amount
|
||||
status: Status
|
||||
payment: Payment
|
||||
edit: Edit
|
||||
no_invoices: No invoices.
|
||||
new:
|
||||
title: "New invoice — %{club}"
|
||||
linked_payment: "Linked to the payment of %{date} (%{amount})."
|
||||
number_label: Invoice number
|
||||
issued_on_label: Issue date
|
||||
amount_label: "Amount (€)"
|
||||
notes_label: Internal notes (optional)
|
||||
hint: Save the draft, then upload the PDF and send it to the customer from the next screen.
|
||||
submit: Create invoice draft
|
||||
back: "← Payments & invoices"
|
||||
edit:
|
||||
title: "Invoice %{number} — %{club}"
|
||||
status_label: "Status:"
|
||||
sent_at: "· Sent on %{date}"
|
||||
number_label: Invoice number
|
||||
issued_on_label: Issue date
|
||||
amount_label: "Amount (€)"
|
||||
payment_info: "Payment: %{description} — %{amount}"
|
||||
pdf_label: Invoice PDF
|
||||
pdf_already: "PDF already uploaded: %{filename}"
|
||||
notes_label: Internal notes
|
||||
save_draft: Save draft
|
||||
issue_send: Issue and send by email
|
||||
issue_confirm: "Send the invoice to %{email}?"
|
||||
back: "← Payments & invoices"
|
||||
youtube:
|
||||
platform_token:
|
||||
title: Match Live TV channel token
|
||||
page_title: "YouTube token — Match Live TV"
|
||||
channel_label: "Channel: %{title}"
|
||||
success: "Connection successful. Copy this line right away:"
|
||||
env_hint_html: "Add to <code>/opt/matchlivetv/infra/.env</code>:"
|
||||
not_shown_again_html: "It won't be shown again. Then run: <code>docker compose -f docker-compose.prod.yml restart rails sidekiq</code>"
|
||||
no_refresh_token_html: "Google did not return a refresh token. In your <a href=\"https://myaccount.google.com/permissions\" target=\"_blank\" rel=\"noopener\">Google account → app access</a>, revoke «Match Live TV», then repeat from <a href=\"/admin/youtube/platform\">/admin/youtube/platform</a>."
|
||||
back_dashboard: "← Admin dashboard"
|
||||
club_recordings:
|
||||
index:
|
||||
title: "Replays — %{club}"
|
||||
Reference in New Issue
Block a user