> ## Documentation Index
> Fetch the complete documentation index at: https://primer.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Supported locales

> The full list of supported locales, and how to set one with the `locale` SDK option.

Primer Checkout supports multiple languages and automatically adapts the checkout UI to the shopper's locale.

## Supported Locales

Primer Checkout supports the following locales. If a specific regional variant is not supported, it falls back gracefully to the closest available language.

| Locale | Language | Platforms |
| - | - | - |
| `ar` | Arabic | All |
| `az` | Azerbaijani | iOS, Android |
| `bg` | Bulgarian | All |
| `bs` | Bosnian | iOS, Android |
| `ca` | Catalan | All |
| `cs` | Czech | All |
| `da` | Danish | All |
| `de` | German | All |
| `el` | Greek | All |
| `en` | English | All |
| `es` | Spanish | All |
| `es-AR` | Spanish (Argentina) | All |
| `es-MX` | Spanish (Mexico) | All |
| `et` | Estonian | All |
| `fa` | Persian | iOS, Android |
| `fi` | Finnish | All |
| `fil` | Filipino | iOS, Android |
| `fr` | French | All |
| `he` | Hebrew | All |
| `hi` | Hindi | iOS, Android |
| `hr` | Croatian | All |
| `hu` | Hungarian | All |
| `hy` | Armenian | iOS, Android |
| `id` | Indonesian | All |
| `it` | Italian | All |
| `ja` | Japanese | All |
| `ka` | Georgian | iOS, Android |
| `kk` | Kazakh | iOS, Android |
| `ko` | Korean | All |
| `ku` | Kurdish | iOS, Android |
| `ky` | Kyrgyz | iOS, Android |
| `lt` | Lithuanian | All |
| `lv` | Latvian | All |
| `mk` | Macedonian | iOS, Android |
| `ms` | Malay | All |
| `nb` | Norwegian Bokmal | All |
| `nl` | Dutch | All |
| `nl-BE` | Dutch (Belgium) | iOS, Android |
| `pl` | Polish | All |
| `pt` | Portuguese | All |
| `pt-BR` | Portuguese (Brazil) | All |
| `ro` | Romanian | All |
| `ru` | Russian | All |
| `sk` | Slovak | All |
| `sl` | Slovenian | All |
| `sq` | Albanian | iOS, Android |
| `sr` | Serbian | All |
| `sv` | Swedish | All |
| `th` | Thai | All |
| `tr` | Turkish | All |
| `uk` | Ukrainian | All |
| `ur-PK` | Urdu (Pakistan) | iOS, Android |
| `uz` | Uzbek | iOS, Android |
| `vi` | Vietnamese | All |
| `zh-CN` | Chinese (Simplified) | All |
| `zh-HK` | Chinese (Hong Kong) | All |
| `zh-TW` | Chinese (Traditional) | All |

> [!NOTE]
>
> Locales marked **iOS, Android** are not yet available on Web. Regional variants automatically fall back to the base language — for example, `pl-PL` (Polish - Poland) will use `pl` (Polish) translations.

> [tab] Web
>
> Pass a locale to the SDK using the `options` property. See [SDK Options](https://primer.io/docs/checkout/primer-checkout/configuration/sdk-options.md) for details.
>
> Web supports all locales marked **All** in the table above. The remaining locales (marked **iOS, Android**) are coming soon.

> [tab] Android
>
> The SDK automatically adapts to the device's locale for field labels, error messages, button text, currency formatting, and date formatting. No additional configuration is required.
>
> Android supports all locales listed in the table above.

> [tab] iOS
>
> The SDK's text (field labels, error messages and button text) uses the language your app runs in. Amounts are formatted in the locale from `PrimerLocaleData` in `PrimerSettings`, which defaults to the device locale. No additional configuration is required.
>
> iOS supports all locales listed in the table above. To set the locale for amounts and for payment-provider pages such as redirect, Klarna and QR code methods, use `PrimerLocaleData` in `PrimerSettings`:
>
> ```swift theme={"dark"}
> private let primerSettings = PrimerSettings(
>   localeData: PrimerLocaleData(languageCode: "fr", regionCode: "FR")
> )
> ```

## Locale Fallback Behavior

> [tab] Web
>
> Primer Checkout Web uses [BCP 47](https://www.rfc-editor.org/info/bcp47) language tags and implements automatic fallback for regional variants.
>
> ### How it works
>
> 1. **Exact match**: The SDK first looks for an exact match (e.g., `pl-PL`)
> 2. **Base language fallback**: If no exact match exists, it falls back to the base language (e.g., `pl`)
> 3. **Default fallback**: If neither matches, it defaults to `en-GB`
>
> ### Usage
>
> Check [SDK options guide](https://primer.io/docs/checkout/primer-checkout/configuration/sdk-options.md#2-options-object) to learn how to pass a locale property.

> [tab] Android
>
> The Android SDK follows the standard Android locale resolution. The device's system locale is used automatically, and Compose's built-in layout mirroring handles RTL languages.
>
> ### Currency formatting
>
> The SDK formats amounts using the currency code from your client session:
>
> ```kotlin theme={"dark"}
> // With USD client session
> checkout.formatAmount(1000) // "$10.00"
>
> // With EUR client session
> checkout.formatAmount(1000) // "10,00 EUR"
>
> // With JPY client session (no minor units)
> checkout.formatAmount(1000) // "JPY1,000"
> ```
>
> ### RTL support
>
> The SDK supports right-to-left (RTL) layouts automatically when the device locale is set to an RTL language. Compose's built-in layout mirroring handles the directional adjustments.

> [tab] iOS
>
> The iOS SDK follows standard iOS localization. Its text uses the language your app runs in.
>
> ### How it works
>
> 1. **UI language**: Field labels, error messages and button text follow the language your app runs in
> 2. **Base language fallback**: If only the language matches (e.g., `en` for `en-AU`), the base language strings are used
> 3. **Default fallback**: If no match is found, English (`en`) is used as the fallback
> 4. **Amount formatting**: Amounts are formatted in the locale from `PrimerLocaleData` in `PrimerSettings`, which defaults to the device locale
>
> ### Setting the amount locale
>
> `PrimerLocaleData` sets the locale used to format amounts and the locale sent to payment-provider pages. It does not change the language of the SDK's text.
>
> ```swift theme={"dark"}
> private let primerSettings = PrimerSettings(
>   localeData: PrimerLocaleData(languageCode: "de", regionCode: "DE")
> )
> ```
>
> ### Currency formatting
>
> Use [`session.formatAmount(_:)`](https://primer.io/docs/sdk/ios-checkout/v3.0.0-beta/api/primer-checkout-session) to format an amount in minor units the way the SDK's own screens do. It uses the client session's currency and the locale from `PrimerLocaleData`, and returns `nil` until the session is ready.
>
> ```swift theme={"dark"}
> struct OrderTotal: View {
>   @ObservedObject var session: PrimerCheckoutSession
>
>   var body: some View {
>     if let total = session.clientSession?.totalAmount,
>        let formatted = session.formatAmount(total) {
>       Text("Total: \(formatted)")
>     }
>   }
> }
> ```
>
> ### RTL support
>
> The SDK supports right-to-left (RTL) layouts automatically when your app runs in an RTL language such as Arabic (`ar`) or Hebrew (`he`). The SDK applies your app's layout direction to its views, and SwiftUI's layout mirroring handles the directional adjustments.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.