Skip to main content

Showing Experiences in multiple languages

How to use Localization to translate, generate, and manage multi-language Experiences

Written by Chameleon Team
Updated today

Chameleon supports any text for any language available within modern browsers. To engage users with language-specific content, you can use Localization to upload different translations for your Experiences.

Copilot can also generate translation files for your Experiences directly from the Localization page. Select the Experiences you want to translate, customize your translation instructions, and download the files for review before uploading.


Availability & Usage

πŸ” Localization available for Enterprise plans

πŸ“ Ready to use in Tours, Tooltips, Embeddables, Microsurveys, Launchers

πŸ“ Available for content & media

Copilot generates translations

Ranger flags Experiences without translations


Can I show Experiences in different languages?

As Experience content is ever-changing and personal to each app, there are several ways to show an Experience with different content for different users:


Localization in Chameleon

πŸ§‘β€πŸ’Ό Admins can configure Localization (if Roles are enabled).

Localization enables you to display your in-app Experiences in different languages to match your users' language preferences. Users who speak different languages will be more engaged with content in their preferred language.

Based on a property you specify (or the user's browser language), Chameleon Experiences will show the right language content to the right user.

πŸ‘‰ Here's how to use the Localization feature in Chameleon.

1. Set the language property & preferred languages

Head over to the Localization page, click "Language Property" and pick the user property that defines the correct language for your users.

β„Ή Chameleon uses browser_language as a fallback property in case your set property is missing for some users.

Next, pick the languages you want to show Chameleon Experiences in. From the "Add Language" dropdown, select the base language or variants you'll want to use.

Once you do, you'll find them in the table below.

⚠️ Removing a language removes all associated translations. Ensure you don't remove languages with active Experiences, or export your translations before removing languages.


2. Generate translations with Copilot

Copilot can generate translation files for your Experiences directly from the Localization page. This saves you from manually translating content outside of Chameleon while still giving you full control to review everything before it goes live.

How do I create translations with Copilot?

  1. Click Create Translations to select the Experiences you want to translate

    πŸ‘‰ The list defaults to Live Experiences, you created or last edited, but you can select any Experience created on your account.

  2. Review the list of Experiences that need translations. These are Experiences that either:

    • Don't have a translation file for one or more of your configured languages

    • Have content that was edited after the last translation file was applied (outdated translations)

      πŸ‘‰ You can hover over the Experience name to open a preview modal and see the content, all Steps, and any active Variants.

  3. Select the Experiences you want to translate and click Create Translations. Copilot generates the translation files, and they'll appear in the "Generated Translation files" panel below.

  4. Once your translations are ready, you have two options:

    β–ͺ️ Download - Saves the translation files to your computer so you can review them before uploading manually

    β–ͺ️ Auto-upload - Applies Copilot's translations directly to your Experiences for all generated languages at once

    πŸ‘‰ Auto-upload does the same thing as manually uploading through the Upload Translations button, without the download-review-upload step. Use it when you're confident in your translation instructions and want to publish immediately.

β„Ή Copilot translates for all configured languages in a single run. You cannot generate translations for a subset of your languages. To exclude a language, remove it from your configured languages first.


Can I add instructions to translations?

Translation instructions control how Copilot translates your content into different languages. You can add specific instructions and upload a Glossary, so Copilot respects any technical or brand terms while translating.

Access Translation Instructions from the Localization page, in the Languages section, or when generating translations with Copilot.

πŸ‘‰ You can add custom instructions for how Copilot works on your account on the AI Customization page.

Glossary

Upload a CSV file to define how specific terms should be translated. This is useful for product terminology, branded features, or industry-specific language where the direct translation isn't what you want (for example, a feature name that should stay in English, or a technical term with a specific equivalent in each language).

You can add instructions and a glossary for each configured language, where you can specify, for example:

  • Formal vs. informal address (e.g., formal Ukrainian)

  • Dialect preferences, regional spelling

  • Specific terminology preferences for that language

  • Any translation context relevant to that language

β„Ή If you update translation instructions and return to the Create Translations workflow, Copilot re-runs translations with your updated instructions applied. This lets you iterate until the output matches your expectations.


3. Download and translate manually

If you prefer to translate content yourself, you can download the Experience content and translate it outside of Chameleon.

  1. Pick the Experience you want to translate from the Dashboard (i.e. Tours), select one or several Experiences, and from the Actions menu download the Content (YML). This will save a file containing all your Experience content, which you can edit to match your preferred language.

    πŸ‘‰ If you add videos to an Experience, you'll find a dedicated section in your YAML file to add a different URL.

    You can also download Translation files via REST API. See the developer docs.

  2. Open the resulting .yaml file and follow the included instructions to translate your content. For context, each Experience includes a preview.url where you can see what you're translating.


4. Upload translation files

If you used auto-upload after generating translations with Copilot, your translations have already been applied, so you can skip this step. This applies when you've translated manually or downloaded Copilot-generated files to review before publishing.

  1. Go to Data Management β†’ Localization

  2. Click Upload Translations (all 3 options on the page work the same)

  3. Upload your translation files

  4. Translations are applied to the selected Experiences

To upload Translation files via REST API, please see the developer docs.


Media Localization

You can also show different media to users based on their preferred language. To use Media Localization, upload the different media files to Chameleon at the same time as you upload translation files. Replace the filename in your .yaml file with the exact name of the image and upload them both to Chameleon.

Media Localization works with:

⚠️ Media files must be uploaded at the same time as your YAML file. They cannot be added separately. In the upload modal, select your translated .yaml file, along with any accompanying image files, before confirming.


5. Preview and publish

Each localized Experience can be previewed in the various languages you have translated into. From the Builder TopBar, you can pick from a dropdown the different languages you have added for that Experience, and the content will update to match.

πŸ‘‰ The final step is to "Apply changes" to your live Experiences so users get to see your latest version too. Translations are applied on upload, but the changes won't reach your users until the latest version of the Experience is published.


Manage translations

The Localization page has two panels for managing your translations.

Generated translation files

This panel shows translation files that Copilot has generated. These files are available for review and upload. Experiences are not translated until the files are uploaded. Here you can:

  • save the generated YAML files to your computer for review,

  • upload Copilot's translations and apply them to your Experiences for all generated languages at once

  • remove Copilot's generated translations

Translation file uploads

This panel shows all translation files uploaded, whether generated by Copilot or manually translated. When multiple files reference the same Experience, the most recent upload is used.

β„Ή You can also download any previously uploaded file and update your translation before uploading again.


Find Experiences with missing or outdated translations

Ranger includes an "Add Missing Translations" job that identifies live Experiences without translations or with outdated translation files. You can filter, select, and generate translation files directly from the Ranger page.

  1. Visit Governance→ Ranger and find the Add Missing Translations panel

  2. Review the flagged Experiences and filter the list

  3. Select the Experiences you want to translate

  4. Generate translation files

  5. Visit Data Management β†’ Localization and find your translations in the Generated translation files panel

  6. Review and apply when ready


Analytics, reporting, and data exports

All data will continue to be reported as the default language (the content added directly to the Experience).

Data and analytics regarding Experiences (Tour Started, Survey Completed, etc.) will include a language property that takes the value of the currently "translated into" language for any translated Experiences. It will only be sent when the Experience is actually translated for your end-user.


Best practices

Localization is one option that you'll implement with your users in mind; try to create a unique user experience.

When using Copilot to generate translations, start by uploading a glossary with your product-specific terms and setting per-language guidance. This produces better first-pass translations and reduces the review time before uploading.

For certain languages, extra spaces can give your translators more control over the final output; in these cases, you can add   (non-breaking space) directly into the translated content. The example below will show as "Extra space needed".


Fallbacks and alternative languages

Let's imagine that you've translated only es-ES and es.

  1. For a user whose browser reports es-ES, this matches exactly and the es-ES version is displayed

  2. For a user whose browser reports es-AR (Argentina), Chameleon checks for es-AR first. When it does not find a match, it tries es without the country code and displays the es translations

  3. For a user whose browser reports nl-BE, and you have not translated nl-BE nor nl, the default version will be displayed

πŸ’‘ Learn about other ways to personalize your Experiences with Chameleon.


Creating separate Experiences

You can create multiple Experiences with different content and set the targeting so they show to users of that language. To do this:

  • Create your Experience in your base language

  • Duplicate it for other languages

  • Adjust the text and targeting

πŸ’‘ You can target based on default user attributes that Chameleon collects, such as Browser Language, or send your own user data to indicate the language of the user and show the relevant Experience to them.


Defining user variables

Alternatively, you can create a single Experience but show different content based on the user. For this, you will need to:

  • Create your basic Experience

  • Define user variables for each piece of content, e.g. ##{{tour1.step1.title}} and store these on each page of your app (you can find an example below).

  • Use these variables within the Experience to dynamically populate the content based on the user

Structuring and storing translations for later use:

window.chmlnI18n = { /* Example global variable name */
welcome_tour: { /* Example tour name */
step1: {
title: "Welcome to the App!",
body: "Let's import your contact and save you $$$",
cta: "Ok let's go!"
},
step2: {
...
}
...
}

Embedding these translations in the Experience:

### ##{{global 'chmlnI18n.welcome_tour.step1.title'}}

##{{global 'chmlnI18n.welcome_tour.step1.body'}}

πŸ“© If you want to use this method and you're facing blockers, please email us to help.

Did this answer your question?