The feature is only available for Novu Cloud users with Business or
Enterprise plans.
Introduction
The Translation Management feature allows you to seamlessly adapt your workflows to different languages and automatically apply them based on your customers’ locales. It enhances engagement, personalizes the user experience, and allows you to expand your market reach. To understand how Translation Management works in Novu we need to review its main pillars:- Translation Groups
- Translation Files
- Localized Message Content
- Subscribers locale
Translation Groups
Translation Group allows you to efficiently manage translations for diverse languages with shared business significance. For example, the Branding translation group can hold the content related to your company identity, while the Marketing translation group can exclusively house content related to your marketing campaigns. You aren’t obligated to divide your translation content, you can manage it all within a single translation group. To create the Translation Group navigate to theTranslations
page from the main navigation and click on the “Add group” button.




Translations
Translations are JSON files that contain the content of your messages in a specific language. For example, if you created a Marketing translation group with two target languages English and German, then your translation JSON files might look like this: English (en.json):


Localized Message Content
To localize your message content, you need to use the translation variables in the editor. The variables allow you to reference the values from the translation files. It consists of thei18n
handlebar helper and path to the translated value.
Let’s take a look at the example: {{i18n "marketing.welcome_message"}}
.
i18n
is the handlebar helper that tells Novu that you would like to use the Translations"marketing.welcome_message"
is the path that is composed of the Translation Group identifiermarketing
and translation JSON file keywelcome_message

