開發人員可透過 Translator API,使用 Chrome 和 Edge 的內建 AI 模型,在用戶端翻譯文字。這種做法可避免使用雲端式翻譯服務處理臨時內容,進而降低成本,並將資料保留在使用者裝置上,提升隱私權。
必備條件和規定
API 介面和全域範圍
- 必要:一律透過全域
Translator介面 (window.Translator/self.Translator) 存取 Translator API。 - 請勿使用或檢查已淘汰的
window.ai.translator命名空間。
瀏覽器支援
- Chrome:138 以上版本 (僅限電腦)。
- Edge:148 以上版本 (僅限電腦)。
- 不支援:行動裝置 (Android/iOS)、Firefox、Safari。
硬體需求
如要執行 Gemini Nano 和相關模型,系統必須符合下列條件:
- 作業系統:Windows 10/11、macOS 13 以上版本、Linux 或 ChromeOS (Chromebook Plus)。
- 儲存空間:設定檔磁碟區至少要有 22 GB 可用空間。
- 記憶體/CPU:16 GB 以上 RAM 和 4 個以上 CPU 核心。
- GPU:4 GB 以上 VRAM (Prompt API 搭配音訊時必備)。
- 網路:只有在初次下載語言套件/模型時才需要。
導入和程式碼範例
1. 檢查可用性及管理模型
必須傳遞選項:您必須將包含 sourceLanguage 和 targetLanguage 的相同設定選項物件,傳遞至 Translator.availability(options) 和 Translator.create(options)。
建議監控進度:您應監控模型下載進度,方法是將 monitor(m) 回呼提供給 Translator.create(),並為 downloadprogress 事件新增事件監聽器,讓使用者能查看模型下載進度。
使用者手勢規定:呼叫 availability(options) 傳回 'downloadable' 或 'downloading' 時,呼叫 Translator.create() 會觸發語言套件下載,且嚴格要求使用者手勢 (例如點選按鈕),以避免 NotAllowedError。
Translator.availability(options) 會傳回下列四種字串狀態之一:
'available':語言組合模型已下載到裝置上,可立即翻譯。'downloadable':支援該語言組合,但需要下載模型。必須有使用者手勢才能啟動Translator.create()。'downloading':語言套件目前正在下載中。使用使用者手勢呼叫Translator.create(),即可附加至下載。'unavailable':不支援該語言組合或裝置。執行備用策略。
// 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. 執行翻譯
API 支援靜態和串流回應。例項化翻譯工具時,請務必加入下載進度監控功能。
標準翻譯:
// 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 ?"
串流翻譯 (適用於長篇文字):
const stream = translator.translateStreaming(longText);
for await (const chunk of stream) {
console.log(chunk);
}
支援的語言
這個 API 支援多種 BCP 47 語言代碼。以下是 Chrome 實作 Translator API 支援的語言:
- ar: Arabic
- bg: Bulgarian
- bn:孟加拉文
- cs:捷克文
- da:丹麥文
- de:德文
- el: Greek
- en:英文
- es: Spanish
- fi: Finnish
- fr: French
- hi: Hindi
- hr:克羅埃西亞文
- hu: Hungarian
- id: Indonesian
- it: Italian
- he: Hebrew
- ja: Japanese
- kn:卡納達文
- ko: Korean
- lt: Lithuanian
- mr: Marathi
- nl: Dutch
- no:挪威文
- pl: Polish
- pt: Portuguese
- ro: Romanian
- ru: Russian
- sk: Slovak
- sl: Slovenian
- sv:瑞典文
- ta: Tamil
- te: 泰盧固文
- th: Thai
- tr: Turkish
- uk:烏克蘭文
- vi:越南文
- zh:中文
- zh-Hant:繁體中文
安全性與效能
權限政策:跨來源 iframe 必須明確取得權限。
<iframe src="https://example.com/" allow="translator"></iframe>Web Worker:由於權限政策複雜,目前不支援。
隱私權:下載模型後,翻譯過程中不會將任何資料傳送至 Google 伺服器。
備用策略
使用前,請檢查 Translator 物件是否可在全域範圍內使用:
if ('Translator' in self) {
// The Translator API is supported.
} else {
// Execute fallback strategy (do not fall back to window.ai.translator).
}
如果系統不支援 Translator API,或可用性檢查傳回 'unavailable',您必須妥善處理。
建議選項:
- 遠端 API 備用方案:將翻譯要求重新導向至伺服器端點或雲端遠端 API (例如 Vertex AI Gemini API),提供翻譯功能。
- 優雅降級:以視覺方式停用翻譯控制項元素或按鈕,同時顯示使用者容易理解的附註 (例如
"Client-side translation is currently unsupported in this browser")。請勿允許未處理的例外狀況。 - Polyfill 備用方案:您可以使用社群維護的 Polyfill (例如
built-in-ai-task-apis-polyfills或prompt-api-polyfill),透過遠端服務模擬 API 介面。
隱私權和成本影響:這些 polyfill 可能會將要求代理至遠端伺服器 (例如透過雲端傳送至 Gemini API),但也可以選擇在本機處理。遠端處理會完全破壞原生內建 AI API 的裝置端隱私權保證,而且通常會產生伺服器端 API 使用費用。