Signatur
Beschreibung
Die Methode destroy() der Translator-Schnittstelle (Translator-API, Teil der eingebauten KI-APIs des Browsers) gibt alle Ressourcen frei, die der Instanz zugewiesen sind, etwa das geladene Übersetzungsmodell im Arbeitsspeicher. Gleichzeitig beendet sie jede weitere Aktivität auf dieser Instanz.
Übersetzungen, die noch laufen, z. B. über translate() oder translateStreaming(), werden abgebrochen. Ihre Promises werden mit einer AbortError-DOMException abgelehnt, Streams brechen mit einem Fehler ab. Auch alle späteren Aufrufe auf dem zerstörten Objekt schlagen fehl.
Rufe destroy() auf, sobald du einen Übersetzer nicht mehr brauchst, etwa wenn der Nutzer die Zielsprache wechselt, eine Komponente entfernt wird oder eine Einzelübersetzung fertig ist. Das gilt besonders auf Geräten mit wenig Speicher, weil das Modell sonst bis zur Speicherbereinigung im Speicher bleibt. Brauchst du wieder einen Übersetzer, erzeugst du mit Translator.create() eine neue Instanz.
Denselben Effekt hat es, das AbortSignal auszulösen, das beim Erzeugen über die Option signal an Translator.create() übergeben wurde.
Rückgabewert
Beispiele
Einmalige Übersetzung mit anschließender Freigabe
const translateOnce = async (text) => {
const translator = await Translator.create({
sourceLanguage: 'en',
targetLanguage: 'de'
});
try {
return await translator.translate(text);
} finally {
// Modell-Ressourcen sofort freigeben
translator.destroy();
}
};
console.log(await translateOnce('Good morning!'));
Übersetzer beim Sprachwechsel austauschen
let translator = null;
const setTargetLanguage = async (targetLanguage) => {
// Alten Übersetzer freigeben, bevor ein neuer geladen wird
translator?.destroy();
translator = await Translator.create({
sourceLanguage: 'de',
targetLanguage
});
};
await setTargetLanguage('fr');
console.log(await translator.translate('Hallo Welt'));
await setTargetLanguage('es');
console.log(await translator.translate('Hallo Welt'));
Laufende Übersetzung abbrechen
const translator = await Translator.create({
sourceLanguage: 'en',
targetLanguage: 'de'
});
const pending = translator.translate('A very long article text ...');
// z. B. weil der Nutzer auf "Abbrechen" klickt
translator.destroy();
try {
await pending;
} catch (err) {
console.log(err.name);
}
// Weitere Aufrufe schlagen ebenfalls fehl
translator.translate('Hello').catch((err) => console.log('Danach:', err.name));
// Wichtig · Fallstricke
- Experimentelle API: Die Translator-API ist derzeit nur in Chromium-basierten Desktop-Browsern verfügbar (ab Chrome 138). Firefox und Safari unterstützen sie nicht. Prüfe die Verfügbarkeit mit
'Translator' in selfund bei Bedarf mitTranslator.availability(). - Nicht umkehrbar: Eine zerstörte Instanz lässt sich nicht wiederverwenden. Spätere Aufrufe von
translate(),translateStreaming()odermeasureInputUsage()werden abgelehnt. Die Browser werfen hier nicht einheitlich denselben Fehler, üblich sindInvalidStateErroroderAbortError. - Laufende Übersetzungen werden mit
AbortErrorabgelehnt. Fange diesen Fehler ab, damit keine unbehandelten Promise-Ablehnungen entstehen. - Mehrfaches Aufrufen von
destroy()ist harmlos. - Ein bereits heruntergeladenes Sprachmodell bleibt im Browser-Cache.
destroy()gibt nur die Ressourcen dieser Instanz frei. - Nur in sicheren Kontexten (HTTPS) verfügbar. In iframes kann die Nutzung durch die Permissions-Policy
translatoreingeschränkt sein.