{
  "tool": "traduction-pdf",
  "name": "Le Traducteur de PDF & EPUB multilingue",
  "apiVersion": "1",
  "description": "Traduit un PDF ou un EPUB entre le français, l'anglais, l'espagnol, l'allemand, l'italien, le néerlandais et le russe, dans les DEUX SENS (source et cible librement choisies). Traduction neuronale exécutée à 100 % dans le navigateur (Opus-MT / WebGPU, repli CPU) ; OCR automatique des pages scannées. Aucun document n'est envoyé au serveur.",
  "url": "https://sui-juris.fr/p2p-tools/traduction-pdf/",
  "heavy": true,
  "howTo": "Ouvrir l'URL dans un navigateur authentifié (palier Pro), attendre window.SJ.ready, puis window.SJ.ops.translate(args) — ou postMessage { sjCall:true, id, op:'translate', args }.",
  "notes": "Certaines paires n'ont pas de modèle opus-mt direct (ex. fr→it, fr→nl, de→ru) : elles sont alors traduites en deux passes via l'anglais, pivot universel. Cela double le téléchargement de modèles et dégrade légèrement la qualité ; le champ `via` du retour vaut \"en\" dans ce cas.",
  "ops": {
    "translate": {
      "summary": "Traduit un document (PDF ou EPUB) d'une langue source vers une langue cible.",
      "args": {
        "fileBytes":  { "type": "base64", "required": true, "description": "Le PDF ou EPUB source encodé en base64." },
        "filename":   { "type": "string", "required": false, "description": "Nom du fichier (sert à détecter PDF vs EPUB ; défaut document.pdf)." },
        "srcLang":    { "type": "string", "required": false, "default": "auto", "enum": ["auto", "fr", "en", "es", "de", "it", "nl", "ru"], "description": "Langue du document (auto = détection)." },
        "targetLang": { "type": "string", "required": false, "default": "fr", "enum": ["fr", "en", "es", "de", "it", "nl", "ru"], "description": "Langue de traduction. Absent = français, comme dans la version précédente de l'outil." },
        "ocr":        { "type": "string", "required": false, "default": "auto", "enum": ["auto", "force", "never"], "description": "Reconnaissance de texte des pages scannées." },
        "format":     { "type": "string", "required": false, "default": "pdf", "enum": ["pdf", "bilingue", "epub"], "description": "Format de sortie : PDF traduit, PDF bilingue (original + traduction), ou EPUB." }
      },
      "returns": {
        "bytes":      "base64 du fichier de sortie",
        "mime":       "type MIME (application/pdf ou application/epub+zip)",
        "filename":   "nom de fichier suggéré",
        "sourceLang": "langue source détectée/utilisée",
        "targetLang": "langue cible utilisée",
        "via":        "\"en\" si la traduction a dû passer par l'anglais (pas de modèle direct), sinon null"
      },
      "progressEvents": "L'op émet des événements sj-progress { phase:'extract'|'translate', ... } pendant le traitement ; en traduction, `leg`/`legs` indiquent l'étape en cours (2 étapes si passage par l'anglais)."
    }
  }
}
