# Internationalisation

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

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

- Requested language: `fr-FR`

- Content language: `fr-FR`

- Documentation version: `1.2.0`

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

---

## Langue de l’interface

`locale` sélectionne le pack de langue des menus, infobulles, dialogues et autres textes traduits. `locales` enregistre les packs sans sélectionner de langue. Ce paramètre est partagé par les unités de l’instance Univer. Utilisez une valeur `LocaleType`, comme `LocaleType.EN_US`.

* **Tous les produits : interface**: `locale` change les traductions des menus, infobulles, dialogues et libellés des plugins. Le contenu utilisateur et les noms des unités existantes restent inchangés.
* **Sheets : formats et formules**: L’affichage des nombres/dates utilise en priorité la locale forcée du format numérique, puis le `locale` du snapshot du classeur, puis celui de l’instance. `region` ne remplace pas ces paramètres. `DOLLAR`, les formats monétaires des résultats financiers et la normalisation des saisies CJK utilisent toujours `locale`.
* **Docs : statistiques**: `locale` sert à la segmentation et au comptage des mots.

### Changer la langue à l’exécution

Chargez les packs de tous les plugins ou presets installés avant de changer de langue. `loadLocales()` fusionne les traductions sans changer de langue ; `setLocale()` sélectionne la langue sans télécharger de pack. Les traductions manquantes affichent leur clé. Cet exemple charge le pack UI commun ; fusionnez aussi les packs de la langue cible des autres plugins installés dans le même appel.

```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
```

### Enregistrer des packs de langue en mode plugin

Pour enregistrer des packs de langue en mode plugin, vous devez importer les packs correspondants depuis les plugins qui les fournissent, puis les fusionner dans un objet unique à transmettre à l’instance `Univer`. Voici un exemple :

```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: Attention]
> Tous les plugins ne proposent pas de packs linguistiques. La documentation de chaque fonctionnalité précise s’ils sont disponibles.

### Enregistrer des packs de langue en mode prédéfini

Les packages prédéfinis incluent déjà les packs de langue des plugins correspondants ; il vous suffit de les importer depuis le package prédéfini.

```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()],
})
```

### Fusion des packs de langue

La méthode `mergeLocales` permet de fusionner les packs linguistiques de plusieurs plugins ou préréglages en un seul objet complet. Vous pouvez l’utiliser comme suit :

#### Mode plugin

```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,
])
```

#### Mode préréglage

```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,
])
```

### Packs linguistiques personnalisés

Univer prend également en charge les packs linguistiques personnalisés. Vous pouvez créer un objet de pack linguistique selon vos besoins et le transmettre à l’instance `Univer`. Les packs linguistiques des préréglages se trouvent généralement dans le répertoire `<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: 'やり直す',
        },
      },
    },
  },
})
```

### Contribuer aux traductions

Univer propose actuellement les packs linguistiques intégrés suivants :

* `zh-CN` : chinois simplifié
* `en-US` : anglais
* `zh-TW` : chinois traditionnel
* `zh-HK` : chinois traditionnel (Hong Kong)
* `ru-RU` : russe
* `vi-VN` : vietnamien
* `fa-IR` : persan
* `fr-FR` : français
* `ja-JP` : japonais
* `ko-KR` : coréen
* `es-ES` : espagnol
* `ca-ES` : catalan
* `sk-SK` : slovaque
* `ar-SA` : arabe
* `de-DE` : allemand
* `id-ID` : indonésien
* `it-IT` : italien
* `pl-PL` : polonais
* `pt-BR` : portugais (Brésil)

Univer est un projet open source inclusif. Nous invitons les développeurs du monde entier à ajouter ou à améliorer les locales d’Univer.

## Paramètres régionaux

`region` définit les conventions régionales des fonctions concernées. Ce paramètre est partagé par les unités de l’instance Univer.

Utilisez `LocaleType` pour les deux paramètres : `LocaleType.EN_US` vaut `enUS`, tandis que `en-US` est le nom du fichier de langue / la balise BCP 47. Ne passez pas de code pays comme `US` ou `SG` à `region`. Aucun pack supplémentaire n’est nécessaire pour la région lorsque l’interface utilise une autre langue.

Sans valeur explicite, `region` suit `locale`, y compris lors des appels ultérieurs à `setLocale()`. Définir `region` à l’initialisation ou appeler `setRegion()` arrête ce suivi. Les changements de langue conservent alors la région choisie. Aucune API publique ne rétablit le suivi automatique ; modifiez les deux valeurs pour les synchroniser.

Ajoutez `region: LocaleType.DE_DE` à côté de `locale` dans `createUniver()` ou `new Univer()` pour conserver la langue de l’interface avec les conventions régionales allemandes.

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

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

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

L’interface passe ici à l’anglais et la région reste allemande. `getCurrentLocale()` et `getCurrentRegion()` renvoient les identifiants actifs. Pour changer les deux, appelez les deux setters avec la même valeur `LocaleType`.

* **Sheets : commandes monétaires**: `region` détermine l’icône monétaire, les options et aperçus monétaires/comptables ainsi que le format appliqué par la commande monétaire. Le changement ne réécrit pas les formats existants et ne convertit pas les montants.
* **Docs : statistiques**: `region` formate les nombres dans le dialogue de statistiques et la barre d’état (séparateurs de groupes, par exemple), sans changer les règles de comptage.
* **Commentaires en fil, si activés**: `region` définit le format des dates/heures, avec une horloge de 24 heures et des chiffres latins. `locale` contrôle les textes de l’interface. Les horodatages stockés ne changent pas ; `region` ne définit pas le fuseau horaire.
* **Boards, Slides, Bases, PDFs**: `locale` contrôle les traductions de l’interface. `region` peut servir aux fonctions communes intégrées, comme les commentaires en fil, mais ne reformate pas automatiquement les textes des tableaux/diapositives, les champs Base ou le contenu PDF.

## Disposition de droite à gauche

> [!WARNING: Attention]
> RTL est actuellement pris en charge uniquement par la couche UI. La couche de rendu ne prend pas en charge RTL.

La direction de mise en page est indépendante : utilisez `direction` à l’initialisation ou `univerAPI.setDirection('rtl')` / `setDirection('ltr')`. Modifier uniquement `locale` ou `region` ne change pas la direction.

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