Run a product tour in more than one language

Updated May 22, 2026

Your site is in English and German, and you want new users to get the tour in their own language. There is no per-step translation inside a tour: a tour stores one version of each step, in the language you typed. So the answer is to build one tour per language and make sure each visitor only qualifies for one of them.

Option 1: separate addresses per language

This is the clean route, and it works whenever your language shows up in the web address — /en/… and /de/…, or separate domains.

  1. Build the tour once in your main language and get it right.
  2. In the tours list, open the row's menu and choose Copy tour. Rename the copy so you can tell them apart — for example "Onboarding (DE)".
  3. Open the copy, click Edit flow, and replace the Start URLs with the addresses for that language. A * stands for any text, so https://example.com/de/* covers the whole German site.
  4. Translate the step text in the builder, leaving the selectors alone — the buttons are in the same place in every language.
  5. Save in the builder, then click Save on the tour, publish it, and check the original tour's start URLs do not also match the German pages.

That last check is the one people forget. If the English tour's start URL is https://example.com/* it will match the German pages too, and you have two tours competing.

Option 2: one custom event per language

If every language lives at the same address, your own site has to say which one to run. Give each language tour its own custom event, and fire the matching one from your code:

Yaplet.trackEvent('customEvent', { name: 'onboarding-tour-de' });

Set each tour's trigger to Custom event with its own name. Your site already knows which language it rendered, so it can pick.

What happens if two tours match

Only one tour can run from a single event. If two qualify, Yaplet shows the one with the higher Priority, which you set from the tours list. That is a tie-breaker, not a language rule — do not rely on it to keep languages apart. Fix the start URLs or the event names instead.

Keeping the copies in step

Because each language is a separate tour, a change to your interface has to be made in every one of them. Keep the list short: two or three languages is manageable, ten is not. If you only need one screen explained in many languages, a chat message targeted by page address is far less work to maintain.

What's next?

Set each language tour's trigger properly in Trigger a tour by URL or event.

Did this article answer your question?