> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 多语言消息传递

> 使用 OneSignal 的仪表板或 API 在推送、电子邮件和应用内消息中发送多语言个性化消息。

本指南解释了如何在 OneSignal 中设置用户的语言，并跨推送通知、电子邮件和应用内消息以用户首选语言发送消息。

## 设置用户语言

当使用网页或移动 SDK 首次创建用户时，OneSignal 会自动从设备的语言设置 `language` 属性。

您也可以使用 [ISO 639-1](#supported-languages) 2 位字母语言代码通过以下方式手动设置或更新用户的语言：

1. SDK 的 `setLanguage` 方法。
2. [创建用户](/reference/create-user) 或 [更新用户](/reference/update-user) API 中的 `language` 字段。
3. [CSV 导入器](./import) 中的 `language` 列。

<Note>
  参见 [支持的语言](#supported-languages) 以获取有效语言代码列表。
</Note>

***

## 发送不同语言的消息

使用下面的选项卡按消息渠道查看本地化选项。

<Tabs>
  <Tab title="推送通知">
    ### 仪表板发送

    从 **消息 > 推送 > 新消息** 或 [模板](./templates) 中，点击 **添加语言**。从以下选项中选择：

    #### 选项 1：复选框

    选择您支持的语言。任何未选择的语言将回退到任意/英语。

    <Frame caption="使用复选框选择语言。">
      <img src="https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6291cdff9431f4ac7c4cbb7cbeff8d39f06c9cd5332f0b9b9309f8ff1071632a-Screenshot_2025-01-30_at_10.30.54_AM.png?fit=max&auto=format&n=jFWn5xzleD8du3j6&q=85&s=0fb96aa3471800377551d68effdfa1ae" width="1390" height="924" data-path="images/docs/6291cdff9431f4ac7c4cbb7cbeff8d39f06c9cd5332f0b9b9309f8ff1071632a-Screenshot_2025-01-30_at_10.30.54_AM.png" />
    </Frame>

    #### 选项 2：导入语言内容

    使用提供的模板为每种语言格式化消息。

    <Frame caption="从电子表格复制和粘贴数据的模态框。">
      <img src="https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5aa9be9a86f23eaef5810d84496e974d3ec911f884e3bd2e4765cb97faa94e76-Screenshot_2025-01-30_at_10.46.31_AM.png?fit=max&auto=format&n=jFWn5xzleD8du3j6&q=85&s=06d2858a2e8eef6019f4b87ec9b862f6" width="1780" height="1018" data-path="images/docs/5aa9be9a86f23eaef5810d84496e974d3ec911f884e3bd2e4765cb97faa94e76-Screenshot_2025-01-30_at_10.46.31_AM.png" />
    </Frame>

    将内容复制并粘贴回"添加语言"字段。

    <Frame caption="带有示例数据的模态框。">
      <img src="https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5661f24c79e47b246eaffc22955de3b5dfbc8ab746958b0c0db82a997a2ad5d3-Screenshot_2025-01-30_at_10.53.34_AM.png?fit=max&auto=format&n=jFWn5xzleD8du3j6&q=85&s=b1fd2210bc3fb85c554b0f71ffbd2f94" width="1780" height="1018" data-path="images/docs/5661f24c79e47b246eaffc22955de3b5dfbc8ab746958b0c0db82a997a2ad5d3-Screenshot_2025-01-30_at_10.53.34_AM.png" />
    </Frame>

    预览内容以双重检查，插入内容，编辑器中将出现填充了指定内容的新选项卡。

    <Frame caption="内容预览。">
      <img src="https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/7acf7e51c3b6dd2ace8c4da6acd04942ca1a10086949e2f7ffd1c88328f1f78e-Screenshot_2025-01-30_at_10.54.27_AM.png?fit=max&auto=format&n=jBdBk5XvQR5eKOks&q=85&s=323fa5b31d9905bde453aa0ad893d919" width="1584" height="664" data-path="images/docs/7acf7e51c3b6dd2ace8c4da6acd04942ca1a10086949e2f7ffd1c88328f1f78e-Screenshot_2025-01-30_at_10.54.27_AM.png" />
    </Frame>

    #### 选项 3：动态内容

    使用 [动态内容](./dynamic-content)，这涉及创建和上传包含您支持的语言的 CSV 文件。

    #### 故障排除

    * **需要英语**：包含 `en` 行作为默认值。
    * **使用正确的标题**：`language_code`、`title`、`subtitle`、`message`
    * **逗号分隔值**：确保正确的 CSV 格式。
    * **不支持的语言**：如果未在 UI 或模板中列出，则不支持该语言。请使用最佳备选方案并联系 `support@onesignal.com`。

    <Info>
      仪表板编辑器使用标准 HTML 字段。特殊字符如 `%` 可能在 RTL 语言中引起显示问题。在这些字符后添加 [RLM 标记](https://en.wikipedia.org/wiki/Right-to-left_mark) 以修复格式问题。
    </Info>

    ***

    ### API 发送

    `contents` 和 `headings` 字段支持多种语言：

    ```json theme={null}
      {
        "contents": {
          "en": "English content",
          "fr": "French content"
        },
        "headings": {
          "en": "English heading",
          "fr": "French heading"
        }
      }
    ```
  </Tab>

  <Tab title="电子邮件">
    ### 仪表板发送

    从 **消息 > 电子邮件 > 新消息** 或 [模板](./templates) 中，从以下选项中选择：

    #### 选项 1：细分

    1. 为每种语言创建一个细分。
    2. 为每种语言创建一个模板。
    3. 将每个模板发送到其对应的细分。

    #### 选项 2：Liquid 语法

    使用 [Liquid 语法](./using-liquid-syntax) 和 [属性或标签替换](./message-personalization) 在消息中创建条件语句，并根据用户的语言渲染适当的内容。

    ```text Liquid theme={null}
    {% assign language = subscription.language %}
    {% if language == 'fr' %}
      Bonjour {{ name }}!
    {% elsif language == 'es' %}
      Hola {{ name }}!
    {% else %}
      Hi {{ name }}!
    {% endif %}
    ```

    <Frame caption="使用 Liquid 语法的多语言电子邮件模板示例。">
      <img src="https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/220a329-Multi-Language_Graphic_4.png?fit=max&auto=format&n=3zq1PvSaqvUE2bIx&q=85&s=3e02125c87dbdf72ca3708c289831394" width="1869" height="1853" data-path="images/docs/220a329-Multi-Language_Graphic_4.png" />
    </Frame>

    #### 选项 3：动态内容

    使用 [动态内容](./dynamic-content)，这涉及创建和上传包含您支持的语言的 CSV 文件。

    ***

    ### API 发送

    使用 [创建消息 API](/reference/create-message)，您可以：

    * 像使用仪表板一样定位语言细分或过滤器。
    * 使用 Liquid 语法创建消息模板，利用 `custom_data`、属性或标签替换。请参阅 [消息个性化](./message-personalization) 了解这些选项的更多详细信息。

    `custom_data` 批量个性化示例：

    ```liquid Template theme={null}
    {% assign eid = message.custom_data.users[subscription.external_id] %}
    Hi {{ eid.first_name }}, you have {{ eid.points }} points. Your level is {{ eid.level }}.
    ```

    ```json API Request theme={null}
    {
      "app_id": "YOUR_APP_ID",
      "template_id": "YOUR_TEMPLATE_ID",
      "include_aliases": {
        "external_id": ["user123", "user456"]
      },
      "custom_data": {
        "users": {
          "user123": { "first_name": "John", "points": "150", "level": "Gold" },
          "user456": { "first_name": "Sarah", "points": "200", "level": "Platinum" }
        }
      }
    }
    ```

    <Check>
      客户看到：

      * "Hi John, you have 150 points. Your level is Gold."
      * "Hi Sarah, you have 200 points. Your level is Platinum."
    </Check>
  </Tab>

  <Tab title="应用内消息">
    ### 仪表板 - 细分

    要为您需要支持的每种语言发送特定语言的应用内消息：

    1. 为每种语言创建一个细分。
    2. 为每种语言创建一个应用内消息。
    3. 将每个消息发送到其对应的细分。

    ### 标签替换

    使用 [Liquid 语法](./using-liquid-syntax) 和 [标签替换](./message-personalization) 在消息中创建条件语句，并基于标签渲染适当的内容。

    <Warning>
      仅应用内消息支持标签替换。
    </Warning>

    ```Text Tags theme={null}
    language : german
    first_name : Jon
    ```

    ```Text Template theme={null}
    {% assign lang = language%}
      {% if lang == "english" %}
        Good day {{first_name}}!
      {%- elsif lang == 'german' -%}
        Guten Tag {{first_name}}!
      {%- elsif lang == 'spanish' -%}
        Buenos Dias {{first_name}}!
      {%- elsif lang == 'french' -%}
        Bonjour {{first_name}}!
      {% else %}
        Hello {{first_name}}!
    {% endif %}
    ```

    ```Text Result theme={null}
    Guten Tag Jon!
    ```
  </Tab>

  <Tab title="短信">
    ### 仪表板发送

    从 **消息 > 短信 > 新消息** 或 [模板](./templates) 中，从以下选项中选择：

    #### 选项 1：细分

    1. 为每种语言创建一个细分。
    2. 为每种语言创建一个模板。
    3. 将每个模板发送到其对应的细分。

    #### 选项 2：动态内容

    使用 [动态内容](./dynamic-content)，这涉及创建和上传包含您支持的语言的 CSV 文件。

    ***

    ### API 发送

    `contents` 和 `headings` 字段支持多种语言：

    ```json theme={null}
      {
        "contents": {
          "en": "English content",
          "fr": "French content"
        },
        "headings": {
          "en": "English heading",
          "fr": "French heading"
        }
      }
    ```
  </Tab>
</Tabs>

***

## 支持的语言

语言代码映射到 ISO 639-1 代码 2 位字母格式的 `language` 用户属性。我们支持以下语言代码。

<Note>
  如果弹窗和 CSV 模板中未包含该语言代码，则不支持该语言。我们建议使用最佳备选语言并向 `support@onesignal.com` 发送产品请求
</Note>

| Language              | Language Code |
| --------------------- | ------------- |
| English               | en            |
| Arabic                | ar            |
| Azerbaijani           | az            |
| Bosnian               | bs            |
| Catalan               | ca            |
| Chinese (Simplified)  | zh-Hans       |
| Chinese (Traditional) | zh-Hant       |
| Croatian              | hr            |
| Czech                 | cs            |
| Danish                | da            |
| Dutch                 | nl            |
| Estonian              | et            |
| Finnish               | fi            |
| French                | fr            |
| Georgian              | ka            |
| Bulgarian             | bg            |
| German                | de            |
| Greek                 | el            |
| Hindi                 | hi            |
| Hebrew                | he            |
| Hungarian             | hu            |
| Indonesian            | id            |
| Italian               | it            |
| Japanese              | ja            |
| Korean                | ko            |
| Latvian               | lv            |
| Lithuanian            | lt            |
| Malay                 | ms            |
| Norwegian             | nb            |
| Persian               | fa            |
| Polish                | pl            |
| Portuguese            | pt            |
| Punjabi               | pa            |
| Romanian              | ro            |
| Russian               | ru            |
| Serbian               | sr            |
| Slovak                | sk            |
| Spanish               | es            |
| Swedish               | sv            |
| Thai                  | th            |
| Turkish               | tr            |
| Ukrainian             | uk            |
| Vietnamese            | vi            |

***
