วิธีที่ Policybazaar และ JioHotstar ใช้ Translator และ Language Detector API เพื่อสร้างประสบการณ์การใช้งานหลายภาษา

Swetha Gopalakrishnan
Swetha Gopalakrishnan
Saurabh Rajpal
Saurabh Rajpal

เผยแพร่: 8 พฤษภาคม 2025

ทำให้เนื้อหาเข้าถึงได้สำหรับผู้ชมทั่วโลกด้วย Translator API และ Language Detector API API ของเครื่องมือตรวจหาภาษา ช่วยให้คุณระบุได้ว่ามีการใช้ภาษาใดในอินพุต และ API ของเครื่องมือแปล ช่วยให้คุณแปลจากภาษาที่ตรวจพบนั้นเป็นภาษาอื่นได้ ทั้ง 2 API ทำงานฝั่งไคลเอ็นต์ด้วยโมเดล AI ที่สร้างไว้ใน Chrome ซึ่งหมายความว่า API นี้รวดเร็ว ปลอดภัย และใช้งานได้ฟรี เนื่องจากไม่มีค่าใช้จ่ายของเซิร์ฟเวอร์

API คำอธิบาย เว็บ ส่วนขยาย สถานะของ Chrome ความตั้งใจ
Translator API MDN Chrome 138 Chrome 138 ดู ความตั้งใจที่จะจัดส่ง
Language Detector API MDN Chrome 138 Chrome 138 ดู ความตั้งใจที่จะจัดส่ง

ดูวิธีที่ธุรกิจระหว่างประเทศขนาดใหญ่ 2 แห่งอย่าง Policybazaar และ JioHotstar ใช้และรับประโยชน์จาก API ในตัวเหล่านี้

การช่วยเหลือลูกค้าหลายภาษาของ Policybazaar

Policybazaar เป็นแพลตฟอร์มประกันภัยที่ใหญ่ที่สุดในอินเดีย โดยมีลูกค้าที่ลงทะเบียนกว่า 97 ล้านราย อินเดียมีความหลากหลายทางภาษาที่น่าทึ่ง โดยมีการใช้ภาษาและภาษาถิ่นมากมายทั่วประเทศ

Policybazaar ใช้ API ของเครื่องมือแปลภาษาและเครื่องมือตรวจหาภาษาใน 2 วิธีเพื่อรองรับความหลากหลายทางภาษาในกลุ่มลูกค้า ได้แก่ การให้ความช่วยเหลือด้านประกันภัยได้ทุกเมื่อ และการนำเสนอบทความที่มีข้อมูลเชิงลึกเกี่ยวกับตลาดในภาษาที่ลูกค้าต้องการ

ความช่วยเหลือด้านประกันภัยด้วย Finova AI

การประกันภัยเป็นผลิตภัณฑ์ส่วนบุคคลโดยธรรมชาติ ซึ่งมีข้อมูลที่ละเอียดอ่อนเป็น พื้นฐานของนโยบายเฉพาะ ลูกค้าของ Policybazaar มักจะขอคำแนะนำเกี่ยวกับวิธี เลือกแพ็กเกจหรือสิ่งที่แพ็กเกจรองรับ แม้ว่า Policybazaar จะมีเจ้าหน้าที่ที่พูดได้หลายภาษา แต่ก็ยังต้องการโซลูชันที่ใช้ได้ในเขตเวลาต่างๆ และหลังเวลาทำการ Policybazaar จึงสร้าง Finova AI ซึ่งเป็นผู้ช่วยด้านประกันภัยที่ปรับแต่ง ให้เหมาะกับภาษาที่ลูกค้าต้องการ

ผู้ใช้แชทกับแชทบอท Finova ในภาษาแรกของตนเองได้

"API ของเครื่องมือตรวจหาภาษาและเครื่องมือแปลของ Chrome ช่วยให้ความช่วยเหลือด้านประกันภัยของเราราบรื่นยิ่งขึ้นด้วยการตอบสนองความต้องการด้านภาษาที่หลากหลายของลูกค้า ด้วยเหตุนี้ ผู้ใช้จึงสามารถสื่อสารในภาษาอินเดียที่ต้องการได้โดยไม่มีความล่าช้าที่สังเกตเห็นได้"

- Rishabh Mehrotra หัวหน้าฝ่ายออกแบบหน่วยธุรกิจประกันชีวิตของ Policybazaar

