A API Translator permite que os desenvolvedores realizem traduções de texto do lado do cliente usando modelos de IA integrados no Chrome e no Edge. Essa abordagem elimina a necessidade de serviços de tradução baseados na nuvem para conteúdo efêmero, reduzindo custos e melhorando a privacidade ao manter os dados no dispositivo do usuário.
Pré-requisitos e requisitos
Superfície da API e escopo global
- OBRIGATÓRIO: acesse a API Translator exclusivamente pela interface global
Translator(window.Translator/self.Translator). - NÃO use nem verifique o namespace
window.ai.translatordescontinuado.
Compatibilidade com navegadores
- Chrome: versão 138 ou mais recente (somente para computador).
- Edge: versão 148 ou mais recente (somente para computador).
- Não compatível: dispositivos móveis (Android/iOS), Firefox, Safari.
Requisitos de hardware
Para executar o Gemini Nano e os modelos associados, o sistema precisa de:
- Sistema operacional: Windows 10/11, macOS 13+, Linux ou ChromeOS (Chromebook Plus).
- Armazenamento: pelo menos 22 GB livres no volume do perfil.
- Memória/CPU: mais de 16 GB de RAM e mais de 4 núcleos de CPU.
- GPU: VRAM de 4 GB ou mais (obrigatório para a API Prompt com áudio).
- Rede: necessária apenas para o download inicial de pacotes de idiomas/modelos.
Implementação e exemplos de código
1. Como verificar a disponibilidade e o gerenciamento de modelos
Transmissão de opções obrigatórias: é necessário transmitir o objeto de opções de configuração idêntico que contém sourceLanguage e targetLanguage para Translator.availability(options) e Translator.create(options).
Monitoramento de progresso recomendado: implemente um monitor para o progresso do download do modelo fornecendo um callback monitor(m) para Translator.create() e adicionando um listener para o evento downloadprogress, para que o usuário possa ver o progresso do download do modelo.
Requisito de interação do usuário: quando a chamada de availability(options) retorna 'downloadable' ou 'downloading', a chamada de Translator.create() aciona o download do pacote de idioma e exige estritamente uma interação do usuário (como um clique em um botão) para evitar um NotAllowedError.
Translator.availability(options) retorna um dos quatro status de string:
'available': o modelo de par de idiomas já foi baixado no dispositivo e está pronto para tradução imediata.'downloadable': o par de idiomas é aceito, mas o modelo precisa ser baixado. É necessária uma interação do usuário para iniciarTranslator.create().'downloading': o pacote de idioma está sendo baixado. ChamarTranslator.create()com uma interação inicial é anexado ao download.'unavailable': o par de idiomas ou o dispositivo não é compatível. Execute sua estratégia de fallback.
// 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. Como executar traduções
A API aceita respostas estáticas e de streaming. Sempre inclua o monitoramento do progresso do download ao instanciar o tradutor.
Standard Translation:
// 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 ?"
Tradução de streaming (para textos longos):
const stream = translator.translateStreaming(longText);
for await (const chunk of stream) {
console.log(chunk);
}
Idiomas compatíveis
A API é compatível com uma ampla variedade de códigos de idioma BCP 47. Confira os idiomas aceitos pela implementação da API Translator no Chrome:
- ar: árabe
- bg: búlgaro
- bn: bengali
- cs: tcheco
- da: dinamarquês
- de: alemão
- el: grego
- en: inglês
- es: espanhol
- fi: finlandês
- fr: francês
- hi: hindi
- hr: croata
- hu: húngaro
- id: indonésio
- it: italiano
- he: hebraico
- ja: japonês
- kn: canarês
- ko: coreano
- lt: lituano
- mr: marati
- nl: holandês
- no: norueguês
- pl: polonês
- pt: português
- ro: romeno
- ru: russo
- sk: eslovaco
- sl: esloveno
- sv: sueco
- ta: tâmil
- te: telugu
- th: tailandês
- tr: turco
- uk: ucraniano
- vi: vietnamita
- zh: chinês
- zh-Hant: chinês (tradicional)
Segurança e desempenho
Política de permissões: iframes entre origens exigem permissão explícita.
<iframe src="https://example.com/" allow="translator"></iframe>Web Workers: no momento, não há suporte devido a complexidades da política de permissões.
Privacidade: nenhum dado é enviado aos servidores do Google durante o processo de tradução depois que o modelo é baixado.
Estratégia de fallback
Antes de usar, verifique se o objeto Translator está disponível no escopo global:
if ('Translator' in self) {
// The Translator API is supported.
} else {
// Execute fallback strategy (do not fall back to window.ai.translator).
}
Se a API Translator não for compatível ou as verificações de disponibilidade retornarem 'unavailable', você precisará fazer um fallback de maneira adequada.
Opções recomendadas:
- Fallback da API remota: redireciona a solicitação de tradução para um endpoint de servidor ou uma API remota na nuvem (como a API Gemini da Vertex AI) para oferecer a funcionalidade de tradução.
- Degradação suave: desative visualmente os elementos ou botões de controle de tradução enquanto mostra uma observação amigável para o usuário final (por exemplo,
"Client-side translation is currently unsupported in this browser"). Não permita exceções não processadas. - Polyfill de fallback: use polyfills mantidos pela comunidade, como
built-in-ai-task-apis-polyfillsouprompt-api-polyfill, para emular a superfície da API usando serviços remotos.
Implicações de privacidade e custo: esses polyfills podem encaminhar solicitações para servidores remotos (como a API Gemini na nuvem), mas o processamento local também é uma opção. O processamento remoto anula completamente as garantias de privacidade no dispositivo das APIs de IA integradas nativas e, muitas vezes, gera custos de uso da API do lado do servidor.