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/docsandtera-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-Languageand 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}.jsonin thecorepackage. 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
enbut 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.