Penerjemah

Fitur web: Penerjemah

Translator API memungkinkan developer melakukan terjemahan teks sisi klien menggunakan model AI bawaan di Chrome dan Edge. Pendekatan ini menghilangkan kebutuhan akan layanan terjemahan berbasis cloud untuk konten sementara, sehingga mengurangi biaya dan meningkatkan privasi dengan menyimpan data di perangkat pengguna.

Prasyarat & Persyaratan

Platform API & Cakupan Global

  • WAJIB: Akses Translator API secara eksklusif melalui antarmuka Translator global (window.Translator / self.Translator).
  • JANGAN menggunakan atau memeriksa namespace window.ai.translator yang tidak digunakan lagi.

Dukungan Browser

  • Chrome: Versi 138 atau yang lebih baru (khusus Desktop).
  • Edge: Versi 148+ (Khusus desktop).
  • Tidak Didukung: Seluler (Android/iOS), Firefox, Safari.

Persyaratan Hardware

Untuk menjalankan Gemini Nano dan model terkait, sistem memerlukan:

  • Sistem Operasi: Windows 10/11, macOS 13+, Linux, atau ChromeOS (Chromebook Plus).
  • Penyimpanan: Minimal 22 GB ruang kosong di volume profil.
  • Memori/CPU: RAM 16 GB+ dan 4+ core CPU.
  • GPU: VRAM 4 GB+ (Wajib untuk Prompt API dengan audio).
  • Jaringan: Hanya diperlukan untuk download awal paket bahasa/model.

Penerapan & Contoh Kode

1. Memeriksa Ketersediaan & Pengelolaan Model

Penerusan Opsi Wajib: Anda harus meneruskan objek opsi konfigurasi yang identik yang berisi sourceLanguage dan targetLanguage ke Translator.availability(options) dan Translator.create(options).

Pemantauan Progres yang Direkomendasikan: Anda harus menerapkan pemantauan untuk progres download model dengan memberikan callback monitor(m) ke Translator.create() dan menambahkan pemroses untuk peristiwa downloadprogress, sehingga pengguna dapat melihat progres download model.

Persyaratan Gestur Pengguna: Saat memanggil availability(options) menampilkan 'downloadable' atau 'downloading', memanggil Translator.create() akan memicu download paket bahasa dan sangat memerlukan gestur pengguna (seperti klik tombol) untuk mencegah NotAllowedError.

Translator.availability(options) menampilkan salah satu dari empat status string:

  • 'available': Model pasangan bahasa sudah didownload di perangkat dan siap untuk langsung digunakan dalam penerjemahan.
  • 'downloadable': Pasangan bahasa didukung, tetapi model perlu didownload. Gestur pengguna diperlukan untuk memulai Translator.create().
  • 'downloading': Paket bahasa saat ini sedang dalam proses download. Memanggil Translator.create() dengan gestur pengguna akan melampirkan ke download.
  • 'unavailable': Pasangan bahasa atau perangkat tidak didukung. Jalankan strategi penggantian Anda.
// 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. Menjalankan Terjemahan

API ini mendukung respons statis dan streaming. Selalu sertakan pemantauan progres download saat membuat instance penerjemah.

Terjemahan Standar:

// 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 ?"

Streaming Terjemahan (untuk teks panjang):

const stream = translator.translateStreaming(longText);
for await (const chunk of stream) {
  console.log(chunk);
}

Bahasa yang Didukung

API ini mendukung berbagai kode bahasa BCP 47: Berikut adalah bahasa yang didukung oleh penerapan Translator API Chrome:

  • ar: Arab
  • bg: Bulgaria
  • bn: Bengali
  • cs: Ceko
  • da: Danish
  • de: Jerman
  • el: Greek
  • en: English
  • es: Spanyol
  • fi: Finnish
  • fr: French
  • hi: Hindi
  • hr: Kroasia
  • hu: Hungarian
  • id: Indonesian
  • it: Italian
  • he: Ibrani
  • ja: Jepang
  • kn: Kannada
  • ko: Korea
  • lt: Lituania
  • mr: Marathi
  • nl: Belanda
  • no: Norwegia
  • pl: Polandia
  • pt: Portugis
  • ro: Rumania
  • ru: Rusia
  • sk: Slovak
  • sl: Slovenia
  • sv: Swedish
  • ta: Tamil
  • te: Telugu
  • th: Thai
  • tr: Turki
  • uk: Ukraina
  • vi: Vietnam
  • zh: China
  • zh-Hant: China (Aksara Tradisional)

Keamanan & Performa

  • Kebijakan Izin: Iframe lintas origin memerlukan izin eksplisit.

    <iframe src="https://example.com/" allow="translator"></iframe>
    
  • Web Worker: Saat ini tidak didukung karena kompleksitas Kebijakan Izin.

  • Privasi: Tidak ada data yang dikirim ke server Google selama proses terjemahan setelah model didownload.

Strategi Penggantian

Sebelum digunakan, periksa apakah objek Translator tersedia dalam cakupan global:

if ('Translator' in self) {
  // The Translator API is supported.
} else {
  // Execute fallback strategy (do not fall back to window.ai.translator).
}

Jika Translator API tidak didukung atau pemeriksaan ketersediaan menampilkan 'unavailable', Anda harus melakukan penggantian dengan baik.

Opsi yang direkomendasikan:

  1. Penggantian API Jarak Jauh: Mengalihkan permintaan terjemahan ke endpoint server atau API jarak jauh cloud (seperti Vertex AI Gemini API) untuk menyediakan fungsi terjemahan.
  2. Degradasi Halus: Nonaktifkan elemen atau tombol kontrol terjemahan secara visual sambil menampilkan catatan yang mudah dipahami pengguna akhir (misalnya, "Client-side translation is currently unsupported in this browser"). Jangan izinkan pengecualian yang tidak ditangani.
  3. Penggantian Polyfill: Anda dapat menggunakan polyfill yang dikelola komunitas seperti built-in-ai-task-apis-polyfills atau prompt-api-polyfill untuk mengemulasi platform API menggunakan layanan jarak jauh.

Implikasi Privasi dan Biaya: Polyfill ini mungkin mem-proxy permintaan ke server jarak jauh (seperti Gemini API melalui cloud), meskipun pemrosesan lokal juga merupakan opsi. Pemrosesan jarak jauh sepenuhnya meniadakan jaminan privasi di perangkat dari API AI Bawaan native dan sering kali akan menimbulkan biaya penggunaan API sisi server.