> Toden documentation. For the full index fetch /llms.txt. Every page is available as Markdown by appending .md to its URL. Identity verification uses /api/kyc, Risk Intelligence uses /api/v1; they are separate contracts with different error shapes. Never invent an endpoint, field or enum value: read the API reference page for the operation first.

# Supported languages

> The languages of Toden's applicant-facing screens in the React, React Native and Flutter SDKs and on hosted pages, and how to supply your own translations.

The applicant-facing screens ship in **English**. English is the built-in language in every SDK and on hosted pages, and it is the fallback for everything.

Other languages are supported by supplying your own wording through **custom texts**. Toden does not ship built-in translations today.

## At a glance

| Surface                                          | Built-in language | Your own translations                            | How the language is chosen      |
| ------------------------------------------------ | ----------------- | ------------------------------------------------ | ------------------------------- |
| Web SDK `@myazahq/kyc-sdk-react`                 | English           | Yes, with `texts`                                | `language` prop, default `en`   |
| React Native SDK `@myazahq/kyc-sdk-react-native` | English           | Yes, with `texts`                                | `language` option, default `en` |
| Flutter SDK `myaza_kyc_sdk_flutter`              | English           | Yes, with `texts`                                | `language` option, default `en` |
| Hosted verification pages                        | English           | English wording can be customised in the console | English                         |

> **Note**
>
> The SDKs do not switch language from the browser or device locale. The screens are shown in English unless your code sets `language`.

## How a text is resolved

For each piece of text, the SDK uses the first of these that exists:

1. Your custom text in the chosen language, when that language is not English.
2. Your custom English text.
3. The built-in English text.

So a partial translation is safe. Any text you have not translated is shown in English and nothing is left blank. A blank custom text counts as not set.

## Show another language

Pass your translations as `texts`, keyed by language and then by text key, and set `language` to the one to show. Language codes are written like `en`, `fr` or `pt-BR`.

#### React

```tsx
<MyazaKYC
  apiKey="pk_test_..."
  workflowId="wf_..."
  language="fr"
  texts={{
    fr: {
      'common.continue': 'Continuer',
      'welcome.title': 'Vérifions votre identité',
    },
  }}
/>
```

#### React Native

```tsx
const config = {
  // ...your existing options
  language: 'fr',
  texts: {
    fr: {
      'common.continue': 'Continuer',
      'welcome.title': 'Vérifions votre identité',
    },
  },
};
```

#### Flutter

```dart
// Inside your existing KYC configuration
language: 'fr',
texts: {
  'fr': {
    'common.continue': 'Continuer',
    'welcome.title': 'Vérifions votre identité',
  },
},
```

A common pattern is to read the language your own app is already using and pass it as `language`, so the verification matches the rest of your product.

See the SDK guides for where these options sit in each setup: [React](/integrate/sdks/react), [React Native](/integrate/sdks/react-native) and [Flutter](/integrate/sdks/flutter).

## Text keys

Each text has a stable key such as `welcome.title` or `common.continue`.

* **Web:** the catalogue is exported from `@myazahq/kyc-sdk-react/texts` as `TEXT_GROUPS`, with the default wording in `DEFAULT_TEXTS`.
* **Flutter:** the customisable keys are exported as `kCustomisableTextKeys`.
* **Console:** the **Texts** tab in Workflow Settings lists every text the workflow can show, with its default.

Only a curated set of texts can be replaced: screen titles and descriptions, explanations and checklists, field labels, helper lines, liveness instructions, outcome messages and buttons. A text for any other key is ignored.

## What is always English

These keep the built-in English wording in every language:

* Error and system messages.
* Loading and status lines.
* Input placeholders.
* The legal and consent notice.
* Any text that has a value filled in by the SDK.

Plan for this if your applicants do not read English. The main path through a verification can be fully translated, but an error message will still appear in English.

## Texts set in the console

A workflow can carry custom wording, edited in the console under **Workflow Settings**, **Texts**. That editor writes English. The workflow's texts are delivered to the SDKs and to hosted pages with the rest of the workflow.

* When a workflow is used, its texts are the ones the SDK reads.
* The `language` option is set in your code. It is not a workflow setting.
* Hosted pages have no language option, so they show English, with your custom English wording where you have set it.

If you need a hosted page in another language, tell us at [hello@toden.co](mailto:hello@toden.co). Until then, embed the flow with an SDK and pass `language` and `texts`.

See [Your brand and your domain](/get-started/console/white-label) for the Texts editor and the conditions for adding custom wording.

## Spoken guidance

During the liveness step the SDKs can read instructions aloud. The `voiceGuidance` option accepts a `language` such as `en-US` or `fr-FR`, which selects the voice. The words spoken are still the English instruction.

## Limits

| Limit                  | Value            |
| ---------------------- | ---------------- |
| Languages per workflow | 10               |
| Length of one text     | 1,000 characters |

## Other languages in the product

* The console, API responses, error codes and webhook payloads are in English.
* Names on identity documents are compared after normalising accents and common transliterations. That is unrelated to the screen language.