Translator API ডেভেলপারদের Chrome এবং Edge-এ বিল্ট-ইন AI মডেল ব্যবহার করে ক্লায়েন্ট-সাইড টেক্সট অনুবাদ করার অনুমতি দেয়। এই পদ্ধতি ক্ষণস্থায়ী কন্টেন্টের জন্য ক্লাউড-ভিত্তিক অনুবাদ পরিষেবার প্রয়োজনীয়তা দূর করে, খরচ কমায় এবং ব্যবহারকারীর ডিভাইসে ডেটা রেখে গোপনীয়তা উন্নত করে।
পূর্বশর্ত ও প্রয়োজনীয়তা
API সারফেস ও গ্লোবাল স্কোপ
- বাধ্যতামূলক: Translator API শুধুমাত্র গ্লোবাল
Translatorইন্টারফেস (window.Translator/self.Translator) থেকে অ্যাক্সেস করুন। window.ai.translatorনেমস্পেস বন্ধ হয়ে গেছে, তাই এটি ব্যবহার বা চেক করবেন না।
ব্রাউজার সহায়তা
- Chrome: ভার্সন ১৩৮+ (শুধুমাত্র ডেস্কটপ)।
- Edge: ভার্সন ১৪৮+ (শুধুমাত্র ডেস্কটপ)।
- কাজ করে না: মোবাইল (Android/iOS), Firefox, Safari.
হার্ডওয়্যার সংক্রান্ত প্রয়োজনীয়তা
Gemini Nano এবং সংশ্লিষ্ট মডেল রান করতে, সিস্টেমের এগুলি প্রয়োজন:
- অপারেটিং সিস্টেম: Windows 10/11, macOS 13+, Linux বা ChromeOS (Chromebook Plus)।
- স্টোরেজ: প্রোফাইল ভলিউমে অন্তত ২২ জিবি খালি জায়গা।
- মেমরি/সিপিইউ: ১৬ জিবি+ র্যাম এবং ৪+ সিপিইউ কোর।
- GPU: ৪ জিবি+ VRAM (অডিও সহ Prompt API-এর জন্য বাধ্যতামূলক)।
- নেটওয়ার্ক: ভাষা সংক্রান্ত প্যাক/মডেল প্রথমবার ডাউনলোড করার জন্য প্রয়োজন।
প্রয়োগ ও কোডের নমুনা
১. উপলভ্যতা ও মডেল ম্যানেজমেন্ট চেক করা
বাধ্যতামূলক বিকল্প পাস করা: আপনাকে অবশ্যই Translator.availability(options) এবং Translator.create(options), দুটিতেই sourceLanguage এবং targetLanguage সহ অভিন্ন কনফিগারেশন বিকল্প অবজেক্ট পাস করতে হবে।
প্রোগ্রেস মনিটর করার সাজেস্ট করা পদ্ধতি: Translator.create()-এ monitor(m) কলব্যাক প্রদান করে এবং 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.');
}
২. অনুবাদ এক্সিকিউট করা হচ্ছে
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") দেখানোর সময় অনুবাদ কন্ট্রোল এলিমেন্ট বা বোতাম ভিজ্যুয়ালি বন্ধ করে দিন। হ্যান্ডেল করা হয়নি এমন ব্যতিক্রমের অনুমতি দেবেন না। - Polyfill Fallback: রিমোট পরিষেবা ব্যবহার করে API সারফেস এমুলেট করতে আপনি
built-in-ai-task-apis-polyfillsবাprompt-api-polyfill-এর মতো কমিউনিটি-পরিচালিত পলিফিল ব্যবহার করতে পারেন।
গোপনীয়তা ও খরচের প্রভাব: এই পলিফিলগুলি সম্ভবত রিমোট সার্ভারে (যেমন ক্লাউডে Gemini API) প্রক্সি অনুরোধ পাঠায়, যদিও লোকাল প্রসেসিংয়ের বিকল্পও রয়েছে। রিমোট প্রসেসিং নেটিভ বিল্ট-ইন AI API-এর অন-ডিভাইস গোপনীয়তার গ্যারান্টিকে সম্পূর্ণভাবে বাতিল করে দেয় এবং প্রায়ই সার্ভার-সাইড API ব্যবহারের খরচ বহন করতে হয়।