SkateSpots/src/i18n/fr/batch6.ts

1980 lines
92 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/** fr — batch 6. Traductions françaises (fr-FR). */
const frBatch6 = {
placesUi: {
addToCalendar: {
add: "Ajouter au calendrier",
appleOutlook: "Apple / Outlook (.ics)",
google: "Google Agenda",
},
attendees: {
goingCount: "participants",
goingTab: "Participants ({{count}})",
interestedTab: "Intéressés ({{count}})",
nobodyGoing: "Personne n'a encore confirmé.",
nobodyInterested: "Personne n'a encore marqué son intérêt.",
noRsvps: "Pas encore de RSVP — sois le premier à dire que tu viens.",
trusted: "Fiable",
trustedTitle: "Quelqu'un que tu suis ou un cartographe de confiance",
youTrust: "en qui tu as confiance",
},
bounty: {
addressCoords: "Adresse et coordonnées",
basic: "Basique",
contactInfo: "Coordonnées",
description: "Description",
earningPotential: "Potentiel de gains",
excellent: "Excellent !",
gettingStarted: "Pour commencer",
good: "Bien",
onePhoto: "Au moins 1 photo",
openingHours: "Horaires d'ouverture",
shopName: "Nom du Shop",
threePhotos: "3+ photos",
tip: "💡 Plus la qualité est élevée, plus tu reçois de zaps de la communauté !",
},
calendar: {
allDay: "Toute la journée",
eventDay: "Jour de l'Event",
eventsOnDay: "{{count}} Events",
eventsThisMonth: "Events ce mois-ci",
going: "participants",
months: {
january: "Janvier",
february: "Février",
march: "Mars",
april: "Avril",
may: "Mai",
june: "Juin",
july: "Juillet",
august: "Août",
september: "Septembre",
october: "Octobre",
november: "Novembre",
december: "Décembre",
},
nextMonth: "Mois suivant",
nothingOnDay: "Rien ce jour-là.",
prevMonth: "Mois précédent",
tapHighlighted: "Touche un jour en surbrillance pour voir ce qui s'y passe.",
today: "Aujourd'hui",
tourDay: "Jour de Tour",
toursOnDay: "{{count}} Tours",
toursThisMonth: "Tours ce mois-ci",
weekdays: {
sun: "Dim",
mon: "Lun",
tue: "Mar",
wed: "Mer",
thu: "Jeu",
fri: "Ven",
sat: "Sam",
},
weekdaysShort: {
sun: "D",
mon: "L",
tue: "M",
wed: "M",
thu: "J",
fri: "V",
sat: "S",
},
},
countdown: {
ended: "Terminé",
happeningNow: "En cours",
inDays: "Dans {{count}} jours",
inHoursMins: "Dans {{hours}} h {{mins}} min",
inMins: "Dans {{count}} min",
startingNow: "Ça commence maintenant",
tomorrow: "Demain",
},
createEvent: {
add: "Ajouter",
addNewSpot: "Ajouter un nouveau Spot →",
changeSpot: "Changer de Spot",
created: "Event créé !",
createdDesc: "Ton Event a été publié sur le réseau.",
entryFee: "Frais d'entrée",
entryFeeHint: "(facultatif — ex. « 500 sats » ou « 10 £ »)",
entryFeePlaceholder: "Laisse vide pour les Events gratuits",
featuring: "Avec {{name}}",
featuringDesc: "Cet acte sera tagué comme live music et affiché dans sa liste de concerts.",
fundingGoal: "Objectif de financement",
fundingGoalHint: "(facultatif — sats à financer via des zaps)",
fundingGoalPlaceholder: "ex. 50000",
geoNotSupported: "Géolocalisation non prise en charge",
geoNotSupportedDesc: "Ton navigateur ne prend pas en charge la géolocalisation.",
hideSpots: "Masquer les Spots",
hostingAs: "Organisé en tant que {{name}}",
hostingAsDesc: "Cet Event apparaîtra sur ta page de Crew et sera tagué comme organisé par une Crew.",
imageUploaded: "Image téléversée",
imageUploadedDesc: "Ton image a bien été téléversée.",
invalidDate: "Date invalide",
invalidDateDesc: "Saisis une date et une heure de début valides.",
invalidEnd: "Heure de fin invalide",
invalidEndDesc: "L'heure de fin doit être postérieure à l'heure de début.",
linkedTo: "Lié à : {{title}}",
linkToSpot: "Lier à un Skate Spot",
linkToShop: "Lier à un Shop",
selectedShop: "Lié à {{name}}",
selectShopHint: "Facultatif — organisé dans ou par un skate shop.",
selectShop: "Sélectionner un Shop",
changeShop: "Changer de Shop",
hideShops: "Masquer les Shops",
searchShops: "Rechercher des Shops…",
noShopsMatch: "Aucun Shop ne correspond à ta recherche.",
noShopsAvailable: "Aucun Shop disponible pour le moment.",
linkToTour: "Lier à un Tour (facultatif)",
linkTourDesc: "Lie cet Event à un Tour pour montrer qu'il fait partie d'une série plus large. Idéal pour les Tours nationaux, les aventures internationales ou les journées de défi du World Destruction Tour.",
loadingSpots: "Chargement des Spots...",
loadingTours: "Chargement des Tours...",
locationError: "Erreur de localisation",
locationFound: "Localisation trouvée",
locationFoundDesc: "Ta position actuelle a été définie.",
logoUrl: "URL du logo (facultatif)",
noSpotsAvailable: "Aucun Spot disponible",
noSpotsMatch: "Aucun Spot ne correspond à ta recherche",
noTourLinked: "Aucun Tour lié",
optional: "(facultatif)",
pastDesc: "Choisis une date et une heure dans le futur pour que les skateurs puissent RSVP et venir.",
pastTitle: "Cette heure de début est déjà passée",
publishFailed: "Échec de la publication",
publishFeatured: "Publier l'Event à la une",
removeSponsor: "Retirer le sponsor",
searchSpots: "Rechercher des Spots par nom, lieu ou catégorie...",
selectedSpot: "Sélectionné : {{name}}",
selectSpot: "Sélectionner un Spot",
selectSpotHint: "Sélectionne un Spot sur la carte où cet Event a lieu",
selectTour: "Sélectionner un Tour",
somethingWrong: "Une erreur est survenue",
sponsorName: "Nom du sponsor",
sponsors: "Sponsors",
sponsorsHint: "Un Shop ou une marque soutient cet Event ? Ajoute son logo — il s'affiche comme une bande « Présenté par » sur l'Event.",
startRequired: "Heure de début requise",
startRequiredDesc: "Indique quand l'Event commence.",
titleRequired: "Titre requis",
titleRequiredDesc: "Saisis un nom pour cet Event.",
uploadFailed: "Échec du téléversement",
uploadFailedDesc: "Échec du téléversement de l'image",
websiteUrl: "URL du site web (facultatif)",
},
createShop: {
address: "Adresse du Shop",
addressPlaceholder: "ex. 411 N Fairfax Ave, Los Angeles, CA 90036",
addressRequired: "Adresse requise",
addressRequiredDesc: "Saisis l'adresse de ton Shop.",
contactHint: "Aide les clients à te joindre (au moins un moyen de contact recommandé)",
contactInfo: "Coordonnées",
created: "🎉 Shop ajouté !",
createdDesc: "Ton skate shop est maintenant sur la carte. Les skateurs peuvent te zapper pour te remercier !",
descriptionPlaceholder: "Parle de ton Shop, de ce que tu vends, de ta spécialité...",
detailsDesc: "Parle de ton Shop à la communauté. Tous les champs marqués d'un * sont obligatoires.",
email: "E-mail",
hoursOfOperation: "Horaires d'ouverture",
hoursPlaceholder: "ex. Lun-Sam 10h-20h, Dim 12h-18h",
instagram: "Instagram",
invalidCoords: "Coordonnées invalides",
invalidCoordsDesc: "Saisis une latitude (-90 à 90) et une longitude (-180 à 180) valides.",
latPlaceholder: "Latitude (ex. 34.0737)",
lngPlaceholder: "Longitude (ex. -118.3614)",
locationRequired: "Localisation requise",
locationRequiredDesc: "Saisis des coordonnées ou utilise ta position actuelle.",
loginToAdd: "Tu dois te connecter pour ajouter un skate shop.",
namePlaceholder: "ex. Supreme Los Angeles",
nameRequired: "Nom du Shop requis",
nameRequiredDesc: "Saisis un nom pour ton Shop.",
phoneNumber: "Numéro de téléphone",
publishFailedDesc: "Une erreur est survenue. Consulte la console pour plus de détails.",
shopPhotoAlt: "Shop",
shopPhotos: "Photos du Shop",
subtitle: "Référence ton Shop sur la carte et connecte-toi à la communauté",
upload: "Téléverser",
},
createTour: {
acceptedClipSources: "Sources de clips acceptées",
acceptedClipSourcesDesc: "Quels formats acceptes-tu pour les clips soumis ?",
accommodationInfo: "Infos hébergement",
accommodationPlaceholder: "Recommandations ou arrangements d'hébergement, ex. « Auberges pas chères le long du trajet », « Matériel de camping requis », « Airbnb inclus »",
addChallenge: "Ajouter un défi",
addCity: "Ajouter une ville...",
addCountry: "Ajouter un pays...",
addShopFirst: "Ajoute d'abord un Shop",
alsoSelected: "Également sélectionné :",
availabilityPlaceholder: "ex. Week-ends, Matins uniquement, Sur rendez-vous",
availabilityQuestion: "Quand es-tu généralement disponible ?",
availableShops: "Skate shops disponibles ({{count}})",
challengeDescPlaceholder: "Description facultative...",
challenges: "Défis",
challengesRequired: "Défis requis",
challengesRequiredDesc: "Ajoute au moins un défi à relever pour les équipes.",
challengesSecret: "Tous les défis sont SECRETS jusqu'à la date de début de la compétition. Les équipes ne les verront pas avant !",
challengeTitlePlaceholder: "Titre du défi, ex. « Kickflip a 10 stair »",
citiesLabel: "Villes",
citiesOnTour: "Villes du Tour",
cityPlaceholder: "ex. Berlin, Allemagne",
cityRegion: "Ville / Région",
cityRequired: "Ville/région requise",
cityRequiredDesc: "Saisis ta ville ou ta région.",
clipAnyUrl: "🔗 N'importe quelle URL",
clipBlossom: "📦 Téléversement Blossom",
clipInstagram: "📸 Instagram",
clipYouTube: "▶️ YouTube",
competitionDates: "Dates de la compétition",
competitionDatesWarning: "⚠️ Tous les défis sont SECRETS jusqu'à la date de début ! Les équipes ne verront pas les défis avant le début de la compétition.",
competitionLocations: "Lieux de la compétition",
competitionLocationsDesc: "Où les équipes s'affronteront-elles ? Ajoute toutes les villes et tous les pays concernés.",
coordsHint: "Les coordonnées sont facultatives. Ajoute-les pour épingler ton point de rendez-vous sur la carte.",
countriesLabel: "Pays",
countriesRequired: "Pays requis",
countriesRequiredDesc: "Ajoute au moins un pays pour ton Tour international.",
createdDestruction: "💀 WORLD DESTRUCTION TOUR CRÉÉ !",
createdDestructionDesc: "Les équipes peuvent s'inscrire. Défis révélés à la date de début !",
createDestructionTour: "Créer un World Destruction Tour",
createdInternational: "✈️ Tour international créé !",
createdInternationalDesc: "Ton aventure mondiale est en ligne ! Connecte-toi à des skateurs du monde entier.",
createdLocal: "🏠 Tour local créé !",
createdLocalDesc: "Ton Tour est maintenant visible. Les skateurs peuvent réserver par DM !",
createdNational: "🚐 Tour national créé !",
createdNationalDesc: "Ton road trip est en ligne ! Commence à coordonner avec les skateurs intéressés.",
departure: "Départ *",
departureRequired: "Date de départ requise",
departureRequiredDesc: "Indique quand le voyage part pour que les skateurs puissent planifier et réserver.",
descriptionPlaceholder: "Décris ce que les skateurs vivront : les Spots que vous visiterez, l'ambiance, ce qui rend ton Tour unique...",
destructionDesc: "Mets en place ta compétition mondiale style KOTR — tu définis TOUT !",
discountHint: "Les participants au Tour peuvent montrer leur confirmation de réservation au Shop pour bénéficier de cette réduction",
discountPercentage: "Pourcentage de réduction",
dropTour: "Publier un Tour",
duration: "Durée",
durationHintDestruction: "Combien de temps dure la compétition ? (1-12 mois)",
durationHintInternational: "Combien de semaines dure l'aventure ? (jusqu'à 2 mois)",
durationHintLocal: "Combien de temps dure ton Tour typique ?",
durationHintNational: "Combien de jours dure le road trip ?",
durationWeeksMonths: "{{weeks}} semaines (~{{months}} mois)",
editTour: "Modifier le Tour",
enable: "Activer",
enabled: "Activé",
endBeforeStart: "Fin avant le début",
endBeforeStartDesc: "La date de fin de la compétition doit être égale ou postérieure à la date de début.",
endDate: "Date de fin",
entryFeeHint: "Tu gardes 95 % • La plateforme prend 5 % • Laisse vide pour une entrée gratuite",
entryFeePerTeam: "Frais d'entrée par équipe (sats)",
entryFeePlaceholder: "ex. 100000",
entryPrizes: "Entrée et prix",
filmPremieres: "Premières des films d'équipe",
filmPremieresDesc: "Après la compétition, les clips de chaque équipe deviennent un film complet qui peut être projeté en première dans les skate shops du monde entier.",
filmPremieresInfo: "🎥 Les équipes compilent leurs clips de défis en un film final. Les Shops peuvent organiser des soirées de première, reliant la compétition mondiale aux communautés locales.",
filmReleaseDate: "Date de sortie du film (facultatif)",
filmReleaseDateHint: "Quand les films seront disponibles. Laisse vide pour une sortie immédiatement après la fin de la compétition.",
fixedSession: "Session fixe",
fixedSessionDesc: "Une date et une heure définies",
flexible: "Flexible",
flexibleDesc: "Réserve à tout moment par DM",
hide: "Masquer",
howDestruction1: "• Compétition mondiale par équipes - jusqu'à 12 mois",
howDestruction2: "• TOI tu définis les défis, les points, les prix - nous fournissons juste la plateforme",
howDestruction3: "• Tous les défis sont SECRETS jusqu'à la date de début de la compétition",
howDestruction4: "• Clips via téléversement Blossom OU liens externes (YouTube, Instagram, n'importe quelle URL)",
howDestruction5: "• Niveau avancé uniquement - tous les types de Spots inclus automatiquement",
howDestruction6: "• La plateforme ne prend que 5 % des frais d'entrée (PAS la cagnotte)",
howDestructionTitle: "💀 WORLD DESTRUCTION TOUR - Style KOTR",
howInternational1: "• Aventures transfrontalières dans plusieurs pays",
howInternational2: "• Tu fixes le prix — la plateforme ne prend que 5 %",
howInternational3: "• Fixe les dates de départ et de retour pour que la Crew puisse réserver ses vols",
howInternational4: "• Connecte des skateurs du monde entier",
howInternational5: "• Crée des expériences mondiales inoubliables !",
howInternationalTitle: "Comment fonctionnent les Tours internationaux",
howItWorks: "Comment ça marche :",
howLocal1: "• Tu fixes ton prix — la plateforme prend 10 %",
howLocal2: "• Les Spots cachés restent cachés — tu les montres en personne",
howLocal3: "• Organise une session programmée ou reste flexible / sur rendez-vous",
howLocal4: "• Les skateurs réservent par DM, paient en Lightning et peuvent l'ajouter à leur calendrier",
howLocal5: "• Développe ta réputation avec des avis et des zaps",
howLocalTitle: "Comment fonctionnent les Tours locaux",
howNational1: "• Road trips multi-villes à travers ton pays",
howNational2: "• Tu fixes le prix — la plateforme ne prend que 7 %",
howNational3: "• Fixe les dates du voyage pour que les skateurs puissent poser des congés et voyager",
howNational4: "• Inclus les infos de transport / hébergement pour la Crew",
howNational5: "• Crée des aventures de skate légendaires !",
howNationalTitle: "Comment fonctionnent les Tours nationaux",
imageUploadedDesc: "Ton image de Tour a été téléversée.",
incompleteCoords: "Coordonnées incomplètes",
incompleteCoordsDesc: "Saisis à la fois la latitude et la longitude, ou laisse les deux vides.",
internationalDetails: "Détails de l'aventure internationale",
languagesSelected: "{{count}} sélectionnées",
languagesSpoken: "Langues parlées",
latOptional: "Latitude (facultatif)",
lngOptional: "Longitude (facultatif)",
loadingProfile: "Chargement du profil...",
loadingProfileDesc: "Vérification de ton statut de vérification NIP-05.",
loadingShops: "Chargement des Shops...",
localShopPremieres: "Premières en Shop local",
localShopPremieresDesc: "Les skate shops du monde entier peuvent organiser des soirées film",
loginToCreate: "Tu dois te connecter pour créer un Tour.",
maxGroupSize: "Taille max du groupe",
maxTeams: "Équipes max",
maxTeamSize: "Taille max d'équipe",
meetingLocationSet: "Ta position actuelle a été définie comme point de rendez-vous.",
meetingPointDesc: "Où rencontreras-tu les participants au Tour ? Choisis un lieu public et bien connu.",
meetingPointLabel: "Point de rendez-vous",
meetingPointPlaceholder: "ex. Gare de Warschauer Straße",
meetingPointRequired: "Point de rendez-vous requis",
meetingPointRequiredDesc: "Indique où tu rencontreras les participants au Tour.",
minTeamSize: "Taille min d'équipe",
noChallenges: "Aucun défi pour le moment",
noChallengesDesc: "Ajoute des défis à relever pour les équipes",
noPartnerShop: "Aucun Shop partenaire",
noShopsFound: "Aucun skate shop trouvé sur le réseau pour le moment.",
noShopsRegistered: "Aucun skate shop encore inscrit",
onlineRelease: "Sortie en ligne",
onlineReleaseDesc: "Diffuse aussi les films sur YouTube/Nostr",
organizerContact: "Coordonnées de l'organisateur",
organizerContactHint: "Ceci sera visible par les équipes inscrites",
organizerContactPlaceholder: "Comment les équipes peuvent-elles te contacter ? ex. npub Nostr, e-mail, Telegram, etc.",
partnerDiscountDesc: "Offre une réduction aux participants du Tour dans un skate shop local",
partnerStep1: "1. Associe-toi à un skate shop local de confiance",
partnerStep2: "2. Définis un pourcentage de réduction pour les participants du Tour",
partnerStep3: "3. Après le Tour, remets aux participants une confirmation à montrer au Shop",
partnerStep4: "4. Le Shop honore la réduction - ça renforce la communauté et attire du passage !",
percentOff: "{{percent}} % DE RÉDUCTION",
photoHint: "Ajoute une photo de toi en skate ou d'un Spot sympa de ton Tour.",
pickRide: "Choisis ton véhicule",
place1: "🥇 1er",
place2: "🥈 2e",
place3: "🥉 3e",
platformFee: "Tu fixes le prix • La plateforme prend {{percent}}",
points: "Points :",
pricePerPerson: "Prix par personne (sats)",
pricePlaceholder: "ex. 25000",
prizeDistribution: "Répartition des prix",
prizePoolHint: "Facultatif - total des prix disponibles",
prizePoolPlaceholder: "ex. 2000000",
proTipDesc: "Avant de proposer une réduction partenaire, contacte le propriétaire du Shop par DM pour convenir du pourcentage de réduction. Ça garantit qu'il est d'accord et qu'il honorera la réduction pour les participants de ton Tour.",
proTipTitle: "💡 Astuce : coordonne-toi d'abord avec le Shop !",
return: "Retour",
returnBeforeDeparture: "Retour avant le départ",
returnBeforeDepartureDesc: "La date de retour doit être égale ou postérieure à la date de départ.",
roadTripDetails: "Détails du road trip",
schedule: "Programme",
scheduleDesc: "Organise ce Tour comme une session programmée ponctuelle, ou reste flexible et laisse les skateurs réserver un créneau par DM.",
secretUntilStart: "Secret jusqu'au début",
selectPartnerShop: "Sélectionner un Shop partenaire",
sessionDateRequired: "Date de session requise",
sessionDateRequiredDesc: "Choisis la date et l'heure de ta session programmée, ou passe à un programme flexible.",
sessionDateTime: "Date et heure de la session",
sessionDateTimeHint: "Les skateurs verront cette heure et pourront l'ajouter à leur calendrier depuis la page du Tour.",
shopPremieresContact: "Contacte ces Shops directement pour organiser des soirées de première. Tous les arrangements sont privés.",
shopPremieresHow: "💡 Comment fonctionnent les Premières en Shop : contacte les Shops directement pour organiser des soirées de première. Tous les arrangements sont privés entre toi et les Shops.",
shopsCanRegister: "Les Shops peuvent s'inscrire sur /create-shop",
show: "Afficher",
showAllLanguages: "Afficher les {{count}} langues",
somethingWrong: "Une erreur est survenue.",
spotTypes: "Types de Spots",
spotTypesRequired: "Types de Spots requis",
spotTypesRequiredDesc: "Sélectionne au moins un type de Spot que tu montreras.",
startDate: "Date de début",
startDateRequired: "Date de début requise",
startDateRequiredDesc: "Indique quand la compétition commence (les défis seront révélés à cette date).",
startingCity: "Ville de départ",
startingCityPlaceholder: "ex. Los Angeles, États-Unis",
teamSettings: "Paramètres des équipes",
teamsCount: "{{count}} équipes",
titlePlaceholder: "ex. Berlin Kreuzberg - Tour des Spots underground",
titleRequired: "Titre du Tour requis",
titleRequiredDesc: "Saisis un nom pour ton Tour.",
totalPercent: "Total : {{percent}} %",
totalPrizePool: "Cagnotte totale (sats)",
tourDesc: "Dis aux skateurs à quoi s'attendre lors de ton Tour",
tourDetails: "Détails du Tour",
tourPhoto: "Photo du Tour",
tourTitle: "Titre du Tour",
transportDestructionPlaceholder: "Comment les équipes se déplaceront-elles entre les lieux ? Un transport est-il fourni ou recommandé ?",
transportInfo: "Infos transport",
transportPlaceholder: "Comment les participants voyageront-ils ? ex. « Van fourni », « Vol jusqu'à Barcelone, on loue un van », « Train entre les villes »",
tripDatesDesc: "Fixe les dates pour que les skateurs puissent poser des congés, réserver des vols et planifier le voyage.",
tripDatesTitle: "Dates du voyage",
updated: "Tour mis à jour !",
updatedDesc: "Tes modifications ont été publiées.",
upload: "Téléverser",
view: "Voir →",
worldDestruction: "World Destruction Tour",
youReceive: "Tu reçois : {{amount}} sats par personne",
},
editEvent: {
accessDenied: "Accès refusé",
accessDeniedDesc: "Tu ne peux modifier que les Events que tu as créés.",
backToEvent: "Retour à l'Event",
detailsDesc: "Mets à jour les informations de cet Event. Tous les champs marqués d'un * sont obligatoires.",
eventCover: "Bannière de l'Event",
locationUpdated: "Localisation mise à jour.",
loginToEdit: "Tu dois te connecter pour modifier cet Event.",
newSpot: "Nouveau Spot : {{location}}.",
newTime: "Nouvelle heure : {{date}} à {{time}}.",
saveChanges: "Enregistrer les modifications",
saving: "Enregistrement...",
title: "Modifier l'Event",
updated: "Event mis à jour !",
updatedDesc: "Tes modifications ont été publiées sur le réseau.",
updateDetails: "Mettre à jour les détails de {{title}}",
updatedNotified: "Modifications publiées — {{count}} participants notifiés.",
updateFailed: "Échec de la mise à jour",
updateMessage: "{{parts}} — consulte l'Event pour les détails.",
},
editShop: {
accessDeniedDesc: "Tu ne peux modifier que les Shops que tu as créés.",
backToShop: "Retour au Shop",
detailsDesc: "Mets à jour les informations de ton Shop. Tous les champs marqués d'un * sont obligatoires.",
loginToEdit: "Tu dois te connecter pour modifier ce Shop.",
updated: "Shop mis à jour !",
updateDetails: "Mettre à jour les détails de {{name}}",
},
editTour: {
accessDeniedDesc: "Tu ne peux modifier que les Tours que tu as créés.",
loginToEdit: "Tu dois te connecter pour modifier ce Tour.",
},
eventCard: {
report: "Signaler",
},
eventDetail: {
aCrew: "une Crew",
addToCalendar: "Ajouter au calendrier",
backToEvents: "Retour aux Events",
cancelled: "Cet Event a été annulé",
checkUpdate: "— consulte la mise à jour",
copyFailed: "Échec de la copie",
date: "Date",
editEvent: "Modifier l'Event",
eventFallback: "Event",
eventOrganizer: "Organisateur de l'Event",
getDirections: "Itinéraire",
linkCopied: "Lien copié",
linkCopiedDesc: "Lien de l'Event copié dans ton presse-papiers — colle-le où tu veux.",
live: "En direct :",
liveMusic: "live music",
location: "Lieu",
newLocation: "Nouveau lieu",
noRsvps: "Aucun RSVP enregistré.",
organizer: "Organisateur",
rsvpsClosed: "Les RSVP sont fermés — cet Event a été annulé par l'hôte.",
seeMap: "Voir la carte",
shareEvent: "Partager l'Event",
shareText: "{{title}} — un Event de skate sur SkateSpots",
shareTextFallback: "Découvre cet Event de skate sur SkateSpots",
time: "Heure",
timeChanged: "Heure modifiée",
updatesFromHost: "Mises à jour de l'hôte",
where: "Où",
whoCame: "Qui est venu",
whosGoing: "Qui y va",
},
events: {
calendar: "Calendrier",
createTour: "Créer un Tour",
events: "Events",
faqFooter: "Des questions ? Consulte la FAQ →",
hosting: "Organisation",
hostingSubtitle: "Tes Events — RSVP, mises à jour et modifications rapides",
list: "Liste",
noEventsMatchFilters: "Aucun Event ne correspond à tes filtres. Essaie de les ajuster ou de les effacer.",
noPast: "Aucun Event passé",
noPastBody: "Aucun Event de skate passé trouvé avec tes filtres actuels.",
noTours: "Aucun Tour trouvé",
noToursBody: "Pas encore de Tours de skate. Crée le premier et emmène des skateurs à la découverte de Spots !",
noToursMatchFilters: "Aucun Tour ne correspond à tes filtres. Essaie de les ajuster ou de les effacer.",
noUpcoming: "Aucun Event à venir",
noUpcomingBody: "Aucun Event de skate à venir trouvé. Sois le premier à en créer un !",
past: "Passés",
resultsCount: "{{count}} résultats",
searchCity: "Ville…",
searchEvent: "Nom de l'Event…",
searchTour: "Nom du Tour…",
tours: "Tours",
toursSubtitle: "Guides locaux, road trips et compétitions mondiales",
upcoming: "À venir",
},
eventTypes: {
contest: "Contest",
demo: "Démo",
jam: "Jam",
meetup: "Meetup",
premiere: "Première",
session: "Session",
workshop: "Atelier",
},
featured: {
active: "Actif",
bodyEvent: "Gratuit à publier. Les Events à la une obtiennent un badge et apparaissent en haut de la page des Events.",
bodyTour: "Gratuit à publier. Les Tours à la une obtiennent un badge et apparaissent en haut de la liste des Tours.",
contextEvent: "Ton Event reste listé gratuitement dans tous les cas — la une ajoute juste le badge et un coup de boost.",
contextTour: "Ton Tour reste listé gratuitement dans tous les cas — la une ajoute juste le badge et un coup de boost.",
daysRemaining: "À la une actif · {{count}} jours restants.",
headingEvent: "Mettre cet Event à la une",
headingTour: "Mettre ce Tour à la une",
optional: "facultatif",
platformOwner: "Propriétaire de la plateforme — la une est toujours activée.",
},
filters: {
activeCount: "{{count}} actifs",
all: "Tous",
allLevels: "Tous niveaux",
eventType: "Type d'Event",
following: "Abonnements",
newest: "Plus récents",
popular: "Populaires",
showResults: "Afficher les résultats",
showResultsActive: "Afficher les résultats · {{count}} actifs",
skillLevel: "Niveau",
sortBy: "Trier par",
topRated: "Mieux notés",
tourCategory: "Catégorie de Tour",
trusted: "Fiable",
trustLevel: "Niveau de confiance",
verified: "Vérifié",
},
food: {
bar: "Bar",
cafe: "Café",
call: "Appeler",
chooseSpot: "Choisir un Spot...",
directions: "Itinéraire",
fastFood: "Fast-food",
foodCourt: "Food court",
locationLabel: "Lieu :",
noneFound: "Aucun lieu de restauration trouvé",
noneFoundDesc: "Nous n'avons trouvé aucun restaurant ni café à moins de 1 km de ce Spot. Essaie de sélectionner un autre lieu.",
placesFound: "{{count}} lieux trouvés à moins de 1 km de {{spot}}",
pub: "Pub",
restaurant: "Restaurant",
selectSpot: "Sélectionner un skate Spot",
selectSpotDesc: "Choisis un skate Spot dans le menu ci-dessus pour trouver des restaurants, cafés et autres options de restauration à proximité.",
selectSpotTitle: "Sélectionner un Skate Spot",
subtitle: "Trouve où manger près de tes skate Spots préférés",
title: "Restauration près des Spots",
unknown: "Inconnu",
website: "Site web",
},
rsvp: {
areYouGoing: "Tu y vas ?",
cant: "Non",
cantMakeIt: "Je ne peux pas venir",
going: "J'y vais",
goingCount: "participants",
goingShort: "J'y vais",
hostNote: "Tu héberges cet Event — mais tu peux quand même définir ton statut.",
interested: "Intéressé",
interestedCount: "intéressés",
loginToRsvp: "Connecte-toi pour RSVP.",
maybe: "Peut-être",
toastError: "Impossible de RSVP",
toastGoing: "Tu y vas ! 🛹",
toastInterested: "Marqué comme intéressé.",
toastNotGoing: "Marqué comme absent.",
tryAgain: "Réessaie.",
},
shop: {
addNip05Settings: "Ajouter un NIP-05 dans les paramètres",
adminRemovedReason: "Un admin SkateSpots a retiré le Shop « {{name}} »",
areYouOwner: "Es-tu le propriétaire du Shop ?",
backToMap: "Retour à la carte",
claimDesc: "Si tu possèdes ou gères ce Shop, tu peux le revendiquer pour vérifier la propriété via NIP-05.",
claimNip05Intro: "Pour revendiquer ce Shop, ajoute un identifiant NIP-05 correspondant au domaine du site du Shop. Par exemple, si le site du Shop est",
claimNip05Your: "ton NIP-05 devrait être",
contactShop: "Contacter le Shop",
deleted: "Shop supprimé",
deletedDesc: "Demande de suppression envoyée aux relais. La plupart des relais retireront ce contenu.",
deleteDialogDesc: "Cela supprimera définitivement « {{name}} » de tous les relais. Cette action est irréversible.",
deleteDialogTitle: "Supprimer le Shop ?",
deletedReason: "Shop supprimé",
deleteFailed: "Échec de la suppression",
deleteShop: "Supprimer le Shop",
linkCopied: "Lien copié !",
linkCopiedDesc: "Lien du Shop copié dans le presse-papiers.",
nip05Required: "⚠️ Vérification NIP-05 requise pour revendiquer des Shops",
opens: "Ouvre : {{domain}}",
removeAdmin: "Retirer (admin)",
removed: "Shop retiré",
removedDesc: "Ce Shop a été retiré et sera masqué dans tout SkateSpots.",
removeDialogDesc: "En tant qu'admin SkateSpots, tu retires « {{name}} ». Il sera masqué dans toute l'app pour tout le monde et une demande de suppression sera envoyée aux relais.",
removeDialogTitle: "Retirer ce Shop ? (admin)",
removeShop: "Retirer le Shop",
tipMapper: "Zapper le cartographe",
tipMapperDesc: "Ce Shop a été ajouté par un membre de la communauté. Zappe-le pour le remercier !",
updateNip05: "Mets à jour ton NIP-05 pour revendiquer",
viewPhotoFull: "Voir la photo en plein écran",
viewPhotoOf: "Voir la photo {{index}} sur {{total}}",
},
sponsors: {
presentedBy: "Présenté par",
},
tourCard: {
active: "Actif",
completed: "Terminé",
contactForPrice: "Prix sur demande",
durationDays: "{{count}} jours",
durationHours: "{{count}} heures",
durationMonths: "{{count}} mois",
durationWeeks: "{{count}} semaines",
entry: "Entrée : {{amount}} sats",
happeningNow: "En cours",
inDays: "Dans {{count}} jours",
inHours: "Dans {{count}} h",
inMonths: "Dans {{count}} mois",
inWeeks: "Dans {{count}} semaines",
maxGroup: "Max {{count}}",
price: "{{amount}} sats",
prizePool: "{{amount}} sats",
registrationOpen: "Inscriptions ouvertes",
startingSoon: "Bientôt",
teamsMax: "{{count}} équipes max",
tomorrow: "Demain",
worldwide: "Monde entier",
},
tourDetail: {
about: "À propos de ce Tour",
availability: "Disponibilité",
competitionWindow: "Fenêtre de compétition",
contactToBook: "Contacter le guide pour réserver",
discountAt: "{{percent}} % DE RÉDUCTION chez {{shop}}",
duration: "Durée",
languages: "Langues",
loginToBook: "Connecte-toi pour réserver",
loginToBookDesc: "Connecte-toi pour contacter le guide et réserver ce Tour",
maxGroup: "Groupe max",
meetingPoint: "Point de rendez-vous",
notFound: "Tour introuvable",
notFoundDesc: "Ce Tour a peut-être été retiré ou n'existe pas.",
organizer: "Organisateur",
partnerDiscount: "Réduction Shop partenaire",
partnerDiscountDesc: "Réserve ce Tour pour bénéficier d'une réduction dans le skate shop partenaire. Montre ta confirmation de réservation au personnel du Shop.",
people: "{{count}} personnes",
perPerson: "par personne",
price: "Prix",
runsAbout: "Dure environ {{duration}}",
scheduledSession: "Session programmée",
shareText: "Découvre ce Tour de skate local : {{title}}",
skillLevel: "Niveau",
spotTypes: "Types de Spots",
tourGuide: "Guide du Tour",
tourSponsors: "Sponsors du Tour",
tripDates: "Dates du voyage",
viewProfile: "Voir le profil",
},
updates: {
admin: "Admin",
adminNote: "Tu publies en tant qu'admin SkateSpots. Ce sera clairement indiqué comme une notification d'admin, pas de l'hôte.",
kindCancelled: "Annulé",
kindNewSpot: "Nouveau Spot",
kindNewTime: "Nouvelle heure",
kindUpdate: "Mise à jour",
loading: "Chargement des mises à jour…",
notifiedCount: "{{count}} personnes notifiées.",
notifiedEveryone: "Tout le monde le verra sur l'Event.",
notifiesRsvps: "Notifie {{count}} RSVP",
noUpdates: "Aucune mise à jour de l'hôte pour le moment. Fais un RSVP et tu seras notifié si quelque chose change.",
placeholder: "Pluie — déplacé à dimanche 14h. Rendez-vous au ledge arrière…",
post: "Publier",
postAdminUpdate: "Publier une mise à jour admin",
posted: "Mise à jour publiée",
postError: "Impossible de publier la mise à jour",
postUpdate: "Publier une mise à jour",
tryAgain: "Réessaie.",
visibleToEveryone: "Visible par tout le monde sur cet Event",
},
destination: {
bitcoin: "Bitcoin",
closeSearch: "Fermer la recherche",
nothingMatches: "Rien ne correspond à « {{query}} ».",
placeholder: "Rechercher des Spots, Shops, marchands Bitcoin…",
shop: "Shop",
spot: "Spot",
typeChars: "Saisis au moins 2 caractères. Recherche des skate Spots, skate shops et marchands Bitcoin.",
typeCharsNear: "Saisis au moins 2 caractères. Recherche des skate Spots, skate shops et marchands Bitcoin à proximité.",
},
dateWindow: {
any: "Tous",
anytime: "N'importe quand",
month: "Ce mois-ci",
monthShort: "Mois",
today: "Aujourd'hui",
todayShort: "Aujourd'hui",
week: "Cette semaine",
weekend: "Week-end",
weekendShort: "W.-e.",
weekShort: "Sem.",
},
},
marketUi: {
gearSwap: {
title: "Gear Swap",
subtitle: "Achète et vends du matériel de skate d'occasion avec d'autres skateurs",
listGear: "Mettre du Gear en vente",
searchPlaceholder: "Rechercher du Gear...",
allCategories: "Toutes les catégories",
forSale: "À vendre",
wtb: "WTB",
trust: "Confiance",
filterByTrust: "Filtrer par confiance",
allSellers: "Tous les vendeurs",
verifiedOnly: "Vérifiés uniquement",
trustedPlus: "Fiables+",
followingOnly: "Abonnements uniquement",
pickupOrShip: "Retrait ou envoi",
localPickup: "Retrait local",
ships: "Envoi",
sortBy: "Trier par",
newest: "Plus récents",
priceLowHigh: "Prix : croissant",
priceHighLow: "Prix : décroissant",
trustScore: "Score de confiance",
nearest: "Plus proches (local)",
listingFound: "{{count}} annonce trouvée",
listingsFound: "{{count}} annonces trouvées",
loadFailed: "Échec du chargement des annonces",
tryLater: "Réessaie plus tard.",
noneTitle: "Aucune annonce trouvée",
noneFiltered: "Aucun Gear ne correspond à tes filtres actuels. Essaie de les effacer ou de chercher autre chose.",
noneFirst: "Sois le premier à mettre ton Gear en vente — decks, trucks, wheels, chaussures, tout ce qui touche au skate !",
listYourGear: "Mets ton Gear en vente",
faqLink: "Des questions ? Consulte la FAQ →",
},
hub: {
browse: "Parcourir",
selling: "En vente",
myTrades: "Mes échanges",
reputation: "Réputation",
loginListings: "Connecte-toi pour gérer tes annonces.",
loginReputation: "Connecte-toi pour voir ta réputation et tes avis.",
},
marketplace: {
heroTitle: "Shops et Marketplace",
heroBefore: "Notre Marketplace est propulsée par",
heroAfter: "- une place de marché décentralisée sur Nostr. Les skate shops peuvent lister leurs produits, et tu peux acheter/vendre du Gear d'occasion directement en Bitcoin.",
whatIsTitle: "Qu'est-ce que Plebeian Market ?",
whatIsBody: "Plebeian Market est une place de marché décentralisée construite sur Nostr. Achète et vends du matériel de skate directement avec d'autres skateurs en Bitcoin. Pas d'intermédiaires, pas de frais, liberté totale.",
noFeesTitle: "Sans frais",
noFeesBody: "Pas de plateforme qui prend 30 %. Ventes directes de particulier à particulier.",
bitcoinTitle: "Paiements en Bitcoin",
bitcoinBody: "Paie en Bitcoin. Rapide, sécurisé, mondial.",
decentralizedTitle: "Décentralisé",
decentralizedBody: "Construit sur Nostr. Aucune entreprise ne le contrôle.",
visit: "Visiter Plebeian Market",
buySellTitle: "Ce que tu peux acheter et vendre",
catCompletes: "Completes",
preBuilt: "Completes prêts à rouler",
customSetups: "Configurations personnalisées",
beginnerBoards: "Planches pour débuter",
catParts: "Pièces de Deck",
decks: "Decks",
trucks: "Trucks",
wheels: "Wheels",
bearings: "Bearings",
gripTape: "Griptape",
hardware: "Visserie",
catApparel: "Vêtements et protection",
skateShoes: "Chaussures de skate",
clothing: "Vêtements",
helmets: "Casques",
pads: "Protections",
backpacks: "Sacs à dos",
catAccessories: "Accessoires",
tools: "Outils",
wax: "Cire",
rails: "Rails",
stickers: "Stickers",
videos: "Vidéos",
magazines: "Magazines",
howItWorks: "Comment ça marche",
step1Title: "Parcourir les produits",
step1Body: "Visite Plebeian Market et parcours du matériel de skate de shops et de particuliers du monde entier.",
step2Title: "Contacter les vendeurs",
step2Body: "Écris directement aux vendeurs via Nostr. Négocie les prix, pose tes questions, organise l'envoi.",
step3Title: "Payer en Bitcoin",
step3Body: "Finalise ton achat avec Bitcoin Lightning pour des paiements instantanés et à faibles frais.",
step4Title: "Laisser un avis",
step4Body: "Note ton expérience et construis la réputation du vendeur sur Nostr. Tes avis aident la communauté.",
needBitcoinTitle: "Besoin de Bitcoin ?",
needBitcoinBefore: "Tu auras besoin d'un portefeuille Lightning avec des sats pour faire des achats. Consulte le",
onboardingGuide: "guide de démarrage",
needBitcoinAfter: "pour des recommandations de portefeuille.",
ownShopTitle: "Tu as un skate shop ?",
ownShopBody: "Référence ton Shop sur SkateSpots et vends tes produits sur Plebeian Market. Touche des clients du monde entier sans frais de plateforme.",
addShop: "Ajoute ton Shop",
startSelling: "Commence à vendre",
},
listingDetail: {
notFound: "Annonce introuvable",
notFoundBody: "Elle a peut-être été supprimée, ou le lien est erroné.",
backToGearSwap: "Retour au Gear Swap",
gearSwap: "Gear Swap",
viewPhoto: "Voir la photo {{n}}",
photoAlt: "{{title}} — photo {{n}}",
wantToBuy: "RECHERCHE",
sold: "VENDU",
description: "Description",
usuallyHere: "Généralement ici {{availability}}",
listed: "Publiée {{date}}",
listingCountOne: "{{count}} annonce · il y a {{age}} j",
listingCountMany: "{{count}} annonces · il y a {{age}} j",
relistActive: "Remettre en ligne",
markSold: "Marquer comme vendu",
deleteListing: "Supprimer l'annonce",
makeOffer: "Faire une offre",
shareListing: "Partager l'annonce",
unknown: "Inconnu",
linkCopied: "Lien copié",
linkCopiedBody: "Partage-le avec un skateur.",
copyFailed: "Impossible de copier le lien",
relisted: "Remise en ligne",
relistedBody: "Ton annonce est de nouveau active.",
couldNotUpdate: "Impossible de mettre à jour",
somethingWrong: "Une erreur est survenue",
},
create: {
imageUploaded: "Image téléversée",
uploadFailed: "Échec du téléversement",
failed: "Échec",
cooldownActive: "Délai actif",
cooldownWait: "Patiente {{time}} avant de créer une autre annonce",
limitReached: "Limite d'annonces atteinte",
limitReachedBody: "Tu as atteint ta limite mensuelle de {{limit}} annonces",
feeRequired: "Frais requis",
feeRequiredBody: "Paie les frais anti-spam pour continuer",
titleRequired: "Titre requis",
categoryRequired: "Catégorie requise",
photoRequired: "Photo requise",
photoRequiredBody: "Au moins une photo est requise pour vendre du Gear",
nip05Required: "Vérification NIP-05 requise",
nip05RequiredBody: "Tu as besoin d'une adresse Nostr vérifiée pour mettre du Gear en vente",
priceRequired: "Prix requis pour les annonces à prix fixe",
sizeRequired: "Taille requise",
sizeRequiredBody: "Sélectionne une taille pour {{category}}",
conditionRequired: "État requis",
conditionRequiredBody: "Sélectionne l'état de ton {{category}}",
wtbPosted: "Recherche publiée !",
wtbPostedBody: "Les vendeurs pourront trouver ta demande.",
listingCreated: "Annonce créée !",
listingCreatedBody: "Ton Gear est maintenant en vente.",
publishFailed: "Échec de la publication",
loginRequired: "Connexion requise",
loginRequiredBody: "Tu dois te connecter pour mettre du Gear en vente.",
backToStash: "Retour au Stash",
backToSpot: "Retour à {{title}}",
backToMarketplace: "Retour à la Marketplace",
backToMap: "Retour à la carte",
wantToBuy: "Recherche",
listYourGear: "Mets ton Gear en vente",
wtbSubtitle: "Dis à la communauté quel Gear tu recherches",
sellSubtitle: "Vends du matériel de skate à la communauté",
fromStashTitle: "Annonce depuis ton Stash",
fromStashBody: "Pré-rempli avec les détails de ton article du Stash. Vérifie et choisis un point de rendez-vous !",
nip05Banner: "Pour éviter le spam et protéger les acheteurs, tu as besoin d'une adresse Nostr vérifiée (NIP-05) pour mettre du Gear en vente.",
verifiedLabel: "Vérifié :",
checkingTrust: "Vérification de ton niveau de confiance...",
trustLevel: "Niveau de confiance :",
trusted: "Fiable",
active: "Actif",
newcomer: "Nouveau venu",
newUser: "Nouvel utilisateur",
remaining: "{{remaining}} annonces restantes sur {{limit}} ce mois-ci",
cooldownBody: "Les nouveaux utilisateurs ont un délai de 24 heures entre les annonces.",
timeRemaining: "Temps restant : {{time}}",
monthlyLimitTitle: "Limite mensuelle atteinte",
monthlyLimitBody: "Tu as atteint ta limite de {{limit}} annonces ce mois-ci. Construis ta réputation en créant des Spots ou en finalisant des ventes pour augmenter ta limite.",
powAccepted: "Proof of work accepté !",
feePaid: "Frais payés !",
canCreateNow: "Tu peux maintenant créer ton annonce.",
whatDoTitle: "Que veux-tu faire ?",
sellGear: "VENDRE DU GEAR",
categoryTitle: "Catégorie *",
categoryHint: "Quel type de Gear ?",
detailsTitle: "Détails du Gear",
detailsWtbHint: "Décris ce que tu recherches",
detailsSellHint: "Parle de ton article aux acheteurs",
titleLabel: "Titre *",
titlePlaceholderWtb: "Recherche Deck 8.0\"",
titlePlaceholderSell: "Deck Palace 8.25\" presque neuf",
summaryLabel: "Résumé court",
summaryPlaceholderWtb: "N'importe quelle marque, graphismes sobres de préférence",
summaryPlaceholderSell: "Très bon état, à peine utilisé",
descriptionLabel: "Description",
descriptionPlaceholderWtb: "Décris exactement ce que tu recherches - marques préférées, état exigé, etc.",
descriptionPlaceholderSell: "J'ai eu ce Deck à Noël mais je préfère une taille plus petite. Avec plaisir de te le laisser essayer avant d'acheter !",
fulfilmentLabel: "Comment est-ce livré ?",
pickup: "Retrait",
pickupHint: "Rendez-vous en local",
ships: "Envoi",
shipsHint: "Par la poste",
both: "Les deux",
bothHint: "Au choix",
addressNote: "Nous ne collectons jamais ton adresse — pour l'envoi, partage-la en privé dans le chat de l'échange.",
postageLabel: "Qui paie les frais de port ?",
requireEscrow: "Exiger un escrow",
requireEscrowHint: "Demande à l'acheteur de régler via un escrow Cashu.",
postageBuyer: "L'acheteur paie",
postageSeller: "Je paie",
postageSplit: "Partagé",
sizeLabel: "Taille",
selectSize: "Sélectionner une taille",
truckHeight: "Hauteur de truck",
selectHeight: "Sélectionner une hauteur",
wheelHardness: "Dureté des wheels",
selectHardness: "Sélectionner une dureté",
pricingTitle: "Prix",
pricingWtbHint: "Comment veux-tu payer ?",
pricingSellHint: "Comment veux-tu vendre ?",
priceLabel: "Prix *",
currencyLabel: "Devise",
photosTitle: "Photos",
photosSellHint: "Au moins une photo est requise",
photosWtbHint: "Facultatif - ajoute des images de référence",
productPhoto: "Produit {{n}}",
upload: "Téléverser",
photosNote: "Ajoute jusqu'à 5 photos. La première image sera la photo principale.",
pickupLocationTitle: "Lieu de retrait",
pickupLocationHint: "Lie à un skate Spot pour des rendez-vous faciles",
searchSpots: "Rechercher des Spots...",
noSpotsFound: "Aucun Spot trouvé. Essaie une autre recherche.",
availabilityLabel: "Quand es-tu généralement disponible ?",
availabilityPlaceholder: "Week-ends 10h-14h, mardi/jeudi soir",
availabilityHint: "Aide les acheteurs à organiser des rendez-vous avec toi",
durationTitle: "Durée de l'annonce",
durationHint: "Combien de temps cette annonce doit-elle rester active ?",
publishing: "Publication...",
checkingEligibility: "Vérification de l'éligibilité...",
cooldownButton: "DÉLAI : {{time}}",
limitReachedButton: "LIMITE ATTEINTE",
payFeeButton: "PAYER LES FRAIS POUR CONTINUER",
postWtbButton: "PUBLIER LA RECHERCHE",
listForSaleButton: "METTRE LE GEAR EN VENTE",
},
trades: {
title: "Mes échanges",
loginBody: "Connecte-toi pour gérer tes échanges sur la Marketplace et ta réputation.",
subtitle: "Confirmations, demandes et la réputation qu'elles construisent. Le paiement se règle avec l'autre skateur — l'app enregistre seulement l'accord.",
actionNeeded: "Action requise",
askedToConfirmSale: "t'a demandé de confirmer une vente",
recordedSale: "a enregistré une vente — confirme ton côté",
confirmSale: "Confirmer la vente",
confirm: "Confirmer",
nothingWaiting: "Rien ne t'attend pour le moment. 🛹",
yourRecords: "Tes enregistrements d'échanges",
noTrades: "Aucun échange pour le moment. Conclus un accord et confirme-le pour commencer à bâtir ta réputation.",
browseGearSwap: "Parcourir le Gear Swap",
roleSold: "Vendu",
roleBought: "Acheté",
roleTrade: "Échange",
with: "avec",
viewListing: "Voir l'annonce",
revoke: "Révoquer",
revokeTitle: "Révoquer cet enregistrement d'échange ?",
revokeBody: "Il cessera de compter pour ta réputation. L'autre partie conserve son propre témoignage. À utiliser pour un accord litigieux ou erroné.",
revokeNote: "Retiré par l'auteur.",
revoked: "Enregistrement d'échange révoqué",
revokedBody: "Il ne compte plus pour la réputation.",
revokeFailed: "Impossible de révoquer l'échange",
saleConfirmed: "Vente confirmée",
saleConfirmedBody: "Il peut maintenant confirmer son côté.",
saleConfirmFailed: "Impossible de confirmer la vente",
tradeConfirmed: "Échange confirmé",
tradeConfirmedBody: "Réputation mise à jour pour vous deux.",
tradeConfirmFailed: "Impossible de confirmer l'échange",
somethingWrong: "Une erreur est survenue.",
},
card: {
listingDeleted: "Annonce supprimée",
listingRemoved: "Annonce retirée",
listingDeletedBody: "Ton annonce a été supprimée. Les relais qui honorent les suppressions cesseront de la servir.",
listingRemovedBody: "Cette annonce a été retirée et sera masquée dans tout SkateSpots.",
removeFailed: "Échec du retrait",
somethingWrong: "Une erreur est survenue",
markedSold: "Marquée comme vendue",
markedSoldBody: "Ton annonce est maintenant affichée comme vendue.",
couldNotUpdate: "Impossible de mettre à jour",
relisted: "Remise en ligne",
relistedBody: "Ton annonce est de nouveau active.",
listingOptions: "Options de l'annonce",
report: "Signaler",
removeAdmin: "Retirer (admin)",
postage: "frais de port",
newSeller: "Nouveau vendeur",
saleOne: "{{count}} vente",
saleMany: "{{count}} ventes",
iHaveThis: "Je l'ai !",
deleteTitle: "Supprimer « {{title}} » ?",
adminRemoveTitle: "Retirer cette annonce ? (admin)",
deleteBody: "Cela demande aux relais de retirer ton annonce « {{title}} ». C'est irréversible depuis ici — tu devrais en créer une nouvelle.",
adminRemoveBody: "En tant qu'admin SkateSpots, tu retires « {{title}} ». Elle sera masquée dans toute l'app pour tout le monde et une demande de suppression sera envoyée aux relais.",
deleting: "Suppression…",
removing: "Retrait…",
deleteListing: "Supprimer l'annonce",
removeListing: "Retirer l'annonce",
reportCount: "{{count}} signalement",
reports: "{{count}} signalements",
viewTitle: "Voir {{title}}",
reportListing: "Signaler l'annonce",
manageListing: "Gérer l'annonce",
trusted: "Fiable",
daysOld: "{{n}} j",
monthsOld: "{{n}} mois",
yearsOld: "{{n}} ans",
listingsCount: "{{count}} annonces",
postageBuyer: "frais de port : acheteur",
postageSeller: "frais de port : vendeur",
postageSplit: "frais de port : partagés",
powTitle: "Proof of work NIP-13 — anti-spam gratuit",
verifiedTradeOne: "{{count}} échange vérifié",
verifiedTrades: "{{count}} échanges vérifiés",
reportSubmitted: "Signalement envoyé",
reportSubmittedBody: "Merci d'aider à garder la Marketplace sûre.",
reportFailed: "Échec de l'envoi du signalement",
selectReason: "Sélectionne un motif",
reportDialogBody: "Aide à garder la Marketplace sûre en signalant les annonces inappropriées ou trompeuses.",
reasonLabel: "Motif du signalement *",
detailsLabel: "Détails supplémentaires (facultatif)",
detailsPlaceholder: "Fournis tout contexte supplémentaire qui pourrait aider...",
reportNote: "Les signalements sont publiés sur Nostr et aident la communauté à identifier les annonces problématiques. Les annonces avec plusieurs signalements peuvent être automatiquement masquées.",
submitting: "Envoi...",
submitReport: "Envoyer le signalement",
},
tradeActions: {
tradeConfirmed: "Échange confirmé",
tradeConfirmedWithProof: "Un reçu vérifiable a été joint — cela compte pour les échanges vérifiés.",
tradeConfirmedBody: "Réputation mise à jour pour vous deux.",
tradeConfirmFailed: "Impossible de confirmer l'échange",
somethingWrong: "Une erreur est survenue.",
requestNote: "Merci de confirmer notre échange pour « {{title}} ».",
requestSent: "Confirmation demandée",
requestSentBody: "Le vendeur peut maintenant confirmer la vente et bâtir vos deux réputations.",
requestFailed: "Impossible d'envoyer la demande",
escrowRefunded: "Escrow remboursé",
escrowRefundedBody: "Les fonds sont de retour dans ton portefeuille Cashu.",
escrowRefundFailed: "Impossible de rembourser l'escrow",
confirmThisTrade: "Confirmer cet échange",
escrowAndRequest: "Escrow et demande",
shipsEscrowHint: "Échange expédié — utilise l'escrow pour qu'aucun côté n'expédie dans le vide. Partage ton adresse en privé dans le chat de l'échange, jamais ici.",
shipsHint: "Échange expédié — préfère l'escrow si le vendeur le propose, et partage ton adresse uniquement dans le chat.",
askSeller: "Demander au vendeur de confirmer",
waitingSeller: "Confirmation demandée — en attente du vendeur.",
refundEscrow: "Rembourser l'escrow",
buyWithSats: "Acheter en sats",
depositTitle: "Acompte de bonne foi (facultatif)",
payDeposit: "Payer l'acompte",
depositBefore: "Un échange n'a pas de facture, c'est donc ainsi qu'il obtient un",
verifiableCost: "coût vérifiable",
depositAfter: ". Remboursé à la livraison (ou utilise l'escrow Cashu pour un remboursement automatique). ⚠️ Prouve l'engagement, pas la livraison.",
depositPaid: "Acompte payé",
depositPaidBody: "Enregistré — il sera joint lorsque l'échange sera confirmé.",
paid: "Payé ⚡",
paidWithProof: "Reçu vérifiable enregistré — confirme l'échange pour qu'il compte.",
paidBody: "Demande au vendeur de confirmer l'échange pour qu'il compte pour vous deux.",
},
offers: {
accepted: "Acceptée",
declined: "Refusée",
withdrawn: "Retirée",
open: "Ouverte",
noAmount: "sans montant",
titleOwner: "Offres ({{count}})",
titleBuyer: "Tes négociations",
you: "Toi",
them: "Eux",
paidAskConfirm: "Payé — demande au vendeur de confirmer l'échange.",
payWithSats: "Payer en sats",
accept: "Accepter",
decline: "Refuser",
counter: "Contre-offre",
counterPlaceholder: "Ta contre-offre (sats)",
send: "Envoyer",
counterItemPlaceholder: "…ou propose un article en échange (facultatif)",
waitingOn: "En attente de",
waitingOnSuffix: "— ton tour reviendra s'il fait une contre-offre.",
withdraw: "Retirer",
dmAccepted: "✅ Ton offre a été acceptée ! Écris pour organiser la remise.",
dmDeclined: "❌ Ton offre a été refusée.",
offerAccepted: "Offre acceptée",
offerDeclined: "Offre refusée",
respondFailed: "Impossible de répondre",
somethingWrong: "Une erreur est survenue.",
offerWithdrawn: "Offre retirée",
withdrawFailed: "Impossible de retirer",
enterAmountOrItem: "Saisis un montant ou un article à échanger",
counterDm: "Contre-offre",
counterSent: "Contre-offre envoyée",
counterSentBody: "C'est son tour maintenant.",
counterFailed: "Impossible d'envoyer la contre-offre",
},
offer: {
validAmount: "Saisis un montant valide",
describeOffer: "Décris ton offre",
describeOfferBody: "Ajoute un montant, un article à échanger ou un message.",
dmAmount: " pour {{amount}} sats",
dmItem: " (offre : {{item}})",
dmBody: "🛹 Nouvelle offre sur ton annonce « {{title}} »{{amount}}{{item}}.{{note}}",
sent: "Offre envoyée",
sentBody: "{{sellerName}} peut l'accepter ou la refuser.",
sendFailed: "Impossible d'envoyer l'offre",
somethingWrong: "Une erreur est survenue.",
title: "Faire une offre",
description: "Propose des sats, ou un échange — {{sellerName}} peut accepter, refuser ou faire une contre-offre. Vous organisez la remise entre vous.",
amountLabel: "Montant (sats, facultatif)",
amountPlaceholder: "ex. 45000",
itemLabel: "Ou échanger un article (facultatif)",
itemPlaceholder: "ex. mon deck 8.25 + des wheels de rechange",
itemHint: "Un échange ? Mets ici ce que tu proposes — tu peux le combiner avec des sats.",
messageLabel: "Message (facultatif)",
messagePlaceholder: "Tout ce que le vendeur devrait savoir…",
send: "Envoyer l'offre",
},
markSold: {
enterBuyer: "Saisis le npub de l'acheteur",
dealClosed: "Accord conclu 🎉",
dealClosedBody: "Annonce marquée vendue et l'échange a été publié pour la réputation.",
closeFailed: "Impossible de conclure l'accord",
somethingWrong: "Une erreur est survenue.",
title: "Conclure l'accord",
description: "Marque cette annonce comme vendue et enregistre une attestation d'échange signée pour toi et l'acheteur.",
buyerLabel: "npub de l'acheteur",
methodLabel: "Comment le paiement a-t-il été fait ? (auto-déclaré)",
amountLabel: "Montant en sats (facultatif)",
submit: "Marquer vendu",
},
handoff: {
title: "Organiser la remise",
suggest: "Proposer un lieu et une heure",
suggestDm: "Salut ! J'aimerais acheter « {{title}} ». Propose un lieu et une heure pour se retrouver — avec plaisir de se voir dans un skate Spot public.",
orMeetAt: "Ou retrouvons-nous dans un Spot public proche :",
spotDm: "Salut ! J'aimerais acheter « {{title}} ». On se retrouve à {{spot}} ? {{url}}",
shareDelivery: "Partager les détails de livraison",
deliveryDm: "Salut ! J'aimerais acheter « {{title}} ». Voici mes détails de livraison :\n\nNom :\nAdresse :\n\n(Ne partage que ce dont le transporteur a besoin.)",
useLocker: "Utiliser un locker / point relais",
lockerDm: "Salut ! J'aimerais acheter « {{title}} ». Pourrait-on utiliser un locker / point relais plutôt qu'une adresse personnelle ?",
noteBefore: "Ces détails restent dans le chat privé — SkateSpots ne les voit jamais. Pour les échanges expédiés, préfère",
escrow: "l'escrow",
noteMiddle: ", et",
neverPay: "ne paie jamais en dehors des rails de l'app",
noteAfter: ". Retrouvez-vous dans un lieu public.",
},
shipping: {
noCounterparty: "Pas encore de contrepartie",
noCounterpartyBody: "Le vendeur doit d'abord enregistrer la vente (en nommant l'acheteur).",
markedShipped: "Marqué comme expédié",
markedReceived: "Marqué comme reçu",
issueReported: "Problème signalé",
receivedBody: "Merci — cela ne libère pas l'escrow ; règle directement avec le vendeur.",
notifiedBody: "L'autre partie a été notifiée.",
updateFailed: "Impossible de mettre à jour",
somethingWrong: "Une erreur est survenue.",
title: "Expédition",
shipped: "expédié",
received: "reçu",
issue: "problème",
trackingPlaceholder: "Numéro de suivi (facultatif)",
iShipped: "Je l'ai expédié",
iReceived: "Je l'ai reçu",
reportIssue: "Signaler un problème",
noteBefore: "Auto-déclaré — une note logistique,",
notProof: "pas une preuve",
noteAfter: ". Marquer « reçu » ne libère pas l'escrow. ⚠️ Ne photographie pas un colis avec une adresse visible, et ne partage un numéro de suivi que si tu es à l'aise qu'il soit public.",
},
pay: {
sent: "Paiement envoyé ⚡",
sentWithProof: "Reçu de paiement vérifiable enregistré — il comptera comme paiement vérifié.",
sentBody: "Préviens le vendeur — il peut confirmer l'échange pour qu'il compte pour vous deux.",
failed: "Échec du paiement",
title: "Payer en sats",
descSendPrefix: "Envoie",
descSendSuffix: "à {{sellerName}} pour régler cette transaction.",
descSettle: "Règle cette transaction directement avec {{sellerName}}.",
paid: "Payé !",
paidBody: "Demande au vendeur de confirmer l'échange — deux confirmations bâtissent vos deux réputations.",
noMethod: "{{sellerName}} n'a pas défini de moyen de paiement (pas de facture Lightning ni d'adresse). Écris-lui pour organiser le paiement.",
ownListing: "C'est ta propre annonce.",
paying: "Paiement…",
pay: "Payer",
payAmount: "Payer {{amount}} sats",
footnote: "Paie depuis ton portefeuille connecté (NWC, WebLN ou Cashu) directement à {{sellerName}} — SkateSpots ne détient jamais les fonds.",
},
spamFee: {
invoiceComment: "Frais d'annonce SkateSpots",
generateFailed: "Échec de la génération de la facture",
paymentSuccess: "Paiement réussi !",
satsSent: "{{amount}} sats envoyés à {{name}}",
autoPayFailed: "Échec du paiement automatique",
autoPayFailedBody: "Paie manuellement avec le QR code ou la facture",
invoiceCopied: "Facture copiée !",
copyFailed: "Échec de la copie",
received: "Paiement reçu !",
receivedBody: "Tes {{amount}} sats de frais ont été payés. Tu peux maintenant créer ton annonce.",
title: "Frais d'annonce uniques",
subtitle: "En tant que nouveau membre, de petits frais sont requis pour ta première annonce.",
whyTitle: "Pourquoi dois-je payer ?",
spamLabel: "Prévention du spam :",
spamBody: "Ces frais empêchent les bots et les arnaqueurs d'inonder la Marketplace de fausses annonces.",
trustLabel: "Construction de la confiance :",
trustBody: "Les nouveaux comptes doivent prouver leur engagement avant de publier. Après quelques annonces réussies, ces frais sont abandonnés.",
supportsLabel: "Soutient la communauté :",
supportsPrefix: "Les frais vont à",
supportsSpotOwner: " — la personne qui a créé ce Spot !",
supportsPlatform: " — pour aider à faire tourner SkateSpots.",
oneTimeFee: "~{{usd}} $ US • Frais uniques",
payToContinue: "Payer {{amount}} sats pour continuer",
proveWork: "Prouve ton travail à la place — gratuit",
proveWorkBody: "Consacre quelques secondes de CPU au lieu de {{amount}} sats. Pas d'argent, pas de portefeuille — une taxe anti-spam, pas un paiement.",
generating: "Génération de la facture...",
processing: "Traitement du paiement...",
qrAlt: "QR code de paiement",
copyInvoice: "Copier la facture",
openWallet: "Ouvrir le portefeuille",
payWithWallet: "Payer avec le portefeuille connecté",
scanHint: "Scanne le QR code avec un portefeuille Lightning ou utilise les boutons ci-dessus",
skipTitle: "Comment éviter ces frais à l'avenir :",
skip1: "Ajoute un skate Spot à la carte",
skip2: "Finalise 2-3 annonces réussies",
skip3: "Développe ta réputation dans la communauté",
skipNote: "Les membres fiables obtiennent des annonces gratuites illimitées !",
},
reputation: {
highlyTrusted: "Trader hautement fiable",
building: "Réputation en construction",
newTrader: "Nouveau trader",
title: "Échanges",
verified: "Vérifié",
sales: "Ventes",
purchases: "Achats",
tradeConfirmedOne: "échange confirmé mutuellement",
tradeConfirmedMany: "échanges confirmés mutuellement",
with: "avec",
personOne: "personne",
personMany: "personnes",
awaiting: "En attente de confirmation mutuelle",
withPaymentProof: "avec une preuve de paiement jointe",
selfReported: "(auto-déclaré — non vérifié)",
paymentVerified: "paiement vérifié",
zapReceipt: "(reçu de zap)",
singlePartnerWarning: "Toutes les confirmations viennent du même compte. La confirmation mutuelle est auto-déclarée, alors traite cet enregistrement avec prudence.",
lowDiversityWarning: "La plupart des confirmations viennent de très peu de comptes. Un petit groupe qui se cautionne mutuellement peut sembler actif — traite cet enregistrement avec prudence.",
ringWarning: "Ces comptes échangent principalement entre eux — un groupe fermé. La confirmation mutuelle au sein d'un réseau fermé est une preuve faible.",
weighted: "Pondéré par la confiance et l'activité",
footnote: "Auto-déclaré et signé mutuellement — un signal, pas une preuve de paiement.",
},
reputationPanel: {
reviewOfYou: "Avis sur toi",
yourRecord: "ton bilan",
listing: "Annonce",
averageOne: "moyenne sur {{count}} évaluation",
averageMany: "moyenne sur {{count}} évaluations",
reviewsTitle: "Avis et historiques d'échanges",
fromOthers: "{{count}} d'autres",
emptyBefore: "Aucun historique d'échange pour le moment. Conclus un accord et confirme-le dans",
emptyAfter: "— chaque confirmation devient un avis sur les deux profils.",
},
recommendations: {
published: "Recommandation publiée",
publishedBody: "Merci pour ton cautionnement.",
failed: "Impossible de recommander",
somethingWrong: "Une erreur est survenue.",
title: "Trader fiable",
recommendedBy: "Recommandé par",
skaterOne: "skateur",
skaterMany: "skateurs",
none: "Aucune recommandation pour le moment.",
youRecommend: "Tu recommandes ce trader ✓",
recommend: "Recommander comme trader fiable",
},
notification: {
newOffer: "Nouvelle offre",
counterOffer: "Contre-offre",
offerAccepted: "Offre acceptée",
offerDeclined: "Offre refusée",
offerWithdrawn: "Offre retirée",
confirmTrade: "Confirmer un échange",
tradeConfirmed: "Échange confirmé",
reviewOffer: "Examiner l'offre",
openListing: "Ouvrir l'annonce",
},
confirmRow: {
rateTrade: "Note l'échange :",
},
deckRating: {
title: "{{value}}/10 decks",
aria: "{{n}} sur 10",
},
clink: {
tip: "Zapper en Bitcoin",
copiedBody: "Code CLINK copié dans le presse-papiers.",
copyFailed: "Échec de la copie",
copyFailedBody: "Impossible d'accéder au presse-papiers.",
whatIs: "Qu'est-ce que CLINK ?",
tooltipTitle: "Paie directement en Bitcoin via Nostr",
tooltipBody: "CLINK est un code de paiement auto-conservé — pas de compte, pas d'intermédiaire. Scanne-le avec un portefeuille Lightning compatible et le zap lui parvient directement.",
descRecipient: "Envoie un paiement Bitcoin (Lightning) auto-conservé à {{recipientName}} — sans intermédiaire.",
descGeneric: "Envoie un paiement Bitcoin (Lightning) auto-conservé via Nostr — sans intermédiaire.",
qrAlt: "QR code de l'offre CLINK",
copyCode: "Copier le code CLINK",
openWallet: "Ouvrir dans un portefeuille CLINK",
copyToWallet: "Copier le code pour ton portefeuille",
priceFixed: "Fixe — {{amount}} sats",
priceFixedShort: "Prix fixe",
priceVariable: "Prix variable",
priceVariableCurrency: "Libellé en {{currency}}",
priceSpontaneous: "Tu choisis le montant",
footnote: "Scanne avec un portefeuille compatible CLINK (ex. ShockWallet). Si rien ne s'ouvre, copie le code ci-dessus — tu n'as peut-être pas de portefeuille compatible CLINK installé. Pas de dépositaire, pas de serveur web : la facture est demandée directement via Nostr.",
},
paymentReadiness: {
ready: "Tu peux être payé",
notReady: "Configure les paiements pour être payé",
readyBefore: "Ton adresse Lightning",
readyAfter: "est sur ton profil — les gens peuvent te zapper et te payer directement.",
silentSet: " Une adresse Bitcoin Silent Payment est aussi configurée.",
notReadyBefore: "Ajoute une adresse Lightning (et éventuellement une adresse Bitcoin Silent Payment) à ton",
nostrProfile: "profil Nostr",
notReadyAfter: "pour que les skateurs puissent te payer. Ça se configure une fois et fonctionne sur tous tes profils ici.",
},
seller: {
trade: "Échange",
active: "Actif",
markSold: "Marquer vendu",
yourListings: "Tes annonces",
activeCount: "{{count}} actives",
listItem: "Mettre un article en vente",
loading: "Chargement de tes annonces…",
empty: "Tu n'as encore aucune annonce.",
listFirst: "Mets ton premier article en vente",
},
noffer: {
label: "Code d'offre CLINK",
optional: "(facultatif, avancé)",
offerId: "Offre : {{id}}",
relay: "Relay : {{relay}}",
invalidBefore: "Cela ne ressemble pas à un code",
invalidAfter: "valide.",
valid: "Code CLINK valide — un bouton « Payer via CLINK » apparaîtra sur ton profil.",
help: "Colle un code de paiement CLINK auto-conservé (ex. depuis ShockWallet / Lightning.Pub) pour accepter des paiements Lightning natifs Nostr — sans serveur web ni dépositaire.",
learnSpecs: "En savoir plus sur les specs",
},
escrowPanel: {
escrowed: "{{amount}} sats sous escrow",
mint: "Mint",
refundSinceBefore: "L'acheteur peut se faire rembourser depuis le",
redeemBefore: "Le vendeur peut encaisser maintenant · l'acheteur est remboursé après le",
noExpiry: "Aucune expiration définie sur ce token.",
},
escrowRequest: {
enterAmount: "Saisis un montant d'escrow",
minLock: "Bloque pendant au moins {{days}} jour",
requestNote: "{{amount}} sats sous escrow pour notre échange — merci de confirmer la vente.",
created: "Escrow créé 🎉",
createdBody: "{{amount}} sats bloqués pendant {{days}} jours. {{sellerName}} peut encaisser à la livraison.",
createFailed: "Impossible de créer l'escrow",
somethingWrong: "Une erreur est survenue.",
title: "Mettre cet échange sous escrow",
description: "Les fonds sont bloqués pour {{sellerName}} et remboursables par toi si l'accord échoue après la date limite. Nécessite un portefeuille Lightning connecté.",
amountLabel: "Montant (sats)",
daysLabel: "Remboursement acheteur après (jours)",
daysHint: "Après ce nombre de jours, tu peux récupérer les fonds si le vendeur n'a pas livré.",
nativeOnly: "L'escrow Cashu est disponible uniquement dans l'app SkateSpots (pas la version web).",
lockAndRequest: "Bloquer et demander",
},
},
labOptions: {
coach: {
skill: {
basics: "Bases",
ollies: "Ollies",
kickflips: "Kickflips",
grinds: "Grinds et Slides",
manuals: "Manuals",
inverts: "Inverts",
vert: "Vert/Ramp",
bowl: "Bowl",
street: "Street",
freestyle: "Freestyle",
safety: "Sécurité",
diy: "Modules de skate DIY",
},
skillDesc: {
basics: "Pousser, position, équilibre, virages",
ollies: "Ollie et variantes (nollie, fakie)",
kickflips: "Kickflip, heelflip et variantes",
grinds: "50-50, 5-0, boardslide, et plus",
manuals: "Manual, nose manual, combos",
inverts: "Invert, handplant, eggplant, andrecht",
vert: "Half-pipe, quarter-pipe, drop-ins",
bowl: "Carving en bowl, pumping, lignes",
street: "Obstacles de street et créativité",
freestyle: "Figures en flat et flow",
safety: "Comment tomber, équipement de protection, prévention des blessures",
diy: "Construire des rampes, rails, ledges et autres obstacles de skate",
},
},
filmer: {
service: {
miniclips: "Mini Clips",
longparts: "Parties vidéo longues",
koth: "Style King of the Road",
documentaries: "Documentaires",
contests: "Tournage pour contests",
raw: "Rushes bruts",
followlines: "Tournage follow / ligne",
lines: "Tournage de lignes et B-roll",
},
serviceDesc: {
miniclips: "Clips de 15-60 s pour les réseaux sociaux",
longparts: "Parties vidéo complètes de 3-10 min avec musique",
koth: "Vidéos de skate style aventure/défi",
documentaries: "Contenu sur la culture skate et histoires",
contests: "Couverture professionnelle de contests et compétitions",
raw: "Rushes multi-angles non montés",
followlines: "Follow-cam fisheye pour les lignes",
lines: "Lignes au long objectif et b-roll cinématographique",
},
skill: {
vx1000: "VX1000",
hvx: "HVX / HPX",
cinema: "Caméra cinéma",
dslr: "DSLR / Hybride",
actioncam: "GoPro / Caméra d'action",
phone: "Tournage au téléphone",
drone: "Drone / Aérien",
gimbal: "Gimbal / Stabilisateur",
fisheye: "Objectif fisheye",
longlens: "Long objectif",
"4k": "4K / Haute cadence",
editing: "Montage vidéo",
color: "Étalonnage couleur",
},
skillDesc: {
vx1000: "Esthétique skate classique du VX1000",
hvx: "Look SD/HD du Panasonic HVX/HPX",
cinema: "Caméra cinéma (FX3, série C, RED, BMPCC)",
dslr: "Appareil DSLR ou hybride de haute qualité",
actioncam: "POV et fixations GoPro / caméra d'action",
phone: "Tournage mobile avec smartphones modernes",
drone: "Images aériennes et de drone",
gimbal: "Mouvement stabilisé au gimbal",
fisheye: "Plans au fisheye grand-angle",
longlens: "Long objectif pour des plans détaillés",
"4k": "Résolution 4K et ralenti haute cadence",
editing: "Montage vidéo professionnel et post-production",
color: "Correction et étalonnage couleur",
},
},
editor: {
service: {
parts: "Parties vidéo",
montages: "Montages",
reels: "Reels / Clips courts",
documentaries: "Documentaires",
contest: "Montages de contests",
brand: "Vidéos de marque / promo",
motion: "Motion design",
colorgrade: "Étalonnage couleur uniquement",
},
serviceDesc: {
parts: "Parties vidéo de skate complètes avec bande-son",
montages: "Montages compilation à partir de rushes",
reels: "Clips et reels de 15–60 s pour les réseaux",
documentaries: "Films de culture skate portés par une histoire",
contest: "Montages récap pour contests et Events",
brand: "Contenu promotionnel pour marques et Shops",
motion: "Titres, transitions, effets et graphismes",
colorgrade: "Correction couleur et étalonnage via LUT",
},
skill: {
premiere: "Adobe Premiere",
resolve: "DaVinci Resolve",
finalcut: "Final Cut Pro",
aftereffects: "After Effects",
luts: "LUT personnalisées",
vhs: "Esthétique VHS / rétro",
"4k": "Workflows 4K et RAW",
sound: "Sound design / mixage",
},
skillDesc: {
premiere: "Montage sur Adobe Premiere Pro",
resolve: "Montage et étalonnage sur DaVinci Resolve",
finalcut: "Montage sur Final Cut Pro",
aftereffects: "Motion design et compositing",
luts: "Développement de looks couleur personnalisés",
vhs: "Glitch VHS, super-8, looks de film rétro",
"4k": "Workflows caméra RAW/LOG haute résolution",
sound: "Synchro musique, SFX, mastering audio",
},
},
photo: {
service: {
action: "Action / Photos de figures",
sequence: "Séquences",
portraits: "Portraits",
editorial: "Éditorial / Magazine",
product: "Photo produit / Shop",
events: "Couverture d'Events",
lifestyle: "Lifestyle / Documentaire",
prints: "Tirages et fanzines",
},
serviceDesc: {
action: "Photos au pic de l'action des figures et lignes",
sequence: "Séquences de figures en plusieurs images",
portraits: "Portraits de riders et photos d'équipe",
editorial: "Doubles pages éditoriales prêtes pour magazine",
product: "Photographie de Decks, Gear et produits de Shop",
events: "Couverture de contests, jams et premières",
lifestyle: "Making-of et documentaire culturel",
prints: "Tirages physiques, fanzines et livres photo",
},
camera: {
dslr: "DSLR",
mirrorless: "Hybride",
medium: "Format moyen",
film35: "Film 35 mm",
filmmedium: "Film format moyen",
point: "Compact",
phone: "Téléphone",
},
lens: {
fisheye: "Fisheye",
wide: "Grand-angle",
standard: "Standard / Fixe",
telephoto: "Téléobjectif / Long objectif",
macro: "Macro",
zoom: "Zoom",
},
lighting: {
strobes: "Flashs de studio",
speedlights: "Flashs cobra",
profoto: "Profoto",
elinchrom: "Elinchrom",
godox: "Godox",
triggers: "Déclencheurs à distance",
continuous: "Continu / LED",
reflectors: "Réflecteurs / Diffuseurs",
naturallight: "Lumière naturelle uniquement",
},
support: {
tripod: "Trépied",
monopod: "Monopode",
lightstands: "Pieds d'éclairage",
gimbal: "Gimbal",
bag: "Rig mobile / Sac",
laptop: "Tethering sur place",
},
style: {
flashfisheye: "Fisheye au flash",
natural: "Lumière naturelle",
bw: "Noir et blanc",
film: "Esthétique argentique",
longlens: "Long objectif",
studio: "Studio / Éclairé",
street: "Street / Documentaire",
},
},
builder: {
service: {
diy: "Spots DIY",
concrete: "Parcs en béton",
wood: "Rampes en bois",
bowls: "Bowls et piscines",
transitions: "Transitions et quarters",
rails: "Rails et ledges",
boxes: "Manny pads et boxes",
minis: "Mini rampes",
pumptrack: "Pump tracks",
foam: "Fosses en mousse / Indoor",
repairs: "Réparations et resurfaçage",
design: "Conception et conseil",
},
serviceDesc: {
diy: "Spots DIY communautaires et constructions sauvages",
concrete: "Skateparks et modules en béton coulé",
wood: "Rampes, launch boxes et obstacles en bois",
bowls: "Bowls, piscines et deep transition",
transitions: "Quarterpipes, banks et transitions",
rails: "Rails en acier, ledges et modules de grind",
boxes: "Manny pads, funboxes et modules de street",
minis: "Mini rampes et installations de jardin",
pumptrack: "Pump tracks et lignes de flow",
foam: "Fosses en mousse, resi et modules d'entraînement indoor",
repairs: "Réparation, rapiéçage et resurfaçage des spots existants",
design: "Plans, dessins et conseil de construction",
},
skill: {
concretework: "Béton / Projeté",
welding: "Soudure / Fabrication acier",
carpentry: "Charpente / Bois",
formwork: "Coffrage et ferraillage",
masonry: "Maçonnerie / Parpaing",
coping: "Coping (piscine / acier)",
surfacing: "Skatelite / Revêtement",
earthworks: "Terrassement / Excavation",
},
scale: {
backyard: "Jardin / Mini",
diycommunity: "DIY communautaire",
publicpark: "Parc public complet",
indoor: "Installation indoor",
event: "Parcours d'Event / contest",
},
},
artist: {
service: {
boardart: "Graphismes de board",
logos: "Logos et branding",
posters: "Affiches et flyers",
merch: "Merch et vêtements",
zines: "Fanzines et print",
illustration: "Illustration",
stickers: "Stickers et décalques",
webdesign: "Web / Digital",
typography: "Typographie / Lettering",
animation: "Animation / Motion",
},
serviceDesc: {
boardart: "Graphismes de Deck et art sur griptape",
logos: "Identité de marque, logos et wordmarks",
posters: "Affiches d'Events, flyers et art de concert",
merch: "Graphismes de t-shirts, hoodies et vêtements",
zines: "Fanzines, éditorial et mise en page print",
illustration: "Illustration personnalisée et création de personnages",
stickers: "Packs de stickers, décalques et slaps",
webdesign: "Sites web, digital et UI",
typography: "Lettering à la main et typographie personnalisée",
animation: "Motion design et animation",
},
medium: {
digital: "Digital / Vectoriel",
handdrawn: "Dessin à la main",
screenprint: "Sérigraphie",
paint: "Peinture / Acrylique",
collage: "Collage / Mixte",
photo: "Photo / Photoshop",
"3d": "3D / Rendu",
},
tool: {
illustrator: "Adobe Illustrator",
photoshop: "Adobe Photoshop",
procreate: "Procreate",
affinity: "Affinity",
figma: "Figma",
blender: "Blender",
aftereffects: "After Effects",
clipstudio: "Clip Studio",
},
},
graffiti: {
style: {
throwups: "Throw-ups",
pieces: "Pieces / Burners",
murals: "Murales",
characters: "Personnages",
lettering: "Lettering / Wildstyle",
stencil: "Pochoir",
handstyles: "Handstyles / Tags",
"3dstyle": "Style 3D",
abstract: "Abstrait",
},
styleDesc: {
throwups: "Remplissages rapides en deux couleurs",
pieces: "Pieces et burners en couleurs",
murals: "Murales et productions grand format",
characters: "Personnages et figures",
lettering: "Wildstyle et structure des lettres",
stencil: "Pochoir et street art",
handstyles: "Tags et handstyles",
"3dstyle": "Lettrage 3D et anamorphique",
abstract: "Abstrait et freestyle",
},
medium: {
spray: "Bombes aérosol",
rollers: "Rouleaux / Emulsion",
markers: "Marqueurs / Encres",
brush: "Pinceau / Peinture",
digital: "Digital / Procreate",
},
context: {
legalwalls: "Murs légaux",
commissions: "Commandes",
liveart: "Peinture en direct",
skateparks: "Murales de skatepark",
interiors: "Intérieurs / Shops",
workshops: "Ateliers",
},
},
tattoo: {
style: {
traditional: "Traditionnel / Old School",
neotraditional: "Néo-traditionnel",
fineline: "Fine line",
blackwork: "Blackwork",
realism: "Réalisme",
lettering: "Lettering / Script",
illustrative: "Illustratif",
skateflash: "Flash skate",
ignorant: "Style ignorant / handpoke",
japanese: "Japonais / Irezumi",
},
styleDesc: {
traditional: "Traits gras, Americana classique",
neotraditional: "Traditionnel avec des détails modernes",
fineline: "Travail délicat à l'aiguille unique",
blackwork: "Noir massif et motifs",
realism: "Photoréaliste et portraits",
lettering: "Script, lettering et citations",
illustrative: "Illustratif et graphique",
skateflash: "Motifs flash de la culture skate",
ignorant: "Style ignorant / naïf handpoke",
japanese: "Traditionnel japonais / irezumi",
},
method: {
machine: "Machine",
handpoke: "Hand-poke / Stick & Poke",
flash: "Flash disponible",
custom: "Motifs personnalisés",
coverup: "Cover-ups",
},
},
trainer: {
focus: {
strength: "Force et conditionnement",
mobility: "Mobilité et souplesse",
injuryprevention: "Prévention des blessures",
rehab: "Rééducation / Kiné",
recovery: "Récupération et bodywork",
balance: "Équilibre et stabilité",
cardio: "Cardio / Endurance",
nutrition: "Conseils nutrition",
},
focusDesc: {
strength: "Développer force et puissance pour le skate",
mobility: "Amplitude articulaire et souplesse",
injuryprevention: "Préhabilitation et réduction du risque de blessure",
rehab: "Kinésithérapie et rééducation après blessure",
recovery: "Massage, bodywork et récupération",
balance: "Proprioception, équilibre et stabilité",
cardio: "Conditionnement et endurance",
nutrition: "Conseils d'alimentation et de nutrition",
},
injury: {
ankles: "Chevilles",
knees: "Genoux",
wrists: "Poignets",
hips: "Hanches",
back: "Dos / Colonne",
shoulders: "Épaules",
heelbruise: "Contusions au talon",
concussion: "Protocole de commotion",
},
credential: {
physio: "Kinésithérapeute diplômé",
osteo: "Ostéopathe",
certtrainer: "Entraîneur certifié",
sportstherapist: "Thérapeute du sport",
massage: "Masseur",
inperson: "En personne",
remote: "À distance / En ligne",
},
},
musician: {
genre: {
punk: "Punk",
hardcore: "Hardcore",
metal: "Metal",
rock: "Rock",
indie: "Indie / Alt",
hiphop: "Hip-Hop / Rap",
electronic: "Électronique",
lofi: "Lo-Fi / Beats",
reggae: "Reggae / Dub",
ska: "Ska",
jazz: "Jazz",
funk: "Funk / Soul",
flamenco: "Flamenco",
folk: "Folk / Acoustique",
experimental: "Expérimental",
grunge: "Grunge",
},
instrument: {
vocals: "Chant",
guitar: "Guitare",
bass: "Basse",
drums: "Batterie",
keys: "Claviers / Synthé",
dj: "DJ / Platines",
producer: "Producteur / Beats",
sax: "Sax / Cuivres",
strings: "Cordes",
other: "Autre",
},
act: {
solo: "Artiste solo",
band: "Groupe",
dj: "DJ",
producer: "Producteur",
collective: "Collectif",
},
},
judge: {
format: {
game_of_skate: "Game of S.K.A.T.E.",
best_trick: "Best Trick",
jam: "Format Jam",
contest: "Contest / Comp",
street_league: "Style Street League",
bowl: "Bowl / Vert",
mini_ramp: "Mini Ramp",
park: "Park",
street: "Street",
freestyle: "Freestyle",
world_tour: "World Destruction Tour",
am_series: "Am Series / Qualifs",
local_jam: "Jam local / Grassroots",
online: "Contest en ligne / IG",
},
specialty: {
head_judge: "Juge principal",
scoring: "Notation / Dépouillement",
mc: "MC / Annonceur",
format_design: "Conception de format",
rules: "Règlement / Arbitrage",
brackets: "Brackets / Séries",
livestream: "Jugement en livestream",
am_scout: "Repérage Am",
},
level: {
local: "Local",
regional: "Régional",
national: "National",
international: "International",
pro: "Circuit pro",
},
},
organizer: {
event: {
street_jam: "Street Jam",
best_trick: "Best Trick",
game_of_skate: "Game of S.K.A.T.E.",
contest: "Contest / Comp",
bowl: "Bowl / Vert",
mini_ramp: "Mini Ramp",
park: "Session park",
demo: "Démo pro",
clinic: "Clinic / Atelier",
meetup: "Meetup / Cruise",
downhill: "Descente / Course",
slalom: "Slalom",
kids: "Enfants / Jeunes",
charity: "Caritatif / Collecte",
tour_stop: "Étape de Tour",
premiere: "Première vidéo",
market: "Marché / Expo d'art",
},
service: {
organizing: "Organisation complète",
hosting: "Animation / MC",
permits: "Permis et autorités",
sponsorship: "Sponsoring / Accords de marque",
promotion: "Promotion et marketing",
livestream: "Livestream / Couverture",
sound: "Son et musique",
ramps: "Rampes et obstacles",
safety: "Sécurité et premiers secours",
vendors: "Restauration et stands",
media: "Couverture photo / vidéo",
registration: "Inscriptions et brackets",
},
scale: {
grassroots: "Grassroots",
local: "Local",
regional: "Régional",
national: "National",
international: "International",
pro: "Circuit pro",
},
},
barber: {
service: {
haircut: "Coupe de cheveux",
fade: "Fade",
beard: "Taille de barbe",
lineup: "Line-up / Contours",
colour: "Coloration et teinture",
kids: "Coupes enfants",
},
serviceDesc: {
haircut: "Une coupe classique — tondeuse et ciseaux.",
fade: "Un fade dégradé — bas, moyen ou haut.",
beard: "Taille, dessin et entretien de la barbe.",
lineup: "Contours nets autour de la ligne de cheveux et de la nuque.",
colour: "Couleur, décoloration, teinture et toning.",
kids: "Des coupes patientes pour les plus jeunes skateurs.",
},
style: {
skin_fade: "Skin Fade",
taper: "Taper",
buzz: "Coupe rasée",
mohawk: "Crête",
mullet: "Mulet",
curly: "Boucles / Afro",
long: "Cheveux longs / Dégradé",
classic: "Coupe classique aux ciseaux",
},
setting: {
shop: "Shop / Barber",
mobile: "À domicile / Déplacements",
event: "Events et contests de skate",
},
},
transport: {
vehicle: {
car: "Voiture",
taxi: "Taxi / VTC",
van: "Utilitaire / Minibus",
moto: "Moto",
helicopter: "Hélicoptère",
plane: "Avion",
boat: "Bateau",
other: "Autre véhicule",
},
service: {
people: "Personnes",
goods: "Marchandises / fret",
gear: "Matériel de skate",
airport: "Transfert aéroport",
venue: "Transfert lieu / événement",
tours: "Excursions / road trips",
logistics: "Logistique d'événement",
other: "Autre service",
},
feature: {
cargo: "Espace de chargement",
bike_board: "Porte-vélo / porte-planche",
wheelchair: "Accès fauteuil roulant",
pets: "Animaux acceptés",
border: "Passage de frontière",
night: "Conduite de nuit",
covered: "Couvert / résistant aux intempéries",
group: "Grands groupes",
}
},
tour: {
skill: {
beginner: {
label: "Débutant",
description: "Nouveau en skate ou figures de base",
},
intermediate: {
label: "Intermédiaire",
description: "À l'aise sur la plupart des terrains",
},
advanced: {
label: "Avancé",
description: "Skateur expérimenté, spots costauds",
},
all: {
label: "Tous niveaux",
description: "Convient à tout le monde",
},
},
},
},
};
export default frBatch6;