---
title: "Introduction"
description: "Ce qu'est verbatra et le problème qu'il résout : ne traduire que les clés modifiées. Et comment la CLI et le SDK s'articulent avec Studio et le serveur MCP."
type: "overview"
---
# Introduction

Ce qu'est verbatra et le problème qu'il résout : ne traduire que les clés modifiées. Et comment la CLI et le SDK s'articulent avec Studio et le serveur MCP.

<DocsHomeHeader
  eyebrow="Documentation"
  headline="Configure verbatra et garde chaque locale à jour."
  lead="Guides et référence pour la CLI, le SDK, Studio et le serveur MCP : commence par le démarrage rapide ou laisse ton agent de code configurer verbatra."
>

<DocsHomeTabs
  label="Points d'entrée"
  tabs={[
    { label: "Démarrage rapide", href: "/docs/quickstart" },
    { label: "CLI", href: "/docs/cli" },
    { label: "SDK", href: "/docs/sdk" },
    { label: "GitHub Action", href: "/docs/github-action" },
    { label: "Serveur MCP", href: "/docs/cli/mcp" },
    { label: "Studio", href: "/docs/review-in-studio" },
  ]}
/>

<DocsHomeAgentTip title="Tu utilises un agent de code ?">
Copie le prompt dans Claude Code, Cursor ou tout autre agent de code, et il configure verbatra pour toi ; [Configurer avec un agent IA](https://verbatra.kreitz-webdev.de/fr/docs/start-with-ai.md) montre chaque étape. Pour qu'il lise et modifie tes traductions directement, connecte le [serveur MCP](https://verbatra.kreitz-webdev.de/fr/docs/cli/mcp.md).
</DocsHomeAgentTip>

</DocsHomeHeader>

<DocsHomeBody>

<DocsHomeSection title="Pars de ton objectif" lead="Choisis ce que tu veux faire ; chaque carte ouvre la page qui le montre.">

<DocsHomePaths
  cards={[
    {
      goal: "Traduire un projet",
      page: "Démarrage rapide",
      body: "Installe la CLI, prévisualise l'exécution sans clé, puis traduis ton premier fichier.",
      href: "/docs/quickstart",
    },
    {
      goal: "Protéger les pull requests",
      page: "CI et codes de sortie",
      body: "Fais échouer une pull request quand une locale dérive, avec une sortie JSON pour les scripts.",
      href: "/docs/ci-and-exit-codes",
    },
    {
      goal: "Confier à des traducteurs",
      page: "Traduction humaine",
      body: "Exporte un classeur qu'une personne traduit, puis réimporte-le.",
      href: "/docs/manual-translation",
    },
  ]}
/>

</DocsHomeSection>

<DocsHomeSection id="pick-your-stack" title="Choisis ta stack" lead="Une carte marquée Démarrage rapide ouvre un guide pas à pas pour cette stack ; toute autre carte ouvre sa commande init et son organisation de fichiers.">

<StackCards
  labelledBy="pick-your-stack"
  cards={[
    { label: "React", icon: "web", mark: "react", formats: ["i18next-json"], href: "/docs/quickstart/react", badge: "Démarrage rapide", description: "Traduis les fichiers JSON i18next d'une app React." },
    { label: "Next.js", icon: "web", mark: "deviconNextjs", formats: ["next-intl-json"], href: "/docs/quickstart/nextjs", badge: "Démarrage rapide", description: "Garde les fichiers de messages next-intl synchronisés dans chaque locale." },
    { label: "Vue", icon: "web", mark: "fontawesomeVuejs", formats: ["vue-i18n-json"], href: "/docs/quickstart/vue", badge: "Démarrage rapide", description: "Traduis les messages JSON vue-i18n d'une app Vue." },
    { label: "Nuxt", icon: "web", mark: "deviconNuxt", formats: ["vue-i18n-json"], href: "/docs/pick-your-stack#vue-et-nuxt-avec-vue-i18n", description: "Traduis les messages JSON vue-i18n d'une app Nuxt." },
    { label: "Angular", icon: "web", mark: "angular", formats: ["ngx-translate-json"], href: "/docs/quickstart/angular", badge: "Démarrage rapide", description: "Traduis les fichiers JSON ngx-translate d'une app Angular." },
    { label: "Flutter", icon: "mobile", mark: "fontawesomeFlutter", formats: ["arb"], href: "/docs/quickstart/flutter", badge: "Démarrage rapide", description: "Traduis les fichiers ARB pour gen-l10n de Flutter." },
    { label: "Android", icon: "mobile", mark: "android", formats: ["android-xml"], href: "/docs/pick-your-stack#android", description: "Traduis les ressources strings.xml, un dossier par locale." },
    { label: "iOS et macOS", icon: "mobile", mark: "fontawesomeApple", formats: ["apple-strings", "apple-xcstrings"], href: "/docs/pick-your-stack#ios-et-macos", description: "Traduis les .strings, .stringsdict et String Catalogs." },
    { label: "gettext", icon: "po", formats: ["gettext-po"], href: "/docs/pick-your-stack#gettext", description: "Traduis les fichiers PO à partir d'un modèle POT." },
    { label: "Java et Spring", icon: "server", mark: "deviconSpring", formats: ["properties"], href: "/docs/pick-your-stack#java-et-spring", description: "Traduis les bundles de messages .properties." },
    { label: ".NET", icon: "server", mark: "dotnet", formats: ["resx"], href: "/docs/pick-your-stack#net", description: "Traduis les fichiers de ressources .resx." },
    { label: "YAML", icon: "yaml", formats: ["yaml"], href: "/docs/pick-your-stack#yaml", description: "Traduis les fichiers de locale YAML imbriqués." },
    { label: "XLIFF", icon: "xliff", formats: ["xliff"], href: "/docs/pick-your-stack#xliff", description: "Traduis les fichiers XLIFF, le format d'échange des outils de traduction." },
    { label: "INI", icon: "ini", formats: ["ini"], href: "/docs/pick-your-stack#ini", description: "Traduis les fichiers de locale INI plats." },
  ]}
/>

<DocsHomeNote>
Ta stack n'est pas là ? Commence par le [démarrage rapide général](https://verbatra.kreitz-webdev.de/fr/docs/quickstart.md) ou apprends ton format à verbatra avec un [adaptateur de format personnalisé](https://verbatra.kreitz-webdev.de/fr/docs/custom-format-adapters.md).
</DocsHomeNote>

</DocsHomeSection>

<DocsHomeSection title="Chaque exécution est un diff, pas une réécriture." lead="Ce qui se passe quand tu lances `verbatra translate`.">

Maintenir à la main une seule locale source signifie que tous les autres fichiers de locale dérivent : les nouvelles clés manquent dans les cibles, les chaînes modifiées laissent derrière elles des traductions périmées, et les clés supprimées traînent en orphelines. verbatra comble cet écart en comparant chaque cible à un fichier de verrouillage commité, `verbatra.lock.json`, et en n'envoyant que ce qui a changé au fournisseur que tu configures ; une deuxième exécution sans rien de nouveau à traduire ne fait aucun appel au fournisseur. Chaque résultat est vérifié avant d'être écrit, donc un placeholder cassé est retenu et retenté, jamais livré. Voir [Comment ça marche](https://verbatra.kreitz-webdev.de/fr/docs/how-it-works.md) pour le pipeline complet.

<DocsHomeSteps />

verbatra lit et écrit les formats de fichiers de locale courants, du JSON et du YAML au XLIFF, à gettext et aux catalogues Android et Apple, et traduit via n'importe quel fournisseur pris en charge, LLM ou service de traduction automatique, derrière une seule interface (ou aucun, pour un [flux 100 % humain](https://verbatra.kreitz-webdev.de/fr/docs/human-only-workflow.md)), et un format qu'il n'embarque pas peut être ajouté comme [adaptateur personnalisé](https://verbatra.kreitz-webdev.de/fr/docs/custom-format-adapters.md). Les listes complètes sont dans [Formats](https://verbatra.kreitz-webdev.de/fr/docs/formats.md) et [Fournisseurs](https://verbatra.kreitz-webdev.de/fr/docs/providers.md).

</DocsHomeSection>

<DocsHomeSection title="Les paquets" lead="Un moteur, quatre façons de le piloter.">

<DocsHomeFeatures
  features={[
    {
      title: "@verbatra/cli",
      pkg: "cli",
      body: "Le binaire verbatra : toutes les commandes, de init et extract à translate, check, export et studio, comme une fine couche au-dessus du SDK. Commence ici.",
      href: "/docs/cli",
    },
    {
      title: "@verbatra/sdk",
      pkg: "sdk",
      body: "Le moteur en dessous : translate, watch, check, diff, doctor, extract, pseudo-localisation, génération de types, et les allers-retours Excel et TMX, le tout depuis le code.",
      href: "/docs/sdk",
    },
    {
      title: "@verbatra/studio",
      pkg: "studio",
      body: "Un tableau de bord local avec édition en place, une file de relecture, un Overview de la couverture et des exécutions et des outils pour agents navigateur. La dépense fournisseur reste désactivée tant que tu ne l'actives pas.",
      href: "/docs/review-in-studio",
    },
    {
      title: "@verbatra/mcp",
      pkg: "mcp",
      body: "Un serveur MCP en stdio qui expose le statut de traduction, le glossaire et les outils d'édition à Claude Code, Cursor ou tout client MCP.",
      href: "/docs/cli/mcp",
    },
  ]}
/>

</DocsHomeSection>

</DocsHomeBody>
