Nami Paywalls in Different Languages

Localize paywalls in your app using the Nami platform.

Nami supports localizing your paywalls so they will work with different languages that your customers use.

To get started with localization, there are a few key steps.

  1. Create a Paywalls for each language you want to support:
  2. Use Campaigns to target the right Paywall to the right audience
  3. Configure the SDK for the correct language

Paywalls & Localization

The Nami system supports the creating of an unlimited number of paywalls. As a best practice, create a paywall for each language you want localized for your app.

πŸ“˜

Paywall Naming Conventions

Each paywall you create can be named so you can quickly identify it within the Nami Control Center. As a best practice, you might include the language in the name.

For example, say you have two paywalls as part of your app's onboarding flow. One is in English and the other is in Mandarin.

In this case, you might name your paywalls like this:

  • Onboarding (English)
  • Onboarding (Mandarin)

Then, simply update the paywall template's text and images with the appropriate copy and graphics for respective localization.

Importantly, some text on your product sku selector or product buttons are localized automatically by the operating system. Please reference to the SKU Smart Text callout below for details.

πŸ“˜

SKU Prices

Note that the prices on in-app purchase products on the Apple App Store and Google Play Store are determined by the settings on the device and cannot be affected by the Nami platform.

πŸ‘

SKU Smart Text Variables Do Not Need to be Translated

SKU Smart Text variables are automatically translated in the SDK.

For example, ${sku.price} / ${sku.duration} will just work no matter what language or app store region the end user is operating in.

Learn more about Smart Text translation and how to test

Target Localized Paywalls with Campaign Audience Rules

Campaigns are the way you show the right paywall to the right user including based upon the user's device language.

Each campaign can be configured with an Audience Filter that uses Device Language.

Learn more about how to create a Campaign.

πŸ“˜

If a device is configured for a language code (via either the OS locale or a NamiLanguageCode override you provide) which does not match one of your live Campaigns, that device will only receive campaigns (and associated paywalls) without Device Language audience filters

SDK Setup

By default, the Nami SDK uses the device's current operating system locale to determine the language for product detail and campaign localization.

Advanced Use Case: Overriding the Device OS Language

If you would like to override the the operating system value, simply pass a NamiLanguageCode to to the SDK's NamiConfiguration object.

let namiConfig : NamiConfiguration = NamiConfiguration( appPlatformId: "YOUR_APP_PLATFORM_ID" )
namiConfig.logLevel = .warn
namiConfig.namiLanguageCode = NamiLanguageCodes.es
Nami.configure(with: namiConfig)
Nami.configure(
    NamiConfiguration.build(this, appPlatformId) {
        namiLanguageCode = NamiLanguageCode.ES
    }
)

πŸ“˜

Language codes with a hyphen switch to an underscore in the SDKs.

For example es-mx would be es_mx.

Nami supports the following standard language codes which are a subset of the ISO 639 standard.

Note that these may differ from the language codes used on any particular store platform such as the Apple App Store or the Google Play Store. See the table below for how specific Store Platforms handle language codes.

The logic you implement to determine what language each user will see on their device is completely up to you. We generally recommend using the device language, but you could also optionally use the store code, currency or any other part of the locale to determine the language you wish to display.

πŸ‘

Nami Best Practice

To avoid any unexpected behavior, we recommend explicitly setting the language for all use cases including a default case. This ensures that you know exactly what language paywall is being shown to your users in all cases.