Skip to main content
There are multiple ways to internationalize your notifications with Courier. The best option depends on the number of languages you support and the complexity of your templates.

Choose Your Approach

ApproachBest ForLogic Location
Multiple channels, one templateFew languages, single channel typeCourier (send conditions)
Multiple templatesMany languages, multi-channelYour system
Variables from data payloadDynamic content, external translation systemYour system

Multiple Channels, One Template

In this model, you create one channel per language within a single template. Courier routes to the correct channel based on send conditions. This works well for single-channel notifications or when you support just a few languages. Templates can get complex when you have multiple channel types (email, SMS, push) and many languages. Requirements:
1

Store locale on user profiles

Add a locale property with ISO 639-1 language codes like en, en_US, fr, fr_FR, etc.You can store this in Courier profiles or include it in the send request.
2

Add a channel for each language

Create separate channels in your template for each language you support.
Template with multiple language channels
3

Set up send conditions

Configure each channel’s send condition to match the corresponding locale.
Channel send condition for locale

Multiple Templates

In this model, you create a separate template for each language. Your system determines which template to trigger based on the user’s language. This is best for multi-channel notifications when you support many languages, as it keeps each template simple and focused.
1

Create a template for each language

For five supported languages, create five versions of the same template.
Templates organized by language
2

Map language-specific events

Assign a unique event name to each template (e.g., welcome-email-en, welcome-email-fr).
Event mapping
3

Trigger the correct event

In your application, determine the user’s language and trigger the corresponding event.

Variables From Data Payload

In this model, you maintain a single template and pass translated content in your send request. The template uses variables to display the localized content. This approach works well when you manage translations in your own backend or use an external translation service.
1

Translate content in your backend

Store translated strings in your database or translation management system.
2

Include translations in the send request

Pass the translated content in the data object:
{
  "message": {
    "to": { "email": "[email protected]" },
    "template": "TEMPLATE_ID",
    "data": {
      "greeting": "Bonjour",
      "welcome_message": "Bienvenue sur notre plateforme!",
      "cta_text": "Commencer"
    }
  }
}
3

Use variables in your template

Reference the translated content using variables.
Template with variables
4

Test with localized content

Create test events with translated values to preview the result.
Test event with translations
Localized preview

API-Driven Localization

For teams using translation management systems (TMS), Courier provides APIs to programmatically manage translations at the block level. This feature is available on Business and Enterprise plans. See Localization for API details.

Formatting Dates and Numbers

For locale-specific date and number formatting, see Handlebars Helpers.