[js] 简单 AI 翻译,思源也有沉浸式翻译了

本贴最后更新于 204 天前,其中的信息可能已经天翻地覆

简单 AI 翻译(仿浏览器沉浸式翻译插件),自带 ai 引擎,也支持直接调用思源配置里的 ai,可自定义提示词。

三大功能

  1. 自带 ai 引擎,直接使用,无需任何配置,完全免费,适合小白
  2. 通过思源 ai 配置,配置完后,参数 aiEngine 设置为 siyuan 即可,适合有 ai api 的用户
  3. 选中块,仅对选中的块进行翻译,适合临时对部分文本翻译

shift + 点击或按 F5 取消翻译。

两大模式

  1. 普通模式,适用于小白用户,满足基本的翻译需求,每个块发送一次请求,响应速度更快。(但一般 api 有速率和单位时间 tokens 限制,建议选择少量段落后多次翻译)
  2. 专家模式,适用于资深玩家,对翻译效果有更高要求,一次性发送多个块数据,模型会根据上下文综合翻译,可能翻译效果更好,但心理等待时间可能更久。(同样,api 一般有超时和单位时间 tokens 限制,建议选择部分多次翻译,如果是 siyuan 引擎,需要在设置/ai/超时时间中设置一个较大的超时时间)

如果你没理解,一点没有影响,这仅仅是个概念,对正常使用没有任何影响。但如果你是高级玩家,可以通过查看源码了解这两大模式的实际区别。

使用演示

r136.gif

参数配置

更多参数配置如下

注意,这里的提示词仅供参考,由于提示词一直在不断优化,后续修改了提示词不再更新帖子,请以源码为准!

// default 默认引擎,即本代码自带引擎,完全免费,无需配置
// siyuan 思源ai引擎,即思源ai配置中设定的ai引擎
let aiEngine = 'default';

// 翻译成什么语言
// zh-cn 简体中文 zh-hk 港式繁体 zh-tw 台湾繁体
// us-en 英语 ja-jp 日语 ko-kr 韩语 ru-ru 俄语 de-de 德语
let transTo = 'zh-cn';

// 是否开启专家模式
// 专家模式将会把所有块一起发送给ai翻译,结果更准确,性能更好,但心理等待时间更久
let expertMode = false;

// ai提示词
const aiPromptCommon =  `
你是一名专业的翻译人员,母语为 {{to}}。你的任务是将输入文本翻译成标准的、地道的 {{to}}。但在执行前,请先判断输入文本的语言。

翻译规则:
1. 如果文本中包含{{to}}的句子或段落,仅{{to}}这部分文本原样输出(包括但不限于标点符号、空白符等),不要进行任何翻译、润色或改写。其他非{{to}}部分,请翻译成自然流畅、符合使用习惯的 {{to}}。
2. 再次解释说明,多种语言混合的段落,不要仅部分翻译,也不要不同的语言分开翻译,而是把所有文本看做一个整体,仅其中包含{{to}}的那部分或者说那些句子原样保留,剩余的非{{to}}要继续翻译。
3. 返回的译文必须严格保留原文本的段落数量、空格(包括行首空格)、空白符、缩进、换行符、标点符号等格式,必须与原文格式完全保持一致,不得更改。
4. 如果文本包含 HTML 标签,请合理保留标签结构并保证语义通顺。
5. 对于不应翻译的内容(如专有名词、代码等),请保留原内容不翻译。

输出说明:
1. 不要输出任何说明,解释或注释等,例如“翻译如下:”,“根据规则1,我应当xxxx”,“此处用xxxx翻译更合适”,“(注:xxx)”,“[注:xxx]”等这些解释不允许出现。
2. 不要输出JSON格式,直接返回译文文本即可,比如{"id":"译文"}错误,直接返回译文文本即可。
3. 保留所有原始格式:包括行首空格、换行、标点符号等。若某行原文以空格开头,请确保译文也以相同数量的空格开头;若原文行首无空格,则译文也不得添加空格。不得对空白符进行任何改动。比如“  hello word!”,输出“  你好世界!”,正确,而输出“你好世界!”,错误。
4. 换行符的格式必须与原文一致,不得自行添加或减少换行,标点符号和空白符也要与原文一致。
5. 不要参考历史对话内容,仅严格按照上述规则执行。

现在,请翻译以下内容:
{{text}}
`;

