发布时间:2025 年 5 月 8 日
借助 Translator API 和 Language Detector API,让全球受众群体都能访问您的内容。借助 Language Detector API,您可以确定输入内容所用的语言;借助 Translator API,您可以将检测到的语言翻译成其他语言。这两个 API 均在客户端运行,并内置了 Chrome 中的 AI 模型,这意味着它们快速、安全且免费,因为没有服务器费用。
API | 解说 | Web | 扩展程序 | Chrome 状态 | 意向 |
---|---|---|---|---|---|
Translator API | GitHub | 视图 | 意图进行实验 | ||
Language Detector API | GitHub | 视图 | 意图进行实验 |
了解两家大型国际企业 Policybazaar 和 JioHotstar 如何使用这些内置 API 并从中受益。
Policybazaar 提供多语言客户服务
Policybazaar 是印度最大的保险平台,拥有超过 9700 万注册客户。印度语言多元化程度极高,全国各地都使用多种语言和方言。
为了支持客户的多语言需求,Policybazaar 通过以下两种方式实现了 Translator API 和 Language Detector API:随时提供保险咨询服务,并以客户的首选语言提供包含市场洞见的文章。
借助 Finova AI 提供保险援助
保险是一种本质上非常个人化的产品,敏感信息是特定保险政策的基础。Policybazaar 的客户经常会寻求有关如何选择方案或其方案支持的内容的指导。虽然 Policybazaar 的员工会说多种语言,但他们需要一个能够跨时区和非工作时间提供支持的解决方案。因此,Policybazaar 构建了 Finova AI,以客户的首选语言提供量身定制的保险咨询服务。
“Chrome 的语言检测器和 Translator API 满足了客户的多样化语言需求,帮助我们更顺畅地提供保险咨询服务。因此,用户可以使用其首选印度语言进行交流,而不会出现明显的延迟。”
-Rishabh Mehrotra,Policybazaar 寿险业务设计部门负责人
该团队选择了客户端 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,以便按需将文章从英语翻译成印地语。
为了在其网站上添加翻译,他们使用了以下脚本:
// 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 API 和 Language Detector API 的这些用法有所不同,但也有很多常见的最佳实践:
- 对译文进行质量评估,以确保语法和上下文得到保留。视情况为用户提供用于针对翻译提供反馈的选项。
- 提供旋转图标、加载器或进度条等进度界面,以指示响应能力。例如,Policybazaar 为聊天机器人使用了打字指示器,以显示它正在处理用户的输入。
结论和建议
您是否打算使用这些 API 构建新内容?您可以通过 X 上的@ChromiumDev 或 LinkedIn 上的“Chrome 开发者版”与我们分享您的反馈。
资源
- 开始在 Chrome 上使用内置 API
- 详细了解 Language Detector API
- 详细了解 Translator API
- 赋能博主:CyberAgent 如何部署内置 AI 来提升内容创作效率
致谢
感谢 Policybazaar 的 Rishabh Mehrotra 和 Aman Soni、JioHotstar 的 Bhuvaneswaran Mohan 和 Ankeet Maini、Alexandra Klepper、Thomas Steiner 和 Kenji Baheux 帮助撰写和审核本文。