- 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>
783 lines
26 KiB
TypeScript
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;
|