First slice of TRUST_SCORE.md. - lib/nip85.ts: parse kind-10040 provider designations, resolve a provider with a house fallback, parse kind-30382 assertions (rank/followers/ reporters/muters/hops; absent hops means no path, absence is not distrust), and author-check the provider. - hooks/useTrustAssertions.ts: batch read from the resolved provider, signature-verified via onlyVerified + the author check. - lib/trustLadder.ts: three buckets and thresholds (flagged = trusted reporters >= 2; verified rank >= 2). - hooks/useTrustBucket.ts: prefers a NIP-85 assertion (verify + flag), falls back to the local WoT ladder (verify only). - TrustBadge.tsx: now renders Verified / Unknown / Flagged with glyph, colour and tooltip; Unknown hidden by default, Flagged always shown. Reaches the map/tour/event cards, marketplace card, listing detail and coach detail through the shared component. Open follow-ups (in TRUST_SCORE.md): batch the bucket at list level, a 'who reported' breakdown, a provider-choice setting, alerts, confidence scoring.
7380 lines
380 KiB
TypeScript
7380 lines
380 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',
|
||
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.',
|
||
},
|
||
offers: {
|
||
accepted: 'Aceptada',
|
||
declined: 'Rechazada',
|
||
withdrawn: 'Retirada',
|
||
open: 'Abierta',
|
||
noAmount: 'sin importe',
|
||
titleOwner: 'Ofertas ({{count}})',
|
||
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.',
|
||
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.',
|
||
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.',
|
||
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 de skater',
|
||
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',
|
||
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: {
|
||
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',
|
||
},
|
||
};
|
||
|
||
export default { ...es, ...batch3Es, ...batch4Es, ...legacyEs };
|