Menu
 

Messages in different or multiple languages

Customer.io supports multiple character sets out of the box. If your app/site has multiple languages, there are three common strategies for localization/internationalization. All of them require you having a customer attribute containing the language information already stored on the user profile, though. In our walkthroughs, we called this attribute language.

The per-campaign method

Using this strategy, each language has its own campaign.

Advantages:

  • you can easily group messages sent in series (a few days from one another)
  • open, click, and conversion stats are separate
  • by adding a tag like [FR] in the campaign name you can easily find all the campaigns targeted at a specific audience

Disadvantages:

  • it increases the number of campaigns in your account
  • if you need to make changes for multiple languages, this needs to be done campaign-by-campaign

Sample Setup:

If your app is available in 3 languages (English, French and Italian), you might have 3 campaigns for each of the three languages:

  • Welcome email - fr
  • Welcome email - it
  • Welcome email - en

Then you’d have 3 segments:

  • “Language is French”
  • “Language is Italian”
  • “Language is English”

Those segments are then applied as Filters on the campaigns.

Language Filters

You might have the same trigger conditions for your campaigns, but the filters for language restrict who should get the message to French, Italian, or English speakers.

The condition per-message method

Using this strategy, you only have one campaign that includes separate messages for each language.

Advantages:

  • fewer campaigns overall
  • open, click, and conversion stats are partially separate (you can view the stats per message, but you’ll need to export data from multiple campaigns if you want to see the overall stats for a particular language)
  • you can easily make changes to messages sent in different languages

Disadvantages:

  • grouping messages sent in series (a few days from one another) can get messy because of the large number of messages included in the workflow
  • you can’t easily find or export data for all the messages sent in a particular language

Sample Setup:

Your campaign has messages separated by language using an action condition. This way, only those profiles whose language attribute/value is set as “fr” will receive the French email. Others who do not have the attribute/value set to “fr” will skip this message. The same applies to all the messages in the workflow as long as they have a condition filter added.

Language-based attribute conditions

Once you add the condition filter to all your messages, the Workflow page will look something like this:

Workflow with language-based conditions

Note: If you’re using this strategy for a Welcome campaign and you notice delays in sending attribute updates sent to Customer.io, you can add a 2-3 minutes delay before the first message to give your app enough time to send us the correct information.

The per-message method

Using this strategy, you only have one campaign and one message per marketing scenario, but each user will see the content in its own language.

Advantages:

  • fewer campaigns overall
  • making changes to messages sent in multiple languages is easier (you only need to edit one message)

Disadvantages:

  • open, click, and conversion stats are mixed together, so running reports per language is more difficult

Sample Setup:

In this example, we’ll create a test within a message (in the editor) using conditional (if/else) statements in a message body. If the user’s set language is French or Italian we’ll present localized greetings; if neither, we can fall back to English.

{% if customer.language == "fr" %}

Bonjour!

{% elsif customer.language == "it" %}

Ciao!

{% else %}

Hello!

{% endif %}

Note: Most people using this strategy have 2-5 languages they are managing messaging for. Also watch out for character limits in subject lines and body copy.

Would something else work better?

Internationalization/localization is a really hard problem to solve. However, it’s one that we care about. Please let us know; tell us more about your use case, so we can improve our features to make localization easier!