|
Documentation
Réserver une démoPlateforme
PlateformeMCPCLIAPI
Workflows
GuidesChangelog

Bienvenue

  • Vue d'ensemble
  • Authentification
  • Erreurs et codes d’état
  • Signatures de webhook

Localisation

  • Vue d'ensemble
  • Créer des jobs
  • Verrouiller les clés non traduisibles
  • Suivre un groupe de jobs
  • Récupérer un job
  • Lister les jobs
  • Envoi des webhooks
  • Progression en direct (WebSocket)

Pipeline

  • Vue d'ensemble
  • Pré-édition IA avant localisation
  • Relecture humaine
  • évaluation IA (post-édition)
  • Retravailler la traduction pour un rendu naturel
  • Vérification par rétrotraduction
  • Configurer le pipeline
  • Observer les exécutions du pipeline

Provisioning

  • Vue d'ensemble
  • Créer une tâche de provisionnement
  • Types de sources
  • Ce que l'IA extrait
  • Envoi des webhooks
  • Suivi en direct (WebSocket)

Synchrone

  • Localize
  • Recognize

Gestion du moteur

  • Engine Suggestions

Créer des jobs de localisation

Créez un groupe de jobs de localisation : une seule requête pour diffuser votre contenu dans toutes les langues cibles de votre choix.

Vous avez une charge utile de chaînes et une liste de langues, et vous voulez tout traduire sans gérer vous-même la logique de fan-out. POST /jobs/localization prend la charge utile complète et jusqu’à 100 langues cibles dans une seule requête, puis renvoie 202 Accepted immédiatement avec un ID de groupe et un job par langue. Une seule requête, toutes les langues : la plateforme crée les jobs et traite chacun indépendamment.

text
POST /jobs/localization

Cette page couvre l’appel de création : ses paramètres, le format de la requête, la réponse 202, et la manière de rendre l’appel sûr à relancer. Vous découvrez la localisation asynchrone ? Commencez par la Vue d'ensemble de l’API de localisation asynchrone pour bien comprendre le modèle. Une fois le groupe créé, suivre un groupe de jobs vous explique ce que signifie le statut de chaque langue.

Authentification

Transmettez votre clé API dans l’en-tête X-API-Key. Les clés sont définies au niveau de l’organisation et donnent accès à chaque moteur de l’organisation. Consultez Authentication pour en savoir plus.

Paramètres#

sourceLocale, targetLocales et data sont obligatoires. Tout le reste permet d’ajuster le comportement ou de rendre l’appel plus sûr à répéter.

ParamètreTypeDescription
sourceLocalestringlangue source BCP-47 (par ex. en).
targetLocalesstring[]langues cibles BCP-47 (par ex. ["de", "fr", "ja"]). De 1 à 100 par requête. Un job est créé par langue.
dataobjectContenu clé-valeur à traduire. Les objets imbriqués et les tableaux sont autorisés, quelle que soit la profondeur.
contextstring (facultatif)Contexte global de cette charge utile de traduction, comme la surface produit, l’audience ou l’objectif. S’applique à chaque job créé pour la requête.
hintsobject (facultatif)Contexte par clé sous forme de tableaux de chaînes de fil d’Ariane, pour lever l’ambiguïté sur des chaînes courtes ou réutilisées.
callbackUrlstring (facultatif)URL de webhook HTTPS pour ce groupe. Remplace la valeur par défaut de l’organisation. HTTP est refusé.
idempotencyKeystring (facultatif)Clé générée côté client. Envoyez deux fois la même requête avec la même clé et le groupe existant est renvoyé au lieu d’en créer un nouveau. Portée par moteur.
engineIdstring (facultatif)Moteur de localisation utilisé pour exécuter les jobs. Si ce champ est omis, le moteur par défaut de l’organisation est utilisé.
pipelineConfigobject (facultatif)Remplacements de pipeline par requête. Les étapes que vous omettez héritent de la configuration du moteur.
lockedKeysstring[] (facultatif)Clés ou motifs glob dont les valeurs sont exclues de la traduction puis réinjectées telles quelles dans outputData. Jusqu’à 100 motifs. Voir Verrouiller les clés non traduisibles.

Requête#

Le champ data accepte des paires clé-valeur à plat ou des structures imbriquées avec objets et tableaux à n’importe quelle profondeur. Le moteur traduit chaque valeur de type chaîne, laisse intactes les valeurs non textuelles (nombres, booléens, null) et renvoie exactement la structure que vous avez envoyée. Vous pouvez donc lui transmettre le même objet que votre application stocke déjà, sans l’aplatir ni le remanier.

json
{
  "sourceLocale": "en",
  "targetLocales": ["de", "fr", "ja"],
  "data": {
    "lesson_title": "Introduction to Machine Learning",
    "lesson_summary": "This lesson covers the fundamentals of ML, including supervised and unsupervised learning."
  },
  "callbackUrl": "https://your-app.com/webhooks/translations",
  "idempotencyKey": "course_101-v3"
}

HTTPS requis

Le callbackUrl doit utiliser HTTPS. Les URL HTTP sont rejetées avec une erreur 400.

