Skip to content

feat: 口述翻译模式 — 长按双键说话即时翻译为目标语言 #43

@appergb

Description

@appergb

背景

OpenLess 当前的语音流是「口述母语 → 润色 → 插入母语」。但有一类高频场景跨不出来:用户用中文说想法,需要插入英文给海外同事 / Slack / 邮件;或反过来用英文说,想插入中文。

希望加一个翻译模式:按住一组独立的快捷键说话,胶囊显示「正在翻译」,松开后插入目标语言。

与 issue #40(UI 语言包)不同:那是 界面语言,本 issue 是 听写内容的语言

用户故事

  • 我用中文说:"今天的发布可以推迟一周吗?"
  • 胶囊显示正在翻译
  • 光标位置插入:Could we push today's release back by a week?

反向同理。

期望行为

步骤 行为
1 按下翻译热键(区别于现有听写热键)→ 胶囊进入 listening
2 用户说话,ASR 实时转写源语种
3 松开键 → 胶囊切到「正在翻译」状态
4 LLM 用翻译 prompt 把转写文本翻成目标语言
5 译文插入光标位置

开放设计问题

热键

  • 用户描述「两个按键」——是组合键(如 ⌘ + ⇧)还是顺序双击?
  • 与现有 toggle/hold 单键热键并存时如何避免冲突?

目标语言

  • 设置一个全局「翻译目标语言」?
  • 还是按源语言反射(中→英、英→中、其他→英)?
  • 要不要在设置页加个下拉:源语 / 目标语 / 自动?

LLM 通道

  • 复用现有 OpenLessPolish (polish.rs) 的 OpenAI 兼容客户端,新增一个「翻译」prompt?
  • 还是独立的 translate.rs 模块,配置可独立切换 provider?

胶囊状态

  • 现有 polishing 已经显示「正在思考中」——是新增 translating 状态还是复用 polishing 文案改文本?
  • 推荐新增一个独立 translating,i18n key capsule.translating,未来便于扩展(语种 badge 等)

验收标准(首版)

  • 在设置中能配置:翻译热键 / 目标语言(先支持中⇄英)
  • 按住翻译热键说中文,胶囊先 listening 后显示「正在翻译」,最终插入英文
  • 反向中⇄英可用
  • 翻译失败(无 API key / 网络)时回落到「插入原文」+ 胶囊红字提示,不丢词
  • i18n key 完整覆盖新增文案:capsule.translating / settings.translate.*

非目标 / 后续

  • 多目标语种(日 / 韩 / 西 / …):先把中⇄英跑通
  • 来源语种自动检测(让 LLM 自己判断源语):如果首版做不到,先按用户指定的"源→目标"
  • 边录边翻(streaming partial translation)

参考实现路径

hotkey edge (translate)  →  Recorder.start + ASR.openSession (源语)
hotkey release          →  Recorder.stop → ASR.awaitFinal
                        →  Translate.invoke(srcText, targetLang)  ← 新模块/新 prompt
                        →  Insertion.write
                        →  History.save (mode='translate')

历史记录里建议把 mode 加一个 translate 变体(与现有 raw / light / structured / formal 并列),detail 视图可同时显示原文 + 译文,复用现有左右栏布局。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions