Instead of maintaining multiple templates per language, you can manage a single template and multiple translation files.
One template + multiple translation files = localized notifications for all your users.
How translations work
SuprSend automatically handles localization while sending notifications — no extra code required.Steps to Enable Translations
- Upload translation files from the dashboard, via CLI, or API.
Each file is a JSON containing key-value pairs consistent across locales. - Set user locale in SDK using
set_locale()or via the$localeproperty in create/update user API. - Use translation keys inside templates:
- Handlebars:
{{t "key_name"}} - JSONNET:
t("key_name")
- Handlebars:
- At the time of workflow execution, SuprSend looks for key_name in the user’s locale file and if not found, applies below fallback logic.
Fallback Logic
If either the locale file or key inside the locale file is missing, SuprSend searches in this order:- Exact locale match — e.g.,
es-MX.json - General language file — e.g.,
es.json - Default language fallback — e.g.,
en.json
Best practice: Always maintain an
en.json file as the base language. It ensures your system always has a fallback even if locale-specific keys are missing.Basic usage
Translations are JSON objects that define the localized text for your app messages in different locales. Let’s say you have a task management app and you want to notify users when a new task is created or completed — localized for English and French users.en and fr locales, you can reference it in your templates using the t tag:
Managing translation files
You can manage translation files from developers -> translations on the SuprSend dashboard, via API and CLI.Flow
All translation changes, including delete, is version controlled and needs to be committed to make them live.Directory structure
There are two ways to organize translation files:- By locale code — one file per language, e.g. en.json, fr.json
- By namespace + locale code — group translations by feature or module within the same language, e.g.
auth.en.json,tasks.fr.json. This comes in handy when you have different teams managing their translations or can have same key across different features or modules.
Add locale files
1
Upload file
Go to Developers → Translations section. Click on
+New File button and upload locale files.
Locale file naming convention:-
{locale_code}.json: example:en.json,es-MX.json -
{namespace}.{locale_code}.json: example:auth.en.json,orders.es-MX.json
2
Save Changes
Click Next to save. Files are saved as a draft version until committed.

3
Commit changes
Click Commit Changes to make translations live. Add a short description of your update for later reference. You can also skip this step and commit later.

Update existing files
Download, edit locally, and re-upload updated translation files.1
Download file
Click Download to save the translation file locally for editing.

2
Edit, upload and commit
Make your edits to the downloaded JSON file, then click
+ New File and upload the edited file to replace the existing file. Finally, click Commit to make your translation changes live.Delete files
Remove locale files that are no longer needed.1
Delete file
Find the translation file you want to remove, and click Delete. This will mark the file for deletion in the draft version.

2
Commit deletion
Click Commit to make deletion live. The deletion will only take place after you commit.

