This guide explains how to set a user’s language in OneSignal and send messages in their preferred language across push notifications, emails, and in-app messages.

Set user’s language

OneSignal automatically sets the language property from the device’s language when a user is first created using the web or mobile SDKs.

You can also manually set or update the user’s language using the ISO 639-1 2-letter language code with:

  1. The SDK’s setLanguage method.
  2. The language field in the Create user or Update user APIs.
  3. The language column in the CSV Importer.

See Supported languages for a list of valid language codes.


Send messages in different languages

Use tabs below to view localization options by messaging channel.

Dashboard sending

From Messages > Push > New Message or Templates, click Add Languages. Choose from:

Option 1: Checkboxes

Select languages you support. Any language not selected will fall back to Any/English.

Using checkboxes to select the languages.

Option 2: Import language content

Use the provided template to format the message in each language.

Modal to copy and paste data from a spreadsheet.

Copy and paste the content back into the “Add Languages” field.

Modal with example data.

Preview content to double-check, insert content, and new tabs will appear in the editor with the designated content filled out.

Content preview.

Option 3: Dynamic Content

Use Dynamic Content which involves creating and uploading a CSV file with the languages you support.

Troubleshooting

  • English required: Include a row for en as default.
  • Use correct headers: language_code, title, subtitle, message
  • Comma-separated values: Ensure proper CSV formatting.
  • Unsupported language: If not listed in the UI or template, it’s not supported. Use the next best option and contact [email protected].

The dashboard editor uses a standard HTML field. Special characters like % may cause display issues in RTL languages. Add RLM marks after such characters to fix formatting problems.


API sending

The contents and headings fields support multiple languages:

  {
    "contents": {
      "en": "English content",
      "fr": "French content"
    },
    "headings": {
      "en": "English heading",
      "fr": "French heading"
    }
  }

Supported languages

Language code maps to the language user property in the ISO 639-1 code 2-letter format. We support the following language codes.

If the language code is not included in the pop-up and CSV template, then this language is not supported. We recommend using the next best language and sending us a product request to [email protected]

LanguageLanguage Code
Englishen
Arabicar
Azerbaijaniaz
Bosnianbs
Catalanca
Chinese (Simplified)zh-Hans
Chinese (Traditional)zh-Hant
Croatianhr
Czechcs
Danishda
Dutchnl
Estonianet
Finnishfi
Frenchfr
Georgianka
Bulgarianbg
Germande
Greekel
Hindihi
Hebrewhe
Hungarianhu
Indonesianid
Italianit
Japaneseja
Koreanko
Latvianlv
Lithuanianlt
Malayms
Norwegiannb
Persianfa
Polishpl
Portuguesept
Punjabipa
Romanianro
Russianru
Serbiansr
Slovaksk
Spanishes
Swedishsv
Thaith
Turkishtr
Ukrainianuk
Vietnamesevi