Localization
MarkdownEvery SDK ships the chat’s built-in text (titles, the composer placeholder, buttons, delivery status, offline banners, card labels, the AI label and notice, accessibility labels) in 34 languages. Nothing to install or translate: the chat follows the user’s language out of the box, even when your app itself is English only.
Languages
Section titled “Languages”English, Spanish, Portuguese (Brazil), Portuguese (Portugal), French, German, Italian, Dutch, Swedish, Danish, Norwegian Bokmål, Finnish, Polish, Czech, Slovak, Hungarian, Romanian, Ukrainian, Russian, Turkish, Greek, Hebrew, Arabic, Persian, Hindi, Bengali, Indonesian, Malay, Thai, Vietnamese, Japanese, Korean, Chinese (Simplified) and Chinese (Traditional).
Arabic, Hebrew and Persian lay the chat out right to left: mirrored header, bubbles on the opposite sides, tails and icons flipped. Message text keeps its own direction, so an English reply in an Arabic chat still reads left to right.
How the language is picked
Section titled “How the language is picked”| Platform | Default |
|---|---|
| iOS | The user’s preferred languages, including the per-app language from Settings. |
| Android | The app’s locale list, including AppCompatDelegate.setApplicationLocales and the Android 13+ per-app language. |
| React Native | The native SDK’s rule when it is linked; in Expo Go, the OS languages, then Intl. |
| Flutter | The native SDK’s rule (the plugin always uses the native chat). |
| Web | navigator.languages. |
The SDK takes the first preferred language it ships. A region or script it does not ship falls back to the language: es-MX and es-419 use Spanish, de-AT uses German, zh-TW and zh-HK use Traditional Chinese, zh-CN Simplified. Plain pt and pt-BR use Brazilian Portuguese, other Portuguese regions European Portuguese. Old codes (iw, in, no) work. A language the SDK does not ship moves on to the user’s next preferred language, then English.
Dates, times, “Today”, “in 2 hours” and plural forms (“3 photos”, “5 unread”) come from the platform’s own formatters and plural rules in the chat’s language.
Choose the language yourself
Section titled “Choose the language yourself”Set a BCP 47 tag to override the device, or nil / null to follow it again. An open chat updates in place on iOS and Android.
// iOSConcierge.locale = "ja"// AndroidConcierge.locale = "pt-BR"// React NativeConcierge.configure({ appKey: 'app_...', locale: 'ar' });Concierge.setLocale('de'); // later, or null to follow the device// FlutterConcierge.configure(appKey: 'app_...', locale: 'he');Concierge.setLocale('ko'); // later, or null to follow the device// WebConcierge.configure({ appKey: 'app_...', locale: 'zh-Hant' });Your dashboard text
Section titled “Your dashboard text”The chat title and welcome you set in the dashboard show exactly as you wrote them, in every language. If you never changed them, the chat shows its built-in title and greeting in the user’s language instead of the English defaults. Local overrides (Concierge.appearance on iOS and Android, setAppearance on React Native, Flutter and the web) always win.
Per-language dashboard text is not available yet. If you need a translated welcome today, set it locally from your app with the language you already know.
The AI label
Section titled “The AI label”Replies from the AI agent always carry an AI label in the chat’s language (for example “AI assistant”, “Asistente de IA”, “KI-Assistent”, “AIアシスタント”, “مساعد ذكاء اصطناعي”), and the notice at the top of the chat says replies may come from an AI. No setting hides them. The agent itself writes in the language the user writes in; see AI agent and knowledge.