Key concept: One template + multiple translation files = localized notifications for all your users.
How translations work
SuprSend handles localization automatically when sending notifications—no extra code required. The flow:-
Detect locale → Reads user’s
$locale(set via API with$set_localeaction or$localeparameter). Falls back to account default if unset. -
Find translation file → Searches using fallback hierarchy:
- Exact match:
es_MX.json(fores_MXlocale) - Language fallback:
es.json - Default fallback:
en.json
- Exact match:
-
Replace keys → Replaces
{{t "key_name"}}tags with translated values from the selected file. Interpolates variables like{{t "greeting" name=user.first_name}}. - Send notification → Delivers localized content to the user.
Translation directory structure
Translation files must be organized by locale codes:Naming convention: SuprSend supports underscore format (
en_GB) for locale codes.| Type | Format | Description | Example |
|---|---|---|---|
| Language only | {language}.json | Translations for a specific language without regional variations | en.json |
| Language + Region | {language}_{region}.json | Translations for a specific language in a specific region or country | en_GB.json |
| Namespaced files | {namespace}.{language}.json | Translations for a specific feature or module in a specific language | auth.en.json |
Fallback logic
SuprSend automatically finds the best translation using a fallback system. If a translation isn’t available, it tries the next best option:- First try: Exact match for the user’s locale (
es_MX.jsonfor Spanish - Mexico) - Second try: General language file (
es.jsonfor Spanish) - Last try: Default language file (
en.jsonfor English)
- The translation file doesn’t exist
- The translation key isn’t in the file
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.Translation key types
Translation keys can be organized using two main approaches:- Normal keys
- Namespaced keys
Simple key-value pairs:Benefits:
- Simple and straightforward - Easy to understand and implement
- Quick to set up - No need to plan namespaces upfront
- Perfect for small projects - Ideal when you have limited translation keys
- Direct access - Shorter syntax in templates
Setup
Setting up translations in SuprSend requires three steps:1
Upload translation files
Navigate to Dashboard → Developers → Translations and upload JSON files.
Commit changes to make translations live. Learn more about managing translation files.

2
Set user locale
Set the user’s locale via API. The older method used preferred language, but you can now use locale directly with Use standard ISO locale codes like
$set_locale action or $locale parameter. The locale determines which translation file SuprSend will use for that user’s notifications.Example:en_US, es_ES, fr_FR, en_GB, etc.3
Use in templates
Add translation keys to templates using the Preview your translations:
{{t}} tag:-
Open template editor and add
{{t}}tags - Click Preview (top right corner)
- Select different locales from the dropdown
-
Verify output matches expectations

Using translations in templates
Use the{{t}} tag to localize content. Examples for common scenarios:
- Basic usage
- Dynamic content
- Advanced: JSONNET
Simple translations
Simple translations
Static text that doesn’t change based on user data.Output:
"Welcome!" and "See you later!"Namespaced translations
Namespaced translations
Group related translations by feature/module to avoid key name conflicts.Output:
"Sign in to continue" and "Order status"Use auth:title and orders:title instead of conflicting title keys.One template for all languages
Instead of maintaining separate templates for each language, SuprSend uses a single template with translation keys. The template structure stays the same across all languages—only the text content changes. The problem it solves: Traditional approaches require duplicating templates for each language, which leads to:- Layout inconsistencies when updating styles across multiple files
- Increased maintenance when fixing bugs or making design changes
- Risk of forgetting to update all language versions
- Traditional approach
- SuprSend approach
Each language requires a separate template file:
Managing translation files
Manage your translation files through the SuprSend dashboard or programmatically via API and CLI.Translation process
SuprSend uses a commit-based process to manage translation changes safely. Development → Commit → Production- Make changes - Add, edit, or delete translation files in the dashboard
- Review drafts - All changes are saved as drafts until committed
- Commit changes - Commit translations to make them live
- Version control - Every commit creates a new version with full history

Add new translation files
Upload new translation files to add support for additional languages or create namespaced translations.1
Navigate and select file
Go to Developers → Translations. Upload your JSON translation file and verify the file structure matches the required format.
File naming: Use correct naming convention (
en.json, es_MX.json, or auth.en.json for namespaced files).2
Upload file
Click the Next button to add the file.

3
Commit changes
Click Commit to make the translation file live.

Edit existing translation files
Download, edit locally, and re-upload translation files.1
Open translation file
Go to the translation file you want to edit.
2
Download file
Click Download to save the translation file locally for editing.

3
Edit, upload and commit
Make your edits to the downloaded JSON file, then click Upload to replace the existing file. Finally, click Commit to make your translation changes live.
Delete translation files
Remove translation files that are no longer needed.1
Delete file
Find the translation file you want to remove, and click Delete.

2
Commit deletion
Click Commit to publish the deletion.

Deletion impact: Removing a translation file affects all users in that locale. They will fall back to the language file or default locale. Ensure you have fallback translations available.
Version control
All translation changes are automatically versioned with complete history and rollback capabilities.1
Open version history
Go to Developers → Translations, click on a translation file, then open the Version History tab.
2
Select and rollback
Select the version you want to restore and click Rollback. Confirm the action.

3
Commit changes
Click Commit to make the rollback live.

Rollback immediately affects all users in that locale. Test before rolling back.
Automating translation with CLI
Manage your translations programmatically using SuprSend’s CLI. For CLI commands and workflows, see the CLI translations overview.Translation Management APIs
Programmatically manage translations using SuprSend’s Management APIs. For API documentation and endpoints, see the Translation Management API reference.Supported locales
View all supported locales
View all supported locales
SuprSend supports standard ISO locale codes following the
language_COUNTRY format:| 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 |
en_AU | English | Australia |
en_CA | English | Canada |
en_GB | English | United Kingdom |
en_IE | English | Ireland |
en_IN | English | India |
en_NZ | English | New Zealand |
en_US | English | United States |
en_ZA | English | South Africa |
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:
zero,one,otherfor consistent behavior - 📄 Maintain
en.jsonas your canonical source - 🏷️ Use translation keys everywhere — avoid raw text in templates
- 🏢 Don’t translate brand names — keep them consistent 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:
- Changes not committed
- Invalid JSON format
- User locale not set
- Key missing in fallback files
- Check if changes are committed - Uncommitted translations won’t be used
- Verify file format - Ensure valid JSON syntax
- Check user locale - Confirm user profile has correct locale set
- Review fallback chain - Check if key exists in fallback files
Wrong translation displaying
Wrong translation displaying
Possible causes:
- Incorrect locale format
- Case-sensitive key names
- Outdated version
- Verify locale format - Use
en_US, noten-us - Check key name - Keys are case-sensitive (
greeting≠Greeting) - Review version history - Ensure you’re on the latest version
Template errors
Template errors
Possible causes:
- Incorrect syntax
- Variable name mismatches
- Wrong namespace format
- Syntax check - Ensure proper
{{t "key"}}format - Variable names - Check variable names match translation file
- Namespace format - Use
namespace:key, notnamespace.key