Overview — what "supported" means
A language ships in the Web Widget when every user-visible string in the chat UI has a translation reviewed by a native speaker. That includes the composer placeholder, the send button tooltip, connection-state banners, quick-reply chips, and every error toast. If a string can't be translated with a straight equivalent (idioms, culture-specific phrasing), the review pass writes a locale-appropriate rewrite rather than falling back to English.
The list on this page is the actual runtime table — the widget loader ships these codes and pulls the matching pack on first paint.
50 languages · 4 right-to-left scripts · 14 writing systems · zero config to enable. The widget auto-detects the visitor's locale.
Coverage at a glance
How the visitor's language is detected
Detection runs once, at widget mount, and picks the first hit in this order:
- Explicit override. If your page sets
window.Knocket.locale = 'ja'before the widget loads, that wins. See Override in Code. - HTML
langattribute. If<html lang="fr">is present, the widget adopts it. This is the cleanest option for multilingual sites — set it server-side per page. - Browser locale. Falls back to
navigator.languages[0]. Region variants collapse to the base language (e.g.pt-BR→pt). - English. If none of the above matches a shipped pack, the widget stays in English rather than a partially translated state.
The full list — 50 languages
Ranked by global speaker count. Every row is a shipping language pack; the code column is the exact string the widget expects.
| # | Native name | English name | Code | Example — "Chat with us" |
|---|---|---|---|---|
| 1 | English | English | en | Chat with us |
| 2 | 简体中文 | Chinese Simplified | zh-Hans | 在线咨询 |
| 3 | 日本語 | Japanese | ja | チャットで相談 |
| 4 | Deutsch | German | de | Chatten Sie mit uns |
| 5 | español | Spanish | es | Chatea con nosotros |
| 6 | português | Portuguese | pt | Fale conosco |
| 7 | français | French | fr | Discutez avec nous |
| 8 | 한국어 | Korean | ko | 문의하기 |
| 9 | 繁體中文 | Chinese Traditional | zh-Hant | 線上諮詢 |
| 10 | italiano | Italian | it | Chatta con noi |
| 11 | polski | Polish | pl | Napisz do nas |
| 12 | русский | Russian | ru | Напишите нам |
| 13 | Bahasa Indonesia | Indonesian | id | Hubungi kami |
| 14 | Türkçe | Turkish | tr | Bize yazın |
| 15 | Nederlands | Dutch | nl | Chat met ons |
| 16 | हिन्दी | Hindi | hi | हमसे चैट करें |
| 17 | العربية الفصحى | Modern Standard Arabic | ar | تحدث معنا |
| 18 | Tiếng Việt | Vietnamese | vi | Trò chuyện với chúng tôi |
| 19 | ภาษาไทย | Thai | th | แชทกับเรา |
| 20 | українська | Ukrainian | uk | Напишіть нам |
| 21 | čeština | Czech | cs | Napište nám |
| 22 | română | Romanian | ro | Discută cu noi |
| 23 | Bahasa Melayu | Malay | ms | Sembang dengan kami |
| 24 | עברית | Hebrew | he | שוחחו איתנו |
| 25 | svenska | Swedish | sv | Chatta med oss |
| 26 | dansk | Danish | da | Chat med os |
| 27 | suomi | Finnish | fi | Ota yhteyttä |
| 28 | norsk bokmål | Norwegian Bokmål | nb | Chat med oss |
| 29 | magyar | Hungarian | hu | Írjon nekünk |
| 30 | ελληνικά | Greek | el | Μιλήστε μαζί μας |
| 31 | slovenčina | Slovak | sk | Napíšte nám |
| 32 | български | Bulgarian | bg | Пишете ни |
| 33 | српски | Serbian | sr | Ћаскајте са нама |
| 34 | hrvatski | Croatian | hr | Razgovarajte s nama |
| 35 | català | Catalan | ca | Xateja amb nosaltres |
| 36 | தமிழ் | Tamil | ta | எங்களுடன் அரட்டையடிக்கவும் |
| 37 | తెలుగు | Telugu | te | మాతో చాట్ చేయండి |
| 38 | বাংলা | Bengali | bn | আমাদের সাথে চ্যাট করুন |
| 39 | Filipino | Filipino | fil | Makipag-chat sa amin |
| 40 | فارسی | Persian | fa | با ما گفتگو کنید |
| 41 | اردو | Urdu | ur | ہم سے چیٹ کریں |
| 42 | Kiswahili | Swahili | sw | Zungumza nasi |
| 43 | lietuvių | Lithuanian | lt | Susisiekite su mumis |
| 44 | latviešu | Latvian | lv | Runāt ar mums |
| 45 | slovenščina | Slovenian | sl | Klepetajte z nami |
| 46 | eesti | Estonian | et | Vestle meiega |
| 47 | मराठी | Marathi | mr | आमच्याशी चॅट करा |
| 48 | മലയാളം | Malayalam | ml | ഞങ്ങളോട് ചാറ്റ് ചെയ്യൂ |
| 49 | ગુજરાતી | Gujarati | gu | અમારી સાથે ચેટ કરો |
| 50 | नेपाली | Nepali | ne | हामीसँग च्याट गर्नुहोस् |
Override in code
If you already know the visitor's preferred language (from your app state, an account setting, or a URL param), tell the widget explicitly:
<script>
window.Knocket = window.Knocket || {};
window.Knocket.locale = 'ja'; // must be set before the loader script
</script>
<script src="https://cdn.knocket.ai/w.js" async></script> Or after the widget has mounted, change it live:
Knocket('setLocale', 'zh-Hans'); The widget re-renders every string, flips direction for RTL languages, and keeps the current conversation intact.
Fallback behavior
Two edge cases worth calling out:
- Unshipped locale. If you pass an unknown code (e.g.
xxor an obscure regional variant), the widget falls back to English silently and reports the miss in the console analytics. - Regional fallback. Regional codes collapse to their base language when a regional pack isn't shipped.
pt-BR→pt,en-GB→en. Simplified/Traditional Chinese are separate packs (zh-Hansvszh-Hant) — do not alias them.
See how localization fits with theming, positioning, and the rest of the widget config.