i18n variables can be used in
subject
and preheader
fields of the email
step.Subscribers Locale
The subscribers locale defines in which language the message should be delivered to that recipient. When the locale is not specified it will fallback to the default locale set for the organization. The locale format includes ISO language plus the region, for examplede_DE
language German and region Germany.
To update the locale you can use Novu API or any of our SDKs, more information can be found here.
Supported Translations Locales
Supported Translations Locales
Language Name | Locale |
---|---|
English (United States) | en_US |
Spanish (Spain) | es_ES |
German (Germany) | de_DE |
French (France) | fr_FR |
Chinese Simplified | zh_CN |
Portuguese (Portugal) | pt_PT |
Russian (Russia) | ru_RU |
Chinese Traditional | zh_TW |
Persian (Afghanistan) | fa_AF |
Turkmen (Afghanistan) | tk_AF |
Albanian (Albania) | sq_AL |
Greek (Albania) | el_AL |
Arabic (Algeria) | ar_DZ |
English (American Samoa) | en_AS |
Samoan (American Samoa) | sm_AS |
Tongan (American Samoa) | to_AS |
Catalan (Andorra) | ca_AD |
Portuguese (Angola) | pt_AO |
Spanish (Argentina) | es_AR |
English (Argentina) | en_AR |
Italian (Argentina) | it_AR |
German (Argentina) | de_AR |
French (Argentina) | fr_AR |
Guarani (Argentina) | gn_AR |
Armenian (Armenia) | hy_AM |
Dutch (Aruba) | nl_AW |
Spanish (Aruba) | es_AW |
English (Aruba) | en_AW |
English (Australia) | en_AU |
German (Austria) | de_AT |
Croatian (Austria) | hr_AT |
Hungarian (Austria) | hu_AT |
Slovenian (Austria) | sl_AT |
Azerbaijani (Azerbaijan) | az_AZ |
Russian (Azerbaijan) | ru_AZ |
Armenian (Azerbaijan) | hy_AZ |
Arabic (Bahrain) | ar_BH |
English (Bahrain) | en_BH |
Persian (Bahrain) | fa_BH |
Urdu (Bahrain) | ur_BH |
Bengali (Bangladesh) | bn_BD |
English (Bangladesh) | en_BD |
English (Barbados) | en_BB |
Belarusian (Belarus) | be_BY |
Russian (Belarus) | ru_BY |
Dutch (Belgium) | nl_BE |
French (Belgium) | fr_BE |
German (Belgium) | de_BE |
English (Belize) | en_BZ |
Spanish (Belize) | es_BZ |
French (Benin) | fr_BJ |
English (Bermuda) | en_BM |
Portuguese (Bermuda) | pt_BM |
Dzongkha (Bhutan) | dz_BT |
Spanish (Bolivia) | es_BO |
Quechua (Bolivia) | qu_BO |
Aymara (Bolivia) | ay_BO |
Dutch (Caribbean Netherlands) | nl_BQ |
English (Caribbean Netherlands) | en_BQ |
Serbian (Bosnia and Herzegovina) | sr_BA |
English (Botswana) | en_BW |
Portuguese (Brazil) | pt_BR |
Spanish (Brazil) | es_BR |
English (Brazil) | en_BR |
French (Brazil) | fr_BR |
Malay (Brunei) | ms_BN |
Bulgarian (Bulgaria) | bg_BG |
French (Burkina Faso) | fr_BF |
French (Burundi) | fr_BI |
Rundi (Burundi) | rn_BI |
French (Cambodia) | fr_KH |
English (Cambodia) | en_KH |
French (Cameroon) | fr_CM |
English (Canada) | en_CA |
French (Canada) | fr_CA |
Inuktitut (Canada) | iu_CA |
French (Central African Republic) | fr_CF |
Sango (Central African Republic) | sg_CF |
Lingala (Central African Republic) | ln_CF |
Kongo (Central African Republic) | kg_CF |
French (Chad) | fr_TD |
Spanish (Chile) | es_CL |
Yue Chinese (Cantonese) (China) | yue_CN |
Uyghur, Uighur (China) | ug_CN |
Zhuang, Chuang (China) | za_CN |
Chinese Traditional (Hong Kong) | zh_HK |
Yue Chinese (Cantonese) (Hong Kong) | yue_HK |
English (Hong Kong) | en_HK |
Portuguese (Macau) | pt_MO |
English (Christmas Island) | en_CX |
English (Cocos (Keeling) Islands) | en_CC |
Spanish (Colombia) | es_CO |
Arabic (Comoros) | ar_KM |
French (Comoros) | fr_KM |
French (Congo - Brazzaville) | fr_CG |
Kongo (Congo - Brazzaville) | kg_CG |
Lingala (Congo - Brazzaville) | ln_CG |
Spanish (Costa Rica) | es_CR |
English (Costa Rica) | en_CR |
Croatian (Croatia) | hr_HR |
Serbian (Croatia) | sr_HR |
Dutch (Curaçao) | nl_CW |
Greek (Cyprus) | el_CY |
English (Cyprus) | en_CY |
Czech (Czechia) | cs_CZ |
Slovak (Czechia) | sk_CZ |
French (Côte d’Ivoire) | fr_CI |
French (Congo - Kinshasa) | fr_CD |
Lingala (Congo - Kinshasa) | ln_CD |
Kongo (Congo - Kinshasa) | kg_CD |
Swahili (Congo - Kinshasa) | sw_CD |
Danish (Denmark) | da_DK |
English (Denmark) | en_DK |
French (Djibouti) | fr_DJ |
Arabic (Djibouti) | ar_DJ |
Somali (Djibouti) | so_DJ |
Afar (Djibouti) | aa_DJ |
Spanish (Dominican Republic) | es_DO |
Spanish (Ecuador) | es_EC |
Arabic (Egypt) | ar_EG |
English (Egypt) | en_EG |
French (Egypt) | fr_EG |
Spanish (El Salvador) | es_SV |
Spanish (Equatorial Guinea) | es_GQ |
French (Equatorial Guinea) | fr_GQ |
Arabic (Eritrea) | ar_ER |
Tigrinya (Eritrea) | ti_ER |
Estonian (Estonia) | et_EE |
Russian (Estonia) | ru_EE |
Amharic (Ethiopia) | am_ET |
Oromo (Ethiopia) | om_ET |
Tigrinya (Ethiopia) | ti_ET |
Somali (Ethiopia) | so_ET |
Fijian (Fiji) | fj_FJ |
Finnish (Finland) | fi_FI |
Swedish (Finland) | sv_FI |
Breton (France) | br_FR |
Corsican (France) | co_FR |
Catalan (France) | ca_FR |
Basque (France) | eu_FR |
Occitan (France) | oc_FR |
French (French Guiana) | fr_GF |
Tahitian (French Polynesia) | ty_PF |
French (French Southern Territories) | fr_TF |
French (Gabon) | fr_GA |
Wolof (Gambia) | wo_GM |
Fulah (Gambia) | ff_GM |
Russian (Georgia) | ru_GE |
Armenian (Georgia) | hy_GE |
Azerbaijani (Georgia) | az_GE |
Akan (Ghana) | ak_GH |
Ewe (Ghana) | ee_GH |
Twi (Ghana) | tw_GH |
Spanish (Gibraltar) | es_GI |
Italian (Gibraltar) | it_GI |
Portuguese (Gibraltar) | pt_GI |
Greek (Greece) | el_GR |
English (Greece) | en_GR |
French (Greece) | fr_GR |
Kalaallisut (Greenland) | kl_GL |
English (Greenland) | en_GL |
French (Guadeloupe) | fr_GP |
English (Guam) | en_GU |
Spanish (Guatemala) | es_GT |
English (Guernsey) | en_GG |
French (Guinea) | fr_GN |
Portuguese (Guinea - Bissau) | pt_GW |
English (Guyana) | en_GY |
Italian (Vatican City) | it_VA |
French (Vatican City) | fr_VA |
Spanish (Honduras) | es_HN |
Hungarian (Hungary) | hu_HU |
Icelandic (Iceland) | is_IS |
English (Iceland) | en_IS |
German (Iceland) | de_IS |
Danish (Iceland) | da_IS |
Swedish (Iceland) | sv_IS |
Norwegian (Iceland) | no_IS |
English (India) | en_IN |
Hindi (India) | hi_IN |
Bengali (India) | bn_IN |
Telugu (India) | te_IN |
Marathi (India) | mr_IN |
Tamil (India) | ta_IN |
Urdu (India) | ur_IN |
Kannada (India) | kn_IN |
Malayalam (India) | ml_IN |
Odia (India) | or_IN |
Punjabi (India) | pa_IN |
Assamese (India) | as_IN |
Bihari (India) | bh_IN |
Kashmiri (India) | ks_IN |
Nepali (India) | ne_IN |
Sindhi (India) | sd_IN |
Konkani (India) | kok_IN |
Sanskrit (India) | sa_IN |
French (India) | fr_IN |
Indonesian (Indonesia) | id_ID |
English (Indonesia) | en_ID |
Dutch (Indonesia) | nl_ID |
Javanese (Indonesia) | jv_ID |
Persian (Iran) | fa_IR |
Arabic (Iraq) | ar_IQ |
Armenian (Iraq) | hy_IQ |
English (Ireland) | en_IE |
Irish (Ireland) | ga_IE |
English (Isle of Man) | en_IM |
Manx (Isle of Man) | gv_IM |
Hebrew (Israel) | he_IL |
English (Israel) | en_IL |
Italian (Italy) | it_IT |
Catalan (Italy) | ca_IT |
Corsican (Italy) | co_IT |
Slovenian (Italy) | sl_IT |
English (Jamaica) | en_JM |
Japanese (Japan) | ja_JP |
English (Jersey) | en_JE |
French (Jersey) | fr_JE |
Arabic (Jordan) | ar_JO |
English (Jordan) | en_JO |
Kazakh (Kazakhstan) | kk_KZ |
Russian (Kazakhstan) | ru_KZ |
Swahili (Kenya) | sw_KE |
Arabic (Kuwait) | ar_KW |
English (Kuwait) | en_KW |
Kyrgyz (Kyrgyzstan) | ky_KG |
Uzbek (Kyrgyzstan) | uz_KG |
Russian (Kyrgyzstan) | ru_KG |
Lao (Laos) | lo_LA |
French (Laos) | fr_LA |
English (Laos) | en_LA |
Latvian (Latvia) | lv_LV |
Russian (Latvia) | ru_LV |
Lithuanian (Latvia) | lt_LV |
Arabic (Lebanon) | ar_LB |
English (Lebanon) | en_LB |
Armenian (Lebanon) | hy_LB |
Southern Sotho (Lesotho) | st_LS |
Zulu (Lesotho) | zu_LS |
Xhosa (Lesotho) | xh_LS |
Arabic (Libya) | ar_LY |
Italian (Libya) | it_LY |
English (Libya) | en_LY |
German (Liechtenstein) | de_LI |
Lithuanian (Lithuania) | lt_LT |
Russian (Lithuania) | ru_LT |
Polish (Lithuania) | pl_LT |
Luxembourgish (Luxembourg) | lb_LU |
German (Luxembourg) | de_LU |
French (Luxembourg) | fr_LU |
French (Madagascar) | fr_MG |
Malagasy (Madagascar) | mg_MG |
Chichewa (Malawi) | ny_MW |
Sena (Malawi) | swk_MW |
Malay (Malaysia) | ms_MY |
English (Malaysia) | en_MY |
Tamil (Malaysia) | ta_MY |
Telugu (Malaysia) | te_MY |
Malayalam (Malaysia) | ml_MY |
Punjabi (Malaysia) | pa_MY |
Thai (Malaysia) | th_MY |
Divehi (Maldives) | dv_MV |
English (Maldives) | en_MV |
French (Mali) | fr_ML |
Bambara (Mali) | bm_ML |
English (Malta) | en_MT |
Marshallese (Marshall Islands) | mh_MH |
English (Marshall Islands) | en_MH |
French (Martinique) | fr_MQ |
French (Mauritania) | fr_MR |
Wolof (Mauritania) | wo_MR |
English (Mauritius) | en_MU |
French (Mauritius) | fr_MU |
French (Mayotte) | fr_YT |
Spanish (Mexico) | es_MX |
French (Monaco) | fr_MC |
English (Monaco) | en_MC |
Italian (Monaco) | it_MC |
Russian (Mongolia) | ru_MN |
Serbian (Montenegro) | sr_ME |
Hungarian (Montenegro) | hu_ME |
Albanian (Montenegro) | sq_ME |
Croatian (Montenegro) | hr_ME |
Arabic (Morocco) | ar_MA |
French (Morocco) | fr_MA |
Portuguese (Mozambique) | pt_MZ |
Burmese (Myanmar) | my_MM |
English (Namibia) | en_NA |
Afrikaans (Namibia) | af_NA |
German (Namibia) | de_NA |
Herero (Namibia) | hz_NA |
Nama (Namibia) | naq_NA |
Nauru (Nauru) | na_NR |
Nepali (Nepal) | ne_NP |
English (Nepal) | en_NP |
Dutch (Netherlands) | nl_NL |
Frisian | fy_NL |
English (New Zealand) | en_NZ |
Spanish (Nicaragua) | es_NI |
English (Nicaragua) | en_NI |
French (Niger) | fr_NE |
Hausa (Niger) | ha_NE |
Kanuri (Niger) | kr_NE |
Zarma (Niger) | dje_NE |
English (Nigeria) | en_NG |
Hausa (Nigeria) | ha_NG |
Yoruba (Nigeria) | yo_NG |
Igbo (Nigeria) | ig_NG |
Fulah (Nigeria) | ff_NG |
Filipino (Northern Mariana Islands) | fil_MP |
Tagalog (Northern Mariana Islands) | tl_MP |
English (Northern Mariana Islands) | en_MP |
Norwegian (Norway) | no_NO |
Norwegian Bokmål (Norway) | nb_NO |
Norwegian Nynorsk (Norway) | nn_NO |
Northern Sami (Norway) | se_NO |
Finnish (Norway) | fi_NO |
Arabic (Oman) | ar_OM |
English (Oman) | en_OM |
Urdu (Oman) | ur_OM |
Urdu (Pakistan) | ur_PK |
English (Pakistan) | en_PK |
Punjabi (Pakistan) | pa_PK |
Sindhi (Pakistan) | sd_PK |
Japanese (Palau) | ja_PW |
Filipino (Palau) | fil_PW |
Spanish (Panama) | es_PA |
English (Panama) | en_PA |
Hiri Motu (Papua New Guinea) | ho_PG |
Spanish (Paraguay) | es_PY |
Guarani (Paraguay) | gn_PY |
Spanish (Peru) | es_PE |
Quechua (Peru) | qu_PE |
Aymara (Peru) | ay_PE |
Tagalog (Philippines) | tl_PH |
English (Philippines) | en_PH |
Filipino (Philippines) | fil_PH |
Cebuano (Philippines) | ceb_PH |
Tausug (Philippines) | tsg_PH |
Polish (Poland) | pl_PL |
Spanish (Puerto Rico) | es_PR |
Arabic (Qatar) | ar_QA |
Spanish (Qatar) | es_QA |
Korean (Korea) | ko_KR |
English (South Korea) | en_KR |
Romanian (Moldova) | ro_MD |
Russian (Moldova) | ru_MD |
Turkish (Moldova) | tr_MD |
Romanian (Romania) | ro_RO |
Hungarian (Romania) | hu_RO |
Tatar (Russia) | tt_RU |
Komi (Russia) | kv_RU |
Chechen (Russia) | ce_RU |
Bashkir (Russia) | ba_RU |
Avaric (Russia) | av_RU |
Kinyarwanda (Rwanda) | rw_RW |
French (Rwanda) | fr_RW |
Swahili (Rwanda) | sw_RW |
French (Réunion) | fr_RE |
French (St. Barthélemy) | fr_BL |
French (St. Martin) | fr_MF |
French (St. Vincent & Grenadines) | fr_VC |
Samoan (Samoa) | sm_WS |
Portuguese (São Tomé and Príncipe) | pt_ST |
Arabic (Saudi Arabia) | ar_SA |
French (Senegal) | fr_SN |
Wolof (Senegal) | wo_SN |
Serbian (Serbia) | sr_RS |
Hungarian (Serbia) | hu_RS |
English (Singapore) | en_SG |
Malay (Singapore) | ms_SG |
Tamil (Singapore) | ta_SG |
Chinese Simplified (Singapore) | zh_SG |
Dutch (Sint Maarten) | nl_SX |
English (Sint Maarten) | en_SX |
Slovak (Slovakia) | sk_SK |
Hungarian (Slovakia) | hu_SK |
Slovenian (Slovenia) | sl_SI |
Somali (Somalia) | so_SO |
Italian (Somalia) | it_SO |
Zulu (South Africa) | zu_ZA |
Xhosa (South Africa) | xh_ZA |
Afrikaans (South Africa) | af_ZA |
Pedi (South Africa) | nso_ZA |
English (South Africa) | en_ZA |
Tswana (South Africa) | tn_ZA |
Southern Sotho (South Africa) | st_ZA |
Tsonga (South Africa) | ts_ZA |
Swati (South Africa) | ss_ZA |
Venda (South Africa) | ve_ZA |
South Ndebele (South Africa) | nr_ZA |
English (South Georgia & South Sandwich Islands) | en_GS |
English (South Sudan) | en_SS |
Catalan (Spain) | ca_ES |
Galician (Spain) | gl_ES |
Basque (Spain) | eu_ES |
Occitan (Spain) | oc_ES |
Sinhala (Sri Lanka) | si_LK |
Tamil (Sri Lanka) | ta_LK |
English (Sri Lanka) | en_LK |
Arabic (Sudan) | ar_SD |
English (Sudan) | en_SD |
English (Suriname) | en_SR |
Javanese (Suriname) | jv_SR |
Norwegian (Svalbard & Jan Mayen) | no_SJ |
Russian (Svalbard & Jan Mayen) | ru_SJ |
Swedish (Sweden) | sv_SE |
Northern Sami (Sweden) | se_SE |
German (Switzerland) | de_CH |
French (Switzerland) | fr_CH |
Italian (Switzerland) | it_CH |
Romansh (Switzerland) | rm_CH |
Arabic (Syria) | ar_SY |
Armenian (Syria) | hy_SY |
French (Syria) | fr_SY |
English (Syria) | en_SY |
Tajik (Tajikistan) | tg_TJ |
Russian (Tajikistan) | ru_TJ |
Thai (Thailand) | th_TH |
English (Thailand) | en_TH |
Albanian (North Macedonia) | sq_MK |
Turkish (North Macedonia) | tr_MK |
Serbian (North Macedonia) | sr_MK |
Indonesian (Timor-Leste) | id_TL |
English (Timor-Leste) | en_TL |
French (Togo) | fr_TG |
Ewe (Togo) | ee_TG |
Hausa (Togo) | ha_TG |
Tongan (Tonga) | to_TO |
English (Trinidad and Tobago) | en_TT |
French (Trinidad & Tobago) | fr_TT |
Spanish (Trinidad & Tobago) | es_TT |
Arabic (Tunisia) | ar_TN |
French (Tunisia) | fr_TN |
Turkish (Turkey) | tr_TR |
Azerbaijani (Turkey) | az_TR |
Avaric (Turkey) | av_TR |
Turkmen (Turkmenistan) | tk_TM |
Russian (Turkmenistan) | ru_TM |
Uzbek (Turkmenistan) | uz_TM |
English (Tuvalu) | en_TV |
Samoan (Tuvalu) | sm_TV |
Ganda (Uganda) | lg_UG |
Swahili (Uganda) | sw_UG |
Arabic (Uganda) | ar_UG |
Ukrainian (Ukraine) | uk_UA |
Russian (Ukraine) | ru_UA |
Polish (Ukraine) | pl_UA |
Hungarian (Ukraine) | hu_UA |
Arabic (United Arab Emirates) | ar_AE |
Persian (United Arab Emirates) | fa_AE |
English (United Arab Emirates) | en_AE |
Hindi (United Arab Emirates) | hi_AE |
Urdu (United Arab Emirates) | ur_AE |
English (United Kingdom) | en_GB |
Welsh (United Kingdom) | cy_GB |
Scottish Gaelic (UK) | gd_GB |
Swahili (Tanzania) | sw_TZ |
English (Tanzania) | en_TZ |
Arabic (Tanzania) | ar_TZ |
English (U.S. Minor Outlying Islands) | en_UM |
English (U.S. Virgin Islands) | en_VI |
Spanish (United States) | es_US |
Hawaiian (US) | haw_US |
French (US) | fr_US |
Spanish (Uruguay) | es_UY |
Uzbek (Uzbekistan) | uz_UZ |
Russian (Uzbekistan) | ru_UZ |
Tajik (Uzbekistan) | tg_UZ |
Bislama (Vanuatu) | bi_VU |
Spanish (Venezuela) | es_VE |
Vietnamese (Vietnam) | vi_VN |
English (Vietnam) | en_VN |
French (Vietnam) | fr_VN |
Arabic (Western Sahara) | ar_EH |
Arabic (Yemen) | ar_YE |
Bemba (Zambia) | bem_ZM |
Chichewa (Zambia) | ny_ZM |
English (Zimbabwe) | en_ZW |
Shona (Zimbabwe) | sn_ZW |
South Ndebele (Zimbabwe) | nr_ZW |
North Ndebele (Zimbabwe) | nd_ZW |
Editor Examples
Variables
It is possible to include variables in your translation strings, they should be wrapped in double curly brackets. Their value could be set as a string or as a variable - either a system variable or a variable sent through the payload.Context
By providing a context you can differ translations. Eg. useful to provide gender specific translations. For example:A boyfriend
. Not adding any context will output A friend
.
Plurals
To distinguish between plural translation options.7 items
Date formats
To control date formats, do as follows:Date can be a string or a variable you send in the payload as
{ date: new Date() }