ทีมเลือกใช้ AI ฝั่งไคลเอ็นต์ ซึ่งเป็นการอนุมานที่เกิดขึ้นในเบราว์เซอร์หรือ ในอุปกรณ์ของผู้ใช้ AI ฝั่งไคลเอ็นต์มีเวลาในการตอบสนองน้อยที่สุดและมีต้นทุนต่ำกว่า AI ที่โฮสต์ในเซิร์ฟเวอร์หรือ AI แบบไร้เซิร์ฟเวอร์ เนื่องจากข้อความในการสนทนาแบบเรียลไทม์มีจำนวนมากและเกิดขึ้นอย่างรวดเร็ว โซลูชันที่ใช้เซิร์ฟเวอร์จึงมีต้นทุนสูงและใช้เวลานาน

การใช้งาน AI ในตัวของ Chrome มีโมเดลที่สร้างขึ้นในเบราว์เซอร์ ดังนั้น การอนุมานจึงดำเนินการในอุปกรณ์ ซึ่งเป็นโซลูชันที่น่าสนใจในการตอบสนอง ข้อกำหนดหลัก

// Language Detector and Translator APIs implemented with React
import { useRef } from "react";

const useService = () => {
  const languageModel = useRef(null);
  const translatorCapabilitiesModel = useRef(null);
  const loadAllModels = async () => {
    if (window?.LanguageDetector) {
      languageModel.current = await window.LanguageDetector.create().catch(() => null);
    }
  }

  // Detect what language the customer is writing
  const detectLanguage = async (message) => {
    if (!languageModel.current) return "";
    try {
      const [result] = await languageModel.current.detect(message);
      const { detectedLanguage, confidence } = result || {};
      return confidence * 100 > 50 ? detectedLanguage : "";
    } catch (err) {
      console.error(err);
      return "";
    }
  };

  // Translate messages to and from the detected language and English
  const translateMessage = async (message, detectedLanguage, targetLanguage = 'en') => {
    try {
      const modelAvailability = await window.Translator.availability({ sourceLanguage: detectedLanguage, targetLanguage });
      if (!['available', 'downloadable'].includes(modelAvailability)) {
        return message;
      }
      const translator = await window.Translator.create({ sourceLanguage: detectedLanguage, targetLanguage });
      const translatedMessage = await translator.translate(message);
      return translatedMessage;
    } catch (error) {
      return message;
    }
  }

  return { detectLanguage, translateMessage, loadAllModels };
}

export default useService;

การแปลบทความสำหรับข้อมูลเชิงลึกของตลาด

"การผสานรวม Translator API เข้ากับโค้ด React ที่มีอยู่ของเรานั้นง่ายมาก เราเลือกใช้โซลูชันฝั่งไคลเอ็นต์นี้เพื่อให้มั่นใจว่าลูกค้าและตัวแทนจะได้รับการแปลอย่างรวดเร็ว API สามารถแปลบทความที่มีความยาว 1,000 อักขระ ได้ภายใน 2 วินาที"

- Aman Soni หัวหน้าทีมเทคโนโลยีที่ Policybazaar

ธุรกิจประกันชีวิตของ Policybazaar มีบทความมากมาย เพื่อให้ลูกค้าและตัวแทนฝ่ายสนับสนุนลูกค้าทราบถึงสภาวะตลาด

ภาษาฮินดีเป็นภาษาที่ผู้ใช้พูดกันอย่างแพร่หลาย จึงได้ทดลองใช้ Translator API เพื่อแปลบทความจากภาษาอังกฤษเป็นภาษาฮินดีตามต้องการ

Policybazaar ให้บริการแปลภาษาอังกฤษเป็นภาษาฮินดีและภาษาฮินดีเป็นภาษาอังกฤษได้อย่างรวดเร็วและราบรื่น

โดยใช้สคริปต์ต่อไปนี้เพื่อเพิ่มการแปลลงในเว็บไซต์

// Initialize the translator, setting source and target languages
var translator = null;
var translatorAvailable = false;
var languageOptionsData = { name: "Hindi", code: "hi" };
var IGNORED_TEXT_NODES = ['RSI', 'NAV'];

function checkForLanguageOptions() {
  if (window.Translator) {
    translatorAvailable = true;
    return window.Translator.create({
      sourceLanguage: 'en',
      targetLanguage: languageOptionsData.code
    }).then(function (createdTranslator) {
      translator = createdTranslator;
    });
  } else {
    translatorAvailable = false;
    return Promise.resolve();
  }
}

