# General Translation Knowledge Base: Comment migrer de Crowdin vers General Translation ?
URL: https://generaltranslation.com/fr/kb/migrate-from-crowdin.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Conservez vos fichiers de ressources, votre bibliothèque d’i18n et vos traductions relues. Activez l’option Skip untranslated strings, téléchargez vos traductions, empêchez l’intégration Git de Crowdin de pousser des traductions, puis importez les fichiers avec npx gt upload avant le premier npx gt translate. General Translation traduit ensuite les chaînes nouvelles et modifiées lors de votre compilation, à l’aide de votre glossaire stocké dans un groupe de contexte.
Category: Outils de workflow
Last updated: 2026-11-12
Authors: Kevin Wu
Published: 2026-11-12

Crowdin héberge vos fichiers sources, leurs traductions, un glossaire et une mémoire de traduction, et son intégration Git vous renvoie les traductions sous forme de pull requests. En migrant vers General Translation, vous conservez les fichiers de ressources que votre application lit déjà : la CLI `gt` les importe avec vos traductions existantes, puis traduit les chaînes nouvelles et modifiées lors de votre compilation ou dans votre CI. Votre bibliothèque d’i18n, vos clés et l’organisation de vos fichiers restent inchangées ; intégrer directement le texte dans le code est une étape distincte et facultative (voir [migrer depuis react-i18next](/kb/migrate-from-react-i18next) ou [depuis next-intl](/kb/migrate-from-next-intl)). Votre glossaire devient un groupe de contexte que votre application, votre documentation et vos autres projets peuvent partager.

## Qu&#39;est-ce qui est repris de Crowdin ?

| Dans Crowdin                                                        | Dans General Translation                                                                                                                                                                                    |
| ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Entrées `files` de `crowdin.yml`                                    | `files` dans `gt.config.json`, avec `[locale]` à la place de `%locale%`                                                                                                                                     |
| Fichiers traduits                                                   | Importés avec [`npx gt upload`](/docs/cli/reference/commands/upload) et conservés jusqu&#39;à ce que leur source soit modifiée                                                                              |
| Glossaire                                                           | Le glossaire d&#39;un [groupe de contexte](/docs/platform/dashboard/guides/defining-context-for-translations), importé depuis un fichier CSV                                                                |
| Guide de style et invites d&#39;IA                                  | [Instructions personnalisées](/docs/platform/dashboard/guides/defining-context-for-translations), globales ou par paramètre régional                                                                        |
| Contexte et longueur maximale des chaînes                           | Commentaires dans vos fichiers sources Android et iOS, que General Translation utilise comme contexte, ou fichier de [métadonnées associées aux clés](/docs/cli/reference/keyed-metadata) pour JSON et YAML |
| Mémoire de traduction                                               | Vos traductions téléversées : les chaînes inchangées les conservent, et seules les chaînes nouvelles ou modifiées sont traduites. Les fichiers TMX ne sont pas importés                                     |
| Intégration GitHub ou GitLab (branches `l10n_` par défaut)          | [`npx gt translate`](/docs/cli/reference/commands/translate) dans votre CI, ou pull requests [Locadex](/docs/platform/locadex/quickstart)                                                                   |
| Relecture et approbation                                            | Modification dans le [tableau de bord](/docs/platform/dashboard/guides/reviewing-translations), avec approbation incluse dans le plan Enterprise                                                            |
| Diffusion de contenu à distance (OTA) pour les applications mobiles | Les traductions sont intégrées à vos fichiers de ressources à chaque version de l&#39;application                                                                                                           |

