La CLI Lingo.dev traduit les fichiers statiques de votre dépôt — Markdown, MDX, Markdoc, JSON, YAML, sous-titres et plus encore — via un moteur de localisation configuré. Pointez-la vers votre contenu, lancez une seule commande et récupérez les fichiers traduits à côté des originaux.
Types de contenu pris en charge#
Le CLI détecte le format de chaque fichier à partir de son extension — aucun type de bucket n’est à configurer. La langue se trouve dans le chemin (content/en/x.md devient content/de/x.md), donc aucun placeholder [locale] n’est nécessaire.
| Type de contenu | Format | Exemple de chemin |
|---|---|---|
| Documentation | Markdown | docs/en/getting-started.md |
| Documentation | MDX | docs/en/getting-started.mdx |
| Documentation | Markdoc | docs/en/getting-started.mdoc |
| Données structurées | JSON | data/en.json |
| Données structurées | YAML | data/en.yaml |
| Articles de blog | Markdown / MDX | blog/en/post-slug.md |
| Localisation | Gettext PO | locale/en/messages.po |
| Localisation | XLIFF | locale/en.xliff |
| Sous-titres | SRT | subs/en/intro.srt |
Consultez la Référence des formats pour voir la liste complète des types de fichiers pris en charge.
Pas encore pris en charge dans le nouveau CLI
Les fichiers CSV (csv-per-locale), les sous-titres VTT, le texte brut .txt et Java .properties ne sont pas encore pris en charge par le nouveau CLI. Pour le moment, gardez ces fichiers sur le legacy CLI et consultez le changelog pour suivre les mises à jour.
Prérequis#
À chaque exécution, le contenu passe par un moteur de localisation — la configuration qui détermine le modèle de LLM, le glossaire, la voix de marque et les règles à appliquer. Créez-en un dans le tableau de bord Lingo.dev, puis configurez le CLI (Node 22+) :
npm install -g @lingo.dev/cli
lingo login
lingo init
lingo linklingo init et lingo link créent .lingo/config.json, ce qui relie le CLI à votre organisation et à votre moteur. Validez ce fichier afin que tous les environnements partagent la même configuration.
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [{ "pattern": "docs/en/getting-started.md" }]
}En CI, ignorez lingo login et fournissez plutôt LINGO_API_KEY via une variable d’environnement. Vous pouvez en générer une depuis les clés API.
Sites de documentation#
La plupart des frameworks de documentation organisent le contenu traduit dans des répertoires par langue. Ajoutez un motif par fichier source (ou un glob) à files. Le CLI préserve le frontmatter, les blocs de code et la syntaxe des composants tout en traduisant les fichiers Markdown, MDX et Markdoc.
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [
{ "pattern": "docs/en/getting-started.md" },
{ "pattern": "docs/en/setup.mdx" }
]
}Lancez une première traduction pour remplir toutes les langues cibles :
lingo push --backfill-missingLors des exécutions suivantes, lingo push ne traduit que ce qui a changé. Utilisez lingo pull pour récupérer des traductions produites ailleurs.
Ajustez le chemin source pour qu’il corresponde à la convention de répertoires de votre framework :
| Framework | Convention de répertoire par langue | Référence |
|---|---|---|
| Docusaurus | i18n/[locale]/docusaurus-plugin-content-docs/current/ | Guide i18n de Docusaurus |
| Nextra | Pages par langue ou dictionnaires JSON | Documentation Nextra |
| Hugo | content/[locale]/ | Guide multilingue de Hugo |
| Astro | src/content/[locale]/ ou dictionnaires JSON | Guide i18n d’Astro |
| VitePress | Préfixe de répertoire [locale]/ | i18n de VitePress |
| MkDocs | docs/ par langue avec le plugin i18n | Plugin i18n de MkDocs |
Composants MDX
La traduction MDX préserve la syntaxe des composants JSX. Les composants personnalisés comme <Callout>, <Tabs> et <CodeBlock> restent inchangés — seul leur contenu textuel est traduit.
Données structurées#
Les fichiers JSON et YAML sont traduits automatiquement en fonction de leur extension. Utilisez les contrôles de clés pour empêcher la modification des valeurs non traduisibles (ID, URL, indicateurs de configuration).
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [
{ "pattern": "content/en.json" },
{ "pattern": "data/en.yaml" }
]
}Le YAML générique ne nécessite pas de champ format. Seuls yaml-openapi, yaml-root-key et android requièrent un "format" explicite dans l’entrée du fichier.
YAML avec clé racine de langue
Les fichiers YAML qui utilisent le code de langue comme clé racine (comme c’est souvent le cas avec Rails et Hugo) nécessitent un "format": "yaml-root-key" explicite — la clé racine est réécrite dans la langue cible. Voir la Référence des formats.
Sous-titres#
Les fichiers de sous-titres SRT sont traduits en fonction de leur extension. Le CLI préserve toutes les données de minutage, les indices de repère et les balises de mise en forme — seul le contenu textuel est traduit.
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [{ "pattern": "subs/en/intro.srt" }]
}VTT n’est pas encore pris en charge
Les sous-titres WebVTT (.vtt) ne sont pas encore pris en charge par le nouveau CLI. Conservez les fichiers VTT sur le CLI hérité et suivez le changelog pour les mises à jour.
Gérer des volumes de contenu importants#
Les dépôts de contenu statique peuvent contenir des milliers de fichiers. Le CLI gère cela efficacement :
| Mécanisme | Comment ça aide |
|---|---|
| État d’exécution | .lingo/lock.json suit les empreintes du contenu source, afin que lingo push ne traduise que les fichiers nouveaux ou modifiés. Validez-le ; il est régénéré à chaque push. |
| Parallélisme côté serveur | Le moteur parallélise la traduction pour vous — aucun paramètre de concurrence n’est à ajuster. |
| Exécutions ciblées | Limitez une exécution à des fichiers spécifiques avec un glob : lingo push "docs/en/**". |
Pour vérifier que les traductions sont à jour sans écrire de fichiers — pratique comme garde-fou en CI — exécutez lingo check.
