# @browsermt/bergamot-translator 中文文档

规范地址：https://npmcn.com/package/%40browsermt/bergamot-translator/

版本：0\.4\.9
npm 元数据更新时间：2022-10-03T17:06:04.580Z
中文译文更新时间：2026-11-08T16:26:59.264Z
软件包许可：MPL-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40browsermt/bergamot-translator
原文对照：https://npmcn.com/package/%40browsermt/bergamot-translator/?lang=original
项目主页：https://github.com/browsermt/bergamot-translator#readme
源码仓库：https://github.com/browsermt/bergamot-translator

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：5.3 MB，7 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2022-08-11T13:11:14.290Z
- 最新版本发布：2022-10-03T17:06:04.419Z
- 近 30 天下载量：30129（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：4（近 12 个月 0 个）

## 中文简介

交叉平台 C++ 库 专注于消费级设备上优化的机器翻译.

## 安装

```sh
npm install @browsermt/bergamot-translator
```

也可以使用：`pnpm add @browsermt/bergamot-translator`、`yarn add @browsermt/bergamot-translator`、`bun add @browsermt/bergamot-translator`

## README

# 安装

```bash
npm install @browsermt/bergamot-translator
```

# 快开始

```js
import {BatchTranslator} from "@browsermt/bergamot-translator/translator.js";

const translator = new BatchTranslator();

const response = await translator.translate({
  from: "en",
  to: "es",
  text: "Hello <em>world</em>!",
  html: true
});

console.log(response.target.text);

// Stops worker threads
translator.delete();
```

# 通过量对延迟

这个套件有两种翻译执行:

