Iterable email in several languages and markets.

Short answer

Yes. Iterable sends one template in several languages through locales: you add locale codes in Project Settings, create a template version per locale, and each user gets the version matching their profile's locale field. Iterable does not translate the content. Blank locales get the default; mismatches get the default or are skipped. Caliber integrates with Iterable.

How do Iterable locales work?

A locale is a version of one template: every version shares the template ID, so performance is tracked in one place, and Iterable picks the version for each user at send time [1]. You create the locale codes first, with Add Locale on the Project Settings page [2]. In the template editor, the locales menu adds a version; each new version starts as a copy of the default locale's content, and from the same menu you edit, preview and send proofs of each one [1].

Locales do not translate anything. Iterable says so plainly: you translate in house or through a translation service, and it names integrations with Lokalise, Crowdin and Smartling [1]. The template API's GET /api/templates/email/get exports the locale versions for a translation service [1].

Iterable treats locales as its recommended route. Its docs say you may be able to build multi-language content with Handlebars or Catalog, but that those are not its recommended practice for localization [1]. In journeys, one message tile holds every locale version of the same campaign, so you need fewer filters by language or location [1].

Where each part of a market's email lives in Iterable
Part of the emailWhere it lives in IterableWhat to watch
Body copy and subject lineOne locale version of the template per locale [1]Iterable supplies no translations; a new version starts as a copy of the default [1]
Which version a user getsThe locale field on the user profile [2]The field must be called locale; another name breaks the match [2]
Users with no or unknown localeDefault locale, or skipped, per Locale Preferences [2][3]Skips are logged with the reason LocaleMismatch [3]
Footer and legal textSnippets [4]One edit reaches every template that references the snippet [4]
Prices and product stringsCatalog, an add-on to the plan [7][8]The numberFormat helper formats currency by locale [9]

How does Iterable decide which locale a user gets?

It reads one profile field, locale, at send time. If the field matches a locale on the campaign, the user gets that version [1]. Iterable warns that a field with another name, such as languagePreference, will not work, and suggests checking the setup with your customer success manager [2].

Iterable recommends ISO codes: two-letter language codes, or four-character codes that add the country, such as fr-CA and fr-FR. It also supports other conventions, such as three-letter codes, as long as the codes in Project Settings match the values on user profiles [2]. A locale cannot be renamed after you create it; changing one means deleting it and creating a new one [2].

Two cases fall outside a match. A user with a blank locale gets the template's default locale [1][2]. A user whose locale is known but matches none of the campaign's locales is handled by Locale Preferences in Project Settings, set separately for marketing and transactional messages: send the default version, or skip the user and record a send skip with the reason code LocaleMismatch [3].

The default is the project's default locale unless you turn on Set a Locale Default on a Per-template Basis [3]. Iterable advises choosing the project default early, because changing it affects campaigns already built [2]. Location data does not fill the gap: the Project Settings docs say a preferred language cannot be inferred from IP geolocation, and the location overwrite setting is not meant to update locale [3].

How do you keep footers and legal lines per market in Iterable?

Snippets carry them. Iterable lists email footers and standardized disclaimers or legal text among the uses of snippets: edit one once and every template that references it picks up the change at send time [4]. That reach cuts both ways for a market line, because one edit lands in every market at once.

To render a different snippet per locale, Iterable's snippet FAQ shows a Handlebars conditional, #ifMatchesRegexStr on locale, that picks a Spanish footer snippet or an English one [5]. The same FAQ warns that nested snippets take longer to render and can cause timeouts or send skips, and that nested snippets are not copied when you copy a snippet to another project [5].

Saved rows in the Drag and Drop editor look similar but behave differently: editing a saved row changes only new uses of it, not templates that already contain it. Iterable points to snippets for content that must update everywhere [6].

A legal line follows the market, not the language, and Iterable's own guidance makes the same point: language-and-country codes let you word content differently for each country's privacy rules [2]. With codes such as fi-FI and sv-FI, the country part can pick the legal snippet while the language part picks the copy.

How do you show prices per market in Iterable?

Catalog holds them, where your plan includes it: Iterable asks you to contact your customer success manager to add Catalog [7]. A catalog stores product or service data inside Iterable, and templates query it at send time [7]. A template can reference an item by a fixed name or by a value stored on the user's profile, with the #catalog helper. If the item is missing, the helper renders nothing or its else block; with required=true it throws an error instead, and for collections Iterable says a required lookup that fails stops the message being sent [8].

For the number itself, the numberFormat helper with "currency" and the user's locale applies that locale's currency formatting. Iterable's example turns 29.99 with the locale value fr_FR into 29,99 € [9]. The helper formats the value it is given, so the price field still has to hold each market's own price. Iterable's example writes the locale with an underscore; test the helper with the codes your project actually stores.

One template with locales or one campaign per market?

Locales fit markets that differ only in language. Experiments show the limit: Iterable picks a winning variation, never a winning locale, so testing one language against another needs separate variations, not locale versions [1].

