REDA One Help Center
EN
Language
English EN Español ES Português PT Italiano coming soon Français FR Deutsch coming soon العربية coming soon
reda.one ↗
Home / REDA AI / Agent Management / Multi-Language Agents

Multi-Language Agents

Per-User Language REDA AI agents respond in the user’s Salesforce language without per-language configuration. A small built-in language-directive prompt is appended for non-English users; English users skip it entirely so simple turns stay cheap.

How It Works

Each user has a Language set on their Salesforce User record (the field is technically LanguageLocaleKey — values like fr, de, es_MX, ja, zh_CN). The platform reads this at the start of every conversation and uses it to decide whether to inject a language directive into the agent’s system prompt.

  1. Read user language

    From the running user’s Salesforce profile, no per-agent setup required.

  2. English-only optimisation

    If the language is English (any English locale), the platform skips the language directive entirely. No tokens are spent telling the model to do what it already does by default.

  3. Append directive

    The platform loads the channel-specific language-directive prompt, substitutes the user’s language values into the placeholders, and includes it in the assembled system prompt.

  4. Model responds

    The agent reads the directive in its system prompt and replies in the user’s language for the rest of the conversation.

The Two Placeholders

Custom prompts can reference the running user’s language with two placeholders:

Placeholder Resolves to Example values
{USER_LANGUAGE} The full Salesforce language locale. fr, de, es_MX, pt_BR, zh_CN
{USER_LANGUAGE_CODE} Just the language portion (the part before the first _). fr, de, es, pt, zh

Either placeholder can be used in any custom prompt — not just the language directive. They’re especially useful when you want the agent to behave differently for specific locales (e.g. apply a different signature style for French-Canadian users than for European French users).

The Built-In Language Directives

Four small language-directive prompts ship with REDA AI — one per channel — and are seeded on install. They are ordinary Custom Prompt records and can be edited like any other.

Prompt name Channel Approx. tokens Uses {USER_LANGUAGE}?
_common:language-directive Internal ~40 Yes
_common:language-directive-community Community ~20 Yes
_common:language-directive-external External Widget ~70 No
_common:language-directive-api API ~70 No

The two channels with no signed-in human are the long ones, and they deliberately carry no placeholder. On External Widget the running user is a Sites guest; on API it is the integration or Automated Process account. {USER_LANGUAGE} there would resolve to the service account’s language and force it on every counterparty — so instead of a placeholder those two spell the policy out in words: answer in the language of the message you are replying to, ignore the language of the account or site that sent the request, fall back to the previous message when a greeting is too short to identify, and English only if there is nothing to go on. That written policy is what makes them roughly 70 tokens rather than 20.

The Internal directive is the one that adds the parsing carve-out: respond in the user’s language but keep API names, record Ids and structural tokens (suggestion markers, alert tags, internal links) in English, so the parts of the reply the platform routes on survive translation.

Seeded prompts are data, not metadata. A package upgrade never rewrites them, so an org that installed before a directive changed keeps the old wording until an admin runs Seed Default Data in the REDA AI Admin console. If your widget or API agents answer in the wrong language, check the directive text on the record before changing anything else.

The English-Skip Optimisation

Language directives only help when the user’s language isn’t English. For English users, the platform skips the directive entirely:

  • The directive prompt isn’t loaded
  • Its tokens aren’t added to the system prompt
  • The model doesn’t spend attention on instructions it already follows by default

This is automatic. There’s nothing to configure. For an English-speaking user base the language-directive feature has zero cost.

What Stays in English

The built-in internal directive explicitly tells the model to leave certain elements untranslated:

  • API names — field, object and tool names stay in English so they match the Salesforce schema and the agent’s tool definitions
  • Record Ids — obviously not translatable, but worth being explicit
  • Structural tokens — suggestion chip markers (SUGGESTIONS:), alert tags ([ALERT]), internal link patterns ([[links]]), and similar markers used by the chat UI to render the response correctly

The community, external and API directives keep this rule simpler — they only state “translate all human-readable text” without enumerating exceptions, since most non-internal channels don’t use the same UI markers.

Customising the Directives