La CLI prend en charge les fichiers JSON, YAML, `.pot` et `.po`, iOS `.strings`, `.stringsdict` et `.xcstrings`, Android `strings.xml`, `.resx`, HTML, Markdown et MDX, entre autres. (Consultez les [formats pris en charge](/docs/cli/reference/config#files).) Elle ne prend pas en charge les fichiers XLIFF, ARB, Java `.properties`, ni les fichiers de chaînes CSV et XLSX.

## Étape 1 : empêcher Crowdin de remplacer les traductions manquantes par le texte source

Par défaut, Crowdin [exporte les chaînes non traduites en texte source](https://support.crowdin.com/project-settings/export/) afin que les fichiers ne soient jamais vides. Importé tel quel, ce texte anglais serait comptabilisé comme des traductions terminées. Avant le téléchargement, activez **Skip untranslated strings** dans **Settings &gt; Export** du projet Crowdin (cette option est sans effet tant que **Skip untranslated files** est activée), ou définissez [`skip_untranslated_strings`](https://crowdin.github.io/crowdin-cli/advanced) dans `crowdin.yml` :

```yaml title="crowdin.yml"
files:
  - source: /locales/en/**/*.json
    translation: /locales/%locale%/**/%original_file_name%
    skip_untranslated_strings: true
```

Le comportement de « skip » dépend du format. Crowdin supprime les chaînes non traduites des fichiers JSON plats, YAML, Android XML, iOS `.strings` et `.stringsdict`, ainsi que `.resx`. Dans les fichiers JSON imbriqués, i18next JSON, gettext PO et TS ou JS, il les exporte sous forme de valeurs vides : recherchez donc les chaînes vides dans ces fichiers et supprimez-les avant l&#39;importation. Ajoutez `export_only_approved: true` si vous souhaitez ne reprendre que les traductions relues.

## Étape 2 : Télécharger vos traductions

Si les fichiers sources se trouvent déjà dans votre dépôt, téléchargez les traductions avec la [CLI Crowdin](https://crowdin.github.io/crowdin-cli/commands/crowdin-download). Commencez par prévisualiser les chemins :

```bash
crowdin download --dryrun
crowdin download --skip-untranslated-strings
```

Sans la CLI, utilisez **Translations &gt; Build &amp; Download** dans le projet Crowdin, qui applique les paramètres d&#39;export du projet. Si vous utilisez Crowdin Enterprise, définissez `base_url` sur l&#39;adresse de l&#39;API de votre organisation dans `crowdin.yml`.

Vérifiez les noms des dossiers de paramètres régionaux. `%locale%` génère des codes combinant langue et région, comme `uk-UA`, tandis que `%two_letters_code%` génère des codes de langue seule, comme `uk`. Indiquez les mêmes codes dans `gt.config.json`, ou renommez-les lors de l&#39;export à l&#39;aide de l&#39;option [`languages_mapping`](https://support.crowdin.com/developer/configuration-file/) de Crowdin.

## Étape 3 : empêcher Crowdin de pousser des traductions

Les intégrations GitHub et GitLab de Crowdin [se synchronisent toutes les heures par défaut](https://support.crowdin.com/github-integration/) et ouvrent des pull requests (merge requests sur GitLab) à partir de branches `l10n_`. Avant que General Translation n&#39;écrive le moindre fichier, videz le champ **Sync Schedule** de l&#39;intégration et enregistrez, afin que Crowdin cesse d&#39;envoyer des traductions vers votre dépôt ; seul le membre qui a configuré l&#39;intégration peut modifier ce paramètre. Fermez toutes les pull requests `l10n_` encore ouvertes et retirez les étapes Crowdin de votre CI. Une fois que General Translation gère les fichiers, vous pouvez supprimer complètement l&#39;intégration. Si deux outils écrivent dans les mêmes fichiers, c&#39;est le dernier à écrire qui l&#39;emporte.

## Étape 4 : faire pointer le CLI vers les mêmes fichiers

Installez le CLI `gt` et transposez les entrées de votre `crowdin.yml` dans `gt.config.json`. Chaque motif `translation` devient un motif `include` contenant `[locale]` :

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": ["de-DE", "pt-BR", "uk-UA"],
  "files": {
    "json": { "include": ["locales/[locale]/**/*.json"] }
  }
}
```

Connectez-vous avec [`npx gt login`](/docs/cli/reference/commands/login) et définissez `GT_PROJECT_ID`, ou bien renseignez `projectId` dans la configuration. En CI, utilisez `GT_API_KEY` avec une clé API de projet disposant des autorisations **Fichiers &gt; Écriture**, **File d&#39;attente de traduction &gt; Activée** et **Contexte &gt; Écriture**.

## Étape 5 : importez votre glossaire et le contexte de vos chaînes de caractères

Un propriétaire ou un gestionnaire de projet peut télécharger le glossaire au format CSV depuis la page [Glossaries](https://support.crowdin.com/glossary/) de Crowdin, ou via la CLI (`crowdin glossary list` affiche l&#39;ID) :

```bash
crowdin glossary download <glossary-id> --format csv --to ./glossary.csv
```

Crowdin nomme les colonnes par langue. Renommez `Term [en]` en `term`, `Description [en]` en `definition`, et chaque colonne cible, par exemple `Term [de]`, en `translation_de`, puis supprimez les autres colonnes et enregistrez le fichier. L&#39;outil d&#39;importation de General Translation lit directement cette structure et interprète les autres structures à l&#39;aide de l&#39;IA. Dans le tableau de bord, créez un [groupe de contexte](/docs/platform/dashboard/guides/defining-context-for-translations), cliquez sur **Import**, choisissez le fichier et attribuez le groupe à votre projet avant la première exécution de traduction : les nouvelles traductions utiliseront ainsi votre terminologie dès le départ.

Le contexte d&#39;une chaîne indique au traducteur ce qu&#39;elle signifie, qu&#39;elle ait été écrite par un développeur ou générée par Crowdin. Les commentaires placés au-dessus de chaque chaîne dans vos fichiers sources Android `strings.xml` et iOS `.strings` sont déjà transmis à General Translation en tant que contexte. Pour le contexte stocké uniquement dans Crowdin, récupérez les valeurs `context` et `maxLength` de chaque chaîne via l&#39;[API des chaînes sources](https://support.crowdin.com/developer/api/v2/#tag/Source-Strings/operation/api.projects.strings.getMany) de Crowdin. Ajoutez le contexte sous forme de commentaires dans les fichiers sources Android et iOS ou, pour JSON et YAML, écrivez ces deux valeurs dans un fichier de [métadonnées associées aux clés](/docs/cli/reference/keyed-metadata) placé à côté du fichier source :

```json title="locales/en/common.metadata.json"
{
  "checkout": {
    "save": { "context": "Button that saves the shipping address", "maxChars": 12 }
  }
}
```

Recréez votre guide de style et vos instructions d&#39;invite IA sous forme d&#39;[invites personnalisées](/docs/platform/dashboard/guides/defining-context-for-translations). Pour archiver votre mémoire de traduction, téléchargez-la au format TMX avec `crowdin tm download <tm-id>`.

## Étape 6 : téléverser avant de traduire

Exécutez d&#39;abord [`npx gt upload`](/docs/cli/reference/commands/upload). Cette commande envoie chaque fichier source ainsi que le fichier traduit correspondant pour chaque paramètre régional, puis enregistre ces traductions comme terminées :

```bash
npx gt upload
npx gt translate
```

[`npx gt translate`](/docs/cli/reference/commands/translate) ne traduit ensuite que ce qui manque, par exemple un nouveau paramètre régional ou un fichier sans traduction, et écrit les résultats aux mêmes chemins. Si vous exécutez [`npx gt translate`](/docs/cli/reference/commands/translate) avant [`npx gt upload`](/docs/cli/reference/commands/upload), de nouvelles traductions sont générées et écrasent les fichiers téléchargés. Les chaînes que Crowdin n&#39;avait pas traduites seront traduites par General Translation à la prochaine modification de leur fichier source. Pour les livrer plus tôt, terminez-les dans Crowdin avant le téléchargement.

## Étape 7 : traduire automatiquement les nouveaux textes

Désormais, exécutez [`npx gt translate`](/docs/cli/reference/commands/translate) lors de votre [compilation ou dans votre CI](/kb/translations-in-ci), ou laissez [Locadex](/docs/platform/locadex/quickstart) ouvrir des pull requests avec les traductions. Commitez `gt-lock.json`, qui garde la trace des traductions déjà écrites par la CLI pour éviter qu&#39;elle ne les télécharge de nouveau. Si votre équipe modifie des fichiers traduits dans le dépôt, exécutez [`npx gt save-local`](/docs/cli/reference/commands/save-local) avant la prochaine traduction afin de conserver ces modifications.

## Quand rester sur Crowdin ?

Restez sur Crowdin si votre projet open-source repose sur la licence gratuite de Crowdin et sur sa communauté de traducteurs, si vous commandez de la traduction humaine via sa place de marché de prestataires, si vous échangez des fichiers XLIFF ou Office, ou si vos applications mobiles natives dépendent des mises à jour OTA (over-the-air). (Voir [General Translation vs Crowdin](/kb/general-translation-vs-crowdin).)

## Questions fréquentes

### Vais-je perdre mes traductions relues ?

Non, à condition d&#39;ignorer les chaînes non traduites lors de l&#39;export et d&#39;exécuter [`npx gt upload`](/docs/cli/reference/commands/upload) avant [`npx gt translate`](/docs/cli/reference/commands/translate). Les traductions téléversées sont conservées tant que leur texte source ne change pas, et votre équipe peut corriger n&#39;importe quelle traduction depuis le [tableau de bord](/docs/platform/dashboard/guides/reviewing-translations).

### Puis-je continuer à utiliser Crowdin pour une partie du contenu ?

Oui. Restreignez `include` et `exclude` dans `gt.config.json` aux fichiers gérés par General Translation, et laissez Crowdin assurer la synchronisation de tout le reste. Veillez à ce que les deux outils n&#39;écrivent jamais dans les mêmes fichiers.

## Points clés

* Activez l&#39;option Skip untranslated strings avant d&#39;exporter : sinon, Crowdin comble les lacunes avec le texte source, qui serait alors importé comme traduction.
* Empêchez l&#39;intégration Git de Crowdin de pousser des traductions avant que General Translation n&#39;écrive dans les mêmes fichiers.
* Transposez `crowdin.yml` dans `gt.config.json`, importez le glossaire dans un groupe de contexte et reprenez le contexte des chaînes stocké dans Crowdin sous forme de contexte par clé avant de traduire.
* Exécutez [`npx gt upload`](/docs/cli/reference/commands/upload) avant le premier [`npx gt translate`](/docs/cli/reference/commands/translate), puis traduisez les nouveaux contenus lors de votre compilation ou avec Locadex.

## Related questions

- [Alternatives à Crowdin : General Translation ou Crowdin](https://generaltranslation.com/fr/kb/general-translation-vs-crowdin.mdx): Choisissez General Translation pour conserver vos textes dans vos composants et générer les traductions lors de la compilation. Crowdin gère des projets de traduction articulés autour de fichiers de ressources, de traducteurs et de processus de relecture, que les ingénieurs doivent connecter à l’application et maintenir à mesure que le produit évolue. Crowdin reste un choix solide pour la traduction communautaire de projets open source et les programmes pilotés par des prestataires.
- [Comment migrer de Lokalise vers General Translation ?](https://generaltranslation.com/fr/kb/migrate-from-lokalise.mdx): Conservez vos fichiers de ressources, votre bibliothèque d’i18n et vos traductions relues. Exportez depuis Lokalise sans les traductions vides, désactivez sa synchronisation GitHub, puis importez les fichiers avec npx gt upload avant le premier npx gt translate. General Translation traduit ensuite les chaînes nouvelles et modifiées lors de votre compilation, en s’appuyant sur votre glossaire placé dans un groupe de contexte et sur les descriptions de clés, utilisées comme contexte propre à chaque clé.
- [Comment migrer de Phrase vers General Translation ?](https://generaltranslation.com/fr/kb/migrate-from-phrase.mdx): Conservez vos fichiers de paramètres régionaux, votre bibliothèque d’i18n et vos traductions vérifiées. Récupérez vos fichiers depuis Phrase Strings sans clés non traduites ni solutions de repli, désactivez Repo Sync, puis importez les fichiers avec npx gt upload avant le premier npx gt translate. General Translation traduit ensuite les chaînes nouvelles et modifiées lors de votre compilation, en s’appuyant sur votre base terminologique, placée dans un groupe de contexte, et sur les descriptions de clés, utilisées comme contexte propre à chaque clé.
- [Comment maintenir les traductions à jour à chaque déploiement ?](https://generaltranslation.com/fr/kb/translations-in-ci.mdx): Exécutez la traduction comme une étape du pipeline avant chaque compilation de production, afin que les nouveaux textes soient livrés traduits avec le déploiement qui les ajoute. Le CLI gt de General Translation s’en charge avec npx gt translate, à l’aide d’une clé API de projet et d’un identifiant de projet stockés comme secrets CI.
- [Qu’est-ce qu’une mémoire de traduction, et en avez-vous encore besoin avec l’IA ?](https://generaltranslation.com/fr/kb/what-is-translation-memory.mdx): Une mémoire de traduction (TM) est une base de données de paires de segments source et cible déjà traduits, dans laquelle un outil de traduction recherche des correspondances exactes, en contexte et approximatives. Avec l’IA, vous voulez toujours réutiliser les formulations approuvées et disposer des traductions passées comme contexte. General Translation réutilise les traductions correspondantes issues des versions antérieures des fichiers et conserve les modifications de l’équipe, sans mémoire de traduction distincte à maintenir.

## Previous and next questions

- Previous question: [Build, exécution ou proxy de traduction : comment livrer vos traductions ?](https://generaltranslation.com/fr/kb/build-time-vs-runtime-translation.mdx)
- Next question: [Comment migrer de Lokalise vers General Translation ?](https://generaltranslation.com/fr/kb/migrate-from-lokalise.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/fr/kb/sitemap.md) for every article.
