Files
MatchLiveTv/backend/config/locales/app.es.yml
T
eminuxandCursor f92ab3a813 Aggiunge bitrate adattivo con qualità minima da regia e telemetria del telefono.
L'encoder scende in congestione e risale piano; la regia imposta il pavimento, mostra lo stato del telefono e apre il selettore dal bitrate colorato.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-13 20:05:16 +02:00

863 lines
43 KiB
YAML

es:
password_policy:
hint: "Mínimo 8 caracteres, con al menos 3 entre: minúsculas, mayúsculas, números y símbolos."
activerecord:
attributes:
user:
password: Contraseña
admin_account:
password: Contraseña
errors:
models:
user:
attributes:
password:
too_short: "es demasiado corta (mínimo %{count} caracteres)"
too_long: "es demasiado larga (máximo %{count} caracteres)"
complexity: "debe incluir al menos 3 entre: minúsculas, mayúsculas, números y símbolos"
admin_account:
attributes:
password:
too_short: "es demasiado corta (mínimo %{count} caracteres)"
too_long: "es demasiado larga (máximo %{count} caracteres)"
complexity: "debe incluir al menos 3 entre: minúsculas, mayúsculas, números y símbolos"
club:
back_to_club: "← Club"
sport_label: Deporte principal
branding_legend: Logo y colores del club
branding:
legend: Identidad visual
inherit_hint: Déjalo vacío para usar el logo y los colores del club.
logo_file_label: Logo (imagen)
logo_preview_alt: Vista previa del logo
no_logo_placeholder: "Sin logo — elige un archivo para la vista previa"
logo_url_label: Logo (URL alternativa)
primary_color_label: Color principal
secondary_color_label: Color secundario
choose_color: Elegir color
quick_colors: Colores rápidos
header_preview_label: Vista previa del encabezado
name_placeholder: Nombre del club / equipo
dashboard:
title: "%{name} — Club"
plan_label: "Plan:"
teams_count_label: "Equipos:"
edit_club: Editar club
subscription: Suscripción
new_team: Nuevo equipo
live_streams: Directos
replay_archive: Archivo de repeticiones
replay_heading: Repetición
available: disponibles
expiring_soon: "por caducar (7 días)"
space_used: espacio usado
views: visualizaciones
teams_heading: Equipos
team_col: Equipo
branding_col: Imagen de marca
branding_custom: Personalizado
branding_inherited: Hereda del club
public_page: Página pública
details: Detalles
matches: Partidos
edit: Editar
no_teams_html: "Aún no hay equipos. %{link}."
add_first_team: Añade el primero
footer_note: "Cada equipo tiene sus propios responsables de transmisión. El marcador desde otro teléfono usa el enlace de control (sin cuenta). La suscripción cubre todo el club."
edit:
title: "Editar club — %{name}"
heading: Editar club
name_label: Nombre del club
save: Guardar
new:
title: "Registrar un club — Match Live TV"
meta_description: Crea tu club deportivo y su primer equipo en Match Live TV.
heading: Tu club
lead: "Registra el club: podrás añadir más equipos (Sub-13, Sub-15, Serie C…)."
section_club: Club
name_label: Nombre del club
name_placeholder: "ej. Crazy Volley Rozzano"
section_first_team: Primer equipo
default_first_team_name: Primer equipo
first_team_name_label: Nombre del equipo
first_team_name_placeholder: "ej. Sub-15"
plan_label: "Plan inicial (para todo el club)"
plan_free: "Free — 1 responsable de transmisión por equipo, 1 directo"
plan_light: Premium Light
plan_full: Premium Full
interval_label: Facturación premium
interval_yearly: "Anual — 40 €/año (Light) o 200 €/año (Full)"
interval_monthly: "Mensual — 5 €/mes (Light) o 20 €/mes (Full)"
submit: Crear club
billing:
title: "Suscripción — %{name}"
comped:
title: Suscripción de cortesía de Match Live TV
plan_prefix: "— plan"
no_payment_html: "No se requiere ningún pago. Para cambios o para pasar a un plan de pago, contacta con %{email_link}."
youtube:
heading: YouTube Live
connected_notice: Canal de YouTube del club conectado correctamente.
light_body_html: "Con el plan <strong>Premium Light</strong>, los directos de YouTube de todos los equipos se emiten en el canal oficial <strong>Match Live TV</strong>. No es necesario conectar un canal del club."
light_ready: "Canal listo · selecciona «YouTube Live» en la app móvil."
light_configuring: El canal de Match Live TV se está configurando en el servidor. Contacta con soporte si YouTube no aparece en la app.
full_connected_html: "Canal conectado para <strong>todo el club</strong>: <strong>%{channel}</strong>"
full_connected_hint: Todos los equipos pueden transmitir a este canal cuando eligen el canal del club en la app.
disconnect: Desconectar canal
disconnect_confirm: "¿Desconectar el canal de YouTube? Los directos usarán el canal de Match Live TV hasta que vuelvas a conectar el tuyo."
full_not_connected_html: "Sin un canal conectado, los directos de YouTube desde la app se emiten en el canal oficial <strong>Match Live TV</strong>. Conecta aquí el canal de YouTube del club (aplica a todos los equipos)."
ready_in_app: "YouTube listo en la app (canal de Match Live TV hasta que conectes el tuyo)."
connect: Conectar el canal de YouTube del club
oauth_not_configured: OAuth de YouTube aún no configurado en el servidor.
requires_full: YouTube en el canal del club requiere el plan Premium Full.
see_plans: Ver planes
team:
back_to_details: "← Detalles del equipo"
sport_label: Deporte
details:
title: "Detalles — %{name}"
meta_description: "Detalles del equipo %{name} en Match Live TV."
nav_aria: Ruta de navegación del equipo
edit_team: Editar equipo
plan_label: "Plan:"
plan_scope_club: (club)
staff_label: "Responsables de transmisión:"
active_matches_label: "Partidos activos:"
unlimited: ilimitados
no_description: Sin descripción todavía.
add_description_link: Añádela desde editar equipo
roster_count_label: en la plantilla
no_photo: Foto del equipo aún no cargada
add_photo_link: Añádela desde editar equipo
public_page: Página pública
streaming_managers: Responsables de transmisión
schedule_matches: Programar partidos
live_streams: Directos
no_people_in_category: Nadie en esta categoría todavía.
youtube_hint_html: "El canal de YouTube del club se configura desde la página %{club_link} (sección YouTube Live)."
footer_note: Usa la app móvil con las mismas credenciales para iniciar partidos y directos.
edit:
title: "Editar equipo — %{name}"
club_label: "Club:"
name_label: Nombre del equipo
description_label: Descripción del equipo
description_placeholder: "Presentación del equipo, palmarés, objetivos de la temporada…"
photo_label: "Foto del equipo (grupo o escudo)"
photo_alt: Foto del equipo
branding_legend: Imagen de marca del equipo (personalización)
slug_label: Dirección de la página pública
slug_hint_html: "Padres y aficionados encuentran el equipo en <strong>%{base_url}/squadre/%{slug}</strong>"
slug_title: "Solo letras minúsculas, números y guiones"
roster_public_label: Mostrar la plantilla en la página pública
roster_public_hint: Si está activado, jugadores y staff son visibles para cualquiera con el enlace. Puedes dejarlo desactivado por privacidad.
club_colors_label: "Colores del club:"
submit: Guardar equipo
new:
title: "Nuevo equipo — %{name}"
heading: Nuevo equipo
club_label: "Club:"
name_label: Nombre del equipo
name_placeholder: "ej. Sub-13, Serie C"
branding_legend: Personalización de imagen de marca (opcional)
submit: Añadir equipo
invite:
title: "Staff de transmisión — %{name}"
heading: Responsables de transmisión
assigned_label: "Asignados:"
per_team_note: (por equipo, renovación anual)
info: "El responsable de transmisión inicia el directo desde la app (cámara en trípode). Para el marcador desde un segundo teléfono no hace falta cuenta: comparte el <strong>enlace de control</strong> desde la pantalla de transmisión (WhatsApp, correo, SMS, etc.)."
self_assign_hint_html: "<strong>%{email}</strong> — puedes encargarte tú de la cámara y el marcador, o invitar a otros para la transmisión."
self_assign_submit: Yo me encargo — responsable de transmisión
invite_other_heading: Invitar a otro correo
email_label: Correo del responsable de transmisión
submit: Generar enlace de acceso
share_hint: "Comparte (válido 7 días):"
billing:
title: "Suscripción — %{name}"
team_label: "Equipo:"
current_plan_label: "Plan actual:"
staff_line: "Staff de transmisión: %{count} / año"
matches_line: "Partidos: %{count} simultáneos"
replay_line: "Repetición: %{value}"
replay_days: "%{count} días"
replay_none: "no"
youtube_line: "YouTube: %{value}"
youtube_mltv: Match Live TV
youtube_club: canal del club
youtube_none: "no"
current_plan: Plan actual
manage_club_subscription: Gestionar suscripción del club
stripe_not_configured: Stripe no configurado
contact_lead: "¿Necesidades diferentes?"
contact_cta: Contáctanos
contact_trailer: para una oferta a medida.
club_payments_link: Pagos y facturas del club
streaming_staff:
self_account_heading: "Tu cuenta (%{email})"
self_account_hint: "Puedes gestionar la transmisión desde la app. Para el marcador desde otro teléfono, comparte el <strong>enlace de control</strong> durante el directo (no hace falta una segunda cuenta)."
self_assign_submit: Yo me encargo — responsable de transmisión
staff_heading: Responsables de transmisión (app)
col_name: Nombre
col_email: Correo
col_role: Rol
role_transmission: Transmisión
you_suffix: (tú)
clear_self_staff: Quitar rol de staff
clear_self_staff_confirm: "¿Quitar el rol de staff de tu cuenta?"
revoke: Revocar
revoke_confirm: "¿Revocar el acceso a %{name}?"
no_staff: Aún no hay responsables de transmisión.
invite_someone: Invitar a alguien
pending_invitations_heading: Invitaciones pendientes
col_email_short: Correo
col_expires: Caduca
cancel_invitation: Cancelar
no_pending: No hay solicitudes pendientes.
archive_heading: Archivo de repeticiones
col_match: Partido
col_date: Fecha
col_duration: Duración
col_expiry: Caducidad
col_status: Estado
watch: Ver
manage_all_replays: Gestionar todas las repeticiones
no_recordings: Aún no hay repeticiones. Las grabaciones aparecen aquí al terminar los directos Premium.
matches:
back_to_list: "← Lista de partidos"
opponent_label: Rival
opponent_placeholder: "ej. Volley Milano"
location_label: "Lugar (opcional)"
location_placeholder: "Pabellón, ciudad"
datetime_label: Fecha y hora
form_hint: "El directo no se inicia solo: aparecerá en la app y en el sitio web. Iniciarás la transmisión desde tu teléfono cuando estés en el lugar."
edit:
title: "Editar partido — %{name}"
heading: Editar partido
submit: Guardar cambios
new:
title: "Programar partido — %{name}"
heading: Programar partido
submit: Guardar en el calendario
index:
title: "Partidos — %{name}"
heading: "Partidos — %{name}"
lead: "Programa aquí desde el ordenador la fecha, el rival y el lugar. Cuando estés en el pabellón, abre la app Match Live TV, selecciona este equipo e inicia el directo del partido."
schedule_match: Programar partido
team_details: Detalles del equipo
live_and_schedule: Directos y calendario
col_opponent: Rival
col_datetime: "Fecha y hora"
col_location: Lugar
col_status: Estado
no_time: Sin horario
no_location: "—"
edit: Editar
delete: Eliminar
delete_confirm: "¿Eliminar este partido?"
empty_html: "Aún no hay partidos programados. %{link}."
schedule_first: Programa el primero
club_new:
title: "Programar partido — %{name}"
back_link: "← Directos y partidos"
heading: Programar partido
admin_hint: "· Puedes elegir cualquier equipo del club"
staff_hint: "· Solo los equipos donde eres responsable de transmisión"
team_label: Equipo
submit: Guardar en el calendario
status:
active: En curso / por reanudar
scheduled: Programado
ready: Listo
no_time: Sin horario
roster:
back_to_details: "← Detalles del equipo"
category:
staff: Staff
coach: Entrenadores
manager: Directivos
player: Jugadores
role:
coach: Entrenador
manager: Directivo
staff: Staff
player: Jugador
player_numbered: "Jugador n.º %{number}"
errors:
role_invalid: no es un rol válido para este deporte
photo_invalid_type: debe ser PNG, JPEG o WebP
role_select_blank: "— Selecciona un rol —"
edit:
title: "Editar — %{name}"
member_form:
edit_heading: Editar ficha
new_heading: Añadir persona
lead: Completa los campos y guarda para actualizar la plantilla.
category_label: Grupo
full_name_label: Nombre y apellidos
full_name_placeholder: "ej. Mario Rossi"
role_player_label: Posición en el campo
role_other_label: "Rol (opcional)"
role_other_placeholder: "ej. Entrenador principal, Presidente, Fisioterapeuta"
jersey_label: Número de camiseta
jersey_placeholder: "ej. 7"
bio_label: Descripción breve
bio_placeholder: "Breve presentación para la ficha…"
photo_label: Foto
photo_hint: Sin foto se mostrará un avatar con los colores del equipo.
submit_edit: Guardar ficha
submit_new: Añadir a la plantilla
person_card:
edit: Editar
remove: Quitar
remove_confirm: "¿Quitar a %{name} de la plantilla?"
billing:
heading: Suscripción
entity_types:
company: "Club / entidad con NIF/CIF"
individual: Persona física
nonprofit: Asociación sin ánimo de lucro
profile_errors:
entity_type: Tipo de titular
legal_name: Razón social o nombre del titular
email: Correo de facturación
address: Dirección
city: Ciudad
province: "Provincia (código de 2 letras)"
postal_code: Código postal
country: "País (ISO)"
vat_number: NIF/CIF
fiscal_code: Código fiscal
vat_or_fiscal: NIF/CIF o código fiscal
sdi_or_pec: "Código destinatario SDI (7 caracteres) o correo certificado (PEC)"
sdi_invalid: "Código destinatario SDI (7 caracteres)"
actions:
current_plan: Plan actual
contact_for_free: "Para pasar al plan Free, contacta con soporte."
stripe_not_configured: Stripe no configurado
stripe_prices_not_configured: Precios de Stripe no configurados
complete_billing_prefix: Completa tus datos de facturación antes de activar un plan premium.
profile_incomplete_default: Completa tus datos de facturación antes de activar un plan premium.
profile_missing: "Faltan: %{fields}."
profile:
title: "Datos de facturación — %{name}"
heading: Datos de facturación
lead: "Club: %{name}. Introduce los datos para el encabezado de las facturas y el envío por SDI o PEC."
required_notice: Obligatorios para suscribirte a un plan premium.
after_save_hint_html: "Después de guardar podrás proceder al pago de <strong>%{plan}</strong>."
submit: Guardar datos de facturación
back_to_billing: "← Suscripción"
fields:
legend: Datos de facturación
legend_hint: "Todos los campos marcados son obligatorios para suscribirte a un plan premium y para emitir facturas. Los clubes necesitan NIF/CIF; las personas físicas, el código fiscal. Necesitas SDI o correo certificado (PEC). Los pagos siguen gestionados de forma segura por Stripe."
entity_type_label: "Tipo de titular *"
legal_name_label: "Razón social / nombre y apellidos *"
legal_name_placeholder: "ej. ASD Tigers Volley"
vat_number_label: "NIF/CIF * (club)"
fiscal_code_label: "Código fiscal * (persona física)"
fiscal_code_placeholder: RSSMRA80A01H501U
email_label: "Correo de facturación *"
email_placeholder: administracion@club.es
phone_label: "Teléfono (opcional)"
address_label: "Dirección *"
address_placeholder: "Calle Roma 1"
city_label: "Ciudad *"
province_label: "Prov. *"
province_placeholder: MI
postal_code_label: "Código postal *"
country_label: "País (ISO) *"
recipient_code_label: "Código destinatario SDI (7 car.) *"
recipient_code_placeholder: XXXXXXX
pec_label: "PEC (alternativa a SDI) *"
pec_placeholder: pec@club.es
documents:
heading: Pagos y facturas
lead: Historial de los pagos del club y las facturas emitidas por Match Live TV.
incomplete_title: Datos de facturación incompletos.
incomplete_body: Completa razón social, dirección, NIF/CIF y SDI o PEC para recibir las facturas por correo.
complete_now: Completar ahora
holder_label: "Titular: %{summary}"
edit_data: Editar datos
table_heading: Pagos y facturas
col_date: Fecha
col_description: Descripción
col_amount: Importe
col_status: Estado del pago
col_invoice: Factura
download_pdf: Descargar PDF
pdf_preparing: PDF en preparación
no_payments: Aún no hay pagos registrados. Aparecerán aquí tras una suscripción premium.
subscription_status:
club_label: "Club: %{name}"
current_plan_label: "Plan actual: %{plan}"
comped_suffix: (cortesía de Match Live TV)
valid_for_all_teams: (válido para todos los equipos)
manage_subscription: Gestionar suscripción
cancel_scheduled_html: "Suscripción válida hasta el <strong>%{date}</strong>, luego plan Free."
change_pending_html: "Desde el <strong>%{date}</strong> pasarás a <strong>%{plan}</strong>%{interval}. Hasta entonces sigue activo <strong>%{current_plan}</strong>."
end_of_period: fin del periodo
next_renewal: próxima renovación
next_renewal_label: "Próxima renovación: %{date}"
plan_change_info:
trigger_label: Información sobre cambio de plan y facturación
title: Cambio de plan y facturación
subscription_cancel:
scheduled_title: Cancelación programada.
scheduled_body_html: "El plan <strong>%{plan}</strong> sigue activo hasta el <strong>%{date}</strong>. A partir de ese día, el club pasará automáticamente al plan <strong>Free</strong>."
scheduled_end_of_period: fin del periodo ya pagado
scheduled_support_hint: Para restablecer la suscripción antes de su vencimiento, contacta con el soporte de Match Live TV.
info: "Puedes cancelar en cualquier momento: la suscripción sigue siendo válida hasta el final del periodo ya pagado, luego pasas al plan Free sin cargos adicionales."
cancel_button: Cancelar suscripción
confirm_with_date: "¿Confirmas la cancelación? El plan %{plan} seguirá activo hasta el %{date}, luego pasarás a Free."
confirm_default: "¿Confirmas la cancelación de la suscripción?"
stripe_secure:
compact_html: "Pagos premium procesados de forma segura mediante <strong>Stripe</strong>."
full_html: "Los pagos de los planes premium se procesan de forma <strong>segura</strong> mediante <strong>Stripe</strong> (certificación PCI DSS). Match Live TV nunca almacena los números completos de la tarjeta."
messages:
upgrade_completed_with_amount: "Mejora a %{plan} (%{interval}) completada. Cargo inmediato: %{amount}."
upgrade_completed_pending_charge: "Mejora a %{plan} (%{interval}) completada. El cargo de la diferencia se está procesando en la tarjeta guardada."
next_renewal: la próxima renovación
current_plan_generic: el plan actual
downgrade_scheduled: "Cambio a %{plan} (%{interval}) programado: sigues en %{current_name} hasta el %{when}. Sin cargo adicional ahora; desde el próximo ciclo pagarás el nuevo precio."
activate_button: "Activar %{plan} — %{price}"
switch_button: "Cambiar a %{plan} — %{price}"
upgrade_info_line: "Mejora (plan superior o cambio a facturación anual): la diferencia se cobra de inmediato en la tarjeta guardada en Stripe."
downgrade_info_line: "Downgrade entre planes de pago (p. ej. Full → Light): el nuevo plan se activa desde la próxima renovación; hasta entonces se mantienen las funciones del plan actual, sin cargo adicional ahora."
already_requested_line: "Ya has solicitado %{plan} desde el %{when}: hasta entonces sigue activo %{current_plan}."
regia:
meta_title_fallback: "Control — Match Live TV"
title: "Control — %{home} vs %{away}"
subtitle_prefix: "Control ·"
status:
ended: Finalizada
paused: En pausa
live: En directo
waiting: En espera
live_share_label: Directo
share_live: Compartir directo
share_action: Compartir
copy_link: Copiar enlace
copy_action: Copiar
copy_live: Copiar directo
copy_regia: Copiar control
links_nav: Acciones rápidas
regia_share_label: Control
stream_controls_label: Live
share_regia: Compartir enlace de control
preview_ended: Directo finalizado
preview_waiting: Vista previa a la espera de señal…
preview_hide: Ocultar vista previa
preview_show: Mostrar vista previa
preview_off_hint: Vista previa apagada · sin descarga de vídeo
pause: Pausar directo
resume: Reanudar directo
stop: Finalizar directo
min_quality:
label: Calidad mínima de transmisión
summary: Calidad
hint: El encoder no baja de este nivel. Automática adapta el bitrate para reducir los cortes.
recommend: "Se recomienda Automática: se adapta a la red y al teléfono, sin forzar el máximo."
auto: Automática
telemetry:
label: Teléfono
waiting: Esperando al teléfono…
stale: El teléfono no responde
just_now: ahora
seconds_ago: "hace %{n}s"
publisher_on: RTMP ok
publisher_off: RTMP ausente
battery: Batería
network: Red
bitrate: Bitrate
bitrate_max: "máx %{n}"
bitrate_title: "%{current} Mbps actuales · máximo %{target} Mbps"
bitrate_tap: Toca para definir la calidad mínima
fps: FPS
thermal: Temp.
thermal_nominal: OK
thermal_fair: Caliente
thermal_serious: Muy caliente
thermal_critical: Crítica
modal:
set_won_title: Set ganado
confirm: Cerrar set
cancel: Cancelar
board:
next_period: Siguiente cuarto
next_half: Siguiente parte
close_set: Cerrar set
free_score: Marcador libre
stopwatch: Cronómetro
generic_score: Marcador
start: Iniciar
pause: Pausa
reset: Reiniciar
points_suffix: pts
partials_prefix: "Parciales:"
set_label: "Set %{number}"
js:
period_updated: Periodo actualizado
now_in_period: "Ahora en %{period}"
set_won_body: "%{winner} ha ganado el set. ¿Cerrar el set?"
match_won_title: Partido ganado
match_won_body: "%{winner} ha ganado el partido. ¿Cerrar la retransmisión?"
close_set_confirm: "¿Confirmas el cierre del set actual?"
score_update_error: Error al actualizar el marcador
generic_error: Error
sets_line: "Set %{current} · Sets ganados %{home}-%{away}"
quarter_label: "C%{n}"
half_label: "%{n}º tiempo"
overtime_basket: "PR%{n}"
overtime_other: Prórroga
unknown_period: "—"
resumed: Retransmisión reanudada
paused_cover: "Retransmisión en pausa — cortinilla al aire"
closed: Retransmisión finalizada
resume_error: Error al reanudar la retransmisión
pause_error: Error al pausar la retransmisión
close_error: Error al cerrar
close_confirm: "¿Cerrar definitivamente la retransmisión?"
link_unavailable: Enlace no disponible
link_copied: Enlace copiado
copy_prompt: "Copia el enlace:"
share_regia_text: "Abre este enlace para gestionar el marcador en directo:"
share_live_text: "Mira la retransmisión en Match Live TV:"
min_quality_updated: Calidad mínima actualizada
min_quality_error: Error al actualizar la calidad mínima
recordings:
archive:
back_prefix: "←"
heading: Archivo de repeticiones
admin_suffix: (admin)
lead_html: "Gestiona grabaciones, visibilidad y descargas. <strong>Privado</strong> = enlace no indexado, no aparece en la página pública <code>/replay</code>. Al eliminar una repetición también se eliminan los archivos del servidor y el vídeo de YouTube vinculado."
kpi_available: Repeticiones disponibles
kpi_expiring: "Por caducar (7 días)"
kpi_space: Espacio de archivo
kpi_views: Visualizaciones totales
team_label: Equipo
team_all: Todos
status_label: Estado
status_all: Todos
status_ready: Disponibles
status_processing: En proceso
status_expired: Caducados / error
col_preview: Vista previa
col_match: Partido
col_team: Equipo
col_details: Detalles
col_status: Estado y visibilidad
col_actions: Acciones
watch_replay: Ver repetición
processing_title: Procesamiento en curso
not_available_title: Repetición no disponible
views_suffix: vis.
expires_prefix: Caduca el
expires_days: "(%{count} días)"
no_expiry: Sin caducidad
new_expiry_title: Nueva fecha de caducidad
save: Guardar
extend_days: "+%{count} días"
extend_title: "Ampliar la caducidad %{count} días"
privacy_public: Público
privacy_private: Privado
privacy_hint_public: "Visible para todos — haz clic para hacerlo privado"
privacy_hint_private: "Solo con enlace — haz clic para hacerlo público"
download_mp4: MP4
download_mp4_title: Descargar MP4
publish_youtube: "YT"
publish_youtube_title: Publicar en YouTube
open_youtube_title: Abrir en YouTube
delete_title: Eliminar repetición
delete_confirm: Elige dónde eliminar la repetición. La operación es irreversible.
no_recordings: No hay grabaciones para los filtros seleccionados.
confirm:
choice_title: "¿Qué quieres eliminar?"
choice_message: Elige de dónde quitar la repetición. La operación es irreversible.
choice_site_label: Solo del sitio
choice_site_hint_with_youtube: El vídeo permanece en YouTube
choice_site_hint_only: Elimina los archivos del sitio
choice_youtube_label: Solo de YouTube
choice_youtube_hint_with_site: Sigue disponible en el sitio
choice_youtube_hint_only: Elimina solo el vídeo de YouTube
choice_both_label: Del sitio y de YouTube
choice_both_hint: Eliminación completa
youtube_title: "¿Eliminar de YouTube?"
youtube_message: El vídeo se eliminará de YouTube. La repetición seguirá disponible en el sitio.
youtube_ok: Eliminar de YouTube
site_title: "¿Eliminar del sitio?"
site_message_with_youtube: La repetición se eliminará del sitio. El vídeo de YouTube seguirá en línea.
site_message_only: Estás a punto de eliminar definitivamente esta repetición del sitio. La operación es irreversible.
site_ok: Eliminar del sitio
status:
deleted: Eliminado
expired: Caducado
failed: Error
processing: En proceso
expiring_soon: Por caducar
available: Disponible
flash:
web_base:
login_required: Inicia sesión para continuar
access_denied: Acceso no permitido
clubs:
already_registered: Ya has registrado un club
created: Club y primer equipo creados.
updated: Club actualizado.
complete_billing_first: Completa tus datos de facturación antes de activar un plan premium.
comped_change_denied: "Este plan es una suscripción de cortesía gestionada por Match Live TV. Para pasar a una suscripción de pago, contacta con soporte."
stripe_not_configured: Pagos aún no configurados en el servidor
already_on_plan: "Ya tienes el plan %{plan} (%{price})."
change_already_scheduled: "El cambio a %{plan} ya está programado desde el %{date}."
stripe_error: "Error de Stripe: %{message}"
youtube_oauth_not_configured: OAuth de YouTube no configurado en el servidor
youtube_disconnected: Canal de YouTube del club desconectado
portal_not_configured: Portal de pagos no configurado
checkout_success: "¡Pago completado! Plan activo: %{plan}."
checkout_canceled: Pago cancelado. No se realizó ningún cargo.
club_billing:
profile_saved_proceed_payment: Datos guardados. Procede con el pago.
profile_updated: Datos de facturación actualizados.
stripe_not_configured: Stripe no configurado.
subscription_canceled: "Suscripción cancelada. Sigue activa hasta el %{date}; a partir de ese día pasarás al plan Free."
stripe_error: "Error de Stripe: %{message}"
invoice_pdf_unavailable: PDF de la factura no disponible.
club_recordings:
not_authorized: No autorizado
teams:
added: "Equipo «%{name}» añadido."
updated: Equipo actualizado.
now_staff: Tu cuenta ahora es responsable de transmisión.
staff_role_removed: Rol de staff eliminado de tu cuenta.
invite_link_generated: "Enlace de invitación generado (válido 7 días)"
access_revoked: Acceso revocado
invitation_canceled: Invitación anulada
youtube_disconnected: Canal de YouTube del club desconectado
matches:
scheduled: "Partido programado: %{opponent}. Inicia la transmisión desde la app cuando estés en el lugar."
updated: Partido actualizado.
close_live_before_delete: Cierra el directo antes de eliminar este partido.
deleted: Partido eliminado.
schedule_denied: Solo un responsable de transmisión o el titular del club pueden programar partidos.
club_matches:
invalid_team: Selecciona un equipo válido.
scheduled: "Partido programado: %{team} vs %{opponent}."
no_schedulable_teams: No tienes permisos para programar partidos en este club.
team_roster_members:
added: "%{name} añadido a la plantilla."
updated: Ficha actualizada.
removed: "%{name} eliminado de la plantilla."
invitations:
invalid_or_expired: Invitación no válida o caducada
invalid: Invitación no válida
wrong_email: "Esta invitación es para %{email}"
joined_team: "¡Te has unido al equipo!"
signup_to_accept: "Regístrate con %{email} para aceptar la invitación"
registrations:
accept_terms_required: Debes aceptar la política de privacidad y los términos de servicio para registrarte.
welcome_to_team: "¡Bienvenido al equipo!"
account_created: Cuenta creada. Ahora registra tu club.
sessions:
welcome_back: "¡Bienvenido de nuevo!"
invalid_credentials: Correo o contraseña no válidos
logged_out: Sesión cerrada
unauthorized: No autorizado
invalid_token: Token no válido
password_resets:
email_sent: Si el correo está registrado, recibirás en breve un enlace para restablecer la contraseña.
invalid_or_expired_link: Enlace no válido o caducado. Solicita un nuevo restablecimiento de contraseña.
password_min_length: La contraseña debe tener al menos 8 caracteres
password_too_short: La contraseña debe tener al menos 8 caracteres
password_too_long: La contraseña no puede superar los 72 caracteres
password_too_weak: "La contraseña debe incluir al menos 3 entre: minúsculas, mayúsculas, números y símbolos"
password_same_as_current: La nueva contraseña debe ser distinta de la actual
password_mismatch: Las contraseñas no coinciden
password_updated: Contraseña actualizada. Ya puedes iniciar sesión.
accounts:
name_required: El nombre es obligatorio
profile_updated: Perfil actualizado.
password_current_incorrect: La contraseña actual no es correcta
password_too_short: La contraseña debe tener al menos 8 caracteres
password_too_long: La contraseña no puede superar los 72 caracteres
password_too_weak: "La contraseña debe incluir al menos 3 entre: minúsculas, mayúsculas, números y símbolos"
password_same_as_current: La nueva contraseña debe ser distinta de la actual
password_mismatch: Las contraseñas no coinciden
password_updated: Contraseña actualizada.
password_update_failed: No se pudo actualizar la contraseña
replay:
download_unavailable: Descarga no disponible
not_available: Repetición no disponible
live:
index:
meta_title: "Partidos juveniles en directo ahora — Match Live TV"
meta_description: "Mira los partidos juveniles en directo ahora mismo y los próximos partidos programados. Busca tu equipo y abre el enlace sin instalar ninguna app."
club_back_link: "← %{name}"
club_title: "Directos y partidos — %{name}"
club_hint: "Solo los equipos de este club: directos en curso y partidos programados desde la app o el sitio web."
club_replay_link: "Repeticiones de %{name}"
default_title: "Directos y partidos programados"
default_hint: "Busca por club, equipo, rival o lugar: encuentra los directos activos y los partidos programados."
replay_archive_link: "Directos pasados — archivo de repeticiones"
schedule_match_link: "Programar partido"
search_placeholder_club: "Buscar club, equipo, rival o lugar…"
search_placeholder_default: "Ej. Crazy Volley, Serie D, rival…"
search_aria_label: "Buscar equipo"
search_button: "Buscar"
reset_link: "Restablecer"
results_hint: "Resultados para «%{query}»%{club_suffix}: %{live_count} en directo · %{upcoming_count} programados"
results_hint_club_suffix: " en %{name}"
section_live_now: "En directo ahora"
badge_on_air: "En emisión"
badge_live: "Live"
badge_paused: "En pausa"
badge_reconnecting: "Reconectando"
badge_starting: "Iniciando"
badge_scheduled: "Programado"
watch_link: "Ver directo →"
section_upcoming: "Próximos partidos"
upcoming_hint: "Programados desde la app o el sitio web: el directo comenzará cuando el staff inicie la transmisión."
empty_soft_title: "Ningún directo en este momento."
empty_soft_body: "Vuelve a la hora indicada: cuando el equipo inicie la transmisión, el partido aparecerá en «En directo ahora»."
empty_club_title: "Ningún directo o partido programado para %{name}."
empty_club_schedule_link: "Programar el primer partido"
empty_club_schedule_suffix: " o desde la app Match Live TV."
empty_club_ask_staff: "Pide al responsable del club o a un encargado de transmisión que programe un partido."
empty_club_add_team_html: "Añade un equipo desde la %{club_link} y programa el primer partido."
empty_club_page_link: "página del club"
empty_club_back_link: "← Volver al club"
empty_hero_title: "Ningún directo ahora — pero ya puedes organizarte"
empty_hero_body: "Si tu equipo usa Match Live TV, el partido se puede programar desde el teléfono con fecha y hora. Padres y familiares encontrarán aquí el directo cuando se acerque el saque inicial."
empty_hero_list_item1: "Programa el partido desde la app (sin iniciar el directo de inmediato)"
empty_hero_list_item2: "El partido aparece en «Próximos partidos» con hora y cancha"
empty_hero_list_item3: "La transmisión solo comienza cuando pulsas iniciar en el pabellón"
empty_hero_cta_signup: "Registra tu equipo"
empty_hero_cta_features: "Descubre cómo funciona"
demo_aria_label: "Ejemplo de un directo activo"
demo_label: "Ejemplo — así se ve un directo activo"
demo_meta: "PalaTigers · Match Live TV"
demo_sets: "Set 2 · Sets ganados 1-0"
show:
back_to_all: "← Todos los directos"
title: "%{club_name} · %{team_name} vs %{opponent_name} — Directo"
meta_description: "Sigue a %{club_name} en directo — %{team_name} vs %{opponent_name}%{location}. Míralo desde el navegador, sin instalar ninguna app."
meta_description_location: " — %{location}"
stream_ended_title: "Directo finalizado"
stream_ended_body: "La transmisión de este partido ha sido cerrada."
stream_ended_closed_at: "Cerrado el %{date}"
stream_ended_hint: "El marcador es visible en el vídeo si el directo aún estaba en curso."
stream_ended_reload_hint: "Recarga la página para ver el último estado registrado."
all_live_link: "Todos los directos"
youtube_title: "Directo en YouTube"
youtube_available_body: "Este partido se transmite en el canal de YouTube de Match Live TV, no en el reproductor del sitio."
youtube_watch_link: "Ver en YouTube"
youtube_preparing_body: "Estamos preparando el directo en el canal de YouTube. Actualiza en unos segundos."
youtube_hint: "Comparte el enlace de YouTube solo con aficionados y el club."
play_hint: "▶ Iniciar el directo"
offline_msg: "El directo aún no está disponible. Se actualiza automáticamente cuando vuelva a emitir."
awaiting_msg: "Esperando la señal del teléfono — abre la cámara en la app y comprueba que el directo esté iniciado (no en pausa)."
paused_msg: "Transmisión en pausa — el flujo continúa (portada de servidor)."
js_reconnecting_awaiting: "Reconectando - esperando el vídeo del evento"
overlays:
badge_ended: "Finalizado"
badge_waiting: "En espera"
replay:
index:
meta_title: "Repetición — Match Live TV"
meta_description: "Archivo de repeticiones de los directos deportivos en Match Live TV. Busca por club, equipo o rival."
back_to_live: "← Directos en curso"
title: "Directos pasados"
hint: "Repeticiones públicas de los clubes deportivos — corresponde a partidos ya transmitidos."
search_placeholder: "Ej. Tigers Volley, rival, club, lugar…"
search_aria_label: "Buscar repetición"
search_button: "Buscar"
reset_link: "Restablecer"
club_filter_label: "Club"
club_filter_all: "Todos los clubes"
results_hint: "Resultados para «%{query}»%{club_suffix}: %{count} repeticiones"
results_hint_club_suffix: " · %{name}"
empty_filtered_title: "No se encontraron repeticiones"
empty_filtered_suffix: " con los filtros seleccionados."
empty_filtered_show_all: "Mostrar todas las repeticiones públicas"
empty_default_title: "No hay repeticiones públicas por el momento."
empty_default_body: "Cuando un club haga pública una grabación, aparecerá aquí."
empty_default_live_link: "Ir a los directos"
show:
title: "Repetición — %{title}"
meta_description: "Repetición %{title} en Match Live TV."
back_to_replays: "← Directos pasados"
processing_title: "Repetición en procesamiento"
processing_body: "La grabación se está preparando. Recibirás un correo cuando esté lista."
badge_label: "REPLAY"
meta_line_duration: "Duración %{value}"
meta_line_until: "Hasta el %{date}"
meta_line_public: "Público"
meta_line_private: "Privado (enlace)"
download_link: "Descargar MP4"
youtube_link: "Abrir en YouTube"
youtube_only_body: "Repetición en YouTube (no hay copia disponible en el servidor)."
file_missing_title: "Archivo no disponible"
file_missing_body: "El vídeo ya no está en el servidor (archivo eliminado o en migración)."
file_missing_meta: "Duración grabada: %{duration} · %{size}"
failed_title: "Repetición no disponible"
failed_default_body: "Error al procesar la grabación."
unavailable_title: "Repetición no disponible"
unavailable_body: "Esta grabación ya no está accesible."
team_pages:
index:
meta_title: "Equipos en Match Live TV — Directos y repeticiones de deporte juvenil"
meta_description: "Descubre los equipos deportivos juveniles que transmiten en Match Live TV. Busca por nombre, filtra por deporte, encuentra directos en curso y archivos de repeticiones."
heading: "Equipos en Match Live TV"
hint: "Clubes y equipos con directos, repeticiones públicas o partidos programados. Busca tu equipo y abre la página para seguir el calendario y el archivo."
search_placeholder: "Nombre del equipo, club, ciudad o pabellón…"
search_aria_label: "Buscar equipo"
search_button: "Buscar"
sport_label: "Deporte"
sport_all: "Todos los deportes"
chips_label: "Mostrar"
chip_live: "En directo"
chip_replays: "Con repeticiones"
reset_link: "Restablecer"
results_found: "%{count} equipos encontrados"
results_active: "%{count} equipos activos"
results_query_suffix: " para «%{query}»"
results_sport_suffix: " · %{sport}"
badge_live: "En directo"
badge_upcoming: "%{count} programados"
badge_replay: "%{count} repeticiones"
empty_filtered_title: "No se encontraron equipos"
empty_filtered_suffix: " con los filtros seleccionados."
empty_filtered_show_all: "Mostrar todos los equipos activos"
empty_default_title: "No hay equipos activos por el momento."
empty_default_body: "Cuando un club inicie directos o publique repeticiones, aparecerá aquí."
empty_default_live_link: "Ir a los directos"
footer_live_link: "Directos en curso"
footer_replay_link: "Archivo de repeticiones"
show:
title: "%{team} — %{club} | Match Live TV"
meta_description: "Sigue a %{team} (%{club}): directos, calendario de partidos y repeticiones en Match Live TV."
breadcrumb_all_teams: "← Todos los equipos"
live_now_label: "En directo ahora"
watch_live_link: "Ver el directo"
all_live_link: "Todos los directos"
replay_archive_link: "Archivo de repeticiones"
section_live_now: "En directo ahora"
section_upcoming: "Próximos partidos"
upcoming_hint: "Programados por el club: el directo comenzará cuando el staff inicie la transmisión."
section_replays: "Repeticiones recientes"
replays_more_link: "Ver todas las repeticiones de %{team} →"
section_roster: "Plantilla"
empty_title: "Ningún directo o repetición por el momento."
empty_body: "Vuelve a comprobar antes de los próximos partidos: aquí aparecerán directos, calendario y el archivo del equipo."
empty_link: "Ver todos los directos"
score:
timer_label: "Cronómetro"
generic_label: "Marcador"
sets_label: "Set %{set} · Sets ganados %{home}-%{away}"
partial_entry: "Set %{set} %{home}-%{away}"
partial_entry_no_number: "Set %{home}-%{away}"
partials_prefix: "Parciales: %{value}"
points_label: "%{team} %{home} - %{away} %{opponent}"
fallback: "—"
default_club_name: "Club"
scheduled_date_format: "%d/%m/%Y a las %H:%M"
scheduled_today: "Hoy a las %{time}"
scheduled_tomorrow: "Mañana a las %{time}"