Version history and rollback
SuprSend uses git-like versioning for locale file changes. Every commit creates a new version that you can view, download, or roll back to.-
View version history
Click Version History to see all previous versions. You can download and view older files, and check the status column to see what changed compared to the previous version. -
Rollback to an older version
Inside version history tab, select the version you want to restore and click Rollback version.
Using translations in templates
You can use translations in your templates using thet tag. Anything inside the t tag will be replaced with the translation for the key.
Simple, Nested and Namespaced keys
Pluralization
Translations support plural forms using the keyszero, one, and other.
When you pass a count variable, SuprSend automatically picks the correct form.
If count is missing or null, the zero form is used by default.
translation file:
en.json
count = 0→ useszeroform →"No items"count = 1→ usesoneform →"1 item"count ≥ 2→ usesotherform →"5 items"
Interpolation
If your translation includes variables, you can dynamically replace them with values from your template or workflow data like this: translation file:en.json
- “Hello, John!” when $recipient.name is “John”
Combining with Handlebars helpers
Here, are some examples of how you can combine translations with other Handlebars helpers.- Default value
- Conditional rendering
- Looping
Automate translation with CLI and APIs
You can manage your translations files programmatically using:Supported locales
SuprSend supports standard ISO locale codes following thelanguage-COUNTRY format. Here’s the complete list of supported locales:
Supported locale codes
Supported locale codes
| Locale Code | Language | Country/Region |
|---|---|---|
af-ZA | Afrikaans | South Africa |
ar-AE | Arabic | United Arab Emirates |
ar-SA | Arabic | Saudi Arabia |
ar-EG | Arabic | Egypt |
az-AZ | Azerbaijani | Azerbaijan |
be-BY | Belarusian | Belarus |
bg-BG | Bulgarian | Bulgaria |
bn-BD | Bengali | Bangladesh |
bs-BA | Bosnian | Bosnia and Herzegovina |
ca_ES | Catalan | Spain |
cs-CZ | Czech | Czech Republic |
cy-GB | Welsh | United Kingdom |
da-DK | Danish | Denmark |
de-AT | German | Austria |
de-CH | German | Switzerland |
de-DE | German | Germany |
el_GR | Greek | Greece |
es_AR | Spanish | Argentina |
es-CL | Spanish | Chile |
es-CO | Spanish | Colombia |
es-ES | Spanish | Spain |
es-MX | Spanish | Mexico |
es-PE | Spanish | Peru |
es-VE | Spanish | Venezuela |
et-EE | Estonian | Estonia |
eu-ES | Basque | Spain |
fa-IR | Persian | Iran |
fi-FI | Finnish | Finland |
fr-BE | French | Belgium |
fr-CA | French | Canada |
fr-CH | French | Switzerland |
fr-FR | French | France |
gl-ES | Galician | Spain |
gu-IN | Gujarati | India |
he-IL | Hebrew | Israel |
hi-IN | Hindi | India |
hr-HR | Croatian | Croatia |
hu-HU | Hungarian | Hungary |
hy-AM | Armenian | Armenia |
id-ID | Indonesian | Indonesia |
is-IS | Icelandic | Iceland |
it-CH | Italian | Switzerland |
it-IT | Italian | Italy |
ja-JP | Japanese | Japan |
ka-GE | Georgian | Georgia |
kk-KZ | Kazakh | Kazakhstan |
km-KH | Khmer | Cambodia |
kn-IN | Kannada | India |
ko-KR | Korean | South Korea |
ky-KG | Kyrgyz | Kyrgyzstan |
lo-LA | Lao | Laos |
lt-LT | Lithuanian | Lithuania |
lv-LV | Latvian | Latvia |
mk-MK | Macedonian | North Macedonia |
ml-IN | Malayalam | India |
mn-MN | Mongolian | Mongolia |
mr-IN | Marathi | India |
ms-MY | Malay | Malaysia |
my-MM | Burmese | Myanmar |
ne-NP | Nepali | Nepal |
nl-BE | Dutch | Belgium |
nl-NL | Dutch | Netherlands |
no-NO | Norwegian | Norway |
pa-IN | Punjabi | India |
pl-PL | Polish | Poland |
pt-BR | Portuguese | Brazil |
pt-PT | Portuguese | Portugal |
ro-MD | Romanian | Moldova |
ro-RO | Romanian | Romania |
ru-RU | Russian | Russia |
si-LK | Sinhala | Sri Lanka |
sk-SK | Slovak | Slovakia |
sl-SI | Slovenian | Slovenia |
sq-AL | Albanian | Albania |
sr-RS | Serbian | Serbia |
sv-SE | Swedish | Sweden |
sw-KE | Swahili | Kenya |
ta-IN | Tamil | India |
te-IN | Telugu | India |
th-TH | Thai | Thailand |
tr-TR | Turkish | Turkey |
uk-UA | Ukrainian | Ukraine |
ur-PK | Urdu | Pakistan |
uz-UZ | Uzbek | Uzbekistan |
vi-VN | Vietnamese | Vietnam |
zh-CN | Chinese (Simplified) | China |
zh-HK | Chinese (Traditional) | Hong Kong |
zh-TW | Chinese (Traditional) | Taiwan |
zu-ZA | Zulu | South Africa |
Don’t see your locale? SuprSend supports all standard ISO 639-1 language codes and ISO 3166-1 alpha-2 country codes. Contact support if you need help with a specific locale.
Best practices
- Keep keys short:
auth:login>authentication_login_button_text - Always define plural forms wherever needed:
zero,one,otherfor consistent behavior - Maintain
en.jsonas the base language - Use translation keys everywhere — avoid raw text in templates
- Whenever you’re adding new variables and updating translation files, make sure you update it across locales.
Troubleshooting
Even with proper setup, issues may be encountered. Here are common problems and their solutions:Translation not showing up
Translation not showing up
Possible causes:
- Latest translation files are not committed
- User locale not set
- Key missing in translation files
Template preview is not showing correct translation
Template preview is not showing correct translation
Refresh the page and load preview again. If you were already on the template page and translation files got updated, you may need to reload the page to see the latest changes.
Interpolation is not working
Interpolation is not working
Check if the format of variable name is correct in the locale file. It should be added as
{{variable_name}} in the translation file.