# General Translation Integrations: Ajouter des formats de fichiers
URL: https://generaltranslation.com/fr/docs/integrations/paraglide/guides/adding-file-formats.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Comment analyser des fichiers de composants dans un format que les langages intégrés ne couvrent pas.

Les fichiers qui ne sont pas en JavaScript, TypeScript ou JSX sont convertis en TypeScript par un langage : un petit adaptateur qui s’appuie sur les outils propres au framework. Ajoutez un langage lorsque votre application utilise des messages dans un format absent des [formats de fichiers pris en charge](/docs/integrations/paraglide/reference/file-formats).

Les langages sont une option de la bibliothèque : ce guide utilise donc [`collectContext`](/docs/integrations/paraglide/reference/collect-context) plutôt que la CLI.

## Avant de commencer [#before-start]

Il vous faut, pour ce format, un compilateur ou un outil de langage qui renvoie :

* Le fichier sous forme de code JavaScript ou TypeScript.
* Une source map, ou des correspondances Volar, reliant ce code au fichier d’origine.

Un code sans correspondance n’est jamais comptabilisé comme une utilisation : ce sont donc les correspondances qui déterminent quelles utilisations sont détectées et où leur contexte est tronqué.

## Écrire le langage [#write-language]

Un [`SourceLanguage`](/docs/integrations/paraglide/reference/extension-api#languages) indique ses extensions de fichier ainsi que les paquets dont il a besoin, et renvoie le module généré :

```ts title="riot-language.ts"
import {
  mappingsFromSourceMap,
  type SourceLanguage,
} from '@generaltranslation/paraglide-js/compiler';

export const riotLanguage: SourceLanguage = {
  name: 'riot',
  extensions: ['.riot'],
  requires: ['@riotjs/compiler'], // cité dans l'avertissement s'il est manquant
  async generate(source, file, context) {
    // Chargé depuis l'application ; undefined s'il n'est pas installé.
    const compiler =
      await context.load<typeof import('@riotjs/compiler')>('@riotjs/compiler');
    if (!compiler) return undefined; // ignoré

    const { code, map } = compiler.compile(source, { file });
    const mappings = mappingsFromSourceMap(map, code, source);

    return { code, lang: 'js', mappings };
  },
};
```

1. Chargez l&#39;outil avec `context.load` afin que sa version corresponde à celle de l&#39;application. Renvoyez `undefined` s&#39;il est absent : le format est alors ignoré, avec un unique avertissement mentionnant les paquets indiqués dans `requires`.
2. Construisez `mappings` avec `mappingsFromSourceMap` pour une source map de version 3, ou avec `mappingsFromVolar` pour les correspondances d&#39;un outil basé sur Volar.
3. Levez une exception lorsque l&#39;outil rejette un fichier. Ce fichier est alors ignoré, avec un avertissement.

## Enregistrer le langage [#register-language]

Passez-le avec les valeurs par défaut :

```ts
import {
  collectContext,
  defaultLanguages,
} from '@generaltranslation/paraglide-js/compiler';
import { riotLanguage } from './riot-language.js';

await collectContext({ languages: [...defaultLanguages, riotLanguage] });
```

Les fichiers portant les extensions de ce langage sont désormais inclus dans l&#39;analyse. Si un fichier correspond à plusieurs langages, c&#39;est le premier de la liste qui est utilisé.

## Prendre en charge les scripts et les extensions de script [#scripts]

* **Scripts séparés :** renvoyez dans `scripts` les scripts qui constituent des modules à part entière, comme les scripts client d&#39;une page Astro, chacun sous la forme `{ code, lang, mappings }`. Ils ne partagent aucun nom, ni entre eux ni avec le `code` principal.
* **Extensions de script :** pour revendiquer des fichiers dotés d&#39;une extension de script, comme le font les composants Angular avec `.ts`, ajoutez `detect(source, file)` et renvoyez `true` uniquement pour les fichiers dans votre format.

## Next steps

- /docs/integrations/paraglide/guides/resolving-imports

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
