- StashPage: Friends only / Add to Wishlist / Add Item / Edit Item / Public stash / Uploading… / Add Photos / placeholders / item count / list-grid aria labels now go through t() (t added to the sub-components). - Manual Pro copy no longer claims the pass is already active: it says the pass activates once the provider confirms the payment. - Bumped low-contrast gray-600 guidance text to gray-400 (DM empty state, E2EE note, stash item count).
275 lines
11 KiB
TypeScript
275 lines
11 KiB
TypeScript
/**
|
|
* Batch 3 — Sasquatch AI panel translations (`sasquatchUi.*`).
|
|
*
|
|
* Filled by the Sasquatch translation pass; keys must exist in BOTH languages.
|
|
*
|
|
* NOT translated here (deliberately): the LLM system prompt / language
|
|
* directive, the static FAQ answer bodies and the locally-formatted chat
|
|
* responses — those are AI/conversational content, not UI chrome.
|
|
*/
|
|
const sasquatchUi = {
|
|
en: {
|
|
// ── Connection status ──
|
|
live: 'live',
|
|
offline: 'offline',
|
|
|
|
// ── Panel default content ──
|
|
genericTitle: 'SkateSpots Assistant 🦧',
|
|
genericGreeting:
|
|
"Yo! I'm The Sasquatch. Ask me anything about spots, events, coaches, gear, or how the app works. I've got live data from the SkateSpots relay!",
|
|
q1: 'Plan me 3 days in Lisbon',
|
|
q2: 'Find spots near me',
|
|
q3: 'Any upcoming events?',
|
|
q4: 'What are crews?',
|
|
q5: 'How do zaps work?',
|
|
q6: 'What is Nostr?',
|
|
q7: 'What is My Stash?',
|
|
q8: 'Is this free?',
|
|
|
|
// ── Bubble + header ──
|
|
bubbleTitle: 'Press and drag to move · Tap to open',
|
|
openGuideAria: 'Open Sasquatch guide',
|
|
activeUntil: 'Active until {{date}}',
|
|
platformOwner: 'Platform owner',
|
|
upgradeTitle: 'Upgrade to Sasquatch Pro',
|
|
goPro: 'Go Pro',
|
|
aiBalanceTitle: 'Sasquatch AI credit balance (owner-only) — top up at {{provider}}',
|
|
aiChip: '⚡ AI {{balance}}',
|
|
minimizeToBubbleAria: 'Minimize to bubble',
|
|
minimize: 'Minimize',
|
|
closePanelAria: 'Close panel',
|
|
close: 'Close',
|
|
|
|
// ── Chat chrome ──
|
|
askLab: 'Ask about Coaching & Filming',
|
|
askMap: 'Ask about Spots, Shops & Gear',
|
|
askAnything: 'Ask me anything 🛹',
|
|
quickQuestions: 'Quick questions:',
|
|
you: '🧑 You',
|
|
thinking: 'thinking...',
|
|
inputPlaceholder: 'Ask about spots, events, coaches...',
|
|
liveDataFrom: 'Live data from',
|
|
nostrRelays: 'Nostr relays',
|
|
clear: 'clear',
|
|
|
|
// ── Loading / streaming states ──
|
|
gettingLocation: '📍 Getting your location…',
|
|
findingClosest: '🔍 Finding the closest spots…',
|
|
checkingLive: '🔍 Checking live data…',
|
|
planningTrip: '🗺️ Planning your {{destination}} trip...',
|
|
searchingRelays: '🔍 Searching the relays for {{tool}}...',
|
|
|
|
// ── Sasquatch Pro dialog ──
|
|
perk1: 'Personal assistant — Sasquatch reads your own Stash, crews, spots & listings',
|
|
perk2: 'Action drafts: list gear, post a skate status, plan a trip — you confirm before anything publishes',
|
|
perk3: 'Answers use your personal context, not just public data',
|
|
perk4: '⚡ Directly support SkateSpots & keep it free and ad-free',
|
|
welcomeTitle: 'Thanks for supporting Sasquatch Pro! 🦧⚡',
|
|
welcomeDesc:
|
|
'Payment sent — your pass activates once the provider confirms it (usually within a minute). Thanks for keeping the streets free.',
|
|
invoiceCopied: 'Invoice copied',
|
|
dialogDesc: 'Supercharge your AI skate guide. 100% funds a free, no-ads community app.',
|
|
proSupporter: "You're a Pro supporter ⚡",
|
|
extendPrompt: 'Want to extend? Pick a tier below to add more time.',
|
|
scanToPayPre: 'Scan to pay',
|
|
scanToPayAmount: '{{sats}} sats',
|
|
scanToPayPost: 'for {{label}} of Pro',
|
|
invoiceQrAlt: 'Lightning invoice QR',
|
|
copyInvoice: 'Copy invoice',
|
|
ivePaid: "I've paid",
|
|
ivePaidHint:
|
|
'Tap "I\'ve paid" after your wallet confirms — this records your pass to your Nostr identity.',
|
|
freeStaysPre:
|
|
'Free Sasquatch stays free — public spot/event/coach search, trip planning + the full trick glossary. Pro adds the ',
|
|
freeStaysEmphasis: 'personal + action',
|
|
freeStaysPost: ' layer.',
|
|
loginFirst: 'Log in first to upgrade.',
|
|
paysTo: 'Pays to',
|
|
overLightning: 'over Lightning. Bound to your npub.',
|
|
popular: 'Popular',
|
|
sats: 'sats',
|
|
extend: 'Extend',
|
|
|
|
// ── Draft action card ──
|
|
done: 'Done!',
|
|
cancelledNothing: 'Cancelled — nothing was published.',
|
|
draftReview: 'Draft — review & confirm',
|
|
statusTextPlaceholder: 'Status text',
|
|
titlePlaceholder: 'Title',
|
|
priceSatsPlaceholder: 'Price (sats)',
|
|
conditionPlaceholder: 'Condition',
|
|
cancel: 'Cancel',
|
|
|
|
// ── Owner AI balance card ──
|
|
aiTitle: 'Sasquatch AI',
|
|
owner: 'Owner',
|
|
notConfigured: 'not configured',
|
|
unavailable: 'unavailable',
|
|
satsValue: '{{balance}} sats',
|
|
theNode: 'the node',
|
|
lowBalance: 'Running low — top up at {{provider}} or AI will fall back to the keyless provider.',
|
|
aiDesc: 'Pay-per-request AI, funded in sats via Routstr. Tops up when low.',
|
|
|
|
// ── Pro tier labels & badges (PRO_TIERS) ──
|
|
tier7d: '7 days',
|
|
tier1m: '1 month',
|
|
tier3m: '3 months',
|
|
tier1y: '1 year',
|
|
badgeTry: 'Try it',
|
|
badgeOff20: '20% off',
|
|
badgeBest: 'Best value · 40% off',
|
|
|
|
// ── Draft action summary ──
|
|
draftPostStatusTitle: 'Post a skating status',
|
|
draftAutoExpires: 'Auto-expires in {{count}} min',
|
|
draftPostStatusCta: 'Post status',
|
|
draftCategory: 'Category: {{value}}',
|
|
draftSize: 'Size: {{value}}',
|
|
draftCondition: 'Condition: {{value}}',
|
|
draftMaxPrice: 'Max price: {{price}} {{currency}}',
|
|
draftPriceOpen: 'Price: open',
|
|
draftLookingForTitle: 'Looking for "{{title}}"',
|
|
draftWantedCta: 'Post wanted ad',
|
|
draftPrice: 'Price: {{price}} {{currency}}',
|
|
draftPriceOffer: 'Price: make offer',
|
|
draftListTitle: 'List "{{title}}" for sale',
|
|
draftPublishCta: 'Publish listing',
|
|
statusPosted: 'Status posted 🛹',
|
|
wantedPublished: 'Wanted ad published 🔎',
|
|
listingPublished: 'Listing published 💸',
|
|
mustBeLoggedIn: 'You must be logged in.',
|
|
},
|
|
es: {
|
|
// ── Connection status ──
|
|
live: 'en vivo',
|
|
offline: 'sin conexión',
|
|
|
|
// ── Panel default content ──
|
|
genericTitle: 'Asistente de SkateSpots 🦧',
|
|
genericGreeting:
|
|
'¡Hola! Soy el Sasquatch. Pregúntame lo que quieras sobre spots, eventos, entrenadores, material o cómo funciona la app. ¡Tengo datos en vivo del relé de SkateSpots!',
|
|
q1: 'Planifícame 3 días en Lisboa',
|
|
q2: 'Encuentra spots cerca de mí',
|
|
q3: '¿Próximos eventos?',
|
|
q4: '¿Qué son los crews?',
|
|
q5: '¿Cómo funcionan los zaps?',
|
|
q6: '¿Qué es Nostr?',
|
|
q7: '¿Qué es Mi Stash?',
|
|
q8: '¿Es gratis?',
|
|
|
|
// ── Bubble + header ──
|
|
bubbleTitle: 'Pulsa y arrastra para mover · Toca para abrir',
|
|
openGuideAria: 'Abrir la guía del Sasquatch',
|
|
activeUntil: 'Activo hasta el {{date}}',
|
|
platformOwner: 'Propietario de la plataforma',
|
|
upgradeTitle: 'Mejora a Sasquatch Pro',
|
|
goPro: 'Hazte Pro',
|
|
aiBalanceTitle: 'Saldo de crédito de la IA del Sasquatch (solo propietario) — recarga en {{provider}}',
|
|
aiChip: '⚡ IA {{balance}}',
|
|
minimizeToBubbleAria: 'Minimizar a la burbuja',
|
|
minimize: 'Minimizar',
|
|
closePanelAria: 'Cerrar el panel',
|
|
close: 'Cerrar',
|
|
|
|
// ── Chat chrome ──
|
|
askLab: 'Pregunta sobre entrenamiento y grabación',
|
|
askMap: 'Pregunta sobre spots, tiendas y material',
|
|
askAnything: 'Pregúntame lo que quieras 🛹',
|
|
quickQuestions: 'Preguntas rápidas:',
|
|
you: '🧑 Tú',
|
|
thinking: 'pensando...',
|
|
inputPlaceholder: 'Pregunta sobre spots, eventos, entrenadores...',
|
|
liveDataFrom: 'Datos en vivo de',
|
|
nostrRelays: 'relés de Nostr',
|
|
clear: 'borrar',
|
|
|
|
// ── Loading / streaming states ──
|
|
gettingLocation: '📍 Obteniendo tu ubicación…',
|
|
findingClosest: '🔍 Buscando los spots más cercanos…',
|
|
checkingLive: '🔍 Comprobando datos en vivo…',
|
|
planningTrip: '🗺️ Planificando tu viaje a {{destination}}...',
|
|
searchingRelays: '🔍 Buscando en los relés: {{tool}}...',
|
|
|
|
// ── Sasquatch Pro dialog ──
|
|
perk1: 'Asistente personal — el Sasquatch lee tu propio Stash, crews, spots y anuncios',
|
|
perk2: 'Borradores de acciones: publica material, comparte tu estado de skate, planifica un viaje — tú confirmas antes de que se publique nada',
|
|
perk3: 'Las respuestas usan tu contexto personal, no solo datos públicos',
|
|
perk4: '⚡ Apoya directamente a SkateSpots y ayúdanos a mantenerla gratis y sin anuncios',
|
|
welcomeTitle: '¡Gracias por apoyar Sasquatch Pro! 🦧⚡',
|
|
welcomeDesc:
|
|
'Pago enviado: tu pase se activa cuando el proveedor lo confirme (normalmente en un minuto). Gracias por mantener las calles libres.',
|
|
invoiceCopied: 'Factura copiada',
|
|
dialogDesc: 'Potencia tu guía de skate con IA. El 100 % financia una app comunitaria gratis y sin anuncios.',
|
|
proSupporter: 'Eres un colaborador Pro ⚡',
|
|
extendPrompt: '¿Quieres ampliar? Elige una tarifa abajo para añadir más tiempo.',
|
|
scanToPayPre: 'Escanea para pagar',
|
|
scanToPayAmount: '{{sats}} sats',
|
|
scanToPayPost: 'por {{label}} de Pro',
|
|
invoiceQrAlt: 'QR de la factura Lightning',
|
|
copyInvoice: 'Copiar factura',
|
|
ivePaid: 'He pagado',
|
|
ivePaidHint:
|
|
'Toca "He pagado" cuando tu cartera lo confirme — esto registra tu pase en tu identidad de Nostr.',
|
|
freeStaysPre:
|
|
'El Sasquatch gratis sigue siendo gratis — búsqueda pública de spots, eventos y entrenadores, planificación de viajes + el glosario completo de trucos. Pro añade la ',
|
|
freeStaysEmphasis: 'capa personal y de acciones',
|
|
freeStaysPost: '.',
|
|
loginFirst: 'Inicia sesión primero para mejorar.',
|
|
paysTo: 'Paga a',
|
|
overLightning: 'por Lightning. Vinculado a tu npub.',
|
|
popular: 'Popular',
|
|
sats: 'sats',
|
|
extend: 'Ampliar',
|
|
|
|
// ── Draft action card ──
|
|
done: '¡Hecho!',
|
|
cancelledNothing: 'Cancelado — no se publicó nada.',
|
|
draftReview: 'Borrador — revisa y confirma',
|
|
statusTextPlaceholder: 'Texto del estado',
|
|
titlePlaceholder: 'Título',
|
|
priceSatsPlaceholder: 'Precio (sats)',
|
|
conditionPlaceholder: 'Estado',
|
|
cancel: 'Cancelar',
|
|
|
|
// ── Owner AI balance card ──
|
|
aiTitle: 'Sasquatch IA',
|
|
owner: 'Propietario',
|
|
notConfigured: 'sin configurar',
|
|
unavailable: 'no disponible',
|
|
satsValue: '{{balance}} sats',
|
|
theNode: 'el nodo',
|
|
lowBalance: 'Saldo bajo — recarga en {{provider}} o la IA recurrirá al proveedor sin clave.',
|
|
aiDesc: 'IA de pago por uso, financiada en sats vía Routstr. Se recarga cuando baja.',
|
|
|
|
// ── Pro tier labels & badges (PRO_TIERS) ──
|
|
tier7d: '7 días',
|
|
tier1m: '1 mes',
|
|
tier3m: '3 meses',
|
|
tier1y: '1 año',
|
|
badgeTry: 'Pruébalo',
|
|
badgeOff20: '20 % dto.',
|
|
badgeBest: 'Mejor precio · 40 % dto.',
|
|
|
|
// ── Draft action summary ──
|
|
draftPostStatusTitle: 'Publicar un estado de skate',
|
|
draftAutoExpires: 'Se borra automáticamente en {{count}} min',
|
|
draftPostStatusCta: 'Publicar estado',
|
|
draftCategory: 'Categoría: {{value}}',
|
|
draftSize: 'Talla: {{value}}',
|
|
draftCondition: 'Estado: {{value}}',
|
|
draftMaxPrice: 'Precio máx.: {{price}} {{currency}}',
|
|
draftPriceOpen: 'Precio: abierto',
|
|
draftLookingForTitle: 'Buscando "{{title}}"',
|
|
draftWantedCta: 'Publicar anuncio',
|
|
draftPrice: 'Precio: {{price}} {{currency}}',
|
|
draftPriceOffer: 'Precio: aceptar ofertas',
|
|
draftListTitle: 'Vender "{{title}}"',
|
|
draftPublishCta: 'Publicar anuncio',
|
|
statusPosted: 'Estado publicado 🛹',
|
|
wantedPublished: 'Anuncio de búsqueda publicado 🔎',
|
|
listingPublished: 'Anuncio publicado 💸',
|
|
mustBeLoggedIn: 'Tienes que iniciar sesión.',
|
|
},
|
|
};
|
|
|
|
export default sasquatchUi;
|