Cette charge utile imbriquée mélange du texte traduisible avec des valeurs qui doivent rester intactes : id, course_101, difficulty. Les chaînes sont traduites ; le reste est préservé selon son type. Quand vous devez aussi exclure une chaîne de la traduction (un slug, une URL de ressource, un code d’énumération), indiquez-la dans lockedKeys et elle sera réinjectée telle quelle dans la sortie de chaque langue.

Réponse (202 Accepted)#

L’appel renvoie immédiatement. Il n’attend pas la traduction : il vous donne l’ID du groupe et les IDs de job par langue, puis la plateforme traite chaque job indépendamment en arrière-plan.

json
{
  "groupId": "ljg_A1b2C3d4E5f6G7h8",
  "status": "pending",
  "jobs": [
    { "id": "ljb_A1b2C3d4E5f6G7h8", "targetLocale": "de", "status": "queued" },
    { "id": "ljb_B2c3D4e5F6g7H8i9", "targetLocale": "fr", "status": "queued" },
    { "id": "ljb_C3d4E5f6G7h8I9j0", "targetLocale": "ja", "status": "queued" }
  ],
  "createdAt": "2026-03-16T10:30:00.000Z"
}
ChampDescription
groupIdIdentifiant préfixé par ljg_ pour l’ensemble du groupe. Conservez-le : c’est la référence à utiliser pour le suivi et la progression en direct.
statusStatut du groupe au moment de sa création, généralement pending.
jobsUne entrée par langue cible : id (préfixé par ljb_), targetLocale et le status du job.
createdAtHorodatage ISO 8601.

Trois langues demandées, trois jobs en retour, chacun au statut queued et prêt à s’exécuter. La signification de chaque statut au fil de l’avancement des jobs — et ce qui se passe quand une langue échoue pendant que les autres sont livrées — est expliquée dans Suivre un groupe de jobs.

Exemples#

La même requête en Node et en Python. Dans les deux cas, un seul POST suffit pour récupérer directement l’ID du groupe et le nombre de jobs dans la 202.

javascript
const response = await fetch("https://api.lingo.dev/jobs/localization", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.LINGO_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    sourceLocale: "en",
    targetLocales: ["de", "fr", "ja"],
    data: {
      title: "Introduction to Machine Learning",
      steps: [
        { heading: "What is ML?", body: "Machine learning is a subset of AI." },
        { heading: "Supervised Learning", body: "Training with labeled data." },
      ],
    },
    callbackUrl: "https://your-app.com/webhooks/translations",
  }),
});

const { groupId, jobs } = await response.json();
// 202 Accepted – the call returns without waiting for translation.
console.log(groupId);     // "ljg_A1b2C3d4E5f6G7h8"
console.log(jobs.length); // 3 – one queued job per target locale

Rendre l’appel sûr à relancer#

L’endroit naturel pour envoyer cette requête, c’est un hook de sauvegarde ou un gestionnaire d’événements — exactement le type de code qui s’exécute deux fois lorsqu’une nouvelle tentative se déclenche ou qu’un événement en double arrive. Sans protection, deux appels signifient deux groupes de jobs, et le même contenu est mis en file de traduction deux fois.

Transmettez un idempotencyKey et ce risque disparaît. Envoyez deux fois la même requête avec la même clé et la plateforme renvoie le groupe existant au lieu d’en créer un nouveau — sans deuxième série de jobs. Les clés sont portées par moteur ; la même clé utilisée avec un autre moteur correspond donc à un autre groupe.

Choisissez une clé explicite

Une bonne clé combine l’identité du contenu et sa version : {contentId}-v{contentVersion}. Le même contenu dans la même version renvoie toujours vers le même groupe, donc une nouvelle tentative devient automatiquement un no-op. Incrémentez la version quand le contenu change, et vous obtenez un nouveau groupe.

javascript
const key = `${content.id}-v${content.version}`;

async function submit() {
  const response = await fetch("https://api.lingo.dev/jobs/localization", {
    method: "POST",
    headers: {
      "X-API-Key": process.env.LINGO_API_KEY,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      sourceLocale: "en",
      targetLocales: ["de", "fr", "ja", "ko", "pt-BR"],
      data: { title: content.title, steps: content.steps },
      callbackUrl: "https://your-app.com/webhooks/translations",
      idempotencyKey: key,
    }),
  });
  return (await response.json()).groupId;
}

const first = await submit();
const again = await submit(); // same key – duplicate submission
console.log(first === again); // true – same group returned, no second set of jobs

C’est le POST unique qui diffuse une charge utile vers chaque langue, et vous pouvez l’envoyer sans risque depuis le même chemin de code que celui qui gère les nouvelles tentatives. Conservez le groupId : c’est ce que vous utiliserez ensuite pour le suivi et la progression en direct.

Étapes suivantes#

Verrouiller les clés non traduisibles
Excluez de la traduction les IDs, slugs, URL de ressources et codes d’énumération grâce aux clés et aux motifs glob.
Configurer le pipeline
Remplacez les étapes du pipeline par requête, ou définissez des valeurs par défaut au niveau du moteur dont chaque job héritera.
Suivre un groupe de jobs
Consultez le statut du groupe et celui de chaque langue, et gérez le cas où une langue échoue pendant que les autres sont livrées.

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

Max PrilutskiyMax Prilutskiy·Mis à jour il y a environ 1 mois·7 min de lecture