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
βοΈ Visit Data Management β Localization
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:
Using Localization with Copilot-generated translations (recommended)
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?
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.
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.
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.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.
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.
Open the resulting
.yamlfile and follow the included instructions to translate your content. For context, each Experience includes apreview.urlwhere 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.
Go to Data Management β Localization
Click Upload Translations (all 3 options on the page work the same)
Upload your translation files
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.
Visit Governanceβ Ranger and find the Add Missing Translations panel
Review the flagged Experiences and filter the list
Select the Experiences you want to translate
Generate translation files
Visit Data Management β Localization and find your translations in the Generated translation files panel
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.
For a user whose browser reports
es-ES, this matches exactly and thees-ESversion is displayedFor a user whose browser reports
es-AR(Argentina), Chameleon checks fores-ARfirst. When it does not find a match, it trieseswithout the country code and displays theestranslationsFor a user whose browser reports
nl-BE, and you have not translatednl-BEnornl, 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:
π‘ 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.











