Skip to main content
The Dynamic Swift SDK lets you override almost any text it displays and add translations for additional languages. You pass a locale object through ClientProps when initializing the SDK.

Quick override

Change UI text by overriding the copy key in locale. The object is keyed by language code, and each language value contains nested translation overrides that match the SDK’s default English copy structure.
Finding keys: The Swift SDK renders UI inside a WebView. You can mirror the same copykey attribute names used in the web SDK. The nested object path matches the dot-separated key (for example, dyn_login.title.all_wallet_list).

Supported languages

The top-level keys of locale must be one of the following language codes:
Any top-level language key that is not in the supported list is dropped. Other valid entries are still applied.

Full guide

In this guide we will override the “Select your wallet” text to “Find your favorite” in English and add an Italian translation. The key for that text is dyn_login.title.all_wallet_list.
The SDK merges your overrides with the default English translations at runtime, so you only need to specify the keys you want to change.

Translation structure

The locale value mirrors the SDK’s translation resource. You can override nested objects arbitrarily deeply.
This is equivalent to the dot-separated path dyn_login.title.all and dyn_login.title.all_wallet_list.

Adding a new language

To add a translation for a language that is not yet bundled, provide the same keys under that language code:
The SDK falls back to en for any key that is not provided in the chosen language. You do not need to mirror the entire translation tree.

Validation and sanitization

The locale object is sent to the webview controller through the SDK manifest. The webview validates the structure before applying it:
  • The root value must be an object.
  • Each top-level key must be a supported language code.
  • The value for each language must be an object (translation overrides).
  • Invalid top-level keys are dropped, and the rest of the object is still applied.
  • If the root value is not an object, the whole locale is ignored.
For example, the following object keeps the valid en entry and drops the unsupported xx key:
When an invalid entry is dropped, the SDK instruments the event so you can detect it in your logs.

Validation messages and form errors

You can also override validation copy. For example, the email and phone form validation keys live under dyn_login:
Other common validation keys include:
  • dyn_login.email_form.validation
  • dyn_login.phone_number_form.validation
  • dyn_login.phone_number_form.too_short
  • dyn_active_wallet_info.testnet_warning
  • dyn_send.error.invalid_balance

Runtime language changes

You can switch the active language at runtime after the SDK has initialized. Use the LocaleLanguage enum so only supported codes can be passed.
The WebView loads the translations provided for that language and falls back to en for any missing keys.

Complete example

Troubleshooting

  • Overrides do not appear: Make sure the language code is supported (LocaleLanguage enum or a valid top-level key) and the key path matches the dot-separated copy key exactly.
  • Invalid language is ignored: The webview controller drops unsupported top-level language keys. Check that you are using one of the 17 supported codes.
  • Entire locale is ignored: If the root value is not a valid object, the whole locale is discarded. Ensure locale is wrapped in AnyCodable and the underlying value is a dictionary.
Last modified on August 6, 2026