# 国际化

- Human documentation: [https://docs.univer.ai/zh-CN/guides/docs/getting-started/i18n](https://docs.univer.ai/zh-CN/guides/docs/getting-started/i18n)

- Agent Markdown: [https://docs.univer.ai/zh-CN/guides/docs/getting-started/i18n.md](https://docs.univer.ai/zh-CN/guides/docs/getting-started/i18n.md)

- Requested language: `zh-CN`

- Content language: `zh-CN`

- Documentation version: `1.0.0-rc.0`

- Source: [docs/getting-started/i18n.zh-CN.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/docs/getting-started/i18n.zh-CN.mdx)

---

## 在预设模式中注册语言包

预设包中已经包含了其对应插件的语言包，只需要从预设中引入即可。

```typescript
import { UniverDocsCorePreset } from '@univerjs/preset-docs-core'
import UniverPresetDocsCoreZhCN from '@univerjs/preset-docs-core/locales/zh-CN' // [!code highlight]
import { createUniver, LocaleType, mergeLocales } from '@univerjs/presets'

import '@univerjs/preset-docs-core/lib/index.css'

const { univerAPI } = createUniver({
  locale: LocaleType.ZH_CN,
  locales: {
    [LocaleType.ZH_CN]: mergeLocales(
      UniverPresetDocsCoreZhCN, // [!code highlight]
    ),
  },
  presets: [
    UniverDocsCorePreset(),
  ],
})
```

## 在插件模式中注册语言包

使用插件语言包是一件非常繁琐的事情，你需要从存在语言包的插件中引入对应的语言包，并将它们合并成一个对象传入 `Univer` 实例。以下是一个示例：

```typescript
import { LocaleType, mergeLocales, Univer } from '@univerjs/core'
import DesignZhCN from '@univerjs/design/locale/zh-CN' // [!code highlight]
import DocsUIZhCN from '@univerjs/docs-ui/locale/zh-CN' // [!code highlight]
import UIZhCN from '@univerjs/ui/locale/zh-CN' // [!code highlight]

const univer = new Univer({
  locale: LocaleType.ZH_CN,
  locales: {
    [LocaleType.ZH_CN]: mergeLocales(
      DesignZhCN, // [!code highlight]
      UIZhCN, // [!code highlight]
      DocsUIZhCN, // [!code highlight]
    ),
  },
})
```

> [!WARNING: 注意事项]
> 并非所有插件都包含了语言包，我们会在每个功能的文档对此进行说明。

## `mergeLocales` 方法

`mergeLocales` 方法用于将多个插件或预设的语言包合并为一个完整的语言包对象，你可以通过以下方式使用它：

#### 预设模式

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

// 你可以传入多个语言包对象进行合并
const locales = mergeLocales(
  plugin1Locales,
  plugin2Locales,
  presetLocales,
)
// 也可以传入一个语言包对象数组
const locales = mergeLocales([
  plugin1Locales,
  plugin2Locales,
  presetLocales,
])
```

#### 插件模式

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

// 你可以传入多个语言包对象进行合并
const locales = mergeLocales(
  plugin1Locales,
  plugin2Locales,
  presetLocales,
)
// 也可以传入一个语言包对象数组
const locales = mergeLocales([
  plugin1Locales,
  plugin2Locales,
  presetLocales,
])
```

## 自定义语言包

Univer 也支持自定义语言包，你可以根据需要自行组装语言包对象并传入 `Univer` 实例。可供参考的预设语言包一般存放在 `<rootDir>/packages/<PLUGIN_NAME>/locale` 目录下。

```typescript
const univer = new Univer({
  locale: 'ja-JP',
  locales: {
    'ja-JP': {
      ui: {
        shortcut: {
          undo: '元に戻す',
          redo: 'やり直す',
        },
      },
    },
  },
})
```

## 贡献语言包

Univer 目前提供了以下内置语言包：

* `zh-CN`：简体中文
* `en-US`：英文
* `zh-TW`：繁体中文
* `zh-HK`：繁体中文（香港）
* `ru-RU`：俄文
* `vi-VN`：越南文
* `fa-IR`：波斯文
* `fr-FR`：法文
* `ja-JP`：日文
* `ko-KR`：韩文
* `es-ES`：西班牙文
* `ca-ES`：加泰罗尼亚文
* `sk-SK`：斯洛伐克文
* `ar-SA`：阿拉伯文
* `de-DE`：德文
* `id-ID`：印尼文
* `it-IT`：意大利文
* `pl-PL`：波兰文
* `pt-BR`：葡萄牙文（巴西）

其他的语言尚未支持。我们欢迎来自五湖四海的开发者为 Univer 添加或者改进语言包。
