|
Documentation
Réserver une démoPlateforme
PlateformeMCPCLI
APIWorkflows
GuidesChangelog

Vue d'ensemble

  • @lingo.dev/cli

Premiers pas

  • Démarrage rapide
  • Configuration
  • Exemples

Référence

  • lingo push
  • lingo pull
  • lingo purge
  • Autres commandes

Configuration

  • Contrôle des clés
  • Formats
  • Langues

Guides

  • Ajouter une langue
  • Traductions existantes
  • Retraduction
  • Notes de traduction
  • Exécutions, état et reprise
  • CI/CD
  • Monorepos
  • Grands projets

Vous cherchez l’ancien CLI (v0) ? Voir la documentation du CLI historique

Formats

Le CLI traduit dix-huit formats de fichier. Le format est déduit de l’extension du fichier ; définissez format sur une entrée files[] pour le remplacer, ou pour les trois formats qui l’exigent toujours (yaml-openapi, yaml-root-key, android).

FormatExtensionsValeur formatNotes
JSON.jsonjsonClé/valeur. Prend en charge les contrôles de clé.
JSONC.jsoncjsoncJSON avec commentaires. Les commentaires sont conservés et servent aussi de notes pour les traducteurs.
YAML.yaml, .ymlyamlYAML générique. Chaque valeur de chaîne est traduite ; les clés et la structure sont préservées.
OpenAPI YAML.yaml, .ymlyaml-openapiSpécifications OpenAPI. Définissez format explicitement — un simple .yaml est détecté automatiquement comme yaml.
Clé racine YAML de langue.yaml, .ymlyaml-root-keyLa langue correspond à la clé racine YAML (Rails config/locales). La clé racine est réécrite avec la langue cible. Définissez format explicitement.
Markdown.mdmdLa prose est traduite ; le frontmatter s’active sur demande.
MDX.mdxmdxMarkdown + JSX. Props de composant sur demande.
Markdoc.mdocmarkdocMarkdown + balises. Frontmatter + attributs de balise.
TypeScript.ts, .mts, .ctstypescriptModules de langue (export default { … }). Les chaînes littérales sont traduites ; le code est préservé.
Gettext PO.popomsgstr est traduit ; msgid, les commentaires et les en-têtes sont préservés.
Flutter ARB.arbflutterLes valeurs textuelles sont traduites ; les métadonnées @ et {placeholders} sont préservées.
Android.xmlandroidstrings.xml. Définissez format explicitement — .xml n’est pas détecté automatiquement.
Chaînes Xcode.stringsxcode-stringsLes valeurs sont traduites ; les clés sont préservées.
Catalogue de chaînes Xcode.xcstringsxcode-xcstringsUn seul fichier contient toutes les langues — les cibles sont réécrites dans ce même fichier (voir ci-dessous).
stringsdict Xcode.stringsdictxcode-stringsdictLes chaînes plurielles sont traduites ; les clés de contrôle du format sont préservées.
XLIFF.xlf, .xliffxliff<source> est conservé, <target> est écrit pour chaque unité. Versions 1.2 et 2.0.
SubRip.srtsrtLe texte des sous-titres est traduit ; les index et timecodes restent intacts.
PHP.phpphpreturn [ … ] Laravel. Les valeurs textuelles sont traduites ; les clés, les nombres et la structure sont préservés.

Le voir de bout en bout

Le projet de démonstration est un petit Sandbox qui couvre les formats de documents et de données — JSON, JSONC, Markdown, MDX, Markdoc et OpenAPI YAML — chacun avec la configuration exacte dont il a besoin. Clonez-le avec npx degit lingodotdev/lingo.dev/demo/new-cli my-lingo-demo et lancez un push. Les formats d’application et de framework n’y figurent pas — pour ceux-là, les projets d’exemple proposent un dépôt complet par framework, et les extraits par format ci-dessous couvrent la configuration.

bash
npx degit lingodotdev/lingo.dev/demo/new-cli my-lingo-demo
cd my-lingo-demo

JSON et JSONC#

Traduction clé/valeur simple. Chaque valeur de chaîne est traduite, sauf si un contrôle de clé indique le contraire.

json
{ "pattern": "content/en/app.json", "lockedKeys": ["meta.version"] }

JSONC conserve aussi les commentaires, que le moteur interprète comme du contexte — voir les notes pour les traducteurs.

json
{ "pattern": "content/en/settings.jsonc", "preservedKeys": ["featureFlags"] }

Markdown, MDX et Markdoc#

Le texte principal est traduit par défaut. Le frontmatter et les composants embarqués ne sont pas traduits, sauf si vous activez cette option.

Frontmatter#

Listez les champs de frontmatter à traduire avec translateFrontmatterFields :

json
{
  "pattern": "content/en/guide.md",
  "translateFrontmatterFields": ["title", "description"]
}

Props des composants MDX#

