Permette upload da portale e app con ereditarietà partita→squadra→società, generazione MP4 via ffmpeg e distribuzione su home lab e nodi CPX per pause e assenza segnale. Co-authored-by: Cursor <cursoragent@cursor.com>
883 lines
42 KiB
YAML
883 lines
42 KiB
YAML
en:
|
|
password_policy:
|
|
hint: "At least 8 characters, including 3 of: lowercase, uppercase, numbers and symbols."
|
|
activerecord:
|
|
errors:
|
|
models:
|
|
user:
|
|
attributes:
|
|
password:
|
|
too_short: "is too short (minimum is %{count} characters)"
|
|
too_long: "is too long (maximum is %{count} characters)"
|
|
complexity: "must include at least 3 of: lowercase letters, uppercase letters, numbers and symbols"
|
|
admin_account:
|
|
attributes:
|
|
password:
|
|
too_short: "is too short (minimum is %{count} characters)"
|
|
too_long: "is too long (maximum is %{count} characters)"
|
|
complexity: "must include at least 3 of: lowercase letters, uppercase letters, numbers and symbols"
|
|
club:
|
|
back_to_club: "← Club"
|
|
sport_label: Main sport
|
|
branding_legend: Club logo and colors
|
|
branding:
|
|
legend: Visual identity
|
|
inherit_hint: Leave blank to use the club's logo and colors.
|
|
logo_file_label: Logo (image)
|
|
logo_preview_alt: Logo preview
|
|
no_logo_placeholder: "No logo — choose a file for the preview"
|
|
logo_url_label: Logo (alternative URL)
|
|
primary_color_label: Primary color
|
|
secondary_color_label: Secondary color
|
|
choose_color: Choose color
|
|
quick_colors: Quick colors
|
|
header_preview_label: Header preview
|
|
name_placeholder: Club / team name
|
|
cover_legend: Live cover (sponsors)
|
|
cover_inherit_hint: Leave blank to use the club cover, otherwise the default Match Live TV cover.
|
|
cover_hint: "16:9 image recommended (PNG, JPEG or WebP, max 5 MB). Shown to viewers and YouTube when paused or offline."
|
|
cover_file_label: Cover image
|
|
cover_preview_alt: Live cover preview
|
|
cover_remove_label: Remove custom cover
|
|
cover_requires_full: Custom sponsor covers are available on the Premium Full plan.
|
|
cover_see_plans: See plans
|
|
dashboard:
|
|
title: "%{name} — Club"
|
|
plan_label: "Plan:"
|
|
teams_count_label: "Teams:"
|
|
edit_club: Edit club
|
|
subscription: Subscription
|
|
new_team: New team
|
|
live_streams: Live streams
|
|
replay_archive: Replay archive
|
|
replay_heading: Replay
|
|
available: available
|
|
expiring_soon: "expiring soon (7 days)"
|
|
space_used: storage used
|
|
views: views
|
|
teams_heading: Teams
|
|
team_col: Team
|
|
branding_col: Branding
|
|
branding_custom: Custom
|
|
branding_inherited: Inherits from club
|
|
public_page: Public page
|
|
details: Details
|
|
matches: Matches
|
|
edit: Edit
|
|
no_teams_html: "No teams yet. %{link}."
|
|
add_first_team: Add the first one
|
|
footer_note: "Each team has its own broadcast managers. The score from a second phone uses the control-room link (no account needed). The subscription covers the whole club."
|
|
edit:
|
|
title: "Edit club — %{name}"
|
|
heading: Edit club
|
|
name_label: Club name
|
|
save: Save
|
|
new:
|
|
title: "Register a club — Match Live TV"
|
|
meta_description: Create your sports club and its first team on Match Live TV.
|
|
heading: Your club
|
|
lead: "Register the club: you'll be able to add more teams (Under 13, Under 15, Serie C…)."
|
|
section_club: Club
|
|
name_label: Club name
|
|
name_placeholder: "e.g. Crazy Volley Rozzano"
|
|
section_first_team: First team
|
|
default_first_team_name: First team
|
|
first_team_name_label: Team name
|
|
first_team_name_placeholder: "e.g. Under 15"
|
|
plan_label: "Starting plan (for the whole club)"
|
|
plan_free: "Free — 1 transmitter account per team, 1 live stream"
|
|
plan_light: "Premium Light — €59/year"
|
|
plan_full: "Premium Full — €199/year"
|
|
plan_hint: "Card, bank transfer or monthly billing are chosen later on the Subscription page. A paid plan activates only after payment."
|
|
submit: Create club
|
|
billing:
|
|
title: "Subscription — %{name}"
|
|
comped:
|
|
title: Complimentary Match Live TV subscription
|
|
plan_prefix: "— plan"
|
|
no_payment_html: "No payment is required. To make changes or switch to a paid plan, contact %{email_link}."
|
|
youtube:
|
|
heading: YouTube Live
|
|
connected_notice: Club YouTube channel connected successfully.
|
|
light_body_html: "With the <strong>Premium Light</strong> plan, YouTube live streams for all teams go to the official <strong>Match Live TV</strong> channel. You don't need to connect a club channel."
|
|
light_ready: "Channel ready · select «YouTube Live» in the mobile app."
|
|
light_configuring: Match Live TV channel being configured server-side. Contact support if YouTube doesn't appear in the app.
|
|
full_connected_html: "Channel connected for <strong>the whole club</strong>: <strong>%{channel}</strong>"
|
|
full_connected_hint: All teams can stream to this channel when they choose the club channel in the app.
|
|
disconnect: Disconnect channel
|
|
disconnect_confirm: Disconnect the YouTube channel? Streams will use the Match Live TV channel until you reconnect yours.
|
|
full_not_connected_html: "Without a connected channel, YouTube streams from the app go to the official <strong>Match Live TV</strong> channel. Connect your club's YouTube channel here (applies to all teams)."
|
|
ready_in_app: "YouTube ready in the app (Match Live TV channel until you connect yours)."
|
|
connect: Connect the club's YouTube channel
|
|
oauth_not_configured: YouTube OAuth not configured on the server yet.
|
|
requires_full: YouTube on the club channel requires the Premium Full plan.
|
|
see_plans: See plans
|
|
team:
|
|
back_to_details: "← Team details"
|
|
sport_label: Sport
|
|
details:
|
|
title: "Details — %{name}"
|
|
meta_description: "%{name} team details on Match Live TV."
|
|
nav_aria: Team breadcrumb
|
|
edit_team: Edit team
|
|
plan_label: "Plan:"
|
|
plan_scope_club: (club)
|
|
staff_label: "Broadcast managers:"
|
|
active_matches_label: "Active matches:"
|
|
unlimited: unlimited
|
|
no_description: No description yet.
|
|
add_description_link: Add one from edit team
|
|
roster_count_label: on the roster
|
|
no_photo: Team photo not uploaded yet
|
|
add_photo_link: Add one from edit team
|
|
public_page: Public page
|
|
streaming_managers: Broadcast managers
|
|
schedule_matches: Schedule matches
|
|
live_streams: Live streams
|
|
no_people_in_category: No one in this category yet.
|
|
youtube_hint_html: "The club's YouTube channel is set up from the %{club_link} page (YouTube Live section)."
|
|
footer_note: Use the mobile app with the same credentials to start matches and streams.
|
|
edit:
|
|
title: "Edit team — %{name}"
|
|
club_label: "Club:"
|
|
name_label: Team name
|
|
description_label: Team description
|
|
description_placeholder: "Team introduction, achievements, season goals…"
|
|
photo_label: "Team photo (group or crest)"
|
|
photo_alt: Team photo
|
|
branding_legend: Team branding (override)
|
|
slug_label: Public page address
|
|
slug_hint_html: "Parents and fans find the team at <strong>%{base_url}/teams/%{slug}</strong>"
|
|
slug_title: "Lowercase letters, numbers and hyphens only"
|
|
roster_public_label: Show the roster on the public page
|
|
roster_public_hint: When enabled, players and staff are visible to anyone with the link. You can leave it off for privacy.
|
|
club_colors_label: "Club colors:"
|
|
submit: Save team
|
|
new:
|
|
title: "New team — %{name}"
|
|
heading: New team
|
|
club_label: "Club:"
|
|
name_label: Team name
|
|
name_placeholder: "e.g. Under 13, Serie C"
|
|
branding_legend: Branding override (optional)
|
|
submit: Add team
|
|
invite:
|
|
title: "Broadcast staff — %{name}"
|
|
heading: Broadcast managers
|
|
assigned_label: "Assigned:"
|
|
per_team_note: (per team, renewed yearly)
|
|
info: "The broadcast manager starts the live stream from the app (camera on a tripod). For scoring from a second phone, no account is needed: they share the <strong>control-room link</strong> from the broadcast screen (WhatsApp, email, SMS, etc.)."
|
|
self_assign_hint_html: "<strong>%{email}</strong> — you can handle both camera and score yourself, or invite others for the broadcast."
|
|
self_assign_submit: I'll do it — broadcast manager
|
|
invite_other_heading: Invite another email
|
|
email_label: Broadcast manager's email
|
|
submit: Send invite by email
|
|
share_hint: "Link also sent by email (valid for 7 days):"
|
|
billing:
|
|
title: "Subscription — %{name}"
|
|
team_label: "Team:"
|
|
current_plan_label: "Current plan:"
|
|
staff_line: "Broadcast staff: %{count} / year"
|
|
matches_line: "Matches: %{count} concurrent"
|
|
replay_line: "Replay: %{value}"
|
|
replay_days: "%{count} days"
|
|
replay_none: "no"
|
|
youtube_line: "YouTube: %{value}"
|
|
youtube_mltv: Match Live TV
|
|
youtube_club: club channel
|
|
youtube_none: "no"
|
|
current_plan: Current plan
|
|
manage_club_subscription: Manage club subscription
|
|
stripe_not_configured: Stripe not configured
|
|
contact_lead: "Different needs?"
|
|
contact_cta: Contact us
|
|
contact_trailer: for a custom offer.
|
|
club_payments_link: Club payments and invoices
|
|
streaming_staff:
|
|
principal_heading: Main account
|
|
principal_body_html: "The account used to register the club (<strong>%{email}</strong>) is the one <strong>designated for this team</strong>: use it in the app to start the live stream."
|
|
principal_score_hint_html: "For scoring from another phone, share the <strong>control-room link</strong> during the stream (no second account needed)."
|
|
extra_staff_heading: Other accounts that can broadcast
|
|
self_account_heading: "Your account (%{email})"
|
|
self_account_hint: "You can manage streaming from the app. For scoring from another phone, share the <strong>control-room link</strong> during the stream (no second account needed)."
|
|
self_assign_submit: I'll do it — broadcast manager
|
|
staff_heading: Broadcast managers (app)
|
|
col_name: Name
|
|
col_email: Email
|
|
col_role: Role
|
|
role_transmission: Broadcast
|
|
you_suffix: (you)
|
|
clear_self_staff: Remove staff role
|
|
clear_self_staff_confirm: Remove the staff role from your account?
|
|
revoke: Revoke
|
|
revoke_confirm: "Revoke access for %{name}?"
|
|
no_staff: No broadcast managers yet.
|
|
invite_someone: Invite someone
|
|
invite_form_heading: Invite an account to broadcast
|
|
invite_form_hint: "This is not the roster (players/on-court staff). Enter the email: we send the link automatically; you can also copy and share it."
|
|
invite_once_note: "If needed, copy the link below for a second share (WhatsApp, SMS)."
|
|
copied: Copied
|
|
pending_invitations_heading: Pending invitations
|
|
col_email_short: Email
|
|
col_expires: Expires
|
|
cancel_invitation: Cancel
|
|
no_pending: No pending requests.
|
|
archive_heading: Replay archive
|
|
col_match: Match
|
|
col_date: Date
|
|
col_duration: Duration
|
|
col_expiry: Expiry
|
|
col_status: Status
|
|
watch: Watch
|
|
manage_all_replays: Manage all replays
|
|
no_recordings: No replays yet. Recordings appear here after Premium live streams end.
|
|
matches:
|
|
back_to_list: "← Match list"
|
|
opponent_label: Opponent
|
|
opponent_placeholder: "e.g. Volley Milano"
|
|
location_label: "Location (optional)"
|
|
location_placeholder: "Gym, city"
|
|
datetime_label: Date and time
|
|
form_hint: "The stream doesn't start automatically: it will show up in the app and on the site. You'll start streaming from your phone once you're on site."
|
|
edit:
|
|
title: "Edit match — %{name}"
|
|
heading: Edit match
|
|
submit: Save changes
|
|
new:
|
|
title: "Schedule match — %{name}"
|
|
heading: Schedule match
|
|
submit: Save to schedule
|
|
index:
|
|
title: "Matches — %{name}"
|
|
heading: "Matches — %{name}"
|
|
lead: "Schedule date, opponent and venue here from your computer. Once you're in the gym, open the Match Live TV app, select this team and start streaming the match."
|
|
schedule_match: Schedule match
|
|
team_details: Team details
|
|
live_and_schedule: Streams and schedule
|
|
col_opponent: Opponent
|
|
col_datetime: "Date and time"
|
|
col_location: Location
|
|
col_status: Status
|
|
no_time: No time set
|
|
no_location: "—"
|
|
edit: Edit
|
|
delete: Delete
|
|
delete_confirm: Delete this match?
|
|
empty_html: "No matches scheduled yet. %{link}."
|
|
schedule_first: Schedule the first one
|
|
club_new:
|
|
title: "Schedule match — %{name}"
|
|
back_link: "← Streams and matches"
|
|
heading: Schedule match
|
|
admin_hint: "· You can pick any team in the club"
|
|
staff_hint: "· Only teams you're a broadcast manager for"
|
|
team_label: Team
|
|
submit: Save to schedule
|
|
status:
|
|
active: In progress / resumable
|
|
scheduled: Scheduled
|
|
ready: Ready
|
|
no_time: No time set
|
|
roster:
|
|
back_to_details: "← Team details"
|
|
category:
|
|
staff: Staff
|
|
coach: Coaches
|
|
manager: Managers
|
|
player: Players
|
|
role:
|
|
coach: Coach
|
|
manager: Manager
|
|
staff: Staff
|
|
player: Player
|
|
player_numbered: "Player #%{number}"
|
|
errors:
|
|
role_invalid: is not a valid role for this sport
|
|
photo_invalid_type: must be PNG, JPEG or WebP
|
|
role_select_blank: "— Select role —"
|
|
edit:
|
|
title: "Edit — %{name}"
|
|
member_form:
|
|
edit_heading: Edit profile
|
|
new_heading: Add person
|
|
lead: Fill in the fields and save to update the roster.
|
|
category_label: Group
|
|
full_name_label: Full name
|
|
full_name_placeholder: "e.g. Mario Rossi"
|
|
role_player_label: On-field role
|
|
role_other_label: "Role (optional)"
|
|
role_other_placeholder: "e.g. Head coach, President, Physiotherapist"
|
|
jersey_label: Jersey number
|
|
jersey_placeholder: "e.g. 7"
|
|
bio_label: Short description
|
|
bio_placeholder: "Brief profile description…"
|
|
photo_label: Photo
|
|
photo_hint: Without a photo, an avatar with the team's colors will be shown.
|
|
submit_edit: Save profile
|
|
submit_new: Add to roster
|
|
person_card:
|
|
edit: Edit
|
|
remove: Remove
|
|
remove_confirm: "Remove %{name} from the roster?"
|
|
billing:
|
|
heading: Subscription
|
|
entity_types:
|
|
company: "Club / non-profit with VAT number"
|
|
individual: Private individual
|
|
nonprofit: Non-profit association
|
|
profile_errors:
|
|
entity_type: Billing entity type
|
|
legal_name: Legal name or account holder's name
|
|
email: Billing email
|
|
address: Address
|
|
city: City
|
|
province: "Province (2-letter code)"
|
|
postal_code: Postal code
|
|
country: "Country (ISO)"
|
|
vat_number: VAT number
|
|
fiscal_code: Fiscal code
|
|
vat_or_fiscal: VAT number or fiscal code
|
|
sdi_or_pec: "SDI recipient code (7 characters) or certified email (PEC)"
|
|
sdi_invalid: "SDI recipient code (7 characters)"
|
|
actions:
|
|
current_plan: Current plan
|
|
contact_for_free: "To switch to the Free plan, contact support."
|
|
stripe_not_configured: Stripe not configured
|
|
stripe_prices_not_configured: Stripe prices not configured
|
|
complete_billing_prefix: Complete your billing details before activating a premium plan.
|
|
profile_incomplete_default: Complete your billing details before activating a premium plan.
|
|
profile_missing: "Missing: %{fields}."
|
|
profile:
|
|
title: "Billing details — %{name}"
|
|
heading: Billing details
|
|
lead: "Club: %{name}. Enter the details for invoice headers and delivery via SDI or certified email (PEC)."
|
|
required_notice: Required to subscribe to a premium plan.
|
|
after_save_hint_html: "After saving, you'll be able to proceed with payment for <strong>%{plan}</strong>."
|
|
submit: Save billing details
|
|
back_to_billing: "← Subscription"
|
|
fields:
|
|
legend: Billing details
|
|
legend_hint: "All marked fields are required to subscribe to a premium plan and to issue invoices. Clubs need a VAT number; private individuals need a fiscal code. You need either SDI or certified email (PEC). Payments remain securely handled by Stripe."
|
|
entity_type_label: "Billing entity type *"
|
|
legal_name_label: "Legal name / full name *"
|
|
legal_name_placeholder: "e.g. ASD Tigers Volley"
|
|
vat_number_label: "VAT number * (club)"
|
|
fiscal_code_label: "Fiscal code * (private individual)"
|
|
fiscal_code_placeholder: RSSMRA80A01H501U
|
|
email_label: "Billing email *"
|
|
email_placeholder: admin@club.com
|
|
phone_label: "Phone (optional)"
|
|
address_label: "Address *"
|
|
address_placeholder: "123 Main Street"
|
|
city_label: "City *"
|
|
province_label: "Province *"
|
|
province_placeholder: MI
|
|
postal_code_label: "Postal code *"
|
|
country_label: "Country (ISO) *"
|
|
recipient_code_label: "SDI recipient code (7 chars) *"
|
|
recipient_code_placeholder: XXXXXXX
|
|
pec_label: "Certified email PEC (alternative to SDI) *"
|
|
pec_placeholder: pec@club.com
|
|
documents:
|
|
heading: Payments and invoices
|
|
lead: History of the club's payments and invoices issued by Match Live TV.
|
|
incomplete_title: Billing details incomplete.
|
|
incomplete_body: Fill in legal name, address, VAT/fiscal code and SDI or PEC to receive invoices by email.
|
|
complete_now: Complete now
|
|
holder_label: "Account holder: %{summary}"
|
|
edit_data: Edit details
|
|
table_heading: Payments and invoices
|
|
col_date: Date
|
|
col_description: Description
|
|
col_amount: Amount
|
|
col_status: Payment status
|
|
col_invoice: Invoice
|
|
download_pdf: Download PDF
|
|
pdf_preparing: PDF being prepared
|
|
no_payments: No payments recorded yet. They will appear here after a premium subscription.
|
|
subscription_status:
|
|
club_label: "Club: %{name}"
|
|
current_plan_label: "Current plan: %{plan}"
|
|
comped_suffix: (complimentary Match Live TV)
|
|
valid_for_all_teams: (valid for all teams)
|
|
manage_subscription: Manage subscription
|
|
cancel_scheduled_html: "Subscription valid until <strong>%{date}</strong>, then the Free plan."
|
|
change_pending_html: "From <strong>%{date}</strong> you'll switch to <strong>%{plan}</strong>%{interval}. Until then <strong>%{current_plan}</strong> stays active."
|
|
end_of_period: end of the period
|
|
next_renewal: next renewal
|
|
next_renewal_label: "Next renewal: %{date}"
|
|
plan_change_info:
|
|
trigger_label: Plan change and billing info
|
|
title: Plan change and billing
|
|
subscription_cancel:
|
|
scheduled_title: Cancellation scheduled.
|
|
scheduled_body_html: "The <strong>%{plan}</strong> plan stays active until <strong>%{date}</strong>. From that day the club will automatically switch to the <strong>Free</strong> plan."
|
|
scheduled_end_of_period: end of the already-paid period
|
|
scheduled_support_hint: To restore the subscription before it expires, contact Match Live TV support.
|
|
info: "You can cancel at any time: the subscription stays valid until the end of the already-paid period, then you switch to the Free plan with no further charges."
|
|
cancel_button: Cancel subscription
|
|
confirm_with_date: "Confirm cancellation? The %{plan} plan will stay active until %{date}, then you'll switch to Free."
|
|
confirm_default: Confirm subscription cancellation?
|
|
stripe_secure:
|
|
compact_html: "Premium payments securely processed via <strong>Stripe</strong>."
|
|
full_html: "Premium plan payments are processed <strong>securely</strong> via <strong>Stripe</strong> (PCI DSS certified). Match Live TV never stores full card numbers."
|
|
messages:
|
|
upgrade_completed_with_amount: "Upgrade to %{plan} (%{interval}) completed. Immediate charge: %{amount}."
|
|
upgrade_completed_pending_charge: "Upgrade to %{plan} (%{interval}) completed. The charge for the difference is being processed on your saved card."
|
|
next_renewal: the next renewal
|
|
current_plan_generic: the current plan
|
|
downgrade_scheduled: "Switch to %{plan} (%{interval}) scheduled: you stay on %{current_name} until %{when}. No additional charge now; you'll pay the new price from the next cycle."
|
|
activate_button: "Activate %{plan} — %{price}"
|
|
switch_button: "Switch to %{plan} — %{price}"
|
|
upgrade_info_line: "Upgrade (higher plan or switch to annual billing): the difference is charged immediately to the saved Stripe card."
|
|
downgrade_info_line: "Downgrade between paid plans (e.g. Full → Light): the new plan takes effect from the next renewal; until then the current plan's features remain, with no additional charge now."
|
|
already_requested_line: "You already requested %{plan} from %{when}: until then %{current_plan} stays active."
|
|
prices:
|
|
yearly: "%{amount}/year"
|
|
monthly: "%{amount}/month"
|
|
regia:
|
|
meta_title_fallback: "Control room — Match Live TV"
|
|
title: "Control room — %{home} vs %{away}"
|
|
subtitle_prefix: "Control room ·"
|
|
status:
|
|
ended: Ended
|
|
paused: Paused
|
|
live: Live
|
|
waiting: Waiting
|
|
live_share_label: Live
|
|
share_live: Share live link
|
|
share_action: Share
|
|
copy_link: Copy link
|
|
copy_action: Copy
|
|
copy_live: Copy live
|
|
copy_regia: Copy room
|
|
links_nav: Quick actions
|
|
regia_share_label: Control
|
|
stream_controls_label: Live
|
|
share_regia: Share control room link
|
|
preview_ended: Stream ended
|
|
preview_waiting: Waiting for signal…
|
|
preview_hide: Hide preview
|
|
preview_show: Show preview
|
|
preview_off_hint: Preview off · no video download
|
|
pause: Pause stream
|
|
resume: Resume stream
|
|
mute: Mute audio
|
|
unmute: Unmute audio
|
|
stop: End stream
|
|
min_quality:
|
|
label: Minimum streaming quality
|
|
summary: Quality
|
|
hint: The encoder will not go below this level. Automatic adapts bitrate to reduce stalls.
|
|
recommend: "Automatic is recommended: it adapts to the network and the phone, without forcing maximum quality."
|
|
auto: Automatic
|
|
telemetry:
|
|
label: Phone
|
|
waiting: Waiting for the phone…
|
|
stale: Phone not responding
|
|
just_now: now
|
|
seconds_ago: "%{n}s ago"
|
|
publisher_on: RTMP ok
|
|
publisher_off: RTMP down
|
|
battery: Battery
|
|
network: Network
|
|
bitrate: Bitrate
|
|
bitrate_max: "max %{n}"
|
|
bitrate_title: "%{current} Mbps current · max %{target} Mbps"
|
|
bitrate_tap: Tap to set the minimum quality
|
|
fps: FPS
|
|
thermal: Temp.
|
|
thermal_nominal: OK
|
|
thermal_fair: Warm
|
|
thermal_serious: Hot
|
|
thermal_critical: Critical
|
|
modal:
|
|
set_won_title: Set won
|
|
confirm: Close set
|
|
cancel: Cancel
|
|
board:
|
|
next_period: Next quarter
|
|
next_half: Next half
|
|
close_set: Close set
|
|
free_score: Free score
|
|
stopwatch: Stopwatch
|
|
generic_score: Score
|
|
start: Start
|
|
pause: Pause
|
|
reset: Reset
|
|
points_suffix: pts
|
|
partials_prefix: "Partials:"
|
|
set_label: "Set %{number}"
|
|
js:
|
|
period_updated: Period updated
|
|
now_in_period: "Now in %{period}"
|
|
set_won_body: "%{winner} won the set. Close the set?"
|
|
match_won_title: Match won
|
|
match_won_body: "%{winner} won the match. Close the stream?"
|
|
close_set_confirm: Confirm closing the current set?
|
|
score_update_error: Score update error
|
|
generic_error: Error
|
|
sets_line: "Set %{current} · Sets won %{home}-%{away}"
|
|
quarter_label: "Q%{n}"
|
|
half_label: "Half %{n}"
|
|
overtime_basket: "OT%{n}"
|
|
overtime_other: OT
|
|
unknown_period: "—"
|
|
resumed: Stream resumed
|
|
paused_cover: "Stream paused — cover on air"
|
|
muted: "Audio muted — YouTube is not receiving the microphone"
|
|
unmuted: "Microphone audio restored"
|
|
closed: Stream closed
|
|
resume_error: Error resuming the stream
|
|
pause_error: Error pausing the stream
|
|
mute_error: Error muting audio
|
|
close_error: Error closing
|
|
close_confirm: Permanently close the live stream?
|
|
link_unavailable: Link not available
|
|
link_copied: Link copied
|
|
copy_prompt: "Copy the link:"
|
|
share_regia_text: "Open this link to manage the live score:"
|
|
share_live_text: "Watch the live stream on Match Live TV:"
|
|
min_quality_updated: Minimum quality updated
|
|
min_quality_error: Error updating minimum quality
|
|
recordings:
|
|
archive:
|
|
back_prefix: "←"
|
|
heading: Replay archive
|
|
admin_suffix: (admin)
|
|
lead_html: "Manage recordings, visibility and downloads. <strong>Private</strong> = unlisted link, doesn't appear on the public <code>/replay</code> page. Deleting a replay also removes the files on the server and the linked YouTube video."
|
|
kpi_available: Replays available
|
|
kpi_expiring: "Expiring soon (7 days)"
|
|
kpi_space: Storage used
|
|
kpi_views: Total views
|
|
team_label: Team
|
|
team_all: All
|
|
status_label: Status
|
|
status_all: All
|
|
status_ready: Available
|
|
status_processing: Processing
|
|
status_expired: Expired / error
|
|
col_preview: Preview
|
|
col_match: Match
|
|
col_team: Team
|
|
col_details: Details
|
|
col_status: Status and visibility
|
|
col_actions: Actions
|
|
watch_replay: Watch replay
|
|
processing_title: Processing in progress
|
|
not_available_title: Replay not available
|
|
views_suffix: views
|
|
expires_prefix: Expires
|
|
expires_days: "(%{count} days)"
|
|
no_expiry: No expiry
|
|
new_expiry_title: New expiry date
|
|
save: Save
|
|
extend_days: "+%{count} days"
|
|
extend_title: "Extend the expiry by %{count} days"
|
|
privacy_public: Public
|
|
privacy_private: Private
|
|
privacy_hint_public: "Visible to everyone — click to make private"
|
|
privacy_hint_private: "Link only — click to make public"
|
|
download_mp4: MP4
|
|
download_mp4_title: Download MP4
|
|
publish_youtube: "YT"
|
|
publish_youtube_title: Publish to YouTube
|
|
open_youtube_title: Open on YouTube
|
|
delete_title: Delete replay
|
|
delete_confirm: Choose where to delete the replay. This action cannot be undone.
|
|
no_recordings: No recordings for the selected filters.
|
|
confirm:
|
|
choice_title: What do you want to delete?
|
|
choice_message: Choose where to remove the replay from. This action cannot be undone.
|
|
choice_site_label: Site only
|
|
choice_site_hint_with_youtube: The video stays on YouTube
|
|
choice_site_hint_only: Removes the files from the site
|
|
choice_youtube_label: YouTube only
|
|
choice_youtube_hint_with_site: Stays available on the site
|
|
choice_youtube_hint_only: Removes only the YouTube video
|
|
choice_both_label: Site and YouTube
|
|
choice_both_hint: Complete deletion
|
|
youtube_title: Delete from YouTube?
|
|
youtube_message: The video will be removed from YouTube. The replay will remain available on the site.
|
|
youtube_ok: Delete from YouTube
|
|
site_title: Delete from the site?
|
|
site_message_with_youtube: The replay will be removed from the site. The video on YouTube will stay online.
|
|
site_message_only: You're about to permanently delete this replay from the site. This action cannot be undone.
|
|
site_ok: Delete from site
|
|
status:
|
|
deleted: Deleted
|
|
expired: Expired
|
|
failed: Error
|
|
processing: Processing
|
|
expiring_soon: Expiring soon
|
|
available: Available
|
|
flash:
|
|
web_base:
|
|
login_required: Please log in to continue
|
|
access_denied: Access not allowed
|
|
clubs:
|
|
already_registered: You've already registered a club
|
|
created: Club and first team created.
|
|
created_complete_subscription: Club created. Complete your subscription on this page.
|
|
updated: Club updated.
|
|
complete_billing_first: Complete your billing details before activating a premium plan.
|
|
comped_change_denied: "This plan is a complimentary subscription managed by Match Live TV. To switch to a paid subscription, contact support."
|
|
stripe_not_configured: Payments not configured on the server yet
|
|
already_on_plan: "You're already on %{plan} (%{price})."
|
|
change_already_scheduled: "The switch to %{plan} is already scheduled from %{date}."
|
|
stripe_error: "Stripe error: %{message}"
|
|
youtube_oauth_not_configured: YouTube OAuth not configured on the server
|
|
youtube_disconnected: Club YouTube channel disconnected
|
|
portal_not_configured: Payment portal not configured
|
|
checkout_success: "Payment completed! Active plan: %{plan}."
|
|
checkout_canceled: Payment canceled. No charge was made.
|
|
club_billing:
|
|
profile_saved_proceed_payment: Details saved. Proceed with payment.
|
|
profile_updated: Billing details updated.
|
|
stripe_not_configured: Stripe not configured.
|
|
subscription_canceled: "Subscription canceled. It stays active until %{date}; from that day you'll switch to the Free plan."
|
|
stripe_error: "Stripe error: %{message}"
|
|
invoice_pdf_unavailable: Invoice PDF not available.
|
|
club_recordings:
|
|
not_authorized: Not authorized
|
|
teams:
|
|
added: "Team «%{name}» added."
|
|
updated: Team updated.
|
|
now_staff: Your account is now a broadcast manager.
|
|
staff_role_removed: Staff role removed from your account.
|
|
invite_link_generated: "Invite link generated (valid for 7 days)"
|
|
invite_email_sent: "Invite sent to %{email} (link valid for 7 days)"
|
|
invite_email_failed: "Invite created, but the email to %{email} could not be sent. Copy and share the link below."
|
|
access_revoked: Access revoked
|
|
invitation_canceled: Invitation canceled
|
|
youtube_disconnected: Club YouTube channel disconnected
|
|
matches:
|
|
scheduled: "Match scheduled: %{opponent}. Start streaming from the app once you're at the venue."
|
|
updated: Match updated.
|
|
close_live_before_delete: Close the live stream before deleting this match.
|
|
deleted: Match deleted.
|
|
schedule_denied: Only a broadcast manager or the club owner can schedule matches.
|
|
club_matches:
|
|
invalid_team: Select a valid team.
|
|
scheduled: "Match scheduled: %{team} vs %{opponent}."
|
|
no_schedulable_teams: You don't have permission to schedule matches in this club.
|
|
team_roster_members:
|
|
added: "%{name} added to the roster."
|
|
updated: Profile updated.
|
|
removed: "%{name} removed from the roster."
|
|
invitations:
|
|
invalid_or_expired: Invalid or expired invitation
|
|
invalid: Invalid invitation
|
|
wrong_email: "This invitation is for %{email}"
|
|
joined_team: You've joined the team!
|
|
signup_to_accept: "Sign up with %{email} to accept the invitation"
|
|
registrations:
|
|
accept_terms_required: You must accept the privacy policy and terms of service to register.
|
|
welcome_to_team: Welcome to the team!
|
|
account_created: Account created. Now register your club.
|
|
sessions:
|
|
welcome_back: Welcome back!
|
|
invalid_credentials: Invalid email or password
|
|
logged_out: Logged out
|
|
unauthorized: Unauthorized
|
|
invalid_token: Invalid token
|
|
password_resets:
|
|
email_sent: If the email is registered, you'll receive a password reset link shortly.
|
|
invalid_or_expired_link: Invalid or expired link. Request a new password reset.
|
|
password_min_length: Password must be at least 8 characters
|
|
password_too_short: Password must be at least 8 characters
|
|
password_too_long: Password cannot exceed 72 characters
|
|
password_too_weak: "Password must include at least 3 of: lowercase, uppercase, numbers and symbols"
|
|
password_same_as_current: New password must be different from the current password
|
|
password_mismatch: Passwords don't match
|
|
password_updated: Password updated. You can now log in.
|
|
accounts:
|
|
name_required: Name is required
|
|
profile_updated: Profile updated.
|
|
password_current_incorrect: Current password is incorrect
|
|
password_too_short: Password must be at least 8 characters
|
|
password_too_long: Password cannot exceed 72 characters
|
|
password_too_weak: "Password must include at least 3 of: lowercase, uppercase, numbers and symbols"
|
|
password_same_as_current: New password must be different from the current password
|
|
password_mismatch: Passwords do not match
|
|
password_updated: Password updated.
|
|
password_update_failed: Unable to update password
|
|
replay:
|
|
download_unavailable: Download not available
|
|
not_available: Replay not available
|
|
live:
|
|
index:
|
|
meta_title: "Live youth matches happening now — Match Live TV"
|
|
meta_description: "Watch live streams of youth matches happening right now and upcoming scheduled games. Search for your team and open the link with no app to install."
|
|
club_back_link: "← %{name}"
|
|
club_title: "Live streams and matches — %{name}"
|
|
club_hint: "Only teams from this club: streams in progress and matches scheduled from the app or website."
|
|
club_replay_link: "%{name} replays"
|
|
default_title: "Live streams and upcoming matches"
|
|
default_hint: "Search by club, team, opponent or venue: find active streams and scheduled matches."
|
|
replay_archive_link: "Past live streams — replay archive"
|
|
schedule_match_link: "Schedule a match"
|
|
search_placeholder_club: "Search club, team, opponent or venue…"
|
|
search_placeholder_default: "E.g. Crazy Volley, Serie D, opponent…"
|
|
search_aria_label: "Search team"
|
|
search_button: "Search"
|
|
reset_link: "Reset"
|
|
results_hint: "Results for «%{query}»%{club_suffix}: %{live_count} live · %{upcoming_count} upcoming"
|
|
results_hint_club_suffix: " in %{name}"
|
|
section_live_now: "Live now"
|
|
badge_on_air: "On air"
|
|
badge_live: "Live"
|
|
badge_paused: "Paused"
|
|
badge_reconnecting: "Reconnecting"
|
|
badge_starting: "Starting"
|
|
badge_scheduled: "Scheduled"
|
|
watch_link: "Watch live →"
|
|
section_upcoming: "Upcoming matches"
|
|
upcoming_hint: "Scheduled from the app or website: the stream will start once staff begin broadcasting."
|
|
empty_soft_title: "No live stream right now."
|
|
empty_soft_body: "Check back at the scheduled time: once the team starts streaming, the match will appear under «Live now»."
|
|
empty_club_title: "No live streams or scheduled matches for %{name}."
|
|
empty_club_schedule_link: "Schedule the first match"
|
|
empty_club_schedule_suffix: " or from the Match Live TV app."
|
|
empty_club_ask_staff: "Ask the club owner or a streaming manager to schedule a match."
|
|
empty_club_add_team_html: "Add a team from the %{club_link} and schedule the first match."
|
|
empty_club_page_link: "club page"
|
|
empty_club_back_link: "← Back to the club"
|
|
empty_hero_title: "No live stream right now — but you can already get organized"
|
|
empty_hero_body: "If your team uses Match Live TV, the match can be scheduled from the phone with a date and time. Parents and relatives will find the stream here as kick-off approaches."
|
|
empty_hero_list_item1: "Schedule the game from the app (without starting the stream right away)"
|
|
empty_hero_list_item2: "The match appears under «Upcoming matches» with time and venue"
|
|
empty_hero_list_item3: "Streaming only starts when you press start in the gym"
|
|
empty_hero_cta_signup: "Register your team"
|
|
empty_hero_cta_features: "See how it works"
|
|
demo_aria_label: "Example of an active live stream"
|
|
demo_label: "Example — this is how an active stream looks"
|
|
demo_meta: "PalaTigers · Match Live TV"
|
|
demo_sets: "Set 2 · Sets won 1-0"
|
|
show:
|
|
back_to_all: "← All live streams"
|
|
title: "%{club_name} · %{team_name} vs %{opponent_name} — Live stream"
|
|
meta_description: "Follow %{club_name} live — %{team_name} vs %{opponent_name}%{location}. Watch from your browser, no app to install."
|
|
meta_description_location: " — %{location}"
|
|
stream_ended_title: "Live stream ended"
|
|
stream_ended_body: "The stream for this match has been closed."
|
|
stream_ended_closed_at: "Closed on %{date}"
|
|
stream_ended_hint: "The score is visible in the video if the stream was still in progress."
|
|
stream_ended_reload_hint: "Reload the page for the last recorded status."
|
|
all_live_link: "All live streams"
|
|
youtube_title: "Live on YouTube"
|
|
youtube_available_body: "This match is broadcast on the Match Live TV YouTube channel, not on the site player."
|
|
youtube_watch_link: "Watch on YouTube"
|
|
youtube_preparing_body: "We're preparing the stream on the YouTube channel. Refresh in a few seconds."
|
|
youtube_hint: "Only share the YouTube link with fans and the club."
|
|
play_hint: "▶ Start the stream"
|
|
offline_msg: "The stream isn't available yet. It updates automatically once it's back on air."
|
|
awaiting_msg: "Waiting for the signal from the phone — open the camera in the app and check the stream has started (not paused)."
|
|
paused_msg: "Broadcast paused — the stream continues (server cover)."
|
|
js_reconnecting_awaiting: "Reconnecting - waiting for video from the event"
|
|
overlays:
|
|
badge_ended: "Ended"
|
|
badge_waiting: "Waiting"
|
|
replay:
|
|
index:
|
|
meta_title: "Replay — Match Live TV"
|
|
meta_description: "Replay archive of sports live streams on Match Live TV. Search by club, team or opponent."
|
|
back_to_live: "← Live streams"
|
|
title: "Past live streams"
|
|
hint: "Public replays from sports clubs — covers matches already broadcast."
|
|
search_placeholder: "E.g. Tigers Volley, opponent, club, venue…"
|
|
search_aria_label: "Search replays"
|
|
search_button: "Search"
|
|
reset_link: "Reset"
|
|
club_filter_label: "Club"
|
|
club_filter_all: "All clubs"
|
|
results_hint: "Results for «%{query}»%{club_suffix}: %{count} replays"
|
|
results_hint_club_suffix: " · %{name}"
|
|
empty_filtered_title: "No replays found"
|
|
empty_filtered_suffix: " with the selected filters."
|
|
empty_filtered_show_all: "Show all public replays"
|
|
empty_default_title: "No public replays right now."
|
|
empty_default_body: "When a club makes a recording public, it will appear here."
|
|
empty_default_live_link: "Go to live streams"
|
|
show:
|
|
title: "Replay — %{title}"
|
|
meta_description: "Replay %{title} on Match Live TV."
|
|
back_to_replays: "← Past live streams"
|
|
processing_title: "Replay processing"
|
|
processing_body: "The recording is being prepared. You'll get an email when it's ready."
|
|
badge_label: "REPLAY"
|
|
meta_line_duration: "Duration %{value}"
|
|
meta_line_until: "Until %{date}"
|
|
meta_line_public: "Public"
|
|
meta_line_private: "Private (link)"
|
|
download_link: "Download MP4"
|
|
youtube_link: "Open on YouTube"
|
|
youtube_only_body: "Replay on YouTube (no server copy available)."
|
|
file_missing_title: "File not available"
|
|
file_missing_body: "The video is no longer on the server (archive removed or migrating)."
|
|
file_missing_meta: "Recorded duration: %{duration} · %{size}"
|
|
failed_title: "Replay not available"
|
|
failed_default_body: "Error processing the recording."
|
|
unavailable_title: "Replay not available"
|
|
unavailable_body: "This recording is no longer accessible."
|
|
team_pages:
|
|
index:
|
|
meta_title: "Teams on Match Live TV — Youth sports live streams and replays"
|
|
meta_description: "Discover the youth sports teams broadcasting on Match Live TV. Search by name, filter by sport, find live streams in progress and replay archives."
|
|
heading: "Teams on Match Live TV"
|
|
hint: "Clubs and teams with live streams, public replays or scheduled matches. Search for your team and open the page to follow the schedule and archive."
|
|
search_placeholder: "Team name, club, city or gym…"
|
|
search_aria_label: "Search team"
|
|
search_button: "Search"
|
|
sport_label: "Sport"
|
|
sport_all: "All sports"
|
|
chips_label: "Show"
|
|
chip_live: "Live"
|
|
chip_replays: "With replays"
|
|
reset_link: "Reset"
|
|
results_found: "%{count} teams found"
|
|
results_active: "%{count} active teams"
|
|
results_query_suffix: " for «%{query}»"
|
|
results_sport_suffix: " · %{sport}"
|
|
badge_live: "Live"
|
|
badge_upcoming: "%{count} upcoming"
|
|
badge_replay: "%{count} replays"
|
|
empty_filtered_title: "No teams found"
|
|
empty_filtered_suffix: " with the selected filters."
|
|
empty_filtered_show_all: "Show all active teams"
|
|
empty_default_title: "No active teams right now."
|
|
empty_default_body: "When a club starts streaming or publishes replays, it will appear here."
|
|
empty_default_live_link: "Go to live streams"
|
|
footer_live_link: "Live streams in progress"
|
|
footer_replay_link: "Replay archive"
|
|
show:
|
|
title: "%{team} — %{club} | Match Live TV"
|
|
meta_description: "Follow %{team} (%{club}): live streams, match schedule and replays on Match Live TV."
|
|
breadcrumb_all_teams: "← All teams"
|
|
live_now_label: "Live now"
|
|
watch_live_link: "Watch the live stream"
|
|
all_live_link: "All live streams"
|
|
replay_archive_link: "Replay archive"
|
|
section_live_now: "Live now"
|
|
section_upcoming: "Upcoming matches"
|
|
upcoming_hint: "Scheduled by the club: the stream will start once staff begin broadcasting."
|
|
section_replays: "Recent replays"
|
|
replays_more_link: "See all %{team} replays →"
|
|
section_roster: "Roster"
|
|
empty_title: "No live streams or replays right now."
|
|
empty_body: "Check back before the next games: live streams, schedule and the team archive will appear here."
|
|
empty_link: "See all live streams"
|
|
score:
|
|
timer_label: "Timer"
|
|
generic_label: "Score"
|
|
sets_label: "Set %{set} · Sets won %{home}-%{away}"
|
|
partial_entry: "Set %{set} %{home}-%{away}"
|
|
partial_entry_no_number: "Set %{home}-%{away}"
|
|
partials_prefix: "Partials: %{value}"
|
|
points_label: "%{team} %{home} - %{away} %{opponent}"
|
|
fallback: "—"
|
|
default_club_name: "Club"
|
|
scheduled_date_format: "%d/%m/%Y at %H:%M"
|
|
scheduled_today: "Today at %{time}"
|
|
scheduled_tomorrow: "Tomorrow at %{time}"
|