Everyone on the call, in their own language.
Discord Translate joins your voice channel, transcribes and translates every speaker in real time, and posts clean captions to a text channel — readable on iPhone, Android, or desktop. No overlay, no app to install for your friends. Just talk.
What it does
Built for real multilingual conversations — English, Spanish, French, German, Japanese, Korean, Arabic, Indonesian, and ~30 more — where each person just speaks naturally.
Per-speaker translation
Hears each person in the channel separately and captions every speaker — not one merged stream.
Language by role
Give people a Discord role named after their language — French, 🇯🇵 Japanese, Bahasa Indonesia — and the bot knows exactly what each speaks. ~30 languages; flag-emoji role names work too.
Two engines, cross-checked
Translates with DeepL and OpenAI at once. Shows one when they agree, both when they differ — so you can trust it.
Any device
It's a server-side bot, so captions show up in Discord on iPhone, Android, and desktop — nothing for your friends to install.
Readable cards
Color-coded by speaker, with the translation up top and the original underneath — easy to read at a glance, even mid-call.
Always on
Auto-rejoins if the connection blips, posts captions in order, and runs 24/7 when hosted — it stays up so you don't have to babysit it.
Set it up — step by step
You run your own copy (it uses your API keys, so it's private and free-to-cheap). About 15 minutes start to finish.
Create your Discord bot
- Open the Discord Developer Portal → New Application, name it.
- Bot tab → Reset Token → copy it. That's your
DISCORD_TOKEN. - General Information → copy the Application ID. That's your
DISCORD_CLIENT_ID. - No privileged intents needed.
Invite it to your server
In OAuth2 → URL Generator, select:
- Scopes:
bot,applications.commands - Bot permissions: View Channels, Send Messages, Connect, Speak, Use Voice Activity
Open the generated URL, pick your server, authorize. While you're here, enable Developer Mode (User Settings → Advanced) and right-click your server → Copy Server ID — that's DISCORD_GUILD_ID (makes slash commands appear instantly).
Get your translation keys
- OpenAI required — create a key at platform.openai.com/api-keys. Does speech-to-text + translation.
- DeepL recommended — free key at deepl.com/pro-api. Adds a faster, stronger second translation for cross-checking. 500k chars/month free — plenty.
Set up language roles
In Server Settings → Roles, create a role named after each person's language and assign it. The name is what the bot reads — a flag emoji is welcome for visibility:
🇬🇧 English·🇫🇷 French·🇯🇵 Japanese·🇪🇸 Spanish·Bahasa Indonesia· …- ~30 languages — run
/translate languagesin Discord to see the full list.
Tip: boosted servers (Level 2) can give each role a small icon for extra visibility. No role? The person who starts the bot is the common language; everyone else uses the configured fallback.
Host it 24/7 (Railway)
The easiest always-on option — runs without your PC:
- Fork or use the GitHub repo.
- Railway → New Project → Deploy from GitHub repo → pick the repo. It builds automatically.
- In the service's Variables, add your keys:
Deploy — the logs should show [bot] logged in…; /translate registered. It auto-restarts if it ever crashes.
Prefer to run it on your own machine? npm install, copy .env.example → .env and fill it, then npm start (or double-click play.cmd on Windows).
Use it
- Join a voice channel.
- In any text channel, run
/translate join. - Talk — captions appear in that channel, one per sentence.
/translate leaveto stop.
On a video call? Minimize the call to Picture-in-Picture and keep the captions channel open underneath — faces and translations on one screen.
FAQ
What languages does it support?
~30 languages with full DeepL + OpenAI cross-checking — English, Spanish, French, German, Italian, Portuguese, Dutch, Polish, Russian, Ukrainian, Japanese, Korean, Chinese, Indonesian, Turkish, Arabic, and more — plus extras OpenAI handles on its own (Hindi, Vietnamese, Thai, Tagalog, Sundanese, Malay…). Run /translate languages in Discord for the live list. Each speaker's language is set by their Discord role.
How much does it cost?
Cheap. Transcription (OpenAI) is roughly $0.15–0.20 per hour of actual talking; translations are a fraction of a cent each; DeepL's free tier (500k characters/month ≈ ~20 hours of calls) covers normal use at $0. Hosting on Railway is about $5/month. You pay your own keys, so nothing is shared or resold.
Is it private?
Audio is sent to OpenAI (and DeepL, if enabled) to transcribe and translate — the same trade-off as any cloud voice tool. Nothing is stored by the bot. A fully self-hosted, on-device translation backend is on the roadmap for total privacy.
Does it work on a video call?
Yes — it only uses audio, so it works whether cameras are on or off. It never touches video. On mobile, use Discord's Picture-in-Picture to see faces and read captions at once.
How fast are the captions?
About 1.5–2 seconds after you finish a sentence. It waits for a brief pause, transcribes, translates, and posts — Discord can't stream a caption word-by-word, so a sentence at a time is the sweet spot.
Do my friends need to install anything?
No. It's a server-side bot — once it's in your server, everyone just reads the captions in Discord on whatever device they're already using.