Supported languages
Query
facesign://catalog (via the MCP) or GET /langs for the authoritative list at runtime. The catalog is versioned with the platform.How language resolution works
The session picks the spoken language and the wrapper UI language from the end user’snavigator.language, normalized against the session’s langs whitelist:
langsspecified: only those languages are allowed. If the browser language matches one, that language is used. OtherwisedefaultLangis used.langsomitted: every language in the catalog is allowed. The browser language picks, falling back todefaultLang(default:en).
BCP-47 normalization
FaceSign normalizesnavigator.language before matching. A few examples:
Author prompts and outcome conditions in English regardless of which languages your deployment supports — the runtime translates the avatar’s speech into the resolved session language. Mixing authoring languages across nodes makes the avatar flip languages mid-flow. See Conversation Rules for the full rule.
Setting up a multilingual session
Create a multilingual session
langs to allow every catalog language. The exported Next.js app detects the user’s browser language automatically and forwards it to the session — no extra code required beyond langs and optionally defaultLang.
Prompt style: Say: vs descriptive
This is the most important decision for multilingual flows. Both styles are written in English and both get translated into the session language at runtime; the difference is whether the LLM rephrases freely or sticks close to the source wording.
- Descriptive (natural phrasing)
- Say: (constrained wording)
Descriptive — paraphrased freely in the target language
Amount and currency formatting
Currency formatting differs by locale. If you bake amounts into your UI strings, match the user’s locale:
For numeric data, prefer
Intl.NumberFormat at render time over hard-coded strings.
Adding your own UI translations
The exported app contains exactly theuiStrings your AI assistant generated at export time — there are no built-in defaults. Add or change scenario copy (product name, merchant names, your own product voice) by editing the UI strings in the exported app. Keep the key set identical across every language block. Missing keys fall back to English at runtime.
Testing without changing your browser language
Exported apps honor a?lang=XX query parameter that overrides both the wrapper UI and the avatar’s spoken language. Append it to any demo URL:
Test language override
Multilingual deployment checklist
- Conversation prompts are descriptive, not
Say:(required for translation) -
langswhitelist set onsession.create -
defaultLangset onsession.create - UI strings cover every language in
langs - Currency, date, and number formats are locale-appropriate
- Tested in each target language with the browser’s primary language set accordingly, or via
?lang=XX
Next steps
Flows
Complete English-only and multilingual example flows
Verification Patterns
Common flow patterns for real-world use cases
Customization
Customize UI text and branding