Background3 min read

A Bilingual Discord Bot: TeraOne i18n Explained | 2026

TeraOne is fully bilingual from day one — bot messages, dashboard, docs and blog with DE/EN switcher and per-guild bot locale for server admins.

i18n at TeraOne: Bot, dashboard, docs, and blog — German and English

Most Discord bots are English-only. If you moderate a German-speaking community, you end up translating welcome messages, mod DMs, and audit embeds yourself — or living with bot messages that don't match your server's tone. TeraOne has been fully bilingual since day one.

What's translated

  • Bot messages — every slash-command response, welcome defaults, mod DMs, AutoMod notices, anti-alt quarantine embeds, killfeed templates, audit-log embeds.
  • Dashboard — full UI including form labels, toasts, empty states, error messages.
  • Docs — every doc page exists in parallel in DE and EN at tera-one.de/de/docs and tera-one.de/en/docs.
  • Marketing pages — landing, imprint, privacy, terms — all bilingual.
  • Blog — every post has a DE and EN translation. The locale switcher works in the blog too.

How the switcher works

  • URL-based/de/... and /en/.... Clean SEO separation, hreflang tags included.
  • Sticky locale — your choice is stored in a cookie. Next visit drops you straight back into your language.
  • Browser default — on first visit TeraOne uses Accept-Language and matches you to DE or EN.
  • Dashboard toggle — the language switcher lives in the dashboard header and flips both locale cookies (dashboard + marketing) together.

Per-guild bot locale for server admins

Server admins can set a bot locale per server in the dashboard — independent from the dashboard language of the mod who is configuring. That means:

  • Your server is German → set bot locale to de → every bot embed, DM and slash response goes out in German.
  • You browse the dashboard in English by personal preference → the bot still posts German into your server.

That separation matters because mod tooling and server output have two different audiences.

How we solve it technically

  • Shared JSON resources — both locales live as i18n/{de,en}/{bot,dashboard,marketing,docs}.json in the core package. One source of truth, no duplication between bot and dashboard.
  • next-intl on the frontend — server-side rendering with locale from the URL, no client-layout shift.
  • Type-safe keys — i18n keys are exported as TypeScript constants in the bot code. Unknown keys fail at build, not at runtime.
  • Fallback to English — if a German translation is missing, the bot silently falls back to EN (instead of crashing or showing an empty string).

Tips for better results

  • Set per-guild locale early — otherwise early welcome cards and audit logs go out in the bot instance default language.
  • Write custom templates in your language — even with bot locale set to en, custom welcome and killfeed templates are free text. Your language, your call.
  • Mixed-language communities — bilingual servers leave the bot locale on en but write custom templates in German — that works fine.

FAQ

Will more languages come? DE and EN are both fully covered today. More languages are doable (all strings are externalized), but not planned yet — translation quality beats language quantity.

Can the bot speak a different language per channel? No — the locale is per server, not per channel. Custom templates are free text, so you can mix languages there.

Where do I find the translation sources? In the repo at packages/core/i18n/{de,en}/{bot,dashboard,marketing,docs}.json. Pull requests welcome.


Need help? Join our Discord server.