What we learned

The Gujarati Words That Break AI Voice Tools (And What We Do About Them)

Numbers, phone numbers, web addresses, conjuncts and proper nouns. A first-hand list of what actually goes wrong when AI reads Gujarati, taken from failures we shipped and fixed.

Updated 29 Aug 2026 · 9 min read

Ordinary Gujarati prose is handled well by current speech models. That is not where things go wrong.

What breaks is everything that is not a plain word: digits, percentages, phone numbers, web addresses, and names the model has barely seen. Every failure below is one we shipped, heard, and fixed, and several of them were only found because someone told us.

Numbers read half in English

The most recent one we found. A script containing 200% was spoken as something close to "two-so ટકા" rather than બસો ટકા.

The cause is that the text reaching the engine was the Latin digits `200` followed by ટકા. A digit string is effectively an instruction to guess a language, and the model resolved it inconsistently — reading the `2` in English and the trailing zeros as the Gujarati hundred suffix. The result is a hybrid that is not a word in either language.

The general fix
Convert the number to a Gujarati word before the engine sees it. બસો cannot be misread the way 200 can, because it is unambiguously one language. We do this for percentages and degrees, where the surrounding sentence is unambiguously Gujarati and the number is unambiguously a quantity.

Phone numbers read as one giant number

This is the one that cost us a real customer. A business call-to-action contained a ten-digit mobile number, and the engine read it as a single cardinal — beginning "six hundred and thirty-five crore" and continuing from there.

It is an entirely reasonable thing for a speech model to do. Ten digits in a row is a number, and reading a number as a cardinal is correct almost everywhere else. It is simply catastrophic for the one case where the digits are an address rather than a quantity.

What a run of digits usually means, in a reel
DigitsAlmost alwaysShould be read as
4A yearA cardinal — 1951
6A lakh figureA cardinal
8A crore figureA cardinal
10–12A phone numberDigit by digit
We expand any run of 10 to 12 digits into spaced digits before synthesis, which forces the engine to read each one.

Web addresses, and the two engines wanting opposite things

A bare domain like a government portal or a shop's website is a real, speakable thing, and deleting it is not an option when the whole point of the reel is to send someone there.

What surprised us is that different engines want it in different scripts, and we only established this by generating samples and listening. Three attempts to reason it out beforehand were all wrong.

How each engine wants a web address, established by ear
EngineWantsExample
SarvamEnglish, as one unbroken spanfoscos dot fssai dot gov dot in
CartesiaGujarati scriptફોસ્કોસ ડોટ એફએસએસએઆઈ ડોટ ગવ ડોટ ઇન
Cartesia is called with language "gu", so Latin text gets Gujarati phonology and reads badly. Never mix scripts inside one address — that flips the engine mid-word and it settles into neither language.

Conjuncts are the fastest test

શ્રીજી, દ્વારકા and પ્રશ્ન each contain joined consonants. An engine that genuinely handles Gujarati speaks the join as one sound; an engine that merely accepts Gujarati text tends to pull the letters apart.

This is a two-minute test that tells you more than any feature list, and it is worth running on any tool before paying for it. It is also worth running on your own scripts, because a conjunct in a place name or a business name is exactly where you cannot afford it.

Proper nouns are where every engine is weakest

Business names, town names, family names. These are the words a model has seen least often, and they are also the words you can least afford to have mispronounced — a reel that says a shop's name wrong is worse than one that does not say it at all.

Our practical rule is to generate every unusual name on its own, before writing a script around it. If it comes out wrong, respell it phonetically in the script so the audio is right, and keep the correct spelling in the caption, which is a separate path and not affected by what the voice engine was given.

  • Test the name alone first, not inside a sentence.
  • Respell phonetically for the audio when needed — the caption keeps the real spelling.
  • Keep the respelling consistent across a script, or one word gets two pronunciations in one video.
  • Listen for vowel length. In Sanskrit-derived names the difference between a short and long vowel changes the word.

One model-level fact worth knowing

Not every model in a provider's range speaks Gujarati, even when the provider does. Cartesia's sonic-3.5 handles Gujarati; sonic-2 supports a list of European and Asian languages that does not include it. Picking the wrong model in the same family produces output that is wrong in a way that looks like a quality problem rather than a language problem.

It is worth checking which specific model a tool calls, not just which company built it.

The short version

  • Ordinary sentences are fine. Numbers, names and addresses are where it breaks.
  • Percentages can be read half in English — convert them to Gujarati words first.
  • Ten digits in a row will be read as one enormous cardinal unless you split them.
  • Web addresses want English in one engine and Gujarati script in another. Test by ear.
  • Conjuncts are the two-minute test of whether an engine really handles Gujarati.
  • Always generate proper nouns on their own before building a script around them.
Bolo is built for people like you:
Bolo for shops & small businessesBolo for bhajan & devotional creatorsBolo for Gujarati news creators

Frequently asked questions

Why does AI read Gujarati numbers incorrectly?

Because a digit string does not specify a language, so the model guesses — and it can guess inconsistently within one number. We found 200% being read as roughly "two-so", with the 2 in English and the zeros as the Gujarati hundred suffix. The fix is to convert the number into a Gujarati word before the engine sees it, since બસો is unambiguous in a way 200 is not.

Why is my phone number read as a huge number?

Because ten digits in a row is a number, and reading a number as a cardinal is correct almost everywhere except this case. Ours was spoken beginning "six hundred and thirty-five crore", which cost us a customer. The fix is to expand any run of 10 to 12 digits into spaced digits before synthesis so the engine reads each one separately.

How do I test whether an AI voice really handles Gujarati?

Generate શ્રીજી, દ્વારકા and પ્રશ્ન. Each contains joined consonants, and an engine that genuinely handles Gujarati speaks the join as one sound while one that merely accepts the text pulls the letters apart. It takes two minutes and tells you more than any feature list.

Why does the AI mispronounce my business name?

Proper nouns are where every speech model has the least training data — business names, town names and family names are seen far less often than ordinary words. Generate the name on its own before writing a script around it, and if it is wrong, respell it phonetically for the audio while keeping the correct spelling in the caption, which is a separate path.

How should a web address be written for text-to-speech?

It depends on the engine, which we established by generating samples and listening rather than by reasoning. Sarvam prefers a clean English span; Cartesia, called with language "gu", prefers Gujarati script. The one rule that holds for both is never to mix scripts inside a single address, because that flips the engine mid-word and it settles into neither language.

Do all models from a provider support Gujarati?

No, and this catches people out. Cartesia's sonic-3.5 speaks Gujarati while sonic-2 does not — its language list covers European and Asian languages without including it. Choosing the wrong model in the same family produces output that looks like a quality problem when it is actually a language-support problem, so check which specific model a tool calls.