Skip to main content
Translations help you localize notifications dynamically based on your user’s locale.
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

  1. Upload translation files from the dashboard, via CLI, or API.
    Each file is a JSON containing key-value pairs consistent across locales.
  2. Set user locale in SDK using set_locale() or via the $locale property in create/update user API.
  3. Use translation keys inside templates:
    • Handlebars: {{t "key_name"}}
    • JSONNET: t("key_name")
  4. 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:
  1. Exact locale match — e.g., es-MX.json
  2. General language file — e.g., es.json
  3. 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.
{
"TaskCreated": "A new task has been created: {{task_name}}",
"TaskCompleted": "Task {{task_name}} has been completed successfully!"
}

{
"task_created": "Une nouvelle tâche a été créée : {{task_name}}",
"task_completed": "La tâche {{task_name}} a été complétée avec succès !"
}
Once you have the files uploaded for en and fr locales, you can reference it in your templates using the t tag:
{{t "task_created" task_name=task.name}} 
{{t "task_completed" task_name=task.name}} 

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:
  1. By locale code — one file per language, e.g. en.json, fr.json
  2. 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.
All files for a locale goes into a single directory.
translations/
├── en/                  # English (base language)
│   ├── en.json         # General translations
│   └── auth.en.json    # namespaced translations
└── en-GB/              
    ├── en-GB.json      
    └── orders.en-GB.json 

Add locale files

1

Upload file

Go to DevelopersTranslations 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 Upload Translation File
File uploads with wrong name would throw error on upload. Make sure to edit the name before upload.
2

Save Changes

Click Next to save. Files are saved as a draft version until committed.Upload translation file
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.Commit translations

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.Download translation file
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.Delete translation file
2

Commit deletion

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

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.
    Rollback translation

Using translations in templates

You can use translations in your templates using the t tag. Anything inside the t tag will be replaced with the translation for the key.

Simple, Nested and Namespaced keys

{{t "key_name"}}
{{t "feature:key_name"}} // for namespaced locale files
{{t "nested_key.sub_key"}} // for nested keys

Pluralization

Translations support plural forms using the keys zero, 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
{
  "tasks": {
    "zero": "You have no tasks",
    "one": "You have 1 task",
    "other": "You have {{count}} tasks"
  }
}
Rules:
  • count = 0 → uses zero form → "No items"
  • count = 1 → uses one form → "1 item"
  • count ≥ 2 → uses other form → "5 items"
