Skip to content
微信公众号二维码

Bob 官方公众号

translate result ​

文本翻译插件翻译成功之后,需要将数据组装为以下结构,以便 Bob 解析展示。如果只回传翻译结果,数据结构并不复杂,但是如果加上词典结果,会复杂不少,具体如下

属性类型说明
thinkInfothink info object推理类型大模型思考过程信息。流式输出阶段 thinkInfo 有值时,content 可以为空。可不传。Bob 1.15.0+ 可用
contentcontent object译文内容。存在时以它为准,忽略 toParagraphs。content、toParagraphs 和 toDict 至少要有一个有值。Bob 1.21.0+ 可用
toDictto dict object词典结果。content、toParagraphs 和 toDict 至少要有一个有值。
fromstring由翻译接口提供的源语言,可以与查询时的 from 不同。查看 语言代码。可不传。
tostring由翻译接口提供的目标语言,可以与查询时的 to 不同。查看 语言代码。可不传。
toTTStts result译文的语音合成数据。部分翻译接口会随译文一起返回语音,有的话可以传回来,Bob 会优先用它给译文发音;没有可不传。
rawany如果插件内部调用了某翻译接口,可将接口原始数据传回,方便定位问题,可不传。
toParagraphsarray译文分段拆分过后的 string 数组。 仅为兼容老插件保留,新插件请使用 content,Bob 1.21.0 起的处理方式见下方「Bob 1.21.0 更新」。Bob 1.21.0+ 废弃
fromParagraphsarray原文分段拆分过后的 string 数组,可不传。 Bob 1.6.0+ 废弃
fromTTStts result原文的语音合成数据,如果没有,可不传。 Bob 1.6.0+ 废弃

Bob 1.6.0 更新

Bob 1.6.0 之前的版本,翻译结果中 toParagraphs 属性必须有值,其他属性有更好,没有也不影响。

Bob 1.6.0 及之后的版本,翻译结果中 toParagraphs 和 toDict 任意一个有值即可。

Bob 1.15.0 更新

在流式输出的过程中(非最终结果),如果 thinkInfo 有值,译文没有值,也可以被正常渲染。

Bob 1.21.0 更新

新增 content 属性,用 format 声明译文格式,支持按 Markdown 渲染,字段说明见 content object。完整的用法示例、图片引用方式与兼容说明请务必阅读这篇博客:

Bob 1.21.0 插件翻译结果支持 Markdown

toParagraphs 标记为废弃,仍然可用,Bob 会把它归到 content 的两种格式里:

  • 丢掉空字符串元素后只有一个元素,按 content.format: plain 整篇原样显示
  • 多个元素,用换行连起来按 content.format: lines 处理,由 Bob 按原文的换行结构拼回

注意 1.21.0 之前多个元素之间会插入空行,1.21.0 起改为跟随原文的换行结构,已发布的插件显示效果会随之变化。

content 和 toParagraphs 可以同时传,用于兼容老版本 Bob:1.21.0 及以上版本以 content 为准,更早的版本会读取 toParagraphs。

content object Bob 1.21.0+ 可用 ​

该对象用于描述译文内容。format 决定 Bob 怎么理解 text。

属性类型说明
formatstring译文格式,可选值见下表,不传按 plain 处理。
textstring译文文本。流式输出时传累计的全文。
format说明
plain整篇原样按纯文本显示,不拆合段落、不裁剪。
markdown整篇原样按 Markdown 渲染。支持标题、列表、引用、代码块、表格、链接、图片、数学公式、Mermaid 图表和分割线。单个换行符会显示成段内换行,不会合并成空格。
lines逐行译文,传统机器翻译服务用这个格式。接口整段返回的字符串原样放进 text,接口按数组逐行返回的用换行连起来再放进 text(lines.join('\n'))。拼回原文换行结构的工作由 Bob 完成:第 i 行译文对应原文第 i 个非空行,只含空白的行会被忽略,每行原样保留不 trim,行数对不上时用单换行拼接。按纯文本显示,不解析 Markdown。

以下两种情况 markdown 不会被渲染,译文按纯文本显示、Markdown 标记原样保留,插件不需要为此做任何处理,但不要假设译文一定会被渲染:

  • 系统是 macOS 12,Markdown 渲染需要 macOS 13 及以上
  • 用户遇到渲染异常,在「偏好设置 - 翻译 - Markdown」中关闭了「渲染翻译结果中的 Markdown」

format 是 Bob 不认识的值时,Bob 不会当纯文本显示,而是在正文位置提示「当前版本不支持该译文格式」,用户升级后需要重新翻译。

同一次 translate 调用内,某一帧没带 format 时会沿用上一帧的值,避免流式输出时卡片在纯文本和 Markdown 之间来回切换。

Markdown 中引用插件自带的图片 ​

Markdown 译文里的图片支持 http(s) 远程地址、data: 内联和本地文件,另外可以用 bob-plugin:// 地址引用插件包内的图片:

