使用内置 AI 进行翻译

发布时间:2024 年 11 月 12 日

在 Chrome 中使用 Translator API,通过本地 AI 模型在浏览器中翻译文本。

您的网站可能已提供多种语言版本的网站内容,以方便全球受众群体访问。借助 Translator API,用户可以用自己的母语贡献译文。例如,用户可以用其第一语言参与支持聊天,您的网站可以在信息离开用户设备之前将其翻译成支持人员使用的语言。这可为所有用户打造流畅、快速且包容的体验。

翻译网页内容通常需要使用云服务。首先,源内容会上传到服务器,服务器会将其翻译成目标语言,然后下载生成的文本并将其返回给用户。通过在客户端上运行翻译,您可以节省服务器往返所需的时间,并降低托管翻译服务的费用。

可用性

虽然所选的目标语言始终是已知的,但在某些情况下,源语言可能未知,例如用户生成的内容。在这种情况下,Translator API 方案同时包含 Translator API 和 Language Detector API,后者也可在源代码试用版中使用。您可以注册参与这两种源试用,以便搭配使用这些 API。

功能检测

如需确定是否支持 Translator API,请运行以下功能检测代码段。

if ('translation' in self && 'createTranslator' in self.translation) {
  // The Translator API is supported.
}

检查语言对支持情况

翻译是通过按需下载的语言包进行管理的。语言包就像给定语言的字典。这些软件包与异步 canTranslate() 函数配对,以便您确定某个语言对是否受支持。

canTranslate() 函数需要一个包含两个字段的 options 参数:

  • sourceLanguage:文本的当前语言。
  • targetLanguage:文本应翻译成的最终语言。

使用 BCP 47 语言短代码作为字符串。例如,'es' 表示西班牙语,'fr' 表示法语。

await translation.canTranslate({
  sourceLanguage: 'en',
  targetLanguage: 'fr',
});
// 'readily'

canTranslate() 函数可以返回以下任一结果:

  • no:此浏览器无法按要求进行翻译。
  • readily:浏览器可以按请求进行翻译。
  • after-download:浏览器可以执行翻译,但只有在下载相关模型或语言包后才能执行。

您可以使用 downloadprogress 事件监听下载进度:

translator.ondownloadprogress = progressEvent => {
  updateDownloadProgressBar(progressEvent.loaded, progressEvent.total);
};

如果下载失败,系统会停止发出 downloadprogress 事件,并拒绝 ready promise。

创建并运行转换器

如需创建转换器,请调用异步 translation.createTranslator() 函数。与 canTranslate() 一样,它需要一个包含两个字段的选项参数,一个用于 sourceLanguage,另一个用于 targetLanguage

// Create a translator that translates from English to French.
const translator = await self.translation.createTranslator({
  sourceLanguage: 'en',
  targetLanguage: 'fr',
});

有了翻译工具后,请调用异步 translate() 函数来翻译文本。

await translator.translate('Where is the next bus stop, please?');
// "Où est le prochain arrêt de bus, s'il vous plaît ?"

源试用的限制

在源试用期间存在以下限制。

支持的语言对

目前,您最多可以下载三个语言包进行翻译。我们致力于在未来的版本中扩大支持的语言范围,同时保持严格的用户隐私保护标准。您可以使用 canTranslate() 函数确认所需的语言对是否受支持。

某些不太常用的语言对可能会用于指纹识别。例如,英语和西班牙语之间的互译比盖尔语和加泰罗尼亚语之间的互译更常见。不常见的语言对可以视为用户识别的数据点。

在源试用期间,我们会限制潜在的可翻译语言对,以保护用户隐私。语言对必须满足以下条件:

  • 在 Chrome 中,源语言和目标语言都设置为首选语言
  • 或者,其中一种语言在 Chrome 中设为首选语言,另一种语言属于以下热门语言
    • 英语 (en)
    • 普通话(zh;简体)或台湾普通话(zh-Hant;繁体)
    • 日语 (ja)
    • 葡萄牙语 (pt)
    • 俄语 (ru)
    • 西班牙语 (es)
    • 土耳其语 (tr)
    • 印地语 (hi)
    • 越南语 (vi)
    • 孟加拉语 (bn)

绕过本地测试的语言限制

对于本地原型设计,您可以使用命令行选项 --disable-features=TranslationAPIAcceptLanguagesCheck 运行 Chrome,以绕过这些检查。或者,将 chrome://flags/#translation-api 设置为在没有语言包限制的情况下启用

访问 chrome://on-device-translation-internals/ 以手动安装和卸载语言包。

顺序翻译

系统会依序处理译文。如果您发送大量文本需要翻译,后续翻译将被阻止,直到之前的翻译完成。

为了让翻译请求的响应速度达到最佳,请将翻译请求分块处理,并考虑显示加载界面(例如旋转图标),以表明翻译正在进行。

网络工作器可用性

在源试用期间,只有主线程支持 Translator API。一旦该 API 广泛提供,我们打算在 Web Worker 中支持它。

演示

您可以在译者和语言检测器 API 园地中查看与 Language Detector API 结合使用的译者 API。

标准化工作

我们正在努力使 Translator API 标准化,以确保跨浏览器兼容性。

我们的 API 提案获得了社区支持,并已移至 W3C Web Incubator 社区群组以供进一步讨论。Chrome 团队向 W3C 技术架构组征求了反馈,并询问了 MozillaWebKit 的标准立场。

参与并分享反馈

立即加入源试用,开始测试 Translator API,并分享您的反馈。您的反馈将直接影响我们构建和实现此 API 及所有内置 AI API 的未来版本的方式。