Scribe

Traduire un site Next.js avec Gemini sans casser la production

Comment utiliser l'API Gemini Batch pour traduire des contenus MDX par apprentissage automatique à moitié prix, valider chaque réponse avant le stockage et ne payer que pour ce qui a été modifié.

View as Markdown

La traduction automatique coûte suffisamment peu cher pour traduire l'intégralité d'un site dans dix langues pour le prix d'un café. Le modèle n'a jamais été le problème. C'est tout ce qui l'entoure : identifier ce qui doit être traduit, repérer les erreurs du modèle avant la mise en production et éviter de payer la retraduction de 500 pages juste pour avoir corrigé une faute de frappe sur l'une d'entre elles.

Cet article explique comment Scribe gère chacune de ces étapes, en prenant ce site (dix langues, traduction de chaque page) comme exemple.

Ne traduire que ce qui a changé

Chaque document traduisible reçoit un hachage de son contenu traduisible, c'est-à-dire les champs signalés dans le préambule ainsi que le corps MDX. Chaque traduction enregistrée conserve le hachage d'origine. La liste de travail pour une traduction se résume ainsi à chaque paire (document, langue) dont les hachages divergent ou pour laquelle aucune traduction n'existe.

Cela offre deux avantages considérables :

  • La correction d'une coquille dans un fichier ne rend obsolète qu'un seul document, dans chaque langue.
  • L'exécution consécutive de scribe translate à deux reprises n'a aucun effet la deuxième fois.

Avant toute dépense, scribe translate --dry-run affiche la liste de travail avec une estimation des jetons et du coût par élément. Le regroupement des versions publiées le même jour dans notre journal des modifications s'est par exemple traduit par 18 éléments en attente pour un coût estimé de 0,07 $, avant validation.

Moitié prix grâce à l'API Batch

Par défaut, la traduction passe par l'API Gemini Batch, qui facture les jetons d'entrée et de sortie à 50 % du tarif interactif. Toutes les requêtes sont planifiées et soumises en amont, puis interrogées ensemble. Les tâches sont conservées dans le magasin SQLite dès leur soumission, ce qui permet de quitter la tâche pendant l'interrogation et de relancer scribe translate plus tard pour reprendre là où elle s'était arrêtée.

Les requêtes sont également structurées de sorte que le contenu en anglais forme un préfixe identique pour toutes les langues cibles. Lorsqu'une page est traduite dans neuf langues, la mise en cache implicite du contexte de Gemini permet de déduire les jetons d'entrée répétés. L'instruction spécifique à chaque langue est placée à la fin de la requête, afin de ne pas interrompre le préfixe partagé.

Valider avant de stocker et non après le déploiement

Le modèle renverra parfois des résultats erronés, comme des données MDX invalides, un champ inventé ou une chaîne tronquée. La règle qui permet de survivre à ces erreurs est simple : aucune donnée n'entre dans le magasin sans avoir été validée.

Chaque réponse est analysée en tant que donnée MDX et vérifiée à nouveau par rapport au schéma Zod du document. L'échec d'une réponse entraîne l'échec de cet élément et non de votre site. À la fin du processus, les éléments qui ont échoué font l'objet d'une nouvelle tentative, au cours de laquelle les erreurs de validation sont renvoyées au modèle, ce qui permet d'en corriger la majorité. Tout élément qui échoue deux fois est signalé et laissé non traduit, tandis que votre version continue de diffuser le contenu en anglais pour cette langue dans l'intervalle.

Traduction ou transcréation

Une traduction littérale ressemble à un manuel d'utilisation. L'invite intégrée de Scribe présente plutôt la tâche comme une transcréation : le modèle rédige comme le ferait un concepteur-rédacteur natif pour l'édition localisée du texte. Il traduit l'intention de chaque phrase au lieu de calquer la syntaxe d'origine, recrée les jeux de mots et les expressions idiomatiques plutôt que de les traduire littéralement et applique les conventions typographiques locales.

Vous pouvez l'orienter davantage avec translate.context (le sujet du site et les termes de la marque à conserver en anglais) et translate.rules (les contraintes de style maison) dans votre configuration. Consultez le guide de traduction pour découvrir toutes les options.

Combien ça coûte en pratique

Ce site comprend une page d'accueil, une section de documentation, un journal des modifications et désormais un blog, traduits dans neuf langues autres que l'anglais. Une retraduction complète depuis le début coûte quelques dollars. Les exécutions incrémentielles qui suivent l'édition normale coûtent quelques centimes. Ce qui coûtait cher dans les sites multilingues n'a jamais été les jetons, mais la coordination. L'obsolescence basée sur le hachage permet de s'affranchir de cette coordination.

Commencez par le guide de démarrage, puis lancez votre première traduction en gardant la référence CLI ouverte.

Traduire un site Next.js avec Gemini sans casser la production · Scribe