771 lines
24 KiB
TypeScript
771 lines
24 KiB
TypeScript
/**
|
|
* English translations
|
|
* Note: Skateboarding trick names and terminology stay in English
|
|
*/
|
|
const en = {
|
|
// Common
|
|
common: {
|
|
loading: 'Loading...',
|
|
error: 'Error',
|
|
save: 'Save',
|
|
cancel: 'Cancel',
|
|
delete: 'Delete',
|
|
edit: 'Edit',
|
|
create: 'Create',
|
|
submit: 'Submit',
|
|
close: 'Close',
|
|
back: 'Back',
|
|
next: 'Next',
|
|
done: 'Done',
|
|
search: 'Search',
|
|
filter: 'Filter',
|
|
sort: 'Sort',
|
|
share: 'Share',
|
|
copy: 'Copy',
|
|
copied: 'Copied!',
|
|
viewAll: 'View All',
|
|
seeMore: 'See More',
|
|
showMore: 'Show More',
|
|
showLess: 'Show Less',
|
|
noResults: 'No results found',
|
|
tryAgain: 'Try Again',
|
|
learnMore: 'Learn More',
|
|
getStarted: 'Get Started',
|
|
yes: 'Yes',
|
|
no: 'No',
|
|
or: 'or',
|
|
and: 'and',
|
|
free: 'Free',
|
|
new: 'New',
|
|
popular: 'Popular',
|
|
featured: 'Featured',
|
|
verified: 'Verified',
|
|
sats: 'sats',
|
|
clear: 'Clear',
|
|
clearFilters: 'Clear Filters',
|
|
clearAll: 'Clear All',
|
|
},
|
|
|
|
// Navigation
|
|
nav: {
|
|
home: 'Home',
|
|
map: 'Shops & Spots',
|
|
lab: 'The Lab',
|
|
events: 'Events',
|
|
crews: 'Crews',
|
|
wallet: 'Wallet',
|
|
settings: 'Settings',
|
|
more: 'More',
|
|
rewards: 'Rewards',
|
|
stats: 'Community Stats',
|
|
about: 'About',
|
|
food: 'Food',
|
|
marketplace: 'Marketplace',
|
|
},
|
|
|
|
// Authentication
|
|
auth: {
|
|
login: 'Log in',
|
|
logout: 'Log out',
|
|
signUp: 'Sign Up',
|
|
signUpTitle: 'New to Nostr?',
|
|
signUpDesc: "Create a new account to get started. It's free and open.",
|
|
orLogIn: 'Or log in',
|
|
loginWithExtension: 'Login with Extension',
|
|
loginWithAmber: 'Login with Amber (Android)',
|
|
loginWithKey: 'Secret Key (nsec) or Recovery Phrase',
|
|
loginWithBunker: 'Login with Nostr Connect',
|
|
bunkerUri: 'Bunker Connection String',
|
|
openAmber: 'Open Amber',
|
|
connectToBunker: 'Connect to Bunker',
|
|
noExtension: 'No extension detected.',
|
|
extensionHelp: 'Try using the Sign Up button above to create a new account, or use the Amber, Key or Bunker tabs if you have existing credentials.',
|
|
amberDesc: 'Amber is a secure Nostr signer app for Android devices. Click the button below to open Amber and authorize access.',
|
|
bunkerDesc: 'Access your account from any device using a remote signer (bunker). Your keys stay safe on the server, never exposed to websites.',
|
|
keyPlaceholder: 'nsec1... or your 12-word recovery phrase',
|
|
keyHint: 'You can paste either your nsec key or 12-word recovery phrase',
|
|
uploadKeyFile: 'Upload Your Key File',
|
|
loggingIn: 'Logging in...',
|
|
connecting: 'Connecting...',
|
|
verifying: 'Verifying...',
|
|
},
|
|
|
|
// Backup Reminder
|
|
backup: {
|
|
title: 'Backup Your Account!',
|
|
subtitle: 'Important security reminder',
|
|
message: 'Your recovery phrase or secret key (nsec) is the ONLY way to access your account from other devices.',
|
|
warning: 'If you lose it, you lose your account forever!',
|
|
backupNow: 'Backup Now',
|
|
confirmed: "I've Backed It Up",
|
|
remindLater: 'Remind me later',
|
|
},
|
|
|
|
// PWA Install
|
|
pwa: {
|
|
installTitle: 'Install SkateSpots',
|
|
installSubtitle: 'Get the full app experience',
|
|
addToHomeScreen: 'Add to Home Screen',
|
|
installApp: 'Install App',
|
|
maybeLater: 'Maybe later',
|
|
gotIt: 'Got it!',
|
|
benefits: {
|
|
fast: 'Lightning Fast',
|
|
offline: 'Works Offline',
|
|
fullAccess: 'Full Access',
|
|
},
|
|
iosStep1: 'Tap the Share button',
|
|
iosStep1Hint: 'at the bottom of Safari',
|
|
iosStep2: 'Scroll and tap "Add to Home Screen"',
|
|
iosStep2Hint: 'in the share menu',
|
|
iosStep3: 'Tap "Add" to install',
|
|
iosStep3Hint: 'The app will appear on your home screen',
|
|
androidStep1: 'Tap the menu button',
|
|
androidStep1Hint: '(three dots) in your browser',
|
|
androidStep2: 'Select "Add to Home Screen"',
|
|
androidStep2Hint: 'or "Install App"',
|
|
androidStep3: 'Confirm to install',
|
|
androidStep3Hint: 'The app will appear on your home screen',
|
|
tagline: 'Free • Works offline • Fast & reliable',
|
|
},
|
|
|
|
// Home/Index Page
|
|
home: {
|
|
tagline: 'Community-Powered • Relay-Based',
|
|
title: 'SKATE SPOTS',
|
|
subtitle: 'Discover Spots • Meet Up • Learn Tricks • Support Locals',
|
|
description: 'Real skateboarding happens offline - this tool helps you find it.',
|
|
betaWarning: 'BETA - Under Construction • Use at Your Own Risk',
|
|
pwaHint: 'Progressive Web App - Install on Your Device',
|
|
exploreMap: 'Explore Map',
|
|
addSpot: 'Add Spot',
|
|
globalSpots: 'Global Spots',
|
|
openCommunity: 'Open Community',
|
|
lightningZaps: 'Lightning Zaps',
|
|
featuredSpots: 'Featured Spots',
|
|
featuredSpotsDesc: 'Community-verified skate spots from around the world',
|
|
upcomingEvents: 'Upcoming Events',
|
|
upcomingEventsDesc: 'Contests, meetups, and sessions happening soon',
|
|
noSpotsYet: 'No spots found yet',
|
|
noSpotsHint: 'Be the first to add a skate spot!',
|
|
noEventsYet: 'No upcoming events',
|
|
noEventsHint: 'Check back later or create one!',
|
|
theLab: 'The Lab',
|
|
theLabDesc: 'Learn tricks, find coaches, and level up your skating',
|
|
coaches: 'Coaches',
|
|
coachesDesc: 'Learn from experienced skaters who can help you progress',
|
|
filmers: 'Filmers',
|
|
filmersDesc: 'Connect with filmers to capture your best clips',
|
|
findCoach: 'Find a Coach',
|
|
becomeCoach: 'Become a Coach',
|
|
findFilmer: 'Find a Filmer',
|
|
becomeFilmer: 'Become a Filmer',
|
|
viewAllSpots: 'View All Spots',
|
|
viewAllEvents: 'View All Events',
|
|
createEvent: 'Create Event',
|
|
readyToShare: 'Ready to Share?',
|
|
readyToShareDesc: 'Help the skateboarding community grow by adding your favorite spots. Every location you share helps fellow skaters discover new places to ride.',
|
|
},
|
|
|
|
// Map Page
|
|
mapPage: {
|
|
title: 'Shops & Spots',
|
|
spots: 'Spots',
|
|
shops: 'Shops',
|
|
filters: 'Filters',
|
|
listView: 'List',
|
|
mapView: 'Map',
|
|
nearMe: 'Near Me',
|
|
searchPlaceholder: 'Search spots...',
|
|
noSpotsInArea: 'No spots in this area',
|
|
zoomIn: 'Zoom In',
|
|
zoomOut: 'Zoom Out',
|
|
myLocation: 'My Location',
|
|
locationsFound: '{{count}} locations found',
|
|
spotsOnly: 'Spots only',
|
|
shopsOnly: 'Shops only',
|
|
spotsAndShops: 'Spots & Shops',
|
|
noSpotsMatch: 'No spots match your filters.',
|
|
noSpotsYet: 'No spots have been added yet.',
|
|
addFirstSpot: 'Add First Spot',
|
|
},
|
|
|
|
// Spots
|
|
spots: {
|
|
addSpot: 'Add Spot',
|
|
editSpot: 'Edit Spot',
|
|
spotDetails: 'Spot Details',
|
|
spotName: 'Spot Name',
|
|
spotType: 'Spot Type',
|
|
description: 'Description',
|
|
location: 'Location',
|
|
address: 'Address',
|
|
photos: 'Photos',
|
|
addPhotos: 'Add Photos',
|
|
obstacles: 'Obstacles',
|
|
features: 'Features',
|
|
bustLevel: 'Bust Level',
|
|
bestTime: 'Best Time',
|
|
tips: 'Tips',
|
|
reviews: 'Reviews',
|
|
addReview: 'Add Review',
|
|
reportSpot: 'Report Spot',
|
|
directions: 'Directions',
|
|
shareSpot: 'Share Spot',
|
|
createdBy: 'Created by',
|
|
lastUpdated: 'Last updated',
|
|
// Spot types (keep some English as they're skate terms)
|
|
types: {
|
|
park: 'Skatepark',
|
|
street: 'Street Spot',
|
|
diy: 'DIY Spot',
|
|
plaza: 'Plaza',
|
|
indoor: 'Indoor',
|
|
bowl: 'Bowl',
|
|
vert: 'Vert',
|
|
miniramp: 'Mini Ramp',
|
|
},
|
|
// Bust levels
|
|
bustLevels: {
|
|
chill: 'Chill',
|
|
moderate: 'Moderate',
|
|
sketchy: 'Sketchy',
|
|
heavy: 'Heavy',
|
|
},
|
|
},
|
|
|
|
// Events
|
|
events: {
|
|
title: 'Skate Events',
|
|
createEvent: 'Create Event',
|
|
editEvent: 'Edit Event',
|
|
eventDetails: 'Event Details',
|
|
eventName: 'Event Name',
|
|
eventType: 'Event Type',
|
|
date: 'Date',
|
|
time: 'Time',
|
|
startDate: 'Start Date',
|
|
endDate: 'End Date',
|
|
venue: 'Venue',
|
|
organizer: 'Organizer',
|
|
attendees: 'Attendees',
|
|
going: 'Going',
|
|
interested: 'Interested',
|
|
rsvp: 'RSVP',
|
|
ticketPrice: 'Ticket Price',
|
|
freeEntry: 'Free Entry',
|
|
register: 'Register',
|
|
moreInfo: 'More Info',
|
|
upcomingEvents: 'Upcoming',
|
|
pastEvents: 'Past',
|
|
noEvents: 'No events found',
|
|
findEvents: 'Find contests, demos, sessions, and more',
|
|
searchPlaceholder: 'Search events...',
|
|
loginToCreate: 'Login to create events',
|
|
noEventsMatch: 'No upcoming events match your filters.',
|
|
noUpcoming: 'No upcoming events found.',
|
|
noPast: 'No past events found.',
|
|
// Event types
|
|
types: {
|
|
contest: 'Contest',
|
|
session: 'Session',
|
|
meetup: 'Meetup',
|
|
premiere: 'Video Premiere',
|
|
workshop: 'Workshop',
|
|
demo: 'Demo',
|
|
jam: 'Jam',
|
|
},
|
|
},
|
|
|
|
// Shops
|
|
shops: {
|
|
title: 'Skate Shops',
|
|
addShop: 'Add Shop',
|
|
editShop: 'Edit Shop',
|
|
shopDetails: 'Shop Details',
|
|
shopName: 'Shop Name',
|
|
hours: 'Hours',
|
|
phone: 'Phone',
|
|
website: 'Website',
|
|
services: 'Services',
|
|
brands: 'Brands',
|
|
supportLocal: 'Support Local',
|
|
},
|
|
|
|
// Wallet
|
|
wallet: {
|
|
title: 'Wallet',
|
|
balance: 'Balance',
|
|
send: 'Send',
|
|
receive: 'Receive',
|
|
transactions: 'Transactions',
|
|
history: 'History',
|
|
noTransactions: 'No transactions yet',
|
|
sendSats: 'Send Sats',
|
|
receiveSats: 'Receive Sats',
|
|
amount: 'Amount',
|
|
recipient: 'Recipient',
|
|
lightning: 'Lightning',
|
|
onChain: 'On-chain',
|
|
invoice: 'Invoice',
|
|
address: 'Address',
|
|
scanQR: 'Scan QR',
|
|
paste: 'Paste',
|
|
payInvoice: 'Pay Invoice',
|
|
createInvoice: 'Create Invoice',
|
|
copied: 'Copied to clipboard!',
|
|
insufficientFunds: 'Insufficient funds',
|
|
paymentSent: 'Payment sent!',
|
|
paymentReceived: 'Payment received!',
|
|
cashu: {
|
|
title: 'Cashu Wallet',
|
|
tokens: 'Tokens',
|
|
mint: 'Mint',
|
|
mints: 'Mints',
|
|
manageMints: 'Manage Mints',
|
|
addMint: 'Add Mint',
|
|
removeMint: 'Remove Mint',
|
|
defaultMint: 'Default Mint',
|
|
backup: 'Backup',
|
|
restore: 'Restore',
|
|
recoveryPhrase: 'Recovery Phrase',
|
|
viewRecoveryPhrase: 'View Recovery Phrase',
|
|
seedWarning: 'This is like your Nostr nsec - keep it secret and backed up!',
|
|
},
|
|
},
|
|
|
|
// Settings
|
|
settings: {
|
|
title: 'Settings',
|
|
profile: 'Profile',
|
|
editProfile: 'Edit Profile',
|
|
account: 'Account',
|
|
security: 'Security',
|
|
relays: 'Relays',
|
|
appearance: 'Appearance',
|
|
language: 'Language',
|
|
notifications: 'Notifications',
|
|
privacy: 'Privacy',
|
|
about: 'About',
|
|
help: 'Help',
|
|
feedback: 'Feedback',
|
|
version: 'Version',
|
|
// Profile fields
|
|
displayName: 'Display Name',
|
|
username: 'Username',
|
|
bio: 'Bio',
|
|
website: 'Website',
|
|
lightningAddress: 'Lightning Address',
|
|
profilePicture: 'Profile Picture',
|
|
banner: 'Banner',
|
|
saveProfile: 'Save Profile',
|
|
// Security
|
|
backupKeys: 'Backup Keys',
|
|
exportKeys: 'Export Keys',
|
|
secretKey: 'Secret Key',
|
|
publicKey: 'Public Key',
|
|
showSecretKey: 'Show Secret Key',
|
|
hideSecretKey: 'Hide Secret Key',
|
|
copyKey: 'Copy Key',
|
|
keysBackedUp: "You've confirmed that your keys are safely backed up.",
|
|
keysNotBackedUp: 'Make sure to backup your recovery phrase or secret key!',
|
|
// Language
|
|
selectLanguage: 'Select Language',
|
|
english: 'English',
|
|
spanish: 'Spanish',
|
|
},
|
|
|
|
// Lab / Coaches
|
|
lab: {
|
|
title: 'The Lab',
|
|
subtitle: 'Level up your skating',
|
|
coaches: 'Coaches',
|
|
filmers: 'Filmers',
|
|
findCoach: 'Find a Coach',
|
|
becomeCoach: 'Become a Coach',
|
|
findFilmer: 'Find a Filmer',
|
|
becomeFilmer: 'Become a Filmer',
|
|
hourlyRate: 'Hourly Rate',
|
|
experience: 'Experience',
|
|
specialties: 'Specialties',
|
|
availability: 'Availability',
|
|
bookSession: 'Book a Session',
|
|
contactCoach: 'Contact Coach',
|
|
noCoaches: 'No coaches found in your area',
|
|
noFilmers: 'No filmers found in your area',
|
|
},
|
|
|
|
// Rewards
|
|
rewards: {
|
|
title: 'Rewards',
|
|
yourPoints: 'Your Points',
|
|
earnPoints: 'Earn Points',
|
|
redeemPoints: 'Redeem Points',
|
|
leaderboard: 'Leaderboard',
|
|
achievements: 'Achievements',
|
|
dailyTasks: 'Daily Tasks',
|
|
weeklyTasks: 'Weekly Tasks',
|
|
},
|
|
|
|
// Zaps
|
|
zaps: {
|
|
zapButton: 'Zap',
|
|
sendZap: 'Send Zap',
|
|
zapAmount: 'Zap Amount',
|
|
customAmount: 'Custom Amount',
|
|
addMessage: 'Add a message (optional)',
|
|
sending: 'Sending...',
|
|
sent: 'Zap sent!',
|
|
failed: 'Zap failed',
|
|
received: 'You received a zap!',
|
|
},
|
|
|
|
// Errors
|
|
errors: {
|
|
somethingWentWrong: 'Something went wrong',
|
|
tryAgainLater: 'Please try again later',
|
|
notFound: 'Not found',
|
|
pageNotFound: 'Page not found',
|
|
unauthorized: 'Unauthorized',
|
|
loginRequired: 'Please log in to continue',
|
|
networkError: 'Network error',
|
|
checkConnection: 'Please check your internet connection',
|
|
invalidInput: 'Invalid input',
|
|
requiredField: 'This field is required',
|
|
},
|
|
|
|
// Time/Date
|
|
time: {
|
|
today: 'Today',
|
|
yesterday: 'Yesterday',
|
|
tomorrow: 'Tomorrow',
|
|
thisWeek: 'This week',
|
|
nextWeek: 'Next week',
|
|
thisMonth: 'This month',
|
|
justNow: 'Just now',
|
|
minutesAgo: '{{count}} minutes ago',
|
|
hoursAgo: '{{count}} hours ago',
|
|
daysAgo: '{{count}} days ago',
|
|
},
|
|
|
|
// Footer
|
|
footer: {
|
|
vibedWith: 'Vibed with',
|
|
poweredBy: 'Powered by',
|
|
openSource: 'Open Source',
|
|
contribute: 'Contribute',
|
|
decentralized: 'Decentralized',
|
|
communityOwned: 'Community Owned',
|
|
},
|
|
|
|
// Create Spot Page
|
|
createSpot: {
|
|
title: 'Add a Skate Spot',
|
|
subtitle: 'Share a skateboarding spot with the community',
|
|
backToMap: 'Back to Map',
|
|
namePlaceholder: 'e.g., Hollywood High School',
|
|
descriptionPlaceholder: 'Describe the spot, obstacles, best times to skate, security info, etc.',
|
|
addressPlaceholder: 'e.g., 1521 N Highland Ave, Los Angeles, CA',
|
|
selectType: 'Select spot type',
|
|
selectBustLevel: 'Select bust level',
|
|
uploadPhotos: 'Upload',
|
|
dragDrop: 'Drag and drop or click to upload',
|
|
maxPhotos: 'Max 5 photos',
|
|
publishing: 'Publishing...',
|
|
success: 'Spot published successfully!',
|
|
error: 'Failed to publish spot',
|
|
locationRequired: 'Please select a location on the map',
|
|
useCurrentLocation: 'Use my current location',
|
|
pickOnMap: 'Pick Location on Map',
|
|
loginToAdd: 'You need to log in to add a skate spot.',
|
|
requiredFields: 'Tell us about this spot. All fields marked with * are required.',
|
|
coordinates: 'Coordinates',
|
|
latitudePlaceholder: 'Latitude (e.g., 34.1012)',
|
|
longitudePlaceholder: 'Longitude (e.g., -118.3389)',
|
|
gettingLocation: 'Getting location...',
|
|
accessType: 'Access Type',
|
|
publicTitle: 'Public - Open to Everyone',
|
|
publicDesc: 'Skate parks, public plazas, street spots',
|
|
privateTitle: 'Private Property - Permission Needed',
|
|
privateDesc: 'Backyard ramps, private land, gated spots',
|
|
localsTitle: 'Ask Locals First',
|
|
localsDesc: "Respect the spot, don't blow it out",
|
|
contactInfo: 'Contact Information',
|
|
contactPlaceholder: 'e.g., Phone number, Instagram, email...',
|
|
contactHintPrivate: 'How should people contact you for permission?',
|
|
contactHintLocals: 'How should people reach out to ask about the spot?',
|
|
},
|
|
|
|
// Create Event Page
|
|
createEvent: {
|
|
title: 'Create an Event',
|
|
subtitle: 'Organize a skateboarding event for the community',
|
|
backToEvents: 'Back to Events',
|
|
namePlaceholder: 'e.g., Summer Skate Session',
|
|
descriptionPlaceholder: 'Describe the event, what to expect, rules, prizes, etc.',
|
|
selectType: 'Select event type',
|
|
venuePlaceholder: 'e.g., Venice Beach Skatepark, CA',
|
|
selectDate: 'Select date',
|
|
selectTime: 'Select time',
|
|
ticketPricePlaceholder: 'Leave empty for free events',
|
|
publishing: 'Publishing...',
|
|
success: 'Event published successfully!',
|
|
error: 'Failed to publish event',
|
|
loginToCreate: 'You need to log in to create an event.',
|
|
requiredFields: 'Tell us about this event. All fields marked with * are required.',
|
|
startDateTime: 'Start Date & Time',
|
|
endDateTime: 'End Date & Time (optional)',
|
|
coordinatesOptional: 'Coordinates (optional)',
|
|
coverImage: 'Cover Image',
|
|
uploadCover: 'Upload cover image',
|
|
nip05Recommended: 'NIP-05 Verification Recommended',
|
|
nip05Desc: 'Add a NIP-05 identifier to your profile to verify your identity and build trust with attendees.',
|
|
addNip05: 'Add NIP-05 in Settings',
|
|
},
|
|
|
|
// Spot Detail Page
|
|
spotDetail: {
|
|
postedBy: 'Posted by',
|
|
getDirections: 'Get Directions',
|
|
reviews: 'Reviews',
|
|
noReviews: 'No reviews yet',
|
|
beFirstReview: 'Be the first to review this spot!',
|
|
writeReview: 'Write a Review',
|
|
submitReview: 'Submit Review',
|
|
rating: 'Rating',
|
|
reviewPlaceholder: 'Share your experience at this spot...',
|
|
relatedSpots: 'Nearby Spots',
|
|
},
|
|
|
|
// Event Detail Page
|
|
eventDetail: {
|
|
organizedBy: 'Organized by',
|
|
eventInfo: 'Event Info',
|
|
location: 'Location',
|
|
dateTime: 'Date & Time',
|
|
price: 'Price',
|
|
attendeeCount: '{{count}} going',
|
|
interested: 'Interested',
|
|
going: 'Going',
|
|
notGoing: 'Not Going',
|
|
share: 'Share Event',
|
|
},
|
|
|
|
// Profile Page
|
|
profile: {
|
|
posts: 'Posts',
|
|
spots: 'Spots',
|
|
events: 'Events',
|
|
following: 'Following',
|
|
followers: 'Followers',
|
|
editProfile: 'Edit Profile',
|
|
follow: 'Follow',
|
|
unfollow: 'Unfollow',
|
|
noPostsYet: 'No posts yet',
|
|
noBio: 'No bio yet',
|
|
zapProfile: 'Zap this skater',
|
|
},
|
|
|
|
// About Page
|
|
about: {
|
|
title: 'About SkateSpots',
|
|
subtitle: 'A decentralized skateboarding community',
|
|
whatIs: 'What is SkateSpots?',
|
|
whatIsDesc: 'SkateSpots is a community-powered platform for discovering skateboarding locations worldwide. Built on Nostr, it gives skaters true ownership of their data.',
|
|
features: 'Features',
|
|
featuresDesc: 'Find spots, create events, connect with coaches, and support your local skate shops—all in one place.',
|
|
nostr: 'Built on Nostr',
|
|
nostrDesc: 'Nostr is a simple, open protocol that enables truly censorship-resistant global communication. Your account and data belong to you.',
|
|
openSource: 'Open Source',
|
|
openSourceDesc: 'SkateSpots is completely open source. Contribute, fork, or run your own instance.',
|
|
lightning: 'Lightning Payments',
|
|
lightningDesc: 'Zap your favorite skaters, coaches, and content creators with Bitcoin Lightning payments.',
|
|
},
|
|
|
|
// FAQ Page
|
|
faq: {
|
|
title: 'Frequently Asked Questions',
|
|
subtitle: 'Everything you need to know about SkateSpots',
|
|
whatIsNostr: 'What is Nostr?',
|
|
whatIsNostrAnswer: 'Nostr is an open protocol for decentralized social networking. Unlike traditional platforms, you own your data and identity.',
|
|
howToStart: 'How do I get started?',
|
|
howToStartAnswer: 'Click "Sign Up" to create a new Nostr account, or "Log In" if you already have one. You can use a browser extension, mobile app, or secret key.',
|
|
whatAreZaps: 'What are Zaps?',
|
|
whatAreZapsAnswer: 'Zaps are Bitcoin Lightning tips you can send to other users. They\'re a way to show appreciation for great content or support creators.',
|
|
howToAddSpot: 'How do I add a spot?',
|
|
howToAddSpotAnswer: 'Log in to your account, click "Add Spot" and fill in the details including location, photos, and description.',
|
|
isItFree: 'Is SkateSpots free?',
|
|
isItFreeAnswer: 'Yes! SkateSpots is completely free to use. You can optionally send Zaps (Bitcoin tips) to other users.',
|
|
canIEditSpot: 'Can I edit or delete my spots?',
|
|
canIEditSpotAnswer: 'Yes, you can edit spots you\'ve created. Due to the decentralized nature of Nostr, deletion requests are sent but some relays may retain data.',
|
|
},
|
|
|
|
// Onboarding
|
|
onboarding: {
|
|
welcome: 'Welcome to SkateSpots!',
|
|
welcomeDesc: 'Let\'s get you set up in just a few steps.',
|
|
step1Title: 'Create Your Account',
|
|
step1Desc: 'Your Nostr keys are being generated. This is like a password that you control.',
|
|
step2Title: 'Backup Your Keys',
|
|
step2Desc: 'Save your recovery phrase somewhere safe. This is the only way to recover your account!',
|
|
step3Title: 'Set Up Your Profile',
|
|
step3Desc: 'Tell the community about yourself.',
|
|
step4Title: 'You\'re Ready!',
|
|
step4Desc: 'Start exploring spots, events, and connecting with skaters.',
|
|
skipForNow: 'Skip for now',
|
|
continueToApp: 'Continue to App',
|
|
},
|
|
|
|
|
|
|
|
// Lab Page
|
|
labPage: {
|
|
title: 'The Lab',
|
|
subtitle: 'Learn tricks. Capture moments. Connect with other Skaters',
|
|
coachesTab: 'Coaching',
|
|
filmersTab: 'Filming',
|
|
offerCoaching: 'OFFER COACHING',
|
|
offerFilming: 'OFFER FILMING',
|
|
loginToOffer: 'Login to offer services',
|
|
whatToLearn: 'WHAT DO YOU WANT TO LEARN?',
|
|
whatContent: 'WHAT TYPE OF CONTENT?',
|
|
selectSkillsDesc: "Select skills and we'll match you with coaches",
|
|
selectFilmingDesc: "Select filming services you're looking for",
|
|
searchPlaceholder: 'Search by name, location, or skills...',
|
|
noServicesYet: 'NO SERVICES YET',
|
|
beFirstToOffer: 'Be the first to offer coaching or filming services to the community!',
|
|
skills: 'Skills',
|
|
rate: 'Rate',
|
|
perHour: '/hour',
|
|
contact: 'Contact',
|
|
viewProfile: 'View Profile',
|
|
noProfilesYet: 'No profiles yet',
|
|
beFirstCoach: 'Be the first to register as a coach!',
|
|
beFirstFilmer: 'Be the first to register as a filmer!',
|
|
yearsExperience: 'years experience',
|
|
},
|
|
|
|
// Become Coach/Filmer Forms
|
|
becomeCoach: {
|
|
title: 'Become a Coach',
|
|
subtitle: 'Share your skills and help other skaters progress',
|
|
bioPlaceholder: 'Tell us about your skating background and teaching style...',
|
|
skillsPlaceholder: 'e.g., kickflip, heelflip, grinds, bowls',
|
|
selectSkills: 'Select skills you can teach',
|
|
hourlyRate: 'Hourly Rate (sats)',
|
|
ratePlaceholder: 'e.g., 5000',
|
|
locationPlaceholder: 'Your city or area',
|
|
publishing: 'Publishing profile...',
|
|
success: 'Coach profile created!',
|
|
error: 'Failed to create profile',
|
|
},
|
|
|
|
becomeFilmer: {
|
|
title: 'Become a Filmer',
|
|
subtitle: 'Capture the best clips for the community',
|
|
bioPlaceholder: 'Tell us about your filming experience and equipment...',
|
|
specialtiesPlaceholder: 'e.g., fisheye, long lens, drone, editing',
|
|
selectSpecialties: 'Select your specialties',
|
|
hourlyRate: 'Hourly Rate (sats)',
|
|
ratePlaceholder: 'e.g., 5000',
|
|
locationPlaceholder: 'Your city or area',
|
|
portfolioUrl: 'Portfolio URL',
|
|
portfolioPlaceholder: 'Link to your work (YouTube, Instagram, etc.)',
|
|
publishing: 'Publishing profile...',
|
|
success: 'Filmer profile created!',
|
|
error: 'Failed to create profile',
|
|
},
|
|
|
|
// Skills (keep in English as skate terminology)
|
|
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: 'Food Spots',
|
|
subtitle: 'Fuel up before or after your session',
|
|
addFood: 'Add Food Spot',
|
|
categories: {
|
|
all: 'All',
|
|
burgers: 'Burgers',
|
|
pizza: 'Pizza',
|
|
tacos: 'Tacos',
|
|
coffee: 'Coffee',
|
|
drinks: 'Drinks',
|
|
snacks: 'Snacks',
|
|
},
|
|
skaterFriendly: 'Skater Friendly',
|
|
nearSpots: 'Near Skate Spots',
|
|
},
|
|
|
|
// Marketplace
|
|
marketplace: {
|
|
title: 'Marketplace',
|
|
subtitle: 'Buy, sell, and trade skate gear',
|
|
addListing: 'Add Listing',
|
|
condition: 'Condition',
|
|
conditions: {
|
|
new: 'New',
|
|
likeNew: 'Like New',
|
|
good: 'Good',
|
|
fair: 'Fair',
|
|
poor: 'Poor',
|
|
},
|
|
categories: {
|
|
all: 'All',
|
|
decks: 'Decks',
|
|
trucks: 'Trucks',
|
|
wheels: 'Wheels',
|
|
bearings: 'Bearings',
|
|
shoes: 'Shoes',
|
|
clothing: 'Clothing',
|
|
protection: 'Protection',
|
|
other: 'Other',
|
|
},
|
|
priceRange: 'Price Range',
|
|
location: 'Location',
|
|
seller: 'Seller',
|
|
contact: 'Contact Seller',
|
|
makeOffer: 'Make Offer',
|
|
sold: 'Sold',
|
|
available: 'Available',
|
|
gear: 'Gear',
|
|
sellGear: 'Sell Gear',
|
|
wantToBuy: 'Want to Buy',
|
|
},
|
|
|
|
// Weather
|
|
weather: {
|
|
title: 'Weather',
|
|
current: 'Current Conditions',
|
|
forecast: 'Forecast',
|
|
humidity: 'Humidity',
|
|
wind: 'Wind',
|
|
feelsLike: 'Feels like',
|
|
goodForSkating: 'Good for skating!',
|
|
notIdeal: 'Not ideal conditions',
|
|
allWeather: 'All Weather',
|
|
goodWeather: 'Good Weather',
|
|
perfectWeather: 'Perfect Weather',
|
|
},
|
|
};
|
|
|
|
export default en;
|