Files
d4rkbot/frontend/src/locales/de.js
T
D4rkst3randClaude Opus 5 5073e7bcf4
Deploy / check (push) Has been cancelled
Deploy / deploy (push) Has been cancelled
Jede Idee bekommt ihre eigene Seite mit der Unterhaltung aus dem Thread
Vorbild windrose.support: Klick auf eine Idee, und man sieht sie ganz — Stand,
Begruendung, wer sie eingereicht hat, und darunter, was dazu geschrieben wurde.

Der Unterschied bleibt, wo geschrieben wird. Die Beitraege sind aus dem
Discord-Thread gespiegelt, nicht hier getippt. Deshalb fuehrt der einzige
Knopf am Ende in den Thread und nicht in ein Formular. Ein zweiter Ort fuer
dieselbe Unterhaltung waere genau das, was ich beim Konzept als das Falsche
bezeichnet habe.

Bisher wurde nur mitgezaehlt. Jetzt landen die Beitraege in einer eigenen
Tabelle — mit Bearbeiten und Loeschen, sonst stuende auf der Webseite fuer
immer, was in Discord laengst zurueckgenommen wurde. Reine Bild-Posts ohne Text
bleiben draussen, die haetten hier nichts zu sagen.

Der Kommentar-Zaehler wird jetzt aus der Tabelle gezaehlt statt in einer Spalte
mitgefuehrt. Eine Wahrheit statt zwei, die auseinanderlaufen koennen — dieselbe
Ueberlegung wie beim Zuspruch.

Nebenbei geprueft, weil es haette schiefgehen koennen: /api/wishes/suche und
/api/wishes/:id liegen auf derselben Ebene. Der Router bevorzugt die feste
Route vor der mit Platzhalter — nachgestellt mit find-my-way, nicht aus dem
Gedaechtnis behauptet.

Geprueft: im Browser die Seite mit drei Beitraegen und die ohne (kein Thread,
keine Begruendung, Hinweis statt Liste), der Weg von der Roadmap dorthin ohne
Neuladen, Migration erneut durchgespielt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-02 00:05:27 +02:00

