Englisch als zweite Sprache fuer die oeffentlichen Seiten
Hub und Bot-Produktseite lassen sich jetzt auf Englisch umstellen. Die Wahl haengt am Browser (Deutsch nur, wenn der Browser es will) und bleibt im localStorage stehen. - src/i18n.jsx: Context mit t(), tOr(), Datums- und Zahlenformat der Sprache. Keine Bibliothek, die Woerterbuecher werden mitgebaut — kein Nachlade-Blitzer. - Platzhalter im %s-Stil, dieselbe Schreibweise wie in den Bot-Texten. - Umschalter in der Navigation, zusaetzlich im Schubladen-Menue: .auth ist auf schmalen Schirmen ausgeblendet, sonst waere der Wechsel dort unerreichbar. - Datums- und Zahlenformat folgen mit (31.07.2026 / 31/07/2026, 45.231 / 45,231). - Die Funktionsliste kommt weiter deutsch vom Server; englische Modulnamen liegen unter feat.<id> im Woerterbuch. Fehlt einer, bleibt der Servertext stehen — ein neues Modul verschwindet nie von der Seite. Das Config-Panel und die Discord-Texte bleiben deutsch. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,258 @@
|
||||
// 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.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',
|
||||
|
||||
// ── 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.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.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 gibt’s 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.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.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.',
|
||||
};
|
||||
Reference in New Issue
Block a user