Home → Blog → Which languages speech recognition actually handles well
Which languages speech recognition actually handles well
Ninety-nine languages sounds like a solved problem. In practice the list is a gradient: a dozen languages where recognition is close to human, a long middle where it is useful with checking, and a tail where the output needs more work than it saves.
The list is a gradient, not a checkbox
Support comes from how much of a language was in the training data, and that is wildly uneven. A rough practical grouping:
| Tier | Languages | What to expect |
|---|---|---|
| Strong | English, Spanish, German, French, Italian, Portuguese, Russian, Japanese, Chinese | Single-digit error rates on clean speech; usable with light checking |
| Good | Polish, Dutch, Turkish, Korean, Ukrainian, Arabic, Swedish, Czech and similar | Reliable content, more slips on names and terms |
| Workable | Most remaining European and larger Asian languages | Gist is right; expect real editing |
| Weak tail | Low-resource languages at the end of the list | Test on your own audio before building anything on it |
The only number that matters is the one you measure on your own recordings — accents, audio quality and subject matter shift results more than the tier does.
How detection works, and when it fails
By default the language is detected automatically from the beginning of the recording. On anything longer than a few sentences this is reliable. It fails in two situations:
- Very short clips. Three seconds of speech is thin evidence, and a short phrase in one language can look like another.
- Noisy openings. If the recording starts with music, hold tone or crosstalk, detection works from that.
Both are fixed by saying what the language is:
r = client.audio.transcriptions.create(
model="whisper-1", file=f, language="de",
)
Use the two-letter code. Specifying it also skips the detection pass, so processing is marginally faster.
Checking what was detected
When the stream genuinely is multilingual, let detection run and read the result — it is returned along with a confidence value:
r = client.audio.transcriptions.create(
model="whisper-1", file=f, response_format="verbose_json",
)
print(r.language, r.language_probability)
if r.language_probability < 0.6:
queue_for_review(r) # low confidence — check by hand
This is also the cheapest way to route incoming messages: detect the language, send the conversation to an agent who speaks it, and flag the uncertain few per cent for a human.
Recordings that switch languages
This is the real limitation, and it is worth understanding precisely: the language is decided once, from the start of the recording, and the rest is transcribed in that mode. A speaker who begins in German and switches to English mid-sentence will get the English part transcribed as though it were German — often as plausible-looking nonsense.
Two ways to handle it:
- Split at the switch and transcribe each part with its own language, if the switches are few and predictable (a bilingual interview, a conference with two speakers).
- Accept the dominant language if the second one appears only as occasional loanwords and technical terms — that case usually works fine, because those words are transcribed as heard.
What does not work is expecting a single request to follow the switch. Nothing in the parameters changes that.
Names and terms are the weak point in every language
Across the whole list, the errors cluster in the same place: proper nouns. Product names, surnames, place names, acronyms — words the model has little reason to expect. The fix is the same everywhere:
r = client.audio.transcriptions.create(
model="whisper-1", file=f, language="fr",
prompt="Intervenants : Amélie Roussel, Karim Benali. Produits : Kestrel, Hawknest.",
)
Write the hint in the language of the audio. It biases recognition towards those spellings and, as a side effect, towards the punctuation style of the hint itself.
What to test before you commit
- Twenty real recordings in the target language, matching your production conditions — not clean studio samples.
- Measure the error rate on what you care about: if the business needs order numbers, count number errors separately.
- Try it with and without
languageset — on short clips the difference is often larger than any other change. - Add a term list and measure again. If proper nouns are your problem, this is where it gets solved.
An afternoon of this tells you more than any published benchmark, because it is measured on the audio you will actually send.
Try it on your own recordings. Sign-up takes a minute, and the free minutes are enough to judge the quality.
Get a free API keyFrequently asked questions
Are all 99 languages equally accurate?
No. A dozen widely spoken languages are close to human accuracy on clean speech; quality declines gradually down the list. Always test on your own recordings rather than trusting the count.
Should I set the language or let it be detected?
Set it when the audio is single-language, especially for short clips where detection has little to work with. Leave detection on when recordings genuinely arrive in different languages.
What happens if the speaker switches languages?
The language is decided from the start of the recording and the rest is transcribed in that mode. Split the audio at the switch and transcribe each part separately.
How do I know which language was detected?
Request verbose_json — the response includes the detected language and a probability. A low probability is a reliable signal to review that recording.
Does the prompt parameter work in every language?
Yes, and it should be written in the language of the audio. It is the most effective fix for names and specialist terms, which are the main error source in every language.
Related reading
- Voice message transcription: Telegram, WhatsApp and other messengers — How to turn voice messages into text automatically: working with ogg/opus, short clips, silent recordings and ready code for chat bots that answer in text.
- How to improve speech-to-text accuracy: eight practical fixes — Eight changes that actually move transcription quality: audio preparation, language hints, the prompt parameter, chunking, formats, and how to measure word error rate.
- How to transcribe a call recording to text — A step-by-step guide to turning phone call recordings into text through an API in minutes: Python and C# samples, response formats and the errors you will meet.