The seeded directives are good defaults but can be edited like any Custom Prompt. Common customisations:

  • Tone per language. Add language-specific stylistic notes — e.g. instructions to use formal address (vous in French, Sie in German) on customer-facing channels.
  • Untranslatable terms. If your domain uses English terms that should stay in English even on customer channels (brand names, product SKUs, legal phrases), spell them out in the directive.
  • Quote formatting. Different locales prefer different number, date and currency formats — an explicit instruction saves the model from guessing.

Edits are persisted on the Custom Prompt records. The English-skip behaviour still applies — English users never see the customised directive.

Beyond the Directive

Language-aware behaviour can extend further:

  • Language-conditional prompts. Add a custom prompt with content like For users speaking {USER_LANGUAGE_CODE}, do X. Use the placeholders directly in any prompt.
  • Translated suggestion chips. Suggestion chips support Custom Labels for translation, so the chat’s empty-state buttons are localised automatically by Salesforce’s translation infrastructure.
  • Localised content fields. If the agent reads context fields from records that have translated values, the model sees them in the right language — no special configuration needed.

See Prompt Context Variables for the full list of merge fields available in custom prompts.

Channels and Languages

Each channel uses its own language-directive prompt because the trade-offs differ:

  • Internal — the running user’s Salesforce language is authoritative. Internal users typically have a stable language preference set on their User record.
  • Community — portal users have language preferences too; the same mechanism applies.
  • External Widget — the user is a guest on a public website. The widget’s host page can configure the language explicitly; otherwise the platform falls back to the guest user’s configured language.
  • API — the running user is whichever user the Flow or integration runs as. For multi-language messaging integrations, run the Flow as a user whose language matches the recipient, or use a custom prompt that conditions on the conversation’s known language.

Best Practices

Don’t hand-translate persona prompts. Maintaining one persona per language is a maintenance trap. Write the persona once in English and trust the language directive to handle translation at runtime.

Test the API-name carve-out. If the agent is mistranslating field labels or breaking structural markers, the internal directive’s English-only carve-out may need a tweak.

Use the placeholders sparingly outside the directive. A single language directive plus the model’s built-in multilingual capability handles most cases. Reach for per-language conditional logic only when you have a specific stylistic or legal requirement.

Verify with the Conversation Debugger. The Debugger shows the assembled system prompt for a real conversation — the fastest way to confirm that the directive was (or wasn’t) applied for a given user.

Watch credit consumption per channel. The internal directive is ~40 tokens; widget and API directives are ~20. Across high-volume channels this matters less than a verbose persona prompt, but it’s worth being aware of.

Changes included in 1.16000

For API and External Widget agents, language instructions follow the incoming message. User placeholders remain meaningful only on the authenticated Internal and Community routes. Review the shared API/external language directives and the API core instructions: rules for a concise automation response must not make a tool-delivered message to a person greeting-less or abrupt. Preserve custom instructions while merging defaults.

Client upgrade checklist

Frequently Asked Questions

No. The language directive uses placeholders that resolve to whatever the user’s Salesforce language is — one prompt covers every language the model supports.

Whatever the underlying model supports. The platform doesn’t restrict the locale — it just passes the user’s Salesforce language to the model and asks it to respond in that language.

The directive is the same for every non-English language — it’s the placeholder that adapts. There’s no per-language prompt to be missing.

The platform reads the running user’s Salesforce language. To force a specific language regardless of the user, edit the language-directive prompt to hard-code the value (e.g. replace {USER_LANGUAGE_CODE} with fr) — but think hard about whether that’s really what you want, since it overrides the user’s preference.

The card’s text content (titles, summaries, descriptions) is generated by the model and translates with the rest of the response. Field API names, record Ids and the action’s structural metadata stay in English — that’s what the “keep API names in English” carve-out in the internal directive ensures.

Yes. {USER_LANGUAGE} and {USER_LANGUAGE_CODE} are available in any Custom Prompt — the platform substitutes them at assembly time. See Prompt Context Variables.

No. English users skip the directive entirely — it isn’t loaded, isn’t tokenised, and isn’t sent to the model.

Next Steps

Read Prompt Context Variables for the full list of merge fields, or Custom Prompts per Agent to add language-conditional behaviour to specific agents.