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)
- 저장용량: 프로필 볼륨에 최소 22GB의 여유 공간이 있어야 합니다.
- 메모리/CPU: 16GB 이상의 RAM 및 4개 이상의 CPU 코어
- GPU: 4GB 이상의 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: 아랍어
- bg: 불가리아어
- bn: 벵골어
- cs: 체코어
- da: 덴마크어
- de: 독일어
- el: 그리스어
- en: 영어
- es: 스페인어
- fi: 핀란드어
- fr: 프랑스어
- hi: 힌디어
- hr: 크로아티아어
- hu: 헝가리어
- id: 인도네시아어
- it: 이탈리아어
- he: 히브리어
- ja: 일본어
- kn: 칸나다어
- ko: 한국어
- lt: 리투아니아어
- mr: 마라티어
- nl: 네덜란드어
- no: 노르웨이어
- pl: 폴란드어
- pt: 포르투갈어
- ro: 루마니아어
- ru: 러시아어
- sk: 슬로바키아어
- sl: 슬로베니아어
- sv: 스웨덴어
- ta: 타밀어
- te: 텔루구어
- th: 태국어
- tr: 튀르키예어
- uk: 우크라이나어
- vi: 베트남어
- zh: 중국어
- zh-Hant: 중국어(번체)
보안 및 성능
권한 정책: 교차 출처 iframe에는 명시적 권한이 필요합니다.
<iframe src="https://example.com/" allow="translator"></iframe>웹 작업자: 현재 권한 정책 복잡성으로 인해 지원되지 않습니다.
개인 정보 보호: 모델이 다운로드되면 번역 프로세스 중에 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")를 표시하면서 번역 제어 요소 또는 버튼을 시각적으로 사용 중지합니다. 처리되지 않은 예외를 허용하지 마세요. - 폴리필 대체:
built-in-ai-task-apis-polyfills또는prompt-api-polyfill와 같은 커뮤니티에서 유지관리하는 폴리필을 사용하여 원격 서비스를 통해 API 노출 영역을 에뮬레이션할 수 있습니다.
개인 정보 보호 및 비용 영향: 이러한 폴리필은 원격 서버 (예: 클라우드를 통한 Gemini API)에 대한 요청을 프록시할 수 있지만 로컬 처리도 옵션입니다. 원격 처리는 네이티브 내장 AI API의 기기 내 개인 정보 보호 보장을 완전히 무효화하며 서버 측 API 사용 비용이 발생하는 경우가 많습니다.