Supported languages
14 languages, ~1.8 billion speakers. Every language has a script-aware Google Font, a default region/currency, an Intl locale string, and a culturally-aware fallback chain pre-configured.
The full list
| Code | Language | Native | Script | Dir | Default region | Default currency | Fallback chain |
|---|---|---|---|---|---|---|---|
en | English | English | Latin | LTR | IN | INR | en |
hi | Hindi | हिन्दी | Devanagari | LTR | IN | INR | hi → en |
bn | Bengali | বাংলা | Bengali | LTR | BD | BDT | bn → hi → en |
ur | Urdu | اردو | Nastaliq | RTL | PK | PKR | ur → hi → en |
ta | Tamil | தமிழ் | Tamil | LTR | IN | INR | ta → en |
te | Telugu | తెలుగు | Telugu | LTR | IN | INR | te → en |
mr | Marathi | मराठी | Devanagari | LTR | IN | INR | mr → hi → en |
ne | Nepali | नेपाली | Devanagari | LTR | NP | NPR | ne → hi → en |
pa | Punjabi (Gurmukhi) | ਪੰਜਾਬੀ | Gurmukhi | LTR | IN | INR | pa → hi → en |
pa-PK | Punjabi (Shahmukhi) | پنجابی | Arabic-derived | RTL | PK | PKR | pa-PK → ur → en |
gu | Gujarati | ગુજરાતી | Gujarati | LTR | IN | INR | gu → hi → en |
kn | Kannada | ಕನ್ನಡ | Kannada | LTR | IN | INR | kn → en |
ml | Malayalam | മലയാളം | Malayalam | LTR | IN | INR | ml → en |
si | Sinhala | සිංහල | Sinhala | LTR | LK | LKR | si → en |
Fallback chain logic
If a translation key is missing in the active language, bhasha-js walks the chain looking for a match. The chains are linguistically motivated, not alphabetical:
- Indo-Aryan languages (Hindi, Bengali, Marathi, Gujarati, Punjabi, Nepali) fall back through Hindi to English. A Bengali speaker is much more likely to understand Hindi than English.
- Urdu shares deep linguistic roots with Hindi — same fallback through Hindi.
- Punjabi-Shahmukhi (Pakistan) falls back through Urdu, not Hindi. Different writing system, different cultural context.
- Dravidian languages (Tamil, Telugu, Kannada, Malayalam) skip Hindi entirely — they're a different language family. Falling back to a related language doesn't apply.
- Sinhala falls back direct to English (no closer relative in the supported set).
Region overrides
Some languages span multiple countries with different currencies. Pass the region prop to <I18nProvider> to override:
| Language | Default | Available regions |
|---|---|---|
| Bengali (bn) | BD (৳) | BD (Taka), IN (Rupee) |
| Tamil (ta) | IN (₹) | IN (Rupee), LK (Sri Lankan Rupee) |
| Urdu (ur) | PK (Rs) | PK (Pakistani Rupee), IN (Rupee) |
Pluralization rules (CLDR)
The 14 languages split into two CLDR plural-rule groups:
- Group A — 0 AND 1 are
"one"(singular): Hindi, Bengali, Marathi, Gujarati, Kannada, Sinhala, Punjabi-Gurmukhi. - Group B — only 1 is
"one": English, Urdu, Tamil, Telugu, Malayalam, Nepali, Punjabi-Shahmukhi.
This means t("items_count", { count: 0 }) in Hindi correctly resolves to items_count_one, while in English it resolves to items_count_other.
Native digit numbering systems
When you pass useNativeDigits: true to formatNumber, formatCurrency, or formatDate:
- Devanagari (Hindi/Marathi/Nepali):
०१२३४५६७८९ - Bengali:
০১২৩৪৫৬৭৮৯ - Tamil:
௦௧௨௩௪௫௬௭௮௯ - Telugu:
౦౧౨౩౪౫౬౭౮౯ - Gujarati:
૦૧૨૩૪૫૬૭૮૯ - Kannada:
೦೧೨೩೪೫೬೭೮೯ - Malayalam:
൦൧൨൩൪൫൬൭൮൯ - Gurmukhi:
੦੧੨੩੪੫੬੭੮੯ - Sinhala:
෦෧෨෩෪෫෬෭෮෯ - Urdu / Arabic:
۰۱۲۳۴۵۶۷۸۹