-   [延迟优化翻译器](https://npmcn.com/package/%40browsermt/bergamot-translator/#readme-latencyoptimisedtranslator) 更有用的交互会话,比如Google Translate, 在那里你只致力于一次翻译一个输入.
-   [批量翻译器](https://npmcn.com/package/%40browsermt/bergamot-translator/#readme-batchtranslator) 为尽快处理大量翻译而优化(但个别翻译可能需要一些时间),例如翻译一大批字符串或文档中的所有段落.

## 灯光变换器

最适合交互使用的翻译。 跑出单工一线和分批一号跑出,以尽快得到响应. 它会取消任何尚未处理的翻译 如果你提交新的翻译.

```js
const translator = new LatencyOptimisedTranslator({
  pivotLanguage?: string?,
  registryUrl?: string,
  workerUrl?: string,
  downloadTimeout?: number,
  cacheSize?: number,
  useNativeIntGemm?: boolean,
})
```

-   `pivotLanguage` - 语言编码,在没有直接翻译模式的情况下作为中间体使用。 默认为 `"en"`设置为 `null` 以禁用导线.
-   `registryUrl` - 查看一个模型及其路径清单。 默认为 `https://storage.googleapis.com/bergamot-models-sandbox/0.3.3/registry.json`。 。 。 .
-   `workerUrl` - 请说 `translator-worker.js`默认为 `"worker/translator-worker.js"` 相对于路径 `translator.js`。 。 。 .
-   `downloadTimeout` - 我们试图在失败前下载模型文件。 默认为 `60000` 或60秒钟。 设定为 `0` 以禁用.
-   `cacheSize` - 保存的翻译缓存中最高刑期(每个工人,工人不分享缓存)。 这是一个理想的极限,因为它是一个散列图, 在实践中大约1/3th被占用。 如果设置为 `0`,则翻译缓存被禁用(默认值).
-   `useNativeIntGemm` - 在装入WASM 二进制时, 尝试与本地 IntGEMM 执行链接 。 这只有在"火狐之夜"的特权扩展背景下实施. 如果失败,它将永远回到包括的执行。 默认为 `false`。 。 。 .

### 翻译( )

```js
const {request, target: {text:string}} = await translator.translate({
  from: string,
  to: string,
  text: string,
  html?: boolean,
  qualityScores?: boolean
})
```

提交翻译请求。 其中许多是分批处理的。 下个勾点将开始一个批次(如果有工人可用).

-   `from` - 源语言的语言代码,例如:. `"de"`
-   `to` - 目标语言的语言代码,例如:. `"en"`
-   `text` - 要翻译的文本串, 例如:. `"Hallo Welt!"`
-   `html` - 布尔表示是否 `text` 仅包含纯文本或 HTML
-   `qualityScores` - 是否计算质量分数。 并非所有模型都支持这一点,你需要为它装入一个单独的质量分数模型文件. 质量分数作为 `<font x-bergamot-sentence-quality="">` 财务报告和审定财务报表 `<font x-bergamot-word-quality="">` 围绕输出中的句子和单词。 当启用时,输出总是HTML,无论输入是否是.

回返情况:

向翻译响应对象承诺 `target.text` 是翻译输出的文本或 HTML,以及 `request` 参考翻译请求原件.

### 删除( )

```js
translator.delete()
```

用 a 取消所有未决请求 `CancelledError` 并立即解雇工人。 这将释放所有使用的资源.

在节点语境下,你需要调用这个,否则你的脚本不会退出,因为翻译仍然会听工人的留言.

## 批量翻译器

```js
const translator = new BatchTranslator({
  pivotLanguage?: string?,
  registryUrl?: string,
  workerUrl?: string,
  downloadTimeout?: number,
  cacheSize?: number,
  useNativeIntGemm?: boolean,
  workers?: number,
  batchSize?: number,
})
```

一般翻译选项 :

见 [延迟优化翻译器](https://npmcn.com/package/%40browsermt/bergamot-translator/#readme-latencyoptimisedtranslator)。 。 。 .

批量转换器特定选项 :

-   `workers` - 工人线条的数量。 这些是翻译的全能实例,他们自己的模型副本被装入. 此是上界相. 如果不是很多工人可以被喂饱的话,它不会创造出新的工人. 1. 默认是 `1`。 。 。 .
-   `batchSize` - 每批翻译请求的数量。 所有翻译请求中的所有句子被打入一串矩阵操作. 由于批量尺寸较大,翻译者拥有更多的材料来寻找填补矩阵的理想的句子. 然而,只有整批完成后,才能获得每批请求的结果. 默认为 8.

### 翻译( )

```js
const {target: {text:string}} = await translator.translate({
  from: string,
  to: string,
  text: string,
  html?: boolean,
  qualityScores?: boolean,
  priority?: number
})
```

提交翻译请求。 其中许多是分批处理的。 下个勾点将开始一个批次(如果有工人可用).

-   (见 [即时变换器. translate ()](https://npmcn.com/package/%40browsermt/bergamot-translator/#readme-translate) 对于大多数选项)
-   `priority` - 在将翻译请求分为批次发给工人时,首先考虑数量较少的请求。 例如,如果在翻译网页时,可以给当前框架中的部件请求一个更低的数字,以确保它们先得到处理.

### 删除( )

```js
translator.remove(request => {
  // true deletes the request from the queue.
  return true;
})
```

从翻译队列中删除请求, 即当这些请求还没有被发送给工人时才会被删除 .

过滤器函数应该返回每个请求的正则-ish。 他们的承诺遭到拒绝 `CancelledError` 错误.

### 删除( )

```js
translator.delete()
```

用 a 取消所有未决请求 `CancelledError` 并立即终止所有工人。 这将释放所有使用的资源.

# 模型

两位翻译都接受 `backing` 选项,它告诉它从哪里获得模型数据和翻译引擎执行。 他们默认使用 `BergamotTranslator` 获得其模型的 [火狐翻译](https://github.com/mozilla/firefox-translations)。 。 。 .

为了定制模型,重新执行 `loadModelRegistry` 财务报告和审定财务报表 `loadTranslationModel` 方法。 。 .

`loadModelRegistry()` 很难把承诺还给看起来像 `{from: string, to: string, ...}[]`编辑 `from` 财务报告和审定财务报表 `to` 键作为模型选择的键.

`loadTranslationModel()` 与 ArrayBuffers 返回承诺 `model`, (中文(简体) ), `shortlist`, (中文(简体) ), `vocabs`,可选择 `qualityModel`它可以包括: `config` 对象也一样.

从data.statmt.org中加载模型的替代执行实例,即与 [本地翻译](https://translatelocally.com/)数字 :

```js
class CustomBacking extends TranslatorBacking {
    async loadModelRegistery() {
        const response = await fetch('https://translatelocally.com/models.json');
        const {models} = await response.json();

        // Add 'from' and 'to' keys for each model. Since theoretically a model
        // can have multiple froms keys in TranslateLocally, we do a little
        // product here.
        return models.reduce((list, model) => {
            try {
                const to = first(Intl.getCanonicalLocales(model.trgTag));
                for (let from of Intl.getCanonicalLocales(Object.keys(model.srcTags))) {
                    list.push({from, to, model});
                }
            } catch (err) {
                console.log('Skipped model', model, 'because', err);
            }

            return list;
        }, []);
    }

    async loadTranslationModel({from, to}) {
        // Find that model in the registry which will tell us about its files
        const entries = (await this.registry).filter(model => model.from === from && model.to === to);

        // Prefer tiny models above non-tiny ones
        entries.sort(({model: a}, {model: b}) => (a.shortName.indexOf('tiny') === -1 ? 1 : 0) - (b.shortName.indexOf('tiny') === -1 ? 1 : 0));

        if (!entries)
            throw new Error(`No model for '${from}' -> '${to}'`);

        const entry = entries[0].model;

        const response = await fetch(entry.url, {
            integrity: `sha256-${entry.checksum}`
        });

        // pako from https://www.npmjs.com/package/pako
        const archive = pako.inflate(await response.arrayBuffer());

        // untar from https://www.npmjs.com/package/js-untar
        const files = await untar(archive.buffer);

        const find = (filename) => {
            const found = files.find(file => file.name.match(/(?:^|\/)([^\/]+)$/)[1] === filename)
            if (found === undefined)
                throw new Error(`Could not find '${filename}' in model archive`);
            return found;
        };

        // YAML.parse is found in worker/translator-worker.js
        const config = YAML.parse(find('config.intgemm8bitalpha.yml').readAsString());

        const model = find(config.models[0]).buffer;

        const vocabs = config.vocabs.map(vocab => find(vocab).buffer);

        const shortlist = find(config.shortlist[0]).buffer;

        // Return the buffers
        return {model, vocabs, shortlist, config};
    }
}

const translator = new BatchTranslator(options, new CustomBacking(options));
```

# 支持的语言

见 [https://github.com/mozilla/firefox-翻译-模型#目前支持的语言](https://github.com/mozilla/firefox-translations-models#currently-supported-languages)您可能需要设置 `registryUrl` 选项以指向最近的发布.

## 常见问题

### @browsermt/bergamot-translator 是什么？

交叉平台 C\+\+ 库 专注于消费级设备上优化的机器翻译\.

### 如何安装 @browsermt/bergamot-translator？

在项目目录运行 npm install @browsermt/bergamot-translator，或使用 pnpm add / yarn add / bun add。

### @browsermt/bergamot-translator 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/browsermt\_\_bergamot-translator 是否存在。

### @browsermt/bergamot-translator 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @browsermt/bergamot-translator 可以商用吗？

@browsermt/bergamot-translator 使用 MPL-2\.0 许可。弱 Copyleft：可以商用，也可以和闭源代码一起使用；但如果分发时修改了 MPL 授权的文件，这些文件的修改需以 MPL 开源。以上为概括，不构成法律意见，请以许可原文为准。

### @browsermt/bergamot-translator 的下载量有多少？

根据 npm 官方下载统计，@browsermt/bergamot-translator 在 2026/10/09 – 2026/11/07 这 30 天内被下载 30,129 次，日均约 1,004 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @browsermt/bergamot-translator 还在维护吗？

最新版本 0\.4\.9 发布于 2022/10/04（4 年前）；至今共发布 4 个版本，其中过去 12 个月发布了 0 个；首次发布于 2022/08/11。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

