Each user has a language property. The mobile and web SDKs set it from the device language the first time the user is created. You can set and overwrite it. See Set the user’s language.
Pass a code from Supported languages. Most codes are ISO 639-1 two-letter codes. Chinese is the exception: use zh-Hans for Simplified and zh-Hant for Traditional.In email, push, and SMS, read the property in Liquid as user.language. In-app messages cannot read user.language. They can only substitute tags. See Why did my in-app message ignore setLanguage?.
Open Messages > Push > New Message or a template, then click Add Languages.Option 1: CheckboxesSelect each language you support. The editor adds a tab per language. Recipients whose language you did not select receive the Any/English content.
Select Languages modal with a checkbox for each supported language.
Option 2: Import a spreadsheet
1
Copy the template
From Add Languages, open the import option and copy the template.
Import modal where you copy the spreadsheet template.
2
Fill one row per language
Use these column headers: language_code, title, subtitle, message. Include a row for en. These headers belong to this spreadsheet import. They are not the Dynamic Content CSV format.
3
Paste the sheet back and preview it
Paste the filled sheet into Add Languages and check the preview.
Import modal with language rows ready to insert.
4
Insert the content
Insert the rows. The editor adds a tab for each language and fills in the title, subtitle, and message.
Preview of imported content before it is inserted into the editor.
Option 3: Dynamic ContentUpload a CSV whose column headers are language codes (en, es, fr) and whose rows are message sections. Reference each cell with user.language. See Dynamic Content for the CSV shape and the Liquid.
The push editor stores text as HTML. In right-to-left languages, a character such as % can display in the wrong place. Add a right-to-left mark immediately after the character.
APISet contents to a map of language codes. Add headings for the title and subtitle for the iOS subtitle. Include en in every map, and use the same language codes in each map. en is required. Recipients whose language is not in the map receive the en text.Include headings for web push and Huawei. If you omit headings for web push, OneSignal uses your site name. subtitle is iOS only.
{ "app_id": "YOUR_APP_ID", "target_channel": "push", "included_segments": ["Subscribed Users"], "contents": { "en": "Your order has shipped.", "fr": "Votre commande a été expédiée.", "zh-Hans": "您的订单已发货。" }, "headings": { "en": "Order update", "fr": "Suivi de commande", "zh-Hans": "订单更新" }, "subtitle": { "en": "Track your package", "fr": "Suivez votre colis", "zh-Hans": "追踪您的包裹" }}
See Create message for targeting, scheduling, and the rest of the push fields.
Open Messages > Email > New Message or a template. Email has no language-map field.Option 1: One message per language segmentFollow Send one message per language segment. Create one email template per language and send it to the matching segment.Option 2: LiquidRead user.language and render one block per code. The else branch is the default for any other language.
{% assign lang = user.language | default: "en" %}{% if lang == "fr" %} Bonjour {{ first_name | default: "there" }}!{% elsif lang == "es" %} Hola {{ first_name | default: "there" }}!{% else %} Hi {{ first_name | default: "there" }}!{% endif %}
A recipient with user.language set to fr sees the French greeting. A recipient with de, or with no language set, sees the English greeting.
Email template that branches on the user's language with Liquid.
See Using Liquid syntax for case / when and other conditionals.Option 3: Dynamic ContentUpload a CSV whose column headers are language codes and reference the cells with user.language. See Dynamic Content.APIThe Create message API does not accept a language map for email. email_subject and email_body are single strings. Put the Liquid from the section above in a template, then send that template:
To send a different template to each language, target a language segment or a languagefilter instead of one template for every subscriber. See Create message.
Open Messages > In-App > New In-App or an existing in-app message, then click Add Languages. This works in the block editor, the HTML editor, and on in-app steps in a Journey.Each recipient sees the variant that matches their language property. Recipients with no matching variant see the default. Test & Preview sends each test device its own language variant. On the report, Group by Language compares impressions and clicks per language, and the CSV export includes the same breakdown.An existing single-language in-app message stays unchanged until you edit it or duplicate it. Either action migrates the message to the multi-language format. Each language variant has its own 1 MB size limit, separate from the default message.Option 1: CheckboxesSelect each language you support. The editor adds a tab per language. Recipients whose language you did not select receive the default variant.
Select Languages modal with a checkbox for each supported language.
Option 2: One message per language segmentFollow Send one message per language segment when each language needs its own in-app message instead of tabs on one message.Option 3: Tag substitutionUse Add Languages to localize the message. Use a tag only when you need conditional copy inside a single variant.
In-app Liquid can only substitute tags. It cannot read user.language, subscription.language, or any other property object. Calling setLanguage does not change which tag branch renders.
Set a tag to the same code you store on the language property, such as de rather than german. The tag must already be on the user when they open the app and start a new session. See Tags and supported personalization fields.
Tags
language : defirst_name : Jon
Template
{% assign lang = language %}{% if lang == "fr" %} Bonjour {{ first_name }}!{% elsif lang == "es" %} Hola {{ first_name }}!{% elsif lang == "de" %} Guten Tag {{ first_name }}!{% else %} Hello {{ first_name }}!{% endif %}
Result
Guten Tag Jon!
Open Messages > SMS > New Message or a template.Option 1: One message per language segmentFollow Send one message per language segment.Option 2: Dynamic ContentUpload a Dynamic Content CSV whose column headers are language codes and reference the cells with user.language.APISet contents to a map of language codes. SMS does not use headings or subtitle. Include en. Recipients whose language is not in the map receive the en text.
{ "app_id": "YOUR_APP_ID", "target_channel": "sms", "included_segments": ["Subscribed Users"], "contents": { "en": "Your order has shipped.", "fr": "Votre commande a été expédiée." }}
Store one of these codes on the user’s language property. en is the required default for push and SMS. Most codes are ISO 639-1. zh-Hans (Simplified Chinese) and zh-Hant (Traditional Chinese) are script subtags, not two-letter codes.
If a code is not in this table, OneSignal does not offer it in the dashboard language picker or the import template. Use the closest supported language, or email support@onesignal.com to request the language.
Their language property did not match a variant on the message, so OneSignal sent the default. In the dashboard that default is the Any/English tab. In the push and SMS APIs it is the en entry. Check the user’s language on their profile, then confirm that same code is a tab on the message or a key in contents.
Push and SMS contents require en. The push dashboard keeps the Any/English tab as the default for anyone whose language you did not add. Email and in-app tag conditionals use the else branch for every other language.
Can I localize email with a language map in the API?
No. Email email_subject and email_body are single strings. Branch on user.language with Liquid, use Dynamic Content, or send one template per language segment.
setLanguage updates the language property, and Add Languages uses that property. Liquid inside an in-app message does not. In-app Liquid can only read tags. Set a tag to the same code, such as de, and branch on that tag. The tag must be present before the user starts a new session.
How do I add languages to an existing in-app message?
Edit or duplicate the message. Either action migrates a single-language in-app message to the multi-language format. Until you do that, the message stays as it is.
The push editor stores text as HTML. A character such as % can display in the wrong place in a right-to-left language. Add a right-to-left mark immediately after the character.
Upload a CSV whose columns are language codes and insert the matching cell with Liquid.
Using Liquid syntax
Branch message content with conditionals, filters, and fallbacks.
Properties and tags
Read user.language and other stored properties in Liquid.
Segmentation
Build a segment filtered on Language and send one message per language.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"OneSignal Documentation","description":"OneSignal is a platform for sending push notifications, emails, in-app messages, and SMS campaigns via a single API, Journey Builder, and a dashboard.","colors":{"primary":"#3A3DB3","light":"#E54B4D","dark":"#3A3DB3"},"logo":{"light":"https://mintcdn.com/onesignal/yJcueeDCO7UpHnnY/logo/OneSignal-Logo.svg?fit=max\u0026auto=format\u0026n=yJcueeDCO7UpHnnY\u0026q=85\u0026s=1fcfb6fef6d820fd9d99c74850711107","dark":"https://mintcdn.com/onesignal/s4WC_KzLxf8ornqq/logo/OneSignal-Logo-White.svg?fit=max\u0026auto=format\u0026n=s4WC_KzLxf8ornqq\u0026q=85\u0026s=2573a53b5aea961e18c82b3af8f31925"},"favicon":"https://mintcdn.com/onesignal/SGduBFHpiRdg5l6h/favicon.ico?fit=max\u0026auto=format\u0026n=SGduBFHpiRdg5l6h\u0026q=85\u0026s=c0a99fadc0553c658a83741c5611cef4","api":{"examples":{"languages":["curl","typescript","python","php","go","ruby","java","csharp","rust"],"autogenerate":true}},"navbar":{"links":[{"href":"mailto:support@onesignal.com","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.onesignal.com"}},"footer":{"socials":{"github":"https://github.com/OneSignal","linkedin":"https://linkedin.com/company/onesignal","youtube":"https://www.youtube.com/@onesignalofficial/playlists"}},"seo":{"metatags":{"apple-mobile-web-app-title":"OneSignal Docs"}},"fonts":{"family":"Nunito Sans"},"styling":{"eyebrows":"breadcrumbs","latex":true},"integrations":{"ga4":{"measurementId":"G-2DGWL0VYP5"},"posthog":{"apiKey":"phc_vZpvE0f5eyzcOt30FHer34yddVmNdo9kmlMVRBzLMtn","apiHost":"https://eu.i.posthog.com","sessionRecording":true}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"languages":[{"language":"en","href":"docs/en/home"},{"language":"cn","href":"docs/cn/home"},{"language":"ko","href":"docs/ko/home"},{"language":"ja","href":"docs/ja/home"},{"language":"tr","href":"docs/tr/home"},{"language":"pt-BR","href":"docs/pt-BR/home"},{"language":"es","href":"docs/es/home"},{"language":"fr","href":"docs/fr/home"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"onesignal","hasAudioNarration":false,"actualSubdomain":"onesignal","customDomains":["documentation.onesignal.com"],"gitSource":{"type":"github","owner":"onesignal","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aebb1cc40574e0e146e06f5","collectionId":"7de601f2-2191-44e0-a201-86d097330b1f","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aebb1cc40574e0e146e06f5"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aee76d2161a823262d5e93f","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"en","tag":"User Guides","count":203},{"language":"es","tag":"Guías del Usuario","count":178},{"language":"fr","tag":"Guides utilisateur","count":178},{"language":"ja","tag":"ユーザーガイド","count":178},{"language":"ko","tag":"사용자 가이드","count":178},{"language":"pt-BR","tag":"Guia do Usuário","count":178},{"language":"tr","tag":"Kullanıcı Kılavuzları","count":178},{"language":"cn","tag":"用户指南","count":176},{"language":"en","tag":"Message channels","count":90},{"language":"es","tag":"Canales de mensajería","count":84},{"language":"fr","tag":"Canaux de messagerie","count":84},{"language":"ja","tag":"メッセージングチャネル","count":84},{"language":"ko","tag":"메시지 채널","count":84},{"language":"pt-BR","tag":"Canais de mensagem","count":84},{"language":"tr","tag":"Mesaj kanalları","count":84},{"language":"cn","tag":"消息渠道","count":83},{"language":"default","tag":"API Reference","count":68},{"language":"default","tag":"API reference","count":64},{"language":"en","tag":"Analytics \u0026 Integrations","count":53},{"language":"es","tag":"Analítica \u0026 Integraciones","count":52},{"language":"fr","tag":"Analyses et intégrations","count":52},{"language":"ja","tag":"分析 \u0026 統合","count":52},{"language":"ko","tag":"분석 \u0026 통합","count":52},{"language":"pt-BR","tag":"Análises \u0026 Integrações","count":52},{"language":"tr","tag":"Analitik ve Entegrasyonlar","count":52},{"language":"cn","tag":"分析和集成","count":51},{"language":"cn","tag":"开发者指南","count":48},{"language":"es","tag":"Guías del desarrollador","count":48},{"language":"fr","tag":"Guides développeur","count":48},{"language":"ja","tag":"開発者ガイド","count":48},{"language":"ko","tag":"개발자 가이드","count":48},{"language":"tr","tag":"Geliştirici Kılavuzları","count":48},{"language":"en","tag":"Developer Guides","count":47},{"language":"pt-BR","tag":"Guia de desenvolvedor","count":47},{"language":"en","tag":"Integrations","count":37},{"language":"es","tag":"Integraciones","count":37},{"language":"fr","tag":"Intégrations","count":37},{"language":"ja","tag":"統合","count":37},{"language":"ko","tag":"통합","count":37},{"language":"pt-BR","tag":"Integrações","count":37},{"language":"tr","tag":"Entegrasyonlar","count":37},{"language":"cn","tag":"集成","count":36},{"language":"en","tag":"Tutorials","count":35},{"language":"cn","tag":"推送通知","count":31},{"language":"cn","tag":"OneSignal 作为目的地","count":31},{"language":"en","tag":"Push","count":31},{"language":"en","tag":"OneSignal as destination","count":31},{"language":"es","tag":"Push notificaciones","count":31},{"language":"es","tag":"OneSignal como destino","count":31},{"language":"fr","tag":"Push","count":31},{"language":"fr","tag":"OneSignal comme destination","count":31},{"language":"ja","tag":"プッシュ通知","count":31},{"language":"ja","tag":"OneSignal as 宛先","count":31},{"language":"ko","tag":"푸시","count":31},{"language":"ko","tag":"OneSignal을 데이터 목적지로 사용","count":31},{"language":"pt-BR","tag":"Push notificações","count":31},{"language":"pt-BR","tag":"OneSignal como destino","count":31},{"language":"tr","tag":"Anlık bildirimler","count":31},{"language":"tr","tag":"OneSignal hedef","count":31},{"language":"en","tag":"Mobile SDKs","count":26},{"language":"cn","tag":"移动SDK","count":25},{"language":"es","tag":"SDKs móviles","count":25},{"language":"fr","tag":"SDK mobiles","count":25},{"language":"ja","tag":"モバイルSDK","count":25},{"language":"ko","tag":"모바일 SDKs","count":25},{"language":"pt-BR","tag":"SDKs móveis","count":25},{"language":"tr","tag":"Mobil SDK'lar","count":25},{"language":"cn","tag":"教程","count":24},{"language":"es","tag":"Tutoriales","count":24},{"language":"fr","tag":"Tutoriels","count":24},{"language":"ja","tag":"チュートリアル","count":24},{"language":"ko","tag":"튜토리얼","count":24},{"language":"pt-BR","tag":"Tutoriais","count":24},{"language":"tr","tag":"Eğitimler","count":24},{"language":"en","tag":"Mobile SDK setup","count":19},{"language":"cn","tag":"移动SDK设置","count":18},{"language":"es","tag":"Configuración del SDK móvil","count":18},{"language":"fr","tag":"Configuration SDK mobile","count":18},{"language":"ja","tag":"モバイルSDKセットアップ","count":18},{"language":"ko","tag":"모바일 SDK 설정","count":18},{"language":"pt-BR","tag":"Configuração do SDK móvel","count":18},{"language":"tr","tag":"Mobil SDK kurulumu","count":18},{"language":"default","tag":"Messages","count":9},{"language":"default","tag":"Users","count":9},{"language":"default","tag":"Organization","count":9},{"language":"default","tag":"Journeys","count":8},{"language":"default","tag":"Deprecated","count":6},{"language":"default","tag":"Templates","count":6},{"language":"default","tag":"Subscriptions","count":6},{"language":"default","tag":"Segments","count":5}]},"assistantConfig":{"enableStarterQuestions":false,"deflection":{"enabled":true,"email":"support@onesignal.com","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"docs/en/multi-language-messaging","slug":"/docs/en/multi-language-messaging","pageMetadata":{"title":"Multi-language messaging","description":"Send push, email, in-app, and SMS in each user's language. Set the language property, then match it from the dashboard or the Create message API.","keywords":["localized notifications","push notification languages","setLanguage","Add Languages","language property","user.language","ISO 639-1","zh-Hans","zh-Hant","fallback language","fallback to English","email localization","localize email with Liquid","in-app message languages","translate in-app message","SMS localization","translate push notification","language_code"],"href":"/docs/en/multi-language-messaging"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Send push, email, in-app, and SMS in each user’s language. Set the language property, then match it from the dashboard or the Create message API.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CodeBlock,Columns,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Tab,Table,Tabs,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Columns)_missingMdxReference(`Columns`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Set each user’s language, then send the message variant that matches it across push, email, in-app, and SMS.`}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`The channel you want to send is already set up.`}),`\n`,_jsxs(_components.li,{children:[`Each user has a language property. The mobile and web SDKs set it from the device language the first time the user is created. You can set and overwrite it. See `,_jsx(_components.a,{href:`#set-the-users-language`,children:`Set the user’s language`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`choose-how-to-localize-each-channel`,children:`Choose how to localize each channel`}),`\n`,_jsx(_components.p,{children:`OneSignal sends the message variant that matches the user’s language property. Use the table for what each channel sends when nothing matches.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Channel`}),_jsx(_components.th,{children:`Dashboard`}),_jsx(_components.th,{children:`API`}),_jsx(_components.th,{children:`Unmatched language`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Push`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Add Languages`}),`, `,_jsx(_components.a,{href:`/docs/en/using-liquid-syntax`,children:`Liquid`}),`, or `,_jsx(_components.a,{href:`/docs/en/dynamic-content`,children:`Dynamic Content`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`contents`}),`, `,_jsx(_components.code,{children:`headings`}),`, and `,_jsx(_components.code,{children:`subtitle`})]}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Any/English`}),` or `,_jsx(_components.code,{children:`en`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Email`}),_jsxs(_components.td,{children:[`One message per language segment, `,_jsx(_components.a,{href:`/docs/en/using-liquid-syntax`,children:`Liquid`}),`, or `,_jsx(_components.a,{href:`/docs/en/dynamic-content`,children:`Dynamic Content`})]}),_jsxs(_components.td,{children:[`Liquid in `,_jsx(_components.code,{children:`email_subject`}),` and `,_jsx(_components.code,{children:`email_body`}),`. There is no language map.`]}),_jsxs(_components.td,{children:[`Your Liquid `,_jsx(_components.code,{children:`else`}),` branch, or anyone outside the segment`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`In-app`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Add Languages`}),`, `,_jsx(_components.a,{href:`/docs/en/using-liquid-syntax`,children:`Liquid`}),` with tags, or one message per language segment`]}),_jsx(_components.td,{children:`No language map. Liquid in the message can only read tags.`}),_jsxs(_components.td,{children:[`The default variant, or your Liquid `,_jsx(_components.code,{children:`else`}),` branch`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`SMS`}),_jsxs(_components.td,{children:[`One message per language segment or `,_jsx(_components.a,{href:`/docs/en/dynamic-content`,children:`Dynamic Content`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`contents`}),` only`]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`en`}),` in the API. A segment send reaches only that segment.`]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`send-one-message-per-language-segment`,children:`Send one message per language segment`}),`\n`,_jsx(_components.p,{children:`Every channel can send one message per language segment. Use this when each language needs its own message instead of variants on a single message.`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Create a `,_jsx(_components.a,{href:`/docs/en/segmentation`,children:`segment`}),` for each language. Filter on `,_jsx(_components.strong,{children:`Language`}),` and set the value to a code from `,_jsx(_components.a,{href:`#supported-languages`,children:`Supported languages`}),`, such as `,_jsx(_components.code,{children:`fr`}),` or `,_jsx(_components.code,{children:`es`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Create one message or `,_jsx(_components.a,{href:`/docs/en/templates`,children:`template`}),` per language.`]}),`\n`,_jsx(_components.li,{children:`Send each message to its segment.`}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`set-the-user’s-language`,children:`Set the user’s language`}),`\n`,_jsxs(_components.p,{children:[`The mobile and web SDKs set the `,_jsx(_components.code,{children:`language`}),` property from the device language when a user is first created.`]}),`\n`,_jsx(_components.p,{children:`Update it later with any of these:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`The mobile SDK `,_jsx(_components.a,{href:`/docs/en/mobile-sdk-reference#setlanguage`,children:_jsx(_components.code,{children:`setLanguage`})}),` method, or the web SDK `,_jsx(_components.a,{href:`/docs/en/web-sdk-reference#getlanguage-setlanguage`,children:_jsx(_components.code,{children:`setLanguage`})}),` method.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.code,{children:`language`}),` field on `,_jsx(_components.a,{href:`/reference/create-user`,children:`Create user`}),` or `,_jsx(_components.a,{href:`/reference/update-user`,children:`Update user`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.code,{children:`language`}),` column in the `,_jsx(_components.a,{href:`/docs/en/import`,children:`CSV importer`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Pass a code from `,_jsx(_components.a,{href:`#supported-languages`,children:`Supported languages`}),`. Most codes are `,_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes`,children:`ISO 639-1`}),` two-letter codes. Chinese is the exception: use `,_jsx(_components.code,{children:`zh-Hans`}),` for Simplified and `,_jsx(_components.code,{children:`zh-Hant`}),` for Traditional.`]}),`\n`,_jsxs(_components.p,{children:[`In email, push, and SMS, read the property in Liquid as `,_jsx(_components.a,{href:`/docs/en/personalization-properties-and-tags#user-subscription-properties`,children:_jsx(_components.code,{children:`user.language`})}),`. In-app messages cannot read `,_jsx(_components.code,{children:`user.language`}),`. They can only substitute tags. See `,_jsxs(_components.a,{href:`#why-did-my-in-app-message-ignore-setlanguage`,children:[`Why did my in-app message ignore `,_jsx(_components.code,{children:`setLanguage`}),`?`]}),`.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`send-messages-in-different-languages`,children:`Send messages in different languages`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Push`,id:`push`,children:[_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Messages > Push > New Message`}),` or a `,_jsx(_components.a,{href:`/docs/en/templates`,children:`template`}),`, then click `,_jsx(_components.strong,{children:`Add Languages`}),`.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 1: Checkboxes`})}),_jsxs(_components.p,{children:[`Select each language you support. The editor adds a tab per language. Recipients whose language you did not select receive the `,_jsx(_components.strong,{children:`Any/English`}),` content.`]}),_jsx(Frame,{caption:`Select Languages modal with a checkbox for each supported language.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6291cdff9431f4ac7c4cbb7cbeff8d39f06c9cd5332f0b9b9309f8ff1071632a-Screenshot_2025-01-30_at_10.30.54_AM.png?fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=0fb96aa3471800377551d68effdfa1ae`,alt:`Select Languages modal with checkboxes for each supported language`,\"data-og-width\":`1390`,width:`1390`,\"data-og-height\":`924`,height:`924`,\"data-path\":`images/docs/6291cdff9431f4ac7c4cbb7cbeff8d39f06c9cd5332f0b9b9309f8ff1071632a-Screenshot_2025-01-30_at_10.30.54_AM.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6291cdff9431f4ac7c4cbb7cbeff8d39f06c9cd5332f0b9b9309f8ff1071632a-Screenshot_2025-01-30_at_10.30.54_AM.png?w=280\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=e2c1f1342d9a5a9bf651a7469b4c332f 280w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6291cdff9431f4ac7c4cbb7cbeff8d39f06c9cd5332f0b9b9309f8ff1071632a-Screenshot_2025-01-30_at_10.30.54_AM.png?w=560\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=aa7aa6e837d62bdfeeafd386f217edf5 560w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6291cdff9431f4ac7c4cbb7cbeff8d39f06c9cd5332f0b9b9309f8ff1071632a-Screenshot_2025-01-30_at_10.30.54_AM.png?w=840\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=0ebba6997caabbb704f94d43efb54996 840w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6291cdff9431f4ac7c4cbb7cbeff8d39f06c9cd5332f0b9b9309f8ff1071632a-Screenshot_2025-01-30_at_10.30.54_AM.png?w=1100\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=5b53b23f21f859cfb6b4a7b438c6f6d1 1100w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6291cdff9431f4ac7c4cbb7cbeff8d39f06c9cd5332f0b9b9309f8ff1071632a-Screenshot_2025-01-30_at_10.30.54_AM.png?w=1650\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=2bfec58b1987eaba476efe085b4c791e 1650w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6291cdff9431f4ac7c4cbb7cbeff8d39f06c9cd5332f0b9b9309f8ff1071632a-Screenshot_2025-01-30_at_10.30.54_AM.png?w=2500\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=b10bb31b41efae1f6add56515c073b0b 2500w`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 2: Import a spreadsheet`})}),_jsxs(Steps,{children:[_jsxs(Step,{title:`Copy the template`,children:[_jsxs(_components.p,{children:[`From `,_jsx(_components.strong,{children:`Add Languages`}),`, open the import option and copy the template.`]}),_jsx(Frame,{caption:`Import modal where you copy the spreadsheet template.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5aa9be9a86f23eaef5810d84496e974d3ec911f884e3bd2e4765cb97faa94e76-Screenshot_2025-01-30_at_10.46.31_AM.png?fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=06d2858a2e8eef6019f4b87ec9b862f6`,alt:`Add Languages import modal with a spreadsheet template to copy`,\"data-og-width\":`1780`,width:`1780`,\"data-og-height\":`1018`,height:`1018`,\"data-path\":`images/docs/5aa9be9a86f23eaef5810d84496e974d3ec911f884e3bd2e4765cb97faa94e76-Screenshot_2025-01-30_at_10.46.31_AM.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5aa9be9a86f23eaef5810d84496e974d3ec911f884e3bd2e4765cb97faa94e76-Screenshot_2025-01-30_at_10.46.31_AM.png?w=280\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=42b2a00f242375ffc04f8e431163cb6a 280w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5aa9be9a86f23eaef5810d84496e974d3ec911f884e3bd2e4765cb97faa94e76-Screenshot_2025-01-30_at_10.46.31_AM.png?w=560\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=6df352f2010f77befb95c57ea48d2f7a 560w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5aa9be9a86f23eaef5810d84496e974d3ec911f884e3bd2e4765cb97faa94e76-Screenshot_2025-01-30_at_10.46.31_AM.png?w=840\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=145f8ba6f4a659a993c15f854bab80fb 840w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5aa9be9a86f23eaef5810d84496e974d3ec911f884e3bd2e4765cb97faa94e76-Screenshot_2025-01-30_at_10.46.31_AM.png?w=1100\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=709a57b27fcf5b133909c84715f6c181 1100w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5aa9be9a86f23eaef5810d84496e974d3ec911f884e3bd2e4765cb97faa94e76-Screenshot_2025-01-30_at_10.46.31_AM.png?w=1650\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=f5e992a11bae362b2a5f42c3d28844ee 1650w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5aa9be9a86f23eaef5810d84496e974d3ec911f884e3bd2e4765cb97faa94e76-Screenshot_2025-01-30_at_10.46.31_AM.png?w=2500\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=050d3f4755ca4dd90a12a27fa72e7b9b 2500w`})})]}),_jsx(Step,{title:`Fill one row per language`,children:_jsxs(_components.p,{children:[`Use these column headers: `,_jsx(_components.code,{children:`language_code`}),`, `,_jsx(_components.code,{children:`title`}),`, `,_jsx(_components.code,{children:`subtitle`}),`, `,_jsx(_components.code,{children:`message`}),`. Include a row for `,_jsx(_components.code,{children:`en`}),`. These headers belong to this spreadsheet import. They are not the `,_jsx(_components.a,{href:`/docs/en/dynamic-content`,children:`Dynamic Content`}),` CSV format.`]})}),_jsxs(Step,{title:`Paste the sheet back and preview it`,children:[_jsxs(_components.p,{children:[`Paste the filled sheet into `,_jsx(_components.strong,{children:`Add Languages`}),` and check the preview.`]}),_jsx(Frame,{caption:`Import modal with language rows ready to insert.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5661f24c79e47b246eaffc22955de3b5dfbc8ab746958b0c0db82a997a2ad5d3-Screenshot_2025-01-30_at_10.53.34_AM.png?fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=b1fd2210bc3fb85c554b0f71ffbd2f94`,alt:`Add Languages modal showing pasted rows for language code, title, subtitle, and message`,\"data-og-width\":`1780`,width:`1780`,\"data-og-height\":`1018`,height:`1018`,\"data-path\":`images/docs/5661f24c79e47b246eaffc22955de3b5dfbc8ab746958b0c0db82a997a2ad5d3-Screenshot_2025-01-30_at_10.53.34_AM.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5661f24c79e47b246eaffc22955de3b5dfbc8ab746958b0c0db82a997a2ad5d3-Screenshot_2025-01-30_at_10.53.34_AM.png?w=280\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=fb61335791c4d2e4b35c64696248165d 280w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5661f24c79e47b246eaffc22955de3b5dfbc8ab746958b0c0db82a997a2ad5d3-Screenshot_2025-01-30_at_10.53.34_AM.png?w=560\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=21902ca66d670f0ed47e9aa3352112ce 560w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5661f24c79e47b246eaffc22955de3b5dfbc8ab746958b0c0db82a997a2ad5d3-Screenshot_2025-01-30_at_10.53.34_AM.png?w=840\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=cd23a555766d3e9e9ec0e1a92769c488 840w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5661f24c79e47b246eaffc22955de3b5dfbc8ab746958b0c0db82a997a2ad5d3-Screenshot_2025-01-30_at_10.53.34_AM.png?w=1100\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=a76e1c2a1a5f8d4fe9f58445a438cf7b 1100w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5661f24c79e47b246eaffc22955de3b5dfbc8ab746958b0c0db82a997a2ad5d3-Screenshot_2025-01-30_at_10.53.34_AM.png?w=1650\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=a443bc2976bf87c046bdb399ff827bcb 1650w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5661f24c79e47b246eaffc22955de3b5dfbc8ab746958b0c0db82a997a2ad5d3-Screenshot_2025-01-30_at_10.53.34_AM.png?w=2500\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=930a1fecf2e577215feafd6542205104 2500w`})})]}),_jsxs(Step,{title:`Insert the content`,children:[_jsx(_components.p,{children:`Insert the rows. The editor adds a tab for each language and fills in the title, subtitle, and message.`}),_jsx(Frame,{caption:`Preview of imported content before it is inserted into the editor.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/7acf7e51c3b6dd2ace8c4da6acd04942ca1a10086949e2f7ffd1c88328f1f78e-Screenshot_2025-01-30_at_10.54.27_AM.png?fit=max\u0026auto=format\u0026n=jBdBk5XvQR5eKOks\u0026q=85\u0026s=323fa5b31d9905bde453aa0ad893d919`,alt:`Content preview showing a tab of imported copy for each language`,\"data-og-width\":`1584`,width:`1584`,\"data-og-height\":`664`,height:`664`,\"data-path\":`images/docs/7acf7e51c3b6dd2ace8c4da6acd04942ca1a10086949e2f7ffd1c88328f1f78e-Screenshot_2025-01-30_at_10.54.27_AM.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/7acf7e51c3b6dd2ace8c4da6acd04942ca1a10086949e2f7ffd1c88328f1f78e-Screenshot_2025-01-30_at_10.54.27_AM.png?w=280\u0026fit=max\u0026auto=format\u0026n=jBdBk5XvQR5eKOks\u0026q=85\u0026s=b2c682222fb675490f8b524a6741849c 280w, https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/7acf7e51c3b6dd2ace8c4da6acd04942ca1a10086949e2f7ffd1c88328f1f78e-Screenshot_2025-01-30_at_10.54.27_AM.png?w=560\u0026fit=max\u0026auto=format\u0026n=jBdBk5XvQR5eKOks\u0026q=85\u0026s=3cbca503caa29bb13e0882f1e08c4148 560w, https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/7acf7e51c3b6dd2ace8c4da6acd04942ca1a10086949e2f7ffd1c88328f1f78e-Screenshot_2025-01-30_at_10.54.27_AM.png?w=840\u0026fit=max\u0026auto=format\u0026n=jBdBk5XvQR5eKOks\u0026q=85\u0026s=44c54c4fcc3d70fa78319efdce5dfeaa 840w, https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/7acf7e51c3b6dd2ace8c4da6acd04942ca1a10086949e2f7ffd1c88328f1f78e-Screenshot_2025-01-30_at_10.54.27_AM.png?w=1100\u0026fit=max\u0026auto=format\u0026n=jBdBk5XvQR5eKOks\u0026q=85\u0026s=5b653dd60ac34166839f4bcd4d371b7c 1100w, https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/7acf7e51c3b6dd2ace8c4da6acd04942ca1a10086949e2f7ffd1c88328f1f78e-Screenshot_2025-01-30_at_10.54.27_AM.png?w=1650\u0026fit=max\u0026auto=format\u0026n=jBdBk5XvQR5eKOks\u0026q=85\u0026s=8aac762ee2c79d59fac3fa4f48742522 1650w, https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/7acf7e51c3b6dd2ace8c4da6acd04942ca1a10086949e2f7ffd1c88328f1f78e-Screenshot_2025-01-30_at_10.54.27_AM.png?w=2500\u0026fit=max\u0026auto=format\u0026n=jBdBk5XvQR5eKOks\u0026q=85\u0026s=54b322cd8da2cf123dc2aa154bf86420 2500w`})})]})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 3: Dynamic Content`})}),_jsxs(_components.p,{children:[`Upload a CSV whose column headers are language codes (`,_jsx(_components.code,{children:`en`}),`, `,_jsx(_components.code,{children:`es`}),`, `,_jsx(_components.code,{children:`fr`}),`) and whose rows are message sections. Reference each cell with `,_jsx(_components.code,{children:`user.language`}),`. See `,_jsx(_components.a,{href:`/docs/en/dynamic-content`,children:`Dynamic Content`}),` for the CSV shape and the Liquid.`]}),_jsx(Info,{children:_jsxs(_components.p,{children:[`The push editor stores text as HTML. In right-to-left languages, a character such as `,_jsx(_components.code,{children:`%`}),` can display in the wrong place. Add a `,_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Right-to-left_mark`,children:`right-to-left mark`}),` immediately after the character.`]})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`API`})}),_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`contents`}),` to a map of language codes. Add `,_jsx(_components.code,{children:`headings`}),` for the title and `,_jsx(_components.code,{children:`subtitle`}),` for the iOS subtitle. Include `,_jsx(_components.code,{children:`en`}),` in every map, and use the same language codes in each map. `,_jsx(_components.code,{children:`en`}),` is required. Recipients whose language is not in the map receive the `,_jsx(_components.code,{children:`en`}),` text.`]}),_jsxs(_components.p,{children:[`Include `,_jsx(_components.code,{children:`headings`}),` for web push and Huawei. If you omit `,_jsx(_components.code,{children:`headings`}),` for web push, OneSignal uses your site name. `,_jsx(_components.code,{children:`subtitle`}),` is iOS only.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`20`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`20`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"app_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"YOUR_APP_ID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"target_channel\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"push\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"included_segments\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Subscribed Users\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"contents\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"en\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Your order has shipped.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"fr\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Votre commande a été expédiée.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"zh-Hans\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"您的订单已发货。\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"headings\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"en\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Order update\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"fr\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Suivi de commande\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"zh-Hans\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"订单更新\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"subtitle\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"en\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Track your package\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"fr\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Suivez votre colis\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"zh-Hans\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"追踪您的包裹\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/reference/create-message`,children:`Create message`}),` for targeting, scheduling, and the rest of the push fields.`]})]}),_jsxs(Tab,{title:`Email`,id:`email`,children:[_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Messages > Email > New Message`}),` or a `,_jsx(_components.a,{href:`/docs/en/templates`,children:`template`}),`. Email has no language-map field.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 1: One message per language segment`})}),_jsxs(_components.p,{children:[`Follow `,_jsx(_components.a,{href:`#send-one-message-per-language-segment`,children:`Send one message per language segment`}),`. Create one email template per language and send it to the matching segment.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 2: Liquid`})}),_jsxs(_components.p,{children:[`Read `,_jsx(_components.a,{href:`/docs/en/personalization-properties-and-tags#user-subscription-properties`,children:_jsx(_components.code,{children:`user.language`})}),` and render one block per code. The `,_jsx(_components.code,{children:`else`}),` branch is the default for any other language.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`liquid`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`liquid`,children:_jsxs(_components.code,{language:`liquid`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{%`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` assign`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lang`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`user`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`language`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` | `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`default:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"en\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` %}`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{%`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lang`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ==`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"fr\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` %}`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Bonjour `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` first_name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` | `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`default:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"there\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` }}`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`!`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{%`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` elsif`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lang`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ==`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"es\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` %}`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Hola `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` first_name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` | `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`default:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"there\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` }}`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`!`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{%`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` else`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` %}`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Hi `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` first_name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` | `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`default:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"there\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` }}`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`!`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{%`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` endif`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` %}`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`A recipient with `,_jsx(_components.code,{children:`user.language`}),` set to `,_jsx(_components.code,{children:`fr`}),` sees the French greeting. A recipient with `,_jsx(_components.code,{children:`de`}),`, or with no language set, sees the English greeting.`]}),_jsx(Frame,{caption:`Email template that branches on the user's language with Liquid.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/220a329-Multi-Language_Graphic_4.png?fit=max\u0026auto=format\u0026n=3zq1PvSaqvUE2bIx\u0026q=85\u0026s=3e02125c87dbdf72ca3708c289831394`,alt:`Email template using Liquid conditionals to render French, Spanish, and English greetings`,\"data-og-width\":`1869`,width:`1869`,\"data-og-height\":`1853`,height:`1853`,\"data-path\":`images/docs/220a329-Multi-Language_Graphic_4.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/220a329-Multi-Language_Graphic_4.png?w=280\u0026fit=max\u0026auto=format\u0026n=3zq1PvSaqvUE2bIx\u0026q=85\u0026s=29efc11ff4908dc315969a47d5ab8a45 280w, https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/220a329-Multi-Language_Graphic_4.png?w=560\u0026fit=max\u0026auto=format\u0026n=3zq1PvSaqvUE2bIx\u0026q=85\u0026s=920f55ca26bb8ad5d936fadc279c8eb8 560w, https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/220a329-Multi-Language_Graphic_4.png?w=840\u0026fit=max\u0026auto=format\u0026n=3zq1PvSaqvUE2bIx\u0026q=85\u0026s=ac387d2e4acade4ff47f9acd86d4dd0e 840w, https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/220a329-Multi-Language_Graphic_4.png?w=1100\u0026fit=max\u0026auto=format\u0026n=3zq1PvSaqvUE2bIx\u0026q=85\u0026s=bb444e6a1eb9565dc4697d6aca36e5f6 1100w, https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/220a329-Multi-Language_Graphic_4.png?w=1650\u0026fit=max\u0026auto=format\u0026n=3zq1PvSaqvUE2bIx\u0026q=85\u0026s=6e82f9465388d480cf5231e50d700185 1650w, https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/220a329-Multi-Language_Graphic_4.png?w=2500\u0026fit=max\u0026auto=format\u0026n=3zq1PvSaqvUE2bIx\u0026q=85\u0026s=8e6aee9be786eaa209703a72d8459dd6 2500w`})}),_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/docs/en/using-liquid-syntax`,children:`Using Liquid syntax`}),` for `,_jsx(_components.code,{children:`case`}),` / `,_jsx(_components.code,{children:`when`}),` and other conditionals.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 3: Dynamic Content`})}),_jsxs(_components.p,{children:[`Upload a CSV whose column headers are language codes and reference the cells with `,_jsx(_components.code,{children:`user.language`}),`. See `,_jsx(_components.a,{href:`/docs/en/dynamic-content`,children:`Dynamic Content`}),`.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`API`})}),_jsxs(_components.p,{children:[`The Create message API does not accept a language map for email. `,_jsx(_components.code,{children:`email_subject`}),` and `,_jsx(_components.code,{children:`email_body`}),` are single strings. Put the Liquid from the section above in a template, then send that template:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"app_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"YOUR_APP_ID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"target_channel\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"email\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"template_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"YOUR_TEMPLATE_ID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"included_segments\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Subscribed Users\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.p,{children:[`To send a different template to each language, target a language segment or a `,_jsx(_components.code,{children:`language`}),` `,_jsx(_components.a,{href:`/reference/create-message#language`,children:`filter`}),` instead of one template for every subscriber. See `,_jsx(_components.a,{href:`/reference/create-message`,children:`Create message`}),`.`]})]}),_jsxs(Tab,{title:`In-app`,id:`in-app`,children:[_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Messages > In-App > New In-App`}),` or an existing in-app message, then click `,_jsx(_components.strong,{children:`Add Languages`}),`. This works in the block editor, the HTML editor, and on in-app steps in a Journey.`]}),_jsxs(_components.p,{children:[`Each recipient sees the variant that matches their language property. Recipients with no matching variant see the default. `,_jsx(_components.strong,{children:`Test \u0026 Preview`}),` sends each test device its own language variant. On the report, `,_jsx(_components.strong,{children:`Group by Language`}),` compares impressions and clicks per language, and the CSV export includes the same breakdown.`]}),_jsx(_components.p,{children:`An existing single-language in-app message stays unchanged until you edit it or duplicate it. Either action migrates the message to the multi-language format. Each language variant has its own 1 MB size limit, separate from the default message.`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 1: Checkboxes`})}),_jsx(_components.p,{children:`Select each language you support. The editor adds a tab per language. Recipients whose language you did not select receive the default variant.`}),_jsx(Frame,{caption:`Select Languages modal with a checkbox for each supported language.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/onesignal/9Xe1gROfblrEWMjf/images/iam/iam-add-languages.png?fit=max\u0026auto=format\u0026n=9Xe1gROfblrEWMjf\u0026q=85\u0026s=5e099f365a588cda2358c4d6ec088ed8`,alt:`Select Languages modal with checkboxes for each supported language`,\"data-og-width\":`1544`,width:`1544`,\"data-og-height\":`1058`,height:`1058`,\"data-path\":`images/iam/iam-add-languages.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/onesignal/9Xe1gROfblrEWMjf/images/iam/iam-add-languages.png?w=280\u0026fit=max\u0026auto=format\u0026n=9Xe1gROfblrEWMjf\u0026q=85\u0026s=1e54b28d7199576a04b577de2741ab7f 280w, https://mintcdn.com/onesignal/9Xe1gROfblrEWMjf/images/iam/iam-add-languages.png?w=560\u0026fit=max\u0026auto=format\u0026n=9Xe1gROfblrEWMjf\u0026q=85\u0026s=56d3a5ccd7d306a0630e5db7556c45f5 560w, https://mintcdn.com/onesignal/9Xe1gROfblrEWMjf/images/iam/iam-add-languages.png?w=840\u0026fit=max\u0026auto=format\u0026n=9Xe1gROfblrEWMjf\u0026q=85\u0026s=f20b3770dcf280eae55cce9f6cadf05c 840w, https://mintcdn.com/onesignal/9Xe1gROfblrEWMjf/images/iam/iam-add-languages.png?w=1100\u0026fit=max\u0026auto=format\u0026n=9Xe1gROfblrEWMjf\u0026q=85\u0026s=38f625b222f1797268aaadb827ed46ad 1100w, https://mintcdn.com/onesignal/9Xe1gROfblrEWMjf/images/iam/iam-add-languages.png?w=1650\u0026fit=max\u0026auto=format\u0026n=9Xe1gROfblrEWMjf\u0026q=85\u0026s=26259db8ee2e1d59a46e60ae553b7c18 1650w, https://mintcdn.com/onesignal/9Xe1gROfblrEWMjf/images/iam/iam-add-languages.png?w=2500\u0026fit=max\u0026auto=format\u0026n=9Xe1gROfblrEWMjf\u0026q=85\u0026s=0ca703f52251d05a3a21d4a4ef1fc306 2500w`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 2: One message per language segment`})}),_jsxs(_components.p,{children:[`Follow `,_jsx(_components.a,{href:`#send-one-message-per-language-segment`,children:`Send one message per language segment`}),` when each language needs its own in-app message instead of tabs on one message.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 3: Tag substitution`})}),_jsxs(_components.p,{children:[`Use `,_jsx(_components.strong,{children:`Add Languages`}),` to localize the message. Use a tag only when you need conditional copy inside a single variant.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`In-app Liquid can only substitute tags. It cannot read `,_jsx(_components.code,{children:`user.language`}),`, `,_jsx(_components.code,{children:`subscription.language`}),`, or any other property object. Calling `,_jsx(_components.code,{children:`setLanguage`}),` does not change which tag branch renders.`]})}),_jsxs(_components.p,{children:[`Set a tag to the same code you store on the language property, such as `,_jsx(_components.code,{children:`de`}),` rather than `,_jsx(_components.code,{children:`german`}),`. The tag must already be on the user when they open the app and start a new session. See `,_jsx(_components.a,{href:`/docs/en/add-user-data-tags`,children:`Tags`}),` and `,_jsx(_components.a,{href:`/docs/en/message-personalization#supported-fields-by-message-type`,children:`supported personalization fields`}),`.`]}),_jsx(CodeBlock,{filename:`Tags`,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`language : de`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`first_name : Jon`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(CodeBlock,{filename:`Template`,numberOfLines:`10`,language:`liquid`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`liquid`,children:_jsxs(_components.code,{language:`liquid`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{%`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` assign`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lang`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`language`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` %}`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{%`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lang`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ==`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"fr\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` %}`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Bonjour `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` first_name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` }}`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`!`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{%`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` elsif`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lang`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ==`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"es\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` %}`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Hola `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` first_name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` }}`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`!`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{%`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` elsif`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lang`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ==`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"de\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` %}`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Guten Tag `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` first_name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` }}`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`!`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{%`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` else`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` %}`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Hello `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` first_name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` }}`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`!`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`{%`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` endif`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` %}`})]}),`\n`]})})}),_jsx(CodeBlock,{filename:`Result`,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Guten Tag Jon!`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]}),_jsxs(Tab,{title:`SMS`,id:`sms`,children:[_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Messages > SMS > New Message`}),` or a `,_jsx(_components.a,{href:`/docs/en/templates`,children:`template`}),`.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 1: One message per language segment`})}),_jsxs(_components.p,{children:[`Follow `,_jsx(_components.a,{href:`#send-one-message-per-language-segment`,children:`Send one message per language segment`}),`.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 2: Dynamic Content`})}),_jsxs(_components.p,{children:[`Upload a `,_jsx(_components.a,{href:`/docs/en/dynamic-content`,children:`Dynamic Content`}),` CSV whose column headers are language codes and reference the cells with `,_jsx(_components.code,{children:`user.language`}),`.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`API`})}),_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`contents`}),` to a map of language codes. SMS does not use `,_jsx(_components.code,{children:`headings`}),` or `,_jsx(_components.code,{children:`subtitle`}),`. Include `,_jsx(_components.code,{children:`en`}),`. Recipients whose language is not in the map receive the `,_jsx(_components.code,{children:`en`}),` text.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"app_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"YOUR_APP_ID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"target_channel\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"sms\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"included_segments\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Subscribed Users\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"contents\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"en\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Your order has shipped.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"fr\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Votre commande a été expédiée.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/reference/create-message`,children:`Create message`}),` and `,_jsx(_components.a,{href:`/reference/sms`,children:`SMS`}),`.`]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`supported-languages`,children:`Supported languages`}),`\n`,_jsxs(_components.p,{children:[`Store one of these codes on the user’s `,_jsx(_components.code,{children:`language`}),` property. `,_jsx(_components.code,{children:`en`}),` is the required default for push and SMS. Most codes are ISO 639-1. `,_jsx(_components.code,{children:`zh-Hans`}),` (Simplified Chinese) and `,_jsx(_components.code,{children:`zh-Hant`}),` (Traditional Chinese) are script subtags, not two-letter codes.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`If a code is not in this table, OneSignal does not offer it in the dashboard language picker or the import template. Use the closest supported language, or email `,_jsx(_components.a,{href:`mailto:support@onesignal.com`,children:`support@onesignal.com`}),` to request the language.`]})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Language`}),_jsx(_components.th,{children:`Language code`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Arabic`}),_jsx(_components.td,{children:`ar`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Azerbaijani`}),_jsx(_components.td,{children:`az`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Bosnian`}),_jsx(_components.td,{children:`bs`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Bulgarian`}),_jsx(_components.td,{children:`bg`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Catalan`}),_jsx(_components.td,{children:`ca`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Chinese (Simplified)`}),_jsx(_components.td,{children:`zh-Hans`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Chinese (Traditional)`}),_jsx(_components.td,{children:`zh-Hant`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Croatian`}),_jsx(_components.td,{children:`hr`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Czech`}),_jsx(_components.td,{children:`cs`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Danish`}),_jsx(_components.td,{children:`da`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Dutch`}),_jsx(_components.td,{children:`nl`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`English`}),_jsx(_components.td,{children:`en`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Estonian`}),_jsx(_components.td,{children:`et`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Finnish`}),_jsx(_components.td,{children:`fi`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`French`}),_jsx(_components.td,{children:`fr`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Georgian`}),_jsx(_components.td,{children:`ka`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`German`}),_jsx(_components.td,{children:`de`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Greek`}),_jsx(_components.td,{children:`el`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Hebrew`}),_jsx(_components.td,{children:`he`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Hindi`}),_jsx(_components.td,{children:`hi`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Hungarian`}),_jsx(_components.td,{children:`hu`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Indonesian`}),_jsx(_components.td,{children:`id`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Italian`}),_jsx(_components.td,{children:`it`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Japanese`}),_jsx(_components.td,{children:`ja`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Korean`}),_jsx(_components.td,{children:`ko`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Latvian`}),_jsx(_components.td,{children:`lv`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Lithuanian`}),_jsx(_components.td,{children:`lt`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Malay`}),_jsx(_components.td,{children:`ms`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Norwegian`}),_jsx(_components.td,{children:`nb`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Persian`}),_jsx(_components.td,{children:`fa`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Polish`}),_jsx(_components.td,{children:`pl`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Portuguese`}),_jsx(_components.td,{children:`pt`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Punjabi`}),_jsx(_components.td,{children:`pa`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Romanian`}),_jsx(_components.td,{children:`ro`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Russian`}),_jsx(_components.td,{children:`ru`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Serbian`}),_jsx(_components.td,{children:`sr`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Slovak`}),_jsx(_components.td,{children:`sk`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Spanish`}),_jsx(_components.td,{children:`es`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Swedish`}),_jsx(_components.td,{children:`sv`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Thai`}),_jsx(_components.td,{children:`th`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Turkish`}),_jsx(_components.td,{children:`tr`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Ukrainian`}),_jsx(_components.td,{children:`uk`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Vietnamese`}),_jsx(_components.td,{children:`vi`})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`faq`,children:`FAQ`}),`\n`,_jsx(Heading,{level:`3`,id:`why-did-a-user-receive-the-english-message`,children:`Why did a user receive the English message?`}),`\n`,_jsxs(_components.p,{children:[`Their language property did not match a variant on the message, so OneSignal sent the default. In the dashboard that default is the `,_jsx(_components.strong,{children:`Any/English`}),` tab. In the push and SMS APIs it is the `,_jsx(_components.code,{children:`en`}),` entry. Check the user’s language on their profile, then confirm that same code is a tab on the message or a key in `,_jsx(_components.code,{children:`contents`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`what-happens-if-i-omit-english`,children:`What happens if I omit English?`}),`\n`,_jsxs(_components.p,{children:[`Push and SMS `,_jsx(_components.code,{children:`contents`}),` require `,_jsx(_components.code,{children:`en`}),`. The push dashboard keeps the `,_jsx(_components.strong,{children:`Any/English`}),` tab as the default for anyone whose language you did not add. Email and in-app tag conditionals use the `,_jsx(_components.code,{children:`else`}),` branch for every other language.`]}),`\n`,_jsx(Heading,{level:`3`,id:`can-i-localize-email-with-a-language-map-in-the-api`,children:`Can I localize email with a language map in the API?`}),`\n`,_jsxs(_components.p,{children:[`No. Email `,_jsx(_components.code,{children:`email_subject`}),` and `,_jsx(_components.code,{children:`email_body`}),` are single strings. Branch on `,_jsx(_components.code,{children:`user.language`}),` with Liquid, use Dynamic Content, or send one template per language segment.`]}),`\n`,_jsxs(Heading,{level:`3`,id:`why-did-my-in-app-message-ignore-setlanguage`,children:[`Why did my in-app message ignore `,_jsx(_components.code,{children:`setLanguage`}),`?`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`setLanguage`}),` updates the language property, and `,_jsx(_components.strong,{children:`Add Languages`}),` uses that property. Liquid inside an in-app message does not. In-app Liquid can only read tags. Set a tag to the same code, such as `,_jsx(_components.code,{children:`de`}),`, and branch on that tag. The tag must be present before the user starts a new session.`]}),`\n`,_jsx(Heading,{level:`3`,id:`how-do-i-add-languages-to-an-existing-in-app-message`,children:`How do I add languages to an existing in-app message?`}),`\n`,_jsx(_components.p,{children:`Edit or duplicate the message. Either action migrates a single-language in-app message to the multi-language format. Until you do that, the message stays as it is.`}),`\n`,_jsx(Heading,{level:`3`,id:`can-i-localize-an-in-app-message-in-a-journey`,children:`Can I localize an in-app message in a Journey?`}),`\n`,_jsxs(_components.p,{children:[`Yes. `,_jsx(_components.strong,{children:`Add Languages`}),` works on in-app steps in a Journey, in both the block editor and the HTML editor.`]}),`\n`,_jsx(Heading,{level:`3`,id:`why-does-punctuation-break-in-arabic-or-hebrew`,children:`Why does punctuation break in Arabic or Hebrew?`}),`\n`,_jsxs(_components.p,{children:[`The push editor stores text as HTML. A character such as `,_jsx(_components.code,{children:`%`}),` can display in the wrong place in a right-to-left language. Add a `,_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Right-to-left_mark`,children:`right-to-left mark`}),` immediately after the character.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`related-pages`,children:`Related pages`}),`\n`,_jsxs(Columns,{cols:2,children:[_jsx(Card,{title:`Dynamic Content`,icon:`file-csv`,href:`/docs/en/dynamic-content`,children:_jsx(_components.p,{children:`Upload a CSV whose columns are language codes and insert the matching cell with Liquid.`})}),_jsx(Card,{title:`Using Liquid syntax`,icon:`droplet`,href:`/docs/en/using-liquid-syntax`,children:_jsx(_components.p,{children:`Branch message content with conditionals, filters, and fallbacks.`})}),_jsx(Card,{title:`Properties and tags`,icon:`tag`,href:`/docs/en/personalization-properties-and-tags`,children:_jsxs(_components.p,{children:[`Read `,_jsx(_components.code,{children:`user.language`}),` and other stored properties in Liquid.`]})}),_jsx(Card,{title:`Segmentation`,icon:`filter`,href:`/docs/en/segmentation`,children:_jsx(_components.p,{children:`Build a segment filtered on Language and send one message per language.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Multi-language messaging","description":"Send push, email, in-app, and SMS in each user's language. Set the language property, then match it from the dashboard or the Create message API.","keywords":["localized notifications","push notification languages","setLanguage","Add Languages","language property","user.language","ISO 639-1","zh-Hans","zh-Hant","fallback language","fallback to English","email localization","localize email with Liquid","in-app message languages","translate in-app message","SMS localization","translate push notification","language_code"],"href":"/docs/en/multi-language-messaging"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Choose how to localize each channel","slug":"choose-how-to-localize-each-channel","depth":2,"children":[{"title":"Send one message per language segment","slug":"send-one-message-per-language-segment","depth":3,"children":[]}]},{"title":"Set the user’s language","slug":"set-the-user’s-language","depth":2,"children":[]},{"title":"Send messages in different languages","slug":"send-messages-in-different-languages","depth":2,"children":[]},{"title":"Supported languages","slug":"supported-languages","depth":2,"children":[]},{"title":"FAQ","slug":"faq","depth":2,"children":[{"title":"Why did a user receive the English message?","slug":"why-did-a-user-receive-the-english-message","depth":3,"children":[]},{"title":"What happens if I omit English?","slug":"what-happens-if-i-omit-english","depth":3,"children":[]},{"title":"Can I localize email with a language map in the API?","slug":"can-i-localize-email-with-a-language-map-in-the-api","depth":3,"children":[]},{"title":"Why did my in-app message ignore setLanguage?","slug":"why-did-my-in-app-message-ignore-setlanguage","depth":3,"children":[]},{"title":"How do I add languages to an existing in-app message?","slug":"how-do-i-add-languages-to-an-existing-in-app-message","depth":3,"children":[]},{"title":"Can I localize an in-app message in a Journey?","slug":"can-i-localize-an-in-app-message-in-a-journey","depth":3,"children":[]},{"title":"Why does punctuation break in Arabic or Hebrew?","slug":"why-does-punctuation-break-in-arabic-or-hebrew","depth":3,"children":[]}]},{"title":"Related pages","slug":"related-pages","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/onesignal/e069c1b9f3157e14/hotjar-koala.js","/_mintlify/custom/onesignal/3e5d03885ab32f49/intercom.js","/_mintlify/custom/onesignal/dbb7af4794d1b586/munchkin-marketo.js"],"subdomain":"onesignal","siteName":"OneSignal Documentation","title":"Multi-language messaging - OneSignal Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/docs/en/multi-language-messaging","matchLevel":0},"cn":{"href":"/docs/cn/multi-language-messaging","matchLevel":1},"ko":{"href":"/docs/ko/multi-language-messaging","matchLevel":1},"ja":{"href":"/docs/ja/multi-language-messaging","matchLevel":1},"tr":{"href":"/docs/tr/multi-language-messaging","matchLevel":1},"pt-BR":{"href":"/docs/pt-BR/multi-language-messaging","matchLevel":1},"es":{"href":"/docs/es/multi-language-messaging","matchLevel":1},"fr":{"href":"/docs/fr/multi-language-messaging","matchLevel":1}}},"lastModified":"2026-09-23T20:47:22.200Z","originalFileLocation":"docs/en/multi-language-messaging.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Send push, email, in-app, and SMS in each user\u0026#x27;s language. Set the language property, then match it from the dashboard or the Create message API.\">\u003cmeta data-mint-head name=\"application-name\" content=\"OneSignal Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Multi-language messaging - OneSignal Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Send push, email, in-app, and SMS in each user\u0026#x27;s language. Set the language property, then match it from the dashboard or the Create message API.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OneSignal Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://documentation.onesignal.com/docs/en/multi-language-messaging\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://onesignal.mintlify.site/_mintlify/api/og/v2?division=Features\u0026amp;title=Multi-language+messaging\u0026amp;description=Send+push%2C+email%2C+in-app%2C+and+SMS+in+each+user%27s+language.+Set+the+language+property%2C+then+match+it+from+the+dashboard+or+the+Create+message+API.\u0026amp;theme=8d648f04f85028b307bd669b\u0026amp;signature=38aa02a7ac326bada3b8b5b6ab63aef502afafb4e5ada6cee73d3924d9773d84\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Multi-language messaging - OneSignal Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Send push, email, in-app, and SMS in each user\u0026#x27;s language. Set the language property, then match it from the dashboard or the Create message API.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://onesignal.mintlify.site/_mintlify/api/og/v2?division=Features\u0026amp;title=Multi-language+messaging\u0026amp;description=Send+push%2C+email%2C+in-app%2C+and+SMS+in+each+user%27s+language.+Set+the+language+property%2C+then+match+it+from+the+dashboard+or+the+Create+message+API.\u0026amp;theme=8d648f04f85028b307bd669b\u0026amp;signature=38aa02a7ac326bada3b8b5b6ab63aef502afafb4e5ada6cee73d3924d9773d84\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OneSignal Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3A3DB3\">\u003clink data-mint-head rel=\"canonical\" href=\"https://documentation.onesignal.com/docs/en/multi-language-messaging\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/en/multi-language-messaging.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://documentation.onesignal.com/docs/en/multi-language-messaging\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://documentation.onesignal.com/docs/cn/multi-language-messaging\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://documentation.onesignal.com/docs/ko/multi-language-messaging\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://documentation.onesignal.com/docs/ja/multi-language-messaging\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"tr\" href=\"https://documentation.onesignal.com/docs/tr/multi-language-messaging\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://documentation.onesignal.com/docs/pt-BR/multi-language-messaging\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://documentation.onesignal.com/docs/es/multi-language-messaging\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"fr\" href=\"https://documentation.onesignal.com/docs/fr/multi-language-messaging\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://documentation.onesignal.com/docs/en/multi-language-messaging\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://documentation.onesignal.com/#organization\",\"name\":\"OneSignal Documentation\",\"url\":\"https://documentation.onesignal.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/onesignal/yJcueeDCO7UpHnnY/logo/OneSignal-Logo.svg?fit=max\u0026auto=format\u0026n=yJcueeDCO7UpHnnY\u0026q=85\u0026s=1fcfb6fef6d820fd9d99c74850711107\"}},{\"@type\":\"WebSite\",\"@id\":\"https://documentation.onesignal.com#website\",\"name\":\"OneSignal Documentation\",\"url\":\"https://documentation.onesignal.com\",\"publisher\":{\"@id\":\"https://documentation.onesignal.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://documentation.onesignal.com/docs/en/multi-language-messaging#webpage\",\"url\":\"https://documentation.onesignal.com/docs/en/multi-language-messaging\",\"name\":\"Multi-language messaging\",\"description\":\"Send push, email, in-app, and SMS in each user's language. Set the language property, then match it from the dashboard or the Create message API.\",\"dateModified\":\"2026-09-23T20:47:22.200Z\",\"isPartOf\":{\"@id\":\"https://documentation.onesignal.com#website\"},\"breadcrumb\":{\"@id\":\"https://documentation.onesignal.com/docs/en/multi-language-messaging#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://documentation.onesignal.com/docs/en/multi-language-messaging#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Message channels\",\"item\":\"https://documentation.onesignal.com/docs/en/channel-setup\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Features\",\"item\":\"https://documentation.onesignal.com/docs/en/ab-testing\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Multi-language messaging\",\"item\":\"https://documentation.onesignal.com/docs/en/multi-language-messaging\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://documentation.onesignal.com/docs/en/multi-language-messaging#article\",\"headline\":\"Multi-language messaging\",\"name\":\"Multi-language messaging\",\"description\":\"Send push, email, in-app, and SMS in each user's language. Set the language property, then match it from the dashboard or the Create message API.\",\"url\":\"https://documentation.onesignal.com/docs/en/multi-language-messaging\",\"mainEntityOfPage\":{\"@id\":\"https://documentation.onesignal.com/docs/en/multi-language-messaging#webpage\"},\"dateModified\":\"2026-09-23T20:47:22.200Z\",\"keywords\":\"localized notifications, push notification languages, setLanguage, Add Languages, language property, user.language, ISO 639-1, zh-Hans, zh-Hant, fallback language, fallback to English, email localization, localize email with Liquid, in-app message languages, translate in-app message, SMS localization, translate push notification, language_code\",\"publisher\":{\"@id\":\"https://documentation.onesignal.com/#organization\"},\"isPartOf\":{\"@id\":\"https://documentation.onesignal.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OneSignal Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"OneSignal Documentation","nav":{"global":null,"languages":[{"language":"en","tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/docs/en/home"}]},{"tab":"User Guides","groups":[{"group":"First steps \u0026 settings","pages":[{"title":"Getting started with OneSignal","href":"/docs/en/quickstart-guide"},{"group":"OneSignal dashboard","pages":[{"title":"Apps, Organizations, \u0026 Accounts","href":"/docs/en/apps-organizations"},{"title":"Team members","href":"/docs/en/manage-team-members"},{"title":"Keys \u0026 IDs","href":"/docs/en/keys-and-ids"},{"title":"Audit logs","href":"/docs/en/audit-logs"},{"title":"Usage \u0026 billing","href":"/docs/en/billing-faq"},{"title":"Disabled apps \u0026 organizations","href":"/docs/en/disabled-apps"}]},{"title":"Migrating to OneSignal","href":"/docs/en/migrating-to-onesignal"}]},{"group":"Message channels","pages":[{"title":"Channel setup","href":"/docs/en/channel-setup"},{"group":"Push","pages":[{"title":"Push overview","href":"/docs/en/push"},{"group":"Mobile push","pages":[{"title":"Mobile push setup","href":"/docs/en/mobile-push-setup"},{"title":"Prompt for push permissions","href":"/docs/en/prompt-for-push-permissions"},{"title":"iOS provisional push notifications","href":"/docs/en/ios-provisional-push-notifications"},{"title":"Android notification categories","href":"/docs/en/android-notification-categories"},{"title":"Data \u0026 background notifications","href":"/docs/en/data-notifications"},{"title":"VoIP push notifications","href":"/docs/en/voip-notifications"}]},{"group":"Web push","pages":[{"title":"Web push setup","href":"/docs/en/web-push-setup"},{"title":"Web permission prompts","href":"/docs/en/permission-requests"},{"title":"Web push FAQ","href":"/docs/en/web-push-setup-faq"},{"title":"Web push browser behavior","href":"/docs/en/browser-behavior-and-unsubscribes"},{"title":"OneSignal WordPress plugin setup for web push","href":"/docs/en/wordpress"},{"title":"WordPress troubleshooting","href":"/docs/en/troubleshooting-wordpress-web-push"},{"title":"Shopify web push integration","href":"/docs/en/shopify"}]},{"group":"Push features","pages":[{"title":"Notification icons","href":"/docs/en/notification-icons"},{"title":"Notification images \u0026 rich media","href":"/docs/en/rich-media"},{"title":"Notification sounds","href":"/docs/en/notification-sounds"},{"title":"Notification badges","href":"/docs/en/badges"},{"title":"Action buttons for push notifications","href":"/docs/en/action-buttons"},{"title":"Push frequency capping","href":"/docs/en/frequency-capping"},{"title":"Push throttling","href":"/docs/en/throttling"},{"title":"iOS: Focus modes and interruption levels","href":"/docs/en/ios-focus-modes-and-interruption-levels"},{"title":"iOS: Relevance score","href":"/docs/en/ios-relevance-score"}]},{"group":"Push analytics \u0026 troubleshooting","pages":[{"title":"Push message reports","href":"/docs/en/push-notification-message-reports"},{"title":"Confirmed receipt","href":"/docs/en/confirmed-delivery"},{"title":"Notification click-through rate (CTR)","href":"/docs/en/notification-ctr"},{"title":"Mobile push: Notifications not shown or delayed","href":"/docs/en/notifications-show-successful-but-are-not-being-shown"},{"title":"Web push: Notifications not shown","href":"/docs/en/notifications-not-shown-web-push"},{"title":"Notification Images Not Showing","href":"/docs/en/notification-images-not-showing"},{"title":"Duplicated notifications","href":"/docs/en/duplicated-notifications"},{"title":"FCM expired token FAQ","href":"/docs/en/fcm-expired-token-faq"}]}]},{"group":"In-app messages","pages":[{"title":"In-app overview","href":"/docs/en/in-app-messages-setup"},{"title":"In-app triggers","href":"/docs/en/iam-triggers"},{"title":"In-app click actions","href":"/docs/en/iam-click-actions"},{"group":"In-app design","pages":[{"title":"Design in-app messages with drag-and-drop","href":"/docs/en/design-your-in-app-message"},{"title":"Design in-app messages with HTML","href":"/docs/en/design-your-in-app-message-with-html"},{"title":"In-app message templates \u0026 quickstarts","href":"/docs/en/in-app-html-templates"},{"title":"In-app message JavaScript API reference","href":"/docs/en/in-app-message-api"}]},{"title":"In-app message reports","href":"/docs/en/in-app-message-reports"},{"title":"In-app troubleshooting","href":"/docs/en/in-app-message-troubleshooting"}]},{"group":"Email","pages":[{"title":"Email overview","href":"/docs/en/email-messaging"},{"group":"Email setup","pages":[{"title":"Email setup","href":"/docs/en/email-setup"},{"title":"Email DNS configuration","href":"/docs/en/email-dns-configuration"},{"title":"Senders","href":"/docs/en/senders"},{"title":"BCC emails","href":"/docs/en/email-bcc"},{"title":"Transactional emails","href":"/docs/en/setup-transactional-emails"},{"title":"Create a custom email unsubscribe page","href":"/docs/en/create-custom-unsubscribe-page"}]},{"group":"Email deliverability \u0026 analytics","pages":[{"title":"Email message reports","href":"/docs/en/email-message-reports"},{"title":"Email deliverability","href":"/docs/en/email-deliverability"},{"title":"Deliverability insights by inbox provider","href":"/docs/en/email-deliverability-insights"},{"title":"Email reputation best practices","href":"/docs/en/email-reputation-best-practices"},{"title":"Email address validation","href":"/docs/en/email-address-validation"},{"title":"Email warm-up","href":"/docs/en/email-warm-up"},{"title":"Google Postmaster Tools","href":"/docs/en/google-postmaster-tools"},{"title":"Suppressions","href":"/docs/en/suppressions"},{"title":"Email troubleshooting","href":"/docs/en/email-troubleshooting"}]},{"group":"Design your emails","pages":[{"title":"Design emails with drag-and-drop","href":"/docs/en/design-emails-with-drag-and-drop"},{"title":"Design emails with HTML","href":"/docs/en/design-emails-with-html"},{"title":"Email unsubscribe links \u0026 headers","href":"/docs/en/unsubscribe-links-email-subscriptions"},{"title":"Email template forwarding","href":"/docs/en/email-template-forwarding"}]}]},{"group":"SMS \u0026 RCS","pages":[{"title":"SMS, MMS, and RCS overview","href":"/docs/en/sms-messaging"},{"title":"Rich Communication Services (RCS)","href":"/docs/en/rcs-messaging"},{"group":"SMS setup","pages":[{"title":"SMS setup","href":"/docs/en/sms-setup"},{"title":"Sender resource applications and country requirements","sidebarTitle":"Sender resource applications","href":"/docs/en/sms-registration-requirements"},{"title":"SMS opt-in and collection","href":"/docs/en/sms-opt-in-and-collection"},{"title":"SMS consent keyword management","href":"/docs/en/sms-consent-keyword-management"},{"title":"SMS keywords","href":"/docs/en/keywords"}]},{"group":"SMS messaging","pages":[{"title":"Promotional messaging","href":"/docs/en/sms-promotional-messaging"},{"title":"Transactional messaging","href":"/docs/en/sms-transactional-messaging"},{"title":"One-time passwords (OTP)","sidebarTitle":"One-time passwords","href":"/docs/en/sms-verify"},{"title":"Composing messages","href":"/docs/en/sms-composing-messages"},{"title":"SMS message reports","href":"/docs/en/sms-message-reports"}]}]},{"group":"Live Activities","pages":[{"title":"Live Activities","href":"/docs/en/live-activities"},{"title":"Live Activities analytics","href":"/docs/en/live-activities-analytics"}]},{"group":"Features","pages":[{"title":"A/B testing","description":"Optimize your push and email messaging with OneSignal's A/B testing to improve engagement and campaign performance.","href":"/docs/en/ab-testing"},{"title":"Multi-language messaging","href":"/docs/en/multi-language-messaging"},{"title":"Brand Kit","description":"Set up Brand Kit in OneSignal to keep AI-generated content on-brand and make your logos, colors, and fonts available across all channel editors without re-uploading.","href":"/docs/en/brand-kit"},{"group":"Personalization","pages":[{"title":"Personalization","href":"/docs/en/message-personalization"},{"title":"Using Liquid syntax","href":"/docs/en/using-liquid-syntax"},{"title":"Data feeds","href":"/docs/en/data-feeds"},{"title":"Personalize with Custom Events","href":"/docs/en/personalization-custom-event"},{"title":"Personalize with properties","href":"/docs/en/personalization-properties-and-tags"},{"title":"Personalize messages with API custom_data","href":"/docs/en/personalization-api-custom-data"},{"title":"Dynamic Content with CSV","href":"/docs/en/dynamic-content"}]},{"group":"URLs, Links, \u0026 Deep Links","pages":[{"title":"URLs, links, \u0026 deep links","href":"/docs/en/links"},{"title":"Deep linking","href":"/docs/en/deep-linking"},{"title":"Email unsubscribe links \u0026 headers","href":"/docs/en/unsubscribe-links-email-subscriptions"}]},{"title":"Retargeting messages","href":"/docs/en/retargeting"},{"title":"Templates","href":"/docs/en/templates"},{"title":"Labels","href":"/docs/en/labels"}]}]},{"group":"Journeys","pages":[{"title":"Journeys overview","href":"/docs/en/journeys-overview"},{"group":"Journey features","pages":[{"title":"Journey settings","href":"/docs/en/journeys-settings"},{"title":"Journey messages","href":"/docs/en/journeys-messages"},{"title":"Journey message A/B testing","sidebarTitle":"A/B testing","tag":"BETA","href":"/docs/en/journeys-ab-testing"},{"title":"Journey actions","href":"/docs/en/journeys-actions"},{"title":"Journey webhooks","href":"/docs/en/journeys-webhook"},{"title":"Send WhatsApp Messages via Journey Webhooks","href":"/docs/en/sending-whatsapp-messages-via-journey-webhooks"},{"title":"Managing journeys","href":"/docs/en/managing-journeys"},{"title":"Journey version history","tag":"NEW","href":"/docs/en/journeys-version-history"},{"title":"Journey analytics","href":"/docs/en/journeys-analytics"}]},{"title":"Journey examples","href":"/docs/en/journeys-examples"},{"title":"Control Journey membership with tags","href":"/docs/en/journeys-membership-tags"}]},{"group":"OneSignal AI","pages":[{"title":"OneSignal AI","tag":"BETA","href":"/docs/en/onesignal-ai"},{"title":"OneSignal AI skills","sidebarTitle":"Skills","tag":"BETA","href":"/docs/en/onesignal-ai-skills"},{"title":"Check message","tag":"BETA","href":"/docs/en/check-message"},{"title":"OneSignal Home","href":"/docs/en/onesignal-home"},{"title":"OneSignal MCP Server","href":"/docs/en/model-context-protocol"},{"title":"Manage Journeys with MCP","href":"/docs/en/mcp-journeys"},{"title":"OneSignal AI data practices","mode":"frame","href":"/docs/en/ai-data-practices"},{"title":"AI message composer","href":"/docs/en/ai-message-composer"},{"title":"OneSignal Slack Agent","hidden":true,"tag":"BETA","href":"/docs/en/slack-agent"}]},{"group":"Audience \u0026 events","pages":[{"title":"Segments","href":"/docs/en/segmentation"},{"title":"User-based segmentation","tag":"BETA","href":"/docs/en/user-based-segmentation"},{"group":"Users \u0026 Subscriptions","pages":[{"title":"Users","href":"/docs/en/users"},{"title":"Subscriptions","href":"/docs/en/subscriptions"},{"title":"Sessions","href":"/docs/en/sessions"},{"title":"User and Subscription Profiles","href":"/docs/en/user-subscription-profiles"},{"title":"Aliases","href":"/docs/en/aliases"},{"title":"Test users","href":"/docs/en/test-users"},{"title":"Delete users","href":"/docs/en/delete-users"}]},{"group":"Events","pages":[{"title":"Message events","href":"/docs/en/message-events"},{"title":"Session events","href":"/docs/en/session-events"},{"group":"Custom events","pages":[{"title":"Custom events","href":"/docs/en/custom-events"},{"title":"Custom event best practices","href":"/docs/en/custom-event-best-practices"},{"title":"Custom event storage and retention","href":"/docs/en/custom-event-storage"}]}]},{"group":"Tags","pages":[{"title":"Tags","href":"/docs/en/add-user-data-tags"},{"title":"Tags: Time Operators","href":"/docs/en/time-operators"}]},{"title":"Import","href":"/docs/en/import"}]},{"group":"Analytics \u0026 Integrations","pages":[{"group":"Analytics","pages":[{"title":"Analytics overview","href":"/docs/en/analytics-overview"},{"title":"Metrics glossary","href":"/docs/en/analytics-metrics-glossary"},{"title":"Goals","sidebarTitle":"Goals","tag":"BETA","href":"/docs/en/goals"},{"title":"Exporting data","href":"/docs/en/exporting-data"},{"title":"Template analytics","href":"/docs/en/template-analytics"},{"title":"Conversion metrics","href":"/docs/en/conversion-metrics"},{"title":"Engagement trends","href":"/docs/en/engagement-analytics"},{"title":"Subscription trends","href":"/docs/en/subscription-trends"},{"title":"Sessions volume","href":"/docs/en/sessions-volume"},{"group":"Retention metrics","pages":[{"title":"Retention metrics","href":"/docs/en/retention-metrics"},{"title":"Interpreting retention curves","href":"/docs/en/interpreting-retention-curves"}]},{"title":"Custom Outcomes","href":"/docs/en/custom-outcomes"}]},{"group":"Event Streams","pages":[{"title":"Event Streams","href":"/docs/en/event-streams"},{"title":"Event Stream data reference","sidebarTitle":"Event Stream data","href":"/docs/en/event-streams-data"},{"title":"In-app message event streams","href":"/docs/en/iam-event-streams"},{"title":"Google Sheets integration with Event Streams","href":"/docs/en/google-sheets-integration-with-event-streams"}]},{"group":"Integrations","pages":[{"title":"Integrations overview","href":"/docs/en/integrations"},{"title":"Data warehouse, DMP, \u0026 CRM integration","href":"/docs/en/database-dmp-crm-integration"},{"group":"OneSignal as data source","pages":[{"title":"Amplitude","href":"/docs/en/amplitude"},{"title":"Databricks","href":"/docs/en/databricks"},{"title":"Google BigQuery","href":"/docs/en/bigquery"},{"title":"Mixpanel","href":"/docs/en/mixpanel"},{"title":"Snowflake","href":"/docs/en/snowflake"},{"title":"Segment (Twilio)","href":"/docs/en/segment-onesignal-integration"}]},{"group":"OneSignal as destination","pages":[{"title":"Adobe Audience Manager","href":"/docs/en/adobe-audience-manager"},{"title":"AlloyDB","href":"/docs/en/alloydb"},{"title":"Amazon Athena","href":"/docs/en/amazon-athena"},{"title":"Amazon S3","href":"/docs/en/s3"},{"title":"Amplitude","href":"/docs/en/amplitude"},{"title":"Apache Kafka","href":"/docs/en/kafka"},{"title":"Amazon Redshift","href":"/docs/en/amazon-redshift"},{"title":"Azure Synapse","href":"/docs/en/azure-synapse"},{"title":"ClickHouse","href":"/docs/en/clickhouse"},{"title":"Confluent Cloud","href":"/docs/en/confluent-cloud"},{"title":"Databricks","href":"/docs/en/databricks"},{"title":"Elasticsearch","href":"/docs/en/elasticsearch"},{"title":"Google BigQuery","href":"/docs/en/bigquery"},{"title":"Google Cloud SQL","href":"/docs/en/google-cloud-sql"},{"title":"Google Sheets","href":"/docs/en/google-sheets"},{"title":"Greenplum","href":"/docs/en/greenplum"},{"title":"HubSpot","href":"/docs/en/hubspot"},{"title":"Materialize","href":"/docs/en/materialize"},{"title":"Microsoft Fabric","href":"/docs/en/microsoft-fabric"},{"title":"Mixpanel","href":"/docs/en/mixpanel"},{"title":"MotherDuck","href":"/docs/en/motherduck"},{"title":"MySQL","href":"/docs/en/mysql"},{"title":"PostgreSQL","href":"/docs/en/postgresql"},{"title":"Pub/Sub","href":"/docs/en/google-pubsub"},{"title":"SingleStore","href":"/docs/en/singlestore"},{"title":"Snowflake","href":"/docs/en/snowflake"},{"title":"SQL Server","href":"/docs/en/sql-server"},{"title":"Starburst Enterprise","href":"/docs/en/starburst-enterprise"},{"title":"Starburst Galaxy","href":"/docs/en/starburst-galaxy"},{"title":"Trino","href":"/docs/en/trino"},{"title":"Segment (Twilio)","href":"/docs/en/segment-onesignal-integration"}]},{"group":"Attribution","pages":[{"title":"RevenueCat","href":"/docs/en/revenuecat"},{"title":"Adjust","href":"/docs/en/adjust"},{"title":"BlueConic","href":"/docs/en/blueconic"}]},{"title":"Building an integration with OneSignal: partner guide","href":"/docs/en/building-an-integration-with-onesignal-partner-guide"}]}]},{"group":"Privacy \u0026 Security","pages":[{"group":"Security credentials","pages":[{"title":"SOC 2 Type II","href":"/docs/en/soc-2-type-ii"},{"title":"ISO 27001","href":"/docs/en/iso27001"},{"title":"HIPAA","href":"/docs/en/hipaa"}]},{"group":"Data privacy \u0026 regulatory compliance","pages":[{"title":"GDPR \u0026 Individual Rights","href":"/docs/en/gdpr-compliance"},{"title":"EU-US Data Privacy Framework","href":"/docs/en/eu-us-data-privacy-framework"},{"title":"Email regulatory compliance","href":"/docs/en/email-compliance"},{"title":"SMS regulatory compliance","href":"/docs/en/sms-regulatory-compliance"},{"title":"Apple App Privacy Requirements","href":"/docs/en/apple-app-privacy-requirements"},{"title":"Google Play Data Safety Requirements","href":"/docs/en/google-play-data-safety-requirements"},{"title":"Data collection \u0026 security FAQs","href":"/docs/en/data-questions"},{"title":"Data collected by the OneSignal SDK","href":"/docs/en/data-collected-by-the-onesignal-sdk"},{"title":"Handling personal data","href":"/docs/en/handling-personal-data"},{"title":"Data taxonomy","href":"/docs/en/data-taxonomy"},{"title":"OneSignal AI data practices","mode":"frame","href":"/docs/en/ai-data-practices"}]},{"group":"Authentication","pages":[{"title":"2-step authentication","href":"/docs/en/2-step-authentication"},{"title":"Single Sign-On (SSO)","href":"/docs/en/sso"}]}]}]},{"tab":"Developer Guides","pages":[{"title":"Developer Guides","href":"/docs/en/developers"}]},{"tab":"Tutorials","pages":[{"title":"Tutorials","href":"/docs/en/tutorials"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/reference/rest-api-overview"}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes/changelog"}]},{"tab":"Customer Success Hub","pages":[{"title":"Customer Success Hub","href":"/docs/en/customer-success-hub"}]}],"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://onesignal.com/blog"},{"anchor":"GitHub","icon":"github","href":"https://github.com/OneSignal"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@onesignalofficial/playlists"}]}},{"language":"cn","pages":[{"title":"cn","href":"/docs/cn/multi-language-messaging"}]},{"language":"ko","pages":[{"title":"ko","href":"/docs/ko/multi-language-messaging"}]},{"language":"ja","pages":[{"title":"ja","href":"/docs/ja/multi-language-messaging"}]},{"language":"tr","pages":[{"title":"tr","href":"/docs/tr/multi-language-messaging"}]},{"language":"pt-BR","pages":[{"title":"pt-BR","href":"/docs/pt-BR/multi-language-messaging"}]},{"language":"es","pages":[{"title":"es","href":"/docs/es/multi-language-messaging"}]},{"language":"fr","pages":[{"title":"fr","href":"/docs/fr/multi-language-messaging"}]}]},"basePath":"","title":"Multi-language messaging - OneSignal Documentation","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-NdetNziF.js","DynamicMarkdown-CD8713Yy.js","zoom-image-lightbox-DMoL6lHz.js","lightbox-handle-r17bVUz3.js"]}