> ## 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.

# Mensajería multiidioma

> Envía mensajes personalizados en múltiples idiomas a través de push, email y mensajería en la app usando el panel o API de OneSignal.

Esta guía explica cómo configurar el idioma de un usuario en OneSignal y enviar mensajes en su idioma preferido a través de notificaciones push, emails y mensajes en la app.

## Configurar idioma del usuario

OneSignal configura automáticamente la propiedad `language` desde el idioma del dispositivo cuando un usuario se crea por primera vez usando los SDKs web o móviles.

También puedes configurar o actualizar manualmente el idioma del usuario usando el código de idioma de 2 letras [ISO 639-1](#idiomas-soportados) con:

1. El método `setLanguage` del SDK.
2. El campo `language` en las APIs [Crear usuario](/reference/create-user) o [Actualizar usuario](/reference/update-user).
3. La columna `language` en el [Importador CSV](./import).

<Note>
  Consulta [Idiomas soportados](#idiomas-soportados) para una lista de códigos de idioma válidos.
</Note>

***

## Enviar mensajes en diferentes idiomas

Usa las pestañas a continuación para ver opciones de localización por canal de mensajería.

<Tabs>
  <Tab title="Notificaciones push">
    ### Envío desde el panel

    Desde **Messages > Push > New Message** o [Plantillas](./templates), haz clic en **Add Languages**. Elige entre:

    #### Opción 1: Casillas de verificación

    Selecciona los idiomas que soportas. Cualquier idioma no seleccionado volverá a Any/English.

    <Frame caption="Usar casillas de verificación para seleccionar los idiomas.">
      <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>

    #### Opción 2: Importar contenido de idiomas

    Usa la plantilla proporcionada para formatear el mensaje en cada idioma.

    <Frame caption="Modal para copiar y pegar datos desde una hoja de cálculo.">
      <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>

    Copia y pega el contenido de vuelta en el campo "Add Languages".

    <Frame caption="Modal con datos de ejemplo.">
      <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>

    Previsualiza el contenido para verificar, inserta el contenido, y aparecerán nuevas pestañas en el editor con el contenido designado completado.

    <Frame caption="Vista previa del contenido.">
      <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>

    #### Opción 3: Contenido dinámico

    Usa [Contenido dinámico](./dynamic-content) que implica crear y subir un archivo CSV con los idiomas que soportas.

    #### Solución de problemas

    * **Inglés requerido**: Incluye una fila para `en` como predeterminado.
    * **Usar encabezados correctos**: `language_code`, `title`, `subtitle`, `message`
    * **Valores separados por comas**: Asegura el formato CSV apropiado.
    * **Idioma no soportado**: Si no está listado en la interfaz o plantilla, no está soportado. Usa la siguiente mejor opción y contacta a `support@onesignal.com`.

    <Info>
      El editor del panel usa un campo HTML estándar. Caracteres especiales como `%` pueden causar problemas de visualización en idiomas RTL. Agrega [marcas RLM](https://en.wikipedia.org/wiki/Right-to-left_mark) después de tales caracteres para solucionar problemas de formato.
    </Info>

    ***

    ### Envío por API

    Los campos `contents` y `headings` soportan múltiples idiomas:

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

  <Tab title="Email">
    ### Envío desde el panel

    Desde **Messages > Email > New Message** o [Plantillas](./templates), elige entre:

    #### Opción 1: Segmentos

    1. Crea un segmento para cada idioma.
    2. Crea una plantilla por idioma.
    3. Envía cada uno a su segmento correspondiente.

    #### Opción 2: Sintaxis Liquid

    Usa [sintaxis Liquid](./using-liquid-syntax) y [sustitución de propiedades o tags](./message-personalization) para crear declaraciones condicionales en el mensaje y renderizar el contenido apropiado basado en el idioma del usuario.

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

    <Frame caption="Ejemplo de plantilla de email multiidioma usando sintaxis 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>

    #### Opción 3: Contenido dinámico

    Usa [Contenido dinámico](./dynamic-content) que implica crear y subir un archivo CSV con los idiomas que soportas.

    ***

    ### Envío por API

    Usando la [API Crear mensaje](/reference/create-message), puedes:

    * Orientar segmentos o filtros de idioma como lo harías con el panel.
    * Crear plantillas de mensaje con sintaxis Liquid utilizando `custom_data`, sustitución de propiedades o tags. Consulta [Personalización de mensajes](./message-personalization) para más detalles sobre estas opciones.

    Ejemplo de personalización masiva con `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>
      El cliente ve:

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

  <Tab title="Mensajes en la app">
    ### Panel - Segmentos

    Para enviar un mensaje en la app específico de idioma a cada idioma que necesitas soportar:

    1. Crea un segmento para cada idioma.
    2. Crea un mensaje en la app por idioma.
    3. Envía cada uno a su segmento correspondiente.

    ### Sustitución de tags

    Usa [sintaxis Liquid](./using-liquid-syntax) y [sustitución de tags](./message-personalization) para crear declaraciones condicionales en el mensaje y renderizar el contenido apropiado basado en tags.

    <Warning>
      Solo la sustitución de tags está soportada para mensajes en la app.
    </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="SMS">
    ### Envío desde el panel

    Desde **Messages > SMS > New Message** o [Plantillas](./templates), elige entre:

    #### Opción 1: Segmentos

    1. Crea un segmento para cada idioma.
    2. Crea una plantilla por idioma.
    3. Envía cada uno a su segmento correspondiente.

    #### Opción 2: Contenido dinámico

    Usa [Contenido dinámico](./dynamic-content) que implica crear y subir un archivo CSV con los idiomas que soportas.

    ***

    ### Envío por API

    Los campos `contents` y `headings` soportan múltiples idiomas:

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

***

## Idiomas soportados

El código de idioma se mapea a la propiedad de usuario `language` en el formato de código de 2 letras ISO 639-1. Soportamos los siguientes códigos de idioma.

<Note>
  Si el código de idioma no está incluido en la ventana emergente y la plantilla CSV, entonces este idioma no está soportado. Recomendamos usar el siguiente mejor idioma y enviarnos una solicitud de producto a `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            |

***