308 lines
18 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Deutsche Texte der öffentlichen Seiten. Diese Datei ist die Referenz:
// Was hier steht, muss es auch in en.js geben — fehlt ein Schlüssel dort,
// fällt die Anzeige auf Deutsch zurück statt auf den nackten Schlüssel.
export default {
// ── Navigation & Rahmen ───────────────────────────
'nav.devlog': 'Devlog',
'nav.roadmap': 'Roadmap',
'nav.server': 'Server',
'nav.community': 'Community',
'nav.gallery': 'Galerie',
'nav.level': 'Level',
'nav.events': 'Events',
'nav.changelog': 'Changelog',
'nav.config': 'Config',
'nav.profile': 'Profil',
'nav.commits': 'Commits',
'nav.login': 'Login',
'nav.loginDiscord': 'Login mit Discord',
'nav.logout': 'Logout',
'nav.features': 'Funktionen',
'nav.commands': 'Befehle',
'nav.dashboard': 'Dashboard',
'nav.signIn': 'Anmelden',
'nav.signOut': 'Abmelden',
'nav.menu': 'Menü',
'footer.source': 'Quellcode',
'footer.status': 'Status',
'footer.imprint': 'Impressum',
'footer.privacy': 'Datenschutz',
'gate.text': 'Der Login ist Mitgliedern des Discord-Servers vorbehalten — tritt erst dem Server bei und logg dich dann nochmal ein.',
'gate.join': 'Zum Discord',
'gate.hide': 'Ausblenden',
// ── Allgemein ─────────────────────────────────────
'common.loading': 'Lade …',
'common.newer': 'Neuere',
'common.older': 'Ältere',
'common.readDevlogs': 'Devlogs lesen',
'common.toRoadmap': 'Zur Roadmap',
'common.today': 'heute',
'common.yesterday': 'gestern',
'common.daysAgo': 'vor %s Tagen',
'common.monthAgo': 'vor 1 Monat',
'common.monthsAgo': 'vor %s Monaten',
// ── Startseite (Hub) ──────────────────────────────
'home.tag': '// Community-Hub',
'home.welcome': 'Willkommen',
'home.at': 'bei',
'home.subtitle': 'Devlogs, Roadmap, Server-Status und alles aus der Community — an einem Ort, direkt aus dem Discord.',
'home.discord': 'Zum Discord',
'home.readDevlogs': 'Devlogs lesen',
'home.members': 'Member im Discord',
'home.serversOnline': 'Server online',
'home.playersNow': 'Spieler gerade drauf',
'home.services': '// Dienste',
'home.latestDevlog': '// Neuestes Devlog',
'home.more': 'Weiterlesen',
'home.tile.devlog': 'Entwicklungs-Updates, frisch aus dem Editor',
'home.tile.roadmap': 'Meilensteine + Community-Wünsche zum Abstimmen',
'home.tile.server': 'Live-Status aller Game-Server mit Verlauf',
'home.tile.gallery': 'Screenshots aus der Community',
'home.tile.level': 'XP-Bestenliste — wer redet am meisten mit?',
'home.tile.events': 'Playtests, Streams und was sonst ansteht',
'nav.status': 'Status',
'status.tag': '// Betriebslage',
'status.subtitle': 'Erreichbarkeit der Dienste und Game-Server — alle 60 Sekunden aktualisiert.',
'status.error': 'Der Status konnte nicht geladen werden.',
'status.allOk': 'Alle Systeme betriebsbereit',
'status.partial': 'Teilweise gestört',
'status.majorOutage': 'Größere Störung',
'status.waiting': 'Wird geprüft',
'status.nothing': 'Nichts eingerichtet',
'status.services': '// Dienste',
'status.gameservers': '// Game-Server',
'status.incidents': '// Störungen der letzten 90 Tage',
'status.noIncidents': 'Keine Störungen aufgezeichnet.',
'status.ok': 'erreichbar',
'status.down': 'nicht erreichbar',
'status.ongoing': 'läuft noch',
'status.minutes': '%s min',
'status.days90': 'vor 90 Tagen',
// ── Devlogs ───────────────────────────────────────
'devlogs.tag': '// Archiv',
'devlogs.subtitle': 'Entwicklungs-Updates, frisch aus dem Editor — automatisch archiviert.',
'devlogs.all': 'Alle',
'devlogs.search': 'Devlogs durchsuchen …',
'devlogs.hits': '%s Treffer',
'devlogs.error': 'Devlogs konnten nicht geladen werden.',
'devlogs.noHits': 'Keine Treffer für „%s".',
'devlogs.noneForProject': 'Noch keine Devlogs für %s.',
'devlogs.none': 'Noch keine Devlogs archiviert.',
'devlogs.permalink': 'Direktlink zu diesem Devlog',
'devlogs.delete': 'Aus dem Archiv löschen',
'devlogs.confirmDelete': 'Dieses Devlog aus dem Archiv löschen?',
'devlogs.deleteFailed': 'Löschen fehlgeschlagen.',
'devlogs.screenshot': 'Devlog-Screenshot',
// ── Devlog-Permalink ──────────────────────────────
'devlog.tag': '// Devlog',
'devlog.project': 'Projekt: %s',
'devlog.notFound': 'Devlog nicht gefunden —',
'devlog.backToArchive': 'zurück zum Archiv',
'devlog.allDevlogs': 'Alle Devlogs',
'devlog.copyLink': 'Link kopieren',
'devlog.linkCopied': 'Link kopiert',
// ── Roadmap ───────────────────────────────────────
'roadmap.tag': '// Wohin die Reise geht',
'roadmap.subtitle': 'Meilensteine direkt aus der Entwicklung — live aus dem Issue-Tracker.',
'roadmap.error': 'Roadmap konnte nicht geladen werden.',
'roadmap.noMilestones': 'Noch keine Meilensteine angelegt.',
'roadmap.active': '// In Arbeit',
'roadmap.planned': '// Geplant',
'roadmap.done': '// Fertig',
'roadmap.nothingActive': 'Gerade nichts in Arbeit.',
'roadmap.due': 'Ziel: %s',
'roadmap.tasks': '%s / %s Aufgaben',
'roadmap.activity': '// Aktivität — %s Commits in 12 Monaten',
'roadmap.commitsOn': '%s: %s Commits',
'roadmap.commitOn': '%s: 1 Commit',
'roadmap.sort': 'Sortierung',
'roadmap.sortTop': 'Top',
'roadmap.sortTrend': 'Bewegung',
'roadmap.sortNew': 'Neu',
'roadmap.status': 'Stand',
'roadmap.area': 'Bereich',
'roadmap.areaPick': '— Bereich —',
'wunsch.tag': '// Idee',
'wunsch.back': 'Zurück zur Roadmap',
'wunsch.notFound': 'Diese Idee gibt es nicht (mehr).',
'wunsch.by': 'von %s',
'wunsch.teamSays': 'Vom Team',
'wunsch.comments': '// %s Beiträge',
'wunsch.oneComment': '// 1 Beitrag',
'wunsch.noComments': 'Noch nichts dazu geschrieben — mach den Anfang im Thread.',
'wunsch.joinThread': 'Im Discord mitreden',
'wish.alle': 'Alle',
'wish.offen': 'Wird geprüft',
'wish.geplant': 'Geplant',
'wish.inArbeit': 'In Arbeit',
'wish.umgesetzt': 'Umgesetzt',
'wish.abgelehnt': 'Nicht geplant',
'roadmap.noneInFilter': 'Hier steht gerade nichts.',
'roadmap.alreadyThere': 'Gibt es schon — stimm lieber dafür:',
'roadmap.wishes': '// Community-Wünsche',
'roadmap.unvote': 'Vote zurücknehmen',
'roadmap.vote': 'Dafür stimmen',
'roadmap.ideaPlaceholder': 'Deine Idee für den Server …',
'roadmap.submit': 'Einreichen',
'roadmap.hint': 'Eigene Idee? Im Discord %s benutzen — oder hier einloggen und direkt abstimmen.',
'roadmap.voteMembersOnly': '✗ Voten dürfen nur Discord-Member.',
'roadmap.tooShort': '✗ Etwas mehr Text bitte.',
'roadmap.submitted': '✓ Wunsch eingereicht — er steht jetzt auch im Discord zur Abstimmung!',
'roadmap.submitMembersOnly': '✗ Einreichen dürfen nur Discord-Member.',
'roadmap.submitFailed': '✗ Konnte den Wunsch nicht einreichen.',
// ── Server ────────────────────────────────────────
'server.tag': '// Live-Status',
'server.subtitle': 'Alle Game-Server auf einen Blick — aktualisiert alle 2 Minuten.',
'server.error': 'Server-Status konnte nicht geladen werden.',
'server.none': 'Noch keine Server eingetragen.',
'server.online': 'Online',
'server.offline': 'Offline',
'server.waiting': 'Warte auf Check',
'server.players24h': 'Spielerzahl · letzte 24h',
'server.peak': 'Peak',
'server.uptime': 'Uptime',
'server.measuredSince': 'misst seit %s',
'server.days7': 'vor 7 Tagen',
'server.now': 'jetzt',
'server.noData': 'keine Messung',
'server.connect': 'Connect',
'server.copyAddress': 'Adresse kopieren',
'server.copied': 'Kopiert!',
'server.checkedAt': 'Zuletzt geprüft: %s Uhr',
'server.serversOnline': 'Server online',
'server.playersNow': 'Spieler gerade drauf',
// ── Galerie ───────────────────────────────────────
'gallery.tag': '// Community',
'gallery.subtitle': 'Screenshots aus der Community — direkt aus dem Discord.',
'gallery.error': 'Galerie konnte nicht geladen werden.',
'gallery.emptyTitle': 'Noch keine Screenshots',
'gallery.emptyText': 'Alles, was im Screenshot-Kanal landet, erscheint automatisch hier — mitsamt Name und Datum.',
'gallery.shotBy': 'Screenshot von %s',
// ── Level ─────────────────────────────────────────
'level.tag': '// Bestenliste',
'level.subtitle': 'XP gibts fürs Mitreden im Discord — hier stehen die Aktivsten. %s zeigt deinen Platz.',
'level.error': 'Bestenliste konnte nicht geladen werden.',
'level.emptyTitle': 'Noch keine XP vergeben',
'level.emptyText': 'XP gibt es fürs Mitreden im Discord. Sobald geschrieben wird, füllt sich die Bestenliste von selbst.',
'level.lv': 'Lv. %s',
'level.activity': '// Server-Aktivität — %s Nachrichten in 30 Tagen · %s Member',
'level.barTitle': '%s: %s Nachrichten · +%s/%s Member',
// ── Events ────────────────────────────────────────
'events.tag': '// Termine',
'events.subtitle': 'Playtests, Streams & Community-Abende — direkt aus dem Discord.',
'events.error': 'Events konnten nicht geladen werden.',
'events.emptyTitle': 'Noch keine Events geplant',
'events.emptyText': 'Playtests, Streams und Community-Runden kündigen wir hier an — und im Discord bekommst du eine Erinnerung.',
'events.tbd': 'Termin folgt',
'events.interested': '%s interessiert',
'events.viewInDiscord': 'Im Discord ansehen',
// ── Changelog ─────────────────────────────────────
'changelog.tag': '// Releases',
'changelog.subtitle': 'Alle Versionen und Release-Notes.',
'changelog.error': 'Changelog konnte nicht geladen werden.',
'changelog.emptyTitle': 'Noch keine Releases',
'changelog.emptyText': 'Sobald eine Version veröffentlicht wird, steht sie hier mit allen Änderungen. Bis dahin steht der Fortschritt im Devlog.',
'changelog.prerelease': 'Pre-Release',
'changelog.noNotes': '*Keine Release-Notes.*',
'changelog.viewInGitea': 'Release in Gitea ansehen',
// ── Bot-Produktseite: Start ───────────────────────
'bot.tag': '// Selbst gebaut, keine Paywall',
'bot.title1': 'Ein Discord-Bot,',
'bot.title2': 'der alles macht',
'bot.subtitle': 'Devlogs, Level, Moderation, Server-Monitoring, Verlosungen, Tickets — was sonst drei Bots mit Abo-Modell erledigen, läuft hier in einem, mit eigenem Webinterface.',
'bot.allFeatures': 'Alle Funktionen',
'bot.viewCommands': 'Befehle ansehen',
'bot.statFeatures': 'Funktionen, einzeln schaltbar',
'bot.statCommands': 'Slash-Befehle',
'bot.statGames': 'Spiele im Monitor',
'bot.statCost': 'Kosten, keine Premium-Stufen',
'bot.whatItDoes': '// Was er kann',
'bot.forDevs': '// Für Entwickler',
'bot.runsFor': 'Der Bot läuft für die D4RKST3R-Community',
'bot.runsForWith': 'Der Bot läuft für die D4RKST3R-Community mit %s Mitgliedern',
'bot.toHub': 'zum Community-Hub',
'bot.hl.devlogs': 'Devlogs & Feeds',
'bot.hl.devlogs.text': 'Entwicklungs-Berichte landen als gebrandetes Embed im Discord und werden gleichzeitig durchsuchbar archiviert. Commits und Releases aus Gitea genauso.',
'bot.hl.monitor': 'Server-Monitor',
'bot.hl.monitor.text': 'Über 300 Spiele per gamedig, dazu FiveM und einfache Erreichbarkeits-Checks. Ein Live-Embed pro Server, Alarm bei Ausfall, Spielerzahl in der Bot-Präsenz.',
'bot.hl.level': 'Level & Aktivität',
'bot.hl.level.text': 'XP fürs Mitreden mit Rollen-Belohnungen, öffentliche Bestenliste und Aktivitäts-Statistik des Servers.',
'bot.hl.roles': 'Rollen-Menüs',
'bot.hl.roles.text': 'Selbstbedienung per Knopfdruck — im Discord und im Browser. Farben pro Knopf, wahlweise exklusiv.',
'bot.hl.support': 'Support & Kontakt',
'bot.hl.support.text': 'Tickets als private Threads mit Gesprächsprotokoll, dazu Modmail: eine Direktnachricht an den Bot landet beim Team.',
'bot.hl.mod': 'Moderation',
'bot.hl.mod.text': 'Verwarnungen mit Verlauf, Auszeiten, Aufräumen — alles im Mod-Log, dazu Protokoll für Beitritte, Namens- und Rollenwechsel.',
'bot.hl.giveaway': 'Verlosungen',
'bot.hl.giveaway.text': 'Teilnahme per Knopf, automatische Ziehung, Neuauslosung wenn sich niemand meldet.',
'bot.hl.birthday': 'Geburtstage',
'bot.hl.birthday.text': 'Wer mag, trägt seinen Tag ein — der Bot gratuliert morgens und vergibt eine Rolle für den Tag.',
'bot.hl.welcome': 'Willkommens-Karten',
'bot.hl.welcome.text': 'Neue Mitglieder bekommen ein gerendertes Bild mit Avatar und Mitglieds-Nummer.',
'bot.dev.api': 'API & Single Sign-On',
'bot.dev.api.text': 'Eigene Skripte posten über die API v1 mit Bearer-Schlüsseln und Bereichs-Rechten. Andere Dienste nutzen den Discord-Login des Bots mit und bekommen die Rollen gleich mitgeliefert.',
'bot.dev.host': 'Läuft überall',
'bot.dev.host.text': 'Node und SQLite in einem Container, ein Volume für die Daten. Nächtliche Sicherungen inklusive — von der Datenbank und allen Repositories.',
// ── Bot-Produktseite: Funktionen ──────────────────
'features.tag': '// Alles drin, nichts hinter einer Paywall',
'features.title': 'Funktionen',
'features.subtitleN': '%s Funktionen — jede einzeln ein- und ausschaltbar, jede im Browser einstellbar.',
'features.subtitle': 'Jede Funktion einzeln ein- und ausschaltbar, jede im Browser einstellbar.',
'features.extras': '// Drumherum',
'features.outro': 'Gebaut, weil drei Bots mit je eigenem Abo für eine Community weder übersichtlich noch günstig sind. Der Quelltext liegt offen, der Betrieb kostet einen Container.',
'features.overview': 'Zur Übersicht',
'features.x.brand': 'Webinterface im eigenen Look',
'features.x.brand.text': 'Jede Funktion wird im Browser eingestellt — keine Konfigurationsdatei, kein Neustart. Farben, Bot-Avatar und Banner gehören dazu, und andere Dienste können denselben Look mitbenutzen.',
'features.x.texts': 'Texte selbst schreiben',
'features.x.texts.text': 'Begrüßung, Level-Ansage, Ticket-Texte — alles, was der Bot nach außen schreibt, lässt sich im Panel ändern, mit Platzhaltern für Name, Zahl und Link.',
'features.x.api': 'API & Single Sign-On',
'features.x.api.text': 'Eigene Skripte posten über die API v1 mit Bearer-Schlüsseln und Bereichs-Rechten. Andere Dienste nutzen den Discord-Login mit und bekommen die Rollen gleich mitgeliefert.',
'features.x.pages': 'Eigene Seiten',
'features.x.pages.text': 'Regeln, Über uns, FAQ — in Markdown geschrieben, mit einem Klick veröffentlicht und automatisch im Menü.',
'features.x.team': 'Rechte fürs Team',
'features.x.team.text': 'Team-Mitglieder bekommen gezielten Zugriff auf einzelne Bereiche. Wer was geändert hat, steht im Protokoll.',
'features.x.host': 'Läuft überall',
'features.x.host.text': 'Node und SQLite in einem Container, ein Volume für die Daten. Nächtliche Sicherungen inklusive — von der Datenbank und allen Repositories.',
// ── Bot-Produktseite: Befehle ─────────────────────
'commands.tag': '// Referenz',
'commands.title': 'Befehle',
'commands.subtitle': 'Alle Slash-Befehle im Überblick. Vieles läuft zusätzlich über Knöpfe direkt in den Nachrichten.',
'commands.note': 'Moderations- und Einrichtungs-Befehle sind Mitgliedern mit den passenden Discord-Rechten vorbehalten.',
'commands.g.everyone': 'Für alle',
'commands.g.mod': 'Moderation',
'commands.g.setup': 'Einrichtung',
'commands.rank': 'Zeigt deinen Rang, deine XP und den Fortschritt zum nächsten Level.',
'commands.wunsch': 'Reicht einen Feature-Wunsch ein — landet im Voting-Kanal und auf der Roadmap.',
'commands.bug': 'Meldet einen Fehler als Issue im Repository. Wird er geschlossen, bekommst du eine Nachricht.',
'commands.bdaySet': 'Trägt deinen Geburtstag ein. Der Bot gratuliert morgens und vergibt eine Rolle für den Tag.',
'commands.bdayDel': 'Trägt ihn wieder aus.',
'commands.remind': 'Erinnert dich per Direktnachricht — etwa „2h" oder „30m".',
'commands.tag': 'Ruft einen gespeicherten Textbaustein ab, mit Vorschlägen beim Tippen.',
'commands.ping': 'Lebenszeichen des Bots.',
'commands.umfrage': 'Startet eine Abstimmung mit bis zu vier Antworten — Discord zählt selbst aus.',
'commands.warn': 'Verwarnt jemanden, schickt eine Nachricht und schreibt es ins Protokoll.',
'commands.warns': 'Zeigt die Verwarnungs-Historie.',
'commands.timeout': 'Setzt eine Auszeit.',
'commands.purge': 'Löscht mehrere Nachrichten auf einmal.',
'commands.raid': 'Zeigt die Raid-Sperre an, setzt sie von Hand oder hebt sie sofort auf.',
'commands.giveaway': 'Startet eine Verlosung mit Teilnahme-Knopf und automatischer Ziehung.',
'commands.ticketSetup': 'Postet den Knopf, über den Support-Tickets als private Threads entstehen.',
'commands.playtesterSetup': 'Postet den Bewerbungs-Knopf für das Playtester-Programm.',
'commands.devlogBackfill': 'Holt ältere Devlog-Nachrichten nachträglich ins Archiv.',
'commands.galerieBackfill': 'Dasselbe für den Screenshot-Kanal.',
};