语言检测

Web 功能: 语言检测器

Language Detector API 是一种客户端 Web API,旨在识别给定文本字符串的语言。通过在浏览器中本地执行检测,该 API 增强了用户隐私保护,并减少了对大型外部库或高成本服务器端调用的需求。

主要应用场景

  • 翻译准备:在将文本发送给翻译工具之前,先识别源语言。
  • 安全和过滤:加载特定模型以执行有害内容检测等任务。
  • 无障碍功能:使用正确的 lang 属性为内容添加标签,以便屏幕阅读器读取。
  • 界面本地化:根据用户的输入语言调整应用界面。

硬件和系统要求

  • 操作系统:Windows 10/11、macOS 13+、Linux 或 Chromebook Plus。
  • 存储空间:22 GB 可用空间(如果可用空间低于 10 GB,模型会被移除)。
  • RAM/CPU:16 GB RAM 和 4 个以上的 CPU 核心。
  • VRAM:如果使用 GPU,则至少需要 4 GB。

实现指南

1. 模型管理和用户激活

在尝试实例化检测器或触发下载之前,请先检查模型是否可用。

强制性要求:实例化语言检测器或使用 LanguageDetector.create() 触发模型下载必须由用户手势(例如点击按钮)发起,以防止模型处于 downloadable 或 downloading 状态时出现 NotAllowedError。

// Check if the model is available or downloadable
const availability = await LanguageDetector.availability();

if (availability !== 'unavailable') {
  button.addEventListener('click', async () => {
    const detector = await LanguageDetector.create({
      monitor(m) {
        m.addEventListener('downloadprogress', (e) => {
          console.log(`Downloaded ${e.loaded * 100}%`);
        });
      },
    });
  });
}

2. 正在运行检测

该 API 会返回一个按置信度分数(介于 0.0 到 1.0 之间)排名的可能语言列表。

const someUserText = 'Hallo und herzlich willkommen!';
const results = await detector.detect(someUserText);

for (const result of results) {
  // result.detectedLanguage (e.g., 'de')
  // result.confidence (e.g., 0.999)
  console.log(result.detectedLanguage, result.confidence);
}

避免对非常短的短语或单个字词使用检测器,因为准确率会显著下降。

安全和环境

  • iframe:跨域 iframe 需要明确的权限政策才能访问该 API。

    <iframe
      src="https://cross-origin.example.com/"
      allow="language-detector"
    ></iframe>
    
  • Web Worker:由于权限政策较为复杂,该 API 目前不适用于 Web Worker。

  • 隐私保护:在检测过程中,不会向 Google 或第三方发送任何数据。

后备策略

在使用之前,请检查 LanguageDetector 对象在全局范围内是否可用:

if ('LanguageDetector' in self) {
  // The Language Detector API is supported.
} else {
  // Execute fallback strategy
}

如果 LanguageDetector API 不受支持,或者可用性检查返回 'unavailable',您必须优雅地回退:

  1. 远程 API 回退:将检测请求重定向到服务器端点或云 API(例如 Vertex AI Gemini API)以识别语言。
  2. 优雅降级:停用语言检测元素/按钮,并告知用户此浏览器目前不支持客户端检测,从而防止出现任何未处理的异常或崩溃。