/**
 * Translate the article content using the Translator API.
 * @param {HTMLElement} container - element that holds the article content.
 * @return {Promise<string>} A promise that resolves to the container's innerHTML after translation.
 */
function translateArticle(container) {
  if (!translatorAvailable) { return Promise.resolve(''); }

  var textNodes = getAllTextNodes(container);
  var promiseChain = Promise.resolve();

  textNodes.forEach(function (element) {
    if (IGNORED_TEXT_NODES.indexOf(element.nodeValue) !== -1) return;
    var message = element.nodeValue;
    promiseChain = promiseChain.then(function () {
      return translator.translate(message).then(function (translated) {
        element.nodeValue = translated;
      }).catch(function (error) {
        console.error('Translation error:', error);
      });
    });
  });

  return promiseChain.then(function () {
    return container.innerHTML;
  });
}

โมเดลและ API ที่ Chrome มอบให้ช่วยให้ลูกค้าเข้าถึงการแปลบทความได้เกือบจะทันที

JioHotstar มีคำบรรยายแทนเสียงแบบไดนามิก

JioHotstar ซึ่งเป็นแพลตฟอร์มสตรีมมิงดิจิทัลชั้นนำในอินเดียที่นำเสนอภาพยนตร์ รายการทีวี กีฬา และเนื้อหาต้นฉบับที่หลากหลายในหลายภาษา กำลังพิจารณาใช้ Translator API เพื่อปรับปรุงการแปลคำบรรยาย

JioHotstar ให้บริการแก่ผู้ใช้ในอินเดียที่ต้องการรับชมเนื้อหาในภาษาท้องถิ่น ของตน เนื่องจากแคตตาล็อกเนื้อหาที่พร้อมให้บริการใน JioHotstar มีความหลากหลาย จึงเป็นเรื่องยากที่จะตอบสนองความต้องการด้านภาษาในภูมิภาคของผู้ใช้ทั้งหมด ซึ่งจะช่วยปรับปรุงการบริโภคเนื้อหาของผู้ใช้

Translator API ช่วยให้แพลตฟอร์มแปลคำบรรยายภาษาอังกฤษ เป็นภาษาที่ผู้ใช้ต้องการหรือตามภูมิภาค ของผู้ใช้ได้แบบไดนามิก ตัวเลือกการแปลแบบไดนามิกจะอยู่ในเมนูการเลือกภาษา ซึ่งเราจะตรวจหาคำบรรยายแทนเสียงต้นฉบับที่ขาดหายไปโดยอัตโนมัติและเพิ่มคำบรรยายแทนเสียงจากภาษาที่ Chrome รองรับ ซึ่งจะช่วยปรับปรุงประสบการณ์ของผู้ใช้ ในการใช้งานคำบรรยายแทนเสียงและทำให้ผู้ใช้จำนวนมากขึ้นเข้าถึงเนื้อหาได้

ระบบจะสร้างรายการภาษาแบบไดนามิกที่พร้อมใช้งานโดยการตรวจสอบเบราว์เซอร์เพื่อหาชุดภาษาที่มีอยู่ โดยอิงตามรายการหลักที่ปรับให้เหมาะกับ ค่ากำหนดและสถานที่ทางภูมิศาสตร์ของผู้ใช้แต่ละราย เมื่อผู้ใช้เลือกภาษาและดาวน์โหลดแพ็กภาษาที่เกี่ยวข้องในเบราว์เซอร์แล้ว ข้อความที่แปลจะปรากฏขึ้นทันที ไม่เช่นนั้น ระบบจะดาวน์โหลดแพ็กก่อน แล้วจึงเริ่มแปล

เมื่อผู้ใช้เลือกภาษาและเห็นการแปลเกิดขึ้น ผู้ใช้จะมั่นใจได้ว่าระบบดาวน์โหลดแพ็กภาษาเรียบร้อยแล้ว จากนั้น คุณจะดูเนื้อหาที่มีคำบรรยายแทนเสียงในภาษาที่เลือกได้ ซึ่งจะช่วยลดความไม่แน่นอนสำหรับผู้ใช้ที่อาจลังเลที่จะเรียกดูเนื้อหาเนื่องจากไม่แน่ใจว่าเนื้อหานั้นจะมีให้บริการในภาษาที่ต้องการหรือไม่

