Trade-record state (revoked/verifying) and the listing pending status were printed raw. New marketUi.trades.stateRevoked/stateVerifying and marketUi.statusPending (en/es). Also reclassify the request tag as cosmetic (never read in the client) in the audit.
7478 lines
388 KiB
TypeScript
7478 lines
388 KiB
TypeScript
/**
|
||
* Spanish translations (Spain / Castellano)
|
||
* Note: Skateboarding trick names and terminology stay in English
|
||
* (kickflip, ollie, grind, etc. are universal in skate culture)
|
||
*/
|
||
import { batch3Es } from './batch3';
|
||
import { batch4Es } from './batch4';
|
||
import { legacyEs } from './legacy';
|
||
|
||
const es = {
|
||
// Common
|
||
common: {
|
||
loading: 'Cargando...',
|
||
error: 'Error',
|
||
save: 'Guardar',
|
||
cancel: 'Cancelar',
|
||
delete: 'Eliminar',
|
||
edit: 'Editar',
|
||
add: 'Añadir',
|
||
remove: 'Quitar',
|
||
create: 'Crear',
|
||
submit: 'Enviar',
|
||
close: 'Cerrar',
|
||
back: 'Atrás',
|
||
next: 'Siguiente',
|
||
done: 'Listo',
|
||
search: 'Buscar',
|
||
filter: 'Filtrar',
|
||
sort: 'Ordenar',
|
||
share: 'Compartir',
|
||
more: 'Más',
|
||
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',
|
||
hide: 'Ocultar',
|
||
undo: 'Deshacer',
|
||
},
|
||
|
||
// Navigation
|
||
nav: {
|
||
searchLanguages: 'Buscar idiomas...',
|
||
noLanguages: 'No se encontraron idiomas',
|
||
home: 'Inicio',
|
||
map: 'Spots',
|
||
lab: 'El Lab',
|
||
events: 'Eventos',
|
||
crews: 'Peñas',
|
||
wallet: 'Billetera',
|
||
settings: 'Ajustes',
|
||
more: 'Más',
|
||
rewards: 'Recompensas',
|
||
stats: 'Estadísticas',
|
||
about: 'Acerca de',
|
||
food: 'Comida',
|
||
marketplace: 'Mercado',
|
||
mints: 'Mints',
|
||
appShop: 'Tienda de la App',
|
||
diy: 'DIY',
|
||
trades: 'Mercado',
|
||
stash: 'Alijo',
|
||
collections: 'Colecciones',
|
||
contacts: 'Contactos',
|
||
messages: 'Mensajes',
|
||
skaters: 'Skaters',
|
||
glossary: 'Glosario',
|
||
riderCard: 'Carné de Rider',
|
||
supporters: 'Colaboradores ⚡',
|
||
newsletter: 'Boletín',
|
||
viewProfile: 'Ver perfil',
|
||
leaderboards: 'Clasificaciones',
|
||
},
|
||
|
||
// 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: 'Guarda tu acceso',
|
||
subtitle: 'Toma 10 segundos — hazlo una vez',
|
||
message: 'Tu código de recuperación es la única forma de volver a tu cuenta. Guárdalo y podrás iniciar sesión en cualquier dispositivo.',
|
||
warning: 'Si lo pierdes no hay reinicio — sin correo ni recuperación de contraseña.',
|
||
backupNow: 'Guardar ahora',
|
||
confirmed: 'Ya lo guardé',
|
||
remindLater: '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: {
|
||
searchSuggestPlaces: 'Lugares',
|
||
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',
|
||
nip05: 'NIP-05 de la tienda',
|
||
nip05Hint: 'Un identificador opcional que controlas para esta tienda (p. ej. tienda@tudominio.com), verificado con tu clave. Añade hasta 5.',
|
||
},
|
||
|
||
// 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.',
|
||
locationLabel: 'Ubicación',
|
||
tapToPlace: 'Toca el mapa para colocar el pin, o arrástralo para ajustarlo.',
|
||
manualCoords: 'Introducir coordenadas manualmente',
|
||
moreDetails: 'Más detalles (opcional)',
|
||
photoHint: 'se requiere una foto para publicar',
|
||
nameRequired: 'Ponle un nombre a este spot.',
|
||
descriptionRequired: 'Describe este spot.',
|
||
addressRequired: 'Añade una dirección o nombre de zona.',
|
||
photoRequired: 'Añade al menos una foto.',
|
||
draftTitle: 'Tienes un borrador sin guardar',
|
||
draftBody: 'Continúa donde lo dejaste o descártalo.',
|
||
draftResume: 'Continuar',
|
||
draftDiscard: 'Descartar borrador',
|
||
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',
|
||
},
|
||
|
||
diyUi: {
|
||
title: 'DIY — Hazlo tú mismo',
|
||
tagline: 'Guías, herramientas abiertas y planos para hacer tus propias tablas, rampas y spots de hormigón — y luego encontrar a la gente, los sitios y el mercado.',
|
||
doItWithPeople: 'Hazlo con gente',
|
||
backToDiy: 'Volver a DIY',
|
||
calc: {
|
||
title: 'Calculadora de coste de tabla',
|
||
intro: 'Lo que cuesta hacer una tabla — mano de obra, equipo, materiales, tiempo de proceso, embalaje y margen — y un precio de venta justo. Se guarda en este dispositivo.',
|
||
},
|
||
designer: {
|
||
title: 'Diseñador de tablas',
|
||
intro: 'Diseña el contorno de un skate o longboard y exporta una plantilla 1:1 para imprimir, un SVG o un DXF para CNC. Se guarda en este dispositivo.',
|
||
presets: 'Ajustes predefinidos',
|
||
dimensions: 'Dimensiones',
|
||
shape: 'Forma',
|
||
kicks: 'Kicks',
|
||
hardware: 'Taladros de ejes',
|
||
width: 'Anchura máxima',
|
||
wheelbase: 'Distancia entre ejes',
|
||
nose: 'Largo del nose',
|
||
tail: 'Largo del tail',
|
||
length: 'Largo total',
|
||
waist: 'Cintura',
|
||
endRound: 'Redondeo de puntas',
|
||
concave: 'Cóncavo',
|
||
thickness: 'Grosor',
|
||
tailKick: 'Kick trasero',
|
||
noseKick: 'Kick delantero',
|
||
holeNew: 'New school (2,125″)',
|
||
holeOld: 'Old school (2,5″)',
|
||
holeSpacing: 'New school es 2,125″ × 1,625″ (54 × 41 mm); old school es 2,5″ × 1,625″. Taladros de 3/16″.',
|
||
topView: 'Vista superior',
|
||
sideView: 'Perfil lateral',
|
||
concaveSection: 'Sección del cóncavo',
|
||
export: 'Exportar',
|
||
pdfA4: 'PDF 1:1 · A4',
|
||
pdfLetter: 'PDF 1:1 · Letter',
|
||
printNote: 'Imprime el PDF al 100% (sin «ajustar a la página») y une las hojas con las cruces de las esquinas. El SVG también es tamaño real.',
|
||
note: 'Este es el contorno 2D que calcas y cortas. Para formas y moldes en 3D, una herramienta CAD completa sigue siendo lo adecuado.',
|
||
},
|
||
source: 'Fuente',
|
||
comingSoon: 'Próximamente',
|
||
footer: 'Las guías paso a paso están en camino. Por ahora: encuentra a quien construye en The Lab, mapea tu spot y compra o vende en el Marketplace. Trabaja con seguridad: protecciones, guantes y gafas.',
|
||
categories: {
|
||
boards: 'Tablas',
|
||
ramps: 'Rampas y obstáculos de madera',
|
||
concrete: 'Hormigón y spots DIY',
|
||
repairs: 'Reparaciones y ajustes',
|
||
tools: 'Herramientas y planos',
|
||
},
|
||
cards: {
|
||
ossBuild: { title: 'Construye un skate', blurb: 'Fabricación de tablas paso a paso: chapa, moldes, prensas y acabado.' },
|
||
sk8cad: { title: 'SK8CAD', blurb: 'CAD de código abierto para formas, cóncavo y moldes.' },
|
||
deckCost: { title: 'Coste y precio de la tabla', blurb: 'Calcula materiales, mano de obra y un precio justo antes de construir.' },
|
||
deckDesigner: { title: 'Diseñador de tablas', blurb: 'Diseña el contorno e imprime una plantilla 1:1, o exporta SVG/DXF para CNC.' },
|
||
ledgeBox: { title: 'Haz un bordillo o cajón', blurb: 'Un obstáculo de madera para principiantes que puedes montar en un fin de semana.' },
|
||
quarterpipe: { title: 'Haz un quarterpipe', blurb: 'Planos, transición y coping para un mini de patio.' },
|
||
flatbar: { title: 'Haz un flatbar', blurb: 'Barato, portátil y la mejor forma de aprender a deslizar.' },
|
||
concreteBasics: { title: 'Fundamentos del hormigón', blurb: 'Mezcla, encofrado y acabado de un bordillo o bank duradero.' },
|
||
coping: { title: 'Coping y bordes', blurb: 'Cómo colocar el coping y rematar una transición para un grind suave.' },
|
||
buyParts: { title: 'Compra piezas y material', blurb: 'Consigue tablas, tornillería y herramientas de vendedores en el Marketplace.' },
|
||
mapSpot: { title: 'Mapea tu spot DIY', blurb: '¿Has construido algo? Añádelo al mapa para que otros lo encuentren.' },
|
||
regrip: { title: 'Cambia el grip', blurb: 'Quita el grip viejo y coloca el nuevo limpio.' },
|
||
tune: { title: 'Ajusta rodamientos y ejes', blurb: 'Limpia rodamientos, cambia gomas y ajusta la geometría de los ejes.' },
|
||
printMolds: { title: 'Moldes impresos en 3D', blurb: 'Archivos de moldes y bases de alineación de la comunidad.' },
|
||
sk8cadTools: { title: 'Herramientas de moldes', blurb: 'Diseña moldes con bases de alineación integradas.' },
|
||
},
|
||
actions: {
|
||
findBuilder: { title: 'Encuentra un constructor', blurb: 'Constructores de rampas y DIY en The Lab que pueden diseñarlo o hacerlo.' },
|
||
findCrew: { title: 'Encuentra una crew DIY', blurb: 'Crews centradas en construir — únete a las que levantan spots.' },
|
||
mapSpot: { title: 'Mapea un spot DIY', blurb: 'Añade el spot que has construido para que viva en el mapa.' },
|
||
sellBuilds: { title: 'Vende tus creaciones', blurb: 'Publica tablas, rampas o piezas que hagas en el Marketplace.' },
|
||
findCoach: { title: 'Encuentra un entrenador', blurb: 'Entrenadores que enseñan módulos DIY y construcción de spots.' },
|
||
},
|
||
},
|
||
mapUi: {
|
||
mapFooter: {
|
||
links: 'Enlaces',
|
||
hide: 'Ocultar barra de enlaces del mapa',
|
||
},
|
||
// Map chrome
|
||
findingSpots: 'Buscando spots',
|
||
loadingSpots: 'Cargando spots',
|
||
loadingMap: 'Cargando mapa...',
|
||
mapViewAria: 'Vista de mapa',
|
||
listViewAria: 'Vista de lista',
|
||
layers: 'Capas',
|
||
mapLayers: 'Capas del mapa',
|
||
showOnMap: 'Mostrar en el mapa',
|
||
showResults: 'Mostrar resultados',
|
||
quickActions: 'Acciones rápidas',
|
||
spots: 'Spots',
|
||
shops: 'Tiendas',
|
||
gear: 'Equipo',
|
||
tours: 'Rutas',
|
||
events: 'Eventos',
|
||
crews: 'Crews',
|
||
spotType: 'Tipo de spot',
|
||
sortBy: 'Ordenar por',
|
||
trustLevel: 'Nivel de confianza',
|
||
weather: 'Clima',
|
||
buySellGear: 'Comprar/Vender equipo',
|
||
stash: 'Alijo',
|
||
more: 'Más',
|
||
// Welcome banner
|
||
newHere: '¿Nuevo por aquí?',
|
||
welcomeDesc: 'Descubre spots, eventos y la comunidad.',
|
||
getOnZapstore: 'Consíguelo en Zapstore',
|
||
dismiss: 'Descartar',
|
||
// Spot sheet / popups
|
||
addedBy: 'Añadido por',
|
||
directions: 'Cómo llegar',
|
||
viewDetails: 'Ver detalles',
|
||
viewDetailsArrow: 'Ver detalles →',
|
||
spotDetails: 'Detalles del spot',
|
||
skateShop: 'Tienda de skate',
|
||
skateSpot: 'Spot de skate',
|
||
youAreHere: 'Estás aquí',
|
||
conditions: 'Condiciones',
|
||
weatherScoreSuffix: '{{score}}/100 clima',
|
||
wind: 'Viento',
|
||
humidity: 'Humedad',
|
||
airQuality: 'Calidad del aire',
|
||
threeDayForecast: 'Previsión a 3 días',
|
||
gearForSale: 'Equipo en venta ({{count}})',
|
||
viewItems: 'Ver artículos →',
|
||
viewAllItems: 'Ver los {{count}} artículos →',
|
||
viewGear: 'Ver equipo →',
|
||
localTour: 'Ruta local',
|
||
meetAt: 'Quedamos en: {{place}}',
|
||
hours: '{{count}} horas',
|
||
level: 'Nivel {{level}}',
|
||
viewTour: 'Ver ruta →',
|
||
upcomingEvent: 'Próximo evento',
|
||
viewEvent: 'Ver evento →',
|
||
skateCrew: 'Crew de skate',
|
||
members: '{{count}} miembros',
|
||
since: 'Desde {{year}}',
|
||
viewCrew: 'Ver crew →',
|
||
acceptsBitcoin: 'Acepta Bitcoin',
|
||
boosted: 'Destacado',
|
||
website: 'Sitio web',
|
||
// Offline / empty states
|
||
offlineSavedSpots: 'Sin conexión · mostrando spots guardados',
|
||
cantReachRelays: 'No se puede conectar a los relays',
|
||
relayOnlineNoAnswer: 'Estás en línea, pero el relay de la comunidad no responde ahora mismo.',
|
||
youreOffline: 'Estás sin conexión.',
|
||
savedOnDevice: 'Los spots que ya has visto están guardados en este dispositivo y aparecerán aquí.',
|
||
noSpotsMatchTitle: 'Ningún spot coincide',
|
||
noSpotsMatchDesc: 'Prueba otra búsqueda o borra los filtros.',
|
||
noSpotsMappedYet: 'Aún no hay spots en el mapa',
|
||
noSpotsMappedDesc: 'Sé el primero en mapear tu parque: se tarda un minuto, es tuyo, y el próximo skater que pase te lo agradecerá.',
|
||
addFirstSpot: 'Añade el primer spot',
|
||
findSpotsNearMe: 'Buscar spots cerca de mí',
|
||
locating: 'Localizando…',
|
||
// Near Me toasts
|
||
refiningLocation: 'Afinando tu ubicación…',
|
||
refiningLocationDesc: 'Centrado en tu última posición; ajustando una nueva señal GPS.',
|
||
locatingYou: 'Localizándote…',
|
||
locatingDesc: 'Obteniendo señal GPS. La primera vez puede tardar hasta un minuto.',
|
||
foundYou: 'Te encontramos',
|
||
foundYouDesc: 'El mapa se ha centrado en tu ubicación.',
|
||
locationPermissionNeeded: 'Se necesita permiso de ubicación',
|
||
permissionNeededDesc: 'Permite la ubicación para SkateSpots en Ajustes del dispositivo → Aplicaciones → SkateSpots → Permisos y vuelve a tocar Cerca de mí.',
|
||
locationTimedOut: 'Se agotó el tiempo de ubicación',
|
||
timeoutNativeDesc: 'No se pudo obtener la ubicación a tiempo. Si estás bajo techo, el GPS no ve los satélites: activa la Ubicación por red (Ajustes → Ubicación) o sal al exterior e inténtalo de nuevo.',
|
||
timeoutWebDesc: 'No se pudo obtener tu ubicación a tiempo. Comprueba la señal e inténtalo de nuevo.',
|
||
noLocationProvider: 'Sin proveedor de ubicación',
|
||
noProviderNativeDesc: 'Tu teléfono no está proporcionando ubicación. En ROMs centradas en la privacidad (p. ej. GrapheneOS), activa la Ubicación por red en Ajustes → Ubicación, o comprueba que el GPS esté activado y pruébalo al aire libre.',
|
||
noProviderWebDesc: 'No hay ningún proveedor de ubicación disponible. Activa los servicios de ubicación e inténtalo de nuevo.',
|
||
locationUnavailable: 'Ubicación no disponible',
|
||
unavailableNativeDesc: 'Activa la Ubicación/GPS en los ajustes del teléfono, permite la ubicación para SkateSpots (Ajustes → Aplicaciones → SkateSpots → Permisos) e inténtalo de nuevo.',
|
||
unavailableWebDesc: 'No se pudo determinar tu ubicación. Asegúrate de que los servicios de ubicación estén activados.',
|
||
// Location help dialog
|
||
locationBlocked: 'Ubicación bloqueada',
|
||
locationBlockedDesc: 'Tu navegador ha bloqueado el acceso a la ubicación para este sitio. Así puedes volver a activarlo:',
|
||
locationPlatformAndroid: 'Android Chrome',
|
||
locationPlatformIos: 'iOS Safari',
|
||
locationPlatformDesktop: 'Chrome de escritorio',
|
||
locationPlatformFirefox: 'Firefox',
|
||
locationStepsAndroid: 'Toca el icono del candado en la barra de direcciones → Configuración del sitio → Ubicación → Permitir',
|
||
locationStepsIos: 'App Ajustes → Safari → Ubicación → Permitir (o toca el botón «AA» en la barra de direcciones de Safari)',
|
||
locationStepsDesktop: 'Haz clic en el icono del candado → Configuración del sitio → Ubicación → Permitir',
|
||
locationStepsFirefox: 'Haz clic en el icono del candado → Conexión segura → Más información → Permisos → Acceder a tu ubicación → Permitir',
|
||
gotIt: 'Entendido',
|
||
// Add speed-dial / FAB
|
||
addSpot: 'Añadir spot',
|
||
addShop: 'Añadir tienda',
|
||
addEvent: 'Añadir evento',
|
||
addSpotHereTitle: '¿Añadir un spot aquí?',
|
||
addSpotHereDesc: 'Coloca el pin donde tocaste',
|
||
sellGear: 'Vender equipo',
|
||
offerTour: 'Ofrecer ruta',
|
||
closeAddMenu: 'Cerrar menú de añadir',
|
||
addMenuAria: 'Añadir spot, tienda, evento, equipo o ruta',
|
||
// Local chat
|
||
localChat: 'Chat local',
|
||
localChatDesc: 'Chat en directo para la zona donde está centrado el mapa. Elige el alcance del canal.',
|
||
// BTC Map
|
||
btcMapShowing: 'Mostrando {{count}} lugares donde puedes gastar tus sats cerca',
|
||
btcMapShow: 'Muestra lugares donde puedes gastar tus sats (vía BTC Map)',
|
||
// Stash drawer
|
||
yourPrivateStash: 'Tu alijo privado',
|
||
stashIntro: 'Controla tu equipo, pon precios y encuentra intercambios con otros skaters.',
|
||
encryptionRequired: 'Se requiere cifrado',
|
||
encryptionRequiredDesc: 'Usa un firmante compatible con NIP-44 (Alby, nos2x, Amber).',
|
||
myStash: 'Mi alijo',
|
||
encrypted: 'Cifrado',
|
||
itemsCount: '{{count}} artículos',
|
||
items: 'Artículos',
|
||
wishlist: 'Deseos',
|
||
types: 'Tipos',
|
||
stashEmpty: 'Tu alijo está vacío',
|
||
addFirstItem: 'Añadir primer artículo',
|
||
wishlistCount: 'Deseos ({{count}})',
|
||
myGearCount: 'Mi equipo ({{count}})',
|
||
openFullStash: 'Abrir alijo completo',
|
||
addItem: 'Añadir artículo',
|
||
// Spot picker
|
||
searchSpotsPlaceholder: 'Buscar spots...',
|
||
selected: 'Seleccionado',
|
||
noSpotsFound: 'No se han encontrado spots. Prueba con otra búsqueda.',
|
||
addingSpotsHint: 'Añadir spots ayuda a que otros te encuentren al explorar ubicaciones concretas',
|
||
// Spot card
|
||
report: 'Reportar',
|
||
// Spot collections
|
||
spotSingular: '1 spot',
|
||
spotPlural: '{{count}} spots',
|
||
view: 'Ver',
|
||
myCollections: 'Mis colecciones',
|
||
collectionsSubtitle: 'Organiza tus spots favoritos en listas personalizadas',
|
||
newCollection: 'Nueva colección',
|
||
loginToCreate: 'Inicia sesión para crear colecciones',
|
||
loginToCreateDesc: 'Guarda tus spots favoritos en listas personalizadas como «Viaje a Barcelona 2024» o «Los mejores rails de Madrid»',
|
||
noCollections: 'Aún no hay colecciones',
|
||
noCollectionsDesc: 'Crea tu primera colección para empezar a organizar spots',
|
||
createFirstCollection: 'Crea tu primera colección',
|
||
createNewCollection: 'Crear nueva colección',
|
||
createCollectionDesc: 'Ponle un nombre a tu colección y una descripción opcional',
|
||
collectionName: 'Nombre de la colección',
|
||
collectionNamePlaceholder: 'Viaje a Barcelona 2024',
|
||
descriptionOptional: 'Descripción (opcional)',
|
||
descriptionPlaceholder: 'Mis spots favoritos de mi viaje a Barcelona...',
|
||
creating: 'Creando...',
|
||
createCollection: 'Crear colección',
|
||
editCollection: 'Editar colección',
|
||
saving: 'Guardando...',
|
||
saveChanges: 'Guardar cambios',
|
||
deleteCollectionTitle: '¿Eliminar colección?',
|
||
deleteCollectionDesc: 'Esto eliminará «{{title}}» de forma permanente. Los spots en sí no se verán afectados.',
|
||
deleting: 'Eliminando...',
|
||
collectionCreated: '¡Colección creada!',
|
||
collectionCreatedDesc: '«{{title}}» ya está lista para añadir spots',
|
||
collectionCreateFailed: 'No se pudo crear la colección',
|
||
collectionUpdated: '¡Colección actualizada!',
|
||
changesSaved: 'Tus cambios se han guardado',
|
||
collectionUpdateFailed: 'No se pudo actualizar la colección',
|
||
collectionDeleted: 'Colección eliminada',
|
||
collectionDeletedDesc: '«{{title}}» se ha eliminado',
|
||
collectionDeleteFailed: 'No se pudo eliminar la colección',
|
||
somethingWentWrong: 'Algo salió mal',
|
||
},
|
||
|
||
spotUi: {
|
||
claim: {
|
||
areYouOwner: '¿Es este tu spot?',
|
||
privateDesc: 'Este spot está marcado como privado. Si es tuyo o lo gestionas, reclámalo: un moderador de SkateSpots confirma la propiedad y después asumes el anuncio.',
|
||
claimSpot: 'Reclamar este spot',
|
||
nip05Required: 'Necesitas un identificador NIP-05 verificado para reclamar un spot privado (prueba de que controlas una identidad Nostr). Añádelo en tu perfil y vuelve.',
|
||
addNip05: 'Añadir NIP-05 en Ajustes',
|
||
pendingTitle: 'Reclamación pendiente de revisión',
|
||
pendingDesc: 'Tu reclamación se ha enviado. Un moderador de SkateSpots la revisará; podrás completarla cuando se apruebe.',
|
||
approvedTitle: 'Reclamación aprobada',
|
||
approvedDesc: 'Un moderador aprobó tu reclamación. Complétala para convertirte en el dueño de este spot.',
|
||
complete: 'Completar reclamación',
|
||
submitted: 'Reclamación enviada',
|
||
submittedDesc: 'Un moderador revisará tu reclamación. Asumirás el spot cuando se apruebe.',
|
||
submitFailed: 'No se pudo enviar la reclamación',
|
||
submit: 'Enviar reclamación',
|
||
submitting: 'Enviando…',
|
||
confirmTitle: '¿Reclamar "{{title}}"?',
|
||
confirmIntro: 'Estás pidiendo convertirte en el dueño de este spot privado.',
|
||
confirmBullet1: 'Un moderador de SkateSpots revisa la solicitud (no podemos verificar la propiedad, solo claves Nostr)',
|
||
confirmBullet2: 'Si se aprueba, completas la reclamación y puedes editar el spot',
|
||
confirmBullet3: 'El spot original permanece en Nostr: la red es descentralizada',
|
||
adminTitle: 'Reclamaciones pendientes',
|
||
adminApprove: 'Aprobar',
|
||
adminApproved: 'Aprobada',
|
||
adminApprovedDesc: 'Ya puede completar la reclamación del spot.',
|
||
adminApproveFailed: 'No se pudo aprobar la reclamación',
|
||
loginRequired: 'Inicia sesión para reclamar este spot privado o solicitar su propiedad.',
|
||
},
|
||
abandonedDesc: 'Actualizado por última vez {{time}}. Si el dueño original está inactivo, puedes reclamar este spot para mantenerlo y mejorarlo.',
|
||
claimedNotice: 'Anuncio reclamado',
|
||
claimedNoticeDesc: 'Un nuevo propietario volvió a publicar este spot tras reclamarlo. El anuncio original puede seguir existiendo aparte.',
|
||
abandonedLoginDesc: 'Actualizado por última vez {{time}}. Inicia sesión para reclamar y mantener este spot.',
|
||
accessDeniedDesc: 'Solo puedes editar los spots que has creado.',
|
||
accessDeniedTitle: 'Acceso denegado',
|
||
addAtLeastOneTag: 'Añade al menos una etiqueta.',
|
||
additionalDetails: 'Detalles adicionales (opcional)',
|
||
additionalDetailsPlaceholder: 'Añade cualquier contexto adicional que pueda ayudar...',
|
||
addNewTags: 'Añadir etiquetas nuevas:',
|
||
addNip05InSettings: 'Añadir NIP-05 en Ajustes',
|
||
addPhoto: 'Añadir foto',
|
||
addPhotoDesc: 'Comparte una foto para ayudar a otros a descubrir este spot.',
|
||
addPhotoOrDescription: 'Añade una foto o una descripción',
|
||
addPhotoOrDescriptionDesc: 'Da algo con lo que orientarse a los skaters: una foto o una línea sobre el lugar.',
|
||
addPhotos: 'Añadir fotos',
|
||
addPhotoToSpot: 'Añadir foto al spot',
|
||
adminDeleteDialogDesc: 'Como admin de SkateSpots estás retirando "{{title}}". Se ocultará en toda la app para todos y se enviará una solicitud de eliminación a los relays.',
|
||
adminDeleteReason: 'Un admin de SkateSpots eliminó el spot "{{title}}"',
|
||
airQuality: 'Calidad del aire',
|
||
altSkateSpot: 'Spot de skate: {{title}}',
|
||
areYouShopOwner: '¿Eres el dueño de la tienda?',
|
||
askBeforeSkating: 'Pregunta antes de patinar',
|
||
backToSpot: 'Volver al spot',
|
||
beFirstToListGear: '¡Sé el primero en publicar material en este spot!',
|
||
beFirstToSay: 'Sé el primero en decir algo.',
|
||
byAuthor: 'por {{name}}',
|
||
captionPlaceholder: 'Añade un pie de foto (opcional): describe qué sale en la foto, cuándo se tomó, etc.',
|
||
chatPublicNote: 'Cualquiera puede leer esto: los mensajes son públicos y efímeros. Para chats privados, usa los Mensajes directos.',
|
||
checkPinBelow: 'Revisa el pin de abajo antes de añadir un duplicado.',
|
||
claimBullet1: 'Te conviertes en el dueño y puedes editar el spot',
|
||
claimBullet2: 'El spot original permanece (Nostr es descentralizado)',
|
||
claimBullet3: 'Tu versión puede aparecer junto al original',
|
||
claimFailed: 'No se pudo reclamar',
|
||
claiming: 'Reclamando...',
|
||
claimIntro: 'Vas a reclamar la propiedad de este spot. Se creará tu propia versión del spot, que podrás editar y mantener.',
|
||
claimSpot: 'Reclamar spot',
|
||
claimThisSpot: 'Reclamar este spot',
|
||
claimTitle: '¿Reclamar "{{title}}"?',
|
||
claimWhatHappens: 'Qué pasa cuando lo reclamas:',
|
||
coachesAndFilmersAvailable: 'Coaches y filmers disponibles en este spot',
|
||
coachesCount: 'Coaches ({{count}})',
|
||
coachHere: 'Dar clases aquí',
|
||
community: 'Comunidad',
|
||
communityVerified: 'Verificado por la comunidad',
|
||
communityVerifiedTitle: 'Otro skater ha contribuido aquí (foto o reporte de estado).',
|
||
conditions: 'Condiciones',
|
||
contactForPermission: 'Contacta para pedir permiso',
|
||
contactInfo: 'Info de contacto',
|
||
contributePhoto: 'Compartir foto',
|
||
contributing: 'Compartiendo...',
|
||
couldNotSendMessage: 'No se pudo enviar el mensaje.',
|
||
couldNotSubmit: 'No se pudo enviar',
|
||
couldNotUploadPhoto: 'No se pudo subir la foto. Puedes añadir una abajo.',
|
||
crewsThatSkateHere: 'Crews que patinan aquí',
|
||
current: 'Actual:',
|
||
currentTags: 'Etiquetas actuales de este spot:',
|
||
daysAgo: 'hace {{count}} día',
|
||
daysAgoPlural: 'hace {{count}} días',
|
||
deleteDialogDesc: 'Esto eliminará permanentemente "{{title}}" de todos los relays. Esta acción no se puede deshacer.',
|
||
deletedSpotReason: 'Spot eliminado',
|
||
deleteFailed: 'No se pudo eliminar',
|
||
deleteSpot: 'Eliminar spot',
|
||
deleteSpotTitle: '¿Eliminar spot?',
|
||
differentSpotPublishAnyway: 'Es un spot diferente: publicar de todos modos',
|
||
dragDropOrClick: 'Arrastra y suelta o haz clic',
|
||
dropPhotos: 'Suelta las fotos',
|
||
duplicateOne: 'Hay un spot a menos de 60 m de tu pin. Si es el mismo sitio, añade tu foto o un reporte de estado allí en vez de crear un duplicado.',
|
||
duplicateOther: 'Hay spots a menos de 60 m de tu pin. Si es el mismo sitio, añade tu foto o un reporte de estado allí en vez de crear un duplicado.',
|
||
editSpotSeoDesc: 'Edita tu spot de skate.',
|
||
failedToContribute: 'No se pudo compartir',
|
||
failedToPublish: 'No se pudo publicar',
|
||
failedToPublishDesc: 'Algo salió mal. Revisa la consola para más detalles.',
|
||
failedToSubmitReport: 'No se pudo enviar el reporte',
|
||
failedToSuggestTags: 'No se pudieron sugerir las etiquetas',
|
||
failedToUpdate: 'No se pudo actualizar',
|
||
failedToUploadImage: 'No se pudo subir la imagen',
|
||
failedToUploadPhoto: 'No se pudo subir la foto',
|
||
feelsLikeTemp: 'Sensación de {{temp}}°C',
|
||
filmersCount: 'Filmers ({{count}})',
|
||
filmHere: 'Grabar aquí',
|
||
gearSwap: 'Intercambio de material',
|
||
geolocationNotSupported: 'Geolocalización no compatible',
|
||
geolocationNotSupportedDesc: 'Tu navegador no admite geolocalización.',
|
||
getDirections: 'Cómo llegar',
|
||
hangTight: 'Espera un momento',
|
||
hangTightDesc: 'Tu foto todavía se está subiendo. Se adjuntará en un segundo.',
|
||
helpImproveSpot: 'Ayuda a mejorar este spot añadiendo fotos o sugiriendo etiquetas',
|
||
hiddenByModerator: 'Oculto por un moderador',
|
||
hiddenByModeratorDesc: 'Este spot no aparece en el mapa ni en las búsquedas. Aún puedes verlo porque es tuyo. Editarlo no lo volverá a mostrar: seguirá oculto hasta que un moderador retire la decisión.',
|
||
humidity: 'Humedad',
|
||
imageUploaded: 'Imagen subida',
|
||
imageUploadedDesc: 'Tu imagen se ha subido correctamente.',
|
||
imHere: 'Estoy aquí',
|
||
invalidCoordinates: 'Coordenadas no válidas',
|
||
invalidCoordinatesDesc: 'Introduce una latitud (-90 a 90) y longitud (-180 a 180) válidas.',
|
||
invalidNpub: 'npub no válido',
|
||
invalidNpubDesc: 'Introduce una dirección npub válida.',
|
||
lastReported: 'último: {{time}}',
|
||
listGear: 'Publicar material',
|
||
listYourGearHere: 'Publica tu material aquí',
|
||
loadingChat: 'Cargando chat…',
|
||
locationError: 'Error de ubicación',
|
||
locationFound: 'Ubicación encontrada',
|
||
locationFoundDesc: 'Se ha establecido tu ubicación actual.',
|
||
locationRequired: 'Ubicación obligatoria',
|
||
locationRequiredDesc: 'Introduce coordenadas o usa tu ubicación actual.',
|
||
loginRequiredTitle: 'Inicio de sesión obligatorio',
|
||
logInToChat: 'Inicia sesión para unirte al chat local.',
|
||
logInToContributePhotos: 'Inicia sesión para compartir fotos',
|
||
loginToEditSpot: 'Tienes que iniciar sesión para editar este spot.',
|
||
logInToReport: 'Tienes que iniciar sesión para reportar contenido.',
|
||
logInToReportStatus: 'Inicia sesión para reportar el estado de este spot.',
|
||
logInToSuggestTags: 'Inicia sesión para sugerir etiquetas',
|
||
manageNip05ToClaim: 'Gestionar NIP-05 para reclamar',
|
||
meetAtSpotForPickup: '💡 Quedad en este spot para una entrega segura',
|
||
memberOne: '{{count}} miembro',
|
||
memberOther: '{{count}} miembros',
|
||
messageFailed: 'No se pudo enviar el mensaje',
|
||
messageMapper: 'Escribir al autor',
|
||
messagePlaceholder: 'Escribe en este spot… (prueba /me o /who)',
|
||
messagesHiddenOne: '{{count}} mensaje oculto por tu filtro de confianza. Baja el filtro para ver más.',
|
||
messagesHiddenOther: '{{count}} mensajes ocultos por tu filtro de confianza. Baja el filtro para ver más.',
|
||
messagesHiddenShortOne: '{{count}} mensaje oculto por tu filtro de confianza',
|
||
messagesHiddenShortOther: '{{count}} mensajes ocultos por tu filtro de confianza',
|
||
metresAway: 'a {{distance}} m',
|
||
moderatorVouchedDesc: 'Un moderador revisó este spot y lo avaló. ¡Bien!',
|
||
monthsAgo: 'hace {{count}} mes',
|
||
monthsAgoPlural: 'hace {{count}} meses',
|
||
newOwnerNpub: 'npub del nuevo dueño',
|
||
newOwnerNpubHint: 'Introduce el npub del usuario al que quieres transferir este spot.',
|
||
nip05RequiredToClaim: '⚠️ Se requiere verificación NIP-05 para reclamar tiendas',
|
||
noCommunitySignalTitle: 'Aún no hay foto de la comunidad ni reporte de estado: nadie ha confirmado este lugar.',
|
||
breakdownPhotos: '{{count}} foto(s)',
|
||
breakdownStatus: '{{count}} reporte(s) de estado',
|
||
breakdownComments: '{{count}} comentario(s)',
|
||
breakdownReactions: '{{count}} reacción(es)',
|
||
breakdownCollections: '{{count}} guardado(s)',
|
||
breakdownZaps: '{{count}} zap(s)',
|
||
breakdownTags: '{{count}} etiqueta(s) sugerida(s)',
|
||
breakdownCrews: '{{count}} peña(s)',
|
||
breakdownLab: '{{count}} enlace(s) pro',
|
||
verifyNudgeTitle: 'Sé el primero en confirmar este spot',
|
||
verifyNudgeBody: 'Una foto o un «he patinado aquí» es como se verifica un spot: ayuda al siguiente skater.',
|
||
verifyNudgeStatus: 'He patinado aquí',
|
||
communityChip: 'Comunidad',
|
||
seenChip: 'Visto',
|
||
noGearListedYet: 'Aún no hay material publicado',
|
||
noMessagesYet: 'Aún no hay mensajes en este canal local. Saluda: "¿alguien patina esta noche?"',
|
||
noPhoto: 'Sin foto',
|
||
noReportsYet: 'Aún no hay reportes',
|
||
noTags: 'Sin etiquetas',
|
||
notASkateSpot: 'No es un spot de skate',
|
||
offerServicesHere: '💡 Ofrece tus servicios en este spot',
|
||
photoCaptured: '¡Foto capturada!',
|
||
photoCapturedDesc: 'Tu foto se ha subido correctamente.',
|
||
photoContributed: '¡Foto compartida!',
|
||
photoContributedDesc: 'Tu foto se ha añadido a este spot.',
|
||
photosAdded: 'Tus fotos se han añadido.',
|
||
photosRecommended: 'muy recomendable: los spots sin foto se quedan como No verificados',
|
||
photosUploaded: '{{count}} fotos subidas',
|
||
photoUploaded: 'Foto subida',
|
||
photoUploadedDesc: '¡Añade un pie de foto y envíalo para compartirla!',
|
||
photoUploadFailed: 'No se pudo subir la foto',
|
||
pleaseTryAgain: 'Inténtalo de nuevo',
|
||
public: 'Público',
|
||
publicChatTitle: 'Cualquiera puede leer los mensajes de este canal: es público y sin cifrar.',
|
||
recentReports: 'Reportes recientes',
|
||
recipientRequired: 'Destinatario obligatorio',
|
||
recipientRequiredDesc: 'Introduce el npub del nuevo dueño.',
|
||
removeAdmin: 'Retirar (admin)',
|
||
removeSpot: 'Retirar spot',
|
||
removeSpotAdminTitle: '¿Retirar este spot? (admin)',
|
||
reportOne: 'reporte',
|
||
reportContent: 'Reportar contenido',
|
||
reportContentDesc: 'Ayuda a mantener la comunidad segura reportando contenido inapropiado.',
|
||
reportedBySkaters: ' por {{count}} skaters: en revisión. Si es un spot real, añade una foto o un reporte de estado para confirmarlo.',
|
||
reportedNotASpot: 'Reportado como no es un spot de skate',
|
||
reportingType: 'Reportando {{type}}',
|
||
reports: 'reportes',
|
||
reportShop: 'Reportar tienda',
|
||
reportSpot: 'Reportar spot',
|
||
reportStatus: 'Reportar estado',
|
||
reportSubmitted: 'Reporte enviado',
|
||
reportSubmittedDesc: 'Gracias por ayudar a mantener SkateSpots seguro.',
|
||
reportSubmittedLong: 'Gracias por ayudar a mantener SkateSpots seguro y preciso. Miembros de confianza de la comunidad revisarán tu reporte.',
|
||
reportSubmittedTitle: 'Reporte enviado',
|
||
report: {
|
||
notASkateSpot: { label: 'No es un spot de skate', description: 'Una entrada de prueba, o un lugar que no es para patinar en absoluto' },
|
||
fakeSpot: { label: 'Spot falso o inexistente', description: 'El spot no existe o la ubicación es incorrecta' },
|
||
stolenPhotos: { label: 'Fotos robadas o falsas', description: 'Las fotos son de banco de imágenes o están robadas de otro sitio' },
|
||
spamAd: { label: 'Spam o publicidad', description: 'Contenido promocional o anuncios duplicados' },
|
||
dangerousLocation: { label: 'Ubicación peligrosa', description: 'Propiedad privada, insegura o de acceso ilegal' },
|
||
inappropriateContent: { label: 'Contenido inapropiado', description: 'Contiene contenido ofensivo o para adultos' },
|
||
impersonation: { label: 'Suplantación de identidad', description: 'Alguien haciéndose pasar por otra persona' },
|
||
other: { label: 'Otro', description: 'Algo más que no aparece arriba' },
|
||
},
|
||
targetType: {
|
||
spot: 'Spot',
|
||
event: 'Evento',
|
||
tour: 'Ruta',
|
||
shop: 'Tienda',
|
||
user: 'Usuario',
|
||
listing: 'Anuncio',
|
||
coach: 'Coach',
|
||
filmer: 'Filmer',
|
||
},
|
||
sameOwner: 'Mismo dueño',
|
||
sameOwnerDesc: 'No puedes transferirlo al dueño actual.',
|
||
saveChanges: 'Guardar cambios',
|
||
saving: 'Guardando...',
|
||
services: 'Servicios',
|
||
shareSpotText: 'Mira este spot de skate: {{title}}',
|
||
shelter: 'Refugio',
|
||
shelterHint: '¿Está este spot expuesto al tiempo? Ayuda a los skaters a encontrar sitios secos cuando llueve.',
|
||
shopClaimDesc: 'Si eres dueño o gestionas esta tienda, puedes reclamarla para verificar la propiedad y gestionar el anuncio.',
|
||
shopClaimNip05Hint: 'Para reclamar esta tienda, añade un identificador NIP-05 que coincida con el dominio de la web de la tienda.',
|
||
skatersActiveDesc: 'Personas que han publicado en este canal en las últimas 24 h.',
|
||
skatersActiveOne: '{{count}} skater activo aquí',
|
||
skatersActiveOther: '{{count}} skaters activos aquí',
|
||
skatersSellingGear: 'Los skaters de este spot venden material',
|
||
skateSpot: 'Spot de skate',
|
||
somethingWentWrong: 'Algo salió mal',
|
||
spot: 'Spot',
|
||
spotAdded: '¡Spot añadido!',
|
||
spotAddedDesc: 'Tu spot de skate se ha publicado en la red.',
|
||
spotAddedNoPhoto: 'Publicado y marcado como No verificado hasta que alguien añada una foto. Una foto del spot ayuda mucho.',
|
||
spotChat: 'Chat del spot',
|
||
spotClaimed: '¡Spot reclamado!',
|
||
spotClaimedDesc: 'Ahora eres el dueño de este spot. Puedes editarlo desde tu perfil.',
|
||
spotDeleted: 'Spot eliminado',
|
||
spotDeletedDesc: 'Solicitud de eliminación enviada a los relays. La mayoría eliminará este contenido.',
|
||
spotMayAlreadyBeOnMap: 'Puede que ese spot ya esté en el mapa',
|
||
spotMayAlreadyExist: 'Puede que este spot ya exista',
|
||
spotMayBeAbandoned: 'El spot puede estar abandonado',
|
||
spotPhotoAlt: 'Spot',
|
||
spotRemoved: 'Spot retirado',
|
||
spotRemovedDesc: 'Este spot se ha retirado y se ocultará en todo SkateSpots.',
|
||
spotSeoDesc: 'Mira este spot de skate en SkateSpots.',
|
||
spotStatus: 'Estado del spot',
|
||
spotStatusDesc: '¿Sigue siendo patinable "{{title}}"? Cuéntale a la comunidad su estado actual.',
|
||
spotTypeRequired: 'Tipo de spot obligatorio',
|
||
spotTypeRequiredDesc: 'Elige un tipo de spot para que los skaters sepan a qué se enfrentan.',
|
||
spotUpdated: '¡Spot actualizado!',
|
||
spotUpdatedDesc: 'Tus cambios se han publicado en la red.',
|
||
staffVerifiedTitle: 'Un admin de SkateSpots revisó este spot y lo avaló.',
|
||
statusNotePlaceholder: 'Opcional: añade detalles (p. ej. "bordes nuevos en el bordillo", "el guarda echa a partir de las 18:00")',
|
||
statusReported: 'Estado reportado',
|
||
statusReportedDesc: 'Gracias por mantener el mapa al día. Tu reporte ya está publicado.',
|
||
submitReport: 'Enviar reporte',
|
||
submitting: 'Enviando...',
|
||
suggestedByUser: 'Sugerido por {{count}} usuario',
|
||
suggestedByUsers: 'Sugerido por {{count}} usuarios',
|
||
suggestedTagsContent: 'Etiquetas sugeridas para {{title}}: {{tags}}',
|
||
suggestNTags: 'Sugerir {{count}} etiquetas',
|
||
suggestOneTag: 'Sugerir 1 etiqueta',
|
||
suggestTags: 'Sugerir etiquetas',
|
||
suggestTagsDesc: 'Ayuda a clasificar este spot sugiriendo etiquetas relevantes.',
|
||
tags: 'Etiquetas',
|
||
tagsHint: 'Añade etiquetas para características, superficies, rollos (máx. {{max}})',
|
||
tagsSuggested: '¡Etiquetas sugeridas!',
|
||
tagsSuggestedDesc: 'Tus sugerencias de etiquetas se han enviado.',
|
||
takePhoto: 'Hacer foto',
|
||
threeDayForecast: 'Previsión a 3 días',
|
||
tipTheMapper: 'Invita al autor',
|
||
tipTheMapperDesc: '¿Te ha servido este spot? ¡Envía un zap para agradecer al autor!',
|
||
titleRequired: 'Título obligatorio',
|
||
titleRequiredDesc: 'Introduce un nombre para este spot.',
|
||
today: 'Hoy',
|
||
tomorrow: 'Mañana',
|
||
transferDesc: 'Transfiere "{{title}}" a otro usuario. Esta acción no se puede deshacer.',
|
||
transferFailed: 'No se pudo transferir',
|
||
transferOwnership: 'Transferir propiedad',
|
||
transferRequestContent: 'Solicitud de transferencia de propiedad del spot "{{title}}"',
|
||
transferRequested: 'Transferencia solicitada',
|
||
transferRequestedDesc: 'El nuevo dueño tendrá que reclamar el spot para completar la transferencia.',
|
||
transferring: 'Transfiriendo...',
|
||
transferSpotOwnership: 'Transferir la propiedad del spot',
|
||
transferWarningDesc: 'Después de la transferencia, ya no podrás editar ni eliminar este spot.',
|
||
typeToSearchTags: 'Escribe para buscar o añadir etiquetas...',
|
||
underReview: ' — en revisión. Si es un spot real, añade una foto o un reporte de estado para confirmarlo.',
|
||
untitledSpot: 'Spot sin título',
|
||
unverified: 'No verificado',
|
||
updateDetailsFor: 'Actualiza los detalles de {{title}}',
|
||
updateSpotDesc: 'Actualiza la información de este spot. Los campos con * son obligatorios.',
|
||
uploadAPhoto: 'Sube una foto',
|
||
uploadAPhotoHint: 'Arrastra y suelta o haz clic · JPG, PNG, WebP',
|
||
uploadedAlt: 'Subida',
|
||
uploadFailed: 'Error al subir',
|
||
uploadingPhoto: 'Subiendo foto…',
|
||
uploadPhotoFirst: 'Primero sube una foto.',
|
||
uvIndex: 'Índice UV',
|
||
verifiedBySkateSpots: 'Verificado por SkateSpots',
|
||
viewPhotoFullScreen: 'Ver foto a pantalla completa',
|
||
viewPhotoOf: 'Ver foto {{n}} de {{total}}',
|
||
warning: 'Atención',
|
||
weatherConditions: 'Condiciones meteorológicas',
|
||
weatherOnly: 'solo clima',
|
||
weatherOnlyUnconfirmed: 'Solo clima. Nadie ha confirmado todavía que esto sea un spot de skate, así que no hay puntuación de condiciones: añade una foto o un reporte de estado para confirmarlo.',
|
||
whyReporting: '¿Por qué lo reportas?',
|
||
wind: 'Viento',
|
||
yearsAgo: 'hace {{count}} año',
|
||
yearsAgoPlural: 'hace {{count}} años',
|
||
},
|
||
|
||
marketUi: {
|
||
gearSwap: {
|
||
title: 'Intercambio de Equipo',
|
||
subtitle: 'Compra y vende equipo de skate usado con otros skaters',
|
||
listGear: 'Publicar Equipo',
|
||
searchPlaceholder: 'Buscar equipo...',
|
||
allCategories: 'Todas las categorías',
|
||
forSale: 'En venta',
|
||
wtb: 'Busco',
|
||
trust: 'Confianza',
|
||
filterByTrust: 'Filtrar por confianza',
|
||
allSellers: 'Todos los vendedores',
|
||
verifiedOnly: 'Solo verificados',
|
||
trustedPlus: 'De confianza+',
|
||
followingOnly: 'Solo seguidos',
|
||
pickupOrShip: 'Recogida o envío',
|
||
localPickup: 'Recogida local',
|
||
ships: 'Envío',
|
||
sortBy: 'Ordenar por',
|
||
newest: 'Más recientes',
|
||
priceLowHigh: 'Precio: menor → mayor',
|
||
priceHighLow: 'Precio: mayor → menor',
|
||
trustScore: 'Puntuación de confianza',
|
||
nearest: 'Más cercanos (local)',
|
||
listingFound: '{{count}} anuncio encontrado',
|
||
listingsFound: '{{count}} anuncios encontrados',
|
||
loadFailed: 'No se pudieron cargar los anuncios',
|
||
tryLater: 'Inténtalo de nuevo más tarde.',
|
||
noneTitle: 'No hay anuncios',
|
||
noneFiltered: 'Ningún equipo coincide con tus filtros actuales. Prueba a borrarlos o busca otra cosa.',
|
||
noneFirst: 'Sé el primero en publicar tu equipo: tablas, trucks, ruedas, zapatos, ¡lo que sea de skate!',
|
||
listYourGear: 'Publica tu equipo',
|
||
faqLink: '¿Tienes dudas? Consulta las preguntas frecuentes →',
|
||
},
|
||
hub: {
|
||
browse: 'Explorar',
|
||
selling: 'Vender',
|
||
myTrades: 'Mis tratos',
|
||
reputation: 'Reputación',
|
||
loginListings: 'Inicia sesión para gestionar tus anuncios.',
|
||
loginReputation: 'Inicia sesión para ver tu reputación y tus reseñas.',
|
||
},
|
||
marketplace: {
|
||
heroTitle: 'Tiendas y Mercado',
|
||
heroBefore: 'Nuestro mercado funciona con',
|
||
heroAfter: '- un mercado descentralizado en Nostr. Las tiendas de skate pueden publicar sus productos, y tú puedes comprar/vender equipo usado directamente con Bitcoin.',
|
||
whatIsTitle: '¿Qué es Plebeian Market?',
|
||
whatIsBody: 'Plebeian Market es un mercado descentralizado construido sobre Nostr. Compra y vende equipo de skate directamente con otros skaters usando Bitcoin. Sin intermediarios, sin comisiones, libertad total.',
|
||
noFeesTitle: 'Sin Comisiones',
|
||
noFeesBody: 'Ninguna plataforma se lleva el 30%. Ventas directas entre particulares.',
|
||
bitcoinTitle: 'Pagos en Bitcoin',
|
||
bitcoinBody: 'Paga con Bitcoin. Rápido, seguro y global.',
|
||
decentralizedTitle: 'Descentralizado',
|
||
decentralizedBody: 'Construido sobre Nostr. Ninguna empresa lo controla.',
|
||
visit: 'Visitar Plebeian Market',
|
||
buySellTitle: 'Qué puedes comprar y vender',
|
||
catCompletes: 'Tablas Completas',
|
||
preBuilt: 'Completas premontadas',
|
||
customSetups: 'Montajes a medida',
|
||
beginnerBoards: 'Tablas para principiantes',
|
||
catParts: 'Piezas de Tabla',
|
||
decks: 'Tablas',
|
||
trucks: 'Trucks',
|
||
wheels: 'Ruedas',
|
||
bearings: 'Rodamientos',
|
||
gripTape: 'Lija',
|
||
hardware: 'Tornillería',
|
||
catApparel: 'Ropa y Protección',
|
||
skateShoes: 'Zapatillas de skate',
|
||
clothing: 'Ropa',
|
||
helmets: 'Cascos',
|
||
pads: 'Protecciones',
|
||
backpacks: 'Mochilas',
|
||
catAccessories: 'Accesorios',
|
||
tools: 'Herramientas',
|
||
wax: 'Cera',
|
||
rails: 'Rails',
|
||
stickers: 'Pegatinas',
|
||
videos: 'Vídeos',
|
||
magazines: 'Revistas',
|
||
howItWorks: 'Cómo funciona',
|
||
step1Title: 'Explora los productos',
|
||
step1Body: 'Visita Plebeian Market y explora equipo de skate de tiendas y particulares de todo el mundo.',
|
||
step2Title: 'Contacta con los vendedores',
|
||
step2Body: 'Escribe a los vendedores directamente por Nostr. Negocia precios, resuelve dudas y acuerda el envío.',
|
||
step3Title: 'Paga con Bitcoin',
|
||
step3Body: 'Completa tu compra con Bitcoin Lightning para pagos instantáneos y con comisiones bajas.',
|
||
step4Title: 'Deja tu opinión',
|
||
step4Body: 'Valora tu experiencia y construye la reputación del vendedor en Nostr. Tus reseñas ayudan a la comunidad.',
|
||
needBitcoinTitle: '¿Necesitas Bitcoin?',
|
||
needBitcoinBefore: 'Necesitarás una cartera Lightning con algunos sats para comprar. Consulta la',
|
||
onboardingGuide: 'guía de inicio',
|
||
needBitcoinAfter: 'para recomendaciones de carteras.',
|
||
ownShopTitle: '¿Tienes una tienda de skate?',
|
||
ownShopBody: 'Publica tu tienda en SkateSpots y vende tus productos en Plebeian Market. Llega a clientes de todo el mundo con cero comisiones.',
|
||
addShop: 'Añade tu tienda',
|
||
startSelling: 'Empieza a vender',
|
||
},
|
||
listingDetail: {
|
||
notFound: 'Anuncio no encontrado',
|
||
notFoundBody: 'Puede que se haya eliminado o que el enlace sea incorrecto.',
|
||
backToGearSwap: 'Volver a Intercambio de Equipo',
|
||
gearSwap: 'Intercambio de Equipo',
|
||
viewPhoto: 'Ver foto {{n}}',
|
||
photoAlt: '{{title}} — foto {{n}}',
|
||
wantToBuy: 'BUSCO COMPRAR',
|
||
sold: 'VENDIDO',
|
||
description: 'Descripción',
|
||
usuallyHere: 'Normalmente por aquí {{availability}}',
|
||
listed: 'Publicado el {{date}}',
|
||
listingCountOne: '{{count}} anuncio · {{age}} d de antigüedad',
|
||
listingCountMany: '{{count}} anuncios · {{age}} d de antigüedad',
|
||
relistActive: 'Reactivar como activo',
|
||
markSold: 'Marcar como vendido',
|
||
deleteListing: 'Eliminar anuncio',
|
||
makeOffer: 'Hacer una oferta',
|
||
shareListing: 'Compartir anuncio',
|
||
unknown: 'Desconocido',
|
||
linkCopied: 'Enlace copiado',
|
||
linkCopiedBody: 'Compártelo con un skater.',
|
||
copyFailed: 'No se pudo copiar el enlace',
|
||
relisted: 'Reactivado',
|
||
relistedBody: 'Tu anuncio vuelve a estar activo.',
|
||
couldNotUpdate: 'No se pudo actualizar',
|
||
somethingWrong: 'Algo salió mal',
|
||
},
|
||
create: {
|
||
imageUploaded: 'Imagen subida',
|
||
uploadFailed: 'Error al subir',
|
||
failed: 'Falló',
|
||
cooldownActive: 'Espera activa',
|
||
cooldownWait: 'Espera {{time}} antes de crear otro anuncio',
|
||
limitReached: 'Límite de anuncios alcanzado',
|
||
limitReachedBody: 'Has alcanzado tu límite mensual de {{limit}} anuncios',
|
||
feeRequired: 'Se requiere pago',
|
||
feeRequiredBody: 'Paga la tarifa antispam para continuar',
|
||
titleRequired: 'Título obligatorio',
|
||
categoryRequired: 'Categoría obligatoria',
|
||
photoRequired: 'Foto obligatoria',
|
||
photoRequiredBody: 'Se requiere al menos una foto para vender equipo',
|
||
nip05Required: 'Se requiere verificación NIP-05',
|
||
nip05RequiredBody: 'Necesitas una dirección Nostr verificada para publicar equipo',
|
||
priceRequired: 'Precio obligatorio para anuncios de precio fijo',
|
||
sizeRequired: 'Talla obligatoria',
|
||
sizeRequiredBody: 'Selecciona una talla para {{category}}',
|
||
conditionRequired: 'Estado obligatorio',
|
||
conditionRequiredBody: 'Selecciona el estado de tu {{category}}',
|
||
wtbPosted: '¡Solicitud publicada!',
|
||
wtbPostedBody: 'Los vendedores podrán encontrar tu solicitud.',
|
||
listingCreated: '¡Anuncio creado!',
|
||
listingCreatedBody: 'Tu equipo ya está publicado.',
|
||
publishFailed: 'No se pudo publicar',
|
||
loginRequired: 'Inicio de sesión obligatorio',
|
||
loginRequiredBody: 'Necesitas iniciar sesión para publicar equipo.',
|
||
backToStash: 'Volver al Alijo',
|
||
backToSpot: 'Volver a {{title}}',
|
||
backToMarketplace: 'Volver al Mercado',
|
||
backToMap: 'Volver al Mapa',
|
||
wantToBuy: 'Busco Comprar',
|
||
listYourGear: 'Publica tu Equipo',
|
||
wtbSubtitle: 'Cuéntale a la comunidad qué equipo buscas',
|
||
sellSubtitle: 'Vende equipo de skate a la comunidad',
|
||
fromStashTitle: 'Anuncio desde tu Alijo',
|
||
fromStashBody: 'Rellenado con los datos de tu objeto del alijo. ¡Revisa y elige un punto de encuentro!',
|
||
nip05Banner: 'Para evitar spam y proteger a los compradores, necesitas una dirección Nostr verificada (NIP-05) para publicar equipo.',
|
||
verifiedLabel: 'Verificado:',
|
||
checkingTrust: 'Comprobando tu nivel de confianza...',
|
||
trustLevel: 'Nivel de confianza:',
|
||
trusted: 'De confianza',
|
||
active: 'Activo',
|
||
newcomer: 'Novato',
|
||
newUser: 'Usuario nuevo',
|
||
remaining: '{{remaining}} de {{limit}} anuncios disponibles este mes',
|
||
cooldownBody: 'Los usuarios nuevos tienen un tiempo de espera de 24 horas entre anuncios.',
|
||
timeRemaining: 'Tiempo restante: {{time}}',
|
||
monthlyLimitTitle: 'Límite mensual alcanzado',
|
||
monthlyLimitBody: 'Has alcanzado tu límite de {{limit}} anuncios este mes. Crea spots o completa ventas para aumentar tu límite.',
|
||
powAccepted: '¡Prueba de trabajo aceptada!',
|
||
feePaid: '¡Pago realizado!',
|
||
canCreateNow: 'Ya puedes crear tu anuncio.',
|
||
whatDoTitle: '¿Qué quieres hacer?',
|
||
sellGear: 'VENDER EQUIPO',
|
||
categoryTitle: 'Categoría *',
|
||
categoryHint: '¿Qué tipo de equipo?',
|
||
detailsTitle: 'Detalles del equipo',
|
||
detailsWtbHint: 'Describe lo que buscas',
|
||
detailsSellHint: 'Cuéntales a los compradores sobre tu artículo',
|
||
titleLabel: 'Título *',
|
||
titlePlaceholderWtb: 'Busco tabla 8.0"',
|
||
titlePlaceholderSell: 'Tabla Palace casi nueva 8.25"',
|
||
summaryLabel: 'Resumen corto',
|
||
summaryPlaceholderWtb: 'Cualquier marca, prefiero gráficos minimalistas',
|
||
summaryPlaceholderSell: 'En muy buen estado, apenas usada',
|
||
descriptionLabel: 'Descripción',
|
||
descriptionPlaceholderWtb: 'Describe exactamente lo que buscas: marcas preferidas, estado requerido, etc.',
|
||
descriptionPlaceholderSell: 'Me regalaron esta tabla por Navidad pero prefiero una talla más pequeña. ¡Te dejo probarla antes de comprar!',
|
||
fulfilmentLabel: '¿Cómo se entrega?',
|
||
pickup: 'Recogida',
|
||
pickupHint: 'Quedamos en persona',
|
||
ships: 'Envío',
|
||
shipsHint: 'Lo mando por correo',
|
||
both: 'Ambos',
|
||
bothHint: 'Cualquiera',
|
||
addressNote: 'Nunca recogemos tu dirección — para envíos, compártela en privado en el chat del trato.',
|
||
postageLabel: '¿Quién paga el envío?',
|
||
requireEscrow: 'Exigir depósito',
|
||
requireEscrowHint: 'Pide al comprador liquidar mediante depósito Cashu.',
|
||
postageBuyer: 'Paga el comprador',
|
||
postageSeller: 'Pago yo',
|
||
postageSplit: 'A medias',
|
||
sizeLabel: 'Talla',
|
||
selectSize: 'Selecciona talla',
|
||
truckHeight: 'Altura de trucks',
|
||
selectHeight: 'Selecciona altura',
|
||
wheelHardness: 'Dureza de ruedas',
|
||
selectHardness: 'Selecciona dureza',
|
||
pricingTitle: 'Precio',
|
||
pricingWtbHint: '¿Cómo quieres pagar?',
|
||
pricingSellHint: '¿Cómo quieres vender?',
|
||
priceLabel: 'Precio *',
|
||
currencyLabel: 'Moneda',
|
||
photosTitle: 'Fotos',
|
||
photosSellHint: 'Se requiere al menos una foto',
|
||
photosWtbHint: 'Opcional: añade imágenes de referencia',
|
||
productPhoto: 'Producto {{n}}',
|
||
upload: 'Subir',
|
||
photosNote: 'Añade hasta 5 fotos. La primera imagen será la principal.',
|
||
pickupLocationTitle: 'Punto de recogida',
|
||
pickupLocationHint: 'Vincula un spot de skate para quedar fácilmente',
|
||
searchSpots: 'Buscar spots...',
|
||
noSpotsFound: 'No se encontraron spots. Prueba otra búsqueda.',
|
||
availabilityLabel: '¿Cuándo sueles estar disponible?',
|
||
availabilityPlaceholder: 'Fines de semana 10-14h, martes/jueves por la tarde',
|
||
availabilityHint: 'Ayuda a los compradores a coordinar quedadas contigo',
|
||
durationTitle: 'Duración del anuncio',
|
||
durationHint: '¿Cuánto tiempo debe estar activo este anuncio?',
|
||
publishing: 'Publicando...',
|
||
checkingEligibility: 'Comprobando elegibilidad...',
|
||
cooldownButton: 'ESPERA: {{time}}',
|
||
limitReachedButton: 'LÍMITE ALCANZADO',
|
||
payFeeButton: 'PAGA LA TARIFA PARA CONTINUAR',
|
||
postWtbButton: 'PUBLICAR SOLICITUD',
|
||
listForSaleButton: 'PUBLICAR EQUIPO EN VENTA',
|
||
},
|
||
trades: {
|
||
title: 'Mis Tratos',
|
||
loginBody: 'Inicia sesión para gestionar tus tratos y tu reputación en el mercado.',
|
||
subtitle: 'Confirmaciones, solicitudes y la reputación que construyen. El pago se acuerda con el otro skater; la app solo registra el trato.',
|
||
actionNeeded: 'Acción necesaria',
|
||
askedToConfirmSale: 'te pidió que confirmaras una venta',
|
||
recordedSale: 'registró una venta — confirma tu parte',
|
||
confirmSale: 'Confirmar venta',
|
||
confirm: 'Confirmar',
|
||
stateRevoked: 'revocada',
|
||
stateVerifying: 'verificando',
|
||
nothingWaiting: 'No hay nada pendiente por tu parte. 🛹',
|
||
yourRecords: 'Tus registros de tratos',
|
||
noTrades: 'Aún no hay tratos. Cierra un trato y confírmalo para empezar a construir reputación.',
|
||
browseGearSwap: 'Explorar Intercambio de Equipo',
|
||
roleSold: 'Vendido',
|
||
roleBought: 'Comprado',
|
||
roleTrade: 'Trato',
|
||
with: 'con',
|
||
viewListing: 'Ver anuncio',
|
||
revoke: 'Revocar',
|
||
revokeTitle: '¿Revocar este registro de trato?',
|
||
revokeBody: 'Dejará de contar para tu reputación. La otra parte conserva su propia atestación. Úsalo para un trato disputado o por error.',
|
||
revokeNote: 'Retirado por el autor.',
|
||
revoked: 'Registro de trato revocado',
|
||
revokedBody: 'Ya no cuenta para la reputación.',
|
||
revokeFailed: 'No se pudo revocar el trato',
|
||
saleConfirmed: 'Venta confirmada',
|
||
saleConfirmedBody: 'Ahora pueden confirmar su parte.',
|
||
saleConfirmFailed: 'No se pudo confirmar la venta',
|
||
tradeConfirmed: 'Trato confirmado',
|
||
tradeConfirmedBody: 'Reputación actualizada para ambos.',
|
||
tradeConfirmFailed: 'No se pudo confirmar el trato',
|
||
somethingWrong: 'Algo salió mal.',
|
||
},
|
||
card: {
|
||
listingDeleted: 'Anuncio eliminado',
|
||
listingRemoved: 'Anuncio retirado',
|
||
listingDeletedBody: 'Tu anuncio se ha eliminado. Los relays que respetan las eliminaciones dejarán de servirlo.',
|
||
listingRemovedBody: 'Este anuncio se ha retirado y se ocultará en todo SkateSpots.',
|
||
removeFailed: 'Error al retirar',
|
||
somethingWrong: 'Algo salió mal',
|
||
markedSold: 'Marcado como vendido',
|
||
markedSoldBody: 'Tu anuncio ahora aparece como vendido.',
|
||
couldNotUpdate: 'No se pudo actualizar',
|
||
relisted: 'Reactivado',
|
||
relistedBody: 'Tu anuncio vuelve a estar activo.',
|
||
listingOptions: 'Opciones del anuncio',
|
||
report: 'Denunciar',
|
||
removeAdmin: 'Retirar (admin)',
|
||
postage: 'envío',
|
||
newSeller: 'Vendedor nuevo',
|
||
saleOne: '{{count}} venta',
|
||
saleMany: '{{count}} ventas',
|
||
iHaveThis: '¡Lo tengo!',
|
||
deleteTitle: '¿Eliminar "{{title}}"?',
|
||
adminRemoveTitle: '¿Retirar este anuncio? (admin)',
|
||
deleteBody: 'Esto pide a los relays que eliminen tu anuncio "{{title}}". No se puede deshacer desde aquí: tendrías que crear uno nuevo.',
|
||
adminRemoveBody: 'Como admin de SkateSpots estás retirando "{{title}}". Se ocultará en toda la app para todos y se enviará una solicitud de eliminación a los relays.',
|
||
deleting: 'Eliminando…',
|
||
removing: 'Retirando…',
|
||
deleteListing: 'Eliminar anuncio',
|
||
removeListing: 'Retirar anuncio',
|
||
reportCount: '{{count}} denuncia',
|
||
reports: '{{count}} denuncias',
|
||
viewTitle: 'Ver {{title}}',
|
||
reportListing: 'Denunciar anuncio',
|
||
manageListing: 'Gestionar anuncio',
|
||
trusted: 'De confianza',
|
||
daysOld: '{{n}} d de antigüedad',
|
||
monthsOld: '{{n}} meses de antigüedad',
|
||
yearsOld: '{{n}} años de antigüedad',
|
||
listingsCount: '{{count}} anuncios',
|
||
postageBuyer: 'envío: comprador',
|
||
postageSeller: 'envío: vendedor',
|
||
postageSplit: 'envío: a medias',
|
||
powTitle: 'Prueba de trabajo NIP-13 — antispam gratuito',
|
||
verifiedTradeOne: '{{count}} trato verificado',
|
||
verifiedTrades: '{{count}} tratos verificados',
|
||
reportSubmitted: 'Denuncia enviada',
|
||
reportSubmittedBody: 'Gracias por ayudar a mantener seguro el mercado.',
|
||
reportFailed: 'No se pudo enviar la denuncia',
|
||
selectReason: 'Selecciona un motivo',
|
||
reportDialogBody: 'Ayuda a mantener seguro el mercado denunciando anuncios inapropiados o engañosos.',
|
||
reasonLabel: 'Motivo de la denuncia *',
|
||
detailsLabel: 'Detalles adicionales (opcional)',
|
||
detailsPlaceholder: 'Aporta cualquier contexto adicional que pueda ayudar...',
|
||
reportNote: 'Las denuncias se publican en Nostr y ayudan a la comunidad a identificar anuncios problemáticos. Los anuncios con varias denuncias pueden ocultarse automáticamente.',
|
||
submitting: 'Enviando...',
|
||
submitReport: 'Enviar denuncia',
|
||
},
|
||
tradeActions: {
|
||
tradeConfirmed: 'Trato confirmado',
|
||
tradeConfirmedWithProof: 'Se adjuntó un recibo verificable: cuenta para los tratos verificados.',
|
||
tradeConfirmedBody: 'Reputación actualizada para ambos.',
|
||
tradeConfirmFailed: 'No se pudo confirmar el trato',
|
||
somethingWrong: 'Algo salió mal.',
|
||
requestNote: 'Confirma nuestro trato de "{{title}}", por favor.',
|
||
requestSent: 'Confirmación solicitada',
|
||
requestSentBody: 'El vendedor ya puede confirmar la venta y construir la reputación de ambos.',
|
||
requestFailed: 'No se pudo enviar la solicitud',
|
||
escrowRefunded: 'Depósito en garantía reembolsado',
|
||
escrowRefundedBody: 'Los fondos están de vuelta en tu cartera Cashu.',
|
||
escrowRefundFailed: 'No se pudo reembolsar el depósito',
|
||
confirmThisTrade: 'Confirmar este trato',
|
||
escrowAndRequest: 'Depósito y solicitud',
|
||
shipsEscrowHint: 'Trato con envío: usa el depósito en garantía para que nadie envíe al vacío. Comparte tu dirección en privado en el chat del trato, nunca aquí.',
|
||
shipsHint: 'Trato con envío: prefiere el depósito en garantía si el vendedor lo ofrece, y comparte tu dirección solo en el chat.',
|
||
askSeller: 'Pide al vendedor que confirme',
|
||
waitingSeller: 'Confirmación solicitada: esperando al vendedor.',
|
||
refundEscrow: 'Reembolsar depósito',
|
||
buyWithSats: 'Comprar con sats',
|
||
depositTitle: 'Depósito de buena fe (opcional)',
|
||
payDeposit: 'Pagar depósito',
|
||
depositBefore: 'Un intercambio no tiene factura, así que esta es la forma de darle un',
|
||
verifiableCost: 'coste verificable',
|
||
depositAfter: '. Reembolsable al entregarse (o usa el depósito en garantía Cashu para un reembolso automático). ⚠️ Demuestra compromiso, no entrega.',
|
||
depositPaid: 'Depósito pagado',
|
||
depositPaidBody: 'Guardado: se adjuntará cuando se confirme el trato.',
|
||
paid: 'Pagado ⚡',
|
||
paidWithProof: 'Se guardó un recibo verificable: confirma el trato para que cuente.',
|
||
paidBody: 'Pide al vendedor que confirme el trato para que cuente para ambos.',
|
||
},
|
||
loadFailed: 'No se pudo contactar con los relays. Comprueba tu conexión e inténtalo de nuevo.',
|
||
statusPending: 'pendiente',
|
||
offers: {
|
||
accepted: 'Aceptada',
|
||
declined: 'Rechazada',
|
||
withdrawn: 'Retirada',
|
||
open: 'Abierta',
|
||
noAmount: 'sin importe',
|
||
titleOwner: 'Ofertas ({{count}})',
|
||
loadFailed: 'No se pudieron cargar las ofertas. Comprueba tu conexión e inténtalo de nuevo.',
|
||
titleBuyer: 'Tus negociaciones',
|
||
you: 'Tú',
|
||
them: 'Ellos',
|
||
paidAskConfirm: 'Pagado: pide al vendedor que confirme el trato.',
|
||
payWithSats: 'Pagar con sats',
|
||
accept: 'Aceptar',
|
||
decline: 'Rechazar',
|
||
counter: 'Contraoferta',
|
||
counterPlaceholder: 'Tu contraoferta (sats)',
|
||
send: 'Enviar',
|
||
counterItemPlaceholder: '…o contraoferta con un artículo a cambio (opcional)',
|
||
waitingOn: 'Esperando a',
|
||
waitingOnSuffix: '— volverá a ser tu turno si hacen una contraoferta.',
|
||
withdraw: 'Retirar',
|
||
dmAccepted: '✅ ¡Tu oferta fue aceptada! Escríbeles para acordar la entrega.',
|
||
dmDeclined: '❌ Tu oferta fue rechazada.',
|
||
offerAccepted: 'Oferta aceptada',
|
||
offerDeclined: 'Oferta rechazada',
|
||
respondFailed: 'No se pudo responder',
|
||
somethingWrong: 'Algo salió mal.',
|
||
offerWithdrawn: 'Oferta retirada',
|
||
withdrawFailed: 'No se pudo retirar',
|
||
enterAmountOrItem: 'Introduce un importe o un artículo a cambio',
|
||
counterDm: 'Contraoferta',
|
||
counterSent: 'Contraoferta enviada',
|
||
counterSentBody: 'Ahora es su turno.',
|
||
counterFailed: 'No se pudo enviar la contraoferta',
|
||
},
|
||
offer: {
|
||
validAmount: 'Introduce un importe válido',
|
||
describeOffer: 'Describe tu oferta',
|
||
describeOfferBody: 'Añade un importe, un artículo a cambio o un mensaje.',
|
||
dmAmount: ' por {{amount}} sats',
|
||
dmItem: ' (ofreciendo: {{item}})',
|
||
dmBody: '🛹 Nueva oferta en tu anuncio "{{title}}"{{amount}}{{item}}.{{note}}',
|
||
sent: 'Oferta enviada',
|
||
sentBody: '{{sellerName}} puede aceptarla o rechazarla.',
|
||
sendFailed: 'No se pudo enviar la oferta',
|
||
somethingWrong: 'Algo salió mal.',
|
||
title: 'Hacer una oferta',
|
||
description: 'Ofrece sats o cambia algo: {{sellerName}} puede aceptar, rechazar o hacer una contraoferta. La entrega la acordáis entre vosotros.',
|
||
amountLabel: 'Importe (sats, opcional)',
|
||
amountPlaceholder: 'p. ej. 45000',
|
||
itemLabel: 'O cambiar algo (opcional)',
|
||
itemPlaceholder: 'p. ej. mi tabla 8.25 + ruedas de repuesto',
|
||
itemHint: '¿Intercambio? Pon aquí lo que ofreces: puedes combinarlo con sats.',
|
||
messageLabel: 'Mensaje (opcional)',
|
||
messagePlaceholder: 'Algo que el vendedor deba saber…',
|
||
send: 'Enviar oferta',
|
||
},
|
||
markSold: {
|
||
enterBuyer: 'Introduce el npub del comprador',
|
||
dealClosed: 'Trato cerrado 🎉',
|
||
dealClosedBody: 'Anuncio marcado como vendido y el trato se publicó para la reputación.',
|
||
closeFailed: 'No se pudo cerrar el trato',
|
||
somethingWrong: 'Algo salió mal.',
|
||
title: 'Cerrar el trato',
|
||
description: 'Marca este anuncio como vendido y registra una atestación de trato firmada para ti y el comprador.',
|
||
buyerLabel: 'npub del comprador',
|
||
methodLabel: '¿Cómo se pagó? (autodeclarado)',
|
||
amountLabel: 'Importe en sats (opcional)',
|
||
submit: 'Marcar vendido',
|
||
},
|
||
handoff: {
|
||
title: 'Acordar la entrega',
|
||
suggest: 'Propón hora y lugar',
|
||
suggestDm: '¡Hola! Me gustaría comprar "{{title}}". Propón una hora y un lugar para quedar; me viene bien quedar en un spot de skate público.',
|
||
orMeetAt: 'O quedamos en un spot público cercano:',
|
||
spotDm: '¡Hola! Me gustaría comprar "{{title}}". ¿Quedamos en {{spot}}? {{url}}',
|
||
shareDelivery: 'Compartir datos de envío',
|
||
deliveryDm: '¡Hola! Me gustaría comprar "{{title}}". Estos son mis datos de envío:\n\nNombre:\nDirección:\n\n(Solo comparte lo que necesite el mensajero.)',
|
||
useLocker: 'Usar taquilla / punto de recogida',
|
||
lockerDm: '¡Hola! Me gustaría comprar "{{title}}". ¿Podemos usar una taquilla / punto de recogida en vez de una dirección particular?',
|
||
noteBefore: 'Estos datos se quedan en el chat privado: SkateSpots nunca los ve. Para envíos, prefiere',
|
||
escrow: 'el depósito en garantía',
|
||
noteMiddle: ', y',
|
||
neverPay: 'nunca pagues fuera de los canales de la app',
|
||
noteAfter: '. Quedad en un sitio público.',
|
||
},
|
||
shipping: {
|
||
noCounterparty: 'Aún no hay contraparte',
|
||
noCounterpartyBody: 'El vendedor debería registrar la venta (nombrando al comprador) primero.',
|
||
markedShipped: 'Marcado como enviado',
|
||
markedReceived: 'Marcado como recibido',
|
||
issueReported: 'Incidencia reportada',
|
||
receivedBody: 'Gracias: esto no libera el depósito en garantía; resuélvelo directamente con el vendedor.',
|
||
notifiedBody: 'Se ha avisado a la otra parte.',
|
||
updateFailed: 'No se pudo actualizar',
|
||
somethingWrong: 'Algo salió mal.',
|
||
title: 'Envío',
|
||
shipped: 'enviado',
|
||
received: 'recibido',
|
||
issue: 'incidencia',
|
||
trackingPlaceholder: 'Número de seguimiento (opcional)',
|
||
iShipped: 'Lo he enviado',
|
||
iReceived: 'Lo he recibido',
|
||
reportIssue: 'Reportar una incidencia',
|
||
noteBefore: 'Autodeclarado: una nota logística,',
|
||
notProof: 'no una prueba',
|
||
noteAfter: '. Marcar "recibido" no libera el depósito en garantía. ⚠️ No fotografíes un paquete con la dirección visible, y comparte un número de seguimiento solo si te parece bien que sea público.',
|
||
},
|
||
pay: {
|
||
sent: 'Pago enviado ⚡',
|
||
sentWithProof: 'Se guardó un recibo de pago verificable: contará como pago verificado.',
|
||
sentBody: 'Avisa al vendedor: puede confirmar el trato para que cuente para ambos.',
|
||
failed: 'El pago falló',
|
||
title: 'Pagar con sats',
|
||
descSendPrefix: 'Envía',
|
||
descSendSuffix: 'a {{sellerName}} para cerrar este trato.',
|
||
descSettle: 'Cierra este trato directamente con {{sellerName}}.',
|
||
paid: '¡Pagado!',
|
||
paidBody: 'Pide al vendedor que confirme el trato: dos confirmaciones construyen la reputación de ambos.',
|
||
noMethod: '{{sellerName}} no ha configurado un método de pago (ni factura ni dirección Lightning). Escríbele para acordar el pago.',
|
||
nonSats: 'Esta oferta está en {{currency}}. El pago en la app es solo en sats. Llega a un acuerdo directamente con el vendedor.',
|
||
unsupported: 'Este código de pago (una solicitud Cashu) aún no es compatible. Pide al vendedor una factura o dirección Lightning.',
|
||
ownListing: 'Este es tu propio anuncio.',
|
||
paying: 'Pagando…',
|
||
pay: 'Pagar',
|
||
payAmount: 'Pagar {{amount}} sats',
|
||
footnote: 'Paga desde tu cartera conectada (NWC, WebLN o Cashu) directamente a {{sellerName}}: SkateSpots nunca retiene los fondos.',
|
||
},
|
||
spamFee: {
|
||
invoiceComment: 'Tarifa de anuncio de SkateSpots',
|
||
generateFailed: 'No se pudo generar la factura',
|
||
paymentSuccess: '¡Pago realizado!',
|
||
satsSent: '{{amount}} sats enviados a {{name}}',
|
||
autoPayFailed: 'Falló el pago automático',
|
||
autoPayFailedBody: 'Paga manualmente con el código QR o la factura',
|
||
invoiceCopied: '¡Factura copiada!',
|
||
copyFailed: 'No se pudo copiar',
|
||
received: '¡Pago recibido!',
|
||
receivedBody: 'Se ha pagado tu tarifa de {{amount}} sats. Ya puedes crear tu anuncio.',
|
||
title: 'Tarifa única de anuncio',
|
||
subtitle: 'Como miembro nuevo, se requiere una pequeña tarifa para tu primer anuncio.',
|
||
whyTitle: '¿Por qué tengo que pagar?',
|
||
spamLabel: 'Prevención de spam:',
|
||
spamBody: 'Esta tarifa frena a bots y estafadores que inundan el mercado con anuncios falsos.',
|
||
trustLabel: 'Construcción de confianza:',
|
||
trustBody: 'Las cuentas nuevas deben demostrar compromiso antes de publicar. Tras unos cuantos anuncios con éxito, esta tarifa se exime.',
|
||
supportsLabel: 'Apoya a la comunidad:',
|
||
supportsPrefix: 'La tarifa va a',
|
||
supportsSpotOwner: ' — ¡la persona que creó este spot!',
|
||
supportsPlatform: ' — ayuda a mantener SkateSpots en marcha.',
|
||
oneTimeFee: '~{{usd}} USD • Tarifa única',
|
||
payToContinue: 'Paga {{amount}} sats para continuar',
|
||
proveWork: 'Demuestra trabajo en su lugar — gratis',
|
||
proveWorkBody: 'Gasta unos segundos de CPU en vez de {{amount}} sats. Sin dinero, sin cartera: un impuesto antispam, no un pago.',
|
||
generating: 'Generando factura...',
|
||
processing: 'Procesando el pago...',
|
||
qrAlt: 'Código QR de pago',
|
||
copyInvoice: 'Copiar factura',
|
||
openWallet: 'Abrir cartera',
|
||
payWithWallet: 'Pagar con la cartera conectada',
|
||
scanHint: 'Escanea el código QR con una cartera Lightning o usa los botones de arriba',
|
||
skipTitle: 'Cómo evitar esta tarifa en el futuro:',
|
||
skip1: 'Añade un spot de skate al mapa',
|
||
skip2: 'Completa 2-3 anuncios con éxito',
|
||
skip3: 'Construye tu reputación en la comunidad',
|
||
skipNote: '¡Los miembros de confianza obtienen anuncios gratis ilimitados!',
|
||
},
|
||
reputation: {
|
||
highlyTrusted: 'Comerciante muy fiable',
|
||
building: 'Construyendo reputación',
|
||
newTrader: 'Comerciante nuevo',
|
||
title: 'Tratos',
|
||
verified: 'Verificados',
|
||
sales: 'Ventas',
|
||
purchases: 'Compras',
|
||
tradeConfirmedOne: 'trato confirmado mutuamente',
|
||
tradeConfirmedMany: 'tratos confirmados mutuamente',
|
||
with: 'con',
|
||
personOne: 'persona',
|
||
personMany: 'personas',
|
||
awaiting: 'Esperando confirmación mutua',
|
||
withPaymentProof: 'con una prueba de pago adjunta',
|
||
selfReported: '(autodeclarado — no verificado)',
|
||
paymentVerified: 'pago verificado',
|
||
zapReceipt: '(recibo de zap)',
|
||
singlePartnerWarning: 'Todas las confirmaciones son con la misma cuenta. La confirmación mutua es autodeclarada, así que trata este registro con cuidado.',
|
||
lowDiversityWarning: 'La mayoría de las confirmaciones vienen de muy pocas cuentas. Un grupo pequeño que se avala entre sí puede parecer muy activo: trata este registro con cuidado.',
|
||
ringWarning: 'Estas cuentas comercian sobre todo entre ellas: un grupo cerrado. La confirmación mutua dentro de un círculo es una prueba débil.',
|
||
weighted: 'Ponderado por confianza y actividad',
|
||
footnote: 'Autodeclarado y firmado mutuamente: una señal, no una prueba de pago.',
|
||
},
|
||
reputationPanel: {
|
||
reviewOfYou: 'Reseña sobre ti',
|
||
yourRecord: 'tu registro',
|
||
listing: 'Anuncio',
|
||
averageOne: 'media de {{count}} valoración',
|
||
averageMany: 'media de {{count}} valoraciones',
|
||
reviewsTitle: 'Reseñas y registros de tratos',
|
||
fromOthers: '{{count}} de otros',
|
||
emptyBefore: 'Aún no hay registros de tratos. Cierra un trato y confírmalo en',
|
||
emptyAfter: ': cada confirmación se convierte en una reseña en ambos perfiles.',
|
||
},
|
||
recommendations: {
|
||
published: 'Recomendación publicada',
|
||
publishedBody: 'Gracias por avalar.',
|
||
failed: 'No se pudo recomendar',
|
||
somethingWrong: 'Algo salió mal.',
|
||
title: 'Comerciante de confianza',
|
||
recommendedBy: 'Recomendado por',
|
||
skaterOne: 'skater',
|
||
skaterMany: 'skaters',
|
||
none: 'Aún no hay recomendaciones.',
|
||
youRecommend: 'Recomiendas a este comerciante ✓',
|
||
recommend: 'Recomendar como comerciante de confianza',
|
||
},
|
||
notification: {
|
||
newOffer: 'Nueva oferta',
|
||
counterOffer: 'Contraoferta',
|
||
offerAccepted: 'Oferta aceptada',
|
||
offerDeclined: 'Oferta rechazada',
|
||
offerWithdrawn: 'Oferta retirada',
|
||
confirmTrade: 'Confirma un trato',
|
||
tradeConfirmed: 'Trato confirmado',
|
||
reviewOffer: 'Revisar la oferta',
|
||
openListing: 'Abrir anuncio',
|
||
},
|
||
confirmRow: {
|
||
rateTrade: 'Valora el trato:',
|
||
},
|
||
deckRating: {
|
||
title: '{{value}}/10 tablas',
|
||
aria: '{{n}} de 10',
|
||
},
|
||
clink: {
|
||
tip: 'Dar propina en Bitcoin',
|
||
copiedBody: 'Código CLINK copiado al portapapeles.',
|
||
copyFailed: 'No se pudo copiar',
|
||
copyFailedBody: 'No se pudo acceder al portapapeles.',
|
||
whatIs: '¿Qué es CLINK?',
|
||
tooltipTitle: 'Paga directamente con Bitcoin por Nostr',
|
||
tooltipBody: 'CLINK es un código de pago autocustodial: sin cuenta en una app, sin intermediarios. Escanéalo con una cartera Lightning compatible y la propina va directamente a ellos.',
|
||
descRecipient: 'Envía un pago de Bitcoin (Lightning) autocustodial a {{recipientName}} — sin intermediarios.',
|
||
descGeneric: 'Envía un pago de Bitcoin (Lightning) autocustodial por Nostr — sin intermediarios.',
|
||
qrAlt: 'Código QR de oferta CLINK',
|
||
copyCode: 'Copiar código CLINK',
|
||
openWallet: 'Abrir en cartera CLINK',
|
||
copyToWallet: 'Copiar código para tu cartera',
|
||
priceFixed: 'Fijo — {{amount}} sats',
|
||
priceFixedShort: 'Precio fijo',
|
||
priceVariable: 'Precio variable',
|
||
priceVariableCurrency: 'Precio en {{currency}}',
|
||
priceSpontaneous: 'Tú eliges el importe',
|
||
footnote: 'Escanea con una cartera compatible con CLINK (p. ej. ShockWallet). Si no se abre nada, copia el código de arriba: puede que no tengas una cartera compatible con CLINK instalada. Sin custodio, sin servidor web: la factura se solicita directamente por Nostr.',
|
||
},
|
||
paymentReadiness: {
|
||
ready: 'Puedes recibir pagos',
|
||
notReady: 'Configura los pagos para recibir dinero',
|
||
readyBefore: 'Tu dirección Lightning',
|
||
readyAfter: ' está en tu perfil — la gente puede zapearte y pagarte directamente.',
|
||
silentSet: ' También hay configurada una dirección de pago silencioso de Bitcoin.',
|
||
notReadyBefore: 'Añade una dirección Lightning (y, opcionalmente, una dirección de pago silencioso de Bitcoin) a tu',
|
||
nostrProfile: 'perfil de Nostr',
|
||
notReadyAfter: 'para que los skaters puedan pagarte. Se configura una vez y funciona en todos tus perfiles aquí.',
|
||
},
|
||
seller: {
|
||
trade: 'Intercambio',
|
||
active: 'Activo',
|
||
markSold: 'Marcar vendido',
|
||
yourListings: 'Tus anuncios',
|
||
activeCount: '{{count}} activos',
|
||
listItem: 'Publicar un artículo',
|
||
loading: 'Cargando tus anuncios…',
|
||
empty: 'Aún no tienes anuncios.',
|
||
listFirst: 'Publica tu primer artículo',
|
||
},
|
||
noffer: {
|
||
label: 'Código de oferta CLINK',
|
||
optional: '(opcional, avanzado)',
|
||
offerId: 'Oferta: {{id}}',
|
||
relay: 'Relé: {{relay}}',
|
||
invalidBefore: 'Eso no parece un código',
|
||
invalidAfter: 'válido.',
|
||
valid: 'Código CLINK válido — aparecerá un botón "Pagar vía CLINK" en tu perfil.',
|
||
help: 'Pega un código de pago CLINK autocustodial (p. ej. de ShockWallet / Lightning.Pub) para aceptar pagos Lightning nativos de Nostr — sin servidor web ni custodio.',
|
||
learnSpecs: 'Ver la especificación',
|
||
},
|
||
escrowPanel: {
|
||
escrowed: 'En depósito {{amount}} sats',
|
||
mint: 'Casa de moneda',
|
||
refundSinceBefore: 'El comprador puede reembolsar desde',
|
||
redeemBefore: 'El vendedor puede canjear ahora · el comprador reembolsa después de',
|
||
noExpiry: 'Este token no tiene caducidad.',
|
||
},
|
||
escrowRequest: {
|
||
enterAmount: 'Introduce un importe en depósito',
|
||
minLock: 'Bloquea durante al menos {{days}} día',
|
||
requestNote: 'En depósito {{amount}} sats para nuestro trato: confirma la venta, por favor.',
|
||
created: 'Depósito creado 🎉',
|
||
createdBody: '{{amount}} sats bloqueados durante {{days}} días. {{sellerName}} puede canjearlos al entregar.',
|
||
createFailed: 'No se pudo crear el depósito',
|
||
somethingWrong: 'Algo salió mal.',
|
||
title: 'Poner este trato en depósito',
|
||
description: 'Los fondos quedan bloqueados a favor de {{sellerName}} y tú puedes reembolsarlos si el trato se cae tras la fecha límite. Requiere una cartera Lightning conectada.',
|
||
amountLabel: 'Importe (sats)',
|
||
daysLabel: 'Reembolso del comprador tras (días)',
|
||
daysHint: 'Tras estos días puedes recuperar los fondos si el vendedor no ha entregado.',
|
||
lockedNotSent: 'Los fondos están bloqueados en escrow y guardados en este dispositivo, pero la solicitud no se envió. Reabre el anuncio para reintentar. No pagues otra vez.',
|
||
mintLabel: 'Mint (donde se bloquean los fondos)',
|
||
sellerMintHint: 'El vendedor prefiere este mint; los fondos bloqueados aquí son los más fáciles de canjear para él.',
|
||
mintHint: 'El escrow vive en este mint. El vendedor lo canjea aquí, así que elige uno en el que confiéis ambos.',
|
||
noMints: 'No hay mints disponibles',
|
||
p2pkUnsupported: 'Este mint no anuncia compatibilidad con P2PK (NUT-11), así que el escrow no se puede bloquear aquí. Elige otro mint.',
|
||
nativeOnly: 'El depósito en garantía Cashu solo está disponible en la app de SkateSpots (no en la versión web).',
|
||
lockAndRequest: 'Bloquear y solicitar',
|
||
},
|
||
},
|
||
|
||
labUi: {
|
||
activeCount: '{{count}} activos',
|
||
addMusicProfile: 'Añadir perfil musical',
|
||
all: 'Todos',
|
||
clearAll: 'Borrar todo',
|
||
collective: 'Colectivo',
|
||
filters: 'Filtros',
|
||
following: 'Siguiendo',
|
||
getRiderCard: 'Consigue tu carnet de rider',
|
||
judgeEvents: 'Juzgar eventos',
|
||
justASkater: 'Solo un',
|
||
labForServices: 'The Lab es para servicios. Explora y únete a toda la comunidad skater',
|
||
loginToOffer: 'Inicia sesión para ofrecer servicios',
|
||
newest: 'Más recientes',
|
||
noResults: 'Sin resultados',
|
||
offer: 'Ofrecer',
|
||
offerBuilding: 'Ofrecer construcción',
|
||
offerCoaching: 'Ofrecer clases',
|
||
offerCuts: 'Ofrecer cortes',
|
||
offerDesignArt: 'Ofrecer diseño / arte',
|
||
offerEditing: 'Ofrecer edición',
|
||
offerFilming: 'Ofrecer grabación',
|
||
offerGraffiti: 'Ofrecer graffiti',
|
||
offerPhotography: 'Ofrecer fotografía',
|
||
offerServices: 'Ofrecer servicios',
|
||
yourProfiles: 'Tus perfiles del Lab',
|
||
preview: {
|
||
button: 'Vista previa',
|
||
title: 'Vista previa en vivo',
|
||
desc: 'Así se verá tu perfil de {{noun}} cuando lo publiques.',
|
||
untitled: 'Tu nombre',
|
||
noBio: 'Aún no hay descripción — añade una línea sobre lo que ofreces.',
|
||
years: '{{count}} años de experiencia',
|
||
portfolio: 'Portafolio',
|
||
note: 'Solo vista previa — aún no se ha publicado nada.',
|
||
},
|
||
draft: {
|
||
title: 'Tienes un borrador sin guardar',
|
||
body: 'Continúa donde lo dejaste — nada se publica hasta que pulses Publicar. Con licencia GNU Affero General Public License v3.0: las derivadas y las versiones alojadas deben seguir abiertas bajo los mismos terminos, porque el uso en red cuenta como distribucion.',
|
||
resume: 'Reanudar borrador',
|
||
discard: 'Descartar borrador',
|
||
},
|
||
progress: {
|
||
title: 'Perfil completo',
|
||
count: '{{done}} de {{total}}',
|
||
photo: 'Foto',
|
||
bio: 'Descripción',
|
||
skills: 'Aptitudes',
|
||
rate: 'Tarifa',
|
||
location: 'Ubicación',
|
||
contact: 'Contacto',
|
||
},
|
||
wizard: {
|
||
identity: 'Identidad',
|
||
offer: 'Qué ofreces',
|
||
rates: 'Tarifas',
|
||
contact: 'Contacto',
|
||
media: 'Multimedia',
|
||
},
|
||
offerTattoo: 'Ofrecer tatuajes',
|
||
offerTraining: 'Ofrecer entrenamiento / fisio',
|
||
organizeEvents: 'Organizar eventos',
|
||
resultsMany: '{{count}} resultados',
|
||
resultsOne: '{{count}} resultado',
|
||
searchCityPlaceholder: 'Ciudad…',
|
||
searchNamePlaceholder: 'Nombre, bio…',
|
||
showResults: 'Ver resultados',
|
||
showResultsActive: 'Ver resultados · {{count}} activos',
|
||
skaterWord: 'skater',
|
||
sortBy: 'Ordenar por',
|
||
theCrew: 'El Crew',
|
||
topRated: 'Mejor valorados',
|
||
trusted: 'De confianza',
|
||
trustLevel: 'Nivel de confianza',
|
||
yearsExp: '{{count}} años exp',
|
||
tabCoaches: 'Entrenadores',
|
||
tabFilmers: 'Filmers',
|
||
tabPhoto: 'Foto',
|
||
tabEditors: 'Editores',
|
||
tabBuilders: 'Constructores',
|
||
tabArtists: 'Artistas',
|
||
tabGraffiti: 'Graffiti',
|
||
tabTattoo: 'Tatuaje',
|
||
tabTrainers: 'Entrenadores personales',
|
||
tabMusic: 'Música',
|
||
tabJudges: 'Jueces',
|
||
tabOrganizers: 'Organizadores',
|
||
tabBarbers: 'Barberos',
|
||
filterSkillsToLearn: 'Trucos que enseñar',
|
||
filterContentType: 'Tipo de contenido',
|
||
filterEquipmentStyle: 'Equipo y estilo',
|
||
filterServices: 'Servicios',
|
||
filterCamera: 'Cámara',
|
||
filterLenses: 'Objetivos',
|
||
filterLighting: 'Iluminación',
|
||
filterSupportRig: 'Soporte y equipo',
|
||
filterStyle: 'Estilo',
|
||
filterWhatTheyBuild: 'Qué construyen',
|
||
filterMaterialsTrade: 'Materiales y oficio',
|
||
filterProjectScale: 'Escala del proyecto',
|
||
filterWhatTheyMake: 'Qué crean',
|
||
filterMedium: 'Técnica',
|
||
filterSoftwareTools: 'Software y herramientas',
|
||
filterWorkContext: 'Contexto de trabajo',
|
||
filterMethod: 'Método',
|
||
filterFocus: 'Enfoque',
|
||
filterInjuriesTreated: 'Lesiones tratadas',
|
||
filterCredentialsSetting: 'Credenciales y entorno',
|
||
filterGenre: 'Género',
|
||
filterInstrumentsRole: 'Instrumentos y rol',
|
||
filterEventFormats: 'Formatos de evento',
|
||
filterSpecialty: 'Especialidad',
|
||
filterLevelCircuit: 'Nivel / circuito',
|
||
filterEventTypes: 'Tipos de evento',
|
||
filterWhatYouHandle: 'Qué gestionas',
|
||
filterScale: 'Escala',
|
||
filterWhatTheyOffer: 'Qué ofrecen',
|
||
filterSignatureStyles: 'Estilos característicos',
|
||
filterSetting: 'Entorno',
|
||
filterEditType: 'Tipo de edición',
|
||
role: {
|
||
coach: 'Entrenador',
|
||
filmer: 'Filmer',
|
||
builder: 'Constructor',
|
||
editor: 'Editor de vídeo',
|
||
photographer: 'Fotógrafo',
|
||
skater: 'Skaters',
|
||
},
|
||
empty: {
|
||
footer: '¿Tienes dudas? Consulta las FAQ →',
|
||
loginSuffix: 'para crear un perfil.',
|
||
coachesTitle: 'Aún no hay entrenadores',
|
||
coachesBody: 'Sé el primero en ofrecer clases de skate en tu zona.',
|
||
filmersTitle: 'Aún no hay filmers',
|
||
filmersBody: 'Sé el primero en ofrecer grabación de skate — clips, partes completas, cobertura de concursos y más.',
|
||
photographersTitle: 'Aún no hay fotógrafos',
|
||
photographersBody: 'Sé el primero en ofrecer fotografía de skate en tu zona — acción, secuencias, editorial y más.',
|
||
editorsTitle: 'Aún no hay editores de vídeo',
|
||
editorsBody: 'Sé el primero en ofrecer servicios de edición de vídeo de skate.',
|
||
buildersTitle: 'Aún no hay constructores',
|
||
buildersBody: 'Sé el primero en anunciar tus rampas, parques o construcciones DIY — hormigón, madera, barandillas y más.',
|
||
artistsTitle: 'Aún no hay artistas',
|
||
artistsBody: 'Sé el primero en ofrecer gráficos de tabla, logos, pósteres y merch para la escena.',
|
||
graffitiTitle: 'Aún no hay artistas de graffiti',
|
||
graffitiBody: 'Sé el primero en ofrecer piezas, murales y arte para skateparks en tu zona.',
|
||
tattooTitle: 'Aún no hay tatuadores',
|
||
tattooBody: 'Sé el primer tatuador de cultura skate en anunciarte — flash, personalizado, línea fina y más.',
|
||
trainersTitle: 'Aún no hay entrenadores personales',
|
||
trainersBody: 'Sé el primer entrenador o fisio que ayuda a los skaters a ponerse fuertes y mantenerse sanos.',
|
||
musiciansTitle: 'Aún no hay músicos',
|
||
musiciansBody: '¿Patinas y haces música? Añade tu banda o proyecto en solitario — géneros, instrumentos y enlaces.',
|
||
judgesTitle: 'Aún no hay jueces',
|
||
judgesBody: '¿Organizas concursos justos? Apúntate para juzgar Game of S.K.A.T.E., quedadas de mejor truco, concursos y paradas de gira.',
|
||
organizersTitle: 'Aún no hay organizadores',
|
||
organizersBody: '¿Organizas quedadas, competiciones, encuentros o demos? Apúntate para que los skaters puedan encontrarte y contratarte.',
|
||
barbersTitle: 'Aún no hay barberos',
|
||
barbersBody: '¿Cortas el pelo a skaters? Añade tu silla o servicio móvil para que la escena se dé un retoque.',
|
||
},
|
||
become: {
|
||
addNip05: 'Añade NIP-05 en Ajustes',
|
||
backToLab: 'Volver al Lab',
|
||
bioWorkLabel: 'Bio / Sobre tu trabajo',
|
||
checkContact: 'Revisa tus datos de contacto',
|
||
cityArea: 'Ciudad / zona',
|
||
cityCountry: 'Ciudad, país',
|
||
connectWallet: 'Conectar cartera',
|
||
connectWalletNwc: 'Conectar cartera con NWC',
|
||
contactInfo: 'Información de contacto',
|
||
contactInfoDesc: 'Cómo pueden contactarte los clientes (todo opcional, pero recomendado)',
|
||
coordinatesOptional: 'Coordenadas (opcional)',
|
||
email: 'Correo electrónico',
|
||
failedToPublish: 'No se pudo publicar',
|
||
fromNostrProfile: 'Desde tu perfil de Nostr',
|
||
geolocationUnsupported: 'Geolocalización no compatible',
|
||
getting: 'Obteniendo…',
|
||
headline: 'Titular',
|
||
headlineHint: 'Se muestra como el título de tu tarjeta del Lab — p. ej. “{{example}}”. Por defecto, tu nombre.',
|
||
imageUploaded: 'Imagen subida',
|
||
instagram: 'Instagram',
|
||
invalidEmail: 'Introduce una dirección de correo válida.',
|
||
invalidPortfolio: 'Introduce una URL de portafolio válida.',
|
||
invalidWebsite: 'Introduce una URL de sitio web válida.',
|
||
latitude: 'Latitud',
|
||
learnHow: 'Cómo funciona',
|
||
locationError: 'Error de ubicación',
|
||
locationFound: 'Ubicación encontrada',
|
||
loginRequired: 'Inicio de sesión obligatorio',
|
||
loginRequiredDesc: 'Debes iniciar sesión para crear un perfil de {{role}}.',
|
||
loginRequiredDescCraft: 'Debes iniciar sesión para crear un perfil de {{noun}}.',
|
||
longitude: 'Longitud',
|
||
nip05Recommended: 'Se recomienda verificación NIP-05',
|
||
nip05RecommendedDesc: 'Verifica tu identidad para generar confianza con los clientes.',
|
||
noWallet: 'Sin cartera conectada',
|
||
otherSocial: 'Otras redes sociales',
|
||
paymentSetup: '⚡ Configuración de pago necesaria',
|
||
phoneNumber: 'Número de teléfono',
|
||
profilePhoto: 'Foto de perfil',
|
||
profilePublished: 'Tu perfil se ha publicado.',
|
||
publishing: 'Publicando...',
|
||
socialMedia: 'Redes sociales',
|
||
tip: '💡 Consejo: la mayoría de carteras Lightning admiten NWC (Alby, Minibits, Zeus, Coinos).',
|
||
tipWithTime: '💡 Consejo: la mayoría de carteras Lightning admiten NWC (Alby, Minibits, Zeus, Coinos). Se configura en 30 segundos.',
|
||
upload: 'Subir',
|
||
uploadFailed: 'Error al subir',
|
||
uploadImage: 'Subir imagen',
|
||
uploading: 'Subiendo…',
|
||
useCurrentLocation: 'Usar ubicación actual',
|
||
useMyLocation: 'Usar mi ubicación',
|
||
usingNwc: 'Usando Nostr Wallet Connect',
|
||
usingWebln: 'Usando extensión WebLN del navegador',
|
||
walletConnected: 'Cartera conectada — ¡lista para recibir pagos!',
|
||
website: 'Sitio web',
|
||
yearsExperience: 'Años de experiencia',
|
||
},
|
||
coachForm: {
|
||
anonymous: 'Entrenador anónimo',
|
||
bioLabel: 'Bio / Filosofía de clases',
|
||
bioPlaceholder: 'Tu trayectoria, estilo de enseñanza...',
|
||
create: 'CREAR PERFIL DE ENTRENADOR',
|
||
created: '¡Perfil de entrenador creado!',
|
||
createPro: 'CREAR PERFIL DE ENTRENADOR PRO',
|
||
dmNote: '💬 Los alumnos pueden escribirte directamente por la mensajería cifrada de SkateSpots',
|
||
heading: 'Conviértete en entrenador',
|
||
headlineExample: 'Skate Coach Berlín',
|
||
hourlyRate: 'Tarifa por hora',
|
||
identity: 'Tu identidad de entrenador',
|
||
nip05Reason: 'Añade un identificador NIP-05 para verificar tu identidad y generar confianza con los alumnos — les demuestra que eres un entrenador legítimo.',
|
||
paymentDesc: 'Para cobrar las clases de los alumnos, debes conectar una cartera Lightning. Los alumnos te enviarán zaps directamente por las sesiones.',
|
||
profileDesc: 'Cuéntales a los alumnos tu experiencia',
|
||
profileTitle: 'Perfil de entrenador',
|
||
ratePlaceholder: '5000 sats/h',
|
||
selectSkill: 'Selecciona al menos un truco.',
|
||
skillsLabel: 'Trucos que enseño * (selecciona al menos uno)',
|
||
skillsRequired: 'Trucos obligatorios',
|
||
formatsLabel: 'Formatos de sesión',
|
||
formatsHint: 'Cómo impartes las clases.',
|
||
levelsLabel: 'Niveles que enseñas',
|
||
agesLabel: 'Grupos de edad',
|
||
credentialsLabel: 'Credenciales y seguridad',
|
||
credentialsHint: 'Declaradas por el entrenador — SkateSpots no las verifica.',
|
||
languagesLabel: 'Idiomas',
|
||
languagesHint: 'Añade los idiomas en los que puedes dar clase.',
|
||
languagePlaceholder: 'p. ej. Español, English',
|
||
availabilityLabel: 'Disponibilidad',
|
||
bookingLabel: 'Enlace de reserva',
|
||
bookingHint: 'Opcional — una página donde los alumnos pueden reservar y pagar.',
|
||
galleryLabel: 'Fotos de tu portfolio',
|
||
galleryHint: 'Muestra sesiones reales, alumnos y spots (hasta 12).',
|
||
galleryAdd: 'Añadir fotos del portfolio',
|
||
galleryUploaded: '{{count}} foto(s) subida(s)',
|
||
videoLabel: 'Vídeo destacado',
|
||
videoHint: 'Opcional — un vídeo de YouTube o Instagram de tus clases.',
|
||
formatOneOnOne: '1 a 1',
|
||
formatGroup: 'Grupo',
|
||
formatCamp: 'Campus',
|
||
formatVideo: 'Análisis de vídeo',
|
||
formatContestPrep: 'Preparación de competición',
|
||
formatParkLesson: 'Clase en el park',
|
||
formatAdaptive: 'Adaptado',
|
||
formatGirls: 'Sesión de chicas',
|
||
formatAfterSchool: 'Extraescolar',
|
||
levelBeginner: 'Principiante',
|
||
levelIntermediate: 'Intermedio',
|
||
levelAdvanced: 'Avanzado',
|
||
levelCompetition: 'Competición',
|
||
ageKids: 'Niños',
|
||
ageTeens: 'Adolescentes',
|
||
ageAdults: 'Adultos',
|
||
ageSeniors: 'Mayores',
|
||
certFirstAid: 'Primeros auxilios',
|
||
certCpr: 'RCP',
|
||
certSafeguarding: 'Protección infantil',
|
||
certBackgroundCheck: 'Antecedentes penales',
|
||
certInsured: 'Asegurado',
|
||
certFederation: 'Entrenador federativo nacional',
|
||
certQualification: 'Titulación de entrenador',
|
||
certJudge: 'Juez de competición',
|
||
certNoteLabel: 'Otras credenciales (opcional)',
|
||
certNotePlaceholder: 'p. ej. Nivel 2 de Skateboard GB, 8 años entrenando…',
|
||
availWeekdays: 'Entre semana',
|
||
availWeekends: 'Fines de semana',
|
||
availEvenings: 'Tardes/noches',
|
||
availAfterSchool: 'Extraescolar',
|
||
availHolidays: 'Vacaciones escolares',
|
||
availSeasonal: 'Temporada',
|
||
sectionWhatYouCoach: 'Qué enseñas',
|
||
sectionCredentials: 'Credenciales y seguridad',
|
||
sectionAvailability: 'Disponibilidad y reservas',
|
||
sectionWhereYouCoach: 'Dónde entrenas',
|
||
sectionPortfolio: 'Portfolio',
|
||
rateAmountLabel: 'Tarifa',
|
||
rateCurrencySats: 'sats',
|
||
rateCurrencyUsd: 'USD',
|
||
rateCurrencyEur: 'EUR',
|
||
rateCurrencyGbp: 'GBP',
|
||
perHour: 'por hora',
|
||
perSession: 'por sesión',
|
||
perHalfDay: 'por media jornada',
|
||
perDay: 'por día',
|
||
perCamp: 'por campus',
|
||
perProject: 'por proyecto',
|
||
perEvent: 'por evento',
|
||
perGig: 'por bolo',
|
||
perShoot: 'por sesión',
|
||
perPiece: 'por pieza',
|
||
perCut: 'por corte',
|
||
perMonth: 'por mes',
|
||
availByAppointment: 'Con cita',
|
||
rateNotesLabel: 'Notas sobre la tarifa (opcional)',
|
||
rateNotesPlaceholder: 'Tarifa social, primera clase gratis, desplazamiento incluido…',
|
||
sectionPayments: 'Pagos',
|
||
paymentMethodsHint: 'Cómo pueden pagarte. Es una declaración — SkateSpots nunca retiene fondos.',
|
||
payMethodCash: 'Efectivo en el sitio',
|
||
payMethodLightning: 'Lightning',
|
||
payMethodCashu: 'Cashu',
|
||
payMethodBank: 'Transferencia bancaria',
|
||
payMethodOther: 'Otro',
|
||
payWhatYouCanLabel: 'Tarifa social / paga lo que puedas',
|
||
bookingFeeLabel: 'Reserva (opcional)',
|
||
bookingFeeHint: 'Una pequeña cantidad pagada directamente a ti para confirmar la reserva. SkateSpots no la retiene ni la reembolsa.',
|
||
paymentNoteLabel: 'Nota de pago (opcional)',
|
||
paymentNotePlaceholder: 'Primera sesión gratis, desplazamiento incluido, pago después de la sesión…',
|
||
spotsDesc: 'Selecciona los spots donde ofreces clases',
|
||
spotsLabel: 'Spots donde entrenas',
|
||
tagline: 'Comparte tus conocimientos de skate',
|
||
update: 'ACTUALIZAR PERFIL DE ENTRENADOR',
|
||
updated: '¡Perfil de entrenador actualizado!',
|
||
},
|
||
filmerForm: {
|
||
anonymous: 'Filmer anónimo',
|
||
bioPlaceholder: 'Tu trayectoria, estilo, equipo...',
|
||
camerasLabel: 'Cámaras y equipo * (selecciona al menos uno)',
|
||
create: 'CREAR PERFIL DE FILMER',
|
||
created: '¡Perfil de filmer creado!',
|
||
createPro: 'CREAR PERFIL DE FILMER PRO',
|
||
dmNote: '💬 Los clientes pueden escribirte directamente por la mensajería cifrada de SkateSpots',
|
||
gearHelper: 'Enumera tus cámaras, objetivos y rigs exactos — a los skaters les importa el equipo.',
|
||
gearLabel: 'Qué llevas en la mochila (opcional)',
|
||
gearPlaceholder: 'p. ej. Sony VX1000 + ojo de pez MK1, Panasonic HVX200, estabilizador DJI RS3, GoPro Hero 12, micrófono Sennheiser...',
|
||
heading: 'Conviértete en filmer',
|
||
headlineExample: 'Skate Filmer Berlín',
|
||
identity: 'Tu identidad de filmer',
|
||
nip05Reason: 'Añade un identificador NIP-05 para verificar tu identidad y generar confianza con los clientes — les demuestra que eres un filmer legítimo.',
|
||
paymentDesc: 'Para cobrar de los clientes por tus servicios de grabación, debes conectar una cartera Lightning. Los clientes te enviarán zaps directamente por tu trabajo.',
|
||
profileDesc: 'Cuéntales a los clientes tu experiencia grabando',
|
||
profileTitle: 'Perfil de filmer',
|
||
rate: 'Tarifa',
|
||
ratePlaceholder: '10000 sats/vídeo',
|
||
reelLabel: 'Reel / portafolio',
|
||
selectService: 'Selecciona al menos un servicio.',
|
||
selectSkill: 'Selecciona al menos una habilidad de grabación.',
|
||
servicesLabel: 'Servicios ofrecidos * (selecciona al menos uno)',
|
||
servicesRequired: 'Servicios obligatorios',
|
||
skillsRequired: 'Habilidades obligatorias',
|
||
spotsDesc: 'Selecciona los spots donde ofreces servicios de grabación',
|
||
spotsLabel: 'Spots donde grabas',
|
||
tagline: 'Ofrece tu grabación de vídeo de skate — clips, líneas, partes completas y cobertura de concursos',
|
||
update: 'ACTUALIZAR PERFIL DE FILMER',
|
||
updated: '¡Perfil de filmer actualizado!',
|
||
},
|
||
editorForm: {
|
||
anonymous: 'Editor anónimo',
|
||
bioPlaceholder: 'Tu estilo de edición, trayectoria, proyectos destacados…',
|
||
contactPortfolio: 'Contacto y portafolio',
|
||
create: 'Publicar perfil de editor',
|
||
created: '¡Perfil de editor creado!',
|
||
createPro: 'Publicar perfil de editor Pro',
|
||
editTypes: 'Tipos de edición ofrecidos * (selecciona al menos uno)',
|
||
hardware: 'Hardware',
|
||
hardwarePlaceholder: 'p. ej. MacBook Pro M3, Sony FX3',
|
||
heading: 'Conviértete en editor de vídeo',
|
||
headlineExample: 'Editor de vídeo de skate',
|
||
identity: 'Tu identidad',
|
||
locationOptional: 'Ubicación (opcional)',
|
||
loginDesc: 'Inicia sesión para crear tu perfil de editor de vídeo.',
|
||
phoneTelegram: 'Teléfono / Telegram',
|
||
portfolioPlaceholder: 'Portafolio (Vimeo, YouTube…)',
|
||
profileDesc: 'Cuéntale a la comunidad tu estilo de edición y tus habilidades',
|
||
profileTitle: 'Perfil de editor',
|
||
published: 'Tu perfil se ha publicado en SkateSpots.',
|
||
rate: 'Tarifa / precios',
|
||
ratePlaceholder: 'p. ej. 50k sats/min, DM para presupuesto',
|
||
selectService: 'Selecciona al menos un tipo de edición.',
|
||
servicesRequired: 'Servicios obligatorios',
|
||
socialPlaceholder: 'Instagram / usuario social',
|
||
software: 'Software',
|
||
softwareHardware: 'Habilidades de software y hardware',
|
||
softwarePlaceholder: 'p. ej. DaVinci Resolve, Premiere',
|
||
tagline: 'Ofrece tus servicios de edición de vídeo a la comunidad skater',
|
||
thumbnail: 'Miniatura de perfil / showreel',
|
||
update: 'Actualizar perfil de editor',
|
||
updated: '¡Perfil de editor actualizado!',
|
||
walletConnected: 'Cartera conectada ✓',
|
||
walletDesc: 'Recibe pagos en Bitcoin ⚡ directamente de los clientes por tu trabajo de edición.',
|
||
walletTitle: '⚡ Cartera Lightning para pagos',
|
||
yearsExperience: 'Años de experiencia',
|
||
yearsPlaceholder: 'p. ej. 5 años',
|
||
},
|
||
photoForm: {
|
||
anonymous: 'Fotógrafo anónimo',
|
||
bioPlaceholder: 'Tu trayectoria, estilo, lo que te encanta fotografiar...',
|
||
cameraLabel: 'Cámaras * (selecciona al menos una)',
|
||
cameraRequired: 'Cámara obligatoria',
|
||
contactDesc: 'Cómo pueden los riders ver tu trabajo y contactarte (todo opcional, pero recomendado)',
|
||
create: 'CREAR PERFIL DE FOTÓGRAFO',
|
||
created: '¡Perfil de fotógrafo creado!',
|
||
createPro: 'CREAR PERFIL DE FOTÓGRAFO PRO',
|
||
dmNote: '💬 Los riders pueden escribirte directamente por la mensajería cifrada de SkateSpots',
|
||
gearHelper: 'Enumera cámaras, objetivos e iluminación exactos — a los riders les encanta conocer el equipo.',
|
||
gearPlaceholder: 'p. ej. Canon R6 II, ojo de pez 8-15 mm, 70-200 mm f/2.8, 2× Godox AD200, disparadores remotos, trípode Manfrotto...',
|
||
heading: 'Conviértete en fotógrafo',
|
||
headlineExample: 'Fotografía de skate',
|
||
identity: 'Tu identidad de fotógrafo',
|
||
lensesLabel: 'Objetivos',
|
||
lightingLabel: 'Equipo de iluminación',
|
||
nip05Reason: 'Añade un identificador NIP-05 para verificar tu identidad y generar confianza con los clientes.',
|
||
paymentDesc: 'Para cobrar por las sesiones, conecta una cartera Lightning. Los clientes te envían zaps directamente por tu trabajo.',
|
||
portfolioLabel: 'Portafolio / Instagram',
|
||
profileDesc: 'Cuéntales a los riders tu mirada, tu equipo y tus servicios',
|
||
profileTitle: 'Perfil de fotógrafo',
|
||
ratePlaceholder: '20000 sats/sesión',
|
||
selectCamera: 'Selecciona al menos un tipo de cámara con el que disparas.',
|
||
selectService: 'Selecciona al menos un servicio que ofrezcas.',
|
||
servicesLabel: 'Servicios ofrecidos * (selecciona al menos uno)',
|
||
servicesRequired: 'Servicios obligatorios',
|
||
spotsDesc: 'Selecciona los spots donde ofreces fotografía',
|
||
spotsLabel: 'Spots donde disparas',
|
||
styleLabel: 'Estilo de disparo',
|
||
supportLabel: 'Soporte y equipo',
|
||
tagline: 'Dispara las sesiones — ofrece tu fotografía de skate',
|
||
update: 'ACTUALIZAR PERFIL DE FOTÓGRAFO',
|
||
updated: '¡Perfil de fotógrafo actualizado!',
|
||
},
|
||
builderForm: {
|
||
anonymous: 'Constructor anónimo',
|
||
bioLabel: 'Bio / Sobre tus construcciones',
|
||
bioPlaceholder: 'Tu crew, construcciones destacadas, cómo abordas un proyecto...',
|
||
buildTypesLabel: 'Qué construyes * (selecciona al menos uno)',
|
||
buildTypesRequired: 'Tipos de construcción obligatorios',
|
||
cityBase: 'Ciudad / base',
|
||
contactPortfolio: 'Contacto y portafolio',
|
||
contactPortfolioDesc: 'Cómo puede la escena ver tus construcciones y contactarte (todo opcional, pero recomendado)',
|
||
create: 'CREAR PERFIL DE CONSTRUCTOR',
|
||
created: '¡Perfil de constructor creado!',
|
||
createPro: 'CREAR PERFIL DE CONSTRUCTOR PRO',
|
||
dmNote: '💬 Los clientes pueden escribirte directamente por la mensajería cifrada de SkateSpots',
|
||
gearHelper: 'A los crews y clientes les encanta conocer tu equipo y tu proceso.',
|
||
gearLabel: 'Cómo trabajas / equipo (opcional)',
|
||
gearPlaceholder: 'p. ej. peña de hormigón completa, hormigonera + equipo de gunita propios, soldadura móvil, nos encargamos de permisos y drenaje...',
|
||
heading: 'Conviértete en constructor',
|
||
headlineExample: 'Constructor de rampas y parques',
|
||
identity: 'Tu identidad de constructor',
|
||
insured: 'Con licencia / asegurado',
|
||
insuredHelper: 'Relevante para parques públicos y trabajo con ayuntamientos',
|
||
logoPhoto: 'Logo / foto',
|
||
materialsLabel: 'Materiales y oficio',
|
||
nip05Reason: 'Añade un identificador NIP-05 para verificar tu identidad y generar confianza con los clientes.',
|
||
pastBuilds: 'Construcciones anteriores / Instagram',
|
||
paymentDesc: 'Para cobrar por tus construcciones, conecta una cartera Lightning. Los clientes te envían zaps directamente por tu trabajo.',
|
||
profileDesc: 'Cuéntale a la escena qué construyes y cómo trabajas',
|
||
profileTitle: 'Perfil de constructor',
|
||
rateLabel: 'Tarifa / base del presupuesto',
|
||
ratePlaceholder: 'por m² / por proyecto',
|
||
scaleLabel: 'Escala del proyecto',
|
||
selectBuild: 'Selecciona al menos una cosa que construyas.',
|
||
serviceArea: 'Zona de servicio',
|
||
serviceAreaPlaceholder: 'p. ej. Cataluña, desplazamiento por la UE',
|
||
spotsDesc: 'Vincula spots y parques que hayas construido para que la gente vea tu trabajo en el mapa',
|
||
spotsLabel: 'Spots que has construido',
|
||
tagline: 'Hormigón, soldadura, construcción — anuncia tus rampas y parques',
|
||
update: 'ACTUALIZAR PERFIL DE CONSTRUCTOR',
|
||
updated: '¡Perfil de constructor actualizado!',
|
||
yearsBuilding: 'Años construyendo',
|
||
},
|
||
skaterForm: {
|
||
backToSkaters: 'Volver a Skaters',
|
||
bioHelperPulled: 'Tomado de tu perfil — ajústalo para tu tarjeta de skater o déjalo tal cual.',
|
||
bioHelperShort: 'Una breve presentación para tu tarjeta de skater.',
|
||
bioPlaceholder: 'Cuánto tiempo llevas patinando, qué te gusta, en qué estás trabajando…',
|
||
browseSpots: 'Explorar spots',
|
||
changePhoto: 'Cambiar foto de perfil',
|
||
chipBio: 'Bio',
|
||
chipPhoto: 'Foto',
|
||
cityArea: 'Ciudad / zona',
|
||
created: '¡Ya estás en el mapa! 🛹',
|
||
custom: 'Personalizado',
|
||
customHelper: 'Tu propia etiqueta — se muestra en tu tarjeta de skater en lugar de un preajuste.',
|
||
customPlaceholder: 'p. ej. OG, de fin de semana, retirado…',
|
||
discoverable: 'Otros skaters ya pueden encontrarte.',
|
||
editFullProfile: 'edita tu perfil completo',
|
||
fromProfile: 'Desde tu perfil',
|
||
heroEditPrefix: 'Edita tu Directorio de',
|
||
heroJoinPrefix: 'Únete al Directorio de',
|
||
heroSuffix: '',
|
||
homeHelper: 'Escríbelo libremente o vincula un spot real del mapa para que la gente pueda ir.',
|
||
homePlaceholder: 'Parque / plaza local — o toca “Explorar spots”',
|
||
homeSpot: 'Spot habitual',
|
||
layerEnd: 'para cambiarlos en todas partes.',
|
||
layerIntro: 'Esta es tu',
|
||
layerMid: ', construida sobre tu perfil de Nostr. Tu nombre, foto, bio, lightning y verificación vienen de ahí —',
|
||
layerWord: 'capa skater',
|
||
level: 'Nivel',
|
||
linked: 'Vinculado a un spot del mapa',
|
||
loadingProfile: 'Cargando tu perfil…',
|
||
loadingSpots: 'Cargando spots…',
|
||
locationHelper: 'Ayuda a otros a encontrar skaters cerca. Solo se comparte una zona aproximada.',
|
||
loginToJoin: 'Inicia sesión para unirte',
|
||
loginToJoinDesc: 'Crea tu perfil de skater para que la comunidad pueda encontrarte.',
|
||
mappedSpot: 'Spot del mapa',
|
||
noSpots: 'Aún no se han encontrado spots.',
|
||
noSpotsMatch: 'Ningún spot coincide con tu búsqueda.',
|
||
openMap: 'Abrir el mapa',
|
||
pickEverything: 'Elige todo lo que encaje con tu estilo.',
|
||
pickHomeSpot: 'Elige tu spot habitual',
|
||
pickStyles: 'Elige tus estilos',
|
||
pickStylesDesc: 'Elige al menos una cosa que patines.',
|
||
profilePic: 'Foto de perfil',
|
||
profilePicHelper: 'Tu tarjeta de skater usa tu foto de perfil de Nostr — la misma imagen en todas partes.',
|
||
publishingAs: 'Publicando como',
|
||
putOnMap: 'Ponme en el mapa',
|
||
searchSpots: 'Busca spots por nombre o ciudad…',
|
||
skateStory: 'Tu historia skater',
|
||
stance: 'Postura',
|
||
unlinkSpot: 'Desvincular spot',
|
||
updateButton: 'Actualizar mi perfil',
|
||
updated: '¡Perfil actualizado!',
|
||
whatYouSkate: 'Lo que patinas *',
|
||
yearsPlaceholder: 'p. ej. 8',
|
||
yearsSkating: 'Años patinando',
|
||
yourProfilePic: 'Tu foto de perfil',
|
||
zapsOn: 'Zaps activados',
|
||
},
|
||
skaters: {
|
||
clearSearch: 'Borrar búsqueda',
|
||
community: 'La comunidad',
|
||
countMany: 'skaters',
|
||
countOne: 'skater',
|
||
editProfile: 'Editar mi perfil de skater',
|
||
heroDesc: 'Encuentra a tu gente. Explora a los skaters que representan a SkateSpots — por estilo, postura, nivel y ciudad.',
|
||
nip05Verified: 'Verificado con NIP-05',
|
||
noMatches: 'Sin coincidencias',
|
||
noneDesc: 'Sé el primero en unirte al directorio y poner SkateSpots en el mapa.',
|
||
noneTitle: 'Aún no hay skaters',
|
||
noVerifiedMatch: 'Ningún skater verificado coincide',
|
||
searchPlaceholder: 'Busca por nombre, ciudad o npub…',
|
||
tryDifferentSearch: 'Prueba otra búsqueda o borra los filtros.',
|
||
tryTurnOffVerified: 'Prueba a desactivar el filtro “Verificado” para ver a todos.',
|
||
verifiedFilterTitle: 'Mostrar solo skaters con una identidad NIP-05 verificada',
|
||
},
|
||
skaterCard: {
|
||
inDirectory: 'Estás en el Directorio de Skaters',
|
||
joinDesc: 'Añade tu postura, estilos y nivel para que los skaters puedan encontrarte.',
|
||
joinTitle: 'Únete al Directorio de Skaters',
|
||
},
|
||
crewsStrip: {
|
||
allCrews: 'Todos los crews',
|
||
memberMany: '{{count}} miembros',
|
||
memberOne: '{{count}} miembro',
|
||
title: 'Crews en esta escena',
|
||
},
|
||
labLink: {
|
||
coach: 'Entrenador',
|
||
filmer: 'Filmer',
|
||
editor: 'Editor',
|
||
photographer: 'Fotógrafo',
|
||
builder: 'Constructor',
|
||
artist: 'Artista',
|
||
graffiti: 'Graffiti',
|
||
tattoo: 'Tatuaje',
|
||
trainer: 'Entrenador personal',
|
||
musician: 'Músico',
|
||
judge: 'Juez',
|
||
barber: 'Barbero',
|
||
organizer: 'Organizador',
|
||
lab: 'Lab',
|
||
linkedProfiles: 'Perfiles del Lab vinculados',
|
||
desc: '¿También tienes un estudio, clases o un servicio de construcción? Vincula tus perfiles del Lab para que la gente pueda contratar a tu crew. Opcional. Cuando el perfil del Lab también enlaza de vuelta a este crew, ambos muestran una insignia',
|
||
descEnd: 'verde.',
|
||
empty: 'Aún no tienes perfiles del Lab. Crea uno en The Lab para vincularlo aquí.',
|
||
},
|
||
proUpgrade: {
|
||
goPro: 'Hazte Pro',
|
||
optional: '· opcional',
|
||
freeTo: 'Gratis publicar. Pro añade una',
|
||
proBadge: 'insignia Pro',
|
||
featuredPlacement: 'colocación destacada',
|
||
atTop: 'en la parte superior del Lab.',
|
||
active: 'Activo',
|
||
benefit1: 'Insignia "Pro" dorada en tu perfil y tarjetas',
|
||
benefit2: 'Aparece primero cuando los skaters exploran The Lab',
|
||
benefit3: 'Apoya a SkateSpots — sin anuncios, sin intermediarios',
|
||
platformOwner: 'Propietario de la plataforma — Pro siempre está activo.',
|
||
proActiveOne: 'Pro activo · queda {{count}} día. Tu perfil aparecerá destacado.',
|
||
proActiveMany: 'Pro activo · quedan {{count}} días. Tu perfil aparecerá destacado.',
|
||
context: 'Tu perfil sigue publicado gratis cuando caduque Pro — solo pierdes la insignia y el impulso.',
|
||
},
|
||
profilePreview: {
|
||
viewPublic: 'Ver público',
|
||
unnamed: 'Skater sin nombre',
|
||
noHandle: 'Aún sin identificador',
|
||
},
|
||
pyramid: {
|
||
pyramidWord: 'PIRÁMIDE',
|
||
rankingsWord: 'RANKINGS',
|
||
subtitle: 'Principales contribuidores de tu ciudad',
|
||
yourRank: 'Tu puesto',
|
||
keepContributing: '¡Sigue contribuyendo para subir más alto!',
|
||
topContributors: 'Principales contribuidores',
|
||
noContributors: 'Aún no hay contribuidores. ¡Sé el primero en añadir un spot o crear un evento!',
|
||
spots: 'Spots',
|
||
events: 'Eventos',
|
||
total: 'Total',
|
||
trust: 'Confianza',
|
||
},
|
||
detail: {
|
||
joined: 'Se unió',
|
||
about: 'Sobre',
|
||
howWeWork: 'Cómo trabajamos',
|
||
inTheBag: 'En la mochila',
|
||
hardware: 'Hardware',
|
||
software: 'Software',
|
||
eventsJudged: 'Eventos juzgados',
|
||
eventsOrganized: 'Eventos organizados',
|
||
spots: 'Spots',
|
||
viewSpot: 'Ver spot',
|
||
credentialsTitle: 'Credenciales y seguridad',
|
||
selfAttested: 'Declaradas por el entrenador — no verificadas por SkateSpots.',
|
||
formats: 'Formatos',
|
||
levels: 'Niveles',
|
||
ages: 'Edades',
|
||
languages: 'Idiomas',
|
||
availability: 'Disponibilidad',
|
||
bookSession: 'Reservar una sesión',
|
||
portfolio: 'Portfolio',
|
||
watchReel: 'Ver en {{platform}}',
|
||
paymentsTitle: 'Pagos',
|
||
payWhatYouCan: 'Paga lo que puedas',
|
||
bookingFee: 'Reserva',
|
||
payBookingFee: 'Pagar reserva',
|
||
bookingFeeNote: 'Se paga directamente al entrenador. SkateSpots no lo retiene ni lo reembolsa.',
|
||
bookingFeeNoRail: 'Este entrenador no tiene dirección Lightning, así que el pago in-app no está disponible — contacta para acordar el pago.',
|
||
serviceArea: 'Zona de servicio',
|
||
licensedInsured: 'Con licencia / asegurado',
|
||
studio: 'Estudio',
|
||
shopStudio: 'Tienda / estudio',
|
||
booksOpen: 'Agenda abierta',
|
||
credentials: 'Credenciales',
|
||
remoteOnline: 'Disponible en remoto / en línea',
|
||
graffitiCrew: 'Crew de graffiti',
|
||
act: 'Formato',
|
||
listen: 'Escuchar',
|
||
upcomingGigs: 'Próximos bolos',
|
||
past: 'Pasado',
|
||
experience: 'Experiencia',
|
||
yearsCount: '{{count}} años',
|
||
rate: 'Tarifa',
|
||
contact: 'Contacto',
|
||
sendMessage: 'Enviar mensaje',
|
||
bookGig: 'Reservar para un bolo',
|
||
portfolioDomain: 'Portafolio · {{domain}}',
|
||
manage: 'Gestionar',
|
||
admin: 'Admin',
|
||
editProfile: 'Editar perfil',
|
||
publishedTitle: 'Ya estás visible',
|
||
publishedBody: 'Tu perfil está publicado en The Lab. Compártelo para que los skaters te encuentren.',
|
||
manageRemove: 'Elimina tu perfil de {{noun}} de The Lab.',
|
||
adminTakeDown: 'Retira este perfil de {{noun}}. Quedará oculto en todo SkateSpots.',
|
||
entityLabel: 'perfil de {{noun}}',
|
||
deleteProfile: 'Eliminar perfil',
|
||
location: 'Ubicación',
|
||
servicesSkills: 'Servicios y habilidades',
|
||
noun: {
|
||
coach: 'entrenador',
|
||
filmer: 'filmer',
|
||
editor: 'editor de vídeo',
|
||
photographer: 'fotógrafo',
|
||
builder: 'constructor',
|
||
artist: 'artista',
|
||
graffiti: 'artista de graffiti',
|
||
tattoo: 'tatuador',
|
||
trainer: 'entrenador personal',
|
||
musician: 'músico',
|
||
judge: 'juez de eventos',
|
||
organizer: 'organizador de eventos',
|
||
barber: 'barbero',
|
||
profile: 'perfil',
|
||
},
|
||
skillsTitle: {
|
||
skills: 'Trucos',
|
||
servicesGear: 'Servicios y equipo',
|
||
whatWeBuild: 'Qué construimos',
|
||
whatTheyMake: 'Qué crean',
|
||
stylesWork: 'Estilos y obra',
|
||
styles: 'Estilos',
|
||
focusSpecialties: 'Enfoque y especialidades',
|
||
genresInstruments: 'Géneros e instrumentos',
|
||
formatsSpecialties: 'Formatos y especialidades',
|
||
servicesStyles: 'Servicios y estilos',
|
||
eventTypesServices: 'Tipos de evento y servicios',
|
||
},
|
||
},
|
||
rider: {
|
||
heroDesc: 'Tu identidad skater verificable. Firmada con Nostr, lista para imprimir, imposible de falsificar.',
|
||
heroDesc2: 'Gana insignias de habilidad presenciadas por otros skaters. Consigue pases de acceso a parks. Comparte tu carnet donde quieras.',
|
||
headerTagline: 'Firmado con Nostr · listo para imprimir · verificado por QR',
|
||
tabCard: 'Mi carnet',
|
||
tabBadges: 'Insignias',
|
||
tabAward: 'Otorgar',
|
||
rendering: 'Generando…',
|
||
shareCard: 'Compartir carnet',
|
||
savePng: 'Guardar PNG',
|
||
print: 'Imprimir',
|
||
copyId: 'Copiar ID',
|
||
cardType: 'Tipo de carnet',
|
||
licenseLabel: 'Licencia · AGPL-3.0',
|
||
licenseSub: 'Tu identidad personal de rider',
|
||
parkLabel: 'Acceso al park',
|
||
parkSub: 'Emite pases como propietario de un park',
|
||
theme: 'Tema',
|
||
holoTitle: 'Brillo holográfico',
|
||
holoDesc: 'Efecto de lámina animado',
|
||
cardDetails: 'Detalles del carnet',
|
||
skateStyle: 'Estilo de skate',
|
||
ridesFor: 'Patrocina a',
|
||
ridesForPlaceholder: 'Tienda local…',
|
||
sponsors: 'Patrocinadores',
|
||
sponsorsPlaceholder: 'Marcas…',
|
||
showOnCard: 'Mostrar en el carnet',
|
||
zaps: 'Zaps ⚡',
|
||
skills: 'Habilidades',
|
||
selected: '{{count}}/6 seleccionados',
|
||
goldBadgesHint1: 'Las insignias doradas de tu carnet vienen de otros skaters que te presenciaron — consulta la pestaña',
|
||
goldBadgesHint2: '.',
|
||
parkOwnersOnly: 'Solo propietarios de parks.',
|
||
parkOwnersDesc: 'Emítelo con la misma clave de Nostr que publicó tu anuncio del park. Cualquiera puede escanear el QR y verificar la firma en la cadena — sin autoridad central.',
|
||
parkDetails: 'Detalles del park',
|
||
parkName: 'Nombre del park',
|
||
parkNamePlaceholder: 'The Berrics…',
|
||
riderName: 'Nombre del rider',
|
||
riderNamePlaceholder: 'Nombre en el carnet',
|
||
riderNpub: 'ID de Nostr del rider (npub)',
|
||
accessLevel: 'Nivel de acceso',
|
||
validThru: 'Válido hasta',
|
||
publishToNostr: 'Publicar en Nostr',
|
||
badgesIntro: 'Otras personas presenciaron y firmaron estas insignias en Nostr. Aparecen como chips dorados ⭐ en tu carnet.',
|
||
earnMore: '¿Quieres ganar más? Patina delante de alguien y pídele que presencie tu truco.',
|
||
awardSomeone: 'Otorgar una insignia a otra persona',
|
||
youSawIt: 'Lo viste ocurrir',
|
||
youSawItDesc: 'Firma la prueba en Nostr. Pasa a formar parte de su historial permanente — vinculada criptográficamente a tu clave.',
|
||
skillsWitnessed: 'Habilidades que presenciaste',
|
||
whereSeen: '¿Dónde lo viste?',
|
||
optional: '(opcional)',
|
||
signingOnNostr: 'Firmando en Nostr…',
|
||
awardBadge: 'Otorgar insignia',
|
||
addRiderSkill: 'Añade el npub del rider + al menos una habilidad',
|
||
invalidNpub: 'npub no válido',
|
||
badgeAwarded: '🏅 ¡Insignia otorgada!',
|
||
badgeSent: '{{skills}} enviados.',
|
||
failed: 'Error',
|
||
couldNotRender: 'No se pudo generar el carnet',
|
||
popupBlocked: 'Ventana emergente bloqueada',
|
||
popupBlockedDesc: 'Permite las ventanas emergentes en este sitio.',
|
||
linkCopied: '🔗 ¡Enlace copiado!',
|
||
enterRiderNpub: 'Introduce el npub del rider',
|
||
parkPublished: '✅ ¡Carnet de acceso al park publicado!',
|
||
publishFailed: 'Error al publicar',
|
||
noBadges: 'Aún no hay insignias. ¡Patina delante de alguien y pídele que presencie tus trucos!',
|
||
showMore: 'Mostrar {{count}} más',
|
||
witnessedBy: 'Presenciado por',
|
||
at: 'en',
|
||
previewLicense: 'Licencia de skater',
|
||
previewSince: 'Desde {{year}}',
|
||
previewEvts: 'Evts',
|
||
previewScan: 'Escanea para verificar',
|
||
previewSkatepark: 'Skatepark',
|
||
previewAccessPass: 'Pase de acceso',
|
||
previewMemberName: 'Nombre del socio',
|
||
previewIssuedBy: 'Emitido por el propietario del park · firmado con Nostr',
|
||
previewValidThru: 'Válido hasta',
|
||
previewNostrVerified: 'Verificado con Nostr',
|
||
},
|
||
craftFields: {
|
||
detailsTitle: 'Detalles adicionales',
|
||
deliverables: 'Entregables',
|
||
turnaround: 'Plazo',
|
||
surfaces: 'Superficies / Muros',
|
||
maxSize: 'Tamaño máximo',
|
||
setLength: 'Duración del set',
|
||
techRider: 'Rider técnico',
|
||
travel: 'Desplazamiento',
|
||
certifications: 'Certificaciones',
|
||
insurance: 'Seguro',
|
||
permits: 'Permisos',
|
||
deposit: 'Señal',
|
||
minimum: 'Mínimo',
|
||
modalities: 'Modalidades',
|
||
duration: 'Duración de la cita',
|
||
drone: 'Dron',
|
||
leadTime: 'Plazo de entrega',
|
||
warranty: 'Garantía',
|
||
},
|
||
craftForm: {
|
||
profileImage: 'Imagen de perfil',
|
||
nameHeadline: 'Nombre / titular',
|
||
about: 'Sobre ti',
|
||
aboutPlaceholder: 'Cuéntales a los skaters sobre tu trabajo como {{noun}}…',
|
||
required: 'obligatorio',
|
||
nip05Title: 'Añade NIP-05 para generar confianza',
|
||
nip05Desc: 'Un identificador NIP-05 ayuda a los skaters a verificar que eres quien dices ser. Muy recomendado antes de publicar.',
|
||
editingNote: 'Editando tu perfil de {{noun}} existente — al publicar se reemplaza.',
|
||
location: 'Ubicación',
|
||
pinned: '📍 Fijado en el mapa ({{lat}}, {{lng}})',
|
||
experienceYears: 'Experiencia (años)',
|
||
expPlaceholder: 'p. ej. 5',
|
||
ratePlaceholder: 'p. ej. 20k sats / por proyecto',
|
||
contactLinks: 'Contacto y enlaces',
|
||
phoneOptional: 'Teléfono (opcional)',
|
||
emailOptional: 'Correo (opcional)',
|
||
socialPlaceholder: 'Redes (Instagram, etc.)',
|
||
gettingPaid: 'Cobrar',
|
||
updateProfile: 'Actualizar perfil',
|
||
publishProfile: 'Publicar perfil',
|
||
rateLeftBlankNote: 'Opcional — déjalo en blanco si la tarifa de arriba es suficiente.',
|
||
sectionRequired: '{{section}} obligatorio',
|
||
sectionRequiredDesc: 'Selecciona al menos una opción en "{{section}}".',
|
||
updated: '¡Perfil actualizado!',
|
||
created: '¡Perfil creado!',
|
||
headlineExample: 'Skate Coach Berlín',
|
||
},
|
||
},
|
||
|
||
chromeUi: {
|
||
skipToContent: 'Saltar al contenido',
|
||
menu: 'Menú',
|
||
inBadge: 'Dentro',
|
||
loggedIn: 'Sesión iniciada',
|
||
profile: 'Perfil',
|
||
logIn: 'Iniciar sesión',
|
||
logOut: 'Cerrar sesión',
|
||
notLoggedIn: 'Sin sesión',
|
||
loggedOutPrompt: 'Inicia sesión para añadir spots, enviar zaps a otros skaters y guardar tus favoritos',
|
||
accounts: 'Cuentas',
|
||
addAnotherAccount: 'Añadir otra cuenta',
|
||
setStatus: 'Definir estado',
|
||
setYourStatus: 'Define tu estado',
|
||
status: 'Estado',
|
||
addSpot: 'Añadir spot',
|
||
myData: 'Mis datos',
|
||
myStash: 'Mi alijo',
|
||
myCollections: 'Mis colecciones',
|
||
viewMyProfile: 'Ver mi perfil',
|
||
customizeNavBar: 'Personalizar barra de navegación',
|
||
ecash: 'Ecash',
|
||
madeWith: 'Hecho con',
|
||
forSkateCommunity: 'para la comunidad de skateboarding',
|
||
beta: 'Beta',
|
||
license: 'Licencia',
|
||
privacy: 'Privacidad',
|
||
collaborators: 'Colaboradores y amigos',
|
||
notSponsoredBy: 'Sin patrocinio de',
|
||
errorTitle: 'No se pudo cargar',
|
||
errorDescription: 'La solicitud de red falló. Comprueba tu conexión e inténtalo de nuevo.',
|
||
tryAgain: 'Intentar de nuevo',
|
||
weatherOn: 'Tiempo activado',
|
||
weatherOff: 'Tiempo desactivado',
|
||
trustFilter: 'Filtro de confianza',
|
||
filterByTrustLevel: 'Filtrar por nivel de confianza',
|
||
trust: {
|
||
all: 'Todos los usuarios',
|
||
allDesc: 'Mostrar contenido de todo el mundo',
|
||
verified: 'Verificado',
|
||
verifiedDesc: 'Los sigues o están verificados (confianza ≥90)',
|
||
trusted: 'De confianza',
|
||
trustedDesc: 'Amigos de amigos o verificados por NIP-05 (confianza ≥60)',
|
||
following: 'Solo a quienes sigo',
|
||
followingDesc: 'Mostrar solo contenido de las personas que sigues',
|
||
followingShort: 'Siguiendo',
|
||
},
|
||
sort: {
|
||
recent: 'Más recientes',
|
||
recentDesc: 'Los más nuevos primero',
|
||
trust: 'Mayor confianza',
|
||
trustDesc: 'Creadores de más confianza',
|
||
proximity: 'Más cercanos',
|
||
proximityDesc: 'Ubicaciones más cercanas',
|
||
popular: 'Más populares',
|
||
popularDesc: 'Más comentarios/reacciones',
|
||
zaps: 'Más zapados',
|
||
zapsDesc: 'Mayor valor recibido',
|
||
},
|
||
spotType: {
|
||
street: 'Calle',
|
||
transition: 'Transición',
|
||
park: 'Parque',
|
||
plaza: 'Plaza',
|
||
diy: 'DIY',
|
||
bowl: 'Bowl',
|
||
vert: 'Vert',
|
||
indoor: 'Indoor',
|
||
skatepark: 'Skatepark',
|
||
miniramp: 'Mini Rampa',
|
||
},
|
||
},
|
||
|
||
placesUi: {
|
||
addToCalendar: {
|
||
add: 'Añadir al calendario',
|
||
appleOutlook: 'Apple / Outlook (.ics)',
|
||
google: 'Google Calendar',
|
||
},
|
||
attendees: {
|
||
goingCount: 'van',
|
||
goingTab: 'Van ({{count}})',
|
||
interestedTab: 'Interesados ({{count}})',
|
||
nobodyGoing: 'Nadie ha confirmado todavía.',
|
||
nobodyInterested: 'Nadie se ha marcado como interesado todavía.',
|
||
noRsvps: 'Aún no hay confirmaciones — sé el primero en decir que vas.',
|
||
trusted: 'De confianza',
|
||
trustedTitle: 'Alguien a quien sigues o un mapeador de confianza',
|
||
youTrust: 'de confianza',
|
||
},
|
||
bounty: {
|
||
addressCoords: 'Dirección y coordenadas',
|
||
basic: 'Básico',
|
||
contactInfo: 'Datos de contacto',
|
||
description: 'Descripción',
|
||
earningPotential: 'Potencial de ganancias',
|
||
excellent: '¡Excelente!',
|
||
gettingStarted: 'Empezando',
|
||
good: 'Bien',
|
||
onePhoto: 'Al menos 1 foto',
|
||
openingHours: 'Horario de apertura',
|
||
shopName: 'Nombre de la tienda',
|
||
threePhotos: '3+ fotos',
|
||
tip: '💡 ¡Más calidad = más zaps de la comunidad!',
|
||
},
|
||
calendar: {
|
||
allDay: 'Todo el día',
|
||
eventDay: 'Día de evento',
|
||
eventsOnDay: '{{count}} eventos',
|
||
eventsThisMonth: 'eventos este mes',
|
||
going: 'van',
|
||
months: {
|
||
january: 'enero', february: 'febrero', march: 'marzo',
|
||
april: 'abril', may: 'mayo', june: 'junio',
|
||
july: 'julio', august: 'agosto', september: 'septiembre',
|
||
october: 'octubre', november: 'noviembre', december: 'diciembre',
|
||
},
|
||
nextMonth: 'Mes siguiente',
|
||
nothingOnDay: 'No hay nada este día.',
|
||
prevMonth: 'Mes anterior',
|
||
tapHighlighted: 'Toca un día resaltado para ver qué hay.',
|
||
today: 'Hoy',
|
||
tourDay: 'Día de tour',
|
||
toursOnDay: '{{count}} tours',
|
||
toursThisMonth: 'tours este mes',
|
||
weekdays: { sun: 'dom', mon: 'lun', tue: 'mar', wed: 'mié', thu: 'jue', fri: 'vie', sat: 'sáb' },
|
||
weekdaysShort: { sun: 'D', mon: 'L', tue: 'M', wed: 'X', thu: 'J', fri: 'V', sat: 'S' },
|
||
},
|
||
countdown: {
|
||
ended: 'Finalizado',
|
||
happeningNow: 'Sucediendo ahora',
|
||
inDays: 'En {{count}} días',
|
||
inHoursMins: 'En {{hours}}h {{mins}}m',
|
||
inMins: 'En {{count}} min',
|
||
startingNow: 'Empieza ya',
|
||
tomorrow: 'Mañana',
|
||
},
|
||
createEvent: {
|
||
add: 'Añadir',
|
||
addNewSpot: 'Añadir un spot nuevo →',
|
||
changeSpot: 'Cambiar spot',
|
||
created: '¡Evento creado!',
|
||
createdDesc: 'Tu evento se ha publicado en la red.',
|
||
entryFee: 'Precio de entrada',
|
||
entryFeeHint: '(opcional — p. ej. "500 sats" o "10 €")',
|
||
entryFeePlaceholder: 'Déjalo en blanco para eventos gratis',
|
||
featuring: 'Con {{name}}',
|
||
featuringDesc: 'Este grupo se etiquetará como música en directo y aparecerá en su lista de conciertos.',
|
||
fundingGoal: 'Objetivo de financiación',
|
||
fundingGoalHint: '(opcional — sats para financiar con zaps)',
|
||
fundingGoalPlaceholder: 'p. ej. 50000',
|
||
geoNotSupported: 'Geolocalización no compatible',
|
||
geoNotSupportedDesc: 'Tu navegador no admite geolocalización.',
|
||
hideSpots: 'Ocultar spots',
|
||
hostingAs: 'Organizando como {{name}}',
|
||
hostingAsDesc: 'Este evento aparecerá en la página de tu crew y se etiquetará como organizado por la crew.',
|
||
imageUploaded: 'Imagen subida',
|
||
imageUploadedDesc: 'Tu imagen se ha subido correctamente.',
|
||
invalidDate: 'Fecha no válida',
|
||
invalidDateDesc: 'Introduce una fecha y hora de inicio válidas.',
|
||
invalidEnd: 'Hora de fin no válida',
|
||
invalidEndDesc: 'La hora de fin debe ser posterior a la de inicio.',
|
||
linkedTo: 'Vinculado a: {{title}}',
|
||
linkToSpot: 'Vincular a un spot',
|
||
linkToShop: 'Vincular a una tienda',
|
||
selectedShop: 'Vinculado a {{name}}',
|
||
selectShopHint: 'Opcional — se celebra en o lo organiza una tienda de skate.',
|
||
selectShop: 'Elegir tienda',
|
||
changeShop: 'Cambiar tienda',
|
||
hideShops: 'Ocultar tiendas',
|
||
searchShops: 'Buscar tiendas…',
|
||
noShopsMatch: 'Ninguna tienda coincide con tu búsqueda.',
|
||
noShopsAvailable: 'Aún no hay tiendas disponibles.',
|
||
linkToTour: 'Vincular a un tour (opcional)',
|
||
linkTourDesc: 'Vincula este evento a un tour para mostrar que forma parte de una serie más amplia. Ideal para tours nacionales, aventuras internacionales o días de retos del World Destruction Tour.',
|
||
loadingSpots: 'Cargando spots...',
|
||
loadingTours: 'Cargando tours...',
|
||
locationError: 'Error de ubicación',
|
||
locationFound: 'Ubicación encontrada',
|
||
locationFoundDesc: 'Se ha establecido tu ubicación actual.',
|
||
logoUrl: 'URL del logo (opcional)',
|
||
noSpotsAvailable: 'No hay spots disponibles',
|
||
noSpotsMatch: 'Ningún spot coincide con tu búsqueda',
|
||
noTourLinked: 'Ningún tour vinculado',
|
||
optional: '(opcional)',
|
||
pastDesc: 'Elige una fecha y hora futuras para que los skaters puedan confirmar y asistir.',
|
||
pastTitle: 'Esa hora de inicio ya ha pasado',
|
||
publishFailed: 'No se pudo publicar',
|
||
publishFeatured: 'Publicar evento destacado',
|
||
removeSponsor: 'Eliminar patrocinador',
|
||
searchSpots: 'Busca spots por nombre, ubicación o categoría...',
|
||
selectedSpot: 'Seleccionado: {{name}}',
|
||
selectSpot: 'Seleccionar spot',
|
||
selectSpotHint: 'Selecciona en el mapa el spot donde se celebra este evento',
|
||
selectTour: 'Seleccionar tour',
|
||
somethingWrong: 'Algo ha salido mal',
|
||
sponsorName: 'Nombre del patrocinador',
|
||
sponsors: 'Patrocinadores',
|
||
sponsorsHint: '¿Tienes una tienda o marca que lo respalde? Añade su logo — se muestra como una franja "Presentado por" en el evento.',
|
||
startRequired: 'Hora de inicio obligatoria',
|
||
startRequiredDesc: 'Introduce cuándo empieza el evento.',
|
||
titleRequired: 'Título obligatorio',
|
||
titleRequiredDesc: 'Introduce un nombre para este evento.',
|
||
uploadFailed: 'Error al subir',
|
||
uploadFailedDesc: 'No se pudo subir la imagen',
|
||
websiteUrl: 'URL del sitio web (opcional)',
|
||
},
|
||
createShop: {
|
||
address: 'Dirección de la tienda',
|
||
addressPlaceholder: 'p. ej., Calle Mayor 1, Madrid',
|
||
addressRequired: 'Dirección obligatoria',
|
||
addressRequiredDesc: 'Introduce la dirección de tu tienda.',
|
||
contactHint: 'Ayuda a los clientes a contactarte (se recomienda al menos un método de contacto)',
|
||
contactInfo: 'Información de contacto',
|
||
created: '🎉 ¡Tienda añadida!',
|
||
createdDesc: 'Tu tienda de skate ya está en el mapa. ¡Los skaters pueden enviarte zaps para agradecerlo!',
|
||
descriptionPlaceholder: 'Cuenta a la gente sobre tu tienda, qué vendes, tu especialidad...',
|
||
detailsDesc: 'Habla a la comunidad sobre tu tienda. Todos los campos marcados con * son obligatorios.',
|
||
email: 'Correo electrónico',
|
||
hoursOfOperation: 'Horario de apertura',
|
||
hoursPlaceholder: 'p. ej., Lun-Sáb 10:00-20:00, Dom 12:00-18:00',
|
||
instagram: 'Instagram',
|
||
invalidCoords: 'Coordenadas no válidas',
|
||
invalidCoordsDesc: 'Introduce una latitud (-90 a 90) y longitud (-180 a 180) válidas.',
|
||
latPlaceholder: 'Latitud (p. ej., 40.4168)',
|
||
lngPlaceholder: 'Longitud (p. ej., -3.7038)',
|
||
locationRequired: 'Ubicación obligatoria',
|
||
locationRequiredDesc: 'Introduce coordenadas o usa tu ubicación actual.',
|
||
loginToAdd: 'Debes iniciar sesión para añadir una tienda de skate.',
|
||
namePlaceholder: 'p. ej., Supreme Madrid',
|
||
nameRequired: 'Nombre de la tienda obligatorio',
|
||
nameRequiredDesc: 'Introduce un nombre para tu tienda.',
|
||
phoneNumber: 'Número de teléfono',
|
||
publishFailedDesc: 'Algo ha salido mal. Consulta la consola para más detalles.',
|
||
shopPhotoAlt: 'Tienda',
|
||
shopPhotos: 'Fotos de la tienda',
|
||
subtitle: 'Publica tu tienda en el mapa y conecta con la comunidad',
|
||
upload: 'Subir',
|
||
},
|
||
createTour: {
|
||
acceptedClipSources: 'Fuentes de clips aceptadas',
|
||
acceptedClipSourcesDesc: '¿Qué formatos aceptarás para enviar clips?',
|
||
accommodationInfo: 'Información de alojamiento',
|
||
accommodationPlaceholder: "Recomendaciones o arreglos de alojamiento, p. ej., 'Hostales económicos por la ruta', 'Se necesita equipo de acampada', 'Airbnbs incluidos'",
|
||
addChallenge: 'Añadir reto',
|
||
addCity: 'Añadir una ciudad...',
|
||
addCountry: 'Añadir un país...',
|
||
addShopFirst: 'Añade una tienda primero',
|
||
alsoSelected: 'También seleccionados:',
|
||
availabilityPlaceholder: 'p. ej., Fines de semana, Solo mañanas, Con cita',
|
||
availabilityQuestion: '¿Cuándo sueles estar disponible?',
|
||
availableShops: 'Tiendas de skate disponibles ({{count}})',
|
||
challengeDescPlaceholder: 'Descripción opcional...',
|
||
challenges: 'Retos',
|
||
challengesRequired: 'Retos obligatorios',
|
||
challengesRequiredDesc: 'Añade al menos un reto para que los equipos lo completen.',
|
||
challengesSecret: 'Todos los retos son SECRETOS hasta la fecha de inicio de la competición. ¡Los equipos no los verán hasta entonces!',
|
||
challengeTitlePlaceholder: "Título del reto, p. ej., 'Kickflip a un 10 escalones'",
|
||
citiesLabel: 'Ciudades',
|
||
citiesOnTour: 'Ciudades del tour',
|
||
cityPlaceholder: 'p. ej., Madrid, España',
|
||
cityRegion: 'Ciudad / Región',
|
||
cityRequired: 'Ciudad/región obligatoria',
|
||
cityRequiredDesc: 'Introduce tu ciudad o región.',
|
||
clipAnyUrl: '🔗 Cualquier URL',
|
||
clipBlossom: '📦 Subida a Blossom',
|
||
clipInstagram: '📸 Instagram',
|
||
clipYouTube: '▶️ YouTube',
|
||
competitionDates: 'Fechas de la competición',
|
||
competitionDatesWarning: '⚠️ ¡Todos los retos son SECRETOS hasta la fecha de inicio! Los equipos no verán los retos hasta que empiece la competición.',
|
||
competitionLocations: 'Ubicaciones de la competición',
|
||
competitionLocationsDesc: '¿Dónde competirán los equipos? Añade todas las ciudades y países implicados.',
|
||
coordsHint: 'Las coordenadas son opcionales. Añádelas para marcar tu punto de encuentro en el mapa.',
|
||
countriesLabel: 'Países',
|
||
countriesRequired: 'Países obligatorios',
|
||
countriesRequiredDesc: 'Añade al menos un país para tu tour internacional.',
|
||
createdDestruction: '💀 ¡WORLD DESTRUCTION TOUR CREADO!',
|
||
createdDestructionDesc: 'Los equipos pueden inscribirse. ¡Los retos se revelan en la fecha de inicio!',
|
||
createDestructionTour: 'Crear World Destruction Tour',
|
||
createdInternational: '✈️ ¡Tour internacional creado!',
|
||
createdInternationalDesc: '¡Tu aventura global está publicada! Conecta con skaters de todo el mundo.',
|
||
createdLocal: '🏠 ¡Tour local creado!',
|
||
createdLocalDesc: 'Tu tour ya es visible. ¡Los skaters pueden reservar por MD!',
|
||
createdNational: '🚐 ¡Tour nacional creado!',
|
||
createdNationalDesc: '¡Tu road trip está activo! Empieza a coordinar con los skaters interesados.',
|
||
departure: 'Salida *',
|
||
departureRequired: 'Fecha de salida obligatoria',
|
||
departureRequiredDesc: 'Indica cuándo sale el viaje para que los skaters puedan planificarse y reservar.',
|
||
descriptionPlaceholder: 'Describe lo que vivirán los skaters: spots que visitaréis, el ambiente, qué hace único tu tour...',
|
||
destructionDesc: 'Configura tu competición global estilo KOTR — ¡tú lo defines TODO!',
|
||
discountHint: 'Los participantes del tour pueden mostrar su confirmación de reserva en la tienda para recibir este descuento',
|
||
discountPercentage: 'Porcentaje de descuento',
|
||
dropTour: 'Lanza un tour',
|
||
duration: 'Duración',
|
||
durationHintDestruction: '¿Cuánto dura la competición? (1-12 meses)',
|
||
durationHintInternational: '¿Cuántas semanas dura la aventura? (hasta 2 meses)',
|
||
durationHintLocal: '¿Cuánto suele durar tu tour?',
|
||
durationHintNational: '¿Cuántos días dura el road trip?',
|
||
durationWeeksMonths: '{{weeks}} semanas (~{{months}} meses)',
|
||
editTour: 'Editar tour',
|
||
enable: 'Activar',
|
||
enabled: 'Activado',
|
||
endBeforeStart: 'Fin antes del inicio',
|
||
endBeforeStartDesc: 'La fecha de fin de la competición debe ser igual o posterior a la de inicio.',
|
||
endDate: 'Fecha de fin',
|
||
entryFeeHint: 'Te quedas el 95% • La plataforma se lleva el 5% • Déjalo vacío para entrada gratis',
|
||
entryFeePerTeam: 'Entrada por equipo (sats)',
|
||
entryFeePlaceholder: 'p. ej., 100000',
|
||
entryPrizes: 'Entrada y premios',
|
||
filmPremieres: 'Estrenos de películas de equipos',
|
||
filmPremieresDesc: 'Tras la competición, los clips de cada equipo se convierten en una película que puede estrenarse en tiendas de skate locales de todo el mundo.',
|
||
filmPremieresInfo: '🎥 Los equipos recopilan sus clips de retos en una película final. Las tiendas pueden acoger estrenos, conectando la competición global con las comunidades locales.',
|
||
filmReleaseDate: 'Fecha de estreno (opcional)',
|
||
filmReleaseDateHint: 'Cuándo estarán disponibles las películas. Déjalo vacío para estrenarlas justo después de que acabe la competición.',
|
||
fixedSession: 'Sesión fija',
|
||
fixedSessionDesc: 'Una fecha y hora concretas',
|
||
flexible: 'Flexible',
|
||
flexibleDesc: 'Reserva cuando quieras por MD',
|
||
hide: 'Ocultar',
|
||
howDestruction1: '• Competición global por equipos — de hasta 12 meses de duración',
|
||
howDestruction2: '• TÚ defines retos, puntos y premios — nosotros solo ponemos la plataforma',
|
||
howDestruction3: '• Todos los retos son SECRETOS hasta la fecha de inicio de la competición',
|
||
howDestruction4: '• Clips vía subida a Blossom O enlaces externos (YouTube, Instagram, cualquier URL)',
|
||
howDestruction5: '• Solo nivel avanzado — todos los tipos de spot incluidos automáticamente',
|
||
howDestruction6: '• La plataforma se lleva solo el 5% de las inscripciones (NO del bote de premios)',
|
||
howDestructionTitle: '💀 WORLD DESTRUCTION TOUR - Estilo KOTR',
|
||
howInternational1: '• Aventuras transfronterizas por varios países',
|
||
howInternational2: '• Tú pones el precio — la plataforma se lleva solo el 5%',
|
||
howInternational3: '• Fija las fechas de salida y regreso para que el equipo pueda reservar vuelos',
|
||
howInternational4: '• Conecta skaters de todo el mundo',
|
||
howInternational5: '• ¡Crea experiencias globales inolvidables!',
|
||
howInternationalTitle: 'Cómo funcionan los tours internacionales',
|
||
howItWorks: 'Cómo funciona:',
|
||
howLocal1: '• Tú pones el precio — la plataforma se lleva el 10%',
|
||
howLocal2: '• Los spots ocultos siguen ocultos — tú los muestras en persona',
|
||
howLocal3: '• Organiza una sesión programada o mantenlo flexible / con cita',
|
||
howLocal4: '• Los skaters reservan por MD, pagan en Lightning y pueden añadirlo a su calendario',
|
||
howLocal5: '• Construye tu reputación con reseñas y zaps',
|
||
howLocalTitle: 'Cómo funcionan los tours locales',
|
||
howNational1: '• Road trips por varias ciudades de tu país',
|
||
howNational2: '• Tú pones el precio — la plataforma se lleva solo el 7%',
|
||
howNational3: '• Fija las fechas del viaje para que los skaters puedan pedir días libres y viajar',
|
||
howNational4: '• Incluye info de transporte / alojamiento para la crew',
|
||
howNational5: '• ¡Construye aventuras de skate legendarias!',
|
||
howNationalTitle: 'Cómo funcionan los tours nacionales',
|
||
imageUploadedDesc: 'Tu imagen del tour se ha subido.',
|
||
incompleteCoords: 'Coordenadas incompletas',
|
||
incompleteCoordsDesc: 'Introduce latitud y longitud, o deja ambas vacías.',
|
||
internationalDetails: 'Detalles de la aventura internacional',
|
||
languagesSelected: '{{count}} seleccionados',
|
||
languagesSpoken: 'Idiomas hablados',
|
||
latOptional: 'Latitud (opcional)',
|
||
lngOptional: 'Longitud (opcional)',
|
||
loadingProfile: 'Cargando perfil...',
|
||
loadingProfileDesc: 'Comprobando el estado de tu verificación NIP-05.',
|
||
loadingShops: 'Cargando tiendas...',
|
||
localShopPremieres: 'Estrenos en tiendas locales',
|
||
localShopPremieresDesc: 'Las tiendas de skate de todo el mundo pueden acoger noches de cine',
|
||
loginToCreate: 'Debes iniciar sesión para crear un tour.',
|
||
maxGroupSize: 'Tamaño máximo del grupo',
|
||
maxTeams: 'Equipos máximos',
|
||
maxTeamSize: 'Tamaño máximo del equipo',
|
||
meetingLocationSet: 'Tu ubicación actual se ha establecido como punto de encuentro.',
|
||
meetingPointDesc: '¿Dónde te reunirás con los participantes del tour? Elige un sitio público y conocido.',
|
||
meetingPointLabel: 'Punto de encuentro',
|
||
meetingPointPlaceholder: 'p. ej., Estación de Atocha',
|
||
meetingPointRequired: 'Punto de encuentro obligatorio',
|
||
meetingPointRequiredDesc: 'Introduce dónde te reunirás con los participantes del tour.',
|
||
minTeamSize: 'Tamaño mínimo del equipo',
|
||
noChallenges: 'Aún no hay retos',
|
||
noChallengesDesc: 'Añade retos para que los equipos los completen',
|
||
noPartnerShop: 'Sin tienda asociada',
|
||
noShopsFound: 'Aún no se han encontrado tiendas de skate en la red.',
|
||
noShopsRegistered: 'Aún no hay tiendas de skate registradas',
|
||
onlineRelease: 'Estreno online',
|
||
onlineReleaseDesc: 'Estrena también las películas en YouTube/Nostr',
|
||
organizerContact: 'Datos de contacto del organizador',
|
||
organizerContactHint: 'Esto será visible para los equipos inscritos',
|
||
organizerContactPlaceholder: '¿Cómo pueden contactarte los equipos? p. ej., npub de Nostr, correo, Telegram, etc.',
|
||
partnerDiscountDesc: 'Ofrece a los participantes del tour un descuento en una tienda de skate local',
|
||
partnerStep1: '1. Asóciate con una tienda de skate local de confianza',
|
||
partnerStep2: '2. Fija un porcentaje de descuento para los participantes del tour',
|
||
partnerStep3: '3. Tras el tour, da a los participantes una confirmación para mostrar en la tienda',
|
||
partnerStep4: '4. La tienda respeta el descuento — ¡crea comunidad y atrae clientes!',
|
||
percentOff: '{{percent}}% DE DESCUENTO',
|
||
photoHint: 'Añade una foto tuya patinando o de un spot chulo de tu tour.',
|
||
pickRide: 'Elige tu rollo',
|
||
place1: '🥇 1.º',
|
||
place2: '🥈 2.º',
|
||
place3: '🥉 3.º',
|
||
platformFee: 'Tú pones el precio • La plataforma se lleva {{percent}}',
|
||
points: 'Puntos:',
|
||
pricePerPerson: 'Precio por persona (sats)',
|
||
pricePlaceholder: 'p. ej., 25000',
|
||
prizeDistribution: 'Reparto de premios',
|
||
prizePoolHint: 'Opcional — total de premios disponibles',
|
||
prizePoolPlaceholder: 'p. ej., 2000000',
|
||
proTipDesc: 'Antes de publicar un descuento de socio, contacta con el dueño de la tienda por MD para acordar el porcentaje. Así te aseguras de que está de acuerdo y respetará el descuento para los participantes de tu tour.',
|
||
proTipTitle: '💡 Consejo: ¡coordina con la tienda primero!',
|
||
return: 'Regreso',
|
||
returnBeforeDeparture: 'Regreso antes de la salida',
|
||
returnBeforeDepartureDesc: 'La fecha de regreso debe ser igual o posterior a la de salida.',
|
||
roadTripDetails: 'Detalles del road trip',
|
||
schedule: 'Horario',
|
||
scheduleDesc: 'Organicémoslo como una sesión programada única, o mantenlo flexible y deja que los skaters reserven una hora por MD.',
|
||
secretUntilStart: 'Secreto hasta el inicio',
|
||
selectPartnerShop: 'Seleccionar tienda asociada',
|
||
sessionDateRequired: 'Fecha de sesión obligatoria',
|
||
sessionDateRequiredDesc: 'Elige la fecha y hora de tu sesión programada, o cambia a horario flexible.',
|
||
sessionDateTime: 'Fecha y hora de la sesión',
|
||
sessionDateTimeHint: 'Los skaters verán esta hora y podrán añadirla a su calendario desde la página del tour.',
|
||
shopPremieresContact: 'Contacta directamente con estas tiendas para organizar noches de estreno. Todos los acuerdos son privados.',
|
||
shopPremieresHow: '💡 Cómo funcionan los estrenos en tiendas: contacta directamente con las tiendas para organizar las noches de estreno. Todos los acuerdos son privados entre tú y las tiendas.',
|
||
shopsCanRegister: 'Las tiendas pueden registrarse en /create-shop',
|
||
show: 'Mostrar',
|
||
showAllLanguages: 'Mostrar los {{count}} idiomas',
|
||
somethingWrong: 'Algo ha salido mal.',
|
||
spotTypes: 'Tipos de spots',
|
||
spotTypesRequired: 'Tipos de spot obligatorios',
|
||
spotTypesRequiredDesc: 'Selecciona al menos un tipo de spot que mostrarás.',
|
||
startDate: 'Fecha de inicio',
|
||
startDateRequired: 'Fecha de inicio obligatoria',
|
||
startDateRequiredDesc: 'Indica cuándo empieza la competición (los retos se revelarán en esa fecha).',
|
||
startingCity: 'Ciudad de salida',
|
||
startingCityPlaceholder: 'p. ej., Madrid, España',
|
||
teamSettings: 'Ajustes de equipos',
|
||
teamsCount: '{{count}} equipos',
|
||
titlePlaceholder: 'p. ej., Madrid Lavapiés — Tour de spots underground',
|
||
titleRequired: 'Título del tour obligatorio',
|
||
titleRequiredDesc: 'Introduce un nombre para tu tour.',
|
||
totalPercent: 'Total: {{percent}}%',
|
||
totalPrizePool: 'Bote total de premios (sats)',
|
||
tourDesc: 'Cuenta a los skaters qué pueden esperar de tu tour',
|
||
tourDetails: 'Detalles del tour',
|
||
tourPhoto: 'Foto del tour',
|
||
tourTitle: 'Título del tour',
|
||
transportDestructionPlaceholder: '¿Cómo viajarán los equipos entre ubicaciones? ¿Hay transporte incluido o recomendado?',
|
||
transportInfo: 'Información de transporte',
|
||
transportPlaceholder: "¿Cómo viajarán los participantes? p. ej., 'Furgoneta incluida', 'Vuela a Barcelona, alquilamos una furgo', 'Tren entre ciudades'",
|
||
tripDatesDesc: 'Fija las fechas para que los skaters puedan pedir días libres, reservar vuelos y planificar el viaje.',
|
||
tripDatesTitle: 'Fechas del viaje',
|
||
updated: '¡Tour actualizado!',
|
||
updatedDesc: 'Tus cambios se han publicado.',
|
||
upload: 'Subir',
|
||
view: 'Ver →',
|
||
worldDestruction: 'World Destruction Tour',
|
||
youReceive: 'Recibes: {{amount}} sats por persona',
|
||
},
|
||
editEvent: {
|
||
accessDenied: 'Acceso denegado',
|
||
accessDeniedDesc: 'Solo puedes editar eventos que hayas creado.',
|
||
backToEvent: 'Volver al evento',
|
||
detailsDesc: 'Actualiza la información de este evento. Todos los campos marcados con * son obligatorios.',
|
||
eventCover: 'Portada del evento',
|
||
locationUpdated: 'Ubicación actualizada.',
|
||
loginToEdit: 'Debes iniciar sesión para editar este evento.',
|
||
newSpot: 'Nuevo spot: {{location}}.',
|
||
newTime: 'Nueva hora: {{date}} a las {{time}}.',
|
||
saveChanges: 'Guardar cambios',
|
||
saving: 'Guardando...',
|
||
title: 'Editar evento',
|
||
updated: '¡Evento actualizado!',
|
||
updatedDesc: 'Tus cambios se han publicado en la red.',
|
||
updateDetails: 'Actualiza los detalles de {{title}}',
|
||
updatedNotified: 'Cambios publicados — {{count}} asistentes notificados.',
|
||
updateFailed: 'No se pudo actualizar',
|
||
updateMessage: '{{parts}} — consulta el evento para más detalles.',
|
||
},
|
||
editShop: {
|
||
accessDeniedDesc: 'Solo puedes editar tiendas que hayas creado.',
|
||
backToShop: 'Volver a la tienda',
|
||
detailsDesc: 'Actualiza la información de tu tienda. Todos los campos marcados con * son obligatorios.',
|
||
loginToEdit: 'Debes iniciar sesión para editar esta tienda.',
|
||
updated: '¡Tienda actualizada!',
|
||
updateDetails: 'Actualiza los detalles de {{name}}',
|
||
},
|
||
editTour: {
|
||
accessDeniedDesc: 'Solo puedes editar tours que hayas creado.',
|
||
loginToEdit: 'Debes iniciar sesión para editar este tour.',
|
||
},
|
||
eventCard: {
|
||
report: 'Denunciar',
|
||
},
|
||
eventDetail: {
|
||
aCrew: 'una crew',
|
||
addToCalendar: 'Añadir al calendario',
|
||
backToEvents: 'Volver a eventos',
|
||
cancelled: 'Este evento se canceló',
|
||
checkUpdate: '— consulta la actualización',
|
||
copyFailed: 'Error al copiar',
|
||
date: 'Fecha',
|
||
editEvent: 'Editar evento',
|
||
eventFallback: 'Evento',
|
||
eventOrganizer: 'Organizador del evento',
|
||
getDirections: 'Cómo llegar',
|
||
linkCopied: 'Enlace copiado',
|
||
linkCopiedDesc: 'Enlace del evento copiado al portapapeles — pégalo donde quieras.',
|
||
live: 'En directo:',
|
||
liveMusic: 'música en directo',
|
||
location: 'Ubicación',
|
||
newLocation: 'Nueva ubicación',
|
||
noRsvps: 'No se registraron confirmaciones.',
|
||
organizer: 'Organizador',
|
||
rsvpsClosed: 'Las confirmaciones están cerradas — el organizador canceló este evento.',
|
||
seeMap: 'Ver mapa',
|
||
shareEvent: 'Compartir evento',
|
||
shareText: '{{title}} — un evento de skate en SkateSpots',
|
||
shareTextFallback: 'Mira este evento de skate en SkateSpots',
|
||
time: 'Hora',
|
||
timeChanged: 'Hora cambiada',
|
||
updatesFromHost: 'Actualizaciones del organizador',
|
||
where: 'Dónde',
|
||
whoCame: 'Quién vino',
|
||
whosGoing: 'Quién va',
|
||
},
|
||
events: {
|
||
calendar: 'Calendario',
|
||
createTour: 'Crear tour',
|
||
events: 'Eventos',
|
||
faqFooter: '¿Tienes dudas? Consulta las FAQ →',
|
||
hosting: 'Organizando',
|
||
hostingSubtitle: 'Tus eventos — confirmaciones, actualizaciones y edición rápida',
|
||
list: 'Lista',
|
||
noEventsMatchFilters: 'Ningún evento coincide con tus filtros. Prueba a ajustarlos o borrarlos.',
|
||
noPast: 'No hay eventos pasados',
|
||
noPastBody: 'No se han encontrado eventos de skate pasados con tus filtros actuales.',
|
||
noTours: 'No se han encontrado tours',
|
||
noToursBody: 'Aún no hay tours de skate. ¡Crea el primero y lleva a los skaters a descubrir spots!',
|
||
noToursMatchFilters: 'Ningún tour coincide con tus filtros. Prueba a ajustarlos o borrarlos.',
|
||
noUpcoming: 'No hay eventos próximos',
|
||
noUpcomingBody: 'No se han encontrado eventos de skate próximos. ¡Sé el primero en crear uno!',
|
||
past: 'Pasados',
|
||
resultsCount: '{{count}} resultados',
|
||
searchCity: 'Ciudad…',
|
||
searchEvent: 'Nombre del evento…',
|
||
searchTour: 'Nombre del tour…',
|
||
tours: 'Tours',
|
||
toursSubtitle: 'Guías locales, road trips y competiciones de destrucción mundial',
|
||
upcoming: 'Próximos',
|
||
},
|
||
eventTypes: {
|
||
contest: 'Concurso',
|
||
demo: 'Demo',
|
||
jam: 'Jam',
|
||
meetup: 'Quedada',
|
||
premiere: 'Estreno',
|
||
session: 'Sesión',
|
||
workshop: 'Taller',
|
||
},
|
||
featured: {
|
||
active: 'Activo',
|
||
bodyEvent: 'Publicar es gratis. Los eventos destacados reciben una insignia y aparecen arriba del todo en la página de eventos.',
|
||
bodyTour: 'Publicar es gratis. Los tours destacados reciben una insignia y aparecen arriba del todo en la lista de tours.',
|
||
contextEvent: 'Tu evento se publica gratis de todas formas — destacarlo solo añade la insignia y el impulso.',
|
||
contextTour: 'Tu tour se publica gratis de todas formas — destacarlo solo añade la insignia y el impulso.',
|
||
daysRemaining: 'Destacado activo · {{count}} días restantes.',
|
||
headingEvent: 'Destacar este evento',
|
||
headingTour: 'Destacar este tour',
|
||
optional: 'opcional',
|
||
platformOwner: 'Propietario de la plataforma — el destacado está siempre activo.',
|
||
},
|
||
filters: {
|
||
activeCount: '{{count}} activos',
|
||
all: 'Todos',
|
||
allLevels: 'Todos los niveles',
|
||
eventType: 'Tipo de evento',
|
||
following: 'Siguiendo',
|
||
newest: 'Más recientes',
|
||
popular: 'Populares',
|
||
showResults: 'Ver resultados',
|
||
showResultsActive: 'Ver resultados · {{count}} activos',
|
||
skillLevel: 'Nivel',
|
||
sortBy: 'Ordenar por',
|
||
topRated: 'Mejor valorados',
|
||
tourCategory: 'Categoría de tour',
|
||
trusted: 'De confianza',
|
||
trustLevel: 'Nivel de confianza',
|
||
verified: 'Verificados',
|
||
},
|
||
food: {
|
||
bar: 'Bar',
|
||
cafe: 'Café',
|
||
call: 'Llamar',
|
||
chooseSpot: 'Elige un spot...',
|
||
directions: 'Cómo llegar',
|
||
fastFood: 'Comida rápida',
|
||
foodCourt: 'Zona de restauración',
|
||
locationLabel: 'Ubicación:',
|
||
noneFound: 'No se han encontrado sitios de comida',
|
||
noneFoundDesc: 'No hemos encontrado restaurantes ni cafeterías a menos de 1 km de este spot. Prueba a seleccionar otra ubicación.',
|
||
placesFound: '{{count}} sitios encontrados a menos de 1 km de {{spot}}',
|
||
pub: 'Pub',
|
||
restaurant: 'Restaurante',
|
||
selectSpot: 'Selecciona un spot de skate',
|
||
selectSpotDesc: 'Elige un spot de skate en el desplegable de arriba para encontrar restaurantes, cafeterías y otras opciones de comida cercanas.',
|
||
selectSpotTitle: 'Selecciona un spot de skate',
|
||
subtitle: 'Encuentra dónde comer cerca de tus spots de skate favoritos',
|
||
title: 'Comida cerca de spots',
|
||
unknown: 'Desconocida',
|
||
website: 'Sitio web',
|
||
},
|
||
rsvp: {
|
||
areYouGoing: '¿Vas a ir?',
|
||
cant: 'No puedo',
|
||
cantMakeIt: 'No puedo ir',
|
||
going: 'Voy',
|
||
goingCount: 'van',
|
||
goingShort: 'Voy',
|
||
hostNote: 'Tú organizas esto — pero aun así puedes poner tu estado.',
|
||
interested: 'Me interesa',
|
||
interestedCount: 'interesados',
|
||
loginToRsvp: 'Inicia sesión para confirmar.',
|
||
maybe: 'Quizá',
|
||
toastError: 'No se pudo confirmar',
|
||
toastGoing: '¡Vas! 🛹',
|
||
toastInterested: 'Marcado como interesado.',
|
||
toastNotGoing: 'Marcado como que no vas.',
|
||
tryAgain: 'Inténtalo de nuevo.',
|
||
},
|
||
shop: {
|
||
addNip05Settings: 'Añadir NIP-05 en Ajustes',
|
||
adminRemovedReason: 'Un administrador de SkateSpots retiró la tienda "{{name}}"',
|
||
areYouOwner: '¿Eres el dueño de la tienda?',
|
||
backToMap: 'Volver al mapa',
|
||
claimDesc: 'Si eres dueño o gestionas esta tienda, puedes reclamarla para verificar la propiedad con NIP-05.',
|
||
claimNip05Intro: 'Para reclamar esta tienda, añade un identificador NIP-05 que coincida con el dominio del sitio web de la tienda. Por ejemplo, si el sitio web de la tienda es',
|
||
claimNip05Your: 'tu NIP-05 debería ser',
|
||
contactShop: 'Contactar con la tienda',
|
||
deleted: 'Tienda eliminada',
|
||
deletedDesc: 'Solicitud de eliminación enviada a los relays. La mayoría eliminará este contenido.',
|
||
deleteDialogDesc: 'Esto eliminará permanentemente "{{name}}" de todos los relays. Esta acción no se puede deshacer.',
|
||
deleteDialogTitle: '¿Eliminar tienda?',
|
||
deletedReason: 'Tienda eliminada',
|
||
deleteFailed: 'Error al eliminar',
|
||
deleteShop: 'Eliminar tienda',
|
||
linkCopied: '¡Enlace copiado!',
|
||
linkCopiedDesc: 'Enlace de la tienda copiado al portapapeles.',
|
||
nip05Required: '⚠️ Se requiere verificación NIP-05 para reclamar tiendas',
|
||
opens: 'Abre: {{domain}}',
|
||
removeAdmin: 'Retirar (admin)',
|
||
removed: 'Tienda retirada',
|
||
removedDesc: 'Esta tienda se ha retirado y se ocultará en todo SkateSpots.',
|
||
removeDialogDesc: 'Como administrador de SkateSpots estás retirando "{{name}}". Se ocultará en toda la app para todos y se enviará una solicitud de eliminación a los relays.',
|
||
removeDialogTitle: '¿Retirar esta tienda? (admin)',
|
||
removeShop: 'Retirar tienda',
|
||
tipMapper: 'Invita al mapeador',
|
||
tipMapperDesc: 'Esta tienda la añadió un miembro de la comunidad. ¡Envíale un zap para darle las gracias!',
|
||
updateNip05: 'Actualizar NIP-05 para reclamar',
|
||
viewPhotoFull: 'Ver foto a pantalla completa',
|
||
viewPhotoOf: 'Ver foto {{index}} de {{total}}',
|
||
},
|
||
sponsors: {
|
||
presentedBy: 'Presentado por',
|
||
},
|
||
tourCard: {
|
||
active: 'Activo',
|
||
completed: 'Completado',
|
||
contactForPrice: 'Consulta el precio',
|
||
durationDays: '{{count}} días',
|
||
durationHours: '{{count}} horas',
|
||
durationMonths: '{{count}} meses',
|
||
durationWeeks: '{{count}} semanas',
|
||
entry: 'Entrada: {{amount}} sats',
|
||
happeningNow: 'Sucediendo ahora',
|
||
inDays: 'En {{count}} días',
|
||
inHours: 'En {{count}}h',
|
||
inMonths: 'En {{count}} meses',
|
||
inWeeks: 'En {{count}} semanas',
|
||
maxGroup: 'Máx. {{count}}',
|
||
price: '{{amount}} sats',
|
||
prizePool: '{{amount}} sats',
|
||
registrationOpen: 'Inscripción abierta',
|
||
startingSoon: 'Empieza pronto',
|
||
teamsMax: '{{count}} equipos máx.',
|
||
tomorrow: 'Mañana',
|
||
worldwide: 'Todo el mundo',
|
||
},
|
||
tourDetail: {
|
||
about: 'Sobre este tour',
|
||
availability: 'Disponibilidad',
|
||
competitionWindow: 'Ventana de competición',
|
||
contactToBook: 'Contacta con el guía para reservar',
|
||
discountAt: '{{percent}}% DE DESCUENTO en {{shop}}',
|
||
duration: 'Duración',
|
||
languages: 'Idiomas',
|
||
loginToBook: 'Inicia sesión para reservar',
|
||
loginToBookDesc: 'Inicia sesión para contactar con el guía y reservar este tour',
|
||
maxGroup: 'Grupo máximo',
|
||
meetingPoint: 'Punto de encuentro',
|
||
notFound: 'Tour no encontrado',
|
||
notFoundDesc: 'Puede que este tour se haya eliminado o no exista.',
|
||
organizer: 'Organizador',
|
||
partnerDiscount: 'Descuento en tienda asociada',
|
||
partnerDiscountDesc: 'Reserva este tour para recibir un descuento en la tienda de skate asociada. Muestra tu confirmación de reserva al personal de la tienda.',
|
||
people: '{{count}} personas',
|
||
perPerson: 'por persona',
|
||
price: 'Precio',
|
||
runsAbout: 'Dura unos {{duration}}',
|
||
scheduledSession: 'Sesión programada',
|
||
shareText: 'Mira este tour de skate local: {{title}}',
|
||
skillLevel: 'Nivel',
|
||
spotTypes: 'Tipos de spots',
|
||
tourGuide: 'Guía del tour',
|
||
tourSponsors: 'Patrocinadores del tour',
|
||
tripDates: 'Fechas del viaje',
|
||
viewProfile: 'Ver perfil',
|
||
},
|
||
updates: {
|
||
admin: 'Admin',
|
||
adminNote: 'Estás publicando como administrador de SkateSpots. Se etiquetará claramente como aviso de admin, no del organizador.',
|
||
kindCancelled: 'Cancelado',
|
||
kindNewSpot: 'Nuevo spot',
|
||
kindNewTime: 'Nueva hora',
|
||
kindUpdate: 'Actualización',
|
||
loading: 'Cargando actualizaciones…',
|
||
notifiedCount: '{{count}} personas notificadas.',
|
||
notifiedEveryone: 'Todos lo verán en el evento.',
|
||
notifiesRsvps: 'Notifica a {{count}} confirmaciones',
|
||
noUpdates: 'Aún no hay actualizaciones del organizador. Confirma y te avisaremos si algo cambia.',
|
||
placeholder: 'Lluvia — trasladado al domingo a las 14:00. Nos vemos en el bordillo de atrás…',
|
||
post: 'Publicar',
|
||
postAdminUpdate: 'Publicar un aviso de admin',
|
||
posted: 'Actualización publicada',
|
||
postError: 'No se pudo publicar la actualización',
|
||
postUpdate: 'Publicar una actualización',
|
||
tryAgain: 'Inténtalo de nuevo.',
|
||
visibleToEveryone: 'Visible para todos en este evento',
|
||
},
|
||
destination: {
|
||
bitcoin: 'Bitcoin',
|
||
closeSearch: 'Cerrar búsqueda',
|
||
nothingMatches: 'Nada coincide con «{{query}}».',
|
||
placeholder: 'Busca spots, tiendas, comercios Bitcoin…',
|
||
shop: 'Tienda',
|
||
spot: 'Spot',
|
||
typeChars: 'Escribe al menos 2 caracteres. Busca spots de skate, tiendas de skate y comercios Bitcoin.',
|
||
typeCharsNear: 'Escribe al menos 2 caracteres. Busca spots de skate, tiendas de skate y comercios Bitcoin cerca de aquí.',
|
||
},
|
||
dateWindow: {
|
||
any: 'Todos',
|
||
anytime: 'Cualquier fecha',
|
||
month: 'Este mes',
|
||
monthShort: 'Mes',
|
||
today: 'Hoy',
|
||
todayShort: 'Hoy',
|
||
week: 'Esta semana',
|
||
weekend: 'Fin de semana',
|
||
weekendShort: 'Finde',
|
||
weekShort: 'Semana',
|
||
},
|
||
},
|
||
|
||
socialUi: {
|
||
agentPanel: {
|
||
spot: 'Spot',
|
||
event: 'Evento',
|
||
labPro: 'Profesional del Lab',
|
||
gear: 'Material',
|
||
crew: 'Peña',
|
||
description: 'Conoce esta peña — sus jams, plantilla y convocatoria — además de toda la escena con datos en vivo.',
|
||
greeting: "¡Buenas! Soy Sasquatch, el guía de {{crew}}. Pregúntame por la peña — nuestra próxima jam, quién la lleva, qué buscamos — o por el resto de la escena.",
|
||
suggestion1: '¿Cuál es nuestra próxima jam?',
|
||
suggestion2: '¿Quién lleva esta peña?',
|
||
suggestion3: '¿Qué estamos buscando?',
|
||
suggestion4: '¿Los mejores spots cerca?',
|
||
suggestion5: '¿Qué tiempo hace para patinar?',
|
||
thinking: 'Sasquatch está pensando…',
|
||
placeholder: 'Pregunta por tu escena local…',
|
||
disclaimer: 'La IA puede equivocarse — los enlaces llevan a anuncios reales.',
|
||
},
|
||
badge: {
|
||
upcomingOne: '{{count}} evento próximo',
|
||
upcomingMany: '{{count}} eventos próximos',
|
||
comingOne: '{{count}} evento en camino',
|
||
comingMany: '{{count}} eventos en camino',
|
||
},
|
||
bell: {
|
||
youAreIn: '¡Estás en {{crew}}! 🛹',
|
||
membershipConfirmed: 'Membresía confirmada.',
|
||
couldNotConfirm: 'No se pudo confirmar',
|
||
addedYouTo: 'te añadió a',
|
||
confirmToAppear: 'Confirma para aparecer como miembro.',
|
||
notifications: 'Notificaciones',
|
||
notificationsNew: 'Notificaciones ({{count}} nuevas)',
|
||
unreadCount: '{{count}} notificaciones sin leer',
|
||
markRead: 'Marcar leídas',
|
||
allClear: 'Todo al día',
|
||
tabAll: 'Todo',
|
||
tabTrades: 'Tratos',
|
||
tabSocial: 'Social',
|
||
tabNews: 'Noticias',
|
||
tabCrews: 'Peñas',
|
||
checkingUpdates: 'Buscando novedades…',
|
||
checkingTrades: 'Revisando ofertas y tratos…',
|
||
loadingDrops: 'Cargando las últimas entregas…',
|
||
emptyAll: 'Ofertas, tratos, zaps, respuestas, entregas del boletín y actividad de peñas aparecerán aquí.',
|
||
emptyTrades: 'Las ofertas, contraofertas y confirmaciones de tratos llegan aquí — tanto si vendes, compras o intercambias.',
|
||
emptySocial: 'Zaps, reacciones, reposts, menciones, respuestas, confirmaciones de asistencia y actualizaciones de anfitriones llegan aquí.',
|
||
emptyNews: 'Las entregas del boletín de SkateSpots llegarán aquí. Suscríbete en la página del boletín.',
|
||
emptyCrews: 'Las invitaciones a peñas, solicitudes de colectivos y peticiones de membresía aparecerán aquí.',
|
||
subscribeBanner: 'Suscríbete para recibir nuevas entregas en tu campana',
|
||
read: 'Leer',
|
||
allCaughtUp: 'Estás al día',
|
||
},
|
||
chat: {
|
||
hidden: 'Oculto',
|
||
hideMessageAria: 'Ocultar este mensaje',
|
||
hideMessageTitle: 'Ocultar mensaje (admin)',
|
||
messageHidden: 'Mensaje oculto',
|
||
messageHiddenDesc: 'Oculto del chat de la peña para todos.',
|
||
messageHideFailed: 'No se pudo ocultar el mensaje',
|
||
encryptionUnavailable: 'Cifrado no disponible',
|
||
encryptionUnavailableDesc: 'Tu firmante no admite cifrado NIP-44. Actualiza tu extensión.',
|
||
messageFailed: 'No se pudo enviar el mensaje',
|
||
couldNotSend: 'No se pudo enviar el mensaje.',
|
||
noOneToMessage: 'Aún no hay a quién escribir',
|
||
noOneToMessageDesc: 'Esta peña no tiene otros miembros con quienes chatear.',
|
||
subject: 'chat de la peña {{crew}}',
|
||
title: 'Chat de la peña',
|
||
cordnBadgeTitle: 'Enrutado por el coordinador Cordn de esta peña vía ContextVM. Cifrado de extremo a extremo.',
|
||
private: 'Privado',
|
||
privateBadgeTitle: 'Cifrado de extremo a extremo — solo los miembros de la peña pueden leer estos mensajes.',
|
||
encryptedCordn: 'Cifrado y enrutado por el coordinador de la peña (Cordn) — ningún mensaje pasa por relés públicos.',
|
||
encryptedNip17: 'Chat de grupo cifrado para el fundador y todos los miembros listados.',
|
||
moderatorNote: ' Como moderador, puedes ocultar mensajes de la peña.',
|
||
loginToSee: 'Inicia sesión para ver si puedes unirte al chat de la peña.',
|
||
membersOnly: 'Este chat es privado para los miembros de la peña. Pídele al fundador que te añada para unirte a la conversación.',
|
||
noMessages: 'Aún no hay mensajes. Arranca el chat de la peña — planea una sesión, comparte un spot, dale bombo a un clip.',
|
||
newMessages: 'Mensajes nuevos',
|
||
new: 'Nuevo',
|
||
placeholder: 'Escribe a tu peña…',
|
||
sendAria: 'Enviar mensaje',
|
||
},
|
||
collectiveJoinRequest: {
|
||
addedTitle: 'Añadido {{name}} a {{collective}} 🛹',
|
||
addedDesc: 'Confirmará desde su lado para aparecer como miembro verificado.',
|
||
couldNotAdd: 'No se pudo añadir al miembro',
|
||
couldNotDismiss: 'No se pudo descartar',
|
||
addedDone: 'Añadido',
|
||
addedTo: 'a',
|
||
dismissedDone: 'Solicitud de {{name}} descartada',
|
||
wantsToJoin: 'quiere unirse a',
|
||
alreadyOnRoster: 'Ya está en la plantilla',
|
||
openCollective: 'Abrir colectivo',
|
||
dismiss: 'Descartar',
|
||
addToCollective: 'Añadir al colectivo',
|
||
},
|
||
collectiveMembers: {
|
||
confirmed: 'Confirmado',
|
||
pending: 'Pendiente',
|
||
pendingTooltip: 'Listado por el colectivo — esperando la confirmación de este miembro.',
|
||
crewOnly: 'Solo peña',
|
||
crewOnlyTooltip: 'Este miembro eligió ser visible solo para sus compañeros de peña. Puedes verlo porque estás en la peña.',
|
||
hiddenMember: 'Miembro oculto',
|
||
title: 'Miembros',
|
||
verifiedOf: '{{confirmed}} de {{total}} verificados — cada miembro confirmado firmó con su propia clave de Nostr.',
|
||
verifiedPerMember: 'La membresía se verifica por miembro. Cada miembro confirma con su propia clave de Nostr.',
|
||
adminsOne: '{{count}} admin ayuda a llevar la peña.',
|
||
adminsMany: '{{count}} admins ayudan a llevar la peña.',
|
||
},
|
||
confirmMembership: {
|
||
public: 'Público',
|
||
crewOnly: 'Solo peña',
|
||
confirmedTitle: '¡Membresía confirmada!',
|
||
confirmedCrew: 'Estás verificado en {{name}} — visible solo para tus compañeros de peña.',
|
||
confirmedPublic: 'Ahora apareces como miembro verificado de {{name}}.',
|
||
failed: 'No se pudo confirmar',
|
||
addedTo: 'Te han añadido a {{name}}',
|
||
addedDesc: 'Confirma tu membresía para que aparezca como verificada en tu perfil y en el suyo.',
|
||
yourVisibility: 'Tu visibilidad',
|
||
confirming: 'Confirmando…',
|
||
confirmButton: 'Confirmar membresía',
|
||
},
|
||
contacts: {
|
||
message: 'Mensaje',
|
||
removePrivate: 'Quitar de contactos privados',
|
||
savePrivate: 'Guardar en contactos privados',
|
||
seoTitle: 'Contactos - SkateSpots',
|
||
seoDescription: 'Tu escena — compañeros de peña, personas que sigues y conversaciones recientes, con contactos privados cifrados.',
|
||
encryptionUnavailableDesc: 'Tu firmante no admite cifrado NIP-44.',
|
||
removed: 'Quitado de contactos privados',
|
||
saved: 'Guardado en contactos privados',
|
||
savedDesc: 'Solo tú puedes ver esta lista.',
|
||
updateFailed: 'No se pudieron actualizar los contactos',
|
||
loginTitle: 'Tu escena, en un solo sitio',
|
||
loginDesc: 'Inicia sesión para ver a tus compañeros de peña, a quien sigues y tus conversaciones recientes — y mantén una lista de contactos privada y cifrada.',
|
||
title: 'Contactos',
|
||
subtitle: 'Tu escena — compañeros de peña, seguidos y conversaciones',
|
||
filterPlaceholder: 'Filtrar por npub…',
|
||
tabCrew: 'Peña',
|
||
tabFollows: 'Seguidos',
|
||
tabDms: 'MD',
|
||
tabSaved: 'Guardados',
|
||
emptyCrewmates: 'Aún no hay compañeros de peña. Únete a una peña o crea una para construir tu red.',
|
||
emptyFollowing: 'Todavía no sigues a nadie.',
|
||
emptyDms: 'Aún no hay conversaciones. Escribe a un patinador para empezar una.',
|
||
savedHint: 'Esta lista está cifrada con tu clave — solo tú puedes leerla. Toca la estrella de cualquiera para añadirlo.',
|
||
emptySaved: 'Aún no hay contactos guardados. Marca con estrella desde cualquier pestaña para crear tu agenda privada.',
|
||
},
|
||
conversation: {
|
||
unknown: 'Desconocido',
|
||
seoTitle: 'Chat con {{name}} - SkateSpots',
|
||
seoDescription: 'Conversación privada cifrada',
|
||
sendFailed: 'No se pudo enviar el mensaje',
|
||
sendFailedDesc: 'Inténtalo de nuevo en un momento.',
|
||
tradeConfirmed: 'Trato confirmado',
|
||
tradeConfirmedDesc: 'Reputación actualizada para ambos.',
|
||
tradeConfirmFailed: 'No se pudo confirmar el trato',
|
||
somethingWrong: 'Algo salió mal.',
|
||
soldNote: 'Vendido a {{name}}.',
|
||
saleConfirmed: 'Venta confirmada',
|
||
saleConfirmedDesc: '{{name}} ya puede confirmar su parte.',
|
||
saleConfirmFailed: 'No se pudo confirmar la venta',
|
||
escrowRedeemed: 'Depósito en garantía canjeado',
|
||
escrowRedeemedDesc: 'Los fondos ya están en tu monedero Cashu.',
|
||
escrowRedeemFailed: 'No se pudo canjear el depósito',
|
||
loginTitle: 'Inicia sesión para ver los mensajes',
|
||
secureLoginTitle: 'Inicio de sesión seguro obligatorio',
|
||
secureLoginDesc: 'Los mensajes necesitan una app firmante segura.',
|
||
encrypted: 'Cifrado',
|
||
refresh: 'Actualizar',
|
||
didCompleteTrade: '¿Completaste este trato?',
|
||
recordedSale: '{{name}} registró la venta. Confirma para actualizar la reputación de ambos.',
|
||
confirm: 'Confirmar',
|
||
confirmSale: '¿Confirmar esta venta?',
|
||
askedToRecord: '{{name}} te pidió registrarla. Al confirmar se construye reputación para ambos.',
|
||
confirmSaleButton: 'Confirmar venta',
|
||
redeemEscrow: 'Canjear depósito',
|
||
escrowAppOnly: 'El depósito Cashu es solo en la app — abre SkateSpots en el móvil para canjearlo.',
|
||
startThread: 'Envía un mensaje para empezar la conversación',
|
||
placeholder: 'Escribe un mensaje...',
|
||
e2eeNote: 'Los mensajes están cifrados de extremo a extremo con NIP-17',
|
||
},
|
||
coordinator: {
|
||
secondsAgo: 'hace {{count}} s',
|
||
minutesAgo: 'hace {{count}} min',
|
||
hoursAgo: 'hace {{count}} h',
|
||
daysAgo: 'hace {{count}} d',
|
||
statusIdle: 'Sin comprobar',
|
||
statusChecking: 'Comprobando…',
|
||
statusOnline: 'Conectado',
|
||
statusStale: 'Silencioso',
|
||
statusOffline: 'No visto',
|
||
statusError: 'Inaccesible',
|
||
notACoordinator: 'Eso no es un coordinador',
|
||
notACoordinatorDesc: 'Pega un nprofile, un npub o un enlace de cordn.net.',
|
||
added: 'Coordinador añadido',
|
||
relayOne: '{{count}} relé',
|
||
relayMany: '{{count}} relés',
|
||
lastSeen: 'visto por última vez {{time}}',
|
||
onlineDesc: 'Anunciándose. Los grupos que lo usan pueden entregar mensajes ahora.',
|
||
staleDesc: 'Encontrado, pero no se ha anunciado hace poco — puede estar dormido.',
|
||
offlineDesc: 'No se ha visto ningún anuncio. Puede ser privado (no pasa nada) o simplemente estar desconectado.',
|
||
errorDesc: 'No se pudo contactar con los relés.',
|
||
idleDesc: 'Comprobando…',
|
||
checkingDesc: 'Buscando su anuncio…',
|
||
eventFoundOne: '{{count}} evento encontrado.',
|
||
eventFoundMany: '{{count}} eventos encontrados.',
|
||
check: 'Comprobar',
|
||
addLinkCopied: 'Enlace de añadir copiado',
|
||
copyFailed: 'No se pudo copiar',
|
||
copyManually: 'Cópialo manualmente.',
|
||
addLink: 'Enlace de añadir',
|
||
removeConfirm: '¿Eliminar este coordinador de este dispositivo?',
|
||
scanToJoin: 'Escanea en Cordn para unirte a este coordinador.',
|
||
noCoordinator: 'Aún no hay coordinador',
|
||
noCoordinatorDescA: 'Un coordinador entrega los mensajes de grupo',
|
||
encryptedWord: 'cifrados',
|
||
noCoordinatorDescB: 'de tu peña en orden. Ve quién, cuándo y de qué grupo — nunca el contenido. Elige uno, o monta el tuyo.',
|
||
change: 'Cambiar coordinador',
|
||
addTitle: 'Añadir un coordinador',
|
||
add: 'Añadir',
|
||
scanQR: 'Escanear un QR de coordinador',
|
||
inputPlaceholder: 'nprofile… o un enlace de cordn.net',
|
||
runOwn: 'Monta el tuyo',
|
||
runOwnDesc: 'Puede vivir en un móvil viejo, una Raspberry Pi o cualquier cacharro que dejes encendido. Tu grupo sigue funcionando mientras esté activo — y puedes mover el grupo cuando quieras.',
|
||
onPhone: 'En un móvil',
|
||
onPhoneDesc: 'Usa la app Cordn Coordinator y escanea su QR aquí para añadirlo.',
|
||
openCordn: 'Abrir Cordn',
|
||
scanItsQR: 'Escanear su QR',
|
||
onServer: 'En un servidor',
|
||
commandCopied: 'Comando copiado',
|
||
copyCommand: 'Copiar comando',
|
||
androidSleep: 'Android puede dormir un coordinador en móvil. Cuenta con mover el grupo de vez en cuando.',
|
||
privacyNote: '🔒 Un coordinador solo ve texto cifrado y metadatos — nunca el contenido de los mensajes. Monta el tuyo para que hasta los metadatos sean tuyos.',
|
||
customTitle: 'Coordinador de chat propio',
|
||
customBadge: '· experimental · tu propio relé',
|
||
customDescShort: 'Opcional: tu peña ya tiene chat cifrado de extremo a extremo integrado, así que no lo necesitas. Configúralo solo si usas tu propio',
|
||
remove: 'Quitar',
|
||
pointerNote: 'Por ahora es solo un puntero: un endpoint wss:// se usa como relé del chat de la peña y uno https:// a través del relé ContextVM compartido. El MLS real de Cordn aún no está conectado.',
|
||
cordnCoordinator: 'coordinador Cordn',
|
||
invalid: 'Eso no parece un coordinador. Pega un nprofile, un enlace de cordn.net o una URL https/wss.',
|
||
useMine: 'Usar mi coordinador',
|
||
},
|
||
createCrew: {
|
||
seoTitle: 'Crear una peña - SkateSpots',
|
||
seoDescription: 'Crea tu peña — territorio, miembros y spots.',
|
||
loginRequired: 'Inicio de sesión obligatorio',
|
||
loginRequiredDesc: 'Tienes que iniciar sesión para crear una peña.',
|
||
backToCrews: 'Volver a Peñas',
|
||
title: 'Crear una peña',
|
||
intro: 'Tu familia patinadora — la gente con la que patinas. Con un nombre ya empiezas; todo lo demás es opcional.',
|
||
},
|
||
crew: {
|
||
seoTitleNamed: '{{name}} - Peña de SkateSpots',
|
||
seoTitle: 'Peña - SkateSpots',
|
||
seoDescription: 'Una peña de skate en SkateSpots.',
|
||
postHidden: 'Publicación oculta',
|
||
postHiddenDesc: 'Eliminada del feed de la peña para todos.',
|
||
postHideFailed: 'No se pudo ocultar la publicación',
|
||
backToCrews: 'Volver a Peñas',
|
||
disband: 'Disolver',
|
||
youAreCaptain: 'Eres capitán',
|
||
member: 'Miembro',
|
||
askSasquatch: 'Pregúntale a Sasquatch',
|
||
agent: 'Agente de la peña',
|
||
agentDesc: 'El guía con IA de tu peña — spots, eventos, entrenadores y material cercanos, con datos en vivo.',
|
||
eventsTab: 'Eventos',
|
||
chatTab: 'Chat',
|
||
newMessages: 'Mensajes nuevos',
|
||
hostJam: 'Organiza una jam',
|
||
noEvents: 'Aún no hay eventos de la peña. Organiza una jam, un concurso o una quedada como peña — la conecta al calendario de eventos y permite que la gente le mande zaps.',
|
||
support: 'Apoyar',
|
||
zapCrew: 'Zapear a la peña',
|
||
bandTitle: 'Banda de la peña',
|
||
bandTagline: 'Música en directo · skate y sonido',
|
||
listenTitle: 'Escuchar: {{domain}}',
|
||
listen: 'Escucha los temas',
|
||
setUpGig: 'Organiza un concierto',
|
||
bookGigMessage: 'Hola {{crew}} — me interesa contratar a {{band}} para un concierto. ¿Te va bien hablar de fechas?',
|
||
messageAboutGig: 'Mensaje sobre un concierto',
|
||
gigHintA: 'añade al calendario un evento musical organizado por esta peña.',
|
||
messageShort: 'Mensaje',
|
||
gigHintB: 'abre un MD cifrado con la peña para cuadrar fechas y detalles.',
|
||
homeSpots: 'Spots habituales',
|
||
viewSpot: 'Ver spot',
|
||
seeOnMap: 'Ver en el mapa →',
|
||
founderLinks: 'Fundador y enlaces',
|
||
startedBy: 'Creada por {{name}}',
|
||
opens: 'Abre: {{domain}}',
|
||
},
|
||
crews: {
|
||
seoTitle: 'Peñas - SkateSpots',
|
||
seoDescription: 'Encuentra a tu gente. Descubre peñas, colectivos y comunidades de skate cerca de ti.',
|
||
videoPartTooltip: 'Esta peña tiene una part de vídeo',
|
||
part: 'Part',
|
||
bandTooltip: 'Banda de la peña: {{name}}',
|
||
band: 'Banda',
|
||
focusAll: 'Todas',
|
||
focusAllShort: 'Todas',
|
||
focusDiy: 'DIY',
|
||
focusPhoto: 'Foto',
|
||
focusCoaching: 'Entreno',
|
||
focusArt: 'Arte',
|
||
focusMusic: 'Música',
|
||
focusPhysio: 'Fisio',
|
||
focusMixed: 'Mixta',
|
||
title: 'Peñas',
|
||
heroLine: 'Tu familia patinadora anclada al mapa — la gente con la que patinas',
|
||
heroWith: 'junto',
|
||
heroRest: ', no a quien contratas (eso es The Lab).',
|
||
crewCountOne: '{{count}} peña',
|
||
crewCountMany: '{{count}} peñas',
|
||
cityCountOne: '{{count}} ciudad',
|
||
cityCountMany: '{{count}} ciudades',
|
||
createCrew: 'Crear peña',
|
||
create: 'Crear',
|
||
searchPlaceholder: 'Busca peñas por nombre o ciudad…',
|
||
filterTitle: 'Filtrar peñas',
|
||
filterDesc: 'Lo que le mola a la peña.',
|
||
nearMe: 'Cerca de mí',
|
||
emptySearchTitle: 'Ninguna peña coincide con tu búsqueda',
|
||
emptySearchHint: 'No se encontró nada para «{{query}}». Prueba con otro nombre o ciudad.',
|
||
clearSearch: 'Borrar búsqueda',
|
||
emptyFocusTitle: 'Aún no hay peñas de {{label}}',
|
||
emptyFocusHint: 'Aquí nadie ha plantado todavía la bandera «{{label}}». Muestra todas las peñas o empieza tú esta.',
|
||
showAll: 'Ver todas las peñas',
|
||
claimTitle: 'Reclama tu escena local',
|
||
claimHint: 'Aún no hay peñas plantadas aquí. Sé el primero — crea tu peña, enlaza tus spots y pon tu escena en el mapa para que la encuentre todo el mundo.',
|
||
},
|
||
crewCoordinator: {
|
||
privateChat: 'Chat privado de la peña',
|
||
on: 'Activado',
|
||
defaultA: 'La',
|
||
chatWord: 'Chat',
|
||
defaultB: 'pestaña está',
|
||
e2ee: 'cifrada de extremo a extremo',
|
||
defaultC: 'para el fundador y todos los miembros listados — sin configurar nada. Los mensajes se sellan con la clave de cada miembro (NIP-17), así que solo tu peña puede leerlos.',
|
||
advancedA: 'Avanzado: monta tu propio',
|
||
cordnCoordinator: 'coordinador Cordn',
|
||
routeThrough: 'Enrutar el chat por él',
|
||
coordinator: 'Coordinador',
|
||
deliveredOver: 'Entregado por',
|
||
sharedRelay: '— el relé ContextVM compartido.',
|
||
ownRelay: '— el relé propio de tu peña.',
|
||
chatLive: 'El chat privado está activo',
|
||
routesA: 'La',
|
||
routesB: 'pestaña va por este coordinador: los mensajes están cifrados de extremo a extremo (NIP-44, sellados para cada miembro), así que solo maneja tráfico sellado.',
|
||
publicWarning: 'Aviso: se direcciona por el relé ContextVM compartido, así que el texto cifrado y sus metadatos (qué peña y cuándo) son visibles públicamente — pero no legibles. Apunta la peña a un relé wss:// privado para mantenerlo todo privado.',
|
||
ownRelaySafe: 'Nada específico de la peña sale del relé propio de tu peña.',
|
||
manage: 'Gestionar coordinador',
|
||
open: 'Abrir {{domain}}',
|
||
runBy: 'Coordinador gestionado por',
|
||
},
|
||
dms: {
|
||
securityReminder: 'Recordatorio de seguridad',
|
||
phishingStrong: 'SkateSpots nunca te enviará un MD',
|
||
phishingRest: 'pidiéndote que verifiques tu cuenta, compartas tus claves o envíes pagos. Si alguien dice ser soporte de SkateSpots por MD — es una estafa.',
|
||
dismissReminder: 'Descartar recordatorio de seguridad',
|
||
peopleCount: '{{count}} personas',
|
||
youPrefix: 'Tú: ',
|
||
unreadMessages: 'Mensajes sin leer',
|
||
seoTitle: 'Mensajes - SkateSpots',
|
||
seoDescription: 'Mensajes privados cifrados con la comunidad skater',
|
||
loginTitle: 'Inicia sesión para acceder a los mensajes',
|
||
loginDesc: 'Mensajería privada y cifrada con patinadores de la comunidad',
|
||
secureLoginTitle: 'Inicio de sesión seguro obligatorio',
|
||
secureLoginDesc: 'Los mensajes privados necesitan una app firmante segura para cifrar tus conversaciones.',
|
||
onAndroid: 'En Android:',
|
||
useAmber: 'Usa la app Amber',
|
||
getAmber: 'Consigue Amber →',
|
||
onIOS: 'En iOS:',
|
||
iosHint: 'Prueba a iniciar sesión con una conexión bunker (nsec.app) desde Ajustes',
|
||
browserHint: 'Prueba a iniciar sesión con una extensión de navegador como Alby o nos2x que admita cifrado.',
|
||
title: 'Mensajes',
|
||
subtitleFull: 'Cifrado de extremo a extremo con NIP-17',
|
||
subtitleShort: 'Cifrado',
|
||
newMessage: 'Nuevo mensaje',
|
||
groups: 'Grupos',
|
||
loadFailed: 'No se pudieron cargar los mensajes',
|
||
emptyTitle: 'Aún no hay mensajes',
|
||
emptyDesc: 'Empieza una conversación con alguien de la comunidad',
|
||
startConversation: 'Empezar una conversación',
|
||
undecryptableOne: '{{count}} mensaje cifrado no se pudo abrir con tu firmante.',
|
||
undecryptableMany: '{{count}} mensajes cifrados no se pudieron abrir con tu firmante.',
|
||
},
|
||
editCrew: {
|
||
seoTitleNamed: 'Editar {{name}} - SkateSpots',
|
||
seoTitle: 'Editar peña - SkateSpots',
|
||
seoDescription: 'Edita tu peña de skate.',
|
||
loginRequired: 'Inicio de sesión obligatorio',
|
||
notYours: 'No es tu peña',
|
||
notYoursDesc: 'Solo el fundador de la peña puede editarla.',
|
||
backToCrew: 'Volver a la peña',
|
||
title: 'Editar peña',
|
||
},
|
||
form: {
|
||
add: 'Añadir',
|
||
added: 'Añadido',
|
||
addNameInBasicsA: 'Añade un nombre de peña de nuevo en',
|
||
addNameInBasicsB: 'para terminar.',
|
||
adminsDescA: 'Haz',
|
||
adminsWord: 'admins',
|
||
adminsDescB: 'a los miembros de confianza — pueden invitar a miembros y moderar el feed y el chat de la peña con sus propias claves. Tú (el fundador) siempre eres el dueño de la identidad de la peña.',
|
||
agentDescA: 'Añade',
|
||
agentDescB: ', un guía con IA que de verdad conoce tu peña. Los miembros pueden preguntar por',
|
||
agentDescC: '— además de spots, eventos, entrenadores y material cercanos con datos en vivo de SkateSpots. Funciona en el navegador; sin claves ni configuración. Es pronto (IA gratuita, así que a veces va lento).',
|
||
agentDescStrong: 'vuestra próxima jam, quién lleva la peña, qué buscáis y vuestro rollo',
|
||
agentEnabledNote: 'Sasquatch aparecerá en la página de tu peña cuando guardes.',
|
||
bandDesc: '¿Tienes banda? La escena del skate y la música local van de la mano — pon el nombre de tu banda y un enlace a los temas.',
|
||
bandFooterA: 'Para un perfil de banda completo (géneros, instrumentos, conciertos), crea un',
|
||
musicianWord: 'Músico',
|
||
bandFooterB: 'en The Lab y luego enlázalo en la sección',
|
||
linkedLabWord: 'Perfiles del Lab vinculados',
|
||
bandFooterC: 'de arriba.',
|
||
bandMusicWord: 'Banda y música',
|
||
bandName: 'Nombre de la banda',
|
||
bandNamePlaceholder: 'p. ej. The Bail Outs',
|
||
bandNudgeA: 'Tienes banda — toca para poner tu',
|
||
crewTypeWord: 'Tipo de peña',
|
||
bandNudgeB: 'en',
|
||
bandNudgeC: 'y aparecer también en la escena de Música de The Lab.',
|
||
beta: 'Beta',
|
||
bioLabel: 'Sobre la peña / Manifiesto',
|
||
bioPlaceholder: 'Quiénes sois, qué patináis, vuestra historia...',
|
||
continue: 'Continuar',
|
||
crewCreated: '¡Peña creada!',
|
||
crewUpdated: '¡Peña actualizada!',
|
||
crewName: 'Nombre de la peña',
|
||
crewOnlyWord: 'Solo peña',
|
||
crewType: 'Tipo de peña',
|
||
crewTypeDescA: '¿Tu peña se centra en un oficio? Elige uno para aparecer también en esa escena en',
|
||
theLab: 'The Lab',
|
||
crewTypeDescB: '. Las peñas normales se quedan en',
|
||
mixedWord: 'Mixta',
|
||
crewTypeDescC: '.',
|
||
customVibeHint: 'Añade tu propio rollo o enfoque con un #',
|
||
customVibePlaceholder: 'p. ej. downhill, night-sessions, no-comply',
|
||
editDesc: 'La identidad de tu peña, su territorio y sus miembros',
|
||
enableAgent: 'Activar el agente de la peña',
|
||
enableTreasury: 'Activar la tesorería de la peña',
|
||
failed: 'Falló',
|
||
founded: 'Fundada (año)',
|
||
geolocationUnsupported: 'Geolocalización no compatible',
|
||
gettingLocation: 'Obteniendo...',
|
||
goalHint: 'Asegúrate de que tu perfil de Nostr tiene una dirección Lightning (lud16) para que lleguen las contribuciones.',
|
||
goalPlaceholder: 'p. ej. Hormigonar el spot DIY',
|
||
goalTarget: 'Objetivo (sats)',
|
||
goalWhat: '¿Cuál es el objetivo?',
|
||
homeSpots: 'Spots habituales',
|
||
homeSpotsDesc: 'Enlaza los spots que frecuenta tu peña — se conectan a tu peña en el mapa',
|
||
homeTurf: 'Territorio (ciudad / zona)',
|
||
homeTurfPlaceholder: 'Bristol, Reino Unido',
|
||
instagramDetected: 'Clip de Instagram detectado',
|
||
invalidMember: 'Introduce un npub, nprofile o pubkey hex válido.',
|
||
latitude: 'Latitud',
|
||
leaveBlankLocation: 'Déjalo en blanco para mantener la ubicación actual del territorio.',
|
||
links: 'Enlaces',
|
||
locationError: 'Error de ubicación',
|
||
locationFound: 'Ubicación encontrada',
|
||
logoAlt: 'Peña',
|
||
logoHint: 'Un logo hace que tu peña se reconozca al instante en el mapa y en los feeds. El cuadrado funciona mejor.',
|
||
logoLabel: 'Logo / foto de la peña',
|
||
logoUploaded: 'Logo subido',
|
||
longitude: 'Longitud',
|
||
looksGood: 'Buena pinta',
|
||
makeAdmin: 'Hacer admin',
|
||
mapPin: 'Punto en el mapa',
|
||
mapPinHint: 'Pon tu peña en el mapa para que los locales os encuentren. Toca el botón — sin escribir nada.',
|
||
memberAlreadyAdded: 'Ese miembro ya está añadido.',
|
||
members: 'Miembros',
|
||
membersDesc: 'Añade las cuentas de Nostr de tu peña. Cada miembro confirma desde su propia clave — hasta entonces aparecen como «pendientes».',
|
||
musicLink: 'Enlace a la música',
|
||
nameCrew: 'Ponle nombre a tu peña',
|
||
nameCrewDesc: 'Una peña necesita un nombre antes de continuar.',
|
||
nameCrewFirst: 'Ponle nombre a tu peña primero',
|
||
nameHint: 'Lo único que de verdad necesitas. Puedes cambiarlo luego.',
|
||
namePlaceholder: 'p. ej. Backyard Bandits',
|
||
nameRequired: 'Nombre obligatorio',
|
||
nameRequiredDesc: 'Ponle un nombre a tu peña.',
|
||
nip05DescA: 'Un identificador verificable que controlas en cualquier dominio, p. ej.',
|
||
nip05DescB: '. Se verifica contra la clave del fundador de la peña y puedes añadir varios: cada uno muestra un check verde cuando su dominio lo confirma.',
|
||
nip05Label: 'NIP-05 de la peña',
|
||
nip05Placeholder: 'peña@tudominio.com',
|
||
nip05Add: 'Añadir',
|
||
nip05Invalid: 'Introduce un identificador como peña@tudominio.com',
|
||
nip05TooMany: 'Puedes añadir hasta {{count}} identificadores.',
|
||
nip05Unverified: 'Sin verificar',
|
||
nip05Remove: 'Quitar {{handle}}',
|
||
notAKeyA: 'Eso todavía no parece una clave de Nostr — pega un',
|
||
notAKeyB: ',',
|
||
notAKeyC: ', o una pubkey hex.',
|
||
onlyYouTubeInstagram: 'Solo se admiten enlaces de YouTube e Instagram.',
|
||
openCall: 'Convocatoria abierta',
|
||
openCallDescA: '¿Buscas un filmer, editor o sangre nueva? Lanza una convocatoria — aparece en tu página de peña para que gente afín de',
|
||
openCallDescB: 'pueda contactar.',
|
||
optional: '· opcional',
|
||
optionalParen: '(opcional)',
|
||
otherSocials: 'Otras redes',
|
||
otherSocialsDesc: 'Añade todas las que quieras — YouTube, TikTok, Discord, Telegram, etc.',
|
||
ownVisibility: 'su propia visibilidad',
|
||
progress: 'Progreso',
|
||
publicWord: 'Público',
|
||
publishedToScene: 'Publicada en la escena.',
|
||
publishFailed: 'No se pudo publicar',
|
||
publishing: 'Publicando...',
|
||
ready: 'Listo',
|
||
readyToRollA: 'Todo listo — pulsa',
|
||
readyToRollB: 'cuando quieras.',
|
||
removeAdminRole: 'Quitar rol de admin',
|
||
removeMember: 'Quitar miembro',
|
||
removeSocial: 'Quitar enlace social',
|
||
removeVibe: 'Quitar {{vibe}}',
|
||
roles: 'Roles:',
|
||
sasquatch: 'Sasquatch',
|
||
saveCrew: 'Guardar peña',
|
||
skipToEnd: 'Saltar al final',
|
||
socialPlaceholder: '@usuario o enlace',
|
||
sponsorDesc: 'Si una tienda local respalda tu peña, elígela aquí para mostrar un banner «Patrocinado por» que enlaza a su tienda.',
|
||
stepAria: 'Paso {{step}}: {{title}}',
|
||
stepBasics: 'Lo básico',
|
||
stepBasicsShort: 'Básico',
|
||
stepBasicsHint: 'Solo lo esencial — puedes crear una peña con este paso únicamente.',
|
||
stepVibe: 'Identidad y rollo',
|
||
stepVibeShort: 'Rollo',
|
||
stepVibeHint: 'Cómo aparece tu peña por la app. Todo opcional.',
|
||
stepSquad: 'Peña y spots',
|
||
stepSquadShort: 'Peña',
|
||
stepSquadHint: 'Añade a tu gente y tu territorio. Siempre puedes hacerlo más tarde.',
|
||
stepExtras: 'Extras',
|
||
stepExtrasShort: 'Extras',
|
||
stepExtrasHint: 'Mejoras para más adelante — sáltate lo que no tengas claro.',
|
||
extrasAllOptional: 'Todo en este paso es opcional.',
|
||
groupIdentity: 'Identidad',
|
||
groupIdentityHint: 'Identificador, enlaces',
|
||
groupAi: 'IA Sasquatch',
|
||
groupShowcase: 'Escaparate',
|
||
groupPayments: 'Pagos y tesorería',
|
||
groupIntegrations: 'Integraciones',
|
||
groupAdvanced: 'Avanzado',
|
||
groupAdvancedHint: 'experimental',
|
||
pro: 'Pro',
|
||
agentProNote: 'Con la tecnología de Sasquatch. Pro usa los mejores modelos; sin Pro usa un respaldo gratuito.',
|
||
stepOf: 'Paso {{step}} de {{total}}',
|
||
treasuryDescA: 'Recauda sats para un objetivo común — arreglar el spot DIY local, un viaje de la peña, un bote para un concurso. Es un objetivo Lightning transparente; los zaps van',
|
||
treasuryDescStrong: 'directos a tu monedero',
|
||
treasuryDescB: '(a través de la dirección Lightning de tu perfil). SkateSpots nunca custodia los fondos.',
|
||
upload: 'Subir',
|
||
uploadFailed: 'Error al subir',
|
||
useCurrentLocation: 'Usar ubicación actual',
|
||
vibeLabel: 'Rollo / enfoque',
|
||
videoDescA: 'La part completa de tu peña, un montaje o el último clip. Pega un enlace de',
|
||
videoDescB: '— se reproducirá en tu página de peña.',
|
||
visibilityDescA: 'Cada miembro controla',
|
||
visibilityDescB: '— cuando confirma desde su clave puede elegir',
|
||
visibilityDescC: '— oculto para los de fuera). Tú no puedes decidirlo por ellos; es su elección.',
|
||
website: 'Sitio web',
|
||
yourRoles: 'Tus roles (líder del equipo)',
|
||
youtubeDetected: 'Vídeo de YouTube detectado',
|
||
invalidUrl: 'Introduce un enlace válido (p. ej. https://ejemplo.com).',
|
||
},
|
||
groupConversation: {
|
||
seoTitle: 'Chat de grupo - SkateSpots',
|
||
invalidLink: 'Este enlace de chat de grupo no es válido.',
|
||
loginTitle: 'Inicia sesión para ver este grupo',
|
||
secureSignerTitle: 'Firmante seguro obligatorio',
|
||
secureSignerDesc: 'Los mensajes de grupo necesitan un firmante compatible con NIP-44.',
|
||
encryptedGroup: 'Grupo cifrado de extremo a extremo',
|
||
empty: 'Aún no hay mensajes — saluda al grupo.',
|
||
placeholder: 'Escribe al grupo...',
|
||
},
|
||
hero: {
|
||
established: 'Fundada en {{year}}',
|
||
teamLeader: 'Líder del equipo: {{name}}',
|
||
ledBy: 'Liderada por',
|
||
},
|
||
inviteCard: {
|
||
acceptedTitle: 'Invitación aceptada 🛹',
|
||
acceptedDesc: 'El fundador de la peña confirma a los miembros en {{crew}}. Aparecerás en la plantilla cuando te apruebe.',
|
||
couldNotAccept: 'No se pudo aceptar',
|
||
couldNotDecline: 'No se pudo rechazar',
|
||
acceptedDone: 'Aceptada —',
|
||
confirmsMembers: 'confirma a los miembros',
|
||
declinedDone: 'Invitación a {{crew}} rechazada',
|
||
invitedYou: 'te ha invitado a unirte a',
|
||
admin: 'Admin',
|
||
accept: 'Aceptar',
|
||
decline: 'Rechazar',
|
||
},
|
||
inviteDialog: {
|
||
messageIntro: '¡Eh! Únete a la peña {{crew}} en SkateSpots 🛹',
|
||
messageBody: 'Inicia sesión con tu clave de Nostr y luego solicita unirte desde la página de la peña.',
|
||
copyFailed: 'No se pudo copiar',
|
||
shareTitle: 'Unirse a {{crew}}',
|
||
sentTitle: '¡Invitación enviada! 🛹',
|
||
sentDesc: 'Recibirá una notificación para aceptar o rechazar.',
|
||
couldNotSend: 'No se pudo enviar la invitación',
|
||
trigger: 'Invitar',
|
||
title: 'Invitar a {{crew}}',
|
||
description: 'Envía una invitación a la clave de Nostr de alguien, o comparte un enlace.',
|
||
sendTab: 'Enviar invitación',
|
||
shareTab: 'Compartir enlace',
|
||
npubLabel: 'npub del patinador',
|
||
invalidNpub: 'Eso no parece un npub válido.',
|
||
noteLabel: 'Nota',
|
||
optional: '(opcional)',
|
||
notePlaceholder: 'Ven a patinar con nosotros…',
|
||
inviteAsAdmin: 'Invitar como admin',
|
||
inviteAsAdminDesc: 'Puede gestionar la peña e invitar a otros.',
|
||
sendButton: 'Enviar invitación',
|
||
sendFooter: 'Recibirá una notificación para aceptar o rechazar. La membresía solo cuenta cuando acepta.',
|
||
inviteLink: 'Enlace de invitación',
|
||
messageLabel: 'Mensaje',
|
||
copyMessage: 'Copiar mensaje',
|
||
founderHint: 'Como fundador también puedes añadir la clave de un miembro directamente; luego él confirma.',
|
||
addMemberSettings: 'Añadir miembro en los ajustes de la peña',
|
||
},
|
||
joinRequest: {
|
||
moreCount: '+{{count}} más',
|
||
addedTitle: 'Añadido {{name}} a {{crew}} 🛹',
|
||
addedDesc: 'Confirmará desde su lado para aparecer como miembro.',
|
||
vouchedTitle: 'Has avalado a {{name}} 🤝',
|
||
vouchedDesc: 'El fundador de {{crew}} verá tu aval y podrá añadirlo.',
|
||
couldNotEndorse: 'No se pudo avalar',
|
||
endorsedDoneA: 'Has avalado a',
|
||
endorsedDoneB: '— el fundador confirmará',
|
||
vouchedBy: 'Avalado por',
|
||
approveAndAdd: 'Aprobar y añadir',
|
||
addToCrew: 'Añadir a la peña',
|
||
vouchedWaiting: 'Avalado — esperando al fundador',
|
||
vouchForThem: 'Avalar a esta persona',
|
||
leadershipOnly: 'Solo para el liderazgo de la peña.',
|
||
adminHelp: 'Los admins no pueden añadir miembros directamente — avalar le dice al fundador que respaldas a este patinador.',
|
||
},
|
||
leadership: {
|
||
teamLeader: 'Líder del equipo',
|
||
captain: 'Capitán',
|
||
verifiedMember: 'Miembro verificado',
|
||
messageName: 'Escribir a {{name}}',
|
||
title: 'Liderazgo',
|
||
captainsOne: '{{count}} capitán',
|
||
captainsMany: '{{count}} capitanes',
|
||
footer: 'El líder del equipo lleva la plantilla; los capitanes ayudan a invitar, organizar jams y mantener la peña en orden.',
|
||
},
|
||
linkField: {
|
||
title: 'Peña vinculada',
|
||
description: '¿También llevas una peña? Enlázala para que la gente salte entre tu estudio y tu peña. Opcional. Enlaza esta peña de vuelta al perfil desde el editor y aparecerá una insignia verde',
|
||
descriptionRest: 'en ambos.',
|
||
none: 'Aún no tienes peñas. Crea una en la página de Peñas para enlazarla aquí.',
|
||
linkedCrew: 'Peña vinculada ({{id}})',
|
||
},
|
||
lookingFor: {
|
||
title: 'Convocatoria abierta',
|
||
subtitle: 'Esta peña busca:',
|
||
},
|
||
memberVisibility: {
|
||
updatedTitle: 'Visibilidad actualizada',
|
||
updatedCrew: 'Ahora solo apareces ante tus compañeros de peña.',
|
||
updatedPublic: 'Ahora apareces públicamente en esta peña.',
|
||
couldNotUpdate: 'No se pudo actualizar',
|
||
title: 'Tu visibilidad en esta peña',
|
||
save: 'Guardar visibilidad',
|
||
},
|
||
newMessage: {
|
||
inCrew: 'En tu peña: {{crews}}',
|
||
crewmate: 'Compañero de peña',
|
||
following: 'Siguiendo',
|
||
invalidKey: 'Eso no parece un npub o una clave pública válidos.',
|
||
description: 'Busca a tu gente por nombre o pega un npub para escribir a cualquiera. Selecciona dos o más para empezar un grupo.',
|
||
searchPlaceholder: 'Busca un nombre o pega npub1...',
|
||
messageThisKey: 'Escribir a esta clave',
|
||
loadingPeople: 'Cargando tu gente...',
|
||
noPeople: 'Aún no hay compañeros de peña ni seguidos.',
|
||
noPeopleHint: 'Pega el npub de alguien arriba para empezar una conversación.',
|
||
yourCrews: 'Tus peñas',
|
||
selected: '{{count}} seleccionados',
|
||
startGroup: 'Iniciar grupo ({{count}})',
|
||
message: 'Mensaje',
|
||
},
|
||
nip05: {
|
||
mismatch: 'Este dominio apunta el identificador a una clave de Nostr distinta a la del fundador de la peña. Sin verificar.',
|
||
verified: 'Verificado — el dominio confirma que este identificador pertenece a la clave del fundador de la peña.',
|
||
},
|
||
requestCollective: {
|
||
sentTitle: 'Solicitud enviada 🤝',
|
||
sentDesc: '{{name}} la verá en sus notificaciones y podrá añadirte.',
|
||
couldNotSend: 'No se pudo enviar la solicitud',
|
||
title: 'Únete a este colectivo',
|
||
waiting: 'Solicitud enviada — esperando a {{name}}.',
|
||
askA: 'Pídele a la peña detrás de',
|
||
askB: 'que te añada a la plantilla. Recibirá una notificación y podrá añadirte con un toque.',
|
||
placeholder: 'Opcional: di por qué encajarías bien…',
|
||
sendButton: 'Enviar solicitud',
|
||
},
|
||
requestToJoin: {
|
||
sentTitle: '¡Solicitud enviada! 🛹',
|
||
sentDesc: 'El liderazgo de {{crew}} la verá en sus notificaciones.',
|
||
couldNotSend: 'No se pudo enviar la solicitud',
|
||
trigger: 'Solicitar unirse',
|
||
title: 'Unirse a {{crew}}',
|
||
description: 'Notifica al fundador y a los admins de la peña para que puedan añadirte.',
|
||
placeholder: 'Saluda — dónde patinas, a quién conoces, por qué quieres entrar…',
|
||
sending: 'Enviando…',
|
||
sendButton: 'Enviar solicitud',
|
||
},
|
||
sponsorBanner: {
|
||
loading: 'Cargando patrocinador…',
|
||
sponsoredBy: 'Patrocinado por',
|
||
},
|
||
sponsorPicker: {
|
||
selected: 'Patrocinador seleccionado',
|
||
setLoading: 'Patrocinador establecido (cargando tienda…)',
|
||
set: 'Patrocinador establecido',
|
||
clearAria: 'Quitar patrocinador',
|
||
searchPlaceholder: 'Busca tiendas de skate por nombre o ciudad…',
|
||
loading: 'Cargando tiendas…',
|
||
noMatch: 'Ninguna tienda coincide — prueba otra búsqueda.',
|
||
none: 'Aún no se han encontrado tiendas.',
|
||
},
|
||
treasury: {
|
||
title: 'Tesorería de la peña',
|
||
ofGoal: 'de un objetivo de {{target}}',
|
||
goalReached: '¡Objetivo alcanzado!',
|
||
funded: '{{percent}}% financiado',
|
||
contributionOne: '{{count}} contribución',
|
||
contributionMany: '{{count}} contribuciones',
|
||
daysLeft: '{{days}} d restantes',
|
||
closed: 'cerrada',
|
||
nonCustodial: 'No custodial · los zaps van directos al monedero Lightning de la peña',
|
||
},
|
||
userStatus: {
|
||
atSpot: '📍 En un spot',
|
||
autoClears: '⏱️ Se borra en {{min}} min',
|
||
},
|
||
video: {
|
||
title: 'La Part',
|
||
fullVideo: 'Vídeo completo · montaje',
|
||
latestClip: 'Último clip',
|
||
watch: 'Ver',
|
||
iframeTitle: '{{crew}} — vídeo',
|
||
playAria: 'Reproducir el vídeo de {{crew}}',
|
||
thumbAlt: 'Miniatura del vídeo de {{crew}}',
|
||
instagramTitle: 'Clip de Instagram',
|
||
},
|
||
vouch: {
|
||
removedTitle: 'Aval retirado',
|
||
vouchedTitle: '¡Avalado!',
|
||
removedDesc: 'Ya no avalas a {{name}}.',
|
||
vouchedDesc: 'Has avalado a {{name}}. La escena confía en los suyos.',
|
||
couldNotVouch: 'No se pudo avalar',
|
||
title: 'Avales de la escena',
|
||
sceneVerified: 'Verificado por la escena',
|
||
vouched: 'Avalado',
|
||
newUnvouched: 'Nuevo · sin avales',
|
||
checking: 'Consultando la escena…',
|
||
empty: 'Aún no hay avales. Los avales de patinadores de tus círculos son la mejor señal de que alguien es de fiar — no un desconocido que pasaba por ahí.',
|
||
countOne: '{{count}} aval',
|
||
countMany: '{{count}} avales',
|
||
trusted: '{{count}} de patinadores de tu red de confianza',
|
||
remove: 'Retirar aval',
|
||
vouchFor: 'Avalar a {{name}}',
|
||
ownerNote: 'Los patinadores que conocen tu trabajo pueden avalarte aquí.',
|
||
},
|
||
},
|
||
|
||
settingsUi: {
|
||
proSupport: {
|
||
title: 'Pro y apoyo',
|
||
subtitle: 'Extras opcionales que mantienen SkateSpots gratis',
|
||
prepaidTitle: 'Pago por adelantado, no suscripción',
|
||
prepaidBody: 'Cada compra es un pago único en Bitcoin/Lightning — sin cuenta, sin cargo recurrente y sin custodia. Pagar de nuevo amplía tu tiempo.',
|
||
sasquatchTitle: 'Sasquatch Pro',
|
||
sasquatchBenefit: 'Desbloquea el asistente personal con IA — puede leer tu Stash, crews y anuncios — y ayuda a financiar el proyecto.',
|
||
active: 'Activo',
|
||
activeUntil: 'Activo hasta {{date}}',
|
||
daysLeft: 'Quedan {{count}} días',
|
||
notActive: 'No activo',
|
||
goPro: 'Hazte Pro',
|
||
extend: 'Ampliar Pro',
|
||
day: 'día',
|
||
featuredTitle: 'Posición destacada',
|
||
featuredBenefit: 'Lleva un anuncio arriba con un distintivo Pro — para perfiles del Lab, eventos, tiendas y tours.',
|
||
featuredHow: 'Los tramos de duración se aplican a cada tipo; los compromisos más largos cuestan menos por día. Destacas un anuncio al crearlo o editarlo.',
|
||
featuredUntil: 'Hasta {{date}}',
|
||
yourFeatured: 'Tus anuncios destacados',
|
||
noneFeatured: 'No hay destacados activos.',
|
||
freeTitle: 'Opciones gratis',
|
||
freeBody: 'El FAQ de IA y la búsqueda local son siempre gratis, y puedes publicar un anuncio con prueba de trabajo en vez de la tarifa en sats.',
|
||
},
|
||
notFound: {
|
||
seoTitle: '404 - Página no encontrada',
|
||
seoDescription: 'La página que buscas no se pudo encontrar. Vuelve a la página de inicio para seguir navegando.',
|
||
message: '¡Vaya! Página no encontrada',
|
||
returnHome: 'Volver al inicio',
|
||
},
|
||
loginArea: {
|
||
signUp: 'Registrarse',
|
||
logIn: 'Iniciar sesión',
|
||
},
|
||
accountSwitcher: {
|
||
switchAccount: 'Cambiar de cuenta',
|
||
walletSettings: 'Ajustes de cartera',
|
||
addAccount: 'Añadir otra cuenta',
|
||
logout: 'Cerrar sesión',
|
||
},
|
||
amberHint: {
|
||
defaultAction: 'enviar',
|
||
multiBefore: 'Tu firmador te pedirá que apruebes',
|
||
multiTimes: '{{approvals}} veces',
|
||
multiAfter: 'para {{action}} — es normal en los mensajes cifrados (una aprobación por destinatario). Aprueba cada una.',
|
||
single: 'Tu firmador te pedirá que apruebes para {{action}}.',
|
||
},
|
||
amberCallback: {
|
||
processing: 'Procesando el inicio de sesión con Amber...',
|
||
gotResult: 'Resultado recibido: {{result}}',
|
||
noResultDebug: 'Sin resultado de Amber',
|
||
noResultToast: 'No se recibió ningún resultado de Amber. Puede que se cancelara la operación.',
|
||
validPubkey: '¡Clave pública válida! Iniciando sesión...',
|
||
loginSuccessful: '¡Sesión iniciada!',
|
||
loginErrorDebug: 'Error de inicio de sesión: {{error}}',
|
||
invalidResultDebug: 'Formato de resultado no válido: {{result}}',
|
||
loggedInTitle: 'Sesión iniciada',
|
||
amberLoginDesc: '¡Has iniciado sesión con Amber!',
|
||
loginFailedTitle: 'Error al iniciar sesión',
|
||
loginFailedDesc: 'No se pudo completar el inicio de sesión con Amber. Inténtalo de nuevo.',
|
||
invalidPubkeyDesc: 'Se recibió una clave pública no válida de Amber.',
|
||
sessionLostToast: 'Se perdieron los datos de la sesión. Inténtalo de nuevo.',
|
||
eventSignedTitle: 'Evento firmado',
|
||
eventSignedDesc: 'Amber ha firmado tu evento.',
|
||
signingFailedTitle: 'Error al firmar',
|
||
signingFailedDesc: 'No se pudo procesar el evento firmado de Amber.',
|
||
operationCompleteTitle: 'Operación completada',
|
||
operationCompleteDesc: '{{op}} completado.',
|
||
},
|
||
loginDialog: {
|
||
loginWithAmber: 'Iniciar sesión con Amber (Android)',
|
||
welcomeTitle: 'Bienvenido a SkateSpots',
|
||
welcomeSubtitle: 'Regístrate o inicia sesión para continuar',
|
||
newHere: '¿Nuevo por aquí?',
|
||
createFree: 'Crea una cuenta gratis. Sin correo electrónico.',
|
||
createAccount: 'Crear cuenta',
|
||
orLogIn: 'O inicia sesión',
|
||
loggedInTitle: '🛹 ¡Sesión iniciada!',
|
||
loggedIn: '¡Sesión iniciada!',
|
||
connectedAmber: '¡Conectado con Amber!',
|
||
amberLoginFailed: 'Falló el inicio de sesión con Amber',
|
||
amberCancelled: 'Inicio de sesión cancelado. Toca "Abrir Amber" para intentarlo de nuevo.',
|
||
amberNotFound: 'Amber no encontrado. Asegúrate de tener Amber instalado desde ZapStore.',
|
||
loginFailed: 'Error al iniciar sesión',
|
||
pubkeyError: 'Pega tu clave pública en hex (64 caracteres) o npub de Amber',
|
||
pairedSigner: 'Emparejado con tu firmador.',
|
||
connectFailed: 'No se pudo conectar con tu firmador.',
|
||
openedEncrypted: 'Se abrió tu clave cifrada.',
|
||
openKeyFailed: 'No se pudo abrir esa clave.',
|
||
bunkerPrefix: 'Debe empezar por bunker://',
|
||
connectedBunker: '¡Conectado vía bunker!',
|
||
bunkerFailed: 'Falló: {{error}}',
|
||
checkBunkerUri: 'Comprueba tu URI de bunker',
|
||
nsecPrefix: 'Debe empezar por nsec1',
|
||
invalidNsec: 'nsec no válido: {{error}}',
|
||
checkKey: 'Comprueba tu clave',
|
||
noExtensionTitle: 'No se encontró ninguna extensión',
|
||
noExtensionDesc: 'Instala Alby u otra extensión NIP-07.',
|
||
amberIdleDesc: 'Tu clave se queda dentro de Amber. Un toque: apruebas en Amber y vuelves aquí con la sesión iniciada. Nada que copiar.',
|
||
continueWithAmber: 'Continuar con Amber',
|
||
noAmberGetIt: '¿No tienes Amber? Consíguelo →',
|
||
waitingAmberTitle: 'Esperando a Amber…',
|
||
waitingAmberDesc: 'Aprueba la solicitud en Amber. Se iniciará tu sesión automáticamente en cuanto vuelvas.',
|
||
openAmberAgain: 'Abrir Amber de nuevo',
|
||
havingTrouble: '¿Problemas? Introduce tu clave manualmente',
|
||
enterPublicKey: 'Introduce tu clave pública',
|
||
enterPublicKeyDescBefore: 'Solo si el flujo automático no funcionó. En Amber: toca tu perfil →',
|
||
copyPublicKey: 'Copiar clave pública',
|
||
enterPublicKeyDescAfter: 'y pégala aquí.',
|
||
connect: 'Conectar',
|
||
back: '← Atrás',
|
||
signInWithPhone: 'Inicia sesión con tu teléfono',
|
||
signInWithPhoneDesc: 'Escanea con una app firmadora (Amber, nsec.app). Tu clave nunca sale de tu teléfono.',
|
||
showPairingCode: 'Mostrar código de emparejamiento',
|
||
waitingSigner: 'Esperando a tu firmador…',
|
||
copyLink: 'Copiar enlace',
|
||
orPasteBunker: 'o pega una URL de bunker',
|
||
bunkerTitle: 'Bunker (NIP-46)',
|
||
bunkerPasteBefore: 'Pega tu URI',
|
||
bunkerPasteAfter: '.',
|
||
amberInstructions: 'Ajustes → NIP-46 Bunker → Crear → Copiar',
|
||
nsecAppInstructions: 'Conectar app → Copiar URI del bunker',
|
||
secretKeyTitle: 'Clave secreta',
|
||
secretKeyRawDesc: 'Pega tu clave secreta de Nostr directamente.',
|
||
secretKeyEncDesc: 'Abre una copia de seguridad de clave protegida con contraseña.',
|
||
rawNsec: 'nsec en claro',
|
||
encryptedNip49: 'Cifrada (NIP-49)',
|
||
nsecWarning: '⚠️ Úsalo solo en un dispositivo de confianza. Nunca compartas tu nsec.',
|
||
login: 'Iniciar sesión',
|
||
encSaferDesc: 'Más seguro: la clave permanece cifrada hasta que introduzcas tu contraseña, así que la copia es segura para guardarla en la nube o en un gestor de contraseñas.',
|
||
password: 'Contraseña',
|
||
openEncryptedKey: 'Abrir clave cifrada',
|
||
browserExtensionTitle: 'Extensión del navegador (NIP-07)',
|
||
browserExtensionDesc: 'Ideal para escritorio. Funciona con Alby, nos2x, Flamingo.',
|
||
loginWithExtension: 'Iniciar sesión con extensión',
|
||
},
|
||
signupDialog: {
|
||
download: 'Descargar',
|
||
stepChoose: 'Elegir',
|
||
stepProfile: 'Perfil',
|
||
stepSaveKey: 'Guardar clave',
|
||
somethingWrong: 'Algo salió mal',
|
||
createFailed: 'No se pudo crear tu cuenta. Inténtalo de nuevo.',
|
||
keySavedTitle: '¡Clave secreta guardada!',
|
||
keySavedDesc: 'Tu clave se ha guardado de forma segura.',
|
||
downloadFailedTitle: 'Error al descargar',
|
||
downloadFailedDesc: 'No se pudo descargar el archivo de la clave. Cópialo manualmente.',
|
||
encSavedTitle: 'Copia cifrada guardada 🔐',
|
||
encSavedDesc: 'Guarda el archivo Y la contraseña: necesitas ambos para volver a iniciar sesión.',
|
||
encFailed: 'No se pudo cifrar esa clave.',
|
||
invalidFileTitle: 'Tipo de archivo no válido',
|
||
invalidFileDesc: 'Selecciona un archivo de imagen para tu avatar.',
|
||
fileTooLargeTitle: 'Archivo demasiado grande',
|
||
fileTooLargeDesc: 'La imagen del avatar debe pesar menos de 5 MB.',
|
||
avatarUploadedTitle: '¡Avatar subido!',
|
||
avatarUploadedDesc: 'Tu avatar se ha subido correctamente.',
|
||
uploadFailedTitle: 'Error al subir',
|
||
uploadFailedDesc: 'No se pudo subir el avatar. Inténtalo de nuevo.',
|
||
nameRequiredTitle: 'Nombre visible obligatorio',
|
||
nameRequiredDesc: 'Elige un nombre visible para que otros skaters sepan quién eres. Puedes cambiarlo cuando quieras.',
|
||
reserveFailedTitle: 'No se pudo reservar ese nombre',
|
||
reserveFailedDesc: '{{error}} Puedes reclamar uno más tarde en Ajustes.',
|
||
profileCreatedTitle: '¡Perfil creado!',
|
||
profileCreatedDesc: 'Tu perfil se ha configurado.',
|
||
profileFailedTitle: 'Error al configurar el perfil',
|
||
profileFailedDesc: 'Tu cuenta se creó, pero la configuración del perfil falló. Puedes actualizarlo más tarde.',
|
||
welcomeToastTitle: '¡Bienvenido!',
|
||
welcomeToastDesc: 'Tu cuenta está lista.',
|
||
titleWelcome: 'Únete a SkateSpots',
|
||
titleProfile: 'Configura tu perfil',
|
||
titleDone: '¡Bienvenido!',
|
||
createFreeAccount: 'Crea tu cuenta gratis',
|
||
createFreeAccountDesc: 'Sin correo, sin teléfono, sin contraseña. Tu cuenta es una clave de Nostr: elige dónde vive.',
|
||
recommended: 'Recomendado',
|
||
signUpWithAmber: 'Regístrate con Amber',
|
||
signUpWithAmberDesc: 'Tu clave se crea y se guarda dentro de la app Amber; SkateSpots nunca la toca. Lo más seguro. Un toque para aprobar.',
|
||
continueWithAmber: 'Continuar con Amber',
|
||
orQuickWay: 'o la vía rápida',
|
||
quickAccount: 'Cuenta rápida en este dispositivo',
|
||
quickAccountDesc: 'Generamos una clave que vive en este dispositivo. El inicio más rápido; te ayudaremos a guardar una copia justo después.',
|
||
createQuickAccount: 'Crear cuenta rápida',
|
||
quickReassurance: 'Tarda 5 segundos · vive en este dispositivo · te ayudaremos a hacer copia después',
|
||
preferAnotherSigner: '¿Prefieres otro firmador?',
|
||
iosDesktopNudge: '¿Estás en iOS o escritorio? Una app firmadora o una extensión del navegador es la opción más segura —',
|
||
seeAllOptions: 'Ver todas las opciones',
|
||
youreInPickName: '¡Ya estás dentro! 🛹 Elige un nombre visible para que los skaters sepan quién eres',
|
||
changeAnytime: 'Puedes cambiarlo cuando quieras. La bio y el avatar son opcionales.',
|
||
publishingProfile: 'Publicando tu perfil...',
|
||
displayName: 'Nombre visible',
|
||
displayNamePlaceholder: 'p. ej. Tony, gnarlyGrind o el nombre de tu crew',
|
||
displayNameHint: 'Obligatorio: así aparecerás en SkateSpots. Cámbialo cuando quieras.',
|
||
skateName: 'Tu nombre de SkateSpots',
|
||
skateNameHint: 'Gratis y opcional: un identificador verificado que muestra un ✓ en tu perfil.',
|
||
bio: 'Bio',
|
||
bioPlaceholder: 'Cuéntales algo sobre ti...',
|
||
avatar: 'Avatar',
|
||
uploadAvatar: 'Subir imagen de avatar',
|
||
saving: 'Guardando...',
|
||
saveAndStart: 'Guardar y empezar a patinar',
|
||
addNameToContinue: 'Añade un nombre visible para continuar.',
|
||
savingPublishesNote: 'Al guardar se publica tu perfil en Nostr; puede que tu firmador te pida aprobarlo una vez.',
|
||
youreIn: '¡Ya estás dentro! 🛹',
|
||
oneQuickThing: 'Una cosa rápida antes de empezar…',
|
||
saveLoginKey: 'Guarda tu clave de acceso',
|
||
saveLoginKeyBefore: 'Esta es la',
|
||
only: 'única',
|
||
saveLoginKeyAfter: 'forma de volver a tu cuenta: sin correo, sin restablecer contraseña. Guárdala ahora y podrás iniciar sesión en cualquier dispositivo, allí donde patines.',
|
||
revealSaveKey: 'Mostrar y guardar mi clave',
|
||
recoveryCopied: 'Código de recuperación copiado. Guárdalo en un lugar seguro.',
|
||
saved: 'Guardado',
|
||
treatLikeBoardKeys: 'Trátala como las llaves de tu tabla: quien tenga este código controla tu cuenta. No la compartas nunca.',
|
||
hideEncBackup: 'Ocultar copia cifrada',
|
||
saveEncBackup: 'Guardar una copia cifrada',
|
||
encBackupBefore: 'Una copia protegida con contraseña, segura para guardar en la nube o en un gestor de contraseñas. Necesitarás el archivo',
|
||
and: 'y',
|
||
encBackupAfter: 'la contraseña.',
|
||
choosePassword: 'Elige una contraseña',
|
||
saveEncBackupCta: 'Guardar copia cifrada',
|
||
savedCodeAria: 'He guardado mi código de recuperación',
|
||
savedCodeLabel: 'He guardado mi código de recuperación en un lugar seguro: un gestor de contraseñas o apuntado en papel.',
|
||
letsSkate: 'Vamos a patinar',
|
||
saveLater: 'Lo guardaré más tarde desde Ajustes',
|
||
advancedSigner: 'Avanzado: usar una app firmadora en su lugar',
|
||
},
|
||
mnemonic: {
|
||
generatedTitle: '¡Frase de recuperación generada! 🎉',
|
||
generatedDesc: 'Apunta estas 12 palabras en orden. ¡Son la clave de tu cuenta!',
|
||
savedTitle: '¡Frase de recuperación guardada!',
|
||
savedDesc: 'Guarda este archivo en un lugar seguro.',
|
||
downloadFailedTitle: 'Error al descargar',
|
||
downloadFailedDesc: 'No se pudo descargar el archivo. Cópialo manualmente.',
|
||
copiedTitle: '¡Copiado al portapapeles!',
|
||
copiedDesc: 'Tu frase de recuperación se ha copiado.',
|
||
qrWindowTitle: 'Código QR de la frase de recuperación',
|
||
qrHeading: 'Tu código QR de la frase de recuperación',
|
||
qrAlt: 'Código QR de la frase de recuperación',
|
||
qrWarning: '¡Mantén este código QR privado y seguro!',
|
||
qrPrint: 'Imprimir código QR',
|
||
qrFailedTitle: 'Error con el código QR',
|
||
qrFailedDesc: 'No se pudo generar el código QR.',
|
||
accountCreatedTitle: '¡Cuenta creada! 🎉',
|
||
accountCreatedDesc: '¡Todo listo! Tu frase de recuperación está a salvo.',
|
||
loginFailedTitle: 'Error al iniciar sesión',
|
||
loginFailedDesc: 'No se pudo crear la cuenta. Inténtalo de nuevo.',
|
||
verifyFailedTitle: 'Verificación fallida',
|
||
verifyFailedDesc: 'Las palabras no coinciden. Revísalas e inténtalo de nuevo.',
|
||
titlePrefix: 'Crear cuenta con',
|
||
titleSuffix: 'frase de recuperación',
|
||
twelveWordTitle: 'Frase de recuperación de 12 palabras',
|
||
twelveWordDesc: 'Tu frase de recuperación es como una contraseña maestra. Apúntala en papel y guárdala bien. La necesitarás para acceder a tu cuenta desde otros dispositivos o si borras los datos del navegador.',
|
||
generate: 'Generar frase de recuperación',
|
||
useNsecInstead: 'Usar una clave nsec avanzada en su lugar',
|
||
yourPhrase: 'Tu frase de recuperación',
|
||
copy: 'Copiar',
|
||
download: 'Descargar',
|
||
qrCode: 'Código QR',
|
||
criticalWarning: 'Advertencia de seguridad crítica',
|
||
warnWriteStrong: 'Apúntala',
|
||
warnWrite: 'en papel y guárdala de forma segura',
|
||
warnNeverShareStrong: 'No la compartas nunca',
|
||
warnNeverShare: 'con nadie',
|
||
warnBackupsStrong: 'Guarda varias copias',
|
||
warnBackups: 'en distintos lugares seguros',
|
||
warnAnyoneStrong: 'Quien tenga esta frase',
|
||
warnAnyone: 'controla tu cuenta para siempre',
|
||
warnLoseStrong: 'Si la pierdes',
|
||
warnLose: 'pierdes tu cuenta de forma permanente',
|
||
savedSecurely: 'La he guardado de forma segura',
|
||
verifyTitle: 'Verifica tu frase de recuperación',
|
||
verifyDesc: 'Para asegurarnos de que la has guardado bien, escribe estas palabras:',
|
||
wordLabel: 'Palabra n.º {{n}}',
|
||
wordPlaceholder: 'Escribe la palabra n.º {{n}}',
|
||
goBack: 'Atrás',
|
||
verifyCreate: 'Verificar y crear cuenta',
|
||
completeTitle: '¡Cuenta creada!',
|
||
completeDesc: '¡Tu cuenta de Nostr está lista!',
|
||
signerTitle: 'Recomendado: configura una app firmadora',
|
||
signerSubtitle: 'Mantén tus claves extra seguras',
|
||
signerDesc: 'Para mayor seguridad, usa una app firmadora dedicada en lugar de pegar tu frase de recuperación por todas partes. Las apps firmadoras mantienen tus claves a salvo y te dejan usar cualquier app de Nostr.',
|
||
signerCta: 'Conocer las apps firmadoras',
|
||
skip: 'Omitir por ahora',
|
||
},
|
||
signupMethod: {
|
||
titlePrefix: 'Elige tu',
|
||
titleSuffix: 'método de registro',
|
||
subtitle: 'Ambos métodos son seguros. ¡Elige el que mejor te venga!',
|
||
recommended: 'Recomendado',
|
||
mnemonicTitle: 'Frase de recuperación',
|
||
mnemonicDesc: '12 palabras fáciles de recordar. El estándar que usan Bitcoin, Ethereum y la mayoría de carteras cripto.',
|
||
mnemonicF1: 'Fácil de apuntar en papel',
|
||
mnemonicF2: 'Funciona con otras apps de Nostr (NIP-06)',
|
||
mnemonicF3: 'Puede generar varias cuentas',
|
||
mnemonicF4: 'Familiar para usuarios de cripto',
|
||
useMnemonic: 'Usar frase de recuperación',
|
||
advanced: 'Avanzado',
|
||
nsecTitle: 'Clave secreta (nsec)',
|
||
nsecDesc: 'Clave criptográfica en bruto. Más técnica, pero te da acceso directo a tu identidad de Nostr.',
|
||
nsecF1: 'Control criptográfico directo',
|
||
nsecF2: 'Compatible con todas las apps de Nostr',
|
||
nsecF3: 'Una sola cadena para la copia',
|
||
nsecF4: 'Sin capa de derivación',
|
||
useNsec: 'Usar clave secreta',
|
||
footer: '🔒 Ambos métodos son igual de seguros. ¡Elige según tu preferencia!',
|
||
},
|
||
skateNip05: {
|
||
placeholder: 'tunombre',
|
||
claimedSuffix: 'es tuyo: guarda tu perfil para publicarlo.',
|
||
checking: 'Comprobando disponibilidad…',
|
||
available: '{{name}}@{{domain}} está disponible',
|
||
claim: 'Reclamarlo',
|
||
hint: 'Letras, números y guiones. Gratis, y se muestra como insignia ✓ en tu perfil.',
|
||
},
|
||
nip05Required: {
|
||
getFree: 'Consigue un NIP-05 gratis / barato',
|
||
paid: 'De pago',
|
||
requiredTitle: 'Verificación NIP-05 obligatoria',
|
||
bannerReason: 'Para evitar spam y generar confianza, {{role}} necesitan una dirección Nostr verificada (NIP-05).',
|
||
gateReason: 'Para evitar spam y generar confianza, {{role}} deben tener verificación NIP-05.',
|
||
addInSettings: 'Añadir NIP-05 en Ajustes',
|
||
explainer: 'NIP-05 demuestra tu identidad vinculando tu perfil de Nostr a un dominio, como',
|
||
updateProfile: 'Actualiza tu perfil',
|
||
},
|
||
editProfile: {
|
||
uploadSuccessTitle: 'Correcto',
|
||
uploadSuccessDesc: '{{field}} subido correctamente',
|
||
uploadErrorDesc: 'No se pudo subir {{field}}. Inténtalo de nuevo.',
|
||
mustBeLoggedIn: 'Debes iniciar sesión para actualizar tu perfil',
|
||
invalidClinkTitle: 'Código CLINK no válido',
|
||
invalidClinkDesc: 'Eso no parece un código noffer1… válido. Bórralo o pega uno válido.',
|
||
invalidLightningTitle: 'Dirección Lightning no válida',
|
||
invalidLightningDesc: 'Usa una dirección tipo correo, como you@walletofsatoshi.com.',
|
||
invalidSpTitle: 'Dirección Silent Payment no válida',
|
||
invalidSpDesc: 'Una dirección Silent Payment empieza por "sp1" y es bastante larga. Bórrala o pega una válida.',
|
||
invalidCordnTitle: 'Enlace de Cordn no válido',
|
||
invalidCordnDesc: 'Pega un enlace de contacto de Cordn completo https://…',
|
||
updateSuccessTitle: 'Correcto',
|
||
updateSuccessDesc: 'Tu perfil se ha actualizado',
|
||
updateErrorDesc: 'No se pudo publicar el perfil. Comprueba tus conexiones de relay en Ajustes > Relays',
|
||
identityTitle: 'Identidad',
|
||
identityDesc: 'Cómo apareces en SkateSpots.',
|
||
displayName: 'Nombre visible',
|
||
displayNamePlaceholder: 'Tu nombre',
|
||
bio: 'Bio',
|
||
bioPlaceholder: 'Unas palabras sobre ti y tu patinaje…',
|
||
profilePicture: 'Foto de perfil',
|
||
pictureDesc: 'Sube o pega una imagen cuadrada.',
|
||
bannerImage: 'Imagen de portada',
|
||
bannerDesc: 'Una imagen ancha para la parte superior de tu perfil.',
|
||
website: 'Sitio web',
|
||
bitcoinTitle: 'Bitcoin y pagos',
|
||
bitcoinDesc: 'Deja que te den zaps, propinas y pagos directamente, sin intermediarios.',
|
||
lightningAddress: 'Dirección Lightning',
|
||
lud16Invalid: 'Usa una dirección tipo correo, p. ej. you@yourdomain.com.',
|
||
lud16Ok: 'Activa el botón “Zap” en tu perfil.',
|
||
lud16Hint: 'Propinas instantáneas en Bitcoin. Activa el botón “Zap” en tu perfil.',
|
||
silentPaymentAddress: 'Dirección Silent Payment',
|
||
spInvalid: 'Debería empezar por “sp1” y ser bastante larga.',
|
||
spOk: 'Válida: una dirección on-chain privada y reutilizable.',
|
||
spHint: 'Dirección on-chain estática reutilizable (BIP-352). Compártela una vez; cada pago es imposible de vincular.',
|
||
clinkTipCode: 'Código de propina CLINK',
|
||
nofferInvalid: 'Eso no parece un código noffer1… válido.',
|
||
nofferOk: 'Válido: aparecerá un botón “Propina en Bitcoin” en tu perfil.',
|
||
nofferHint: 'Código CLINK autocustodiado para que cualquiera te dé propina por Nostr, sin intermediarios.',
|
||
skateProfileTitle: 'Perfil de patinaje',
|
||
skateProfileDesc: 'Presume de tus patrocinadores y de cómo te contacta tu crew.',
|
||
badges: 'Insignias',
|
||
badgesHint: '(etiqueta + enlace opcional)',
|
||
badgeExample: 'p. ej. Independent Trucks',
|
||
badgeLabelPlaceholder: 'Etiqueta de insignia…',
|
||
badgeUrlPlaceholder: 'https://… (opcional)',
|
||
removeBadge: 'Quitar insignia',
|
||
addBadge: 'Añadir insignia',
|
||
badgesDescBefore: 'Patrocinadores, tiendas o gente que apoya tu patinaje, y cualquier otra cosa que quieras mostrar. Cada una se convierte en una insignia clicable en tu perfil. Tu',
|
||
badgesDescAfter: 'insignia de miembro se añade automáticamente.',
|
||
coordinator: 'Coordinador',
|
||
cordnInvalid: 'Eso no parece un coordinador. Pega un nprofile, un enlace de cordn.net o una URL https://.',
|
||
cordnOk: 'Se muestra en tu perfil: los demás pueden añadirlo con un toque.',
|
||
cordnHint: 'El coordinador de Cordn que otros usan para escribirte. Privado, cifrado, tuyo.',
|
||
useMyCoordinator: 'Usar mi coordinador',
|
||
accountTitle: 'Cuenta',
|
||
accountDesc: 'Ajustes adicionales de la cuenta.',
|
||
botAccount: 'Cuenta bot',
|
||
botAccountDesc: 'Marca esta cuenta como automatizada o bot.',
|
||
saving: 'Guardando…',
|
||
saveProfile: 'Guardar perfil',
|
||
nip05VerifiedHandle: 'Identificador verificado NIP-05',
|
||
nip05How: '¿Cómo?',
|
||
extraHandles: 'Identificadores adicionales',
|
||
extraHandlesHint: 'opcional — añade hasta 5',
|
||
nip05HintEmpty: 'Un identificador verificado tipo you@yourdomain.com, la versión de Nostr del check azul. Muestra una insignia ✓ en tu perfil y desbloquea el filtro “Verificado” en el directorio de skaters.',
|
||
nip05Invalid: 'Usa un identificador tipo correo, p. ej. you@yourdomain.com, sin “https://” ni espacios.',
|
||
nip05Checking: 'Comprobando tu dominio…',
|
||
nip05Verified: 'Verificado: tu dominio confirma que este identificador es tuyo. ✓',
|
||
nip05Mismatch: 'Tu dominio vincula este identificador a una clave DISTINTA. Corrige tu .well-known/nostr.json para que apunte a esta cuenta.',
|
||
nip05Unreachable: 'Aún no se pudo alcanzar el /.well-known/nostr.json de tu dominio. Los identificadores guardados funcionarán cuando tu dominio esté bien configurado.',
|
||
nip05Enter: 'Introduce tu identificador NIP-05.',
|
||
freeHandleBefore: '¿No tienes dominio propio? Reclama un identificador',
|
||
freeHandleAfter: 'gratis de SkateSpots.',
|
||
uploadLabel: 'Subir {{label}}',
|
||
previewLabel: 'Vista previa de {{label}}',
|
||
},
|
||
security: {
|
||
recoveryCopied: 'Código de recuperación copiado. Guárdalo en un lugar seguro.',
|
||
savedTitle: '¡Guardado!',
|
||
recoveryDownloaded: 'Código de recuperación descargado. Guárdalo en un lugar seguro.',
|
||
downloadFailedTitle: 'Error al descargar',
|
||
downloadFailedDesc: 'Cópialo manualmente.',
|
||
loginRequired: 'Inicio de sesión obligatorio',
|
||
loginRequiredDesc: 'Inicia sesión para acceder a los ajustes de seguridad.',
|
||
backupConfirmedTitle: '¡Copia confirmada! ✅',
|
||
backupConfirmedDesc: '¡Genial! Tus claves están a salvo.',
|
||
yourRecoveryCode: 'Tu código de recuperación',
|
||
recoveryCodeDesc: '¿No lo guardaste al registrarte? Puedes obtenerlo aquí cuando quieras.',
|
||
recoveryCodeBefore: 'Este código es la',
|
||
only: 'única',
|
||
recoveryCodeAfter: 'forma de volver a iniciar sesión en un dispositivo o navegador nuevo. Guárdalo en un lugar seguro (un gestor de contraseñas o en papel). Quien lo tenga controla tu cuenta: no lo compartas nunca.',
|
||
revealRecovery: 'Mostrar mi código de recuperación',
|
||
qrHint: 'Escanea con otra app de Nostr para iniciar sesión. Mantén esta pantalla en privado.',
|
||
neverShareHide: '⚠️ No lo compartas nunca. Ocultalo cuando termines.',
|
||
hide: 'Ocultar',
|
||
amberNoteBefore: 'Has iniciado sesión con',
|
||
amberNoteAfter: '. Tu código de recuperación vive dentro de Amber: abre la app Amber para guardarlo. SkateSpots nunca ve tu clave.',
|
||
bunkerNoteBefore: 'Has iniciado sesión con un',
|
||
remoteSigner: 'firmador remoto (bunker)',
|
||
bunkerNoteAfter: '. Tu código de recuperación lo guarda tu servicio firmador, no SkateSpots. Haz la copia allí.',
|
||
extensionNoteBefore: 'Has iniciado sesión con una',
|
||
browserExtension: 'extensión del navegador',
|
||
extensionNoteAfter: '. Tu código de recuperación vive en la extensión: usa su propia opción de copia/exportación. SkateSpots nunca ve tu clave.',
|
||
otherNote: 'Tu código de recuperación lo gestiona tu app firmadora, no SkateSpots. Haz la copia allí.',
|
||
backupWarningTitle: '⚠️ ¿Has hecho copia de tu frase de recuperación o clave secreta?',
|
||
backupWarningBody: 'Tus claves son la ÚNICA forma de acceder a tu cuenta. Si las pierdes, lo pierdes todo: ¡no hay restablecimiento de contraseña!',
|
||
iveBackedUp: 'He hecho copia de mis claves',
|
||
backupConfirmed: '✅ Copia confirmada',
|
||
backupNotConfirmed: '⚠️ Copia sin confirmar',
|
||
backupConfirmedStatusDesc: 'Has confirmado que tus claves están a salvo.',
|
||
backupNotConfirmedDesc: '¡Asegúrate de hacer copia de tu frase de recuperación o clave secreta!',
|
||
notSavedYetBefore: '¿Aún no has guardado tu código de recuperación? No pasa nada: cópialo de la sección',
|
||
notSavedYetAfter: 'de arriba, guárdalo en un lugar seguro y confírmalo abajo.',
|
||
yesBackedUp: 'Sí, he hecho copia de mis claves',
|
||
bestPracticesTitle: 'Buenas prácticas de seguridad de claves',
|
||
bestPracticesDesc: 'Cómo mantener tu cuenta de Nostr a salvo',
|
||
bp1Title: 'Apúntala en papel',
|
||
bp1Desc: 'La copia física es lo más seguro. Guárdala en un lugar seguro, como una caja fuerte.',
|
||
bp2Title: 'Varias copias',
|
||
bp2Desc: 'Guarda copias en distintos lugares seguros (caja fuerte de casa, caja de seguridad del banco, etc.)',
|
||
bp3Title: 'No compartas nunca tus claves',
|
||
bp3Desc: 'Las apps de Nostr de verdad NUNCA piden tu nsec ni tu frase de recuperación después del primer inicio de sesión',
|
||
bp4Title: 'No las guardes en la nube sin cifrar',
|
||
bp4Desc: 'Evita Google Docs, borradores de correo o almacenamiento en la nube en texto plano',
|
||
bp5Title: 'Plantéate usar una extensión del navegador',
|
||
bp5Desc: 'Alby, nos2x o Flamingo mantienen tus claves seguras y nunca las exponen a los sitios web',
|
||
importantReminders: '⚠️ Recordatorios importantes',
|
||
rem1: 'Si pierdes tus claves, pierdes tu cuenta de forma permanente',
|
||
rem2: 'Ninguna empresa ni persona puede restablecer tu contraseña, ni siquiera nosotros',
|
||
rem3: 'Quien tenga tus claves tiene control total de tu cuenta',
|
||
rem4: 'Tus claves controlan todos tus datos de Nostr en TODAS las apps',
|
||
recommendedSigners: '🔌 Firmadores de Nostr recomendados',
|
||
recommendedSignersDesc: 'Usa un firmador de Nostr para mayor seguridad y comodidad',
|
||
recommended: 'Recomendado',
|
||
amberDesc: 'Firmador de Nostr seguro para Android. Mantiene tus claves a salvo en tu teléfono y firma eventos sin exponerlas.',
|
||
albyDesc: 'Extensión completa con cartera Lightning, WebLN y soporte NWC.',
|
||
flamingoDesc: 'Interfaz sencilla y limpia. Se centra en firmar en Nostr sin funciones de cartera.',
|
||
nos2xDesc: 'Extensión mínima y ligera para usuarios avanzados.',
|
||
nostrConnectTitle: '☁️ Nostr Connect (firmadores remotos)',
|
||
nostrConnectDesc: 'Usa un firmador remoto para acceder a tu cuenta desde cualquier dispositivo',
|
||
nostrConnectBody: 'Nostr Connect (también llamado "bunkers") te permite guardar tus claves en un servidor seguro e iniciar sesión desde cualquier dispositivo. Tus claves nunca salen del servidor, ¡pero puedes usar tu cuenta donde quieras!',
|
||
nsecAppDesc: 'Firmador remoto gratuito y seguro. Crea una URI bunker:// y pégala al iniciar sesión.',
|
||
nostrumDesc: 'Otra opción de firmador remoto con soporte móvil.',
|
||
howToUse: '💡 Cómo usarlo:',
|
||
howToUseDesc: 'Crea una cuenta en uno de estos servicios, obtén tu cadena de conexión bunker:// y pégala en la pestaña "Nostr Connect" al iniciar sesión.',
|
||
},
|
||
relayList: {
|
||
connected: 'Conectado',
|
||
connecting: 'Conectando…',
|
||
offline: 'Sin conexión',
|
||
removeUrl: 'Quitar {{url}}',
|
||
add: 'Añadir',
|
||
publishedTitle: 'Lista de relays publicada',
|
||
publishedDesc: 'Sincronizada con Nostr (kind 10002).',
|
||
publishFailedTitle: 'No se pudo publicar la lista de relays',
|
||
invalidUrlTitle: 'URL de relay no válida',
|
||
invalidUrlDesc: 'Prueba algo como wss://relay.example.com',
|
||
alreadyInList: 'El relay ya está en tu lista',
|
||
keepReadWriteTitle: 'Mantén lectura o escritura activada',
|
||
keepReadWriteDesc: 'Un relay necesita al menos lectura o escritura.',
|
||
alreadyInThisList: 'El relay ya está en esta lista',
|
||
dmPublishedTitle: 'Relays de MD publicados',
|
||
dmPublishedDesc: 'Bandeja NIP-17 actualizada.',
|
||
dmPublishFailedTitle: 'No se pudieron publicar los relays de MD',
|
||
nip65Title: 'Relays (NIP-65)',
|
||
nip65DescUser: 'Toca Lectura / Escritura para alternar. Se publica en Nostr como tu lista kind 10002.',
|
||
nip65DescLoggedOut: 'Toca Lectura / Escritura para alternar. Inicia sesión para publicar tu lista en Nostr.',
|
||
noRelays: 'Aún no hay relays: añade uno abajo.',
|
||
local: 'Local',
|
||
read: 'Lectura',
|
||
readHint: 'Obtener contenido de este relay',
|
||
write: 'Escritura',
|
||
writeHint: 'Publicar tus eventos en este relay',
|
||
dmTitle: 'Relays de bandeja de MD',
|
||
dmDesc: 'Donde recibes los mensajes directos NIP-17 (kind 10050). Si está vacío, usa tus relays de escritura.',
|
||
localTitle: 'Relays locales',
|
||
localDesc: 'Solo de la app (p. ej. un nodo de LAN). Se usan para lectura y escritura; nunca se publican.',
|
||
blockedTitle: 'Relays bloqueados',
|
||
blockedDesc: 'No te conectes nunca a estos: se excluyen de toda lectura y escritura.',
|
||
},
|
||
relatr: {
|
||
searchingTitle: 'Buscando el servicio Relatr...',
|
||
searchingDesc: 'Consultando Nostr en busca de perfiles Relatr',
|
||
foundTitle: '¡Servicio Relatr encontrado!',
|
||
foundDesc: 'Servicio: {{name}}',
|
||
unknown: 'Desconocido',
|
||
notFoundTitle: 'No se encontró ningún servicio Relatr',
|
||
notFoundDesc: 'Prueba a introducir la clave pública manualmente o mira https://www.relatr.xyz/',
|
||
searchFailedTitle: 'Error en la búsqueda',
|
||
searchFailedDesc: 'No se pudo consultar Nostr en busca de perfiles Relatr',
|
||
invalidPubkeyTitle: 'Clave pública no válida',
|
||
invalidPubkeyDesc: 'Introduce una clave pública hex válida de 64 caracteres',
|
||
enabledTitle: '¡Relatr activado!',
|
||
enabledDesc: 'Las puntuaciones de confianza globales ya están activas.',
|
||
disabledTitle: 'Relatr desactivado',
|
||
disabledDesc: 'Ya no se obtienen puntuaciones de confianza.',
|
||
title: 'Puntuaciones de confianza de Relatr',
|
||
desc: 'Las puntuaciones de confianza globales ayudan a identificar usuarios fiables y reducir el spam',
|
||
status: 'Estado',
|
||
active: 'Activo',
|
||
disabled: 'Desactivado',
|
||
activeStrong: 'Relatr está activo.',
|
||
activeDesc: 'Las puntuaciones de confianza del análisis de red global de ContextVM ayudan a identificar skaters fiables y reducir el spam.',
|
||
disabledStrong: 'Relatr está desactivado.',
|
||
disabledHint: 'Actívalo para obtener puntuaciones de confianza de la red Nostr global.',
|
||
disable: 'Desactivar Relatr',
|
||
enable: 'Activar Relatr',
|
||
advancedSettings: 'Ajustes avanzados',
|
||
servicePubkey: 'Clave pública del servicio Relatr',
|
||
pubkeyPlaceholder: 'Introduce la clave pública hex de 64 caracteres...',
|
||
searching: 'Buscando...',
|
||
autoDiscover: 'Autodescubrir',
|
||
pubkeyDefault: 'Por defecto: servicio Relatr oficial de ContextVM (npub1dvmc...)',
|
||
relayLabel: 'Relay (donde Relatr publica las puntuaciones)',
|
||
relayDefault: 'Por defecto: wss://relay.contextvm.org (relay oficial de ContextVM)',
|
||
applyChanges: 'Aplicar cambios',
|
||
learnMore: 'Más información:',
|
||
website: 'Sitio web de Relatr',
|
||
github: 'GitHub de Relatr',
|
||
nip85Spec: 'Especificación NIP-85',
|
||
},
|
||
followList: {
|
||
unfollow: 'Dejar de seguir',
|
||
title: 'Tu red de Nostr',
|
||
desc: 'Gestiona a quién sigues. Seguir a usuarios ayuda a construir tu red de confianza y determina qué spots muestran insignias de confianza.',
|
||
following: 'Siguiendo ({{count}})',
|
||
followers: 'Seguidores ({{count}})',
|
||
follow: 'Seguir',
|
||
followHint: '💡 Pega una clave pública de Nostr (npub1...), una dirección NIP-05 (usuario@dominio.com) o una clave pública hex',
|
||
notFollowing: 'Aún no sigues a nadie',
|
||
notFollowingHint: 'Sigue a skaters para ver sus spots con insignias ✅ VERIFICADO',
|
||
trustActiveStrong: '✅ Insignias de confianza activas:',
|
||
trustActive: 'Los spots creados por gente que sigues ahora mostrarán insignias VERIFICADO. Los de sus amigos mostrarán insignias DE CONFIANZA.',
|
||
noFollowers: 'Aún no tienes seguidores',
|
||
noFollowersHint: '¡Comparte tu perfil de Nostr para ganar seguidores!',
|
||
howTitle: '💡 Cómo afecta seguir a las insignias de confianza',
|
||
verifiedStrong: '✅ VERIFICADO (verde):',
|
||
verifiedDesc: 'Spots creados por gente a la que sigues directamente',
|
||
trustedStrong: '🟡 DE CONFIANZA (amarillo):',
|
||
trustedDesc: 'Spots creados por gente a la que siguen tus amigos (2 saltos)',
|
||
unverifiedStrong: '⚪ Sin verificar:',
|
||
unverifiedDesc: 'Spots de usuarios sin conexión con tu red',
|
||
tip: '💡 Consejo: ¡sigue a skaters activos para ver más spots verificados y construir tu red de confianza!',
|
||
},
|
||
notify: {
|
||
enableTitle: 'Activar notificaciones',
|
||
enableDesc: 'Haz vibrar este dispositivo cuando algo te necesite.',
|
||
checkingPermission: 'Comprobando permiso…',
|
||
unsupported: 'Este dispositivo no admite notificaciones aquí. Recompila la app de Android para activarlas en tu teléfono.',
|
||
denied: 'Las notificaciones están bloqueadas para este sitio. Permítelas en los ajustes de tu navegador/SO e inténtalo de nuevo.',
|
||
backgroundTitle: 'Notificaciones en segundo plano',
|
||
backgroundDesc: 'Recibe avisos de mensajes y operaciones aunque SkateSpots esté cerrado.',
|
||
pushUnsupported: 'Este navegador no admite push en segundo plano. En móvil, añade SkateSpots a tu pantalla de inicio.',
|
||
pushPrivacy: 'Para alcanzarte con la app cerrada, un servidor de notificaciones de SkateSpots recibe un aviso de tu relay cuando llega algo para tu clave y lo pasa al servicio push de tu teléfono. Solo ve que tu clave tiene algo, nunca quién lo envía ni qué dice, y no puede descifrar tus mensajes. Actívalo por dispositivo.',
|
||
bgDeliveryTitle: 'Entrega en segundo plano (Android)',
|
||
bgDeliveryDesc: 'Busca mensajes, ofertas y operaciones nuevos mientras la app está cerrada, sin servicios de Google.',
|
||
off: 'Desactivado',
|
||
standard: 'Estándar (~15 min)',
|
||
fast: 'Rápido (~5 min)',
|
||
bgDeliveryNote: 'El modo estándar es lo mejor posible: Android puede aplazarlo con Doze. El rápido muestra una notificación persistente y gasta más batería. Nada se descifra en nuestro servidor.',
|
||
notifyMeAbout: 'Avisarme de',
|
||
couldNotEnable: 'No se pudo activar',
|
||
sendTest: 'Enviar una notificación de prueba',
|
||
testTitle: 'Las notificaciones de SkateSpots están activadas 🛹',
|
||
testBody: 'Así se verá un MD, un zap o una invitación de crew.',
|
||
footerBefore: 'Los avisos se generan en tu dispositivo con datos que la app ya tiene, y los avisos de mensajes directos nunca descifran tus mensajes, así que nunca se le pide a Amber que abra uno. Con',
|
||
footerAfter: 'desactivado, no se puede alcanzar una app totalmente cerrada, así que los avisos llegan la próxima vez que abras SkateSpots.',
|
||
cat_dms_label: 'Mensajes directos',
|
||
cat_dms_hint: 'Alguien te envía un mensaje privado',
|
||
cat_crew_label: 'Crews',
|
||
cat_crew_hint: 'Invitaciones, solicitudes de unión y confirmaciones de pertenencia',
|
||
cat_social_label: 'Zaps, respuestas y menciones',
|
||
cat_social_hint: 'Reacciones, reposts, zaps, respuestas y actualizaciones de eventos',
|
||
cat_newsletter_label: 'Boletín',
|
||
cat_newsletter_hint: 'Nuevas entregas de SkateSpots (solo suscriptores)',
|
||
cat_trades_label: 'Ofertas y operaciones',
|
||
cat_trades_hint: 'Ofertas, contraofertas y confirmaciones de operaciones',
|
||
cat_reminders_label: 'Recordatorios de eventos',
|
||
cat_reminders_hint: 'Un aviso una hora antes de los eventos a los que vas (app de Android)',
|
||
},
|
||
regionBackfill: {
|
||
taggedTitle: '{{count}} ubicación{{s}} etiquetada{{s}}',
|
||
taggedSkipped: '{{count}} omitidas (sin coordenadas o sin coincidencia del geocodificador).',
|
||
taggedOk: 'Etiquetas de región escritas en el relay comunitario.',
|
||
nothingTitle: 'Nada que etiquetar',
|
||
nothingDesc: 'No se pudo geocodificar ningún pin. Inténtalo más tarde.',
|
||
failedTitle: 'Falló el relleno',
|
||
title: 'Rellenar etiquetas de región',
|
||
admin: 'Admin',
|
||
descBefore: 'Los pines creados antes de que existiera la geocodificación tienen coordenadas pero ninguna etiqueta de ciudad/país, así que el mapa los dibuja mientras que las Estadísticas comunitarias solo pueden decir “Sin categoría”. Esto vuelve a derivar las etiquetas de cada pin y republica',
|
||
descStrong: 'tus propios',
|
||
descAfter: 'spots y tiendas sin etiquetar.',
|
||
scanning: 'Analizando tus spots…',
|
||
allTagged: 'Todos los spots y tiendas que posees ya tienen etiqueta de región. 🎉 Cualquier pin “Sin categoría” restante pertenece a otros mapeadores: solo sus propias claves pueden etiquetarlos.',
|
||
countLine: '{{count}} de tus spot{{s}}/tiendas no tienen etiqueta de región. Puede que tu firmador pida aprobar cada uno.',
|
||
tagging: 'Etiquetando {{done}}/{{total}}…',
|
||
run: 'Rellenar etiquetas de región',
|
||
summary: '{{updated}} actualizados · {{skipped}} omitidos · {{failed}} fallidos',
|
||
},
|
||
adminReview: {
|
||
title: 'Cola de revisión',
|
||
flagged: '{{count}} spot{{s}} activan las señales de basura: ocúltalos o descártalos.',
|
||
clean: 'Spots que parecen entradas de prueba o pines fuera de tema.',
|
||
},
|
||
grantPro: {
|
||
invalidNpub: 'Introduce un npub válido (o clave pública hex)',
|
||
invalidDays: 'Los días deben ser un número positivo',
|
||
grantedTitle: 'Pro concedido ⚡',
|
||
grantedDesc: '{{npub}} hasta el {{date}}',
|
||
failedTitle: 'Falló la concesión',
|
||
title: 'Conceder Sasquatch Pro',
|
||
owner: 'Propietario',
|
||
desc: 'Alternativa manual por si el recibo de zap se pierde un pago verificado. Publica una concesión firmada por el propietario; el usuario no puede falsificarla.',
|
||
targetPlaceholder: 'npub1… (o hex)',
|
||
grant: 'Conceder',
|
||
},
|
||
myData: {
|
||
reactionTitle: '{{emoji}} reacción',
|
||
deleting: 'Eliminando...',
|
||
requestDeletion: 'Solicitar eliminación',
|
||
selectContentTitle: 'Selecciona el contenido que eliminar',
|
||
selectContentDesc: 'Selecciona los elementos concretos cuya eliminación quieres solicitar.',
|
||
all: 'Todo',
|
||
spots: 'Spots',
|
||
events: 'Eventos',
|
||
shops: 'Tiendas',
|
||
listings: 'Anuncios',
|
||
collections: 'Colecciones',
|
||
lab: 'Lab',
|
||
posts: 'Publicaciones',
|
||
reactions: 'Reacciones',
|
||
selectAll: 'Seleccionar todo',
|
||
selectAllVisible: 'Seleccionar todo lo visible',
|
||
selectedCount: '{{count}} seleccionados',
|
||
noItemsCategory: 'No hay elementos en esta categoría',
|
||
decentralizedStrong: 'Importante:',
|
||
decentralizedNote: 'Nostr es descentralizado. Los relays deberían respetar las solicitudes de eliminación, pero algunos puede que no. No es una eliminación permanente garantizada.',
|
||
deleteCount: 'Eliminar {{count}} elemento{{s}}',
|
||
noDataTitle: 'No hay datos que exportar',
|
||
noDataDesc: 'Aún no has publicado ningún evento.',
|
||
exportedTitle: '¡Datos exportados!',
|
||
exportedDesc: 'Se descargaron {{count}} eventos como JSON.',
|
||
deletionRequestedTitle: 'Eliminación solicitada',
|
||
deletionRequestedDesc: 'La solicitud de eliminación se ha publicado en los relays.',
|
||
deletionRequestedMany: 'Se solicitó la eliminación de {{count}} elementos. Nota: puede que algunos relays no respeten esta solicitud.',
|
||
deletionFailedTitle: 'Falló la eliminación',
|
||
deletionFailedDesc: 'No se pudo publicar la solicitud de eliminación. Inténtalo de nuevo.',
|
||
loginRequired: 'Inicio de sesión obligatorio',
|
||
loginRequiredDesc: 'Inicia sesión para ver y gestionar tus datos.',
|
||
title: 'Mis datos',
|
||
desc: 'Tu contenido en la red Nostr. Estos datos son tuyos: expórtalos cuando quieras o solicita su eliminación.',
|
||
coachFilmer: 'Coach/Filmer',
|
||
zaps: 'Zaps',
|
||
received: 'Recibidos',
|
||
exportAll: 'Exportar todos los datos',
|
||
recentActivity: 'Actividad reciente',
|
||
viewAll: 'Ver todo ({{count}})',
|
||
noDataPublished: 'Aún no hay datos publicados',
|
||
startBy: 'Empieza',
|
||
addingASpot: 'añadiendo un spot',
|
||
aboutYourData: 'Sobre tus datos',
|
||
ownDataStrong: 'Tus datos son tuyos.',
|
||
ownData: 'Todo el contenido está firmado con tus claves criptográficas y guardado en relays de Nostr. Ninguna empresa lo controla.',
|
||
exportAnytimeStrong: 'Exporta cuando quieras',
|
||
exportAnytime: '- Descarga todos tus eventos como JSON',
|
||
portableStrong: 'Portable',
|
||
portable: '- Usa tus claves en cualquier app de Nostr',
|
||
selectiveStrong: 'Eliminación selectiva',
|
||
selective: '- Elige exactamente qué borrar',
|
||
caveatStrong: 'Advertencia descentralizada',
|
||
caveat: '- Puede que algunos relays conserven datos pese a las solicitudes de eliminación',
|
||
},
|
||
settingsPage: {
|
||
seoTitle: 'Ajustes - SkateSpots',
|
||
seoDescription: 'Gestiona los ajustes de tu cuenta de SkateSpots.',
|
||
heading: 'AJUSTES',
|
||
subtitle: 'Cuenta y preferencias de la app',
|
||
editProfile: 'Editar perfil',
|
||
profileRefreshed: '¡Perfil actualizado!',
|
||
found: 'Encontrado: {{name}}',
|
||
unnamed: 'sin nombre',
|
||
profileNotFound: 'Perfil no encontrado',
|
||
notFoundOnRelay: 'No encontrado en ningún relay.',
|
||
refreshFailed: 'Falló la actualización',
|
||
refreshFailedDesc: 'No se pudo conectar a los relays.',
|
||
loginToEdit: 'Inicia sesión para editar tu perfil',
|
||
noProfileRelays: 'No encontramos un perfil en los relays. Si ya habías configurado uno, prueba a actualizar.',
|
||
checkDisplayName: 'un nombre visible',
|
||
checkPhoto: 'una foto de perfil',
|
||
checkBio: 'una bio corta',
|
||
checkLightning: 'una dirección Lightning para que te den zaps',
|
||
checkHandle: 'un identificador @skate-spots.org gratis',
|
||
finishProfile: 'Completa tu perfil',
|
||
addItem: 'Añade {{item}}',
|
||
nip05Title: 'Verificación NIP-05',
|
||
nip05Desc: 'Consigue una dirección Nostr verificada (como nombre@dominio.com) para generar confianza. Obligatoria para crear eventos, perfiles de coach y tiendas.',
|
||
freeFromSkateSpots: 'Gratis desde SkateSpots',
|
||
claimHandleBefore: 'Reclama un identificador como',
|
||
claimHandleAfter: '— sin registro, sin coste, sin dominio que mantener. Reclámalo en la pestaña Perfil y guarda.',
|
||
claimInProfile: 'Reclamar en el perfil',
|
||
nip05Footer: 'Cuando tengas tu NIP-05, añádelo en el campo Perfil y guarda.',
|
||
localRelayOn: 'Relay local activado',
|
||
localRelayOff: 'Relay local desactivado',
|
||
lookingForCitrine: 'Buscando Citrine en este dispositivo…',
|
||
noLongerUsing: 'Ya no se usa el relay del dispositivo.',
|
||
localRelay: 'Relay local',
|
||
citrineOff: 'Lecturas más rápidas y copia sin conexión en este dispositivo',
|
||
citrineSearching: 'Buscando Citrine en este dispositivo…',
|
||
citrineLive: 'Conectado: leyendo y guardando en local',
|
||
citrineWaiting: 'Activado: inicia Citrine para conectar',
|
||
toggleCitrine: 'Activar el relay local Citrine',
|
||
citrineDetected: 'Relay Citrine detectado',
|
||
citrineLooking: 'Buscando Citrine…',
|
||
citrineNotDetected: 'Citrine no detectado',
|
||
recheckCitrine: 'Volver a comprobar el relay Citrine',
|
||
checking: 'Comprobando',
|
||
recheck: 'Recomprobar',
|
||
chipInstantReads: 'Lecturas instantáneas',
|
||
chipWorksOffline: 'Funciona sin conexión',
|
||
chipOnDeviceBackup: 'Copia en el dispositivo',
|
||
cantReachStrong: 'No se puede alcanzar Citrine.',
|
||
cantReachBefore: 'Asegúrate de que la app gratuita Citrine está instalada y su relay está',
|
||
started: 'iniciado',
|
||
cantReachAfter: ', y luego toca Recomprobar. Ejecuta un relay privado de Nostr en tu teléfono para lecturas instantáneas y una copia sin conexión.',
|
||
citrineStep1Before: 'Abre Citrine → toca',
|
||
start: 'Iniciar',
|
||
citrineStep2Before: 'Vuelve aquí → toca',
|
||
getCitrine: 'Consigue Citrine',
|
||
citrinePrivacy: 'Tu Stash y tus mensajes siguen cifrados de extremo a extremo aquí, igual que en todas partes. El relay local solo acelera las cosas y guarda una copia en tu dispositivo; nunca sustituye el cifrado.',
|
||
communityRelayDisabled: 'Relay comunitario desactivado',
|
||
communityRelayEnabled: 'Relay comunitario activado',
|
||
usingOnlyPersonal: 'Usando solo tus relays configurados.',
|
||
skateRelayIncluded: 'Relay de SkateSpots incluido.',
|
||
relays: 'Relays',
|
||
relayPrivacyBefore: 'Los relays pueden ver tu',
|
||
ipAddress: 'dirección IP',
|
||
relayPrivacyAfter: 'cuando te conectas. Tor la oculta, y trata una VPN "gratis" como señal de alarma; normalmente monetizan tu tráfico.',
|
||
communityRelay: 'Relay comunitario',
|
||
syncingGlobal: 'Sincronizando con la comunidad global de skate',
|
||
usingOnlyPersonalShort: 'Usando solo relays personales',
|
||
appearance: 'Apariencia',
|
||
language: 'Idioma',
|
||
darkModeOnly: 'Solo modo oscuro',
|
||
darkModeDesc: 'SkateSpots usa una estética neón oscura inspirada en la cultura del skate. Fondo negro, rosa neón, lima y naranja.',
|
||
navigation: 'Navegación',
|
||
sasquatchExpanded: '¡El Sasquatch se ha expandido! 🦧 Recarga la página para verlo.',
|
||
advanced: 'Avanzado',
|
||
sasquatchGuide: '🦧 Guía del Sasquatch',
|
||
sasquatchResetDesc: 'Restablecer la guía de inicio a la vista expandida',
|
||
expandSasquatch: 'Expandir el Sasquatch',
|
||
wallet: 'Cartera',
|
||
loginToWallet: 'Inicia sesión para gestionar tu cartera',
|
||
openWallet: 'Abrir cartera',
|
||
balanceSendReceive: 'Saldo, enviar, recibir',
|
||
connectNwc: 'Conectar cartera NWC',
|
||
account: 'Cuenta',
|
||
security: 'Seguridad',
|
||
securitySub: 'Claves, firma, Amber',
|
||
nip05Sub: 'Consigue una dirección Nostr verificada',
|
||
app: 'App',
|
||
myStash: 'Mi Stash',
|
||
myStashSub: 'Inventario privado de material',
|
||
relaysSub: 'Conexiones a relays de Nostr',
|
||
appearanceSub: 'Idioma y tema',
|
||
assistant: 'Asistente',
|
||
showSasquatch: 'Mostrar el asistente Sasquatch',
|
||
showSasquatchDesc: 'Muestra el botón flotante del Sasquatch en el mapa y otras pantallas.',
|
||
showMapFooter: 'Mostrar barra de enlaces del mapa',
|
||
showMapFooterDesc: 'Muestra la franja fina de enlaces en la parte inferior del mapa.',
|
||
notifications: 'Notificaciones',
|
||
notificationsSub: 'Avisos de MD, crews y zaps',
|
||
coordinator: 'Coordinador',
|
||
coordinatorSub: 'Tu servidor de grupo Cordn',
|
||
data: 'Datos',
|
||
myData: 'Mis datos',
|
||
myDataSub: 'Exportar, importar, gestionar',
|
||
advancedSub: 'Relatr, Sasquatch, herramientas',
|
||
trust: 'Confianza',
|
||
trustSub: 'Fuentes y visualizacion',
|
||
notLoaded: 'Sin cargar',
|
||
notLoggedIn: 'Sin sesión',
|
||
},
|
||
onboarding: {
|
||
seoTitle: 'Empezar — SkateSpots',
|
||
seoDescription: 'Únete a la comunidad de skate descentralizada. Encuentra spots, conecta con coaches, envía zaps. Gratis para siempre.',
|
||
homeSetTitle: 'Casa configurada 🛹',
|
||
homeSetDesc: 'El mapa se abrirá ahora en tu zona.',
|
||
locationFailedTitle: 'No se pudo obtener tu ubicación',
|
||
locationFailedDesc: 'Comprueba los permisos de ubicación o elige tu zona desde el mapa.',
|
||
niceTitle: '🎉 ¡Genial!',
|
||
niceDesc: 'Ya entiendes cómo funciona Nostr. ¡Vamos a patinar!',
|
||
npubCopied: 'npub copiado al portapapeles.',
|
||
saveLoginNow: 'Guarda tu acceso — hazlo ahora',
|
||
saveLoginNowDesc: 'Tu código de recuperación es la única forma de volver a tu cuenta. Sin correo, sin restablecer contraseña.',
|
||
betaBadge: 'Beta — Abierto a skaters de todo el mundo',
|
||
headline1: 'PATINA',
|
||
headline2: 'TU MUNDO',
|
||
heroBefore: 'Una comunidad de skate',
|
||
decentralized: 'descentralizada',
|
||
heroAfter: '. Ninguna empresa es dueña de ella. Ningún algoritmo entierra tus spots. Sin mazos de bloqueo. Solo skaters.',
|
||
pillMap: 'Mapa de spots',
|
||
pillCoaches: 'Coaches y filmers',
|
||
pillEvents: 'Eventos',
|
||
pillGear: 'Compra/venta de material',
|
||
pillZaps: 'Zaps de Bitcoin',
|
||
pillStash: 'Stash de material',
|
||
pillCrews: 'Crews',
|
||
createFreeAccount: 'Crea tu cuenta gratis',
|
||
noEmailNoPassword: 'Sin correo. Sin contraseña. Tu identidad es tuya para siempre.',
|
||
findSpots: 'Encuentra spots cerca de ti',
|
||
addFirstSpot: 'Añade tu primer spot',
|
||
accountCreated: '¡Ya estás dentro! Cuenta creada ✓',
|
||
identityYours: 'Tu identidad es tuya: guardada en tu clave, no en nuestros servidores.',
|
||
whereSkate: '¿Dónde patinas?',
|
||
whereSkateDesc: 'Configura tu zona de casa una vez y el mapa se abrirá en tus spots siempre. Tu GPS nunca sale de tu dispositivo.',
|
||
useMyLocation: 'Usar mi ubicación',
|
||
pickOnMap: 'Elegir en el mapa',
|
||
loginSaved: 'Acceso guardado: tu cuenta se puede recuperar.',
|
||
whyBother: '¿Por qué molestarse?',
|
||
why1Title: 'Cada spot, un mapa',
|
||
why1Body: 'Bordillos, barandillas, DIY, parques — mapeados por skaters que realmente los patinan. Comprueba el estado antes de salir para no desperdiciar una sesión en un sitio prohibido.',
|
||
why2Title: 'Hecho por skaters, no por trajes',
|
||
why2Body: 'Sin anuncios, sin algoritmos que te metan basura por los ojos, sin recolección de datos. Código abierto. El mapa es de la comunidad, incluido tú.',
|
||
why3Title: 'Te pagan por aportar',
|
||
why3Body: 'Mapea una joya, graba un truco brutal, organiza una sesión, y recibe zaps de Bitcoin real directamente en tu cartera. Sin comisión de plataforma, sin intermediarios.',
|
||
why4Title: 'Tu cuenta es de verdad tuya',
|
||
why4Body: 'Una clave te da acceso a todas las apps de Nostr. Ninguna empresa puede bloquearte ni borrar tu cuenta cuando le apetezca. Llévate tu identidad a donde quieras.',
|
||
everythingFree: 'Todo lo que puedes hacer — gratis',
|
||
featSpots: 'Descubre spots',
|
||
featSpotsDesc: 'Mapa interactivo con miles de spots en todo el mundo',
|
||
featLab: 'El Lab',
|
||
featLabDesc: 'Encuentra coaches, filmers y editores de vídeo cerca de ti',
|
||
featEvents: 'Eventos',
|
||
featEventsDesc: 'Competiciones, sesiones, quedadas',
|
||
featGear: 'Compra / vende material',
|
||
featGearDesc: 'Mercado entre particulares de material de skate usado',
|
||
featStash: 'Mi Stash',
|
||
featStashDesc: 'Inventario privado y cifrado de todo lo que tienes',
|
||
featCrews: 'Crews',
|
||
featCrewsDesc: 'Rueda con tu crew: spots compartidos, chat y sesiones',
|
||
whatIsNostr: '¿Qué es Nostr?',
|
||
whatIsNostrSub: 'El protocolo que impulsa SkateSpots',
|
||
nostrBefore: 'Nostr es un protocolo abierto, como el correo, pero para apps sociales. Tu cuenta es un',
|
||
cryptoKeyPair: 'par de claves criptográficas',
|
||
nostrAfter: 'que te pertenece. Ninguna empresa controla tu cuenta ni tus datos: tú eliges qué relays los guardan, e incluso puedes ejecutar el tuyo. Tu identidad funciona en todas las apps de Nostr.',
|
||
nostrPoint1: 'Tus datos y claves son tuyos',
|
||
nostrPoint2: 'Ninguna empresa puede vetarte',
|
||
nostrPoint3: 'La identidad funciona en todas partes',
|
||
nostrPoint4: 'Propinas directas en Bitcoin',
|
||
deepDive: 'En profundidad: cómo funciona Nostr',
|
||
privacyTip: 'Consejo de privacidad: tu GPS nunca sale de tu dispositivo. Los servidores a los que te conectas (como las teselas del mapa) aún pueden ver tu IP; si quieres ocultarla también, sirve una VPN o Tor. Totalmente opcional.',
|
||
readPrivacy: 'Lee nuestra página de privacidad',
|
||
zapsWallet: '⚡ Zaps y cartera',
|
||
optional: 'Opcional',
|
||
walletDesc: 'Los zaps son propinas en Bitcoin que envías directamente a un skater que descubrió un spot genial, grabó un clip brutal o dirigió una gran sesión. Sin comisión de plataforma. Sin intermediarios. El 100 % va para él.',
|
||
builtInWallet: 'Cartera Cashu integrada',
|
||
builtInWalletDesc: 'Recibe pagos Lightning directamente en la app. Sin configuración.',
|
||
balance: 'Saldo',
|
||
connectExternal: 'Conectar cartera externa',
|
||
connectExternalDesc: '¿Tienes Alby, Mutiny u otra cartera? Conéctala vía NWC.',
|
||
connectViaNwc: 'Conectar vía NWC',
|
||
loginToConnect: 'Inicia sesión para conectar tu propia cartera.',
|
||
fiveDollars: '💡 5 $ en Bitcoin = cientos de zaps para repartir por la comunidad',
|
||
commonQuestions: 'Preguntas frecuentes',
|
||
faq1Q: '¿SkateSpots es gratis?',
|
||
faq1A: '100 % gratis. Explorar spots, añadir ubicaciones, encontrar coaches, crear eventos, unirte a sesiones: todo gratis, para siempre. Bitcoin (zaps) es opcional si quieres dar propina a los creadores.',
|
||
faq2Q: '¿Qué es Nostr y por qué lo usa SkateSpots?',
|
||
faq2Before: 'Nostr es un protocolo abierto para apps descentralizadas: piensa en él como el propio internet, sin dueño. Tu cuenta de SkateSpots es un par de claves criptográficas que',
|
||
faq2Strong: 'te pertenece',
|
||
faq2After: '. Ninguna empresa puede vetar tu cuenta ni retener tus datos como rehenes: tú eliges qué relays los guardan, e incluso puedes ejecutar el tuyo. Tu identidad también funciona en otras apps de Nostr como Primal, Damus o Amethyst.',
|
||
faq3Q: '¿Qué es un nsec y por qué es importante?',
|
||
faq3Before: 'Tu',
|
||
faq3Mid: 'es tu clave privada: es la única prueba de que la cuenta es tuya. A diferencia de las contraseñas, no existe',
|
||
faq3Strong: 'ningún "he olvidado mi contraseña"',
|
||
faq3After: '. Si pierdes tu nsec, tu cuenta desaparece para siempre. Al crear una cuenta, descarga tu copia inmediatamente y guárdala en un lugar seguro (un gestor de contraseñas o apuntada sin conexión).',
|
||
faq4Q: '¿Qué firmadores / apps funcionan con SkateSpots?',
|
||
faq4Desktop: 'En escritorio:',
|
||
faq4Extensions: 'extensiones del navegador.',
|
||
faq4Android: 'En Android:',
|
||
faq4AndroidAfter: '(la mejor experiencia con la app nativa).',
|
||
faq4Ios: 'En iOS:',
|
||
faq4IosAfter: 'o pega tu nsec directamente (menos seguro).',
|
||
faq4Note: 'También puedes iniciar sesión pegando tu nsec directamente, pero usar una extensión firmadora es más seguro.',
|
||
faq5Q: '¿Puedo usar SkateSpots en mi teléfono?',
|
||
faq5Before: '¡Sí! SkateSpots es una PWA (aplicación web progresiva). Visita',
|
||
faq5Mid: 'en el navegador de tu teléfono y toca',
|
||
faq5Em: '"Añadir a pantalla de inicio"',
|
||
faq5After: 'para tener la experiencia completa. O descárgala desde',
|
||
faq5End: ', una tienda de apps descentralizada.',
|
||
faq6Q: '¿Qué es un zap?',
|
||
faq6A: 'Un zap es una propina instantánea en Bitcoin enviada por la red Lightning. Cuando das un zap a un skater, los sats llegan a su cartera en segundos: sin PayPal, sin Venmo, sin comisiones. Quien grabó ese 4-stair cobra directamente de sus fans.',
|
||
faq7Q: '¿Se borrarán mis spots si SkateSpots cierra?',
|
||
faq7A: 'No. Tus spots se publican en relays de Nostr: servidores distribuidos que cualquiera puede ejecutar. Aunque SkateSpots como producto desapareciera mañana, tus datos seguirían existiendo en los relays y cualquier cliente de Nostr podría mostrarlos.',
|
||
faq8Q: '¿Puedo añadir un spot que está en propiedad privada?',
|
||
faq8A: 'Puedes, pero usa el sentido común. Los spots en propiedad privada deberían marcarse como tal para que los skaters sepan a qué atenerse. SkateSpots no se responsabiliza de allanamientos: respeta siempre a los propietarios y a los vecinos.',
|
||
faq9Q: '¿Cómo informo de un error o doy mi opinión?',
|
||
faq9Before: 'Envía un MD al equipo de SkateSpots directamente en Nostr, o contacta con nuestro coordinador beta:',
|
||
faq9Link: 'Comentarios beta → cordn.net',
|
||
readyToShred: '¿LISTO PARA DARLO TODO?',
|
||
stopScrolling: 'Deja de hacer scroll. Consigue la app. Encuentra un spot. Patínalo.',
|
||
exploreSpots: 'Explorar spots',
|
||
betaFeedbackTitle: 'Beta — Queremos tu opinión',
|
||
betaFeedbackDesc: 'SkateSpots está en desarrollo activo. Puede que te encuentres con asperezas: es culpa nuestra, no tuya. Informa de errores, sugiere funciones, dinos qué no te gusta.',
|
||
betaCoordinator: 'Coordinador beta',
|
||
betaCoordinatorDesc: 'cordn.net → escríbenos',
|
||
dmOnNostr: 'MD en Nostr',
|
||
fixSameDay: '¿Has encontrado un error? Lo arreglamos el mismo día. Tus informes mejoran la app para todos los skaters.',
|
||
relaySetup: 'Configuración de relays',
|
||
},
|
||
relayEdu: {
|
||
understandingNostr: 'Entender Nostr',
|
||
stepOf: 'Paso {{current}} de {{total}}',
|
||
step1Title: 'Entender los relays',
|
||
step1Desc: 'Piensa en los relays como tiendas de skate que comparten noticias sobre spots',
|
||
you: 'Tú',
|
||
relays: 'Relays',
|
||
skaters: 'Skaters',
|
||
s1Good1: 'Ninguna empresa es dueña de tu cuenta',
|
||
s1Good1Desc: 'Tu identidad vive en varios servidores relay',
|
||
s1Good2: 'Tú controlas dónde viven tus datos',
|
||
s1Good2Desc: 'Tus publicaciones se sincronizan entre los relays que elijas: escoge los tuyos o ejecuta uno tú mismo',
|
||
s1Warn: 'Los operadores de relays pueden ver las publicaciones públicas',
|
||
s1WarnDesc: 'Piensa en ello como publicar en un tablón de anuncios',
|
||
step2Title: 'Público vs privado',
|
||
step2Desc: 'Sabe qué es visible y qué está cifrado',
|
||
publicTitle: 'Público (cualquiera puede verlo)',
|
||
pub1: 'Spots que añades al mapa',
|
||
pub2: 'Reseñas y comentarios',
|
||
pub3: 'La información de tu perfil (nombre, foto)',
|
||
pub4: 'A quién sigues',
|
||
privateTitle: 'Privado (cifrado)',
|
||
priv1: 'Mensajes directos',
|
||
priv2: 'Comunicaciones de la cartera',
|
||
noteStrong: 'Nota:',
|
||
note: 'Las publicaciones pueden almacenarse de forma permanente en los relays. ¡Piénsalo antes de publicar, como en la vida real!',
|
||
step3Title: 'Tus claves = tu cuenta',
|
||
step3Desc: 'Esto es lo más importante que debes entender',
|
||
secretKeyTitle: 'Tu clave secreta (nsec)',
|
||
secretKeyDesc: 'Piénsala como tu tabla: no se la prestes a nadie. Demuestra que la cuenta es tuya.',
|
||
s3Bad1: 'Si la pierdes, tu cuenta no se puede recuperar',
|
||
s3Bad2: 'Sin "he olvidado la contraseña": nadie puede restablecerla',
|
||
s3Good: 'Haz una copia y guárdala de forma segura',
|
||
publicKeyTitle: 'Tu clave pública (npub)',
|
||
publicKeyDesc: 'Es como tu nombre de usuario: ¡compártela libremente para que otros te encuentren!',
|
||
inControl: '🔐 Tú tienes el control: ¡ninguna empresa puede bloquearte!',
|
||
skip: 'Omitir',
|
||
gotIt: '¡Entendido!',
|
||
},
|
||
about: {
|
||
seoTitle: 'Acerca de - SkateSpots',
|
||
seoDescription: 'Conoce SkateSpots y nuestra misión de construir una comunidad de skate descentralizada.',
|
||
npubCopied: 'npub copiado al portapapeles. Pégalo en tu cliente de Nostr favorito para enviar un MD.',
|
||
bugReport: '🐛 Informe de error',
|
||
bugWhatHappened: 'Qué ocurrió:',
|
||
bugExpected: 'Qué esperaba:',
|
||
bugSteps: 'Pasos para reproducirlo:',
|
||
aboutWord: 'ACERCA DE',
|
||
heroBefore: 'Conecta con escenas de skate locales de todo el mundo.',
|
||
skaterOwned: 'Datos propiedad de los skaters',
|
||
heroAfter: ', relays gestionados por la comunidad.',
|
||
viewStats: 'Ver estadísticas de la comunidad',
|
||
missionTitle: 'Nuestra misión',
|
||
mission1: 'SkateSpots ayuda a los skaters a descubrir spots, conectar con profesionales en El Lab y organizar sesiones, todo sin control corporativo. El skate real ocurre fuera de línea; esta herramienta solo te conecta con él.',
|
||
mission2: 'El conocimiento del skate debería vivir con la comunidad, no encerrado en apps corporativas. Por eso SkateSpots funciona sobre Nostr: un sistema basado en relays donde los skaters controlan sus propios datos, eligen qué relays los guardan e incluso pueden ejecutar el suyo. Ninguna empresa es dueña del mapa.',
|
||
whyNostr: '¿Por qué Nostr?',
|
||
why1Title: 'Controlado por la comunidad',
|
||
why1Desc: 'Tus spots viven en relays comunitarios. Los skaters ejecutan los servidores, no las corporaciones.',
|
||
why2Title: 'Tus datos son tuyos',
|
||
why2Desc: 'Tu identidad de Nostr es tuya. Llévala a cualquier app de Nostr, sin ataduras.',
|
||
why3Title: 'Integración con Bitcoin',
|
||
why3Desc: 'Da zaps a los creadores directamente con Bitcoin. Sin plataformas que se lleven el 30 %.',
|
||
why4Title: 'Código abierto',
|
||
why4Desc: 'Construido a la vista de todos. Cualquiera puede contribuir o bifurcar el código.',
|
||
getInvolved: 'Participa',
|
||
getInvolvedDesc: 'SkateSpots es código abierto y está impulsado por la comunidad. Contribuye con código, comparte spots o ayuda a otros a empezar.',
|
||
betaTitle: 'Pruebas beta',
|
||
betaDesc: '¡Querido usuario! Gracias por probar SkateSpots en beta. Ten en cuenta que la app sigue en beta y puede haber errores o problemas de seguridad. Si encuentras algún problema o quieres informar de un error, ¡escríbenos!',
|
||
giveFeedback: 'Danos tu opinión:',
|
||
copyNpub: 'Copiar npub',
|
||
reportBug: 'Informar de un error',
|
||
viewProfile: 'Ver perfil',
|
||
downloadApp: 'Descarga la app',
|
||
downloadAppDesc: 'Instala SkateSpots en Android vía Zapstore, la tienda de apps de código abierto y nativa de Bitcoin.',
|
||
getOnZapstore: 'Consíguela en Zapstore',
|
||
credits: 'Créditos',
|
||
creditPoweredBy: 'Funciona con',
|
||
creditNostr: 'Protocolo descentralizado',
|
||
creditCrewChat: 'Chat de crew vía',
|
||
creditCordn: 'Chat grupal cifrado de extremo a extremo',
|
||
creditEcash: 'Ecash vía',
|
||
creditCashu: 'Ecash chaumiano para Lightning',
|
||
creditWalletConnect: 'Conexión de cartera vía',
|
||
creditNwc: 'Nostr Wallet Connect (NIP-47)',
|
||
creditSigning: 'Firma en Android con',
|
||
creditAmber: 'Firmador de Nostr para Android',
|
||
creditMapData: 'Datos de mapa de Bitcoin de',
|
||
creditBtcmap: 'Lugares que aceptan Bitcoin',
|
||
creditCrowdfunding: 'Financiación colectiva',
|
||
creditAngor: 'Financiación colectiva descentralizada en Bitcoin',
|
||
creditDistributed: 'Distribuido en',
|
||
creditZapstore: 'Tienda de apps de código abierto',
|
||
creditTrust: 'Confianza y chat de crew vía',
|
||
creditContextvm: 'Puntuaciones de confianza de Relatr y coordinación de chat de crew cifrado',
|
||
stillQuestions: '¿Aún tienes preguntas?',
|
||
stillQuestionsDesc: 'El Sasquatch es nuestro guía de IA, con datos de SkateSpots en vivo. Pregúntale por spots, eventos, coaches, material o cómo funciona cualquier cosa.',
|
||
askSasquatch: 'Pregunta al Sasquatch',
|
||
poweredBy: 'Funciona con',
|
||
decentralized: 'Descentralizado',
|
||
communityOwned: 'Propiedad de la comunidad',
|
||
},
|
||
faq: {
|
||
seoTitle: 'FAQ - SkateSpots',
|
||
seoDescription: 'Pregúntale al Sasquatch lo que quieras sobre SkateSpots.',
|
||
greeting: '¡Hola! Soy el Sasquatch 🦧 — pregúntame lo que quieras sobre SkateSpots. Spots, eventos, material, carteras, privacidad, Nostr — estoy para ayudarte. ¿Qué quieres saber?',
|
||
gotQuestions: '¿Tienes preguntas?',
|
||
heroDesc: 'Pregúntale al Sasquatch: lo sabe todo sobre SkateSpots, Nostr, Bitcoin y el skate.',
|
||
askTitle: 'Pregunta al Sasquatch',
|
||
askDesc: 'El Sasquatch está abierto en la esquina inferior izquierda de tu pantalla: haz clic y escribe tu pregunta. Tiene acceso en vivo a spots, eventos, coaches y el tiempo.',
|
||
askQuestion: '¿En qué me puedes ayudar en SkateSpots?',
|
||
openSasquatch: 'Abrir el Sasquatch',
|
||
commonQuestions: 'Preguntas frecuentes — toca para preguntar',
|
||
quickAnswers: 'Respuestas rápidas',
|
||
footerHint: 'El Sasquatch usa datos de Nostr en vivo del relay de SkateSpots e IA para responder tus preguntas. 🛹',
|
||
chip1Label: '¿Qué es SkateSpots?',
|
||
chip1Q: '¿Qué es SkateSpots y cómo funciona?',
|
||
chip2Label: '¿Cómo añado un spot?',
|
||
chip2Q: '¿Cómo añado un spot de skate al mapa?',
|
||
chip3Label: '¿Qué son los zaps?',
|
||
chip3Q: '¿Qué son los zaps?',
|
||
chip4Label: '¿Es gratis?',
|
||
chip4Q: '¿SkateSpots es gratis?',
|
||
chip5Label: '¿Qué es Mi Stash?',
|
||
chip5Q: '¿Qué es Mi Stash?',
|
||
chip6Label: '¿Cómo inicio sesión?',
|
||
chip6Q: '¿Cómo inicio sesión o creo una cuenta?',
|
||
chip7Label: '¿Qué es Nostr?',
|
||
chip7Q: '¿Qué es Nostr?',
|
||
chip8Label: 'Privacidad y datos',
|
||
chip8Q: '¿Qué datos son públicos y qué datos son privados en SkateSpots?',
|
||
chip9Label: '¿Cómo vender material?',
|
||
chip9Q: '¿Cómo vendo material en SkateSpots?',
|
||
chip10Label: '¿Qué es El Lab?',
|
||
chip10Q: '¿Qué es El Lab?',
|
||
fact1Label: 'Spots de skate en todo el mundo',
|
||
fact1Value: 'Descubre y añade',
|
||
fact2Label: 'Zaps de Lightning en Bitcoin',
|
||
fact2Value: '100 % gratis',
|
||
fact3Label: 'Descentralizado en Nostr',
|
||
fact3Value: 'Tus datos son tuyos',
|
||
fact4Label: 'Inventario privado de material',
|
||
fact4Value: 'Stash cifrado',
|
||
s1Q: '¿Qué es SkateSpots?',
|
||
s1A: 'Un mapa y una comunidad descentralizados para el skate, construidos sobre Nostr. Descubre spots, encuentra coaches y filmers, únete a crews, publica eventos y compra/vende material, sin ninguna empresa en medio.',
|
||
s2Q: '¿Cómo añado un spot?',
|
||
s2A: 'Toca el mapa o usa el botón + / "Añadir spot", coloca un pin y rellena los detalles. Necesitas una cuenta gratuita de Nostr (toca Iniciar sesión → Crear cuenta, sin correo).',
|
||
s3Q: '¿Qué son los zaps?',
|
||
s3A: 'Los zaps son propinas en Lightning de Bitcoin. Puedes dar zaps a spots, eventos, crews y personas que aprecias. Van directos al destinatario por Lightning: SkateSpots nunca retiene tus fondos.',
|
||
s4Q: '¿Es gratis?',
|
||
s4A: 'Sí. Crear una cuenta, añadir spots y navegar son gratis. Los extras opcionales de pago (como los anuncios destacados) y las propinas (zaps) se pagan directamente entre personas.',
|
||
s5Q: '¿Qué datos son públicos?',
|
||
s5A: 'Todo lo que publicas (spots, eventos, tu perfil) es público en los relays de Nostr. Tus mensajes privados y tu Stash están cifrados de extremo a extremo. Consulta la página de Privacidad para más detalles.',
|
||
s6Q: '¿Qué es El Lab?',
|
||
s6A: 'El Lab es donde encuentras gente a la que contratar o de la que aprender: coaches, entrenadores, filmers, editores de vídeo, fotógrafos, constructores, artistas y más.',
|
||
},
|
||
privacy: {
|
||
seoTitle: 'Privacidad — SkateSpots',
|
||
seoDescription: 'Cómo trata SkateSpots tus datos: tu GPS se queda en tu dispositivo, los spots que publicas son públicos y cómo ocultar tu IP con una VPN o Tor si quieres.',
|
||
heroBefore: 'Tu',
|
||
heroHighlight: 'Privacidad',
|
||
heroDesc: 'Sin rastreo, sin anuncios, sin venta de datos. Aquí tienes exactamente qué se queda en tu dispositivo, qué es público y cómo protegerlo más si quieres.',
|
||
locationTitle: 'Tu ubicación se queda en tu dispositivo',
|
||
locationBefore: 'Cuando tocas',
|
||
nearMe: '"Cerca de mí",',
|
||
locationAfter: 'tu ubicación GPS se lee en tu dispositivo y solo se usa para centrar el mapa y ordenar los spots cercanos.',
|
||
locationGood1: 'Nunca se publica en Nostr.',
|
||
locationGood2: 'Nunca se envía a SkateSpots: no hay ningún servidor de SkateSpots que la recopile.',
|
||
locationGood3: 'Nunca se comparte con terceros.',
|
||
locationGood4: 'En la app nativa usamos directamente el sistema de ubicación de tu teléfono y nos saltamos los Servicios de Google Play, así que funciona en teléfonos sin Google (GrapheneOS, /e/OS) y Google nunca la ve.',
|
||
weatherBefore: 'El tiempo está desactivado por defecto. Cuando lo activas, consulta las condiciones de la ubicación pública del',
|
||
weatherEm: 'spot',
|
||
weatherAfter: ', no de la tuya.',
|
||
publicTitle: 'Qué es público por diseño',
|
||
publicDesc: 'SkateSpots es un mapa compartido, así que algunas cosas están pensadas para que las vea todo el mundo. Cuando eliges publicarlas, son públicas en la red Nostr:',
|
||
public1Strong: 'Los spots que añades',
|
||
public1: ', incluidas sus coordenadas. Si añades un spot en tu ubicación exacta, esa ubicación se vuelve pública. Piénsalo antes de poner un pin en tu propio garaje.',
|
||
public2Strong: 'Reseñas, comentarios y tu perfil público',
|
||
public2: '(nombre, foto).',
|
||
public3: 'A quién sigues y las reacciones públicas.',
|
||
public4Strong: 'Los zaps',
|
||
public4: 'son públicos por defecto: un zap vincula tu cuenta (a menudo tu dirección Lightning) con la publicación que pagaste y con la propia propina. Tu cartera puede enviarlo de forma anónima si prefieres que no.',
|
||
publicNoteBefore: 'Una VPN o Tor',
|
||
notWord: 'no',
|
||
publicNoteAfter: 'oculta el contenido de lo que publicas: las coordenadas de un spot son públicas igualmente. Las herramientas de privacidad ocultan tu identidad de red (tu IP), no las cosas que decides publicar.',
|
||
encryptedTitle: 'Qué es privado y está cifrado',
|
||
enc1Strong: 'Los mensajes directos',
|
||
enc1Mid: 'y',
|
||
enc1Strong2: 'los chats de crew',
|
||
enc1: 'están cifrados de extremo a extremo (NIP-17). Solo los participantes pueden leerlos.',
|
||
enc2Strong: 'Mi Stash',
|
||
enc2: ', tu inventario privado de material, está cifrado con tu propia clave.',
|
||
enc3Strong: 'Los miembros solo de crew',
|
||
enc3: 'pueden elegir ser visibles solo para sus compañeros de crew.',
|
||
ipTitle: 'Qué sale de tu dispositivo: tu IP',
|
||
ipBefore: 'Como en cualquier sitio web, los servidores con los que habla SkateSpots pueden ver tu',
|
||
ipAddress: 'dirección IP',
|
||
ipAfter: '(un indicador aproximado de tu región). Es normal en cualquier app web o de mapas y no es exclusivo nuestro. Esos servidores son:',
|
||
ipTileStrong: 'Teselas del mapa',
|
||
ipTile: '(OpenStreetMap): ven tu IP y qué zona del mapa miras.',
|
||
ipGeoStrong: 'Geocodificación de spots/tiendas',
|
||
ipGeo: ': cuando creas o editas un spot o una tienda, sus coordenadas van a Nominatim de OpenStreetMap para rellenar la etiqueta de ciudad/país. Cuando abres las Estadísticas comunitarias, las coordenadas de los pines sin etiqueta de ubicación van a BigDataCloud para agruparlos por región (se cachea en tu dispositivo, como máximo una vez por pin). Ambos ven tu IP. Son las coordenadas del pin que colocaste / pines públicos, nunca el GPS en vivo de tu dispositivo.',
|
||
ipPushStrong: 'Notificaciones en segundo plano',
|
||
ipPush: '(opcional): si las activas, un servidor push de SkateSpots ve que tu clave ha recibido algo y cuándo (nunca quién lo envió ni qué dice; los mensajes siguen cifrados), y el servicio push de tu SO (Google/Mozilla/Apple) entrega el aviso.',
|
||
ipBtcStrong: 'Lugares de Bitcoin',
|
||
ipBtc: '(BTCMap, cuando activas esa capa): ven tu IP y la zona que estás viendo.',
|
||
ipRelayStrong: 'Relays de Nostr',
|
||
ipRelay: ': ven tu IP cuando la app lee o publica.',
|
||
ipMintStrong: 'Cecas de Cashu',
|
||
ipMint: ': ven tu IP siempre que tu cartera envía, recibe o funde.',
|
||
ipRouteStrong: 'Indicaciones',
|
||
ipRoute: '(OSRM y Transitous para transporte público): reciben el inicio y el final de cualquier ruta que pides, no solo tu IP. El enrutado se queda en la app: tu origen y destino nunca se entregan a Google o Apple Maps.',
|
||
ipWeatherStrong: 'Tiempo',
|
||
ipWeatherMid: '(Open-Meteo, opcional) y',
|
||
ipUploadStrong: 'subida de imágenes',
|
||
ipWeather: '(Blossom), cuando los usas.',
|
||
ipAiStrong: 'IA del Sasquatch',
|
||
ipAi: ': tu mensaje va a nuestro propio servidor y luego al proveedor del modelo.',
|
||
ipLink1: 'Como envías tu clave pública (npub) en la misma conexión, un relay puede vincular tu IP contigo: no solo "alguien se conectó", sino "esta persona, desde esta dirección".',
|
||
ipShieldBefore: 'Una cosa que sí protegemos: el',
|
||
ipMintsStrong: 'directorio de cecas',
|
||
ipShieldAfter: 'se obtiene a través de nuestro servidor, así que MintRadar nunca ve tu IP.',
|
||
vpnTitle: '¿Quieres más privacidad? VPN o Tor (opcional)',
|
||
vpnDesc: 'Para la mayoría de skaters no es necesario, pero si quieres ocultar tu IP y tu ubicación aproximada a los servidores de arriba, tienes dos opciones gratuitas:',
|
||
vpnReputable: '🛡️ Una VPN de confianza',
|
||
vpnReputableDesc: 'Oculta tu IP tras los servidores de la VPN. Fácil y rápida. Usa una de pago y de confianza; las VPN gratis suelen monetizar tu tráfico, así que trata "gratis" como señal de alarma.',
|
||
torBrowser: '🧅 Navegador Tor',
|
||
torDesc: 'Gratis, máxima privacidad de IP, enruta por varios relays. Más lento: los mapas y algunos relays de Nostr pueden ir lentos o bloquear los nodos de salida de Tor. Ideal para los más precavidos.',
|
||
readThis: 'Lee esto para que no te engañen',
|
||
caveat1Before: 'Una VPN/Tor oculta tu',
|
||
ipWord: 'IP',
|
||
caveat1: ', no los spots que publicas. Un pin en tu casa es público uses o no una VPN.',
|
||
caveat2Before: 'No actives',
|
||
nearMeGps: '"Cerca de mí" / el GPS del navegador',
|
||
caveat2: 'si tu objetivo es mantenerte anónimo: un GPS preciso anula cualquier ocultación de IP.',
|
||
caveat3: 'Ninguna herramienta te hace totalmente "anónimo". Estas reducen lo que los servidores pueden inferir sobre tu ubicación de red; eso es todo.',
|
||
keysTitle: 'Tus claves, tu cuenta',
|
||
keysBefore: 'Tu cuenta es un par de claves criptográficas que te pertenece. La forma más segura de iniciar sesión es un',
|
||
signer: 'firmador',
|
||
keysAfter: '(Alby, nos2x o Amber en Android), para que tu clave secreta nunca se pegue en la app.',
|
||
keysCaveatBefore: 'Si pegas tu',
|
||
keysCaveatAfter: 'directamente, se guarda en tu navegador. Usa mejor una extensión firmadora cuando puedas y guarda tu copia del nsec en un lugar seguro sin conexión.',
|
||
footerBefore: '¿Preguntas? Pregúntale a',
|
||
sasquatchName: 'el Sasquatch',
|
||
footerMid: 'en la app, o lee la',
|
||
gettingStarted: 'guía de inicio',
|
||
about: 'Acerca de',
|
||
},
|
||
license: {
|
||
seoTitle: 'Licencia - SkateSpots',
|
||
seoDescription: 'Licencia de SkateSpots. Eres libre de patinar.',
|
||
tagline: 'Patina, gana, diviértete y gasta sats dondequiera que estés.',
|
||
copyright: 'Colaboradores de SkateSpots y la comunidad',
|
||
licenseLabel: 'Licencia',
|
||
freeLine1: 'ERES LIBRE',
|
||
freeLine2: 'DE PATINAR',
|
||
body: 'Este proyecto es abierto. Compártelo, bifurcalo, constrúyelo encima, patínalo. Las calles son de todos. Y este código también. Sigue patinando, diviértete, aprende trucos, apoya a los creadores y vuelve a patinar.',
|
||
builtBefore: 'Hecho con ❤️ sobre',
|
||
builtMid: '· Impulsado por',
|
||
lightning: 'Lightning de Bitcoin ⚡',
|
||
viewSource: 'Ver código fuente',
|
||
aboutSkateSpots: 'Acerca de SkateSpots',
|
||
supporters: 'Colaboradores',
|
||
},
|
||
glossary: {
|
||
seoTitle: 'Glosario de trucos · SkateSpots',
|
||
seoDescription: 'El glosario completo de skate: {{count}} entradas que cubren flips, grinds, slides, grabs, aéreos, trucos de lip, handplants, freestyle, términos de transición, postura y material, con nombres alternativos.',
|
||
heading: 'GLOSARIO DE TRUCOS',
|
||
subheading: '{{count}} entradas · trucos, transición, freestyle, postura y material',
|
||
searchPlaceholder: 'Busca trucos o apodos — tre flip, crooks, method…',
|
||
clearSearch: 'Borrar búsqueda',
|
||
all: 'Todos',
|
||
results: '{{count}} resultado{{s}} para',
|
||
noMatch: 'Ningún truco coincide. Prueba un apodo como “tre flip”, “crooks” o “melon”.',
|
||
tricksCount: '{{count}} trucos',
|
||
footerBefore: '¿Conoces algún truco o apodo que nos falte? Los trucos reciben nombres distintos en cada escena: escribe a',
|
||
sasquatch: 'el Sasquatch 🦧',
|
||
footerAfter: 'y cuéntanoslo.',
|
||
},
|
||
signers: {
|
||
seoTitle: 'Apps firmadoras - Protege tus claves de Nostr | SkateSpots',
|
||
seoDescription: 'Conoce las apps firmadoras que mantienen seguras tus claves de Nostr. Encuentra la mejor opción para Android, iOS o navegadores de escritorio.',
|
||
securityGuide: 'Guía de seguridad',
|
||
protect: 'Protege tus',
|
||
nostrKeys: 'claves de Nostr',
|
||
heroDesc: 'Las apps firmadoras mantienen tus claves privadas seguras firmando eventos sin exponerlas. En lugar de pegar tu clave en cada app, deja que un firmador lo haga de forma segura.',
|
||
whySignerStrong: '¿Por qué usar un firmador?',
|
||
whySigner: 'Tu clave privada de Nostr es como una contraseña que nunca se puede cambiar. Una app firmadora la mantiene a salvo y te deja usar cualquier app de Nostr.',
|
||
androidTitle: 'Firmadores para Android',
|
||
androidDesc: 'Apps firmadoras nativas para dispositivos Android, incluido GrapheneOS.',
|
||
iosTitle: 'Firmadores para iOS',
|
||
iosDesc: 'Opciones de firmador para usuarios de iPhone y iPad.',
|
||
browserTitle: 'Extensiones del navegador',
|
||
browserDesc: 'Extensiones de navegador de escritorio para firmar en apps web.',
|
||
recommended: 'Recomendado',
|
||
yourPlatform: 'Tu plataforma',
|
||
get: 'Obtener {{name}}',
|
||
protocolsTitle: 'Entender los protocolos',
|
||
nip07Desc: 'Estándar de extensión del navegador. La extensión inyecta capacidades de firma en las apps web. Lo usan Alby, nos2x, Flamingo y extensiones similares.',
|
||
nip46Desc: 'Protocolo de firma remota ("bunker"). Tu app firmadora aprueba las solicitudes de otras apps sin compartir tus claves. Lo usan Nsec.app, Nostria y Nowser.',
|
||
nip55Desc: 'Protocolo de firmador específico de Android. Las apps nativas pueden solicitar firmas a Amber sin exponer las claves. La experiencia Android más fluida.',
|
||
whichChoose: '¿Cuál elegir?',
|
||
chooseAndroid: 'Android:',
|
||
chooseAndroidDesc: 'Amber (NIP-55) para apps nativas',
|
||
chooseIos: 'iOS:',
|
||
chooseIosDesc: 'Nsec.app (NIP-46) para mayor compatibilidad',
|
||
chooseDesktop: 'Escritorio:',
|
||
chooseDesktopDesc: 'Alby, nos2x o Flamingo (NIP-07)',
|
||
amberDesc: 'Firmador nativo de Android centrado en la seguridad y la facilidad de uso. La mejor opción para usuarios de Android.',
|
||
nsecAppDesc: 'Firmador remoto multiplataforma que actúa como caja fuerte segura para tus claves.',
|
||
nostriaDesc: 'App firmadora remota con claves guardadas en el almacenamiento seguro del dispositivo.',
|
||
nowserDesc: 'Firmador multiautenticación compatible con extensión del navegador y protocolos de firma remota.',
|
||
nsecAppIosDesc: 'La mejor opción para iOS. Úsala como firmador remoto con cualquier cliente de Nostr.',
|
||
nowserTfDesc: 'Firmador para iOS disponible vía TestFlight con capacidades de firma similares a Android.',
|
||
nostriaIosDesc: 'Firmador remoto con almacenamiento seguro de claves en tu dispositivo.',
|
||
nos2xDesc: 'Extensión del navegador sencilla y fiable para firmar eventos de Nostr.',
|
||
albyDesc: 'Cartera Lightning de Bitcoin con gestión de claves de Nostr y WebLN integrados.',
|
||
flamingoDesc: 'Extensión del navegador centrada en Nostr con interfaz limpia.',
|
||
kiwiDesc: 'En Android/GrapheneOS, usa Kiwi Browser para cargar las extensiones nos2x o Alby.',
|
||
fNativeApp: 'App nativa',
|
||
fMultiKey: 'Soporte de varias claves',
|
||
fEventSigning: 'Firma de eventos',
|
||
fSecureStorage: 'Almacenamiento seguro de claves',
|
||
fRemoteSigning: 'Firma remota',
|
||
fAnyClient: 'Funciona con cualquier cliente',
|
||
fCrossDevice: 'Sincronización entre dispositivos',
|
||
fMultiKeySupport: 'Soporte multiusuario',
|
||
fNip07: 'Soporte NIP-07',
|
||
fNip46: 'Soporte NIP-46',
|
||
fFlexibleSigning: 'Firma flexible',
|
||
fNativeIos: 'App nativa para iOS',
|
||
fLightweight: 'Ligera',
|
||
fEasyToUse: 'Fácil de usar',
|
||
fChromeSupport: 'Compatible con Chrome/Brave/Edge',
|
||
fLightningPayments: 'Pagos Lightning',
|
||
fNostrSigning: 'Firma en Nostr',
|
||
fWebln: 'Soporte WebLN',
|
||
fNwc: 'Soporte NWC',
|
||
fCleanUi: 'Interfaz limpia',
|
||
fPrivacyFocused: 'Centrada en la privacidad',
|
||
fExtensionMobile: 'Soporte de extensiones en móvil',
|
||
fFullBrowser: 'Experiencia de navegador completa',
|
||
fGraphene: 'Funciona en GrapheneOS',
|
||
},
|
||
betaDisclaimer: {
|
||
title: 'Atención: esto es beta',
|
||
subtitle: 'Unas palabras antes de empezar.',
|
||
ossTitle: 'Código abierto y experimental',
|
||
ossBody: 'Construido en abierto por la comunidad. Curiosea, bifurcalo, rómpelo.',
|
||
betaTitle: 'En beta — sin auditar',
|
||
betaBody: 'El código aún no ha pasado una auditoría de seguridad formal. Los errores ocurren.',
|
||
moneyTitle: 'Maneja Bitcoin y Lightning reales',
|
||
moneyBody: 'Usa dinero con él bajo tu propio riesgo. Carga solo lo que puedas permitirte perder.',
|
||
finePrint: 'Sin garantía de ningún tipo. Eres el único responsable de tus fondos y claves.',
|
||
viewCode: 'Ver el código',
|
||
accept: 'Entendido, déjame entrar',
|
||
},
|
||
},
|
||
|
||
walletUi: {
|
||
page: {
|
||
title: 'Cartera',
|
||
subtitle: 'Bitcoin Lightning + Cashu',
|
||
manage: 'Gestionar',
|
||
getAWallet: 'Consigue una cartera',
|
||
learnPlanB: 'Aprende más en Plan B Academy',
|
||
walletMinibits: 'Cashu móvil · NWC',
|
||
walletAlby: 'Extensión del navegador · WebLN + NWC',
|
||
walletZeus: 'Lightning autocustodiado',
|
||
walletCoinos: 'Web · funciona en todas partes',
|
||
whatAreZaps: '¿Qué son los zaps?',
|
||
whatAreZapsShort: '¿Qué son los zaps?',
|
||
zapsDesc: 'Pagos instantáneos por Bitcoin Lightning. Envía sats a cualquier patinador, creador de spots o entrenador — sin intermediarios, sin comisión de plataforma.',
|
||
instant: 'Instantáneo',
|
||
instantDesc: 'Se liquida en segundos',
|
||
flexible: 'Flexible',
|
||
flexibleDesc: 'Tu cartera, tus claves',
|
||
private: 'Privado',
|
||
privateDesc: 'Cashu oculta quién paga',
|
||
direct: 'Directo',
|
||
directDesc: 'El valor va al creador',
|
||
loginRequired: 'Inicia sesión',
|
||
loginRequiredDesc: 'Inicia sesión con tu cuenta de Nostr para conectar tu cartera Lightning y empezar a enviar zaps.',
|
||
browseMints: 'Explorar mints de Cashu',
|
||
},
|
||
modal: {
|
||
walletName: 'Nombre de la cartera (opcional)',
|
||
walletNamePlaceholder: 'Mi cartera Lightning',
|
||
connectionUri: 'URI de conexión',
|
||
spendLimitTitle: 'Primero pon un límite de gasto',
|
||
spendLimitBody1: 'Esta cadena permite que SkateSpots pague facturas Lightning desde tu cartera. En tu app de cartera, dale a esta conexión un pequeño',
|
||
dailyBudget: 'presupuesto diario',
|
||
spendLimitBody2: '(por ejemplo, unos miles de sats) y habilita solo',
|
||
spendLimitBody3: 'Nunca pegues una conexión con presupuesto ilimitado. Puedes revocarla en tu cartera cuando quieras.',
|
||
addWallet: 'Añadir cartera',
|
||
nwcConnection: 'Conexión NWC',
|
||
lightningWallet: 'Cartera Lightning',
|
||
pasteNwc: 'Pega tu cadena de conexión NWC para enviar zaps',
|
||
connectWallet: 'Conectar cartera',
|
||
browserExtension: 'Extensión del navegador (WebLN)',
|
||
autoDetected: 'Se detecta automáticamente si está instalada',
|
||
ready: 'Lista',
|
||
notFound: 'No encontrada',
|
||
getNwcFrom: 'Consigue NWC en:',
|
||
connectionRequired: 'URI de conexión obligatoria',
|
||
connectionRequiredDesc: 'Introduce una URI de conexión NWC válida.',
|
||
activeChanged: 'Cartera activa cambiada',
|
||
activeChangedDesc: 'La cartera seleccionada ya está activa para los zaps.',
|
||
connectNwc: 'Conectar cartera NWC',
|
||
connectNwcDesc: 'Introduce tu cadena de conexión desde una cartera compatible.',
|
||
connect: 'Conectar',
|
||
connecting: 'Conectando...',
|
||
walletSettings: 'Ajustes de cartera',
|
||
connectDesc: 'Conecta tu cartera Lightning para enviar zaps al instante.',
|
||
},
|
||
cashu: {
|
||
title: 'Cartera Cashu',
|
||
desc: 'Cartera ecash integrada — sin configuración externa',
|
||
initializing: 'Iniciando cartera...',
|
||
walletError: 'Error de cartera',
|
||
balance: 'Saldo',
|
||
balanceAria: 'Saldo de la cartera {{amount}} sats',
|
||
activeMint: 'Mint activo',
|
||
selectMint: 'Elige un mint',
|
||
receive: 'Recibir',
|
||
send: 'Enviar',
|
||
receiveViaLightning: '⚡ Recibir por Lightning',
|
||
amountSats: 'Cantidad en sats',
|
||
generateInvoice: 'Generar factura',
|
||
generating: 'Generando…',
|
||
or: 'O',
|
||
receiveCashu: '🥜 Recibir token Cashu',
|
||
scanQr: 'Escanear QR',
|
||
pasteCashu: 'Pega un token Cashu (cashu...)',
|
||
receiveToken: 'Recibir token',
|
||
receiving: 'Recibiendo…',
|
||
createCashu: '🥜 Crear token Cashu',
|
||
createToken: 'Crear token',
|
||
creating: 'Creando…',
|
||
payInvoice: '⚡ Pagar factura Lightning',
|
||
pasteInvoice: 'Pega una factura Lightning (lnbc...)',
|
||
payInvoiceBtn: 'Pagar factura',
|
||
processing: 'Procesando...',
|
||
payAddress: '📧 Pagar dirección Lightning',
|
||
sendToAddress: 'Enviar a la dirección',
|
||
sending: 'Enviando…',
|
||
recentActivity: 'Actividad reciente',
|
||
receivedLightning: 'Recibido ⚡ Lightning',
|
||
sentLightning: 'Enviado ⚡ Lightning',
|
||
sentToken: 'Enviado 🥜 token',
|
||
receivedToken: 'Recibido 🥜 token',
|
||
whatIsCashu: '¿Qué es Cashu?',
|
||
whatIsCashuDesc: 'Cashu es dinero digital respaldado por Bitcoin Lightning. Piénsalo como tokens de Bitcoin que guardas en tu navegador.',
|
||
benefitOffline: 'Funciona sin conexión en los spots',
|
||
benefitInstant: 'Pagos entre iguales instantáneos',
|
||
benefitPrivacy: 'Centrado en la privacidad (los mints no pueden rastrearte)',
|
||
benefitRedeemable: 'Siempre canjeable por sats de Lightning',
|
||
findMints: 'Encuentra mints en mintradar.pedani.eu',
|
||
backupTitle: 'Haz copia de tu cartera',
|
||
backupDesc: 'Tu cartera está protegida con una frase de recuperación de 12 palabras. Guárdala a salvo — la necesitarás para restaurar tu saldo si borras los datos del navegador.',
|
||
viewRecovery: 'Ver frase de recuperación',
|
||
backupNote: 'Es como tu nsec de Nostr — ¡mantenlo en secreto y con copia de seguridad!',
|
||
tokenReceived: 'Token recibido',
|
||
tokenReceivedDesc: '¡Token Cashu canjeado correctamente!',
|
||
receiveFailed: 'Error al recibir',
|
||
unknownError: 'Error desconocido',
|
||
requestUnsupported: 'Solicitud Cashu aún no compatible',
|
||
requestUnsupportedDesc: 'Esta cartera aún no puede pagar una solicitud Cashu (creq) — pide una factura o dirección Lightning.',
|
||
onchainUnsupported: 'On-chain no compatible aquí',
|
||
onchainUnsupportedDesc: 'Eso es una dirección de Bitcoin. Esta cartera solo envía tokens Cashu y pagos Lightning.',
|
||
nostrProfile: 'Eso es un perfil de Nostr',
|
||
nostrProfileDesc: 'Escanea un token Cashu, una factura Lightning o una dirección Lightning para pagar.',
|
||
clinkUnsupported: 'Código de pago aún no compatible',
|
||
clinkUnsupportedDesc: 'Esta cartera aún no puede pagar códigos CLINK. Usa una factura o dirección Lightning.',
|
||
unrecognizedQr: 'Código QR no reconocido',
|
||
unrecognizedQrDesc: 'Escanea un token Cashu, una factura Lightning o una dirección Lightning.',
|
||
invalidAmount: 'Cantidad no válida',
|
||
invalidAmountDesc: 'Introduce una cantidad válida',
|
||
paymentSent: 'Pago enviado',
|
||
paymentSentDesc: 'Enviados {{amount}} sats a {{address}}',
|
||
paymentFailed: 'Pago fallido',
|
||
copied: 'Copiado',
|
||
copiedDesc: '{{label}} copiado al portapapeles',
|
||
receiveSats: 'Recibir {{amount}} sats',
|
||
payInvoiceHint: 'Paga esta factura desde cualquier cartera Lightning',
|
||
invoiceQrAlt: 'Código QR de la factura',
|
||
lightningInvoice: 'Factura Lightning',
|
||
invoiceLabel: 'Factura',
|
||
waiting: '⏳ Esperando el pago...',
|
||
tokenReady: 'Token listo para enviar',
|
||
shareToken: 'Comparte este token con el destinatario',
|
||
tokenQrAlt: 'Código QR del token',
|
||
cashuToken: 'Token Cashu',
|
||
tokenLabel: 'Token',
|
||
copyToken: 'Copiar token',
|
||
tokenWarning: 'Cualquiera con este token puede reclamarlo — ¡trátalo como efectivo!',
|
||
browser: {
|
||
title: 'Cartera ecash integrada',
|
||
appOnly: 'Solo app',
|
||
desc: 'Ecash Cashu autocustodiado, impulsado por Bitcoin Lightning',
|
||
unlockTitle: 'Desbloquea la cartera completa en la app de SkateSpots',
|
||
unlockDesc: 'La cartera ecash integrada te permite emitir, enviar y canjear tokens Cashu justo en el spot. Vive en la app nativa, donde puede hablar directamente con los mints — los navegadores aíslan esas conexiones por tu seguridad.',
|
||
zapTipTitle: 'Zap y propina — ya funciona en tu navegador',
|
||
zapTipDesc: 'Enviar sats a spots, eventos, entrenadores y crews funciona aquí mismo. Solo conecta una cartera Lightning abajo — Nostr Wallet Connect o una extensión como Alby. No hace falta ningún mint de Cashu.',
|
||
},
|
||
},
|
||
escrow: {
|
||
title: 'Depósito en garantía',
|
||
desc: 'Vende con seguridad: activa el depósito y el comprador podrá bloquear sus sats para ti en un trato. Los liberas al entregar — si no lo haces, el comprador puede recuperarlos pasado el tiempo acordado.',
|
||
active: 'Depósito activo',
|
||
publish: 'Activar depósito',
|
||
published: 'Depósito activo',
|
||
publishedDesc: 'Los compradores ya pueden bloquear fondos para ti en un trato.',
|
||
failed: 'No se pudo activar el depósito',
|
||
},
|
||
escrowSettings: {
|
||
title: 'Ajustes del depósito',
|
||
desc: 'Valores por defecto para tratos con depósito Cashu. Local del dispositivo.',
|
||
lockWindow: 'Plazo de bloqueo por defecto',
|
||
lockWindowHint: 'Cuánto tiempo quedan bloqueados los fondos antes de que el comprador pueda recuperarlos. Más largo es más seguro para el vendedor.',
|
||
days: 'días',
|
||
preferredMint: 'Mint para el depósito',
|
||
activeMint: 'Mint activo',
|
||
preferredMintHint: 'Qué mint financia el depósito. Usa uno de confianza.',
|
||
requireListings: 'Exigir depósito en anuncios nuevos',
|
||
requireListingsHint: 'Preselecciona «Exigir depósito» al publicar un artículo.',
|
||
},
|
||
privacy: {
|
||
title: 'Consejos de privacidad',
|
||
subtitle: 'Aprende a proteger tu privacidad financiera',
|
||
cashuRecommended: 'CASHU (Recomendado)',
|
||
anon: 'Transacciones anónimas',
|
||
blind: 'Las firmas ciegas ocultan la actividad',
|
||
noIp: 'Sin exposición de IP',
|
||
trustMint: 'Confía en el mint con fondos',
|
||
lightningAddress: 'DIRECCIÓN LIGHTNING',
|
||
linked: 'Se puede vincular a tu identidad',
|
||
traceable: 'Historial de pagos rastreable',
|
||
ipVisible: 'IP visible al facturar',
|
||
selfCustody: 'Autocustodia posible',
|
||
bestPractices: 'Buenas prácticas',
|
||
tip1Title: 'Usa Cashu para recibir propinas',
|
||
tip1Desc: 'La cartera Cashu integrada es la forma más privada de recibir zaps',
|
||
tip2Title: 'Usa una cartera aparte para SkateSpots',
|
||
tip2Desc: 'No uses tu cartera principal de ahorros — mantén los fondos de la app separados',
|
||
tip3Title: 'Considera usar VPN o Tor',
|
||
tip3Desc: 'Oculta tu dirección IP al hacer transacciones',
|
||
tip4Title: 'Evita direcciones Lightning vinculadas a tu identidad',
|
||
tip4Desc: 'Usa direcciones seudónimas no ligadas a tu nombre real',
|
||
proTip: 'Consejo pro:',
|
||
proTipDesc: 'Recibe los pagos primero en tu cartera Cashu y luego mueve periódicamente cantidades mayores a tu cartera personal usando una VPN para la transferencia.',
|
||
warnTitle: 'Nota de privacidad',
|
||
warnDesc: 'Las direcciones Lightning pueden vincular tu actividad en SkateSpots con tu identidad real.',
|
||
betterPrivacy: 'Para mejor privacidad:',
|
||
bullet1: 'Usa una cartera dedicada para esta app',
|
||
bullet2: 'Considera usar la cartera Cashu en su lugar',
|
||
bullet3: 'Usa VPN/Tor para las transacciones',
|
||
useCashu: 'Usar Cashu en su lugar',
|
||
understand: 'Lo entiendo',
|
||
},
|
||
mintPrivacy: {
|
||
title: 'Privacidad de mints',
|
||
desc: 'Usar varios mints mejora la privacidad al impedir que un solo mint vea todas tus transacciones',
|
||
distribution: 'Distribución de fondos',
|
||
singleWarning: 'Usar un solo mint significa que ese mint puede ver todos los importes y momentos de tus transacciones. Considera añadir más mints para mejor privacidad.',
|
||
yourMints: 'Tus mints ({{count}})',
|
||
default: 'Predeterminado',
|
||
addMint: 'Añadir mint',
|
||
addMintDesc: 'Añade un nuevo mint Cashu a tu cartera',
|
||
mintUrl: 'URL del mint',
|
||
add: 'Añadir',
|
||
adding: 'Añadiendo...',
|
||
orChoose: 'O elige de la lista',
|
||
recommended: 'Mints recomendados',
|
||
allMints: 'Todos los mints (directorio)',
|
||
searchMints: 'Buscar mints…',
|
||
noDirectoryMints: 'Ningún mint coincide con tu búsqueda.',
|
||
directoryHint: 'Del directorio comunitario MintRadar — no oficial y puede estar desactualizado.',
|
||
added: 'Añadido',
|
||
soon: 'Pronto',
|
||
autoDistribute: 'Distribuir fondos automáticamente',
|
||
autoDesc: 'Reparte los fondos recibidos entre varios mints',
|
||
autoAria: 'Distribuir fondos automáticamente (próximamente)',
|
||
tip1: 'Usa un mínimo de 2-3 mints distintos para mejor privacidad',
|
||
tip2: 'No guardes todos los fondos en un solo mint — repártelos',
|
||
tip3: 'Ten en cuenta la jurisdicción del mint (distintos países = distinto acceso legal)',
|
||
tip4: 'Los mints ven el momento de las transacciones pero NO a quién pagas (firmas ciegas)',
|
||
future: 'Próximas funciones: rotación de mints y puntuación de privacidad — ¡atento!',
|
||
findMore: 'Encuentra más mints en mintradar.pedani.eu',
|
||
trustWarning: 'Aviso de confianza:',
|
||
trustWarningDesc: 'Los mints son custodiales — guardan tus fondos. Usa solo mints en los que confíes. Si un mint desaparece, tus fondos pueden perderse. Repartir los fondos entre varios mints reduce el riesgo.',
|
||
removeTitle: '¿Quitar el mint?',
|
||
removeDesc: '¿Seguro que quieres quitar {{name}}?',
|
||
removeMint: 'Quitar mint',
|
||
warning: 'Aviso:',
|
||
withdrawWarning: 'Este mint tiene {{amount}} sats. ¡Retira tus fondos antes de quitarlo!',
|
||
invalidUrl: 'URL no válida',
|
||
invalidUrlDesc: 'La URL del mint debe empezar por https://',
|
||
mintAdded: 'Mint añadido',
|
||
mintAddedDesc: 'Nuevo mint añadido correctamente',
|
||
mintAddedNamed: '{{name}} añadido correctamente',
|
||
failedAdd: 'No se pudo añadir el mint',
|
||
failed: 'Falló',
|
||
noMints: 'Sin mints',
|
||
singleMint: 'Un solo mint',
|
||
concentrated: 'Concentrado',
|
||
moderate: 'Moderado',
|
||
wellDistributed: 'Bien distribuido',
|
||
mintCoinosWebDesc: 'Mint compatible con la web (recomendado para navegadores)',
|
||
mintMinibitsWebDesc: '⚠ Solo app nativa — no accesible desde navegadores',
|
||
mintMinibitsNativeDesc: 'Mint de SkateSpots — recomendado',
|
||
mintCoinosDesc: 'Mint compatible con la web',
|
||
mintLnbitsDesc: 'Mint comunitario en LNbits',
|
||
},
|
||
nwc: {
|
||
title: 'Cartera Lightning',
|
||
noConnection: 'Cartera NWC',
|
||
refresh: 'Actualizar saldo',
|
||
createInvoice: 'Crear factura',
|
||
copyInvoice: 'Copiar factura',
|
||
pasteInvoice: 'Pega una factura Lightning (lnbc…)',
|
||
amount: 'Importe: {{amount}} sats',
|
||
pasteToSee: 'Pega una factura para ver el importe',
|
||
pay: 'Pagar',
|
||
invoiceQrAlt: 'Código QR de la factura Lightning',
|
||
enterAmount: 'Introduce una cantidad en sats',
|
||
readBalanceFailed: 'No se pudo leer el saldo',
|
||
readBalanceFailedDesc: 'Tu cartera no respondió.',
|
||
createInvoiceFailed: 'No se pudo crear la factura',
|
||
createInvoiceFailedDesc: 'Inténtalo de nuevo en un momento.',
|
||
paymentSent: 'Pago enviado',
|
||
paidAmount: 'Pagados {{amount}} sats.',
|
||
paid: 'Pagado.',
|
||
paymentRejected: 'La cartera rechazó el pago.',
|
||
},
|
||
qr: {
|
||
title: 'Escanear código QR',
|
||
desc: 'Coloca el código QR dentro de la vista de la cámara para escanear',
|
||
paste: 'Pegar del portapapeles',
|
||
hint: 'Escanea un token Cashu, una factura Lightning o una dirección Lightning',
|
||
clipboardEmpty: 'Portapapeles vacío',
|
||
clipboardEmptyDesc: 'No se encontró texto en el portapapeles',
|
||
pasteFailed: 'Error al pegar',
|
||
pasteFailedDesc: 'No se pudo leer del portapapeles',
|
||
},
|
||
recovery: {
|
||
title: 'Frase de recuperación',
|
||
desc: 'Estas 12 palabras son la única forma de restaurar tu saldo ecash. Escríbelas en orden y guárdalas sin conexión — nunca las compartas con nadie.',
|
||
tapReveal: 'Toca para mostrar',
|
||
noWatching: 'Asegúrate de que nadie esté mirando',
|
||
hide: 'Ocultar',
|
||
reveal: 'Mostrar',
|
||
paperHint: 'Lo más seguro es escribirlo en papel — copiarlo al portapapeles puede filtrarse a otras apps.',
|
||
written: 'Ya lo he anotado',
|
||
revealFirst: 'Primero muestra las palabras',
|
||
copiedDesc: 'Frase de recuperación copiada — pégala en un lugar seguro y luego vacía el portapapeles.',
|
||
copyFailed: 'Error al copiar',
|
||
copyFailedDesc: 'Mejor escribe las palabras a mano.',
|
||
},
|
||
guide: {
|
||
quickGuide: 'Guía rápida',
|
||
fullGuide: 'Guía de carteras (edición patinador)',
|
||
cashuSummary: 'Privacidad + comodidad',
|
||
mintHoldsFunds: '(el mint guarda los fondos)',
|
||
lightningSummary: 'Control + seguridad',
|
||
youHoldKeys: '(tú tienes las claves)',
|
||
useBoth: 'Usa las dos: Cashu para propinas, Lightning para ahorros',
|
||
cashuTitle: 'CARTERA CASHU',
|
||
cashuTagline: 'Como efectivo en el bolsillo en el skatepark',
|
||
cashuBullet1: 'Rápida de sacar para una propina',
|
||
cashuBullet2: 'No lleves aquí todos tus ahorros',
|
||
cashuBullet3: 'Si el mint desaparece, los fondos podrían perderse',
|
||
cashuBullet4: 'Nadie sabe cuánto tienes (¡privacidad!)',
|
||
cashuPerfectFor: 'Aperitivos de sesión, zapear clips, propinas pequeñas',
|
||
lightningTitle: 'CARTERA LIGHTNING',
|
||
lightningTagline: 'Como tu cuenta bancaria — tú tienes el control',
|
||
lightningBullet1: 'Segura, tú controlas las claves',
|
||
lightningBullet2: 'Tarda un momento en configurarse',
|
||
lightningBullet3: 'Historial completo de transacciones',
|
||
lightningBullet4: 'Mejor para cantidades mayores',
|
||
lightningPerfectFor: 'Compras de material, ahorros, zaps grandes',
|
||
perfectFor: 'Perfecta para:',
|
||
proTips: 'CONSEJOS PRO',
|
||
tip1Title: 'Usa las dos carteras',
|
||
tip1Desc: 'Guarda el dinero de la sesión en Cashu y los ahorros en Lightning',
|
||
tip2Title: 'Prueba distintas carteras',
|
||
tip2Desc: 'Experimenta para encontrar la que te funcione. Cada una tiene funciones y ventajas distintas',
|
||
tip3Title: 'Mejor privacidad',
|
||
tip3Desc: 'Usar varias carteras significa que ninguna app ve toda tu actividad',
|
||
tip4Title: 'Gana experiencia',
|
||
tip4Desc: 'Cuantas más herramientas conozcas, más opciones tendrás. Empieza poco a poco y aprende sobre la marcha',
|
||
tldr: 'En resumen:',
|
||
tldrDesc: 'No hay una cartera "mejor" — depende de lo que necesites. Prueba las dos, usa la que te convenza y ¡no guardes todos tus sats en un solo sitio!',
|
||
},
|
||
zap: {
|
||
count: '{{count}} zaps',
|
||
connectFirst: 'Conecta primero tu cartera',
|
||
connectFirstDesc: 'Para enviar zaps (propinas en Bitcoin) necesitas conectar una cartera Lightning.',
|
||
quickSetup: 'Configuración rápida (30 segundos)',
|
||
quickSetupDesc: 'Conecta tu cartera Lightning actual con Nostr Wallet Connect (NWC). No hacen falta cuentas adicionales.',
|
||
connectNwc: 'Conectar cartera con NWC',
|
||
noWallet: '¿No tienes cartera? Aprende cómo',
|
||
skip: 'Omitir por ahora (factura manual)',
|
||
note: 'ℹ️ Nota:',
|
||
noteDesc: 'Aún puedes crear una factura sin conectar una cartera, pero tendrás que copiarla manualmente para pagar.',
|
||
payWithWebln: 'Pagar con WebLN',
|
||
processing: 'Procesando...',
|
||
openInWallet: 'Abrir en la cartera Lightning',
|
||
scanHint: 'Escanea el código QR o copia la factura para pagar con cualquier cartera Lightning.',
|
||
cashuInstant: 'Paga al instante con tu cartera integrada',
|
||
satsAvailable: 'sats disponibles',
|
||
or: 'O',
|
||
customAmount: 'Cantidad personalizada',
|
||
addComment: 'Añade un comentario (opcional)',
|
||
insufficientBanner: '⚠️ Saldo Cashu insuficiente. Te faltan {{amount}} sats. Cambia a Lightning o recarga tu cartera Cashu.',
|
||
creatingInvoice: 'Creando factura...',
|
||
zapAmount: 'Zap de {{amount}} sats',
|
||
zapAmountCashu: 'Zap de {{amount}} sats con Cashu',
|
||
lightningInvoice: 'Factura Lightning',
|
||
qrAlt: 'Código QR de la factura Lightning',
|
||
enterAmount: 'Introduce una cantidad',
|
||
enterAmountDesc: 'Elige un valor predefinido o escribe un número válido de sats.',
|
||
cashuUnavailable: 'Cartera Cashu no disponible',
|
||
cashuUnavailableDesc: 'Tu cartera Cashu no está lista. Cambia a Lightning o abre primero tu cartera.',
|
||
insufficientCashu: 'Saldo Cashu insuficiente',
|
||
insufficientCashuDesc: 'Te faltan {{amount}} sats. Cambia a Lightning o recarga.',
|
||
zapSentCashu: '¡Zap enviado! 🥜',
|
||
zapSentCashuDesc: 'Zapeados {{amount}} sats desde tu cartera Cashu.',
|
||
cashuFailed: 'Pago con Cashu fallido',
|
||
cashuFailedDesc: 'No se pudo pagar con tu cartera Cashu.',
|
||
invoiceCopied: 'Factura copiada',
|
||
invoiceCopiedDesc: 'Factura Lightning copiada al portapapeles',
|
||
defaultComment: '¡Zapeado en SkateSpots! 🛹',
|
||
titleConnect: 'Conectar cartera',
|
||
titlePayment: 'Pago Lightning',
|
||
titleZap: 'Enviar un zap',
|
||
descConnect: 'Conecta tu cartera Lightning para enviar zaps',
|
||
descPayment: 'Paga con la red Bitcoin Lightning',
|
||
descZap: 'Los zaps son pequeños pagos en Bitcoin que apoyan al creador de este contenido. Si te ha gustado, ¡considera enviar un zap!',
|
||
descZapShort: 'Los zaps son pequeños pagos en Bitcoin que apoyan a los creadores. ¡Considera enviar un zap!',
|
||
},
|
||
zapCrew: {
|
||
title: 'Zapear al crew',
|
||
desc: 'Reparte un zap a partes iguales entre {{count}} miembros del crew con dirección Lightning.',
|
||
noMembers: 'No hay otros miembros del crew a los que zapear ahora mismo.',
|
||
totalAmount: 'Cantidad total',
|
||
customTotal: 'Total personalizado',
|
||
each: 'sats cada uno',
|
||
rounded: '(redondeado)',
|
||
noWallet: 'No hay cartera conectada — recibirás una factura por miembro para pagar a mano. Conecta una cartera para repartir con un toque.',
|
||
zapAcross: 'Zap de {{amount}} sats entre {{count}}',
|
||
sentTo: '⚡ Enviado a {{done}}/{{total}}',
|
||
none: 'No se completó ningún pago automático',
|
||
copyPending: 'Copia las facturas pendientes para terminar de pagar a mano.',
|
||
thanks: '¡Gracias por apoyar al crew!',
|
||
payingCrew: 'Pagando al crew…',
|
||
defaultComment: '¡Zapeé al crew {{crew}}! 🤘',
|
||
sent: 'Enviado',
|
||
paying: 'Pagando',
|
||
resolving: 'Resolviendo',
|
||
skipped: 'Omitido',
|
||
failed: 'Falló',
|
||
waiting: 'En espera',
|
||
copyInvoice: 'Copiar factura',
|
||
invoiceCopied: 'Factura copiada',
|
||
invoiceCopiedDesc: 'Pégala en cualquier cartera Lightning',
|
||
},
|
||
zapBadges: {
|
||
title: 'Insignias de zaps',
|
||
zaps: 'zaps',
|
||
satsSent: 'sats enviados',
|
||
rank: 'puesto',
|
||
footnote: 'Basado en los últimos 30 días de zaps.',
|
||
first: 'Primer zap',
|
||
firstHint: 'Envía tu primer zap',
|
||
regular: 'Habitual',
|
||
regularHint: 'Envía 10 zaps',
|
||
generous: 'Generoso',
|
||
generousHint: 'Envía 10.000 sats',
|
||
patron: 'Mecenas',
|
||
patronHint: 'Envía 100.000 sats',
|
||
top10: 'Top 10',
|
||
top10Hint: 'Entra en el top 10 de patrocinadores',
|
||
},
|
||
trust: {
|
||
mute: 'Silenciar',
|
||
muted: 'Silenciado',
|
||
mutedDesc: 'No veras su contenido.',
|
||
muteFailed: 'No se pudo silenciar. Intentalo de nuevo.',
|
||
loginToMute: 'Inicia sesion para silenciar.',
|
||
attributedNetwork: 'De personas de tu red',
|
||
attributedProviderHouse: 'Del proveedor de confianza de la comunidad',
|
||
attributedProviderCustom: 'Del proveedor que elegiste',
|
||
howItWorks: 'Cómo funciona la confianza',
|
||
flaggedNoticeTitle: 'Reportada por patinadores de confianza',
|
||
flaggedNoticeDesc: 'Ten cuidado. Personas de confianza de la red han reportado esta cuenta.',
|
||
flaggedReporterFollow: '{{count}} que sigues',
|
||
flaggedReporterNetwork: '{{count}} de tu red',
|
||
flaggedReporterOther: '{{count}} otras cuentas',
|
||
flaggedReport: 'Reportar',
|
||
flaggedDismiss: 'Descartar',
|
||
bucketVerified: 'Verificado',
|
||
bucketUnknown: 'Desconocido',
|
||
bucketFlagged: 'Marcado',
|
||
bucketVerifiedDesc: 'Alguien de tu red respalda esta cuenta.',
|
||
bucketUnknownDesc: 'Nadie de tu red ha respaldado esta cuenta todavía.',
|
||
bucketFlaggedDesc: 'Personas de confianza han reportado esta cuenta.',
|
||
reportedByTrusted: 'Reportada por {{count}} personas de confianza',
|
||
unavailable: 'Puntuación de confianza no disponible',
|
||
yourContent: 'Esto es tu contenido',
|
||
following: 'Sigues a este usuario',
|
||
friendOfFriend: 'Amigo de un amigo (2 saltos)',
|
||
nip05: 'Usuario verificado con NIP-05',
|
||
unknown: 'Usuario desconocido',
|
||
help: 'Las puntuaciones de confianza ayudan a identificar colaboradores fiables en la comunidad de skate.',
|
||
},
|
||
share: {
|
||
title: 'Compartir perfil',
|
||
desc: 'Apunta con la cámara del móvil al código para abrir el perfil de {{name}}.',
|
||
qrAlt: 'Código QR del perfil',
|
||
copyLink: 'Copiar enlace',
|
||
copyFailed: 'Error al copiar',
|
||
copyFailedDesc: 'No se pudo copiar el enlace.',
|
||
shareEllipsis: 'Compartir…',
|
||
},
|
||
addToCollection: {
|
||
title: 'Guardar en colección',
|
||
desc: 'Guarda "{{spot}}" en una de tus colecciones',
|
||
loginRequired: 'Inicia sesión para guardar spots en colecciones',
|
||
noCollections: 'Aún no tienes ninguna colección',
|
||
createFirst: '¡Crea la primera abajo!',
|
||
spotCount: '{{count}} spots',
|
||
alreadySavedTag: 'Ya guardado',
|
||
alreadySaved: 'Ya guardado',
|
||
alreadySavedDesc: '“{{spot}}” ya está en “{{collection}}”',
|
||
saved: '¡Spot guardado!',
|
||
savedDesc: 'Añadido "{{spot}}" a "{{collection}}"',
|
||
saveFailed: 'No se pudo guardar',
|
||
somethingWrong: 'Algo salió mal',
|
||
created: '¡Colección creada!',
|
||
createdDesc: 'Añadido "{{spot}}" a tu nueva colección "{{collection}}"',
|
||
createFailed: 'No se pudo crear la colección',
|
||
name: 'Nombre de la colección',
|
||
descriptionOptional: 'Descripción (opcional)',
|
||
creating: 'Creando...',
|
||
createAndSave: 'Crear y guardar',
|
||
createNew: 'Crear nueva colección',
|
||
},
|
||
collection: {
|
||
back: 'Volver a colecciones',
|
||
created: 'Creada {{date}}',
|
||
deleteTitle: '¿Eliminar la colección?',
|
||
deleteDesc: 'Esto eliminará permanentemente "{{title}}". Los spots en sí no se verán afectados.',
|
||
deleting: 'Eliminando...',
|
||
deleteFailed: 'No se pudo eliminar la colección',
|
||
deleted: 'Colección eliminada',
|
||
deletedDesc: '"{{title}}" se ha eliminado',
|
||
empty: 'No hay spots en esta colección',
|
||
emptyOwner: 'Añade spots a tu colección pulsando "Guardar en colección" en cualquier spot',
|
||
emptyOther: 'Esta colección está vacía',
|
||
browseSpots: 'Explorar spots',
|
||
linkCopied: '¡Enlace copiado!',
|
||
linkCopiedDesc: 'El enlace de la colección se ha copiado al portapapeles',
|
||
map: 'Mapa de la colección',
|
||
removeFailed: 'No se pudo quitar el spot',
|
||
shareText: 'Mira esta colección de spots: {{title}}',
|
||
spotRemoved: 'Spot quitado',
|
||
spotRemovedDesc: '"{{title}}" se ha quitado de esta colección',
|
||
},
|
||
mints: {
|
||
title: 'Mints',
|
||
subtitle: 'Explora mints de Cashu y su estado. Las operaciones de la cartera Cashu se ejecutan en la app de SkateSpots.',
|
||
searchPlaceholder: 'Busca mints por nombre o URL…',
|
||
onlineOnly: 'Solo en línea',
|
||
count: '{{filtered}} de {{total}} mints',
|
||
directoryError: 'No se pudo cargar el directorio de mints.',
|
||
directoryHint: 'El directorio lo mantiene la comunidad y tiene límite de peticiones — puede no estar disponible un momento.',
|
||
goToWallet: 'Ir a la cartera',
|
||
appOnly: 'Añadir un mint se hace en la app de SkateSpots (Cashu es solo para la app).',
|
||
noMatch: 'Ningún mint coincide con “{{query}}”.',
|
||
footer: 'Datos de estado del proyecto comunitario MintRadar — no oficiales y pueden estar desactualizados. Revisa siempre los términos de un mint antes de confiarle fondos.',
|
||
archived: 'Archivado',
|
||
degraded: 'Degradado',
|
||
offline: 'Sin conexión',
|
||
online: 'En línea',
|
||
terms: 'Términos',
|
||
reliability: 'fiabilidad',
|
||
add: 'Añadir',
|
||
addToWallet: 'Añadir a la cartera',
|
||
copyUrl: 'Copiar URL',
|
||
openMint: 'Abrir mint',
|
||
inWallet: 'En tu cartera',
|
||
addedBadge: 'Añadido',
|
||
urlCopied: 'URL del mint copiada',
|
||
added: 'Mint añadido',
|
||
addedDesc: '{{host}} ya está en tu cartera.',
|
||
couldNotAdd: 'No se pudo añadir el mint',
|
||
communityRating: 'Valoración de la comunidad',
|
||
reliabilityLabel: 'Fiabilidad',
|
||
uptime: 'Tiempo activo 24 h / 7 d',
|
||
location: 'Ubicación',
|
||
latency: 'Latencia',
|
||
nuts: 'NUTs compatibles',
|
||
units: 'Unidades',
|
||
version: 'Versión',
|
||
ratedBy: 'Valorado {{rating}}/5 por {{count}} personas en MintRadar.',
|
||
noRating: 'Aún no hay valoración de la comunidad en MintRadar.',
|
||
reviewsNote1: 'Las reseñas escritas no forman parte del directorio —',
|
||
openMintRadar: 'abre MintRadar',
|
||
reviewsNote2: 'para leer o dejar una.',
|
||
liveness: 'Auditoría de actividad: {{mints}} mints y {{melts}} melts probados',
|
||
livenessErrors: ' · {{errors}}/{{total}} errores recientes',
|
||
whatsAMint: '¿Qué es un mint?',
|
||
whatsAMintDesc: 'Un mint de Cashu emite y canjea el ecash de tu cartera. Guarda el Bitcoin que respalda tus tokens — así que un mint que no gestionas tú es uno en el que tienes que confiar.',
|
||
mintWarning: 'Los mints pueden caerse, cambiar sus términos o desaparecer con los fondos. Mantén solo saldos pequeños salvo que confíes en el operador.',
|
||
healthDisclaimer: 'Los datos de estado los mantiene la comunidad (MintRadar) — no oficiales y posiblemente desactualizados.',
|
||
},
|
||
appShop: {
|
||
title: 'Tienda de la app',
|
||
subtitle: 'Merch de SkateSpots para quien mantiene la escena en marcha.',
|
||
comingSoon: 'Muy pronto',
|
||
wearThe: 'Viste la',
|
||
scene: 'Escena',
|
||
heroDesc1: 'Merch para quien mantiene esto rodando — se vende',
|
||
locally: 'en local, bajo pedido',
|
||
heroDesc2: '. Me escribes, concretamos los detalles y pagas en',
|
||
heroDesc3: '— Lightning o Cashu — cuando lo recojas. Sin tarjetas, sin cuentas, sin robot de pago, sin intermediarios que se lleven tajada.',
|
||
requestItem: 'Pide un artículo',
|
||
dmHint: 'Abre un DM privado y cifrado conmigo.',
|
||
lightning: 'Lightning',
|
||
cashu: 'Cashu',
|
||
localHandover: 'Entrega en local',
|
||
inTheWorks: 'En preparación',
|
||
notForSale: 'aún no a la venta',
|
||
soon: 'pronto',
|
||
tees: 'Camisetas y sudaderas',
|
||
decks: 'Tablas',
|
||
shopTools: 'Herramientas de tienda',
|
||
stickerPacks: 'Packs de pegatinas',
|
||
stickerPacksDesc: 'Los packs están en camino. Los diseños no — imprime estos dos ahora mismo, gratis.',
|
||
sticker: 'Pegatina',
|
||
stickerTip: 'Troquelada en negro. Imprime en papel de pegatina y recorta por el borde negro.',
|
||
poster: 'Póster',
|
||
posterTip: 'Se imprime en A3; reduce a A4 (50%) y sigue escaneándose bien.',
|
||
printableAlt: 'SkateSpots {{title}} — imprimible',
|
||
print: 'Imprimir',
|
||
printNote1: 'Imprime al',
|
||
actualSize: '100% / “Tamaño real”',
|
||
printNote2: 'para que el tamaño sea exacto y el QR siga nítido — apunta a skate-spots.org. Son archivos vectoriales, así que escalan sin pixelarse.',
|
||
howBuying: 'Cómo funciona la compra',
|
||
dmNotCart: 'es un DM, no un carrito',
|
||
step1Title: 'Escríbeme',
|
||
step1Desc: 'Manda un DM con lo que quieres — artículo, talla, color, lo que sea.',
|
||
step2Title: 'Lo concretamos',
|
||
step2Desc: 'Precio en sats y dónde y cuándo quedar. Es una conversación, no un pago automático.',
|
||
step3Title: 'Paga en sats',
|
||
step3Desc: 'Lightning o Cashu en la entrega, y ya es tuyo. Sin envíos, sin salas de espera.',
|
||
},
|
||
newsletter: {
|
||
newIssue: 'Nuevo número',
|
||
composerTitle: 'Publicar un número del boletín',
|
||
composerDesc: 'Se publica como artículo NIP-23 (kind 30023) en el relé comunitario. Los suscriptores lo reciben en su campana de notificaciones. El cuerpo admite Markdown.',
|
||
fieldTitle: 'Título',
|
||
identifier: 'Identificador (slug)',
|
||
leaveBlank: 'déjalo en blanco para generarlo solo',
|
||
reusingSlug: 'Reutilizar un slug existente edita ese número en vez de crear uno nuevo.',
|
||
summary: 'Resumen',
|
||
optional: 'opcional',
|
||
coverImage: 'URL de la imagen de portada',
|
||
bodyMarkdown: 'Cuerpo (Markdown)',
|
||
characters: '{{count}} caracteres',
|
||
publishIssue: 'Publicar número',
|
||
issuePublished: '¡Número publicado! 🛹',
|
||
issuePublishedDesc: 'Los suscriptores lo verán en su campana de notificaciones.',
|
||
publishFailed: 'Error al publicar',
|
||
couldNotReachRelay: 'No se pudo alcanzar ningún relé — revisa tu conexión e inténtalo de nuevo.',
|
||
tryAgain: 'Inténtalo de nuevo.',
|
||
publishedToNostr: 'Publicado en Nostr',
|
||
publishedToast: '¡Publicado!',
|
||
postedToNostr: 'Drop {{number}} publicado en Nostr.',
|
||
postToNostr: 'Publicar en Nostr',
|
||
previewLabel: 'Vista previa',
|
||
editFirst: 'Editar primero',
|
||
previewNoteDesc: 'Así se verá la nota en la mayoría de clientes de Nostr. El formato varía según el cliente.',
|
||
editNoteDesc: 'Edita el texto de la nota abajo. Los cambios solo afectan a esta publicación — el archivo original no cambia.',
|
||
dropNumber: 'Drop {{number}}',
|
||
publish: 'Publicar',
|
||
publishing: 'Publicando...',
|
||
dropIsOut: 'Ha salido el drop {{number}}',
|
||
daysAgo: 'hace {{count}} d',
|
||
dismiss: 'Descartar',
|
||
itsMonday: 'Es lunes',
|
||
mondayDesc: 'Hora de lanzar el boletín semanal. Un clic y la IA lo escribe desde el git log.',
|
||
writeDrop: 'Escribir el drop {{number}}',
|
||
dismissReminder: 'Descartar recordatorio',
|
||
loginPrompt: 'Inicia sesión con Nostr para recibir los nuevos drops en tu buzón.',
|
||
subscribedToast: '¡Estás suscrito! 🛹',
|
||
subscribedToastDesc: 'Los nuevos drops llegarán a tu campana de notificaciones en "News".',
|
||
unsubscribed: 'Suscripción cancelada',
|
||
unsubscribedDesc: 'Aún puedes leer todos los números aquí cuando quieras.',
|
||
checking: 'Comprobando…',
|
||
subscribed: 'Suscrito',
|
||
unsubscribe: 'Cancelar suscripción',
|
||
subscribeCta: 'Suscríbete al boletín',
|
||
archiveSynced: 'Archivo sincronizado con Nostr',
|
||
missingCount: '{{count}} números del archivo aún no están en Nostr',
|
||
backfillDesc: 'Publica {{list}} como artículos NIP-23 para que suscriptores y lectores de formato largo vean el archivo completo. La página conserva su diseño enriquecido igualmente.',
|
||
backfill: 'Sincronizar {{count}} en Nostr',
|
||
publishing2: 'Publicando…',
|
||
publishingLabel: 'Publicando…',
|
||
backfilled: 'Sincronizados {{count}} números 🛹',
|
||
backfilledDesc: 'El archivo ya vive en Nostr para suscriptores y lectores.',
|
||
partialBackfill: 'Publicados {{published}}, {{failed}} fallidos',
|
||
retryFinish: 'Reintenta para terminar: {{list}}.',
|
||
notLoggedIn: 'No has iniciado sesión',
|
||
allIssues: 'Todos los números',
|
||
brand: 'Boletín de SkateSpots',
|
||
digTheDrop: '¿Te mola el drop? Zapea y no te pierdas el siguiente.',
|
||
sectionStats: 'La comunidad en cifras',
|
||
sectionWhatsNew: 'Novedades',
|
||
sectionSpotOfWeek: 'Spot de la semana',
|
||
sectionCommunity: 'Comunidad',
|
||
sectionSupport: 'Apoya el proyecto',
|
||
sectionLatestDrops: 'Últimos drops · En directo desde Nostr',
|
||
mappedBy: 'Mapeado por',
|
||
viewOnMap: 'Ver en el mapa',
|
||
noSpotPicked: 'Esta semana no hay spot elegido. ¡Manda el tuyo y puede salir en el próximo drop!',
|
||
browseMap: 'Explorar el mapa',
|
||
spotMap: 'Mapa de spots',
|
||
statsBadge: 'Estadísticas',
|
||
supportDesc: '100% código abierto, financiado por la comunidad, sin anuncios, sin inversores. Si te resulta útil, zapea o apóyalo en Angor.',
|
||
readFull: 'Leer el número completo',
|
||
joinSkaters: 'Únete a {{count}} patinadores que reciben los drops',
|
||
weeklyDrops: 'Drops semanales',
|
||
tagline: 'Un boletín semanal · publicado cuando nos dé la gana',
|
||
freeNote: 'Gratis. Con la tecnología de Nostr — tu suscripción vive en tus claves y te sigue entre dispositivos. Los nuevos drops llegan a tu campana de notificaciones.',
|
||
live: 'En directo',
|
||
builtOn: 'Hecho con',
|
||
openSource: 'Código abierto',
|
||
supportUs: 'Apóyanos',
|
||
freeToSkate: 'Eres libre de patinar',
|
||
},
|
||
stats: {
|
||
subtitle: 'Métricas en directo sacadas directamente de la red Nostr. Transparentes, descentralizadas y verificables por cualquiera.',
|
||
dataSource: 'Fuente de datos:',
|
||
updated: 'actualizado {{age}}',
|
||
refresh: 'Actualizar',
|
||
partial: 'No se pudo alcanzar todos los relés — estas cifras pueden estar incompletas.',
|
||
error: 'No se pudo alcanzar el relé ahora mismo. Las estadísticas se cargarán cuando vuelva la conexión.',
|
||
atAGlance: 'La comunidad de un vistazo',
|
||
skateSpots: 'Skate spots',
|
||
listedShops: 'Tiendas listadas',
|
||
events: 'Eventos',
|
||
mappers: 'Mapeadores',
|
||
uniqueContributors: 'colaboradores únicos',
|
||
labHeader: 'The Lab · Creadores y servicios',
|
||
total: '{{count}} en total',
|
||
coaches: 'Entrenadores',
|
||
filmers: 'Filmers',
|
||
editors: 'Editores',
|
||
photographers: 'Fotógrafos',
|
||
builders: 'Constructores',
|
||
artists: 'Artistas',
|
||
graffiti: 'Graffiti',
|
||
tattoo: 'Tatuaje',
|
||
trainers: 'Preparadores',
|
||
musicians: 'Músicos',
|
||
judges: 'Jueces',
|
||
organizers: 'Organizadores',
|
||
barbers: 'Barberos',
|
||
showFewer: 'Mostrar menos',
|
||
showAllCrafts: 'Mostrar los 13 oficios',
|
||
community: 'Comunidad',
|
||
tours: 'Rutas',
|
||
crews: 'Crews',
|
||
marketplace: 'Mercado',
|
||
liveListings: 'Anuncios activos',
|
||
tradesRecorded: 'Intercambios registrados',
|
||
satsTraded: 'Sats intercambiados',
|
||
zapsToMappers: 'Zaps a mapeadores',
|
||
tradesNote1: 'intercambios mutuos entre',
|
||
tradesNote2: 'personas. Los sats los declaran los propios comerciantes — la app no puede observar un pago fuera de ella — así que el titular solo cuenta intercambios',
|
||
mutual: 'mutuos',
|
||
tradesNote3: 'con un tope por pareja; la cifra declarada en bruto es',
|
||
tradesNote4: 'sats. "Zaps a mapeadores" solo cuenta recibos dirigidos a nuestros principales colaboradores —',
|
||
not: 'no',
|
||
tradesNote5: 'es el volumen global de zaps.',
|
||
byRegion: 'Spots y tiendas por región',
|
||
resolving: 'Resolviendo {{count}} ubicaciones sin etiqueta a partir de sus coordenadas… una vez, luego se guarda en caché en este dispositivo.',
|
||
topCountries: 'Países principales',
|
||
topCities: 'Ciudades principales',
|
||
other: 'Otros',
|
||
otherCountriesTitle: 'Países fuera del top 6',
|
||
otherCitiesTitle: 'Ciudades fuera del top 6',
|
||
uncategorised: 'Sin categoría',
|
||
uncategorisedTitle: 'Sin etiqueta de ciudad/país',
|
||
regionNote1: 'Cuenta',
|
||
spotsAndShops: 'spots y tiendas',
|
||
regionNote2: ', no patinadores — desde la propia etiqueta de ciudad/país de cada uno, o deducida de las coordenadas de su pin cuando no la tiene (en caché en tu dispositivo; países agrupados por código ISO si existe), solo el relé comunitario, con el contenido oculto por moderación excluido.',
|
||
ofTotal: '{{count}} de {{total}}',
|
||
regionNote3: 'ubicaciones no tienen etiqueta de ubicación y aparecen como "Sin categoría".',
|
||
growth: 'Crecimiento en el tiempo',
|
||
chartCumulativeTitle: 'Spots mapeados (acumulado)',
|
||
chartCumulativeDesc: 'Total de spots añadidos al mapa a lo largo del tiempo',
|
||
chartMonthlyTitle: 'Actividad mensual',
|
||
chartMonthlyDesc: 'Contenido nuevo publicado cada mes',
|
||
chartMappersTitle: 'Mapeadores activos / mes',
|
||
chartMappersDesc: 'Colaboradores únicos que publican cada mes',
|
||
chartMixTitle: 'Mezcla de contenido',
|
||
chartMixDesc: 'Desglose por tipo de contenido (histórico)',
|
||
noData: 'Aún no hay datos',
|
||
topMappers: 'Mejores mapeadores',
|
||
mostSpots: '— más spots añadidos',
|
||
noMapperData: 'Aún no hay datos de mapeadores',
|
||
topShops: 'Mejores tiendas',
|
||
mostShops: '— más tiendas añadidas',
|
||
shopCount: '{{count}} tiendas',
|
||
noShopData: 'Aún no hay datos de tiendas',
|
||
supporters: 'Patrocinadores de la comunidad',
|
||
fundedTitle: 'Financiado por la comunidad',
|
||
fundedDesc1: 'Crowdfunding descentralizado en Bitcoin vía Angor.',
|
||
fundedDesc2: 'Sin anuncios, sin inversores, sin venta de datos.',
|
||
backAngor: 'Apóyanos en Angor',
|
||
communityLink: 'Comunidad →',
|
||
footer1: 'Todos los datos se obtienen en directo de',
|
||
footer2: '— un relé público de Nostr.',
|
||
footer3: 'Cada evento está firmado por su creador y es verificable criptográficamente.',
|
||
footer4: 'No se pueden falsificar las cifras.',
|
||
spots: 'Spots',
|
||
shops: 'Tiendas',
|
||
lab: 'Lab',
|
||
thisMonth: '+{{count}} este mes',
|
||
fromActive: '{{count}} de cuentas activas',
|
||
viewAll: 'Ver todo',
|
||
spotCount: '{{count}} spots',
|
||
},
|
||
leaderboard: {
|
||
mapEarn: 'Mapea y gana',
|
||
helpMap: 'AYUDA A MAPEAR EL MUNDO',
|
||
intro: 'Añade spots y tiendas, y deja que patinadores agradecidos te zapeen. ¡Los principales colaboradores pueden recibir recompensas extra!',
|
||
howItWorks: 'Cómo funciona',
|
||
step1Title: '1. Mapea',
|
||
step1Desc: 'Añade spots y tiendas con fotos y detalles',
|
||
step2Title: '2. Gana zaps',
|
||
step2Desc: 'Los patinadores que encuentren útiles tus spots te darán propina',
|
||
step3Title: '3. Recompensas extra',
|
||
step3Desc: 'Los mejores mapeadores pueden recibir recompensas extra de nuestro fondo',
|
||
proTips: '💡 Consejos pro para más zaps:',
|
||
tipPhotos: 'Añade 3+ fotos',
|
||
tipDescriptions: 'Escribe descripciones detalladas',
|
||
tipLocation: 'Ubicación precisa',
|
||
mapShop: 'Mapear una tienda',
|
||
mapShopDesc: 'Skateshops, tiendas de tablas',
|
||
mapSpot: 'Mapear un spot',
|
||
mapSpotDesc: 'Parques, spots de calle, DIY',
|
||
shops: 'Tiendas',
|
||
spotsLower: 'spots',
|
||
shopsLower: 'tiendas',
|
||
contributions: 'aportaciones',
|
||
yourRanking: 'Tu puesto',
|
||
spotsShops: '{{spots}} spots • {{shops}} tiendas',
|
||
totalLower: 'total',
|
||
overall: 'General',
|
||
noContributions: 'Aún no hay aportaciones. ¡Sé el primero!',
|
||
addFirstSpot: 'Añadir el primer spot',
|
||
noShops: 'Aún no hay tiendas mapeadas',
|
||
addFirstShop: 'Añadir la primera tienda',
|
||
noSpots: 'Aún no hay spots mapeados',
|
||
poweredBy: 'Impulsado por los zaps de la comunidad',
|
||
poweredByDesc: 'Cuando un spot te resulte útil, ¡zapea al mapeador! Es la mejor forma de dar las gracias y animar a más aportaciones.',
|
||
you: 'Tú',
|
||
zapTitle: 'Clasificación de zaps',
|
||
zapSubtitle: 'Los spots que más cariño reciben — y los patinadores que lo dan.',
|
||
thisWeek: 'Esta semana',
|
||
thisMonth: 'Este mes',
|
||
allTime: 'Histórico',
|
||
topZappedSpots: 'Spots más zapeados',
|
||
noZaps: 'Aún no hay zaps en este periodo. Sé el primero — pulsa el ⚡ en un spot que te guste.',
|
||
topSupporters: 'Principales patrocinadores',
|
||
noZapsSent: 'Aún no se han enviado zaps en este periodo.',
|
||
fromTop10: '⚡ {{amount}} sats del top 10',
|
||
supporter: 'Patrocinador',
|
||
skateShop: 'Skate shop',
|
||
skateSpot: 'Skate spot',
|
||
},
|
||
supporters: {
|
||
our: 'NUESTRA',
|
||
community: 'COMUNIDAD',
|
||
heroDesc: 'SkateSpots lo construye y lo mantiene la comunidad. Patrocinadores, colaboradores, socios y amigos que lo mantienen libre y descentralizado.',
|
||
backAngor: 'Apóyanos en Angor',
|
||
backers: 'Patrocinadores',
|
||
backersDesc: 'Patinadores que han apoyado SkateSpots — financiación on-chain vía Angor y zaps Lightning al proyecto.',
|
||
sourceAngor: 'Angor',
|
||
supportersTotals: '{{count}} patrocinadores · {{angor}} sats vía Angor · {{zap}} sats zapeados',
|
||
quietNote: 'Y a todos los que aportaron en silencio — gracias. ❤️',
|
||
silentTitle: 'On-chain privado (silent payments)',
|
||
silentDesc: 'Un nombre, una dirección nueva en cada pago — on-chain con silent payments, o Lightning desde el mismo registro. Sin reutilizar direcciones, nada que enlazar.',
|
||
silentCopyName: 'Copiar nombre',
|
||
silentCopied: 'Copiado',
|
||
silentWallets: 'Requiere una cartera compatible con nombres de pago / silent payments: Sparrow, Cake, Dana, Phoenix, BlueWallet, Wasabi, Nunchuk o BitBox02.',
|
||
wayLightningTitle: 'Instantáneo y público',
|
||
wayLightningDesc: 'Zapea SkateSpots, o paga en silencio. Funciona sin cuenta.',
|
||
waySilentTitle: 'On-chain privado',
|
||
waySilentDesc: 'Un nombre de silent payments — una dirección nueva en cada pago.',
|
||
wayAngorTitle: 'Financia el proyecto',
|
||
wayAngorDesc: 'Angor — liberación por etapas, reembolsable por encima de 100k sats.',
|
||
donateTitle: 'Apoya a SkateSpots',
|
||
donateDesc: 'Tres vías, tres razones — elige la que te encaje. Cada sat mantiene el mapa libre, sin anuncios y open-source.',
|
||
donatePageLink: 'Abrir la página de donación',
|
||
updatedAt: 'Actualizado {{when}}',
|
||
tiersNote: 'Niveles: Colaborador menos de 100k sats · Patrón 100k–1M · Leyenda 1M+',
|
||
tierEmpty: 'Nadie todavía — sé el primero.',
|
||
joinSupporters: 'Únete a {{count}} patrocinadores',
|
||
showAll: 'Ver los {{count}}',
|
||
showLess: 'Ver menos',
|
||
impactSeeStats: 'Ver el panorama completo →',
|
||
impactAsOf: 'en vivo desde los relés de la comunidad',
|
||
anonymousBacker: 'Patrocinador anónimo',
|
||
beFirstBacker: 'Aún no hay patrocinadores públicos — sé el primero.',
|
||
backersTotal: '{{count}} patrocinadores · {{amount}} sats recaudados',
|
||
verifiedOnChain: 'Verificado on-chain',
|
||
supportedBy: 'Apoyado por {{count}}',
|
||
tierSupporter: 'Colaborador',
|
||
tierPatron: 'Patrón',
|
||
tierLegend: 'Leyenda',
|
||
topZappers: 'Zapearon SkateSpots',
|
||
topZappersDesc: 'Patinadores que enviaron un zap público directamente al proyecto. Los pagos silenciosos no se listan.',
|
||
paysFor: 'En qué se invierte tu apoyo',
|
||
paysForDesc: 'A dónde va cada sat — sin sueldos, sin oficinas, sin anuncios.',
|
||
payRelay: 'Alojamiento de relés',
|
||
payDomain: 'Dominio y TLS',
|
||
payAi: 'Nodo de IA / ContextVM',
|
||
payDev: 'Tiempo de desarrollo',
|
||
payOps: 'Operaciones',
|
||
payMarketing: 'Marketing',
|
||
payRelayDesc: 'Mantiene el mapa en línea y resiliente.',
|
||
payDomainDesc: 'El nombre, el certificado, la conexión segura.',
|
||
payAiDesc: 'Sasquatch, el guía de la comunidad.',
|
||
payDevDesc: 'Construir y arreglar SkateSpots.',
|
||
payOpsDesc: 'El trabajo poco glamuroso que lo mantiene en marcha.',
|
||
payMarketingDesc: 'Llegar a nuevas escenas locales y skateshops.',
|
||
impact: 'Impacto hasta ahora',
|
||
impactDesc: 'Lo que ha construido la comunidad — financiado por patinadores.',
|
||
impactSpots: 'Spots',
|
||
impactCrews: 'Crews',
|
||
impactEvents: 'Eventos',
|
||
impactLab: 'Pros del Lab',
|
||
impactShops: 'Tiendas',
|
||
impactMappers: 'Mapeadores',
|
||
support: 'Apoyo',
|
||
supportDesc: 'Financia SkateSpots en Angor — crowdfunding descentralizado on-chain en Bitcoin. Sin intermediarios, sin KYC.',
|
||
collaborators: 'Colaboradores',
|
||
collaboratorsDesc: 'Personas que construyen SkateSpots activamente — desarrolladores, diseñadores, operadores de relés.',
|
||
partners: 'Socios',
|
||
partnersDesc: 'Organizaciones y proyectos con los que trabajamos de cerca.',
|
||
friends: 'Amigos',
|
||
friendsDesc: 'Gente con buena onda.',
|
||
backTitle: 'Apoya el proyecto en Angor',
|
||
backDesc: 'Angor es financiación descentralizada on-chain en Bitcoin construida sobre Nostr — tus fondos siguen bajo tu control, se liberan por etapas y ningún custodio retiene el bote. Las aportaciones de hasta 100.000 sats funcionan como una donación (sin intercambio de firmas de recuperación); las cantidades mayores son inversiones cuyos fondos no gastados se pueden recuperar. Cada sat va a desarrollo, alojamiento de relés y mantener SkateSpots gratis para cada patinador del mundo.',
|
||
donateNote: '¿Prefieres una donación directa? ⚡ Zapea abajo — nada que reembolsar, nada que recuperar.',
|
||
openAngor: 'Abrir Angor',
|
||
orZap: 'o ⚡ zapea cualquier spot, crew o creador directamente en la app',
|
||
wantCollaborate: '¿Quieres colaborar?',
|
||
wantCollaborateDesc: 'Desarrolladores, diseñadores, patinadores con habilidades — escríbenos.',
|
||
viewNostrHub: 'Ver en NostrHub',
|
||
wantPartner: '¿Quieres ser socio de SkateSpots? Escríbenos en Nostr.',
|
||
comingSoon: 'Muy pronto',
|
||
wantListed: '¿Quieres aparecer aquí?',
|
||
wantListedDesc: 'Mándanos un logo (PNG/WebP, fondo transparente, mín. 200×200px) y tu URL por DM en Nostr, solo si tienes buena onda.',
|
||
whyTitle1: 'Por qué necesitamos',
|
||
whyTitle2: 'apoyo',
|
||
whyDesc: 'SkateSpots es 100% gratis, de código abierto y está construido sobre Nostr — un protocolo descentralizado sin servidor central que lo pueda cerrar. Sin anuncios, sin venta de datos, sin inversores. Cada sat va directamente a desarrollo, alojamiento de relés y mantener esto gratis para cada patinador del mundo.',
|
||
why1Title: 'Nativo de Nostr',
|
||
why1Desc: 'Sin servidor central. Tus datos viven en los relés que elijas.',
|
||
why2Title: 'Impulsado por Bitcoin',
|
||
why2Desc: 'Gana sats por mapear spots. Gástalos en tiendas locales.',
|
||
why3Title: 'Gratis para siempre',
|
||
why3Desc: 'Código abierto, sin muros de pago, sin rastreo, sin capital riesgo.',
|
||
thankYou: 'Gracias. Cada sat mantiene los spots en el mapa. 🛹⚡',
|
||
license: 'Licencia',
|
||
faq: 'FAQ',
|
||
},
|
||
admin: {
|
||
confirmed: 'Confirmado',
|
||
title: 'Cola de revisión',
|
||
subtitle: 'Spots, tiendas, eventos, rutas y material que activan las señales de basura. Ocultar y Confirmar son etiquetas suaves y reversibles; los informes van primero. No se borra nada.',
|
||
tabReports: 'Informes',
|
||
tabSpots: 'Spots',
|
||
tabShops: 'Tiendas',
|
||
tabEvents: 'Eventos',
|
||
tabTours: 'Rutas',
|
||
tabGear: 'Material',
|
||
tabCrews: 'Crews',
|
||
tabLab: 'Lab',
|
||
tabClaims: 'Reclamaciones',
|
||
nothingToReview: 'Nada que revisar — nada de este tipo activa las señales de basura.',
|
||
hideActioned: 'Ocultar gestionados',
|
||
showActioned: 'Mostrar gestionados ({{count}})',
|
||
undoAll: 'Deshacer los {{count}}',
|
||
undoAllTitle: '¿Deshacer todos los veredictos de esta pestaña?',
|
||
undoAllDesc: 'Esto devuelve cada elemento a neutro — ni oculto ni avalado. Publica una etiqueta pública por elemento, así que con Amber verás {{count}} pantallas de aprobación.',
|
||
undoCount: 'Deshacer {{count}}',
|
||
undo: 'Deshacer',
|
||
confirm: 'Confirmar',
|
||
hide: 'Ocultar',
|
||
hideIt: 'Ocultarlo',
|
||
hideForEveryone: '¿Ocultar esto para todos?',
|
||
hideForEveryoneDesc: 'Esto quita el elemento de la navegación y la búsqueda para todos los usuarios de SkateSpots. Es una etiqueta pública y reversible — puedes deshacerlo desde esta cola.',
|
||
hidden: 'Oculto',
|
||
hiddenDesc: 'Quitado de la app mediante una etiqueta pública. Reversible.',
|
||
couldNotHide: 'No se pudo ocultar',
|
||
notASpot: 'No es un skate spot',
|
||
lookAtIt: 'Verlo',
|
||
},
|
||
profile: {
|
||
nip05Verified: 'NIP-05 verificado',
|
||
nip05NotVerified: 'NIP-05 no verificado con esta clave',
|
||
message: 'Mensaje',
|
||
zapsReceived: 'zaps recibidos',
|
||
memberSince: 'Miembro desde',
|
||
badges: 'Insignias',
|
||
sponsorsSupport: 'Patrocinadores y apoyo',
|
||
skater: 'Patinador',
|
||
stance: 'Postura',
|
||
skating: 'Patinando',
|
||
homeSpot: 'Spot habitual',
|
||
basedIn: 'Con base en',
|
||
addSkateDetails: 'Añade tus datos de skate',
|
||
addSkateDetailsDesc: 'Configura tu postura, estilos y nivel para aparecer en el directorio de patinadores.',
|
||
spotsAdded: 'Spots añadidos',
|
||
shopsAdded: 'Tiendas añadidas',
|
||
noSpots: 'Aún no has añadido ningún spot',
|
||
noSpotsDesc: 'Pon tu spot local en el mapa →',
|
||
stash: 'Stash',
|
||
gear: 'Material',
|
||
crews: 'Crews',
|
||
info: 'Info',
|
||
lightning: 'Lightning',
|
||
silentPayment: 'Pago silencioso',
|
||
coordinator: 'Coordinador',
|
||
coordinatorAdded: 'Coordinador añadido',
|
||
add: 'Añadir',
|
||
messagePrivately: 'Mensaje privado',
|
||
founder: 'Fundador',
|
||
member: 'Miembro',
|
||
supportSkater: 'Apoya a este patinador',
|
||
supportSkaterDesc: 'Envía una propina para agradecer sus aportaciones',
|
||
},
|
||
index: {
|
||
joinCommunity: 'Únete a la comunidad para añadir spots, crear eventos y más',
|
||
topZapped: 'MÁS ZAPEADOS',
|
||
topZappedDesc: 'Spots más apoyados este mes',
|
||
leaderboard: 'Clasificación',
|
||
newHere: '¿NUEVO POR AQUÍ?',
|
||
newHereDesc: 'Crea una cuenta gratis para añadir spots, unirte a eventos, conectar con patinadores y formar parte de la comunidad. No hace falta email.',
|
||
followFounder: 'Sigue al fundador',
|
||
followFounderDesc: '¡Mantén pulsado el avatar 3 segundos para seguirlo y estar al día de nuevas funciones y eventos!',
|
||
createAccount: 'Crear cuenta',
|
||
accountWorks: 'Tu cuenta funciona en todas las apps de la red',
|
||
footerTagline: 'Código abierto • De la comunidad • Sin anuncios',
|
||
},
|
||
stash: {
|
||
title: 'Mi stash',
|
||
loginDesc: 'Tu inventario privado de material. Controla lo que tienes, pon precios y comparte de forma selectiva con quien intercambies.',
|
||
encrypted: 'Cifrado',
|
||
syncsEverywhere: 'Se sincroniza en todas partes',
|
||
p2pTrading: 'Intercambio P2P',
|
||
encryptionRequired: 'Se requiere cifrado',
|
||
encryptionRequiredDesc: 'Tu stash está cifrado por privacidad. Usa un firmante que admita cifrado NIP-44 (como Alby, nos2x o Amber).',
|
||
learnSigners: 'Conoce los firmantes',
|
||
select: 'Seleccionar',
|
||
stash: 'Stash',
|
||
wishlist: 'Lista de deseos',
|
||
allCategories: 'Todas las categorías',
|
||
sortNewest: 'Más recientes',
|
||
sortValue: 'Valor',
|
||
sortCondition: 'Estado',
|
||
sortAz: 'A–Z',
|
||
friendsOnly: 'Solo amigos',
|
||
addToWishlist: 'Añadir a la lista de deseos',
|
||
addItemToStash: 'Añadir artículo al stash',
|
||
addItem: 'Añadir artículo',
|
||
editItem: 'Editar artículo',
|
||
publicStash: 'Stash público',
|
||
listView: 'Vista de lista',
|
||
gridView: 'Vista de cuadrícula',
|
||
uploading: 'Subiendo...',
|
||
addPhotos: 'Añadir fotos',
|
||
wishlistReqPlaceholder: '¿Algún requisito concreto?',
|
||
itemDescPlaceholder: 'Describe el artículo, daños...',
|
||
itemsCount: '{{count}} artículo(s)',
|
||
wishlistEmpty: 'Lista de deseos vacía',
|
||
wishlistEmptyDesc: 'Añade el material que buscas — te emparejaremos con los stashes de tus amigos.',
|
||
stashEmpty: 'Tu stash está vacío',
|
||
stashEmptyDesc: 'Empieza a registrar tu material. Tablas, ejes, zapatillas — añádelo una vez y accede desde cualquier sitio vía Nostr.',
|
||
noMatch: 'Ningún artículo coincide',
|
||
noMatchDesc: 'Prueba a ajustar los filtros.',
|
||
backupTransfer: 'Copia y transferencia',
|
||
backupDesc: 'Tu stash está cifrado en Nostr. Guarda una copia que controles — así un relé caído o una cuenta nueva no te harán perder tu lista de material.',
|
||
exportTitle: 'Copia cifrada',
|
||
exportDialogDesc: 'Guarda {{count}} artículo(s) en un archivo. Cífralo para que un archivo filtrado no sea una filtración.',
|
||
modePassword: 'Contraseña',
|
||
modeKey: 'Mi clave',
|
||
password: 'Contraseña',
|
||
confirmPassword: 'Confirmar contraseña',
|
||
passwordHint: 'Usa al menos 8 caracteres. No hay recuperación: no la olvides.',
|
||
keyModeHint: 'Cifrado con tu clave de Nostr. Solo esa clave puede abrirlo: nada que recordar.',
|
||
exportPlaintext: 'Exportar sin cifrar',
|
||
pwTooShort: 'Usa al menos 8 caracteres.',
|
||
pwMismatch: 'Las contraseñas no coinciden.',
|
||
exportFailed: 'No se pudo crear la copia.',
|
||
unlockTitle: 'Desbloquear copia',
|
||
unlockDesc: 'Esta copia está protegida con contraseña.',
|
||
unlock: 'Desbloquear',
|
||
unlockFailed: 'No se pudo desbloquear la copia.',
|
||
show: 'Mostrar',
|
||
hide: 'Ocultar',
|
||
strength: 'Seguridad de la contraseña',
|
||
strengthWeak: 'Débil',
|
||
strengthFair: 'Aceptable',
|
||
strengthGood: 'Buena',
|
||
strengthStrong: 'Fuerte',
|
||
filenameWillSave: 'Se guardará como {{name}}',
|
||
export: 'Exportar',
|
||
import: 'Importar',
|
||
exported: 'Stash exportado',
|
||
exportedDesc: '{{count}} artículos guardados en un archivo.',
|
||
noItemsInFile: 'No se encontraron artículos en ese archivo.',
|
||
noValidItems: 'No se encontraron artículos válidos en ese archivo.',
|
||
imported: 'Importados {{count}} artículos',
|
||
importSkipped: '{{count}} omitidos (ya estaban en tu stash).',
|
||
importAdded: 'Añadidos a tu stash.',
|
||
importFailed: 'Error al importar',
|
||
couldNotRead: 'No se pudo leer ese archivo.',
|
||
updateFailed: 'No se pudo actualizar tu stash',
|
||
updatedCount: 'Actualizados {{count}} artículos',
|
||
markedForSale: 'Marcados {{count}} en venta',
|
||
unmarkedCount: 'Desmarcados {{count}}',
|
||
removedCount: 'Quitados {{count}} artículos',
|
||
selectedCount: '{{count}} seleccionados',
|
||
selectAll: 'Seleccionar todo',
|
||
visibilityPublic: 'Público',
|
||
visibilityPrivate: 'Privado',
|
||
forSale: 'En venta',
|
||
remove: 'Quitar',
|
||
bulkDeleteTitle: '¿Quitar {{count}} artículos?',
|
||
bulkDeleteDesc: 'Esto reescribe tu stash cifrado en una firma y no se puede deshacer aquí. Exporta una copia antes si no estás seguro.',
|
||
deleteTitle: '¿Quitar de tu stash?',
|
||
deleteDesc: '“{{title}}” se quitará de tu stash',
|
||
deleteDescPublic: ' y se retirará de tu escaparate público',
|
||
deleteUndone: '. Esto no se puede deshacer.',
|
||
deleteDescGeneric: 'Este artículo se quitará de tu stash. Esto no se puede deshacer.',
|
||
listOnMarketplace: 'Publicar en el Marketplace',
|
||
noPriceSet: 'Sin precio',
|
||
categoryLabel: 'Categoría',
|
||
photosLabel: 'Fotos',
|
||
willingToSell: 'Dispuesto a vender',
|
||
willingToTrade: 'Dispuesto a intercambiar',
|
||
whereIsThisItem: '¿Dónde está este artículo?',
|
||
visibilityLabel: 'Visibilidad',
|
||
visibilityPrivateOnlyYou: 'Privado - Solo tú',
|
||
visibilityFriendsMutual: 'Amigos - Seguidores mutuos',
|
||
visibilityPublicAnyone: 'Público - Cualquiera',
|
||
visibilityFriends: 'Amigos',
|
||
brandLabel: 'Marca',
|
||
sizeLabel: 'Medida',
|
||
descriptionLabel: 'Descripción',
|
||
conditionLabel: 'Estado',
|
||
itemName: 'Nombre del artículo',
|
||
saveChanges: 'Guardar cambios',
|
||
listItemDialogTitle: 'Publicar "{{title}}"',
|
||
pickUpWhere: '¿Dónde pueden recogerlo los compradores?',
|
||
linkToSpot: 'Vincular a un Spot',
|
||
linkToSpotDesc: 'Mejor para ventas locales • Aparece en la página del spot y el mapa',
|
||
recommended: 'Recomendado',
|
||
noSpecificSpot: 'Sin spot concreto',
|
||
noSpecificSpotDesc: 'Visible solo en la página del Marketplace',
|
||
tipLinkedSpots: '💡 Consejo: los anuncios vinculados a spots son más fáciles de encontrar para los skaters locales.',
|
||
anyoneCanSee: 'Cualquiera puede verlos en tu perfil.',
|
||
seeWhatOthersSee: 'Ver lo que ven los demás',
|
||
inventory: 'Inventario',
|
||
publicWantsNote: 'Lo que buscas públicamente se publica en el Marketplace como anuncios de “busco”, para que los vendedores te encuentren.',
|
||
howItWorks: 'Cómo funciona',
|
||
tapToMarketplace: 'Toca para ir al Marketplace →',
|
||
viewWishlist: 'Ver wishlist',
|
||
tipEditItems: 'Edita artículos con el botón del lápiz',
|
||
tipListForSale: 'Pon a la venta con el botón de la tienda',
|
||
tipAddPhotos: 'Añade fotos para mejores ofertas de intercambio',
|
||
tipKeySyncs: 'Tu clave Nostr se sincroniza en todos los dispositivos',
|
||
itemsReadyToSell: '{{count}} artículo(s) listos para vender',
|
||
},
|
||
},
|
||
miscUi: {
|
||
openingCamera: 'Abriendo cámara…',
|
||
usePhoneCamera: 'Usa la cámara del teléfono y vuelve aquí',
|
||
startingCamera: 'Iniciando cámara...',
|
||
cameraAccessRequired: 'Se requiere acceso a la cámara',
|
||
cameraAccessHint: 'Permite el acceso a la cámara en los ajustes del navegador, o usa el selector de archivos de abajo.',
|
||
cameraErrorTitle: 'Error de cámara',
|
||
cameraErrorDesc: 'No se pudo abrir la cámara. Revisa los permisos de la app en Ajustes.',
|
||
cameraDeniedTitle: 'Acceso a la cámara denegado',
|
||
cameraDeniedDesc: 'Permite el acceso a la cámara en los ajustes del navegador.',
|
||
uploadFromGallery: 'Subir desde la galería',
|
||
uploading: 'Subiendo...',
|
||
usePhoto: 'Usar foto',
|
||
earningPotential: 'Potencial de ganancias',
|
||
qualityExcellent: '¡Excelente!',
|
||
qualityGood: 'Bueno',
|
||
qualityBasic: 'Básico',
|
||
qualityGettingStarted: 'Empezando',
|
||
qualityLocationAdded: 'Ubicación añadida',
|
||
qualityOnePhoto: 'Al menos 1 foto',
|
||
qualityThreePhotos: '3+ fotos',
|
||
qualityMoreAngles: 'Más ángulos = mejor',
|
||
qualityDescription: 'Descripción',
|
||
qualityDetailedDesc: 'Descripción detallada (100+ caracteres)',
|
||
qualityContact: 'Datos de contacto',
|
||
qualityPhoneOrWebsite: 'Teléfono o web',
|
||
qualityHours: 'Horario de apertura',
|
||
qualitySpotType: 'Tipo de spot elegido',
|
||
failedToLoadComments: 'No se pudieron cargar los comentarios',
|
||
commentsTitle: 'Comentarios',
|
||
noCommentsYet: 'Aún no hay comentarios',
|
||
beFirstComment: '¡Sé el primero en opinar!',
|
||
removeMember: 'Quitar miembro',
|
||
whoIsThisFor: '¿Para quién es este perfil?',
|
||
individual: 'Individual',
|
||
individualDesc: 'Una sola persona',
|
||
collective: 'Colectivo',
|
||
collectiveDesc: 'Crew, estudio o empresa',
|
||
membersLabel: 'Miembros',
|
||
dismissReport: 'Descartar reporte',
|
||
reportedBy: 'reportado por',
|
||
completingLoginAmber: 'Completando el inicio de sesión con Amber...',
|
||
entityMembersHint: 'Añade las cuentas Nostr de tu crew. Cada miembro confirma su propio spot con su clave — hasta entonces aparecen como “pendientes”.',
|
||
entityVerifiedHint: 'La membresía se verifica por miembro — nadie puede añadirse a tu crew sin confirmarlo desde su propia cuenta.',
|
||
entityInvalidPubkey: 'Introduce un npub, nprofile o clave hex de 64 caracteres válidos.',
|
||
entityAlreadyAdded: 'Ese miembro ya está añadido.',
|
||
offline: 'Sin conexión',
|
||
connected: 'Conectado',
|
||
offlineMode: 'Modo sin conexión',
|
||
allFeaturesAvailable: 'Todas las funciones disponibles',
|
||
browsingCachedSpots: 'Navegando spots en caché',
|
||
queuedActions: '{{count}} acción(es) en cola',
|
||
syncing: 'Sincronizando',
|
||
publishingWhenStable: 'Publicando cuando se estabilice la conexión...',
|
||
willPublishOnline: 'Se publicará al volver a estar en línea',
|
||
availableOffline: 'Disponible sin conexión:',
|
||
offlineBrowseSpots: 'Explora spots vistos antes',
|
||
offlineViewDetails: 'Ver detalles de spots en caché',
|
||
offlineKeepActing: 'Sigue actuando — publicaciones, RSVPs, anuncios y mensajes se ponen en cola y se envían al reconectar',
|
||
},
|
||
seoUi: {
|
||
becomeBuilderTitle: 'Ser Constructor - SkateSpots',
|
||
becomeBuilderDesc: 'Publica tus servicios de construcción de rampas, parques y DIY — qué construyes, materiales y escala.',
|
||
tradesTitle: 'Mis Tratos — SkateSpots',
|
||
tradesDesc: 'Gestiona tus tratos del marketplace, confirmaciones y reputación.',
|
||
eventsTitle: 'Eventos y Rutas de Skate - SkateSpots',
|
||
eventsDesc: 'Descubre eventos, competiciones, rutas y sesiones de skate cerca de ti.',
|
||
editShopDesc: 'Edita tu tienda de skate.',
|
||
createTourDesc: 'Organiza rutas de skate: rutas locales a spots ocultos, viajes nacionales, aventuras internacionales o competiciones de destrucción estilo KOTR.',
|
||
deckDesignerTitle: 'Diseñador de Tablas — SkateSpots DIY',
|
||
deckDesignerDesc: 'Diseña el contorno de una tabla de skate o longboard y exporta una plantilla imprimible 1:1, SVG o DXF — con concave, colas, distancia entre ejes y agujeros de ejes.',
|
||
createEventTitle: 'Crear un Evento de Skate - SkateSpots',
|
||
createEventDesc: 'Crea un nuevo evento de skate para la comunidad.',
|
||
editTourDesc: 'Edita tu ruta de skate — actualiza paradas, fechas y detalles.',
|
||
walletTitle: 'Cartera - SkateSpots',
|
||
walletDesc: 'Conecta tu cartera Lightning para enviar zaps a skaters y creadores de spots.',
|
||
becomePhotographerTitle: 'Ser Fotógrafo - SkateSpots',
|
||
becomePhotographerDesc: 'Crea tu perfil de fotografía de skate — cámaras, objetivos, iluminación y servicios.',
|
||
newsletterTitle: 'Boletín - SkateSpots',
|
||
newsletterDesc: 'Entregas semanales de la comunidad SkateSpots. Novedades de la app, nuevos spots, eventos y las personas que mantienen vivo el skate.',
|
||
homeTitle: 'SkateSpots - Descubre Lugares de Skate en Todo el Mundo',
|
||
zapLeaderboardTitle: 'Clasificación de Zaps - SkateSpots',
|
||
zapLeaderboardDesc: 'Los spots más zapeados y los miembros de la comunidad que los apoyan.',
|
||
adminReviewTitle: 'Cola de revisión — SkateSpots',
|
||
gearSwapTitle: 'Intercambio de Equipo - SkateSpots',
|
||
gearSwapDesc: 'Compra y vende equipo de skate usado con otros skaters. Tablas, ejes, ruedas, zapatillas y más.',
|
||
donateTitle: 'Donar — SkateSpots',
|
||
donateDesc: 'Apoya a SkateSpots — Lightning, on-chain privado (silent payments) o financia el desarrollo en Angor.',
|
||
verifyCardTitle: 'Verificar — SkateSpots',
|
||
verifyCardDesc: 'Verifica un carné de SkateSpots o un pase de acceso.',
|
||
mapTitle: 'Mapa de Spots de Skate - SkateSpots',
|
||
mapDesc: 'Explora spots de skate de todo el mundo en nuestro mapa interactivo.',
|
||
diyTitle: 'DIY — Hazlo Tú Mismo | SkateSpots',
|
||
diyDesc: 'Guías, herramientas abiertas y planos para hacer tus propias tablas, rampas y spots de hormigón — y la gente y los lugares para hacerlo.',
|
||
appShopTitle: 'Tienda de la App — SkateSpots',
|
||
becomeSkaterTitle: 'Únete al Directorio de Skaters - SkateSpots',
|
||
becomeSkaterDesc: 'Crea tu perfil de skater para que la comunidad te encuentre.',
|
||
marketplaceTitle: 'Marketplace - SkateSpots',
|
||
marketplaceDesc: 'Compra y vende equipo de skate en el mercado descentralizado Plebeian.',
|
||
becomeEditorTitle: 'Ser Editor de Vídeo - SkateSpots',
|
||
becomeEditorDesc: 'Crea tu perfil de editor de vídeo de skate en SkateSpots.',
|
||
amberCallbackTitle: 'Iniciando sesión con Amber - SkateSpots',
|
||
amberCallbackDesc: 'Completando tu inicio de sesión con Amber (NIP-55).',
|
||
supportersTitle: 'Colaboradores - SkateSpots',
|
||
supportersDesc: 'La comunidad que mantiene vivo SkateSpots — colaboradores, socios y amigos.',
|
||
becomeCoachTitle: 'Ser Coach - SkateSpots',
|
||
becomeCoachDesc: 'Crea tu perfil de coach de skate.',
|
||
riderCardTitle: 'Carné de Skater — SkateSpots',
|
||
riderCardDesc: 'Crea tu Licencia de Skater o Carné de Acceso a Parque imprimible de SkateSpots.',
|
||
editEventDesc: 'Edita tu evento de skate.',
|
||
createShopTitle: 'Añadir una Tienda de Skate - SkateSpots',
|
||
createShopDesc: 'Añade tu tienda de skate a la comunidad.',
|
||
deckCostTitle: 'Calculadora de Coste de Tablas — SkateSpots DIY',
|
||
deckCostDesc: 'Calcula cuánto cuesta hacer una tabla — mano de obra, equipo, materiales, tiempo de proceso, embalaje y margen — y un precio de venta justo.',
|
||
pyramidTitle: 'Clasificación Pirámide - SkateSpots',
|
||
pyramidDesc: 'Principales contribuidores y líderes de la comunidad.',
|
||
foodTitle: 'Comida Cerca de los Spots - SkateSpots',
|
||
foodDesc: 'Encuentra restaurantes, cafeterías y opciones de comida cerca de los spots de skate.',
|
||
createListingTitle: 'Publicar Equipo - SkateSpots',
|
||
createListingDesc: 'Publica equipo de skate en venta o encuentra el equipo que quieres comprar.',
|
||
becomeFilmerTitle: 'Ser Filmer - SkateSpots',
|
||
becomeFilmerDesc: 'Crea tu perfil de filmación de skate.',
|
||
skatersTitle: 'Skaters - SkateSpots',
|
||
skatersDesc: 'Descubre skaters de la comunidad SkateSpots. Explora por estilo, postura, nivel y ubicación.',
|
||
communityStatsTitle: 'Estadísticas de la Comunidad — SkateSpots',
|
||
communityStatsDesc: 'Métricas en vivo de la comunidad SkateSpots — spots, eventos, coaches, filmers, editores, rutas y crecimiento. Directo desde Nostr.',
|
||
labTitle: 'The Lab - SkateSpots',
|
||
labDesc: 'Encuentra coaches, filmers, fotógrafos y editores de vídeo de skate.',
|
||
stashTitle: 'Mi Stash - SkateSpots',
|
||
stashDesc: 'Gestiona tu inventario privado de equipo. Controla lo que tienes, lo que quieres vender o intercambiar.',
|
||
bountyLeaderboardTitle: 'Mapea y Gana - SkateSpots',
|
||
bountyLeaderboardDesc: 'Mapea spots y tiendas de skate, gana zaps de la comunidad. Mira los principales contribuidores.',
|
||
spotCollectionsTitle: 'Mis Colecciones de Spots - SkateSpots',
|
||
spotCollectionsDesc: 'Organiza tus spots de skate favoritos en colecciones personalizadas',
|
||
mintsTitle: 'Mints de Cashu — SkateSpots',
|
||
mintsDesc: 'Explora mints de Cashu, revisa su estado y añade uno a tu cartera.',
|
||
},
|
||
statusUi: {
|
||
quickStatus: 'Estado rápido',
|
||
skating: 'Patinando',
|
||
skatingDesc: 'Patinando ahora mismo',
|
||
filming: 'Grabando',
|
||
filmingDesc: 'Grabando trucos',
|
||
lookingForSesh: 'Buscando sesión',
|
||
lookingForSeshDesc: 'Quiere patinar con otros',
|
||
coaching: 'Dando clase',
|
||
coachingDesc: 'Enseñando/dando clase',
|
||
chilling: 'De chill',
|
||
chillingDesc: 'Pasando el rato en el spot',
|
||
onMyWay: 'De camino',
|
||
onMyWayDesc: 'Yendo a un spot',
|
||
takingABreak: 'Descansando',
|
||
takingABreakDesc: 'Descansando/hidratándose',
|
||
doneForToday: 'Por hoy ya',
|
||
doneForTodayDesc: 'Terminó de patinar',
|
||
},
|
||
sasquatchGuide: {
|
||
homeTitle: '¡Bienvenido a SkateSpots! 🦧',
|
||
homeMessage: 'Yo, soy The Sasquatch. Guardián de tablas, rutas y aventuras salvajes. Bienvenido al indómito mundo del skate en Nostr — sin trajes, sin anuncios, solo skaters abriendo su propio camino. Aquí tus trucos y tus datos son tuyos, y hasta ganas Bitcoin por dejar tu huella. Conecta con skaters de tu barrio o de todo el mundo. Sin más reglas que rodar, sin más huellas que las tuyas.',
|
||
homeQ1: 'Planéame 3 días en Barcelona',
|
||
homeQ2: 'Encuentra spots para principiantes',
|
||
homeQ3: '¿Hay eventos próximos?',
|
||
homeQ4: 'Estadísticas de la comunidad',
|
||
homeQ5: 'Encuentra coaches cerca de mí',
|
||
homeQ6: '¿Equipo en venta?',
|
||
homeQ7: '¿Qué es Nostr?',
|
||
homeQ8: '¿Esto es gratis?',
|
||
homeLearnMore: 'Saber más',
|
||
onboardingTitle: 'Primeros pasos 🚀',
|
||
onboardingMessage: '¡Déjame ayudarte con lo básico! Nostr es tu identidad, Bitcoin Lightning te permite ganar sats por tus aportes, y los zaps son propinas instantáneas. ¡Pregúntame lo que quieras para empezar!',
|
||
onboardingQ1: '¿Cómo iniciar sesión?',
|
||
onboardingQ2: '¿Qué es Nostr?',
|
||
onboardingQ3: '¿Cómo funciona Nostr?',
|
||
onboardingQ4: '¿Qué es Cashu?',
|
||
onboardingQ5: '¿Cómo usar la cartera Cashu?',
|
||
onboardingQ6: '¿Qué son los mints?',
|
||
onboardingQ7: '¿Qué son los zaps?',
|
||
onboardingQ8: '¿Qué es NWC?',
|
||
onboardingStart: 'Empezar a explorar',
|
||
onboardingLogin: 'Inicia sesión para empezar',
|
||
labTitle: '¡Bienvenido a The Lab! 🎓',
|
||
labMessage: '¡Aquí es donde pasa la magia! Encuentra coaches que te enseñen desde kickflips hasta darkslides, o conecta con filmers para capturar tus mejores sesiones. Filtra por habilidades, revisa su experiencia y reserva una sesión. Recuerda: ¡todos empezamos en algún sitio!',
|
||
labQ1: 'Encuentra coaches',
|
||
labQ2: 'Encuentra filmers',
|
||
labQ3: 'Encuentra fotógrafos',
|
||
labQ4: 'Encuentra editores de vídeo',
|
||
labQ5: 'Encuentra un constructor de ramps',
|
||
labQ6: '¿Qué es The Lab?',
|
||
labQ7: '¿Qué es un builder?',
|
||
labQ8: '¿Cómo ofrecer coaching?',
|
||
labLogin: 'Inicia sesión para ofrecer servicios',
|
||
crewsTitle: 'Crews 🤘',
|
||
crewsMessage: 'Las crews son tu familia de skate anclada al mapa — la gente con la que patinas, no a la que contratas. Cada crew tiene su territorio en el mapa, spots habituales, miembros y un manifiesto. Los miembros confirman con su propia clave, así que la lista es legítima. ¡Crea la tuya o encuentra a tu gente!',
|
||
crewsQ1: '¿Qué son las crews?',
|
||
crewsQ2: '¿Cómo empezar una crew?',
|
||
crewsQ3: '¿En qué se diferencia una crew de The Lab?',
|
||
crewsQ4: '¿Cómo confirman los miembros?',
|
||
crewsQ5: '¿Qué es Nostr?',
|
||
crewsQ6: '¿Cómo funcionan los zaps?',
|
||
crewsLogin: 'Inicia sesión para crear una crew',
|
||
},
|
||
supportUi: {
|
||
keepMapFree: 'Mantén el mapa gratis',
|
||
keepMapFreeDesc: 'Sin anuncios, sin rastreo, sin capital riesgo. Tus sats pagan el hosting, el nodo de IA y el relay.',
|
||
thankYou: '¡Gracias! ⚡',
|
||
satsKeepMapFree: 'Tus sats mantienen el mapa gratis.',
|
||
keptFreeNext: 'Acabas de mantener SkateSpots gratis para el próximo skater.',
|
||
scanToPay: 'Escanea para pagar',
|
||
zapSkateSpots: 'Zapear a SkateSpots',
|
||
payQuietly: 'Pagar en privado',
|
||
pickAmount: 'Elige un importe',
|
||
enterAmount: 'Introduce cuántos sats quieres enviar.',
|
||
couldNotStartPayment: 'No se pudo iniciar el pago.',
|
||
customAmountAria: 'Importe personalizado en sats',
|
||
commentPlaceholder: 'Di algo (opcional — solo zaps públicos)',
|
||
publicZapTitle: 'Zap público con tu comentario',
|
||
loginToZapTitle: 'Inicia sesión para enviar un zap público',
|
||
anonymousTitle: 'Anónimo — sin login, sin registro',
|
||
copyLightningTitle: 'Copiar la dirección Lightning',
|
||
copiedSuffix: '{{label}} copiado',
|
||
invoiceLabel: 'Factura',
|
||
addressLabel: 'Dirección',
|
||
notAPurchase: 'Es apoyo, no una compra — no compra nada y no hay reembolsos. La merch y Sasquatch Pro son aparte. Tu ubicación e identidad nunca intervienen en un pago privado.',
|
||
},
|
||
toastsUi: {
|
||
followingSuccess: 'Siguiendo',
|
||
followingSuccessDesc: 'Este usuario ya está en tu red',
|
||
followFailed: 'No se pudo seguir',
|
||
unfollowSuccess: 'Dejaste de seguir',
|
||
unfollowSuccessDesc: 'Eliminado de tu red',
|
||
unfollowFailed: 'No se pudo dejar de seguir',
|
||
reportThanks: 'Gracias — enviado a revisión',
|
||
reportFailed: 'No se pudo enviar el informe',
|
||
savedOffline: 'Guardado sin conexión',
|
||
savedOfflineDesc: 'Lo publicaremos automáticamente al volver a estar en línea.',
|
||
cacheCleaned: 'Caché limpiada',
|
||
cacheCleanedDesc: 'Se eliminaron {{count}} spots antiguos de la caché',
|
||
cacheCleared: 'Caché borrada',
|
||
cacheClearedDesc: 'Se han eliminado todos los spots en caché',
|
||
backOnline: 'De nuevo en línea',
|
||
backOnlineDesc: 'Se enviaron {{count}} acción(es) guardadas.',
|
||
postQueued: 'Publicación en cola',
|
||
postQueuedDesc: 'Tu publicación se enviará cuando vuelvas a estar en línea',
|
||
invalidIdentifier: 'Identificador no válido. Usa npub1..., usuario@dominio.com o clave hex',
|
||
notASpotThanks: 'Gracias — enviado a revisión',
|
||
notASpotThanksDesc: 'Sin rencores: esto marca el pin como fuera de tema para que cada cual decida.',
|
||
notASpotFailed: 'No se pudo enviar el informe',
|
||
pleaseTryAgain: 'Inténtalo de nuevo.',
|
||
relayUnreachable: 'No se pudo alcanzar ningún relay — revisa tu conexión e inténtalo de nuevo.',
|
||
loginToReport: 'Inicia sesión para informar de un spot.',
|
||
zapLoginRequired: 'Inicio de sesión requerido',
|
||
zapLoginRequiredDesc: 'Debes iniciar sesión para enviar un zap.',
|
||
zapEventNotFound: 'Evento no encontrado',
|
||
zapEventNotFoundDesc: 'No se pudo encontrar el evento a zapear.',
|
||
zapAuthorNotFound: 'Autor no encontrado',
|
||
zapAuthorNotFoundDesc: 'No se pudo encontrar el autor de este artículo.',
|
||
zapSuccess: '¡Zap enviado!',
|
||
zapSuccessNwcDesc: 'Enviaste {{amount}} sats vía NWC al autor.',
|
||
zapSuccessDesc: 'Enviaste {{amount}} sats al autor.',
|
||
zapStatusUnknown: 'Estado del pago desconocido',
|
||
zapStatusUnknownDesc: 'Es posible que tu cartera aún esté liquidando este zap. Revisa tu cartera antes de reintentar — no pagues dos veces.',
|
||
zapNwcFailed: 'Falló el pago por NWC',
|
||
zapWeblnFailed: 'Falló el pago por WebLN',
|
||
zapFallingBack: '{{error}}. Cambiando a otros métodos de pago...',
|
||
zapFailed: 'Falló el zap',
|
||
zapUnknownNwcError: 'Error desconocido de NWC',
|
||
zapUnknownWeblnError: 'Error desconocido de WebLN',
|
||
nwcInvalidUri: 'URI de NWC no válido',
|
||
nwcInvalidUriDesc: 'Revisa la cadena de conexión e inténtalo de nuevo.',
|
||
nwcExists: 'La conexión ya existe',
|
||
nwcExistsDesc: 'Esta cartera ya está conectada.',
|
||
nwcConnected: 'Cartera conectada',
|
||
nwcConnectedDesc: 'Conectado correctamente a {{alias}}.',
|
||
nwcFailed: 'Falló la conexión',
|
||
nwcFailedDesc: 'No se pudo conectar a la cartera: {{error}}',
|
||
nwcUnknownError: 'Se produjo un error desconocido',
|
||
nwcDisconnected: 'Cartera desconectada',
|
||
nwcDisconnectedDesc: 'Se ha eliminado la conexión de la cartera.',
|
||
deleteApproveAmber: 'Aprueba en Amber',
|
||
deleteApproveAmberDesc: 'Amber se abrirá — toca Aprobar para confirmar la eliminación.',
|
||
deleteCancelled: 'Cancelado',
|
||
deleteCancelledDesc: 'Rechazaste la solicitud en Amber.',
|
||
deleteCouldntSign: 'No se pudo firmar',
|
||
deletePublishing: 'Paso 2/2: Publicando…',
|
||
deletePublishingDesc: 'Enviando la eliminación a los relays.',
|
||
deleteStuck: 'Atascado en PUBLICANDO',
|
||
deleteStuckDesc: 'Falló el paso de relay: {{error}}. Se firmó bien; el relay no confirmó.',
|
||
stashMerged: 'Cambios fusionados desde otro dispositivo',
|
||
stashMergedDesc: 'Tu stash se editó en otro lugar — se conservaron ambos conjuntos de cambios.',
|
||
statusUpdated: '¡Estado actualizado!',
|
||
statusUpdatedDesc: 'Tu estado de skate ahora es visible para los demás.',
|
||
statusFailed: 'No se pudo establecer el estado',
|
||
statusCleared: 'Estado borrado',
|
||
statusClearedDesc: 'Tu estado se ha eliminado.',
|
||
statusClearFailed: 'No se pudo borrar el estado',
|
||
nutzapEnabled: 'Recepción de Nutzap activada',
|
||
nutzapEnabledDesc: '¡Ya puedes recibir zaps ecash!',
|
||
nutzapSetupFailed: 'Falló la configuración',
|
||
nutzapUnavailable: 'Envío de Nutzap no disponible',
|
||
tokenReceived: 'Token recibido',
|
||
tokenReceivedDesc: '¡Token Cashu canjeado con éxito!',
|
||
receiveFailed: 'Falló la recepción',
|
||
invalidAmount: 'Importe no válido',
|
||
invalidAmountDesc: 'Introduce un importe válido',
|
||
tokenCreated: 'Token creado',
|
||
sendFailed: 'Falló el envío',
|
||
mintAdded: 'Mint añadido',
|
||
mintAddedDesc: 'Mint añadido y confiado correctamente',
|
||
mintAddFailed: 'No se pudo añadir el mint',
|
||
mintRemoved: 'Mint eliminado',
|
||
mintRemoveFailed: 'No se pudo eliminar el mint',
|
||
paymentReceived: 'Pago recibido',
|
||
paymentReceivedDesc: '¡Recibidos {{amount}} sats con éxito!',
|
||
paymentSent: 'Pago enviado',
|
||
paymentSentDesc: 'Pago Lightning completado correctamente',
|
||
loginRequired: 'Inicio de sesión requerido',
|
||
loginToFollowFounder: 'Inicia sesión para seguir al fundador',
|
||
alreadyFollowing: 'Ya lo sigues',
|
||
alreadyFollowingDesc: '¡Ya sigues a {{name}}!',
|
||
couldNotComplete: 'No se pudo completar eso',
|
||
tryAgainLower: 'Inténtalo de nuevo.',
|
||
couldNotLoadProfile: 'No se pudo cargar el perfil',
|
||
couldNotLoadProfileDesc: 'Revisa tu conexión a internet y prueba a actualizar.',
|
||
undone: 'Deshecho',
|
||
undoneDesc: 'Vuelto a neutro — ni oculto ni avalado.',
|
||
confirmed: 'Confirmado',
|
||
confirmedDesc: 'Avalado — sale de esta cola.',
|
||
hiddenToast: 'Oculto',
|
||
couldNotUndo: 'No se pudo deshacer',
|
||
couldNotConfirm: 'No se pudo confirmar',
|
||
deleteFailed: 'Falló la eliminación',
|
||
somethingWentWrong: 'Algo salió mal',
|
||
},
|
||
cardUi: {
|
||
save: 'Guardar carné en Nostr',
|
||
saved: 'Carné guardado',
|
||
savedDesc: 'Tu carné está firmado y se puede verificar.',
|
||
saveFailed: 'No se pudo guardar el carné',
|
||
notPublished: 'Sin publicar',
|
||
titleNeon: 'Carné de',
|
||
titleRest: 'Rider',
|
||
saveFrontPng: 'Guardar anverso (PNG)',
|
||
expired: 'CADUCADO',
|
||
logoUploaded: 'Logo subido',
|
||
logoUploadFailed: 'No se pudo subir el logo',
|
||
venue: 'Sede vinculada (opcional)',
|
||
venueNone: 'Sin sede',
|
||
venueHint: 'Elige uno de tus propios spots para vincular este pase a una sede. Un verificador confirmará que es tuya.',
|
||
venuePick: 'Elige tu sede',
|
||
parkNoVenue: 'Un pase de parque solo puede emitirlo el dueño de la sede — mapea primero un spot tuyo.',
|
||
parkAddVenue: 'Añadir un spot',
|
||
parkNeedsVenue: 'Elige una sede tuya',
|
||
parkIssued: 'Pases emitidos',
|
||
parkRevoke: 'Revocar',
|
||
parkRevoked: 'Revocado',
|
||
parkRevokeFailed: 'No se pudo revocar',
|
||
v: {
|
||
valid: 'Válido',
|
||
validDesc: 'Firma válida y emitido por la sede.',
|
||
expired: 'Caducado',
|
||
expiredDesc: 'Ha pasado su fecha de validez.',
|
||
revoked: 'Revocado',
|
||
revokedDesc: 'El emisor canceló este pase — no lo aceptes.',
|
||
invalid: 'No válido',
|
||
invalidDesc: 'La firma no se verifica. No te fíes.',
|
||
notFound: 'No encontrado',
|
||
notFoundDesc: 'No hay registro en los relés.',
|
||
unverifiedIssuer: 'Emisor sin verificar',
|
||
unverifiedIssuerDesc: 'Este pase nombra una sede que no pertenece a la clave del emisor.',
|
||
notBound: 'Sin vincular',
|
||
notBoundDesc: 'Sin vincular a una sede — no prueba nada sobre el acceso.',
|
||
noRsvp: 'Sin confirmación',
|
||
noRsvpDesc: 'El titular no tiene confirmación registrada para este evento.',
|
||
admitted: 'Admitido',
|
||
admittedDesc: 'Evento del organizador + el titular confirmó.',
|
||
noHolder: 'Sin titular en el enlace',
|
||
noHolderDesc: 'Este QR no incluye titular (`?h=`), así que no se puede comprobar.',
|
||
},
|
||
passes: {
|
||
tab: 'Mis pases',
|
||
pass: 'Pase de acceso',
|
||
none: 'Aún no tienes pases. Cuando una sede u organizador te emita uno, aparecerá aquí.',
|
||
},
|
||
facets: {
|
||
title: 'Mostrar facetas de identidad',
|
||
crews: 'Peñas',
|
||
local: 'Local',
|
||
roles: 'Roles del Lab',
|
||
},
|
||
roles: {
|
||
coach: 'Entrenador',
|
||
filmer: 'Filmer',
|
||
editor: 'Editor',
|
||
photographer: 'Fotógrafo',
|
||
builder: 'Constructor',
|
||
artist: 'Artista',
|
||
graffiti: 'Graffiti',
|
||
tattoo: 'Tatuador',
|
||
trainer: 'Entrenador personal',
|
||
musician: 'Músico',
|
||
judge: 'Juez',
|
||
organizer: 'Organizador',
|
||
barber: 'Barbero',
|
||
},
|
||
crew: {
|
||
crewCard: 'CARNÉ DE PEÑA',
|
||
crewSub: 'Tu peña, en un carné',
|
||
pick: 'Elige una peña',
|
||
none: 'Aún no estás en ninguna peña — únete a una o crea la tuya.',
|
||
hint: 'El carné se construye con los datos firmados de la peña. Edita la peña en su página para cambiarlo.',
|
||
members: 'MIEMBROS',
|
||
spots: 'SPOTS',
|
||
est: 'Desde {{year}}',
|
||
openCall: 'Convocatoria abierta',
|
||
verifiedCrew: 'Peña verificada',
|
||
viewCrew: 'Ver la peña',
|
||
},
|
||
event: {
|
||
pass: 'PASE DE EVENTO',
|
||
passSub: 'Un pase para un evento al que vas',
|
||
pick: 'Elige un evento',
|
||
none: 'Aún no hay eventos — crea uno o confirma tu asistencia a uno primero.',
|
||
hint: 'El pase se construye con los datos firmados del evento. Solo el organizador puede cambiarlo.',
|
||
admits: 'ADMITE A',
|
||
going: '{{count}} van',
|
||
verifiedEvent: 'Evento verificado',
|
||
viewEvent: 'Ver el evento',
|
||
issuePass: 'Emitir un pase de acceso',
|
||
issuePassBtn: 'Emitir pase',
|
||
issuePassHint: 'Un pase firmado para un asistente concreto — lo muestra en la entrada.',
|
||
notOrganiser: 'Solo el organizador puede emitir pases',
|
||
passIssued: 'Pase emitido',
|
||
issueFailed: 'No se pudo emitir el pase',
|
||
issuedPasses: 'Pases de acceso emitidos',
|
||
},
|
||
studio: {
|
||
unsaved: 'Cambios sin guardar',
|
||
saved: 'Guardado',
|
||
saveChanges: 'Guardar cambios',
|
||
allSaved: 'Guardado — al día',
|
||
showOnCard: 'Mostrar en el carné',
|
||
derived: 'Desde tu perfil de skater',
|
||
noSkaterProfile: 'Aún no tienes perfil de skater —',
|
||
editSkaterProfile: 'añade tus estilos y nivel',
|
||
noPhoto: 'Aún no tienes foto de perfil —',
|
||
addPhoto: 'añádela en tu perfil',
|
||
finishTitle: 'Completa tu carné',
|
||
finishDesc: 'Una foto y un perfil de skater lo hacen parecer real.',
|
||
checkPhoto: 'Foto de perfil',
|
||
checkName: 'Nombre visible',
|
||
checkProfile: 'Estilos y nivel',
|
||
checkCrew: 'Únete a una peña',
|
||
moreTypes: 'Más tipos de carné se desbloquean al mapear spots tuyos, unirte a peñas o confirmar asistencia a eventos.',
|
||
accent: 'Color de acento',
|
||
accentHint: 'Sustituye el acento del tema',
|
||
accentClear: 'Usar color del tema',
|
||
logo: 'Logo / escudo propio',
|
||
logoAdd: 'Subir',
|
||
logoChange: 'Cambiar',
|
||
logoClear: 'Quitar',
|
||
},
|
||
back: {
|
||
title: 'Reverso imprimible',
|
||
desc: 'Peñas, roles, patrocinadores y enlaces en el reverso',
|
||
showBack: 'Ver reverso',
|
||
showFront: 'Ver anverso',
|
||
empty: 'Aquí no hay nada aún — añade peñas, roles o patrocinadores.',
|
||
},
|
||
verify: {
|
||
checking: 'Comprobando el carné…',
|
||
notFound: 'Carné no encontrado',
|
||
notFoundDesc: 'No se ha encontrado ningún evento en los relés. Puede que se haya eliminado o que el enlace sea incorrecto.',
|
||
invalid: 'Firma no válida',
|
||
invalidDesc: 'Este evento existe pero su firma no se verifica. No te fíes.',
|
||
authentic: 'Auténtico',
|
||
authenticDesc: 'La firma del emisor es válida.',
|
||
kind: 'Tipo',
|
||
kindPark: 'Pase de acceso a parque',
|
||
kindRider: 'Carné de rider',
|
||
kindCrew: 'Carné de peña',
|
||
kindEvent: 'Pase de evento',
|
||
organiser: 'Organizador',
|
||
expired: 'Caducado',
|
||
valid: 'Válido',
|
||
holder: 'Titular',
|
||
ticketHolder: 'Titular de la entrada',
|
||
rsvp: 'Asistencia',
|
||
rsvpGoing: 'Va',
|
||
rsvpInterested: 'Interesado',
|
||
rsvpNone: 'Sin confirmación',
|
||
revoked: 'Pase revocado',
|
||
revokedDesc: 'El emisor canceló este pase — no lo aceptes.',
|
||
issuedBy: 'Emitido por',
|
||
accessLevel: 'Nivel de acceso',
|
||
validThru: 'Válido hasta',
|
||
selfIssued: 'Estado',
|
||
selfIssuedDesc: 'Carné de identidad autoemitido',
|
||
venue: 'Sede',
|
||
venueVerified: 'Verificado — la clave del dueño de esta sede coincide con el emisor.',
|
||
venueMismatch: 'Este pase nombra una sede que no pertenece a la clave del emisor.',
|
||
venueNone: 'Sin vincular a ninguna sede.',
|
||
viewCard: 'Ver el carné',
|
||
disclaimer: 'Una firma válida demuestra quién firmó este carné — no es prueba de habilidad ni de derechos de acceso más allá de lo que emitió la sede.',
|
||
details: 'Detalles',
|
||
invalidLink: 'Enlace no válido',
|
||
invalidLinkDesc: 'Eso no parece un enlace de carné válido.',
|
||
},
|
||
public: {
|
||
invalid: 'Eso no parece un enlace de carné válido.',
|
||
createYourOwn: 'Crea tu propio carné',
|
||
editYourCard: 'Edita tu carné',
|
||
backToEditor: 'Volver al editor',
|
||
backHome: 'Volver al inicio',
|
||
notCustomised: 'Este skater aún no ha personalizado su carné — esta es la apariencia por defecto.',
|
||
verifyNote: 'Escanea el QR del carné para verificarlo.',
|
||
},
|
||
},
|
||
role: {
|
||
owner: 'Propietario',
|
||
admin: 'Admin',
|
||
organiser: 'Organizador',
|
||
verifiedOwner: 'Propietario verificado',
|
||
},
|
||
nfc: {
|
||
write: 'Escribir en etiqueta NFC',
|
||
written: 'Etiqueta escrita',
|
||
writtenDesc: 'Acerca la etiqueta a un móvil para abrir la verificación.',
|
||
failed: 'No se pudo escribir la etiqueta',
|
||
},
|
||
venueAccess: {
|
||
title: 'Pases de acceso',
|
||
desc: 'Emite un pase firmado a un rider para que pueda demostrar el acceso en la puerta: muestra su carné y cualquiera puede escanear el QR para verificarlo.',
|
||
active: '{{count}} activos',
|
||
revoked: '{{count}} revocados',
|
||
issue: 'Emitir un pase',
|
||
verifyHint: 'Se verifica escaneando, sin app ni cuenta.',
|
||
publicTitle: 'Pases de acceso',
|
||
publicDesc: 'Este lugar emite pases de acceso. Escanea el carné del rider en la puerta para verificarlo.',
|
||
badge: 'Pases',
|
||
sellerHint: 'El local de este vendedor emite pases de acceso',
|
||
},
|
||
trustUi: {
|
||
alertsTitle: 'Avisos de la red',
|
||
alertsDesc: 'Cuentas que sigues que personas de confianza han reportado o silenciado.',
|
||
alertsEmpty: 'Sin avisos. Revisamos las cuentas que sigues por reportes de confianza.',
|
||
alertsReported: 'Reportada por {{count}} personas de confianza',
|
||
alertsMuted: 'Silenciada por {{count}} personas de confianza',
|
||
alertsIgnore: 'Ignorar',
|
||
alertsUnfollow: 'Dejar de seguir',
|
||
alertsLogin: 'Inicia sesion para ver avisos de las cuentas que sigues.',
|
||
providerTitle: 'Proveedor',
|
||
providerDesc: 'Las puntuaciones vienen de un proveedor que elijas. El proveedor de la comunidad es el predeterminado.',
|
||
useCommunity: 'Usar proveedor de la comunidad',
|
||
setProvider: 'Elegir un proveedor',
|
||
customPubkeyPlaceholder: 'npub o clave hex del proveedor',
|
||
customRelayPlaceholder: 'wss://relay.ejemplo.com',
|
||
invalidProvider: 'Introduce una npub o clave hex de 64 caracteres, y un relay wss://.',
|
||
publishFailed: 'No se pudo publicar el proveedor. Intentalo de nuevo.',
|
||
providerSaved: 'Proveedor actualizado.',
|
||
loggedOutProvider: 'Inicia sesion para elegir un proveedor.',
|
||
showMarks: 'Mostrar marcas de confianza',
|
||
showMarksDesc: 'Marcas de verificado y desconocido. Los reportes siempre se muestran.',
|
||
sourceLabel: 'Fuente',
|
||
sourceHouse: 'Proveedor de confianza de la comunidad',
|
||
sourceCustom: 'Tu proveedor',
|
||
loggedOut: 'Inicia sesion para elegir tu propio proveedor de confianza.',
|
||
seoTitle: 'Cómo funciona la confianza',
|
||
seoDescription: 'Cómo muestra SkateSpots la confianza: tres estados, de dónde vienen las puntuaciones y por qué la ausencia no es desconfianza.',
|
||
title: 'Cómo funciona la confianza',
|
||
intro: 'Aquí la confianza es una señal, no un veredicto. Viene de a quién conoces o de un proveedor que elijas. No clasificamos a las personas a nivel global.',
|
||
statesTitle: 'Tres estados',
|
||
verifiedTitle: 'Verificado',
|
||
verifiedDesc: 'Alguien de tu red respalda esta cuenta: un amigo de un amigo, o el proveedor que elegiste.',
|
||
unknownTitle: 'Desconocido',
|
||
unknownDesc: 'Nadie la ha respaldado todavía. Aquí empieza toda cuenta nueva.',
|
||
flaggedTitle: 'Marcado',
|
||
flaggedDesc: 'Personas de confianza han reportado esta cuenta. Es una advertencia para mirar más de cerca, no una prueba de nada.',
|
||
absenceTitle: 'Sin distintivo no es desconfianza',
|
||
absenceDesc: 'La mayoría de las cuentas no muestran nada. Significa que nadie de tu red las ha respaldado todavía, no que haya algo malo. Nunca interpretes la ausencia como algo negativo.',
|
||
sourceTitle: 'Quién lo calcula',
|
||
sourceDesc: 'Por defecto usamos tu propia red. También puedes elegir un proveedor de confianza que publique puntuaciones firmadas en Nostr (NIP-85), o desactivar la visualización. Marcado siempre aparece, porque es una señal de seguridad.',
|
||
endorsementTitle: 'Aparecer no es un aval',
|
||
endorsementDesc: 'Un distintivo verificado significa que alguien respaldó, no que la persona sea buena. Un marcado significa que personas de confianza la reportaron, no que sea culpable. Revisa los detalles antes de decidir.',
|
||
povTitle: 'Depende del punto de vista',
|
||
povDesc: 'Una puntuación es relativa a quién mira. Una clasificación de un proveedor o una persona no es comparable con otra, y nunca la presentamos como un hecho objetivo.',
|
||
settingsCta: 'Gestionar en Ajustes',
|
||
},
|
||
marketTerms: {
|
||
link: 'Normas del mercadillo',
|
||
seoTitle: 'Normas del mercadillo',
|
||
seoDescription: 'Cómo funcionan los anuncios de SkateSpots: entre particulares, con precaución y con reglas.',
|
||
title: 'Normas del mercadillo',
|
||
intro: 'SkateSpots es un tablón de material entre particulares. Tratas directamente con la otra persona: no custodianos dinero, no enviamos artículos ni resolvemos disputas.',
|
||
howTitle: 'Cómo funciona',
|
||
howBody: 'Publica material, contacta con el vendedor por mensaje privado y cerrad directamente (efectivo, Lightning o un cambio). No hay carrito ni pago en la app.',
|
||
rulesTitle: 'Qué no está permitido',
|
||
rulesBody: 'Nada ilegal, peligroso o para adultos; ni drogas, armas, falsificaciones o artículos robados. Mantén los anuncios sobre material de skate y afines.',
|
||
respectTitle: 'Respeto',
|
||
respectBody: 'Sin abusos, acoso, amenazas ni odio. La moderación puede ocultar anuncios o cuentas.',
|
||
trustTitle: 'La confianza es una guía, no una garantía',
|
||
trustBody: 'Las marcas de verificación y la reputación son señales de la red, no promesas. Comprueba antes de comerciar.',
|
||
trustLink: 'Cómo funciona la confianza',
|
||
privacyLink: 'Qué sale de tu dispositivo',
|
||
safetyTitle: 'Comercia con seguridad',
|
||
safetyBody: 'Quedad en lugares públicos para las entregas, usa escrow o una señal de buena fe en envíos, y nunca envíes dinero fuera de la app.',
|
||
moderationTitle: 'La moderación es suave y reversible',
|
||
moderationBody: 'El contenido oculto sigue en los relays y puede restaurarse; las disputas entre personas las resolvéis vosotros.',
|
||
},
|
||
};
|
||
|
||
export default { ...es, ...batch3Es, ...batch4Es, ...legacyEs };
|