Timo Heuts
03/26/2026, 7:00 AMDevRev
03/26/2026, 7:01 AM{{strings.your_key}} syntax
3. Ensure your flow has localization enabled with a translation connector configured
// In Global Strings section:
Key: non_existing_user
English: "User does not exist"
Spanish: "El usuario no existe"
// In your flow condition error message:
{{strings.non_existing_user}}
Flow-Level Localization
Custom error messages from conditions should appear in the localization section once you:
1. Configure a localization connector for your flow (Google Cloud Translation, AWS Translate, etc.)
2. Enable translation for the flow with source and target languages
3. The connector will automatically translate your custom error messages
Troubleshooting Global Strings
If {{strings.non_existing_user}} displays literally instead of translating, verify:
• The global string key exists and matches exactly
• Your flow references global strings (check the referencesGlobalStrings property)
• The locale is properly set in your component or browser
The global strings approach gives you more control over translations, while flow-level localization with connectors provides automatic translation of all flow content .
Customizing Localization | Descope Documentation
Google Cloud Translation Connector | Descope Documentation
Localization Connectors | Descope Documentation
List/Search Flows | API Reference | Descope Documentation
Descope Component Guide | Client SDK | Descope DocumentationTimo Heuts
03/26/2026, 7:30 AMreferencesGlobalStrings property?DevRev
03/26/2026, 7:30 AMreferencesGlobalStrings property is automatically set by Descope when your flow contains global string references.
Automatic Detection
1. Add global string references to your flow using {{strings.your_key}} syntax in any component
2. Descope automatically detects these references and sets referencesGlobalStrings: true
3. No manual configuration is required
Where to Use Global Strings
• Error messages in conditions and actions
• Text content in screens and components
• Custom validation messages
• Any text field that supports template syntax
// Examples that trigger automatic detection:
{{strings.welcome_message}}
{{strings.error_invalid_user}}
{{strings.button_continue}}
Verification
You can verify the property is set by checking your flow via the Management API, but this is primarily for debugging purposes. The key is simply using the {{strings.}} syntax anywhere in your flow - Descope handles the rest automatically .
If global strings still aren't resolving, ensure the keys exist in your Global Strings section and match exactly (case-sensitive).
Customizing Localization | Descope DocumentationAkash Jivane
03/26/2026, 12:02 PMnon_existing_user exist exactly as-is in your Global Strings?
2. Do you have a localization connector configured on this flow?
3. Are you passing the locale attribute to your Descope component (e.g., <descope-wc locale="nl">) ?
If all three are set up correctly and it's still showing literally, it may be that the error is being returned from a step that exits before global string resolution. In that case, the workaround is to use a Set Attribute action to set the error text before routing to a screen component — that way the screen component handles localization properly.Timo Heuts
03/26/2026, 12:10 PMAkash Jivane
03/26/2026, 12:39 PMAkash Jivane
03/26/2026, 12:40 PM{{strings.key}} is resolved by the Descope web component on the client side, not by the flow engine.
So:
• console.log('{{strings.non_existing_user}}') will always show the literal string — this is expected.
• The flow builder preview doesn't simulate client-side localization, so it won't resolve there either
To test properly, deploy your flow and test it in your actual app with the Descope web component (<descope-wc>), making sure to pass the locale attribute (e.g., locale="nl"). The global string should resolve correctly there.
Also double-check that your error message from the if/else condition is being passed to a screen component that's what picks up the {{strings.key}} and renders it translated. If the flow exits before hitting a screen, the substitution won't happen.Akash Jivane
03/27/2026, 11:12 AMTimo Heuts
03/27/2026, 1:17 PMTimo Heuts
03/27/2026, 1:17 PMTimo Heuts
03/27/2026, 1:33 PMAkash Jivane
03/27/2026, 1:47 PMerrorTransformer on the client SDK side is the cleaner long-term solution — you keep a single screen, set the error message field to a plain key (e.g. non_existing_user), and handle all translations in one place in your frontend code.
But if the current workaround works for your use case, no need to change anything.Timo Heuts
03/27/2026, 1:55 PMAkash Jivane
03/27/2026, 1:58 PM