# Add localization to Flow for mobile
By default, the language displayed on Flow is derived from the locale set in the `payment-session` request.
Alternatively, you can use the `locale` [configuration option](https://www.checkout.com/docs/payments/accept-payments/accept-a-payment-on-your-mobile-app/get-started-with-flow-for-mobile.md#Configuration_options) to manually set the language in the configuration. For example:
**Android**
```kotlin
val configuration = CheckoutComponentConfiguration(
context = context,
paymentSession = paymentSession,
publicKey = publicKey,
environment = environment,
locale = Locale.En
)
```
**iOS**
```swift
let configuration = try await CheckoutComponents.Configuration(
paymentSession: paymentSession,
publicKey: publicKey,
environment: environment,
appearance: appearance,
locale: "en-GB",
callbacks: callbacks
)
```
---
## Supported languages
The following left-to-right (LTR) and right-to-left (RTL) languages are supported:
**Android**
| Language | Android locale | Language type |
| --- | --- | --- |
| Arabic | `Locale.Ar` | `RTL` |
| Chinese (China) | `Locale.Zh` | `LTR` |
| Chinese (Hong Kong) | `Locale.ZhHk` | `LTR` |
| Chinese (Taiwan) | `Locale.ZhTw` | `LTR` |
| Danish | `Locale.Da` | `LTR` |
| Dutch (Netherlands) | `Locale.Nl` | `LTR` |
| English (United Kingdom) | `Locale.En` | `LTR` |
| Filipino | `Locale.Fil` | `LTR` |
| Finnish | `Locale.Fi` | `LTR` |
| French | `Locale.Fr` | `LTR` |
| German | `Locale.De` | `LTR` |
| Greek | `Locale.El` | `LTR` |
| Hindi | `Locale.Hi` | `LTR` |
| Indonesian | `Locale.Id` | `LTR` |
| Italian | `Locale.It` | `LTR` |
| Japanese | `Locale.Ja` | `LTR` |
| Malay | `Locale.Ms` | `LTR` |
| Norwegian Bokmål | `Locale.Nb` | `LTR` |
| Portuguese | `Locale.Pt` | `LTR` |
| Spanish | `Locale.Es` | `LTR` |
| Swedish | `Locale.Sv` | `LTR` |
| Thai | `Locale.Th` | `LTR` |
| Vietnamese | `Locale.Vi` | `LTR` |
**iOS**
| Language | iOS locale | Language type |
| --- | --- | --- |
| Arabic | `ar` | `RTL` |
| Chinese (China) | `zh-CN` | `LTR` |
| Chinese (Hong Kong) | `zh-HK` | `LTR` |
| Chinese (Taiwan) | `zh-TW` | `LTR` |
| Danish | `da-DK` | `LTR` |
| Dutch (Netherlands) | `nl-NL` | `LTR` |
| English (United Kingdom) | `en-GB` | `LTR` |
| Filipino | `fil-PH` | `LTR` |
| Finnish | `fi-FI` | `LTR` |
| French | `fr-FR` | `LTR` |
| German | `de-DE` | `LTR` |
| Greek | `el` | `LTR` |
| Hindi | `hi-IN` | `LTR` |
| Indonesian | `id-ID` | `LTR` |
| Italian | `it-IT` | `LTR` |
| Japanese | `ja-JP` | `LTR` |
| Malay | `ms-MY` | `LTR` |
| Norwegian Bokmål | `nb-NO` | `LTR` |
| Portuguese | `pt-PT` | `LTR` |
| Spanish | `es-ES` | `LTR` |
| Swedish | `sv-SE` | `LTR` |
| Thai | `th-TH` | `LTR` |
| Vietnamese | `vi-VN` | `LTR` |
## Add custom translations
You can customize the default text translation for a specific language by providing your own strings.
1. Create a `translations` object and specify the `locale` for which you want to provide custom translations. Within the locale object, include the translation keys you want to customize, along with their values. For example:
**Android**
```kotlin
val translations = mapOf(
Locale.En to mapOf(
ComponentTranslationKey.FormRequired to "Please provide this field",
ComponentTranslationKey.PayButtonPay to "Pay Now",
ComponentTranslationKey.PaymentDeclinedTryAgain to "Payment failed, please try again",
)
)
```
**iOS**
```swift
let translations = [
"en-GB": [
.formRequired: "Please provide this field",
.payButtonPay: "Pay Now",
.paymentDeclinedTryAgain: "Payment failed, please try again"
]
]
```
2. Pass the `translations` object when you create the instance of `configuration`.
**Android**
```kotlin
val configuration = CheckoutComponentConfiguration(
context = context,
paymentSession = paymentSession,
publicKey = publicKey,
environment = environment,
translations =translations,
)
```
**iOS**
```swift
let configuration = try await CheckoutComponents.Configuration(
paymentSession: paymentSession,
publicKey: publicKey,
environment: environment,
appearance: appearance,
locale: "en-US",
translations: translations,
callbacks: callbacks
)
```
You can customize the following default text:
**Android**
| Translation key | Default text | Description |
| --- | --- | --- |
| `AddressAddressLine1` | Address line 1 | The label for the first line of the address. |
| `AddressAddressLine2` | Address line 2 | The label for the second line of the address. |
| `AddressBillingAdd` | Add billing address | The label for the button to add a billing address. |
| `AddressCity` | Town or City | The label for the city input field. |
| `AddressCountry` | Country | The label for the country selection field. |
| `AddressCountrySelect` | Select Country | The title for the country selection screen. |
| `AddressEditAddress` | Edit address | The button text for editing an existing address. |
| `AddressState` | State or province | The label for the state/province input field. |
| `AddressZip` | ZIP or postal code | The label for the ZIP/postal code input field. |
| `Card` | Card | The label for the card option. |
| `CardAddressUseShippingAsBilling` | Use shipping address as billing address | The label for the checkbox to use the shipping address as the billing address. |
| `CardHolderName` | Cardholder name | The label for the cardholder name input. |
| `CardNumber` | Card number | The card number label for the card number input. |
| `CardNumberInvalid` | Card number is incomplete | The error message displayed when the card number is incomplete. |
| `CardNumberNotSupported` | `%s` not supported | The error message displayed when the card number is from an unsupported card scheme. |
| `CardExpiryDate` | Expiry date | The label for the card expiry date input. |
| `CardExpiryDateInvalid` | Expiry date is in the past | The error message displayed when the card expiry date is invalid. |
| `CardExpiryDateIncomplete` | Expiry date is incomplete | The error message displayed when the card expiry date is incomplete. |
| `CardExpiryDatePlaceholderMonth` | MM | The message describing the format for the card expiry month input. |
| `CardExpiryDatePlaceholderYear` | YY | The message describing the format for the card expiry year input. |
| `CardSecurityCode` | Security code | The security code label for the card security code (CVV) input. |
| `CardSecurityCodeInvalid` | Security code is incomplete | The error message displayed when the security code (CVV) is incomplete. |
| `CardSecurityCodePlaceholder` | CVV | The message describing the format for the card security code input. |
| `CardStoreForFutureUseCollectConsent` | Save card details for future purchases | The label for the save-card consent checkbox shown when `store_payment_details` is set to `collect_consent` and Remember Me is not available. |
| `BUTTON_CHANGE` | Change | Used by the Remember Me wallet to switch the selected saved card or payment method. |
| `STORED_CARD` | Saved cards | The heading for the list of a customer's stored cards. |
| `STORED_CARD_USE_NEW_CARD` | Use a new card | Label for the option to enter a new card instead of using a stored card. |
| `STORED_CARD_OTHER_PAYMENT_METHODS` | Other payment methods | The heading for the payment methods offered alongside a customer's stored cards. |
| `savedCardsHeader` | Saved cards | The heading for the list of a customer's stored cards. |
| `otherPaymentMethodsHeader` | Other payment methods | The heading for the payment methods offered alongside a customer's stored cards. |
| `useNewCard` | Use a new card | Label for the option to enter a new card instead of using a stored card. |
| `change` | Change | Used by the Remember Me wallet to switch the selected saved card or payment method. |
| `storeForFutureUseCollectConsent` | Save card details for future purchases | The label for the save-card consent checkbox shown when `store_payment_details` is set to `collect_consent` and Remember Me is not available. |
| `cardTypeCredit` | Credit | Text displayed for a credit card. |
| `cardTypeCharge` | Charge | Text displayed for a charge card. |
| `cardTypeDebit` | Debit | Text displayed for a debit card. |
| `cardTypeNotSupported` | `{Card type}` cards not supported | Error message displayed when the card type is not supported. |
| `cardTypePrepaid` | Prepaid | Text displayed for a prepaid card. |
| `deferredDebit` | Deferred Debit | Text displayed for a deferred debit card. |
| `FormAddAddress` | Add address | The button text for adding an address. |
| `FormEmailFormatInvalid` | Incorrect email format | The validation message when an email address is in an invalid format. |
| `FormExceedCharacterLimit` | Exceeds {VALUE} character limit | The validation message when input exceeds the maximum character limit, where {VALUE} is replaced with the actual limit number. |
| `FormFirstName` | First name | The label for the first name input field. |
| `FormFullName` | Full name | The label for the full name input field. |
| `FormInsufficientCharacters` | Insufficient characters | The validation message when input doesn't meet minimum character requirements. |
| `FormGreaterThan` | Must be greater than `{minimum_characters}` characters | The validation message when input is shorter than the minimum required length. |
| `FormLastName` | Last name | The label for the last name input field. |
| `FormNoMatchesFound` | No matches found | The message displayed when a search returns no results. |
| `FormOptional` | Optional | The label indicating that a field is not required. |
| `FormPhoneNumberFormatInvalid` | Must be a valid phone number | The error message displayed when the phone number is invalid. |
| `FormRequired` | This field is required | The validation message displayed when the customer leaves a required field blank. |
| `FormSearch` | Search | The placeholder text for search inputs. |
| `FormTrySearchingWithAnotherTerm` | Try searching with another term. | The suggestion shown when no search results are found. |
| `OtpCode` | Enter your verification code | Label for the one-time password (OTP) verification code input field. |
| `OtpCodeDescription` | Enter the verification code sent to | Instruction text prompt for the OTP verification code, with dynamic contact method. |
| `OtpCodeDescriptionEmail` | Enter the verification code sent to your email | Instruction text prompt for the OTP verification code sent via email. |
| `OtpCodeDescriptionPhone` | Enter the verification code sent via SMS | Instruction text prompt for the OTP verification code sent via SMS. |
| `OtpCodeDescriptionWhatsapp` | Enter the verification code sent via WhatsApp | Instruction text prompt for the OTP verification code sent via WhatsApp. |
| `OtpCodeEmail` | Send code via email | Button text to send OTP verification code via email. |
| `OtpCodeError` | Incorrect verification code. Try again. | Error message displayed when the OTP verification code entered is incorrect. |
| `OtpCodeExpired` | The code has expired. Request a new one. | Error message displayed when the OTP verification code entered is expired. |
| `OtpCodePhone` | Send code via SMS | Button text to send OTP verification code via SMS. |
| `OtpCodeSend` | We send a verification code to the customer. | Message indicating where OTP verification code will be sent. |
| `OtpSendPhone` | Send verification SMS | Call to action for sending the OTP verification code via SMS. |
| `OtpSendingPhone` | Sending verification SMS | Loading label shown on the primary button while the verification SMS is being dispatched (phone-entry loading state, before the OTP appears). |
| `OtpCodeWhatsapp` | Send code via WhatsApp | Button text to send OTP verification code via WhatsApp. |
| `OtpDifferentMethod` | Try a different method | Button text to try a different OTP verification method. |
| `OtpMaxResends` | Max resends reached | Error message displayed when the maximum number of resend attempts has been reached. |
| `OtpMaxRetries` | Max retries reached | Error message displayed when the maximum number of retries has been reached. |
| `OtpResendCountdown` | Resend a code in %1$ss | Countdown text showing the time remaining before the OTP verification code can be resent. |
| `OtpResendCta` | Resend code | Button text for resending the OTP verification code. |
| `OtpResendDescription` | Didn't receive the code? | Description text asking if the user did not receive the OTP verification code. |
| `OtpResendEmail` | Send via email instead | Button text to send OTP verification code via email instead. |
| `OtpResendPhone` | Send to SMS instead | Button text to send OTP verification code via SMS instead. |
| `PayButtonConfirm` | Confirm | The label for the _Confirm_ button. |
| `PayButtonPay` | Pay | The call to action displayed on the pay button. |
| `PayButtonPaymentComplete` | Payment complete | The message displayed when the payment is completed. |
| `PayButtonPaymentProcessing` | Payment processing | The message displayed while the payment is processing. |
| `PayButtonRedirectCta` | After clicking on Pay, you will be redirected to finalise your payment | Informational message shown alongside the Pay button for payment methods that require a redirect to complete the payment. |
| `PaymentDeclinedInvalidCustomerData` | Incorrect details – try again or use another payment method | The error message displayed when the customer provides invalid payment details. |
| `PaymentDeclinedInvalidPaymentSessionData` | Try another payment method | The error message displayed when the `PaymentSession` data provided is invalid for the chosen payment method. This exists to cover edge cases and should not occur. |
| `PaymentDeclinedMerchantMisconfiguration` | Payment declined – try another payment method | The error message displayed when your integration is misconfigured for the chosen payment method. |
| `PaymentDeclinedNotEnoughFunds` | Not enough funds – try another payment method | The error message displayed when the customer does not have sufficient funds to complete the transaction with their chosen payment method. |
| `PaymentDeclinedTryAgain` | Payment declined – try again or use another payment method | The fallback message displayed when the chosen payment method declines the transaction. |
| `PaymentDeclinedExpired` | Payment expired | Error message displayed when the payment expired before it could be completed. |
| `PaymentDeclinedCancelled` | Payment cancelled | Error message displayed when the payment was cancelled. |
| `PaymentContextError` | Something went wrong. Try another payment method. | Error message displayed when creating the payment context fails (for example, a network error) before the customer can proceed. |
| `CustomerPhoneNumberNotRegistered` | Phone number not registered | Error message displayed when the customer's phone number is not registered with the chosen payment method. |
| `PreferredSchemeCta` | Choose your preferred scheme | The label for selecting the preferred scheme. |
| `PreferredSchemeDescription` | Your card offers two schemes, and you can select the one you prefer. Otherwise, the default choice will apply. | A message prompting the customer to select their preferred scheme. |
| `RememberMeModalCta` | Get to know us | Call-to-action text for the Remember Me modal. |
| `RememberMeUseSavedDetails` | Use your saved details | Text prompting user to use their saved payment details. |
| `RememberMeModalCta` | Get to know us | Call-to-action text for the Remember Me modal. |
| `RememberMeUseSavedDetails` | Use your saved details | Text prompting user to use their saved payment details. |
**iOS**
| Translation key | Default text | Description |
| --- | --- | --- |
| `addAddress` | Add address | The button text for adding an address. |
| `addBillingAddress` | Add billing address | The label for the button to add a billing address. |
| `addCard` | Add card | Label for adding a new card. |
| `address` | Address | The general label for an address. |
| `addAddress` | Add address | The button text for adding an address. |
| `addBillingAddress` | Add billing address | The label for the button to add a billing address. |
| `addCard` | Add card | Label for adding a new card. |
| `address` | Address | The general label for an address. |
| `address` | Address | The general label for an address. |
| `addressAddressLine1` | Address line 1 | The label for the first line of the address. |
| `addressAddressLine2` | Address line 2 | The label for the second line of the address. |
| `addressBillingAdd` | Add billing address | The label for the button to add a billing address. |
| `addressCity` | Town or City | The label for the city input field. |
| `addressCountry` | Country | The label for the country selection field. |
| `addressCountrySelect` | Select Country | The title for the country selection screen. |
| `addressEditAddress` | Edit address | The button text for editing an existing address. |
| `addressLine1` | Address line 1 | The label for the first line of the address. |
| `addressLine2` | Address line 2 | The label for the second line of the address. |
| `addressLine1` | Address line 1 | The label for the first line of the address. |
| `addressLine2` | Address line 2 | The label for the second line of the address. |
| `addressSelectCountryCode` | Select country code | The label for selecting a country calling code for phone numbers. |
| `addressState` | State or province | The label for the state/province input field. |
| `addressZip` | ZIP or postal code | The label for the ZIP/postal code input field. |
| `billingAddress` | Billing Address | The label for the billing address section. |
| `billingAddress` | Billing Address | The label for the billing address section. |
| `card` | Card | The label for the card option. |
| `billingAddress` | Billing Address | The label for the billing address section. |
| `card` | Card | The label for the card option. |
| `card` | Card | The label for the card option. |
| `cardAddressUseShippingAsBilling` | Use shipping address as billing address | The label for the checkbox to use the shipping address as the billing address. |
| `cardExpiryDate`
`cardExpiryDate` | Expiry date
Expiry date | The label for the card expiry date input.
The label for the card expiry date input. |
| `cardExpiryDate`
`cardExpiryDate` | Expiry date
Expiry date | The label for the card expiry date input.
The label for the card expiry date input. |
| `cardExpiryDateIncomplete`
`cardExpiryDateIncomplete` | Expiry date is incomplete
Expiry date is incomplete | The error message displayed when the card expiry date is incomplete.
The error message displayed when the card expiry date is incomplete. |
| `cardExpiryDateIncomplete`
`cardExpiryDateIncomplete` | Expiry date is incomplete
Expiry date is incomplete | The error message displayed when the card expiry date is incomplete.
The error message displayed when the card expiry date is incomplete. |
| `cardExpiryDateInvalid`
`cardExpiryDateInvalid` | Expiry date is in the past
Expiry date is in the past | The error message displayed when the card expiry date is invalid.
The error message displayed when the card expiry date is invalid. |
| `cardExpiryDateInvalid` | Expiry date is in the past | The error message displayed when the card expiry date is invalid. |
| `cardExpiryDatePlaceholderMonth`
`cardExpiryDatePlaceholderMonth` | MM
MM | The message describing the format for the card expiry month input.
The message describing the format for the card expiry month input. |
| `cardExpiryDatePlaceholderMonth` | MM | The message describing the format for the card expiry month input. |
| `cardExpiryDatePlaceholderYear` | YY | The message describing the format for the card expiry year input. |
| `cardExpiryDatePlaceholderYear` | YY | The message describing the format for the card expiry year input. |
| `cardHolderName` | CardHolder name | The label for the cardholder name input. |
| `cardHolderName` | Cardholder name | The label for the cardholder name input. |
| `cardNumber` | Card number | The card number label for the card number input. |
| `cardNumber` | Card number | The card number label for the card number input. |
| `cardNumberIncomplete` | Card number is incomplete | The error message displayed when the card number is incomplete. |
| `cardNumberInvalid` | Card number is invalid | The error message displayed when the card number is invalid. |
| `cardNumberNotSupported` | `{card_number}` not supported | The error message displayed when the card number is from an unsupported card scheme. |
| `cardNotSupported` | Card not supported | The error message displayed when the card is from an unsupported card scheme. |
| `cardSecurityCode` | Security code | The security code label for the card security code (CVV) input. |
| `cardSecurityCode` | Security code | The security code label for the card security code (CVV) input. |
| `cardSecurityCodeInvalid` | Security code is incomplete | The error message displayed when the security code (CVV) is incomplete. |
| `cardSecurityCodeInvalid` | Security code is incomplete | The error message displayed when the security code (CVV) is incomplete. |
| `cardSecurityCodeInvalid` | Security code is incomplete | The error message displayed when the security code (CVV) is incomplete. |
| `cardSecurityCodePlaceholder` | CVV | The message describing the format for the card security code input. |
| `cardSecurityCodePlaceholder` | CVV | The message describing the format for the card security code input. |
| `city` | Town or City | The label for the city input field. |
| `cardSecurityCodePlaceholder` | CVV | The message describing the format for the card security code input. |
| `cardTypeCredit` | Credit | Text displayed for a credit card. |
| `cardTypeCharge` | Charge | Text displayed for a charge card. |
| `cardTypeDebit` | Debit | Text displayed for a debit card. |
| `cardTypeNotSupported` | `{Card type}` cards not supported | Error message displayed when the card type is not supported. |
| `cardTypePrepaid` | Prepaid | Text displayed for a prepaid card. |
| `city` | Town or City | The label for the city input field. |
| `confirm` | Confirm | The label for the confirm button. |
| `confirm` | Confirm | The label for the confirm button. |
| `country` | Country | The label for the country selection field. |
| `default` | Default | Tag indicating the default payment method. |
| `deferredDebit` | Deferred Debit | Text displayed for a deferred debit card. |
| `edit` | Edit | Label for the edit action. |
| `editAddress` | Edit address | The button text for editing an existing address. |
| `confirm` | Confirm | The label for the confirm button. |
| `country` | Country | The label for the country selection field. |
| `default` | Default | Tag indicating the default payment method. |
| `edit` | Edit | Label for the edit action. |
| `editAddress` | Edit address | The button text for editing an existing address. |
| `email` | Email | The label for the email input field. |
| `email` | Email | The label for the email input field. |
| `emailFormatInvalid` | Incorrect email format | The validation message when an email address is in an invalid format. |
| `expired` | Expired | Tag indicating the payment method has expired. |
| `firstName` | First name | The label for the first name input field. |
| `email` | Email | The label for the email input field. |
| `emailFormatInvalid` | Incorrect email format | The validation message when an email address is in an invalid format. |
| `expired` | Expired | Tag indicating the payment method has expired. |
| `firstName` | First name | The label for the first name input field. |
| `formAddAddress` | Add Address | The button text for adding an address. |
| `formEmailFormatInvalid` | Incorrect email format | The validation message when an email address is in an invalid format. |
| `formFirstName` | First name | The label for the first name input field. |
| `formFullName` | Full name | The label for the full name input field. |
| `formInsufficientCharacters` | Insufficient characters | The validation message when input doesn't meet minimum character requirements. |
| `formLastName` | Last name | The label for the last name input field. |
| `formNoMatchesFound` | No matches found | The message displayed when a search returns no results. |
| `formOptional` | Optional | The label indicating that a field is not required. |
| `formPhoneNumberFormatInvalid` | Must be a valid phone number | The error message displayed when the phone number is invalid. |
| `formRequired` | This field is required | The validation message displayed when the customer does not provide a value for a required field. |
| `formRequired` | This field is required | The validation message displayed when the customer leaves a required field blank. |
| `formSearch` | Search | The placeholder text for search inputs. |
| `formTrySearchingWithAnotherTerm` | Try searching with another term. | The suggestion shown when no search results are found. |
| `insufficientCharacters` | Insufficient characters | The validation message when input does not meet the minimum character requirements. |
| `lastName` | Last name | The label for the last name input field. |
| `logout` | Logout | Label for the action to sign out. |
| `noMatchesFound` | No matches found | The message displayed when a search does not return any results. |
| `optional` | Optional | The label indicating that a field is not required. |
| `otpCode` | Enter your verification code | Label for the OTP verification code input field. |
| `otpCodeDescription` | Enter the verification code sent to | Instruction text for entering the OTP verification code with dynamic contact method. |
| `otpCodeDescriptionEmail` | Enter the verification code sent to your email | Instruction text prompt to enter the OTP verification code sent via email. |
| `otpCodeDescriptionPhone` | Enter the verification code sent via SMS | Instruction text prompt to enter the OTP verification code sent via SMS. |
| `otpCodeDescriptionWhatsapp` | Enter the verification code sent via WhatsApp | Instruction text prompt to enter the OTP verification code sent via WhatsApp. |
| `otpCodeEmail` | Send code via email | Button text to send verification code via email. |
| `otpCodeError` | Incorrect verification code. Try again. | Error message displayed when the OTP verification code entered is incorrect. |
| `otpCodeExpired` | The code has expired. Request a new one. | Error message displayed when the OTP verification code entered is expired. |
| `otpCodePhone` | Send code via SMS | Button text to send verification code via SMS. |
| `otpCodeSend` | We'll send a verification code to | Message indicating where the OTP verification code will be sent. |
| `otpCodeWhatsapp` | Send code via WhatsApp | Button text to send OTP verification code via WhatsApp. |
| `otpDifferentMethod` | Try a different method | Button text to try a different verification method. |
| `otpMaxResends` | Max resends reached | Error message displayed when the maximum number of resend attempts has been reached. |
| `otpMaxRetries` | Max retries reached | Error message displayed when the maximum number of retries has been reached. |
| `otpResendCta` | Resend code | Button text for resending the verification code. |
| `otpResendCountdown` | Resend a code in | Countdown text showing the time remaining before the OTP verification code can be resent. |
| `otpResendDescription` | Didn't receive the code? | Description text asking if the user did not receive the OTP verification code. |
| `otpResendEmail` | Send via email instead | Button text to send OTP verification code via email instead. |
| `otpResendPhone` | Send to SMS instead | Button text to send OTP verification code via SMS instead. |
| `otpSendPhone` | Send verification SMS | Call to action to send the verification code by SMS (for example, the primary button on a phone-entry step before an OTP is sent). |
| `otpSendingPhone` | Sending verification SMS | Loading label shown on the primary button while the verification SMS is being dispatched. |
| `payButtonPay` | Pay | The call to action displayed on the pay button. |
| `payButtonPay` | Pay | The call to action displayed on the pay button. |
| `payButtonPaymentComplete` | Payment complete | The message displayed when the payment is completed. |
| `payButtonPaymentComplete` | Payment complete | The message displayed when the payment is completed. |
| `payButtonPaymentProcessing` | Payment processing | The message displayed while the payment is processing. |
| `payButtonPaymentComplete` | Payment complete | The message displayed when the payment is completed. |
| `payButtonPaymentProcessing` | Payment processing | The message displayed while the payment is processing. |
| `payButtonPaymentProcessing` | Payment processing | The message displayed while the payment is processing. |
| `payButtonRedirectCta` | After clicking on Pay, you will be redirected to finalise your payment | Informational message shown alongside the Pay button for payment methods that require a redirect to complete the payment. |
| `paymentDeclinedInvalidCustomerData` | Incorrect details – try again or use another payment method | The error message displayed when the customer provides invalid payment details. |
| `paymentDeclinedInvalidCustomerData` | Incorrect details – try again or use another payment method | The error message displayed when the customer provides invalid payment details. |
| `paymentDeclinedInvalidCustomerData` | Incorrect details – try again or use another payment method | The error message displayed when the customer provides invalid payment details. |
| `paymentDeclinedInvalidPaymentSessionData` | Try another payment method | The error message displayed when the `PaymentSession` data provided is invalid for the chosen payment method. This exists to cover edge cases and should not occur. |
| `paymentDeclinedInvalidPaymentSessionData` | Try another payment method | The error message displayed when the `PaymentSession` data provided is invalid for the chosen payment method. |
| `paymentDeclinedMerchantMisconfiguration` | Payment declined – try another payment method | The error message displayed when your integration is misconfigured for the chosen payment method. |
| `paymentDeclinedMerchantMisconfiguration` | Payment declined – try another payment method | The error message displayed when your integration is misconfigured for the chosen payment method. |
| `paymentDeclinedNotEnoughFunds` | Not enough funds – try another payment method | The error message displayed when the customer does not have sufficient funds to complete the transaction with the chosen payment method. |
| `paymentDeclinedNotEnoughFunds` | Not enough funds – try another payment method | The error message displayed when the customer does not have sufficient funds to complete the transaction with their chosen payment method. |
| `paymentDeclinedTryAgain` | Payment declined – try again or use another payment method | The fallback message displayed when the chosen payment method declines the transaction. |
| `paymentDeclinedNotEnoughFunds` | Not enough funds – try another payment method | The error message displayed when the customer does not have sufficient funds to complete the transaction with their chosen payment method. |
| `paymentDeclinedTryAgain` | Payment declined – try again or use another payment method | The fallback message displayed when the chosen payment method declines the transaction. |
| `paymentDeclinedTryAgain` | Payment declined – try again or use another payment method | The fallback message displayed when the chosen payment method declines the transaction. |
| `phoneNumber` | Phone number | The label for the phone number input field. |
| `customerPhoneNotRegistered` | Phone number not registered | Error message displayed when the phone number is not registered with stc pay. |
| `paymentDeclinedPaymentExpired` | Payment expired | Error message displayed when the payment transaction has expired. |
| `paymentContextError` | Something went wrong. Try another payment method. | Fallback error message displayed when the payment context step fails with no specific reason. |
| `phoneNumber` | Phone number | The label for the phone number input field. |
| `phoneNumber` | Phone number | The label for the phone number input field. |
| `preferredSchemeCta` | Choose your preferred scheme | The label for selecting the preferred scheme. |
| `preferredSchemeCta` | Choose your preferred scheme | The label for selecting the preferred scheme. |
| `preferredSchemeCta` | Choose your preferred scheme | The label for selecting the preferred scheme. |
| `preferredSchemeDescription`
`preferredSchemeDescription` | Your card offers two schemes, and you can select the one you prefer. Otherwise, the default choice will apply. | A message prompting the customer to select their preferred scheme. |
| `preferredSchemeDescription` | Your card offers two schemes, and you can select the one you prefer. Otherwise, the default choice will apply. | A message prompting the customer to select their preferred scheme. |
| `rememberMeModalCta` | Get to know us | Call-to-action text for the Remember Me modal. |
| `rememberMeUseSavedDetails` | Use your saved details | Text prompting user to use their saved payment details. |
| `saveCardDetails` | Save card details to check out faster everywhere Checkout.com is available | Label for saving card details for faster checkout. |
| `savedCardsHeader` | Saved cards | The heading for the list of a customer's stored cards. |
| `otherPaymentMethodsHeader` | Other payment methods | The heading for the payment methods offered alongside a customer's stored cards. |
| `useNewCard` | Use a new card | Label for the option to enter a new card instead of using a stored card. |
| `search` | Search | The placeholder text for search inputs. |
| `selectCountry` | Select Country | The title for the country selection screen. |
| `selectState` | Select state | The label for selecting state. |
| `setDefaultPaymentMethod` | Set as the default way to pay with Checkout.com | Label for setting the default payment method. |
| `state` | State or province | The label for the state/province input field. |
| `trySearchingWithAnotherTerm` | Try searching with another term. | The suggestion shown when no search results are found. |
| `useDifferentPaymentMethod` | Use a different payment method | Label for using a different payment method. |
| `useSavedPaymentMethod` | Use a saved payment method | Label for using a saved payment method. |
| `useShippingAsBilling` | Use shipping address as billing address | The label for the checkbox to use the shipping address as the billing address. |
| `zip` | ZIP or postal code | The label for the ZIP/postal code input field. |
| `preferredSchemeDescription` | Your card offers two schemes, and you can select the one you prefer. Otherwise, the default choice will apply. | A message prompting the customer to select their preferred scheme. |
| `rememberMeModalCta` | Get to know us | Call-to-action text for the Remember Me modal. |
| `rememberMeUseSavedDetails` | Use your saved details | Text prompting user to use their saved payment details. |
| `saveCardDetails` | Save card details to check out faster everywhere Checkout.com is available | Label for saving card details for faster checkout. |
| `search` | Search | The placeholder text for search inputs. |
| `selectCountry` | Select Country | The title for the country selection screen. |
| `selectState` | Select state | The label for selecting state. |
| `setDefaultPaymentMethod` | Set as the default way to pay with Checkout.com | Label for setting the default payment method. |
| `state` | State or province | The label for the state/province input field. |
| `trySearchingWithAnotherTerm` | Try searching with another term. | The suggestion shown when no search results are found. |
| `useDifferentPaymentMethod` | Use a different payment method | Label for using a different payment method. |
| `useSavedPaymentMethod` | Use a saved payment method | Label for using a saved payment method. |
| `useShippingAsBilling` | Use shipping address as billing address | The label for the checkbox to use the shipping address as the billing address. |
| `zip` | ZIP or postal code | The label for the ZIP/postal code input field. |
---
## Add support for additional languages
To add support for locales and languages not natively supported by Flow for mobile, provide the locale as an object of key-value pairs within the same `translations` object you used for custom translations. For example, to add support for US English (`en-US`):
**Android**
```kotlin
val translations = mapOf(
Locale.Customized(“en-US”) to mapOf(
ComponentTranslationKey.PayButtonPay to "Tap to Pay",
)
)
val configuration = CheckoutComponentConfiguration(
context = context,
paymentSession = paymentSession,
publicKey = publicKey,
environment = environment,
locale = Locale.Customized(“en-US”),
translations = translations
)
```
**iOS**
```swift
let translations = [
"en-US": [
.payButtonPay: "Tap to Pay"
]
]
let configuration = try await CheckoutComponents.Configuration(
paymentSession: paymentSession,
publicKey: publicKey,
environment: environment,
appearance: appearance,
locale: "en-US",
translations: translations,
callbacks: callbacks
)
```
> **Information**
>
> If you are missing a translation for the locale you provide, Flow will attempt to fall back to the language of the specified locale. If the locale language is not supported, Flow will fall back to English.
---
## Next steps
**[Flow library reference](https://www.checkout.com/docs/payments/accept-payments/accept-a-payment-on-your-mobile-app/flow-for-mobile-library-reference.md)**
See the configuration options and error handling steps for Flow for mobile.