bob-plugin://<插件 identifier>/<路径>
  • 路径以 $sandbox/ 开头时指向插件沙盒目录,与 $file 的约定一致
  • 其余路径指向插件安装目录,相对于插件根目录
md
![图标](bob-plugin://com.example.plugin/assets/logo.png)
![缓存图](bob-plugin://com.example.plugin/$sandbox/cache/chart.png)

该地址只在图片位置有意义,放在链接位置点击不会有任何动作。插件未安装、文件不存在或路径越出插件目录时,图片位置会显示 alt 文本。

think info object Bob 1.15.0+ 可用 ​

该对象用于描述推理类型的大模型思考过程信息。

属性类型说明
contentstring推理内容,直接用于显示
splitThinkTagbool是否处理译文中的 <think></think> 标签,将其作为推理内容。只对 content.format 为 plain 或 markdown(以及老的 toParagraphs)生效,lines 不支持。

部分推理模型 API 将推理内容独立成单独的字段,例如 DeepSeek 为 reasoning_content,此时应该将其解析出来放到本对象的 content 中,splitThinkTag 不用赋值。

另外有一部分推理模型 API 会将推理内容和最终结果合并到一起返回,用 <think></think> 标签来区分,针对这种 API 你可以自己将其拆分开,然后把推理的部分放到本对象的 content 中。还有一个更简单的办法是将 splitThinkTag 设置为 true,content 不赋值,这样 Bob 会自动将译文中的 <think></think> 标签的内容拆分出来作为推理过程。

to dict object ​

该对象用于描述词典结果,相对比较复杂。

属性类型说明
wordstring单词/词组,一般英文查词会有。 Bob 0.6.0+ 可用
phoneticsarray音标数据数组,一般英文查词会有,见 phonetic object。
partsarray词性词义数组,一般英文查词会有,见 part object。
exchangesarray其他形式数组,一般英文查词会有,见 exchange object。
relatedWordPartsarray相关的单词数组,一般中文查词会有,表示和该中文对应的英文单词有哪些,见 related word part object。
additionsarray附加内容数组,考虑到以上字段无法覆盖所有词典内容,比如例句、记忆技巧等,可将相应数据添加到该数组,最终也会显示到翻译结果中,见 addition object。

phonetic object ​

该对象用于描述音标。

属性类型说明
typestring音标类型,值可以是 us 或 uk,分别对应美式音标和英式音标。
valuestring音标字符串。例如 ɡʊd。
ttstts result音标发音数据。

其中 type 为必须包含的字段,value 或 tts 至少包含一个。

part object ​

该对象用于描述某单词的词性和词义。

属性类型说明
partstring单词词性,例如 n.、vi....
meansarray词义 string 数组。

exchange object ​

该对象用于描述某单词的其他形式。

属性类型说明
namestring形式的名字,例如 比较级、最高级...
wordsarray该形式对于的单词 string 数组,一般只有一个

该对象用于描述一组与所查询的文本相关的单词,分组的标准为词性。

属性类型说明
partstring词性。
wordsarray相关的单词数组,见 related word object。

如果无法获取,part 可以不传,但 words 中至少要有一个元素。

该对象用于描述一个单词。

属性类型说明
wordstring单词本身。
meansarray词义 string 数组。

word 必须有值,means 可以不传。

addition object ​

该对象用于描述一段附加内容。

属性类型说明
namestring附加内容名称。
valuestring附加内容。

示例 ​

内容较长,内附 JSON 对应的效果图,请点击展开:

返回 Markdown 译文的示例 Bob 1.21.0+ 可用
json
{
    "from": "en",
    "to": "zh-Hans",
    "content": {
        "format": "markdown",
        "text": "## 摘要\n\n- 第一点\n- 第二点\n\n| 列 A | 列 B |\n| --- | --- |\n| 1 | 2 |"
    }
}
翻译「good」的示例
json
{
    "from": "en",
    "to": "zh-Hans",
    "fromParagraphs": [
        "good"
    ],
    "toParagraphs": [
        "好"
    ],
    "toDict": {
        "word": "good",
        "phonetics": [
            {
                "type": "us",
                "value": "ɡʊd",
                "tts": {
                    "type": "url",
                    "value": "http://xxxxxxxxxx..."
                }
            },
            {
                "type": "uk",
                "value": "ɡʊd",
                "tts": {
                    "type": "url",
                    "value": "http://xxxxxxxxxx..."
                }
            }
        ],
        "parts": [
            {
                "part": "adj.",
                "means": [
                    "好的",
                    "优良的",
                    "愉快的",
                    "虔诚的"
                ]
            },
            {
                "part": "n.",
                "means": [
                    "好处",
                    "善行",
                    "慷慨的行为"
                ]
            },
            {
                "part": "adv.",
                "means": [
                    "好"
                ]
            },
            {
                "part": "n.",
                "means": [
                    "(Good)人名",
                    "(英)古德",
                    "(瑞典)戈德"
                ]
            }
        ],
        "exchanges": [
            {
                "name": "比较级",
                "words": [
                    "better"
                ]
            },
            {
                "name": "最高级",
                "words": [
                    "best"
                ]
            },
            {
                "name": "复数",
                "words": [
                    "goods"
                ]
            }
        ],
        "additions": [
            {
                "name": "标签",
                "value": "初中/高中/CET4/CET6/考研"
            }
        ]
    },
    "fromTTS": {
        "type": "url",
        "value": "http://xxxxxxxxxx..."
    },
    "toTTS": {
        "type": "url",
        "value": "http://xxxxxxxxxx..."
    },
    "raw": {}
}

效果图:

tranlate-example-1
翻译「愤怒」的示例
json
{
    "from": "zh-Hans",
    "to": "en",
    "fromParagraphs": [
        "愤怒"
    ],
    "toParagraphs": [
        "anger"
    ],
    "toDict": {
        "relatedWordParts": [
            {
                "part": "名词",
                "words": [
                    {
                        "word": "anger",
                        "means": [
                            "愤怒",
                            "怒",
                            "怒气",
                            "怒火",
                            "愤",
                            "火气"
                        ]
                    },
                    {
                        "word": "rage",
                        "means": [
                            "愤怒",
                            "怒气",
                            "怒",
                            "怒火",
                            "盛怒",
                            "忿怒"
                        ]
                    },
                    {
                        "word": "wrath",
                        "means": [
                            "愤怒",
                            "雷霆"
                        ]
                    },
                    {
                        "word": "fury",
                        "means": [
                            "愤怒",
                            "怒",
                            "暴怒",
                            "怒火",
                            "怒气",
                            "盛怒"
                        ]
                    },
                    {
                        "word": "outrage",
                        "means": [
                            "暴行",
                            "愤怒",
                            "侮辱"
                        ]
                    },
                    {
                        "word": "indignation",
                        "means": [
                            "愤慨",
                            "愤怒",
                            "义愤"
                        ]
                    },
                    {
                        "word": "pique",
                        "means": [
                            "愤怒"
                        ]
                    },
                    {
                        "word": "bile",
                        "means": [
                            "胆汁",
                            "愤怒",
                            "坏脾气"
                        ]
                    },
                    {
                        "word": "vehemence",
                        "means": [
                            "愤怒"
                        ]
                    },
                    {
                        "word": "huff",
                        "means": [
                            "愤怒",
                            "发怒"
                        ]
                    },
                    {
                        "word": "umbrage",
                        "means": [
                            "愤怒"
                        ]
                    },
                    {
                        "word": "teen",
                        "means": [
                            "愤怒"
                        ]
                    },
                    {
                        "word": "vehemency",
                        "means": [
                            "愤怒"
                        ]
                    },
                    {
                        "word": "paddy",
                        "means": [
                            "稻田",
                            "稻谷",
                            "稻",
                            "谷",
                            "稻子",
                            "愤怒"
                        ]
                    }
                ]
            },
            {
                "part": "形容词",
                "words": [
                    {
                        "word": "angry",
                        "means": [
                            "愤怒",
                            "生气",
                            "恼怒",
                            "恼",
                            "忿怒",
                            "忧郁"
                        ]
                    },
                    {
                        "word": "indignant",
                        "means": [
                            "愤怒",
                            "愤慨",
                            "气愤",
                            "愤愤不平",
                            "激愤",
                            "愠"
                        ]
                    },
                    {
                        "word": "raging",
                        "means": [
                            "愤怒",
                            "熊熊",
                            "炽灼的"
                        ]
                    }
                ]
            },
            {
                "part": "动词",
                "words": [
                    {
                        "word": "pique",
                        "means": [
                            "愤怒",
                            "激怒"
                        ]
                    },
                    {
                        "word": "huff",
                        "means": [
                            "愤怒",
                            "发怒"
                        ]
                    }
                ]
            }
        ]
    },
    "raw": {}
}

效果图:

tranlate-example-2
翻译句子的示例
json
{
    "from": "en",
    "to": "zh-Hans",
    "fromParagraphs": [
        "macOS Catalina gives you more of everything you love about Mac.",
        "Experience music, TV, and podcasts in three all-new Mac apps.",
        "Enjoy your favorite iPad apps now on your Mac.",
        "Extend your workspace and expand your creativity with iPad and Apple Pencil.",
        "And discover smart new features in the apps you use every day.",
        "Now you can take everything you do above and beyond."
    ],
    "toParagraphs": [
        "macOS Catalina为您提供了有关Mac的所有喜爱内容。",
        "在三个全新的Mac应用程序中体验音乐,电视和播客。",
        "立即在Mac上享受您喜爱的iPad应用程序。",
        "使用iPad和Apple Pencil扩展工作空间并扩展您的创造力。",
        "并在每天使用的应用程序中发现智能的新功能。",
        "现在,您可以将自己所做的一切超越一切。"
    ]
}

效果图:

tranlate-example-3