Add localization to your Flow integration
Last updated: November 26, 2025
Flow derives the display language from the locale you provide in your payment-session request, by default.
Alternatively, you can use the locale configuration option to manually set the language in the CheckoutWebComponent. For example:
1const checkout = await CheckoutWebComponents({2paymentSession,3publicKey,4environment: 'sandbox',5locale: 'en',6});
The following left-to-right (LtR) and right-to-left (RtL) languages are supported:
| Language | Code | Language type |
|---|---|---|
Arabic |
| RtL |
Chinese (China) |
| LtR |
Chinese (Hong Kong) |
| LtR |
Chinese (Taiwan) |
| LtR |
Danish |
| LtR |
Dutch (Netherlands) |
| LtR |
English (United Kingdom) |
| LtR |
Filipino |
| LtR |
Finnish |
| LtR |
French |
| LtR |
German |
| LtR |
Greek |
| LtR |
Hindi |
| LtR |
Indonesian |
| LtR |
Italian |
| LtR |
Japanese |
| LtR |
Korean |
| LtR |
Malay |
| LtR |
Norwegian Bokmål |
| LtR |
Portuguese |
| LtR |
Spanish |
| LtR |
Swedish |
| LtR |
Thai |
| LtR |
Vietnamese |
| LtR |
You can customize the default text translation for a specific language by providing your own strings.
- Create a
translationsobject and specify thelocaleyou want to provide custom translations for. In thelocaleobject, provide the translation keys you want to customize, along with their values. For example:
1const translations = {2en: {3'form.required': 'Please provide this field',4'pay': 'Pay now',5'pay_button.payment_failed': 'Payment failed, please try again',6},7};
- Pass the
translationsobject when you create the instance ofCheckoutWebComponents.
1const checkout = await CheckoutWebComponents({2paymentSession,3publicKey,4environment: 'sandbox',5locale: 'en',6translations,7});
You can customize the following default text:
| Translation key | Default text | Description |
|---|---|---|
| Bank Account | The label for the bank account option. |
| Cancel | The label for the Cancel button. |
| Change | The label for the Change button. |
| Continue | The label for the Continue button. |
| Loading | The message displayed when loading additional information. |
| Card | The label for the card option. |
| Cardholder name | The label for the cardholder name input. |
| Card number | The label for the card number input. |
| Your card number is incomplete | The error message displayed when the card number is incomplete. |
| {CARD} not supported | The error message displayed when the card number is for an unsupported card scheme. |
| Expiry date | The label for the card expiry date input. |
| Your card's expiry date is in the past | The error message displayed when the card expiry date is invalid. |
| MM | The message describing the format of the card expiry month input. |
| YY | The message describing the format of the card expiry year input. |
| Choose your preferred scheme | The label for the preferred scheme selection. |
| "Your card offers two schemes, and you can select the one you prefer. Otherwise, the default choice applies." | The message prompting the customer to select their preferred scheme. |
| Security code | The label for the card verification value (CVV) input. |
| Your card's security code is incomplete | The error message displayed when the CVV is incomplete. |
| CVV | The message describing the format of the CVV input. |
| Save card details for future purchases | The label for the option to store card details for future purchases. |
| Remember this card | The call to action (CtA) message to remember card details for future use. |
| Phone number not registered | The error message displayed when the phone number is unregistered. |
| Edit | The label for the Edit button. |
| Email address | The label for the email input. |
| Must be a valid email | The error message displayed when the customer provides an invalid email. |
| The placeholder message displayed in the empty email input field. | |
| Full name | The label for the full name input. |
| Jordan Smith | The placeholder message displayed in the empty full name input field. |
| Must be greater than | The error message displayed when the customer inputs a value shorter than the required length. |
| Holder first name | The label for the account holder first name input. |
| Jordan | The placeholder message displayed in the empty account holder first name input field. |
| Holder last name | The label for the account holder last name input. |
| Smith | The placeholder message displayed in the empty account holder last name input field. |
| Must be less than | The error message displayed when the customer inputs a value longer than the required length. |
| National ID | The label for the national ID input. |
| National ID is invalid | The error message displayed when the national ID is invalid. |
| 30063412345 | The placeholder message displayed in the empty national ID input field. |
| Country code | The label for the phone country code input. |
| Phone number | The label for the phone number input. |
| Enter your phone number | The label for the phone number entry. |
| Must be a valid phone number | The error message displayed when the phone number is invalid. |
| This field is required | The error message displayed when the customer leaves a required field empty. |
| Show Klarna options | The label for the Display Klarna options button. |
| Enter your verification code | The label for the verification code input. |
| Enter the verification code sent to | The CtA message to capture the verification code sent to the customer’s contact details. |
| Enter the verification code sent to your email | The CtA message to capture the verification code sent to the customer’s email. |
| Enter the verification code sent via SMS | The CtA message to capture the verification code sent to the customer’s phone via SMS. |
| Enter the verification code sent via WhatsApp | The CtA message to capture the verification code sent to the customer’s phone via WhatsApp. |
| Send code via email | The CtA message to send the verification code via email. |
| Incorrect verification code. Try again. | The error message displayed when the verification code is invalid. |
| The code has expired. Request a new one. | The error message displayed when the verification code expires. |
| Verification code must be | The error message displayed when the verification code has an invalid number of digits. |
| Send code via SMS | The CtA message to send the verification code via SMS. |
| We'll send a verification code to | The message displayed to confirm the customer’s contact details to send the verification code to. |
| Failed to verify OTP | The error message displayed when customer verification fails. |
| Max resends reached | The error message displayed after reaching the maximum resend limit for the verification code. |
| Max retries reached | The error message displayed after reaching the maximum retry limit for the verification code. |
| Resend a code in | The message displayed when the customer needs to wait before the verification code can be resent. |
| Resend code | The CtA message to resend the verification code. |
| Didn’t receive the code? | The message displayed to the customer if they want their verification code to be resent. |
| Send to email instead | The CtA message to resend the verification code via email. |
| Send to SMS instead | The CtA message to resend the verification code via SMS. |
| Send verification email | The CtA message to send the verification code via email. |
| Send verification SMS | The CtA message to send the verification code via SMS. |
| Sending verification SMS | The message displayed when the verification code is being sent via SMS. |
| Confirm | The label for the Confirm button. |
| Confirming | The message displayed when confirming details. |
| Pay | The CtA displayed on the Pay button. |
| Payment complete | The message displayed when the payment is completed. |
| Payment processing | The message displayed while the payment is processing. |
| Pay with | The payment method-specific CtA displayed on the Pay button. |
| After clicking on Pay, you are redirected to finalize your payment | The message displayed before the customer is redirected to complete their payment. |
| Approve payment on the | The CtA message to approve the payment in the payment method's mobile app. |
| I have canceled this payment | The label for the button confirming that the customer cancelled the payment. |
| I have approved this payment | The label for the button confirming that the customer approved the payment. |
| Card not supported | The error message displayed when the customer provides an unsupported card. |
| Incorrect details – try again or use another payment method | The error message displayed when the customer provides invalid payment details. |
| Try another payment method | The error message displayed when the |
| Payment declined – try another payment method | The error message displayed when your account is not configured for the payment method. |
| Not enough funds – try another payment method | The error message displayed when the customer has insufficient funds to complete the transaction with their selected payment method. |
| Payment cancelled | The error message displayed when the payment is cancelled. |
| Payment expired | The error message displayed when the payment request expires. |
| Payment declined – try again or use another payment method | The fallback message displayed when the selected payment method declines the transaction. |
| Payment successful | The message displayed when the payment is successful. |
| Something went wrong. Try another payment method. | The error message displayed after failing to load the payment method. |
| Creditor | The label for the SEPA Direct Debit creditor name. |
| Creditor ID | The label for the SEPA Direct Debit creditor ID. |
| IBAN | The label for the international bank account number (IBAN) input. |
| Please enter a valid IBAN. Your IBAN should start with two letters and be 22 characters long | The error message displayed when the IBAN is invalid. |
| AB12 1234 1234 1234 1234 12 | The placeholder message displayed in the empty IBAN input. |
| Saved cards | The label for the stored card options. |
| Use a new card | The label for the use new card option displayed next to the stored card options. |
| Loading your saved cards | The message displayed when loading stored card options. |
| Other payment methods | The label for other payment method options when stored cards are available. |
| Default | The label for the default option. |
| Expired | The label for an expired option. |
To add support for locales and languages not natively supported by Flow, provide the locale as an object of key-value pairs in the same translations object you used for custom translations. For example, to add support for US English (en-US):
1const translations = {2'en-US': {3'pay_button.redirect_cta': 'After clicking on Pay, you will be redirected to finalize your payment',4},5};67const checkout = await CheckoutWebComponents({8paymentSession,9publicKey,10environment: 'sandbox',11locale: 'en-US',12translations,13});
Information
If you're missing a translation for the locale you provide, Flow attempts to fall back to the language of the specified locale. If the locale language is also unsupported, Flow falls back to en.