Ops può correggere dati clienti errati (es. email titolare) dalla scheda società senza interventi manuali sul DB. Co-authored-by: Cursor <cursoragent@cursor.com>
675 lines
27 KiB
YAML
675 lines
27 KiB
YAML
fr:
|
||
admin:
|
||
layout:
|
||
title: "Match Live TV — Admin"
|
||
nav:
|
||
dashboard: Tableau de bord
|
||
ops: Ops
|
||
announcements: Alertes
|
||
clubs: Clubs et équipes
|
||
billing: Facturation
|
||
youtube: YouTube
|
||
sessions: Sessions
|
||
stream_concurrency: Abus de compte
|
||
analytics: Analytics
|
||
costs: Coûts
|
||
stream_nodes: Nœuds stream
|
||
password: Mot de passe
|
||
logout: Déconnexion
|
||
flash:
|
||
login_required: Connectez-vous pour continuer
|
||
login_success: Connexion réussie
|
||
invalid_credentials: Nom d'utilisateur ou mot de passe invalide
|
||
logout_success: Déconnecté
|
||
password_current_incorrect: Le mot de passe actuel est incorrect
|
||
password_too_short: Le nouveau mot de passe doit contenir au moins 8 caractères
|
||
password_too_long: Le nouveau mot de passe ne peut pas dépasser 72 caractères
|
||
password_too_weak: "Le nouveau mot de passe doit inclure au moins 3 parmi : minuscules, majuscules, chiffres et symboles"
|
||
password_same_as_current: "Le nouveau mot de passe doit être différent de l'actuel"
|
||
password_mismatch: Les mots de passe ne correspondent pas
|
||
password_updated: Mot de passe mis à jour
|
||
ops_acknowledged: Incident pris en charge
|
||
ops_resolved: Incident résolu
|
||
ops_muted: Notifications suspendues pendant 24 heures
|
||
stream_node_created: "Nœud lab %{slug} provisionné."
|
||
stream_node_destroyed: "Nœud %{slug} supprimé."
|
||
stream_node_draining: "Nœud %{slug} en drain."
|
||
autoscale_kill_on: "Kill-switch autoscaler activé. Pas de scale-out automatique."
|
||
autoscale_kill_off: "Kill-switch autoscaler désactivé (nécessite aussi STREAM_AUTOSCALE_ENABLED=1)."
|
||
comped_granted: "Abonnement offert %{plan} activé pour %{club}."
|
||
comped_revoked: "Abonnement offert révoqué pour %{club}."
|
||
session_already_terminated: "Session déjà terminée (%{status})."
|
||
session_stopped: Session terminée.
|
||
session_stop_error: "Erreur lors de la fermeture : %{error}"
|
||
session_terminated_no_regia: "Session terminée : impossible de générer le lien de régie."
|
||
session_regia_generated: Lien de régie généré.
|
||
invoice_upload_hint: Chargez le PDF depuis la liste « Paiements à facturer ».
|
||
invoice_draft_created: Brouillon créé. Chargez le PDF depuis la page Facturation ou ci-dessous.
|
||
invoice_issued: "Facture %{number} émise et envoyée à %{email}."
|
||
invoice_updated: "Facture %{number} mise à jour."
|
||
invoice_uploaded: "Facture chargée et envoyée à %{email}."
|
||
club_updated: "Données mises à jour pour %{club}."
|
||
youtube_not_configured: Configurez YOUTUBE_CLIENT_ID et YOUTUBE_CLIENT_SECRET dans .env
|
||
announcement_created: Alerte enregistrée
|
||
announcement_updated: Alerte mise à jour
|
||
announcement_destroyed: Alerte supprimée
|
||
cost_entry_created: Poste de coût enregistré.
|
||
cost_entry_updated: Poste de coût mis à jour.
|
||
cost_entry_destroyed: Poste de coût supprimé.
|
||
common:
|
||
free_plan: Free
|
||
yes: "Oui"
|
||
no: "Non"
|
||
dash: "—"
|
||
live_page: Page en direct
|
||
auth:
|
||
new:
|
||
title: Connexion admin
|
||
username_label: Nom d'utilisateur
|
||
password_label: Mot de passe
|
||
submit: Se connecter
|
||
initial_credentials_html: "Identifiants initiaux : <code>admin</code> / <code>AdminPass123</code>. Changez le mot de passe après la première connexion."
|
||
passwords:
|
||
edit:
|
||
title: Changer le mot de passe
|
||
current_password_label: Mot de passe actuel
|
||
new_password_label: "Nouveau mot de passe (min. 8, au moins 3 types de caractères)"
|
||
confirm_password_label: Confirmer le nouveau mot de passe
|
||
submit: Enregistrer le mot de passe
|
||
cancel: Annuler
|
||
dashboard:
|
||
kpi:
|
||
active_sessions: Sessions actives
|
||
active_sessions_sub: en direct maintenant
|
||
today: Diffusées aujourd'hui
|
||
today_sub: "%{duration} de diffusion"
|
||
month: Diffusées ce mois-ci
|
||
month_sub: "%{duration} au total"
|
||
teams: Équipes
|
||
teams_sub: "%{count} utilisateurs"
|
||
cpu: CPU
|
||
cpu_sub: "charge %{one} / %{five} / %{fifteen}"
|
||
ram: RAM
|
||
ram_sub: "%{used} / %{total}"
|
||
network: Bande passante (totale)
|
||
network_sub: "↑ %{tx} · ↓ %{rx}"
|
||
recordings: Replays archivés
|
||
recordings_sub: "%{count} enregistrements"
|
||
charts:
|
||
cpu: CPU (%)
|
||
ram: RAM (%)
|
||
ops_panel:
|
||
title: État de la plateforme (Ops)
|
||
critical: "%{count} incident(s) critique(s) ouvert(s)"
|
||
view_dashboard: Voir le tableau de bord Ops
|
||
warnings: "%{count} avertissement(s)"
|
||
dashboard_link: Tableau de bord Ops
|
||
none_html: "Aucun incident ouvert. %{link}"
|
||
concurrency_panel:
|
||
title: Abus de compte (deuxième direct)
|
||
count: "%{count} tentative(s) sur les 30 derniers jours"
|
||
view_all: Voir tout
|
||
none: Aucune tentative enregistrée.
|
||
none_html: "Aucune tentative de second direct avec le même compte. %{link}"
|
||
disk:
|
||
system_title: Disque système
|
||
free_label: "Libre : %{free} (%{percent}% utilisé)"
|
||
not_available: Métriques disque non disponibles
|
||
recordings_title: Archive des enregistrements
|
||
recordings_content: "Contenu des enregistrements : %{size}"
|
||
recordings_not_mounted: "Chemin %{path} non monté"
|
||
sessions:
|
||
title: Sessions actives
|
||
table:
|
||
match: Match
|
||
status: Statut
|
||
client: Client
|
||
ingest: Ingest
|
||
start: Début
|
||
link: Lien
|
||
none: Aucune session active pour le moment.
|
||
detail: Détail
|
||
stop: Arrêter
|
||
stop_confirm: Terminer cette session ?
|
||
regia: Régie
|
||
teams:
|
||
title: Équipes
|
||
matches_count: "%{count} matchs"
|
||
view_all: "Voir les clubs (%{count} équipes)"
|
||
stream_nodes:
|
||
title: Nœuds streaming
|
||
providers: "Cloud: %{cloud} · DNS: %{dns}"
|
||
actions_title: Actions
|
||
table_title: Nœuds enregistrés
|
||
empty: Aucun nœud enregistré.
|
||
free_slots:
|
||
one: "%{count} libre"
|
||
other: "%{count} libres"
|
||
kpi:
|
||
autoscaler: Autoscaler
|
||
kill_switch: KILL
|
||
kind: "mode %{kind}"
|
||
free_slots: Slots libres
|
||
soft_slots: "seuil soft ≤ %{soft}"
|
||
spare: Spare
|
||
warm_spare: warm spares prêts
|
||
overflow: Overflow
|
||
overflow_nodes: nœuds cloud/lab
|
||
budget: Budget estimé
|
||
budget_of: "sur €%{budget}/mois (%{ok})"
|
||
autoscale: "Autoscaler %{enabled} · free_slots=%{free} (soft≤%{soft}) · spare=%{spare}/%{warm} · overflow=%{overflow}/%{max} · kind=%{kind}"
|
||
autoscale_budget: "budget €%{eur}/€%{budget} (%{ok})"
|
||
kill_switch_active: "KILL-SWITCH ACTIF"
|
||
engage_kill_switch: "Kill-switch ON"
|
||
clear_kill_switch: "Kill-switch OFF"
|
||
kill_switch_confirm: "Bloquer immédiatement l'autoscaler ?"
|
||
provision_lab: Provisionner lab
|
||
provision_cloud: Provisionner Hetzner
|
||
provision_cloud_confirm: "Créer un serveur Hetzner Cloud + DNS sur mltv-stream.net ?"
|
||
hetzner_token_missing: "Définir HCLOUD_TOKEN pour activer le provisioning Cloud."
|
||
drain: Drain
|
||
destroy: Supprimer
|
||
destroy_confirm: "Supprimer le nœud %{slug} ?"
|
||
hosts_title: DNS lab (/etc/hosts)
|
||
col:
|
||
slug: Slug
|
||
role: Rôle
|
||
status: Statut
|
||
slots: Slots
|
||
hostname: Hostname
|
||
provider: Provider
|
||
ops:
|
||
kpi:
|
||
critical: Critiques ouverts
|
||
warning: Avertissements ouverts
|
||
total: Total ouverts
|
||
open:
|
||
title: Incidents ouverts
|
||
table:
|
||
severity: Sévérité
|
||
kind: Type
|
||
title: Titre
|
||
occurrences: Occ.
|
||
last_seen: Dernier
|
||
none: Aucun incident ouvert. La plateforme semble saine.
|
||
actions:
|
||
acknowledge: Pris en charge
|
||
resolve: Résoudre
|
||
mute: Muet 24h
|
||
resolved:
|
||
title: Résolus (30 derniers jours)
|
||
table:
|
||
resolved_at: Résolu
|
||
none: Aucun incident résolu récemment.
|
||
stream_concurrency:
|
||
index:
|
||
title: Abus de compte
|
||
lead: Tentatives de démarrer un second direct avec le même compte alors qu’un autre était déjà en cours (connecting, live, reconnecting ou en pause).
|
||
results: "%{shown} sur %{total} affichés"
|
||
none: Aucune tentative enregistrée.
|
||
kpi:
|
||
lookback: 30 derniers jours
|
||
lookback_sub: tentatives bloquées
|
||
two_devices: Deux appareils
|
||
two_devices_sub: modèles de téléphone différents
|
||
filters:
|
||
q: Rechercher
|
||
q_placeholder: E-mail, club, match…
|
||
two_devices: Filtre
|
||
two_devices_hint: Uniquement les tentatives depuis des appareils différents
|
||
apply: Filtrer
|
||
reset: Réinitialiser
|
||
table:
|
||
when: Quand
|
||
account: Compte
|
||
club: Club
|
||
occupying: Direct déjà en cours
|
||
attempted: Tentative bloquée
|
||
action:
|
||
start: démarrage
|
||
resume: reprise
|
||
badge:
|
||
two_devices: 2 téléphones
|
||
same_or_unknown: même appareil / n. d.
|
||
clubs:
|
||
index:
|
||
title: Clubs et équipes
|
||
subtitle_html: "Abonnements offerts (sponsors / promotions) et statut YouTube par équipe. Paiements Stripe : %{billing_link}."
|
||
billing_link: Facturation
|
||
table:
|
||
club: Club
|
||
plan: Forfait
|
||
teams: Équipes
|
||
billing_profile: Données fiscales
|
||
comped: Offert
|
||
stripe: Stripe
|
||
quote: Convenu
|
||
manage: Gérer
|
||
invoices: Factures
|
||
show:
|
||
back: "← Clubs et équipes"
|
||
sport_label: "Sport : %{sport}"
|
||
recordings_archive: Archive des replays
|
||
billing_link: Paiements et factures
|
||
youtube_platform_link: Chaîne YouTube plateforme
|
||
youtube_club_label: "YouTube du club :"
|
||
youtube_connected: (connectée)
|
||
youtube_premium_full_not_connected: Premium Full — chaîne du club non connectée (utilise Match Live TV)
|
||
no_channel_hint_html: "Sans chaîne connectée, l'application utilise la chaîne Match Live TV. %{link}."
|
||
link_channel: Connecter la chaîne (page du club)
|
||
profile_title: Coordonnées et données fiscales
|
||
owner_title: Titulaire du compte
|
||
owner_name: Nom
|
||
owner_email: E-mail
|
||
owner_none: Aucun titulaire associé.
|
||
billing_title: Données de facturation
|
||
billing_none: Aucune donnée de facturation renseignée.
|
||
teams_title: Équipes
|
||
no_teams: Aucune équipe enregistrée.
|
||
table:
|
||
team: Équipe
|
||
sport: Sport
|
||
matches_and_details: Matchs et détails
|
||
replay: Replays
|
||
concurrency_title: Tentatives de second direct
|
||
concurrency_lead: Le même compte a tenté de démarrer un autre direct alors qu’un était déjà en cours.
|
||
concurrency_none: Aucune tentative enregistrée pour ce club.
|
||
concurrency_all: Voir tous les abus de compte
|
||
edit_link: Modifier les données
|
||
edit:
|
||
back: "← Retour au club"
|
||
title: "Modifier %{club}"
|
||
lead: "Forcez les données saisies par le client : profil, facturation, titulaire, staff, invitations et équipes."
|
||
cancel: Annuler
|
||
submit: Enregistrer
|
||
billing_hint: Vous pouvez enregistrer un profil incomplet ; le badge sur la fiche reflète l'état.
|
||
staff_hint: Utilisateurs déjà liés aux équipes du club.
|
||
staff_none: Aucun staff lié aux équipes.
|
||
invitations_hint: Uniquement les invitations encore en attente d'acceptation.
|
||
invitations_none: Aucune invitation en attente.
|
||
sections:
|
||
club: Profil du club
|
||
billing: Données de facturation
|
||
owner: Titulaire du compte
|
||
staff: Staff accepté
|
||
invitations: Invitations en attente
|
||
teams: Équipes
|
||
fields:
|
||
name: Nom du club
|
||
sport: Sport
|
||
primary_color: Couleur primaire
|
||
secondary_color: Couleur secondaire
|
||
logo_url: URL du logo
|
||
owner_name: Nom du titulaire
|
||
owner_email: E-mail du titulaire
|
||
staff_name: Nom
|
||
staff_email: E-mail
|
||
invitation_team: Équipe
|
||
invitation_email: E-mail d'invitation
|
||
team_name: Nom de l'équipe
|
||
team_sport: Sport de l'équipe
|
||
errors:
|
||
owner_missing: Aucun titulaire associé à ce club.
|
||
email_taken: "E-mail déjà utilisé : %{email}"
|
||
billing_status:
|
||
complete: Complet
|
||
incomplete: Incomplet
|
||
absent: Absentes
|
||
comped:
|
||
title: Abonnement offert
|
||
description: "Sponsor ou promotion : accordez Premium Light/Full sans paiement Stripe. Révocable à tout moment."
|
||
active_label: "Actif :"
|
||
since_label_html: "Depuis le %{date}"
|
||
by_admin: "· admin %{username}"
|
||
stripe_note: "Remarque : un abonnement Stripe lié existe également ; l'offre est prioritaire sur le forfait."
|
||
revoke_button: Révoquer l'offre (retour à Free ou restauration Stripe)
|
||
revoke_confirm: "Révoquer l'abonnement offert pour %{club} ?"
|
||
current_plan: "Forfait actuel : %{plan}"
|
||
stripe_active: "· paiement Stripe actif"
|
||
plan_label: Forfait
|
||
reason_label: "Motif (ex. sponsor 2026)"
|
||
reason_placeholder: "Sponsor, promotion…"
|
||
grant_button: Accorder l'offre
|
||
teams:
|
||
show:
|
||
back: "← %{club}"
|
||
sport_label: "Sport : %{sport}"
|
||
club_label_html: "Club : %{club} · %{replay_link} · %{billing_link}"
|
||
replay_link: Replays de l'équipe
|
||
billing_link: Paiements et factures
|
||
youtube_label: "YouTube :"
|
||
youtube_platform_default_no_oauth: ", par défaut sans OAuth du club"
|
||
youtube_platform_channel: "(chaîne plateforme%{suffix})"
|
||
youtube_club_channel: (chaîne du club)
|
||
youtube_not_ready: non prête
|
||
no_channel_hint_html: "Sans chaîne connectée, l'application utilise la chaîne Match Live TV. %{link}."
|
||
link_channel: Connecter la chaîne (page du club)
|
||
matches_title: Matchs
|
||
sessions:
|
||
index:
|
||
title: Sessions de diffusion
|
||
lead: Recherchez par club, équipe, adversaire ou lieu. Filtrez par statut, plateforme, nœud et période.
|
||
results: "%{shown} sur %{total} affichées"
|
||
none: Aucune session ne correspond à ces filtres.
|
||
filters:
|
||
q: Recherche
|
||
q_placeholder: Club, équipe, adversaire…
|
||
status: Statut
|
||
platform: Plateforme
|
||
club: Club
|
||
node: Nœud ingest
|
||
from: Du
|
||
to: Au
|
||
any: Tous
|
||
apply: Filtrer
|
||
reset: Réinitialiser
|
||
table:
|
||
club: Club
|
||
match: Match
|
||
status: Statut
|
||
started: Début
|
||
ended: Fin
|
||
duration: Durée
|
||
ingest: Ingest
|
||
disconnects: Déconnexions
|
||
client: Client
|
||
link: Lien
|
||
detail: Détail
|
||
regia: Régie
|
||
show:
|
||
title: "Session %{id}"
|
||
heading: Détail de la session
|
||
back: "← Retour aux sessions"
|
||
club_label: "Club :"
|
||
summary_title: Résumé
|
||
timing_title: Horaires
|
||
ingest_title: Ingest et médias
|
||
devices_title: Appareils
|
||
events_title: Événements
|
||
events_none: Aucun événement enregistré.
|
||
concurrency_title: Tentatives de second direct
|
||
concurrency_lead: Ce compte a tenté de démarrer un autre direct alors que celui-ci était déjà en cours (ou a été bloqué par une autre session du même compte).
|
||
status_label: "Statut :"
|
||
stop_button: Terminer la session
|
||
stop_confirm: "Terminer la diffusion ? Le chemin RTMP sera supprimé et le statut passera à terminé."
|
||
match_label: "Match : %{team} contre %{opponent}"
|
||
youtube_studio: YouTube Studio
|
||
broadcast: Diffusion
|
||
open_replays: Ouvrir les replays du club
|
||
audio_muted: Audio coupé
|
||
audio_on: Audio actif
|
||
ingest_node: "Nœud ingest :"
|
||
rtmp_ingest: "Ingestion RTMP :"
|
||
fields:
|
||
id: ID
|
||
club: Club
|
||
team: Équipe
|
||
opponent: Adversaire
|
||
operator: Opérateur
|
||
platform: Plateforme
|
||
client_os: Système
|
||
app_version: Version app
|
||
device: Appareil
|
||
os_version: Version OS
|
||
carrier: Opérateur mobile
|
||
privacy: Confidentialité
|
||
quality: Qualité
|
||
min_quality: Qualité mini
|
||
audio: Audio
|
||
created: Créée
|
||
started: Début
|
||
ended: Fin
|
||
duration: Durée
|
||
disconnects: Déconnexions
|
||
scheduled: Match programmé
|
||
location: Lieu
|
||
node: Nœud
|
||
rtmp: Ingestion RTMP
|
||
hls: HLS
|
||
recording: Replay
|
||
devices:
|
||
role: Rôle
|
||
network: Réseau
|
||
battery: Batterie
|
||
bitrate: Débit
|
||
fps: FPS
|
||
last_seen: Dernier contact
|
||
table:
|
||
type: Type
|
||
when: Quand
|
||
meta: Détails
|
||
links:
|
||
watch_title: Lien en direct
|
||
none: Aucun lien vidéo disponible pour cette session.
|
||
regia_title: Lien de régie
|
||
terminated: Session terminée — lien de régie non disponible.
|
||
regia_label: Régie
|
||
valid_until: "Valide jusqu'au %{date}"
|
||
active_exists: Un lien de régie actif existe déjà (l'URL n'est pas récupérable). Générez-en un nouveau si vous devez le repartager.
|
||
none_active: Aucun lien de régie actif. Générez un lien à partager avec la personne qui gère le score.
|
||
generate_button: Générer le lien de régie
|
||
ingest:
|
||
none: "—"
|
||
decommissioned: "(nœud retiré)"
|
||
role:
|
||
home: Home-lab
|
||
lab: Lab
|
||
cloud: Hetzner
|
||
|
||
analytics:
|
||
missing_path: Sélectionnez une page.
|
||
filters:
|
||
from: Du
|
||
to: Au
|
||
device: Appareil
|
||
any: Tous
|
||
apply: Filtrer
|
||
reset: Réinitialiser
|
||
chart_path: Page (graphique)
|
||
chart_path_all: Toutes les pages
|
||
layer: Couche
|
||
layer_move: Mouvements souris
|
||
layer_click: Clics
|
||
devices:
|
||
mobile: Mobile
|
||
tablet: Tablette
|
||
desktop: Ordinateur
|
||
index:
|
||
title: Analytics du site
|
||
lead: Heatmaps mouvements/clics et scroll agrégés (first-party), uniquement avec consentement statistiques. Aucune donnée personnelle.
|
||
none: Aucune donnée sur la période sélectionnée.
|
||
heatmap: Heatmap
|
||
chart_for_path: Graphique
|
||
trend_title: Évolution des pages vues
|
||
trend_lead: Total des pages vues sur toutes les pages, jour par jour. Mêmes filtres De / À / Appareil. Choisissez une page dans le filtre ou cliquez « Graphique » dans le tableau.
|
||
trend_lead_path: "Pages vues jour par jour pour %{path} uniquement (mêmes filtres De / À / Appareil)."
|
||
trend_total_label: Pages vues totales (toutes les pages)
|
||
trend_total_label_path: Pages vues de la page sélectionnée
|
||
trend_total_hint: "%{from} → %{to}"
|
||
hide_chart: Masquer le graphique
|
||
show_chart: Afficher le graphique
|
||
pages_title: Détail par page
|
||
pages_lead: Pages vues et engagement sur la période filtrée, par chemin. « Graphique » montre l’évolution d’une page.
|
||
table:
|
||
path: Page
|
||
pageviews: Pages vues
|
||
moves: Mouvements
|
||
clicks: Clics
|
||
avg_scroll: Scroll moyen
|
||
max_scroll: Scroll max
|
||
show:
|
||
title: Heatmap de page
|
||
back: "← Retour aux Analytics"
|
||
summary: Résumé
|
||
scroll_depth: Profondeur de scroll
|
||
scroll_hint: "Moyenne %{avg}% · maximum %{max}%"
|
||
heatmap_moves: Carte des mouvements
|
||
heatmap_clicks: Carte des clics
|
||
heatmap_hint: Superposition colorée sur la capture %{device}. Vert = faible, rouge = fort. Les données ne sont pas mélangées entre appareils.
|
||
device_tabs_label: Appareil
|
||
preview_title: Capture de page
|
||
preview_unavailable: Aperçu indisponible pour les chemins avec placeholder (ex. /clubs/:id).
|
||
snapshot_missing: Pas encore de capture pour %{device}. Visitez la page sur cet appareil avec consentement analytics, puis réessayez.
|
||
snapshot_meta: "Capture %{device} · %{at}"
|
||
no_points: Aucun point agrégé pour cette couche sur la période.
|
||
heatmap_title: Carte des clics
|
||
no_clicks: Aucun clic agrégé pour cette page sur la période.
|
||
preview:
|
||
title: Aperçu sans suivi
|
||
lead: Parcourez le site public sans enregistrer pages vues, clics, mouvements ni captures heatmap. Utile pour tester en production.
|
||
active: Aperçu staff actif sur ce navigateur (7 jours ou jusqu'à désactivation).
|
||
enable: Activer l'aperçu staff
|
||
disable: Désactiver l'aperçu
|
||
open_site: Ouvrir le site
|
||
enabled: Aperçu staff activé. Ce navigateur ne enregistrera pas d'analytics.
|
||
disabled: Aperçu staff désactivé.
|
||
|
||
billing:
|
||
index:
|
||
title: Paiements à facturer
|
||
description: "Paiements Stripe payés sans PDF de facture. Générez le PDF dans vos systèmes, puis chargez-le ici : il sera associé au paiement et envoyé par email au client."
|
||
filter_label: "Filtrer par club :"
|
||
filter_all: Tous
|
||
incomplete_profile_warning: Données de facturation incomplètes
|
||
no_billing_data: Aucune donnée de facturation — le client doit compléter son profil.
|
||
pdf_label: PDF de la facture
|
||
upload_button: Charger le PDF et envoyer au client
|
||
none_pending: "Aucun paiement en attente de facturation%{club}."
|
||
none_pending_for_club: " pour %{club}"
|
||
uploaded_title: Factures déjà chargées
|
||
table:
|
||
date: Date
|
||
club: Club
|
||
description: Description
|
||
amount: Montant
|
||
invoice: Facture
|
||
status: Statut
|
||
back_dashboard: "← Tableau de bord"
|
||
billing_invoices:
|
||
index:
|
||
title: "Facturation — %{club}"
|
||
back_dashboard: "← Tableau de bord"
|
||
new_invoice: Nouvelle facture (sans paiement)
|
||
payments_title: Paiements
|
||
table:
|
||
date: Date
|
||
description: Description
|
||
amount: Montant
|
||
invoice: Facture
|
||
pdf_suffix: " (PDF)"
|
||
edit_send_pdf: Modifier / envoyer le PDF
|
||
create_invoice: Créer une facture
|
||
no_payments: Aucun paiement enregistré pour ce club.
|
||
all_invoices_title: Toutes les factures
|
||
table2:
|
||
number: Numéro
|
||
date: Date
|
||
amount: Montant
|
||
status: Statut
|
||
payment: Paiement
|
||
edit: Modifier
|
||
no_invoices: Aucune facture.
|
||
new:
|
||
title: "Nouvelle facture — %{club}"
|
||
linked_payment: "Liée au paiement du %{date} (%{amount})."
|
||
number_label: Numéro de facture
|
||
issued_on_label: Date d'émission
|
||
amount_label: "Montant (€)"
|
||
notes_label: Notes internes (facultatif)
|
||
hint: Enregistrez le brouillon, puis chargez le PDF et envoyez-le au client depuis l'écran suivant.
|
||
submit: Créer le brouillon de facture
|
||
back: "← Paiements et factures"
|
||
edit:
|
||
title: "Facture %{number} — %{club}"
|
||
status_label: "Statut :"
|
||
sent_at: "· Envoyée le %{date}"
|
||
number_label: Numéro de facture
|
||
issued_on_label: Date d'émission
|
||
amount_label: "Montant (€)"
|
||
payment_info: "Paiement : %{description} — %{amount}"
|
||
pdf_label: PDF de la facture
|
||
pdf_already: "PDF déjà chargé : %{filename}"
|
||
notes_label: Notes internes
|
||
save_draft: Enregistrer le brouillon
|
||
issue_send: Émettre et envoyer par email
|
||
issue_confirm: "Envoyer la facture à %{email} ?"
|
||
back: "← Paiements et factures"
|
||
youtube:
|
||
platform_token:
|
||
title: Jeton de la chaîne Match Live TV
|
||
page_title: "Jeton YouTube — Match Live TV"
|
||
channel_label: "Chaîne : %{title}"
|
||
success: "Connexion réussie. Copiez immédiatement cette ligne :"
|
||
env_hint_html: "Ajoutez dans <code>/opt/matchlivetv/infra/.env</code> :"
|
||
not_shown_again_html: "Elle ne sera plus affichée. Ensuite : <code>docker compose -f docker-compose.prod.yml restart rails sidekiq</code>"
|
||
no_refresh_token_html: "Google n'a pas renvoyé de refresh token. Dans <a href=\"https://myaccount.google.com/permissions\" target=\"_blank\" rel=\"noopener\">votre compte Google → accès aux applications</a>, révoquez « Match Live TV », puis recommencez depuis <a href=\"/admin/youtube/platform\">/admin/youtube/platform</a>."
|
||
back_dashboard: "← Tableau de bord admin"
|
||
club_recordings:
|
||
index:
|
||
title: "Replays — %{club}"
|
||
announcements:
|
||
index:
|
||
title: Alertes
|
||
lead: Messages vers les apps, le site public et l'espace connecté — maintenance, mises à jour ou communications.
|
||
new: Nouvelle alerte
|
||
table_title: Alertes
|
||
none: Aucune alerte. Créez-en une pour notifier les applications et le site.
|
||
new:
|
||
title: Nouvelle alerte
|
||
edit:
|
||
title: Modifier l'alerte
|
||
table:
|
||
status: Statut
|
||
kind: Type
|
||
title: Message
|
||
channels: Destinations
|
||
window: Fenêtre
|
||
actions:
|
||
edit: Modifier
|
||
delete: Supprimer
|
||
delete_confirm: Supprimer cette alerte ? Elle n'apparaîtra plus aux destinations choisies.
|
||
kind:
|
||
info: Information
|
||
maintenance: Maintenance
|
||
update: Mise à jour
|
||
severity:
|
||
info: Info
|
||
warning: Attention
|
||
critical: Critique
|
||
status:
|
||
draft: Brouillon
|
||
published: Publié
|
||
archived: Archivé
|
||
channels:
|
||
android: App Android
|
||
ios: App iOS
|
||
web_public: Site public
|
||
web_private: Espace connecté
|
||
window:
|
||
always: Toujours (tant que publié)
|
||
from: "À partir de %{time}"
|
||
until: "Jusqu'à %{time}"
|
||
form:
|
||
kind: Type
|
||
severity: Gravité
|
||
status: Statut
|
||
channels: Où l'afficher
|
||
channels_hint: "Choisissez une ou plusieurs destinations. Android et iOS sont indépendants : créez deux alertes si le texte doit différer. L'espace connecté est visible après connexion (club, équipes, compte)."
|
||
title: Titre
|
||
body: Texte
|
||
starts_at: Visible à partir de
|
||
ends_at: Visible jusqu'à
|
||
window_hint: Laissez vide pour afficher immédiatement tant que l'alerte est publiée.
|
||
action_url: Lien (facultatif)
|
||
action_url_hint: Pour une mise à jour, une URL vide ouvre le store de la plateforme (Play Store sur Android, App Store sur iOS).
|
||
action_label: Libellé du bouton
|
||
locales_legend: Texte par langue
|
||
locales_hint: Renseignez toutes les langues de l'app (italien, anglais, français, allemand, espagnol). L'italien est obligatoire ; les langues manquantes basculent vers l'anglais puis l'italien.
|
||
locale_required: obligatoire
|
||
dismissible: L'utilisateur peut fermer l'alerte
|
||
dismissible_hint: Décochez pour une maintenance qui doit rester visible.
|
||
submit_create: Enregistrer l'alerte
|
||
submit_update: Mettre à jour l'alerte
|
||
cancel: Annuler
|
||
|