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:

LanguageDefaultAvailable 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: ۰۱۲۳۴۵۶۷۸۹