template:
{{t "tasks" count=$batched_events_count}}

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
{
  "greeting": "Hello, {{name}}!"
}
template:
{{t "greeting" name=$recipient.name}}
Rendered content:
  • “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.
  1. Default value
{{default (t "name") "Guest"}} 
  1. Conditional rendering
{{#if user.is_premium}}
{{t "premium_plan.details"}}
{{else}}
{{t "standard_plan.detail"}}
{{/if}}
  1. Looping
{{#each $batched_events}}
{{t "item_name"}}
{{/each}}

Automate translation with CLI and APIs

You can manage your translations files programmatically using:

Supported locales

SuprSend supports ISO 639-1 language codes, ISO 3166-1 alpha-2 country codes, and full BCP 47 locale identifiers. Here’s the complete list of supported locales:
Locale CodeName
enEnglish
en-001English (world)
en-150English (Europe)
en-AEEnglish (united arab emirates)
en-AGEnglish (antigua & barbuda)
en-AIEnglish (anguilla)
en-ASEnglish (american samoa)
en-ATEnglish (austria)
en-AUEnglish (australia)
en-BBEnglish (barbados)
en-BEEnglish (belgium)
en-BIEnglish (burundi)
en-BMEnglish (bermuda)
en-BSEnglish (bahamas)
en-BWEnglish (botswana)
en-BZEnglish (belize)
en-CAEnglish (canada)
en-CCEnglish (cocos (keeling) islands)
en-CHEnglish (switzerland)
en-CKEnglish (cook islands)
en-CMEnglish (cameroon)
en-CXEnglish (christmas island)
en-CYEnglish (cyprus)
en-DEEnglish (germany)
en-DGEnglish (diego garcia)
en-DKEnglish (denmark)
en-DMEnglish (dominica)
en-EREnglish (eritrea)
en-FIEnglish (finland)
en-FJEnglish (fiji)
en-FKEnglish (falkland islands)
en-FMEnglish (micronesia)
en-GBEnglish (united kingdom)
en-GDEnglish (grenada)
en-GGEnglish (guernsey)
en-GHEnglish (ghana)
en-GIEnglish (gibraltar)
en-GMEnglish (gambia)
en-GUEnglish (guam)
en-GYEnglish (guyana)
en-HKEnglish (hong kong sar china)
en-IDEnglish (indonesia)
en-IEEnglish (ireland)
en-ILEnglish (israel)
en-IMEnglish (isle of man)
en-INEnglish (india)
en-IOEnglish (british indian ocean territory)
en-JEEnglish (jersey)
en-JMEnglish (jamaica)
en-KEEnglish (kenya)
en-KIEnglish (kiribati)
en-KNEnglish (st. kitts & nevis)
en-KYEnglish (cayman islands)
en-LCEnglish (st. lucia)
en-LREnglish (liberia)
en-LSEnglish (lesotho)
en-MGEnglish (madagascar)
en-MHEnglish (marshall islands)
en-MOEnglish (macao sar china)
en-MPEnglish (northern mariana islands)
en-MSEnglish (montserrat)
en-MTEnglish (malta)
en-MUEnglish (mauritius)
en-MVEnglish (maldives)
en-MWEnglish (malawi)
en-MYEnglish (malaysia)
en-NAEnglish (namibia)
en-NFEnglish (norfolk island)
en-NGEnglish (nigeria)
en-NLEnglish (netherlands)
en-NREnglish (nauru)
en-NUEnglish (niue)
en-NZEnglish (new zealand)
en-PGEnglish (papua new guinea)
en-PHEnglish (philippines)
en-PKEnglish (pakistan)
en-PNEnglish (pitcairn islands)
en-PREnglish (puerto rico)
en-PWEnglish (palau)
en-RWEnglish (rwanda)
en-SBEnglish (solomon islands)
en-SCEnglish (seychelles)
en-SDEnglish (sudan)
en-SEEnglish (sweden)
en-SGEnglish (singapore)
en-SHEnglish (st. helena)
en-SIEnglish (slovenia)
en-SLEnglish (sierra leone)
en-SSEnglish (south sudan)
en-SXEnglish (sint maarten)
en-SZEnglish (eswatini)
en-TCEnglish (turks & caicos islands)
en-TKEnglish (tokelau)
en-TOEnglish (tonga)
en-TTEnglish (trinidad & tobago)
en-TVEnglish (tuvalu)
en-TZEnglish (tanzania)
en-UGEnglish (uganda)
en-UMEnglish (u.s. outlying islands)
en-USEnglish (united states)
en-VCEnglish (st. vincent & grenadines)
en-VGEnglish (british virgin islands)
en-VIEnglish (u.s. virgin islands)
en-VUEnglish (vanuatu)
en-WSEnglish (samoa)
en-ZAEnglish (south africa)
en-ZMEnglish (zambia)
en-ZWEnglish (zimbabwe)
esSpanish
es-419Spanish (Latin America)
es-ARSpanish (argentina)
es-BOSpanish (bolivia)
es-BRSpanish (brazil)
es-BZSpanish (belize)
es-CLSpanish (chile)
es-COSpanish (colombia)
es-CRSpanish (costa rica)
es-CUSpanish (cuba)
es-DOSpanish (dominican republic)
es-EASpanish (ceuta & melilla)
es-ECSpanish (ecuador)
es-ESSpanish (spain)
es-GQSpanish (equatorial guinea)
es-GTSpanish (guatemala)
es-HNSpanish (honduras)
es-ICSpanish (canary islands)
es-MXSpanish (mexico)
es-NISpanish (nicaragua)
es-PASpanish (panama)
es-PESpanish (peru)
es-PHSpanish (philippines)
es-PRSpanish (puerto rico)
es-PYSpanish (paraguay)
es-SVSpanish (el salvador)
es-USSpanish (united states)
es-UYSpanish (uruguay)
es-VESpanish (venezuela)
frFrench
fr-BEFrench (belgium)
fr-BFFrench (burkina faso)
fr-BIFrench (burundi)
fr-BJFrench (benin)
fr-BLFrench (st. barthélemy)
fr-CAFrench (canada)
fr-CDFrench (congo - kinshasa)
fr-CFFrench (central african republic)
fr-CGFrench (congo - brazzaville)
fr-CHFrench (switzerland)
fr-CIFrench (côte d’ivoire)
fr-CMFrench (cameroon)
fr-DJFrench (djibouti)
fr-DZFrench (algeria)
fr-FRFrench (france)
fr-GAFrench (gabon)
fr-GFFrench (french guiana)
fr-GNFrench (guinea)
fr-GPFrench (guadeloupe)
fr-GQFrench (equatorial guinea)
fr-HTFrench (haiti)
fr-KMFrench (comoros)
fr-LUFrench (luxembourg)
fr-MAFrench (morocco)
fr-MCFrench (monaco)
fr-MFFrench (st. martin)
fr-MGFrench (madagascar)
fr-MLFrench (mali)
fr-MQFrench (martinique)
fr-MRFrench (mauritania)
fr-MUFrench (mauritius)
fr-NCFrench (new caledonia)
fr-NEFrench (niger)
fr-PFFrench (french polynesia)
fr-PMFrench (st. pierre & miquelon)
fr-REFrench (réunion)
fr-RWFrench (rwanda)
fr-SCFrench (seychelles)
fr-SNFrench (senegal)
fr-SYFrench (syria)
fr-TDFrench (chad)
fr-TGFrench (togo)
fr-TNFrench (tunisia)
fr-VUFrench (vanuatu)
fr-WFFrench (wallis & futuna)
fr-YTFrench (mayotte)
itItalian
it-CHItalian (switzerland)
it-ITItalian (italy)
it-SMItalian (san marino)
it-VAItalian (vatican city)
deGerman
de-ATGerman (austria)
de-BEGerman (belgium)
de-CHGerman (switzerland)
de-DEGerman (germany)
de-ITGerman (italy)
de-LIGerman (liechtenstein)
de-LUGerman (luxembourg)
ruRussian
ru-BYRussian (belarus)
ru-KGRussian (kyrgyzstan)
ru-KZRussian (kazakhstan)
ru-MDRussian (moldova)
ru-RURussian (russia)
ru-UARussian (ukraine)
jaJapanese
ja-JPJapanese (japan)
zhChinese
zh-CNChinese (china)
zh-HKChinese (hong kong sar china)
zh-MOChinese (macao sar china)
zh-MYChinese (malaysia)
zh-SGChinese (singapore)
zh-TWChinese (taiwan)
arArabic
ar-001Arabic (world)
ar-AEArabic (united arab emirates)
ar-BHArabic (bahrain)
ar-DJArabic (djibouti)
ar-DZArabic (algeria)
ar-EGArabic (egypt)
ar-EHArabic (western sahara)
ar-ERArabic (eritrea)
ar-ILArabic (israel)
ar-IQArabic (iraq)
ar-JOArabic (jordan)
ar-KMArabic (comoros)
ar-KWArabic (kuwait)
ar-LBArabic (lebanon)
ar-LYArabic (libya)
ar-MAArabic (morocco)
ar-MRArabic (mauritania)
ar-OMArabic (oman)
ar-PSArabic (palestinian territories)
ar-QAArabic (qatar)
ar-SAArabic (saudi arabia)
ar-SDArabic (sudan)
ar-SOArabic (somalia)
ar-SSArabic (south sudan)
ar-SYArabic (syria)
ar-TDArabic (chad)
ar-TNArabic (tunisia)
ar-YEArabic (yemen)
msMalay
ms-BNMalay (brunei)
ms-IDMalay (indonesia)
ms-MYMalay (malaysia)
ms-SGMalay (singapore)
ptPortuguese
pt-AOPortuguese (angola)
pt-BRPortuguese (brazil)
pt-CHPortuguese (switzerland)
pt-CVPortuguese (cape verde)
pt-GQPortuguese (equatorial guinea)
pt-GWPortuguese (guinea-bissau)
pt-LUPortuguese (luxembourg)
pt-MOPortuguese (macao sar china)
pt-MZPortuguese (mozambique)
pt-PTPortuguese (portugal)
pt-STPortuguese (são tomé & príncipe)
pt-TLPortuguese (timor-leste)
viVietnamese
vi-VNVietnamese (vietnam)
hiHindi
hi-INHindi (india)
mrMarathi
mr-INMarathi (india)
mlMalayalam
ml-INMalayalam (india)
knKannada
kn-INKannada (india)
taTamil
ta-INTamil (india)
ta-LKTamil (sri lanka)
ta-MYTamil (malaysia)
ta-SGTamil (singapore)
teTelugu
te-INTelugu (india)
asAssamese
as-INAssamese (india)
paPanjabi; Punjabi
pa-INPanjabi; Punjabi (india)
pa-PKPanjabi; Punjabi (pakistan)
guGujarati
gu-INGujarati (india)
ksKashmiri
ks-INKashmiri (devanagari, india)
bnBengali
bn-BDBangla (bangladesh)
bn-INBangla (india)
orOriya
or-INOdia (india)
urUrdu
ur-INUrdu (india)
ur-PKUrdu (pakistan)
sdSindhi
sd-INSindhi (india)
sd-PKSindhi (pakistan)
neNepali
ne-INNepali (india)
ne-NPNepali (nepal)
aaAfar
aa-DJAfar (djibouti)
aa-ERAfar (eritrea)
aa-ETAfar (ethiopia)
abAbkhazian
ab-GEAbkhazian (georgia)
aeAvestan
afAfrikaans
af-NAAfrikaans (namibia)
af-ZAAfrikaans (south africa)
akAkan
ak-GHAkan (ghana)
amAmharic
am-ETAmharic (ethiopia)
anAragonese
an-ESAragonese (spain)
avAvaric
ayAymara
azAzerbaijani
az-AZAzerbaijani (azerbaijan)
az-IQAzerbaijani (iraq)
az-IRAzerbaijani (iran)
az-TRAzerbaijani (türkiye)
baBashkir
ba-RUBashkir (russia)
beBelarusian
be-BYBelarusian (belarus)
bgBulgarian
bg-BGBulgarian (bulgaria)
biBislama
bmBambara
bm-MLBambara (mali)
boTibetan
bo-CNTibetan (china)
bo-INTibetan (india)
brBreton
br-FRBreton (france)
bsBosnian
bs-BABosnian (cyrillic, bosnia & herzegovina)
caCatalan; Valencian
ca-ADCatalan (andorra)
ca-ESCatalan (spain, valencian)
ca-FRCatalan (france)
ca-ITCatalan (italy)
ceChechen
ce-RUChechen (russia)
chChamorro
coCorsican
co-FRCorsican (france)
crCree
csCzech
cs-CZCzech (czechia)
cuChurch Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic
cu-RUChurch slavic (russia)
cvChuvash
cv-RUChuvash (russia)
cyWelsh
cy-GBWelsh (united kingdom)
daDanish
da-DKDanish (denmark)
da-GLDanish (greenland)
dvDivehi; Dhivehi; Maldivian
dv-MVDivehi (maldives)
dzDzongkha
dz-BTDzongkha (bhutan)
eeEwe
ee-GHEwe (ghana)
ee-TGEwe (togo)
elGreek, Modern (1453-)
el-CYGreek (cyprus)
el-GRGreek (greece)
eoEsperanto
eo-001Esperanto (world)
etEstonian
et-EEEstonian (estonia)
euBasque
eu-ESBasque (spain)
faPersian
fa-AFPersian (afghanistan)
fa-IRPersian (iran)
ffFulah
ff-BFFulah (burkina faso)
ff-CMFulah (cameroon)
ff-GHFulah (ghana)
ff-GMFulah (gambia)
ff-GNFulah (guinea)
ff-GWFulah (guinea-bissau)
ff-LRFulah (liberia)
ff-MRFulah (mauritania)
ff-NEFulah (niger)
ff-NGFulah (nigeria)
ff-SLFulah (sierra leone)
ff-SNFulah (senegal)
fiFinnish
fi-FIFinnish (finland)
fjFijian
foFaroese
fo-DKFaroese (denmark)
fo-FOFaroese (faroe islands)
fyWestern Frisian
fy-NLWestern frisian (netherlands)
gaIrish
ga-GBIrish (united kingdom)
ga-IEIrish (ireland)
gdGaelic; Scottish Gaelic
gd-GBScottish gaelic (united kingdom)
glGalician
gl-ESGalician (spain)
gnGuarani
gn-PYGuarani (paraguay)
gvManx
gv-IMManx (isle of man)
haHausa
ha-GHHausa (ghana)
ha-NEHausa (niger)
ha-NGHausa (nigeria)
ha-SDHausa (sudan)
heHebrew
he-ILHebrew (israel)
hoHiri Motu
hrCroatian
hr-BACroatian (bosnia & herzegovina)
hr-HRCroatian (croatia)
htHaitian; Haitian Creole
huHungarian
hu-HUHungarian (hungary)
hyArmenian
hy-AMArmenian (armenia)
hzHerero
iaInterlingua (International Auxiliary Language Association)
ia-001Interlingua (world)
idIndonesian
id-IDIndonesian (indonesia)
ieInterlingue; Occidental
ie-EEInterlingue (estonia)
igIgbo
ig-NGIgbo (nigeria)
iiSichuan Yi; Nuosu
ii-CNSichuan yi (china)
ikInupiaq
ioIdo
io-001Ido (world)
isIcelandic
is-ISIcelandic (iceland)
iuInuktitut
iu-CAInuktitut (canada)
jvJavanese
jv-IDJavanese (indonesia)
kaGeorgian
ka-GEGeorgian (georgia)
kgKongo
kiKikuyu; Gikuyu
ki-KEKikuyu (kenya)
kjKuanyama; Kwanyama
kkKazakh
kk-CNKazakh (china)
kk-KZKazakh (kazakhstan)
klKalaallisut; Greenlandic
kl-GLKalaallisut (greenland)
kmCentral Khmer
km-KHKhmer (cambodia)
koKorean
ko-CNKorean (china)
ko-KPKorean (north korea)
ko-KRKorean (south korea)
krKanuri
kuKurdish
ku-TRKurdish (türkiye)
kvKomi
kwCornish
kw-GBCornish (united kingdom)
kyKirghiz; Kyrgyz
ky-KGKyrgyz (kyrgyzstan)
laLatin
la-VALatin (vatican city)
lbLuxembourgish; Letzeburgesch
lb-LULuxembourgish (luxembourg)
lgGanda
lg-UGGanda (uganda)
liLimburgan; Limburger; Limburgish
lnLingala
ln-AOLingala (angola)
ln-CDLingala (congo - kinshasa)
ln-CFLingala (central african republic)
ln-CGLingala (congo - brazzaville)
loLao
lo-LALao (laos)
ltLithuanian
lt-LTLithuanian (lithuania)
luLuba-Katanga
lu-CDLuba-katanga (congo - kinshasa)
lvLatvian
lv-LVLatvian (latvia)
mgMalagasy
mg-MGMalagasy (madagascar)
mhMarshallese
miMaori
mi-NZMāori (new zealand)
mkMacedonian
mk-MKMacedonian (north macedonia)
mnMongolian
mn-CNMongolian (china)
mn-MNMongolian (mongolia)
mtMaltese
mt-MTMaltese (malta)
myBurmese
my-MMBurmese (myanmar (burma))
naNauru
nbBokmål, Norwegian; Norwegian Bokmål
nb-NONorwegian bokmål (norway)
nb-SJNorwegian bokmål (svalbard & jan mayen)
ndNdebele, North; North Ndebele
nd-ZWNorth ndebele (zimbabwe)
ngNdonga
nlDutch; Flemish
nl-AWDutch (aruba)
nl-BEDutch (belgium)
nl-BQDutch (caribbean netherlands)
nl-CWDutch (curaçao)
nl-NLDutch (netherlands)
nl-SRDutch (suriname)
nl-SXDutch (sint maarten)
nnNorwegian Nynorsk; Nynorsk, Norwegian
nn-NONorwegian nynorsk (norway)
noNorwegian
nrNdebele, South; South Ndebele
nr-ZASouth ndebele (south africa)
nvNavajo; Navaho
nv-USNavajo (united states)
nyChichewa; Chewa; Nyanja
ny-MWNyanja (malawi)
ocOccitan (post 1500)
oc-ESOccitan (spain)
oc-FROccitan (france)
ojOjibwa
omOromo
om-ETOromo (ethiopia)
om-KEOromo (kenya)
osOssetian; Ossetic
os-GEOssetic (georgia)
os-RUOssetic (russia)
piPali
plPolish
pl-PLPolish (poland)
psPushto; Pashto
ps-AFPashto (afghanistan)
ps-PKPashto (pakistan)
quQuechua
qu-BOQuechua (bolivia)
qu-ECQuechua (ecuador)
qu-PEQuechua (peru)
rmRomansh
rm-CHRomansh (switzerland)
rnRundi
rn-BIRundi (burundi)
roRomanian; Moldavian; Moldovan
ro-MDRomanian (moldova)
ro-RORomanian (romania)
rwKinyarwanda
rw-RWKinyarwanda (rwanda)
saSanskrit
sa-INSanskrit (india)
scSardinian
sc-ITSardinian (italy)
seNorthern Sami
se-FINorthern sami (finland)
se-NONorthern sami (norway)
se-SENorthern sami (sweden)
sgSango
sg-CFSango (central african republic)
siSinhala; Sinhalese
si-LKSinhala (sri lanka)
skSlovak
sk-SKSlovak (slovakia)
slSlovenian
sl-SISlovenian (slovenia)
smSamoan
snShona
sn-ZWShona (zimbabwe)
soSomali
so-DJSomali (djibouti)
so-ETSomali (ethiopia)
so-KESomali (kenya)
so-SOSomali (somalia)
sqAlbanian
sq-ALAlbanian (albania)
sq-MKAlbanian (north macedonia)
sq-XKAlbanian (kosovo)
srSerbian
sr-BASerbian (bosnia & herzegovina)
sr-MESerbian (montenegro)
sr-RSSerbian (serbia)
sr-XKSerbian (kosovo)
ssSwati
ss-SZSwati (eswatini)
ss-ZASwati (south africa)
stSotho, Southern
st-LSSouthern sotho (lesotho)
st-ZASouthern sotho (south africa)
suSundanese
su-IDSundanese (indonesia)
svSwedish
sv-AXSwedish (åland islands)
sv-FISwedish (finland)
sv-SESwedish (sweden)
swSwahili
sw-CDSwahili (congo - kinshasa)
sw-KESwahili (kenya)
sw-TZSwahili (tanzania)
sw-UGSwahili (uganda)
tgTajik
tg-TJTajik (tajikistan)
thThai
th-THThai (thailand)
tiTigrinya
ti-ERTigrinya (eritrea)
ti-ETTigrinya (ethiopia)
tkTurkmen
tk-TMTurkmen (turkmenistan)
tlTagalog
tnTswana
tn-BWTswana (botswana)
tn-ZATswana (south africa)
toTonga (Tonga Islands)
to-TOTongan (tonga)
trTurkish
tr-CYTurkish (cyprus)
tr-TRTurkish (türkiye)
tsTsonga
ts-ZATsonga (south africa)
ttTatar
tt-RUTatar (russia)
twTwi
tyTahitian
ugUighur; Uyghur
ug-CNUyghur (china)
ukUkrainian
uk-UAUkrainian (ukraine)
uzUzbek
uz-AFUzbek (afghanistan)
uz-UZUzbek (uzbekistan)
veVenda
ve-ZAVenda (south africa)
voVolapük
vo-001Volapük (world)
waWalloon
wa-BEWalloon (belgium)
woWolof
wo-SNWolof (senegal)
xhXhosa
xh-ZAXhosa (south africa)
yiYiddish
yi-UAYiddish (ukraine)
yoYoruba
yo-BJYoruba (benin)
yo-NGYoruba (nigeria)
zaZhuang; Chuang
za-CNZhuang (china)
zuZulu
zu-ZAZulu (south africa)
Don’t see your locale? SuprSend supports all standard ISO 639-1 language codes, ISO 3166-1 alpha-2 country codes, and BCP 47 locale identifiers. 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, other for consistent behavior
  • Maintain en.json as 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:
Possible causes:
  • Latest translation files are not committed
  • User locale not set
  • Key missing in translation files
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.
Check if the format of variable name is correct in the locale file. It should be added as {{variable_name}} in the translation file.