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,339 @@
|
||||
// English texts for the public pages. Mirrors de.js key for key — a missing
|
||||
// key here falls back to the German string, never to a bare key.
|
||||
export default {
|
||||
// ── Navigation & chrome ───────────────────────────
|
||||
'nav.devlog': 'Devlog',
|
||||
'nav.roadmap': 'Roadmap',
|
||||
'nav.server': 'Servers',
|
||||
'nav.community': 'Community',
|
||||
'nav.gallery': 'Gallery',
|
||||
'nav.level': 'Levels',
|
||||
'nav.events': 'Events',
|
||||
'nav.changelog': 'Changelog',
|
||||
'nav.config': 'Config',
|
||||
'nav.profile': 'Profile',
|
||||
'nav.commits': 'Commits',
|
||||
'nav.login': 'Log in',
|
||||
'nav.loginDiscord': 'Log in with Discord',
|
||||
'nav.logout': 'Log out',
|
||||
'nav.features': 'Features',
|
||||
'nav.commands': 'Commands',
|
||||
'nav.dashboard': 'Dashboard',
|
||||
'nav.signIn': 'Sign in',
|
||||
'nav.signOut': 'Sign out',
|
||||
'nav.menu': 'Menu',
|
||||
'footer.source': 'Source',
|
||||
'footer.imprint': 'Imprint',
|
||||
'footer.privacy': 'Privacy',
|
||||
'gate.text': 'Logging in is for members of the Discord server — join the server first, then log in again.',
|
||||
'gate.join': 'Join Discord',
|
||||
'gate.hide': 'Hide',
|
||||
|
||||
// ── Shared ────────────────────────────────────────
|
||||
'common.loading': 'Loading …',
|
||||
'common.newer': 'Newer',
|
||||
'common.older': 'Older',
|
||||
'common.readDevlogs': 'Read devlogs',
|
||||
'common.toRoadmap': 'To the roadmap',
|
||||
'common.today': 'today',
|
||||
'common.yesterday': 'yesterday',
|
||||
'common.daysAgo': '%s days ago',
|
||||
'common.monthAgo': '1 month ago',
|
||||
'common.monthsAgo': '%s months ago',
|
||||
|
||||
// ── Home (hub) ────────────────────────────────────
|
||||
'home.tag': '// Community hub',
|
||||
'home.welcome': 'Welcome',
|
||||
'home.at': 'to',
|
||||
'home.subtitle': 'Devlogs, roadmap, server status and everything from the community — in one place, straight out of Discord.',
|
||||
'home.discord': 'Join Discord',
|
||||
'home.readDevlogs': 'Read devlogs',
|
||||
'home.members': 'members on Discord',
|
||||
'home.serversOnline': 'servers online',
|
||||
'home.playersNow': 'players right now',
|
||||
'home.services': '// Services',
|
||||
'home.latestDevlog': '// Latest devlog',
|
||||
'home.more': 'Read more',
|
||||
'home.tile.devlog': 'Development updates, fresh from the editor',
|
||||
'home.tile.roadmap': 'Milestones plus community wishes to vote on',
|
||||
'home.tile.server': 'Live status of every game server, with history',
|
||||
'home.tile.gallery': 'Screenshots from the community',
|
||||
'home.tile.level': 'XP leaderboard — who talks the most?',
|
||||
'home.tile.events': 'Playtests, streams and whatever else is coming up',
|
||||
|
||||
// ── Devlogs ───────────────────────────────────────
|
||||
'devlogs.tag': '// Archive',
|
||||
'devlogs.subtitle': 'Development updates, fresh from the editor — archived automatically.',
|
||||
'devlogs.all': 'All',
|
||||
'devlogs.search': 'Search devlogs …',
|
||||
'devlogs.hits': '%s results',
|
||||
'devlogs.error': 'Devlogs could not be loaded.',
|
||||
'devlogs.noHits': 'No results for “%s”.',
|
||||
'devlogs.noneForProject': 'No devlogs for %s yet.',
|
||||
'devlogs.none': 'No devlogs archived yet.',
|
||||
'devlogs.permalink': 'Direct link to this devlog',
|
||||
'devlogs.delete': 'Remove from the archive',
|
||||
'devlogs.confirmDelete': 'Remove this devlog from the archive?',
|
||||
'devlogs.deleteFailed': 'Deleting failed.',
|
||||
'devlogs.screenshot': 'Devlog screenshot',
|
||||
|
||||
// ── Devlog permalink ──────────────────────────────
|
||||
'devlog.tag': '// Devlog',
|
||||
'devlog.project': 'Project: %s',
|
||||
'devlog.notFound': 'Devlog not found —',
|
||||
'devlog.backToArchive': 'back to the archive',
|
||||
'devlog.allDevlogs': 'All devlogs',
|
||||
'devlog.copyLink': 'Copy link',
|
||||
'devlog.linkCopied': 'Link copied',
|
||||
|
||||
// ── Roadmap ───────────────────────────────────────
|
||||
'roadmap.tag': '// Where this is heading',
|
||||
'roadmap.subtitle': 'Milestones straight from development — live from the issue tracker.',
|
||||
'roadmap.error': 'The roadmap could not be loaded.',
|
||||
'roadmap.noMilestones': 'No milestones yet.',
|
||||
'roadmap.active': '// In progress',
|
||||
'roadmap.planned': '// Planned',
|
||||
'roadmap.done': '// Done',
|
||||
'roadmap.nothingActive': 'Nothing in progress right now.',
|
||||
'roadmap.due': 'Due: %s',
|
||||
'roadmap.tasks': '%s / %s tasks',
|
||||
'roadmap.activity': '// Activity — %s commits in 12 months',
|
||||
'roadmap.commitsOn': '%s: %s commits',
|
||||
'roadmap.commitOn': '%s: 1 commit',
|
||||
'roadmap.wishes': '// Community wishes',
|
||||
'roadmap.unvote': 'Take back your vote',
|
||||
'roadmap.vote': 'Vote for this',
|
||||
'roadmap.ideaPlaceholder': 'Your idea for the server …',
|
||||
'roadmap.submit': 'Submit',
|
||||
'roadmap.hint': 'Got an idea? Use %s on Discord — or log in here and vote right away.',
|
||||
'roadmap.voteMembersOnly': '✗ Only Discord members can vote.',
|
||||
'roadmap.tooShort': '✗ A little more text, please.',
|
||||
'roadmap.submitted': '✓ Wish submitted — it is up for a vote on Discord too!',
|
||||
'roadmap.submitMembersOnly': '✗ Only Discord members can submit.',
|
||||
'roadmap.submitFailed': '✗ Could not submit the wish.',
|
||||
|
||||
// ── Servers ───────────────────────────────────────
|
||||
'server.tag': '// Live status',
|
||||
'server.subtitle': 'Every game server at a glance — refreshed every 2 minutes.',
|
||||
'server.error': 'The server status could not be loaded.',
|
||||
'server.none': 'No servers added yet.',
|
||||
'server.online': 'Online',
|
||||
'server.offline': 'Offline',
|
||||
'server.waiting': 'Waiting for check',
|
||||
'server.players24h': 'Player count · last 24h',
|
||||
'server.peak': 'Peak',
|
||||
'server.uptime': 'Uptime',
|
||||
'server.connect': 'Connect',
|
||||
'server.copyAddress': 'Copy address',
|
||||
'server.copied': 'Copied!',
|
||||
'server.checkedAt': 'Last checked: %s',
|
||||
'server.serversOnline': 'servers online',
|
||||
'server.playersNow': 'players right now',
|
||||
|
||||
// ── Gallery ───────────────────────────────────────
|
||||
'gallery.tag': '// Community',
|
||||
'gallery.subtitle': 'Screenshots from the community — straight out of Discord.',
|
||||
'gallery.error': 'The gallery could not be loaded.',
|
||||
'gallery.emptyTitle': 'No screenshots yet',
|
||||
'gallery.emptyText': 'Anything posted in the screenshot channel shows up here automatically — name and date included.',
|
||||
'gallery.shotBy': 'Screenshot by %s',
|
||||
|
||||
// ── Levels ────────────────────────────────────────
|
||||
'level.tag': '// Leaderboard',
|
||||
'level.subtitle': 'XP comes from joining the conversation on Discord — here are the most active. %s shows your rank.',
|
||||
'level.error': 'The leaderboard could not be loaded.',
|
||||
'level.emptyTitle': 'No XP awarded yet',
|
||||
'level.emptyText': 'XP comes from joining the conversation on Discord. As soon as people start writing, the leaderboard fills itself.',
|
||||
'level.lv': 'Lv. %s',
|
||||
'level.activity': '// Server activity — %s messages in 30 days · %s members',
|
||||
'level.barTitle': '%s: %s messages · +%s/−%s members',
|
||||
|
||||
// ── Events ────────────────────────────────────────
|
||||
'events.tag': '// Dates',
|
||||
'events.subtitle': 'Playtests, streams & community nights — straight out of Discord.',
|
||||
'events.error': 'Events could not be loaded.',
|
||||
'events.emptyTitle': 'No events planned yet',
|
||||
'events.emptyText': 'We announce playtests, streams and community rounds here — and Discord will remind you.',
|
||||
'events.tbd': 'Date to be announced',
|
||||
'events.interested': '%s interested',
|
||||
'events.viewInDiscord': 'View on Discord',
|
||||
|
||||
// ── Changelog ─────────────────────────────────────
|
||||
'changelog.tag': '// Releases',
|
||||
'changelog.subtitle': 'Every version and its release notes.',
|
||||
'changelog.error': 'The changelog could not be loaded.',
|
||||
'changelog.emptyTitle': 'No releases yet',
|
||||
'changelog.emptyText': 'As soon as a version ships, it shows up here with all its changes. Until then, the devlog has the progress.',
|
||||
'changelog.prerelease': 'Pre-release',
|
||||
'changelog.noNotes': '*No release notes.*',
|
||||
'changelog.viewInGitea': 'View release on Gitea',
|
||||
|
||||
// ── Bot product page: landing ─────────────────────
|
||||
'bot.tag': '// Self-built, no paywall',
|
||||
'bot.title1': 'A Discord bot',
|
||||
'bot.title2': 'that does it all',
|
||||
'bot.subtitle': 'Devlogs, levels, moderation, server monitoring, giveaways, tickets — what usually takes three subscription bots runs here in one, with its own web interface.',
|
||||
'bot.allFeatures': 'All features',
|
||||
'bot.viewCommands': 'View commands',
|
||||
'bot.statFeatures': 'features, each one switchable',
|
||||
'bot.statCommands': 'slash commands',
|
||||
'bot.statGames': 'games in the monitor',
|
||||
'bot.statCost': 'cost, no premium tiers',
|
||||
'bot.whatItDoes': '// What it does',
|
||||
'bot.forDevs': '// For developers',
|
||||
'bot.runsFor': 'The bot runs for the D4RKST3R community',
|
||||
'bot.runsForWith': 'The bot runs for the D4RKST3R community with %s members',
|
||||
'bot.toHub': 'to the community hub',
|
||||
|
||||
'bot.hl.devlogs': 'Devlogs & feeds',
|
||||
'bot.hl.devlogs.text': 'Development reports land in Discord as a branded embed and get archived searchably at the same time. Commits and releases from Gitea, too.',
|
||||
'bot.hl.monitor': 'Server monitor',
|
||||
'bot.hl.monitor.text': 'Over 300 games via gamedig, plus FiveM and plain reachability checks. One live embed per server, an alert when one goes down, player count in the bot presence.',
|
||||
'bot.hl.level': 'Levels & activity',
|
||||
'bot.hl.level.text': 'XP for joining the conversation with role rewards, a public leaderboard and activity stats for the server.',
|
||||
'bot.hl.roles': 'Role menus',
|
||||
'bot.hl.roles.text': 'Self-service at the press of a button — on Discord and in the browser. A colour per button, exclusive if you want.',
|
||||
'bot.hl.support': 'Support & contact',
|
||||
'bot.hl.support.text': 'Tickets as private threads with a transcript, plus modmail: a DM to the bot reaches the team.',
|
||||
'bot.hl.mod': 'Moderation',
|
||||
'bot.hl.mod.text': 'Warnings with history, timeouts, cleanup — all in the mod log, plus a record of joins, name changes and role changes.',
|
||||
'bot.hl.giveaway': 'Giveaways',
|
||||
'bot.hl.giveaway.text': 'Enter with a button, automatic draw, reroll when nobody answers.',
|
||||
'bot.hl.birthday': 'Birthdays',
|
||||
'bot.hl.birthday.text': 'Add your day if you like — the bot congratulates you in the morning and hands out a role for the day.',
|
||||
'bot.hl.welcome': 'Welcome cards',
|
||||
'bot.hl.welcome.text': 'New members get a rendered image with their avatar and member number.',
|
||||
'bot.dev.api': 'API & single sign-on',
|
||||
'bot.dev.api.text': 'Your own scripts post through API v1 with bearer keys and scoped permissions. Other services reuse the bot’s Discord login and get the roles delivered with it.',
|
||||
'bot.dev.host': 'Runs anywhere',
|
||||
'bot.dev.host.text': 'Node and SQLite in one container, one volume for the data. Nightly backups included — of the database and every repository.',
|
||||
|
||||
// ── Bot product page: features ────────────────────
|
||||
'features.tag': '// Everything included, nothing behind a paywall',
|
||||
'features.title': 'Features',
|
||||
'features.subtitleN': '%s features — each one switchable, each one configurable in the browser.',
|
||||
'features.subtitle': 'Every feature switchable on its own, every one configurable in the browser.',
|
||||
'features.extras': '// Around it',
|
||||
'features.outro': 'Built because three bots with three subscriptions for one community is neither tidy nor cheap. The source is open, running it costs one container.',
|
||||
'features.overview': 'Back to the overview',
|
||||
'features.x.brand': 'Web interface in your own look',
|
||||
'features.x.brand.text': 'Every feature is set in the browser — no config file, no restart. Colours, bot avatar and banner included, and other services can share the same look.',
|
||||
'features.x.texts': 'Write the texts yourself',
|
||||
'features.x.texts.text': 'Welcome message, level announcement, ticket texts — everything the bot says out loud can be changed in the panel, with placeholders for name, number and link.',
|
||||
'features.x.api': 'API & single sign-on',
|
||||
'features.x.api.text': 'Your own scripts post through API v1 with bearer keys and scoped permissions. Other services reuse the Discord login and get the roles delivered with it.',
|
||||
'features.x.pages': 'Your own pages',
|
||||
'features.x.pages.text': 'Rules, about us, FAQ — written in Markdown, published with one click and added to the menu automatically.',
|
||||
'features.x.team': 'Permissions for the team',
|
||||
'features.x.team.text': 'Team members get targeted access to individual areas. Who changed what is in the log.',
|
||||
'features.x.host': 'Runs anywhere',
|
||||
'features.x.host.text': 'Node and SQLite in one container, one volume for the data. Nightly backups included — of the database and every repository.',
|
||||
|
||||
// ── Module names for the features page ────────────
|
||||
// Keyed by module id from src/modules.js. Anything missing here keeps the
|
||||
// German text the server sends, so a new module never vanishes.
|
||||
'fgroup.inhalte': 'Content & feeds',
|
||||
'fgroup.community': 'Community',
|
||||
'fgroup.moderation': 'Moderation & support',
|
||||
'fgroup.server': 'Server & tech',
|
||||
|
||||
'feat.devlogs': 'Devlogs',
|
||||
'feat.devlogs.desc': 'Post development reports as a branded embed and archive them searchably.',
|
||||
'feat.commit_feed': 'Commit feed',
|
||||
'feat.commit_feed.desc': 'Pushes from Gitea land in the channel as an embed. Archiving happens regardless.',
|
||||
'feat.releases': 'Release announcements',
|
||||
'feat.releases.desc': 'New releases get announced and land in the public changelog.',
|
||||
'feat.weekly_recap': 'Weekly recap',
|
||||
'feat.weekly_recap.desc': 'A summary of the week, Sundays at 8 pm.',
|
||||
'feat.devlog_threads': 'Devlog threads',
|
||||
'feat.devlog_threads.desc': 'A discussion thread opens under every devlog.',
|
||||
'feat.social': 'Twitch & YouTube',
|
||||
'feat.social.desc': 'Announces live streams and new videos.',
|
||||
|
||||
'feat.levels': 'Level system',
|
||||
'feat.levels.desc': 'XP for joining the conversation, role rewards and a public leaderboard.',
|
||||
'feat.starboard': 'Starboard',
|
||||
'feat.starboard.desc': 'Messages with enough stars land in a best-of channel.',
|
||||
'feat.gallery': 'Screenshot gallery',
|
||||
'feat.gallery.desc': 'Images from one channel show up in the public gallery.',
|
||||
'feat.voting': 'Feature wishes',
|
||||
'feat.voting.desc': 'Submit wishes and vote on them — on Discord and on the roadmap.',
|
||||
'feat.giveaways': 'Giveaways',
|
||||
'feat.giveaways.desc': 'Enter with a button, automatic draw, reroll available.',
|
||||
'feat.birthdays': 'Birthdays',
|
||||
'feat.birthdays.desc': 'Congratulations on the big day, with a role for the day if you like.',
|
||||
'feat.events': 'Event announcements',
|
||||
'feat.events.desc': 'New Discord events get announced and show up on the events page.',
|
||||
'feat.playtester': 'Playtester programme',
|
||||
'feat.playtester.desc': 'Application button, role and participant list.',
|
||||
'feat.alpha_keys': 'Alpha keys',
|
||||
'feat.alpha_keys.desc': 'A pool of keys handed out by direct message.',
|
||||
'feat.role_menus': 'Role menus',
|
||||
'feat.role_menus.desc': 'Self-service roles at the press of a button — on Discord and in the profile.',
|
||||
'feat.applications': 'Applications',
|
||||
'feat.applications.desc': 'Forms as input dialogs, review with accept and reject.',
|
||||
|
||||
'feat.moderation': 'Moderation',
|
||||
'feat.moderation.desc': 'Warnings, timeouts, cleanup — with history and a log.',
|
||||
'feat.modlog': 'Audit log',
|
||||
'feat.modlog.desc': 'Deleted and edited messages, joins, name and role changes.',
|
||||
'feat.modmail': 'Modmail',
|
||||
'feat.modmail.desc': 'Direct messages to the bot reach the team as a thread.',
|
||||
'feat.tickets': 'Tickets',
|
||||
'feat.tickets.desc': 'Private threads at the press of a button, with a transcript on close.',
|
||||
'feat.welcome': 'Welcome cards',
|
||||
'feat.welcome.desc': 'New members are greeted with a rendered image.',
|
||||
'feat.autorole': 'Auto role',
|
||||
'feat.autorole.desc': 'New members automatically get a starting role.',
|
||||
'feat.sticky_roles': 'Sticky roles',
|
||||
'feat.sticky_roles.desc': 'Leave the server and come back — your roles come back with you.',
|
||||
'feat.bug_reports': 'Bug reports',
|
||||
'feat.bug_reports.desc': 'Reports become issues in the repository, with a reply when they close.',
|
||||
|
||||
'feat.server_monitor': 'Server monitor',
|
||||
'feat.server_monitor.desc': 'Live status of the game servers with history and downtime alerts.',
|
||||
'feat.watchdog': 'Reachability watchdog',
|
||||
'feat.watchdog.desc': 'Checks the addresses you enter and reports outages by direct message.',
|
||||
'feat.temp_voice': 'Temporary voice channels',
|
||||
'feat.temp_voice.desc': 'Joining the hub creates your own channel with a control panel.',
|
||||
'feat.triggers': 'Auto replies',
|
||||
'feat.triggers.desc': 'The bot answers to keywords you set.',
|
||||
'feat.reminders': 'Reminders',
|
||||
'feat.reminders.desc': 'Members can have themselves reminded by direct message.',
|
||||
'feat.scheduled_posts': 'Scheduled posts',
|
||||
'feat.scheduled_posts.desc': 'Messages at fixed times, once or recurring.',
|
||||
'feat.tags': 'Text snippets',
|
||||
'feat.tags.desc': 'Call up saved texts with a command.',
|
||||
'feat.backups': 'Database backup',
|
||||
'feat.backups.desc': 'A nightly backup kept for 14 days.',
|
||||
'feat.repo_backups': 'Repository backup',
|
||||
'feat.repo_backups.desc': 'Back up every Gitea repository as a bundle.',
|
||||
'feat.member_gate': 'Members-only login',
|
||||
'feat.member_gate.desc': 'Only people on the Discord server can sign in on the web.',
|
||||
|
||||
// ── Bot product page: commands ────────────────────
|
||||
'commands.tag': '// Reference',
|
||||
'commands.title': 'Commands',
|
||||
'commands.subtitle': 'Every slash command at a glance. A lot also runs through buttons right inside the messages.',
|
||||
'commands.note': 'Moderation and setup commands are reserved for members with the matching Discord permissions.',
|
||||
'commands.g.everyone': 'For everyone',
|
||||
'commands.g.mod': 'Moderation',
|
||||
'commands.g.setup': 'Setup',
|
||||
'commands.rank': 'Shows your rank, your XP and the progress to the next level.',
|
||||
'commands.wunsch': 'Submits a feature wish — lands in the voting channel and on the roadmap.',
|
||||
'commands.bug': 'Reports a bug as an issue in the repository. When it is closed, you get a message.',
|
||||
'commands.bdaySet': 'Saves your birthday. The bot congratulates you in the morning and hands out a role for the day.',
|
||||
'commands.bdayDel': 'Removes it again.',
|
||||
'commands.remind': 'Reminds you by direct message — something like “2h” or “30m”.',
|
||||
'commands.tag': 'Fetches a saved text snippet, with suggestions as you type.',
|
||||
'commands.ping': 'A sign of life from the bot.',
|
||||
'commands.warn': 'Warns someone, sends them a message and writes it to the log.',
|
||||
'commands.warns': 'Shows the warning history.',
|
||||
'commands.timeout': 'Puts someone in timeout.',
|
||||
'commands.purge': 'Deletes several messages at once.',
|
||||
'commands.giveaway': 'Starts a giveaway with an entry button and an automatic draw.',
|
||||
'commands.ticketSetup': 'Posts the button that turns support tickets into private threads.',
|
||||
'commands.playtesterSetup': 'Posts the application button for the playtester programme.',
|
||||
'commands.devlogBackfill': 'Pulls older devlog messages into the archive after the fact.',
|
||||
'commands.galerieBackfill': 'The same for the screenshot channel.',
|
||||
};
|
||||
Reference in New Issue
Block a user