Translator API cho phép nhà phát triển dịch văn bản phía máy khách bằng các mô hình AI tích hợp sẵn trong Chrome và Edge. Phương pháp này giúp loại bỏ nhu cầu sử dụng dịch vụ dịch thuật dựa trên đám mây cho nội dung tạm thời, giảm chi phí và cải thiện quyền riêng tư bằng cách lưu giữ dữ liệu trên thiết bị của người dùng.
Điều kiện tiên quyết và yêu cầu
Nền tảng API và phạm vi toàn cầu
- BẮT BUỘC: Chỉ truy cập vào Translator API thông qua giao diện
Translatorchung (window.Translator/self.Translator). - KHÔNG sử dụng hoặc kiểm tra không gian tên
window.ai.translatorkhông dùng nữa.
Hỗ trợ trình duyệt
- Chrome: Phiên bản 138 trở lên (chỉ dành cho máy tính).
- Edge: Phiên bản 148 trở lên (Chỉ dành cho máy tính).
- Không được hỗ trợ: Thiết bị di động (Android/iOS), Firefox, Safari.
Yêu cầu về phần cứng
Để chạy Gemini Nano và các mô hình liên quan, hệ thống cần:
- Hệ điều hành: Windows 10/11, macOS 13 trở lên, Linux hoặc ChromeOS (Chromebook Plus).
- Bộ nhớ: Còn trống ít nhất 22 GB trên ổ đĩa hồ sơ.
- Bộ nhớ/CPU: RAM 16 GB trở lên và CPU 4 nhân trở lên.
- GPU: VRAM từ 4 GB trở lên (Bắt buộc đối với Prompt API có âm thanh).
- Mạng: Chỉ cần thiết cho lần tải xuống đầu tiên của các gói ngôn ngữ/mô hình.
Mã mẫu và cách triển khai
1. Kiểm tra phạm vi cung cấp và quản lý mô hình
Truyền các tuỳ chọn bắt buộc: Bạn phải truyền đối tượng tuỳ chọn cấu hình giống hệt nhau chứa sourceLanguage và targetLanguage đến cả Translator.availability(options) và Translator.create(options).
Theo dõi tiến trình đề xuất: Bạn nên triển khai một trình theo dõi tiến trình tải mô hình xuống bằng cách cung cấp lệnh gọi lại monitor(m) cho Translator.create() và thêm trình nghe cho sự kiện downloadprogress để người dùng có thể xem tiến trình tải mô hình xuống.
Yêu cầu về cử chỉ của người dùng: Khi lệnh gọi availability(options) trả về 'downloadable' hoặc 'downloading', lệnh gọi Translator.create() sẽ kích hoạt quá trình tải gói ngôn ngữ xuống và bắt buộc phải có cử chỉ của người dùng (chẳng hạn như nhấp vào nút) để ngăn chặn NotAllowedError.
Translator.availability(options) trả về một trong bốn trạng thái chuỗi:
'available': Mô hình cặp ngôn ngữ đã được tải xuống thiết bị và sẵn sàng dịch ngay lập tức.'downloadable': Cặp ngôn ngữ được hỗ trợ, nhưng bạn cần tải mô hình xuống. Cần có cử chỉ của người dùng để bắt đầuTranslator.create().'downloading': Gói ngôn ngữ đang trong quá trình tải xuống. Việc gọiTranslator.create()bằng cử chỉ của người dùng sẽ đính kèm vào tệp tải xuống.'unavailable': Cặp ngôn ngữ hoặc thiết bị không được hỗ trợ. Thực hiện chiến lược dự phòng.
// 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. Thực hiện bản dịch
API này hỗ trợ cả phản hồi tĩnh và phản hồi trực tuyến. Luôn bao gồm tính năng theo dõi tiến trình tải xuống khi tạo thực thể cho trình dịch.
Bản dịch tiêu chuẩn:
// 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 ?"
Dịch trực tuyến (đối với văn bản dài):
const stream = translator.translateStreaming(longText);
for await (const chunk of stream) {
console.log(chunk);
}
Ngôn ngữ được hỗ trợ
API này hỗ trợ nhiều mã ngôn ngữ BCP 47. Sau đây là các ngôn ngữ được hỗ trợ trong quá trình triển khai Translator API của Chrome:
- ar: Tiếng Ả Rập
- bg: Tiếng Bulgaria
- bn: Tiếng Bengal
- cs: Tiếng Séc
- da: Tiếng Đan Mạch
- de: Tiếng Đức
- el: Tiếng Hy Lạp
- en: Tiếng Anh
- es: Tiếng Tây Ban Nha
- fi: Tiếng Phần Lan
- fr: Tiếng Pháp
- hi: Tiếng Hindi
- hr: Tiếng Croatia
- hu: Tiếng Hungary
- id: Tiếng Indonesia
- it: Tiếng Ý
- he: Tiếng Do Thái
- ja: Tiếng Nhật
- kn: Tiếng Kannada
- ko: Tiếng Hàn
- lt: Tiếng Lithuania
- mr: Tiếng Marathi
- nl: Tiếng Hà Lan
- no: Tiếng Na Uy
- pl: Tiếng Ba Lan
- pt: Tiếng Bồ Đào Nha
- ro: Tiếng Romania
- ru: Tiếng Nga
- sk: Tiếng Slovak
- sl: Tiếng Slovenia
- sv: Tiếng Thuỵ Điển
- ta: Tiếng Tamil
- te: Tiếng Telugu
- th: Tiếng Thái
- tr: Tiếng Thổ Nhĩ Kỳ
- uk: Tiếng Ukraina
- vi: Tiếng Việt
- zh: Tiếng Trung
- zh-Hant: Tiếng Trung (Phồn thể)
Bảo mật và hiệu suất
Chính sách về quyền: Các iframe khác nguồn gốc cần có quyền rõ ràng.
<iframe src="https://example.com/" allow="translator"></iframe>Trình chạy web: Hiện không được hỗ trợ do sự phức tạp của Chính sách quyền.
Quyền riêng tư: Không có dữ liệu nào được gửi đến máy chủ của Google trong quá trình dịch sau khi mô hình được tải xuống.
Chiến lược dự phòng
Trước khi sử dụng, hãy kiểm tra xem đối tượng Translator có trong phạm vi toàn cục hay không:
if ('Translator' in self) {
// The Translator API is supported.
} else {
// Execute fallback strategy (do not fall back to window.ai.translator).
}
Nếu API Translator không được hỗ trợ hoặc kết quả kiểm tra khả năng hỗ trợ trả về 'unavailable', thì bạn phải chuyển về trạng thái dự phòng một cách linh hoạt.
Lựa chọn được đề xuất:
- Dự phòng API từ xa: Chuyển hướng yêu cầu dịch sang một điểm cuối máy chủ hoặc API từ xa trên đám mây (chẳng hạn như Gemini API trong Vertex AI) để cung cấp chức năng dịch.
- Xuống cấp nhẹ: Tắt các phần tử hoặc nút điều khiển bản dịch một cách trực quan, đồng thời hiển thị một ghi chú thân thiện với người dùng cuối (ví dụ:
"Client-side translation is currently unsupported in this browser"). Không cho phép các ngoại lệ chưa được xử lý. - Polyfill dự phòng: Bạn có thể sử dụng polyfill do cộng đồng duy trì như
built-in-ai-task-apis-polyfillshoặcprompt-api-polyfillđể mô phỏng giao diện API bằng các dịch vụ từ xa.
Ảnh hưởng đến quyền riêng tư và chi phí: Các polyfill này có thể gửi yêu cầu proxy đến máy chủ từ xa (chẳng hạn như Gemini API qua đám mây), mặc dù bạn cũng có thể xử lý cục bộ. Việc xử lý từ xa hoàn toàn vô hiệu hoá các biện pháp đảm bảo quyền riêng tư trên thiết bị của các API AI tích hợp sẵn và thường sẽ làm phát sinh chi phí sử dụng API phía máy chủ.