# Internacionalización

- Human documentation: [https://docs.univer.ai/es-ES/guides/sheets/getting-started/i18n](https://docs.univer.ai/es-ES/guides/sheets/getting-started/i18n)

- Agent Markdown: [https://docs.univer.ai/es-ES/guides/sheets/getting-started/i18n.md](https://docs.univer.ai/es-ES/guides/sheets/getting-started/i18n.md)

- Requested language: `es-ES`

- Content language: `es-ES`

- Documentation version: `1.2.0`

- Source: [sheets/getting-started/i18n.es-ES.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/sheets/getting-started/i18n.es-ES.mdx)

---

## Idioma de la interfaz

`locale` selecciona el paquete de idioma de menús, ayudas, diálogos y otros textos traducidos. `locales` registra los paquetes sin seleccionar un idioma. Este ajuste se comparte entre las unidades de la instancia de Univer. Use valores de `LocaleType`, como `LocaleType.EN_US`.

* **Todos los productos: interfaz**: `locale` cambia las traducciones de menús, ayudas, diálogos y etiquetas de plugins. No traduce contenido del usuario ni renombra unidades existentes.
* **Sheets: formatos y fórmulas**: La visualización de números/fechas usa primero la locale sobrescrita del formato numérico, después el `locale` del snapshot del libro y finalmente el de la instancia. `region` no sustituye estos ajustes. `DOLLAR`, los formatos monetarios de resultados financieros y la normalización de entradas CJK siguen usando `locale`.
* **Docs: estadísticas**: `locale` se usa para segmentar y contar palabras.

### Cambiar el idioma durante la ejecución

Cargue los paquetes de todos los plugins o presets instalados antes de cambiar el idioma. `loadLocales()` combina traducciones sin cambiar de idioma; `setLocale()` selecciona el idioma sin descargar paquetes. Las traducciones ausentes muestran su clave. Este ejemplo carga el paquete UI compartido; combine en la misma llamada los paquetes del idioma de destino de los demás plugins instalados.

```typescript
import { LocaleType, mergeLocales } from '@univerjs/core'
import UIEnUS from '@univerjs/ui/locale/en-US'

univerAPI.loadLocales(LocaleType.EN_US, mergeLocales(UIEnUS))
univerAPI.setLocale(LocaleType.EN_US)

console.log(univerAPI.getCurrentLocale()) // enUS
```

### Registro de paquetes de idiomas en modo complemento

Para registrar paquetes de idioma en modo complemento, debe importar los paquetes de idioma correspondientes desde los complementos que los proporcionan y fusionarlos en un solo objeto para pasar a la instancia `Univer`. Aquí hay un ejemplo:

```typescript
import { LocaleType, mergeLocales, Univer } from '@univerjs/core'
import DesignEnUS from '@univerjs/design/locale/en-US' // [!code highlight]
import SheetsUIEnUS from '@univerjs/sheets-ui/locale/en-US' // [!code highlight]
import UIEnUS from '@univerjs/ui/locale/en-US' // [!code highlight]

const univer = new Univer({
  locale: LocaleType.EN_US,
  locales: {
    [LocaleType.EN_US]: mergeLocales(
      DesignEnUS, // [!code highlight]
      UIEnUS, // [!code highlight]
      SheetsUIEnUS, // [!code highlight]
    ),
  },
})
```

> [!WARNING: Caution]
> No todos los complementos incluyen paquetes de idiomas. Especificaremos esto en la documentación de cada característica.

### Registro de paquetes de idiomas en modo preestablecido

Los paquetes preestablecidos ya incluyen los paquetes de idiomas de complemento correspondientes, solo necesita importarlos desde el modo preestablecido.

```typescript
import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'
import UniverPresetSheetsCoreEnUS from '@univerjs/preset-sheets-core/locales/en-US' // [!code highlight]
import { createUniver, LocaleType, mergeLocales } from '@univerjs/presets'

const { univerAPI } = createUniver({
  locale: LocaleType.EN_US,
  locales: {
    [LocaleType.EN_US]: mergeLocales(
      UniverPresetSheetsCoreEnUS, // [!code highlight]
    ),
  },
  presets: [UniverSheetsCorePreset()],
})
```

### Combinación de paquetes de idioma

`mergeLocales` El método se utiliza para fusionar múltiples complementos o paquetes de idioma preestablecidos en un objeto de paquete de idioma completo. Puedes usarlo de la siguiente manera:

#### Plugin Mode

```typescript
import { mergeLocales } from '@univerjs/core'

// You can pass multiple language pack objects to merge
const locales = mergeLocales(
  plugin1Locales,
  plugin2Locales,
  presetLocales,
)
// You can also pass an array of language pack objects
const locales = mergeLocales([
  plugin1Locales,
  plugin2Locales,
  presetLocales,
])
```

#### Preset Mode

```typescript
import { mergeLocales } from '@univerjs/presets'

// You can pass multiple language pack objects to merge
const locales = mergeLocales(
  plugin1Locales,
  plugin2Locales,
  presetLocales,
)
// You can also pass an array of language pack objects
const locales = mergeLocales([
  plugin1Locales,
  plugin2Locales,
  presetLocales,
])
```

### Paquetes de idiomas personalizados

Univer también admite paquetes de idiomas personalizados. Puede ensamblar un objeto de paquete de idioma según sea necesario y pasarlo a la instancia `Univer`. Los paquetes de idiomas preestablecidos generalmente se almacenan en el directorio `<rootDir>/packages/<PLUGIN_NAME>/locale`.

```typescript
import { LocaleType, Univer } from '@univerjs/core'

const univer = new Univer({
  locale: LocaleType.JA_JP,
  locales: {
    [LocaleType.JA_JP]: {
      ui: {
        shortcut: {
          undo: '元に戻す',
          redo: 'やり直す',
        },
      },
    },
  },
})
```

### Contribución de traducciones

Univer actualmente proporciona los siguientes paquetes de idiomas integrados:

* `zh-CN`: chino simplificado
* `en-US`: inglés
* `zh-TW`: tradicional Chino
* `zh-HK`: Chino tradicional (Hong Kong)
* `ru-RU`: Ruso
* `vi-VN`: Vietnamita
* `fa-IR`: Persa
* `fr-FR`: Francés
* `ja-JP`: japonés
* `ko-KR`: coreano
* `es-ES`: español
* `ca-ES`: catalán
* `sk-SK`: eslovaco
* `ar-SA`: Árabe
* `de-DE`: alemán
* `id-ID`: indonesio
* `it-IT`: italiano
* `pl-PL`: polaco
* `pt-BR`: portugués (brasileño)

Univer es un proyecto de código abierto lleno de inclusión y damos la bienvenida a desarrolladores de todo el mundo para agregar o mejorar las configuraciones regionales de Univer.

## Configuración regional

`region` define las convenciones regionales de las funciones correspondientes. Este ajuste se comparte entre las unidades de la instancia de Univer.

Use valores de `LocaleType` para ambos: `LocaleType.EN_US` vale `enUS`, mientras que `en-US` es el nombre del archivo de idioma / etiqueta BCP 47. No pase códigos de país como `US` o `SG` a `region`. No hace falta cargar el paquete del idioma de la región si la interfaz usa otro idioma.

Sin un `region` explícito, este sigue a `locale`, incluidas las llamadas posteriores a `setLocale()`. Definir `region` al inicializar o llamar a `setRegion()` detiene ese seguimiento. Los cambios posteriores de idioma conservan la región elegida. No hay una API pública para restaurar el seguimiento automático; cambie ambos valores para mantenerlos sincronizados.

Añada `region: LocaleType.DE_DE` junto a `locale` en `createUniver()` o `new Univer()` para conservar el idioma de la interfaz con las convenciones regionales alemanas.

```typescript
import { LocaleType } from '@univerjs/core'

univerAPI.setRegion(LocaleType.DE_DE)
univerAPI.setLocale(LocaleType.EN_US)

console.log(univerAPI.getCurrentRegion()) // deDE
```

Aquí la interfaz cambia a inglés y la región sigue siendo Alemania. `getCurrentLocale()` y `getCurrentRegion()` devuelven los identificadores activos. Para cambiar ambos, llame a los dos setters con el mismo valor de `LocaleType`.

* **Sheets: controles de moneda**: `region` determina el icono de moneda, las opciones y vistas previas de moneda/contabilidad y el formato aplicado por el comando de moneda. No reescribe formatos de celdas existentes ni convierte importes.
* **Docs: estadísticas**: `region` da formato a las cifras del diálogo de estadísticas y de la barra de estado (por ejemplo, separadores de grupos), sin cambiar las reglas de recuento.
* **Comentarios en hilo, si están habilitados**: `region` controla el formato de fecha/hora, con reloj de 24 horas y dígitos latinos. `locale` controla los textos de la interfaz. No cambian las marcas de tiempo almacenadas; `region` no es un ajuste de zona horaria.
* **Boards, Slides, Bases, PDFs**: `locale` controla las traducciones de la interfaz. `region` está disponible para funciones compartidas integradas, como los comentarios en hilo, pero no reformatea automáticamente texto de tableros/diapositivas, campos Base ni contenido PDF.

## Diseño de derecha a izquierda

> [!WARNING: Atención]
> Actualmente, RTL solo es compatible con la capa de UI. La capa de renderizado no admite RTL.

La dirección del diseño es independiente: use `direction` al inicializar o `univerAPI.setDirection('rtl')` / `setDirection('ltr')`. Cambiar solo `locale` o `region` no cambia la dirección.

```typescript
univerAPI.setDirection('rtl')
```