Nordbite is a fictional demo brand. Its fixture has two markets, Norway and Finland, with two currencies and two scopes for its price-reduction rule, mapped here onto Iterable.

Nordbite's two markets, mapped to Iterable locales and to editions
MarketLanguage and currencyFixture rule scopeOne template with localesAn edition per market
NO (default)nb, NOKProduct prices shownThe default locale, in Norwegian; NOK from a catalog fieldIts own campaign, Norwegian legal line and reviewer
FIfi, EURAny reduction claimA Finnish locale version; EUR from the same catalog; a reduction line in the shared copy triggers Finland's scopeIts own campaign, Finnish legal line and reviewer

The default locale matters here. A Finnish user with no locale value gets the Norwegian default, with Norwegian prices and the Norwegian legal line, unless the audience keeps them out. Locale Preferences only governs locales that are set but unmatched [3]. A line such as "20% off this week" falls within Finland's scope even with no price on show, so a shared template has to meet the stricter scope in both markets. The scopes are fixture data, not legal advice.

Where does Iterable keep data for European brands?

New customers can choose Iterable's European data center, in Ireland [10]. All of an organization's projects sit in the same data center, the EU one supports userID-based and hybrid projects but not email-based ones, and EU projects sign in at app.eu.iterable.com [10]. Which data center you use follows your contract, not where your company is based [10].

Caliber and Iterable

Caliber will build each market's edition from one approved brief and land it in Iterable as a draft, with its market's language, legal line and checks. A named person will sign off each one. Caliber integrates with Iterable, and also with Klaviyo and Braze.

Also on.

Klaviyo · Braze · Salesforce Marketing Cloud Next · Voyado · Customer.io · Iterable

Questions

Does Iterable support multiple languages?

Yes, through locales. You add locale codes in Project Settings, create a version of each template per locale, and Iterable sends each user the version matching the locale field on their profile at send time. Every version shares one template ID, so metrics stay in one place [1][2].

What happens to Iterable users with no locale?

They get the template's default locale, which is the project's default unless per-template defaults are switched on. Users whose locale matches none of the campaign's locales get the default or are skipped, depending on Locale Preferences, set separately for marketing and transactional messages [1][2][3].

Does Iterable translate templates for you?

No. Iterable's docs say locales do not translate content: you translate in house or with a translation service. Iterable names integrations with Lokalise, Crowdin and Smartling, and the template API can export locale versions for translators [1].

Can the locale field have another name, such as language?

No. Iterable matches users to locale versions through a profile field called locale. Its docs say a field with another name, such as languagePreference, stops Iterable sending the right version, and suggest checking the setup with your customer success manager [2].

Should each market get its own campaign or one template with locales?

One template with locales fits markets that differ only in language. Markets that differ in price, legal line, offer or price-reduction rules are easier to get right as one edition each. Testing language against language also needs separate experiment variations, because Iterable does not pick a winning locale [1].

Sources

  1. Iterable Support Center, "Creating Content in Multiple Languages", undated. https://support.iterable.com/hc/en-us/articles/213279923-Creating-Content-in-Multiple-Languages (checked 1 Nov 2026)
  2. Iterable Support Center, "Setting up Locales", undated. https://support.iterable.com/hc/en-us/articles/12441621049876-Setting-up-Locales (checked 1 Nov 2026)
  3. Iterable Support Center, "Project Settings", undated. https://support.iterable.com/hc/en-us/articles/206382645-Project-Settings (checked 1 Nov 2026)
  4. Iterable Support Center, "Snippets Overview", undated. https://support.iterable.com/hc/en-us/articles/4414807441556-Snippets-Overview (checked 1 Nov 2026)
  5. Iterable Support Center, "Snippets: Frequently Asked Questions", undated. https://support.iterable.com/hc/en-us/articles/4415908356116-Snippets-Frequently-Asked-Questions (checked 1 Nov 2026)
  6. Iterable Support Center, "Creating Reusable Template Content", undated. https://support.iterable.com/hc/en-us/articles/29327058639508-Creating-Reusable-Template-Content (checked 1 Nov 2026)
  7. Iterable Support Center, "Catalog Overview", undated. https://support.iterable.com/hc/en-us/articles/360033214932-Catalog-Overview (checked 1 Nov 2026)
  8. Iterable Support Center, "Using Catalogs & Collections in Messages", undated. https://support.iterable.com/hc/en-us/articles/360033215032-Using-Catalogs-Collections-in-Messages (checked 1 Nov 2026)
  9. Iterable Support Center, "Handlebars Reference: Math Helpers", undated. https://support.iterable.com/hc/en-us/articles/36282964645396-Handlebars-Reference-Math-Helpers (checked 1 Nov 2026)
  10. Iterable Support Center, "Iterable's European Data Center (EDC)", undated. https://support.iterable.com/hc/en-us/articles/17572750887444-Iterable-s-European-Data-Center-EDC (checked 1 Nov 2026)

See it with your own brief.

Join early access, and bring a real brief to your walkthrough.

Get early access