SkateSpots/src/i18n/es.ts
shakespeare.diy f10aa7971c Step 3: Crews — map-anchored collective feature (kind 35006)
- New SkateCrew kind 35006 + type/parser + useCrews/useCrew hooks
- /crews directory, /create-crew, /edit-crew, /crew/:pubkey/:identifier pages
- Reuses the collective engine: NIP-32 membership attestation (confirmed/pending),
  CollectiveMembers + ConfirmMembershipCard, ClinkPayButton, SpotPicker
- Activity v1: home spots + crew member feed (no events, per plan)
- Map: teal/cyan Crews layer at home turf with crew markers + popups;
  wired through SpotMap props, layer toggles (mobile popover + filters sheet),
  and mobileLayerCount badge
- Nav: Crews added to navItemKeys (desktop header, mobile bottom bar, sidebar)
  with en/es i18n keys
- NIP.md: documents kind 35006, tag taxonomy, and shared membership mechanism

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-07-24 13:59:50 +07:00

783 lines
26 KiB
TypeScript

/**
* Spanish translations (Spain / Castellano)
* Note: Skateboarding trick names and terminology stay in English
* (kickflip, ollie, grind, etc. are universal in skate culture)
*/
const es = {
// Common
common: {
loading: 'Cargando...',
error: 'Error',
save: 'Guardar',
cancel: 'Cancelar',
delete: 'Eliminar',
edit: 'Editar',
create: 'Crear',
submit: 'Enviar',
close: 'Cerrar',
back: 'Atrás',
next: 'Siguiente',
done: 'Listo',
search: 'Buscar',
filter: 'Filtrar',
sort: 'Ordenar',
share: 'Compartir',
copy: 'Copiar',
copied: '¡Copiado!',
viewAll: 'Ver Todo',
seeMore: 'Ver Más',
showMore: 'Mostrar Más',
showLess: 'Mostrar Menos',
noResults: 'No se encontraron resultados',
tryAgain: 'Intentar de Nuevo',
learnMore: 'Saber Más',
getStarted: 'Comenzar',
yes: 'Sí',
no: 'No',
or: 'o',
and: 'y',
free: 'Gratis',
new: 'Nuevo',
popular: 'Popular',
featured: 'Destacado',
verified: 'Verificado',
sats: 'sats',
clear: 'Limpiar',
clearFilters: 'Limpiar Filtros',
clearAll: 'Limpiar Todo',
},
// Navigation
nav: {
home: 'Inicio',
map: 'Tiendas y Spots',
lab: 'El Lab',
events: 'Eventos',
crews: 'Crews',
wallet: 'Billetera',
settings: 'Ajustes',
more: 'Más',
rewards: 'Recompensas',
stats: 'Estadísticas',
about: 'Acerca de',
food: 'Comida',
marketplace: 'Mercado',
},
// Authentication
auth: {
login: 'Iniciar Sesión',
logout: 'Cerrar Sesión',
signUp: 'Registrarse',
signUpTitle: '¿Nuevo en Nostr?',
signUpDesc: 'Crea una cuenta nueva para empezar. Es gratis y abierto.',
orLogIn: 'O inicia sesión',
loginWithExtension: 'Iniciar con Extensión',
loginWithAmber: 'Iniciar con Amber (Android)',
loginWithKey: 'Clave Secreta (nsec) o Frase de Recuperación',
loginWithBunker: 'Iniciar con Nostr Connect',
bunkerUri: 'Cadena de Conexión del Bunker',
openAmber: 'Abrir Amber',
connectToBunker: 'Conectar al Bunker',
noExtension: 'No se detectó ninguna extensión.',
extensionHelp: 'Intenta usar el botón Registrarse arriba para crear una cuenta nueva, o usa las pestañas Amber, Clave o Bunker si tienes credenciales existentes.',
amberDesc: 'Amber es una app segura de firma Nostr para dispositivos Android. Haz clic en el botón para abrir Amber y autorizar el acceso.',
bunkerDesc: 'Accede a tu cuenta desde cualquier dispositivo usando un firmador remoto (bunker). Tus claves se mantienen seguras en el servidor, nunca expuestas a sitios web.',
keyPlaceholder: 'nsec1... o tu frase de recuperación de 12 palabras',
keyHint: 'Puedes pegar tu clave nsec o tu frase de recuperación de 12 palabras',
uploadKeyFile: 'Subir Archivo de Clave',
loggingIn: 'Iniciando sesión...',
connecting: 'Conectando...',
verifying: 'Verificando...',
},
// Backup Reminder
backup: {
title: '¡Respalda Tu Cuenta!',
subtitle: 'Recordatorio de seguridad importante',
message: 'Tu frase de recuperación o clave secreta (nsec) es la ÚNICA forma de acceder a tu cuenta desde otros dispositivos.',
warning: '¡Si la pierdes, pierdes tu cuenta para siempre!',
backupNow: 'Respaldar Ahora',
confirmed: 'Ya la Respaldé',
remindLater: 'Recordarme después',
},
// PWA Install
pwa: {
installTitle: 'Instalar SkateSpots',
installSubtitle: 'Obtén la experiencia completa de la app',
addToHomeScreen: 'Añadir a Pantalla de Inicio',
installApp: 'Instalar App',
maybeLater: 'Quizás después',
gotIt: '¡Entendido!',
benefits: {
fast: 'Súper Rápido',
offline: 'Funciona Sin Internet',
fullAccess: 'Acceso Completo',
},
iosStep1: 'Toca el botón Compartir',
iosStep1Hint: 'en la parte inferior de Safari',
iosStep2: 'Desplázate y toca "Añadir a pantalla de inicio"',
iosStep2Hint: 'en el menú de compartir',
iosStep3: 'Toca "Añadir" para instalar',
iosStep3Hint: 'La app aparecerá en tu pantalla de inicio',
androidStep1: 'Toca el botón de menú',
androidStep1Hint: '(tres puntos) en tu navegador',
androidStep2: 'Selecciona "Añadir a pantalla de inicio"',
androidStep2Hint: 'o "Instalar aplicación"',
androidStep3: 'Confirma para instalar',
androidStep3Hint: 'La app aparecerá en tu pantalla de inicio',
tagline: 'Gratis • Funciona sin conexión • Rápido y confiable',
},
// Home/Index Page
home: {
tagline: 'Impulsado por la Comunidad • Basado en Relays',
title: 'SKATE SPOTS',
subtitle: 'Descubre Spots • Reúnete • Aprende Trucos • Apoya Locales',
description: 'El skate real pasa offline - esta herramienta te ayuda a encontrarlo.',
betaWarning: 'BETA - En Construcción • Usa Bajo Tu Propio Riesgo',
pwaHint: 'App Web Progresiva - Instala en Tu Dispositivo',
exploreMap: 'Explorar Mapa',
addSpot: 'Añadir Spot',
globalSpots: 'Spots Globales',
openCommunity: 'Comunidad Abierta',
lightningZaps: 'Zaps Lightning',
featuredSpots: 'Spots Destacados',
featuredSpotsDesc: 'Spots de skate verificados por la comunidad de todo el mundo',
upcomingEvents: 'Próximos Eventos',
upcomingEventsDesc: 'Competiciones, quedadas y sessions que vienen pronto',
noSpotsYet: 'Aún no hay spots',
noSpotsHint: '¡Sé el primero en añadir un spot de skate!',
noEventsYet: 'No hay próximos eventos',
noEventsHint: '¡Vuelve más tarde o crea uno!',
theLab: 'El Lab',
theLabDesc: 'Aprende trucos, encuentra coaches y mejora tu skate',
coaches: 'Coaches',
coachesDesc: 'Aprende de skaters experimentados que pueden ayudarte a progresar',
filmers: 'Filmers',
filmersDesc: 'Conecta con filmers para capturar tus mejores clips',
findCoach: 'Buscar Coach',
becomeCoach: 'Ser Coach',
findFilmer: 'Buscar Filmer',
becomeFilmer: 'Ser Filmer',
viewAllSpots: 'Ver Todos los Spots',
viewAllEvents: 'Ver Todos los Eventos',
createEvent: 'Crear Evento',
readyToShare: '¿Listo para Compartir?',
readyToShareDesc: 'Ayuda a crecer la comunidad de skateboarding añadiendo tus spots favoritos. Cada ubicación que compartas ayuda a otros skaters a descubrir nuevos lugares para patinar.',
},
// Map Page
mapPage: {
title: 'Tiendas y Spots',
spots: 'Spots',
shops: 'Tiendas',
filters: 'Filtros',
listView: 'Lista',
mapView: 'Mapa',
nearMe: 'Cerca de Mí',
searchPlaceholder: 'Buscar spots...',
noSpotsInArea: 'No hay spots en esta área',
zoomIn: 'Acercar',
zoomOut: 'Alejar',
myLocation: 'Mi Ubicación',
locationsFound: '{{count}} ubicaciones encontradas',
spotsOnly: 'Solo Spots',
shopsOnly: 'Solo Tiendas',
spotsAndShops: 'Spots y Tiendas',
noSpotsMatch: 'Ningún spot coincide con tus filtros.',
noSpotsYet: 'Aún no se han añadido spots.',
addFirstSpot: 'Añadir Primer Spot',
},
// Spots
spots: {
addSpot: 'Añadir Spot',
editSpot: 'Editar Spot',
spotDetails: 'Detalles del Spot',
spotName: 'Nombre del Spot',
spotType: 'Tipo de Spot',
description: 'Descripción',
location: 'Ubicación',
address: 'Dirección',
photos: 'Fotos',
addPhotos: 'Añadir Fotos',
obstacles: 'Obstáculos',
features: 'Características',
bustLevel: 'Nivel de Riesgo',
bestTime: 'Mejor Horario',
tips: 'Consejos',
reviews: 'Reseñas',
addReview: 'Añadir Reseña',
reportSpot: 'Reportar Spot',
directions: 'Cómo Llegar',
shareSpot: 'Compartir Spot',
createdBy: 'Creado por',
lastUpdated: 'Última actualización',
// Spot types (keeping English skate terms)
types: {
park: 'Skatepark',
street: 'Street Spot',
diy: 'Spot DIY',
plaza: 'Plaza',
indoor: 'Indoor',
bowl: 'Bowl',
vert: 'Vert',
miniramp: 'Mini Ramp',
},
// Bust levels
bustLevels: {
chill: 'Tranqui',
moderate: 'Moderado',
sketchy: 'Arriesgado',
heavy: 'Peligroso',
},
},
// Events
events: {
title: 'Eventos de Skate',
createEvent: 'Crear Evento',
editEvent: 'Editar Evento',
eventDetails: 'Detalles del Evento',
eventName: 'Nombre del Evento',
eventType: 'Tipo de Evento',
date: 'Fecha',
time: 'Hora',
startDate: 'Fecha de Inicio',
endDate: 'Fecha de Fin',
venue: 'Lugar',
organizer: 'Organizador',
attendees: 'Asistentes',
going: 'Voy',
interested: 'Interesado',
rsvp: 'Confirmar',
ticketPrice: 'Precio de Entrada',
freeEntry: 'Entrada Gratis',
register: 'Registrarse',
moreInfo: 'Más Info',
upcomingEvents: 'Próximos',
pastEvents: 'Pasados',
noEvents: 'No se encontraron eventos',
findEvents: 'Encuentra competencias, demos, sessions y más',
searchPlaceholder: 'Buscar eventos...',
loginToCreate: 'Inicia sesión para crear eventos',
noEventsMatch: 'Ningún evento próximo coincide con tus filtros.',
noUpcoming: 'No se encontraron próximos eventos.',
noPast: 'No se encontraron eventos pasados.',
// Event types (keeping some English skate terms)
types: {
contest: 'Competencia',
session: 'Session',
meetup: 'Encuentro',
premiere: 'Premiere de Video',
workshop: 'Taller',
demo: 'Demo',
jam: 'Jam',
},
},
// Shops
shops: {
title: 'Tiendas de Skate',
addShop: 'Añadir Tienda',
editShop: 'Editar Tienda',
shopDetails: 'Detalles de la Tienda',
shopName: 'Nombre de la Tienda',
hours: 'Horario',
phone: 'Teléfono',
website: 'Sitio Web',
services: 'Servicios',
brands: 'Marcas',
supportLocal: 'Apoya lo Local',
},
// Wallet
wallet: {
title: 'Billetera',
balance: 'Saldo',
send: 'Enviar',
receive: 'Recibir',
transactions: 'Transacciones',
history: 'Historial',
noTransactions: 'Aún no hay transacciones',
sendSats: 'Enviar Sats',
receiveSats: 'Recibir Sats',
amount: 'Cantidad',
recipient: 'Destinatario',
lightning: 'Lightning',
onChain: 'On-chain',
invoice: 'Factura',
address: 'Dirección',
scanQR: 'Escanear QR',
paste: 'Pegar',
payInvoice: 'Pagar Factura',
createInvoice: 'Crear Factura',
copied: '¡Copiado al portapapeles!',
insufficientFunds: 'Fondos insuficientes',
paymentSent: '¡Pago enviado!',
paymentReceived: '¡Pago recibido!',
cashu: {
title: 'Billetera Cashu',
tokens: 'Tokens',
mint: 'Mint',
mints: 'Mints',
manageMints: 'Administrar Mints',
addMint: 'Añadir Mint',
removeMint: 'Eliminar Mint',
defaultMint: 'Mint Predeterminado',
backup: 'Respaldar',
restore: 'Restaurar',
recoveryPhrase: 'Frase de Recuperación',
viewRecoveryPhrase: 'Ver Frase de Recuperación',
seedWarning: '¡Esto es como tu nsec de Nostr - mantenlo secreto y respaldado!',
},
},
// Settings
settings: {
title: 'Ajustes',
profile: 'Perfil',
editProfile: 'Editar Perfil',
account: 'Cuenta',
security: 'Seguridad',
relays: 'Relays',
appearance: 'Apariencia',
language: 'Idioma',
notifications: 'Notificaciones',
privacy: 'Privacidad',
about: 'Acerca de',
help: 'Ayuda',
feedback: 'Comentarios',
version: 'Versión',
// Profile fields
displayName: 'Nombre para Mostrar',
username: 'Nombre de Usuario',
bio: 'Biografía',
website: 'Sitio Web',
lightningAddress: 'Dirección Lightning',
profilePicture: 'Foto de Perfil',
banner: 'Banner',
saveProfile: 'Guardar Perfil',
// Security
backupKeys: 'Respaldar Claves',
exportKeys: 'Exportar Claves',
secretKey: 'Clave Secreta',
publicKey: 'Clave Pública',
showSecretKey: 'Mostrar Clave Secreta',
hideSecretKey: 'Ocultar Clave Secreta',
copyKey: 'Copiar Clave',
keysBackedUp: 'Has confirmado que tus claves están respaldadas de forma segura.',
keysNotBackedUp: '¡Asegúrate de respaldar tu frase de recuperación o clave secreta!',
// Language
selectLanguage: 'Seleccionar Idioma',
english: 'Inglés',
spanish: 'Español',
},
// Lab / Coaches
lab: {
title: 'El Lab',
subtitle: 'Mejora tu skate',
coaches: 'Coaches',
filmers: 'Filmers',
findCoach: 'Buscar Coach',
becomeCoach: 'Ser Coach',
findFilmer: 'Buscar Filmer',
becomeFilmer: 'Ser Filmer',
hourlyRate: 'Tarifa por Hora',
experience: 'Experiencia',
specialties: 'Especialidades',
availability: 'Disponibilidad',
bookSession: 'Reservar Sesión',
contactCoach: 'Contactar Coach',
noCoaches: 'No se encontraron coaches en tu área',
noFilmers: 'No se encontraron filmers en tu área',
},
// Rewards
rewards: {
title: 'Recompensas',
yourPoints: 'Tus Puntos',
earnPoints: 'Ganar Puntos',
redeemPoints: 'Canjear Puntos',
leaderboard: 'Tabla de Líderes',
achievements: 'Logros',
dailyTasks: 'Tareas Diarias',
weeklyTasks: 'Tareas Semanales',
},
// Zaps
zaps: {
zapButton: 'Zap',
sendZap: 'Enviar Zap',
zapAmount: 'Cantidad del Zap',
customAmount: 'Cantidad Personalizada',
addMessage: 'Añadir mensaje (opcional)',
sending: 'Enviando...',
sent: '¡Zap enviado!',
failed: 'Zap falló',
received: '¡Recibiste un zap!',
},
// Errors
errors: {
somethingWentWrong: 'Algo salió mal',
tryAgainLater: 'Por favor intenta de nuevo más tarde',
notFound: 'No encontrado',
pageNotFound: 'Página no encontrada',
unauthorized: 'No autorizado',
loginRequired: 'Por favor inicia sesión para continuar',
networkError: 'Error de red',
checkConnection: 'Por favor verifica tu conexión a internet',
invalidInput: 'Entrada inválida',
requiredField: 'Este campo es obligatorio',
},
// Time/Date
time: {
today: 'Hoy',
yesterday: 'Ayer',
tomorrow: 'Mañana',
thisWeek: 'Esta semana',
nextWeek: 'Próxima semana',
thisMonth: 'Este mes',
justNow: 'Ahora mismo',
minutesAgo: 'hace {{count}} minutos',
hoursAgo: 'hace {{count}} horas',
daysAgo: 'hace {{count}} días',
},
// Footer
footer: {
vibedWith: 'Creado con',
poweredBy: 'Impulsado por',
openSource: 'Código Abierto',
contribute: 'Contribuir',
decentralized: 'Descentralizado',
communityOwned: 'Propiedad de la Comunidad',
},
// Create Spot Page
createSpot: {
title: 'Añadir un Spot de Skate',
subtitle: 'Comparte un spot de skate con la comunidad',
backToMap: 'Volver al Mapa',
namePlaceholder: 'ej., Hollywood High School',
descriptionPlaceholder: 'Describe el spot, obstáculos, mejores horarios, info de seguridad, etc.',
addressPlaceholder: 'ej., 1521 N Highland Ave, Los Angeles, CA',
selectType: 'Selecciona el tipo de spot',
selectBustLevel: 'Selecciona el nivel de riesgo',
uploadPhotos: 'Subir',
dragDrop: 'Arrastra y suelta o haz clic para subir',
maxPhotos: 'Máximo 5 fotos',
publishing: 'Publicando...',
success: '¡Spot publicado exitosamente!',
error: 'Error al publicar el spot',
locationRequired: 'Por favor selecciona una ubicación en el mapa',
useCurrentLocation: 'Usar mi ubicación actual',
pickOnMap: 'Elegir Ubicación en el Mapa',
loginToAdd: 'Necesitas iniciar sesión para añadir un spot de skate.',
requiredFields: 'Cuéntanos sobre este spot. Los campos con * son obligatorios.',
coordinates: 'Coordenadas',
latitudePlaceholder: 'Latitud (ej., 34.1012)',
longitudePlaceholder: 'Longitud (ej., -118.3389)',
gettingLocation: 'Obteniendo ubicación...',
accessType: 'Tipo de Acceso',
publicTitle: 'Público - Abierto a Todos',
publicDesc: 'Skateparks, plazas públicas, spots callejeros',
privateTitle: 'Propiedad Privada - Se Necesita Permiso',
privateDesc: 'Rampas en patios, terrenos privados, spots cerrados',
localsTitle: 'Pregunta a los Locales Primero',
localsDesc: 'Respeta el spot, no lo quemes',
contactInfo: 'Información de Contacto',
contactPlaceholder: 'ej., Teléfono, Instagram, email...',
contactHintPrivate: '¿Cómo deben contactarte para pedir permiso?',
contactHintLocals: '¿Cómo deben preguntar sobre el spot?',
},
// Create Event Page
createEvent: {
title: 'Crear un Evento',
subtitle: 'Organiza un evento de skate para la comunidad',
backToEvents: 'Volver a Eventos',
namePlaceholder: 'ej., Session de Verano',
descriptionPlaceholder: 'Describe el evento, qué esperar, reglas, premios, etc.',
selectType: 'Selecciona el tipo de evento',
venuePlaceholder: 'ej., Venice Beach Skatepark, CA',
selectDate: 'Selecciona la fecha',
selectTime: 'Selecciona la hora',
ticketPricePlaceholder: 'Deja vacío para eventos gratis',
publishing: 'Publicando...',
success: '¡Evento publicado exitosamente!',
error: 'Error al publicar el evento',
loginToCreate: 'Necesitas iniciar sesión para crear un evento.',
requiredFields: 'Cuéntanos sobre este evento. Los campos con * son obligatorios.',
startDateTime: 'Fecha y Hora de Inicio',
endDateTime: 'Fecha y Hora de Fin (opcional)',
coordinatesOptional: 'Coordenadas (opcional)',
coverImage: 'Imagen de Portada',
uploadCover: 'Subir imagen de portada',
nip05Recommended: 'Se Recomienda Verificación NIP-05',
nip05Desc: 'Añade un identificador NIP-05 a tu perfil para verificar tu identidad y generar confianza con los asistentes.',
addNip05: 'Añadir NIP-05 en Ajustes',
},
// Spot Detail Page
spotDetail: {
postedBy: 'Publicado por',
getDirections: 'Cómo Llegar',
reviews: 'Reseñas',
noReviews: 'Aún no hay reseñas',
beFirstReview: '¡Sé el primero en reseñar este spot!',
writeReview: 'Escribir una Reseña',
submitReview: 'Enviar Reseña',
rating: 'Calificación',
reviewPlaceholder: 'Comparte tu experiencia en este spot...',
relatedSpots: 'Spots Cercanos',
},
// Event Detail Page
eventDetail: {
organizedBy: 'Organizado por',
eventInfo: 'Info del Evento',
location: 'Ubicación',
dateTime: 'Fecha y Hora',
price: 'Precio',
attendeeCount: '{{count}} asistirán',
interested: 'Interesado',
going: 'Voy',
notGoing: 'No Voy',
share: 'Compartir Evento',
},
// Profile Page
profile: {
posts: 'Publicaciones',
spots: 'Spots',
events: 'Eventos',
following: 'Siguiendo',
followers: 'Seguidores',
editProfile: 'Editar Perfil',
follow: 'Seguir',
unfollow: 'Dejar de Seguir',
noPostsYet: 'Aún no hay publicaciones',
noBio: 'Sin biografía aún',
zapProfile: 'Enviar Zap a este skater',
},
// About Page
about: {
title: 'Acerca de SkateSpots',
subtitle: 'Una comunidad de skateboarding descentralizada',
whatIs: '¿Qué es SkateSpots?',
whatIsDesc: 'SkateSpots es una plataforma impulsada por la comunidad para descubrir lugares de skateboarding en todo el mundo. Construida en Nostr, da a los skaters verdadera propiedad de sus datos.',
features: 'Características',
featuresDesc: 'Encuentra spots, crea eventos, conecta con coaches y apoya a tus tiendas de skate locales—todo en un solo lugar.',
nostr: 'Construido en Nostr',
nostrDesc: 'Nostr es un protocolo simple y abierto que permite comunicación global verdaderamente resistente a la censura. Tu cuenta y datos te pertenecen.',
openSource: 'Código Abierto',
openSourceDesc: 'SkateSpots es completamente de código abierto. Contribuye, haz fork o corre tu propia instancia.',
lightning: 'Pagos Lightning',
lightningDesc: 'Envía Zaps a tus skaters, coaches y creadores de contenido favoritos con pagos Bitcoin Lightning.',
},
// FAQ Page
faq: {
title: 'Preguntas Frecuentes',
subtitle: 'Todo lo que necesitas saber sobre SkateSpots',
whatIsNostr: '¿Qué es Nostr?',
whatIsNostrAnswer: 'Nostr es un protocolo abierto para redes sociales descentralizadas. A diferencia de plataformas tradicionales, tú eres dueño de tus datos e identidad.',
howToStart: '¿Cómo empiezo?',
howToStartAnswer: 'Haz clic en "Registrarse" para crear una nueva cuenta Nostr, o "Iniciar Sesión" si ya tienes una. Puedes usar una extensión de navegador, app móvil o clave secreta.',
whatAreZaps: '¿Qué son los Zaps?',
whatAreZapsAnswer: 'Los Zaps son propinas de Bitcoin Lightning que puedes enviar a otros usuarios. Son una forma de mostrar aprecio por buen contenido o apoyar a creadores.',
howToAddSpot: '¿Cómo añado un spot?',
howToAddSpotAnswer: 'Inicia sesión en tu cuenta, haz clic en "Añadir Spot" y completa los detalles incluyendo ubicación, fotos y descripción.',
isItFree: '¿SkateSpots es gratis?',
isItFreeAnswer: '¡Sí! SkateSpots es completamente gratis de usar. Opcionalmente puedes enviar Zaps (propinas de Bitcoin) a otros usuarios.',
canIEditSpot: '¿Puedo editar o eliminar mis spots?',
canIEditSpotAnswer: 'Sí, puedes editar spots que hayas creado. Debido a la naturaleza descentralizada de Nostr, las solicitudes de eliminación se envían pero algunos relays pueden retener los datos.',
},
// Onboarding
onboarding: {
welcome: '¡Bienvenido a SkateSpots!',
welcomeDesc: 'Vamos a configurarte en solo unos pasos.',
step1Title: 'Crea Tu Cuenta',
step1Desc: 'Tus claves Nostr están siendo generadas. Es como una contraseña que tú controlas.',
step2Title: 'Respalda Tus Claves',
step2Desc: '¡Guarda tu frase de recuperación en un lugar seguro. Es la única forma de recuperar tu cuenta!',
step3Title: 'Configura Tu Perfil',
step3Desc: 'Cuéntale a la comunidad sobre ti.',
step4Title: '¡Estás Listo!',
step4Desc: 'Empieza a explorar spots, eventos y conectar con skaters.',
skipForNow: 'Saltar por ahora',
continueToApp: 'Continuar a la App',
},
// Lab Page
labPage: {
title: 'El Lab',
subtitle: 'Aprende trucos. Captura momentos. Conecta con otros Skaters',
coachesTab: 'Coaching',
filmersTab: 'Filmación',
offerCoaching: 'OFRECER COACHING',
offerFilming: 'OFRECER FILMACIÓN',
loginToOffer: 'Inicia sesión para ofrecer servicios',
whatToLearn: '¿QUÉ QUIERES APRENDER?',
whatContent: '¿QUÉ TIPO DE CONTENIDO?',
selectSkillsDesc: 'Selecciona habilidades y te conectaremos con coaches',
selectFilmingDesc: 'Selecciona los servicios de filmación que buscas',
searchPlaceholder: 'Buscar por nombre, ubicación o habilidades...',
noServicesYet: 'AÚN NO HAY SERVICIOS',
beFirstToOffer: '¡Sé el primero en ofrecer servicios de coaching o filmación a la comunidad!',
skills: 'Habilidades',
rate: 'Tarifa',
perHour: '/hora',
contact: 'Contactar',
viewProfile: 'Ver Perfil',
noProfilesYet: 'Aún no hay perfiles',
beFirstCoach: '¡Sé el primero en registrarte como coach!',
beFirstFilmer: '¡Sé el primero en registrarte como filmer!',
yearsExperience: 'años de experiencia',
},
// Become Coach/Filmer Forms
becomeCoach: {
title: 'Conviértete en Coach',
subtitle: 'Comparte tus habilidades y ayuda a otros skaters a progresar',
bioPlaceholder: 'Cuéntanos sobre tu experiencia en skate y estilo de enseñanza...',
skillsPlaceholder: 'ej., kickflip, heelflip, grinds, bowls',
selectSkills: 'Selecciona las habilidades que puedes enseñar',
hourlyRate: 'Tarifa por Hora (sats)',
ratePlaceholder: 'ej., 5000',
locationPlaceholder: 'Tu ciudad o área',
publishing: 'Publicando perfil...',
success: '¡Perfil de coach creado!',
error: 'Error al crear el perfil',
},
becomeFilmer: {
title: 'Conviértete en Filmer',
subtitle: 'Captura los mejores clips para la comunidad',
bioPlaceholder: 'Cuéntanos sobre tu experiencia filmando y tu equipo...',
specialtiesPlaceholder: 'ej., fisheye, teleobjetivo, drone, edición',
selectSpecialties: 'Selecciona tus especialidades',
hourlyRate: 'Tarifa por Hora (sats)',
ratePlaceholder: 'ej., 5000',
locationPlaceholder: 'Tu ciudad o área',
portfolioUrl: 'URL del Portafolio',
portfolioPlaceholder: 'Enlace a tu trabajo (YouTube, Instagram, etc.)',
publishing: 'Publicando perfil...',
success: '¡Perfil de filmer creado!',
error: 'Error al crear el perfil',
},
// Skills (mantener en inglés como terminología de skate)
skills: {
kickflip: 'Kickflip',
heelflip: 'Heelflip',
ollie: 'Ollie',
treflip: '360 Flip',
shuvit: 'Shuvit',
hardflip: 'Hardflip',
varial: 'Varial',
nollie: 'Nollie',
fakie: 'Fakie',
switch: 'Switch',
grind: 'Grind',
slide: 'Slide',
manual: 'Manual',
transition: 'Transition',
bowl: 'Bowl',
vert: 'Vert',
street: 'Street',
flatground: 'Flatground',
},
// Food Spots
food: {
title: 'Spots de Comida',
subtitle: 'Recarga energía antes o después de tu session',
addFood: 'Añadir Spot de Comida',
categories: {
all: 'Todos',
burgers: 'Hamburguesas',
pizza: 'Pizza',
tacos: 'Tacos',
coffee: 'Café',
drinks: 'Bebidas',
snacks: 'Snacks',
},
skaterFriendly: 'Amigable para Skaters',
nearSpots: 'Cerca de Spots de Skate',
},
// Marketplace
marketplace: {
title: 'Mercado',
subtitle: 'Compra, vende e intercambia equipo de skate',
addListing: 'Añadir Anuncio',
condition: 'Condición',
conditions: {
new: 'Nuevo',
likeNew: 'Como Nuevo',
good: 'Bueno',
fair: 'Regular',
poor: 'Malo',
},
categories: {
all: 'Todos',
decks: 'Tablas',
trucks: 'Trucks',
wheels: 'Ruedas',
bearings: 'Rodamientos',
shoes: 'Zapatos',
clothing: 'Ropa',
protection: 'Protección',
other: 'Otros',
},
priceRange: 'Rango de Precio',
location: 'Ubicación',
seller: 'Vendedor',
contact: 'Contactar Vendedor',
makeOffer: 'Hacer Oferta',
sold: 'Vendido',
available: 'Disponible',
gear: 'Equipo',
sellGear: 'Vender Equipo',
wantToBuy: 'Busco Comprar',
},
// Weather
weather: {
title: 'Clima',
current: 'Condiciones Actuales',
forecast: 'Pronóstico',
humidity: 'Humedad',
wind: 'Viento',
feelsLike: 'Sensación térmica',
goodForSkating: '¡Buen clima para patinar!',
notIdeal: 'Condiciones no ideales',
allWeather: 'Todo Clima',
goodWeather: 'Buen Clima',
perfectWeather: 'Clima Perfecto',
},
// Radio
radio: {
title: 'NoGood Radio',
nowPlaying: 'Reproduciendo Ahora',
loading: 'Cargando stream...',
play: 'Reproducir',
pause: 'Pausar',
volume: 'Volumen',
mute: 'Silenciar',
},
};
export default es;