Skip to main content
FaceSign supports 13 languages out of the box. The avatar speaks the resolved language and the wrapper UI adapts. You author prompts in English; the runtime translates the avatar’s speech into the resolved session language.

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’s navigator.language, normalized against the session’s langs whitelist:
  • langs specified: only those languages are allowed. If the browser language matches one, that language is used. Otherwise defaultLang is used.
  • langs omitted: every language in the catalog is allowed. The browser language picks, falling back to defaultLang (default: en).

BCP-47 normalization

FaceSign normalizes navigator.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
Omit 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 — paraphrased freely in the target language
Descriptive prompts let the LLM rephrase naturally in each target language. Prefer descriptive prompts for multilingual deployments.
Prefer descriptive prompts for multilingual demos. Both Say: and descriptive prompts get translated into the resolved session language, but Say:’s verbatim-wording directive produces stiffer translations tied to the English source. Descriptive prompts let the LLM rephrase naturally in each 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 the uiStrings 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
This makes it easy to verify multilingual behavior without reconfiguring your browser’s language preferences.

Multilingual deployment checklist

  • Conversation prompts are descriptive, not Say: (required for translation)
  • langs whitelist set on session.create
  • defaultLang set on session.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