// 专家模式
// 专家模式将会把所有块一起发送给ai翻译,结果更准确,性能更好,但心理等待时间更久
const aiPromptExpert = `
你是一名专业的翻译人员,母语为 {{to}}。你将接收一个 JSON 格式的输入,任务是将其中的值翻译成自然流畅、符合 {{to}} 语言表达习惯的内容。

**输入格式说明:**
JSON 结构如下所示:
{"id1": "文本内容1", "id2": "文本内容2", ...}
- 每个键(如 "id1")是文本 ID,请严格保留,不做任何更改;
- 每个值是需要翻译的文本内容,只翻译 **值部分**;
- 输入内容可能是段落、句子、HTML结构等,请根据内容类型合理处理。

**翻译规则如下:**
1. **语言检测优先级最高**:请在翻译前判断每段文本中是否包含 {{to}} 的句子或段落。如果文本中包含{{to}}的句子或段落,仅{{to}}这部分文本原样输出(包括但不限于标点符号、空白符等),不要进行任何翻译、润色或改写。其他非{{to}}部分,请翻译成自然、流畅、地道的 {{to}},符合目标语言表达习惯。
2. 再次解释说明,多种语言混合的段落,不要仅部分翻译,也不要不同的语言分开翻译,而是把所有文本看做一个整体,仅其中包含{{to}}的那部分或者说那些句子原样保留,剩余的非{{to}}要继续翻译。
3. 保持原有的段落数量、空格(包括行首空格)、空白符、缩进、换行符、标点符号等格式完全一致。再次强调,必须与原文格式完全保持一致,不得更改。
4. 正确处理 HTML 标签:翻译文本内容的同时,合理保留并安置 HTML 标签,使译文语义通顺、结构正确。
5. **绝对不要翻译任何已为 {{to}} 的文本内容**,无论是什么类型的文本——这项规则必须严格执行,任何违背都会导致输出错误。
6. 不要翻译专有名词、代码或任何明确不需要翻译的内容。

**输出格式说明:**
1. 直接输出 JSON 结果,不要输出任何说明,解释或注释等,例如“翻译如下:”,“根据规则1,我应当xxxx”,“此处用xxxx翻译更合适”等内容。
2. 格式要与输入格式严格保持一致。换行符的格式也必须与原文一致,不得自行添加或减少换行,标点符号和空白符也要与原文一致。
3. 输出必须是纯粹的 JSON 文本,**不要添加任何字符在JSON的首尾,比如 {"id":"文本"}✅正确,\`\`\`json\n{"id":"文本"}\n\`\`\`❌错误**。
4. 输出必须为标准合法的 JSON 格式(键值使用双引号,必要时转义特殊字符)。

**上下文说明:**
1. 该 JSON 中的内容可能来自一篇有上下文有关联的文章,可参考上下文以提高翻译准确度,请综合判断。
2. 不要参考历史对话内容,仅严格按照上述说明执行。

现在,请翻译以下内容:
{{text}}
    `;

使用技巧

  1. 英翻中推荐 deepseek 或 chatgpt,信达雅方面感觉更给力。如果想白嫖可参考下面免费大模型方案。

  2. 诗歌等上下文关联紧密的,最好一次性请求,这样翻译效果最好,参见参数配置中的专家模式。

  3. 写到一个段落中可一次性发送,如果不方便写一个段落且要求准确度高的建议直接用专家模式。

  4. 自定义 prompt 可以参考上述参数配置。

  5. 保存译文后,如果想把译文和原文分开两个段落,只需要在译文的开头回车即可。

  6. 注意,停止翻译,当请求已响应,正在下载中时无法停止,但结果不会输出。

  7. shift + 点击或按 F5 取消翻译。

  8. 其他快捷键

    image.png

免费大模型

推荐 硅基流动大模型列表

https://openrouter.ai/models (国内网络有时不稳定)

更多免费大模型参见 https://getquicker.net/Sharedaction?code=f1743555-674d-4729-2552-08dd3978d697&fromMyShare=true

注意,这是早期汇总的,可能某些大模型已经失效。

国外大模型(chatgpt 等)推荐 V3API (收费,但性价比高)

感谢作者

image.png

代码

点这里 👇 打赏后可见!

(为什么要打赏可见,因为我想统计使用人数,感觉这个方法最方便 😄)

打赏 10 积分后可见
10 积分 • 22 打赏
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    28446 引用 • 119789 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    285 引用 • 1988 回帖

相关帖子

优质回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
    1. 好像不能去掉翻译显示原文?

    2. 偶尔会出现分屏的文档没有按钮的情况(先分屏,然后重新加载界面)

      image.png

    1 回复
  • 其他回帖
  • wilsons

    0.0.10 迎来重大更新!

    1. 支持自动跳过已是目标语言的文本;
    2. ctrl+ 点击停止翻译(在批量翻译或网速较差时可取消翻译请求,注意:已响应,正在下载中的请求无法停止);
    3. 优化提示词;

    image.png

    2 操作
    wilsons 在 2025-06-04 07:21:48 更新了该回帖
    wilsons 在 2025-06-02 21:07:46 更新了该回帖
  • wilsons

    0.0.8

    增加 alt+ 点击切换 ai 引擎;

    shift+alt 中英切换;

    ctrl+shift+alt 切换专家/普通模式;

    右键复原

    修复专家模式 ai 返回数据格式错误问题

    image.png

    1 操作
    wilsons 在 2025-06-01 22:36:28 更新了该回帖
  • wilsons

    明白了,不过思源里用 websocket 交互最方便,最好是用隐藏网页实现,用户无感知。后续空了研究下。

    不过,对于翻译,对普通用户来说,免费的 api 已经足够了。我现在用免费的 deepseek-v3 和本代码自带 ai,感觉翻译的已经非常准确了。

    不过,如果对于聊天来说,还是官方最新版最好,通过 web 版免费且强大。

    不过,这个好像更应该给 F 佬的 ai 插件提出这个方案。

    对翻译来说,感觉有点杀鸡用牛刀了。

    1 回复
  • 查看全部回帖
wilsons
正式入驻知乎了,以后新贴主要在这里。 欢迎大家订阅关注! 你的关注对我是莫大鼓励,也能让我持续产出优质内容,我们一起成长 🙏 点这里立即关注:https://www.zhihu.com/people/wilsonses