Avec MDX, traduisez des props précises sur des composants précis via translateComponentProps :

json
{
  "pattern": "content/en/landing.mdx",
  "translateFrontmatterFields": ["title"],
  "translateComponentProps": [{ "component": ["Hero", "Callout"], "props": ["title", "body"] }]
}

Cela traduit les props title et body sur <Hero> et <Callout>, et laisse toutes les autres props intactes.

Markdoc#

Markdoc fonctionne comme Markdown, avec frontmatter et attributs de balise préservés :

json
{
  "pattern": "content/en/changelog.mdoc",
  "translateFrontmatterFields": ["title"]
}

YAML#

Le YAML générique est détecté automatiquement à partir de .yaml/.yml — chaque valeur de chaîne est traduite, tandis que les clés et la structure sont préservées :

json
{ "pattern": "content/en/strings.yaml" }

Les spécifications OpenAPI sont un cas à part : elles partagent l’extension .yaml, mais nécessitent un format explicite pour que le moteur ne traduise que les champs visibles par les utilisateurs (résumés, descriptions) et laisse intacts les clés de schéma, les chemins et les ID d’opération :

json
{ "pattern": "content/en/api.yaml", "format": "yaml-openapi" }

Les fichiers de langue au format Rails constituent l’autre cas particulier : la langue correspond à la clé racine YAML (en:) et le fichier cible doit avoir pour racine la langue cible (es:). Définissez également format explicitement pour ces fichiers :

json
{ "pattern": "config/locales/en.yml", "format": "yaml-root-key" }

Formats d’application et de framework#

PO, Flutter ARB, .strings Xcode, .stringsdict Xcode, les modules de langue TypeScript, XLIFF, SubRip et PHP suivent tous la même règle : le texte traduisible est traduit, tout le reste est préservé (clés, ID, métadonnées, placeholders, timecodes, code, mise en forme). Chacun est détecté automatiquement à partir de son extension — il suffit de pointer un motif vers le fichier source :

json
{ "pattern": "lib/l10n/app_en.arb" }
{ "pattern": "locales/en.po" }
{ "pattern": "Localizable.strings" }
{ "pattern": "l10n/en.xlf" }

L’un d’eux nécessite un format explicite, car son extension est trop ambiguë pour être détectée automatiquement :

json
{ "pattern": "res/values/strings.xml", "format": "android" }

Catalogues de chaînes Xcode#

Un fichier .xcstrings (String Catalog) regroupe toutes les langues dans un seul fichier. Il n’existe pas de chemin de sortie par langue — le CLI lit la langue source et réécrit chaque cible dans ce même fichier :

json
{ "pattern": "Localizable.xcstrings" }

Les chaînes marquées "shouldTranslate": false dans le catalogue sont ignorées : le CLI les laisse non traduites et telles quelles.

Chemins de sortie#

Le motif désigne votre fichier source ; tous les chemins cibles en découlent. Quatre règles s’appliquent, dans cet ordre :

  1. Un segment de chemin entier ou un nom de fichier correspondant à la langue — c’est le cas le plus courant. content/en/app.json → content/de/app.json, locales/en.json → locales/de.json.
  2. Une langue en fin de segment ou de nom de fichier, pour les structures qui la notent ainsi — Android, Xcode .strings/.stringsdict, Flutter et yaml-root-key. res/values-en/ → res/values-de/, app_en.arb → app_de.arb, devise.en.yml → devise.de.yml.
  3. Le nom réservé d’une plateforme pour la langue par défaut, sans aucune langue dans le chemin. Le simple res/values/ d’Android devient res/values-de/, et le Base.lproj de Xcode devient de.lproj.
  4. Le String Catalog, où le chemin cible est le chemin source, puisqu’un seul fichier contient toutes les langues.

Android est la seule plateforme dont les chemins cibles ne suivent pas le format BCP 47 : le CLI écrit le qualificateur de ressource qu’Android lit réellement ; ainsi, pt-BR se retrouve dans values-pt-rBR/ et zh-Hans dans values-b+zh+Hans/.

Si aucune de ces règles ne s’applique — la langue source n’apparaît nulle part dans le chemin — le CLI se rabat sur un répertoire <locale>/ créé à côté du fichier, et lingo push vous signale qu’il a dû le déduire. Prenez cet avertissement comme le signe que le motif est incorrect. Voir Configuration.

Vous venez du CLI historique ?#

La plupart des formats du CLI historique sont désormais disponibles dans le CLI actuel (PO, XLIFF, chaînes Android/Xcode, Flutter ARB, et plus encore — voir le tableau ci-dessus). Quelques formats moins courants (par ex. CSV, HTML, MJML, .properties) ne sont pas encore pris en charge ; en attendant que le vôtre arrive, la documentation du CLI historique les couvre.

Cette page vous a-t-elle été utile ?

Max PrilutskiyMax Prilutskiy·Mis à jour il y a 10 jours·6 min de lecture