Traducteur

Fonctionnalités Web : Traduction

L'API Translator permet aux développeurs d'effectuer des traductions de texte côté client à l'aide de modèles d'IA intégrés dans Chrome et Edge. Cette approche élimine le besoin de services de traduction dans le cloud pour les contenus éphémères, ce qui réduit les coûts et améliore la confidentialité en conservant les données sur l'appareil de l'utilisateur.

Prérequis et exigences

Surface d'API et champ d'application global

  • OBLIGATOIRE : Accédez à l'API Translator exclusivement via l'interface globale Translator (window.Translator / self.Translator).
  • N'UTILISEZ PAS et ne vérifiez pas l'espace de noms window.ai.translator obsolète.

Navigateurs pris en charge

  • Chrome : version 138 ou ultérieure (ordinateur uniquement).
  • Edge : version 148 ou ultérieure (ordinateur uniquement).
  • Non compatibles : mobile (Android/iOS), Firefox, Safari.

Matériel requis

Pour exécuter Gemini Nano et les modèles associés, le système a besoin des éléments suivants :

  • Système d'exploitation : Windows 10/11, macOS 13 ou version ultérieure, Linux ou ChromeOS (Chromebook Plus).
  • Espace de stockage : au moins 22 Go d'espace libre sur le volume du profil.
  • Mémoire/CPU : au moins 16 Go de RAM et 4 cœurs de CPU.
  • GPU : au moins 4 Go de VRAM (obligatoire pour l'API Prompt avec audio).
  • Réseau : requis uniquement pour le téléchargement initial des modules linguistiques/modèles.

Implémentation et exemples de code

1. Vérification de la disponibilité et gestion des modèles

Transmission obligatoire des options : vous devez transmettre l'objet d'options de configuration identique contenant sourceLanguage et targetLanguage à Translator.availability(options) et Translator.create(options).

Surveillance recommandée de la progression : vous devez implémenter un outil de surveillance de la progression du téléchargement du modèle en fournissant un rappel monitor(m) à Translator.create() et en ajoutant un écouteur pour l'événement downloadprogress, afin que l'utilisateur puisse voir la progression du téléchargement du modèle.

Exigence de geste de l'utilisateur : lorsque l'appel de availability(options) renvoie 'downloadable' ou 'downloading', l'appel de Translator.create() déclenche le téléchargement du module linguistique et nécessite strictement un geste de l'utilisateur (comme un clic sur un bouton) pour éviter un NotAllowedError.

Translator.availability(options) renvoie l'un des quatre états de chaîne suivants :

  • 'available' : le modèle de paire de langues est déjà téléchargé sur l'appareil et prêt pour une traduction immédiate.
  • 'downloadable' : la paire de langues est compatible, mais le modèle doit être téléchargé. Un geste de l'utilisateur est requis pour lancer Translator.create().
  • 'downloading' : le module linguistique est en cours de téléchargement. L'appel de Translator.create() avec un geste de l'utilisateur est associé au téléchargement.
  • 'unavailable' : la combinaison linguistique ou l'appareil n'est pas compatible. Exécutez votre stratégie de remplacement.
// Language pair options passed to both availability() and create()
const options = {
  sourceLanguage: 'es', // Example BCP 47 language code
  targetLanguage: 'fr', // Example BCP 47 language code
};

// 1. Check availability for the language pair
const availability = await Translator.availability(options);

if (availability === 'available') {
  // Model is ready immediately on device
  const translator = await Translator.create(options);
} else if (availability === 'downloadable' || availability === 'downloading') {
  // User gesture is strictly required before create() triggers or attaches to download
  document.getElementById('start-translation-btn').addEventListener('click', async () => {
    const translator = await Translator.create({
      ...options,
      monitor(m) {
        m.addEventListener('downloadprogress', (e) => {
          console.log(`Downloaded ${Math.round(e.loaded * 100)}%`);
        });
      },
    });
  });
} else if (availability === 'unavailable') {
  // Language pair or hardware unsupported; execute fallback
  console.warn('Translation model is unavailable on this device.');
}

2. Exécuter des traductions

L'API est compatible avec les réponses statiques et en streaming. Incluez toujours la surveillance de la progression du téléchargement lors de l'instanciation du traducteur.

Traduction standard :

// Default to including a progress monitor when creating translator
const translator = await Translator.create({
  sourceLanguage: 'en',
  targetLanguage: 'fr',
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${Math.round(e.loaded * 100)}%`);
    });
  },
});

const result = await translator.translate(
  'Where is the next bus stop, please?',
);
console.log(result);
// Output: "Où est le prochain arrêt de bus, s'il vous plaît ?"

Traduction en streaming (pour les textes longs) :

const stream = translator.translateStreaming(longText);
for await (const chunk of stream) {
  console.log(chunk);
}

Langues disponibles

L'API est compatible avec un large éventail de codes de langue BCP 47. Voici les langues prises en charge par l'implémentation de l'API Translator dans Chrome :

  • ar : arabe
  • bg : bulgare
  • bn : bengali
  • cs : tchèque
  • da : danois
  • de : allemand
  • el : grec
  • en : anglais
  • es : espagnol
  • fi : finnois
  • fr : français
  • hi : hindi
  • hr : croate
  • hu : hongrois
  • id : indonésien
  • it : italien
  • he : hébreu
  • ja : japonais
  • kn : kannada
  • ko : coréen
  • lt : lituanien
  • mr : marathi
  • nl : néerlandais
  • no : norvégien
  • pl : polonais
  • pt : portugais
  • ro : roumain
  • ru: Russian
  • sk : slovaque
  • sl : slovène
  • sv : suédois
  • ta : tamoul
  • te : télougou
  • th : thaï
  • tr : turc
  • uk : ukrainien
  • vi : vietnamien
  • zh : chinois
  • zh-Hant : chinois (traditionnel)

Sécurité et performances

  • Règle d'autorisation : les iFrames interorigines nécessitent une autorisation explicite.

    <iframe src="https://example.com/" allow="translator"></iframe>
    
  • Web Workers : actuellement non compatibles en raison de la complexité des règles d'autorisation.

  • Confidentialité : aucune donnée n'est envoyée aux serveurs Google pendant le processus de traduction une fois le modèle téléchargé.

Stratégie de remplacement

Avant de l'utiliser, vérifiez si l'objet Translator est disponible dans le champ d'application global :

if ('Translator' in self) {
  // The Translator API is supported.
} else {
  // Execute fallback strategy (do not fall back to window.ai.translator).
}

Si l'API Translator n'est pas compatible ou si les vérifications de disponibilité renvoient 'unavailable', vous devez effectuer un remplacement progressif.

Options recommandées :

  1. Solution de secours avec API distante : redirigez la requête de traduction vers un point de terminaison de serveur ou une API cloud distante (comme l'API Gemini Vertex AI) pour fournir la fonctionnalité de traduction.
  2. Dégradation élégante : désactivez visuellement les éléments ou boutons de contrôle de la traduction tout en affichant une note conviviale pour l'utilisateur final (par exemple, "Client-side translation is currently unsupported in this browser"). N'autorisez pas les exceptions non gérées.
  3. Solution de remplacement Polyfill : vous pouvez utiliser des polyfills gérés par la communauté, comme built-in-ai-task-apis-polyfills ou prompt-api-polyfill, pour émuler la surface de l'API à l'aide de services distants.

Implications en termes de confidentialité et de coût : ces polyfills peuvent envoyer des requêtes proxy à des serveurs distants (comme l'API Gemini via le cloud), bien que le traitement local soit également possible. Le traitement à distance annule complètement les garanties de confidentialité sur l'appareil des API d'IA intégrées natives et entraîne souvent des coûts d'utilisation des API côté serveur.