How the widget picks a language
Signals are tried in a fixed order. The first one that names a language the widget supports wins.
The language decides, never the region: a page in
en-FR (English for France) gets English. A regional language you list, such as fr-CA, is used for that region and reached from plain fr too. Nothing is guessed from a path or subdomain; use a link rule for a site whose pages don’t set their language.
The widget follows the visitor as they move between pages. When the language changes mid-conversation, the widget redraws in it and the agent is told on the visitor’s next message.
What is translated
- The widget’s own words. Buttons, labels, placeholders and messages ship in English, French, German, Italian and Spanish. You can change any of them, in any language, under Widget wording on the General tab.
- Your texts. The title, greeting, conversation starters, buttons, forms and feedback.
- The opening. The agent’s own greeting stays as written. To greet visitors in their language, set a Custom starting message and buttons in the widget’s Starters and write them in each language; a preset shares them across widgets. A dynamic agent greeting needs nothing: the agent is told the visitor’s language and greets in it.
Writing each language
The Languages tab holds the settings above. To write the texts, pick a language in the Editing bar above the tabs. Every text field on General, Starters and Theming then edits that language, in the same place you wrote the default. Under each field you see the default-language text and whether this language has its own:- Not translated means visitors in that language see the default text.
- Translated means you wrote it.
- AI translated means Translate missing filled it with Claude. Editing it removes the mark.
{{page values}} stay as they are.
Colours, icons, the number of questions and buttons, and every other setting are the same in every language. Translations stay with a text when you reorder, remove or rename items in any language.
What the agent is told
A conversation from a widget with languages on starts with one line of context, for example: Visitor interface language: French (fr). Reply in French unless the visitor writes in another language; keep product and brand names as written. It is not part of the agent’s instructions, so instructions stay cacheable. Agent instructions can also read{{ locale }} (fr) and {{ language }} (French), but they rarely need to: the line above already tells the agent. Putting either in the instructions makes them differ per language, which turns off prompt caching for that agent. The conversation records the language and what picked it in its system metadata (locale, locale_source).

