From 7635e1eaa9e872d81d253879df9905da999a5865 Mon Sep 17 00:00:00 2001 From: SkateSpots Date: Wed, 7 Oct 2026 22:35:32 +0700 Subject: [PATCH] =?UTF-8?q?i18n(de):=20complete=20German=20translation=20(?= =?UTF-8?q?100%=20=E2=80=94=208450=20keys)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/i18n/de/batch1.ts | 314 ++++++- src/i18n/de/batch2.ts | 1652 ++++++++++++++++++++++++++++++++- src/i18n/de/batch3.ts | 1294 +++++++++++++++++++++++++- src/i18n/de/batch4.ts | 1115 +++++++++++++++++++++- src/i18n/de/batch5.ts | 1597 +++++++++++++++++++++++++++++++- src/i18n/de/batch6.ts | 2041 ++++++++++++++++++++++++++++++++++++++++- src/i18n/de/batch7.ts | 908 +++++++++++++++++- src/i18n/de/batch8.ts | 621 ++++++++++++- 8 files changed, 9526 insertions(+), 16 deletions(-) diff --git a/src/i18n/de/batch1.ts b/src/i18n/de/batch1.ts index e8e1b52..17a006e 100644 --- a/src/i18n/de/batch1.ts +++ b/src/i18n/de/batch1.ts @@ -1,4 +1,314 @@ -/** de — batch 1. Filled by the translation pass; empty until then. */ -const deBatch1 = {}; +const deBatch1 = { + common: { + loading: "Wird geladen…", + error: "Fehler", + save: "Speichern", + cancel: "Abbrechen", + delete: "Löschen", + edit: "Bearbeiten", + add: "Hinzufügen", + remove: "Entfernen", + create: "Erstellen", + submit: "Absenden", + close: "Schließen", + back: "Zurück", + next: "Weiter", + done: "Fertig", + search: "Suchen", + filter: "Filtern", + sort: "Sortieren", + share: "Teilen", + more: "Mehr", + copy: "Kopieren", + copied: "Kopiert!", + viewAll: "Alle ansehen", + seeMore: "Mehr ansehen", + showMore: "Mehr anzeigen", + showLess: "Weniger anzeigen", + noResults: "Keine Ergebnisse gefunden", + tryAgain: "Erneut versuchen", + learnMore: "Mehr erfahren", + getStarted: "Loslegen", + yes: "Ja", + no: "Nein", + or: "oder", + and: "und", + free: "Kostenlos", + new: "Neu", + popular: "Beliebt", + featured: "Empfohlen", + verified: "Verifiziert", + sats: "sats", + clear: "Leeren", + clearFilters: "Filter zurücksetzen", + clearAll: "Alle zurücksetzen", + hide: "Ausblenden", + undo: "Rückgängig", + }, + nav: { + home: "Start", + map: "Spots", + lab: "The Lab", + events: "Events", + crews: "Crews", + wallet: "Wallet", + settings: "Einstellungen", + more: "Mehr", + rewards: "Belohnungen", + stats: "Community-Statistiken", + about: "Über", + food: "Essen", + marketplace: "Marktplatz", + mints: "Mints", + appShop: "App-Shop", + diy: "DIY", + trades: "Marktplatz", + stash: "Stash", + collections: "Sammlungen", + contacts: "Kontakte", + messages: "Nachrichten", + skaters: "Skaters", + glossary: "Glossar", + riderCard: "Rider Card", + supporters: "Unterstützer ⚡", + newsletter: "Newsletter", + viewProfile: "Profil ansehen", + leaderboards: "Bestenlisten", + }, + chromeUi: { + skipToContent: "Zum Inhalt springen", + menu: "Menü", + inBadge: "In", + loggedIn: "Angemeldet", + profile: "Profil", + logIn: "Anmelden", + logOut: "Abmelden", + notLoggedIn: "Nicht angemeldet", + loggedOutPrompt: + "Melde dich an, um Spots hinzuzufügen, Skater zu zappen und deine Favoriten zu speichern", + accounts: "Konten", + addAnotherAccount: "Weiteres Konto hinzufügen", + setStatus: "Status setzen", + setYourStatus: "Lege deinen Status fest", + status: "Status", + addSpot: "Spot hinzufügen", + myData: "Meine Daten", + myStash: "Mein Stash", + myCollections: "Meine Sammlungen", + viewMyProfile: "Mein Profil ansehen", + customizeNavBar: "Navigationsleiste anpassen", + ecash: "Ecash", + madeWith: "Gemacht mit", + forSkateCommunity: "für die Skateboard-Community", + beta: "Beta", + license: "Lizenz", + privacy: "Datenschutz", + collaborators: "Mitwirkende & Freunde", + notSponsoredBy: "Nicht gesponsert von", + errorTitle: "Konnte nicht geladen werden", + errorDescription: + "Die Netzwerkanfrage ist fehlgeschlagen. Prüfe deine Verbindung und versuche es erneut.", + tryAgain: "Erneut versuchen", + weatherOn: "Wetter an", + weatherOff: "Wetter aus", + trustFilter: "Vertrauensfilter", + filterByTrustLevel: "Nach Vertrauensstufe filtern", + trust: { + all: "Alle Nutzer", + allDesc: "Inhalte von allen anzeigen", + verified: "Verifiziert", + verifiedDesc: "Du folgst ihnen oder sie sind verifiziert (Vertrauen ≥90)", + trusted: "Vertrauenswürdig", + trustedDesc: + "Freunde von Freunden oder NIP-05 verifiziert (Vertrauen ≥60)", + following: "Nur Gefolgte", + followingDesc: "Nur Inhalte von Personen anzeigen, denen du folgst", + followingShort: "Gefolgt", + }, + sort: { + recent: "Am neuesten", + recentDesc: "Neueste zuerst", + trust: "Höchstes Vertrauen", + trustDesc: "Vertrauenswürdigste Ersteller", + proximity: "Am nächsten bei mir", + proximityDesc: "Nächstgelegene Orte", + popular: "Am beliebtesten", + popularDesc: "Meiste Kommentare/Reaktionen", + zaps: "Am meisten gezappt", + zapsDesc: "Höchster erhaltener Wert", + }, + spotType: { + street: "Street", + transition: "Transition", + park: "Park", + plaza: "Plaza", + diy: "DIY", + bowl: "Bowl", + vert: "Vert", + indoor: "Halle", + skatepark: "Skatepark", + miniramp: "Miniramp", + }, + }, + desktopNav: { + title: "Desktop-Navigation", + desc: "Wähle aus, welche Tabs in der oberen Leiste erscheinen und in welcher Reihenfolge. Ausgeblendete Tabs bleiben weiterhin im „Mehr“-Menü.", + fixed: "Fixiert", + shownInTopBar: "In oberer Leiste angezeigt ({{count}})", + noExtraTabs: + "Keine zusätzlichen Tabs angezeigt — alles ist im „Mehr“-Menü. Füge unten welche hinzu.", + inMoreMenu: "Im „Mehr“-Menü ({{count}})", + moveUp: "{{name}} nach oben verschieben", + moveDown: "{{name}} nach unten verschieben", + hide: "{{name}} ausblenden", + moveToMore: "Ins Mehr-Menü verschieben", + show: "Anzeigen", + showInTopBar: "{{name}} in oberer Leiste anzeigen", + showInTopBarTitle: "In oberer Leiste anzeigen", + reset: "Auf Standard zurücksetzen", + }, + navSheet: { + title: "Passe deine Leiste an", + desc: "Wähle die {{count}} Tabs, die du am meisten nutzt. Alles andere bleibt im Menü.", + preview: "Vorschau", + empty: "Leer", + order: "Reihenfolge ({{done}}/{{total}})", + available: "Verfügbare Tabs", + full: "Leiste voll — entferne einen, um zu tauschen", + moveUp: "{{name}} nach oben verschieben", + moveDown: "{{name}} nach unten verschieben", + login: "Anmelden", + profile: "Profil", + reset: "Zurücksetzen", + done: "Fertig", + }, + pwa: { + installTitle: "SkateSpots installieren", + installSubtitle: "Erlebe die vollständige App", + addToHomeScreen: "Zum Home-Bildschirm hinzufügen", + installApp: "App installieren", + maybeLater: "Vielleicht später", + gotIt: "Verstanden!", + benefits: { + fast: "Blitzschnell", + offline: "Funktioniert offline", + fullAccess: "Voller Zugriff", + }, + iosStep1: "Tippe auf die Teilen-Schaltfläche", + iosStep1Hint: "unten in Safari", + iosStep2: "Scrolle und tippe auf \"Zum Home-Bildschirm hinzufügen\"", + iosStep2Hint: "im Teilen-Menü", + iosStep3: "Tippe auf \"Hinzufügen\", um zu installieren", + iosStep3Hint: "Die App erscheint auf deinem Home-Bildschirm", + androidStep1: "Tippe auf die Menü-Schaltfläche", + androidStep1Hint: "(drei Punkte) in deinem Browser", + androidStep2: "Wähle \"Zum Home-Bildschirm hinzufügen\"", + androidStep2Hint: "oder \"App installieren\"", + androidStep3: "Bestätige die Installation", + androidStep3Hint: "Die App erscheint auf deinem Home-Bildschirm", + tagline: "Kostenlos • Funktioniert offline • Schnell & zuverlässig", + }, + home: { + tagline: "Von der Community • Auf Relays basierend", + title: "SKATE SPOTS", + subtitle: "Spots entdecken • Treffen • Tricks lernen • Lokale unterstützen", + description: + "Echtes Skateboarding passiert offline – dieses Tool hilft dir, es zu finden.", + betaWarning: "BETA – Im Aufbau • Nutzung auf eigenes Risiko", + pwaHint: "Progressive Web App – Installiere sie auf deinem Gerät", + exploreMap: "Karte erkunden", + addSpot: "Spot hinzufügen", + globalSpots: "Globale Spots", + openCommunity: "Offene Community", + lightningZaps: "Lightning-Zaps", + featuredSpots: "Empfohlene Spots", + featuredSpotsDesc: + "Von der Community verifizierte Skate-Spots aus aller Welt", + upcomingEvents: "Kommende Events", + upcomingEventsDesc: + "Contests, Meetups und Sessions, die bald stattfinden", + noSpotsYet: "Noch keine Spots gefunden", + noSpotsHint: "Sei der Erste, der einen Skate-Spot hinzufügt!", + noEventsYet: "Keine kommenden Events", + noEventsHint: "Schau später wieder vorbei oder erstelle eines!", + theLab: "The Lab", + theLabDesc: + "Lerne Tricks, finde Coaches und bring dein Skaten auf das nächste Level", + coaches: "Coaches", + coachesDesc: + "Lerne von erfahrenen Skatern, die dir beim Fortschritt helfen können", + filmers: "Filmer", + filmersDesc: + "Vernetze dich mit Filmern, um deine besten Clips festzuhalten", + findCoach: "Coach finden", + becomeCoach: "Coach werden", + findFilmer: "Filmer finden", + becomeFilmer: "Filmer werden", + viewAllSpots: "Alle Spots ansehen", + viewAllEvents: "Alle Events ansehen", + createEvent: "Event erstellen", + readyToShare: "Bereit zum Teilen?", + readyToShareDesc: + "Hilf der Skateboard-Community zu wachsen, indem du deine Lieblings-Spots hinzufügst. Jeder Ort, den du teilst, hilft anderen Skatern, neue Orte zum Fahren zu entdecken.", + }, + about: { + title: "Über SkateSpots", + subtitle: "Eine dezentrale Skateboard-Community", + whatIs: "Was ist SkateSpots?", + whatIsDesc: + "SkateSpots ist eine von der Community betriebene Plattform zum Entdecken von Skateboard-Orten weltweit. Auf Nostr aufgebaut, gibt sie Skatern die wahre Kontrolle über ihre Daten.", + features: "Funktionen", + featuresDesc: + "Finde Spots, erstelle Events, vernetze dich mit Coaches und unterstütze deine lokalen Skate-Shops – alles an einem Ort.", + nostr: "Auf Nostr aufgebaut", + nostrDesc: + "Nostr ist ein einfaches, offenes Protokoll, das wirklich zensurresistente globale Kommunikation ermöglicht. Dein Konto und deine Daten gehören dir.", + openSource: "Open Source", + openSourceDesc: + "SkateSpots ist vollständig Open Source. Trage bei, forke oder betreibe deine eigene Instanz.", + lightning: "Lightning-Zahlungen", + lightningDesc: + "Zappe deine Lieblings-Skater, Coaches und Content-Ersteller mit Bitcoin-Lightning-Zahlungen.", + }, + faq: { + title: "Häufig gestellte Fragen", + subtitle: "Alles, was du über SkateSpots wissen musst", + whatIsNostr: "Was ist Nostr?", + whatIsNostrAnswer: + "Nostr ist ein offenes Protokoll für dezentrales soziales Netzwerken. Anders als traditionelle Plattformen gehören dir deine Daten und deine Identität.", + howToStart: "Wie fange ich an?", + howToStartAnswer: + "Klicke auf \"Registrieren\", um ein neues Nostr-Konto zu erstellen, oder auf \"Anmelden\", wenn du bereits eines hast. Du kannst eine Browser-Erweiterung, eine mobile App oder einen geheimen Schlüssel verwenden.", + whatAreZaps: "Was sind Zaps?", + whatAreZapsAnswer: + "Zaps sind Bitcoin-Lightning-Trinkgelder, die du an andere Nutzer senden kannst. Sie sind eine Möglichkeit, Wertschätzung für großartige Inhalte zu zeigen oder Ersteller zu unterstützen.", + howToAddSpot: "Wie füge ich einen Spot hinzu?", + howToAddSpotAnswer: + "Melde dich bei deinem Konto an, klicke auf \"Spot hinzufügen\" und fülle die Details aus, einschließlich Standort, Fotos und Beschreibung.", + isItFree: "Ist SkateSpots kostenlos?", + isItFreeAnswer: + "Ja! SkateSpots ist völlig kostenlos nutzbar. Du kannst optional Zaps (Bitcoin-Trinkgelder) an andere Nutzer senden.", + canIEditSpot: "Kann ich meine Spots bearbeiten oder löschen?", + canIEditSpotAnswer: + "Ja, du kannst Spots bearbeiten, die du erstellt hast. Aufgrund der dezentralen Natur von Nostr werden Löschanfragen gesendet, aber einige Relays behalten die Daten möglicherweise.", + }, + onboarding: { + welcome: "Willkommen bei SkateSpots!", + welcomeDesc: "Richten wir dich in nur wenigen Schritten ein.", + step1Title: "Erstelle dein Konto", + step1Desc: + "Deine Nostr-Schlüssel werden generiert. Das ist wie ein Passwort, das du kontrollierst.", + step2Title: "Sichere deine Schlüssel", + step2Desc: + "Bewahre deine Wiederherstellungsphrase an einem sicheren Ort auf. Das ist der einzige Weg, dein Konto wiederherzustellen!", + step3Title: "Richte dein Profil ein", + step3Desc: "Erzähl der Community von dir.", + step4Title: "Du bist bereit!", + step4Desc: + "Beginne, Spots und Events zu erkunden und dich mit Skatern zu vernetzen.", + skipForNow: "Erstmal überspringen", + continueToApp: "Weiter zur App", + }, +}; export default deBatch1; diff --git a/src/i18n/de/batch2.ts b/src/i18n/de/batch2.ts index 269ebac..3f95b0f 100644 --- a/src/i18n/de/batch2.ts +++ b/src/i18n/de/batch2.ts @@ -1,4 +1,1652 @@ -/** de — batch 2. Filled by the translation pass; empty until then. */ -const deBatch2 = {}; +/** de — batch 2. Filled by the 2026-10-07 German translation pass. */ +const deBatch2 = { + mapUi: { + mapFooter: { + links: "Links", + hide: "Karten-Links-Leiste ausblenden", + }, + findingSpots: "Spots werden gesucht", + loadingSpots: "Spots werden geladen", + loadingMap: "Karte wird geladen...", + mapViewAria: "Kartenansicht", + listViewAria: "Listenansicht", + layers: "Ebenen", + mapLayers: "Kartenebenen", + showOnMap: "Auf Karte anzeigen", + showResults: "Ergebnisse anzeigen", + quickActions: "Schnellaktionen", + spots: "Spots", + shops: "Shops", + gear: "Gear", + tours: "Touren", + events: "Events", + crews: "Crews", + spotType: "Spot-Typ", + sortBy: "Sortieren nach", + trustLevel: "Vertrauensstufe", + weather: "Wetter", + buySellGear: "Gear kaufen/verkaufen", + stash: "Stash", + more: "Mehr", + newHere: "Neu hier?", + welcomeDesc: "Entdecke Skate-Spots, Events und die Community.", + getOnZapstore: "Hol dir Zapstore", + dismiss: "Ausblenden", + addedBy: "Hinzugefügt von", + directions: "Route", + viewDetails: "Details ansehen", + viewDetailsArrow: "Details ansehen →", + spotDetails: "Spot-Details", + skateShop: "Skate-Shop", + skateSpot: "Skate-Spot", + youAreHere: "Du bist hier", + conditions: "Bedingungen", + weatherScoreSuffix: "{{score}}/100 Wetter", + wind: "Wind", + humidity: "Luftfeuchtigkeit", + airQuality: "Luftqualität", + threeDayForecast: "3-Tage-Vorhersage", + gearForSale: "Gear zu verkaufen ({{count}})", + viewItems: "Artikel ansehen →", + viewAllItems: "Alle {{count}} Artikel ansehen →", + viewGear: "Gear ansehen →", + localTour: "Lokale Tour", + meetAt: "Treffpunkt: {{place}}", + hours: "{{count}} Stunden", + level: "Level {{level}}", + viewTour: "Tour ansehen →", + upcomingEvent: "Kommendes Event", + viewEvent: "Event ansehen →", + skateCrew: "Skate-Crew", + members: "{{count}} Mitglieder", + since: "Seit {{year}}", + viewCrew: "Crew ansehen →", + acceptsBitcoin: "Akzeptiert Bitcoin", + boosted: "Geboostet", + website: "Website", + offlineSavedSpots: "Offline · gespeicherte Spots werden angezeigt", + cantReachRelays: "Relays nicht erreichbar", + relayOnlineNoAnswer: "Du bist online, aber das Community-Relay antwortet gerade nicht.", + youreOffline: "Du bist offline.", + savedOnDevice: "Spots, die du schon gesehen hast, sind auf diesem Gerät gespeichert und werden hier angezeigt.", + noSpotsMatchTitle: "Keine passenden Spots", + noSpotsMatchDesc: "Versuche eine andere Suche oder setze deine Filter zurück.", + noSpotsMappedYet: "Noch keine Spots kartiert", + noSpotsMappedDesc: "Sei der Erste, der deinen Park kartiert – es dauert nur eine Minute, er gehört dir, und der nächste Skater, der vorbeikommt, wird dir danken.", + addFirstSpot: "Ersten Spot hinzufügen", + findSpotsNearMe: "Spots in der Nähe finden", + locating: "Standort wird ermittelt…", + refiningLocation: "Standort wird verfeinert…", + refiningLocationDesc: "Zentriert auf deinem letzten Spot – ein frischer GPS-Fix wird eingestellt.", + locatingYou: "Dein Standort wird ermittelt…", + locatingDesc: "GPS-Fix wird geholt. Beim ersten Mal kann das bis zu einer Minute dauern.", + foundYou: "Gefunden", + foundYouDesc: "Die Karte wurde auf deinen Standort zentriert.", + locationPermissionNeeded: "Standortberechtigung erforderlich", + permissionNeededDesc: "Erlaube SkateSpots den Standortzugriff unter Einstellungen → Apps → SkateSpots → Berechtigungen und tippe dann erneut auf In der Nähe.", + locationTimedOut: "Zeitüberschreitung beim Standort", + timeoutNativeDesc: "Der Standort konnte nicht rechtzeitig ermittelt werden. Wenn du dich drinnen befindest, kann GPS keine Satelliten sehen – aktiviere Netzwerkstandort (Einstellungen → Standort) oder geh nach draußen und versuche es erneut.", + timeoutWebDesc: "Dein Standort konnte nicht rechtzeitig ermittelt werden. Prüfe dein Signal und versuche es erneut.", + noLocationProvider: "Kein Standortanbieter", + noProviderNativeDesc: "Dein Telefon stellt keinen Standort bereit. Aktiviere auf datenschutzfreundlichen ROMs (z. B. GrapheneOS) Netzwerkstandort unter Einstellungen → Standort oder stelle sicher, dass GPS an ist, und versuche es im Freien.", + noProviderWebDesc: "Es ist kein Standortanbieter verfügbar. Aktiviere die Standortdienste und versuche es erneut.", + locationUnavailable: "Standort nicht verfügbar", + unavailableNativeDesc: "Aktiviere Standort/GPS in deinen Telefoneinstellungen, erlaube SkateSpots den Standortzugriff (Einstellungen → Apps → SkateSpots → Berechtigungen) und versuche es dann erneut.", + unavailableWebDesc: "Dein Standort konnte nicht bestimmt werden. Stelle sicher, dass die Standortdienste aktiviert sind.", + locationBlocked: "Standort blockiert", + locationBlockedDesc: "Dein Browser hat den Standortzugriff für diese Seite blockiert. So aktivierst du ihn wieder:", + locationPlatformAndroid: "Android Chrome", + locationPlatformIos: "iOS Safari", + locationPlatformDesktop: "Desktop Chrome", + locationPlatformFirefox: "Firefox", + locationStepsAndroid: "Tippe auf das Schloss-Symbol in der Adressleiste → Website-Einstellungen → Standort → Erlauben", + locationStepsIos: "Einstellungen-App → Safari → Standort → Erlauben (oder tippe auf die Schaltfläche „AA“ in der Adressleiste von Safari)", + locationStepsDesktop: "Klicke auf das Schloss-Symbol → Website-Einstellungen → Standort → Erlauben", + locationStepsFirefox: "Klicke auf das Schloss-Symbol → Verbindung sicher → Weitere Informationen → Berechtigungen → Standortzugriff → Erlauben", + gotIt: "Verstanden", + addSpot: "Spot hinzufügen", + addShop: "Shop hinzufügen", + addEvent: "Event hinzufügen", + addSpotHereTitle: "Hier einen Spot hinzufügen?", + addSpotHereDesc: "Setze eine Markierung dort, wo du getippt hast", + sellGear: "Gear verkaufen", + offerTour: "Tour anbieten", + closeAddMenu: "Hinzufügen-Menü schließen", + addMenuAria: "Spot, Shop, Event, Gear oder Tour hinzufügen", + localChat: "Lokaler Chat", + localChatDesc: "Live-Chat für den Bereich, in dem die Karte zentriert ist. Wähle, wie weit der Kanal reicht.", + btcMapShowing: "{{count}} Orte in der Nähe, an denen du deine sats ausgeben kannst", + btcMapShow: "Orte anzeigen, an denen du deine sats ausgeben kannst (über BTC Map)", + yourPrivateStash: "Dein privater Stash", + stashIntro: "Verwalte dein Gear, setze Preise und finde Tauschpartner unter anderen Skatern.", + encryptionRequired: "Verschlüsselung erforderlich", + encryptionRequiredDesc: "Verwende einen Signer mit NIP-44-Unterstützung (Alby, nos2x, Amber).", + myStash: "Mein Stash", + encrypted: "Verschlüsselt", + itemsCount: "{{count}} Artikel", + items: "Artikel", + wishlist: "Wunschliste", + types: "Typen", + stashEmpty: "Dein Stash ist leer", + addFirstItem: "Ersten Artikel hinzufügen", + wishlistCount: "Wunschliste ({{count}})", + myGearCount: "Mein Gear ({{count}})", + openFullStash: "Vollständigen Stash öffnen", + addItem: "Artikel hinzufügen", + searchSpotsPlaceholder: "Spots suchen...", + selected: "Ausgewählt", + noSpotsFound: "Keine Spots gefunden. Versuche eine andere Suche.", + addingSpotsHint: "Spots hinzuzufügen hilft Nutzern, dich beim Durchsuchen bestimmter Orte zu finden", + report: "Melden", + spotSingular: "1 Spot", + spotPlural: "{{count}} Spots", + view: "Ansehen", + myCollections: "Meine Sammlungen", + collectionsSubtitle: "Organisiere deine Lieblings-Spots in persönlichen Listen", + newCollection: "Neue Sammlung", + loginToCreate: "Melde dich an, um Sammlungen zu erstellen", + loginToCreateDesc: "Speichere deine Lieblings-Spots in persönlichen Listen wie „Barcelona-Trip 2024“ oder „Beste Rails in LA“", + noCollections: "Noch keine Sammlungen", + noCollectionsDesc: "Erstelle deine erste Sammlung, um Spots zu organisieren", + createFirstCollection: "Erste Sammlung erstellen", + createNewCollection: "Neue Sammlung erstellen", + createCollectionDesc: "Gib deiner Sammlung einen Namen und eine optionale Beschreibung", + collectionName: "Name der Sammlung", + collectionNamePlaceholder: "Barcelona-Trip 2024", + descriptionOptional: "Beschreibung (optional)", + descriptionPlaceholder: "Meine Lieblings-Spots von meinem Barcelona-Trip...", + creating: "Wird erstellt...", + createCollection: "Sammlung erstellen", + editCollection: "Sammlung bearbeiten", + saving: "Wird gespeichert...", + saveChanges: "Änderungen speichern", + deleteCollectionTitle: "Sammlung löschen?", + deleteCollectionDesc: "Dadurch wird „{{title}}“ dauerhaft gelöscht. Die Spots selbst sind nicht betroffen.", + deleting: "Wird gelöscht...", + collectionCreated: "Sammlung erstellt!", + collectionCreatedDesc: "„{{title}}“ ist bereit für Spots", + collectionCreateFailed: "Sammlung konnte nicht erstellt werden", + collectionUpdated: "Sammlung aktualisiert!", + changesSaved: "Deine Änderungen wurden gespeichert", + collectionUpdateFailed: "Sammlung konnte nicht aktualisiert werden", + collectionDeleted: "Sammlung gelöscht", + collectionDeletedDesc: "„{{title}}“ wurde entfernt", + collectionDeleteFailed: "Sammlung konnte nicht gelöscht werden", + somethingWentWrong: "Etwas ist schiefgelaufen", + }, + mapPage: { + title: "Shops & Spots", + spots: "Spots", + shops: "Shops", + filters: "Filter", + listView: "Liste", + mapView: "Karte", + nearMe: "In der Nähe", + searchPlaceholder: "Spots suchen...", + noSpotsInArea: "Keine Spots in diesem Bereich", + zoomIn: "Vergrößern", + zoomOut: "Verkleinern", + myLocation: "Mein Standort", + locationsFound: "{{count}} Orte gefunden", + spotsOnly: "Nur Spots", + shopsOnly: "Nur Shops", + spotsAndShops: "Spots & Shops", + noSpotsMatch: "Keine Spots entsprechen deinen Filtern.", + noSpotsYet: "Es wurden noch keine Spots hinzugefügt.", + addFirstSpot: "Ersten Spot hinzufügen", + }, + spotUi: { + claim: { + areYouOwner: "Ist das dein Spot?", + privateDesc: "Dieser Spot ist als privat markiert. Wenn er dir gehört oder du ihn verwaltest, fordere ihn an – ein SkateSpots-Moderator bestätigt das Eigentum, dann übernimmst du den Eintrag.", + claimSpot: "Diesen Spot beanspruchen", + nip05Required: "Du brauchst eine verifizierte NIP-05-Kennung, um einen privaten Spot zu beanspruchen (Nachweis, dass du eine Nostr-Identität kontrollierst). Füge eine in deinem Profil hinzu und komm dann zurück.", + addNip05: "NIP-05 in den Einstellungen hinzufügen", + pendingTitle: "Anspruch wird geprüft", + pendingDesc: "Dein Anspruch wurde eingereicht. Ein SkateSpots-Moderator wird ihn prüfen – sobald er genehmigt ist, kannst du den Spot fertig beanspruchen.", + approvedTitle: "Anspruch genehmigt", + approvedDesc: "Ein Moderator hat deinen Anspruch genehmigt. Schließe den Vorgang ab, um Eigentümer dieses Spots zu werden.", + complete: "Anspruch abschließen", + submitted: "Anspruch eingereicht", + submittedDesc: "Ein Moderator wird deinen Anspruch prüfen. Sobald er genehmigt ist, übernimmst du den Spot.", + submitFailed: "Anspruch konnte nicht eingereicht werden", + submit: "Anspruch einreichen", + submitting: "Wird eingereicht…", + confirmTitle: "„{{title}}“ beanspruchen?", + confirmIntro: "Du bittest darum, Eigentümer dieses privaten Spots zu werden.", + confirmBullet1: "Ein SkateSpots-Moderator prüft die Anfrage (wir können kein Eigentum verifizieren, nur Nostr-Schlüssel)", + confirmBullet2: "Wenn sie genehmigt wird, schließt du den Anspruch ab, wirst Eigentümer und kannst den Spot bearbeiten", + confirmBullet3: "Der ursprüngliche Spot bleibt auf Nostr – das Netzwerk ist dezentral", + adminTitle: "Offene Eigentumsansprüche", + adminApprove: "Genehmigen", + adminApproved: "Genehmigt", + adminApprovedDesc: "Sie können den Spot jetzt fertig beanspruchen.", + adminApproveFailed: "Anspruch konnte nicht genehmigt werden", + loginRequired: "Melde dich an, um diesen privaten Spot zu beanspruchen oder Eigentum anzufordern.", + }, + abandonedDesc: "Zuletzt aktualisiert {{time}}. Wenn der ursprüngliche Eigentümer inaktiv ist, kannst du diesen Spot beanspruchen, um ihn zu pflegen und zu verbessern.", + claimedNotice: "Beanspruchter Eintrag", + claimedNoticeDesc: "Dieser Spot wurde nach einem Anspruch von einem neuen Eigentümer neu veröffentlicht. Der ursprüngliche Eintrag kann weiterhin separat existieren.", + abandonedLoginDesc: "Zuletzt aktualisiert {{time}}. Melde dich an, um diesen Spot zu beanspruchen und zu pflegen.", + accessDeniedDesc: "Du kannst nur Spots bearbeiten, die du erstellt hast.", + accessDeniedTitle: "Zugriff verweigert", + addAtLeastOneTag: "Bitte füge mindestens einen Tag hinzu.", + additionalDetails: "Zusätzliche Details (optional)", + additionalDetailsPlaceholder: "Gib zusätzlichen Kontext an, der helfen könnte...", + addNewTags: "Neue Tags hinzufügen:", + addNip05InSettings: "NIP-05 in den Einstellungen hinzufügen", + addPhoto: "Foto hinzufügen", + addPhotoDesc: "Trage ein Foto bei, damit andere diesen Spot entdecken können.", + addPhotoOrDescription: "Füge ein Foto oder eine Beschreibung hinzu", + addPhotoOrDescriptionDesc: "Gib Skatern etwas an die Hand – ein Bild oder ein paar Worte zum Ort.", + addPhotos: "Fotos hinzufügen", + addPhotoToSpot: "Foto zum Spot hinzufügen", + adminDeleteDialogDesc: "Als SkateSpots-Admin entfernst du „{{title}}“. Er wird für alle in der App ausgeblendet und eine Löschanfrage wird an die Relays gesendet.", + adminDeleteReason: "SkateSpots-Admin hat Spot „{{title}}“ entfernt", + airQuality: "Luftqualität", + altSkateSpot: "Skate-Spot: {{title}}", + areYouShopOwner: "Bist du der Shop-Inhaber?", + askBeforeSkating: "Vor dem Skaten fragen", + backToSpot: "Zurück zum Spot", + beFirstToListGear: "Sei der Erste, der Gear an diesem Spot anbietet!", + beFirstToSay: "Sei der Erste, der etwas sagt.", + byAuthor: "von {{name}}", + captionPlaceholder: "Bildunterschrift hinzufügen (optional) – beschreibe, was auf dem Foto zu sehen ist, wann es aufgenommen wurde usw.", + chatPublicNote: "Jeder kann das lesen – Nachrichten sind öffentlich & flüchtig. Für private Chats nutze Direktnachrichten.", + checkPinBelow: "Prüfe die Markierung unten, bevor du ein Duplikat hinzufügst.", + claimBullet1: "Du wirst Eigentümer und kannst den Spot bearbeiten", + claimBullet2: "Der ursprüngliche Spot bleibt bestehen (Nostr ist dezentral)", + claimBullet3: "Deine Version kann neben dem Original erscheinen", + claimFailed: "Anspruch fehlgeschlagen", + claiming: "Wird beansprucht...", + claimIntro: "Du bist dabei, Eigentum an diesem Spot zu beanspruchen. Dadurch wird deine eigene Version des Spots erstellt, die du bearbeiten und pflegen kannst.", + claimSpot: "Spot beanspruchen", + claimThisSpot: "Diesen Spot beanspruchen", + claimTitle: "„{{title}}“ beanspruchen?", + claimWhatHappens: "Was passiert, wenn du beanspruchst:", + coachesAndFilmersAvailable: "Coaches und Filmer an diesem Spot verfügbar", + coachesCount: "Coaches ({{count}})", + coachHere: "Hier coachen", + community: "Community", + communityVerified: "Von der Community bestätigt", + communityVerifiedTitle: "Ein anderer Skater hat hier beigetragen (Foto oder Statusbericht).", + conditions: "Bedingungen", + contactForPermission: "Kontakt für Genehmigung", + contactInfo: "Kontaktinfo", + contributePhoto: "Foto beitragen", + contributing: "Wird beigetragen...", + couldNotSendMessage: "Nachricht konnte nicht gesendet werden.", + couldNotSubmit: "Konnte nicht eingereicht werden", + couldNotUploadPhoto: "Das Foto konnte nicht hochgeladen werden. Du kannst unten eines hinzufügen.", + crewsThatSkateHere: "Crews, die hier skaten", + current: "Aktuell:", + currentTags: "Aktuelle Tags für diesen Spot:", + daysAgo: "vor {{count}} Tag", + daysAgoPlural: "vor {{count}} Tagen", + deleteDialogDesc: "Dadurch wird „{{title}}“ dauerhaft von allen Relays gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.", + deletedSpotReason: "Gelöschter Spot", + deleteFailed: "Löschen fehlgeschlagen", + deleteSpot: "Spot löschen", + deleteSpotTitle: "Spot löschen?", + differentSpotPublishAnyway: "Es ist ein anderer Spot – trotzdem veröffentlichen", + dragDropOrClick: "Ziehen & ablegen oder klicken", + dropPhotos: "Fotos ablegen", + duplicateOne: "Es gibt einen Spot im Umkreis von 60 m um deine Markierung. Wenn es derselbe Ort ist, füge dort stattdessen dein Foto oder einen Statusbericht hinzu, anstatt ein Duplikat zu erstellen.", + duplicateOther: "Es gibt Spots im Umkreis von 60 m um deine Markierung. Wenn es derselbe Ort ist, füge dort stattdessen dein Foto oder einen Statusbericht hinzu, anstatt ein Duplikat zu erstellen.", + editSpotSeoDesc: "Bearbeite deinen Skateboard-Spot.", + failedToContribute: "Beitragen fehlgeschlagen", + failedToPublish: "Veröffentlichen fehlgeschlagen", + failedToPublishDesc: "Etwas ist schiefgelaufen. Prüfe die Konsole für Details.", + failedToSubmitReport: "Bericht konnte nicht eingereicht werden", + failedToSuggestTags: "Tags konnten nicht vorgeschlagen werden", + failedToUpdate: "Aktualisieren fehlgeschlagen", + failedToUploadImage: "Bild konnte nicht hochgeladen werden", + failedToUploadPhoto: "Foto konnte nicht hochgeladen werden", + feelsLikeTemp: "Gefühlt {{temp}} °C", + filmersCount: "Filmer ({{count}})", + filmHere: "Hier filmen", + gearSwap: "Gear-Tausch", + geolocationNotSupported: "Geolokalisierung nicht unterstützt", + geolocationNotSupportedDesc: "Dein Browser unterstützt keine Geolokalisierung.", + getDirections: "Route abrufen", + hangTight: "Einen Moment", + hangTightDesc: "Dein Foto wird noch hochgeladen. Es wird gleich angehängt.", + helpImproveSpot: "Hilf mit, diesen Spot zu verbessern, indem du Fotos hinzufügst oder Tags vorschlägst", + hiddenByModerator: "Von einem Moderator ausgeblendet", + hiddenByModeratorDesc: "Dieser Spot wird nicht auf der Karte oder in der Suche angezeigt. Du kannst ihn trotzdem sehen, weil er dir gehört. Wenn du ihn bearbeitest, wird er nicht wieder eingeblendet – er bleibt ausgeblendet, bis ein Moderator das Urteil zurückzieht.", + humidity: "Luftfeuchtigkeit", + imageUploaded: "Bild hochgeladen", + imageUploadedDesc: "Dein Bild wurde erfolgreich hochgeladen.", + imHere: "Ich bin hier", + invalidCoordinates: "Ungültige Koordinaten", + invalidCoordinatesDesc: "Bitte gib einen gültigen Breitengrad (-90 bis 90) und Längengrad (-180 bis 180) ein.", + invalidNpub: "Ungültige npub", + invalidNpubDesc: "Bitte gib eine gültige npub-Adresse ein.", + lastReported: "zuletzt {{time}}", + listGear: "Gear anbieten", + listYourGearHere: "Biete dein Gear hier an", + loadingChat: "Chat wird geladen…", + locationError: "Standortfehler", + locationFound: "Standort gefunden", + locationFoundDesc: "Dein aktueller Standort wurde festgelegt.", + locationRequired: "Standort erforderlich", + locationRequiredDesc: "Bitte gib Koordinaten ein oder verwende deinen aktuellen Standort.", + loginRequiredTitle: "Anmeldung erforderlich", + logInToChat: "Melde dich an, um am lokalen Chat teilzunehmen.", + logInToContributePhotos: "Melde dich an, um Fotos beizutragen", + loginToEditSpot: "Du musst dich anmelden, um diesen Spot zu bearbeiten.", + logInToReport: "Du musst angemeldet sein, um Inhalte zu melden.", + logInToReportStatus: "Melde dich an, um den Status dieses Spots zu melden.", + logInToSuggestTags: "Melde dich an, um Tags vorzuschlagen", + manageNip05ToClaim: "NIP-05 verwalten, um zu beanspruchen", + meetAtSpotForPickup: "💡 Trefft euch an diesem Spot für eine sichere Übergabe", + memberOne: "{{count}} Mitglied", + memberOther: "{{count}} Mitglieder", + messageFailed: "Nachricht fehlgeschlagen", + messageMapper: "Kartierer anschreiben", + messagePlaceholder: "Diesem Spot schreiben… (versuche /me oder /who)", + messagesHiddenOne: "{{count}} Nachricht durch deinen Vertrauensfilter ausgeblendet. Senke den Filter, um mehr zu sehen.", + messagesHiddenOther: "{{count}} Nachrichten durch deinen Vertrauensfilter ausgeblendet. Senke den Filter, um mehr zu sehen.", + messagesHiddenShortOne: "{{count}} Nachricht durch deinen Vertrauensfilter ausgeblendet", + messagesHiddenShortOther: "{{count}} Nachrichten durch deinen Vertrauensfilter ausgeblendet", + metresAway: "{{distance}} m entfernt", + moderatorVouchedDesc: "Ein Moderator hat diesen Spot geprüft und sich dafür verbürgt. Stark.", + monthsAgo: "vor {{count}} Monat", + monthsAgoPlural: "vor {{count}} Monaten", + newOwnerNpub: "npub des neuen Eigentümers", + newOwnerNpubHint: "Gib die npub des Nutzers ein, an den du diesen Spot übertragen möchtest.", + nip05RequiredToClaim: "⚠️ NIP-05-Verifizierung erforderlich, um Shops zu beanspruchen", + noCommunitySignalTitle: "Noch kein Community-Foto oder Statusbericht – niemand hat diesen Ort bestätigt.", + breakdownPhotos: "{{count}} Foto(s)", + breakdownStatus: "{{count}} Statusbericht(e)", + breakdownComments: "{{count}} Kommentar(e)", + breakdownReactions: "{{count}} Reaktion(en)", + breakdownCollections: "{{count}} Speicherung(en)", + breakdownZaps: "{{count}} Zap(s)", + breakdownTags: "{{count}} Tag-Vorschlag/-Vorschläge", + breakdownCrews: "{{count}} Crew(s)", + breakdownLab: "{{count}} Pro-Link(s)", + verifyNudgeTitle: "Bestätige diesen Spot als Erster", + verifyNudgeBody: "Ein Foto oder ein „Ich bin hier geskatet“ lässt einen Spot verifiziert werden – hilf dem nächsten Skater.", + verifyNudgeStatus: "Ich bin hier geskatet", + communityChip: "Community", + seenChip: "Gesehen", + noGearListedYet: "Noch kein Gear angeboten", + noMessagesYet: "Noch keine Nachrichten in diesem lokalen Kanal. Sag Hallo – \"Wer skatet heute Abend?\"", + noPhoto: "Kein Foto", + noReportsYet: "Noch keine Berichte", + noTags: "Keine Tags", + notASkateSpot: "Kein Skate-Spot", + offerServicesHere: "💡 Biete deine Dienste an diesem Spot an", + photoCaptured: "Foto aufgenommen!", + photoCapturedDesc: "Dein Foto wurde erfolgreich hochgeladen.", + photoContributed: "Foto beigetragen!", + photoContributedDesc: "Dein Foto wurde diesem Spot hinzugefügt.", + photosAdded: "Deine Fotos wurden hinzugefügt.", + photosRecommended: "dringend empfohlen – Spots ohne Foto bleiben als Unverifiziert markiert", + photosUploaded: "{{count}} Fotos hochgeladen", + photoUploaded: "Foto hochgeladen", + photoUploadedDesc: "Füge eine Bildunterschrift hinzu und reiche ein, um beizutragen!", + photoUploadFailed: "Foto-Upload fehlgeschlagen", + pleaseTryAgain: "Bitte versuche es erneut", + public: "Öffentlich", + publicChatTitle: "Jeder kann Nachrichten in diesem Kanal lesen – er ist öffentlich und unverschlüsselt.", + recentReports: "Neueste Berichte", + recipientRequired: "Empfänger erforderlich", + recipientRequiredDesc: "Bitte gib die npub des neuen Eigentümers ein.", + removeAdmin: "Entfernen (Admin)", + removeSpot: "Spot entfernen", + removeSpotAdminTitle: "Diesen Spot entfernen? (Admin)", + reportOne: "Bericht", + reportContent: "Inhalt melden", + reportContentDesc: "Hilf, die Community sicher zu halten, indem du unangemessene Inhalte meldest.", + reportedBySkaters: " von {{count}} Skatern gemeldet – wird geprüft. Wenn es ein echter Spot ist, füge ein Foto oder einen Statusbericht hinzu, um ihn zu bestätigen.", + reportedNotASpot: "Als kein Skate-Spot gemeldet", + reportingType: "{{type}} wird gemeldet", + reports: "Berichte", + reportShop: "Shop melden", + reportSpot: "Spot melden", + reportStatus: "Status melden", + reportSubmitted: "Bericht eingereicht", + reportSubmittedDesc: "Danke, dass du hilfst, SkateSpots sicher zu halten.", + reportSubmittedLong: "Danke, dass du hilfst, SkateSpots sicher und korrekt zu halten. Dein Bericht wird von vertrauenswürdigen Community-Mitgliedern geprüft.", + reportSubmittedTitle: "Bericht eingereicht", + report: { + notASkateSpot: { + label: "Kein Skate-Spot", + description: "Ein Testeintrag oder ein Ort, der überhaupt nicht zum Skaten gedacht ist", + }, + fakeSpot: { + label: "Fake-/nicht existierender Spot", + description: "Dieser Spot existiert nicht oder der Standort ist falsch", + }, + stolenPhotos: { + label: "Gestohlene/Fake-Fotos", + description: "Fotos sind Stockbilder oder anderswo gestohlen", + }, + spamAd: { + label: "Spam oder Werbung", + description: "Werbliche Inhalte oder doppelte Einträge", + }, + dangerousLocation: { + label: "Gefährlicher Ort", + description: "Privatbesitz, unsicher oder illegal zugänglich", + }, + inappropriateContent: { + label: "Unangemessener Inhalt", + description: "Enthält anstößige oder nicht jugendfreie Inhalte", + }, + impersonation: { + label: "Identitätstäuschung", + description: "Jemand gibt sich als jemand anderes aus", + }, + other: { + label: "Sonstiges", + description: "Etwas anderes, das oben nicht aufgeführt ist", + }, + }, + targetType: { + spot: "Spot", + event: "Event", + tour: "Tour", + shop: "Shop", + user: "Nutzer", + listing: "Angebot", + coach: "Coach", + filmer: "Filmer", + }, + sameOwner: "Derselbe Eigentümer", + sameOwnerDesc: "Übertragung an den aktuellen Eigentümer nicht möglich.", + saveChanges: "Änderungen speichern", + saving: "Wird gespeichert...", + services: "Dienste", + shareSpotText: "Schau dir diesen Skate-Spot an: {{title}}", + shelter: "Unterstand", + shelterHint: "Ist dieser Spot dem Wetter ausgesetzt? Hilft Skatern, bei Regen trockene Spots zu finden.", + shopClaimDesc: "Wenn dir dieser Shop gehört oder du ihn verwaltest, kannst du ihn beanspruchen, um Eigentum zu verifizieren und den Eintrag zu verwalten.", + shopClaimNip05Hint: "Um diesen Shop zu beanspruchen, füge eine NIP-05-Kennung hinzu, die zur Domain der Shop-Website passt.", + skatersActiveDesc: "Personen, die in den letzten 24 Stunden in diesem Kanal gepostet haben.", + skatersActiveOne: "{{count}} Skater hier aktiv", + skatersActiveOther: "{{count}} Skater hier aktiv", + skatersSellingGear: "Skater an diesem Spot verkaufen Gear", + skateSpot: "Skate-Spot", + somethingWentWrong: "Etwas ist schiefgelaufen", + spot: "Spot", + spotAdded: "Spot hinzugefügt!", + spotAddedDesc: "Dein Skate-Spot wurde im Netzwerk veröffentlicht.", + spotAddedNoPhoto: "Veröffentlicht – und als Unverifiziert markiert, bis jemand ein Foto hinzufügt. Ein Bild des Spots hilft enorm.", + spotChat: "Spot-Chat", + spotClaimed: "Spot beansprucht!", + spotClaimedDesc: "Du bist jetzt Eigentümer dieses Spots. Du kannst ihn von deinem Profil aus bearbeiten.", + spotDeleted: "Spot gelöscht", + spotDeletedDesc: "Löschanfrage an die Relays gesendet. Die meisten Relays werden diesen Inhalt entfernen.", + spotMayAlreadyBeOnMap: "Dieser Spot ist möglicherweise bereits auf der Karte", + spotMayAlreadyExist: "Dieser Spot existiert möglicherweise bereits", + spotMayBeAbandoned: "Spot ist möglicherweise verlassen", + spotPhotoAlt: "Spot", + spotRemoved: "Spot entfernt", + spotRemovedDesc: "Dieser Spot wurde entfernt und wird in ganz SkateSpots ausgeblendet.", + spotSeoDesc: "Sieh dir diesen Skateboard-Spot auf SkateSpots an.", + spotStatus: "Spot-Status", + spotStatusDesc: "Ist „{{title}}“ noch skatebar? Informiere die Community über den aktuellen Zustand.", + spotTypeRequired: "Spot-Typ erforderlich", + spotTypeRequiredDesc: "Bitte wähle einen Spot-Typ, damit Skater wissen, was sie erwartet.", + spotUpdated: "Spot aktualisiert!", + spotUpdatedDesc: "Deine Änderungen wurden im Netzwerk veröffentlicht.", + staffVerifiedTitle: "Ein SkateSpots-Admin hat diesen Spot geprüft und sich dafür verbürgt.", + statusNotePlaceholder: "Optional: Details hinzufügen (z. B. „neue Knobs auf der Ledge“, „Security schmeißt nach 18 Uhr raus“)", + statusReported: "Status gemeldet", + statusReportedDesc: "Danke, dass du die Karte aktuell hältst. Dein Bericht ist live.", + submitReport: "Bericht einreichen", + submitting: "Wird eingereicht...", + suggestedByUser: "Von {{count}} Nutzer vorgeschlagen", + suggestedByUsers: "Von {{count}} Nutzern vorgeschlagen", + suggestedTagsContent: "Vorgeschlagene Tags für {{title}}: {{tags}}", + suggestNTags: "{{count}} Tags vorschlagen", + suggestOneTag: "1 Tag vorschlagen", + suggestTags: "Tags vorschlagen", + suggestTagsDesc: "Hilf, diesen Spot zu kategorisieren, indem du relevante Tags vorschlägst.", + tags: "Tags", + tagsHint: "Füge Tags für Features, Oberflächen, Vibes hinzu (max. {{max}})", + tagsSuggested: "Tags vorgeschlagen!", + tagsSuggestedDesc: "Deine Tag-Vorschläge wurden eingereicht.", + takePhoto: "Foto aufnehmen", + threeDayForecast: "3-Tage-Vorhersage", + tipTheMapper: "Dem Kartierer einen Tipp geben", + tipTheMapperDesc: "Fandest du diesen Spot nützlich? Sende einen Zap, um dem Kartierer zu danken!", + titleRequired: "Titel erforderlich", + titleRequiredDesc: "Bitte gib einen Namen für diesen Spot ein.", + today: "Heute", + tomorrow: "Morgen", + transferDesc: "Übertrage „{{title}}“ an einen anderen Nutzer. Diese Aktion kann nicht rückgängig gemacht werden.", + transferFailed: "Übertragung fehlgeschlagen", + transferOwnership: "Eigentum übertragen", + transferRequestContent: "Anfrage zur Eigentumsübertragung für Spot „{{title}}“", + transferRequested: "Übertragung angefragt", + transferRequestedDesc: "Der neue Eigentümer muss den Spot beanspruchen, um die Übertragung abzuschließen.", + transferring: "Wird übertragen...", + transferSpotOwnership: "Spot-Eigentum übertragen", + transferWarningDesc: "Nach der Übertragung kannst du diesen Spot nicht mehr bearbeiten oder löschen.", + typeToSearchTags: "Tippe, um Tags zu suchen oder hinzuzufügen...", + underReview: " – wird geprüft. Wenn es ein echter Spot ist, füge ein Foto oder einen Statusbericht hinzu, um ihn zu bestätigen.", + untitledSpot: "Unbenannter Spot", + unverified: "Unverifiziert", + updateDetailsFor: "Details für {{title}} aktualisieren", + updateSpotDesc: "Aktualisiere die Informationen zu diesem Spot. Alle mit * markierten Felder sind erforderlich.", + uploadAPhoto: "Ein Foto hochladen", + uploadAPhotoHint: "Ziehen & ablegen oder klicken · JPG, PNG, WebP", + uploadedAlt: "Hochgeladen", + uploadFailed: "Upload fehlgeschlagen", + uploadingPhoto: "Foto wird hochgeladen…", + uploadPhotoFirst: "Bitte lade zuerst ein Foto hoch.", + uvIndex: "UV-Index", + verifiedBySkateSpots: "Von SkateSpots verifiziert", + viewPhotoFullScreen: "Foto im Vollbild ansehen", + viewPhotoOf: "Foto {{n}} von {{total}} ansehen", + warning: "Warnung", + weatherConditions: "Wetterbedingungen", + weatherOnly: "nur Wetter", + weatherOnlyUnconfirmed: "Nur Wetter. Niemand hat bisher bestätigt, dass dies ein Skate-Spot ist, daher gibt es keinen Zustandswert – füge ein Foto oder einen Statusbericht hinzu, um ihn zu bestätigen.", + whyReporting: "Warum meldest du das?", + wind: "Wind", + yearsAgo: "vor {{count}} Jahr", + yearsAgoPlural: "vor {{count}} Jahren", + }, + diyUi: { + title: "DIY — Mach es selbst", + tagline: "Anleitungen, offene Tools und Pläne, um deine eigenen Decks, Rampen und Beton-Spots zu bauen – und dann die Leute, Orte und den Marktplatz dazu zu finden.", + doItWithPeople: "Mach es mit Leuten", + backToDiy: "Zurück zu DIY", + calc: { + title: "Deck-Kostenrechner", + intro: "Was ein Deck in der Herstellung kostet – Arbeit, Ausrüstung, Material, Prozesszeit, Verpackung und Marge – und ein fairer Verkaufspreis. Auf diesem Gerät gespeichert.", + }, + designer: { + title: "Deck-Designer", + intro: "Forme eine Skateboard- oder Longboard-Kontur und exportiere dann eine druckbare 1:1-Vorlage, ein SVG oder ein DXF für CNC. Auf diesem Gerät gespeichert.", + presets: "Voreinstellungen", + dimensions: "Maße", + shape: "Form", + kicks: "Kicks", + hardware: "Truck-Löcher", + width: "Max. Breite", + wheelbase: "Wheelbase", + nose: "Nose-Länge", + tail: "Tail-Länge", + length: "Gesamtlänge", + waist: "Taille", + endRound: "Endenrundung", + concave: "Concave", + thickness: "Dicke", + tailKick: "Tail-Kick", + noseKick: "Nose-Kick", + holeNew: "New School (2,125″)", + holeOld: "Old School (2,5″)", + holeSpacing: "New School ist 2,125″ × 1,625″ (54 × 41 mm); Old School ist 2,5″ × 1,625″. 3/16″ Montagelöcher.", + topView: "Draufsicht", + sideView: "Seitenprofil", + concaveSection: "Concave-Schnitt", + export: "Exportieren", + pdfA4: "1:1 PDF · A4", + pdfLetter: "1:1 PDF · Letter", + printNote: "Drucke das PDF mit 100 % (nicht „an Seite anpassen“) und klebe die Kacheln dann anhand der Eckkreuze zusammen. Das SVG ist ebenfalls maßstabsgetreu.", + note: "Dies ist die 2D-Kontur, die du nachzeichnest und ausschneidest. Für vollständige 3D-Formen und Formenbau ist ein echtes CAD-Tool weiterhin die richtige Wahl.", + }, + source: "Quelle", + comingSoon: "Demnächst", + footer: "Schritt-für-Schritt-Anleitungen sind unterwegs. Bis dahin: Finde die Leute, die in The Lab bauen, kartiere deinen Spot und kaufe oder verkaufe im Marktplatz. Arbeite sicher – Pads, Handschuhe und Augenschutz.", + categories: { + boards: "Boards", + ramps: "Rampen & Holzobstacles", + concrete: "Beton & DIY-Spots", + repairs: "Reparaturen & Tuning", + tools: "Werkzeuge & Pläne", + }, + cards: { + ossBuild: { + title: "Ein Skateboard bauen", + blurb: "Schritt-für-Schritt-Deck-Herstellung – Furnier, Formen, Pressen und Finish.", + }, + sk8cad: { + title: "SK8CAD", + blurb: "Open-Source-CAD für Deckformen, Concave und Formenbau.", + }, + deckCost: { + title: "Deck-Kosten & Preisgestaltung", + blurb: "Berechne Material, Arbeit und einen fairen Verkaufspreis, bevor du baust.", + }, + deckDesigner: { + title: "Deck-Designer", + blurb: "Forme eine Kontur und drucke eine 1:1-Vorlage – oder exportiere SVG/DXF für CNC.", + }, + ledgeBox: { + title: "Eine Ledge oder Box bauen", + blurb: "Ein anfängerfreundliches Holzobstacle, das du an einem Wochenende bauen kannst.", + }, + quarterpipe: { + title: "Eine Quarterpipe bauen", + blurb: "Rampenpläne, Transition und Coping für eine Mini-Rampe im Garten.", + }, + flatbar: { + title: "Eine Flatbar bauen", + blurb: "Günstig, tragbar und der beste Weg, Rails zu lernen.", + }, + concreteBasics: { + title: "Beton-Grundlagen", + blurb: "Mischen, Schalen und Finishen einer Ledge oder Bank, die hält.", + }, + coping: { + title: "Coping & Kanten", + blurb: "Wie man Coping setzt und eine Transition für ein sauberes Grinden finisht.", + }, + buyParts: { + title: "Teile & Gear kaufen", + blurb: "Hol dir Decks, Hardware und Werkzeuge von Verkäufern im Marktplatz.", + }, + mapSpot: { + title: "Kartiere deinen DIY-Spot", + blurb: "Etwas gebaut? Füge es der Karte hinzu, damit andere es finden und skaten können.", + }, + regrip: { + title: "Ein Board neu grippen", + blurb: "Altes Grip abziehen und neues Grip sauber aufbringen.", + }, + tune: { + title: "Bearings & Trucks tunen", + blurb: "Bearings reinigen, Bushings tauschen und deine Truck-Geometrie einstellen.", + }, + printMolds: { + title: "3D-gedruckte Formen", + blurb: "Druckbare Form- und Ausrichtungsdateien aus der Community.", + }, + sk8cadTools: { + title: "Formen- & Ausrichtungswerkzeuge", + blurb: "Konstruiere Formen mit integrierten Ausrichtungsbasen.", + }, + }, + actions: { + findBuilder: { + title: "Einen Builder finden", + blurb: "Rampen- und DIY-Builder in The Lab, die es für dich entwerfen oder gießen können.", + }, + findCrew: { + title: "Eine DIY-Crew finden", + blurb: "Crews mit Fokus aufs Bauen – schließe dich denen an, die Spots Wirklichkeit werden lassen.", + }, + mapSpot: { + title: "Einen DIY-Spot kartieren", + blurb: "Füge den Spot hinzu, den du gebaut hast, damit er auf der Karte lebt.", + }, + sellBuilds: { + title: "Deine Bauten verkaufen", + blurb: "Biete Decks, Rampen oder Teile, die du herstellst, im Marktplatz an.", + }, + findCoach: { + title: "Einen Coach finden", + blurb: "Coaches, die DIY-Skate-Module und Spot-Bau unterrichten.", + }, + }, + }, + labelsUi: { + spotCategory: { + street: { + label: "Street", + description: "Zufällig gefundene Spots, urbanes Terrain", + }, + transition: { + label: "Transition", + description: "Gekrümmte/gerampte Oberflächen", + }, + park: { + label: "Park", + description: "Gebaute Skateparks", + }, + plaza: { + label: "Plaza", + description: "Urbane Plätze (wie MACBA, Love Park)", + }, + }, + spotFeature: { + wallrides: "Wallrides", + stairs: "Treppen & Handrails", + rails: "Rails", + ledges: "Ledges & Bordsteine", + gaps: "Gaps", + flatground: "Flatground", + "manual-pads": "Manual Pads", + "half-pipes": "Half Pipes", + "quarter-pipes": "Quarter Pipes", + "mini-ramps": "Mini Ramps", + bowls: "Bowls", + vert: "Vert Ramps", + "mega-ramps": "Mega Ramps", + hubbas: "Hubbas", + "euro-gaps": "Euro Gaps", + banks: "Banks", + "spine-ramps": "Spine Ramps", + "roll-ins": "Roll-ins", + hips: "Hips", + volcano: "Volcano", + pyramids: "Pyramids / Funboxes", + "snake-runs": "Snake Runs", + "pump-track": "Pump Track Rollers", + "flat-bars": "Flat Bars", + }, + spotType: { + street: "Street", + transition: "Transition", + park: "Park", + plaza: "Plaza", + wallrides: "Wallrides", + stairs: "Treppen & Handrails", + rails: "Rails", + ledges: "Ledges & Bordsteine", + gaps: "Gaps", + flatground: "Flatground", + "manual-pads": "Manual Pads", + "half-pipes": "Half Pipes", + "quarter-pipes": "Quarter Pipes", + "mini-ramps": "Mini Ramps", + bowls: "Bowls", + vert: "Vert Ramps", + "mega-ramps": "Mega Ramps", + hubbas: "Hubbas", + "euro-gaps": "Euro Gaps", + banks: "Banks", + "spine-ramps": "Spine Ramps", + "roll-ins": "Roll-ins", + hips: "Hips", + volcano: "Volcano", + pyramids: "Pyramids / Funboxes", + "snake-runs": "Snake Runs", + "pump-track": "Pump Track Rollers", + "flat-bars": "Flat Bars", + diy: "DIY", + rail: "Rail", + ledge: "Ledge", + gap: "Gap", + bowl: "Bowl", + stall: "Stall", + slappy: "Slappy", + }, + access: { + public: { + label: "Öffentlich – für alle zugänglich", + }, + private: { + label: "Privatbesitz – Genehmigung erforderlich", + }, + locals: { + label: "Erst die Locals fragen", + }, + }, + shelter: { + outdoor: { + label: "Draußen", + short: "Draußen", + description: "Vollständig ausgesetzt – Regen stoppt das Spiel", + }, + partial: { + label: "Teilweise überdacht", + short: "Teilweise überdacht", + description: "Einige Obstacles bleiben trocken", + }, + covered: { + label: "Überdacht / unter Dach", + short: "Überdacht", + description: "Draußen, aber unter einem Dach", + }, + indoor: { + label: "Drinnen", + short: "Drinnen", + description: "Vollständig geschlossen – skate bei Regen oder Sonnenschein", + }, + }, + eventType: { + contest: "Wettbewerb", + demo: "Demo", + session: "Session", + workshop: "Workshop", + premiere: "Premiere", + tradeshow: "Messe", + gameskate: "Game of Skate", + concert: "🎸 Konzert", + jam: "🎵 Jam", + festival: "🎪 Festival", + popup: "🎯 Pop-Up", + }, + gearCategory: { + deck: "Deck", + trucks: "Trucks", + wheels: "Wheels", + bearings: "Bearings", + shoes: "Skate-Schuhe", + clothing: "Kleidung", + protective: "Schutzausrüstung", + stickers: "Sticker", + wax: "Wax", + tools: "Werkzeuge", + griptape: "Griptape", + rubbrick: "Rub Brick", + }, + gearCondition: { + new: { + label: "Neu", + description: "Nie benutzt, noch in der Verpackung", + }, + like_new: { + label: "Wie neu", + description: "Kaum benutzt, ausgezeichneter Zustand", + }, + good: { + label: "Gut", + description: "Normale Abnutzung, funktioniert einwandfrei", + }, + well_used: { + label: "Stark gebraucht", + description: "Abgenutzt, funktioniert aber noch", + }, + }, + priceType: { + fixed: { + label: "Festpreis", + description: "Preis in USD oder sats festlegen", + }, + free: { + label: "Kostenlos", + description: "Wird verschenkt", + }, + trade: { + label: "Tausch", + description: "Sucht einen Tausch", + }, + offer: { + label: "Angebot abgeben", + description: "Preis verhandelbar", + }, + }, + listingType: { + selling: { + label: "Verkauf", + description: "Gear zum Verkauf anbieten", + }, + wtb: { + label: "Kaufgesuch", + description: "Sucht bestimmtes Gear", + }, + }, + tour: { + spotType: { + street: "Street", + park: "Park", + diy: "DIY", + transition: "Transition", + hidden: "Versteckte Perlen", + }, + category: { + local: { + label: "Lokale Tour", + description: "Zeige versteckte Spots in deiner Stadt", + }, + national: { + label: "Nationale Tour", + description: "Mehrstädtische Roadtrips quer durch das Land", + }, + international: { + label: "Internationale Tour", + description: "Grenzüberschreitende Abenteuer durch mehrere Länder", + }, + destruction: { + label: "World Destruction", + description: "Globaler Teamwettbewerb im KOTR-Stil", + }, + }, + }, + crew: { + vibe: { + street: "Street", + transition: "Transition / Vert", + park: "Park", + diy: "DIY", + cruising: "Cruising / Filmen", + oldschool: "Old School", + allterrain: "All Terrain", + girls: "Girl / Frau", + youth: "Youth / Groms", + adaptive: "Adaptive", + punk: "Punk", + hiphop: "Rap / Hip-Hop", + }, + focus: { + mixed: "Gemischt / Allgemein", + builder: "DIY & Builder", + photo: "Foto & Film", + coaching: "Coaching", + art: "Kunst & Design", + music: "Band & Musik", + wellness: "Training & Physio", + }, + focusDescription: { + mixed: "Eine normale Skate-Crew – erscheint nur auf der Crews-Seite.", + builder: "Eine DIY-/Parkbau-Crew – erscheint auch in The Lab unter Builder.", + photo: "Eine Film-, Foto- oder Schnitt-Crew – erscheint auch in The Lab unter Foto & Film.", + coaching: "Eine Coaching-/Kurs-Crew – erscheint auch in The Lab unter Coaching.", + art: "Ein Kunst-, Design-, Graffiti- oder Tattoo-Kollektiv – erscheint auch in The Lab unter Kunst & Design.", + music: "Eine Band oder ein Musikkollektiv – erscheint auch in The Lab unter Musik.", + wellness: "Eine Trainings-, Fitness- oder Physio-Crew – erscheint auch in The Lab unter Training.", + }, + lookingFor: { + filmer: "Filmer", + photographer: "Fotograf", + editor: "Video-Editor", + coach: "Coach", + builder: "Rampen-Builder", + artist: "Künstler / Designer", + musician: "Musiker / Band", + members: "Neue Mitglieder", + }, + role: { + filmer: "Filmer", + photographer: "Fotograf", + editor: "Editor", + coach: "Coach", + builder: "Builder", + artist: "Künstler", + graffiti: "Graffiti", + tattoo: "Tattoo", + trainer: "Trainer", + musician: "Musiker", + judge: "Judge", + manager: "Team-Manager", + og: "OG", + }, + }, + memberVisibility: { + public: { + label: "Öffentlich", + description: "Jeder kann dich in dieser Crew sehen – auf der öffentlichen Crew-Seite und bei der Suche nach Crew-Mitgliedern.", + }, + crew: { + label: "Nur Crew", + description: "Nur bestätigte Crew-Mitglieder und der Gründer sehen dich hier. Für alle anderen erscheinst du als anonymes „verstecktes Mitglied“. Hinweis: Das ist Datenschutz auf App-Ebene – dein Mitglieds-Tag existiert weiterhin öffentlich auf den Relays, er wird Außenstehenden nur nie angezeigt.", + }, + }, + tagCategory: { + features: { + name: "Features", + description: "Obstacles und Terrain", + }, + surfaces: { + name: "Oberflächen", + description: "Materialien und Texturen", + }, + sizes: { + name: "Größen", + description: "Maße und Maßstab", + }, + stairs: { + name: "Treppenanzahl", + description: "Anzahl der Treppenstufen", + }, + vibes: { + name: "Vibes", + description: "Atmosphäre und Zustand", + }, + location: { + name: "Standort", + description: "Standortkontext", + }, + tricks: { + name: "Tricks", + description: "Gut für bestimmte Tricks", + }, + }, + spotTagCategory: { + street: { + label: "Street", + description: "Street-Spots – Treppen, Rails, Ledges", + }, + park: { + label: "Park", + description: "Skateparks – öffentlich oder privat", + }, + diy: { + label: "DIY", + description: "DIY-/selbstgebaute Spots", + }, + plaza: { + label: "Plaza", + description: "Öffentliche Plätze mit skatefreundlicher Architektur", + }, + }, + status: { + active: { + label: "Aktiv", + description: "Alles gut – skate it.", + }, + bust: { + label: "Bust", + description: "Hohes Rauswurf-Risiko – Security oder Cops.", + }, + skate_stopped: { + label: "Zugestellt", + description: "Zugeknobbt / verbarrikadiert, aber teilweise skatebar.", + }, + closed: { + label: "Geschlossen", + description: "Vorübergehend geschlossen – Baustelle oder Event.", + }, + gone: { + label: "Weg", + description: "Abgerissen, zugeteert oder endgültig abgesperrt.", + }, + }, + price: { + free: "FREE", + trade: "Tausch", + makeOffer: "Angebot abgeben", + offer: "Angebot", + }, + }, + feesUi: { + feeFeaturedEventLabel: "Featured Event", + feeFeaturedEventDesc: "Hebe dein Event auf SkateSpots hervor", + feeFeaturedEventBenefit: "Dein Event erscheint oben auf der Events-Seite", + feeLabProfileLabel: "Lab-Pro-Profil", + feeLabProfileDesc: "Hebe deine Dienste in The Lab hervor", + feeLabProfileBenefit: "Pro-Badge + hervorgehobene Platzierung, wenn Skater The Lab durchsuchen", + feeFeaturedShopLabel: "Featured Shop", + feeFeaturedShopDesc: "Hebe deinen Skate-Shop auf der Karte und im Verzeichnis hervor", + feeFeaturedShopBenefit: "Verifiziertes Badge + hervorgehobener Pin auf der Karte", + feeFeaturedTourLabel: "Featured Tour", + feeFeaturedTourDesc: "Hebe deine Tour auf SkateSpots hervor", + feeFeaturedTourBenefit: "Pro-Badge + Top-Platzierung, wenn Skater Touren durchsuchen", + duration7d: "7 Tage", + duration30d: "1 Monat", + duration90d: "3 Monate", + duration365d: "12 Monate", + metaActive: "{{label}} — Aktiv", + daysRemainingOne: "{{count}} Tag verbleibend", + daysRemainingMany: "{{count}} Tage verbleibend", + zapRequestContent: "SkateSpots {{label}} ({{tier}})", + errGenerate: "Rechnung konnte nicht erstellt werden", + paymentReceived: "⚡ Zahlung erhalten!", + paymentReceivedDesc: "{{amount}} sats – {{label}} ist jetzt aktiv.", + autoPayFailed: "Automatische Zahlung fehlgeschlagen", + autoPayFailedDesc: "Zahle manuell über den QR-Code oder die Rechnung unten.", + payStatusUnknown: "Zahlungsstatus unbekannt – die Zahlung ist möglicherweise durchgegangen. Prüfe deine Wallet, bevor du erneut zahlst.", + invoiceCopied: "Rechnung kopiert!", + activeBang: "{{label}} aktiv!", + chooseDuration: "Dauer wählen", + bestValue: "Bestes Angebot", + perDay: "{{price}}/Tag", + validFor: "Gültig für", + amountLine: "~${{usd}} USD · an {{name}} · {{tier}}", + payToContinue: "Zahle {{amount}} sats, um fortzufahren", + generating: "Rechnung wird erstellt…", + processing: "Zahlung wird verarbeitet…", + invoiceQrAlt: "Lightning-Rechnungs-QR", + copyInvoice: "Rechnung kopieren", + openWallet: "Wallet öffnen", + payConnected: "Mit verbundener Wallet zahlen", + scanAny: "Mit jeder Lightning-Wallet scannen", + tryAgain: "Erneut versuchen", + proReceiptTitle: "🦧⚡ Sasquatch Pro – du bist dabei!", + proReceiptPass: "Pass: {{pass}} ({{sats}} sats)", + proReceiptActiveUntil: "Aktiv bis: {{until}}", + proReceiptUnlocked: "Was du freigeschaltet hast:", + proReceiptBullet1: "• Persönlicher Assistent – ich lese deinen Stash, deine Crews, Spots & Angebote", + proReceiptBullet2: "• Aktionsentwürfe – Gear anbieten, einen Spot-Status posten, Trips planen (du bestätigst)", + proReceiptBullet3: "• Antworten, die deinen persönlichen Kontext nutzen, nicht nur öffentliche Daten", + proReceiptBullet4: "• ⚡ Du unterstützt SkateSpots direkt und hältst es kostenlos & werbefrei", + proReceiptThanks: "Danke, dass du SkateSpots kostenlos & werbefrei hältst. Jetzt geh shredden. 🛹", + proReceiptSubject: "Sasquatch-Pro-Rechnung", + receiptContent: "Sasquatch Pro – {{tier}}-Supporter-Pass 🦧⚡", + receiptAlt: "Sasquatch-Pro-Supporter-Pass ({{tier}}), gültig bis {{until}}", + purchaseComment: "Sasquatch Pro – {{tier}} 🦧", + errLogin: "Melde dich an, um auf Pro upzugraden.", + errStart: "Der Kauf konnte nicht gestartet werden.", + errRecord: "Dein Pass konnte nicht gespeichert werden.", + }, + cardUi: { + save: "Karte auf Nostr speichern", + saved: "Karte gespeichert", + savedDesc: "Deine Karte ist jetzt signiert und verifizierbar.", + saveFailed: "Die Karte konnte nicht gespeichert werden", + notPublished: "Nicht veröffentlicht", + titleNeon: "Rider", + titleRest: "Card", + saveFrontPng: "Vorderseite speichern (PNG)", + expired: "ABGELAUFEN", + logoUploaded: "Logo hochgeladen", + logoUploadFailed: "Logo konnte nicht hochgeladen werden", + venue: "Verknüpfter Veranstaltungsort (optional)", + venueNone: "Kein Veranstaltungsort", + venueHint: "Wähle einen deiner eigenen Spots, um diesen Pass an einen Ort zu binden. Ein Verifizierer bestätigt, dass er dir gehört.", + venuePick: "Wähle deinen Veranstaltungsort", + parkNoVenue: "Ein Park-Pass kann nur vom Eigentümer des Veranstaltungsorts ausgestellt werden – kartiere zuerst einen Spot, der dir gehört.", + parkAddVenue: "Einen Spot hinzufügen", + parkNeedsVenue: "Wähle einen Ort aus, der dir gehört", + parkIssued: "Ausgestellte Pässe", + parkRevoke: "Widerrufen", + parkRevoked: "Widerrufen", + parkRevokeFailed: "Widerrufen fehlgeschlagen", + v: { + valid: "Gültig", + validDesc: "Signatur gültig und vom Veranstaltungsort ausgestellt.", + expired: "Abgelaufen", + expiredDesc: "Das Gültigkeitsdatum ist überschritten.", + revoked: "Widerrufen", + revokedDesc: "Der Aussteller hat diesen Pass storniert – nicht akzeptieren.", + invalid: "Ungültig", + invalidDesc: "Die Signatur lässt sich nicht verifizieren. Vertraue ihr nicht.", + notFound: "Nicht gefunden", + notFoundDesc: "Kein passender Eintrag auf den Relays.", + unverifiedIssuer: "Nicht verifizierter Aussteller", + unverifiedIssuerDesc: "Dieser Pass nennt einen Veranstaltungsort, der nicht dem Schlüssel des Ausstellers gehört.", + notBound: "Nicht gebunden", + notBoundDesc: "Nicht an einen Veranstaltungsort gebunden – beweist nichts über den Zugang.", + noRsvp: "Keine RSVP", + noRsvpDesc: "Für den Inhaber ist keine RSVP für dieses Event hinterlegt.", + admitted: "Zugelassen", + admittedDesc: "Event des Veranstalters + der Inhaber hat zugesagt.", + noHolder: "Kein Inhaber im Link", + noHolderDesc: "Dieser QR-Code hat keinen Ticketinhaber (`?h=`), daher kann der Inhaber nicht geprüft werden.", + }, + passes: { + tab: "Meine Pässe", + pass: "Zugangspass", + none: "Noch keine Pässe. Wenn dir ein Veranstaltungsort oder Veranstalter einen ausstellt, erscheint er hier.", + }, + facets: { + title: "Identitäts-Facetten anzeigen", + crews: "Crews", + local: "Lokal", + roles: "Lab-Rollen", + }, + roles: { + coach: "Coach", + filmer: "Filmer", + editor: "Editor", + photographer: "Fotograf", + builder: "Builder", + artist: "Künstler", + graffiti: "Graffiti", + tattoo: "Tattoo", + trainer: "Trainer", + musician: "Musiker", + judge: "Judge", + organizer: "Organisator", + barber: "Barbier", + }, + crew: { + crewCard: "CREW-KARTE", + crewSub: "Deine Crew, auf einer Karte", + pick: "Wähle eine Crew", + none: "Du bist noch in keiner Crew – tritt einer bei oder gründe eine.", + hint: "Die Karte wird aus den eigenen signierten Daten der Crew erstellt. Bearbeite die Crew auf ihrer Seite, um sie zu ändern.", + members: "MITGLIEDER", + spots: "SPOTS", + est: "Gegr. {{year}}", + openCall: "Offener Aufruf", + verifiedCrew: "Verifizierte Crew", + viewCrew: "Crew ansehen", + }, + event: { + pass: "EVENT-PASS", + passSub: "Ein Pass für ein Event, zu dem du gehst", + pick: "Wähle ein Event", + none: "Noch keine Events – erstelle zuerst eines oder sage einem zu.", + hint: "Der Pass wird aus den eigenen signierten Daten des Events erstellt. Nur der Veranstalter kann ihn ändern.", + admits: "ZUGANG FÜR", + going: "{{count}} zugesagt", + verifiedEvent: "Verifiziertes Event", + viewEvent: "Event ansehen", + issuePass: "Einen Check-in-Pass ausstellen", + issuePassBtn: "Pass ausstellen", + issuePassHint: "Ein signierter Pass für einen bestimmten Teilnehmer – er zeigt ihn an der Tür vor.", + notOrganiser: "Nur der Veranstalter kann Pässe ausstellen", + passIssued: "Pass ausgestellt", + issueFailed: "Der Pass konnte nicht ausgestellt werden", + issuedPasses: "Ausgestellte Check-in-Pässe", + }, + studio: { + unsaved: "Ungespeicherte Änderungen", + saved: "Gespeichert", + saveChanges: "Änderungen speichern", + allSaved: "Gespeichert – aktuell", + showOnCard: "Auf Karte anzeigen", + derived: "Aus deinem Skater-Profil", + noSkaterProfile: "Noch kein Skater-Profil –", + editSkaterProfile: "füge deine Styles & dein Level hinzu", + noPhoto: "Noch kein Profilfoto –", + addPhoto: "füge eines in deinem Profil hinzu", + finishTitle: "Vervollständige deine Karte", + finishDesc: "Ein Foto und ein Skater-Profil lassen sie echt aussehen.", + checkPhoto: "Profilfoto", + checkName: "Anzeigename", + checkProfile: "Styles & Level", + checkCrew: "Tritt einer Crew bei", + moreTypes: "Weitere Kartentypen werden freigeschaltet, wenn du eigene Spots kartierst, Crews beitrittst oder Events zusagst.", + accent: "Akzentfarbe", + accentHint: "Überschreibt die Akzentfarbe des Themes", + accentClear: "Theme-Farbe verwenden", + logo: "Eigenes Logo / Wappen", + logoAdd: "Hochladen", + logoChange: "Ändern", + logoClear: "Entfernen", + }, + back: { + title: "Druckbare Rückseite", + desc: "Crews, Rollen, Sponsoren & Links auf der Rückseite", + showBack: "Rückseite anzeigen", + showFront: "Vorderseite anzeigen", + empty: "Hier ist noch nichts – füge Crews, Rollen oder Sponsoren hinzu.", + }, + verify: { + checking: "Karte wird geprüft…", + notFound: "Karte nicht gefunden", + notFoundDesc: "Auf den Relays wurde kein passendes Event gefunden. Es wurde möglicherweise gelöscht oder der Link ist falsch.", + invalid: "Signatur ungültig", + invalidDesc: "Dieses Event existiert, aber seine Signatur lässt sich nicht verifizieren. Vertraue ihm nicht.", + authentic: "Authentisch", + authenticDesc: "Die Signatur des Ausstellers ist gültig.", + kind: "Typ", + kindPark: "Park-Zugangskarte", + kindRider: "Rider-Karte", + kindCrew: "Crew-Karte", + kindEvent: "Event-Pass", + organiser: "Veranstalter", + expired: "Abgelaufen", + valid: "Gültig", + holder: "Inhaber", + ticketHolder: "Ticketinhaber", + rsvp: "RSVP", + rsvpGoing: "Zugesagt", + rsvpInterested: "Interessiert", + rsvpNone: "Keine RSVP gefunden", + revoked: "Pass widerrufen", + revokedDesc: "Der Aussteller hat diesen Pass storniert – nicht akzeptieren.", + issuedBy: "Ausgestellt von", + accessLevel: "Zugangsstufe", + validThru: "Gültig bis", + selfIssued: "Status", + selfIssuedDesc: "Selbst ausgestellter Identitätsausweis", + venue: "Veranstaltungsort", + venueVerified: "Verifiziert – der Eigentümer-Schlüssel dieses Veranstaltungsorts stimmt mit dem Aussteller überein.", + venueMismatch: "Dieser Pass nennt einen Veranstaltungsort, der nicht dem Schlüssel des Ausstellers gehört.", + venueNone: "Nicht an einen Veranstaltungsort gebunden.", + viewCard: "Karte ansehen", + disclaimer: "Eine gültige Signatur beweist, wer diese Karte signiert hat – sie ist kein Nachweis von Können oder Zugriffsrechten über das hinaus, was der Veranstaltungsort ausgestellt hat.", + details: "Details", + invalidLink: "Ungültiger Link", + invalidLinkDesc: "Das sieht nicht nach einem gültigen Kartenlink aus.", + }, + public: { + invalid: "Das sieht nicht nach einem gültigen Kartenlink aus.", + createYourOwn: "Erstelle deine eigene Karte", + editYourCard: "Bearbeite deine Karte", + backToEditor: "Zurück zum Editor", + backHome: "Zurück zur Startseite", + notCustomised: "Dieser Skater hat seine Karte noch nicht angepasst – das ist das Standard-Design.", + verifyNote: "Scanne den QR-Code auf der Karte, um sie zu verifizieren.", + }, + }, + routeUi: { + destination: "Ziel", + routeTo: "Route nach {{label}}", + routeToLabel: "Route nach", + search: "Suchen", + description: "Routenoptionen und In-App-Navigation.", + routeMapAria: "Routenkarte", + findingLocation: "Dein Standort wird ermittelt…", + plottingRoute: "Deine Route wird berechnet…", + refiningLocation: "Standort wird verfeinert…", + offlineSavedRoute: "Offline · gespeicherte Route {{age}}", + tapMapStart: "Tippe auf die Karte, um deinen Startpunkt festzulegen", + fitRouteAria: "Die gesamte Route auf der Karte einpassen", + wholeRoute: "Gesamte Route", + next: "Weiter", + nextStep: "Weiter · Schritt {{n}}", + followTheLine: "Folge der Linie", + toTheTurn: "bis zur Abbiegung", + toGo: "verbleibend", + tryAgain: "Erneut versuchen", + mode: { + foot: "Skate / Gehen", + bike: "Fahrrad", + moto: "Motorrad", + car: "Auto", + transit: "ÖPNV", + }, + from: "Von", + myLocation: "Mein Standort", + tapTheMap: "Tippe auf die Karte…", + chooseOnMap: "Auf Karte wählen", + direct: "direkt", + transferOne: "1 Umstieg", + transfers: "{{count}} Umstiege", + options: "{{count}} Optionen", + ride: "Fahrt", + arrive: "Ankunft", + speedAvg: "Ø {{speed}} km/h", + stepsCount: "{{count}} Schritte", + onABoard: "auf einem Board", + usesDrivingRoads: "nutzt Fahrstraßen", + drivingEstimate: "Fahrschätzung", + updating: "wird aktualisiert…", + pickMode: "Wähle einen Modus, um deine Route zu sehen.", + waitingLocation: "Warte auf deinen Standort…", + routeSteps: "Routenschritte", + walkingRoute: "Fußweg – auf einem Board schneller", + planningView: "Planungsansicht – tippe auf Start, um mit Live-Abbiegungen, Stimme und Ankunft zu folgen.", + leaveNow: "Jetzt losfahren", + departAt: "Abfahrt um", + arriveBy: "Ankunft bis", + departureTime: "Abfahrtszeit", + arrivalTime: "Ankunftszeit", + only: "Nur", + clear: "löschen", + itinerary: "Reiseverlauf", + group: { + bus: "Bus", + tram: "Straßenbahn", + metro: "Metro", + train: "Zug", + ferry: "Fähre", + }, + walk: "Gehen", + rideVerb: "Fahren", + walkLower: "gehen", + rideLower: "fahren", + toStop: "bis", + track: "Gleis {{track}}", + stopOne: "1 Haltestelle", + stopsCount: "{{count}} Haltestellen", + tickets: "Tickets ↗", + done: "Fertig", + stop: "Stopp", + start: "Start", + arrived: "Du bist angekommen. 🛹", + voiceOnNote: "Bildschirm bleibt an · Stimme an – Abbiegungen und Ankunft werden angesagt.", + voiceOffNote: "Bildschirm bleibt an · Stimme aus.", + followNote: "Abbiegungen, Stimme und Ankunft während du rollst. Hält den Bildschirm an.", + voiceOffAria: "Sprachführung ausschalten", + voiceOnAria: "Sprachführung einschalten", + voiceStart: "Navigation wird gestartet", + voiceArrived: "Du bist angekommen", + voiceIn: "In {{metres}} Metern, {{instruction}}", + voiceContinue: "weiter", + voiceContinueCaps: "Weiter", + errPermissionDenied: "Standortberechtigung verweigert.", + errWaitingGps: "Warten auf GPS-Fix…", + errPermissionDeniedLong: "Standortberechtigung verweigert. Aktiviere den Standort, um von deinem aktuellen Ort zu routen.", + errNoLocation: "Dein Standort konnte nicht ermittelt werden. Versuche es erneut.", + errNoLocationShort: "Dein Standort konnte nicht ermittelt werden.", + errTransitNoRouteFiltered: "Keine Route für diese Zeit oder dieses Verkehrsmittel – versuche eine andere Zeit oder schließe mehr Modi ein.", + errTransitNoRoute: "Keine ÖPNV-Route hier gefunden – dieser Bereich veröffentlicht möglicherweise keine offenen Fahrpläne.", + errTransitUnreachable: "Der ÖPNV-Dienst war nicht erreichbar. Prüfe deine Verbindung und versuche es erneut.", + errRoutingBusy: "Der Routing-Dienst ist gerade ausgelastet – versuche es gleich noch einmal.", + errNoRouteMode: "Keine Route für diesen Modus – das Ziel liegt möglicherweise außerhalb des Straßennetzes. Versuche einen anderen Modus.", + errRoutingUnreachable: "Der Routing-Dienst war nicht erreichbar. Prüfe deine Verbindung und versuche es erneut.", + departures: "Abfahrten", + upcomingFrom: "Kommende Abfahrten ab {{stop}}", + loadingDepartures: "Abfahrten werden geladen…", + noDepartures: "Keine kommenden Abfahrten an dieser Haltestelle gefunden.", + live: "live", + cancelled: "ausgefallen", + refresh: "Aktualisieren", + tripLoginTitle: "Anmelden zum Speichern", + tripLoginDesc: "Melde dich an, um diese Reise als Sammlung zu speichern.", + tripCollectionTitle: "{{destination}} Skate-Trip 🛹", + tripCollectionDesc: "Reiseplan von The Sasquatch – {{count}} Tage in {{destination}}.", + tripCollectionDescOne: "Reiseplan von The Sasquatch – {{count}} Tag in {{destination}}.", + tripSavedTitle: "In Sammlungen gespeichert 🦧", + tripSavedDesc: "Dein {{destination}}-Trip ist vorgemerkt.", + tripSaveFailed: "Speichern fehlgeschlagen", + tripSaveFailedDesc: "Versuche es gleich noch einmal.", + daysInDestinationOne: "{{count}} Tag in {{destination}}", + daysInDestination: "{{count}} Tage in {{destination}}", + wetForecast: "Nasse Vorhersage – frag eine lokale Crew nach überdachten/indoor Optionen.", + dayLabel: "Tag {{n}}", + freeSkate: "Freies Skaten – erkunden & filmen. 🎥", + tapToBook: "tippen zum Buchen / zap ⚡", + localCrews: "Lokale Crews", + saving: "Wird gespeichert…", + savedToCollections: "In Sammlungen gespeichert", + saveSpotOne: "{{count}} Spot in einer Sammlung speichern", + saveSpots: "{{count}} Spots in einer Sammlung speichern", + flights: "Flüge", + stays: "Unterkünfte", + gettingAround: "Fortbewegung", + noMiddleman: "Ich plane das Skaten – Flüge & Unterkünfte öffnen sich auf den echten Seiten (kein KYC, kein Zwischenhändler).", + ageJustNow: "gerade eben", + ageMinAgo: "vor {{count}} Min.", + ageHourAgo: "vor {{count}} Std.", + ageDayAgo: "vor {{count}} T.", + skateRightHere: "genau hier", + skateMin: "~{{count}} Min. Cruise", + skateHours: "~{{hours}} Std. Cruise", + maneuver: { + headOut: "Losfahren", + arrive: "Am Spot ankommen", + continueStraight: "Weiter", + bearLeft: "Leicht links", + bearRight: "Leicht rechts", + turnLeft: "Links abbiegen", + turnRight: "Rechts abbiegen", + sharpLeft: "Scharf links", + sharpRight: "Scharf rechts", + turn: "Abbiegen", + keepLeft: "Links halten", + keepRight: "Rechts halten", + takeFork: "Der Gabelung folgen", + merge: "Einfädeln", + roundabout: "In den Kreisverkehr fahren", + takeRamp: "Die Rampe nehmen", + takeExit: "Die Ausfahrt nehmen", + }, + maneuverOnto: "{{instruction}} auf {{road}}", + }, + sasquatchUi: { + live: "live", + offline: "offline", + genericTitle: "SkateSpots-Assistent 🦧", + genericGreeting: "Yo! Ich bin The Sasquatch. Frag mich alles über Spots, Events, Coaches, Gear oder wie die App funktioniert. Ich habe Live-Daten vom SkateSpots-Relay!", + q1: "Plan mir 3 Tage in Lissabon", + q2: "Finde Spots in meiner Nähe", + q3: "Gibt es kommende Events?", + q4: "Was sind Crews?", + q5: "Wie funktionieren Zaps?", + q6: "Was ist Nostr?", + q7: "Was ist Mein Stash?", + q8: "Ist das kostenlos?", + bubbleTitle: "Zum Bewegen drücken und ziehen · Zum Öffnen tippen", + openGuideAria: "Sasquatch-Guide öffnen", + hideAria: "Den Sasquatch-Assistenten ausblenden", + hide: "Assistent ausblenden", + showAria: "Den Sasquatch-Assistenten anzeigen", + activeUntil: "Aktiv bis {{date}}", + platformOwner: "Plattform-Inhaber", + upgradeTitle: "Upgrade auf Sasquatch Pro", + goPro: "Pro werden", + goProBlurb: "Persönliche KI · ab 2k sats", + aiBalanceTitle: "Sasquatch-AI-Guthaben (nur für Inhaber) – aufladen bei {{provider}}", + aiChip: "⚡ KI {{balance}}", + minimizeToBubbleAria: "Zur Blase minimieren", + minimize: "Minimieren", + closePanelAria: "Panel schließen", + close: "Schließen", + askLab: "Frag zu Coaching & Filmen", + askMap: "Frag zu Spots, Shops & Gear", + askAnything: "Frag mich alles 🛹", + quickQuestions: "Schnelle Fragen:", + you: "🧑 Du", + thinking: "denkt nach...", + inputPlaceholder: "Frag zu Spots, Events, Coaches...", + liveDataFrom: "Live-Daten von", + nostrRelays: "Nostr-Relays", + clear: "löschen", + gettingLocation: "📍 Dein Standort wird ermittelt…", + findingClosest: "🔍 Die nächstgelegenen Spots werden gesucht…", + checkingLive: "🔍 Live-Daten werden geprüft…", + planningTrip: "🗺️ Dein {{destination}}-Trip wird geplant...", + searchingRelays: "🔍 Die Relays werden nach {{tool}} durchsucht...", + perk1: "Persönlicher Assistent – Sasquatch liest deinen eigenen Stash, deine Crews, Spots & Angebote", + perk2: "Aktionsentwürfe: Gear anbieten, einen Skate-Status posten, einen Trip planen – du bestätigst, bevor etwas veröffentlicht wird", + perk3: "Antworten nutzen deinen persönlichen Kontext, nicht nur öffentliche Daten", + perk4: "⚡ Unterstütze SkateSpots direkt und halte es kostenlos und werbefrei", + welcomeTitle: "Danke, dass du Sasquatch Pro unterstützt! 🦧⚡", + welcomeDesc: "Zahlung gesendet – dein Pass wird aktiviert, sobald der Anbieter sie bestätigt (normalerweise innerhalb einer Minute). Danke, dass du die Straßen frei hältst.", + invoiceCopied: "Rechnung kopiert", + dialogDesc: "Lade deinen KI-Skate-Guide auf. 100 % finanzieren eine kostenlose, werbefreie Community-App.", + proSupporter: "Du bist ein Pro-Supporter ⚡", + extendPrompt: "Möchtest du verlängern? Wähle unten eine Stufe, um mehr Zeit hinzuzufügen.", + scanToPayPre: "Zum Bezahlen scannen", + scanToPayAmount: "{{sats}} sats", + scanToPayPost: "für {{label}} von Pro", + invoiceQrAlt: "Lightning-Rechnungs-QR", + copyInvoice: "Rechnung kopieren", + ivePaid: "Ich habe bezahlt", + ivePaidHint: "Tippe auf \"Ich habe bezahlt\", nachdem deine Wallet bestätigt hat – dies speichert deinen Pass zu deiner Nostr-Identität.", + freeStaysPre: "Der kostenlose Sasquatch bleibt kostenlos – öffentliche Spot-/Event-/Coach-Suche, Reiseplanung + das vollständige Trick-Glossar. Pro fügt die ", + freeStaysEmphasis: "persönliche + Aktions-", + freeStaysPost: "Ebene hinzu.", + loginFirst: "Melde dich zuerst an, um upzugraden.", + paysTo: "Zahlt an", + overLightning: "über Lightning. An deine npub gebunden.", + popular: "Beliebt", + sats: "sats", + extend: "Verlängern", + done: "Fertig!", + cancelledNothing: "Abgebrochen – nichts wurde veröffentlicht.", + draftReview: "Entwurf – prüfen & bestätigen", + statusTextPlaceholder: "Statustext", + titlePlaceholder: "Titel", + priceSatsPlaceholder: "Preis (sats)", + conditionPlaceholder: "Zustand", + cancel: "Abbrechen", + aiTitle: "Sasquatch AI", + owner: "Inhaber", + notConfigured: "nicht konfiguriert", + unavailable: "nicht verfügbar", + satsValue: "{{balance}} sats", + theNode: "der Node", + lowBalance: "Wird knapp – lade bei {{provider}} auf, sonst fällt die KI auf den schlüssellosen Anbieter zurück.", + aiDesc: "Pay-per-Request-KI, finanziert in sats über Routstr. Lädt auf, wenn es knapp wird.", + tier7d: "7 Tage", + tier1m: "1 Monat", + tier3m: "3 Monate", + tier1y: "1 Jahr", + badgeTry: "Ausprobieren", + badgeOff20: "20 % Rabatt", + badgeBest: "Bestes Angebot · 40 % Rabatt", + draftPostStatusTitle: "Einen Skate-Status posten", + draftAutoExpires: "Läuft automatisch in {{count}} Min. ab", + draftPostStatusCta: "Status posten", + draftCategory: "Kategorie: {{value}}", + draftSize: "Größe: {{value}}", + draftCondition: "Zustand: {{value}}", + draftMaxPrice: "Max. Preis: {{price}} {{currency}}", + draftPriceOpen: "Preis: offen", + draftLookingForTitle: "Suche nach „{{title}}“", + draftWantedCta: "Gesuch posten", + draftPrice: "Preis: {{price}} {{currency}}", + draftPriceOffer: "Preis: Angebot abgeben", + draftListTitle: "„{{title}}“ zum Verkauf anbieten", + draftPublishCta: "Angebot veröffentlichen", + statusPosted: "Status gepostet 🛹", + wantedPublished: "Gesuch veröffentlicht 🔎", + listingPublished: "Angebot veröffentlicht 💸", + mustBeLoggedIn: "Du musst angemeldet sein.", + }, + sasquatchChat: { + faq: { + hi: "Hey! Ich bin The Sasquatch 🦧 Dein KI-Skate-Guide. Frag mich zu Spots, Events, Coaches, Gear – oder allem rund um die App. Was brauchst du?", + hello: "Was geht! 🛹 Ich bin The Sasquatch. Frag mich zu Skate-Spots, Events, Coaches oder wie die App funktioniert. Was gibt's?", + hey: "Hey Skater! 🤙 Frag mich zu Spots in deiner Nähe, kommenden Events, Coaches oder allem rund um SkateSpots.", + whoAreYou: "Ich bin The Sasquatch 🦧 – der KI-Guide für SkateSpots. Ich finde Skate-Spots weltweit, suche Events, Coaches, Filmer und Gear-Angebote. Alles angetrieben von Live-Nostr-Daten. Frag los!", + whatCanYouDo: "Ich kann Skate-Spots nach Stadt oder Land finden, kommende Events nachschlagen, Coaches und Filmer in The Lab finden, Gear-Angebote durchsuchen und Fragen zur Funktionsweise der App beantworten. Versuch: 'Spots in Bangkok' oder 'finde einen Coach'! 🛹", + whatIsNostr: "Nostr ist ein einfaches, offenes Protokoll für dezentrale soziale Netzwerke. Denk an Twitter, aber kein einzelnes Unternehmen kontrolliert es – du nutzt kryptografische Schlüssel statt Benutzernamen, wählst, welche Relays deine Daten speichern (oder betreibst deine eigenen), und ein Konto funktioniert über jede Nostr-App hinweg! 🔑", + isThisPrivate: "Hier die ehrliche Zusammenfassung 🛡️\n\n• Dein **GPS-Standort bleibt auf deinem Gerät** – 'In der Nähe' zentriert nur die Karte. Er wird nie an uns gesendet oder veröffentlicht.\n• **Spots, die du hinzufügst, sind öffentlich** (das ist der Sinn einer geteilten Karte) – setze also keine Markierung auf deine eigene Haustür.\n• **DMs & Crew-Chats sind Ende-zu-Ende verschlüsselt** – nur Mitglieder können sie lesen.\n• Wie bei jeder Website können Server, mit denen du dich verbindest (Kartenkacheln, Relays), deine **IP** sehen. Willst du auch die verbergen? Nutze ein VPN oder Tor.\n\nVollständige Details auf der [Datenschutzseite](/privacy). 🛹", + privacy: "Kurzfassung 🛡️: Dein GPS verlässt nie dein Gerät, Spots, die du veröffentlichst, sind konstruktionsbedingt öffentlich, und DMs/Crew-Chats sind Ende-zu-Ende verschlüsselt. Server können trotzdem deine IP sehen (normal für jede Website) – ein VPN oder Tor verbirgt das, wenn du willst. Vollständige Details auf der [Datenschutzseite](/privacy).", + amITracked: "SkateSpots verfolgt dich nicht – keine Werbung, kein Analyse-Profiling, kein Datenverkauf, und es gibt keinen SkateSpots-Server, der deinen Standort sammelt. Dein GPS bleibt auf deinem Gerät. Das Einzige, was Server sehen (Kartenkacheln, Relays), ist deine **IP** – wie bei jeder Website. Nutze ein VPN oder Tor, um sie zu verbergen. Mehr auf der [Datenschutzseite](/privacy). 🛡️", + doYouTrack: "Nö – kein Tracking, keine Werbung, kein Datensammeln. Dein GPS bleibt auf deinem Gerät und es gibt keinen zentralen Server, der dich protokolliert. Server, mit denen du dich verbindest, können deine IP sehen (wie bei jeder Seite); ein VPN/Tor verbirgt sie. Siehe [Datenschutzseite](/privacy). 🛹", + vpn: "Völlig optional, aber solide, wenn du mehr Privatsphäre willst 🛡️. Ein VPN verbirgt deine **IP** (ungefährer Standort) vor den Servern, mit denen SkateSpots spricht – Kartenkacheln, Relays usw. Wähle einen No-Logs-Anbieter, dem du vertraust (z. B. Mullvad); meide zwielichtige kostenlose.\n\nZur Info: Ein VPN verbirgt **nicht** die Spots, die du veröffentlichst (die sind öffentlich), und aktiviere kein Browser-GPS, wenn du anonym bleiben willst. Vollständige Details auf der [Datenschutzseite](/privacy).", + tor: "Der Tor-Browser bietet dir die stärkste IP-Privatsphäre – er leitet dich durch mehrere Relays, sodass Server deine echte IP nicht sehen 🧅. Der Kompromiss: Es ist langsamer, und Karten + einige Nostr-Relays können hängen oder Tor-Exits blockieren. Ideal für die besonders Vorsichtigen.\n\nDenk daran: Tor verbirgt deine IP, nicht die Spots, die du veröffentlichst, und aktiviere kein Browser-GPS, wenn Anonymität das Ziel ist. Mehr auf der [Datenschutzseite](/privacy).", + hideMyIp: "Zwei kostenlose Optionen 🛡️: ein **seriöses VPN** (einfach, schnell – verbirgt deine IP hinter deren Servern) oder **Tor Browser** (maximale Privatsphäre, langsamer). Beide verhindern, dass die Server, mit denen SkateSpots sich verbindet, deine echte IP sehen. Sie verbergen jedoch nicht die Spots, die du veröffentlichst. Siehe [Datenschutzseite](/privacy).", + isMyLocation: "Dein Standort ist sicher 📍 – 'In der Nähe' liest dein GPS nur auf deinem Gerät, um die Karte zu zentrieren und nahe Spots zu sortieren. Er wird nie auf Nostr veröffentlicht, nie an uns gesendet, nie geteilt. Nur Spots, die du bewusst hinzufügst, sind öffentlich. Details auf der [Datenschutzseite](/privacy).", + whatAreZaps: "Zaps sind sofortige Bitcoin-Lightning-Trinkgelder, die über Nostr verschickt werden! Klicke auf ⚡ bei beliebigem Inhalt und sende sats direkt an die Wallet des Erstellers. Wie 'Gefällt mir', aber mit echtem Geld. Sofort, Peer-to-Peer, keine Zwischenhändler. ⚡", + howToLogin: "Zwei Wege:\n1. **Browser-Erweiterung** (Desktop): Installiere Alby oder nos2x und klicke dann auf 'Anmelden'\n2. **Neuer Nutzer**: Klicke auf 'Registrieren', um Schlüssel zu erzeugen. Lade deinen nsec (geheimen Schlüssel) herunter und BEWAHRE IHN AUF – das ist dein Konto für immer!", + whatIsCashu: "Integrierte Bitcoin-Wallet! Cashu-Ecash-Token, gedeckt durch Lightning – funktioniert offline an Skate-Spots, datenschutzorientiert (Mints können Zahlungen nicht nachverfolgen). Gehe in den Einstellungen zu Wallet, um sie zu nutzen. 🥜", + whatIsNwc: "Nostr Wallet Connect – wie USB-C für Lightning-Wallets. Verbinde Alby, Minibits, Zeus oder Coinos einmal und zap mit einem Klick für immer. Verschlüsselt, du kontrollierst die Ausgabelimits. 🔌⚡", + isItFree: "100 % kostenlos. Keine Werbung, keine Abos, kein Konzern-BS. Von Skatern für Skater gebaut. Community-finanziert über Angor – sieh dir die Supporter-Seite an. Du kannst auch Bitcoin durch Community-Zaps für hochwertige Spot-Beiträge verdienen. 🛹", + whatCanIDo: "Entdecke Spots weltweit auf der Karte, engagiere Profis in The Lab (Coaches, Filmer, Fotografen, Editoren, Rampen-Builder), rolle mit einer Crew, nimm an Events teil, mach Touren, kaufe/verkaufe Gear, verwalte deinen privaten Stash, zap Ersteller, prüfe das Spot-Wetter und baue die dezentrale Skate-Community mit!", + whatIsTheLab: "The Lab ist der Ort, an dem du Profis der Skate-Szene engagierst: Coaches, Filmer, Fotografen, Video-Editoren und Rampen-/Park-/DIY-Builder. Jeder kann eine Einzelperson oder ein Kollektiv sein (Crew/Studio) – Mitglieder bestätigen mit ihren eigenen Schlüsseln, also ist es echt. Alles auf Nostr, keine Fake-Konten. 🎓", + whatIsACrew: "Crews sind deine kartenverankerte Skate-Familie – mit wem du zusammen skatest, nicht wen du engagierst. Jede Crew hat Heimatgebiet auf der Karte (petrolfarbene Pins), Home-Spots, Mitglieder, Vibes und ein Manifest. Mitglieder bestätigen mit ihrem eigenen Schlüssel. Erstelle eine unter Crews → 'Crew erstellen'. 🤘", + whatAreCrews: "Crews sind deine kartenverankerte Skate-Familie – mit wem du zusammen skatest, nicht wen du engagierst. Jede Crew hat Heimatgebiet auf der Karte (petrolfarbene Pins), Home-Spots, Mitglieder und ein Manifest. Mitglieder bestätigen mit ihrem eigenen Schlüssel. Geh zum Crews-Tab, um eine zu gründen oder beizutreten! 🤘", + howToStartACrew: "Geh zum Crews-Tab → 'Crew erstellen'. Gib ihr einen Namen, setze dein Heimatgebiet auf die Karte, füge Vibes hinzu (oder deinen eigenen #Hashtag), verlinke deine Home-Spots und füge Mitglieder per npub hinzu. Jedes Mitglied bestätigt mit seinem eigenen Schlüssel, damit das Roster echt ist. 🤘", + whatIsMyStash: "Mein Stash ist dein PRIVATES, verschlüsseltes Gear-Lager (NIP-44-Verschlüsselung). Verwalte deine Decks, Trucks, Wheels, Schuhe – mit Aufbewahrungsort, Zustand, Seltenheit und Preis. Nur DU kannst es lesen, außer du markierst Artikel als öffentlich. Super für Versicherung oder Tauschplanung. 🎒", + whatIsStash: "Mein Stash ist dein PRIVATES, verschlüsseltes Gear-Inventar. Erfasse alles, was du besitzt – Zustand, wo es gelagert ist, Wert – alles verschlüsselt, sodass nur du es siehst. Markiere Artikel als öffentlich, wenn du sie verkaufen oder zeigen willst. 🎒", + whatIsABuilder: "Builder sind Rampen-/Park-/DIY-Crews in The Lab, die du engagieren kannst, um Transitions, Bowls, Rails oder einen ganzen Park zu bauen. Sie listen, was sie bauen, Materialien, Projektumfang, und können lizenziert/versichert sein. Oft Kollektive – und sie können die Spots, die sie gebaut haben, mit der Karte verlinken. 🏗️", + whatIsANutzap: "Nutzaps (NIP-61) sind Ecash-Trinkgelder, die über Nostr versendet werden – private Cashu-Token, die direkt an jemanden gezappt werden. Du kannst den EMPFANG von Nutzaps in der Wallet einrichten. (Das Senden vollständiger Nutzaps wird gerade ausgerollt – nutze vorerst Lightning-Zaps.) 🥜⚡", + whatIsClink: "CLINK ist ein Nostr-nativer Zahlungscode (ein 'noffer'). Shops, Crews und Lab-Profis können einen hinzufügen, damit du sie ohne Lightning-Adresse bezahlen kannst – du siehst dann eine Schaltfläche 'Via CLINK bezahlen' mit QR-Code. Scanne ihn mit einer CLINK-Wallet wie ShockWallet. 🔗⚡ [specs](https://clinkme.dev/specs.html) [apps](https://clinkme.dev/apps.html)", + whatIsNoffer: "Ein noffer ist ein CLINK-Zahlungscode – eine wiederverwendbare, Nostr-native Möglichkeit, bezahlt zu werden, ohne Webserver oder Lightning-Adresse. Füge deinen in deinem Shop-/Crew-/Lab-Profil hinzu und Leute können dich direkt bezahlen. 🔗", + whatAreTours: "Touren sind geführte Skate-Reisen – lokale Sessions, nationale Roadtrips oder World-Destruction-Touren. Finde sie auf der Karte oder im Touren-Bereich, triff dich und skate neues Terrain mit Locals. 🗺️🛹", + whatIsAShop: "Skate-Shops sind lokale Shops, die auf der Karte gelistet sind. Entdecke und unterstütze echte Ladengeschäfte (oder Online-)Skate-Shops in deiner Nähe – einige akzeptieren sogar Bitcoin. 🏪", + howToSellGear: "Geh zu Gear-Tausch / Marktplatz und erstelle ein Angebot (NIP-99). Füge Fotos hinzu, Preis in sats, Zustand und optional eine Verankerung an einen Spot, damit es auf der Karte erscheint. Käufer zappen oder schreiben dir direkt. 🛹💸", + supporters: "SkateSpots wird von der Community über Angor finanziert (dezentrales Bitcoin-Crowdfunding) – keine Werbung, keine Investoren, kein Datenverkauf. Sieh dir die Supporter-Seite an, um das Projekt zu unterstützen und die Straßen frei zu halten. ❤️⚡", + trustScore: "Vertrauenswerte (0-100) von Relatr. Analysiert dein Nostr-Netzwerk: Follower, Aktivität, Engagement, Zaps. Höher = vertrauenswürdiger. Hilft, Bots und Spam zu filtern. Prüfe ein beliebiges Profil, um den Wert zu sehen. 🛡️", + whatRelay: "SkateSpots verwendet: 🛹 goskatespots.nostr1.com (primär, für Qualität allowlisted) + relay.ditto.pub (global) + purplepag.es (Profil-Aggregator). Deine Daten werden zur Redundanz über alle repliziert.", + tripPlanner: "Nenn mir eine Stadt und ich baue einen tageweisen Skate-Trip 🗺️ – Spots, Events, Coaches und lokale Crews, wetterabhängig (Regentag = Crew-Tipp für überdachte Spots). Versuch 'plan mir 3 Tage in Lissabon'. Ich kann alles in einer Sammlung speichern und dich zu Flügen/Unterkünften auf den echten Seiten weiterleiten (kein KYC, kein Zwischenhändler). 🛹", + planATrip: "Sag einfach 'plan mir 3 Tage in Barcelona' (oder einer beliebigen Stadt) und ich kartiere Spots, Sessions, Coaches und lokale Crews für jeden Tag. Speichere es als Sammlung und geh shredden. 🗺️🛹", + sasquatchPro: "**Sasquatch Pro** 🦧⚡ ist ein Lightning-Supporter-Pass, der die persönliche Seite von mir freischaltet:\n\n• 🧠 **Persönlicher Assistent** – ich lese deinen eigenen Stash, deine Crews, Spots & Angebote\n• ✨ **Aktionsentwürfe** – Gear anbieten, deinen Skate-Status posten, Trips planen (du bestätigst immer, bevor etwas veröffentlicht wird)\n• 💬 **Persönlicher Kontext** – meine Antworten nutzen deine eigenen Daten, nicht nur öffentliche Ergebnisse\n• ⚡ **Das Projekt unterstützen** – du hältst SkateSpots kostenlos und werbefrei\n\nDer kostenlose Sasquatch bleibt kostenlos: öffentliche Spot-/Event-/Coach-/Crew-Suche, das Glossar & die Reiseplanung funktionieren ohne Pro. Pro fügt nur das *Persönliche* hinzu. Tippe oben auf **⚡ Pro werden**. Stufen: 7 Tage ~2k sats, 1 Monat ~5k, 3 Monate ~12k, 1 Jahr ~36k.", + proPerks: "Pro-Vorteile 🦧⚡: persönlicher Assistent (liest deinen Stash/deine Crews/Spots/Angebote), Aktionsentwürfe (Gear anbieten, Status posten, Trips planen – du bestätigst) und Antworten, die deinen eigenen persönlichen Kontext nutzen. Außerdem unterstützt du SkateSpots direkt und hältst es kostenlos + werbefrei. Kostenlos bleibt kostenlos – Pro fügt die persönliche Ebene hinzu. Tippe oben auf **⚡ Pro werden**.", + proVersion: "Die Pro-Version von mir 🦧⚡ fügt einen **persönlichen Assistenten** hinzu: Ich kann deinen eigenen Stash, deine Crews, Spots & Angebote lesen, Aktionen für dich entwerfen (Gear anbieten, einen Status posten, einen Trip planen – du bestätigst immer zuerst) und deinen persönlichen Kontext in meinen Antworten nutzen. Außerdem unterstützt es das Projekt direkt. Der kostenlose Sasquatch (Spot-/Event-/Coach-/Crew-Suche, Glossar, Reiseplaner) bleibt kostenlos. Tippe oben auf **⚡ Pro werden**.", + perks: "Pro-Vorteile 🦧⚡: persönlicher Assistent (dein Stash/Crews/Spots/Angebote), Aktionsentwürfe, die du bestätigst, und Antworten, die deinen eigenen Kontext nutzen – außerdem hältst du die App kostenlos & werbefrei. Tippe oben auf **⚡ Pro werden**.", + goPro: "Tippe oben auf die Schaltfläche **⚡ Pro werden**, um das Upgrade-Fenster zu öffnen. Pro schaltet meinen persönlichen Assistenten (Stash/Crews/Spots/Angebote) und Aktionsentwürfe frei und unterstützt das Projekt direkt. Zahle mit Lightning – 7 Tage ~2k sats bis 1 Jahr ~36k sats. Kostenlose Funktionen bleiben kostenlos. 🦧", + proPricing: "Pro-Stufen (mit Lightning zahlen ⚡): **7 Tage** ~2.000 sats (~1,20 $), **1 Monat** ~5.000 sats (~3 $), **3 Monate** ~12.000 sats (~7 $, 20 % Rabatt), **1 Jahr** ~36.000 sats (~21 $, bestes Angebot). Tippe oben auf **⚡ Pro werden**.", + howMuchIsPro: "Pro-Stufen: 7 Tage ~2.000 sats, 1 Monat ~5.000 sats, 3 Monate ~12.000 sats (20 % Rabatt), 1 Jahr ~36.000 sats (bestes Angebot). Mit Lightning zahlen ⚡. Tippe oben auf **⚡ Pro werden**.", + upgrade: "Um auf Sasquatch Pro upzugraden, tippe oben auf die Schaltfläche **⚡ Pro werden**. Zahle mit Lightning (7 Tage ~2k sats bis 1 Jahr ~36k). Pro schaltet meinen persönlichen Assistenten und Aktionsentwürfe frei und unterstützt das Projekt direkt. 🦧⚡", + }, + statsTitle: "📊 **SkateSpots in Zahlen**", + weatherTemp: "• {{temp}}°C (gefühlt {{feels}}°C)", + weatherSkateability: "• Skatebarkeit: **{{label}}** ({{score}}/100)", + weatherError: "Das Wetter konnte gerade nicht gelesen werden. Versuche es gleich noch einmal. 🌧️", + labelSpots: "Spots", + labelEvents: "Events", + labelLabPros: "Lab-Profis", + labelCrews: "Crews", + labelShops: "Skate-Shops", + labelTours: "Touren", + labelGear: "Gear-Angebote", + unnamed: "Unbenannt", + emptyWhere: " in **{{place}}**", + emptyResult: "Habe gerade keine {{label}}{{where}} gefunden 🦧\n\nDas könnte bedeuten, dass noch keine gelistet sind – oder die Relays waren langsam. Versuche es in einem Moment erneut, prüfe die Schreibweise oder [füge den ersten auf der Karte hinzu](https://skate-spots.org/map). 🛹", + foundTitle: "{{emoji}} **{{count}}** {{label}} gefunden:\n{{lines}}{{more}}", + moreResults: "\n\n…und **{{count}}** weitere – [alle auf der Karte ansehen](https://skate-spots.org/map) 🗺️", + locationDenied: "Ich kann deinen Standort nicht sehen – dein Gerät verlässt nie etwas; ich lese ihn nur lokal, wenn du fragst, und der Browser hat gerade abgelehnt. Tippe auf der Karte auf 🎯 **In der Nähe** oder nenn mir eine Stadt: \"Spots in Bangkok\". 🛹", + noNearbySpots: "Noch keine kartierten Spots in deiner Nähe 🦧 – [sei der Erste, der einen setzt](https://skate-spots.org/create-spot). 🛹", + closestTitle: "Gerade am nächsten bei dir:", + closestFooter: "_Auf deinem Gerät berechnet – dein Standort hat es nie verlassen._", + proNudge: "Das ist eine **Sasquatch-Pro**-Sache 🦧⚡ – mit Pro kann ich deinen Stash, deine Crews, Spots und Angebote lesen, Gear-Angebote, Gesuche und Skate-Status entwerfen und deine Trips planen. Es ist ein Lightning-Supporter-Pass, der SkateSpots kostenlos & werbefrei hält. Tippe oben auf die Schaltfläche **⚡ Pro werden**, um es freizuschalten. 🛹", + draftingProPerk: "Aktionen zu entwerfen (einen Status posten, Gear anbieten) ist ein **Sasquatch-Pro**-Vorteil 🦧⚡ – tippe oben auf **⚡ Pro werden**, um es freizuschalten.", + draftIntro: "Hier ist ein Entwurf – prüfe ihn und tippe zum Veröffentlichen. Nichts geht live, bis du bestätigst. 🛹", + draftFailed: "Ich konnte diesen Entwurf nicht ganz erstellen – nenn mir die Details noch einmal (z. B. \"biete meine Spitfire-Wheels für 8000 sats an\").", + tripAskCity: "Wohin? Nenn mir eine Stadt (z. B. \"plan mir 3 Tage in Lissabon\") und ich baue einen Trip. 🗺️", + tripEmptyMap: "Noch nichts auf der Karte für **{{destination}}** 🦧 – sei der Erste, der Spots auf [skate-spots.org](https://skate-spots.org) setzt. Sobald Locals Spots, Crews & Events hinzufügen, baue ich dir einen kompletten Trip.", + tripLocked: "Habe eine **{{destination}}**-Mission für dich festgelegt 🛹 – Spots, Sessions und Locals unten. Passe sie an oder speichere sie.", + tripFailed: "Die Live-Daten konnten gerade nicht erreicht werden, um das zu planen. Versuche es in einem Moment erneut! 🛹", + tripEmptyMapLocal: "Noch nichts auf der Karte für **{{destination}}** 🦧 – sei der Erste auf [skate-spots.org](https://skate-spots.org).", + tripMissionLocal: "Hier ist eine **{{destination}}**-Mission 🛹 – Spots, Sessions & Locals unten.", + relayFailed: "Die Relays haben gerade nicht rechtzeitig geantwortet 🛰️ – das ist meist eine langsame Verbindung, kein fehlender Spot. Versuche es in einem Moment noch einmal. 🛹", + couldNotProcess: "Hmm, das konnte nicht verarbeitet werden. Versuche es anders zu formulieren!", + freeTierFallback: "Das braucht KI-Denkvermögen – eine **Sasquatch-Pro**-Funktion ⚡🦧\n\nIch kann trotzdem **Spots, Events, Coaches, Crews, Shops, Touren und Gear** direkt von den Relays finden – frag mich z. B. \"Spots in Barcelona\" – und das [Glossar](/glossary) deckt 150+ Tricks & Begriffe ab. Tippe oben auf **⚡ Pro werden**, um KI-Antworten freizuschalten.", + aiDownFallback: "Mein KI-Gehirn holt gerade etwas Luft 🦧 – aber ich hab dich trotzdem:\n\n• 🗺️ [Karte](/) – Spots, Shops, Events in deiner Nähe\n• 🧪 [The Lab](/lab) – Coaches, Filmer, Editoren\n• 📖 [Glossar](/glossary) – 150+ Tricks & Begriffe\n• 👥 [Crews](/crews) – finde deine Leute\n\nOder nenn mir einfach eine **Stadt** (\"Spots in Barcelona\") oder einen **Trick** (\"was ist ein Nollie\") und ich antworte direkt. 🛹", + wentWrong: "Bei mir ist etwas schiefgelaufen. Versuche es gleich noch einmal! 🦧", + publishError: "Das konnte nicht veröffentlicht werden: {{error}}. Versuche es gleich noch einmal.", + unknownError: "unbekannter Fehler", + }, +}; export default deBatch2; diff --git a/src/i18n/de/batch3.ts b/src/i18n/de/batch3.ts index e9103bc..2696528 100644 --- a/src/i18n/de/batch3.ts +++ b/src/i18n/de/batch3.ts @@ -1,4 +1,1294 @@ -/** de — batch 3. Filled by the translation pass; empty until then. */ -const deBatch3 = {}; +/** de — batch 3. */ +const deBatch3 = { + settingsUi: { + proSupport: { + title: "Pro & Support", + subtitle: "Optionale Extras, die SkateSpots kostenlos halten", + prepaidTitle: "Vorausbezahlt, kein Abo", + prepaidBody: "Jeder Kauf ist eine einmalige Bitcoin-/Lightning-Zahlung — kein Konto, keine wiederkehrende Abbuchung, keine Verwahrung. Erneutes Zahlen verlängert deine Zeit.", + sasquatchTitle: "Sasquatch Pro", + sasquatchBenefit: "Schaltet den persönlichen KI-Assistenten frei — er kann deinen eigenen Stash, deine Crews und Angebote lesen — und hilft, das Projekt zu finanzieren.", + active: "Aktiv", + activeUntil: "Aktiv bis {{date}}", + daysLeft: "Noch {{count}} Tage", + notActive: "Nicht aktiv", + goPro: "Pro werden", + extend: "Pro verlängern", + day: "Tag", + featuredTitle: "Hervorgehobene Platzierung", + featuredBenefit: "Schieb ein Angebot mit einem Pro-Abzeichen nach oben — für Lab-Profile, Events, Shops und Touren.", + featuredHow: "Dauerstufen gelten für jeden Typ; längere Laufzeiten kosten weniger pro Tag. Du hebst ein Angebot hervor, wenn du es erstellst oder bearbeitest.", + featuredUntil: "Bis {{date}}", + yourFeatured: "Deine hervorgehobenen Angebote", + noneFeatured: "Keine aktiven hervorgehobenen Platzierungen.", + freeTitle: "Kostenlose Wege", + freeBody: "Die KI-FAQ und die lokale Suche sind immer kostenlos, und du kannst ein Marktplatz-Angebot mit einem kostenlosen Proof-of-Work statt der sats-Gebühr veröffentlichen." + }, + notFound: { + seoTitle: "404 – Seite nicht gefunden", + seoDescription: "Die gesuchte Seite konnte nicht gefunden werden. Kehre zur Startseite zurück, um weiterzustöbern.", + message: "Ups! Seite nicht gefunden", + returnHome: "Zurück zur Startseite" + }, + loginArea: { + signUp: "Registrieren", + logIn: "Anmelden" + }, + accountSwitcher: { + switchAccount: "Konto wechseln", + walletSettings: "Wallet-Einstellungen", + addAccount: "Weiteres Konto hinzufügen", + logout: "Abmelden" + }, + amberHint: { + defaultAction: "senden", + multiBefore: "Dein Signer wird dich bitten, dies zu bestätigen", + multiTimes: "{{approvals}}-mal", + multiAfter: "um zu {{action}} — das ist normal für verschlüsselte Nachrichten (eine Bestätigung pro Empfänger). Bestätige jede.", + single: "Dein Signer wird dich bitten, dies zu bestätigen, um zu {{action}}." + }, + amberCallback: { + processing: "Amber-Anmeldung wird verarbeitet…", + gotResult: "Ergebnis erhalten: {{result}}", + noResultDebug: "Kein Ergebnis von Amber", + noResultToast: "Kein Ergebnis von Amber erhalten. Der Vorgang wurde möglicherweise abgebrochen.", + validPubkey: "Gültiger Pubkey! Anmeldung läuft…", + loginSuccessful: "Anmeldung erfolgreich!", + loginErrorDebug: "Anmeldefehler: {{error}}", + invalidResultDebug: "Ungültiges Ergebnisformat: {{result}}", + loggedInTitle: "Angemeldet", + amberLoginDesc: "Erfolgreich mit Amber angemeldet!", + loginFailedTitle: "Anmeldung fehlgeschlagen", + loginFailedDesc: "Amber-Anmeldung konnte nicht abgeschlossen werden. Bitte versuche es erneut.", + invalidPubkeyDesc: "Ungültiger Pubkey von Amber erhalten.", + sessionLostToast: "Sitzungsdaten sind verloren gegangen. Bitte versuche es erneut.", + eventSignedTitle: "Event signiert", + eventSignedDesc: "Dein Event wurde von Amber signiert.", + signingFailedTitle: "Signieren fehlgeschlagen", + signingFailedDesc: "Das signierte Event von Amber konnte nicht verarbeitet werden.", + operationCompleteTitle: "Vorgang abgeschlossen", + operationCompleteDesc: "{{op}} abgeschlossen." + }, + loginDialog: { + loginWithAmber: "Mit Amber anmelden (Android)", + welcomeTitle: "Willkommen bei SkateSpots", + welcomeSubtitle: "Registriere dich oder melde dich an, um fortzufahren", + newHere: "Neu hier?", + createFree: "Erstelle ein kostenloses Konto. Keine E-Mail nötig.", + createAccount: "Konto erstellen", + orLogIn: "Oder anmelden", + loggedInTitle: "🛹 Angemeldet!", + loggedIn: "Angemeldet!", + connectedAmber: "Über Amber verbunden!", + amberLoginFailed: "Amber-Anmeldung fehlgeschlagen", + amberCancelled: "Anmeldung abgebrochen. Tippe auf „Open Amber“, um es erneut zu versuchen.", + amberNotFound: "Amber nicht gefunden. Stelle sicher, dass Amber aus dem ZapStore installiert ist.", + loginFailed: "Anmeldung fehlgeschlagen", + pubkeyError: "Füge deinen Hex-Pubkey (64 Zeichen) oder npub von Amber ein", + pairedSigner: "Mit deinem Signer gekoppelt.", + connectFailed: "Verbindung zu deinem Signer fehlgeschlagen.", + openedEncrypted: "Dein verschlüsselter Schlüssel wurde geöffnet.", + openKeyFailed: "Dieser Schlüssel konnte nicht geöffnet werden.", + bunkerPrefix: "Muss mit bunker:// beginnen", + connectedBunker: "Über Bunker verbunden!", + bunkerFailed: "Fehlgeschlagen: {{error}}", + checkBunkerUri: "Prüfe deine Bunker-URI", + nsecPrefix: "Muss mit nsec1 beginnen", + invalidNsec: "Ungültiger nsec: {{error}}", + checkKey: "Prüfe deinen Schlüssel", + noExtensionTitle: "Keine Erweiterung gefunden", + noExtensionDesc: "Installiere Alby oder eine andere NIP-07-Erweiterung.", + amberIdleDesc: "Dein Schlüssel bleibt in Amber. Ein Tippen — in Amber bestätigen, und du bist zurück, angemeldet. Nichts zu kopieren.", + continueWithAmber: "Mit Amber fortfahren", + noAmberGetIt: "Kein Amber? Hol es dir →", + waitingAmberTitle: "Warten auf Amber…", + waitingAmberDesc: "Bestätige die Anfrage in Amber. Du wirst automatisch angemeldet, sobald du zurückkommst.", + openAmberAgain: "Amber erneut öffnen", + havingTrouble: "Probleme? Gib deinen Schlüssel manuell ein", + enterPublicKey: "Gib deinen öffentlichen Schlüssel ein", + enterPublicKeyDescBefore: "Nur falls der automatische Ablauf nicht funktioniert hat. In Amber: tippe auf dein Profil →", + copyPublicKey: "Öffentlichen Schlüssel kopieren", + enterPublicKeyDescAfter: "und füge ihn hier ein.", + connect: "Verbinden", + back: "← Zurück", + signInWithPhone: "Mit deinem Handy anmelden", + signInWithPhoneDesc: "Scanne mit einer Signer-App (Amber, nsec.app). Dein Schlüssel verlässt dein Handy nie.", + showPairingCode: "Kopplungscode anzeigen", + waitingSigner: "Warten auf deinen Signer…", + copyLink: "Link kopieren", + orPasteBunker: "oder füge eine Bunker-URL ein", + bunkerTitle: "Bunker (NIP-46)", + bunkerPasteBefore: "Füge deine", + bunkerPasteAfter: "URI ein.", + amberInstructions: "Einstellungen → NIP-46 Bunker → Erstellen → Kopieren", + nsecAppInstructions: "App verbinden → Bunker-URI kopieren", + secretKeyTitle: "Geheimer Schlüssel", + secretKeyRawDesc: "Füge deinen Nostr-Geheimschlüssel direkt ein.", + secretKeyEncDesc: "Öffne ein passwortgeschütztes Schlüssel-Backup.", + rawNsec: "Roher nsec", + encryptedNip49: "Verschlüsselt (NIP-49)", + nsecWarning: "⚠️ Nur auf einem vertrauenswürdigen Gerät verwenden. Teile deinen nsec niemals.", + login: "Anmelden", + encSaferDesc: "Sicherer: Der Schlüssel bleibt verschlüsselt, bis du dein Passwort eingibst, sodass das Backup bedenkenlos im Cloud-Speicher oder Passwort-Manager aufbewahrt werden kann.", + password: "Passwort", + openEncryptedKey: "Verschlüsselten Schlüssel öffnen", + browserExtensionTitle: "Browser-Erweiterung (NIP-07)", + browserExtensionDesc: "Am besten für Desktop. Funktioniert mit Alby, nos2x, Flamingo.", + loginWithExtension: "Mit Erweiterung anmelden" + }, + signupDialog: { + download: "Herunterladen", + stepChoose: "Wählen", + stepProfile: "Profil", + stepSaveKey: "Schlüssel sichern", + somethingWrong: "Etwas ist schiefgelaufen", + createFailed: "Dein Konto konnte nicht erstellt werden. Bitte versuche es erneut.", + keySavedTitle: "Geheimer Schlüssel gesichert!", + keySavedDesc: "Dein Schlüssel wurde sicher gespeichert.", + downloadFailedTitle: "Download fehlgeschlagen", + downloadFailedDesc: "Die Schlüsseldatei konnte nicht heruntergeladen werden. Bitte kopiere sie manuell.", + encSavedTitle: "Verschlüsseltes Backup gesichert 🔐", + encSavedDesc: "Bewahre die Datei UND das Passwort auf — du brauchst beides, um dich wieder anzumelden.", + encFailed: "Dieser Schlüssel konnte nicht verschlüsselt werden.", + invalidFileTitle: "Ungültiger Dateityp", + invalidFileDesc: "Bitte wähle eine Bilddatei für deinen Avatar.", + fileTooLargeTitle: "Datei zu groß", + fileTooLargeDesc: "Das Avatar-Bild muss kleiner als 5 MB sein.", + avatarUploadedTitle: "Avatar hochgeladen!", + avatarUploadedDesc: "Dein Avatar wurde erfolgreich hochgeladen.", + uploadFailedTitle: "Hochladen fehlgeschlagen", + uploadFailedDesc: "Avatar konnte nicht hochgeladen werden. Bitte versuche es erneut.", + nameRequiredTitle: "Anzeigename erforderlich", + nameRequiredDesc: "Wähle einen Anzeigenamen, damit andere Skater wissen, wer du bist. Du kannst ihn jederzeit ändern.", + reserveFailedTitle: "Dieser Name konnte nicht reserviert werden", + reserveFailedDesc: "{{error}} Du kannst später in den Einstellungen einen beanspruchen.", + profileCreatedTitle: "Profil erstellt!", + profileCreatedDesc: "Dein Profil wurde eingerichtet.", + profileFailedTitle: "Profil-Einrichtung fehlgeschlagen", + profileFailedDesc: "Dein Konto wurde erstellt, aber die Profil-Einrichtung ist fehlgeschlagen. Du kannst sie später aktualisieren.", + welcomeToastTitle: "Willkommen!", + welcomeToastDesc: "Dein Konto ist bereit.", + titleWelcome: "Mach mit bei SkateSpots", + titleProfile: "Richte dein Profil ein", + titleDone: "Willkommen!", + createFreeAccount: "Erstelle dein kostenloses Konto", + createFreeAccountDesc: "Keine E-Mail, keine Telefonnummer, kein Passwort. Dein Konto ist ein Nostr-Schlüssel — wähle, wo er lebt.", + recommended: "Empfohlen", + signUpWithAmber: "Mit Amber registrieren", + signUpWithAmberDesc: "Dein Schlüssel wird in der Amber-App erstellt und gespeichert — SkateSpots kommt nie damit in Berührung. Am sichersten. Ein Tippen zum Bestätigen.", + continueWithAmber: "Mit Amber fortfahren", + orQuickWay: "oder der schnelle Weg", + quickAccount: "Schnelles Konto auf diesem Gerät", + quickAccountDesc: "Wir erzeugen einen Schlüssel, der auf diesem Gerät lebt. Schnellster Start — wir helfen dir gleich danach, ein Backup zu sichern.", + createQuickAccount: "Schnelles Konto erstellen", + quickReassurance: "Dauert 5 Sekunden · lebt auf diesem Gerät · wir helfen dir gleich beim Backup", + preferAnotherSigner: "Lieber einen anderen Signer?", + iosDesktopNudge: "Auf iOS oder Desktop? Eine Signer-App oder Browser-Erweiterung ist die sicherste Option —", + seeAllOptions: "Alle Optionen ansehen", + youreInPickName: "Du bist dabei! 🛹 Wähle einen Anzeigenamen, damit Skater wissen, wer du bist", + changeAnytime: "Du kannst ihn später jederzeit ändern. Bio und Avatar sind optional.", + publishingProfile: "Dein Profil wird veröffentlicht…", + displayName: "Anzeigename", + displayNamePlaceholder: "z. B. Tony, gnarlyGrind oder dein Crew-Name", + displayNameHint: "Erforderlich — so erscheinst du in ganz SkateSpots. Jederzeit änderbar.", + skateName: "Dein SkateSpots-Name", + skateNameHint: "Kostenlos und optional — ein verifizierter Handle, der ein ✓ in deinem Profil zeigt.", + bio: "Bio", + bioPlaceholder: "Erzähl anderen von dir…", + avatar: "Avatar", + uploadAvatar: "Avatar-Bild hochladen", + saving: "Speichern…", + saveAndStart: "Speichern & loslegen", + addNameToContinue: "Füge einen Anzeigenamen hinzu, um fortzufahren.", + savingPublishesNote: "Beim Speichern wird dein Profil auf Nostr veröffentlicht — dein Signer bittet dich möglicherweise einmal um Bestätigung.", + youreIn: "Du bist dabei! 🛹", + oneQuickThing: "Eine kurze Sache, bevor du loslegst…", + saveLoginKey: "Sichere deinen Login-Schlüssel", + saveLoginKeyBefore: "Dies ist der", + only: "einzige", + saveLoginKeyAfter: "Weg zurück in dein Konto — keine E-Mail, kein Passwort-Reset. Sichere ihn jetzt, und du kannst dich auf jedem Gerät anmelden, überall wo du skatest.", + revealSaveKey: "Schlüssel anzeigen & sichern", + recoveryCopied: "Wiederherstellungscode kopiert. Bewahre ihn sicher auf.", + saved: "Gesichert", + treatLikeBoardKeys: "Behandle ihn wie die Schlüssel zu deinem Board — wer diesen Code hat, kontrolliert dein Konto. Teile ihn niemals.", + hideEncBackup: "Verschlüsseltes Backup ausblenden", + saveEncBackup: "Ein verschlüsseltes Backup sichern", + encBackupBefore: "Eine passwortgeschützte Kopie — sicher im Cloud-Speicher oder Passwort-Manager. Du brauchst die Datei", + and: "und", + encBackupAfter: "das Passwort.", + choosePassword: "Wähle ein Passwort", + saveEncBackupCta: "Verschlüsseltes Backup sichern", + savedCodeAria: "Ich habe meinen Wiederherstellungscode gesichert", + savedCodeLabel: "Ich habe meinen Wiederherstellungscode sicher aufbewahrt — in einem Passwort-Manager oder offline aufgeschrieben.", + letsSkate: "Lass uns skaten", + saveLater: "Ich sichere ihn später in den Einstellungen", + advancedSigner: "Fortgeschritten: stattdessen eine Signer-App verwenden" + }, + mnemonic: { + generatedTitle: "Wiederherstellungsphrase erzeugt! 🎉", + generatedDesc: "Schreibe diese 12 Wörter in der richtigen Reihenfolge auf. Sie sind der Schlüssel zu deinem Konto!", + savedTitle: "Wiederherstellungsphrase gesichert!", + savedDesc: "Bewahre diese Datei an einem sicheren Ort auf.", + downloadFailedTitle: "Download fehlgeschlagen", + downloadFailedDesc: "Die Datei konnte nicht heruntergeladen werden. Bitte kopiere sie manuell.", + copiedTitle: "In die Zwischenablage kopiert!", + copiedDesc: "Deine Wiederherstellungsphrase wurde kopiert.", + qrWindowTitle: "QR-Code der Wiederherstellungsphrase", + qrHeading: "Dein QR-Code der Wiederherstellungsphrase", + qrAlt: "QR-Code der Wiederherstellungsphrase", + qrWarning: "Halte diesen QR-Code privat und sicher!", + qrPrint: "QR-Code drucken", + qrFailedTitle: "QR-Code fehlgeschlagen", + qrFailedDesc: "QR-Code konnte nicht erzeugt werden.", + accountCreatedTitle: "Konto erstellt! 🎉", + accountCreatedDesc: "Alles bereit! Deine Wiederherstellungsphrase ist sicher.", + loginFailedTitle: "Anmeldung fehlgeschlagen", + loginFailedDesc: "Konto konnte nicht erstellt werden. Bitte versuche es erneut.", + verifyFailedTitle: "Überprüfung fehlgeschlagen", + verifyFailedDesc: "Die Wörter stimmen nicht überein. Bitte prüfe und versuche es erneut.", + titlePrefix: "Konto erstellen mit", + titleSuffix: "Wiederherstellungsphrase", + twelveWordTitle: "12-Wörter-Wiederherstellungsphrase", + twelveWordDesc: "Deine Wiederherstellungsphrase ist wie ein Master-Passwort. Schreibe sie auf Papier und bewahre sie sicher auf. Du brauchst sie, um von anderen Geräten aus auf dein Konto zuzugreifen oder falls du deine Browserdaten löschst.", + generate: "Wiederherstellungsphrase erzeugen", + useNsecInstead: "Stattdessen fortgeschrittenen nsec-Schlüssel verwenden", + yourPhrase: "Deine Wiederherstellungsphrase", + copy: "Kopieren", + download: "Herunterladen", + qrCode: "QR-Code", + criticalWarning: "Kritische Sicherheitswarnung", + warnWriteStrong: "Schreibe sie auf", + warnWrite: "Papier und bewahre sie sicher auf", + warnNeverShareStrong: "Teile sie niemals", + warnNeverShare: "deine Wiederherstellungsphrase mit niemandem", + warnBackupsStrong: "Führe mehrere Backups", + warnBackups: "an verschiedenen sicheren Orten", + warnAnyoneStrong: "Wer diese Phrase hat", + warnAnyone: "kontrolliert dein Konto für immer", + warnLoseStrong: "Wenn du sie verlierst", + warnLose: "verlierst du dein Konto dauerhaft", + savedSecurely: "Ich habe sie sicher gesichert", + verifyTitle: "Überprüfe deine Wiederherstellungsphrase", + verifyDesc: "Um sicherzustellen, dass du sie korrekt gesichert hast, gib bitte diese Wörter ein:", + wordLabel: "Wort #{{n}}", + wordPlaceholder: "Wort #{{n}} eingeben", + goBack: "Zurück", + verifyCreate: "Überprüfen & Konto erstellen", + completeTitle: "Konto erstellt!", + completeDesc: "Dein Nostr-Konto ist bereit!", + signerTitle: "Empfohlen: Richte eine Signer-App ein", + signerSubtitle: "Halte deine Schlüssel besonders sicher", + signerDesc: "Für bessere Sicherheit verwende eine dedizierte Signer-App, statt deine Wiederherstellungsphrase überall einzugeben. Signer-Apps schützen deine Schlüssel und lassen dich trotzdem jede Nostr-App nutzen.", + signerCta: "Mehr über Signer-Apps", + skip: "Vorerst überspringen" + }, + signupMethod: { + titlePrefix: "Wähle deine", + titleSuffix: "Registrierungsmethode", + subtitle: "Beide Methoden sind sicher. Wähle, was am besten zu dir passt!", + recommended: "Empfohlen", + mnemonicTitle: "Wiederherstellungsphrase", + mnemonicDesc: "12 leicht zu merkende Wörter. Branchenstandard, genutzt von Bitcoin, Ethereum und den meisten Krypto-Wallets.", + mnemonicF1: "Leicht auf Papier aufzuschreiben", + mnemonicF2: "Funktioniert mit anderen Nostr-Apps (NIP-06)", + mnemonicF3: "Kann mehrere Konten erzeugen", + mnemonicF4: "Krypto-Nutzern vertraut", + useMnemonic: "Wiederherstellungsphrase verwenden", + advanced: "Fortgeschritten", + nsecTitle: "Geheimer Schlüssel (nsec)", + nsecDesc: "Roher kryptografischer Schlüssel. Technischer, gibt dir aber direkten Zugriff auf deine Nostr-Identität.", + nsecF1: "Direkte kryptografische Kontrolle", + nsecF2: "Kompatibel mit allen Nostr-Apps", + nsecF3: "Eine einzige Zeichenkette zum Sichern", + nsecF4: "Keine Ableitungsebene", + useNsec: "Geheimen Schlüssel verwenden", + footer: "🔒 Beide Methoden sind gleich sicher. Wähle nach deiner Vorliebe!" + }, + skateNip05: { + placeholder: "deinname", + claimedSuffix: "gehört dir — speichere dein Profil, um ihn zu veröffentlichen.", + checking: "Verfügbarkeit wird geprüft…", + available: "{{name}}@{{domain}} ist verfügbar", + claim: "Beanspruchen", + hint: "Buchstaben, Zahlen, Bindestriche. Kostenlos und als ✓-Abzeichen in deinem Profil sichtbar." + }, + nip05Required: { + getFree: "Kostenlose / günstige NIP-05 holen", + paid: "Kostenpflichtig", + requiredTitle: "NIP-05-Verifizierung erforderlich", + bannerReason: "Um Spam zu verhindern und Vertrauen aufzubauen, brauchen {{role}} eine verifizierte Nostr-Adresse (NIP-05).", + gateReason: "Um Spam zu verhindern und Vertrauen aufzubauen, müssen {{role}} eine NIP-05-Verifizierung haben.", + addInSettings: "NIP-05 in den Einstellungen hinzufügen", + explainer: "NIP-05 beweist deine Identität, indem es dein Nostr-Profil mit einer Domain verknüpft — wie", + updateProfile: "Profil aktualisieren" + }, + editProfile: { + uploadSuccessTitle: "Erfolg", + uploadSuccessDesc: "{{field}} erfolgreich hochgeladen", + uploadErrorDesc: "{{field}} konnte nicht hochgeladen werden. Bitte versuche es erneut.", + mustBeLoggedIn: "Du musst angemeldet sein, um dein Profil zu aktualisieren", + invalidClinkTitle: "Ungültiger CLINK-Code", + invalidClinkDesc: "Das sieht nicht nach einem gültigen noffer1…-Code aus. Lösche ihn oder füge einen gültigen ein.", + invalidLightningTitle: "Ungültige Lightning-Adresse", + invalidLightningDesc: "Verwende eine E-Mail-ähnliche Adresse wie you@walletofsatoshi.com.", + invalidSpTitle: "Ungültige Silent-Payment-Adresse", + invalidSpDesc: "Eine Silent-Payment-Adresse beginnt mit „sp1“ und ist recht lang. Lösche sie oder füge eine gültige ein.", + invalidCordnTitle: "Ungültiger Cordn-Link", + invalidCordnDesc: "Füge einen vollständigen https://…-Cordn-Kontaktlink ein.", + updateSuccessTitle: "Erfolg", + updateSuccessDesc: "Dein Profil wurde aktualisiert", + updateErrorDesc: "Profil konnte nicht veröffentlicht werden. Prüfe deine Relay-Verbindungen unter Einstellungen > Relays", + identityTitle: "Identität", + identityDesc: "Wie du in ganz SkateSpots erscheinst.", + displayName: "Anzeigename", + displayNamePlaceholder: "Dein Name", + bio: "Bio", + bioPlaceholder: "Ein paar Worte über dich und dein Skaten…", + profilePicture: "Profilbild", + pictureDesc: "Lade ein quadratisches Bild hoch oder füge es ein.", + bannerImage: "Bannerbild", + bannerDesc: "Ein breites Bild für den oberen Bereich deines Profils.", + website: "Website", + bitcoinTitle: "Bitcoin & Zahlungen", + bitcoinDesc: "Lass andere dich direkt zappen, bezahlen und dir Trinkgeld geben — ohne Mittelsmann.", + lightningAddress: "Lightning-Adresse", + lud16Invalid: "Verwende eine E-Mail-ähnliche Adresse, z. B. you@yourdomain.com.", + lud16Ok: "Betreibt den „Zap“-Button in deinem Profil.", + lud16Hint: "Sofortige Bitcoin-Trinkgelder. Betreibt den „Zap“-Button in deinem Profil.", + silentPaymentAddress: "Silent-Payment-Adresse", + spInvalid: "Sollte mit „sp1“ beginnen und recht lang sein.", + spOk: "Gültig — eine wiederverwendbare, private On-Chain-Adresse.", + spHint: "Wiederverwendbare statische On-Chain-Adresse (BIP-352). Einmal teilen; jede Zahlung ist nicht verknüpfbar.", + clinkTipCode: "CLINK-Trinkgeldcode", + nofferInvalid: "Das sieht nicht nach einem gültigen noffer1…-Code aus.", + nofferOk: "Gültig — ein „Tip in Bitcoin“-Button erscheint in deinem Profil.", + nofferHint: "Selbstverwahrter CLINK-Code, damit dir jeder über Nostr Trinkgeld senden kann — kein Mittelsmann.", + skateProfileTitle: "Skate-Profil", + skateProfileDesc: "Präsentiere deine Sponsoren und wie die Crew dich erreicht.", + badges: "Abzeichen", + badgesHint: "(Label + optionaler Link)", + badgeExample: "z. B. Independent Trucks", + badgeLabelPlaceholder: "Abzeichen-Label…", + badgeUrlPlaceholder: "https://… (optional)", + removeBadge: "Abzeichen entfernen", + addBadge: "Abzeichen hinzufügen", + badgesDescBefore: "Sponsoren, Shops oder Personen, die dein Skaten unterstützen — und alles andere, was du zeigen willst. Jedes wird zu einem anklickbaren Chip in deinem Profil. Dein", + badgesDescAfter: "Mitglieds-Abzeichen wird automatisch hinzugefügt.", + coordinator: "Koordinator", + cordnInvalid: "Das sieht nicht nach einem Koordinator aus. Füge ein nprofile, einen cordn.net-Link oder eine https://-URL ein.", + cordnOk: "Wird in deinem Profil angezeigt — andere können es mit einem Tippen hinzufügen.", + cordnHint: "Der Cordn-Koordinator, den andere verwenden, um dir zu schreiben. Privat, verschlüsselt, deins.", + useMyCoordinator: "Meinen Koordinator verwenden", + accountTitle: "Konto", + accountDesc: "Zusätzliche Kontoeinstellungen.", + botAccount: "Bot-Konto", + botAccountDesc: "Markiere dieses Konto als automatisiert oder als Bot.", + saving: "Speichern…", + saveProfile: "Profil speichern", + nip05VerifiedHandle: "NIP-05-verifizierter Handle", + nip05How: "Wie?", + extraHandles: "Zusätzliche Handles", + extraHandlesHint: "optional — füge bis zu 5 hinzu", + nip05HintEmpty: "Ein verifizierter Handle wie you@yourdomain.com — Nostrs Version eines blauen Häkchens. Zeigt ein ✓-Abzeichen in deinem Profil und schaltet den „Verifiziert“-Filter im Skater-Verzeichnis frei.", + nip05Invalid: "Verwende einen E-Mail-ähnlichen Handle, z. B. you@yourdomain.com — kein „https://“ und keine Leerzeichen.", + nip05Checking: "Deine Domain wird geprüft…", + nip05Verified: "Verifiziert — deine Domain bestätigt, dass dieser Handle dir gehört. ✓", + nip05Mismatch: "Deine Domain ordnet diesen Handle einem ANDEREN Schlüssel zu. Korrigiere deine .well-known/nostr.json, damit sie auf dieses Konto zeigt.", + nip05Unreachable: "Deine /.well-known/nostr.json der Domain war noch nicht erreichbar. Gespeicherte Handles funktionieren trotzdem, sobald deine Domain korrekt eingerichtet ist.", + nip05Enter: "Gib deinen NIP-05-Handle ein.", + freeHandleBefore: "Keine eigene Domain? Beanspruche einen kostenlosen", + freeHandleAfter: "Handle von SkateSpots.", + uploadLabel: "{{label}} hochladen", + previewLabel: "{{label}}-Vorschau" + }, + security: { + recoveryCopied: "Wiederherstellungscode kopiert. Bewahre ihn sicher auf.", + savedTitle: "Gesichert!", + recoveryDownloaded: "Wiederherstellungscode heruntergeladen. Bewahre ihn sicher auf.", + downloadFailedTitle: "Download fehlgeschlagen", + downloadFailedDesc: "Bitte kopiere ihn stattdessen manuell.", + loginRequired: "Anmeldung erforderlich", + loginRequiredDesc: "Melde dich an, um auf die Sicherheitseinstellungen zuzugreifen.", + backupConfirmedTitle: "Backup bestätigt! ✅", + backupConfirmedDesc: "Super! Deine Schlüssel sind sicher.", + yourRecoveryCode: "Dein Wiederherstellungscode", + recoveryCodeDesc: "Hast du ihn bei der Registrierung nicht gesichert? Du kannst ihn hier jederzeit abrufen.", + recoveryCodeBefore: "Dieser Code ist der", + only: "einzige", + recoveryCodeAfter: "Weg, um dich auf einem neuen Gerät oder Browser wieder anzumelden. Bewahre ihn sicher auf (ein Passwort-Manager oder auf Papier). Wer ihn hat, kontrolliert dein Konto — teile ihn niemals.", + revealRecovery: "Meinen Wiederherstellungscode anzeigen", + qrHint: "Scanne mit einer anderen Nostr-App, um dich anzumelden. Halte diesen Bildschirm privat.", + neverShareHide: "⚠️ Teile ihn niemals. Blende ihn aus, wenn du fertig bist.", + hide: "Ausblenden", + amberNoteBefore: "Du bist angemeldet mit", + amberNoteAfter: ". Dein Wiederherstellungscode lebt in Amber — öffne die Amber-App, um ihn zu sichern. SkateSpots sieht deinen Schlüssel nie.", + bunkerNoteBefore: "Du bist angemeldet mit einem", + remoteSigner: "Remote-Signer (Bunker)", + bunkerNoteAfter: ". Dein Wiederherstellungscode wird von deinem Signer-Dienst gehalten, nicht von SkateSpots. Sichere ihn dort.", + extensionNoteBefore: "Du bist angemeldet mit einer", + browserExtension: "Browser-Erweiterung", + extensionNoteAfter: ". Dein Wiederherstellungscode lebt in der Erweiterung — nutze deren eigene Backup-/Export-Option. SkateSpots sieht deinen Schlüssel nie.", + otherNote: "Dein Wiederherstellungscode wird von deiner Signer-App verwaltet, nicht von SkateSpots. Sichere ihn dort.", + backupWarningTitle: "⚠️ Hast du deine Wiederherstellungsphrase oder deinen geheimen Schlüssel gesichert?", + backupWarningBody: "Deine Schlüssel sind der EINZIGE Weg auf dein Konto zuzugreifen. Wenn du sie verlierst, verlierst du alles – es gibt keinen Passwort-Reset!", + iveBackedUp: "Ich habe meine Schlüssel gesichert", + backupConfirmed: "✅ Backup bestätigt", + backupNotConfirmed: "⚠️ Backup nicht bestätigt", + backupConfirmedStatusDesc: "Du hast bestätigt, dass deine Schlüssel sicher gesichert sind.", + backupNotConfirmedDesc: "Stelle sicher, dass du deine Wiederherstellungsphrase oder deinen geheimen Schlüssel sicherst!", + notSavedYetBefore: "Deinen Wiederherstellungscode noch nicht gesichert? Kein Problem — hol ihn dir aus dem", + notSavedYetAfter: "Abschnitt oben, bewahre ihn sicher auf und bestätige dann unten.", + yesBackedUp: "Ja, ich habe meine Schlüssel gesichert", + bestPracticesTitle: "Best Practices für Schlüsselsicherheit", + bestPracticesDesc: "So hältst du dein Nostr-Konto sicher", + bp1Title: "Schreibe ihn auf Papier", + bp1Desc: "Physisches Backup ist das sicherste. Bewahre es an einem sicheren Ort wie einem Safe auf.", + bp2Title: "Mehrere Backups", + bp2Desc: "Bewahre Kopien an verschiedenen sicheren Orten auf (Safe zu Hause, Bankschließfach usw.)", + bp3Title: "Teile deine Schlüssel niemals", + bp3Desc: "Echte Nostr-Apps fragen nach der ersten Anmeldung NIE nach deinem nsec oder deiner Wiederherstellungsphrase", + bp4Title: "Nicht unverschlüsselt in der Cloud speichern", + bp4Desc: "Vermeide Google Docs, E-Mail-Entwürfe oder unverschlüsselten Cloud-Speicher", + bp5Title: "Erwäge eine Browser-Erweiterung", + bp5Desc: "Alby, nos2x oder Flamingo halten deine Schlüssel sicher und geben sie nie an Websites weiter", + importantReminders: "⚠️ Wichtige Erinnerungen", + rem1: "Wenn du deine Schlüssel verlierst, verlierst du dein Konto dauerhaft", + rem2: "Kein Unternehmen und keine Person kann dein Passwort zurücksetzen – nicht einmal wir", + rem3: "Wer deine Schlüssel hat, hat die volle Kontrolle über dein Konto", + rem4: "Deine Schlüssel kontrollieren alle deine Nostr-Daten über ALLE Apps hinweg", + recommendedSigners: "🔌 Empfohlene Nostr-Signer", + recommendedSignersDesc: "Verwende einen Nostr-Signer für bessere Sicherheit und Bequemlichkeit", + recommended: "Empfohlen", + amberDesc: "Sicherer Nostr-Signer für Android. Hält deine Schlüssel auf deinem Handy sicher und signiert Events, ohne sie preiszugeben.", + albyDesc: "Voll ausgestattete Erweiterung mit Lightning-Wallet, WebLN- und NWC-Unterstützung.", + flamingoDesc: "Einfache, klare Oberfläche. Konzentriert sich auf Nostr-Signierung ohne Wallet-Funktionen.", + nos2xDesc: "Minimale, leichtgewichtige Erweiterung für fortgeschrittene Nutzer.", + nostrConnectTitle: "☁️ Nostr Connect (Remote-Signer)", + nostrConnectDesc: "Verwende einen Remote-Signer, um von jedem Gerät auf dein Konto zuzugreifen", + nostrConnectBody: "Nostr Connect (auch „Bunker“ genannt) speichert deine Schlüssel auf einem sicheren Server und lässt dich von jedem Gerät anmelden. Deine Schlüssel verlassen den Server nie, aber du kannst dein Konto überall nutzen!", + nsecAppDesc: "Kostenloser, sicherer Remote-Signer. Erstelle eine bunker://-URI und füge sie bei der Anmeldung ein.", + nostrumDesc: "Eine weitere Remote-Signer-Option mit mobiler Unterstützung.", + howToUse: "💡 So verwendest du es:", + howToUseDesc: "Erstelle ein Konto bei einem dieser Dienste, hol dir deinen bunker://-Verbindungsstring und füge ihn dann im Tab „Nostr Connect“ bei der Anmeldung ein." + }, + relayList: { + connected: "Verbunden", + connecting: "Verbinden…", + offline: "Offline", + removeUrl: "{{url}} entfernen", + add: "Hinzufügen", + publishedTitle: "Relay-Liste veröffentlicht", + publishedDesc: "Mit Nostr synchronisiert (Kind 10002).", + publishFailedTitle: "Relay-Liste konnte nicht veröffentlicht werden", + invalidUrlTitle: "Ungültige Relay-URL", + invalidUrlDesc: "Versuche etwas wie wss://relay.example.com", + alreadyInList: "Relay ist bereits in deiner Liste", + keepReadWriteTitle: "Behalte Lesen oder Schreiben bei", + keepReadWriteDesc: "Ein Relay braucht mindestens Lesen oder Schreiben.", + alreadyInThisList: "Relay ist bereits in dieser Liste", + dmPublishedTitle: "DM-Relays veröffentlicht", + dmPublishedDesc: "NIP-17-Posteingang aktualisiert.", + dmPublishFailedTitle: "DM-Relays konnten nicht veröffentlicht werden", + nip65Title: "Relays (NIP-65)", + nip65DescUser: "Tippe auf Lesen / Schreiben zum Umschalten. Wird als deine Kind-10002-Liste auf Nostr veröffentlicht.", + nip65DescLoggedOut: "Tippe auf Lesen / Schreiben zum Umschalten. Melde dich an, um deine Liste auf Nostr zu veröffentlichen.", + noRelays: "Noch keine Relays — füge unten eines hinzu.", + local: "Lokal", + read: "Lesen", + readHint: "Inhalte von diesem Relay abrufen", + write: "Schreiben", + writeHint: "Deine Events auf diesem Relay veröffentlichen", + dmTitle: "DM-Posteingang-Relays", + dmDesc: "Wo du NIP-17-Direktnachrichten empfängst (Kind 10050). Fällt auf deine Schreib-Relays zurück, wenn leer.", + localTitle: "Lokale Relays", + localDesc: "Nur App-intern (z. B. ein LAN-Knoten). Wird für Lesen und Schreiben verwendet; nie veröffentlicht.", + blockedTitle: "Blockierte Relays", + blockedDesc: "Verbindet sich nie mit diesen — von jedem Lesen und Schreiben ausgeschlossen." + }, + relatr: { + searchingTitle: "Suche nach Relatr-Dienst…", + searchingDesc: "Nostr wird nach Relatr-Profilen abgefragt", + foundTitle: "Relatr-Dienst gefunden!", + foundDesc: "Dienst: {{name}}", + unknown: "Unbekannt", + notFoundTitle: "Kein Relatr-Dienst gefunden", + notFoundDesc: "Versuche, den Pubkey manuell einzugeben, oder prüfe https://www.relatr.xyz/", + searchFailedTitle: "Suche fehlgeschlagen", + searchFailedDesc: "Nostr konnte nicht nach Relatr-Profilen abgefragt werden", + invalidPubkeyTitle: "Ungültiger Pubkey", + invalidPubkeyDesc: "Bitte gib einen gültigen 64-stelligen Hex-Pubkey ein", + enabledTitle: "Relatr aktiviert!", + enabledDesc: "Globale Vertrauensbewertungen sind jetzt aktiv.", + disabledTitle: "Relatr deaktiviert", + disabledDesc: "Vertrauensbewertungen werden nicht mehr abgerufen.", + title: "Relatr-Vertrauensbewertungen", + desc: "Globale Vertrauensbewertungen helfen, verlässliche Nutzer zu erkennen und Spam zu reduzieren", + status: "Status", + active: "Aktiv", + disabled: "Deaktiviert", + activeStrong: "Relatr ist aktiv.", + activeDesc: "Vertrauensbewertungen aus ContextVMs globaler Netzwerkanalyse helfen, verlässliche Skater zu erkennen und Spam zu reduzieren.", + disabledStrong: "Relatr ist deaktiviert.", + disabledHint: "Aktiviere es, um Vertrauensbewertungen aus dem globalen Nostr-Netzwerk zu erhalten.", + disable: "Relatr deaktivieren", + enable: "Relatr aktivieren", + advancedSettings: "Erweiterte Einstellungen", + servicePubkey: "Relatr-Dienst-Pubkey", + pubkeyPlaceholder: "64-stelligen Hex-Pubkey eingeben…", + searching: "Suche…", + autoDiscover: "Automatisch erkennen", + pubkeyDefault: "Standard: ContextVMs offizieller Relatr-Dienst (npub1dvmc…)", + relayLabel: "Relay (wo Relatr Bewertungen veröffentlicht)", + relayDefault: "Standard: wss://relay.contextvm.org (ContextVMs offizielles Relay)", + applyChanges: "Änderungen übernehmen", + learnMore: "Mehr erfahren:", + website: "Relatr-Website", + github: "Relatr-GitHub", + nip85Spec: "NIP-85-Spezifikation" + }, + followList: { + unfollow: "Nicht mehr folgen", + title: "Dein Nostr-Netzwerk", + desc: "Verwalte, wem du folgst. Anderen zu folgen hilft, dein Web of Trust aufzubauen, und bestimmt, welche Spots Vertrauensabzeichen zeigen.", + following: "Folge ich ({{count}})", + followers: "Follower ({{count}})", + follow: "Folgen", + followHint: "💡 Füge einen Nostr-Pubkey (npub1...), eine NIP-05-Adresse (user@domain.com) oder einen Hex-Pubkey ein", + notFollowing: "Du folgst noch niemandem", + notFollowingHint: "Folge Skatern, um ihre Spots mit ✅ VERIFIED-Abzeichen zu sehen", + trustActiveStrong: "✅ Vertrauensabzeichen aktiv:", + trustActive: "Spots, die von Personen erstellt wurden, denen du folgst, zeigen jetzt VERIFIED-Abzeichen. Spots von deren Freunden zeigen TRUSTED-Abzeichen.", + noFollowers: "Noch keine Follower", + noFollowersHint: "Teile dein Nostr-Profil, um Follower zu gewinnen!", + howTitle: "💡 Wie das Folgen Vertrauensabzeichen beeinflusst", + verifiedStrong: "✅ VERIFIED (Grün):", + verifiedDesc: "Spots, die von Personen erstellt wurden, denen du direkt folgst", + trustedStrong: "🟡 TRUSTED (Gelb):", + trustedDesc: "Spots, die von Personen erstellt wurden, denen deine Freunde folgen (2 Sprünge)", + unverifiedStrong: "⚪ Unverifiziert:", + unverifiedDesc: "Spots von Nutzern ohne Verbindung zu deinem Netzwerk", + tip: "💡 Tipp: Folge aktiven Skateboardern, um mehr verifizierte Spots zu sehen und dein Vertrauensnetzwerk aufzubauen!" + }, + notify: { + enableTitle: "Benachrichtigungen aktivieren", + enableDesc: "Lass dieses Gerät summen, wenn etwas dich braucht.", + checkingPermission: "Berechtigung wird geprüft…", + unsupported: "Dieses Gerät unterstützt hier keine Benachrichtigungen. Baue die Android-App neu, um sie auf deinem Handy zu aktivieren.", + denied: "Benachrichtigungen sind für diese Seite blockiert. Erlaube sie in deinen Browser-/OS-Einstellungen und versuche es dann erneut.", + backgroundTitle: "Hintergrund-Benachrichtigungen", + backgroundDesc: "Werde über Nachrichten und Trades benachrichtigt, auch wenn SkateSpots geschlossen ist.", + pushUnsupported: "Dieser Browser unterstützt kein Hintergrund-Push. Füge SkateSpots auf dem Handy zu deinem Startbildschirm hinzu.", + pushPrivacy: "Um dich bei geschlossener App zu erreichen, erhält ein SkateSpots-Benachrichtigungsserver ein Signal von deinem Relay, wenn etwas für deinen Schlüssel eintrifft, und leitet es an den Push-Dienst deines Handys weiter. Er sieht nur, dass dein Schlüssel etwas hat — nie wer es gesendet hat oder was darin steht, und er kann deine Nachrichten nicht entschlüsseln. Opt-in pro Gerät.", + bgDeliveryTitle: "Hintergrundzustellung (Android)", + bgDeliveryDesc: "Suche nach neuen Nachrichten, Angeboten und Trades, während die App geschlossen ist — ohne Google-Dienste.", + off: "Aus", + standard: "Standard (~15 Min.)", + fast: "Schnell (~5 Min.)", + bgDeliveryNote: "Standard ist Best-Effort — Android kann es unter Doze aufschieben. Schnell zeigt eine dauerhafte Benachrichtigung und verbraucht mehr Akku. Auf unserem Server wird nichts entschlüsselt.", + notifyMeAbout: "Benachrichtige mich über", + couldNotEnable: "Konnte nicht aktiviert werden", + sendTest: "Testbenachrichtigung senden", + testTitle: "SkateSpots-Benachrichtigungen sind an 🛹", + testBody: "So sieht eine DM, ein Zap oder eine Crew-Einladung aus.", + footerBefore: "Warnungen werden auf deinem Gerät aus Daten erstellt, die die App bereits hat, und DM-Warnungen entschlüsseln deine Nachrichten nie — Amber wird also nie gebeten, eine zu öffnen. Mit", + footerAfter: "aus kann eine vollständig geschlossene App nicht erreicht werden, daher kommen Warnungen erst beim nächsten Öffnen von SkateSpots an.", + cat_dms_label: "Direktnachrichten", + cat_dms_hint: "Jemand sendet dir eine private Nachricht", + cat_crew_label: "Crews", + cat_crew_hint: "Einladungen, Beitrittsanfragen und Mitgliedschaftsbestätigungen", + cat_social_label: "Zaps, Antworten & Erwähnungen", + cat_social_hint: "Reaktionen, Reposts, Zaps, Antworten und Event-Updates", + cat_newsletter_label: "Newsletter", + cat_newsletter_hint: "Neue SkateSpots-Drops (nur für Abonnenten)", + cat_trades_label: "Angebote & Trades", + cat_trades_hint: "Angebote, Gegenangebote und Trade-Bestätigungen", + cat_reminders_label: "Event-Erinnerungen", + cat_reminders_hint: "Ein Hinweis eine Stunde vor Events, zu denen du gehst (Android-App)" + }, + regionBackfill: { + taggedTitle: "{{count}} Ort{{s}} markiert", + taggedSkipped: "{{count}} übersprungen (keine Koordinaten oder kein Geocoder-Treffer).", + taggedOk: "Region-Tags in das Community-Relay geschrieben.", + nothingTitle: "Nichts zu markieren", + nothingDesc: "Keine Pins konnten geokodiert werden. Versuche es später erneut.", + failedTitle: "Backfill fehlgeschlagen", + title: "Region-Tags nachtragen", + admin: "Admin", + descBefore: "Pins, die vor der Geokodierung erstellt wurden, haben Koordinaten, aber kein Stadt-/Land-Tag, sodass die Karte sie zeichnet, während Community-Statistiken nur „Nicht kategorisiert“ sagen können. Dies leitet die Tags aus jedem Pin neu ab und veröffentlicht", + descStrong: "deine eigenen", + descAfter: "unmarkierten Spots & Shops.", + scanning: "Deine Spots werden gescannt…", + allTagged: "Jeder Spot & Shop, den du besitzt, hat bereits ein Region-Tag. 🎉 Verbleibende „Nicht kategorisiert“-Pins gehören anderen Mappern — nur ihre eigenen Schlüssel können sie markieren.", + countLine: "{{count}} deiner Spot{{s}}/Shops haben kein Region-Tag. Dein Signer bittet möglicherweise um Bestätigung für jeden einzelnen.", + tagging: "Markiere {{done}}/{{total}}…", + run: "Region-Tags nachtragen", + summary: "{{updated}} aktualisiert · {{skipped}} übersprungen · {{failed}} fehlgeschlagen" + }, + adminReview: { + title: "Überprüfungswarteschlange", + flagged: "{{count}} Spot{{s}} lösen die Junk-Signale aus — ausblenden oder verwerfen.", + clean: "Spots, die wie Testeinträge oder themenfremde Pins aussehen." + }, + grantPro: { + invalidNpub: "Gib eine gültige npub (oder Hex-Pubkey) ein", + invalidDays: "Tage müssen eine positive Zahl sein", + grantedTitle: "Pro gewährt ⚡", + grantedDesc: "{{npub}} bis {{date}}", + failedTitle: "Gewährung fehlgeschlagen", + title: "Sasquatch Pro gewähren", + owner: "Eigentümer", + desc: "Manueller Fallback für eine verifizierte Zahlung, die der Zap-Beleg verpasst hat. Veröffentlicht eine vom Eigentümer signierte Gewährung; der Nutzer kann sie nicht fälschen.", + targetPlaceholder: "npub1… (oder Hex)", + grant: "Gewähren" + }, + myData: { + reactionTitle: "{{emoji}}-Reaktion", + deleting: "Wird gelöscht…", + requestDeletion: "Löschung beantragen", + selectContentTitle: "Zu löschende Inhalte auswählen", + selectContentDesc: "Wähle die spezifischen Elemente aus, für die du die Löschung beantragen möchtest.", + all: "Alle", + spots: "Spots", + events: "Events", + shops: "Shops", + listings: "Angebote", + collections: "Sammlungen", + lab: "Lab", + posts: "Beiträge", + reactions: "Reaktionen", + selectAll: "Alle auswählen", + selectAllVisible: "Alle sichtbaren auswählen", + selectedCount: "{{count}} ausgewählt", + noItemsCategory: "Keine Elemente in dieser Kategorie", + decentralizedStrong: "Wichtig:", + decentralizedNote: "Nostr ist dezentral. Relays sollten Löschanfragen befolgen, aber einige tun es möglicherweise nicht. Dies ist keine garantierte dauerhafte Löschung.", + deleteCount: "{{count}} Element{{s}} löschen", + noDataTitle: "Keine Daten zum Exportieren", + noDataDesc: "Du hast noch keine Events veröffentlicht.", + exportedTitle: "Daten exportiert!", + exportedDesc: "{{count}} Events als JSON heruntergeladen.", + deletionRequestedTitle: "Löschung beantragt", + deletionRequestedDesc: "Die Löschanfrage wurde an Relays veröffentlicht.", + deletionRequestedMany: "Löschung von {{count}} Elementen beantragt. Hinweis: Einige Relays befolgen diese Anfrage möglicherweise nicht.", + deletionFailedTitle: "Löschung fehlgeschlagen", + deletionFailedDesc: "Löschanfrage konnte nicht veröffentlicht werden. Bitte versuche es erneut.", + loginRequired: "Anmeldung erforderlich", + loginRequiredDesc: "Melde dich an, um deine Daten einzusehen und zu verwalten.", + title: "Meine Daten", + desc: "Deine Inhalte im Nostr-Netzwerk. Diese Daten gehören dir — exportiere sie jederzeit oder beantrage ihre Löschung.", + coachFilmer: "Coach/Filmer", + zaps: "Zaps", + received: "Empfangen", + exportAll: "Alle Daten exportieren", + recentActivity: "Letzte Aktivität", + viewAll: "Alle ansehen ({{count}})", + noDataPublished: "Noch keine Daten veröffentlicht", + startBy: "Beginne mit", + addingASpot: "dem Hinzufügen eines Spots", + aboutYourData: "Über deine Daten", + ownDataStrong: "Deine Daten gehören dir.", + ownData: "Alle Inhalte werden mit deinen kryptografischen Schlüsseln signiert und auf Nostr-Relays gespeichert. Kein Unternehmen kontrolliert sie.", + exportAnytimeStrong: "Jederzeit exportieren", + exportAnytime: "– Lade alle deine Events als JSON herunter", + portableStrong: "Portabel", + portable: "– Verwende deine Schlüssel in jeder Nostr-App", + selectiveStrong: "Selektives Löschen", + selective: "– Wähle genau aus, was gelöscht werden soll", + caveatStrong: "Dezentraler Vorbehalt", + caveat: "– Einige Relays behalten Daten trotz Löschanfragen" + }, + settingsPage: { + seoTitle: "Einstellungen – SkateSpots", + seoDescription: "Verwalte deine SkateSpots-Kontoeinstellungen.", + heading: "EINSTELLUNGEN", + subtitle: "Konto- und App-Einstellungen", + editProfile: "Profil bearbeiten", + profileRefreshed: "Profil aktualisiert!", + found: "Gefunden: {{name}}", + unnamed: "unbenannt", + profileNotFound: "Profil nicht gefunden", + notFoundOnRelay: "Auf keinem Relay gefunden.", + refreshFailed: "Aktualisierung fehlgeschlagen", + refreshFailedDesc: "Verbindung zu Relays fehlgeschlagen.", + loginToEdit: "Melde dich an, um dein Profil zu bearbeiten", + noProfileRelays: "Wir konnten kein Profil auf den Relays finden. Wenn du zuvor eines eingerichtet hast, versuche zu aktualisieren.", + checkDisplayName: "einen Anzeigenamen", + checkPhoto: "ein Profilfoto", + checkBio: "eine kurze Bio", + checkLightning: "eine Lightning-Adresse, damit andere dich zappen können", + checkHandle: "einen kostenlosen @skate-spots.org-Handle", + finishProfile: "Vervollständige dein Profil", + addItem: "{{item}} hinzufügen", + nip05Title: "NIP-05-Verifizierung", + nip05Desc: "Hol dir eine verifizierte Nostr-Adresse (wie name@domain.com), um Vertrauen aufzubauen. Erforderlich für das Erstellen von Events, Coaching-Profilen und Shops.", + freeFromSkateSpots: "Kostenlos von SkateSpots", + claimHandleBefore: "Beanspruche einen Handle wie", + claimHandleAfter: "— keine Registrierung, keine Kosten, keine Domain zu betreiben. Beanspruche ihn im Profil-Tab und speichere dann.", + claimInProfile: "Im Profil beanspruchen", + nip05Footer: "Füge nach Erhalt deiner NIP-05 diese im Profil-Feld hinzu und speichere.", + localRelayOn: "Lokales Relay an", + localRelayOff: "Lokales Relay aus", + lookingForCitrine: "Suche nach Citrine auf diesem Gerät…", + noLongerUsing: "Das geräteinterne Relay wird nicht mehr verwendet.", + localRelay: "Lokales Relay", + citrineOff: "Schnellere Lesevorgänge & Offline-Backup auf diesem Gerät", + citrineSearching: "Suche nach Citrine auf diesem Gerät…", + citrineLive: "Verbunden — liest & sichert lokal", + citrineWaiting: "Aktiviert — starte Citrine, um zu verbinden", + toggleCitrine: "Lokales Citrine-Relay umschalten", + citrineDetected: "Citrine-Relay erkannt", + citrineLooking: "Suche nach Citrine…", + citrineNotDetected: "Citrine nicht erkannt", + recheckCitrine: "Erneut nach dem Citrine-Relay suchen", + checking: "Wird geprüft", + recheck: "Erneut prüfen", + chipInstantReads: "Sofortiges Lesen", + chipWorksOffline: "Funktioniert offline", + chipOnDeviceBackup: "Backup auf dem Gerät", + cantReachStrong: "Citrine nicht erreichbar.", + cantReachBefore: "Stelle sicher, dass die kostenlose Citrine-App installiert und ihr Relay", + started: "gestartet", + cantReachAfter: "ist, und tippe dann auf Erneut prüfen. Sie betreibt ein privates Nostr-Relay auf deinem Handy für sofortiges Lesen und ein Offline-Backup.", + citrineStep1Before: "Öffne Citrine → tippe auf", + start: "Start", + citrineStep2Before: "Komm hierher zurück → tippe auf", + getCitrine: "Citrine holen", + citrinePrivacy: "Dein Stash und deine Nachrichten bleiben hier Ende-zu-Ende-verschlüsselt, genau wie überall sonst. Das lokale Relay beschleunigt nur die Dinge und hält eine Kopie auf deinem Gerät — es ersetzt niemals die Verschlüsselung.", + communityRelayDisabled: "Community-Relay deaktiviert", + communityRelayEnabled: "Community-Relay aktiviert", + usingOnlyPersonal: "Es werden nur deine konfigurierten Relays verwendet.", + skateRelayIncluded: "SkateSpots-Relay enthalten.", + relays: "Relays", + relayPrivacyBefore: "Relays können deine", + ipAddress: "IP-Adresse", + relayPrivacyAfter: "sehen, wenn du dich verbindest. Tor verbirgt sie — und behandle ein „kostenloses“ VPN als Warnsignal; sie monetarisieren meist deinen Datenverkehr.", + communityRelay: "Community-Relay", + syncingGlobal: "Synchronisiert mit der globalen Skate-Community", + usingOnlyPersonalShort: "Es werden nur persönliche Relays verwendet", + appearance: "Erscheinungsbild", + language: "Sprache", + darkModeOnly: "Nur Dunkelmodus", + darkModeDesc: "SkateSpots verwendet eine dunkle Neon-Ästhetik, inspiriert von der Skatekultur. Schwarzer Hintergrund, Neonpink, Limette und Orange.", + navigation: "Navigation", + sasquatchExpanded: "The Sasquatch wurde erweitert! 🦧 Aktualisiere die Seite, um ihn zu sehen.", + advanced: "Erweitert", + sasquatchGuide: "🦧 Sasquatch-Hilfe", + sasquatchResetDesc: "Setze die Onboarding-Hilfe auf die erweiterte Ansicht zurück", + expandSasquatch: "The Sasquatch erweitern", + wallet: "Wallet", + loginToWallet: "Melde dich an, um deine Wallet zu verwalten", + openWallet: "Wallet öffnen", + balanceSendReceive: "Guthaben, Senden, Empfangen", + connectNwc: "NWC-Wallet verbinden", + account: "Konto", + security: "Sicherheit", + securitySub: "Schlüssel, Signieren, Amber", + nip05Sub: "Hol dir eine verifizierte Nostr-Adresse", + app: "App", + myStash: "Mein Stash", + myStashSub: "Private Gear-Inventar", + relaysSub: "Nostr-Relay-Verbindungen", + appearanceSub: "Sprache und Theme", + assistant: "Assistent", + showSasquatch: "Sasquatch-Assistent anzeigen", + showSasquatchDesc: "Zeige den schwebenden Sasquatch-Button auf der Karte und anderen Bildschirmen.", + showMapFooter: "Kartenlink-Leiste anzeigen", + showMapFooterDesc: "Zeige den dünnen Linkstreifen am unteren Rand der Karte.", + notifications: "Benachrichtigungen", + notificationsSub: "Warnungen für DMs, Crews und Zaps", + coordinator: "Koordinator", + coordinatorSub: "Dein Cordn-Gruppenserver", + data: "Daten", + myData: "Meine Daten", + myDataSub: "Exportieren, importieren, verwalten", + advancedSub: "Relatr, Sasquatch, Tools", + notLoaded: "Nicht geladen", + notLoggedIn: "Nicht angemeldet" + }, + onboarding: { + seoTitle: "Loslegen — SkateSpots", + seoDescription: "Tritt der dezentralen Skateboard-Community bei. Finde Spots, verbinde dich mit Coaches, sende Zaps. Für immer kostenlos.", + homeSetTitle: "Zuhause festgelegt 🛹", + homeSetDesc: "Die Karte öffnet sich jetzt in deiner Gegend.", + locationFailedTitle: "Dein Standort konnte nicht ermittelt werden", + locationFailedDesc: "Prüfe die Standortberechtigungen oder wähle deine Gegend auf der Karte.", + niceTitle: "🎉 Nice!", + niceDesc: "Du verstehst jetzt, wie Nostr funktioniert. Lass uns skaten!", + npubCopied: "npub in die Zwischenablage kopiert.", + saveLoginNow: "Sichere deinen Login — mach das jetzt", + saveLoginNowDesc: "Dein Wiederherstellungscode ist der einzige Weg zurück in dein Konto. Keine E-Mail, kein Passwort-Reset.", + betaBadge: "Beta — Offen für Skater weltweit", + headline1: "SKATE", + headline2: "DEINE WELT", + heroBefore: "Eine", + decentralized: "dezentrale", + heroAfter: "Skate-Community. Kein Unternehmen besitzt sie. Kein Algorithmus vergräbt deine Spots. Kein Bannhammer. Nur Skater.", + pillMap: "Spot-Karte", + pillCoaches: "Coaches & Filmer", + pillEvents: "Events", + pillGear: "Gear kaufen/verkaufen", + pillZaps: "Bitcoin-Zaps", + pillStash: "Gear-Stash", + pillCrews: "Crews", + createFreeAccount: "Erstelle dein kostenloses Konto", + noEmailNoPassword: "Keine E-Mail. Kein Passwort. Besitze deine Identität für immer.", + findSpots: "Finde Spots in deiner Nähe", + addFirstSpot: "Füge deinen ersten Spot hinzu", + accountCreated: "Du bist dabei! Konto erstellt ✓", + identityYours: "Deine Identität gehört dir — gespeichert in deinem Schlüssel, nicht auf unseren Servern.", + whereSkate: "Wo skatest du?", + whereSkateDesc: "Lege einmal deine Heimatgegend fest, und die Karte öffnet sich jedes Mal bei deinen Spots. Dein GPS verlässt dein Gerät nie.", + useMyLocation: "Meinen Standort verwenden", + pickOnMap: "Auf der Karte auswählen", + loginSaved: "Login gesichert — dein Konto ist sicher wiederherstellbar.", + whyBother: "Warum überhaupt?", + why1Title: "Jeder Spot, eine Karte", + why1Body: "Ledges, Rails, DIY, Parks — kartiert von Skatern, die sie wirklich fahren. Prüfe den Status, bevor du losfährst, damit du keine Session wegen eines Busts verschwendest.", + why2Title: "Von Skatern gebaut, nicht von Anzügen", + why2Body: "Keine Werbung, kein Algorithmus, der dir Müll ins Gesicht drückt, kein Datensammeln. Open Source. Die Karte gehört der Community — einschließlich dir.", + why3Title: "Werde bezahlt, wenn du was auf die Beine stellst", + why3Body: "Kartiere ein Juwel, filme einen Banger, leite eine Session — und lass dir echtes Bitcoin direkt in deine Wallet zappen. Kein Plattform-Anteil, kein Mittelsmann.", + why4Title: "Dein Konto gehört wirklich dir", + why4Body: "Ein Schlüssel meldet dich in jeder Nostr-App an. Kein Unternehmen kann dich aussperren oder dein Konto nach Lust und Laune löschen. Nimm deine Identität überallhin mit.", + everythingFree: "Alles, was du tun kannst — kostenlos", + featSpots: "Spots entdecken", + featSpotsDesc: "Interaktive Karte mit Tausenden Spots weltweit", + featLab: "The Lab", + featLabDesc: "Finde Coaches, Filmer & Video-Editoren in deiner Nähe", + featEvents: "Events", + featEventsDesc: "Wettbewerbe, Sessions, Meetups", + featGear: "Gear kaufen / verkaufen", + featGearDesc: "Peer-to-Peer-Marktplatz für gebrauchtes Skate-Gear", + featStash: "Mein Stash", + featStashDesc: "Privates verschlüsseltes Inventar von allem, was du besitzt", + featCrews: "Crews", + featCrewsDesc: "Rolle mit deiner Crew — geteilte Spots, Chat & Sessions", + whatIsNostr: "Was ist Nostr?", + whatIsNostrSub: "Das Protokoll hinter SkateSpots", + nostrBefore: "Nostr ist ein offenes Protokoll — wie E-Mail, aber für soziale Apps. Dein Konto ist ein", + cryptoKeyPair: "kryptografisches Schlüsselpaar", + nostrAfter: ", das dir gehört. Kein einzelnes Unternehmen kontrolliert dein Konto oder deine Daten — du wählst, welche Relays sie speichern, und kannst sogar dein eigenes betreiben. Deine Identität funktioniert in jeder Nostr-App.", + nostrPoint1: "Deine Daten & Schlüssel gehören dir", + nostrPoint2: "Kein Unternehmen kann dich bannen", + nostrPoint3: "Identität funktioniert überall", + nostrPoint4: "Direkte Bitcoin-Trinkgelder", + deepDive: "Deep Dive: Wie Nostr funktioniert", + privacyTip: "Datenschutz-Tipp: Dein GPS verlässt dein Gerät nie. Server, mit denen du dich verbindest (wie Kartenkacheln), können trotzdem deine IP sehen — wenn du auch das verbergen willst, funktioniert ein VPN oder Tor. Völlig optional.", + readPrivacy: "Lies unsere Datenschutzseite", + zapsWallet: "⚡ Zaps & Wallet", + optional: "Optional", + walletDesc: "Zaps sind Bitcoin-Trinkgelder, die du direkt an einen Skater sendest, der einen kranken Spot entdeckt, einen Banger-Clip gefilmt oder eine großartige Session geleitet hat. Keine Plattformgebühr. Kein Mittelsmann. 100 % gehen an ihn.", + builtInWallet: "Integrierte Cashu-Wallet", + builtInWalletDesc: "Empfange Lightning-Zahlungen direkt in der App. Keine Einrichtung.", + balance: "Guthaben", + connectExternal: "Externe Wallet verbinden", + connectExternalDesc: "Hast du Alby, Mutiny oder eine andere Wallet? Verbinde sie über NWC.", + connectViaNwc: "Über NWC verbinden", + loginToConnect: "Melde dich an, um deine eigene Wallet zu verbinden.", + fiveDollars: "💡 5 $ in Bitcoin = Hunderte Zaps, die du in der Community verteilen kannst", + commonQuestions: "Häufige Fragen", + faq1Q: "Ist SkateSpots kostenlos?", + faq1A: "100 % kostenlos. Spots durchstöbern, Orte hinzufügen, Coaches finden, Events erstellen, Sessions beitreten — alles gratis, für immer. Bitcoin (Zaps) ist optional, wenn du Creators Trinkgeld geben möchtest.", + faq2Q: "Was ist Nostr und warum verwendet SkateSpots es?", + faq2Before: "Nostr ist ein offenes Protokoll für dezentrale Apps — stell es dir wie das Internet selbst vor, das keinem Unternehmen gehört. Dein SkateSpots-Konto ist ein kryptografisches Schlüsselpaar, das", + faq2Strong: "dir gehört", + faq2After: ". Kein einzelnes Unternehmen kann dein Konto bannen oder deine Daten als Geisel halten — du wählst, welche Relays deine Daten speichern, und kannst sogar dein eigenes betreiben. Deine Identität funktioniert auch in anderen Nostr-Apps wie Primal, Damus oder Amethyst.", + faq3Q: "Was ist ein nsec und warum ist er wichtig?", + faq3Before: "Dein", + faq3Mid: "ist dein privater Schlüssel — er ist der einzige Beweis, dass dir dein Konto gehört. Anders als Passwörter gibt es", + faq3Strong: "kein „Passwort vergessen“", + faq3After: ". Wenn du deinen nsec verlierst, ist dein Konto für immer weg. Wenn du ein Konto erstellst, lade dein Backup sofort herunter und bewahre es sicher auf (Passwort-Manager, offline aufgeschrieben).", + faq4Q: "Welche Signer / Apps funktionieren mit SkateSpots?", + faq4Desktop: "Auf dem Desktop:", + faq4Extensions: "Browser-Erweiterungen.", + faq4Android: "Auf Android:", + faq4AndroidAfter: "(bestes Erlebnis mit der nativen App).", + faq4Ios: "Auf iOS:", + faq4IosAfter: "oder füge deinen nsec direkt ein (weniger sicher).", + faq4Note: "Du kannst dich auch anmelden, indem du deinen nsec direkt einfügst — aber eine Signer-Erweiterung ist sicherer.", + faq5Q: "Kann ich SkateSpots auf meinem Handy nutzen?", + faq5Before: "Ja! SkateSpots ist eine PWA (Progressive Web App). Besuche", + faq5Mid: "im Browser deines Handys und tippe auf", + faq5Em: "„Zum Startbildschirm hinzufügen“", + faq5After: "für ein volles App-Erlebnis. Oder lade es von", + faq5End: "herunter — einem dezentralen App-Store.", + faq6Q: "Was ist ein Zap?", + faq6A: "Ein Zap ist ein sofortiges Bitcoin-Trinkgeld, das über das Lightning-Netzwerk gesendet wird. Wenn du einen Skater zappst, landen die sats innerhalb von Sekunden in seiner Wallet — kein PayPal, kein Venmo, kein Abzug. Die Person, die diesen 4-Stufen gefilmt hat, wird direkt von Fans bezahlt.", + faq7Q: "Werden meine Spots gelöscht, wenn SkateSpots abgeschaltet wird?", + faq7A: "Nein. Deine Spots werden auf Nostr-Relays veröffentlicht — verteilte Server, die jeder betreiben kann. Selbst wenn SkateSpots als Produkt morgen verschwinden würde, würden deine Daten weiterhin auf Relays existieren, und jeder Nostr-Client könnte sie anzeigen.", + faq8Q: "Kann ich einen Spot hinzufügen, der auf Privatgrund liegt?", + faq8A: "Du kannst, aber benutze den gesunden Menschenverstand. Spots auf Privatgrund sollten entsprechend markiert werden, damit Skater Bescheid wissen. SkateSpots ist nicht für Hausfriedensbruch verantwortlich — sei immer respektvoll gegenüber Eigentümern und Locals.", + faq9Q: "Wie melde ich einen Bug oder gebe Feedback?", + faq9Before: "Schreibe dem SkateSpots-Team direkt auf Nostr eine DM oder wende dich an unseren Beta-Koordinator:", + faq9Link: "Beta-Feedback → cordn.net", + readyToShred: "BEREIT ZUM SHREDDEN?", + stopScrolling: "Hör auf zu scrollen. Hol dir die App. Finde einen Spot. Skate ihn.", + exploreSpots: "Spots erkunden", + betaFeedbackTitle: "Beta — Wir wollen dein Feedback", + betaFeedbackDesc: "SkateSpots wird aktiv weiterentwickelt. Du könntest auf raue Kanten stoßen — das liegt an uns, nicht an dir. Melde Bugs, schlage Funktionen vor, sag uns, was nervt.", + betaCoordinator: "Beta-Koordinator", + betaCoordinatorDesc: "cordn.net → schreib uns", + dmOnNostr: "DM auf Nostr", + fixSameDay: "Einen Bug gefunden? Wir beheben ihn noch am selben Tag. Deine Meldungen machen die App für jeden Skater besser.", + relaySetup: "Relay-Einrichtung" + }, + relayEdu: { + understandingNostr: "Nostr verstehen", + stepOf: "Schritt {{current}} von {{total}}", + step1Title: "Relays verstehen", + step1Desc: "Stell dir Relays wie Skateshops vor, die Neuigkeiten über Spots teilen", + you: "Du", + relays: "Relays", + skaters: "Skater", + s1Good1: "Kein Unternehmen besitzt dein Konto", + s1Good1Desc: "Deine Identität lebt auf mehreren Relay-Servern", + s1Good2: "Du kontrollierst, wo deine Daten leben", + s1Good2Desc: "Deine Beiträge synchronisieren sich über Relays deiner Wahl — wähle deine eigenen oder betreibe selbst eines", + s1Warn: "Relay-Betreiber können öffentliche Beiträge sehen", + s1WarnDesc: "Stell es dir wie das Anpinnen an ein Schwarzes Brett vor", + step2Title: "Öffentlich vs. privat", + step2Desc: "Wisse, was sichtbar und was verschlüsselt ist", + publicTitle: "Öffentlich (jeder kann es sehen)", + pub1: "Spots, die du zur Karte hinzufügst", + pub2: "Bewertungen und Kommentare", + pub3: "Deine Profilinfos (Name, Bild)", + pub4: "Wem du folgst", + privateTitle: "Privat (verschlüsselt)", + priv1: "Direktnachrichten", + priv2: "Wallet-Kommunikation", + noteStrong: "Hinweis:", + note: "Beiträge können dauerhaft auf Relays gespeichert werden. Denke nach, bevor du postest — genau wie im echten Leben!", + step3Title: "Deine Schlüssel = dein Konto", + step3Desc: "Das ist das Wichtigste, was du verstehen musst", + secretKeyTitle: "Dein geheimer Schlüssel (nsec)", + secretKeyDesc: "Stell ihn dir wie dein Skateboard vor — verleihe ihn niemals an jemanden. Er beweist, dass dir dein Konto gehört.", + s3Bad1: "Bei Verlust kann dein Konto nicht wiederhergestellt werden", + s3Bad2: "Kein „Passwort vergessen“ — niemand kann es zurücksetzen", + s3Good: "Sichere ihn und bewahre ihn sicher auf", + publicKeyTitle: "Dein öffentlicher Schlüssel (npub)", + publicKeyDesc: "Das ist wie dein Benutzername — teile ihn frei, damit andere dich finden können!", + inControl: "🔐 Du hast die Kontrolle — kein Unternehmen kann dich aussperren!", + skip: "Überspringen", + gotIt: "Verstanden!" + }, + about: { + seoTitle: "Über — SkateSpots", + seoDescription: "Erfahre mehr über SkateSpots und unsere Mission, eine dezentrale Skateboard-Community aufzubauen.", + npubCopied: "npub in die Zwischenablage kopiert. Füge sie in deinen Lieblings-Nostr-Client ein, um eine DM zu senden.", + bugReport: "🐛 Bug melden", + bugWhatHappened: "Was passiert ist:", + bugExpected: "Was ich erwartet habe:", + bugSteps: "Schritte zur Reproduktion:", + aboutWord: "ÜBER", + heroBefore: "Verbinde dich mit lokalen Skate-Szenen weltweit.", + skaterOwned: "Daten im Besitz der Skater", + heroAfter: ", von der Community betriebene Relays.", + viewStats: "Community-Statistiken ansehen", + missionTitle: "Unsere Mission", + mission1: "SkateSpots hilft Skateboardern, Spots zu entdecken, sich im The Lab mit Pros zu verbinden und Sessions zu organisieren — alles ohne Unternehmenskontrolle. Das echte Skaten findet offline statt, dieses Tool verbindet dich nur damit.", + mission2: "Skateboard-Wissen sollte bei der Community leben, nicht in Unternehmens-Apps eingesperrt. Deshalb läuft SkateSpots auf Nostr — einem relaybasierten System, in dem Skater ihre eigenen Daten kontrollieren, wählen, welche Relays sie speichern, und sogar eigene betreiben können. Kein einzelnes Unternehmen besitzt die Karte.", + whyNostr: "Warum Nostr?", + why1Title: "Von der Community kontrolliert", + why1Desc: "Deine Spots leben auf Community-Relays. Skater betreiben die Server, nicht Konzerne.", + why2Title: "Deine Daten gehören dir", + why2Desc: "Deine Nostr-Identität gehört dir. Nimm sie in jede Nostr-App mit — kein Lock-in.", + why3Title: "Bitcoin-Integration", + why3Desc: "Zappe Creators direkt mit Bitcoin. Keine Plattform, die 30 % nimmt.", + why4Title: "Open Source", + why4Desc: "Offen gebaut. Jeder kann zum Code beitragen oder ihn forken.", + getInvolved: "Mach mit", + getInvolvedDesc: "SkateSpots ist Open Source und communitygetrieben. Trage Code bei, teile Spots oder hilf anderen beim Einstieg.", + betaTitle: "Beta-Tests", + betaDesc: "Liebe/r Nutzer/in! Danke, dass du SkateSpots in der Beta testest. Bitte beachte, dass die App noch in der Beta ist und es Bugs oder Sicherheitsprobleme geben kann. Wenn du auf Probleme stößt oder einen Bug/ein Problem melden möchtest, melde dich gerne!", + giveFeedback: "Gib uns Feedback:", + copyNpub: "npub kopieren", + reportBug: "Bug melden", + viewProfile: "Profil ansehen", + downloadApp: "Lade die App herunter", + downloadAppDesc: "Installiere SkateSpots auf Android über Zapstore — den quelloffenen, Bitcoin-nativen App-Store.", + getOnZapstore: "Auf Zapstore holen", + credits: "Danksagungen", + creditPoweredBy: "Unterstützt von", + creditNostr: "Dezentrales Protokoll", + creditCrewChat: "Crew-Chat via", + creditCordn: "Ende-zu-Ende-verschlüsselter Gruppenchat", + creditEcash: "Ecash via", + creditCashu: "Chaumianisches Ecash für Lightning", + creditWalletConnect: "Wallet-Verbindung via", + creditNwc: "Nostr Wallet Connect (NIP-47)", + creditSigning: "Signieren auf Android mit", + creditAmber: "Nostr-Signer für Android", + creditMapData: "Bitcoin-Kartendaten von", + creditBtcmap: "Orte, die Bitcoin akzeptieren", + creditCrowdfunding: "Crowdfunding", + creditAngor: "Dezentrales Bitcoin-Crowdfunding", + creditDistributed: "Vertrieben über", + creditZapstore: "Quelloffener App-Store", + creditTrust: "Vertrauen & Crew-Chat via", + creditContextvm: "Relatr-Vertrauensbewertungen & verschlüsselte Crew-Chat-Koordination", + stillQuestions: "Noch Fragen?", + stillQuestionsDesc: "The Sasquatch ist unser KI-Guide — angetrieben von Live-SkateSpots-Daten. Frag ihn nach Spots, Events, Coaches, Gear oder wie irgendetwas funktioniert.", + askSasquatch: "Frag The Sasquatch", + poweredBy: "Unterstützt von", + decentralized: "Dezentral", + communityOwned: "In Community-Besitz" + }, + faq: { + seoTitle: "FAQ — SkateSpots", + seoDescription: "Frag The Sasquatch alles über SkateSpots.", + greeting: "Hey! Ich bin The Sasquatch 🦧 — frag mich alles über SkateSpots. Spots, Events, Gear, Wallets, Datenschutz, Nostr — ich hab dich. Was willst du wissen?", + gotQuestions: "Fragen?", + heroDesc: "Frag The Sasquatch — er weiß alles über SkateSpots, Nostr, Bitcoin und Skateboarding.", + askTitle: "Frag The Sasquatch", + askDesc: "The Sasquatch ist in der unteren linken Ecke deines Bildschirms geöffnet — klick einfach darauf und tippe deine Frage. Er hat Live-Zugriff auf Spots, Events, Coaches und Wetter.", + askQuestion: "Womit kannst du mir bei SkateSpots helfen?", + openSasquatch: "The Sasquatch öffnen", + commonQuestions: "Häufige Fragen — zum Fragen tippen", + quickAnswers: "Schnelle Antworten", + footerHint: "The Sasquatch verwendet Live-Nostr-Daten vom SkateSpots-Relay + KI, um deine Fragen zu beantworten. 🛹", + chip1Label: "Was ist SkateSpots?", + chip1Q: "Was ist SkateSpots und wie funktioniert es?", + chip2Label: "Wie füge ich einen Spot hinzu?", + chip2Q: "Wie füge ich der Karte einen Skate-Spot hinzu?", + chip3Label: "Was sind Zaps?", + chip3Q: "Was sind Zaps?", + chip4Label: "Ist es kostenlos?", + chip4Q: "Ist SkateSpots kostenlos?", + chip5Label: "Was ist Mein Stash?", + chip5Q: "Was ist Mein Stash?", + chip6Label: "Wie melde ich mich an?", + chip6Q: "Wie melde ich mich an oder erstelle ein Konto?", + chip7Label: "Was ist Nostr?", + chip7Q: "Was ist Nostr?", + chip8Label: "Datenschutz & Daten", + chip8Q: "Welche Daten sind auf SkateSpots öffentlich und welche privat?", + chip9Label: "Wie verkaufe ich Gear?", + chip9Q: "Wie verkaufe ich Gear auf SkateSpots?", + chip10Label: "Was ist The Lab?", + chip10Q: "Was ist The Lab?", + fact1Label: "Skate-Spots weltweit", + fact1Value: "Entdecken & hinzufügen", + fact2Label: "Bitcoin-Lightning-Zaps", + fact2Value: "100 % kostenlos", + fact3Label: "Dezentral auf Nostr", + fact3Value: "Deine Daten gehören dir", + fact4Label: "Privates Gear-Inventar", + fact4Value: "Verschlüsselter Stash", + s1Q: "Was ist SkateSpots?", + s1A: "Eine dezentrale Karte und Community für Skateboarding, gebaut auf Nostr. Entdecke Spots, finde Coaches und Filmer, tritt Crews bei, liste Events und kaufe/verkaufe Gear — ohne ein Unternehmen dazwischen.", + s2Q: "Wie füge ich einen Spot hinzu?", + s2A: "Tippe auf die Karte oder verwende den + / „Spot hinzufügen“-Button, setze dann einen Pin und fülle die Details aus. Du brauchst ein kostenloses Nostr-Konto (tippe auf Anmelden → Konto erstellen — keine E-Mail nötig).", + s3Q: "Was sind Zaps?", + s3A: "Zaps sind Bitcoin-Lightning-Trinkgelder. Du kannst Spots, Events, Crews und Menschen zappen, die du schätzt. Sie gehen direkt über Lightning an den Empfänger — SkateSpots hält dein Geld nie.", + s4Q: "Ist es kostenlos?", + s4A: "Ja. Ein Konto erstellen, Spots hinzufügen und Stöbern sind kostenlos. Optionale kostenpflichtige Extras (wie hervorgehobene Angebote) und Trinkgelder (Zaps) werden direkt zwischen Personen bezahlt.", + s5Q: "Welche Daten sind öffentlich?", + s5A: "Alles, was du veröffentlichst — Spots, Events, dein Profil — ist öffentlich auf Nostr-Relays. Deine privaten Nachrichten und dein Stash sind Ende-zu-Ende-verschlüsselt. Details findest du auf der Datenschutzseite.", + s6Q: "Was ist The Lab?", + s6A: "The Lab ist der Ort, an dem du Leute zum Anheuern oder Lernen findest: Coaches, Trainer, Filmer, Video-Editoren, Fotografen, Builder, Künstler und mehr." + }, + privacy: { + seoTitle: "Datenschutz — SkateSpots", + seoDescription: "Wie SkateSpots mit deinen Daten umgeht: Dein GPS bleibt auf deinem Gerät, veröffentlichte Spots sind öffentlich, und wie du deine IP mit VPN oder Tor verbergen kannst, wenn du willst.", + heroBefore: "Dein", + heroHighlight: "Datenschutz", + heroDesc: "Kein Tracking, keine Werbung, kein Datenverkauf. Hier steht genau, was auf deinem Gerät bleibt, was öffentlich ist und wie du die Dinge weiter absichern kannst, wenn du willst.", + locationTitle: "Dein Standort bleibt auf deinem Gerät", + locationBefore: "Wenn du auf", + nearMe: "„In meiner Nähe“", + locationAfter: "tippst, wird dein GPS-Standort auf deinem Gerät gelesen und nur verwendet, um die Karte zu zentrieren und Spots in der Nähe zu sortieren.", + locationGood1: "Er wird niemals auf Nostr veröffentlicht.", + locationGood2: "Er wird niemals an SkateSpots gesendet — es gibt keinen SkateSpots-Server, der ihn sammelt.", + locationGood3: "Er wird niemals an Dritte weitergegeben.", + locationGood4: "In der nativen App verwenden wir direkt das Ortungssystem deines Handys und überspringen Google Play Services — so funktioniert es auch auf entgoogelten Handys (GrapheneOS, /e/OS) und Google sieht ihn nie.", + weatherBefore: "Wetter ist standardmäßig aus. Wenn du es einschaltest, ruft es Bedingungen für den", + weatherEm: "Spot", + weatherAfter: "öffentlichen Standort ab — nicht deinen.", + publicTitle: "Was von Natur aus öffentlich ist", + publicDesc: "SkateSpots ist eine geteilte Karte, deshalb sind manche Dinge dazu gedacht, von allen gesehen zu werden. Wenn du sie veröffentlichst, sind diese im Nostr-Netzwerk öffentlich:", + public1Strong: "Spots, die du hinzufügst", + public1: "— einschließlich ihrer Koordinaten. Wenn du einen Spot an deinem genauen Standort hinzufügst, wird dieser Standort öffentlich. Denk nach, bevor du einen Pin auf deiner eigenen Einfahrt setzt.", + public2Strong: "Bewertungen, Kommentare und dein öffentliches Profil", + public2: "(Name, Bild).", + public3: "Wem du folgst und öffentliche Reaktionen.", + public4Strong: "Zaps", + public4: "sind standardmäßig öffentlich: Ein Zap verknüpft dein Konto — oft deine Lightning-Adresse — mit dem bezahlten Beitrag und dem Trinkgeld selbst. Deine Wallet kann ihn anonym senden, wenn du das lieber möchtest.", + publicNoteBefore: "Ein VPN oder Tor verbirgt", + notWord: "nicht", + publicNoteAfter: "den Inhalt dessen, was du veröffentlichst — die Koordinaten eines Spots sind unabhängig davon öffentlich. Datenschutz-Tools verbergen deine Netzwerkidentität (deine IP), nicht die Dinge, die du postest.", + encryptedTitle: "Was privat & verschlüsselt ist", + enc1Strong: "Direktnachrichten", + enc1Mid: "und", + enc1Strong2: "Crew-Chats", + enc1: "sind Ende-zu-Ende-verschlüsselt (NIP-17). Nur die Teilnehmer können sie lesen.", + enc2Strong: "Mein Stash", + enc2: "— dein privates Gear-Inventar — ist mit deinem eigenen Schlüssel verschlüsselt.", + enc3Strong: "Nur Crew-Mitglieder", + enc3: "können wählen, nur für ihre Crew-Kollegen sichtbar zu sein.", + ipTitle: "Was dein Gerät verlässt: deine IP", + ipBefore: "Wie bei jeder Website können die Server, mit denen SkateSpots spricht, deine", + ipAddress: "IP-Adresse", + ipAfter: "sehen (ein grober Hinweis auf deine Region). Das ist bei jeder Web- oder Karten-App normal und nicht einzigartig für uns. Diese Server sind:", + ipTileStrong: "Kartenkacheln", + ipTile: "(OpenStreetMap) — sehen deine IP und welchen Kartenbereich du betrachtest.", + ipGeoStrong: "Spot-/Shop-Geokodierung", + ipGeo: "— wenn du einen Spot oder Shop erstellst oder bearbeitest, gehen seine Koordinaten an OpenStreetMap Nominatim, um das Stadt-/Land-Tag zu füllen. Wenn du Community-Statistiken öffnest, gehen die Koordinaten von Pins ohne Standort-Tag an BigDataCloud, damit sie nach Region gruppiert werden können (auf deinem Gerät zwischengespeichert — höchstens einmal pro Pin). Beide sehen deine IP. Dies sind die von dir gesetzten Pins / öffentliche Pin-Koordinaten, niemals das Live-GPS deines Geräts.", + ipPushStrong: "Hintergrund-Benachrichtigungen", + ipPush: "(Opt-in) — wenn du sie aktivierst, sieht ein SkateSpots-Push-Server, dass dein Schlüssel etwas empfangen hat und wann (nie wer es gesendet hat oder was darin steht — Nachrichten bleiben verschlüsselt), und dein OS-Push-Dienst (Google/Mozilla/Apple) stellt die Warnung zu.", + ipBtcStrong: "Bitcoin-Orte", + ipBtc: "(BTCMap, wenn du diese Ebene einschaltest) — sehen deine IP und den Bereich, den du betrachtest.", + ipRelayStrong: "Nostr-Relays", + ipRelay: "— sehen deine IP, wenn die App liest oder veröffentlicht.", + ipMintStrong: "Cashu-Mints", + ipMint: "— sehen deine IP, wann immer deine Wallet sendet, empfängt oder meltet.", + ipRouteStrong: "Wegbeschreibungen", + ipRoute: "(OSRM und Transitous für den Nahverkehr) — erhalten Start und Ziel jeder Route, die du anforderst, nicht nur deine IP. Das Routing bleibt in der App: Dein Start und Ziel werden nie an Google oder Apple Maps übergeben.", + ipWeatherStrong: "Wetter", + ipWeatherMid: "(Open-Meteo, Opt-in) und", + ipUploadStrong: "Bild-Uploads", + ipWeather: "(Blossom), wenn du sie verwendest.", + ipAiStrong: "Sasquatch-KI", + ipAi: "— deine Nachricht geht an unseren eigenen Server, dann an den Modellanbieter.", + ipLink1: "Weil du deinen öffentlichen Schlüssel (npub) über dieselbe Verbindung sendest, kann ein Relay deine IP mit dir verknüpfen — nicht nur „jemand hat sich verbunden“, sondern „diese Person, von dieser Adresse“.", + ipShieldBefore: "Eines schützen wir: Das", + ipMintsStrong: "Mint-Verzeichnis", + ipShieldAfter: "wird über unseren Server abgerufen, sodass MintRadar deine IP nie sieht.", + vpnTitle: "Willst du mehr Privatsphäre? VPN oder Tor (optional)", + vpnDesc: "Für die meisten Skater ist das nicht nötig — aber wenn du deine IP und ungefähre Position vor den oben genannten Servern verbergen willst, hast du zwei kostenlose Optionen:", + vpnReputable: "🛡️ Ein seriöses VPN", + vpnReputableDesc: "Verbirgt deine IP hinter den Servern des VPN. Einfach und schnell. Verwende eines, für das du bezahlst und dem du vertraust; kostenlose VPNs monetarisieren meist deinen Datenverkehr, behandle „kostenlos“ also als Warnsignal.", + torBrowser: "🧅 Tor Browser", + torDesc: "Kostenlos, maximale IP-Privatsphäre, leitet über mehrere Relays. Langsamer — Karten und einige Nostr-Relays können verzögern oder Tor-Exit-Nodes blockieren. Großartig für extra Vorsichtige.", + readThis: "Lies das, damit du nicht getäuscht wirst", + caveat1Before: "Ein VPN/Tor verbirgt deine", + ipWord: "IP", + caveat1: "— nicht die Spots, die du veröffentlichst. Ein Pin an deinem Zuhause ist öffentlich, ob du ein VPN verwendest oder nicht.", + caveat2Before: "Aktiviere nicht", + nearMeGps: "„In meiner Nähe“ / Browser-GPS", + caveat2: ", wenn dein Ziel Anonymität ist — präzises GPS überschreibt jedes Verbergen der IP.", + caveat3: "Kein Tool macht dich vollständig „anonym“. Diese reduzieren, was Server über deinen Netzwerkstandort ableiten können — mehr nicht.", + keysTitle: "Deine Schlüssel, dein Konto", + keysBefore: "Dein Konto ist ein kryptografisches Schlüsselpaar, das dir gehört. Der sicherste Weg, dich anzumelden, ist ein", + signer: "Signer", + keysAfter: "(Alby, nos2x oder Amber auf Android), damit dein geheimer Schlüssel nie in die App eingefügt wird.", + keysCaveatBefore: "Wenn du deinen", + keysCaveatAfter: "direkt einfügst, wird er in deinem Browser gespeichert. Verwende stattdessen nach Möglichkeit eine Signer-Erweiterung und bewahre dein nsec-Backup sicher offline auf.", + footerBefore: "Fragen? Frag", + sasquatchName: "The Sasquatch", + footerMid: "in der App oder lies den", + gettingStarted: "Leitfaden für den Einstieg", + about: "Über" + }, + license: { + seoTitle: "Lizenz — SkateSpots", + seoDescription: "SkateSpots-Lizenz. Du darfst skateboarden.", + tagline: "Skate, verdiene, hab Spaß und gib Sats aus, wo immer du bist.", + copyright: "SkateSpots-Mitwirkende & die Community", + licenseLabel: "Lizenz", + freeLine1: "DU DARFST", + freeLine2: "SKATEBOARDEN", + body: "Dieses Projekt ist offen. Teile es, forke es, baue darauf auf, skate es. Die Straßen gehören allen. Dieser Code auch. Skate weiter, hab Spaß, lerne Tricks, unterstütze die Builder und skate wieder weiter.", + builtBefore: "Gebaut mit ❤️ auf", + builtMid: "· Unterstützt von", + lightning: "Bitcoin Lightning ⚡", + viewSource: "Quellcode ansehen", + aboutSkateSpots: "Über SkateSpots", + supporters: "Unterstützer" + }, + glossary: { + seoTitle: "Trick-Glossar · SkateSpots", + seoDescription: "Das komplette Skateboarding-Glossar — {{count}} Einträge zu Flips, Grinds, Slides, Grabs, Airs, Lip-Tricks, Handplants, Freestyle, Transition-Begriffen, Stance & Hardware, mit Alternativnamen.", + heading: "TRICK-GLOSSAR", + subheading: "{{count}} Einträge · Tricks, Transition, Freestyle, Stance & Hardware", + searchPlaceholder: "Tricks oder Spitznamen suchen — tre flip, crooks, method…", + clearSearch: "Suche löschen", + all: "Alle", + results: "{{count}} Ergebnis{{s}} für", + noMatch: "Keine Tricks passen dazu. Versuche einen Spitznamen wie „tre flip“, „crooks“ oder „melon“.", + tricksCount: "{{count}} Tricks", + footerBefore: "Kennst du einen Trick oder Spitznamen, den wir verpasst haben? Tricks bekommen in jeder Szene andere Namen — wende dich an", + sasquatch: "The Sasquatch 🦧", + footerAfter: "und lass es uns wissen." + }, + signers: { + seoTitle: "Signer-Apps – Sichere deine Nostr-Schlüssel | SkateSpots", + seoDescription: "Erfahre mehr über Signer-Apps, die deine Nostr-Schlüssel sicher halten. Finde die beste Option für Android, iOS oder Desktop-Browser.", + securityGuide: "Sicherheitsleitfaden", + protect: "Schütze deine", + nostrKeys: "Nostr-Schlüssel", + heroDesc: "Signer-Apps halten deine privaten Schlüssel sicher, indem sie Events signieren, ohne sie preiszugeben. Statt deinen Schlüssel in jede App einzugeben, lass einen Signer das sicher erledigen.", + whySignerStrong: "Warum einen Signer verwenden?", + whySigner: "Dein privater Nostr-Schlüssel ist wie ein Passwort, das nie geändert werden kann. Eine Signer-App hält ihn sicher und lässt dich trotzdem jede Nostr-App verwenden.", + androidTitle: "Android-Signer", + androidDesc: "Native Signer-Apps für Android-Geräte, auch GrapheneOS.", + iosTitle: "iOS-Signer", + iosDesc: "Signer-Optionen für iPhone- und iPad-Nutzer.", + browserTitle: "Browser-Erweiterungen", + browserDesc: "Desktop-Browser-Erweiterungen zum Signieren in Web-Apps.", + recommended: "Empfohlen", + yourPlatform: "Deine Plattform", + get: "{{name}} holen", + protocolsTitle: "Protokolle verstehen", + nip07Desc: "Standard für Browser-Erweiterungen. Die Erweiterung fügt Web-Apps Signierfähigkeiten hinzu. Verwendet von Alby, nos2x, Flamingo und ähnlichen Erweiterungen.", + nip46Desc: "Remote-Signierprotokoll („Bunker“). Deine Signer-App bestätigt Anfragen anderer Apps, ohne deine Schlüssel preiszugeben. Verwendet von Nsec.app, Nostria und Nowser.", + nip55Desc: "Android-spezifisches Signer-Protokoll. Native Apps können Signaturen von Amber anfordern, ohne Schlüssel preiszugeben. Das nahtloseste Android-Erlebnis.", + whichChoose: "Welches wählen?", + chooseAndroid: "Android:", + chooseAndroidDesc: "Amber (NIP-55) für native Apps", + chooseIos: "iOS:", + chooseIosDesc: "Nsec.app (NIP-46) für beste Kompatibilität", + chooseDesktop: "Desktop:", + chooseDesktopDesc: "Alby, nos2x oder Flamingo (NIP-07)", + amberDesc: "Nativer Android-Signer mit Fokus auf Sicherheit und Benutzerfreundlichkeit. Die beste Wahl für Android-Nutzer.", + nsecAppDesc: "Plattformübergreifender Remote-Signer, der als sicherer Tresor für deine Schlüssel dient.", + nostriaDesc: "Remote-Signer-App mit Schlüsseln im sicheren Gerätespeicher.", + nowserDesc: "Multi-Auth-Signer, der sowohl Browser-Erweiterung als auch Remote-Signierprotokolle unterstützt.", + nsecAppIosDesc: "Die beste Option für iOS. Verwende es als Remote-Signer mit jedem Nostr-Client.", + nowserTfDesc: "iOS-Signer, verfügbar über TestFlight, mit Signierfähigkeiten ähnlich wie Android.", + nostriaIosDesc: "Remote-Signer mit sicherem Schlüsselspeicher auf deinem Gerät.", + nos2xDesc: "Einfache und zuverlässige Browser-Erweiterung zum Signieren von Nostr-Events.", + albyDesc: "Bitcoin-Lightning-Wallet mit integrierter Nostr-Schlüsselverwaltung und WebLN.", + flamingoDesc: "Nostr-fokussierte Browser-Erweiterung mit klarer Oberfläche.", + kiwiDesc: "Verwende auf Android/GrapheneOS den Kiwi Browser, um nos2x- oder Alby-Erweiterungen zu laden.", + fNativeApp: "Native App", + fMultiKey: "Unterstützung für mehrere Schlüssel", + fEventSigning: "Event-Signierung", + fSecureStorage: "Sichere Schlüsselspeicherung", + fRemoteSigning: "Remote-Signierung", + fAnyClient: "Funktioniert mit jedem Client", + fCrossDevice: "Geräteübergreifende Synchronisierung", + fMultiKeySupport: "Multi-Schlüssel-Unterstützung", + fNip07: "NIP-07-Unterstützung", + fNip46: "NIP-46-Unterstützung", + fFlexibleSigning: "Flexibles Signieren", + fNativeIos: "Native iOS-App", + fLightweight: "Leichtgewichtig", + fEasyToUse: "Einfach zu bedienen", + fChromeSupport: "Chrome/Brave/Edge-Unterstützung", + fLightningPayments: "Lightning-Zahlungen", + fNostrSigning: "Nostr-Signierung", + fWebln: "WebLN-Unterstützung", + fNwc: "NWC-Unterstützung", + fCleanUi: "Klare Oberfläche", + fPrivacyFocused: "Datenschutzorientiert", + fExtensionMobile: "Erweiterungsunterstützung auf Mobilgeräten", + fFullBrowser: "Volles Browser-Erlebnis", + fGraphene: "Funktioniert auf GrapheneOS" + }, + betaDisclaimer: { + title: "Achtung — das ist Beta", + subtitle: "Ein kurzes Wort, bevor du loslegst.", + ossTitle: "Open Source & experimentell", + ossBody: "Offen von der Community gebaut. Stöbere herum, forke es, zerbrich es.", + betaTitle: "In Beta — nicht auditiert", + betaBody: "Der Code wurde noch keinem formellen Sicherheitsaudit unterzogen. Fehler passieren.", + moneyTitle: "Verarbeitet echtes Bitcoin & Lightning", + moneyBody: "Verwende Geld darauf auf eigenes Risiko. Lade nur, was du dir leisten kannst zu verlieren.", + finePrint: "Keinerlei Gewährleistung. Du bist allein verantwortlich für deine eigenen Mittel und Schlüssel.", + viewCode: "Den Code ansehen", + accept: "Verstanden, lass mich rein" + } + } +}; export default deBatch3; diff --git a/src/i18n/de/batch4.ts b/src/i18n/de/batch4.ts index 192b3f7..10a94ba 100644 --- a/src/i18n/de/batch4.ts +++ b/src/i18n/de/batch4.ts @@ -1,4 +1,1115 @@ -/** de — batch 4. Filled by the translation pass; empty until then. */ -const deBatch4 = {}; +/** de — batch 4. German translation of the `walletUi` namespace. */ +const deBatch4 = { + walletUi: { + page: { + title: "Wallet", + subtitle: "Bitcoin Lightning + Cashu", + manage: "Verwalten", + getAWallet: "Wallet holen", + learnPlanB: "Mehr erfahren bei Plan B Academy", + walletMinibits: "Mobile Cashu · NWC", + walletAlby: "Browser-Erweiterung · WebLN + NWC", + walletZeus: "Selbstverwaltetes Lightning", + walletCoinos: "Webbasiert · funktioniert überall", + whatAreZaps: "Was sind Zaps?", + whatAreZapsShort: "Was sind Zaps?", + zapsDesc: "Sofortige Bitcoin-Lightning-Zahlungen. Sende sats an jeden Skater, Spot-Ersteller oder Coach – kein Mittelsmann, kein Plattform-Anteil.", + instant: "Sofort", + instantDesc: "In Sekunden beglichen", + flexible: "Flexibel", + flexibleDesc: "Deine Wallet, deine Schlüssel", + private: "Privat", + privateDesc: "Cashu verbirgt, wer zahlt", + direct: "Direkt", + directDesc: "Der Wert geht an den Ersteller", + loginRequired: "Anmeldung erforderlich", + loginRequiredDesc: "Melde dich mit deinem Nostr-Konto an, um deine Lightning-Wallet zu verbinden und mit dem Zappen zu beginnen.", + browseMints: "Cashu-Mints durchsuchen" + }, + modal: { + walletName: "Wallet-Name (optional)", + walletNamePlaceholder: "Meine Lightning-Wallet", + connectionUri: "Verbindungs-URI", + spendLimitTitle: "Lege zuerst ein Ausgabenlimit fest", + spendLimitBody1: "Dieser String erlaubt SkateSpots, Lightning-Rechnungen von deiner Wallet zu bezahlen. Gib dieser Verbindung in deiner Wallet-App ein kleines", + dailyBudget: "Tagesbudget", + spendLimitBody2: "(z. B. ein paar tausend sats) und aktiviere nur", + spendLimitBody3: "Füge niemals eine Verbindung mit unbegrenztem Budget ein. Du kannst sie jederzeit in deiner Wallet widerrufen.", + addWallet: "Wallet hinzufügen", + nwcConnection: "NWC-Verbindung", + lightningWallet: "Lightning-Wallet", + pasteNwc: "Füge deinen NWC-Verbindungsstring ein, um Zaps zu senden", + connectWallet: "Wallet verbinden", + browserExtension: "Browser-Erweiterung (WebLN)", + autoDetected: "Automatisch erkannt, falls installiert", + ready: "Bereit", + notFound: "Nicht gefunden", + getNwcFrom: "NWC erhalten von:", + connectionRequired: "Verbindungs-URI erforderlich", + connectionRequiredDesc: "Bitte gib eine gültige NWC-Verbindungs-URI ein.", + activeChanged: "Aktive Wallet geändert", + activeChangedDesc: "Die ausgewählte Wallet ist jetzt aktiv für Zaps.", + connectNwc: "NWC-Wallet verbinden", + connectNwcDesc: "Gib deinen Verbindungsstring aus einer kompatiblen Wallet ein.", + connect: "Verbinden", + connecting: "Wird verbunden…", + walletSettings: "Wallet-Einstellungen", + connectDesc: "Verbinde deine Lightning-Wallet, um sofort Zaps zu senden." + }, + cashu: { + title: "Cashu-Wallet", + desc: "Integrierte Ecash-Wallet – keine externe Einrichtung nötig", + initializing: "Wallet wird initialisiert…", + walletError: "Wallet-Fehler", + balance: "Guthaben", + balanceAria: "Wallet-Guthaben {{amount}} sats", + activeMint: "Aktiver Mint", + selectMint: "Mint auswählen", + receive: "Empfangen", + send: "Senden", + receiveViaLightning: "⚡ Über Lightning empfangen", + amountSats: "Betrag in sats", + generateInvoice: "Rechnung erstellen", + generating: "Wird erstellt…", + or: "Oder", + receiveCashu: "🥜 Cashu-Token empfangen", + scanQr: "QR scannen", + pasteCashu: "Cashu-Token einfügen (cashu...)", + receiveToken: "Token empfangen", + receiving: "Wird empfangen…", + createCashu: "🥜 Cashu-Token erstellen", + createToken: "Token erstellen", + creating: "Wird erstellt…", + payInvoice: "⚡ Lightning-Rechnung bezahlen", + pasteInvoice: "Lightning-Rechnung einfügen (lnbc...)", + payInvoiceBtn: "Rechnung bezahlen", + processing: "Wird verarbeitet…", + payAddress: "📧 Lightning-Adresse bezahlen", + sendToAddress: "An Adresse senden", + sending: "Wird gesendet…", + recentActivity: "Letzte Aktivität", + receivedLightning: "⚡ Lightning empfangen", + sentLightning: "⚡ Lightning gesendet", + sentToken: "🥜 Token gesendet", + receivedToken: "🥜 Token empfangen", + whatIsCashu: "Was ist Cashu?", + whatIsCashuDesc: "Cashu ist digitales Bargeld, das durch Bitcoin Lightning gedeckt ist. Stell es dir wie Bitcoin-Token vor, die du in deinem Browser hältst.", + benefitOffline: "Funktioniert offline an Skate-Spots", + benefitInstant: "Sofortige Peer-to-Peer-Zahlungen", + benefitPrivacy: "Datenschutzorientiert (Mints können dich nicht verfolgen)", + benefitRedeemable: "Jederzeit in Lightning-sats einlösbar", + findMints: "Mints finden auf mintradar.pedani.eu", + backupTitle: "Wallet sichern", + backupDesc: "Deine Wallet ist mit einer 12-Wörter-Wiederherstellungsphrase gesichert. Bewahre sie sicher auf – du brauchst sie, um dein Guthaben wiederherzustellen, falls du Browserdaten löschst.", + viewRecovery: "Wiederherstellungsphrase anzeigen", + backupNote: "Das ist wie dein Nostr-nsec – halte es geheim und sichere es!", + tokenReceived: "Token empfangen", + tokenReceivedDesc: "Cashu-Token erfolgreich eingelöst!", + receiveFailed: "Empfang fehlgeschlagen", + unknownError: "Unbekannter Fehler", + requestUnsupported: "Cashu-Anfrage noch nicht unterstützt", + requestUnsupportedDesc: "Diese Wallet kann noch keine Cashu-(creq)-Anfrage bezahlen – bitte fordere stattdessen eine Lightning-Rechnung oder -Adresse an.", + onchainUnsupported: "On-Chain wird hier nicht unterstützt", + onchainUnsupportedDesc: "Das ist eine Bitcoin-Adresse. Diese Wallet sendet nur Cashu-Token und Lightning-Zahlungen.", + nostrProfile: "Das ist ein Nostr-Profil", + nostrProfileDesc: "Scanne einen Cashu-Token, eine Lightning-Rechnung oder eine Lightning-Adresse, um zu bezahlen.", + clinkUnsupported: "Zahlungscode noch nicht unterstützt", + clinkUnsupportedDesc: "Diese Wallet kann noch keine CLINK-Codes bezahlen. Verwende stattdessen eine Lightning-Rechnung oder -Adresse.", + unrecognizedQr: "Unbekannter QR-Code", + unrecognizedQrDesc: "Scanne einen Cashu-Token, eine Lightning-Rechnung oder eine Lightning-Adresse.", + invalidAmount: "Ungültiger Betrag", + invalidAmountDesc: "Bitte gib einen gültigen Betrag ein", + paymentSent: "Zahlung gesendet", + paymentSentDesc: "{{amount}} sats an {{address}} gesendet", + paymentFailed: "Zahlung fehlgeschlagen", + copied: "Kopiert", + copiedDesc: "{{label}} in die Zwischenablage kopiert", + receiveSats: "{{amount}} sats empfangen", + payInvoiceHint: "Bezahle diese Rechnung mit einer beliebigen Lightning-Wallet", + invoiceQrAlt: "Rechnungs-QR-Code", + lightningInvoice: "Lightning-Rechnung", + invoiceLabel: "Rechnung", + waiting: "⏳ Warten auf Zahlung…", + tokenReady: "Token bereit zum Senden", + shareToken: "Teile diesen Token mit dem Empfänger", + tokenQrAlt: "Token-QR-Code", + cashuToken: "Cashu-Token", + tokenLabel: "Token", + copyToken: "Token kopieren", + tokenWarning: "Jeder mit diesem Token kann ihn einlösen – behandle ihn wie Bargeld!", + browser: { + title: "Integrierte Ecash-Wallet", + appOnly: "Nur in der App", + desc: "Selbstverwaltetes Cashu-Ecash, angetrieben von Bitcoin Lightning", + unlockTitle: "Schalte die volle Wallet in der SkateSpots-App frei", + unlockDesc: "Die integrierte Ecash-Wallet lässt dich Cashu-Token direkt am Spot prägen, senden und einlösen. Sie lebt in der nativen App, wo sie direkt mit Mints sprechen kann – Browser schotten diese Verbindungen zu deiner Sicherheit ab.", + zapTipTitle: "Zappen & Trinkgeld geben – funktioniert jetzt in deinem Browser", + zapTipDesc: "sats an Spots, Events, Coaches und Crews zu senden funktioniert direkt hier. Verbinde einfach unten eine Lightning-Wallet – Nostr Wallet Connect oder eine Browser-Erweiterung wie Alby. Kein Cashu-Mint nötig." + } + }, + escrow: { + title: "Treuhand", + desc: "Sicher verkaufen: Aktiviere Treuhand, und ein Käufer kann seine sats für einen Handel bei dir sperren. Du gibst sie frei, wenn du lieferst – wenn nicht, kann der Käufer sie nach der vereinbarten Zeit zurückfordern.", + active: "Treuhand ist aktiv", + publish: "Treuhand aktivieren", + published: "Treuhand ist aktiv", + publishedDesc: "Käufer können jetzt Geld für einen Handel bei dir sperren.", + failed: "Treuhand konnte nicht aktiviert werden" + }, + escrowSettings: { + title: "Treuhand-Einstellungen", + desc: "Standardwerte für Cashu-Treuhandhandel. Nur auf diesem Gerät.", + lockWindow: "Standard-Sperrzeitraum", + lockWindowHint: "Wie lange das Geld gesperrt bleibt, bevor der Käufer es zurückfordern kann. Länger ist sicherer für den Verkäufer.", + days: "Tage", + preferredMint: "Mint für Treuhand", + activeMint: "Aktiver Mint", + preferredMintHint: "Welcher Mint die Treuhand finanziert. Verwende einen vertrauenswürdigen.", + requireListings: "Treuhand bei neuen Angeboten verlangen", + requireListingsHint: "Wählt „Treuhand verlangen“ vor, wenn du einen Artikel anbietest." + }, + privacy: { + title: "Datenschutz-Tipps", + subtitle: "Lerne, wie du deine finanzielle Privatsphäre schützt", + cashuRecommended: "CASHU (Empfohlen)", + anon: "Anonyme Transaktionen", + blind: "Blinde Signaturen verbergen Aktivitäten", + noIp: "Keine IP-Exposition", + trustMint: "Mint muss Geldern vertraut werden", + lightningAddress: "LIGHTNING-ADRESSE", + linked: "Kann mit Identität verknüpft werden", + traceable: "Zahlungsverlauf nachverfolgbar", + ipVisible: "IP sichtbar beim Rechnungsstellen", + selfCustody: "Selbstverwaltung möglich", + bestPractices: "Bewährte Methoden", + tip1Title: "Nutze Cashu zum Empfangen von Trinkgeldern", + tip1Desc: "Die integrierte Cashu-Wallet ist der privateste Weg, Zaps zu empfangen", + tip2Title: "Nutze eine separate Wallet für SkateSpots", + tip2Desc: "Nutze nicht deine Haupt-Spar-Wallet – halte App-Gelder getrennt", + tip3Title: "Erwäge die Nutzung von VPN oder Tor", + tip3Desc: "Verbirgt deine IP-Adresse bei Transaktionen", + tip4Title: "Vermeide identitätsgebundene Lightning-Adressen", + tip4Desc: "Nutze pseudonyme Adressen, die nicht an deinen echten Namen gebunden sind", + proTip: "Profi-Tipp:", + proTipDesc: "Empfange Zahlungen zuerst in deiner Cashu-Wallet und verschiebe dann regelmäßig größere Beträge mit einem VPN in deine persönliche Wallet.", + warnTitle: "Datenschutzhinweis", + warnDesc: "Lightning-Adressen können deine SkateSpots-Aktivität möglicherweise mit deiner echten Identität verknüpfen.", + betterPrivacy: "Für besseren Datenschutz:", + bullet1: "Nutze eine dedizierte Wallet für diese App", + bullet2: "Erwäge stattdessen die Nutzung der Cashu-Wallet", + bullet3: "Nutze VPN/Tor für Transaktionen", + useCashu: "Stattdessen Cashu nutzen", + understand: "Verstanden" + }, + mintPrivacy: { + title: "Mint-Datenschutz", + desc: "Die Nutzung mehrerer Mints verbessert den Datenschutz, da kein einzelner Mint alle deine Transaktionen sehen kann", + distribution: "Geldverteilung", + singleWarning: "Die Nutzung eines einzigen Mints bedeutet, dass dieser Mint alle Zeitpunkte und Beträge deiner Transaktionen sehen kann. Erwäge, weitere Mints hinzuzufügen, um den Datenschutz zu verbessern.", + yourMints: "Deine Mints ({{count}})", + default: "Standard", + addMint: "Mint hinzufügen", + addMintDesc: "Füge einen neuen Cashu-Mint zu deiner Wallet hinzu", + mintUrl: "Mint-URL", + add: "Hinzufügen", + adding: "Wird hinzugefügt…", + orChoose: "Oder aus Liste wählen", + recommended: "Empfohlene Mints", + allMints: "Alle Mints (Verzeichnis)", + searchMints: "Mints suchen…", + noDirectoryMints: "Keine Mints entsprechen deiner Suche.", + directoryHint: "Aus dem Community-Verzeichnis MintRadar – inoffiziell und möglicherweise veraltet.", + added: "Hinzugefügt", + soon: "Bald", + autoDistribute: "Gelder automatisch verteilen", + autoDesc: "Empfangene Gelder auf mehrere Mints verteilen", + autoAria: "Gelder automatisch verteilen (bald verfügbar)", + tip1: "Nutze mindestens 2–3 verschiedene Mints für besseren Datenschutz", + tip2: "Bewahre nicht alle Gelder in einem Mint auf – verteile sie", + tip3: "Berücksichtige die Gerichtsbarkeit des Mints (verschiedene Länder = verschiedener rechtlicher Zugriff)", + tip4: "Mints sehen den Zeitpunkt von Transaktionen, aber NICHT, wen du bezahlst (blinde Signaturen)", + future: "Zukünftige Funktionen: Mint-Rotation und Datenschutz-Bewertung – bleib dran!", + findMore: "Finde weitere Mints auf mintradar.pedani.eu", + trustWarning: "Vertrauenswarnung:", + trustWarningDesc: "Mints sind treuhänderisch – sie halten deine Gelder. Nutze nur Mints, denen du vertraust. Wenn ein Mint verschwindet, können deine Gelder verloren gehen. Die Verteilung von Geldern auf mehrere Mints verringert das Risiko.", + removeTitle: "Mint entfernen?", + removeDesc: "Bist du sicher, dass du {{name}} entfernen möchtest?", + removeMint: "Mint entfernen", + warning: "Warnung:", + withdrawWarning: "Dieser Mint hat {{amount}} sats. Hebe deine Gelder ab, bevor du ihn entfernst!", + invalidUrl: "Ungültige URL", + invalidUrlDesc: "Die Mint-URL muss mit https:// beginnen", + mintAdded: "Mint hinzugefügt", + mintAddedDesc: "Neuer Mint erfolgreich hinzugefügt", + mintAddedNamed: "{{name}} erfolgreich hinzugefügt", + failedAdd: "Mint konnte nicht hinzugefügt werden", + failed: "Fehlgeschlagen", + noMints: "Keine Mints", + singleMint: "Einzelner Mint", + concentrated: "Konzentriert", + moderate: "Mäßig", + wellDistributed: "Gut verteilt", + mintCoinosWebDesc: "Webfreundlicher Mint (für Browser empfohlen)", + mintMinibitsWebDesc: "⚠ Nur native App – aus Webbrowsern nicht erreichbar", + mintMinibitsNativeDesc: "SkateSpots-Mint – empfohlen", + mintCoinosDesc: "Webfreundlicher Mint", + mintLnbitsDesc: "Community-Mint auf LNbits" + }, + nwc: { + title: "Lightning-Wallet", + noConnection: "NWC-Wallet", + refresh: "Guthaben aktualisieren", + createInvoice: "Rechnung erstellen", + copyInvoice: "Rechnung kopieren", + pasteInvoice: "Lightning-Rechnung einfügen (lnbc…)", + amount: "Betrag: {{amount}} sats", + pasteToSee: "Rechnung einfügen, um den Betrag zu sehen", + pay: "Bezahlen", + invoiceQrAlt: "Lightning-Rechnungs-QR-Code", + enterAmount: "Gib einen Betrag in sats ein", + readBalanceFailed: "Guthaben konnte nicht gelesen werden", + readBalanceFailedDesc: "Deine Wallet hat nicht geantwortet.", + createInvoiceFailed: "Rechnung konnte nicht erstellt werden", + createInvoiceFailedDesc: "Versuche es gleich noch einmal.", + paymentSent: "Zahlung gesendet", + paidAmount: "{{amount}} sats bezahlt.", + paid: "Bezahlt.", + paymentRejected: "Die Wallet hat die Zahlung abgelehnt." + }, + qr: { + title: "QR-Code scannen", + desc: "Positioniere den QR-Code im Kamerabild, um ihn zu scannen", + paste: "Aus Zwischenablage einfügen", + hint: "Scanne einen Cashu-Token, eine Lightning-Rechnung oder eine Lightning-Adresse", + clipboardEmpty: "Zwischenablage leer", + clipboardEmptyDesc: "Kein Text in der Zwischenablage gefunden", + pasteFailed: "Einfügen fehlgeschlagen", + pasteFailedDesc: "Konnte nicht aus der Zwischenablage lesen" + }, + recovery: { + title: "Wiederherstellungsphrase", + desc: "Diese 12 Wörter sind der einzige Weg, dein Ecash-Guthaben wiederherzustellen. Schreibe sie der Reihe nach auf und bewahre sie offline auf – teile sie niemals mit jemandem.", + tapReveal: "Tippen zum Anzeigen", + noWatching: "Stelle sicher, dass niemand zusieht", + hide: "Verbergen", + reveal: "Anzeigen", + paperHint: "Am sichersten ist es, sie auf Papier zu schreiben – das Kopieren in die Zwischenablage kann an andere Apps gelangen.", + written: "Ich habe sie aufgeschrieben", + revealFirst: "Zeige zuerst die Wörter an", + copiedDesc: "Wiederherstellungsphrase kopiert – füge sie an einem sicheren Ort ein und leere dann deine Zwischenablage.", + copyFailed: "Kopieren fehlgeschlagen", + copyFailedDesc: "Bitte schreibe die Wörter stattdessen auf." + }, + guide: { + quickGuide: "Kurzanleitung", + fullGuide: "Wallet-Anleitung (Skater-Edition)", + cashuSummary: "Datenschutz + Komfort", + mintHoldsFunds: "(Mint hält Gelder)", + lightningSummary: "Kontrolle + Sicherheit", + youHoldKeys: "(du hältst die Schlüssel)", + useBoth: "Nutze beides: Cashu für Trinkgelder, Lightning für Ersparnisse", + cashuTitle: "CASHU-WALLET", + cashuTagline: "Wie Bargeld in deiner Tasche am Skatepark", + cashuBullet1: "Schnell gezückt für ein Trinkgeld", + cashuBullet2: "Trage hier nicht deine Lebensersparnisse mit dir", + cashuBullet3: "Wenn der Mint verschwindet, können Gelder verloren gehen", + cashuBullet4: "Niemand weiß, wie viel du hast (Datenschutz!)", + cashuPerfectFor: "Session-Snacks, Zapping-Clips, kleine Trinkgelder", + lightningTitle: "LIGHTNING-WALLET", + lightningTagline: "Wie dein Bankkonto – du hast die Kontrolle", + lightningBullet1: "Sicher, du kontrollierst die Schlüssel", + lightningBullet2: "Die Einrichtung dauert einen Moment", + lightningBullet3: "Vollständiger Transaktionsverlauf", + lightningBullet4: "Besser für größere Beträge", + lightningPerfectFor: "Ausrüstungskäufe, Ersparnisse, große Zaps", + perfectFor: "Perfekt für:", + proTips: "PROFI-TIPPS", + tip1Title: "Nutze beide Wallets", + tip1Desc: "Halte Session-Geld in Cashu, Ersparnisse in Lightning", + tip2Title: "Probiere verschiedene Wallets aus", + tip2Desc: "Experimentiere, um herauszufinden, was für dich funktioniert. Jede hat andere Funktionen und Kompromisse", + tip3Title: "Besserer Datenschutz", + tip3Desc: "Die Nutzung mehrerer Wallets bedeutet, dass keine einzelne App deine gesamte Aktivität sieht", + tip4Title: "Erfahrung sammeln", + tip4Desc: "Je mehr Werkzeuge du kennst, desto mehr Optionen hast du. Fang klein an und lerne mit der Zeit", + tldr: "TL;DR:", + tldrDesc: "Es gibt keine „beste“ Wallet – es hängt von deinen Bedürfnissen ab. Probiere beide aus, nutze, was sich richtig anfühlt, und bewahre nicht alle deine sats an einem Ort!" + }, + zap: { + count: "{{count}} Zaps", + connectFirst: "Verbinde zuerst deine Wallet", + connectFirstDesc: "Um Zaps (Bitcoin-Trinkgelder) zu senden, musst du eine Lightning-Wallet verbinden.", + quickSetup: "Schnelleinrichtung (30 Sekunden)", + quickSetupDesc: "Verbinde deine bestehende Lightning-Wallet mit Nostr Wallet Connect (NWC). Keine zusätzlichen Konten nötig.", + connectNwc: "Wallet mit NWC verbinden", + noWallet: "Keine Wallet? So geht's", + skip: "Vorerst überspringen (manuelle Rechnung)", + note: "ℹ️ Hinweis:", + noteDesc: "Du kannst auch ohne verbundene Wallet eine Rechnung erstellen, musst sie aber manuell kopieren, um zu bezahlen.", + payWithWebln: "Mit WebLN bezahlen", + processing: "Wird verarbeitet…", + openInWallet: "In Lightning-Wallet öffnen", + scanHint: "Scanne den QR-Code oder kopiere die Rechnung, um mit einer beliebigen Lightning-Wallet zu bezahlen.", + cashuInstant: "Zahle sofort mit deiner integrierten Wallet", + satsAvailable: "sats verfügbar", + or: "ODER", + customAmount: "Benutzerdefinierter Betrag", + addComment: "Kommentar hinzufügen (optional)", + insufficientBanner: "⚠️ Unzureichendes Cashu-Guthaben. Du brauchst {{amount}} sats mehr. Wechsle zu Lightning oder lade deine Cashu-Wallet auf.", + creatingInvoice: "Rechnung wird erstellt…", + zapAmount: "{{amount}} sats zappen", + zapAmountCashu: "{{amount}} sats mit Cashu zappen", + lightningInvoice: "Lightning-Rechnung", + qrAlt: "Lightning-Rechnungs-QR-Code", + enterAmount: "Gib einen Betrag ein", + enterAmountDesc: "Wähle eine Voreinstellung oder gib eine gültige Anzahl sats ein.", + cashuUnavailable: "Cashu-Wallet nicht verfügbar", + cashuUnavailableDesc: "Deine Cashu-Wallet ist nicht bereit. Wechsle zu Lightning oder öffne zuerst deine Wallet.", + insufficientCashu: "Unzureichendes Cashu-Guthaben", + insufficientCashuDesc: "Du brauchst {{amount}} sats mehr. Wechsle zu Lightning oder lade auf.", + zapSentCashu: "Zap gesendet! 🥜", + zapSentCashuDesc: "{{amount}} sats aus deiner Cashu-Wallet gezappt.", + cashuFailed: "Cashu-Zahlung fehlgeschlagen", + cashuFailedDesc: "Zahlung mit deiner Cashu-Wallet fehlgeschlagen.", + invoiceCopied: "Rechnung kopiert", + invoiceCopiedDesc: "Lightning-Rechnung in die Zwischenablage kopiert", + defaultComment: "Auf SkateSpots gezappt! 🛹", + titleConnect: "Wallet verbinden", + titlePayment: "Lightning-Zahlung", + titleZap: "Zap senden", + descConnect: "Verbinde deine Lightning-Wallet, um Zaps zu senden", + descPayment: "Mit dem Bitcoin Lightning Network bezahlen", + descZap: "Zaps sind kleine Bitcoin-Zahlungen, die den Ersteller dieses Elements unterstützen. Wenn es dir gefallen hat, sende doch einen Zap!", + descZapShort: "Zaps sind kleine Bitcoin-Zahlungen, die Ersteller unterstützen. Sende doch einen Zap!" + }, + zapCrew: { + title: "Die Crew zappen", + desc: "Teile einen Zap gleichmäßig auf {{count}} Crew-Mitglieder mit einer Lightning-Adresse auf.", + noMembers: "Derzeit keine anderen Crew-Mitglieder zum Zappen.", + totalAmount: "Gesamtbetrag", + customTotal: "Benutzerdefinierte Gesamtsumme", + each: "sats pro Person", + rounded: "(gerundet)", + noWallet: "Keine Wallet verbunden – du erhältst pro Mitglied eine Rechnung zur manuellen Zahlung. Verbinde eine Wallet für die Aufteilung mit einem Tipp.", + zapAcross: "{{amount}} sats auf {{count}} verteilen", + sentTo: "⚡ An {{done}}/{{total}} gesendet", + none: "Keine automatischen Zahlungen abgeschlossen", + copyPending: "Kopiere ausstehende Rechnungen, um die Zahlung manuell abzuschließen.", + thanks: "Danke, dass du die Crew unterstützt!", + payingCrew: "Die Crew wird bezahlt…", + defaultComment: "Die {{crew}}-Crew gezappt! 🤘", + sent: "Gesendet", + paying: "Wird bezahlt", + resolving: "Wird aufgelöst", + skipped: "Übersprungen", + failed: "Fehlgeschlagen", + waiting: "Wartend", + copyInvoice: "Rechnung kopieren", + invoiceCopied: "Rechnung kopiert", + invoiceCopiedDesc: "In eine beliebige Lightning-Wallet einfügen" + }, + zapBadges: { + title: "Zap-Abzeichen", + zaps: "Zaps", + satsSent: "sats gesendet", + rank: "Rang", + footnote: "Basierend auf den letzten 30 Tagen an Zaps.", + first: "Erster Zap", + firstHint: "Sende deinen ersten Zap", + regular: "Regelmäßig", + regularHint: "Sende 10 Zaps", + generous: "Großzügig", + generousHint: "Sende 10.000 sats", + patron: "Patron", + patronHint: "Sende 100.000 sats", + top10: "Top 10", + top10Hint: "Erreiche die Top 10 der Unterstützer" + }, + trust: { + unavailable: "Vertrauenswert nicht verfügbar", + yourContent: "Das ist dein Inhalt", + following: "Du folgst diesem Nutzer", + friendOfFriend: "Freund eines Freundes (2 Hops)", + nip05: "NIP-05-verifizierter Nutzer", + unknown: "Unbekannter Nutzer", + help: "Vertrauenswerte helfen, zuverlässige Beitragende in der Skateboarding-Community zu erkennen." + }, + share: { + title: "Profil teilen", + desc: "Richte die Handykamera auf den Code, um {{name}}s Profil zu öffnen.", + qrAlt: "Profil-QR-Code", + copyLink: "Link kopieren", + copyFailed: "Kopieren fehlgeschlagen", + copyFailedDesc: "Der Link konnte nicht kopiert werden.", + shareEllipsis: "Teilen…" + }, + addToCollection: { + title: "In Sammlung speichern", + desc: "Speichere „{{spot}}“ in einer deiner Sammlungen", + loginRequired: "Bitte melde dich an, um Spots in Sammlungen zu speichern", + noCollections: "Du hast noch keine Sammlungen", + createFirst: "Erstelle unten deine erste!", + spotCount: "{{count}} Spots", + alreadySavedTag: "Bereits gespeichert", + alreadySaved: "Bereits gespeichert", + alreadySavedDesc: "„{{spot}}“ ist bereits in „{{collection}}“", + saved: "Spot gespeichert!", + savedDesc: "„{{spot}}“ zu „{{collection}}“ hinzugefügt", + saveFailed: "Speichern fehlgeschlagen", + somethingWrong: "Etwas ist schiefgelaufen", + created: "Sammlung erstellt!", + createdDesc: "„{{spot}}“ zu deiner neuen Sammlung „{{collection}}“ hinzugefügt", + createFailed: "Sammlung konnte nicht erstellt werden", + name: "Name der Sammlung", + descriptionOptional: "Beschreibung (optional)", + creating: "Wird erstellt…", + createAndSave: "Erstellen & speichern", + createNew: "Neue Sammlung erstellen" + }, + collection: { + back: "Zurück zu den Sammlungen", + created: "Erstellt am {{date}}", + deleteTitle: "Sammlung löschen?", + deleteDesc: "Dadurch wird „{{title}}“ dauerhaft gelöscht. Die Spots selbst sind nicht betroffen.", + deleting: "Wird gelöscht…", + deleteFailed: "Sammlung konnte nicht gelöscht werden", + deleted: "Sammlung gelöscht", + deletedDesc: "„{{title}}“ wurde entfernt", + empty: "Keine Spots in dieser Sammlung", + emptyOwner: "Füge Spots zu deiner Sammlung hinzu, indem du bei einem beliebigen Spot auf „In Sammlung speichern“ klickst", + emptyOther: "Diese Sammlung ist leer", + browseSpots: "Spots durchsuchen", + linkCopied: "Link kopiert!", + linkCopiedDesc: "Der Link zur Sammlung wurde in die Zwischenablage kopiert", + map: "Sammlungs-Karte", + removeFailed: "Spot konnte nicht entfernt werden", + shareText: "Schau dir diese Spot-Sammlung an: {{title}}", + spotRemoved: "Spot entfernt", + spotRemovedDesc: "„{{title}}“ wurde aus dieser Sammlung entfernt" + }, + mints: { + title: "Mints", + subtitle: "Durchsuche Cashu-Mints und ihren Zustand. Cashu-Wallet-Vorgänge laufen in der SkateSpots-App.", + searchPlaceholder: "Mints nach Name oder URL suchen…", + onlineOnly: "Nur online", + count: "{{filtered}} von {{total}} Mints", + directoryError: "Das Mint-Verzeichnis konnte nicht geladen werden.", + directoryHint: "Das Verzeichnis wird von der Community betrieben und ist ratenbegrenzt – es kann kurzzeitig nicht verfügbar sein.", + goToWallet: "Zur Wallet", + appOnly: "Das Hinzufügen eines Mints erfolgt in der SkateSpots-App (Cashu gibt es nur in der App).", + noMatch: "Keine Mints entsprechen „{{query}}“.", + footer: "Zustandsdaten aus dem Community-Projekt MintRadar – inoffiziell und möglicherweise veraltet. Prüfe immer die Bedingungen eines Mints, bevor du ihm Gelder anvertraust.", + archived: "Archiviert", + degraded: "Beeinträchtigt", + offline: "Offline", + online: "Online", + terms: "Bedingungen", + reliability: "Zuverlässigkeit", + add: "Hinzufügen", + addToWallet: "Zur Wallet hinzufügen", + copyUrl: "URL kopieren", + openMint: "Mint öffnen", + inWallet: "In deiner Wallet", + addedBadge: "Hinzugefügt", + urlCopied: "Mint-URL kopiert", + added: "Mint hinzugefügt", + addedDesc: "{{host}} ist jetzt in deiner Wallet.", + couldNotAdd: "Mint konnte nicht hinzugefügt werden", + communityRating: "Community-Bewertung", + reliabilityLabel: "Zuverlässigkeit", + uptime: "Verfügbarkeit 24 Std. / 7 Tage", + location: "Standort", + latency: "Latenz", + nuts: "Unterstützte NUTs", + units: "Einheiten", + version: "Version", + ratedBy: "Von {{count}} Personen auf MintRadar mit {{rating}}/5 bewertet.", + noRating: "Noch keine Community-Bewertung auf MintRadar.", + reviewsNote1: "Schriftliche Bewertungen sind nicht Teil des Verzeichnisses –", + openMintRadar: "MintRadar öffnen", + reviewsNote2: "um eine zu lesen oder zu hinterlassen.", + liveness: "Liveness-Audit: {{mints}} Mints und {{melts}} Melts getestet", + livenessErrors: " · {{errors}}/{{total}} aktuelle Fehler", + whatsAMint: "Was ist ein Mint?", + whatsAMintDesc: "Ein Cashu-Mint gibt das Ecash in deiner Wallet aus und löst es ein. Er hält die Bitcoin, die deine Token decken – ein Mint, den du nicht selbst betreibst, ist also einer, dem du vertrauen musst.", + mintWarning: "Mints können offline gehen, Bedingungen ändern oder mit Geldern verschwinden. Halte nur kleine Guthaben, es sei denn, du vertraust dem Betreiber.", + healthDisclaimer: "Zustandsdaten werden von der Community betrieben (MintRadar) – inoffiziell und möglicherweise veraltet." + }, + appShop: { + title: "App-Shop", + subtitle: "SkateSpots-Merch für die Leute, die die Szene am Laufen halten.", + comingSoon: "Demnächst", + wearThe: "Trag die", + scene: "Szene", + heroDesc1: "Merch für die Leute, die das hier am Laufen halten – verkauft", + locally: "lokal, auf Anfrage", + heroDesc2: ". Du schreibst mir, wir klären die Details, und du bezahlst in", + heroDesc3: "– Lightning oder Cashu – bei Abholung. Keine Karten, keine Konten, kein Checkout-Roboter, kein Mittelsmann, der den Drop abgreift.", + requestItem: "Artikel anfragen", + dmHint: "Öffnet eine private, verschlüsselte DM mit mir.", + lightning: "Lightning", + cashu: "Cashu", + localHandover: "Lokale Übergabe", + inTheWorks: "In Arbeit", + notForSale: "noch nicht zum Verkauf", + soon: "bald", + tees: "T-Shirts & Hoodies", + decks: "Decks", + shopTools: "Werkzeuge", + stickerPacks: "Sticker-Packs", + stickerPacksDesc: "Die Packs kommen. Die Designs noch nicht – druck diese zwei jetzt sofort, kostenlos.", + sticker: "Sticker", + stickerTip: "Schwarzer Die-Cut. Auf Stickerpapier drucken, entlang der schwarzen Kante schneiden.", + poster: "Poster", + posterTip: "Druckt auf A3; auf A4 verkleinern (50 %) und es scannt noch gut.", + printableAlt: "SkateSpots {{title}} – druckbar", + print: "Drucken", + printNote1: "Drucke in", + actualSize: "100 % / „Originalgröße“", + printNote2: ", damit die Größe exakt ist und der QR-Code scharf bleibt – er zeigt auf skate-spots.org. Vektordateien, daher skalieren sie ohne unscharf zu werden.", + howBuying: "So funktioniert der Kauf", + dmNotCart: "es ist eine DM, kein Warenkorb", + step1Title: "Schreib mir", + step1Desc: "Sende eine DM mit dem, was du willst – Artikel, Größe, Farbe, was auch immer.", + step2Title: "Wir klären es", + step2Desc: "Preis in sats sowie wo und wann wir uns treffen. Es ist ein Gespräch, kein Checkout.", + step3Title: "In sats bezahlen", + step3Desc: "Lightning oder Cashu bei der Übergabe, dann gehört es dir. Kein Versand, keine Warteräume." + }, + newsletter: { + newIssue: "Neue Ausgabe", + composerTitle: "Newsletter-Ausgabe veröffentlichen", + composerDesc: "Wird als NIP-23-Artikel (Kind 30023) auf dem Community-Relay veröffentlicht. Abonnenten erhalten sie in ihrer Benachrichtigungsglocke. Der Text unterstützt Markdown.", + fieldTitle: "Titel", + identifier: "Bezeichner (Slug)", + leaveBlank: "leer lassen für automatische Generierung", + reusingSlug: "Die Wiederverwendung eines vorhandenen Slugs bearbeitet diese Ausgabe, statt eine neue zu erstellen.", + summary: "Zusammenfassung", + optional: "optional", + coverImage: "Titelbild-URL", + bodyMarkdown: "Text (Markdown)", + characters: "{{count}} Zeichen", + publishIssue: "Ausgabe veröffentlichen", + issuePublished: "Ausgabe veröffentlicht! 🛹", + issuePublishedDesc: "Abonnenten sehen sie in ihrer Benachrichtigungsglocke.", + publishFailed: "Veröffentlichung fehlgeschlagen", + couldNotReachRelay: "Kein Relay erreichbar – prüfe deine Verbindung und versuche es erneut.", + tryAgain: "Bitte versuche es erneut.", + publishedToNostr: "Auf Nostr veröffentlicht", + publishedToast: "Veröffentlicht!", + postedToNostr: "Drop {{number}} auf Nostr gepostet.", + postToNostr: "Auf Nostr posten", + previewLabel: "Vorschau", + editFirst: "Zuerst bearbeiten", + previewNoteDesc: "So wird der Beitrag in den meisten Nostr-Clients erscheinen. Die Formatierung variiert je nach Client.", + editNoteDesc: "Bearbeite den Text des Beitrags unten. Änderungen betreffen nur diese Veröffentlichung – die Quelldatei bleibt unverändert.", + dropNumber: "Drop {{number}}", + publish: "Veröffentlichen", + publishing: "Wird veröffentlicht…", + dropIsOut: "Drop {{number}} ist da", + daysAgo: "vor {{count}} T.", + dismiss: "Ausblenden", + itsMonday: "Es ist Montag", + mondayDesc: "Zeit für den wöchentlichen Newsletter. Ein Klick und die KI schreibt ihn aus dem Git-Log.", + writeDrop: "Drop {{number}} schreiben", + dismissReminder: "Erinnerung ausblenden", + loginPrompt: "Melde dich mit Nostr an, um neue Drops in dein Postfach zu bekommen.", + subscribedToast: "Du bist abonniert! 🛹", + subscribedToastDesc: "Neue Drops landen in deiner Benachrichtigungsglocke unter „News“.", + unsubscribed: "Abbestellt", + unsubscribedDesc: "Du kannst jede Ausgabe hier jederzeit noch lesen.", + checking: "Wird geprüft…", + subscribed: "Abonniert", + unsubscribe: "Abbestellen", + subscribeCta: "Newsletter abonnieren", + archiveSynced: "Archiv mit Nostr synchronisiert", + missingCount: "{{count}} Archiv-Ausgaben noch nicht auf Nostr", + backfillDesc: "Veröffentliche {{list}} als NIP-23-Artikel, damit Abonnenten und Langform-Leser das gesamte Archiv sehen können. Die Seite behält unabhängig davon ihr reichhaltiges Layout.", + backfill: "{{count}} auf Nostr nachtragen", + publishing2: "Wird veröffentlicht…", + publishingLabel: "Wird veröffentlicht…", + backfilled: "{{count}} Ausgaben nachgetragen 🛹", + backfilledDesc: "Das Archiv liegt jetzt für Abonnenten und Leser auf Nostr.", + partialBackfill: "{{published}} veröffentlicht, {{failed}} fehlgeschlagen", + retryFinish: "Zum Abschließen erneut versuchen: {{list}}.", + notLoggedIn: "Nicht angemeldet", + allIssues: "Alle Ausgaben", + brand: "SkateSpots-Newsletter", + digTheDrop: "Gefällt dir der Drop? Zappe ihn und verpasse den nächsten nicht.", + sectionStats: "Die Community in Zahlen", + sectionWhatsNew: "Was ist neu", + sectionSpotOfWeek: "Spot der Woche", + sectionCommunity: "Community", + sectionSupport: "Unterstütze das Projekt", + sectionLatestDrops: "Neueste Drops · Live von Nostr", + mappedBy: "Kartiert von", + viewOnMap: "Auf der Karte ansehen", + noSpotPicked: "Diese Woche kein Spot ausgewählt. Reiche deinen ein und vielleicht schafft er es in den nächsten Drop.", + browseMap: "Die Karte durchsuchen", + spotMap: "Spot-Karte", + statsBadge: "Statistiken", + supportDesc: "100 % Open Source, von der Community finanziert, keine Werbung, keine Investoren. Wenn es nützlich ist, zappe es oder unterstütze es auf Angor.", + readFull: "Die vollständige Ausgabe lesen", + joinSkaters: "Schließe dich {{count}} Skatern an, die die Drops erhalten", + weeklyDrops: "Wöchentliche Drops", + tagline: "Ein wöchentlicher Newsletter · verschickt, wann immer wir verdammt nochmal wollen", + freeNote: "Kostenlos. Angetrieben von Nostr – dein Abo lebt auf deinen Schlüsseln und folgt dir über Geräte hinweg. Neue Drops landen in deiner Benachrichtigungsglocke.", + live: "Live", + builtOn: "Gebaut auf", + openSource: "Open Source", + supportUs: "Unterstütze uns", + freeToSkate: "Du bist frei, Skateboard zu fahren" + }, + stats: { + subtitle: "Live-Metriken direkt aus dem Nostr-Netzwerk. Transparent, dezentral, von jedem überprüfbar.", + dataSource: "Datenquelle:", + updated: "aktualisiert {{age}}", + refresh: "Aktualisieren", + partial: "Nicht alle Relays erreichbar – diese Zahlen könnten unvollständig sein.", + error: "Das Relay ist derzeit nicht erreichbar. Statistiken werden geladen, sobald die Verbindung wiederhergestellt ist.", + atAGlance: "Die Community auf einen Blick", + skateSpots: "Skate-Spots", + listedShops: "Gelistete Shops", + events: "Events", + mappers: "Mapper", + uniqueContributors: "einzigartige Beitragende", + labHeader: "The Lab · Kreative & Services", + total: "{{count}} insgesamt", + coaches: "Coaches", + filmers: "Filmer", + editors: "Editoren", + photographers: "Fotografen", + builders: "Erbauer", + artists: "Künstler", + graffiti: "Graffiti", + tattoo: "Tattoo", + trainers: "Trainer", + musicians: "Musiker", + judges: "Juroren", + organizers: "Organisatoren", + barbers: "Barbiere", + showFewer: "Weniger anzeigen", + showAllCrafts: "Alle 13 Handwerke anzeigen", + community: "Community", + tours: "Touren", + crews: "Crews", + marketplace: "Marktplatz", + liveListings: "Live-Angebote", + tradesRecorded: "Erfasste Trades", + satsTraded: "Gehandelte sats", + zapsToMappers: "Zaps an Mapper", + tradesNote1: "gegenseitige Trades über", + tradesNote2: "Personen. sats werden von den Händlern selbst angegeben – die App kann eine Zahlung außerhalb der App nicht beobachten – daher zählt die Schlagzeile nur", + mutual: "gegenseitige", + tradesNote3: "Trades mit einer Obergrenze pro Paar; die reine Angabe ist", + tradesNote4: "sats. „Zaps an Mapper“ zählt nur Belege, die an unsere Top-Beitragenden gerichtet sind – es ist", + not: "nicht", + tradesNote5: "das globale Zap-Volumen.", + byRegion: "Spots & Shops nach Region", + resolving: "{{count}} nicht getaggte Standorte werden aus ihren Koordinaten aufgelöst… einmalig, dann auf diesem Gerät zwischengespeichert.", + topCountries: "Top-Länder", + topCities: "Top-Städte", + other: "Sonstige", + otherCountriesTitle: "Länder außerhalb der Top 6", + otherCitiesTitle: "Städte außerhalb der Top 6", + uncategorised: "Nicht kategorisiert", + uncategorisedTitle: "Kein Stadt-/Land-Tag", + regionNote1: "Zählt", + spotsAndShops: "Spots & Shops", + regionNote2: ", nicht Skater – aus dem jeweiligen Stadt-/Land-Tag oder, wenn keiner vorhanden ist, aus den Koordinaten des Pins abgeleitet (auf deinem Gerät zwischengespeichert; Länder nach ISO-Code gruppiert, falls vorhanden), nur Community-Relay, ohne moderationsversteckte Inhalte.", + ofTotal: "{{count}} von {{total}}", + regionNote3: "Standorte haben kein Standort-Tag und erscheinen als „Nicht kategorisiert“.", + growth: "Wachstum im Zeitverlauf", + chartCumulativeTitle: "Kartierte Spots (kumulativ)", + chartCumulativeDesc: "Gesamtzahl der im Zeitverlauf zur Karte hinzugefügten Spots", + chartMonthlyTitle: "Monatliche Aktivität", + chartMonthlyDesc: "Jeden Monat veröffentlichter neuer Inhalt", + chartMappersTitle: "Aktive Mapper / Monat", + chartMappersDesc: "Einzigartige Beitragende, die monatlich veröffentlichen", + chartMixTitle: "Inhaltsmix", + chartMixDesc: "Aufschlüsselung nach Inhaltstyp (gesamter Zeitraum)", + noData: "Noch keine Daten", + topMappers: "Top-Mapper", + mostSpots: "– die meisten Spots hinzugefügt", + noMapperData: "Noch keine Mapper-Daten", + topShops: "Top-Shops", + mostShops: "– die meisten Shops hinzugefügt", + shopCount: "{{count}} Shops", + noShopData: "Noch keine Shop-Daten", + supporters: "Community-Unterstützer", + fundedTitle: "Von der Community finanziert", + fundedDesc1: "Dezentrales Bitcoin-Crowdfunding über Angor.", + fundedDesc2: "Keine Werbung, keine Investoren, kein Datenverkauf.", + backAngor: "Unterstütze uns auf Angor", + communityLink: "Community →", + footer1: "Alle Daten werden live abgerufen von", + footer2: "– einem öffentlichen Nostr-Relay.", + footer3: "Jedes Event wird von seinem Ersteller signiert und ist kryptografisch überprüfbar.", + footer4: "Keine Zahl kann gefälscht werden.", + spots: "Spots", + shops: "Shops", + lab: "Lab", + thisMonth: "+{{count}} diesen Monat", + fromActive: "{{count}} von aktiven Konten", + viewAll: "Alle ansehen", + spotCount: "{{count}} Spots" + }, + leaderboard: { + mapEarn: "Kartieren & verdienen", + helpMap: "HILF MIT, DIE WELT ZU KARTIEREN", + intro: "Füge Spots und Shops hinzu und werde von dankbaren Skatern gezappt. Top-Beitragende können Bonusbelohnungen erhalten!", + howItWorks: "So funktioniert es", + step1Title: "1. Kartieren", + step1Desc: "Füge Spots & Shops mit Fotos und Details hinzu", + step2Title: "2. Zaps verdienen", + step2Desc: "Skater, die deine Spots nützlich finden, geben dir Trinkgeld", + step3Title: "3. Bonusbelohnungen", + step3Desc: "Top-Mapper können Bonusbelohnungen aus unserem Fonds erhalten", + proTips: "💡 Profi-Tipps für mehr Zaps:", + tipPhotos: "Füge 3+ Fotos hinzu", + tipDescriptions: "Schreibe ausführliche Beschreibungen", + tipLocation: "Genaue Position", + mapShop: "Einen Shop kartieren", + mapShopDesc: "Skate-Shops, Board-Läden", + mapSpot: "Einen Spot kartieren", + mapSpotDesc: "Parks, Street-Spots, DIY", + shops: "Shops", + spotsLower: "Spots", + shopsLower: "Shops", + contributions: "Beiträge", + yourRanking: "Dein Ranking", + spotsShops: "{{spots}} Spots • {{shops}} Shops", + totalLower: "insgesamt", + overall: "Gesamt", + noContributions: "Noch keine Beiträge. Sei der Erste!", + addFirstSpot: "Ersten Spot hinzufügen", + noShops: "Noch keine Shops kartiert", + addFirstShop: "Ersten Shop hinzufügen", + noSpots: "Noch keine Spots kartiert", + poweredBy: "Angetrieben von Community-Zaps", + poweredByDesc: "Wenn du einen Spot hilfreich findest, zappe den Mapper! Das ist der beste Weg, Danke zu sagen und mehr Beiträge zu fördern.", + you: "Du", + zapTitle: "Zap-Ranglisten", + zapSubtitle: "Die Spots, die die meiste Liebe bekommen – und die Skater, die sie geben.", + thisWeek: "Diese Woche", + thisMonth: "Diesen Monat", + allTime: "Allzeit", + topZappedSpots: "Meistgezappte Spots", + noZaps: "In diesem Zeitraum noch keine Zaps. Sei der Erste – triff das ⚡ bei einem Spot, den du liebst.", + topSupporters: "Top-Unterstützer", + noZapsSent: "In diesem Zeitraum noch keine Zaps gesendet.", + fromTop10: "⚡ {{amount}} sats von den Top 10", + supporter: "Unterstützer", + skateShop: "Skate-Shop", + skateSpot: "Skate-Spot" + }, + supporters: { + our: "UNSERE", + community: "COMMUNITY", + heroDesc: "SkateSpots wird von und für die Community gebaut. Unterstützer, Mitwirkende, Partner und Freunde, die das hier kostenlos und dezentral halten.", + backAngor: "Unterstütze uns auf Angor", + backers: "Unterstützer", + backersDesc: "Skater, die SkateSpots unterstützt haben – On-Chain-Finanzierung über Angor und Lightning-Zaps an das Projekt.", + sourceAngor: "Angor", + supportersTotals: "{{count}} Unterstützer · {{angor}} sats über Angor · {{zap}} sats gezappt", + quietNote: "Plus alle, die still gespendet haben – danke. ❤️", + silentTitle: "Privat On-Chain (Silent Payments)", + silentDesc: "Ein Name, eine frische Adresse für jede Zahlung – On-Chain über Silent Payments oder Lightning aus demselben Datensatz. Nichts wiederverwenden, nichts verknüpfen.", + silentCopyName: "Namen kopieren", + silentCopied: "Kopiert", + silentWallets: "Benötigt eine Wallet, die Zahlungsnamen / Silent Payments unterstützt: Sparrow, Cake, Dana, Phoenix, BlueWallet, Wasabi, Nunchuk oder BitBox02.", + wayLightningTitle: "Sofort & öffentlich", + wayLightningDesc: "Zappe SkateSpots oder zahle still. Funktioniert ohne Anmeldung.", + waySilentTitle: "Privat On-Chain", + waySilentDesc: "Ein Silent-Payments-Name – eine neue Adresse für jede Zahlung.", + wayAngorTitle: "Finanziere den Aufbau", + wayAngorDesc: "Angor – gestufte Freigabe, rückzahlbar über 100k sats.", + donateTitle: "Unterstütze SkateSpots", + donateDesc: "Drei Wege, drei Gründe – wähle, was zu dir passt. Jeder sat hält die Karte kostenlos, werbefrei und Open Source.", + donatePageLink: "Die einfache Spenden-Seite öffnen", + updatedAt: "Aktualisiert {{when}}", + tiersNote: "Stufen: Unterstützer unter 100k sats · Patron 100k–1M · Legende 1M+", + tierEmpty: "Noch niemand – sei der Erste.", + joinSupporters: "Schließe dich {{count}} Unterstützern an", + showAll: "Alle {{count}} anzeigen", + showLess: "Weniger anzeigen", + impactSeeStats: "Das ganze Bild sehen →", + impactAsOf: "live von den Community-Relays", + anonymousBacker: "Anonymer Unterstützer", + beFirstBacker: "Noch keine öffentlichen Unterstützer – sei der Erste.", + backersTotal: "{{count}} Unterstützer · {{amount}} sats gesammelt", + verifiedOnChain: "On-Chain verifiziert", + supportedBy: "Unterstützt von {{count}}", + tierSupporter: "Unterstützer", + tierPatron: "Patron", + tierLegend: "Legende", + topZappers: "Haben SkateSpots gezappt", + topZappersDesc: "Skater, die einen öffentlichen Zap direkt an das Projekt gesendet haben. Stille Zahlungen sind nicht aufgeführt.", + paysFor: "Wofür deine Unterstützung bezahlt", + paysForDesc: "Wohin jeder sat geht – keine Gehälter, keine Büros, keine Werbung.", + payRelay: "Relay-Hosting", + payDomain: "Domain & TLS", + payAi: "KI / ContextVM-Node", + payDev: "Entwicklungszeit", + payOps: "Betrieb", + payMarketing: "Marketing", + payRelayDesc: "Hält die Karte online und widerstandsfähig.", + payDomainDesc: "Der Name, das Zertifikat, die sichere Verbindung.", + payAiDesc: "Sasquatch, der Community-Guide.", + payDevDesc: "SkateSpots bauen und reparieren.", + payOpsDesc: "Die undankbare Arbeit, die es am Laufen hält.", + payMarketingDesc: "Neue lokale Szenen und Skateshops erreichen.", + impact: "Wirkung bisher", + impactDesc: "Was die Community aufgebaut hat – finanziert von Skatern.", + impactSpots: "Spots", + impactCrews: "Crews", + impactEvents: "Events", + impactLab: "Lab-Profis", + impactShops: "Shops", + impactMappers: "Mapper", + support: "Unterstützen", + supportDesc: "Finanziere SkateSpots auf Angor – dezentrales, On-Chain-Bitcoin-Crowdfunding. Kein Mittelsmann, kein KYC.", + collaborators: "Mitwirkende", + collaboratorsDesc: "Menschen, die SkateSpots aktiv aufbauen – Entwickler, Designer, Relay-Betreiber.", + partners: "Partner", + partnersDesc: "Organisationen und Projekte, mit denen wir eng zusammenarbeiten.", + friends: "Freunde", + friendsDesc: "Menschen, mit denen wir gut klarkommen.", + backTitle: "Unterstütze das Projekt auf Angor", + backDesc: "Angor ist dezentrales, On-Chain-Bitcoin-Funding auf Basis von Nostr – deine Gelder bleiben in deiner Kontrolle, werden in Stufen freigegeben, ohne dass ein Verwalter den Topf hält. Beiträge bis 100.000 sats funktionieren wie eine Spende (kein Rückgewinnungs-Handshake); größere Beträge sind Investitionen, deren nicht verwendete Gelder zurückgewonnen werden können. Jeder sat fließt in Entwicklung, Relay-Hosting und darin, SkateSpots für jeden Skater auf der Erde kostenlos zu halten.", + donateNote: "Lieber eine direkte Spende? ⚡ Zappe unten – nichts zurückzuzahlen, nichts zurückzugewinnen.", + openAngor: "Angor öffnen", + orZap: "oder ⚡ zappe jeden Spot, jede Crew oder jeden Creator direkt in der App", + wantCollaborate: "Möchtest du mitwirken?", + wantCollaborateDesc: "Entwickler, Designer, Skater mit Fähigkeiten – melde dich.", + viewNostrHub: "Auf NostrHub ansehen", + wantPartner: "Möchtest du mit SkateSpots zusammenarbeiten? Melde dich auf Nostr.", + comingSoon: "Demnächst", + wantListed: "Möchtest du hier aufgeführt werden?", + wantListedDesc: "Sende ein Logo (PNG/WebP, transparenter Hintergrund, mind. 200×200px) und deine URL per DM auf Nostr – nur, wenn du die Vibes hast.", + whyTitle1: "Warum wir", + whyTitle2: "Unterstützung brauchen", + whyDesc: "SkateSpots ist 100 % kostenlos, Open Source und auf Nostr gebaut – einem dezentralen Protokoll ohne zentralen Server, den man abschalten könnte. Keine Werbung, kein Datenverkauf, keine Investoren. Jeder sat fließt direkt in Entwicklung, Relay-Hosting und darin, das hier für jeden Skater auf der Erde kostenlos zu halten.", + why1Title: "Nostr-nativ", + why1Desc: "Kein zentraler Server. Deine Daten leben auf Relays, die du wählst.", + why2Title: "Bitcoin-betrieben", + why2Desc: "Verdiene sats fürs Kartieren von Spots. Gib sie in lokalen Shops aus.", + why3Title: "Für immer kostenlos", + why3Desc: "Open Source, keine Paywalls, kein Tracking, keine VC-Finanzierung.", + thankYou: "Danke. Jeder sat hält die Spots auf der Karte. 🛹⚡", + license: "Lizenz", + faq: "FAQ" + }, + admin: { + confirmed: "Bestätigt", + title: "Prüfwarteschlange", + subtitle: "Spots, Shops, Events, Touren und Ausrüstung, die die Spam-Signale auslösen. Verbergen und Bestätigen sind weiche, umkehrbare Labels; Meldungen stehen an erster Stelle. Nichts wird gelöscht.", + tabReports: "Meldungen", + tabSpots: "Spots", + tabShops: "Shops", + tabEvents: "Events", + tabTours: "Touren", + tabGear: "Ausrüstung", + tabCrews: "Crews", + tabLab: "Lab", + tabClaims: "Ansprüche", + nothingToReview: "Nichts zu prüfen – nichts dieser Art löst die Spam-Signale aus.", + hideActioned: "Bearbeitete verbergen", + showActioned: "Bearbeitete anzeigen ({{count}})", + undoAll: "Alle {{count}} rückgängig machen", + undoAllTitle: "Jedes Urteil in diesem Tab rückgängig machen?", + undoAllDesc: "Dadurch wird jedes Element auf neutral zurückgesetzt – nicht verborgen, nicht bestätigt. Es veröffentlicht ein öffentliches Label pro Element, mit Amber erhältst du also {{count}} Genehmigungsbildschirme.", + undoCount: "{{count}} rückgängig machen", + undo: "Rückgängig", + confirm: "Bestätigen", + hide: "Verbergen", + hideIt: "Verbergen", + hideForEveryone: "Für alle verbergen?", + hideForEveryoneDesc: "Dadurch wird das Element für jeden SkateSpots-Nutzer aus dem Durchsuchen und der Suche entfernt. Es ist ein öffentliches, umkehrbares Label – du kannst es aus dieser Warteschlange rückgängig machen.", + hidden: "Verborgen", + hiddenDesc: "Über ein öffentliches Label aus der App entfernt. Umkehrbar.", + couldNotHide: "Konnte nicht verbergen", + notASpot: "Kein Skate-Spot", + lookAtIt: "Ansehen" + }, + profile: { + nip05Verified: "NIP-05 verifiziert", + nip05NotVerified: "NIP-05 nicht gegen diesen Schlüssel verifiziert", + message: "Nachricht", + zapsReceived: "erhaltene Zaps", + memberSince: "Mitglied seit", + badges: "Abzeichen", + sponsorsSupport: "Sponsoren & Unterstützung", + skater: "Skater", + stance: "Stance", + skating: "Skating", + homeSpot: "Heimspot", + basedIn: "Ansässig in", + addSkateDetails: "Füge deine Skate-Details hinzu", + addSkateDetailsDesc: "Lege Stance, Stile & Level fest, um im Skater-Verzeichnis zu erscheinen.", + spotsAdded: "Hinzugefügte Spots", + shopsAdded: "Hinzugefügte Shops", + noSpots: "Du hast noch keine Spots hinzugefügt", + noSpotsDesc: "Setze deinen lokalen Spot auf die Karte →", + stash: "Stash", + gear: "Ausrüstung", + crews: "Crews", + info: "Info", + lightning: "Lightning", + silentPayment: "Silent Payment", + coordinator: "Koordinator", + coordinatorAdded: "Koordinator hinzugefügt", + add: "Hinzufügen", + messagePrivately: "Privat anschreiben", + founder: "Gründer", + member: "Mitglied", + supportSkater: "Diesen Skater unterstützen", + supportSkaterDesc: "Sende ein Trinkgeld, um dich für die Beiträge zu bedanken" + }, + index: { + joinCommunity: "Tritt der Community bei, um Spots hinzuzufügen, Events zu erstellen und mehr", + topZapped: "MEISTGEZAPPT", + topZappedDesc: "Meistunterstützte Spots diesen Monat", + leaderboard: "Rangliste", + newHere: "NEU HIER?", + newHereDesc: "Erstelle ein kostenloses Konto, um Spots hinzuzufügen, Events beizutreten, dich mit Skatern zu vernetzen und Teil der Community zu werden. Keine E-Mail erforderlich.", + followFounder: "Folge dem Gründer", + followFounderDesc: "Halte den Avatar 3 Sekunden lang gedrückt, um zu folgen und über neue Funktionen und Events auf dem Laufenden zu bleiben!", + createAccount: "Konto erstellen", + accountWorks: "Dein Konto funktioniert in allen Apps im Netzwerk", + footerTagline: "Open Source • Community-Eigentum • Keine Werbung" + }, + stash: { + title: "Mein Stash", + loginDesc: "Dein privates Ausrüstungsinventar. Verfolge, was du besitzt, lege Preise fest und teile selektiv mit Händlern.", + encrypted: "Verschlüsselt", + syncsEverywhere: "Synchronisiert überall", + p2pTrading: "P2P-Handel", + encryptionRequired: "Verschlüsselung erforderlich", + encryptionRequiredDesc: "Dein Stash ist zum Schutz der Privatsphäre verschlüsselt. Bitte verwende einen Signer, der NIP-44-Verschlüsselung unterstützt (wie Alby, nos2x oder Amber).", + learnSigners: "Mehr über Signer erfahren", + select: "Auswählen", + stash: "Stash", + wishlist: "Wunschliste", + allCategories: "Alle Kategorien", + sortNewest: "Neueste", + sortValue: "Wert", + sortCondition: "Zustand", + sortAz: "A–Z", + friendsOnly: "Nur Freunde", + addToWishlist: "Zur Wunschliste hinzufügen", + addItemToStash: "Artikel zum Stash hinzufügen", + addItem: "Artikel hinzufügen", + editItem: "Artikel bearbeiten", + publicStash: "Öffentlicher Stash", + listView: "Listenansicht", + gridView: "Rasteransicht", + uploading: "Wird hochgeladen…", + addPhotos: "Fotos hinzufügen", + wishlistReqPlaceholder: "Besondere Anforderungen…", + itemDescPlaceholder: "Beschreibe den Artikel, eventuelle Schäden…", + itemsCount: "{{count}} Artikel", + wishlistEmpty: "Wunschliste leer", + wishlistEmptyDesc: "Füge Ausrüstung hinzu, nach der du suchst – wir gleichen sie mit den Stashes deiner Freunde ab.", + stashEmpty: "Dein Stash ist leer", + stashEmptyDesc: "Beginne, deine Ausrüstung zu erfassen. Decks, Trucks, Schuhe – einmal hinzufügen, überall über Nostr darauf zugreifen.", + noMatch: "Keine Artikel entsprechen", + noMatchDesc: "Versuche, deine Filter anzupassen.", + backupTransfer: "Backup & Übertragung", + backupDesc: "Dein Stash ist auf Nostr verschlüsselt. Bewahre eine Kopie auf, die du kontrollierst – ein totes Relay oder ein neues Konto kann deine Ausrüstungsliste nicht verlieren.", + exportTitle: "Verschlüsseltes Backup", + exportDialogDesc: "Speichere {{count}} Artikel in einer Datei. Verschlüssele sie, damit eine durchgesickerte Datei kein Leck ist.", + modePassword: "Passwort", + modeKey: "Mein Schlüssel", + password: "Passwort", + confirmPassword: "Passwort bestätigen", + passwordHint: "Verwende mindestens 8 Zeichen. Es gibt keine Wiederherstellung – vergiss es nicht.", + keyModeHint: "Mit deinem Nostr-Schlüssel verschlüsselt. Nur dieser Schlüssel kann es öffnen – nichts zu merken.", + exportPlaintext: "Ohne Verschlüsselung exportieren", + pwTooShort: "Verwende mindestens 8 Zeichen.", + pwMismatch: "Passwörter stimmen nicht überein.", + exportFailed: "Das Backup konnte nicht erstellt werden.", + unlockTitle: "Backup entsperren", + unlockDesc: "Dieses Backup ist passwortgeschützt.", + unlock: "Entsperren", + unlockFailed: "Das Backup konnte nicht entsperrt werden.", + show: "Anzeigen", + hide: "Verbergen", + strength: "Passwortstärke", + strengthWeak: "Schwach", + strengthFair: "Mittel", + strengthGood: "Gut", + strengthStrong: "Stark", + filenameWillSave: "Wird als {{name}} gespeichert", + export: "Exportieren", + import: "Importieren", + exported: "Stash exportiert", + exportedDesc: "{{count}} Artikel in einer Datei gespeichert.", + noItemsInFile: "In dieser Datei wurden keine Artikel gefunden.", + noValidItems: "In dieser Datei wurden keine gültigen Artikel gefunden.", + imported: "{{count}} Artikel importiert", + importSkipped: "{{count}} übersprungen (bereits in deinem Stash).", + importAdded: "Zu deinem Stash hinzugefügt.", + importFailed: "Import fehlgeschlagen", + couldNotRead: "Diese Datei konnte nicht gelesen werden.", + updateFailed: "Dein Stash konnte nicht aktualisiert werden", + updatedCount: "{{count}} Artikel aktualisiert", + markedForSale: "{{count}} zum Verkauf markiert", + unmarkedCount: "{{count}} Markierung entfernt", + removedCount: "{{count}} Artikel entfernt", + selectedCount: "{{count}} ausgewählt", + selectAll: "Alle auswählen", + visibilityPublic: "Öffentlich", + visibilityPrivate: "Privat", + forSale: "Zu verkaufen", + remove: "Entfernen", + bulkDeleteTitle: "{{count}} Artikel entfernen?", + bulkDeleteDesc: "Dies schreibt deinen verschlüsselten Stash in einer Signatur neu und kann hier nicht rückgängig gemacht werden. Exportiere zuerst ein Backup, wenn du unsicher bist.", + deleteTitle: "Aus deinem Stash entfernen?", + deleteDesc: "„{{title}}“ wird aus deinem Stash entfernt", + deleteDescPublic: " und aus deiner öffentlichen Auslage entfernt", + deleteUndone: ". Dies kann nicht rückgängig gemacht werden.", + deleteDescGeneric: "Dieser Artikel wird aus deinem Stash entfernt. Dies kann nicht rückgängig gemacht werden.", + listOnMarketplace: "Auf dem Marktplatz anbieten", + noPriceSet: "Kein Preis festgelegt", + categoryLabel: "Kategorie", + photosLabel: "Fotos", + willingToSell: "Verkaufsbereit", + willingToTrade: "Tauschbereit", + whereIsThisItem: "Wo ist dieser Artikel?", + visibilityLabel: "Sichtbarkeit", + visibilityPrivateOnlyYou: "Privat – nur du", + visibilityFriendsMutual: "Freunde – gegenseitige Follows", + visibilityPublicAnyone: "Öffentlich – jeder", + visibilityFriends: "Freunde", + brandLabel: "Marke", + sizeLabel: "Größe", + descriptionLabel: "Beschreibung", + conditionLabel: "Zustand", + itemName: "Artikelname", + saveChanges: "Änderungen speichern", + listItemDialogTitle: "„{{title}}“ anbieten", + pickUpWhere: "Wo können Käufer diesen Artikel abholen?", + linkToSpot: "Mit einem Skate-Spot verknüpfen", + linkToSpotDesc: "Am besten für lokale Verkäufe • Erscheint auf der Spot-Seite & Karte", + recommended: "Empfohlen", + noSpecificSpot: "Kein bestimmter Spot", + noSpecificSpotDesc: "Nur auf der Marktplatz-Seite sichtbar", + tipLinkedSpots: "💡 Tipp: Mit Spots verknüpfte Angebote sind für lokale Skater leichter zu finden.", + anyoneCanSee: "Jeder kann diese in deinem Profil sehen.", + seeWhatOthersSee: "Sieh, was andere sehen", + inventory: "Inventar", + publicWantsNote: "Öffentliche Gesuche werden als „gesucht“-Anzeigen im Marktplatz veröffentlicht, damit Verkäufer dich finden.", + howItWorks: "So funktioniert es", + tapToMarketplace: "Tippen, um zum Marktplatz zu gelangen →", + viewWishlist: "Wunschliste ansehen", + tipEditItems: "Artikel mit der Stift-Schaltfläche bearbeiten", + tipListForSale: "Mit der Shop-Schaltfläche zum Verkauf anbieten", + tipAddPhotos: "Füge Fotos hinzu für bessere Tauschangebote", + tipKeySyncs: "Nostr-Schlüssel synchronisiert auf alle Geräte", + itemsReadyToSell: "{{count}} Artikel verkaufsbereit" + } + } +}; export default deBatch4; diff --git a/src/i18n/de/batch5.ts b/src/i18n/de/batch5.ts index bf05559..f2674ef 100644 --- a/src/i18n/de/batch5.ts +++ b/src/i18n/de/batch5.ts @@ -1,4 +1,1597 @@ -/** de — batch 5. Filled by the translation pass; empty until then. */ -const deBatch5 = {}; +/** de — batch 5. Filled by the 2026-10-07 German translation pass. */ +const deBatch5 = { + labUi: { + activeCount: "{{count}} aktiv", + addMusicProfile: "Musik-Profil hinzufügen", + all: "Alle", + clearAll: "Alle zurücksetzen", + collective: "Kollektiv", + filters: "Filter", + following: "Folge ich", + getRiderCard: "Rider Card holen", + judgeEvents: "Events bewerten", + justASkater: "Nur ein", + labForServices: "The Lab ist für Services. Durchstöbere die gesamte Skater-Community und mach mit", + loginToOffer: "Melde dich an, um Services anzubieten", + newest: "Neueste", + noResults: "Keine Ergebnisse", + offer: "Anbieten", + offerBuilding: "Bau anbieten", + offerCoaching: "Coaching anbieten", + offerCuts: "Schnitte anbieten", + offerDesignArt: "Design / Kunst anbieten", + offerEditing: "Editing anbieten", + offerFilming: "Filmen anbieten", + offerGraffiti: "Graffiti anbieten", + offerPhotography: "Fotografie anbieten", + offerServices: "Services anbieten", + yourProfiles: "Deine Lab-Profile", + preview: { + button: "Vorschau", + title: "Live-Vorschau", + desc: "So sieht dein {{noun}}-Profil aus, sobald es veröffentlicht ist.", + untitled: "Dein Name", + noBio: "Noch keine Bio — schreib eine Zeile dazu, was du anbietest.", + years: "{{count}} Jahre Erfahrung", + portfolio: "Portfolio", + note: "Nur Vorschau — es ist noch nichts veröffentlicht.", + }, + draft: { + title: "Du hast einen ungespeicherten Entwurf", + body: "Mach da weiter, wo du aufgehört hast — nichts wird veröffentlicht, bis du auf Veröffentlichen drückst.", + resume: "Entwurf fortsetzen", + discard: "Entwurf verwerfen", + }, + progress: { + title: "Profil-Vollständigkeit", + count: "{{done}} von {{total}} erledigt", + photo: "Foto", + bio: "Bio", + skills: "Skills", + rate: "Preis", + location: "Standort", + contact: "Kontakt", + }, + wizard: { + identity: "Identität", + offer: "Was du anbietest", + rates: "Preise", + contact: "Kontakt", + media: "Medien", + }, + offerTattoo: "Tattoo anbieten", + offerTraining: "Training / Physio anbieten", + organizeEvents: "Events organisieren", + resultsMany: "{{count}} Ergebnisse", + resultsOne: "{{count}} Ergebnis", + searchCityPlaceholder: "Stadt…", + searchNamePlaceholder: "Name, Bio…", + showResults: "Ergebnisse anzeigen", + showResultsActive: "Ergebnisse anzeigen · {{count}} aktiv", + skaterWord: "Skater", + sortBy: "Sortieren nach", + theCrew: "Die Crew", + topRated: "Top bewertet", + trusted: "Vertrauenswürdig", + trustLevel: "Vertrauensstufe", + yearsExp: "{{count}} J. Erfahrung", + tabCoaches: "Coaches", + tabFilmers: "Filmer", + tabPhoto: "Foto", + tabEditors: "Editoren", + tabBuilders: "Builder", + tabArtists: "Künstler", + tabGraffiti: "Graffiti", + tabTattoo: "Tattoo", + tabTrainers: "Trainer", + tabMusic: "Musik", + tabJudges: "Juroren", + tabOrganizers: "Organisatoren", + tabBarbers: "Barbiere", + filterSkillsToLearn: "Skills zum Lernen", + filterContentType: "Inhaltstyp", + filterEquipmentStyle: "Ausrüstung & Stil", + filterServices: "Services", + filterCamera: "Kamera", + filterLenses: "Objektive", + filterLighting: "Beleuchtung", + filterSupportRig: "Support & Rig", + filterStyle: "Stil", + filterWhatTheyBuild: "Was sie bauen", + filterMaterialsTrade: "Materialien & Handwerk", + filterProjectScale: "Projektumfang", + filterWhatTheyMake: "Was sie herstellen", + filterMedium: "Medium", + filterSoftwareTools: "Software & Tools", + filterWorkContext: "Arbeitskontext", + filterMethod: "Methode", + filterFocus: "Schwerpunkt", + filterInjuriesTreated: "Behandelte Verletzungen", + filterCredentialsSetting: "Qualifikationen & Umfeld", + filterGenre: "Genre", + filterInstrumentsRole: "Instrumente & Rolle", + filterEventFormats: "Event-Formate", + filterSpecialty: "Spezialität", + filterLevelCircuit: "Level / Circuit", + filterEventTypes: "Event-Typen", + filterWhatYouHandle: "Was du übernimmst", + filterScale: "Umfang", + filterWhatTheyOffer: "Was sie anbieten", + filterSignatureStyles: "Signatur-Stile", + filterSetting: "Umgebung", + filterEditType: "Edit-Typ", + role: { + coach: "Coach", + filmer: "Filmer", + builder: "Builder", + editor: "Video Editor", + photographer: "Photographer", + skater: "Skater", + }, + empty: { + footer: "Fragen? Schau in die FAQ →", + loginSuffix: "um ein Profil zu erstellen.", + coachesTitle: "Noch keine Coaches", + coachesBody: "Sei der Erste, der Skateboard-Coaching in deiner Gegend anbietet.", + filmersTitle: "Noch keine Filmer", + filmersBody: "Sei der Erste, der Skate-Filming anbietet — Clips, ganze Parts, Contest-Berichterstattung und mehr.", + photographersTitle: "Noch keine Photographers", + photographersBody: "Sei der Erste, der Skate-Fotografie in deiner Gegend anbietet — Action-Shots, Sequenzen, Editorial und mehr.", + editorsTitle: "Noch keine Video-Editoren", + editorsBody: "Sei der Erste, der Skate-Video-Editing anbietet.", + buildersTitle: "Noch keine Builder", + buildersBody: "Sei der Erste, der seinen Rampen-, Park- oder DIY-Bau einträgt — Beton, Holz, Rails und mehr.", + artistsTitle: "Noch keine Künstler", + artistsBody: "Sei der Erste, der Board-Grafiken, Logos, Poster und Merch für die Szene anbietet.", + graffitiTitle: "Noch keine Graffiti-Künstler", + graffitiBody: "Sei der Erste, der Pieces, Murals und Skatepark-Kunst in deiner Gegend anbietet.", + tattooTitle: "Noch keine Tattoo-Künstler", + tattooBody: "Sei der erste Tattoo-Künstler der Skate-Kultur, der sich einträgt — Flash, Custom, Fine Line und mehr.", + trainersTitle: "Noch keine Trainer", + trainersBody: "Sei der erste Trainer oder Physio, der Skatern hilft, stark zu werden und gesund zu bleiben.", + musiciansTitle: "Noch keine Musiker", + musiciansBody: "Skaten und Musik machen? Füge deine Band oder dein Soloprojekt hinzu — Genres, Instrumente und Links.", + judgesTitle: "Noch keine Juroren", + judgesBody: "Veranstaltest du einen fairen Contest? Trage dich ein, um Game of S.K.A.T.E., Best-Trick-Jams, Contests und Tourstopps zu bewerten.", + organizersTitle: "Noch keine Organisatoren", + organizersBody: "Veranstaltest du Jams, Comps, Meetups oder Demos? Trage dich ein, damit Skater dich finden und buchen können.", + barbersTitle: "Noch keine Barbiere", + barbersBody: "Schneidest du Skatern die Haare? Trage deinen Stuhl oder deinen mobilen Service ein, damit die Szene einen frischen Schnitt bekommt.", + }, + become: { + addNip05: "NIP-05 in den Einstellungen hinzufügen", + backToLab: "Zurück zu The Lab", + bioWorkLabel: "Bio / Über deine Arbeit", + checkContact: "Prüfe deine Kontaktdaten", + cityArea: "Stadt / Gegend", + cityCountry: "Stadt, Land", + connectWallet: "Wallet verbinden", + connectWalletNwc: "Wallet mit NWC verbinden", + contactInfo: "Kontaktinformationen", + contactInfoDesc: "Wie Kunden dich erreichen (alles optional, aber empfohlen)", + coordinatesOptional: "Koordinaten (optional)", + email: "E-Mail", + failedToPublish: "Veröffentlichung fehlgeschlagen", + fromNostrProfile: "Aus deinem Nostr-Profil", + geolocationUnsupported: "Geolocation wird nicht unterstützt", + getting: "Wird abgerufen…", + headline: "Überschrift", + headlineHint: "Erscheint als Titel auf deiner Lab-Karte — z. B. „{{example}}“. Standard ist dein Name.", + imageUploaded: "Bild hochgeladen", + instagram: "Instagram", + invalidEmail: "Gib eine gültige E-Mail-Adresse ein.", + invalidPortfolio: "Gib eine gültige Portfolio-URL ein.", + invalidWebsite: "Gib eine gültige Website-URL ein.", + latitude: "Breitengrad", + learnHow: "So geht's", + locationError: "Standortfehler", + locationFound: "Standort gefunden", + loginRequired: "Anmeldung erforderlich", + loginRequiredDesc: "Du musst dich anmelden, um ein {{role}}-Profil zu erstellen.", + loginRequiredDescCraft: "Du musst dich anmelden, um ein {{noun}}-Profil zu erstellen.", + longitude: "Längengrad", + nip05Recommended: "NIP-05-Verifizierung empfohlen", + nip05RecommendedDesc: "Verifiziere deine Identität, um Vertrauen bei Kunden aufzubauen.", + noWallet: "Keine Wallet verbunden", + otherSocial: "Sonstige soziale Netzwerke", + paymentSetup: "⚡ Zahlungseinrichtung erforderlich", + phoneNumber: "Telefonnummer", + profilePhoto: "Profilfoto", + profilePublished: "Dein Profil wurde veröffentlicht.", + publishing: "Wird veröffentlicht…", + socialMedia: "Soziale Medien", + tip: "💡 Tipp: Die meisten Lightning-Wallets unterstützen NWC (Alby, Minibits, Zeus, Coinos).", + tipWithTime: "💡 Tipp: Die meisten Lightning-Wallets unterstützen NWC (Alby, Minibits, Zeus, Coinos). Die Einrichtung dauert 30 Sekunden.", + upload: "Hochladen", + uploadFailed: "Hochladen fehlgeschlagen", + uploadImage: "Bild hochladen", + uploading: "Wird hochgeladen…", + useCurrentLocation: "Aktuellen Standort verwenden", + useMyLocation: "Meinen Standort verwenden", + usingNwc: "Nostr Wallet Connect wird verwendet", + usingWebln: "WebLN-Browsererweiterung wird verwendet", + walletConnected: "Wallet verbunden — bereit, Zahlungen zu empfangen!", + website: "Website", + yearsExperience: "Jahre Erfahrung", + }, + coachForm: { + anonymous: "Anonymer Coach", + bioLabel: "Bio / Coaching-Philosophie", + bioPlaceholder: "Dein Hintergrund, dein Lehrstil…", + create: "COACH-PROFIL ERSTELLEN", + created: "Coach-Profil erstellt!", + createPro: "PRO-COACH-PROFIL ERSTELLEN", + dmNote: "💬 Schüler können dir direkt über das verschlüsselte Messaging von SkateSpots schreiben", + heading: "Werde Coach", + headlineExample: "Skate Coach Berlin", + hourlyRate: "Stundensatz", + identity: "Deine Coach-Identität", + nip05Reason: "Füge eine NIP-05-Kennung hinzu, um deine Identität zu verifizieren und Vertrauen bei Schülern aufzubauen — sie zeigt ihnen, dass du ein legitimer Coach bist.", + paymentDesc: "Um Zahlungen für Unterricht von Schülern zu erhalten, musst du eine Lightning-Wallet verbinden. Schüler zappen dich direkt für Coaching-Sessions.", + profileDesc: "Erzähl Schülern von deiner Erfahrung", + profileTitle: "Coach-Profil", + ratePlaceholder: "5000 sats/Std.", + selectSkill: "Wähle mindestens einen Skill.", + skillsLabel: "Skills, die ich unterrichte * (mindestens einen auswählen)", + skillsRequired: "Skills erforderlich", + formatsLabel: "Session-Formate", + formatsHint: "Wie du Coaching anbietest.", + levelsLabel: "Unterrichtete Level", + agesLabel: "Altersgruppen", + credentialsLabel: "Qualifikationen & Sicherheit", + credentialsHint: "Selbst angegeben — SkateSpots überprüft diese nicht.", + languagesLabel: "Gesprochene Sprachen", + languagesHint: "Füge die Sprachen hinzu, in denen du coachen kannst.", + languagePlaceholder: "z. B. Englisch, Español", + availabilityLabel: "Verfügbarkeit", + bookingLabel: "Buchungslink", + bookingHint: "Optional — eine Seite, auf der Schüler buchen und bezahlen können.", + galleryLabel: "Portfolio-Fotos", + galleryHint: "Zeig echte Sessions, Schüler und Spots (bis zu 12).", + galleryAdd: "Portfolio-Fotos hinzufügen", + galleryUploaded: "{{count}} Foto(s) hochgeladen", + videoLabel: "Highlight-Reel", + videoHint: "Optional — ein YouTube- oder Instagram-Video von deinem Coaching.", + formatOneOnOne: "1-on-1", + formatGroup: "Gruppe", + formatCamp: "Camp", + formatVideo: "Videoanalyse", + formatContestPrep: "Contest-Vorbereitung", + formatParkLesson: "Park-Unterricht", + formatAdaptive: "Adaptiv", + formatGirls: "Girls-Session", + formatAfterSchool: "Nach der Schule", + levelBeginner: "Anfänger", + levelIntermediate: "Mittelstufe", + levelAdvanced: "Fortgeschritten", + levelCompetition: "Wettkampf", + ageKids: "Kinder", + ageTeens: "Teens", + ageAdults: "Erwachsene", + ageSeniors: "Senioren", + certFirstAid: "Erste Hilfe", + certCpr: "CPR", + certSafeguarding: "Kinderschutz", + certBackgroundCheck: "Führungszeugnis", + certInsured: "Versichert", + certFederation: "Trainer im Nationalverband", + certQualification: "Coaching-Qualifikation", + certJudge: "Wettkampfrichter", + certNoteLabel: "Weitere Qualifikationen (optional)", + certNotePlaceholder: "z. B. Skateboard GB Level 2, 8 Jahre Coaching…", + availWeekdays: "Wochentage", + availWeekends: "Wochenenden", + availEvenings: "Abende", + availAfterSchool: "Nach der Schule", + availHolidays: "Schulferien", + availSeasonal: "Saisonal", + sectionWhatYouCoach: "Was du coachst", + sectionCredentials: "Qualifikationen & Sicherheit", + sectionAvailability: "Verfügbarkeit & Buchung", + sectionWhereYouCoach: "Wo du coachst", + sectionPortfolio: "Portfolio", + rateAmountLabel: "Preis", + rateCurrencySats: "sats", + rateCurrencyUsd: "USD", + rateCurrencyEur: "EUR", + rateCurrencyGbp: "GBP", + perHour: "pro Stunde", + perSession: "pro Session", + perHalfDay: "pro halbem Tag", + perDay: "pro Tag", + perCamp: "pro Camp", + perProject: "pro Projekt", + perEvent: "pro Event", + perGig: "pro Gig", + perShoot: "pro Shoot", + perPiece: "pro Piece", + perCut: "pro Schnitt", + perMonth: "pro Monat", + availByAppointment: "Nach Vereinbarung", + rateNotesLabel: "Preis-Hinweise (optional)", + rateNotesPlaceholder: "Gleitende Skala, erste Session gratis, Anfahrt inklusive…", + sectionPayments: "Zahlungen", + paymentMethodsHint: "Wie Kunden dich bezahlen können. Das ist eine Angabe — SkateSpots hält niemals Gelder.", + payMethodCash: "Bar vor Ort", + payMethodLightning: "Lightning", + payMethodCashu: "Cashu", + payMethodBank: "Banküberweisung", + payMethodOther: "Sonstiges", + payWhatYouCanLabel: "Gleitende Skala / zahl, was du kannst", + bookingFeeLabel: "Buchungsgebühr (optional)", + bookingFeeHint: "Eine kleine Gebühr, die direkt an dich geht, um eine Buchung zu bestätigen. SkateSpots hält oder erstattet sie nicht.", + paymentNoteLabel: "Zahlungshinweis (optional)", + paymentNotePlaceholder: "Erste Session gratis, Anfahrt inklusive, Zahlung nach der Session…", + spotsDesc: "Wähle Spots aus, an denen du Coaching-Sessions anbietest", + spotsLabel: "Spots, an denen du coachst", + tagline: "Teile dein Skateboard-Wissen", + update: "COACH-PROFIL AKTUALISIEREN", + updated: "Coach-Profil aktualisiert!", + }, + filmerForm: { + anonymous: "Anonymer Filmer", + bioPlaceholder: "Dein Hintergrund, Stil, Equipment…", + camerasLabel: "Kameras & Equipment * (mindestens eine auswählen)", + create: "FILMING-PROFIL ERSTELLEN", + created: "Filming-Profil erstellt!", + createPro: "PRO-FILMING-PROFIL ERSTELLEN", + dmNote: "💬 Kunden können dir direkt über das verschlüsselte Messaging von SkateSpots schreiben", + gearHelper: "Liste deine genauen Kameras, Objektive und Rigs auf — Skater interessieren sich für das Setup.", + gearLabel: "Was in der Tasche ist (optional)", + gearPlaceholder: "z. B. Sony VX1000 + MK1 Fisheye, Panasonic HVX200, DJI RS3 Gimbal, GoPro Hero 12, Sennheiser-Mikro…", + heading: "Werde Filmer", + headlineExample: "Skate Filmer Berlin", + identity: "Deine Filmer-Identität", + nip05Reason: "Füge eine NIP-05-Kennung hinzu, um deine Identität zu verifizieren und Vertrauen bei Kunden aufzubauen — sie zeigt ihnen, dass du ein legitimer Filmer bist.", + paymentDesc: "Um Zahlungen von Kunden für Filming-Services zu erhalten, musst du eine Lightning-Wallet verbinden. Kunden zappen dich direkt für deine Arbeit.", + profileDesc: "Erzähl Kunden von deiner Filming-Erfahrung", + profileTitle: "Filming-Profil", + rate: "Preis", + ratePlaceholder: "10000 sats/Video", + reelLabel: "Reel / Portfolio", + selectService: "Wähle mindestens einen Service.", + selectSkill: "Wähle mindestens einen Filming-Skill.", + servicesLabel: "Angebotene Services * (mindestens einen auswählen)", + servicesRequired: "Services erforderlich", + skillsRequired: "Skills erforderlich", + spotsDesc: "Wähle Spots aus, an denen du Filming-Services anbietest", + spotsLabel: "Spots, an denen du filmst", + tagline: "Biete dein Skate-Video-Filming an — Clips, Lines, ganze Parts & Contest-Berichterstattung", + update: "FILMING-PROFIL AKTUALISIEREN", + updated: "Filming-Profil aktualisiert!", + }, + editorForm: { + anonymous: "Anonymer Editor", + bioPlaceholder: "Dein Editing-Stil, Hintergrund, nennenswerte Projekte…", + contactPortfolio: "Kontakt & Portfolio", + create: "Editor-Profil veröffentlichen", + created: "Editor-Profil erstellt!", + createPro: "Pro-Editor-Profil veröffentlichen", + editTypes: "Angebotene Edit-Typen * (mindestens einen auswählen)", + hardware: "Hardware", + hardwarePlaceholder: "z. B. MacBook Pro M3, Sony FX3", + heading: "Werde Video Editor", + headlineExample: "Skate Video Editor", + identity: "Deine Identität", + locationOptional: "Standort (optional)", + loginDesc: "Melde dich an, um dein Video-Editor-Profil zu erstellen.", + phoneTelegram: "Telefon / Telegram", + portfolioPlaceholder: "Portfolio (Vimeo, YouTube…)", + profileDesc: "Erzähl der Community von deinem Editing-Stil und deinen Skills", + profileTitle: "Editor-Profil", + published: "Dein Profil wurde auf SkateSpots veröffentlicht.", + rate: "Preis / Tarif", + ratePlaceholder: "z. B. 50k sats/Min., DM für Angebot", + selectService: "Wähle mindestens einen Edit-Typ.", + servicesRequired: "Services erforderlich", + socialPlaceholder: "Instagram / Social-Handle", + software: "Software", + softwareHardware: "Software- & Hardware-Skills", + softwarePlaceholder: "z. B. DaVinci Resolve, Premiere", + tagline: "Biete deine Video-Editing-Services der Skate-Community an", + thumbnail: "Profil- / Showreel-Thumbnail", + update: "Editor-Profil aktualisieren", + updated: "Editor-Profil aktualisiert!", + walletConnected: "Wallet verbunden ✓", + walletDesc: "Erhalte Bitcoin-⚡-Zahlungen direkt von Kunden für deine Editing-Arbeit.", + walletTitle: "⚡ Lightning-Wallet für Zahlungen", + yearsExperience: "Jahre Erfahrung", + yearsPlaceholder: "z. B. 5 Jahre", + }, + photoForm: { + anonymous: "Anonymer Photographer", + bioPlaceholder: "Dein Hintergrund, Stil, was du gerne fotografierst…", + cameraLabel: "Kameragehäuse * (mindestens eines auswählen)", + cameraRequired: "Kamera erforderlich", + contactDesc: "Wie Rider deine Arbeit sehen und dich erreichen (alles optional, aber empfohlen)", + create: "FOTOGRAFIE-PROFIL ERSTELLEN", + created: "Fotografie-Profil erstellt!", + createPro: "PRO-FOTOGRAFIE-PROFIL ERSTELLEN", + dmNote: "💬 Rider können dir direkt über das verschlüsselte Messaging von SkateSpots schreiben", + gearHelper: "Liste genaue Gehäuse, Objektive und Lichter auf — Rider lieben es, das Setup zu kennen.", + gearPlaceholder: "z. B. Canon R6 II, 8-15mm Fisheye, 70-200mm f/2.8, 2× Godox AD200, Funkauslöser, Manfrotto-Stativ…", + heading: "Werde Photographer", + headlineExample: "Skate-Fotografie", + identity: "Deine Photographer-Identität", + lensesLabel: "Objektive", + lightingLabel: "Beleuchtungsausrüstung", + nip05Reason: "Füge eine NIP-05-Kennung hinzu, um deine Identität zu verifizieren und Vertrauen bei Kunden aufzubauen.", + paymentDesc: "Um für Shoots bezahlt zu werden, verbinde eine Lightning-Wallet. Kunden zappen dich direkt für deine Arbeit.", + portfolioLabel: "Portfolio / Instagram", + profileDesc: "Erzähl Ridern von deinem Auge, deinem Equipment und deinen Services", + profileTitle: "Fotografie-Profil", + ratePlaceholder: "20000 sats/Shoot", + selectCamera: "Wähle mindestens einen Kameratyp, mit dem du fotografierst.", + selectService: "Wähle mindestens einen Service, den du anbietest.", + servicesLabel: "Angebotene Services * (mindestens einen auswählen)", + servicesRequired: "Services erforderlich", + spotsDesc: "Wähle Spots aus, an denen du Fotografie anbietest", + spotsLabel: "Spots, an denen du fotografierst", + styleLabel: "Foto-Stil", + supportLabel: "Support & Rig", + tagline: "Halte die Sessions fest — biete deine Skate-Fotografie an", + update: "FOTOGRAFIE-PROFIL AKTUALISIEREN", + updated: "Fotografie-Profil aktualisiert!", + }, + builderForm: { + anonymous: "Anonymer Builder", + bioLabel: "Bio / Über deine Bauten", + bioPlaceholder: "Deine Crew, nennenswerte Bauten, wie du an ein Projekt herangehst…", + buildTypesLabel: "Was du baust * (mindestens eines auswählen)", + buildTypesRequired: "Bautypen erforderlich", + cityBase: "Stadt / Standort", + contactPortfolio: "Kontakt & Portfolio", + contactPortfolioDesc: "Wie die Szene deine Bauten sehen und dich erreichen kann (alles optional, aber empfohlen)", + create: "BUILDER-PROFIL ERSTELLEN", + created: "Builder-Profil erstellt!", + createPro: "PRO-BUILDER-PROFIL ERSTELLEN", + dmNote: "💬 Kunden können dir direkt über das verschlüsselte Messaging von SkateSpots schreiben", + gearHelper: "Crews und Kunden lieben es, dein Equipment und deinen Prozess zu kennen.", + gearLabel: "Wie du arbeitest / Equipment (optional)", + gearPlaceholder: "z. B. komplettes Beton-Team, eigener Mixer + Shotcrete-Rig, mobiles Schweißen, wir übernehmen Genehmigungen und Drainage…", + heading: "Werde Builder", + headlineExample: "Rampen- & Park-Builder", + identity: "Deine Builder-Identität", + insured: "Lizenziert / versichert", + insuredHelper: "Relevant für öffentliche Parks & Kommunalarbeiten", + logoPhoto: "Logo / Foto", + materialsLabel: "Materialien & Handwerks-Skills", + nip05Reason: "Füge eine NIP-05-Kennung hinzu, um deine Identität zu verifizieren und Vertrauen bei Kunden aufzubauen.", + pastBuilds: "Vergangene Bauten / Instagram", + paymentDesc: "Um für Bauten bezahlt zu werden, verbinde eine Lightning-Wallet. Kunden zappen dich direkt für deine Arbeit.", + profileDesc: "Erzähl der Szene, was du baust und wie du arbeitest", + profileTitle: "Builder-Profil", + rateLabel: "Preis / Angebotsbasis", + ratePlaceholder: "pro m² / pro Projekt", + scaleLabel: "Projektumfang", + selectBuild: "Wähle mindestens eines der Dinge aus, die du baust.", + serviceArea: "Servicegebiet", + serviceAreaPlaceholder: "z. B. Katalonien, reise durch die ganze EU", + spotsDesc: "Verknüpfe Spots und Parks, die du gebaut hast, damit Leute deine Arbeit auf der Karte sehen", + spotsLabel: "Spots, die du gebaut hast", + tagline: "Gieß es, schweiß es, bau es — trage deinen Rampen- & Park-Bau ein", + update: "BUILDER-PROFIL AKTUALISIEREN", + updated: "Builder-Profil aktualisiert!", + yearsBuilding: "Jahre im Bau", + }, + skaterForm: { + backToSkaters: "Zurück zu den Skatern", + bioHelperPulled: "Aus deinem Profil übernommen — passe es für deine Skater-Karte an oder lass es so.", + bioHelperShort: "Eine kurze Vorstellung für deine Skater-Karte.", + bioPlaceholder: "Wie lange du schon skatest, was dich interessiert, woran du arbeitest…", + browseSpots: "Spots durchstöbern", + changePhoto: "Profilfoto ändern", + chipBio: "Bio", + chipPhoto: "Foto", + cityArea: "Stadt / Gegend", + created: "Du bist auf der Karte! 🛹", + custom: "Benutzerdefiniert", + customHelper: "Dein eigenes Label — erscheint auf deiner Skater-Karte statt einer Vorlage.", + customPlaceholder: "z. B. OG, Wochenend-Krieger, Rentner…", + discoverable: "Andere Skater können dich jetzt entdecken.", + editFullProfile: "bearbeite dein vollständiges Profil", + fromProfile: "Aus deinem Profil", + heroEditPrefix: "Bearbeite dein", + heroJoinPrefix: "Werde Teil des", + heroSuffix: "Directory", + homeHelper: "Gib es frei ein oder verknüpfe einen echten Spot aus der Karte, damit Leute dorthin gehen können.", + homePlaceholder: "Lokaler Park / Platz — oder tippe auf „Spots durchstöbern“", + homeSpot: "Home-Spot", + layerEnd: "um sie überall zu ändern.", + layerIntro: "Das ist dein", + layerMid: ", aufgebaut auf deinem Nostr-Profil. Dein Name, Foto, Bio, Lightning & Verifizierung kommen von dort —", + layerWord: "Skate-Layer", + level: "Level", + linked: "Mit einem Spot auf der Karte verknüpft", + loadingProfile: "Dein Profil wird geladen…", + loadingSpots: "Spots werden geladen…", + locationHelper: "Hilft anderen, Skater in ihrer Nähe zu finden. Es wird nur eine grobe Gegend geteilt.", + loginToJoin: "Anmelden, um beizutreten", + loginToJoinDesc: "Erstelle dein Skater-Profil, damit die Community dich finden kann.", + mappedSpot: "Kartierter Spot", + noSpots: "Noch keine Spots gefunden.", + noSpotsMatch: "Keine Spots entsprechen deiner Suche.", + openMap: "Karte öffnen", + pickEverything: "Wähle alles, was zu deinem Stil passt.", + pickHomeSpot: "Wähle deinen Home-Spot", + pickStyles: "Wähle deine Stile", + pickStylesDesc: "Wähle mindestens eines der Dinge, die du skatest.", + profilePic: "Profilbild", + profilePicHelper: "Deine Skater-Karte nutzt dein Nostr-Profilfoto — dasselbe Bild überall.", + publishingAs: "Veröffentlichung als", + putOnMap: "Setz mich auf die Karte", + searchSpots: "Spots nach Name oder Stadt suchen…", + skateStory: "Deine Skate-Story", + stance: "Stance", + unlinkSpot: "Spot-Verknüpfung aufheben", + updateButton: "Mein Profil aktualisieren", + updated: "Profil aktualisiert!", + whatYouSkate: "Was du skatest *", + yearsPlaceholder: "z. B. 8", + yearsSkating: "Jahre auf dem Board", + yourProfilePic: "Dein Profilbild", + zapsOn: "Zaps an", + }, + skaters: { + clearSearch: "Suche leeren", + community: "Die Community", + countMany: "Skater", + countOne: "Skater", + editProfile: "Mein Skater-Profil bearbeiten", + heroDesc: "Finde deine Leute. Durchstöbere die Crew von Skatern, die SkateSpots vertreten — nach Stil, Stance, Level und Stadt.", + nip05Verified: "NIP-05 verifiziert", + noMatches: "Keine Treffer", + noneDesc: "Sei der Erste, der dem Verzeichnis beitritt und SkateSpots auf die Karte bringt.", + noneTitle: "Noch keine Skater", + noVerifiedMatch: "Keine verifizierten Skater passen", + searchPlaceholder: "Nach Name, Stadt oder npub suchen…", + tryDifferentSearch: "Versuche eine andere Suche oder setze deine Filter zurück.", + tryTurnOffVerified: "Schalte den Filter „Verifiziert“ aus, um alle zu sehen.", + verifiedFilterTitle: "Nur Skater mit verifizierter NIP-05-Identität anzeigen", + }, + skaterCard: { + inDirectory: "Du bist im Skater Directory", + joinDesc: "Füge deine Stance, Stile & dein Level hinzu, damit Skater dich finden.", + joinTitle: "Tritt dem Skater Directory bei", + }, + crewsStrip: { + allCrews: "Alle Crews", + memberMany: "{{count}} Mitglieder", + memberOne: "{{count}} Mitglied", + title: "Crews in dieser Szene", + }, + labLink: { + coach: "Coach", + filmer: "Filmer", + editor: "Editor", + photographer: "Photographer", + builder: "Builder", + artist: "Künstler", + graffiti: "Graffiti", + tattoo: "Tattoo", + trainer: "Trainer", + musician: "Musiker", + judge: "Juror", + barber: "Barbier", + organizer: "Organisator", + lab: "Lab", + linkedProfiles: "Verknüpfte Lab-Profile", + desc: "Betreibst du auch ein Studio, Coaching oder einen Bau-Service? Verknüpfe deine Lab-Einträge, damit Leute deine Crew buchen können. Optional. Wenn das Lab-Profil auch zurück auf diese Crew verweist, zeigen beide ein grünes", + descEnd: "Abzeichen.", + empty: "Du hast noch keine Lab-Profile. Erstelle eines in The Lab, um es hier zu verknüpfen.", + }, + proUpgrade: { + goPro: "Pro werden", + optional: "· optional", + freeTo: "Eintragen ist gratis. Pro fügt ein", + proBadge: "Pro-Abzeichen", + featuredPlacement: "hervorgehobene Platzierung", + atTop: "ganz oben in The Lab hinzu.", + active: "Aktiv", + benefit1: "Goldenes „Pro“-Abzeichen auf deinem Profil & deinen Karten", + benefit2: "Zuerst hervorgehoben, wenn Skater The Lab durchstöbern", + benefit3: "Unterstützt SkateSpots — keine Werbung, keine Mittelsmänner", + platformOwner: "Plattforminhaber — Pro ist immer aktiv.", + proActiveOne: "Pro aktiv · noch {{count}} Tag. Dein Profil wird hervorgehoben.", + proActiveMany: "Pro aktiv · noch {{count}} Tage. Dein Profil wird hervorgehoben.", + context: "Dein Profil bleibt nach Ablauf von Pro kostenlos online — du verlierst nur das Abzeichen & den Boost.", + }, + profilePreview: { + viewPublic: "Öffentlich ansehen", + unnamed: "Unbenannter Skater", + noHandle: "Noch kein Handle", + }, + pyramid: { + pyramidWord: "PYRAMIDE", + rankingsWord: "RANGLISTE", + subtitle: "Top-Beitragende in deiner Stadt", + yourRank: "Dein Rang", + keepContributing: "Mach weiter mit und klettere höher!", + topContributors: "Top-Beitragende", + noContributors: "Noch keine Beitragenden. Sei der Erste, der einen Spot hinzufügt oder ein Event erstellt!", + spots: "Spots", + events: "Events", + total: "Gesamt", + trust: "Vertrauen", + }, + detail: { + joined: "Beigetreten", + about: "Über", + howWeWork: "Wie wir arbeiten", + inTheBag: "In der Tasche", + hardware: "Hardware", + software: "Software", + eventsJudged: "Bewertete Events", + eventsOrganized: "Organisierte Events", + spots: "Spots", + viewSpot: "Spot ansehen", + credentialsTitle: "Qualifikationen & Sicherheit", + selfAttested: "Vom Coach selbst angegeben — nicht von SkateSpots verifiziert.", + formats: "Formate", + levels: "Level", + ages: "Alter", + languages: "Sprachen", + availability: "Verfügbarkeit", + bookSession: "Session buchen", + portfolio: "Portfolio", + watchReel: "Auf {{platform}} ansehen", + paymentsTitle: "Zahlungen", + payWhatYouCan: "Zahl, was du kannst", + bookingFee: "Buchungsgebühr", + payBookingFee: "Buchungsgebühr zahlen", + bookingFeeNote: "Direkt an den Coach gezahlt. SkateSpots hält oder erstattet sie nicht.", + bookingFeeNoRail: "Dieser Coach hat keine Lightning-Adresse hinterlegt, daher ist In-App-Zahlung nicht möglich — kontaktiere ihn, um die Zahlung zu vereinbaren.", + serviceArea: "Servicegebiet", + licensedInsured: "Lizenziert / versichert", + studio: "Studio", + shopStudio: "Shop / Studio", + booksOpen: "Nimmt Buchungen an", + credentials: "Qualifikationen", + remoteOnline: "Remote / online verfügbar", + graffitiCrew: "Graffiti-Crew", + act: "Act", + listen: "Anhören", + upcomingGigs: "Kommende Gigs", + past: "Vergangen", + experience: "Erfahrung", + yearsCount: "{{count}} Jahre", + rate: "Preis", + contact: "Kontakt", + sendMessage: "Nachricht senden", + bookGig: "Für einen Gig buchen", + portfolioDomain: "Portfolio · {{domain}}", + manage: "Verwalten", + admin: "Admin", + editProfile: "Profil bearbeiten", + publishedTitle: "Du bist live", + publishedBody: "Dein Profil ist in The Lab veröffentlicht. Teile es, damit Skater dich finden.", + manageRemove: "Entferne dein {{noun}}-Profil aus The Lab.", + adminTakeDown: "Nimm dieses {{noun}}-Profil herunter. Es wird überall auf SkateSpots ausgeblendet.", + entityLabel: "{{noun}}-Profil", + deleteProfile: "Profil löschen", + location: "Standort", + servicesSkills: "Services & Skills", + noun: { + coach: "Coach", + filmer: "Filmer", + editor: "Video Editor", + photographer: "Photographer", + builder: "Builder", + artist: "Künstler", + graffiti: "Graffiti-Künstler", + tattoo: "Tattoo-Künstler", + trainer: "Trainer", + musician: "Musiker", + judge: "Event-Juror", + organizer: "Event-Organisator", + barber: "Barbier", + profile: "Profil", + }, + skillsTitle: { + skills: "Skills", + servicesGear: "Services & Equipment", + whatWeBuild: "Was wir bauen", + whatTheyMake: "Was sie herstellen", + stylesWork: "Stile & Arbeit", + styles: "Stile", + focusSpecialties: "Schwerpunkt & Spezialitäten", + genresInstruments: "Genres & Instrumente", + formatsSpecialties: "Formate & Spezialitäten", + servicesStyles: "Services & Stile", + eventTypesServices: "Event-Typen & Services", + }, + }, + rider: { + heroDesc: "Deine verifizierbare Skater-Identität. Nostr-signiert, druckfertig, unmöglich zu fälschen.", + heroDesc2: "Verdiene bezeugte Skill-Badges von anderen Skatern. Hol dir Parkzugangs-Pässe. Teile deine Karte überall.", + headerTagline: "Nostr-signiert · druckfertig · QR-verifiziert", + tabCard: "Meine Karte", + tabBadges: "Badges", + tabAward: "Vergeben", + rendering: "Wird gerendert…", + shareCard: "Karte teilen", + savePng: "PNG speichern", + print: "Drucken", + copyId: "ID kopieren", + cardType: "Kartentyp", + licenseLabel: "Skater-Lizenz", + licenseSub: "Deine persönliche Rider-Identität", + parkLabel: "Parkzugang", + parkSub: "Pässe als Parkbesitzer ausstellen", + theme: "Design", + holoTitle: "Holografisches Schimmern", + holoDesc: "Animierter Folien-Effekt", + cardDetails: "Kartendetails", + skateStyle: "Skate-Stil", + ridesFor: "Fährt für", + ridesForPlaceholder: "Lokaler Shop…", + sponsors: "Sponsoren", + sponsorsPlaceholder: "Marken…", + showOnCard: "Auf der Karte anzeigen", + zaps: "Zaps ⚡", + skills: "Skills", + selected: "{{count}}/6 ausgewählt", + goldBadgesHint1: "Gold-Badges auf deiner Karte stammen von anderen Skatern, die dich bezeugt haben — sieh dir die", + goldBadgesHint2: "an.", + parkOwnersOnly: "Nur Parkbesitzer.", + parkOwnersDesc: "Stelle dies mit demselben Nostr-Schlüssel aus, mit dem du deinen Park-Eintrag veröffentlicht hast. Jeder kann den QR-Code scannen und die Signatur on-chain verifizieren — keine zentrale Autorität nötig.", + parkDetails: "Parkdetails", + parkName: "Parkname", + parkNamePlaceholder: "The Berrics…", + riderName: "Rider-Name", + riderNamePlaceholder: "Name auf der Karte", + riderNpub: "Nostr-ID des Riders (npub)", + accessLevel: "Zugangsstufe", + validThru: "Gültig bis", + publishToNostr: "Auf Nostr veröffentlichen", + badgesIntro: "Diese Badges wurden von anderen Skatern auf Nostr bezeugt und signiert. Sie erscheinen als goldene ⭐-Chips auf deiner Karte.", + earnMore: "Willst du mehr verdienen? Skate vor jemandem und bitte ihn, deinen Trick zu bezeugen.", + awardSomeone: "Jemand anderem ein Badge vergeben", + youSawIt: "Du hast es gesehen", + youSawItDesc: "Signiere den Beweis auf Nostr. Er wird Teil ihrer dauerhaften Aufzeichnung — kryptografisch an deinen Schlüssel gebunden.", + skillsWitnessed: "Skills, die du bezeugt hast", + whereSeen: "Wo hast du es gesehen?", + optional: "(optional)", + signingOnNostr: "Wird auf Nostr signiert…", + awardBadge: "Badge vergeben", + addRiderSkill: "Rider-npub + mindestens einen Skill hinzufügen", + invalidNpub: "Ungültige npub", + badgeAwarded: "🏅 Badge vergeben!", + badgeSent: "{{skills}} gesendet.", + failed: "Fehlgeschlagen", + couldNotRender: "Karte konnte nicht gerendert werden", + popupBlocked: "Popup blockiert", + popupBlockedDesc: "Erlaube Popups für diese Seite.", + linkCopied: "🔗 Link kopiert!", + enterRiderNpub: "Gib die npub des Riders ein", + parkPublished: "✅ Parkzugangskarte veröffentlicht!", + publishFailed: "Veröffentlichung fehlgeschlagen", + noBadges: "Noch keine Badges. Skate vor jemandem und bitte ihn, deine Tricks zu bezeugen!", + showMore: "{{count}} weitere anzeigen", + witnessedBy: "Bezeugt von", + at: "bei", + previewLicense: "Skater-Lizenz", + previewSince: "Seit {{year}}", + previewEvts: "Evts", + previewScan: "Zum Verifizieren scannen", + previewSkatepark: "Skatepark", + previewAccessPass: "Zugangspass", + previewMemberName: "Mitgliedsname", + previewIssuedBy: "Vom Parkbesitzer ausgestellt · Nostr-signiert", + previewValidThru: "Gültig bis", + previewNostrVerified: "Nostr-verifiziert", + }, + craftFields: { + detailsTitle: "Zusätzliche Details", + deliverables: "Ergebnisse", + turnaround: "Bearbeitungszeit", + surfaces: "Flächen / Wände", + maxSize: "Max. Größe", + setLength: "Set-Länge", + techRider: "Tech Rider", + travel: "Reise", + certifications: "Zertifizierungen", + insurance: "Versicherung", + permits: "Genehmigungen", + deposit: "Anzahlung", + minimum: "Minimum", + modalities: "Modalitäten", + duration: "Termindauer", + drone: "Drohne", + leadTime: "Vorlaufzeit", + warranty: "Garantie", + }, + craftForm: { + profileImage: "Profilbild", + nameHeadline: "Name / Überschrift", + about: "Über", + aboutPlaceholder: "Erzähl Skatern von deiner {{noun}}-Arbeit…", + required: "erforderlich", + nip05Title: "NIP-05 hinzufügen, um Vertrauen aufzubauen", + nip05Desc: "Eine NIP-05-Kennung hilft Skatern zu verifizieren, dass du echt bist. Vor dem Eintragen sehr empfohlen.", + editingNote: "Du bearbeitest dein bestehendes {{noun}}-Profil — beim Veröffentlichen wird es ersetzt.", + location: "Standort", + pinned: "📍 Auf der Karte angepinnt ({{lat}}, {{lng}})", + experienceYears: "Erfahrung (Jahre)", + expPlaceholder: "z. B. 5", + ratePlaceholder: "z. B. 20k sats / pro Projekt", + contactLinks: "Kontakt & Links", + phoneOptional: "Telefon (optional)", + emailOptional: "E-Mail (optional)", + socialPlaceholder: "Social (Instagram usw.)", + gettingPaid: "Bezahlung erhalten", + updateProfile: "Profil aktualisieren", + publishProfile: "Profil veröffentlichen", + rateLeftBlankNote: "Optional — lass dies leer, wenn der Preis oben ausreicht.", + sectionRequired: "{{section}} erforderlich", + sectionRequiredDesc: "Wähle mindestens eine Option unter „{{section}}“ aus.", + updated: "Profil aktualisiert!", + created: "Profil erstellt!", + headlineExample: "Skate Coach Berlin", + }, + }, + socialUi: { + agentPanel: { + spot: "Spot", + event: "Event", + labPro: "Lab-Pro", + gear: "Gear", + crew: "Crew", + description: "Kennt diese Crew — ihre Jams, das Roster & den Open Call — plus die weitere Szene mit Live-Daten.", + greeting: "Yo! Ich bin Sasquatch, der Guide von {{crew}}. Frag mich über die Crew — unseren nächsten Jam, wer sie leitet, wonach wir suchen — oder die weitere Szene.", + suggestion1: "Wann ist unser nächster Jam?", + suggestion2: "Wer leitet diese Crew?", + suggestion3: "Wonach suchen wir?", + suggestion4: "Beste Spots in unserer Nähe?", + suggestion5: "Wie ist das Wetter zum Skaten?", + thinking: "Sasquatch denkt nach…", + placeholder: "Frag über deine lokale Szene…", + disclaimer: "KI kann sich irren — Links führen zu echten Einträgen.", + }, + badge: { + upcomingOne: "{{count}} bevorstehendes Event", + upcomingMany: "{{count}} bevorstehende Events", + comingOne: "{{count}} Event kommt", + comingMany: "{{count}} Events kommen", + }, + bell: { + youAreIn: "Du bist in {{crew}}! 🛹", + membershipConfirmed: "Mitgliedschaft bestätigt.", + couldNotConfirm: "Konnte nicht bestätigen", + addedYouTo: "hat dich hinzugefügt zu", + confirmToAppear: "Bestätige, um als Mitglied zu erscheinen.", + notifications: "Benachrichtigungen", + notificationsNew: "Benachrichtigungen ({{count}} neu)", + unreadCount: "{{count}} ungelesene Benachrichtigungen", + markRead: "Als gelesen markieren", + allClear: "Alles erledigt", + tabAll: "Alle", + tabTrades: "Trades", + tabSocial: "Sozial", + tabNews: "News", + tabCrews: "Crews", + checkingUpdates: "Suche nach Updates…", + checkingTrades: "Prüfe Angebote und Trades…", + loadingDrops: "Lade die neuesten Drops…", + emptyAll: "Angebote, Trades, Zaps, Antworten, Newsletter-Drops und Crew-Aktivität erscheinen hier.", + emptyTrades: "Angebote, Gegenangebote und Trade-Bestätigungen landen hier — egal ob du verkaufst, kaufst oder tauschst.", + emptySocial: "Zaps, Reaktionen, Reposts, Erwähnungen, Antworten, Event-RSVPs und Host-Updates landen hier.", + emptyNews: "SkateSpots-Newsletter-Drops landen hier. Abonniere auf der Newsletter-Seite.", + emptyCrews: "Crew-Einladungen, Kollektiv-Anfragen und Mitgliedschaftsanfragen erscheinen hier.", + subscribeBanner: "Abonniere, um neue Drops in deiner Glocke zu erhalten", + read: "Gelesen", + allCaughtUp: "Du bist auf dem neuesten Stand", + }, + chat: { + hidden: "Verborgen", + hideMessageAria: "Diese Nachricht verbergen", + hideMessageTitle: "Nachricht verbergen (Admin)", + messageHidden: "Nachricht verborgen", + messageHiddenDesc: "Für alle aus dem Crew-Chat ausgeblendet.", + messageHideFailed: "Nachricht konnte nicht verborgen werden", + encryptionUnavailable: "Verschlüsselung nicht verfügbar", + encryptionUnavailableDesc: "Dein Signer unterstützt keine NIP-44-Verschlüsselung. Bitte aktualisiere deine Erweiterung.", + messageFailed: "Nachricht fehlgeschlagen", + couldNotSend: "Nachricht konnte nicht gesendet werden.", + noOneToMessage: "Noch niemand zum Anschreiben", + noOneToMessageDesc: "Diese Crew hat keine anderen Mitglieder zum Chatten.", + subject: "{{crew}} Crew-Chat", + title: "Crew-Chat", + cordnBadgeTitle: "Über den Cordn-Koordinator dieser Crew via ContextVM geleitet. Ende-zu-Ende-verschlüsselt.", + private: "Privat", + privateBadgeTitle: "Ende-zu-Ende-verschlüsselt — nur Crew-Mitglieder können diese Nachrichten lesen.", + encryptedCordn: "Verschlüsselt & über den Crew-Koordinator (Cordn) geleitet — keine Nachrichten landen auf öffentlichen Relays.", + encryptedNip17: "Verschlüsselter Gruppenchat für den Gründer & alle gelisteten Crew-Mitglieder.", + moderatorNote: " Als Moderator kannst du Nachrichten für die Crew verbergen.", + loginToSee: "Melde dich an, um zu sehen, ob du dem Crew-Chat beitreten kannst.", + membersOnly: "Dieser Chat ist privat für Crew-Mitglieder. Bitte den Gründer, dich zur Crew hinzuzufügen, um mitzureden.", + noMessages: "Noch keine Nachrichten. Starte den Crew-Chat — plant eine Session, teilt einen Spot, hypet einen Clip.", + newMessages: "Neue Nachrichten", + new: "Neu", + placeholder: "Schreib deiner Crew…", + sendAria: "Nachricht senden", + }, + collectiveJoinRequest: { + addedTitle: "{{name}} zu {{collective}} hinzugefügt 🛹", + addedDesc: "Sie bestätigen von ihrer Seite, um als verifiziertes Mitglied zu erscheinen.", + couldNotAdd: "Mitglied konnte nicht hinzugefügt werden", + couldNotDismiss: "Konnte nicht verwerfen", + addedDone: "Hinzugefügt", + addedTo: "zu", + dismissedDone: "Anfrage von {{name}} verworfen", + wantsToJoin: "möchte beitreten", + alreadyOnRoster: "Bereits im Roster", + openCollective: "Kollektiv öffnen", + dismiss: "Verwerfen", + addToCollective: "Zum Kollektiv hinzufügen", + }, + collectiveMembers: { + confirmed: "Bestätigt", + pending: "Ausstehend", + pendingTooltip: "Vom Kollektiv gelistet — wartet auf die Bestätigung dieses Mitglieds.", + crewOnly: "Nur Crew", + crewOnlyTooltip: "Dieses Mitglied möchte nur für Crew-Kollegen sichtbar sein. Du siehst es, weil du in der Crew bist.", + hiddenMember: "Verborgenes Mitglied", + title: "Mitglieder", + verifiedOf: "{{confirmed}} von {{total}} verifiziert — jedes bestätigte Mitglied hat mit seinem eigenen Nostr-Schlüssel signiert.", + verifiedPerMember: "Die Mitgliedschaft wird pro Mitglied verifiziert. Jedes Mitglied bestätigt mit seinem eigenen Nostr-Schlüssel.", + adminsOne: "{{count}} Admin hilft, die Crew zu leiten.", + adminsMany: "{{count}} Admins helfen, die Crew zu leiten.", + }, + confirmMembership: { + public: "Öffentlich", + crewOnly: "Nur Crew", + confirmedTitle: "Mitgliedschaft bestätigt!", + confirmedCrew: "Du bist in {{name}} verifiziert — nur für Crew-Kollegen sichtbar.", + confirmedPublic: "Du erscheinst jetzt als verifiziertes Mitglied von {{name}}.", + failed: "Bestätigung fehlgeschlagen", + addedTo: "Du wurdest zu {{name}} hinzugefügt", + addedDesc: "Bestätige deine Mitgliedschaft, damit sie in deinem und ihrem Profil als verifiziert erscheint.", + yourVisibility: "Deine Sichtbarkeit", + confirming: "Wird bestätigt…", + confirmButton: "Mitgliedschaft bestätigen", + }, + contacts: { + message: "Nachricht", + removePrivate: "Aus privaten Kontakten entfernen", + savePrivate: "Zu privaten Kontakten hinzufügen", + seoTitle: "Kontakte - SkateSpots", + seoDescription: "Deine Szene — Crew-Kollegen, Leute, denen du folgst, und aktuelle Gespräche, mit privaten verschlüsselten Kontakten.", + encryptionUnavailableDesc: "Dein Signer unterstützt keine NIP-44-Verschlüsselung.", + removed: "Aus privaten Kontakten entfernt", + saved: "Zu privaten Kontakten hinzugefügt", + savedDesc: "Nur du kannst diese Liste sehen.", + updateFailed: "Kontakte konnten nicht aktualisiert werden", + loginTitle: "Deine Szene, an einem Ort", + loginDesc: "Melde dich an, um deine Crew-Kollegen, Leute denen du folgst, und aktuelle Gespräche zu sehen — und führe eine private, verschlüsselte Kontaktliste.", + title: "Kontakte", + subtitle: "Deine Szene — Crew-Kollegen, Follows & Gespräche", + filterPlaceholder: "Nach npub filtern…", + tabCrew: "Crew", + tabFollows: "Folge ich", + tabDms: "DMs", + tabSaved: "Gespeichert", + emptyCrewmates: "Noch keine Crew-Kollegen. Tritt einer Crew bei oder gründe eine, um dein Szenen-Netzwerk aufzubauen.", + emptyFollowing: "Du folgst noch niemandem.", + emptyDms: "Noch keine Gespräche. Schreib einem Skater, um eines zu starten.", + savedHint: "Diese Liste ist mit deinem Schlüssel verschlüsselt — nur du kannst sie lesen. Tippe auf den Stern bei jemandem, um ihn hinzuzufügen.", + emptySaved: "Noch keine gespeicherten Kontakte. Markiere Leute in einem beliebigen Tab, um dein privates Adressbuch aufzubauen.", + }, + conversation: { + unknown: "Unbekannt", + seoTitle: "Chat mit {{name}} - SkateSpots", + seoDescription: "Private verschlüsselte Konversation", + sendFailed: "Nachricht konnte nicht gesendet werden", + sendFailedDesc: "Bitte versuche es gleich noch einmal.", + tradeConfirmed: "Trade bestätigt", + tradeConfirmedDesc: "Reputation für euch beide aktualisiert.", + tradeConfirmFailed: "Trade konnte nicht bestätigt werden", + somethingWrong: "Etwas ist schiefgelaufen.", + soldNote: "An {{name}} verkauft.", + saleConfirmed: "Verkauf bestätigt", + saleConfirmedDesc: "{{name}} kann jetzt seine Seite bestätigen.", + saleConfirmFailed: "Verkauf konnte nicht bestätigt werden", + escrowRedeemed: "Escrow eingelöst", + escrowRedeemedDesc: "Das Geld ist jetzt in deiner Cashu-Wallet.", + escrowRedeemFailed: "Escrow konnte nicht eingelöst werden", + loginTitle: "Melde dich an, um Nachrichten zu sehen", + secureLoginTitle: "Sichere Anmeldung erforderlich", + secureLoginDesc: "Nachrichten erfordern eine sichere Signer-App.", + encrypted: "Verschlüsselt", + refresh: "Aktualisieren", + didCompleteTrade: "Hast du diesen Trade abgeschlossen?", + recordedSale: "{{name}} hat den Verkauf erfasst. Bestätige, um die Reputation für euch beide zu aktualisieren.", + confirm: "Bestätigen", + confirmSale: "Diesen Verkauf bestätigen?", + askedToRecord: "{{name}} hat dich gebeten, ihn zu erfassen. Das Bestätigen baut Reputation für euch beide auf.", + confirmSaleButton: "Verkauf bestätigen", + redeemEscrow: "Escrow einlösen", + escrowAppOnly: "Cashu-Escrow gibt es nur in der App — öffne SkateSpots auf deinem Handy, um einzulösen.", + startThread: "Sende eine Nachricht, um das Gespräch zu starten", + placeholder: "Nachricht eingeben...", + e2eeNote: "Nachrichten sind mit NIP-17 Ende-zu-Ende-verschlüsselt", + }, + coordinator: { + secondsAgo: "vor {{count}}s", + minutesAgo: "vor {{count}}m", + hoursAgo: "vor {{count}}h", + daysAgo: "vor {{count}}d", + statusIdle: "Nicht geprüft", + statusChecking: "Wird geprüft…", + statusOnline: "Verbunden", + statusStale: "Ruhig", + statusOffline: "Nicht gesehen", + statusError: "Nicht erreichbar", + notACoordinator: "Das ist kein Koordinator", + notACoordinatorDesc: "Füge ein nprofile, eine npub oder einen cordn.net-Link ein.", + added: "Koordinator hinzugefügt", + relayOne: "{{count}} Relay", + relayMany: "{{count}} Relays", + lastSeen: "zuletzt gesehen {{time}}", + onlineDesc: "Kündigt sich an. Gruppen, die ihn nutzen, können jetzt Nachrichten zustellen.", + staleDesc: "Gefunden, aber er hat sich nicht kürzlich angekündigt — er schläft möglicherweise.", + offlineDesc: "Keine Ankündigung gesehen. Er ist vielleicht privat (das ist okay) oder einfach offline.", + errorDesc: "Die Relays konnten nicht erreicht werden.", + idleDesc: "Wird geprüft…", + checkingDesc: "Suche nach seiner Ankündigung…", + eventFoundOne: "{{count}} Event gefunden.", + eventFoundMany: "{{count}} Events gefunden.", + check: "Prüfen", + addLinkCopied: "Hinzufügen-Link kopiert", + copyFailed: "Kopieren fehlgeschlagen", + copyManually: "Kopiere es manuell.", + addLink: "Link hinzufügen", + removeConfirm: "Diesen Koordinator von diesem Gerät entfernen?", + scanToJoin: "Scanne in Cordn, um diesem Koordinator beizutreten.", + noCoordinator: "Noch kein Koordinator", + noCoordinatorDescA: "Ein Koordinator stellt die", + encryptedWord: "verschlüsselten", + noCoordinatorDescB: "Gruppennachrichten deiner Crew der Reihe nach zu. Er sieht wer, wann und welche Gruppe — nie die Inhalte. Wähle einen oder betreibe deinen eigenen.", + change: "Koordinator wechseln", + addTitle: "Einen Koordinator hinzufügen", + add: "Hinzufügen", + scanQR: "Einen Koordinator-QR scannen", + inputPlaceholder: "nprofile… oder ein cordn.net-Link", + runOwn: "Eigenen betreiben", + runOwnDesc: "Er kann auf einem alten Handy, einem Raspberry Pi oder einer beliebigen kleinen Box laufen, die du anlässt. Deine Gruppe funktioniert weiter, solange er läuft — und du kannst die Gruppe jederzeit umziehen.", + onPhone: "Auf einem Handy", + onPhoneDesc: "Nutze die Cordn Coordinator App und scanne dann ihren QR-Code hier, um sie hinzuzufügen.", + openCordn: "Cordn öffnen", + scanItsQR: "Ihren QR scannen", + onServer: "Auf einem Server", + commandCopied: "Befehl kopiert", + copyCommand: "Befehl kopieren", + androidSleep: "Android kann einen Handy-Koordinator schlafen legen. Rechne damit, eine Gruppe ab und zu umzuziehen.", + privacyNote: "🔒 Ein Koordinator sieht nur Chiffretext und Metadaten — nie Nachrichteninhalte. Betreibe deinen eigenen, um auch die Metadaten für dich zu behalten.", + customTitle: "Benutzerdefinierter Chat-Koordinator", + customBadge: "· experimentell · dein eigenes Relay", + customDescShort: "Optional — deine Crew hat bereits einen integrierten Ende-zu-Ende-verschlüsselten Chat, du brauchst das also nicht. Stelle es nur ein, wenn du deinen eigenen betreibst", + remove: "Entfernen", + pointerNote: "Vorerst nur ein Zeiger: Ein wss://-Endpunkt wird als Chat-Relay der Crew verwendet; ein https://-Endpunkt über das gemeinsame ContextVM-Relay. Echtes Cordn MLS ist noch nicht angebunden.", + cordnCoordinator: "Cordn-Koordinator", + invalid: "Das sieht nicht nach einem Koordinator aus. Füge ein nprofile, einen cordn.net-Link oder eine https-/wss-URL ein.", + useMine: "Meinen Koordinator verwenden", + }, + createCrew: { + seoTitle: "Eine Crew gründen - SkateSpots", + seoDescription: "Gründe deine Skate-Crew — Heimatrevier, Mitglieder und Spots.", + loginRequired: "Anmeldung erforderlich", + loginRequiredDesc: "Du musst dich anmelden, um eine Crew zu gründen.", + backToCrews: "Zurück zu den Crews", + title: "Eine Crew gründen", + intro: "Deine Skate-Familie — die Leute, mit denen du skatest. Ein Name genügt für den Anfang; alles andere ist optional.", + }, + crew: { + seoTitleNamed: "{{name}} - SkateSpots Crew", + seoTitle: "Crew - SkateSpots", + seoDescription: "Eine Skate-Crew auf SkateSpots.", + postHidden: "Beitrag verborgen", + postHiddenDesc: "Für alle aus dem Crew-Feed entfernt.", + postHideFailed: "Beitrag konnte nicht verborgen werden", + backToCrews: "Zurück zu den Crews", + disband: "Auflösen", + youAreCaptain: "Du bist ein Captain", + member: "Mitglied", + askSasquatch: "Sasquatch fragen", + agent: "Crew-Agent", + agentDesc: "Der KI-Guide deiner Crew — Spots in der Nähe, Events, Coaches & Gear, mit Live-Daten.", + eventsTab: "Events", + chatTab: "Chat", + newMessages: "Neue Nachrichten", + hostJam: "Jam hosten", + noEvents: "Noch keine Crew-Events. Hoste einen Jam, Comp oder Meetup als Crew — es verbindet deine Crew mit dem Event-Kalender und lässt Leute sie zappen.", + support: "Unterstützen", + zapCrew: "Crew zappen", + bandTitle: "Crew-Band", + bandTagline: "Live-Musik · Skate & Sound", + listenTitle: "Anhören: {{domain}}", + listen: "Hör dir die Tunes an", + setUpGig: "Einen Gig aufsetzen", + bookGigMessage: "Hey {{crew}} — Interesse, {{band}} für einen Gig zu buchen. Hast du Zeit, über Termine zu reden?", + messageAboutGig: "Wegen eines Gigs schreiben", + gigHintA: "fügt ein Musik-Event zum Kalender hinzu, gehostet von dieser Crew.", + messageShort: "Nachricht", + gigHintB: "öffnet eine verschlüsselte DM an die Crew, um Termine & Details zu klären.", + homeSpots: "Home-Spots", + viewSpot: "Spot ansehen", + seeOnMap: "Auf der Karte ansehen →", + founderLinks: "Gründer & Links", + startedBy: "Gestartet von {{name}}", + opens: "Öffnet: {{domain}}", + }, + crews: { + seoTitle: "Crews - SkateSpots", + seoDescription: "Finde deine Leute. Entdecke lokale Skate-Crews, Kollektive und Communities in deiner Nähe.", + videoPartTooltip: "Diese Crew hat einen Video-Part", + part: "Part", + bandTooltip: "Crew-Band: {{name}}", + band: "Band", + focusAll: "Alle", + focusAllShort: "Alle", + focusDiy: "DIY", + focusPhoto: "Foto", + focusCoaching: "Coaching", + focusArt: "Kunst", + focusMusic: "Musik", + focusPhysio: "Physio", + focusMixed: "Gemischt", + title: "Crews", + heroLine: "Deine auf der Karte verankerte Skate-Familie — die Leute, mit denen du skatest", + heroWith: "mit", + heroRest: ", nicht die, die du anheuerst (das ist The Lab).", + crewCountOne: "{{count}} Crew", + crewCountMany: "{{count}} Crews", + cityCountOne: "{{count}} Stadt", + cityCountMany: "{{count}} Städte", + createCrew: "Crew gründen", + create: "Gründen", + searchPlaceholder: "Crews nach Name oder Stadt suchen…", + filterTitle: "Crews filtern", + filterDesc: "Woran die Crew interessiert ist.", + nearMe: "In meiner Nähe", + emptySearchTitle: "Keine Crews entsprechen deiner Suche", + emptySearchHint: "Nichts gefunden für „{{query}}“. Versuche einen anderen Namen oder eine andere Stadt.", + clearSearch: "Suche leeren", + emptyFocusTitle: "Noch keine {{label}}-Crews", + emptyFocusHint: "Hier hisst noch niemand die „{{label}}“-Flagge. Zeige alle Crews oder gründe diese selbst.", + showAll: "Alle Crews anzeigen", + claimTitle: "Beanspruche deine lokale Szene", + claimHint: "Hier sind noch keine Crews gepflanzt. Sei der Erste — gründe deine Crew, verknüpfe deine Home-Spots und setz deine Szene auf die Karte, damit alle sie finden.", + }, + crewCoordinator: { + privateChat: "Privater Crew-Chat", + on: "An", + defaultA: "Der", + chatWord: "Chat", + defaultB: "-Tab ist", + e2ee: "Ende-zu-Ende-verschlüsselt", + defaultC: "für den Gründer und alle gelisteten Mitglieder — nichts einzurichten. Nachrichten sind an den Schlüssel jedes Mitglieds versiegelt (NIP-17), sodass nur deine Crew sie lesen kann.", + advancedA: "Fortgeschritten: betreibe deinen eigenen", + cordnCoordinator: "Cordn-Koordinator", + routeThrough: "Chat darüber leiten", + coordinator: "Koordinator", + deliveredOver: "Zugestellt über", + sharedRelay: "— das gemeinsame ContextVM-Relay.", + ownRelay: "— das eigene Relay deiner Crew.", + chatLive: "Der private Chat ist live", + routesA: "Der", + routesB: "-Tab leitet über diesen Koordinator: Nachrichten sind Ende-zu-Ende-verschlüsselt (NIP-44, an jedes Mitglied versiegelt), sodass er nur versiegelten Datenverkehr verarbeitet.", + publicWarning: "Achtung: Er ist über das gemeinsame ContextVM-Relay adressiert, daher sind der Chiffretext und seine Metadaten (welche Crew und wann) öffentlich sichtbar — nur nicht lesbar. Richte die Crew auf ein privates wss://-Relay aus, um auch das privat zu halten.", + ownRelaySafe: "Nichts Crew-Spezifisches verlässt das eigene Relay deiner Crew.", + manage: "Koordinator verwalten", + open: "{{domain}} öffnen", + runBy: "Koordinator betrieben von", + }, + dms: { + securityReminder: "Sicherheitshinweis", + phishingStrong: "SkateSpots wird dich niemals per DM anschreiben", + phishingRest: "um dein Konto zu verifizieren, deine Schlüssel zu teilen oder Zahlungen zu senden. Wenn sich jemand per DM als SkateSpots-Support ausgibt — es ist ein Betrugsversuch.", + dismissReminder: "Sicherheitshinweis verwerfen", + peopleCount: "{{count}} Personen", + youPrefix: "Du: ", + unreadMessages: "Ungelesene Nachrichten", + seoTitle: "Nachrichten - SkateSpots", + seoDescription: "Private verschlüsselte Nachrichten mit der Skateboard-Community", + loginTitle: "Melde dich an, um auf Nachrichten zuzugreifen", + loginDesc: "Private, verschlüsselte Nachrichten mit Skatern in der Community", + secureLoginTitle: "Sichere Anmeldung erforderlich", + secureLoginDesc: "Private Nachrichten erfordern eine sichere Signer-App, um deine Gespräche zu verschlüsseln.", + onAndroid: "Auf Android:", + useAmber: "Nutze die Amber-App", + getAmber: "Amber holen →", + onIOS: "Auf iOS:", + iosHint: "Versuche dich mit einer Bunker-Verbindung (nsec.app) aus den Einstellungen anzumelden", + browserHint: "Versuche dich mit einer Browsererweiterung wie Alby oder nos2x anzumelden, die Verschlüsselung unterstützt.", + title: "Nachrichten", + subtitleFull: "Ende-zu-Ende-verschlüsselt mit NIP-17", + subtitleShort: "Verschlüsselt", + newMessage: "Neue Nachricht", + groups: "Gruppen", + loadFailed: "Nachrichten konnten nicht geladen werden", + emptyTitle: "Noch keine Nachrichten", + emptyDesc: "Starte ein Gespräch mit jemandem aus der Community", + startConversation: "Ein Gespräch starten", + undecryptableOne: "{{count}} verschlüsselte Nachricht konnte von deinem Signer nicht geöffnet werden.", + undecryptableMany: "{{count}} verschlüsselte Nachrichten konnten von deinem Signer nicht geöffnet werden.", + }, + editCrew: { + seoTitleNamed: "{{name}} bearbeiten - SkateSpots", + seoTitle: "Crew bearbeiten - SkateSpots", + seoDescription: "Bearbeite deine Skate-Crew.", + loginRequired: "Anmeldung erforderlich", + notYours: "Nicht deine Crew", + notYoursDesc: "Nur der Gründer der Crew kann diese Crew bearbeiten.", + backToCrew: "Zurück zur Crew", + title: "Crew bearbeiten", + }, + form: { + add: "Hinzufügen", + added: "Hinzugefügt", + addNameInBasicsA: "Füge wieder einen Crew-Namen in", + addNameInBasicsB: "hinzu, um abzuschließen.", + adminsDescA: "Mache vertrauenswürdige Mitglieder zu", + adminsWord: "Admins", + adminsDescB: "— sie können Mitglieder einladen und den Crew-Feed & Chat mit ihren eigenen Schlüsseln moderieren. Du (der Gründer) bleibst immer der Inhaber der Crew-Identität.", + agentDescA: "Füge", + agentDescB: ", einen KI-Guide hinzu, der deine Crew wirklich kennt. Mitglieder können nach", + agentDescC: "fragen — plus Spots, Events, Coaches und Gear in der Nähe aus Live-SkateSpots-Daten. Läuft direkt im Browser; keine Schlüssel oder Einrichtung. Es ist früh (KI im Gratis-Tarif, daher gelegentlich langsam).", + agentDescStrong: "deinem nächsten Jam, wer die Crew leitet, wonach du suchst und deiner Vibe", + agentEnabledNote: "Sasquatch erscheint auf deiner Crew-Seite, sobald du speicherst.", + bandDesc: "Hast du eine Band? Skate-Szenen und lokale Musik gehören zusammen — trage deinen Bandnamen und einen Link zu den Tunes ein.", + bandFooterA: "Für ein vollständiges Band-Profil (Genres, Instrumente, Gigs) erstelle einen", + musicianWord: "Musiker", + bandFooterB: "in The Lab und verknüpfe ihn dann im Abschnitt", + linkedLabWord: "Verknüpfte Lab-Profile", + bandFooterC: "oben.", + bandMusicWord: "Band & Musik", + bandName: "Bandname", + bandNamePlaceholder: "z. B. The Bail Outs", + bandNudgeA: "Du hast eine Band — tippe, um deinen", + crewTypeWord: "Crew-Typ", + bandNudgeB: "auf", + bandNudgeC: "zu setzen, damit du auch in der Musik-Szene von The Lab auftauchst.", + beta: "Beta", + bioLabel: "Über / Manifest", + bioPlaceholder: "Wer du bist, was du skatest, deine Story…", + continue: "Weiter", + crewCreated: "Crew gegründet!", + crewUpdated: "Crew aktualisiert!", + crewName: "Crew-Name", + crewOnlyWord: "Nur Crew", + crewType: "Crew-Typ", + crewTypeDescA: "Ist deine Crew auf ein Handwerk fokussiert? Wähle eines, um auch in dieser Szene in", + theLab: "The Lab", + crewTypeDescB: "aufzutauchen. Normale Skate-Crews bleiben", + mixedWord: "Gemischt", + crewTypeDescC: ".", + customVibeHint: "Füge deine eigene Vibe oder deinen Fokus mit einem # hinzu", + customVibePlaceholder: "z. B. downhill, night-sessions, no-comply", + editDesc: "Die Identität, das Heimatrevier und die Mitglieder deiner Crew", + enableAgent: "Crew-Agent aktivieren", + enableTreasury: "Crew-Kasse aktivieren", + failed: "Fehlgeschlagen", + founded: "Gegründet (Jahr)", + geolocationUnsupported: "Geolocation wird nicht unterstützt", + gettingLocation: "Wird abgerufen…", + goalHint: "Stelle sicher, dass dein Nostr-Profil eine Lightning-Adresse (lud16) hat, damit Beiträge ankommen können.", + goalPlaceholder: "z. B. den DIY-Spot betonieren", + goalTarget: "Ziel (sats)", + goalWhat: "Was ist das Ziel?", + homeSpots: "Home-Spots", + homeSpotsDesc: "Verknüpfe die Spots, die deine Crew frequentiert — sie verbinden sich auf der Karte mit deiner Crew", + homeTurf: "Heimatrevier (Stadt / Gegend)", + homeTurfPlaceholder: "Bristol, UK", + instagramDetected: "Instagram-Clip erkannt", + invalidMember: "Gib eine gültige npub, ein nprofile oder einen Hex-Pubkey ein.", + latitude: "Breitengrad", + leaveBlankLocation: "Leer lassen, um den aktuellen Standort des Heimatreviers beizubehalten.", + links: "Links", + locationError: "Standortfehler", + locationFound: "Standort gefunden", + logoAlt: "Crew", + logoHint: "Ein Logo macht deine Crew auf der Karte und in Feeds sofort erkennbar. Quadratisch funktioniert am besten.", + logoLabel: "Crew-Logo / Foto", + logoUploaded: "Logo hochgeladen", + longitude: "Längengrad", + looksGood: "Sieht gut aus", + makeAdmin: "Zum Admin machen", + mapPin: "Kartenpin", + mapPinHint: "Setz deine Crew auf die Karte, damit Leute vor Ort dich finden. Tippe auf den Button — kein Tippen nötig.", + memberAlreadyAdded: "Dieses Mitglied ist bereits hinzugefügt.", + members: "Mitglieder", + membersDesc: "Füge die Nostr-Konten deiner Crew hinzu. Jedes Mitglied bestätigt mit seinem eigenen Schlüssel — bis dahin erscheinen sie als „ausstehend“.", + musicLink: "Musik-Link", + nameCrew: "Benenne deine Crew", + nameCrewDesc: "Eine Crew braucht einen Namen, bevor du fortfahren kannst.", + nameCrewFirst: "Benenne zuerst deine Crew", + nameHint: "Das Einzige, was du wirklich brauchst. Du kannst es später ändern.", + namePlaceholder: "z. B. Backyard Bandits", + nameRequired: "Name erforderlich", + nameRequiredDesc: "Gib deiner Crew einen Namen.", + nip05DescA: "Ein verifizierbarer Handle, den du auf jeder Domain kontrollierst, z. B.", + nip05DescB: ". Er wird gegen den Gründer-Schlüssel dieser Crew verifiziert, und du kannst mehrere hinzufügen — jeder zeigt ein grünes Häkchen, wenn seine Domain ihn bestätigt.", + nip05Label: "Crew-NIP-05", + nip05Placeholder: "crew@deinedomain.com", + nip05Add: "Hinzufügen", + nip05Invalid: "Gib einen Handle wie crew@deinedomain.com ein", + nip05TooMany: "Du kannst bis zu {{count}} Handles hinzufügen.", + nip05Unverified: "Nicht geprüft", + nip05Remove: "{{handle}} entfernen", + notAKeyA: "Das sieht noch nicht wie ein Nostr-Schlüssel aus — füge eine", + notAKeyB: ",", + notAKeyC: ", oder einen Hex-Pubkey ein.", + onlyYouTubeInstagram: "Nur YouTube- und Instagram-Links werden unterstützt.", + openCall: "Open Call", + openCallDescA: "Suchst du einen Filmer, Editor oder frisches Blut? Gib einen Aufruf raus — er erscheint auf deiner Crew-Seite, sodass passende Leute von", + openCallDescB: "sich melden können.", + optional: "· optional", + optionalParen: "(optional)", + otherSocials: "Weitere soziale Netzwerke", + otherSocialsDesc: "Füge so viele hinzu, wie du magst — YouTube, TikTok, Discord, Telegram usw.", + ownVisibility: "eigene Sichtbarkeit", + progress: "Fortschritt", + publicWord: "Öffentlich", + publishedToScene: "In der Szene veröffentlicht.", + publishFailed: "Veröffentlichung fehlgeschlagen", + publishing: "Wird veröffentlicht…", + ready: "Bereit", + readyToRollA: "Alles bereit — drück auf", + readyToRollB: ", wann immer du magst.", + removeAdminRole: "Admin-Rolle entfernen", + removeMember: "Mitglied entfernen", + removeSocial: "Social-Link entfernen", + removeVibe: "{{vibe}} entfernen", + roles: "Rollen:", + sasquatch: "Sasquatch", + saveCrew: "Crew speichern", + skipToEnd: "Zum Ende springen", + socialPlaceholder: "@benutzername oder Link", + sponsorDesc: "Wenn ein lokaler Shop deine Crew unterstützt, wähle ihn hier, um ein „Gesponsert von“-Banner anzuzeigen, das zu seinem Shop verlinkt.", + stepAria: "Schritt {{step}}: {{title}}", + stepBasics: "Die Grundlagen", + stepBasicsShort: "Grundlagen", + stepBasicsHint: "Nur das Wesentliche — mit diesem Schritt allein kannst du eine Crew aufsetzen.", + stepVibe: "Identität & Vibe", + stepVibeShort: "Vibe", + stepVibeHint: "Wie deine Crew in der App auftritt. Alles optional.", + stepSquad: "Squad & Spots", + stepSquadShort: "Squad", + stepSquadHint: "Füge deine Leute und dein Heimatrevier hinzu. Du kannst das jederzeit später machen.", + stepExtras: "Extras", + stepExtrasShort: "Extras", + stepExtrasHint: "Power-ups für später — überspringe alles, bei dem du unsicher bist.", + extrasAllOptional: "Alles in diesem Schritt ist optional.", + groupIdentity: "Identität", + groupIdentityHint: "Handle, Links", + groupAi: "Sasquatch-KI", + groupShowcase: "Showcase", + groupPayments: "Zahlungen & Kasse", + groupIntegrations: "Integrationen", + groupAdvanced: "Fortgeschritten", + groupAdvancedHint: "experimentell", + pro: "Pro", + agentProNote: "Bereitgestellt von Sasquatch. Pro bekommt die besten Modelle; ohne Pro wird ein kostenloser Fallback genutzt.", + stepOf: "Schritt {{step}} von {{total}}", + treasuryDescA: "Sammle sats für ein gemeinsames Ziel — den lokalen DIY-Spot reparieren, eine Crew-Reise, einen Comp-Preispott. Es ist ein transparentes Lightning-Ziel; Zaps gehen", + treasuryDescStrong: "direkt an deine Wallet", + treasuryDescB: "(über die Lightning-Adresse deines Profils). SkateSpots hält die Gelder niemals.", + upload: "Hochladen", + uploadFailed: "Hochladen fehlgeschlagen", + useCurrentLocation: "Aktuellen Standort verwenden", + vibeLabel: "Vibe / Fokus", + videoDescA: "Das komplette Part, Montage oder neuester Clip deiner Crew. Füge einen", + videoDescB: "-Link ein — er wird direkt auf deiner Crew-Seite abgespielt.", + visibilityDescA: "Jedes Mitglied steuert seine", + visibilityDescB: "— wenn sie mit ihrem Schlüssel bestätigen, können sie wählen", + visibilityDescC: "— vor Außenstehenden verborgen). Du kannst das nicht für sie einstellen; das ist ihre Entscheidung.", + website: "Website", + yourRoles: "Deine Rollen (Teamleader)", + youtubeDetected: "YouTube-Video erkannt", + invalidUrl: "Gib einen gültigen Link ein (z. B. https://example.com).", + }, + groupConversation: { + seoTitle: "Gruppenchat - SkateSpots", + invalidLink: "Dieser Gruppenchat-Link ist ungültig.", + loginTitle: "Melde dich an, um diese Gruppe zu sehen", + secureSignerTitle: "Sicherer Signer erforderlich", + secureSignerDesc: "Gruppennachrichten erfordern einen NIP-44-fähigen Signer.", + encryptedGroup: "Ende-zu-Ende-verschlüsselte Gruppe", + empty: "Noch keine Nachrichten — sag Hallo in die Gruppe.", + placeholder: "Nachricht an die Gruppe...", + }, + hero: { + established: "Gegr. {{year}}", + teamLeader: "Teamleader: {{name}}", + ledBy: "Geleitet von", + }, + inviteCard: { + acceptedTitle: "Einladung angenommen 🛹", + acceptedDesc: "Der Crew-Gründer bestätigt Mitglieder auf {{crew}}. Du erscheinst im Roster, sobald er zustimmt.", + couldNotAccept: "Konnte nicht annehmen", + couldNotDecline: "Konnte nicht ablehnen", + acceptedDone: "Angenommen —", + confirmsMembers: "bestätigt Mitglieder", + declinedDone: "Einladung zu {{crew}} abgelehnt", + invitedYou: "hat dich eingeladen, beizutreten", + admin: "Admin", + accept: "Annehmen", + decline: "Ablehnen", + }, + inviteDialog: { + messageIntro: "Yo — tritt der {{crew}}-Crew auf SkateSpots bei 🛹", + messageBody: "Melde dich mit deinem Nostr-Schlüssel an und bitte dann über die Crew-Seite um Beitritt.", + copyFailed: "Kopieren fehlgeschlagen", + shareTitle: "{{crew}} beitreten", + sentTitle: "Einladung gesendet! 🛹", + sentDesc: "Sie erhalten eine Benachrichtigung zum Annehmen oder Ablehnen.", + couldNotSend: "Einladung konnte nicht gesendet werden", + trigger: "Einladen", + title: "Zu {{crew}} einladen", + description: "Sende eine Einladung an den Nostr-Schlüssel von jemandem oder teile einen Link.", + sendTab: "Einladung senden", + shareTab: "Link teilen", + npubLabel: "Skater-npub", + invalidNpub: "Das sieht nicht nach einer gültigen npub aus.", + noteLabel: "Notiz", + optional: "(optional)", + notePlaceholder: "Komm mit uns skaten…", + inviteAsAdmin: "Als Admin einladen", + inviteAsAdminDesc: "Kann die Crew verwalten & andere einladen.", + sendButton: "Einladung senden", + sendFooter: "Sie erhalten eine Benachrichtigung zum Annehmen oder Ablehnen. Die Mitgliedschaft zählt erst, wenn sie annehmen.", + inviteLink: "Einladungslink", + messageLabel: "Nachricht", + copyMessage: "Nachricht kopieren", + founderHint: "Als Gründer kannst du den Schlüssel eines Mitglieds auch direkt hinzufügen; danach bestätigt es.", + addMemberSettings: "Mitglied in den Crew-Einstellungen hinzufügen", + }, + joinRequest: { + moreCount: "+{{count}} weitere", + addedTitle: "{{name}} zu {{crew}} hinzugefügt 🛹", + addedDesc: "Sie bestätigen von ihrer Seite, um als Mitglied zu erscheinen.", + vouchedTitle: "Du hast für {{name}} gebürgt 🤝", + vouchedDesc: "Der Gründer von {{crew}} sieht deine Empfehlung und kann sie hinzufügen.", + couldNotEndorse: "Empfehlung konnte nicht abgegeben werden", + endorsedDoneA: "Du hast gebürgt für", + endorsedDoneB: "— Gründer wird bestätigen", + vouchedBy: "Verbürgt von", + approveAndAdd: "Bestätigen & hinzufügen", + addToCrew: "Zur Crew hinzufügen", + vouchedWaiting: "Verbürgt — wartet auf den Gründer", + vouchForThem: "Für sie bürgen", + leadershipOnly: "Nur Crew-Leitung.", + adminHelp: "Admins können Mitglieder nicht direkt hinzufügen — Bürgen sagt dem Gründer, dass du hinter diesem Rider stehst.", + }, + leadership: { + teamLeader: "Teamleader", + captain: "Captain", + verifiedMember: "Verifiziertes Mitglied", + messageName: "{{name}} anschreiben", + title: "Leitung", + captainsOne: "{{count}} Captain", + captainsMany: "{{count}} Captains", + footer: "Der Teamleader führt das Roster; Captains helfen beim Einladen, Hosten von Jams und Halten der Crew in Ordnung.", + }, + linkField: { + title: "Verknüpfte Crew", + description: "Betreibst du auch eine Crew? Verknüpfe sie, damit Leute zwischen deinem Studio und deiner Crew wechseln können. Optional. Verknüpfe diese Crew im Crew-Editor zurück mit dem Profil, und beide zeigen ein grünes", + descriptionRest: "Abzeichen.", + none: "Du hast noch keine Crews. Gründe eine auf der Crews-Seite, um sie hier zu verknüpfen.", + linkedCrew: "Verknüpfte Crew ({{id}})", + }, + lookingFor: { + title: "Open Call", + subtitle: "Diese Crew sucht:", + }, + memberVisibility: { + updatedTitle: "Sichtbarkeit aktualisiert", + updatedCrew: "Du erscheinst jetzt nur für Crew-Kollegen.", + updatedPublic: "Du erscheinst jetzt öffentlich in dieser Crew.", + couldNotUpdate: "Konnte nicht aktualisiert werden", + title: "Deine Sichtbarkeit in dieser Crew", + save: "Sichtbarkeit speichern", + }, + newMessage: { + inCrew: "In deiner Crew: {{crews}}", + crewmate: "Crew-Kollege", + following: "Folge ich", + invalidKey: "Das sieht nicht nach einer gültigen npub oder einem öffentlichen Schlüssel aus.", + description: "Suche deine Leute nach Namen oder füge eine npub ein, um jedem zu schreiben. Wähle zwei oder mehr, um eine Gruppe zu starten.", + searchPlaceholder: "Name suchen oder npub1... einfügen", + messageThisKey: "Diesem Schlüssel schreiben", + loadingPeople: "Deine Leute werden geladen...", + noPeople: "Noch keine Crew-Kollegen oder Follows.", + noPeopleHint: "Füge oben die npub von jemandem ein, um ein Gespräch zu starten.", + yourCrews: "Deine Crews", + selected: "{{count}} ausgewählt", + startGroup: "Gruppe starten ({{count}})", + message: "Nachricht", + }, + nip05: { + mismatch: "Diese Domain verweist den Handle auf einen anderen Nostr-Schlüssel als den des Crew-Gründers. Nicht verifiziert.", + verified: "Verifiziert — die Domain bestätigt, dass dieser Handle zum Gründer-Schlüssel der Crew gehört.", + }, + requestCollective: { + sentTitle: "Anfrage gesendet 🤝", + sentDesc: "{{name}} sieht sie in den Benachrichtigungen und kann dich hinzufügen.", + couldNotSend: "Anfrage konnte nicht gesendet werden", + title: "Diesem Kollektiv beitreten", + waiting: "Anfrage gesendet — wartet auf {{name}}.", + askA: "Bitte die Crew hinter", + askB: "dich zum Roster hinzuzufügen. Sie erhalten eine Benachrichtigung und können dich mit einem Tipp hinzufügen.", + placeholder: "Optional: sag, warum du gut passen würdest…", + sendButton: "Anfrage senden", + }, + requestToJoin: { + sentTitle: "Anfrage gesendet! 🛹", + sentDesc: "Die Leitung von {{crew}} sieht sie in ihren Benachrichtigungen.", + couldNotSend: "Anfrage konnte nicht gesendet werden", + trigger: "Beitritt anfragen", + title: "{{crew}} beitreten", + description: "Benachrichtigt den Gründer & die Admins der Crew, damit sie dich hinzufügen können.", + placeholder: "Sag Hallo — wo du skatest, wen du kennst, warum du rein willst…", + sending: "Wird gesendet…", + sendButton: "Beitrittsanfrage senden", + }, + sponsorBanner: { + loading: "Sponsor wird geladen…", + sponsoredBy: "Gesponsert von", + }, + sponsorPicker: { + selected: "Sponsor ausgewählt", + setLoading: "Sponsor gesetzt (Shop wird geladen…)", + set: "Sponsor gesetzt", + clearAria: "Sponsor entfernen", + searchPlaceholder: "Skate-Shops nach Name oder Stadt suchen…", + loading: "Shops werden geladen…", + noMatch: "Keine Shops passen — versuche eine andere Suche.", + none: "Noch keine Shops gefunden.", + }, + treasury: { + title: "Crew-Kasse", + ofGoal: "von {{target}} Ziel", + goalReached: "Ziel erreicht!", + funded: "{{percent}}% finanziert", + contributionOne: "{{count}} Beitrag", + contributionMany: "{{count}} Beiträge", + daysLeft: "noch {{days}} Tage", + closed: "geschlossen", + nonCustodial: "Nicht verwahrend · Zaps gehen direkt an die Lightning-Wallet der Crew", + }, + userStatus: { + atSpot: "📍 An einem Spot", + autoClears: "⏱️ Löscht sich automatisch in {{min}} Min.", + }, + video: { + title: "Das Part", + fullVideo: "Ganzes Video · Montage", + latestClip: "Neuester Clip", + watch: "Ansehen", + iframeTitle: "{{crew}} — Video", + playAria: "{{crew}}-Video abspielen", + thumbAlt: "{{crew}} Video-Thumbnail", + instagramTitle: "Instagram-Clip", + }, + vouch: { + removedTitle: "Bürgschaft entfernt", + vouchedTitle: "Verbürgt!", + removedDesc: "Du bürgst nicht mehr für {{name}}.", + vouchedDesc: "Du hast für {{name}} gebürgt. Die Szene vertraut ihren Eigenen.", + couldNotVouch: "Bürgschaft konnte nicht abgegeben werden", + title: "Szenen-Bürgschaften", + sceneVerified: "Szenen-verifiziert", + vouched: "Verbürgt", + newUnvouched: "Neu · unverbürgt", + checking: "Die Szene wird geprüft…", + empty: "Noch keine Bürgschaften. Bürgschaften von Skatern in deinem Umfeld sind das beste Signal, dass jemand echt ist — nicht irgendein Zufallsbesucher.", + countOne: "{{count}} Bürgschaft", + countMany: "{{count}} Bürgschaften", + trusted: "{{count}} von Skatern in deinem Vertrauensnetz", + remove: "Bürgschaft entfernen", + vouchFor: "Für {{name}} bürgen", + ownerNote: "Skater, die deine Arbeit kennen, können hier für dich bürgen.", + }, + }, +}; export default deBatch5; diff --git a/src/i18n/de/batch6.ts b/src/i18n/de/batch6.ts index 484783f..f3f87d3 100644 --- a/src/i18n/de/batch6.ts +++ b/src/i18n/de/batch6.ts @@ -1,4 +1,2041 @@ -/** de — batch 6. Filled by the translation pass; empty until then. */ -const deBatch6 = {}; +const deBatch6 = { + placesUi: { + addToCalendar: { + add: "Zum Kalender hinzufügen", + appleOutlook: "Apple / Outlook (.ics)", + google: "Google Kalender", + }, + attendees: { + goingCount: "Zusagen", + goingTab: "Zusagen ({{count}})", + interestedTab: "Interessiert ({{count}})", + nobodyGoing: "Noch hat niemand zugesagt.", + nobodyInterested: "Noch hat niemand Interesse markiert.", + noRsvps: "Noch keine RSVPs – sag als Erste:r, dass du kommst.", + trusted: "Vertrauenswürdig", + trustedTitle: "Jemand, dem du folgst, oder ein vertrauenswürdiger Mapper", + youTrust: "dem du vertraust", + }, + bounty: { + addressCoords: "Adresse & Koordinaten", + basic: "Basis", + contactInfo: "Kontaktinfo", + description: "Beschreibung", + earningPotential: "Verdienstmöglichkeit", + excellent: "Ausgezeichnet!", + gettingStarted: "Erste Schritte", + good: "Gut", + onePhoto: "Mindestens 1 Foto", + openingHours: "Öffnungszeiten", + shopName: "Shop-Name", + threePhotos: "3+ Fotos", + tip: "💡 Höhere Qualität = mehr Zaps aus der Community!", + }, + calendar: { + allDay: "Ganztägig", + eventDay: "Event-Tag", + eventsOnDay: "{{count}} Events", + eventsThisMonth: "Events diesen Monat", + going: "Zusagen", + months: { + january: "Januar", + february: "Februar", + march: "März", + april: "April", + may: "Mai", + june: "Juni", + july: "Juli", + august: "August", + september: "September", + october: "Oktober", + november: "November", + december: "Dezember", + }, + nextMonth: "Nächster Monat", + nothingOnDay: "An diesem Tag ist nichts los.", + prevMonth: "Vorheriger Monat", + tapHighlighted: "Tippe auf einen markierten Tag, um zu sehen, was läuft.", + today: "Heute", + tourDay: "Tour-Tag", + toursOnDay: "{{count}} Touren", + toursThisMonth: "Touren diesen Monat", + weekdays: { + sun: "So", + mon: "Mo", + tue: "Di", + wed: "Mi", + thu: "Do", + fri: "Fr", + sat: "Sa", + }, + weekdaysShort: { + sun: "S", + mon: "M", + tue: "D", + wed: "M", + thu: "D", + fri: "F", + sat: "S", + }, + }, + countdown: { + ended: "Beendet", + happeningNow: "Läuft gerade", + inDays: "In {{count}} Tagen", + inHoursMins: "In {{hours}} Std. {{mins}} Min.", + inMins: "In {{count}} Min.", + startingNow: "Startet jetzt", + tomorrow: "Morgen", + }, + createEvent: { + add: "Hinzufügen", + addNewSpot: "Neuen Spot hinzufügen →", + changeSpot: "Spot ändern", + created: "Event erstellt!", + createdDesc: "Dein Event wurde im Netzwerk veröffentlicht.", + entryFee: "Eintritt", + entryFeeHint: "(optional – z. B. „500 sats“ oder „10 €“)", + entryFeePlaceholder: "Leer lassen für kostenlose Events", + featuring: "Mit {{name}}", + featuringDesc: "Dieser Act wird als Live-Musik getaggt und in ihrer Gig-Liste angezeigt.", + fundingGoal: "Finanzierungsziel", + fundingGoalHint: "(optional – sats zum Crowdfunden per Zaps)", + fundingGoalPlaceholder: "z. B. 50000", + geoNotSupported: "Geolokalisierung nicht unterstützt", + geoNotSupportedDesc: "Dein Browser unterstützt keine Geolokalisierung.", + hideSpots: "Spots ausblenden", + hostingAs: "Gastgeber als {{name}}", + hostingAsDesc: "Dieses Event erscheint auf deiner Crew-Seite und wird als Crew-veranstaltet getaggt.", + imageUploaded: "Bild hochgeladen", + imageUploadedDesc: "Dein Bild wurde erfolgreich hochgeladen.", + invalidDate: "Ungültiges Datum", + invalidDateDesc: "Bitte gib ein gültiges Startdatum und eine Uhrzeit ein.", + invalidEnd: "Ungültige Endzeit", + invalidEndDesc: "Die Endzeit muss nach der Startzeit liegen.", + linkedTo: "Verknüpft mit: {{title}}", + linkToSpot: "Mit einem Skate-Spot verknüpfen", + linkToShop: "Mit einem Shop verknüpfen", + selectedShop: "Verknüpft mit {{name}}", + selectShopHint: "Optional – findet in einem Skate-Shop statt oder wird von einem veranstaltet.", + selectShop: "Shop auswählen", + changeShop: "Shop ändern", + hideShops: "Shops ausblenden", + searchShops: "Shops suchen…", + noShopsMatch: "Keine Shops passen zu deiner Suche.", + noShopsAvailable: "Noch keine Shops verfügbar.", + linkToTour: "Mit einer Tour verknüpfen (optional)", + linkTourDesc: + "Verknüpfe dieses Event mit einer Tour, um zu zeigen, dass es Teil einer größeren Serie ist. Ideal für nationale Touren, internationale Abenteuer oder World Destruction Tour-Challenge-Tage.", + loadingSpots: "Spots werden geladen...", + loadingTours: "Touren werden geladen...", + locationError: "Standortfehler", + locationFound: "Standort gefunden", + locationFoundDesc: "Dein aktueller Standort wurde festgelegt.", + logoUrl: "Logo-URL (optional)", + noSpotsAvailable: "Keine Spots verfügbar", + noSpotsMatch: "Keine Spots passen zu deiner Suche", + noTourLinked: "Keine Tour verknüpft", + optional: "(optional)", + pastDesc: "Wähle ein Datum und eine Uhrzeit in der Zukunft, damit Skater RSVPen und auftauchen können.", + pastTitle: "Diese Startzeit liegt in der Vergangenheit", + publishFailed: "Veröffentlichen fehlgeschlagen", + publishFeatured: "Hervorgehobenes Event veröffentlichen", + removeSponsor: "Sponsor entfernen", + searchSpots: "Spots nach Name, Ort oder Kategorie suchen...", + selectedSpot: "Ausgewählt: {{name}}", + selectSpot: "Spot auswählen", + selectSpotHint: "Wähle einen Spot auf der Karte, wo dieses Event stattfindet", + selectTour: "Tour auswählen", + somethingWrong: "Etwas ist schiefgelaufen", + sponsorName: "Sponsorenname", + sponsors: "Sponsoren", + sponsorsHint: + "Hat ein Shop oder eine Marke das Event im Rücken? Füge ihr Logo hinzu – es erscheint als „Präsentiert von“-Leiste beim Event.", + startRequired: "Startzeit erforderlich", + startRequiredDesc: "Bitte gib an, wann das Event beginnt.", + titleRequired: "Titel erforderlich", + titleRequiredDesc: "Bitte gib einen Namen für dieses Event ein.", + uploadFailed: "Upload fehlgeschlagen", + uploadFailedDesc: "Bild konnte nicht hochgeladen werden", + websiteUrl: "Website-URL (optional)", + }, + createShop: { + address: "Shop-Adresse", + addressPlaceholder: "z. B. 411 N Fairfax Ave, Los Angeles, CA 90036", + addressRequired: "Adresse erforderlich", + addressRequiredDesc: "Bitte gib die Adresse deines Shops ein.", + contactHint: "Hilf Kunden, dich zu erreichen (mindestens eine Kontaktmöglichkeit empfohlen)", + contactInfo: "Kontaktinformationen", + created: "🎉 Shop hinzugefügt!", + createdDesc: + "Dein Skate-Shop ist jetzt auf der Karte. Skater können dir Zaps schicken, um Danke zu sagen!", + descriptionPlaceholder: "Erzähl den Leuten von deinem Shop, was du verkaufst, deine Spezialität...", + detailsDesc: "Erzähl der Community von deinem Shop. Alle mit * markierten Felder sind erforderlich.", + email: "E-Mail", + hoursOfOperation: "Öffnungszeiten", + hoursPlaceholder: "z. B. Mo-Sa 10-20 Uhr, So 12-18 Uhr", + instagram: "Instagram", + invalidCoords: "Ungültige Koordinaten", + invalidCoordsDesc: "Bitte gib gültige Breite (-90 bis 90) und Länge (-180 bis 180) ein.", + latPlaceholder: "Breitengrad (z. B. 34.0737)", + lngPlaceholder: "Längengrad (z. B. -118.3614)", + locationRequired: "Standort erforderlich", + locationRequiredDesc: "Bitte gib Koordinaten ein oder nutze deinen aktuellen Standort.", + loginToAdd: "Du musst dich einloggen, um einen Skate-Shop hinzuzufügen.", + namePlaceholder: "z. B. Supreme Los Angeles", + nameRequired: "Shop-Name erforderlich", + nameRequiredDesc: "Bitte gib einen Namen für deinen Shop ein.", + phoneNumber: "Telefonnummer", + publishFailedDesc: "Etwas ist schiefgelaufen. Prüfe die Konsole für Details.", + shopPhotoAlt: "Shop", + shopPhotos: "Shop-Fotos", + subtitle: "Liste deinen Shop auf der Karte und vernetze dich mit der Community", + upload: "Hochladen", + }, + createTour: { + acceptedClipSources: "Akzeptierte Clip-Quellen", + acceptedClipSourcesDesc: "Welche Formate akzeptierst du für Clip-Einsendungen?", + accommodationInfo: "Unterkunftsinfo", + accommodationPlaceholder: + "Unterkunftsempfehlungen oder -arrangements, z. B. 'Günstige Hostels entlang der Route', 'Campingausrüstung erforderlich', 'Airbnbs inklusive'", + addChallenge: "Challenge hinzufügen", + addCity: "Eine Stadt hinzufügen...", + addCountry: "Ein Land hinzufügen...", + addShopFirst: "Zuerst einen Shop hinzufügen", + alsoSelected: "Ebenfalls ausgewählt:", + availabilityPlaceholder: "z. B. Wochenenden, nur morgens, nach Vereinbarung", + availabilityQuestion: "Wann bist du normalerweise verfügbar?", + availableShops: "Verfügbare Skate-Shops ({{count}})", + challengeDescPlaceholder: "Optionale Beschreibung...", + challenges: "Challenges", + challengesRequired: "Challenges erforderlich", + challengesRequiredDesc: "Bitte füge mindestens eine Challenge hinzu, die Teams abschließen müssen.", + challengesSecret: + "Alle Challenges sind GEHEIM bis zum Startdatum des Wettbewerbs. Teams sehen sie erst dann!", + challengeTitlePlaceholder: "Challenge-Titel, z. B. 'Kickflip über 10 Stufen'", + citiesLabel: "Städte", + citiesOnTour: "Städte auf der Tour", + cityPlaceholder: "z. B. Berlin, Deutschland", + cityRegion: "Stadt / Region", + cityRequired: "Stadt/Region erforderlich", + cityRequiredDesc: "Bitte gib deine Stadt oder Region ein.", + clipAnyUrl: "🔗 Beliebige URL", + clipBlossom: "📦 Blossom Upload", + clipInstagram: "📸 Instagram", + clipYouTube: "▶️ YouTube", + competitionDates: "Wettbewerbstermine", + competitionDatesWarning: + "⚠️ Alle Challenges sind GEHEIM bis zum Startdatum! Teams sehen die Challenges erst, wenn der Wettbewerb beginnt.", + competitionLocations: "Wettbewerbsorte", + competitionLocationsDesc: "Wo treten die Teams an? Füge alle beteiligten Städte und Länder hinzu.", + coordsHint: "Koordinaten sind optional. Füge sie hinzu, um deinen Treffpunkt auf der Karte zu markieren.", + countriesLabel: "Länder", + countriesRequired: "Länder erforderlich", + countriesRequiredDesc: "Bitte füge mindestens ein Land für deine internationale Tour hinzu.", + createdDestruction: "💀 WORLD DESTRUCTION TOUR ERSTELLT!", + createdDestructionDesc: "Teams können sich registrieren. Challenges werden am Startdatum enthüllt!", + createDestructionTour: "World Destruction Tour erstellen", + createdInternational: "✈️ Internationale Tour erstellt!", + createdInternationalDesc: "Dein globales Abenteuer ist gelistet! Vernetze dich mit Skatern weltweit.", + createdLocal: "🏠 Lokale Tour erstellt!", + createdLocalDesc: "Deine Tour ist jetzt sichtbar. Skater können per DM buchen!", + createdNational: "🚐 Nationale Tour erstellt!", + createdNationalDesc: "Dein Roadtrip ist live! Starte die Koordination mit interessierten Skatern.", + departure: "Abfahrt *", + departureRequired: "Abfahrtsdatum erforderlich", + departureRequiredDesc: "Lege fest, wann die Reise startet, damit Skater planen und buchen können.", + descriptionPlaceholder: + "Beschreibe, was Skater erleben werden: Spots, die ihr besucht, die Vibe, was deine Tour einzigartig macht...", + destructionDesc: "Erstelle deinen globalen KOTR-Wettbewerb – du bestimmst ALLES!", + discountHint: + "Tour-Teilnehmer können ihre Buchungsbestätigung im Shop vorzeigen, um diesen Rabatt zu erhalten", + discountPercentage: "Rabattprozentsatz", + dropTour: "Eine Tour einstellen", + duration: "Dauer", + durationHintDestruction: "Wie lange dauert der Wettbewerb? (1-12 Monate)", + durationHintInternational: "Wie viele Wochen dauert das Abenteuer? (bis zu 2 Monate)", + durationHintLocal: "Wie lange dauert deine typische Tour?", + durationHintNational: "Wie viele Tage dauert der Roadtrip?", + durationWeeksMonths: "{{weeks}} Wochen (~{{months}} Monate)", + editTour: "Tour bearbeiten", + enable: "Aktivieren", + enabled: "Aktiviert", + endBeforeStart: "Ende vor Start", + endBeforeStartDesc: "Das Enddatum des Wettbewerbs muss am oder nach dem Startdatum liegen.", + endDate: "Enddatum", + entryFeeHint: "Du behältst 95 % • Plattform nimmt 5 % • Leer lassen für kostenlosen Eintritt", + entryFeePerTeam: "Startgebühr pro Team (sats)", + entryFeePlaceholder: "z. B. 100000", + entryPrizes: "Eintritt & Preise", + filmPremieres: "Team-Filmpremieren", + filmPremieresDesc: + "Nach dem Wettbewerb werden die Clips jedes Teams zu einem ganzen Film, der weltweit in lokalen Skate-Shops Premiere feiern kann.", + filmPremieresInfo: + "🎥 Teams stellen aus ihren Challenge-Clips einen finalen Film zusammen. Shops können Premieren-Events veranstalten und so den globalen Wettbewerb mit lokalen Communities verbinden.", + filmReleaseDate: "Filmveröffentlichungsdatum (optional)", + filmReleaseDateHint: + "Wann die Filme verfügbar sein werden. Leer lassen, um sie direkt nach Ende des Wettbewerbs zu veröffentlichen.", + fixedSession: "Feste Session", + fixedSessionDesc: "Ein festes Datum & eine Uhrzeit", + flexible: "Flexibel", + flexibleDesc: "Jederzeit per DM buchen", + hide: "Ausblenden", + howDestruction1: "• Globaler Team-Wettbewerb – bis zu 12 Monate lang", + howDestruction2: "• DU bestimmst Challenges, Punkte, Preise – wir liefern nur die Plattform", + howDestruction3: "• Alle Challenges sind GEHEIM bis zum Startdatum des Wettbewerbs", + howDestruction4: "• Clips per Blossom-Upload ODER externe Links (YouTube, Instagram, beliebige URL)", + howDestruction5: "• Nur für Fortgeschrittene – alle Spot-Typen automatisch enthalten", + howDestruction6: "• Plattform nimmt nur 5 % der Startgebühren (NICHT des Preispools)", + howDestructionTitle: "💀 WORLD DESTRUCTION TOUR – KOTR-Stil", + howInternational1: "• Grenzüberschreitende Abenteuer durch mehrere Länder", + howInternational2: "• Du legst den Preis fest – Plattform nimmt nur 5 %", + howInternational3: "• Lege Abfahrts- & Rückreisedaten fest, damit die Crew Flüge buchen kann", + howInternational4: "• Vernetze Skater aus aller Welt", + howInternational5: "• Erschaffe unvergessliche globale Erlebnisse!", + howInternationalTitle: "So funktionieren internationale Touren", + howItWorks: "So funktioniert's:", + howLocal1: "• Du legst deinen Preis fest – Plattform nimmt 10 %", + howLocal2: "• Versteckte Spots bleiben versteckt – du zeigst sie persönlich", + howLocal3: "• Führe eine geplante Session durch oder halte es flexibel / nach Vereinbarung", + howLocal4: "• Skater buchen per DM, zahlen in Lightning & können es zu ihrem Kalender hinzufügen", + howLocal5: "• Baue deinen Ruf mit Bewertungen und Zaps auf", + howLocalTitle: "So funktionieren lokale Touren", + howNational1: "• Multi-City-Roadtrips durch dein Land", + howNational2: "• Du legst den Preis fest – Plattform nimmt nur 7 %", + howNational3: "• Lege Reisedaten fest, damit Skater Urlaub & Anreise planen können", + howNational4: "• Füge Transport- / Unterkunftsinfos für die Crew hinzu", + howNational5: "• Baue legendäre Skate-Abenteuer!", + howNationalTitle: "So funktionieren nationale Touren", + imageUploadedDesc: "Dein Tour-Bild wurde hochgeladen.", + incompleteCoords: "Unvollständige Koordinaten", + incompleteCoordsDesc: "Bitte gib sowohl Breiten- als auch Längengrad ein oder lass beide leer.", + internationalDetails: "Details zum internationalen Abenteuer", + languagesSelected: "{{count}} ausgewählt", + languagesSpoken: "Gesprochene Sprachen", + latOptional: "Breitengrad (optional)", + lngOptional: "Längengrad (optional)", + loadingProfile: "Profil wird geladen...", + loadingProfileDesc: "Dein NIP-05-Verifizierungsstatus wird geprüft.", + loadingShops: "Shops werden geladen...", + localShopPremieres: "Premieren in lokalen Shops", + localShopPremieresDesc: "Skate-Shops weltweit können Filmabende veranstalten", + loginToCreate: "Du musst dich einloggen, um eine Tour zu erstellen.", + maxGroupSize: "Max. Gruppengröße", + maxTeams: "Max. Teams", + maxTeamSize: "Max. Teamgröße", + meetingLocationSet: "Dein aktueller Standort wurde als Treffpunkt festgelegt.", + meetingPointDesc: "Wo triffst du die Tour-Teilnehmer? Wähle einen öffentlichen, bekannten Spot.", + meetingPointLabel: "Treffpunkt", + meetingPointPlaceholder: "z. B. S-Bahnhof Warschauer Straße", + meetingPointRequired: "Treffpunkt erforderlich", + meetingPointRequiredDesc: "Bitte gib an, wo du die Tour-Teilnehmer triffst.", + minTeamSize: "Min. Teamgröße", + noChallenges: "Noch keine Challenges", + noChallengesDesc: "Füge Challenges hinzu, die Teams abschließen müssen", + noPartnerShop: "Kein Partner-Shop", + noShopsFound: "Noch keine Skate-Shops im Netzwerk gefunden.", + noShopsRegistered: "Noch keine Skate-Shops registriert", + onlineRelease: "Online-Veröffentlichung", + onlineReleaseDesc: "Filme auch auf YouTube/Nostr veröffentlichen", + organizerContact: "Kontaktdaten des Organisators", + organizerContactHint: "Dies wird für registrierte Teams sichtbar sein", + organizerContactPlaceholder: "Wie können Teams dich kontaktieren? z. B. Nostr npub, E-Mail, Telegram usw.", + partnerDiscountDesc: "Biete Tour-Teilnehmern einen Rabatt in einem lokalen Skate-Shop", + partnerStep1: "1. Werde Partner eines lokalen Skate-Shops, dem du vertraust", + partnerStep2: "2. Lege einen Rabattprozentsatz für Tour-Teilnehmer fest", + partnerStep3: "3. Gib den Teilnehmern nach der Tour eine Bestätigung, die sie im Shop vorzeigen können", + partnerStep4: "4. Der Shop gewährt den Rabatt – stärkt die Community & bringt Laufkundschaft!", + percentOff: "{{percent}} % RABATT", + photoHint: "Füge ein Foto von dir beim Skaten oder einen coolen Spot deiner Tour hinzu.", + pickRide: "Wähle dein Gefährt", + place1: "🥇 1.", + place2: "🥈 2.", + place3: "🥉 3.", + platformFee: "Du legst den Preis fest • Plattform nimmt {{percent}}", + points: "Punkte:", + pricePerPerson: "Preis pro Person (sats)", + pricePlaceholder: "z. B. 25000", + prizeDistribution: "Preisverteilung", + prizePoolHint: "Optional – verfügbare Gesamtpreise", + prizePoolPlaceholder: "z. B. 2000000", + proTipDesc: + "Kontaktiere den Shop-Besitzer vor dem Listing eines Partner-Rabatts per DM, um den Rabattprozentsatz abzustimmen. So stellst du sicher, dass er einverstanden ist und den Rabatt für deine Tour-Teilnehmer gewährt.", + proTipTitle: "💡 Profi-Tipp: Stimme dich zuerst mit dem Shop ab!", + return: "Rückreise", + returnBeforeDeparture: "Rückreise vor Abfahrt", + returnBeforeDepartureDesc: "Das Rückreisedatum muss am oder nach dem Abfahrtsdatum liegen.", + roadTripDetails: "Roadtrip-Details", + schedule: "Zeitplan", + scheduleDesc: + "Führe dies als einmalige geplante Session durch oder halte es flexibel und lass Skater per DM eine Zeit buchen.", + secretUntilStart: "Geheim bis zum Start", + selectPartnerShop: "Partner-Shop auswählen", + sessionDateRequired: "Session-Datum erforderlich", + sessionDateRequiredDesc: + "Wähle Datum und Uhrzeit für deine geplante Session oder wechsle zu einem flexiblen Zeitplan.", + sessionDateTime: "Session-Datum & -Uhrzeit", + sessionDateTimeHint: + "Skater sehen diese Zeit und können sie von der Tour-Seite aus zu ihrem Kalender hinzufügen.", + shopPremieresContact: + "Kontaktiere diese Shops direkt, um Filmpremieren-Abende zu vereinbaren. Alle Absprachen sind privat.", + shopPremieresHow: + "💡 So funktionieren Shop-Premieren: Kontaktiere Shops direkt, um Premieren-Abende zu vereinbaren. Alle Absprachen sind privat zwischen dir und den Shops.", + shopsCanRegister: "Shops können sich unter /create-shop registrieren", + show: "Anzeigen", + showAllLanguages: "Alle {{count}} Sprachen anzeigen", + somethingWrong: "Etwas ist schiefgelaufen.", + spotTypes: "Spot-Typen", + spotTypesRequired: "Spot-Typen erforderlich", + spotTypesRequiredDesc: "Bitte wähle mindestens einen Spot-Typ aus, den du zeigen wirst.", + startDate: "Startdatum", + startDateRequired: "Startdatum erforderlich", + startDateRequiredDesc: + "Bitte lege fest, wann der Wettbewerb beginnt (die Challenges werden an diesem Datum enthüllt).", + startingCity: "Startstadt", + startingCityPlaceholder: "z. B. Los Angeles, USA", + teamSettings: "Team-Einstellungen", + teamsCount: "{{count}} Teams", + titlePlaceholder: "z. B. Berlin Kreuzberg – Underground-Spots-Tour", + titleRequired: "Tour-Titel erforderlich", + titleRequiredDesc: "Bitte gib einen Namen für deine Tour ein.", + totalPercent: "Gesamt: {{percent}} %", + totalPrizePool: "Gesamtpreispool (sats)", + tourDesc: "Erzähl den Skatern, was sie auf deiner Tour erwartet", + tourDetails: "Tour-Details", + tourPhoto: "Tour-Foto", + tourTitle: "Tour-Titel", + transportDestructionPlaceholder: + "Wie reisen die Teams zwischen den Orten? Wird Transport gestellt oder empfohlen?", + transportInfo: "Transportinfo", + transportPlaceholder: + "Wie reisen die Teilnehmer? z. B. 'Van gestellt', 'Flug nach Barcelona, wir mieten einen Van', 'Zug zwischen den Städten'", + tripDatesDesc: + "Fixiere die Termine, damit Skater Urlaub beantragen, Flüge buchen und die Reise planen können.", + tripDatesTitle: "Reisedaten", + updated: "Tour aktualisiert!", + updatedDesc: "Deine Änderungen wurden veröffentlicht.", + upload: "Hochladen", + view: "Ansehen →", + worldDestruction: "World Destruction Tour", + youReceive: "Du erhältst: {{amount}} sats pro Person", + }, + editEvent: { + accessDenied: "Zugriff verweigert", + accessDeniedDesc: "Du kannst nur Events bearbeiten, die du erstellt hast.", + backToEvent: "Zurück zum Event", + detailsDesc: + "Aktualisiere die Informationen zu diesem Event. Alle mit * markierten Felder sind erforderlich.", + eventCover: "Event-Titelbild", + locationUpdated: "Standort aktualisiert.", + loginToEdit: "Du musst dich einloggen, um dieses Event zu bearbeiten.", + newSpot: "Neuer Spot: {{location}}.", + newTime: "Neue Zeit: {{date}} um {{time}}.", + saveChanges: "Änderungen speichern", + saving: "Wird gespeichert...", + title: "Event bearbeiten", + updated: "Event aktualisiert!", + updatedDesc: "Deine Änderungen wurden im Netzwerk veröffentlicht.", + updateDetails: "Details für {{title}} aktualisieren", + updatedNotified: "Änderungen veröffentlicht – {{count}} Teilnehmer benachrichtigt.", + updateFailed: "Aktualisierung fehlgeschlagen", + updateMessage: "{{parts}} – siehe das Event für Details.", + }, + editShop: { + accessDeniedDesc: "Du kannst nur Shops bearbeiten, die du erstellt hast.", + backToShop: "Zurück zum Shop", + detailsDesc: "Aktualisiere deine Shop-Informationen. Alle mit * markierten Felder sind erforderlich.", + loginToEdit: "Du musst dich einloggen, um diesen Shop zu bearbeiten.", + updated: "Shop aktualisiert!", + updateDetails: "Details für {{name}} aktualisieren", + }, + editTour: { + accessDeniedDesc: "Du kannst nur Touren bearbeiten, die du erstellt hast.", + loginToEdit: "Du musst dich einloggen, um diese Tour zu bearbeiten.", + }, + eventCard: { + report: "Melden", + }, + eventDetail: { + aCrew: "eine Crew", + addToCalendar: "Zum Kalender hinzufügen", + backToEvents: "Zurück zu Events", + cancelled: "Dieses Event wurde abgesagt", + checkUpdate: "– prüfe das Update", + copyFailed: "Kopieren fehlgeschlagen", + date: "Datum", + editEvent: "Event bearbeiten", + eventFallback: "Event", + eventOrganizer: "Event-Organisator", + getDirections: "Route anzeigen", + linkCopied: "Link kopiert", + linkCopiedDesc: "Event-Link in die Zwischenablage kopiert – füge ihn überall ein.", + live: "Live:", + liveMusic: "Live-Musik", + location: "Standort", + newLocation: "Neuer Standort", + noRsvps: "Es wurden keine RSVPs erfasst.", + organizer: "Organisator", + rsvpsClosed: "RSVPs sind geschlossen – dieses Event wurde vom Gastgeber abgesagt.", + seeMap: "Karte ansehen", + shareEvent: "Event teilen", + shareText: "{{title}} – ein Skate-Event auf SkateSpots", + shareTextFallback: "Schau dir dieses Skate-Event auf SkateSpots an", + time: "Uhrzeit", + timeChanged: "Zeit geändert", + updatesFromHost: "Updates vom Gastgeber", + where: "Wo", + whoCame: "Wer da war", + whosGoing: "Wer kommt", + }, + events: { + calendar: "Kalender", + createTour: "Tour erstellen", + events: "Events", + faqFooter: "Fragen? Schau in die FAQ →", + hosting: "Veranstalten", + hostingSubtitle: "Deine Events – RSVPs, Updates & schnelle Bearbeitung", + list: "Liste", + noEventsMatchFilters: "Keine Events passen zu deinen Filtern. Versuche, sie anzupassen oder zu löschen.", + noPast: "Keine vergangenen Events", + noPastBody: "Keine vergangenen Skate-Events in deinen aktuellen Filtern gefunden.", + noTours: "Keine Touren gefunden", + noToursBody: + "Noch keine Skate-Touren. Erstelle die erste und nimm Skater mit auf eine Spot-Entdeckung!", + noToursMatchFilters: "Keine Touren passen zu deinen Filtern. Versuche, sie anzupassen oder zu löschen.", + noUpcoming: "Keine bevorstehenden Events", + noUpcomingBody: "Keine bevorstehenden Skate-Events gefunden. Sei der Erste, der eins erstellt!", + past: "Vergangen", + resultsCount: "{{count}} Ergebnisse", + searchCity: "Stadt…", + searchEvent: "Event-Name…", + searchTour: "Tour-Name…", + tours: "Touren", + toursSubtitle: "Lokale Guides, Roadtrips & World-Destruction-Wettbewerbe", + upcoming: "Bevorstehend", + }, + eventTypes: { + contest: "Contest", + demo: "Demo", + jam: "Jam", + meetup: "Meetup", + premiere: "Premiere", + session: "Session", + workshop: "Workshop", + }, + featured: { + active: "Aktiv", + bodyEvent: + "Kostenlos zu posten. Hervorgehobene Events erhalten ein Badge und stehen oben auf der Event-Seite.", + bodyTour: + "Kostenlos zu posten. Hervorgehobene Touren erhalten ein Badge und stehen oben in der Tour-Liste.", + contextEvent: + "Dein Event bleibt in jedem Fall kostenlos gelistet – hervorgehoben fügt nur Badge & Boost hinzu.", + contextTour: + "Deine Tour bleibt in jedem Fall kostenlos gelistet – hervorgehoben fügt nur Badge & Boost hinzu.", + daysRemaining: "Hervorhebung aktiv · {{count}} Tage verbleibend.", + headingEvent: "Dieses Event hervorheben", + headingTour: "Diese Tour hervorheben", + optional: "optional", + platformOwner: "Plattform-Inhaber – Hervorhebung ist immer aktiv.", + }, + filters: { + activeCount: "{{count}} aktiv", + all: "Alle", + allLevels: "Alle Level", + eventType: "Event-Typ", + following: "Gefolgt", + newest: "Neueste", + popular: "Beliebt", + showResults: "Ergebnisse anzeigen", + showResultsActive: "Ergebnisse anzeigen · {{count}} aktiv", + skillLevel: "Skill-Level", + sortBy: "Sortieren nach", + topRated: "Bestbewertet", + tourCategory: "Tour-Kategorie", + trusted: "Vertrauenswürdig", + trustLevel: "Vertrauensstufe", + verified: "Verifiziert", + }, + food: { + bar: "Bar", + cafe: "Café", + call: "Anrufen", + chooseSpot: "Einen Spot wählen...", + directions: "Route", + fastFood: "Fast Food", + foodCourt: "Food Court", + locationLabel: "Standort:", + noneFound: "Keine Food-Spots gefunden", + noneFoundDesc: + "Wir konnten im Umkreis von 1 km um diesen Spot keine Restaurants oder Cafés finden. Versuche, einen anderen Standort auszuwählen.", + placesFound: "{{count}} Orte im Umkreis von 1 km um {{spot}} gefunden", + pub: "Pub", + restaurant: "Restaurant", + selectSpot: "Einen Skate-Spot auswählen", + selectSpotDesc: + "Wähle oben aus dem Dropdown einen Skate-Spot, um nahegelegene Restaurants, Cafés und weitere Food-Optionen zu finden.", + selectSpotTitle: "Einen Skate-Spot auswählen", + subtitle: "Finde Orte zum Essen in der Nähe deiner Lieblings-Skate-Spots", + title: "Essen in der Nähe von Spots", + unknown: "Unbekannt", + website: "Website", + }, + rsvp: { + areYouGoing: "Kommst du?", + cant: "Kann nicht", + cantMakeIt: "Kann nicht kommen", + going: "Ich komme", + goingCount: "Zusagen", + goingShort: "Zusagen", + hostNote: "Du bist Gastgeber – aber du kannst trotzdem deinen Status setzen.", + interested: "Interessiert", + interestedCount: "interessiert", + loginToRsvp: "Logge dich ein, um zu RSVPen.", + maybe: "Vielleicht", + toastError: "RSVP konnte nicht gesetzt werden", + toastGoing: "Du kommst! 🛹", + toastInterested: "Als interessiert markiert.", + toastNotGoing: "Als nicht kommend markiert.", + tryAgain: "Bitte versuche es erneut.", + }, + shop: { + addNip05Settings: "NIP-05 in den Einstellungen hinzufügen", + adminRemovedReason: "SkateSpots-Admin hat den Shop „{{name}}“ entfernt", + areYouOwner: "Bist du der Shop-Inhaber?", + backToMap: "Zurück zur Karte", + claimDesc: + "Wenn du diesen Shop besitzt oder verwaltest, kannst du ihn beanspruchen, um per NIP-05 den Besitz zu verifizieren.", + claimNip05Intro: + "Um diesen Shop zu beanspruchen, füge eine NIP-05-Kennung hinzu, die zur Website-Domain des Shops passt. Wenn die Shop-Website beispielsweise", + claimNip05Your: "lautet, sollte deine NIP-05", + contactShop: "Shop kontaktieren", + deleted: "Shop gelöscht", + deletedDesc: "Löschanfrage an Relays gesendet. Die meisten Relays entfernen diesen Inhalt.", + deleteDialogDesc: + "Dadurch wird „{{name}}“ dauerhaft von allen Relays gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.", + deleteDialogTitle: "Shop löschen?", + deletedReason: "Gelöschter Shop", + deleteFailed: "Löschen fehlgeschlagen", + deleteShop: "Shop löschen", + linkCopied: "Link kopiert!", + linkCopiedDesc: "Shop-Link in die Zwischenablage kopiert.", + nip05Required: "⚠️ NIP-05-Verifizierung erforderlich, um Shops zu beanspruchen", + opens: "Öffnet: {{domain}}", + removeAdmin: "Entfernen (Admin)", + removed: "Shop entfernt", + removedDesc: "Dieser Shop wurde entfernt und wird in ganz SkateSpots ausgeblendet.", + removeDialogDesc: + "Als SkateSpots-Admin entfernst du „{{name}}“. Er wird für alle in der App ausgeblendet und eine Löschanfrage an Relays gesendet.", + removeDialogTitle: "Diesen Shop entfernen? (Admin)", + removeShop: "Shop entfernen", + tipMapper: "Dem Mapper einen Zap schicken", + tipMapperDesc: + "Dieser Shop wurde von einem Community-Mitglied hinzugefügt. Schick ihm Zaps, um Danke zu sagen!", + updateNip05: "NIP-05 aktualisieren, um zu beanspruchen", + viewPhotoFull: "Foto im Vollbild ansehen", + viewPhotoOf: "Foto {{index}} von {{total}} ansehen", + }, + sponsors: { + presentedBy: "Präsentiert von", + }, + tourCard: { + active: "Aktiv", + completed: "Abgeschlossen", + contactForPrice: "Preis auf Anfrage", + durationDays: "{{count}} Tage", + durationHours: "{{count}} Stunden", + durationMonths: "{{count}} Monate", + durationWeeks: "{{count}} Wochen", + entry: "Eintritt: {{amount}} sats", + happeningNow: "Läuft gerade", + inDays: "In {{count}} Tagen", + inHours: "In {{count}} Std.", + inMonths: "In {{count}} Monaten", + inWeeks: "In {{count}} Wochen", + maxGroup: "Max. {{count}}", + price: "{{amount}} sats", + prizePool: "{{amount}} sats", + registrationOpen: "Anmeldung offen", + startingSoon: "Startet bald", + teamsMax: "Max. {{count}} Teams", + tomorrow: "Morgen", + worldwide: "Weltweit", + }, + tourDetail: { + about: "Über diese Tour", + availability: "Verfügbarkeit", + competitionWindow: "Wettbewerbszeitraum", + contactToBook: "Guide kontaktieren zum Buchen", + discountAt: "{{percent}} % RABATT bei {{shop}}", + duration: "Dauer", + languages: "Sprachen", + loginToBook: "Einloggen zum Buchen", + loginToBookDesc: "Logge dich ein, um den Guide zu kontaktieren und diese Tour zu buchen", + maxGroup: "Max. Gruppe", + meetingPoint: "Treffpunkt", + notFound: "Tour nicht gefunden", + notFoundDesc: "Diese Tour wurde möglicherweise entfernt oder existiert nicht.", + organizer: "Organisator", + partnerDiscount: "Partner-Shop-Rabatt", + partnerDiscountDesc: + "Buche diese Tour, um einen Rabatt im Partner-Skate-Shop zu erhalten. Zeige deine Buchungsbestätigung dem Shop-Personal.", + people: "{{count}} Personen", + perPerson: "pro Person", + price: "Preis", + runsAbout: "Dauert etwa {{duration}}", + scheduledSession: "Geplante Session", + shareText: "Schau dir diese lokale Skate-Tour an: {{title}}", + skillLevel: "Skill-Level", + spotTypes: "Spot-Typen", + tourGuide: "Tour-Guide", + tourSponsors: "Tour-Sponsoren", + tripDates: "Reisedaten", + viewProfile: "Profil ansehen", + }, + updates: { + admin: "Admin", + adminNote: + "Du postest als SkateSpots-Admin. Es wird klar als Admin-Hinweis gekennzeichnet, nicht vom Gastgeber.", + kindCancelled: "Abgesagt", + kindNewSpot: "Neuer Spot", + kindNewTime: "Neue Zeit", + kindUpdate: "Update", + loading: "Updates werden geladen…", + notifiedCount: "{{count}} Personen benachrichtigt.", + notifiedEveryone: "Alle sehen es beim Event.", + notifiesRsvps: "Benachrichtigt {{count}} RSVPs", + noUpdates: "Noch keine Updates vom Gastgeber. RSVPe, und du wirst bei Änderungen benachrichtigt.", + placeholder: "Regen – auf Sonntag 14 Uhr verschoben. Treffpunkt an der hinteren Ledge…", + post: "Posten", + postAdminUpdate: "Ein Admin-Update posten", + posted: "Update gepostet", + postError: "Update konnte nicht gepostet werden", + postUpdate: "Ein Update posten", + tryAgain: "Bitte versuche es erneut.", + visibleToEveryone: "Für alle bei diesem Event sichtbar", + }, + destination: { + bitcoin: "Bitcoin", + closeSearch: "Suche schließen", + nothingMatches: "Nichts passt zu „{{query}}“.", + placeholder: "Spots, Shops, Bitcoin-Händler suchen…", + shop: "Shop", + spot: "Spot", + typeChars: "Gib mindestens 2 Zeichen ein. Durchsucht Skate-Spots, Skate-Shops und Bitcoin-Händler.", + typeCharsNear: + "Gib mindestens 2 Zeichen ein. Durchsucht Skate-Spots, Skate-Shops und Bitcoin-Händler in der Nähe.", + }, + dateWindow: { + any: "Beliebig", + anytime: "Jederzeit", + month: "Diesen Monat", + monthShort: "Monat", + today: "Heute", + todayShort: "Heute", + week: "Diese Woche", + weekend: "Wochenende", + weekendShort: "WE", + weekShort: "Woche", + }, + }, + marketUi: { + gearSwap: { + title: "Gear Swap", + subtitle: "Kaufe & verkaufe gebrauchtes Skate-Gear mit anderen Skatern", + listGear: "Gear listen", + searchPlaceholder: "Gear suchen...", + allCategories: "Alle Kategorien", + forSale: "Zu verkaufen", + wtb: "WTB", + trust: "Vertrauen", + filterByTrust: "Nach Vertrauen filtern", + allSellers: "Alle Verkäufer", + verifiedOnly: "Nur verifizierte", + trustedPlus: "Vertrauenswürdig+", + followingOnly: "Nur Gefolgte", + pickupOrShip: "Abholung oder Versand", + localPickup: "Lokale Abholung", + ships: "Versand", + sortBy: "Sortieren nach", + newest: "Neueste", + priceLowHigh: "Preis: Niedrig → Hoch", + priceHighLow: "Preis: Hoch → Niedrig", + trustScore: "Vertrauenswert", + nearest: "Nächste (lokal)", + listingFound: "{{count}} Listing gefunden", + listingsFound: "{{count}} Listings gefunden", + loadFailed: "Listings konnten nicht geladen werden", + tryLater: "Bitte versuche es später erneut.", + noneTitle: "Keine Listings gefunden", + noneFiltered: + "Kein Gear passt zu deinen aktuellen Filtern. Versuche, sie zu löschen oder etwas anderes zu suchen.", + noneFirst: + "Sei der Erste, der dein Gear listet – Decks, Trucks, Wheels, Schuhe, alles rund ums Skaten!", + listYourGear: "Dein Gear listen", + faqLink: "Fragen? Schau in die FAQ →", + }, + hub: { + browse: "Durchsuchen", + selling: "Verkaufen", + myTrades: "Meine Trades", + reputation: "Reputation", + loginListings: "Logge dich ein, um deine Listings zu verwalten.", + loginReputation: "Logge dich ein, um deine Reputation und Bewertungen zu sehen.", + }, + marketplace: { + heroTitle: "Shops & Marketplace", + heroBefore: "Unser Marketplace wird betrieben von", + heroAfter: + "– einem dezentralen Marketplace auf Nostr. Skate-Shops können ihre Produkte listen, und du kannst gebrauchtes Gear direkt mit Bitcoin kaufen/verkaufen.", + whatIsTitle: "Was ist Plebeian Market?", + whatIsBody: + "Plebeian Market ist ein dezentraler Marketplace auf Nostr. Kaufe und verkaufe Skateboard-Gear direkt mit anderen Skatern mit Bitcoin. Keine Mittelsmänner, keine Gebühren, totale Freiheit.", + noFeesTitle: "Keine Gebühren", + noFeesBody: "Keine Plattform, die 30 % nimmt. Direkte Peer-to-Peer-Verkäufe.", + bitcoinTitle: "Bitcoin-Zahlungen", + bitcoinBody: "Zahle mit Bitcoin. Schnell, sicher, global.", + decentralizedTitle: "Dezentral", + decentralizedBody: "Auf Nostr gebaut. Kein Unternehmen kontrolliert es.", + visit: "Plebeian Market besuchen", + buySellTitle: "Was du kaufen & verkaufen kannst", + catCompletes: "Komplette Decks", + preBuilt: "Vorgebaute Completes", + customSetups: "Custom-Setups", + beginnerBoards: "Einsteiger-Boards", + catParts: "Deck-Teile", + decks: "Decks", + trucks: "Trucks", + wheels: "Wheels", + bearings: "Bearings", + gripTape: "Griptape", + hardware: "Hardware", + catApparel: "Bekleidung & Schutz", + skateShoes: "Skate-Schuhe", + clothing: "Kleidung", + helmets: "Helme", + pads: "Pads", + backpacks: "Rucksäcke", + catAccessories: "Zubehör", + tools: "Tools", + wax: "Wax", + rails: "Rails", + stickers: "Sticker", + videos: "Videos", + magazines: "Magazine", + howItWorks: "So funktioniert's", + step1Title: "Produkte durchsuchen", + step1Body: + "Besuche Plebeian Market und durchsuche Skateboard-Gear von Shops und Einzelpersonen weltweit.", + step2Title: "Verkäufer kontaktieren", + step2Body: + "Schreibe Verkäufern direkt über Nostr. Verhandle Preise, stelle Fragen, kläre den Versand.", + step3Title: "Mit Bitcoin bezahlen", + step3Body: + "Schließe deinen Kauf mit Bitcoin Lightning ab – sofortige Zahlungen mit niedrigen Gebühren.", + step4Title: "Feedback hinterlassen", + step4Body: + "Bewerte deine Erfahrung und stärke die Verkäufer-Reputation auf Nostr. Deine Bewertungen helfen der Community.", + needBitcoinTitle: "Brauchst du Bitcoin?", + needBitcoinBefore: + "Du brauchst eine Lightning-Wallet mit etwas sats, um Käufe zu tätigen. Schau dir den", + onboardingGuide: "Onboarding-Guide", + needBitcoinAfter: "für Wallet-Empfehlungen an.", + ownShopTitle: "Hast du einen Skate-Shop?", + ownShopBody: + "Liste deinen Shop auf SkateSpots und verkaufe deine Produkte auf Plebeian Market. Erreiche Kunden weltweit ohne Plattformgebühren.", + addShop: "Deinen Shop hinzufügen", + startSelling: "Verkaufen starten", + }, + listingDetail: { + notFound: "Listing nicht gefunden", + notFoundBody: "Es wurde möglicherweise gelöscht oder der Link ist falsch.", + backToGearSwap: "Zurück zum Gear Swap", + gearSwap: "Gear Swap", + viewPhoto: "Foto {{n}} ansehen", + photoAlt: "{{title}} – Foto {{n}}", + wantToBuy: "KAUFGESUCH", + sold: "VERKAUFT", + description: "Beschreibung", + usuallyHere: "Normalerweise hier {{availability}}", + listed: "Gelistet {{date}}", + listingCountOne: "{{count}} Listing · {{age}}T alt", + listingCountMany: "{{count}} Listings · {{age}}T alt", + relistActive: "Als aktiv erneut listen", + markSold: "Als verkauft markieren", + deleteListing: "Listing löschen", + makeOffer: "Ein Angebot machen", + shareListing: "Listing teilen", + unknown: "Unbekannt", + linkCopied: "Link kopiert", + linkCopiedBody: "Teile ihn mit einem Skater.", + copyFailed: "Link konnte nicht kopiert werden", + relisted: "Erneut gelistet", + relistedBody: "Dein Listing ist wieder aktiv.", + couldNotUpdate: "Aktualisierung nicht möglich", + somethingWrong: "Etwas ist schiefgelaufen", + }, + create: { + imageUploaded: "Bild hochgeladen", + uploadFailed: "Upload fehlgeschlagen", + failed: "Fehlgeschlagen", + cooldownActive: "Cooldown aktiv", + cooldownWait: "Bitte warte {{time}}, bevor du ein weiteres Listing erstellst", + limitReached: "Listing-Limit erreicht", + limitReachedBody: "Du hast dein monatliches Limit von {{limit}} Listings erreicht", + feeRequired: "Gebühr erforderlich", + feeRequiredBody: "Bitte zahle die Anti-Spam-Gebühr, um fortzufahren", + titleRequired: "Titel erforderlich", + categoryRequired: "Kategorie erforderlich", + photoRequired: "Foto erforderlich", + photoRequiredBody: "Beim Verkauf von Gear ist mindestens ein Foto erforderlich", + nip05Required: "NIP-05-Verifizierung erforderlich", + nip05RequiredBody: "Du brauchst eine verifizierte Nostr-Adresse, um Gear zu listen", + priceRequired: "Preis erforderlich für Festpreis-Listings", + sizeRequired: "Größe erforderlich", + sizeRequiredBody: "Bitte wähle eine Größe für {{category}}", + conditionRequired: "Zustand erforderlich", + conditionRequiredBody: "Bitte wähle den Zustand deiner {{category}}", + wtbPosted: "Kaufgesuch gepostet!", + wtbPostedBody: "Verkäufer können deine Anfrage jetzt finden.", + listingCreated: "Listing erstellt!", + listingCreatedBody: "Dein Gear ist jetzt gelistet.", + publishFailed: "Veröffentlichen fehlgeschlagen", + loginRequired: "Login erforderlich", + loginRequiredBody: "Du musst dich einloggen, um Gear zu listen.", + backToStash: "Zurück zum Stash", + backToSpot: "Zurück zu {{title}}", + backToMarketplace: "Zurück zum Marketplace", + backToMap: "Zurück zur Karte", + wantToBuy: "Kaufgesuch", + listYourGear: "Dein Gear listen", + wtbSubtitle: "Sag der Community, welches Gear du suchst", + sellSubtitle: "Verkaufe Skateboard-Gear an die Community", + fromStashTitle: "Listing aus deinem Stash", + fromStashBody: + "Vorbefüllt mit den Details deines Stash-Artikels. Prüfe sie und wähle einen Treffpunkt!", + nip05Banner: + "Um Spam zu verhindern und Käufer zu schützen, brauchst du eine verifizierte Nostr-Adresse (NIP-05), um Gear zu listen.", + verifiedLabel: "Verifiziert:", + checkingTrust: "Dein Vertrauenslevel wird geprüft...", + trustLevel: "Vertrauensstufe:", + trusted: "Vertrauenswürdig", + active: "Aktiv", + newcomer: "Neuankömmling", + newUser: "Neuer Nutzer", + remaining: "{{remaining}} von {{limit}} Listings diesen Monat verbleibend", + cooldownBody: "Neue Nutzer haben einen 24-Stunden-Cooldown zwischen Listings.", + timeRemaining: "Verbleibende Zeit: {{time}}", + monthlyLimitTitle: "Monatliches Limit erreicht", + monthlyLimitBody: + "Du hast dein Limit von {{limit}} Listings diesen Monat erreicht. Baue deine Reputation auf, indem du Spots erstellst oder Verkäufe abschließt, um dein Limit zu erhöhen.", + powAccepted: "Proof of Work akzeptiert!", + feePaid: "Gebühr bezahlt!", + canCreateNow: "Du kannst jetzt dein Listing erstellen.", + whatDoTitle: "Was möchtest du tun?", + sellGear: "GEAR VERKAUFEN", + categoryTitle: "Kategorie *", + categoryHint: "Welche Art von Gear?", + detailsTitle: "Gear-Details", + detailsWtbHint: "Beschreibe, wonach du suchst", + detailsSellHint: "Erzähl Käufern von deinem Artikel", + titleLabel: "Titel *", + titlePlaceholderWtb: "Suche 8.0\" Deck", + titlePlaceholderSell: "Fast neues Palace Deck 8.25\"", + summaryLabel: "Kurze Zusammenfassung", + summaryPlaceholderWtb: "Egal welche Marke, gerne dezentes Design", + summaryPlaceholderSell: "Top Zustand, kaum benutzt", + descriptionLabel: "Beschreibung", + descriptionPlaceholderWtb: + "Beschreibe genau, wonach du suchst – Markenpräferenzen, Zustandsanforderungen usw.", + descriptionPlaceholderSell: + "Hab das Deck zu Weihnachten bekommen, bevorzuge aber eine kleinere Größe. Du kannst es gerne vor dem Kauf ausprobieren!", + fulfilmentLabel: "Wie wird es abgewickelt?", + pickup: "Abholung", + pickupHint: "Lokal treffen", + ships: "Versand", + shipsHint: "Per Post", + both: "Beides", + bothHint: "Egal", + addressNote: "Wir erfassen deine Adresse nie – teile sie beim Versand privat im Trade-Chat.", + postageLabel: "Wer zahlt das Porto?", + requireEscrow: "escrow verlangen", + requireEscrowHint: "Bitte den Käufer, über Cashu-escrow abzuwickeln.", + postageBuyer: "Käufer zahlt", + postageSeller: "Ich zahle", + postageSplit: "Teilen", + sizeLabel: "Größe", + selectSize: "Größe wählen", + truckHeight: "Truck-Höhe", + selectHeight: "Höhe wählen", + wheelHardness: "Wheel-Härte", + selectHardness: "Härte wählen", + pricingTitle: "Preisgestaltung", + pricingWtbHint: "Wie möchtest du bezahlen?", + pricingSellHint: "Wie möchtest du verkaufen?", + priceLabel: "Preis *", + currencyLabel: "Währung", + photosTitle: "Fotos", + photosSellHint: "Mindestens ein Foto ist erforderlich", + photosWtbHint: "Optional – Referenzbilder hinzufügen", + productPhoto: "Produkt {{n}}", + upload: "Hochladen", + photosNote: "Füge bis zu 5 Fotos hinzu. Das erste Bild wird das Hauptfoto.", + pickupLocationTitle: "Abholort", + pickupLocationHint: "Mit einem Skate-Spot verknüpfen für einfache Treffen", + searchSpots: "Spots suchen...", + noSpotsFound: "Keine Spots gefunden. Versuche eine andere Suche.", + availabilityLabel: "Wann bist du normalerweise verfügbar?", + availabilityPlaceholder: "Wochenenden 10-14 Uhr, Di/Do abends", + availabilityHint: "Hilft Käufern, Treffen mit dir zu koordinieren", + durationTitle: "Listing-Dauer", + durationHint: "Wie lange soll dieses Listing aktiv bleiben?", + publishing: "Wird veröffentlicht...", + checkingEligibility: "Berechtigung wird geprüft...", + cooldownButton: "COOLDOWN: {{time}}", + limitReachedButton: "LIMIT ERREICHT", + payFeeButton: "GEBÜHR ZAHLEN, UM FORTZUFAHREN", + postWtbButton: "KAUFGESUCH POSTEN", + listForSaleButton: "GEAR ZUM VERKAUF LISTEN", + }, + trades: { + title: "Meine Trades", + loginBody: + "Logge dich ein, um deine Marketplace-Trades und deine Reputation zu verwalten.", + subtitle: + "Bestätigungen, Anfragen und die Reputation, die sie aufbauen. Die Zahlung wird mit dem anderen Skater abgewickelt – die App erfasst nur den Deal.", + actionNeeded: "Aktion erforderlich", + askedToConfirmSale: "hat dich gebeten, einen Verkauf zu bestätigen", + recordedSale: "hat einen Verkauf erfasst – bestätige deine Seite", + confirmSale: "Verkauf bestätigen", + confirm: "Bestätigen", + nothingWaiting: "Gerade wartet nichts auf dich. 🛹", + yourRecords: "Deine Trade-Einträge", + noTrades: "Noch keine Trades. Schließe einen Deal ab und bestätige ihn, um Reputation aufzubauen.", + browseGearSwap: "Gear Swap durchsuchen", + roleSold: "Verkauft", + roleBought: "Gekauft", + roleTrade: "Tausch", + with: "mit", + viewListing: "Listing ansehen", + revoke: "Widerrufen", + revokeTitle: "Diesen Trade-Eintrag widerrufen?", + revokeBody: + "Er zählt dann nicht mehr für deine Reputation. Die andere Partei behält ihre eigene Bestätigung. Nutze dies für einen strittigen oder irrtümlichen Deal.", + revokeNote: "Vom Autor zurückgezogen.", + revoked: "Trade-Eintrag widerrufen", + revokedBody: "Er zählt nicht mehr für die Reputation.", + revokeFailed: "Trade konnte nicht widerrufen werden", + saleConfirmed: "Verkauf bestätigt", + saleConfirmedBody: "Sie können jetzt ihre Seite bestätigen.", + saleConfirmFailed: "Verkauf konnte nicht bestätigt werden", + tradeConfirmed: "Trade bestätigt", + tradeConfirmedBody: "Reputation für euch beide aktualisiert.", + tradeConfirmFailed: "Trade konnte nicht bestätigt werden", + somethingWrong: "Etwas ist schiefgelaufen.", + }, + card: { + listingDeleted: "Listing gelöscht", + listingRemoved: "Listing entfernt", + listingDeletedBody: + "Dein Listing wurde entfernt. Relays, die Löschungen beachten, stellen es nicht mehr bereit.", + listingRemovedBody: "Dieses Listing wurde entfernt und wird in ganz SkateSpots ausgeblendet.", + removeFailed: "Entfernen fehlgeschlagen", + somethingWrong: "Etwas ist schiefgelaufen", + markedSold: "Als verkauft markiert", + markedSoldBody: "Dein Listing wird jetzt als verkauft angezeigt.", + couldNotUpdate: "Aktualisierung nicht möglich", + relisted: "Erneut gelistet", + relistedBody: "Dein Listing ist wieder aktiv.", + listingOptions: "Listing-Optionen", + report: "Melden", + removeAdmin: "Entfernen (Admin)", + postage: "Porto", + newSeller: "Neuer Verkäufer", + saleOne: "{{count}} Verkauf", + saleMany: "{{count}} Verkäufe", + iHaveThis: "Das habe ich!", + deleteTitle: "„{{title}}“ löschen?", + adminRemoveTitle: "Dieses Listing entfernen? (Admin)", + deleteBody: + "Dadurch werden Relays gebeten, dein Listing „{{title}}“ zu entfernen. Von hier aus kann das nicht rückgängig gemacht werden – du müsstest ein neues erstellen.", + adminRemoveBody: + "Als SkateSpots-Admin entfernst du „{{title}}“. Es wird für alle in der App ausgeblendet und eine Löschanfrage an Relays gesendet.", + deleting: "Wird gelöscht…", + removing: "Wird entfernt…", + deleteListing: "Listing löschen", + removeListing: "Listing entfernen", + reportCount: "{{count}} Meldung", + reports: "{{count}} Meldungen", + viewTitle: "{{title}} ansehen", + reportListing: "Listing melden", + manageListing: "Listing verwalten", + trusted: "Vertrauenswürdig", + daysOld: "{{n}}T alt", + monthsOld: "{{n}}M alt", + yearsOld: "{{n}}J alt", + listingsCount: "{{count}} Listings", + postageBuyer: "Porto: Käufer", + postageSeller: "Porto: Verkäufer", + postageSplit: "Porto: geteilt", + powTitle: "NIP-13 Proof of Work – kostenloses Anti-Spam", + verifiedTradeOne: "{{count}} verifizierter Trade", + verifiedTrades: "{{count}} verifizierte Trades", + reportSubmitted: "Meldung eingereicht", + reportSubmittedBody: "Danke, dass du hilfst, den Marketplace sicher zu halten.", + reportFailed: "Meldung konnte nicht eingereicht werden", + selectReason: "Bitte wähle einen Grund", + reportDialogBody: + "Hilf, den Marketplace sicher zu halten, indem du unangemessene oder irreführende Listings meldest.", + reasonLabel: "Grund für die Meldung *", + detailsLabel: "Zusätzliche Details (optional)", + detailsPlaceholder: "Gib zusätzlichen Kontext an, der helfen könnte...", + reportNote: + "Meldungen werden auf Nostr veröffentlicht und helfen der Community, problematische Listings zu erkennen. Listings mit mehreren Meldungen können automatisch ausgeblendet werden.", + submitting: "Wird eingereicht...", + submitReport: "Meldung einreichen", + }, + tradeActions: { + tradeConfirmed: "Trade bestätigt", + tradeConfirmedWithProof: + "Ein verifizierbarer Beleg wurde angehängt – dies zählt zu den verifizierten Trades.", + tradeConfirmedBody: "Reputation für euch beide aktualisiert.", + tradeConfirmFailed: "Trade konnte nicht bestätigt werden", + somethingWrong: "Etwas ist schiefgelaufen.", + requestNote: "Bitte bestätige unseren Trade für „{{title}}“.", + requestSent: "Bestätigung angefragt", + requestSentBody: + "Der Verkäufer kann jetzt den Verkauf bestätigen und beide Reputationen aufbauen.", + requestFailed: "Anfrage konnte nicht gesendet werden", + escrowRefunded: "escrow zurückerstattet", + escrowRefundedBody: "Das Geld ist zurück in deiner Cashu-Wallet.", + escrowRefundFailed: "escrow konnte nicht zurückerstattet werden", + confirmThisTrade: "Diesen Trade bestätigen", + escrowAndRequest: "escrow & Anfrage", + shipsEscrowHint: + "Versand-Deal – nutze escrow, damit keine Seite ins Leere versendet. Teile deine Adresse privat im Trade-Chat, niemals hier.", + shipsHint: + "Versand-Deal – bevorzuge escrow, wenn der Verkäufer es anbietet, und teile deine Adresse nur im Chat.", + askSeller: "Verkäufer um Bestätigung bitten", + waitingSeller: "Bestätigung angefragt – warten auf den Verkäufer.", + refundEscrow: "escrow zurückerstatten", + buyWithSats: "Mit sats kaufen", + depositTitle: "Good-Faith-Anzahlung (optional)", + payDeposit: "Anzahlung zahlen", + depositBefore: "Ein Tausch hat keine Rechnung, daher bekommt er so", + verifiableCost: "verifizierbare Kosten", + depositAfter: + ". Rückerstattung bei Lieferung (oder nutze Cashu-escrow für eine automatische Rückerstattung). ⚠️ Belegt Engagement, nicht Lieferung.", + depositPaid: "Anzahlung bezahlt", + depositPaidBody: "Gespeichert – sie wird angehängt, wenn der Trade bestätigt wird.", + paid: "Bezahlt ⚡", + paidWithProof: "Verifizierbarer Beleg gespeichert – bestätige den Trade, damit er zählt.", + paidBody: + "Bitte den Verkäufer, den Trade zu bestätigen, damit er für euch beide zählt.", + }, + offers: { + accepted: "Angenommen", + declined: "Abgelehnt", + withdrawn: "Zurückgezogen", + open: "Offen", + noAmount: "kein Betrag", + titleOwner: "Angebote ({{count}})", + titleBuyer: "Deine Verhandlungen", + you: "Du", + them: "Sie", + paidAskConfirm: "Bezahlt – bitte den Verkäufer, den Trade zu bestätigen.", + payWithSats: "Mit sats bezahlen", + accept: "Annehmen", + decline: "Ablehnen", + counter: "Gegenangebot", + counterPlaceholder: "Dein Gegenangebot (sats)", + send: "Senden", + counterItemPlaceholder: "…oder mit einem Tausch-Artikel kontern (optional)", + waitingOn: "Warten auf", + waitingOnSuffix: "– du bist wieder dran, wenn sie kontern.", + withdraw: "Zurückziehen", + dmAccepted: "✅ Dein Angebot wurde angenommen! Schreib eine Nachricht, um die Übergabe zu vereinbaren.", + dmDeclined: "❌ Dein Angebot wurde abgelehnt.", + offerAccepted: "Angebot angenommen", + offerDeclined: "Angebot abgelehnt", + respondFailed: "Antwort nicht möglich", + somethingWrong: "Etwas ist schiefgelaufen.", + offerWithdrawn: "Angebot zurückgezogen", + withdrawFailed: "Zurückziehen nicht möglich", + enterAmountOrItem: "Gib einen Betrag oder einen Tausch-Artikel ein", + counterDm: "Gegenangebot", + counterSent: "Gegenangebot gesendet", + counterSentBody: "Jetzt sind sie dran.", + counterFailed: "Gegenangebot konnte nicht gesendet werden", + }, + offer: { + validAmount: "Gib einen gültigen Betrag ein", + describeOffer: "Beschreibe dein Angebot", + describeOfferBody: "Füge einen Betrag, einen Tausch-Artikel oder eine Nachricht hinzu.", + dmAmount: " für {{amount}} sats", + dmItem: " (bietet: {{item}})", + dmBody: "🛹 Neues Angebot für dein Listing „{{title}}“{{amount}}{{item}}.{{note}}", + sent: "Angebot gesendet", + sentBody: "{{sellerName}} kann es annehmen oder ablehnen.", + sendFailed: "Angebot konnte nicht gesendet werden", + somethingWrong: "Etwas ist schiefgelaufen.", + title: "Ein Angebot machen", + description: + "Biete sats oder tausche etwas – {{sellerName}} kann annehmen, ablehnen oder kontern. Die Übergabe vereinbart ihr unter euch.", + amountLabel: "Betrag (sats, optional)", + amountPlaceholder: "z. B. 45000", + itemLabel: "Oder etwas tauschen (optional)", + itemPlaceholder: "z. B. mein 8.25 Deck + Ersatz-Wheels", + itemHint: "Tauschen? Trage hier ein, was du bietest – du kannst es mit sats kombinieren.", + messageLabel: "Nachricht (optional)", + messagePlaceholder: "Was der Verkäufer wissen sollte…", + send: "Angebot senden", + }, + markSold: { + enterBuyer: "npub des Käufers eingeben", + dealClosed: "Deal abgeschlossen 🎉", + dealClosedBody: "Listing als verkauft markiert und der Trade für die Reputation veröffentlicht.", + closeFailed: "Deal konnte nicht abgeschlossen werden", + somethingWrong: "Etwas ist schiefgelaufen.", + title: "Deal abschließen", + description: + "Markiert dieses Listing als verkauft und erfasst eine signierte Trade-Bestätigung für dich und den Käufer.", + buyerLabel: "npub des Käufers", + methodLabel: "Wie wurde bezahlt? (selbst angegeben)", + amountLabel: "Betrag in sats (optional)", + submit: "Als verkauft markieren", + }, + handoff: { + title: "Übergabe vereinbaren", + suggest: "Zeit & Ort vorschlagen", + suggestDm: + "Hi! Ich würde gerne „{{title}}“ kaufen. Schlag eine Zeit und einen Ort zum Treffen vor – gerne an einem öffentlichen Skate-Spot.", + orMeetAt: "Oder treffen wir uns an einem nahen öffentlichen Spot:", + spotDm: "Hi! Ich würde gerne „{{title}}“ kaufen. Wollen wir uns bei {{spot}} treffen? {{url}}", + shareDelivery: "Lieferdetails teilen", + deliveryDm: + "Hi! Ich würde gerne „{{title}}“ kaufen. Hier sind meine Lieferdetails:\n\nName:\nAdresse:\n\n(Teile nur, was der Kurier braucht.)", + useLocker: "Ein Schließfach / Paketpunkt nutzen", + lockerDm: + "Hi! Ich würde gerne „{{title}}“ kaufen. Könnten wir ein Paketfach / eine Paketstation statt einer Privatadresse nutzen?", + noteBefore: + "Diese Details bleiben im privaten Chat – SkateSpots sieht sie nie. Bei Versand-Deals bevorzuge", + escrow: "escrow", + noteMiddle: ", und", + neverPay: "zahle niemals außerhalb der App-Rails", + noteAfter: ". Triff dich in der Öffentlichkeit.", + }, + shipping: { + noCounterparty: "Noch keine Gegenpartei", + noCounterpartyBody: "Der Verkäufer sollte zuerst den Verkauf erfassen (mit Nennung des Käufers).", + markedShipped: "Als versendet markiert", + markedReceived: "Als erhalten markiert", + issueReported: "Problem gemeldet", + receivedBody: "Danke – dies gibt escrow nicht frei; kläre es direkt mit dem Verkäufer.", + notifiedBody: "Die andere Seite wurde benachrichtigt.", + updateFailed: "Aktualisierung nicht möglich", + somethingWrong: "Etwas ist schiefgelaufen.", + title: "Versand", + shipped: "versendet", + received: "erhalten", + issue: "Problem", + trackingPlaceholder: "Sendungsnummer (optional)", + iShipped: "Ich habe es versendet", + iReceived: "Ich habe es erhalten", + reportIssue: "Ein Problem melden", + noteBefore: "Selbst angegeben – eine Logistiknotiz,", + notProof: "kein Beweis", + noteAfter: + ". Das Markieren als „erhalten“ gibt escrow nicht frei. ⚠️ Fotografiere kein Paket mit sichtbarer Adresse und teile eine Sendungsnummer nur, wenn es dir recht ist, dass sie öffentlich ist.", + }, + pay: { + sent: "Zahlung gesendet ⚡", + sentWithProof: "Verifizierbarer Zahlungsbeleg gespeichert – er zählt als zahlungsverifiziert.", + sentBody: + "Sag dem Verkäufer Bescheid – er kann den Trade bestätigen, damit er für euch beide zählt.", + failed: "Zahlung fehlgeschlagen", + title: "Mit sats bezahlen", + descSendPrefix: "Sende", + descSendSuffix: "an {{sellerName}}, um diesen Deal abzuwickeln.", + descSettle: "Wickle diesen Deal direkt mit {{sellerName}} ab.", + paid: "Bezahlt!", + paidBody: + "Bitte den Verkäufer, den Trade zu bestätigen – zwei Bestätigungen bauen beide Reputationen auf.", + noMethod: + "{{sellerName}} hat keine Zahlungsmethode festgelegt (keine Lightning-Rechnung oder -Adresse). Schreib ihm, um die Zahlung zu vereinbaren.", + ownListing: "Das ist dein eigenes Listing.", + paying: "Wird bezahlt…", + pay: "Bezahlen", + payAmount: "{{amount}} sats bezahlen", + footnote: + "Zahlt aus deiner verbundenen Wallet (NWC, WebLN oder Cashu) direkt an {{sellerName}} – SkateSpots hält die Gelder nie.", + }, + spamFee: { + invoiceComment: "SkateSpots-Listing-Gebühr", + generateFailed: "Rechnung konnte nicht erstellt werden", + paymentSuccess: "Zahlung erfolgreich!", + satsSent: "{{amount}} sats an {{name}} gesendet", + autoPayFailed: "Automatische Zahlung fehlgeschlagen", + autoPayFailedBody: "Bitte zahle manuell per QR-Code oder Rechnung", + invoiceCopied: "Rechnung kopiert!", + copyFailed: "Kopieren fehlgeschlagen", + received: "Zahlung erhalten!", + receivedBody: + "Deine Gebühr von {{amount}} sats wurde bezahlt. Du kannst jetzt dein Listing erstellen.", + title: "Einmalige Listing-Gebühr", + subtitle: "Als neues Mitglied ist für dein erstes Listing eine kleine Gebühr erforderlich.", + whyTitle: "Warum muss ich zahlen?", + spamLabel: "Spam-Prävention:", + spamBody: + "Diese Gebühr stoppt Bots und Betrüger, den Marketplace mit gefälschten Listings zu fluten.", + trustLabel: "Vertrauensaufbau:", + trustBody: + "Neue Konten müssen Engagement zeigen, bevor sie listen. Nach ein paar erfolgreichen Listings entfällt diese Gebühr.", + supportsLabel: "Unterstützt die Community:", + supportsPrefix: "Die Gebühr geht an", + supportsSpotOwner: " – die Person, die diesen Spot erstellt hat!", + supportsPlatform: " – hilft, SkateSpots am Laufen zu halten.", + oneTimeFee: "~${{usd}} USD • Einmalige Gebühr", + payToContinue: "{{amount}} sats zahlen, um fortzufahren", + proveWork: "Stattdessen Arbeit nachweisen – kostenlos", + proveWorkBody: + "Verwende ein paar Sekunden CPU statt {{amount}} sats. Kein Geld, keine Wallet – eine Spam-Steuer, keine Zahlung.", + generating: "Rechnung wird erstellt...", + processing: "Zahlung wird verarbeitet...", + qrAlt: "Zahlungs-QR-Code", + copyInvoice: "Rechnung kopieren", + openWallet: "Wallet öffnen", + payWithWallet: "Mit verbundener Wallet bezahlen", + scanHint: "Scanne den QR-Code mit einer Lightning-Wallet oder nutze die Buttons oben", + skipTitle: "So überspringst du diese Gebühr in Zukunft:", + skip1: "Füge einen Skate-Spot zur Karte hinzu", + skip2: "Schließe 2-3 erfolgreiche Listings ab", + skip3: "Baue deine Community-Reputation auf", + skipNote: "Vertrauenswürdige Mitglieder erhalten unbegrenzt kostenlose Listings!", + }, + reputation: { + highlyTrusted: "Hoch vertrauenswürdiger Händler", + building: "Reputation im Aufbau", + newTrader: "Neuer Händler", + title: "Trades", + verified: "Verifiziert", + sales: "Verkäufe", + purchases: "Käufe", + tradeConfirmedOne: "gegenseitig bestätigter Trade", + tradeConfirmedMany: "gegenseitig bestätigte Trades", + with: "mit", + personOne: "Person", + personMany: "Personen", + awaiting: "Wartet auf gegenseitige Bestätigung", + withPaymentProof: "mit angehängtem Zahlungsbeleg", + selfReported: "(selbst angegeben – nicht verifiziert)", + paymentVerified: "zahlungsverifiziert", + zapReceipt: "(Zap-Beleg)", + singlePartnerWarning: + "Jede Bestätigung erfolgt mit demselben Konto. Gegenseitige Bestätigung ist selbst angegeben, behandle diesen Eintrag daher mit Vorsicht.", + lowDiversityWarning: + "Die meisten Bestätigungen stammen von sehr wenigen Konten. Eine kleine Gruppe, die sich gegenseitig bestätigt, kann beschäftigt wirken – behandle diesen Eintrag mit Vorsicht.", + ringWarning: + "Diese Konten handeln überwiegend untereinander – ein geschlossener Cluster. Gegenseitige Bestätigung in einem Ring ist schwacher Beweis.", + weighted: "Nach Vertrauen & Aktivität gewichtet", + footnote: "Selbst angegeben und gegenseitig signiert – ein Signal, kein Zahlungsnachweis.", + }, + reputationPanel: { + reviewOfYou: "Bewertung über dich", + yourRecord: "dein Eintrag", + listing: "Listing", + averageOne: "Durchschnitt aus {{count}} Bewertung", + averageMany: "Durchschnitt aus {{count}} Bewertungen", + reviewsTitle: "Bewertungen & Trade-Einträge", + fromOthers: "{{count}} von anderen", + emptyBefore: "Noch keine Trade-Einträge. Schließe einen Deal ab und bestätige ihn in", + emptyAfter: "– jede Bestätigung wird zu einer Bewertung auf beiden Profilen.", + }, + recommendations: { + published: "Empfehlung veröffentlicht", + publishedBody: "Danke für deine Fürsprache.", + failed: "Empfehlung nicht möglich", + somethingWrong: "Etwas ist schiefgelaufen.", + title: "Vertrauenswürdiger Händler", + recommendedBy: "Empfohlen von", + skaterOne: "Skater", + skaterMany: "Skatern", + none: "Noch keine Empfehlungen.", + youRecommend: "Du empfiehlst diesen Händler ✓", + recommend: "Als vertrauenswürdigen Händler empfehlen", + }, + notification: { + newOffer: "Neues Angebot", + counterOffer: "Gegenangebot", + offerAccepted: "Angebot angenommen", + offerDeclined: "Angebot abgelehnt", + offerWithdrawn: "Angebot zurückgezogen", + confirmTrade: "Einen Trade bestätigen", + tradeConfirmed: "Trade bestätigt", + reviewOffer: "Angebot prüfen", + openListing: "Listing öffnen", + }, + confirmRow: { + rateTrade: "Bewerte den Trade:", + }, + deckRating: { + title: "{{value}}/10 Decks", + aria: "{{n}} von 10", + }, + clink: { + tip: "In Bitcoin Trinkgeld geben", + copiedBody: "CLINK-Code in die Zwischenablage kopiert.", + copyFailed: "Kopieren fehlgeschlagen", + copyFailedBody: "Auf die Zwischenablage konnte nicht zugegriffen werden.", + whatIs: "Was ist CLINK?", + tooltipTitle: "Direkt mit Bitcoin über Nostr bezahlen", + tooltipBody: + "CLINK ist ein selbstverwahrter Zahlungscode – kein App-Konto, kein Mittelsmann. Scanne ihn mit einer kompatiblen Lightning-Wallet, und das Trinkgeld geht direkt an sie.", + descRecipient: + "Sende eine selbstverwahrte Bitcoin-(Lightning-)Zahlung an {{recipientName}} – kein Mittelsmann.", + descGeneric: + "Sende eine selbstverwahrte Bitcoin-(Lightning-)Zahlung über Nostr – kein Mittelsmann.", + qrAlt: "CLINK-Angebots-QR-Code", + copyCode: "CLINK-Code kopieren", + openWallet: "In CLINK-Wallet öffnen", + copyToWallet: "Code für deine Wallet kopieren", + priceFixed: "Fest – {{amount}} sats", + priceFixedShort: "Festpreis", + priceVariable: "Variabler Preis", + priceVariableCurrency: "Preis in {{currency}}", + priceSpontaneous: "Du wählst den Betrag", + footnote: + "Scanne mit einer CLINK-kompatiblen Wallet (z. B. ShockWallet). Wenn sich nichts öffnet, kopiere den Code oben – möglicherweise ist keine CLINK-kompatible Wallet installiert. Kein Verwahrer, kein Webserver: Die Rechnung wird direkt über Nostr angefragt.", + }, + paymentReadiness: { + ready: "Du kannst bezahlt werden", + notReady: "Richte Zahlungen ein, um bezahlt zu werden", + readyBefore: "Deine Lightning-Adresse", + readyAfter: " ist in deinem Profil – Leute können dir Zaps schicken und dich direkt bezahlen.", + silentSet: " Eine Bitcoin-Silent-Payment-Adresse ist ebenfalls gesetzt.", + notReadyBefore: + "Füge eine Lightning-Adresse (und optional eine Bitcoin-Silent-Payment-Adresse) zu deinem", + nostrProfile: "Nostr-Profil", + notReadyAfter: + "hinzu, damit Skater dich bezahlen können. Sie wird einmal festgelegt und funktioniert für jedes Profil, das du hier hast.", + }, + seller: { + trade: "Tausch", + active: "Aktiv", + markSold: "Als verkauft markieren", + yourListings: "Deine Listings", + activeCount: "{{count}} aktiv", + listItem: "Einen Artikel listen", + loading: "Deine Listings werden geladen…", + empty: "Du hast noch keine Listings.", + listFirst: "Liste deinen ersten Artikel", + }, + noffer: { + label: "CLINK-Angebotscode", + optional: "(optional, fortgeschritten)", + offerId: "Angebot: {{id}}", + relay: "Relay: {{relay}}", + invalidBefore: "Das sieht nicht nach einem gültigen", + invalidAfter: "Code aus.", + valid: "Gültiger CLINK-Code – ein „Via CLINK bezahlen“-Button erscheint auf deinem Profil.", + help: + "Füge einen selbstverwahrten CLINK-Zahlungscode ein (z. B. von ShockWallet / Lightning.Pub), um Nostr-native Lightning-Zahlungen zu akzeptieren – ohne Webserver oder Verwahrer.", + learnSpecs: "Spezifikationen ansehen", + }, + escrowPanel: { + escrowed: "{{amount}} sats in escrow", + mint: "mint", + refundSinceBefore: "Käufer kann erstatten seit", + redeemBefore: "Verkäufer kann jetzt einlösen · Käufer erstattet nach", + noExpiry: "Für dieses Token ist kein Ablauf festgelegt.", + }, + escrowRequest: { + enterAmount: "Gib einen escrow-Betrag ein", + minLock: "Mindestens {{days}} Tag sperren", + requestNote: "{{amount}} sats für unseren Trade in escrow – bitte bestätige den Verkauf.", + created: "escrow erstellt 🎉", + createdBody: + "{{amount}} sats für {{days}} Tage gesperrt. {{sellerName}} kann bei Lieferung einlösen.", + createFailed: "escrow konnte nicht erstellt werden", + somethingWrong: "Etwas ist schiefgelaufen.", + title: "Diesen Trade per escrow absichern", + description: + "Die Gelder sind an {{sellerName}} gesperrt und von dir erstattbar, falls der Deal nach der Frist scheitert. Erfordert eine verbundene Lightning-Wallet.", + amountLabel: "Betrag (sats)", + daysLabel: "Käufer-Erstattung nach (Tagen)", + daysHint: + "Nach so vielen Tagen kannst du die Gelder zurückfordern, wenn der Verkäufer nicht geliefert hat.", + nativeOnly: "Cashu-escrow ist nur in der SkateSpots-App verfügbar (nicht im Web-Build).", + lockAndRequest: "Sperren & anfragen", + }, + }, + labOptions: { + coach: { + skill: { + basics: "Grundlagen", + ollies: "Ollies", + kickflips: "Kickflips", + grinds: "Grinds & Slides", + manuals: "Manuals", + inverts: "Inverts", + vert: "Vert/Ramp", + bowl: "Bowl", + street: "Street", + freestyle: "Freestyle", + safety: "Sicherheit", + diy: "DIY-Skate-Module", + }, + skillDesc: { + basics: "Pushen, Stance, Balance, Lenken", + ollies: "Ollie und Variationen (nollie, fakie)", + kickflips: "Kickflip, Heelflip und Variationen", + grinds: "50-50, 5-0, Boardslide und mehr", + manuals: "Manual, Nose Manual, Combos", + inverts: "Invert, Handplant, Eggplant, Andrecht", + vert: "Halfpipe, Quarterpipe, Drop-ins", + bowl: "Bowl-Carving, Pumping, Lines", + street: "Street-Obstacles und Kreativität", + freestyle: "Flatground-Tricks und Flow", + safety: "Wie man fällt, Schutzausrüstung, Verletzungsprävention", + diy: "Ramps, Rails, Ledges und andere Skate-Obstacles bauen", + }, + }, + filmer: { + service: { + miniclips: "Mini-Clips", + longparts: "Lange Videoparts", + koth: "King of the Road-Stil", + documentaries: "Dokumentationen", + contests: "Filmen für Contests", + raw: "Rohmaterial", + followlines: "Follow- / Line-Filming", + lines: "Line- & B-Roll-Filming", + }, + serviceDesc: { + miniclips: "15-60-Sek.-Clips für Social Media", + longparts: "3-10 Min. komplette Videoparts mit Musik", + koth: "Skate-Videos im Abenteuer-/Challenge-Stil", + documentaries: "Skate-Kultur und story-getriebene Inhalte", + contests: "Professionelle Contest- und Wettbewerbsberichterstattung", + raw: "Unbearbeitetes Material aus mehreren Winkeln", + followlines: "Fisheye-Follow-Cam für Lines", + lines: "Long-Lens-Lines und filmisches B-Roll", + }, + skill: { + vx1000: "VX1000", + hvx: "HVX / HPX", + cinema: "Kinokamera", + dslr: "DSLR / spiegellos", + actioncam: "GoPro / Action-Cam", + phone: "Handy-Filming", + drone: "Drohne / Aerial", + gimbal: "Gimbal / Stabilisator", + fisheye: "Fisheye-Objektiv", + longlens: "Long Lens", + "4k": "4K / Hohe Bildrate", + editing: "Videoschnitt", + color: "Color Grading", + }, + skillDesc: { + vx1000: "Klassische VX1000-Skateboard-Ästhetik", + hvx: "Panasonic HVX/HPX SD-/HD-Look", + cinema: "Kinokamera (FX3, C-Serie, RED, BMPCC)", + dslr: "Hochwertige DSLR- oder spiegellose Kamera", + actioncam: "GoPro-/Action-Cam-POV und Halterungen", + phone: "Mobiles Filmen mit modernen Smartphones", + drone: "Luft- und Drohnenaufnahmen", + gimbal: "Stabilisierte Gimbal-Bewegung", + fisheye: "Weitwinkel-Fisheye-Aufnahmen", + longlens: "Long Lens für detailreiche Aufnahmen", + "4k": "4K-Auflösung und High-Frame-Rate-Slow-Mo", + editing: "Professioneller Videoschnitt und Postproduktion", + color: "Farbkorrektur und Grading", + }, + }, + editor: { + service: { + parts: "Videoparts", + montages: "Montagen", + reels: "Reels / Kurze Clips", + documentaries: "Dokumentationen", + contest: "Contest-Edits", + brand: "Marken- / Promo-Videos", + motion: "Motion Graphics", + colorgrade: "Nur Color Grading", + }, + serviceDesc: { + parts: "Komplette Skate-Videoparts mit Soundtrack", + montages: "Compilation-Edits aus Rohmaterial", + reels: "15–60-Sek.-Social-Media-Clips & Reels", + documentaries: "Story-getriebene Skate-Kulturfilme", + contest: "Recap-Edits für Contests und Events", + brand: "Werbeinhalte für Marken und Shops", + motion: "Titel, Übergänge, Effekte und Grafiken", + colorgrade: "Farbkorrektur und LUT-basiertes Grading", + }, + skill: { + premiere: "Adobe Premiere", + resolve: "DaVinci Resolve", + finalcut: "Final Cut Pro", + aftereffects: "After Effects", + luts: "Individuelle LUTs", + vhs: "VHS / Retro-Ästhetik", + "4k": "4K- & RAW-Workflows", + sound: "Sound Design / Mix", + }, + skillDesc: { + premiere: "Schnitt mit Adobe Premiere Pro", + resolve: "Schnitt & Grading mit DaVinci Resolve", + finalcut: "Schnitt mit Final Cut Pro", + aftereffects: "Motion Graphics und Compositing", + luts: "Individuelle Farblook-Entwicklung", + vhs: "VHS-Glitch, Super-8, Retro-Filmlooks", + "4k": "Hochauflösende RAW/LOG-Kamera-Workflows", + sound: "Musik-Sync, SFX, Audio-Mastering", + }, + }, + photo: { + service: { + action: "Action- / Trick-Aufnahmen", + sequence: "Sequenz-Aufnahmen", + portraits: "Porträts", + editorial: "Editorial / Magazin", + product: "Produkt- / Shop-Fotografie", + events: "Event-Berichterstattung", + lifestyle: "Lifestyle / Dokumentar", + prints: "Prints & Zines", + }, + serviceDesc: { + action: "Peak-Action-Stills von Tricks und Lines", + sequence: "Mehrbild-Trick-Sequenzen", + portraits: "Rider-Porträts und Teamaufnahmen", + editorial: "Magazinreife Editorial-Strecken", + product: "Deck-, Gear- und Shop-Produktfotografie", + events: "Contest-, Jam- und Premieren-Berichterstattung", + lifestyle: "Behind-the-Scenes und Kultur-Dokumentation", + prints: "Physische Prints, Zines und Fotobücher", + }, + camera: { + dslr: "DSLR", + mirrorless: "Spiegellos", + medium: "Mittelformat", + film35: "35-mm-Film", + filmmedium: "Mittelformat-Film", + point: "Point & Shoot", + phone: "Handy", + }, + lens: { + fisheye: "Fisheye", + wide: "Weitwinkel", + standard: "Standard / Festbrennweite", + telephoto: "Tele / Long Lens", + macro: "Makro", + zoom: "Zoom", + }, + lighting: { + strobes: "Studio-Blitze", + speedlights: "Speedlights / Aufsteckblitze", + profoto: "Profoto", + elinchrom: "Elinchrom", + godox: "Godox", + triggers: "Funkauslöser", + continuous: "Dauerlicht / LED", + reflectors: "Reflektoren / Diffusoren", + naturallight: "Nur natürliches Licht", + }, + support: { + tripod: "Stativ", + monopod: "Einbeinstativ", + lightstands: "Lichtstative", + gimbal: "Gimbal", + bag: "Mobile Ausrüstung / Tasche", + laptop: "Tethering vor Ort", + }, + style: { + flashfisheye: "Blitz-Fisheye", + natural: "Natürliches Licht", + bw: "Schwarzweiß", + film: "Film-Ästhetik", + longlens: "Long Lens", + studio: "Studio / Ausgeleuchtet", + street: "Street / Dokumentar", + }, + }, + builder: { + service: { + diy: "DIY-Spots", + concrete: "Betonparks", + wood: "Hölzerne Ramps", + bowls: "Bowls & Pools", + transitions: "Transitions & Quarters", + rails: "Rails & Ledges", + boxes: "Manny Pads & Boxes", + minis: "Mini Ramps", + pumptrack: "Pumptracks", + foam: "Schaumgruben / Indoor", + repairs: "Reparaturen & Neubelag", + design: "Design & Beratung", + }, + serviceDesc: { + diy: "Community-DIY-Spots und Guerilla-Bauten", + concrete: "Gegossene Beton-Skateparks und Features", + wood: "Hölzerne Ramps, Launch Boxes und Obstacles", + bowls: "Bowls, Pools und tiefe Transitions", + transitions: "Quarterpipes, Banks und Transition", + rails: "Stahl-Rails, Ledges und Grind-Features", + boxes: "Manny Pads, Funboxen und Street-Features", + minis: "Mini Ramps und Garten-Setups", + pumptrack: "Pumptracks und Flow-Lines", + foam: "Schaumgruben, Resi und Indoor-Trainings-Features", + repairs: "Reparieren, Ausbessern und Neubelegen bestehender Spots", + design: "Pläne, Zeichnungen und Bauberatung", + }, + skill: { + concretework: "Beton / Spritzbeton", + welding: "Schweißen / Stahlbau", + carpentry: "Zimmerei / Holzbau", + formwork: "Schalung & Bewehrung", + masonry: "Mauerwerk", + coping: "Coping (Pool / Stahl)", + surfacing: "Skatelite / Belag", + earthworks: "Erdarbeiten / Aushub", + }, + scale: { + backyard: "Garten / Mini", + diycommunity: "Community-DIY", + publicpark: "Vollwertiger öffentlicher Park", + indoor: "Indoor-Anlage", + event: "Event- / Contest-Kurs", + }, + }, + artist: { + service: { + boardart: "Board-Grafiken", + logos: "Logos & Branding", + posters: "Poster & Flyer", + merch: "Merch & Bekleidung", + zines: "Zines & Print", + illustration: "Illustration", + stickers: "Sticker & Decals", + webdesign: "Web / Digital", + typography: "Typografie / Lettering", + animation: "Animation / Motion", + }, + serviceDesc: { + boardart: "Deck-Grafiken und Griptape-Kunst", + logos: "Markenidentität, Logos und Wortmarken", + posters: "Event-Poster, Flyer und Gig-Art", + merch: "T-Shirts, Hoodies und Bekleidungsgrafiken", + zines: "Zines, Editorial und Print-Layout", + illustration: "Individuelle Illustration und Charakterarbeit", + stickers: "Sticker-Packs, Decals und Slaps", + webdesign: "Websites, Digital und UI", + typography: "Handlettering und individuelle Schrift", + animation: "Motion Graphics und Animation", + }, + medium: { + digital: "Digital / Vektor", + handdrawn: "Handgezeichnet", + screenprint: "Siebdruck", + paint: "Farbe / Acryl", + collage: "Collage / Mixed", + photo: "Foto / Photoshop", + "3d": "3D / Render", + }, + tool: { + illustrator: "Adobe Illustrator", + photoshop: "Adobe Photoshop", + procreate: "Procreate", + affinity: "Affinity", + figma: "Figma", + blender: "Blender", + aftereffects: "After Effects", + clipstudio: "Clip Studio", + }, + }, + graffiti: { + style: { + throwups: "Throw-ups", + pieces: "Pieces / Burner", + murals: "Murales", + characters: "Charaktere", + lettering: "Lettering / Wildstyle", + stencil: "Schablone", + handstyles: "Handstyles / Tags", + "3dstyle": "3D-Stil", + abstract: "Abstrakt", + }, + styleDesc: { + throwups: "Schnelle zweifarbige Fills", + pieces: "Mehrfarbige Pieces und Burner", + murals: "Großformatige Murales und Produktionen", + characters: "Charakter- und Figurenarbeit", + lettering: "Wildstyle und Buchstabenstruktur", + stencil: "Schablone und Street Art", + handstyles: "Tags und Handstyles", + "3dstyle": "3D- und anamorphes Lettering", + abstract: "Abstrakt und Freestyle", + }, + medium: { + spray: "Sprühdosen", + rollers: "Rollen / Emulsion", + markers: "Marker / Tinten", + brush: "Pinsel / Farbe", + digital: "Digital / Procreate", + }, + context: { + legalwalls: "Legale Wände", + commissions: "Auftragsarbeiten", + liveart: "Live-Malerei", + skateparks: "Skatepark-Murales", + interiors: "Innenräume / Shops", + workshops: "Workshops", + }, + }, + tattoo: { + style: { + traditional: "Traditional / Old School", + neotraditional: "Neo-Traditional", + fineline: "Fine Line", + blackwork: "Blackwork", + realism: "Realismus", + lettering: "Lettering / Script", + illustrative: "Illustrativ", + skateflash: "Skate Flash", + ignorant: "Ignorant / Handpoke-Stil", + japanese: "Japanisch / Irezumi", + }, + styleDesc: { + traditional: "Kräftige Linien, klassische Americana", + neotraditional: "Traditional mit modernen Details", + fineline: "Feine Single-Needle-Arbeit", + blackwork: "Sattes Schwarz und Muster", + realism: "Fotorealistisch und Porträts", + lettering: "Script, Lettering und Zitate", + illustrative: "Illustrativ und grafisch", + skateflash: "Flash-Designs aus der Skate-Kultur", + ignorant: "Ignorant / naiver Handpoke-Stil", + japanese: "Japanisch traditionell / Irezumi", + }, + method: { + machine: "Maschine", + handpoke: "Handpoke / Stick & Poke", + flash: "Flash verfügbar", + custom: "Individuelle Designs", + coverup: "Cover-ups", + }, + }, + trainer: { + focus: { + strength: "Kraft & Kondition", + mobility: "Beweglichkeit & Flexibilität", + injuryprevention: "Verletzungsprävention", + rehab: "Reha / Physio", + recovery: "Erholung & Bodywork", + balance: "Balance & Stabilität", + cardio: "Cardio / Ausdauer", + nutrition: "Ernährungsberatung", + }, + focusDesc: { + strength: "Kraft und Power fürs Skaten aufbauen", + mobility: "Bewegungsradius und Flexibilität", + injuryprevention: "Prehab und Verletzungsrisiko senken", + rehab: "Physiotherapie und Reha nach Verletzungen", + recovery: "Massage, Bodywork und Erholung", + balance: "Propriozeption, Balance und Stabilität", + cardio: "Kondition und Ausdauer", + nutrition: "Ernährungs- und Fueling-Beratung", + }, + injury: { + ankles: "Knöchel", + knees: "Knie", + wrists: "Handgelenke", + hips: "Hüften", + back: "Rücken / Wirbelsäule", + shoulders: "Schultern", + heelbruise: "Fersenprellungen", + concussion: "Gehirnerschütterungsprotokoll", + }, + credential: { + physio: "Zugelassene Physiotherapeut:in", + osteo: "Osteopath:in", + certtrainer: "Zertifizierte Trainer:in", + sportstherapist: "Sporttherapeut:in", + massage: "Massagetherapeut:in", + inperson: "Vor Ort", + remote: "Remote / Online", + }, + }, + musician: { + genre: { + punk: "Punk", + hardcore: "Hardcore", + metal: "Metal", + rock: "Rock", + indie: "Indie / Alt", + hiphop: "Hip-Hop / Rap", + electronic: "Electronic", + lofi: "Lo-Fi / Beats", + reggae: "Reggae / Dub", + ska: "Ska", + jazz: "Jazz", + funk: "Funk / Soul", + flamenco: "Flamenco", + folk: "Folk / Akustik", + experimental: "Experimental", + grunge: "Grunge", + }, + instrument: { + vocals: "Gesang", + guitar: "Gitarre", + bass: "Bass", + drums: "Drums", + keys: "Keys / Synth", + dj: "DJ / Turntables", + producer: "Produzent / Beats", + sax: "Sax / Brass", + strings: "Streicher", + other: "Sonstiges", + }, + act: { + solo: "Solo-Künstler:in", + band: "Band", + dj: "DJ", + producer: "Produzent:in", + collective: "Kollektiv", + }, + }, + judge: { + format: { + game_of_skate: "Game of S.K.A.T.E.", + best_trick: "Best Trick", + jam: "Jam-Format", + contest: "Contest / Comp", + street_league: "Street League-Stil", + bowl: "Bowl / Vert", + mini_ramp: "Mini Ramp", + park: "Park", + street: "Street", + freestyle: "Freestyle", + world_tour: "World Destruction Tour", + am_series: "Am-Serie / Qualifier", + local_jam: "Lokaler Jam / Grassroots", + online: "Online / IG-Contest", + }, + specialty: { + head_judge: "Head Judge", + scoring: "Scoring / Auswertung", + mc: "MC / Ansager", + format_design: "Format-Design", + rules: "Regeln / Schiedsrichterwesen", + brackets: "Brackets / Heats", + livestream: "Livestream-Judging", + am_scout: "Am-Scouting", + }, + level: { + local: "Lokal", + regional: "Regional", + national: "National", + international: "International", + pro: "Pro-Circuit", + }, + }, + organizer: { + event: { + street_jam: "Street Jam", + best_trick: "Best Trick", + game_of_skate: "Game of S.K.A.T.E.", + contest: "Contest / Comp", + bowl: "Bowl / Vert", + mini_ramp: "Mini Ramp", + park: "Park-Session", + demo: "Pro-Demo", + clinic: "Clinic / Workshop", + meetup: "Meetup / Cruise", + downhill: "Downhill / Rennen", + slalom: "Slalom", + kids: "Kids / Jugend", + charity: "Charity / Benefiz", + tour_stop: "Tour-Stopp", + premiere: "Videopremiere", + market: "Markt / Kunstausstellung", + }, + service: { + organizing: "Komplette Organisation", + hosting: "Moderation / MC", + permits: "Genehmigungen & Behörden", + sponsorship: "Sponsoring / Markendeals", + promotion: "Promotion & Marketing", + livestream: "Livestream / Berichterstattung", + sound: "Sound & Musik", + ramps: "Ramps & Obstacles", + safety: "Sicherheit & Erste Hilfe", + vendors: "Essen & Stände", + media: "Foto-/Videoberichterstattung", + registration: "Anmeldungen & Brackets", + }, + scale: { + grassroots: "Grassroots", + local: "Lokal", + regional: "Regional", + national: "National", + international: "International", + pro: "Pro-Circuit", + }, + }, + barber: { + service: { + haircut: "Haarschnitt", + fade: "Fade", + beard: "Bartpflege", + lineup: "Line-up / Shape-up", + colour: "Farbe & Tönung", + kids: "Kinderschnitte", + }, + serviceDesc: { + haircut: "Ein klassischer Schnitt – Maschine und Schere.", + fade: "Ein abgestufter Fade – low, mid oder high.", + beard: "Bart trimmen, formen und in Form bringen.", + lineup: "Saubere Kanten an Haaransatz und Nacken.", + colour: "Farbe, Blondierung, Tönung und Tonen.", + kids: "Geduldige Schnitte für jüngere Skater.", + }, + style: { + skin_fade: "Skin Fade", + taper: "Taper", + buzz: "Buzz Cut", + mohawk: "Irokese", + mullet: "Vokuhila", + curly: "Locken / Afro", + long: "Lange Haare / Stufen", + classic: "Klassischer Scherenschnitt", + }, + setting: { + shop: "Shop / Barbershop", + mobile: "Mobil / Hausbesuche", + event: "Skate-Events & Comps", + }, + }, + tour: { + skill: { + beginner: { + label: "Anfänger", + description: "Neu im Skaten oder einfache Tricks", + }, + intermediate: { + label: "Fortgeschritten", + description: "Sicher auf den meisten Untergründen", + }, + advanced: { + label: "Erfahren", + description: "Erfahrener Skater, krasse Spots", + }, + all: { + label: "Alle Level", + description: "Für alle geeignet", + }, + }, + }, + }, +}; export default deBatch6; diff --git a/src/i18n/de/batch7.ts b/src/i18n/de/batch7.ts index 67b7bd6..9e8f2fb 100644 --- a/src/i18n/de/batch7.ts +++ b/src/i18n/de/batch7.ts @@ -1,4 +1,908 @@ -/** de — batch 7. Filled by the translation pass; empty until then. */ -const deBatch7 = {}; +/** de — batch 7. Filled by the translation pass. */ +const deBatch7 = { + events: { + title: "Skate-Events", + createEvent: "Event erstellen", + editEvent: "Event bearbeiten", + eventDetails: "Event-Details", + eventName: "Event-Name", + eventType: "Event-Typ", + date: "Datum", + time: "Uhrzeit", + startDate: "Startdatum", + endDate: "Enddatum", + venue: "Veranstaltungsort", + organizer: "Organisator", + attendees: "Teilnehmer", + going: "Dabei", + interested: "Interessiert", + rsvp: "RSVP", + ticketPrice: "Ticketpreis", + freeEntry: "Freier Eintritt", + register: "Anmelden", + moreInfo: "Mehr Infos", + upcomingEvents: "Kommend", + pastEvents: "Vergangen", + noEvents: "Keine Events gefunden", + findEvents: "Finde Contests, Demos, Sessions und mehr", + searchPlaceholder: "Events suchen...", + loginToCreate: "Melde dich an, um Events zu erstellen", + noEventsMatch: "Keine kommenden Events passen zu deinen Filtern.", + noUpcoming: "Keine kommenden Events gefunden.", + noPast: "Keine vergangenen Events gefunden.", + types: { + contest: "Contest", + session: "Session", + meetup: "Meetup", + premiere: "Videopremiere", + workshop: "Workshop", + demo: "Demo", + jam: "Jam", + }, + }, + wallet: { + title: "Wallet", + balance: "Guthaben", + send: "Senden", + receive: "Empfangen", + transactions: "Transaktionen", + history: "Verlauf", + noTransactions: "Noch keine Transaktionen", + sendSats: "Sats senden", + receiveSats: "Sats empfangen", + amount: "Betrag", + recipient: "Empfänger", + lightning: "Lightning", + onChain: "On-chain", + invoice: "Rechnung", + address: "Adresse", + scanQR: "QR scannen", + paste: "Einfügen", + payInvoice: "Rechnung bezahlen", + createInvoice: "Rechnung erstellen", + copied: "In die Zwischenablage kopiert!", + insufficientFunds: "Unzureichende Mittel", + paymentSent: "Zahlung gesendet!", + paymentReceived: "Zahlung empfangen!", + cashu: { + title: "Cashu Wallet", + tokens: "Token", + mint: "Mint", + mints: "Mints", + manageMints: "Mints verwalten", + addMint: "Mint hinzufügen", + removeMint: "Mint entfernen", + defaultMint: "Standard-Mint", + backup: "Backup", + restore: "Wiederherstellen", + recoveryPhrase: "Wiederherstellungsphrase", + viewRecoveryPhrase: "Wiederherstellungsphrase anzeigen", + seedWarning: "Das ist wie dein Nostr-nsec – halte es geheim und sichere es!", + }, + }, + spots: { + addSpot: "Spot hinzufügen", + editSpot: "Spot bearbeiten", + spotDetails: "Spot-Details", + spotName: "Spot-Name", + spotType: "Spot-Typ", + description: "Beschreibung", + location: "Standort", + address: "Adresse", + photos: "Fotos", + addPhotos: "Fotos hinzufügen", + obstacles: "Hindernisse", + features: "Besonderheiten", + bustLevel: "Bust-Level", + bestTime: "Beste Zeit", + tips: "Tipps", + reviews: "Bewertungen", + addReview: "Bewertung hinzufügen", + reportSpot: "Spot melden", + directions: "Route", + shareSpot: "Spot teilen", + createdBy: "Erstellt von", + lastUpdated: "Zuletzt aktualisiert", + types: { + park: "Skatepark", + street: "Street-Spot", + diy: "DIY-Spot", + plaza: "Plaza", + indoor: "Indoor", + bowl: "Bowl", + vert: "Vert", + miniramp: "Miniramp", + }, + bustLevels: { + chill: "Chill", + moderate: "Mäßig", + sketchy: "Sketchy", + heavy: "Heavy", + }, + }, + settings: { + title: "Einstellungen", + profile: "Profil", + editProfile: "Profil bearbeiten", + account: "Konto", + security: "Sicherheit", + relays: "Relays", + appearance: "Darstellung", + language: "Sprache", + notifications: "Benachrichtigungen", + privacy: "Datenschutz", + about: "Über", + help: "Hilfe", + feedback: "Feedback", + version: "Version", + displayName: "Anzeigename", + username: "Benutzername", + bio: "Bio", + website: "Website", + lightningAddress: "Lightning-Adresse", + profilePicture: "Profilbild", + banner: "Banner", + saveProfile: "Profil speichern", + backupKeys: "Keys sichern", + exportKeys: "Keys exportieren", + secretKey: "Geheimer Schlüssel", + publicKey: "Öffentlicher Schlüssel", + showSecretKey: "Geheimen Schlüssel anzeigen", + hideSecretKey: "Geheimen Schlüssel verbergen", + copyKey: "Schlüssel kopieren", + keysBackedUp: "Du hast bestätigt, dass deine Keys sicher gesichert sind.", + keysNotBackedUp: "Sorge dafür, dass du deine Wiederherstellungsphrase oder deinen geheimen Schlüssel sicherst!", + selectLanguage: "Sprache auswählen", + english: "Englisch", + spanish: "Spanisch", + }, + createSpot: { + title: "Einen Skate-Spot hinzufügen", + subtitle: "Teile einen Skate-Spot mit der Community", + backToMap: "Zurück zur Karte", + namePlaceholder: "z. B. Hollywood High School", + descriptionPlaceholder: "Beschreibe den Spot, Hindernisse, beste Zeiten zum Skaten, Sicherheitsinfos usw.", + addressPlaceholder: "z. B. 1521 N Highland Ave, Los Angeles, CA", + selectType: "Spot-Typ auswählen", + selectBustLevel: "Bust-Level auswählen", + uploadPhotos: "Hochladen", + dragDrop: "Zum Hochladen ziehen und ablegen oder klicken", + maxPhotos: "Max. 5 Fotos", + publishing: "Wird veröffentlicht...", + success: "Spot erfolgreich veröffentlicht!", + error: "Spot konnte nicht veröffentlicht werden", + locationRequired: "Bitte wähle einen Standort auf der Karte aus", + useCurrentLocation: "Meinen aktuellen Standort verwenden", + pickOnMap: "Standort auf der Karte wählen", + loginToAdd: "Du musst dich anmelden, um einen Skate-Spot hinzuzufügen.", + locationLabel: "Standort", + tapToPlace: "Tippe auf die Karte, um die Markierung zu setzen, oder ziehe sie zum Feinjustieren.", + manualCoords: "Koordinaten manuell eingeben", + moreDetails: "Mehr Details (optional)", + photoHint: "ein Foto ist zum Veröffentlichen erforderlich", + nameRequired: "Bitte gib einen Namen für diesen Spot ein.", + descriptionRequired: "Bitte beschreibe diesen Spot.", + addressRequired: "Bitte füge eine Adresse oder einen Ortsnamen hinzu.", + photoRequired: "Bitte füge mindestens ein Foto hinzu.", + draftTitle: "Du hast einen ungespeicherten Entwurf", + draftBody: "Mach dort weiter, wo du aufgehört hast, oder verwerfe ihn.", + draftResume: "Fortsetzen", + draftDiscard: "Entwurf verwerfen", + requiredFields: "Erzähl uns von diesem Spot. Alle mit * markierten Felder sind erforderlich.", + coordinates: "Koordinaten", + latitudePlaceholder: "Breitengrad (z. B. 34.1012)", + longitudePlaceholder: "Längengrad (z. B. -118.3389)", + gettingLocation: "Standort wird ermittelt...", + accessType: "Zugangstyp", + publicTitle: "Öffentlich – für alle zugänglich", + publicDesc: "Skateparks, öffentliche Plätze, Street-Spots", + privateTitle: "Privatgelände – Genehmigung erforderlich", + privateDesc: "Rampen im Hinterhof, privates Gelände, abgesperrte Spots", + localsTitle: "Zuerst die Locals fragen", + localsDesc: "Respektiere den Spot und mach ihn nicht kaputt", + contactInfo: "Kontaktinformationen", + contactPlaceholder: "z. B. Telefonnummer, Instagram, E-Mail...", + contactHintPrivate: "Wie sollen Leute dich für eine Genehmigung kontaktieren?", + contactHintLocals: "Wie sollen Leute sich melden, um nach dem Spot zu fragen?", + }, + marketplace: { + title: "Marktplatz", + subtitle: "Kaufe, verkaufe und tausche Skate-Gear", + addListing: "Angebot hinzufügen", + condition: "Zustand", + conditions: { + new: "Neu", + likeNew: "Wie neu", + good: "Gut", + fair: "Akzeptabel", + poor: "Schlecht", + }, + categories: { + all: "Alle", + decks: "Decks", + trucks: "Trucks", + wheels: "Rollen", + bearings: "Kugellager", + shoes: "Schuhe", + clothing: "Kleidung", + protection: "Schutz", + other: "Sonstiges", + }, + priceRange: "Preisspanne", + location: "Standort", + seller: "Verkäufer", + contact: "Verkäufer kontaktieren", + makeOffer: "Angebot machen", + sold: "Verkauft", + available: "Verfügbar", + gear: "Gear", + sellGear: "Gear verkaufen", + wantToBuy: "Ankauf gesucht", + }, + auth: { + login: "Anmelden", + logout: "Abmelden", + signUp: "Registrieren", + signUpTitle: "Neu bei Nostr?", + signUpDesc: "Erstelle ein neues Konto, um loszulegen. Es ist kostenlos und offen.", + orLogIn: "Oder anmelden", + loginWithExtension: "Mit Erweiterung anmelden", + loginWithAmber: "Mit Amber anmelden (Android)", + loginWithKey: "Geheimer Schlüssel (nsec) oder Wiederherstellungsphrase", + loginWithBunker: "Mit Nostr Connect anmelden", + bunkerUri: "Bunker-Verbindungsstring", + openAmber: "Amber öffnen", + connectToBunker: "Mit Bunker verbinden", + noExtension: "Keine Erweiterung erkannt.", + extensionHelp: "Versuche, über die Schaltfläche „Registrieren“ oben ein neues Konto zu erstellen, oder nutze die Tabs Amber, Key oder Bunker, wenn du bereits Zugangsdaten hast.", + amberDesc: "Amber ist eine sichere Nostr-Signer-App für Android-Geräte. Klicke unten auf die Schaltfläche, um Amber zu öffnen und den Zugriff zu autorisieren.", + bunkerDesc: "Greife von jedem Gerät aus mit einem Remote-Signer (Bunker) auf dein Konto zu. Deine Keys bleiben sicher auf dem Server und werden nie Websites preisgegeben.", + keyPlaceholder: "nsec1... oder deine 12-Wörter-Wiederherstellungsphrase", + keyHint: "Du kannst entweder deinen nsec-Schlüssel oder eine 12-Wörter-Wiederherstellungsphrase einfügen", + uploadKeyFile: "Deine Key-Datei hochladen", + loggingIn: "Anmeldung läuft...", + connecting: "Verbindung wird hergestellt...", + verifying: "Wird überprüft...", + }, + createEvent: { + title: "Ein Event erstellen", + subtitle: "Organisiere ein Skate-Event für die Community", + backToEvents: "Zurück zu den Events", + namePlaceholder: "z. B. Sommer-Skate-Session", + descriptionPlaceholder: "Beschreibe das Event, was euch erwartet, Regeln, Preise usw.", + selectType: "Event-Typ auswählen", + venuePlaceholder: "z. B. Venice Beach Skatepark, CA", + selectDate: "Datum auswählen", + selectTime: "Uhrzeit auswählen", + ticketPricePlaceholder: "Leer lassen für kostenlose Events", + publishing: "Wird veröffentlicht...", + success: "Event erfolgreich veröffentlicht!", + error: "Event konnte nicht veröffentlicht werden", + loginToCreate: "Du musst dich anmelden, um ein Event zu erstellen.", + requiredFields: "Erzähl uns von diesem Event. Alle mit * markierten Felder sind erforderlich.", + startDateTime: "Startdatum & -uhrzeit", + endDateTime: "Enddatum & -uhrzeit (optional)", + coordinatesOptional: "Koordinaten (optional)", + coverImage: "Titelbild", + uploadCover: "Titelbild hochladen", + nip05Recommended: "NIP-05-Verifizierung empfohlen", + nip05Desc: "Füge deinem Profil eine NIP-05-Kennung hinzu, um deine Identität zu bestätigen und Vertrauen bei den Teilnehmern aufzubauen.", + addNip05: "NIP-05 in den Einstellungen hinzufügen", + }, + labPage: { + title: "The Lab", + subtitle: "Lern Tricks. Fang Momente ein. Vernetze dich mit anderen Skatern", + coachesTab: "Coaching", + filmersTab: "Filming", + offerCoaching: "COACHING ANBIETEN", + offerFilming: "FILMING ANBIETEN", + loginToOffer: "Anmelden, um Services anzubieten", + whatToLearn: "WAS WILLST DU LERNEN?", + whatContent: "WELCHE ART VON INHALT?", + selectSkillsDesc: "Wähle Skills aus und wir vermitteln dir passende Coaches", + selectFilmingDesc: "Wähle die Filming-Services aus, die du suchst", + searchPlaceholder: "Nach Name, Ort oder Skills suchen...", + noServicesYet: "NOCH KEINE SERVICES", + beFirstToOffer: "Sei der Erste, der der Community Coaching- oder Filming-Services anbietet!", + skills: "Skills", + rate: "Preis", + perHour: "/Stunde", + contact: "Kontakt", + viewProfile: "Profil ansehen", + noProfilesYet: "Noch keine Profile", + beFirstCoach: "Sei der Erste, der sich als Coach registriert!", + beFirstFilmer: "Sei der Erste, der sich als Filmer registriert!", + yearsExperience: "Jahre Erfahrung", + }, + 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", + }, + lab: { + title: "The Lab", + subtitle: "Bring dein Skaten aufs nächste Level", + coaches: "Coaches", + filmers: "Filmer", + findCoach: "Coach finden", + becomeCoach: "Coach werden", + findFilmer: "Filmer finden", + becomeFilmer: "Filmer werden", + hourlyRate: "Stundensatz", + experience: "Erfahrung", + specialties: "Spezialisierungen", + availability: "Verfügbarkeit", + bookSession: "Session buchen", + contactCoach: "Coach kontaktieren", + noCoaches: "Keine Coaches in deiner Nähe gefunden", + noFilmers: "Keine Filmer in deiner Nähe gefunden", + }, + shops: { + title: "Skate-Shops", + addShop: "Shop hinzufügen", + editShop: "Shop bearbeiten", + shopDetails: "Shop-Details", + shopName: "Shop-Name", + hours: "Öffnungszeiten", + phone: "Telefon", + website: "Website", + services: "Services", + brands: "Marken", + supportLocal: "Lokale unterstützen", + nip05: "Shop-NIP-05", + nip05Hint: "Ein optionaler Handle, den du für diesen Shop kontrollierst (z. B. shop@yourdomain.com), verifiziert gegen deinen Key. Füge bis zu 5 hinzu.", + }, + becomeFilmer: { + title: "Filmer werden", + subtitle: "Fang die besten Clips für die Community ein", + bioPlaceholder: "Erzähl uns von deiner Filming-Erfahrung und deiner Ausrüstung...", + specialtiesPlaceholder: "z. B. Fisheye, Teleobjektiv, Drohne, Editing", + selectSpecialties: "Wähle deine Spezialisierungen", + hourlyRate: "Stundensatz (sats)", + ratePlaceholder: "z. B. 5000", + locationPlaceholder: "Deine Stadt oder Region", + portfolioUrl: "Portfolio-URL", + portfolioPlaceholder: "Link zu deiner Arbeit (YouTube, Instagram usw.)", + publishing: "Profil wird veröffentlicht...", + success: "Filmer-Profil erstellt!", + error: "Profil konnte nicht erstellt werden", + }, + food: { + title: "Food-Spots", + subtitle: "Tank vor oder nach deiner Session auf", + addFood: "Food-Spot hinzufügen", + categories: { + all: "Alle", + burgers: "Burger", + pizza: "Pizza", + tacos: "Tacos", + coffee: "Kaffee", + drinks: "Getränke", + snacks: "Snacks", + }, + skaterFriendly: "Skaterfreundlich", + nearSpots: "In der Nähe von Skate-Spots", + }, + profile: { + posts: "Posts", + spots: "Spots", + events: "Events", + following: "Folge ich", + followers: "Follower", + editProfile: "Profil bearbeiten", + follow: "Folgen", + unfollow: "Entfolgen", + noPostsYet: "Noch keine Posts", + noBio: "Noch keine Bio", + zapProfile: "Diesen Skater zappen", + }, + becomeCoach: { + title: "Coach werden", + subtitle: "Teile deine Skills und hilf anderen Skatern, Fortschritte zu machen", + bioPlaceholder: "Erzähl uns von deinem Skate-Hintergrund und deinem Lehrstil...", + skillsPlaceholder: "z. B. Kickflip, Heelflip, Grinds, Bowls", + selectSkills: "Wähle die Skills aus, die du unterrichten kannst", + hourlyRate: "Stundensatz (sats)", + ratePlaceholder: "z. B. 5000", + locationPlaceholder: "Deine Stadt oder Region", + publishing: "Profil wird veröffentlicht...", + success: "Coach-Profil erstellt!", + error: "Profil konnte nicht erstellt werden", + }, + weather: { + title: "Wetter", + current: "Aktuelle Bedingungen", + forecast: "Vorhersage", + humidity: "Luftfeuchtigkeit", + wind: "Wind", + feelsLike: "Gefühlt wie", + goodForSkating: "Gut zum Skaten!", + notIdeal: "Keine idealen Bedingungen", + allWeather: "Jedes Wetter", + goodWeather: "Gutes Wetter", + perfectWeather: "Perfektes Wetter", + }, + errors: { + somethingWentWrong: "Etwas ist schiefgelaufen", + tryAgainLater: "Bitte versuche es später erneut", + notFound: "Nicht gefunden", + pageNotFound: "Seite nicht gefunden", + unauthorized: "Nicht autorisiert", + loginRequired: "Bitte melde dich an, um fortzufahren", + networkError: "Netzwerkfehler", + checkConnection: "Bitte überprüfe deine Internetverbindung", + invalidInput: "Ungültige Eingabe", + requiredField: "Dieses Feld ist erforderlich", + }, + time: { + today: "Heute", + yesterday: "Gestern", + tomorrow: "Morgen", + thisWeek: "Diese Woche", + nextWeek: "Nächste Woche", + thisMonth: "Diesen Monat", + justNow: "Gerade eben", + minutesAgo: "Vor {{count}} Minuten", + hoursAgo: "Vor {{count}} Stunden", + daysAgo: "Vor {{count}} Tagen", + }, + spotDetail: { + postedBy: "Gepostet von", + getDirections: "Route anzeigen", + reviews: "Bewertungen", + noReviews: "Noch keine Bewertungen", + beFirstReview: "Sei der Erste, der diesen Spot bewertet!", + writeReview: "Bewertung schreiben", + submitReview: "Bewertung abschicken", + rating: "Bewertung", + reviewPlaceholder: "Teile deine Erfahrung an diesem Spot...", + relatedSpots: "Spots in der Nähe", + }, + eventDetail: { + organizedBy: "Organisiert von", + eventInfo: "Event-Info", + location: "Standort", + dateTime: "Datum & Uhrzeit", + price: "Preis", + attendeeCount: "{{count}} dabei", + interested: "Interessiert", + going: "Dabei", + notGoing: "Nicht dabei", + share: "Event teilen", + }, + venueAccess: { + title: "Zugangspässe", + desc: "Stelle einem Rider einen signierten Pass aus, damit er am Einlass seinen Zugang nachweisen kann – er zeigt seine Karte und jeder kann den QR-Code scannen, um ihn zu verifizieren.", + active: "{{count}} aktiv", + revoked: "{{count}} widerrufen", + issue: "Pass ausstellen", + verifyHint: "Per Scan verifiziert – zum Prüfen ist keine App und kein Konto nötig.", + publicTitle: "Zugangspässe", + publicDesc: "Dieser Veranstaltungsort stellt Zugangspässe aus. Scanne die Karte eines Riders am Einlass, um sie zu verifizieren.", + badge: "Pässe", + sellerHint: "Der Veranstaltungsort dieses Verkäufers stellt Zugangspässe aus", + }, + zaps: { + zapButton: "Zap", + sendZap: "Zap senden", + zapAmount: "Zap-Betrag", + customAmount: "Eigener Betrag", + addMessage: "Nachricht hinzufügen (optional)", + sending: "Wird gesendet...", + sent: "Zap gesendet!", + failed: "Zap fehlgeschlagen", + received: "Du hast einen Zap erhalten!", + }, + rewards: { + title: "Belohnungen", + yourPoints: "Deine Punkte", + earnPoints: "Punkte verdienen", + redeemPoints: "Punkte einlösen", + leaderboard: "Bestenliste", + achievements: "Erfolge", + dailyTasks: "Tägliche Aufgaben", + weeklyTasks: "Wöchentliche Aufgaben", + }, + errorsUi: { + slammedTitle: "Hingeslammt", + slammedBody: "Etwas hat diesen Bildschirm aus der Bahn geworfen. Dein Konto und deine Daten sind sicher – bringen wir dich wieder ins Rollen.", + tryAgain: "Erneut versuchen", + reloadApp: "App neu laden", + pageSlammedTitle: "Diese Seite ist hingeslammt", + pageSlammedBody: "Etwas auf diesem Bildschirm ist gestolpert. Dein Konto und deine Daten sind sicher. Meistens hilft ein schneller Neustart.", + reload: "Neu laden", + goBack: "Zurück", + }, + backup: { + title: "Speichere deinen Login", + subtitle: "Dauert 10 Sekunden – mach es einmal", + message: "Dein Wiederherstellungscode ist der einzige Weg zurück in dein Konto. Speichere ihn, dann kannst du dich auf jedem Gerät anmelden.", + warning: "Verlierst du ihn, gibt es kein Zurücksetzen – keine E-Mail, keine Passwort-Wiederherstellung.", + backupNow: "Jetzt speichern", + confirmed: "Ich habe ihn gespeichert", + remindLater: "Später", + }, + bootUi: { + ariaLoading: "SkateSpots wird geladen", + ariaReady: "SkateSpots bereit", + ready: "Bereit", + statusWaking: "Das Netzwerk wird aufgeweckt", + statusTuning: "Die Relays werden abgestimmt", + statusPulling: "Spots werden geladen", + statusDropping: "Einfach rein", + }, + footer: { + vibedWith: "Gevibed mit", + poweredBy: "Bereitgestellt von", + openSource: "Open Source", + contribute: "Beitragen", + decentralized: "Dezentral", + communityOwned: "Community-eigen", + }, + role: { + owner: "Inhaber", + admin: "Admin", + organiser: "Organisator", + verifiedOwner: "Verifizierter Inhaber", + }, + nfc: { + write: "Auf NFC-Tag schreiben", + written: "Tag beschrieben", + writtenDesc: "Halte den Tag an ein Telefon, um die Verifizierungsseite zu öffnen.", + failed: "Tag konnte nicht beschrieben werden", + }, + collectionUi: { + namePlaceholder: "Barcelona-Reise 2024", + descriptionPlaceholder: "Meine Lieblingsspots von meiner Barcelona-Reise...", + }, + toastsUi: { + followingSuccess: "Erfolgreich gefolgt", + followingSuccessDesc: "Dieser Nutzer ist jetzt in deinem Netzwerk", + followFailed: "Folgen fehlgeschlagen", + unfollowSuccess: "Erfolgreich entfolgt", + unfollowSuccessDesc: "Aus deinem Netzwerk entfernt", + unfollowFailed: "Entfolgen fehlgeschlagen", + reportThanks: "Danke – zur Prüfung gesendet", + reportFailed: "Bericht konnte nicht gesendet werden", + savedOffline: "Offline gespeichert", + savedOfflineDesc: "Wir veröffentlichen es automatisch, sobald du wieder online bist.", + cacheCleaned: "Cache bereinigt", + cacheCleanedDesc: "{{count}} alte Spots aus dem Cache entfernt", + cacheCleared: "Cache geleert", + cacheClearedDesc: "Alle zwischengespeicherten Spots wurden entfernt", + backOnline: "Wieder online", + backOnlineDesc: "{{count}} gespeicherte Aktion(en) gesendet.", + postQueued: "Post in Warteschlange", + postQueuedDesc: "Dein Post wird veröffentlicht, sobald du wieder online bist", + invalidIdentifier: "Ungültige Kennung. Verwende npub1..., user@domain.com oder einen Hex-Pubkey", + notASpotThanks: "Danke – zur Prüfung gesendet", + notASpotThanksDesc: "Nichts für ungut: Dadurch wird die Markierung als themenfremd gekennzeichnet, damit andere selbst entscheiden können.", + notASpotFailed: "Bericht konnte nicht gesendet werden", + pleaseTryAgain: "Bitte versuche es erneut.", + relayUnreachable: "Kein Relay erreichbar – überprüfe deine Verbindung und versuche es erneut.", + loginToReport: "Melde dich an, um einen Spot zu melden.", + zapLoginRequired: "Anmeldung erforderlich", + zapLoginRequiredDesc: "Du musst angemeldet sein, um einen Zap zu senden.", + zapEventNotFound: "Event nicht gefunden", + zapEventNotFoundDesc: "Das Event zum Zappen konnte nicht gefunden werden.", + zapAuthorNotFound: "Autor nicht gefunden", + zapAuthorNotFoundDesc: "Der Autor dieses Eintrags konnte nicht gefunden werden.", + zapSuccess: "Zap erfolgreich!", + zapSuccessNwcDesc: "Du hast {{amount}} sats über NWC an den Autor gesendet.", + zapSuccessDesc: "Du hast {{amount}} sats an den Autor gesendet.", + zapStatusUnknown: "Zahlungsstatus unbekannt", + zapStatusUnknownDesc: "Deine Wallet verarbeitet diesen Zap möglicherweise noch. Prüfe deine Wallet, bevor du es erneut versuchst – zahle nicht zweimal.", + zapNwcFailed: "NWC-Zahlung fehlgeschlagen", + zapWeblnFailed: "WebLN-Zahlung fehlgeschlagen", + zapFallingBack: "{{error}}. Es wird auf andere Zahlungsmethoden zurückgegriffen...", + zapFailed: "Zap fehlgeschlagen", + zapUnknownNwcError: "Unbekannter NWC-Fehler", + zapUnknownWeblnError: "Unbekannter WebLN-Fehler", + nwcInvalidUri: "Ungültige NWC-URI", + nwcInvalidUriDesc: "Bitte überprüfe den Verbindungsstring und versuche es erneut.", + nwcExists: "Verbindung existiert bereits", + nwcExistsDesc: "Diese Wallet ist bereits verbunden.", + nwcConnected: "Wallet verbunden", + nwcConnectedDesc: "Erfolgreich mit {{alias}} verbunden.", + nwcFailed: "Verbindung fehlgeschlagen", + nwcFailedDesc: "Wallet konnte nicht verbunden werden: {{error}}", + nwcUnknownError: "Unbekannter Fehler aufgetreten", + nwcDisconnected: "Wallet getrennt", + nwcDisconnectedDesc: "Die Wallet-Verbindung wurde entfernt.", + deleteApproveAmber: "In Amber bestätigen", + deleteApproveAmberDesc: "Amber wird geöffnet – tippe auf Bestätigen, um die Löschung zu bestätigen.", + deleteCancelled: "Abgebrochen", + deleteCancelledDesc: "Du hast die Anfrage in Amber abgelehnt.", + deleteCouldntSign: "Signieren fehlgeschlagen", + deletePublishing: "Schritt 2/2: Wird veröffentlicht…", + deletePublishingDesc: "Löschung wird an Relays gesendet.", + deleteStuck: "Bei VERÖFFENTLICHEN hängen geblieben", + deleteStuckDesc: "Relay-Schritt fehlgeschlagen: {{error}}. Es wurde korrekt signiert; das Relay hat nicht bestätigt.", + stashMerged: "Änderungen von einem anderen Gerät zusammengeführt", + stashMergedDesc: "Dein Stash wurde woanders bearbeitet – beide Änderungssätze wurden beibehalten.", + statusUpdated: "Status aktualisiert!", + statusUpdatedDesc: "Dein Skate-Status ist jetzt für andere sichtbar.", + statusFailed: "Status konnte nicht gesetzt werden", + statusCleared: "Status gelöscht", + statusClearedDesc: "Dein Status wurde entfernt.", + statusClearFailed: "Status konnte nicht gelöscht werden", + nutzapEnabled: "Nutzap-Empfang aktiviert", + nutzapEnabledDesc: "Du kannst jetzt Ecash-Zaps empfangen!", + nutzapSetupFailed: "Einrichtung fehlgeschlagen", + nutzapUnavailable: "Nutzap-Versand nicht verfügbar", + tokenReceived: "Token empfangen", + tokenReceivedDesc: "Cashu-Token erfolgreich eingelöst!", + receiveFailed: "Empfang fehlgeschlagen", + invalidAmount: "Ungültiger Betrag", + invalidAmountDesc: "Bitte gib einen gültigen Betrag ein", + tokenCreated: "Token erstellt", + sendFailed: "Senden fehlgeschlagen", + mintAdded: "Mint hinzugefügt", + mintAddedDesc: "Mint erfolgreich hinzugefügt und als vertrauenswürdig markiert", + mintAddFailed: "Mint konnte nicht hinzugefügt werden", + mintRemoved: "Mint entfernt", + mintRemoveFailed: "Mint konnte nicht entfernt werden", + paymentReceived: "Zahlung empfangen", + paymentReceivedDesc: "{{amount}} sats erfolgreich empfangen!", + paymentSent: "Zahlung gesendet", + paymentSentDesc: "Lightning-Zahlung erfolgreich abgeschlossen", + loginRequired: "Anmeldung erforderlich", + loginToFollowFounder: "Bitte melde dich an, um dem Gründer zu folgen", + alreadyFollowing: "Folgt bereits", + alreadyFollowingDesc: "Du folgst {{name}} bereits!", + couldNotComplete: "Konnte nicht abgeschlossen werden", + tryAgainLower: "Versuche es erneut.", + couldNotLoadProfile: "Profil konnte nicht geladen werden", + couldNotLoadProfileDesc: "Überprüfe deine Internetverbindung und aktualisiere die Seite.", + undone: "Rückgängig gemacht", + undoneDesc: "Zurück zu neutral – nicht verborgen, nicht bestätigt.", + confirmed: "Bestätigt", + confirmedDesc: "Bürgschaft gegeben – fällt aus dieser Warteschlange.", + hiddenToast: "Verborgen", + couldNotUndo: "Rückgängig machen fehlgeschlagen", + couldNotConfirm: "Bestätigen fehlgeschlagen", + deleteFailed: "Löschen fehlgeschlagen", + somethingWentWrong: "Etwas ist schiefgelaufen", + }, + seoUi: { + becomeBuilderTitle: "Baumeister werden - SkateSpots", + becomeBuilderDesc: "Biete deine Rampen-, Park- und DIY-Bau-Services an – was du baust, Materialien und Umfang.", + tradesTitle: "Meine Trades — SkateSpots", + tradesDesc: "Verwalte deine Marktplatz-Trades, Bestätigungen und deinen Ruf.", + eventsTitle: "Skate-Events & Touren - SkateSpots", + eventsDesc: "Entdecke Skate-Events, Wettbewerbe, Touren und Sessions in deiner Nähe.", + editShopDesc: "Bearbeite deinen Skate-Shop.", + createTourDesc: "Organisiere Skate-Touren – lokale Geheimtipp-Touren, nationale Roadtrips, internationale Abenteuer oder Zerstörungswettbewerbe im KOTR-Stil.", + deckDesignerTitle: "Deck-Designer — SkateSpots DIY", + deckDesignerDesc: "Entwirf die Kontur eines Skateboards oder Longboards und exportiere dann eine druckbare 1:1-Vorlage, SVG oder DXF – inklusive Concave, Kicks, Wheelbase und Truck-Löchern.", + createEventTitle: "Ein Skate-Event erstellen - SkateSpots", + createEventDesc: "Erstelle ein neues Skateboard-Event für die Community.", + editTourDesc: "Bearbeite deine Skate-Tour – aktualisiere Stopps, Termine und Details.", + walletTitle: "Wallet - SkateSpots", + walletDesc: "Verbinde deine Lightning-Wallet, um Zaps an Skater und Spot-Ersteller zu senden.", + becomePhotographerTitle: "Fotograf werden - SkateSpots", + becomePhotographerDesc: "Erstelle dein Skate-Fotografie-Profil – Kameras, Objektive, Beleuchtung und Services.", + newsletterTitle: "Newsletter - SkateSpots", + newsletterDesc: "Wöchentliche Updates aus der SkateSpots-Community. App-Updates, neue Spots, Events und die Menschen, die das Skateboarding am Leben halten.", + homeTitle: "SkateSpots – Entdecke Skateboard-Spots weltweit", + zapLeaderboardTitle: "Zap-Bestenlisten - SkateSpots", + zapLeaderboardDesc: "Die am meisten gezappten Skate-Spots und die Community-Mitglieder, die sie unterstützen.", + adminReviewTitle: "Prüf-Warteschlange — SkateSpots", + gearSwapTitle: "Gear-Tausch - SkateSpots", + gearSwapDesc: "Kaufe und verkaufe gebrauchtes Skate-Gear mit anderen Skatern. Decks, Trucks, Rollen, Schuhe und mehr.", + donateTitle: "Spenden — SkateSpots", + donateDesc: "Unterstütze SkateSpots – Lightning, private On-Chain-Zahlungen (Silent Payments) oder finanziere den Bau auf Angor.", + verifyCardTitle: "Verifizieren — SkateSpots", + verifyCardDesc: "Verifiziere eine SkateSpots-Karte oder einen Zugangspass.", + mapTitle: "Skate-Spot-Karte - SkateSpots", + mapDesc: "Erkunde Skateboard-Spots auf der ganzen Welt auf unserer interaktiven Karte.", + diyTitle: "DIY — Mach es selbst | SkateSpots", + diyDesc: "Anleitungen, offene Tools und Pläne, um deine eigenen Skateboards, Rampen und Beton-Spots zu bauen – und die Menschen und Orte, um das gemeinsam zu tun.", + appShopTitle: "App-Shop — SkateSpots", + becomeSkaterTitle: "Werde Teil des Skater-Verzeichnisses - SkateSpots", + becomeSkaterDesc: "Erstelle dein Skater-Profil, damit die Community dich finden kann.", + marketplaceTitle: "Marktplatz - SkateSpots", + marketplaceDesc: "Kaufe und verkaufe Skateboard-Gear auf dem dezentralen Plebeian Market.", + becomeEditorTitle: "Videoeditor werden - SkateSpots", + becomeEditorDesc: "Erstelle dein Skateboard-Videoeditor-Profil auf SkateSpots.", + amberCallbackTitle: "Anmeldung mit Amber - SkateSpots", + amberCallbackDesc: "Schließe deine Amber-Anmeldung (NIP-55) ab.", + supportersTitle: "Unterstützer - SkateSpots", + supportersDesc: "Die Community, die SkateSpots am Leben hält – Unterstützer, Mitwirkende, Partner und Freunde.", + becomeCoachTitle: "Coach werden - SkateSpots", + becomeCoachDesc: "Erstelle dein Skateboard-Coach-Profil.", + riderCardTitle: "Skater-Karte — SkateSpots", + riderCardDesc: "Erstelle deinen druckbaren SkateSpots-Skaterausweis oder deine Park-Zugangskarte.", + editEventDesc: "Bearbeite dein Skateboard-Event.", + createShopTitle: "Einen Skate-Shop hinzufügen - SkateSpots", + createShopDesc: "Füge deinen Skate-Shop zur Community hinzu.", + deckCostTitle: "Deck-Kostenrechner — SkateSpots DIY", + deckCostDesc: "Berechne, was die Herstellung eines Decks kostet – Arbeit, Ausrüstung, Materialien, Prozesszeit, Verpackung und Marge – und einen fairen Verkaufspreis.", + pyramidTitle: "Pyramiden-Rankings - SkateSpots", + pyramidDesc: "Top-Mitwirkende und Community-Anführer.", + foodTitle: "Food in Spot-Nähe - SkateSpots", + foodDesc: "Finde Restaurants, Cafés und Food-Optionen in der Nähe von Skateboard-Spots.", + createListingTitle: "Gear anbieten - SkateSpots", + createListingDesc: "Biete Skateboard-Gear zum Verkauf an oder finde Gear, das du kaufen möchtest.", + becomeFilmerTitle: "Filmer werden - SkateSpots", + becomeFilmerDesc: "Erstelle dein Skateboard-Filming-Profil.", + skatersTitle: "Skater - SkateSpots", + skatersDesc: "Entdecke Skater in der SkateSpots-Community. Stöbere nach Stil, Stand, Level und Ort.", + communityStatsTitle: "Community-Statistiken — SkateSpots", + communityStatsDesc: "Live-Community-Metriken für SkateSpots – Spots, Events, Coaches, Filmer, Editoren, Touren und Wachstum über die Zeit. Direkt aus Nostr bezogen.", + labTitle: "The Lab - SkateSpots", + labDesc: "Finde Skateboard-Coaches, Filmer, Fotografen und Videoeditoren.", + stashTitle: "Mein Stash - SkateSpots", + stashDesc: "Verwalte dein privates Gear-Inventar. Behalte den Überblick, was du besitzt und was du verkaufen oder tauschen möchtest.", + bountyLeaderboardTitle: "Mappen & Verdienen - SkateSpots", + bountyLeaderboardDesc: "Mappe Skate-Spots und Shops und verdiene Zaps von der Community. Sieh dir die Top-Mitwirkenden an.", + spotCollectionsTitle: "Meine Spot-Sammlungen - SkateSpots", + spotCollectionsDesc: "Organisiere deine Lieblings-Skate-Spots in personalisierten Sammlungen", + mintsTitle: "Cashu-Mints — SkateSpots", + mintsDesc: "Durchsuche Cashu-Mints, prüfe ihren Zustand und füge einen zu deiner Wallet hinzu.", + }, + miscUi: { + openingCamera: "Kamera wird geöffnet…", + usePhoneCamera: "Nutze deine Handykamera und komm dann hierher zurück", + startingCamera: "Kamera wird gestartet...", + cameraAccessRequired: "Kamerazugriff erforderlich", + cameraAccessHint: "Erlaube den Kamerazugriff in deinen Browsereinstellungen oder nutze die Dateiauswahl unten.", + cameraErrorTitle: "Kamerafehler", + cameraErrorDesc: "Die Kamera konnte nicht geöffnet werden. Bitte überprüfe die App-Berechtigungen in den Einstellungen.", + cameraDeniedTitle: "Kamerazugriff verweigert", + cameraDeniedDesc: "Bitte erlaube den Kamerazugriff in deinen Browsereinstellungen.", + uploadFromGallery: "Aus Galerie hochladen", + uploading: "Wird hochgeladen...", + usePhoto: "Foto verwenden", + earningPotential: "Verdienstpotenzial", + qualityExcellent: "Ausgezeichnet!", + qualityGood: "Gut", + qualityBasic: "Grundlegend", + qualityGettingStarted: "Gerade erst begonnen", + qualityLocationAdded: "Standort hinzugefügt", + qualityOnePhoto: "Mindestens 1 Foto", + qualityThreePhotos: "3+ Fotos", + qualityMoreAngles: "Mehr Winkel = besser", + qualityDescription: "Beschreibung", + qualityDetailedDesc: "Detaillierte Beschreibung (100+ Zeichen)", + qualityContact: "Kontaktinfo", + qualityPhoneOrWebsite: "Telefon oder Website", + qualityHours: "Öffnungszeiten", + qualitySpotType: "Spot-Typ ausgewählt", + failedToLoadComments: "Kommentare konnten nicht geladen werden", + commentsTitle: "Kommentare", + noCommentsYet: "Noch keine Kommentare", + beFirstComment: "Sei der Erste, der seine Gedanken teilt!", + removeMember: "Mitglied entfernen", + whoIsThisFor: "Für wen ist dieses Profil?", + individual: "Einzelperson", + individualDesc: "Eine einzelne Person", + collective: "Kollektiv", + collectiveDesc: "Crew, Studio oder Firma", + membersLabel: "Mitglieder", + dismissReport: "Meldung verwerfen", + reportedBy: "gemeldet von", + completingLoginAmber: "Anmeldung mit Amber wird abgeschlossen...", + entityMembersHint: "Füge die Nostr-Konten deiner Crew hinzu. Jedes Mitglied bestätigt seinen eigenen Spot mit seinem Key – bis dahin werden sie als „ausstehend“ angezeigt.", + entityVerifiedHint: "Die Mitgliedschaft wird pro Mitglied verifiziert – niemand kann zu deiner Crew hinzugefügt werden, ohne dass er von seinem eigenen Konto aus bestätigt.", + entityInvalidPubkey: "Gib einen gültigen npub, nprofile oder 64-stelligen Hex-Pubkey ein.", + entityAlreadyAdded: "Dieses Mitglied ist bereits hinzugefügt.", + offline: "Offline", + connected: "Verbunden", + offlineMode: "Offline-Modus", + allFeaturesAvailable: "Alle Funktionen verfügbar", + browsingCachedSpots: "Zwischengespeicherte Spots werden durchsucht", + queuedActions: "{{count}} in der Warteschlange", + syncing: "Synchronisierung", + publishingWhenStable: "Wird veröffentlicht, sobald die Verbindung stabil ist...", + willPublishOnline: "Wird veröffentlicht, sobald du wieder online bist", + availableOffline: "Offline verfügbar:", + offlineBrowseSpots: "Bereits angesehene Spots durchsuchen", + offlineViewDetails: "Zwischengespeicherte Spot-Details anzeigen", + offlineKeepActing: "Mach weiter – Posts, RSVPs, Angebote und Nachrichten werden in die Warteschlange gestellt und gesendet, sobald du wieder verbunden bist", + }, + sasquatchGuide: { + homeTitle: "Willkommen bei SkateSpots! 🦧", + homeMessage: "Yo, ich bin The Sasquatch. Hüter der Boards, Trails und wilden Rides. Willkommen in der ungezähmten Skate-Welt auf Nostr – keine Anzüge, keine Werbung, nur Skater, die ihren eigenen Weg gehen. Hier gehören dir deine Tricks, deine Daten, und du kannst sogar Bitcoin verdienen, wenn du deine Spuren hinterlässt. Verbinde dich mit Skatern in deiner Hood oder auf der ganzen Welt. Keine Regeln außer shredden, keine Fußspuren außer deinen eigenen.", + homeQ1: "Plane mir 3 Tage in Barcelona", + homeQ2: "Finde Anfänger-Spots", + homeQ3: "Gibt es kommende Events?", + homeQ4: "Community-Statistiken", + homeQ5: "Finde Coaches in meiner Nähe", + homeQ6: "Gear zu verkaufen?", + homeQ7: "Was ist Nostr?", + homeQ8: "Ist das kostenlos?", + homeLearnMore: "Mehr erfahren", + onboardingTitle: "Erste Schritte 🚀", + onboardingMessage: "Lass mich dir die Grundlagen erklären! Nostr ist deine Identität, Bitcoin Lightning lässt dich sats für Beiträge verdienen, und Zaps sind sofortige Trinkgelder. Frag mich alles über den Einstieg!", + onboardingQ1: "Wie melde ich mich an?", + onboardingQ2: "Was ist Nostr?", + onboardingQ3: "Wie funktioniert Nostr?", + onboardingQ4: "Was ist Cashu?", + onboardingQ5: "Wie benutzt man die Cashu-Wallet?", + onboardingQ6: "Was sind Mints?", + onboardingQ7: "Was sind Zaps?", + onboardingQ8: "Was ist NWC?", + onboardingStart: "Erkundung starten", + onboardingLogin: "Anmelden zum Starten", + labTitle: "Willkommen im The Lab! 🎓", + labMessage: "Hier passiert die Magie! Finde Coaches, die dir alles von Kickflips bis Darkslides beibringen, oder verbinde dich mit Filmern, die deine besten Sessions einfangen. Filtere nach Skills, prüfe ihre Erfahrung und buche eine Session. Denk daran – jeder hat mal klein angefangen!", + labQ1: "Coaches finden", + labQ2: "Filmer finden", + labQ3: "Fotografen finden", + labQ4: "Videoeditoren finden", + labQ5: "Einen Rampenbauer finden", + labQ6: "Was ist The Lab?", + labQ7: "Was ist ein Builder?", + labQ8: "Wie bietet man Coaching an?", + labLogin: "Anmelden, um Services anzubieten", + crewsTitle: "Crews 🤘", + crewsMessage: "Crews sind deine auf der Karte verankerte Skate-Familie – die Leute, mit denen du zusammen skatest, nicht die, die du anheuerst. Jede Crew hat ihr Heimatrevier auf der Karte, Home-Spots, Mitglieder und ein Manifest. Mitglieder bestätigen mit ihren eigenen Keys, also ist das Roster echt. Gründe deine eigene oder finde deine Leute!", + crewsQ1: "Was sind Crews?", + crewsQ2: "Wie gründe ich eine Crew?", + crewsQ3: "Wie unterscheidet sich eine Crew von The Lab?", + crewsQ4: "Wie bestätigen Mitglieder?", + crewsQ5: "Was ist Nostr?", + crewsQ6: "Wie funktionieren Zaps?", + crewsLogin: "Anmelden, um eine Crew zu gründen", + }, + supportUi: { + keepMapFree: "Halt die Karte kostenlos", + keepMapFreeDesc: "Keine Werbung, kein Tracking, kein VC. Deine sats bezahlen Hosting, den AI-Node und das Relay.", + thankYou: "Danke! ⚡", + satsKeepMapFree: "Deine sats halten die Karte kostenlos.", + keptFreeNext: "Du hast SkateSpots gerade für den nächsten Skater kostenlos gehalten.", + scanToPay: "Zum Bezahlen scannen", + zapSkateSpots: "SkateSpots zappen", + payQuietly: "Leise bezahlen", + pickAmount: "Betrag wählen", + enterAmount: "Gib ein, wie viele sats du senden möchtest.", + couldNotStartPayment: "Die Zahlung konnte nicht gestartet werden.", + customAmountAria: "Eigener Betrag in sats", + commentPlaceholder: "Sag etwas (optional – nur öffentliche Zaps)", + publicZapTitle: "Öffentlicher Zap mit deinem Kommentar", + loginToZapTitle: "Anmelden, um einen öffentlichen Zap zu senden", + anonymousTitle: "Anonym – keine Anmeldung, kein Eintrag", + copyLightningTitle: "Lightning-Adresse kopieren", + copiedSuffix: "{{label}} kopiert", + invoiceLabel: "Rechnung", + addressLabel: "Adresse", + notAPurchase: "Unterstützung, kein Kauf – es gibt nichts dafür und keine Rückerstattungen. Merch und Sasquatch Pro sind separat. Dein Standort und deine Identität sind an einer leisen Zahlung nie beteiligt.", + }, + statusUi: { + quickStatus: "Schnellstatus", + skating: "Am Skaten", + skatingDesc: "Skate gerade", + filming: "Am Filmen", + filmingDesc: "Filme Tricks", + lookingForSesh: "Suche Session", + lookingForSeshDesc: "Will mit anderen skaten", + coaching: "Coaching", + coachingDesc: "Unterrichte/coache", + chilling: "Am Chillen", + chillingDesc: "Hänge am Spot ab", + onMyWay: "Unterwegs", + onMyWayDesc: "Auf dem Weg zu einem Spot", + takingABreak: "Mache Pause", + takingABreakDesc: "Ausruhen/hydratisieren", + doneForToday: "Für heute fertig", + doneForTodayDesc: "Mit dem Skaten fertig", + }, +}; export default deBatch7; diff --git a/src/i18n/de/batch8.ts b/src/i18n/de/batch8.ts index c8b304e..012a75e 100644 --- a/src/i18n/de/batch8.ts +++ b/src/i18n/de/batch8.ts @@ -1,4 +1,621 @@ -/** de — batch 8. Filled by the translation pass; empty until then. */ -const deBatch8 = {}; +const deBatch8 = { + deckCostUi: { + presetPrompt: "Name für dieses Preset", + presetDefaultName: "Preset {{n}}", + summaryCopied: "Zusammenfassung kopiert", + couldNotCopy: "Kopieren nicht möglich", + resetConfirm: "Alles auf die Beispielwerte zurücksetzen?", + logoTooLarge: "Logo zu groß (max. 500 KB)", + loginToFill: "Melde dich an, um aus deinem Nostr-Profil zu befüllen", + filledFromProfile: "Aus deinem Nostr-Profil befüllt", + warnRetailBelowOne: "Der Endkunden-Aufschlag liegt unter 1× — du würdest mit Verlust verkaufen.", + warnWholesaleAboveRetail: "Der Großhandels-Aufschlag sollte niedriger als der Endkunden-Aufschlag sein.", + warnZeroBoards: "{{count}} Zeile(n) verwenden 0 Boards — die Kosten dieser Zeile werden ignoriert.", + warnFixedNoBoards: "Es sind feste monatliche Kosten gesetzt, aber Boards/Monat ist 0, daher werden die Betriebskosten ignoriert.", + warnNoMaterials: "Keine Materialkosten — füge mindestens ein Material hinzu.", + warnEquipmentOverhead: "Equipment + Overhead machen über 60 % der Kosten aus — dieses Modell setzt hohe Stückzahlen voraus; prüfe deine Board-Anzahl.", + warnOneBoard: "Einige Equipment-Kosten werden auf ein einzelnes Board verteilt — erhöhe die Board-Anzahl, um sie zu amortisieren.", + templateStarterName: "Hobby-Einstieg", + templateStarterBlurb: "Ein paar Zeilen, keine festen Kosten", + templateShopName: "Kleine Werkstatt", + templateShopBlurb: "Vollständiges Sheet mit Miete & Overhead", + currency: "Währung", + noCurrencyMatches: "Keine Währung gefunden.", + ratesUnavailable: "Live-Kurse nicht verfügbar — Wechsel benennt nur um.", + liveRates: "Live-BTC-Kurse · sats inklusive", + chipCost: "Kosten", + chipSell: "Verkauf", + chipTotal: "Gesamt", + startFrom: "Starten mit", + advancedToggleHint: "Pro-Arbeitsgang-Sätze und Ausschuss, Batch-Einrichtung, Steuer und die Kosten-gegen-Menge-Kurve einblenden", + advanced: "Erweitert", + simple: "Einfach", + sectionLabor: "Arbeit", + sectionEquipment: "Equipment", + sectionOperations: "Betriebsausgaben", + sectionMaterials: "Materialien", + sectionProcesses: "Prozesskosten", + sectionPackaging: "Verpackung", + sectionMargins: "Margen", + subtotalLoaded: "{{value}}/Std. Vollkosten", + subtotalPerBoard: "{{value}}/Board", + hourlyRate: "Stundensatz ({{unit}})", + labourBurden: "Lohnnebenkosten (×)", + loadedRate: "Vollkosten-Stundensatz", + loadedRateHintBefore: "Vollkosten-Stundensatz = Lohn × Lohnnebenkosten (Arbeitgeberabgaben und Versicherungen auf Löhne). Miete und Rechnungen gehören unter ", + loadedRateHintAfter: " — zähle sie nicht doppelt.", + colEquipment: "Equipment", + colCostUnit: "Kosten ({{unit}})", + colCost: "Kosten", + colSetupH: "Einrichtung (Std.)", + colLifetimeBoards: "Boards (Lebensdauer)", + colPerBoard: "Pro Board", + colMaterial: "Material", + colOrderUnit: "Bestellung ({{unit}})", + colShipUnit: "Versand ({{unit}})", + colBoardsOrder: "Boards / Bestellung", + colOrderM: "Bestellung (Min.)", + colUnloadM: "Ausladen (Min.)", + colOrder: "Bestellung", + colShipping: "Versand", + colOrderMin: "Bestellung (Min.)", + colUnloadMin: "Ausladen (Min.)", + colProcess: "Prozess", + colTimeM: "Zeit (Min.)", + colBoardsRun: "Boards / Durchlauf", + colRateHr: "Satz/Std. (0 = Werkstatt)", + colRateHrShort: "Satz/Std.", + colScrapPct: "Ausschuss %", + colTimeMin: "Zeit (Min.)", + colPackaging: "Verpackung", + colTimeBoardM: "Zeit/Board (Min.)", + colTimeBoardMin: "Zeit/Board (Min.)", + colMaterialsBoardUnit: "Materialien/Board ({{unit}})", + colMaterialsBoard: "Materialien/Board", + equipmentPerBoard: "Equipment pro Board:", + materialsPerBoard: "Materialien pro Board:", + processesPerBoard: "Prozesse pro Board:", + packagingPerBoard: "Verpackung pro Board:", + perBoard: "Pro Board:", + addEquipment: "Equipment hinzufügen", + addMaterial: "Material hinzufügen", + addProcess: "Prozess hinzufügen", + addPackagingStep: "Verpackungsschritt hinzufügen", + duplicate: "Duplizieren", + remove: "Entfernen", + boardsPerMonth: "Boards / Monat", + rentPerMonth: "Miete / Monat", + utilitiesPerMonth: "Nebenkosten / Monat", + subscriptionsPerMonth: "Abos / Monat", + markup: "Aufschlag (×)", + wholesaleMarkup: "Großhandels-Aufschlag (×)", + scrapWaste: "Ausschuss / Verlust (%)", + quantityDecks: "Menge (Decks)", + targetMonthlyProfit: "Angestrebter Monatsgewinn ({{unit}})", + costNoPackaging: "Kosten / Board (ohne Verpackung)", + costWithPackaging: "Kosten / Board (mit Verpackung)", + batchSetupHours: "Batch-Einrichtung (Std. / Durchlauf)", + batchSetupCost: "Batch-Einrichtungskosten ({{unit}} / Durchlauf)", + taxVat: "Steuer / MwSt. (%)", + quoteTax: "Steuer im Angebot", + includedInPrice: "Im Preis enthalten", + addedOnTop: "Aufgeschlagen", + setupPerBoard: "Einrichtung / Board", + marginNoteBefore: "Aufschlag {{markup}}× ≈ ", + grossMargin: "{{pct}} % Bruttomarge", + marginNoteAfter: " · Verlust {{waste}} % verteilt sich auf die guten Boards.", + sellingPriceNoPackaging: "Verkaufspreis · ohne Verpackung", + sellingPriceWithPackaging: "Verkaufspreis · mit Verpackung", + profitPerDeck: "Gewinn / Deck", + wholesalePerDeck: "Großhandel / Deck", + orderTotalQty: "Bestellsumme ({{qty}})", + orderTotal: "Bestellsumme", + breakeven: "Break-even", + breakevenPerMonth: "{{count}}/Monat", + targetDecksHint: "Um {{amount}}/Monat zusätzlich zu den Fixkosten zu erzielen, verkaufe {{decks}} Decks/Monat.", + priceIncludesTax: "Der Preis enthält {{pct}} % Steuer: {{amount}} der Gesamtsumme.", + plusTax: "Zzgl. {{pct}} % Steuer: {{amount}} → {{total}} gesamt.", + costVsQuantity: "Kosten vs. Menge (Einrichtung amortisiert)", + deckOne: "Deck", + deckOther: "Decks", + perDeckSuffix: "/ Deck", + orderSuffix: "Bestellung {{amount}}", + shippingNotIncluded: "Versand an den Käufer nicht enthalten.", + clientQuoteDetails: "Kundenangebot-Details (für das PDF)", + fillFromProfileTitle: "Fülle Name, Website, NIP-05, Lightning und npub aus deinem Nostr-Profil", + fillFromProfile: "Aus Profil befüllen", + businessName: "Firmen-/Shop-Name", + email: "E-Mail", + phone: "Telefon", + website: "Website", + address: "Adresse", + quoteNumber: "Angebots-Nr.", + nextNumber: "Nächste Nummer", + validDays: "Gültig (Tage)", + nip05: "NIP-05", + lightningAddress: "Lightning-Adresse", + nostrNpub: "Nostr (npub)", + depositPct: "Anzahlung im Voraus (%)", + deliveryTerms: "Lieferbedingungen (Incoterm, optional)", + paymentMethods: "Zahlungsmethoden", + paymentTerms: "Zahlungsbedingungen", + paymentDetails: "Zahlungsdetails", + notesTerms: "Hinweise / Bedingungen", + changeLogo: "Logo ändern", + addLogo: "Logo hinzufügen", + incotermNone: "Keine", + incotermExw: "EXW — Abholung beim Verkäufer", + incotermFca: "FCA — Übergabe an den Frachtführer des Käufers", + incotermDap: "DAP — Lieferung an die Adresse des Käufers", + incotermDdp: "DDP — geliefert, Zölle bezahlt", + payMethodCash: "Bar", + payMethodLightning: "Lightning", + payMethodCashu: "Cashu", + payMethodBank: "Banküberweisung", + payMethodCard: "Karte", + payMethodOther: "Sonstiges", + listDeckAtPrice: "Ein Deck zu diesem Preis anbieten", + getItMade: "Lass es bauen — finde einen Builder", + savePreset: "Preset speichern", + load: "Laden", + export: "Exportieren", + import: "Importieren", + reset: "Zurücksetzen", + deletePreset: "Preset löschen", + exportPdfFull: "PDF — vollständiges Sheet", + exportPdfQuote: "PDF — Kundenangebot", + exportPng: "PNG-Bild", + exportXlsx: "XLSX-Arbeitsmappe", + exportCsv: "CSV (Tabelle)", + exportMarkdown: "Markdown", + exportJson: "JSON (Backup)", + exportCopySummary: "Zusammenfassung kopieren" + }, + becomeRolesUi: { + artist: { + seoTitle: "Designer / Künstler werden - SkateSpots", + seoDescription: "Biete dein Skate-Design & deine Kunst an — Board-Grafiken, Logos, Poster, Merch und mehr.", + heading: "Designer / Künstler", + tagline: "Board-Grafiken, Logos, Poster, Merch — bring deine Kunst in die Szene", + noun: "Künstler", + rateLabel: "Satz", + portfolioLabel: "Portfolio-/Shop-Link", + sectionWhatYouMake: "Was du machst", + sectionMedium: "Medium", + sectionSoftwareTools: "Software & Tools", + deliverablesPlaceholder: "z. B. druckfertige Dateien, Quelldateien, Deck-Grafiken", + turnaroundPlaceholder: "z. B. 3–5 Tage" + }, + graffiti: { + seoTitle: "Graffiti / Murals anbieten - SkateSpots", + seoDescription: "Biete deine Graffiti- & Mural-Arbeit an — Pieces, Murals, Skatepark-Kunst und mehr.", + heading: "Graffiti-/Mural-Künstler", + tagline: "Pieces, Murals, Skatepark-Kunst — bemal die Szene", + noun: "Graffiti-Künstler", + rateLabel: "Satz", + portfolioLabel: "Portfolio-Link (IG, Website)", + sectionStyle: "Stil", + sectionMedium: "Medium", + sectionWorkContext: "Arbeitskontext", + crewLabel: "Graffiti-Crew", + crewPlaceholder: "Deine Writing-Crew (optional)", + crewHelper: "Getrennt von deiner Skate-Crew — die Writer, mit denen du malst.", + surfacesPlaceholder: "z. B. Beton, Ziegel, genehmigte Wände", + maxSizePlaceholder: "z. B. bis zu 10 m" + }, + musician: { + seoTitle: "Musikprofil hinzufügen - SkateSpots", + seoDescription: "Skaten und Musik machen? Biete deine Band oder dein Soloprojekt an — Genres, Instrumente und Links.", + heading: "Musiker / Band", + tagline: "Skaten und Musik machen? Lass dich für Demos, Jams & After-Partys buchen", + noun: "Musiker", + rateLabel: "Booking-Satz", + portfolioLabel: "Website-/EPK-Link", + sectionGenre: "Genre", + sectionInstruments: "Instrumente & Rolle", + actLabel: "Act-Typ", + actPlaceholder: "Solo / Band / DJ / Produzent", + spotifyLabel: "Spotify", + spotifyPlaceholder: "https://open.spotify.com/…", + bandcampLabel: "Bandcamp", + bandcampPlaceholder: "https://…bandcamp.com", + soundcloudLabel: "SoundCloud", + soundcloudPlaceholder: "https://soundcloud.com/…", + youtubeLabel: "YouTube", + youtubePlaceholder: "https://youtube.com/…", + setLengthPlaceholder: "z. B. 30–45 Min.", + techRiderPlaceholder: "z. B. PA, Mikrofone, Backline" + }, + judge: { + seoTitle: "Skate-Events als Judge bewerten - SkateSpots", + seoDescription: "Biete dich als Judge für Skate-Events an — Game of S.K.A.T.E., Best-Trick-Jams, Contests, Am-Serien und World-Tour-Stopps. Lass dich buchen, um faire, glaubwürdige Events zu leiten.", + heading: "Skate-Event-Judge", + tagline: "Vom Flatground-Game of S.K.A.T.E. bis zur World Destruction Tour — fair und glaubwürdig geleitet", + noun: "Judge", + rateLabel: "Tagessatz / Honorar", + portfolioLabel: "Ergebnisarchiv-/Profil-Link", + sectionEventFormats: "Event-Formate", + sectionSpecialty: "Spezialgebiet", + sectionLevelCircuit: "Level / Circuit", + eventsJudgedLabel: "Bewertete Events", + eventsJudgedPlaceholder: "z. B. 40+ Contests, 3 World-Tour-Stopps", + eventsJudgedHelper: "Bemerkenswerte Events, Comps oder Touren, die du geleitet hast.", + travelPlaceholder: "z. B. regional / landesweit / international", + certificationsPlaceholder: "z. B. nationaler Judge-Kurs" + }, + organizer: { + seoTitle: "Skate-Events organisieren - SkateSpots", + seoDescription: "Biete dich als Skate-Event-Organisator an — Street-Jams, Best Trick, Contests, Meetups, Demos und Tour-Stopps. Lass dich entdecken und buchen, um die Session zu leiten.", + heading: "Event-Organisator", + tagline: "Jams, Contests, Meetups & Demos — veranstalte die Session und bring die Szene zusammen", + noun: "Organisator", + rateLabel: "Event-Honorar / Budget", + portfolioLabel: "Link zu vergangenen Events / Ergebnissen", + sectionEventTypes: "Event-Typen", + sectionWhatYouHandle: "Was du übernimmst", + sectionScale: "Umfang", + eventsHostedLabel: "Organisierte Events", + eventsHostedPlaceholder: "z. B. 25 Jams, 3 Stadt-Comps", + eventsHostedHelper: "Bemerkenswerte Events, Comps oder Meetups, die du veranstaltet hast.", + insurancePlaceholder: "z. B. Betriebshaftpflicht inklusive", + permitsPlaceholder: "z. B. behördliche Genehmigungen geregelt" + }, + tattoo: { + seoTitle: "Tattoo-Künstler werden - SkateSpots", + seoDescription: "Biete deine Tattoo-Arbeit für die Skate-Szene an — Styles, Flash, Custom und mehr.", + heading: "Tattoo-Künstler", + tagline: "Ink für die Szene — Flash, Custom, Fine Line & mehr", + noun: "Tattoo-Künstler", + rateLabel: "Satz / Stunde", + portfolioLabel: "Portfolio-Link (IG, Website)", + sectionStyles: "Styles", + sectionMethod: "Methode", + studioLabel: "Studio / Shop", + studioPlaceholder: "Studio-Name (optional)", + booksOpenLabel: "Bücher offen", + booksOpenHelper: "Nimmst du derzeit Buchungen an?", + depositPlaceholder: "z. B. 50 EUR nicht erstattungsfähig", + minimumPlaceholder: "z. B. 80 EUR" + }, + trainer: { + seoTitle: "Trainer / Physio werden - SkateSpots", + seoDescription: "Hilf Skatern, stark und gesund zu bleiben — Kraft, Mobilität, Verletzungsprävention und Regeneration.", + heading: "Trainer / Physio", + tagline: "Kraft, Mobilität, Verletzungsprävention & Regeneration für Skater", + noun: "Trainer", + rateLabel: "Satz / Session", + portfolioLabel: "Profil-/Buchungslink", + sectionFocus: "Schwerpunkt", + sectionInjuries: "Verletzungen, mit denen du arbeitest", + sectionCredentialsSetting: "Qualifikationen & Umfeld", + credentialsPlaceholder: "z. B. BSc Physiotherapie, CSCS…", + credentialsHelper: "Gib echte Qualifikationen an — Skater vertrauen überprüfbaren Qualifikationen.", + remoteLabel: "Remote / Online", + remoteHelper: "Bietest du Online-Coaching oder Beratungen an?", + modalitiesPlaceholder: "z. B. manuelle Therapie, S&C, Dry Needling" + }, + barber: { + seoTitle: "Barbier / Friseur werden - SkateSpots", + seoDescription: "Biete deinen Barbershop oder Stuhl für die Skate-Szene an — Cuts, Fades, Bartpflege, Farbe und mehr. Lass dich von Skatern buchen.", + heading: "Barbier / Friseur", + tagline: "Cuts, Fades & Bartpflege für die Szene — Stuhl im Shop oder mobil", + noun: "Barbier", + rateLabel: "Preis / Cut", + portfolioLabel: "Cuts-Galerie / IG-Link", + sectionWhatYouOffer: "Was du anbietest", + sectionSignatureStyles: "Signature-Styles", + sectionSetting: "Umfeld", + studioLabel: "Shop / Studio", + studioPlaceholder: "Shop- oder Studio-Name (optional)", + booksOpenLabel: "Bücher offen", + booksOpenHelper: "Nimmst du derzeit Buchungen an?", + durationPlaceholder: "z. B. 30–45 Min." + } + }, + weatherUi: { + condition: { + clearSky: "Klarer Himmel", + mainlyClear: "Überwiegend klar", + partlyCloudy: "Teilweise bewölkt", + overcast: "Bedeckt", + foggy: "Neblig", + depositingRimeFog: "Reifablagernder Nebel", + lightDrizzle: "Leichter Nieselregen", + moderateDrizzle: "Mäßiger Nieselregen", + denseDrizzle: "Dichter Nieselregen", + lightFreezingDrizzle: "Leichter gefrierender Nieselregen", + denseFreezingDrizzle: "Dichter gefrierender Nieselregen", + slightRain: "Leichter Regen", + moderateRain: "Mäßiger Regen", + heavyRain: "Starker Regen", + lightFreezingRain: "Leichter gefrierender Regen", + heavyFreezingRain: "Starker gefrierender Regen", + slightSnow: "Leichter Schneefall", + moderateSnow: "Mäßiger Schneefall", + heavySnow: "Starker Schneefall", + snowGrains: "Schneegriesel", + slightRainShowers: "Leichte Regenschauer", + moderateRainShowers: "Mäßige Regenschauer", + violentRainShowers: "Heftige Regenschauer", + slightSnowShowers: "Leichte Schneeschauer", + heavySnowShowers: "Starke Schneeschauer", + thunderstorm: "Gewitter", + thunderstormSlightHail: "Gewitter mit leichtem Hagel", + thunderstormHeavyHail: "Gewitter mit starkem Hagel", + unknown: "Unbekannt" + }, + aqi: { + good: "Gut", + moderate: "Mäßig", + unhealthySensitive: "Ungesund für empfindliche Gruppen", + unhealthy: "Ungesund", + veryUnhealthy: "Sehr ungesund", + hazardous: "Gefährlich" + }, + skateability: { + perfect: "Perfekt", + good: "Gut", + okay: "Okay", + poor: "Mäßig", + bad: "Schlecht", + unrideable: "Unfahrbar" + }, + reason: { + currentlyRaining: "Aktuell Regen", + raining: "Regen", + snowing: "Schneefall", + thunderstorm: "Gewitter", + freezingTemperature: "Gefriertemperatur", + veryCold: "Sehr kalt", + extremelyHot: "Extrem heiß", + veryHot: "Sehr heiß", + veryStrongWind: "Sehr starker Wind", + strongWind: "Starker Wind", + moderateWind: "Mäßiger Wind", + veryUnhealthyAir: "Sehr ungesunde Luft", + unhealthyAir: "Ungesunde Luft", + moderateAirQuality: "Mäßige Luftqualität", + veryHumid: "Sehr feucht", + humid: "Feucht", + extremeUv: "Extremer UV-Index – Sonnenschutz tragen", + highUv: "Hoher UV-Index – Sonnenschutz empfohlen", + perfectConditions: "Perfekte Skate-Bedingungen" + } + }, + skaterLabelsUi: { + stance: { + regular: "Regular", + goofy: "Goofy" + }, + style: { + street: "Street", + park: "Park", + vert: "Vert", + transition: "Transition", + bowl: "Bowl", + cruising: "Cruising", + downhill: "Downhill", + freestyle: "Freestyle", + ledges: "Ledges", + stairs: "Stairs", + diy: "DIY" + }, + level: { + grom: "Grom", + intermediate: "Mittelstufe", + advanced: "Fortgeschritten", + ripper: "Ripper" + }, + sponsor: { + title: "Titelsponsor", + gold: "Gold", + silver: "Silber", + partner: "Partner" + } + }, + notifyUi: { + activity: { + zappedWithAmount: "Du wurdest mit {{sats}} sats gezappt", + zapped: "Du wurdest gezappt", + liked: "Jemand gefällt dein Beitrag", + reposted: "Jemand hat dich repostet", + mentioned: "Jemand hat dich erwähnt", + replied: "Jemand hat dir geantwortet", + rsvp: "Jemand hat für dein Event zugesagt", + eventUpdated: "Ein Event, zu dem du gehst, wurde aktualisiert", + newActivity: "Neue Aktivität", + tapToOpen: "Tippen, um SkateSpots zu öffnen" + }, + crew: { + inviteTitle: "Crew-Einladung", + inviteBody: "Du bist zu {{crew}} eingeladen", + addedTitle: "Du wurdest zu einer Crew hinzugefügt", + addedBody: "{{crew}} — bestätigen, um beizutreten", + joinRequestTitle: "Beitrittsanfrage", + joinRequestBody: "Jemand möchte {{name}} beitreten" + }, + dm: { + title: "Neue Direktnachricht", + body: "Tippen zum Lesen" + }, + trade: { + confirm: "Trade bestätigen", + confirmed: "Trade bestätigt", + newOffer: "Neues Angebot für dein Listing", + counter: "Gegenangebot", + accepted: "Angebot angenommen 🎉", + declined: "Angebot abgelehnt", + withdrawn: "Angebot zurückgezogen" + }, + newsletter: { + drop: "Neuer SkateSpots-Drop" + }, + summary: { + moreUpdates: "{{count}} weitere Updates", + openToCatchUp: "Öffne SkateSpots, um aufzuholen" + } + }, + legacyMiscUi: { + hostingGoing: "{{count}} zugesagt", + hostingInterested: "{{count}} interessiert", + hostingPostUpdate: "Update posten", + hostingEdit: "Bearbeiten", + hostingLoginToSee: "Melde dich an, um deine veranstalteten Events zu sehen.", + hostingEmptyTitle: "Du veranstaltest noch nichts", + hostingEmptyBody: "Veranstalte einen Jam, Comp oder eine Session. Erstelle ein Event, und Skater können zusagen, Updates erhalten und vorbeikommen.", + hostingCreateEvent: "Event erstellen", + hostingUpcoming: "Anstehend · {{count}}", + hostingPast: "Vergangen · {{count}}", + sponsorPartners: "Partner", + sponsorTitleSponsor: "Titelsponsor", + sponsorPlatformPartners: "Plattform-Partner", + reportsUntitled: "(ohne Titel)", + reportsResolveFailed: "Das gemeldete Event konnte nicht aufgelöst werden (es wurde möglicherweise gelöscht, oder die Meldung betrifft ein Profil statt einen Beitrag).", + reportsLookAtIt: "Ansehen", + reportsNoReports: "Noch keine Meldungen. Entweder ist alles in Ordnung, oder niemand hat den Button gefunden.", + statusSetYourStatus: "Status festlegen", + statusSetDesc: "Lass andere wissen, was du machst. Dein Status ist in deinem Profil und an verlinkten Spots sichtbar.", + statusClear: "Löschen", + statusOrWriteOwn: "Oder schreib deinen eigenen", + statusCustomPlaceholder: "Was machst du gerade?", + statusLinkToSpot: "Mit einem Spot verlinken (optional)", + statusSpotSelected: "Spot ausgewählt", + statusSearchSpots: "Spots suchen…", + statusNoSpotsFound: "Keine Spots gefunden.", + statusSelectSpot: "Spot auswählen", + statusAutoClearAfter: "Automatisch löschen nach: {{time}}", + statusExpMin: "{{count}} Min.", + statusExpOneHour: "1 Stunde", + statusExpHours: "{{count}} Stunden", + statusExpOneDay: "1 Tag", + statusExpDays: "{{count}} Tage", + statusSlider15: "15 Min.", + statusSlider1h: "1 Std.", + statusSlider4h: "4 Std.", + statusSlider24h: "24 Std.", + statusSetting: "Status wird gesetzt…", + statusSet: "Status setzen", + statusSomethingWrong: "Etwas ist schiefgelaufen", + seoProfileTitle: "Profil - SkateSpots", + seoViewProfile: "Profil ansehen.", + bannerAlt: "Banner", + openInCordn: "In Cordn öffnen", + modHelp: "Ausblenden veröffentlicht org.skatespots.moderation / hidden; Bestätigen veröffentlicht … / verified; Rückgängig veröffentlicht … / cleared (zurück auf neutral). Alle drei sind öffentliche, umkehrbare Labels — nichts wird jemals von Relays gelöscht.", + zapNoActiveMint: "Keine aktive Cashu-Mint gefunden.", + altProfile: "Profil", + altCardPreview: "Kartenvorschau", + altCard: "Karte", + altCaptured: "Aufgenommen", + ariaPrevPhoto: "Vorheriges Foto", + ariaNextPhoto: "Nächstes Foto", + ariaCommentOptions: "Kommentaroptionen", + ariaMessageConversation: "Nachrichtenverlauf", + exportTitle: "SkateSpots — Deck-Kostenrechner", + exportQuoteTitle: "ANGEBOT", + exportPngTitle: "Deck-Kosten", + exportMarkdownTitle: "Deck-Kostenrechner", + exportSectionLabor: "Arbeit", + exportSectionEquipment: "Equipment", + exportSectionOperations: "Betriebsausgaben", + exportSectionMaterials: "Materialien", + exportSectionProcesses: "Prozesskosten", + exportSectionPackaging: "Verpackung", + exportSectionResult: "Ergebnis", + exportLabelOperations: "Betrieb", + exportLabelProcesses: "Prozesse", + exportKvHourlyRate: "Stundensatz", + exportKvLabourBurden: "Lohnnebenkosten", + exportKvLoadedRate: "Vollkosten-Stundensatz", + exportKvEquipmentPerBoard: "Equipment pro Board", + exportKvBoardsPerMonth: "Boards / Monat", + exportKvRentPerMonth: "Miete / Monat", + exportKvUtilitiesPerMonth: "Nebenkosten / Monat", + exportKvSubscriptionsPerMonth: "Abos / Monat", + exportKvPerBoard: "Pro Board", + exportKvMaterialsPerBoard: "Materialien pro Board", + exportKvProcessesPerBoard: "Prozesse pro Board", + exportKvPackagingPerBoard: "Verpackung pro Board", + exportKvMarkup: "Aufschlag", + exportMarkupValue: "{{markup}}× (≈ {{pct}} % Bruttomarge)", + exportKvWasteEffective: "Verlust (effektiv)", + exportKvCostNoPack: "Kosten / Board (ohne Verpackung)", + exportKvCostWithPack: "Kosten / Board (mit Verpackung)", + exportKvBatchSetupPerBoard: "Batch-Einrichtung / Board", + exportKvTax: "Steuer ({{pct}} %)", + exportKvTaxIncluded: "Steuer ({{pct}} %, enthalten)", + exportKvSellingNoPack: "Verkaufspreis (ohne Verpackung)", + exportKvSellingWithPack: "Verkaufspreis (mit Verpackung)", + exportShippingNote: "Versand an den Käufer nicht enthalten.", + exportGeneratedBy: "Erstellt mit SkateSpots · skate-spots.org", + exportGeneratedWith: "Erstellt mit SkateSpots · skate-spots.org", + exportDetailSetup: "+ {{hours}} Std. Einrichtung", + exportDetailBoards: "{{boards}} Boards", + exportDetailShip: "+ {{amount}} Versand", + exportDetailMinutes: "{{minutes}} Min.", + exportDetailPerBoards: "/ {{boards}} Boards", + exportDetailScrap: "{{pct}} % Ausschuss", + exportDetailMaterials: "{{materials}} Materialien", + exportQuoteRef: "Ref. {{ref}}", + exportQuoteLineItem: "Individuelles Skateboard-Deck", + exportQuoteLineItemQty: "Individuelles Skateboard-Deck × {{qty}}", + exportQuoteLineDesc: "Handgefertigt, fertiggestellt und verpackt. Menge 1.", + exportQuoteLineDescQty: "Handgefertigt, fertiggestellt und verpackt. {{price}} pro Stück.", + exportQuoteSubtotal: "Zwischensumme", + exportQuoteSubtotalQty: "Zwischensumme ({{qty}} Decks)", + exportQuoteTax: "Steuer / MwSt. ({{pct}} %)", + exportQuoteTotal: "Gesamt", + exportQuoteTotalQty: "Gesamt ({{qty}} Decks)", + exportQuoteIncludesTax: "Enthält {{pct}} % Steuer ({{amount}})", + exportQuoteDeposit: "Jetzt fällige Anzahlung ({{pct}} %)", + exportQuoteBalance: "Restbetrag bei Fertigstellung", + exportQuotePayment: "Zahlung: {{value}}", + exportQuoteLightning: "Lightning: {{value}}", + exportQuoteDetails: "Details: {{value}}", + exportQuoteTerms: "Bedingungen: {{value}}", + exportQuoteDelivery: "Lieferung: {{value}}", + exportQuoteValidUntil: "Versand nicht enthalten. Angebot gültig bis {{date}}.", + exportPngSellingWith: "VERKAUFSPREIS · MIT VERPACKUNG", + exportPngSellingNo: "VERKAUFSPREIS · OHNE VERPACKUNG", + exportPngCostWith: "KOSTEN / BOARD (MIT VERPACKUNG)", + exportPngDeposit: "Anzahlung {{pct}} %: {{amount}}", + exportXlsxSummary: "Zusammenfassung", + exportXlsxCurrency: "Währung", + exportXlsxDate: "Datum", + exportXlsxOperationsPerBoard: "Betrieb pro Board", + exportColCost: "Kosten", + exportColSetupH: "Einrichtung (Std.)", + exportColBoards: "Boards", + exportColPerBoard: "Pro Board", + exportColMaterial: "Material", + exportColOrderCost: "Bestellkosten", + exportColShipping: "Versand", + exportColOrderMin: "Bestellung (Min.)", + exportColUnloadMin: "Ausladen (Min.)", + exportColProcess: "Prozess", + exportColTimeMin: "Zeit (Min.)", + exportColTimeBoardMin: "Zeit/Board (Min.)", + exportColMaterialsBoard: "Materialien/Board", + exportCopyTitle: "Deck-Kosten — {{currency}}", + exportCopyCostWith: "Kosten / Board (mit Verpackung): {{amount}}", + exportCopySellingNo: "Verkaufspreis (ohne Verpackung): {{amount}}", + exportCopySellingWith: "Verkaufspreis (mit Verpackung): {{amount}}", + exportCopyBreakdown: "Equipment {{equipment}} · Betrieb {{operations}} · Materialien {{materials}} · Prozesse {{processes}} · Verpackung {{packaging}}", + exportMdHourlyRate: "Stundensatz: {{value}}", + exportMdLabourBurden: "Lohnnebenkosten: {{value}}", + exportMdLoadedRate: "Vollkosten-Stundensatz: {{value}}", + exportMdBoardsPerMonth: "Boards/Monat: {{value}}", + exportMdRent: "Miete: {{value}}", + exportMdUtilities: "Nebenkosten: {{value}}", + exportMdSubscriptions: "Abos: {{value}}", + exportMdPerBoard: "Pro Board: {{value}}", + exportMdMarkupWaste: "Aufschlag: {{markup}}× (≈ {{pct}} % Bruttomarge) · Verlust: {{waste}} %", + exportMdCostNoPack: "Kosten/Board (ohne Verpackung): {{value}}", + exportMdCostWithPack: "Kosten/Board (mit Verpackung): {{value}}", + exportMdBatchSetup: "Batch-Einrichtung/Board: {{value}}", + exportMdSellingNo: "Verkaufspreis (ohne Verpackung): {{value}}", + exportMdSellingWith: "Verkaufspreis (mit Verpackung): {{value}}", + exportMdDisclaimer: "Versand an den Käufer nicht enthalten. Erstellt mit SkateSpots." + } +}; export default deBatch8;