@browsermt/bergamot-translator

中文文档
0.4.9发布于 2022/10/04MPL-2.0ES Module零依赖近 30 天下载 3万

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

中文使用文档
文档目录7 节
  1. 灯光变换器
  2. 翻译( )
  3. 删除( )
  4. 批量翻译器
  5. 翻译( )
  6. 删除( )
  7. 删除( )

安装

npm install @browsermt/bergamot-translator

快开始

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();

通过量对延迟

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

  • 延迟优化翻译器 更有用的交互会话,比如Google Translate, 在那里你只致力于一次翻译一个输入.
  • 批量翻译器 为尽快处理大量翻译而优化(但个别翻译可能需要一些时间),例如翻译一大批字符串或文档中的所有段落.

灯光变换器

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

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。 。 。 .

翻译( )

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 参考翻译请求原件.

删除( )

translator.delete()

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

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

批量翻译器

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

一般翻译选项 :

见 延迟优化翻译器。 。 。 .

批量转换器特定选项 :

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

翻译( )

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

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

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

删除( )

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

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

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

删除( )

translator.delete()

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

模型

两位翻译都接受 backing 选项,它告诉它从哪里获得模型数据和翻译引擎执行。 他们默认使用 BergamotTranslator 获得其模型的 火狐翻译。 。 。 .

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

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

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

从data.statmt.org中加载模型的替代执行实例,即与 本地翻译数字 :

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-翻译-模型#目前支持的语言您可能需要设置 registryUrl 选项以指向最近的发布.

版本与发布记录

@browsermt/bergamot-translator 共发布 4 个版本,首次发布于 2022/08/11;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.4.9latest2022/10/044 年前
0.4.82022/09/204 年前
0.4.62022/08/194 年前
0.4.52022/08/114 年前

关于 @browsermt/bergamot-translator 的常见问题

@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 和提交记录判断。