Translator:availability() 静态方法

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

Translator 接口的 availability() 静态方法返回一个枚举值,该值指示对于给定的 Translator 配置,AI 模型是否可用。

语法

js
Translator.availability(options)

参数

options

一个指定 Translator 配置选项的对象。可能的值包括

sourceLanguage

一个指定待翻译文本语言的字符串,应为有效的 BCP 47 语言标签

targetLanguage

一个指定待翻译文本将翻译成何种语言的字符串,应为有效的 BCP 47 语言标签。

返回值

一个 Promise,它会解析为一个枚举值,指示给定 Translator 配置是否可用(或将可用),或者在无法确定支持时返回 null

可能的值包括:

available

浏览器支持给定配置,并且可以立即使用。

downloadable

浏览器支持给定的配置,但需要先下载 AI 模型或模型的某些微调数据。

downloading

浏览器支持给定配置,但必须完成正在进行的下载才能继续。

unavailable

浏览器不支持给定配置。如果指定的 sourceLanguagetargetLanguage 相同,也会返回此值。

异常

InvalidStateError DOMException

如果页面的 Document 尚未激活,则抛出此异常。

OperationError DOMException

如果 AI 模型初始化因任何原因失败,则抛出此异常。

UnknownError DOMException

如果 availability() 调用因任何其他原因失败,或因用户代理不愿披露的原因而失败,则抛出此异常。

如果方法的用法被 translator Permissions-Policy 阻止,则 Promise 会以 unavailable 的值拒绝。

示例

基本的 availability() 用法

在以下代码片段中,我们首先使用 availability() 方法检查模型在两种语言之间进行翻译的可用性。

  • 如果返回 unavailable,我们会在控制台中打印一条适当的错误消息。
  • 如果返回 available,我们使用 create() 方法创建一个翻译器,并将源语言和目标语言传递给它。所需的 AI 模型可用,因此我们可以立即使用它。
  • 如果返回其他值(即 downloadabledownloading),我们运行相同的 create() 方法调用,但这次我们包含一个 monitor,它会在每次 downloadprogress 事件触发时记录模型下载的百分比。
js
async function getTranslator(languages) {
  const availability = await Translator.availability(languages);

  if (availability === "unavailable") {
    console.log(
      `Translation not supported; try a different language combination.`,
    );
    return undefined;
  } else if (availability === "available") {
    return await Translator.create(languages);
  }
  return await Translator.create({
    ...languages,
    monitor(monitor) {
      monitor.addEventListener("downloadprogress", (e) => {
        console.log(`Downloaded ${Math.floor(e.loaded * 100)}%`);
      });
    },
  });
}

const translator = await getTranslator({
  sourceLanguage: "en",
  targetLanguage: "ja",
});

检测语言支持

js
async function langSupport(source, target) {
  const availability = await Translator.availability({
    sourceLanguage: source,
    targetLanguage: target,
  });
  return availability;
}

await langSupport("en", "fr");
await langSupport("en", "pt");
await langSupport("en", "zh");

规范

规范
翻译器和语言检测器 API
# dom-translator-availability

浏览器兼容性

另见