Policybazaar 和 JioHotstar 如何使用 Translator 和 Language Detector API 打造多語言體驗

Swetha Gopalakrishnan
Swetha Gopalakrishnan
Saurabh Rajpal
Saurabh Rajpal

發布日期:2025 年 5 月 8 日

使用 Translator APILanguage Detector API,讓全球觀眾都能存取您的內容。您可以使用 Language Detector API 判斷輸入內容所用的語言,並使用 Translator API 將該語言翻譯成其他語言。這兩項 API 都會在用戶端執行,並使用 Chrome 內建的 AI 模型,因此速度快、安全且免費,不會產生伺服器費用。

API 說明 網頁 額外資訊 Chrome 狀態 Intent
Translator API MDN Chrome 138 Chrome 138 查看 出貨意願
Language Detector API MDN Chrome 138 Chrome 138 查看 出貨意願

瞭解 Policybazaar 和 JioHotstar 這兩間大型國際企業,如何使用這些內建 API 並從中獲益。

Policybazaar 的多語言客戶服務

Policybazaar 是印度最大的保險平台,註冊客戶超過 9, 700 萬人。印度擁有令人驚嘆的語言多樣性,全國各地有許多語言和方言。

為支援客戶間的語言多樣性,Policybazaar 採用了兩種 Translator 和 Language Detector API 實作方式:隨時提供保險協助,以及以客戶偏好的語言提供市場洞察文章。

透過 Finova AI 取得保險協助

保險本質上是個人產品,特定保單的依據是機密資訊。Policybazaar 的客戶經常尋求有關如何選擇方案或方案支援內容的指引。雖然 Policybazaar 的員工會說多種語言,但他們需要一個能跨時區和在非上班時間運作的解決方案。因此,Policybazaar 打造了 Finova AI,可根據客戶偏好的語言提供量身打造的保險輔助服務。

使用者可以透過慣用語言與 Finova 聊天機器人對話。

「Chrome 的語言偵測器和翻譯器 API 可滿足客戶的各種語言需求,讓我們的保險協助服務更加順暢。因此,使用者可以透過偏好的印度語言進行通訊,不會有明顯延遲。」

—Policybazaar 壽險事業部設計主管 Rishabh Mehrotra

團隊選擇了用戶端 AI,也就是在瀏覽器或使用者裝置上進行推論。與伺服器代管或無伺服器 AI 相比,用戶端 AI 的延遲時間最短,成本也較低。即時對話的訊息量大且速度快,因此以伺服器為基礎的解決方案會耗費大量成本和時間。

Chrome 內建 AI 實作功能提供瀏覽器內建模型,因此推論作業會在裝置上執行。這是滿足主要需求的絕佳解決方案。

// 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 個字元的文章。」

—Policybazaar 技術主管 Aman Soni

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;
  });
}

透過 Chrome 提供的模型和 API,顧客可以近乎即時地翻譯文章。

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');

還有幾項額外函式會更新最終轉譯的字幕。

/* 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 和 Language Detector API 的用途不同,但有許多通用的最佳做法:

  • 對翻譯文字進行品質評估,確保文法和脈絡一致。視情況考慮提供選項,讓使用者對翻譯內容提供意見回饋。
  • 提供微調器、載入器或進度列等進度 UI,指出回應能力。舉例來說,Policybazaar 的聊天機器人會顯示輸入指標,表示正在處理使用者的輸入內容。

結論與最佳化建議

您是否正在使用這些 API 建構新項目?歡迎在 X 上的@ChromiumDevLinkedIn 上的 Chromium for Developers 分享您的想法。

資源

特別銘謝

感謝 Policybazaar 的 Rishabh MehrotraAman Soni、JioHotstar 的 Bhuvaneswaran MohanAnkeet Maini,以及 Alexandra KlepperThomas SteinerKenji Baheux 協助撰寫及審查本文。