โค้ดตัวอย่างต่อไปนี้จะเริ่มต้นและตั้งค่าตัวแปล

class SubTitleTranslator {
  // Cache translator instances based on source-target language pair, so that we don't create this often for multiple contents
  #translatorMap = {};
  // Get or create a translator for the language pair
  async #createTranslator(sourceLanguage, targetLanguage) {
    const key = `${sourceLanguage}-${targetLanguage}`;
    const translator = this.#translatorMap[key];
    // Check if a translator already exists for a language pair in the map
    if (translator) {
      return translator;
    }
    // Check if translation is available
    const isAvailable =
      (await Translator.availability({ sourceLanguage, targetLanguage })) ===
      "available";
    if (isAvailable) {
      // If available, create a new translator and cache it
      this.#translatorMap[key] = await Translator.create({
        sourceLanguage,
        targetLanguage,
      });
      return this.#translatorMap[key];
    }

    return null;
  }
  // Translate text
  async #translateText(text, sourceLanguage, targetLanguage) {
    const translator = await this.#createTranslator(
      sourceLanguage,
      targetLanguage
    );
    // Returns the given input text if translator is unavailable
    if (!translator) {
      return text;
    }
    return await translator.translate(text);
  }
  // Public method to get a reusable translation function for a specific language pair.
  getTranslatorFor(sourceLanguage, targetLanguage) {
    return async (text) => {
      try {
        return this.#translateText(text, sourceLanguage, targetLanguage);
      } catch {
        return text;
      }
    };
  }
}

จากนั้นจะใช้ Translator API เพื่อสร้างคำบรรยายแทนเสียงที่แปลแล้ว

const translatorFactory = new SubTitleTranslator();

/* Accept English input and translate to Tamil.*/
const translateToTamil = translatorFactory.getTranslatorFor('en','ta');

/* Accept English text as input and translate it to Japanese. */
const translateToJapanese = translatorFactory.getTranslatorFor('en','ja');

/* Accept English input and returns English, as `JTA` is not a valid language code. */
const translateToUnknownLanguage = translatorFactory.getTranslatorFor('en','jta');

นอกจากนี้ ยังมีฟังก์ชันเพิ่มเติมอีก 2-3 ฟังก์ชันที่จะอัปเดตคำบรรยายแทนเสียงที่แสดงผลสุดท้าย

/* updateSubtitle is the internal function that updates the rendered subtitle. */
translateToTamil('hi').then(result => updateSubtitle(result))
translateToJapanese('hi').then(result => updateSubtitle(result))
translateToUnknownLanguage('hi').then(result => updateSubtitle(result))

แนวทางปฏิบัติแนะนำ

แม้ว่าการใช้ Translator API และ Language Detector API จะแตกต่างกัน แต่ก็มีแนวทางปฏิบัติแนะนำที่ใช้ร่วมกันได้หลายอย่าง ดังนี้

  • ประเมินคุณภาพของข้อความที่แปลเพื่อให้มั่นใจว่าไวยากรณ์และบริบทจะยังคงอยู่ พิจารณาให้ตัวเลือกแก่ผู้ใช้ในการแสดงความคิดเห็นเกี่ยวกับคำแปลหากเหมาะสม
  • ระบุ UI ความคืบหน้า เช่น สปินเนอร์ ตัวโหลด หรือแถบความคืบหน้า เพื่อระบุ การตอบสนอง ตัวอย่างเช่น Policybazaar ใช้ตัวบ่งชี้การพิมพ์สำหรับแชทบอทเพื่อแสดงว่ากำลังประมวลผลข้อมูลที่ผู้ใช้ป้อน

บทสรุปและคําแนะนํา

คุณกำลังสร้างสิ่งใหม่ๆ ด้วย API เหล่านี้ใช่ไหม โปรดแชร์กับเราที่ @ChromiumDev บน X หรือ Chromium for Developers บน LinkedIn

แหล่งข้อมูล

การรับทราบ

ขอขอบคุณ Rishabh Mehrotra และ Aman Soni จาก Policybazaar Bhuvaneswaran Mohan และ Ankeet Maini จาก JioHotstar, Alexandra Klepper, Thomas Steiner และ Kenji Baheux ที่ช่วยเขียนและ ตรวจสอบบทความนี้