Skip to content

[feature] 自定义目标语言 + Shift 组合键触发翻译输出(合并 #7) #4

@Elias-Lee-SC

Description

@Elias-Lee-SC

背景

原标题"加入繁体输出及更改快捷键"——但与其逐个维护语言列表(简体 / 繁体 / 英文 / 日文…),不如做一个 Claude Code 式的开放设计:用户在设置里用任意自然语言文本描述目标语言,prompt 注入交给 LLM 处理,App 不维护任何语言枚举。

这同时也覆盖 #7 提的"中文语音自动翻译为英文插入"——本 issue 是它的通用版本。

设计

触发方式

录音键 + Shift 组合键。即用户按住快捷键说话时,同时按下 Shift,结束录音后走"翻译输出"管线而不是普通润色管线。

  • 单按录音键:原行为(润色 → 插入)
  • 录音键 + Shift:翻译输出(按目标语言转换 → 插入)

具体的"是否同时按下 Shift"在 hotkey 边沿事件里捕获 modifier flag 即可。

设置项

Settings → 录音 里加一个文本输入框:

```
翻译目标语言: [ 繁体中文 ]
e.g. English / 日本語 / 繁体中文 / 美式英语 / 学术正式英文
```

字段名:`translationTargetLanguage: string`,默认空字符串(关闭翻译模式 → Shift 组合键无效或回落到普通润色)。

用户填什么就直接拼进 LLM prompt,App 不解析、不查表、不映射。这样:

  • "繁体中文" / "Traditional Chinese" / "台湾用语的繁体中文" 都能用
  • "美式英语,正式邮件风格" 这种带风格的描述也能用
  • 加新语言不需要发版

Prompt 注入

LLM polish 调用增加一个新 mode:`translate`。Prompt 模板大致:

```
你刚收到一段语音转写。请把它翻译成 `{translationTargetLanguage}`,
保持原意和语气,不增不减。直接输出翻译结果,不要任何解释或前缀。

转写:
{transcript}
```

走现有 Ark / OpenAI 兼容通道,复用 `polish.rs` 已有的 chat completions 接口,只是 prompt 不同。

UI 提示

胶囊窗口在翻译模式下顶部显示"翻译 → `{language}`"短标签,跟普通听写区分(同 #7 的 UI 设计)。

实现要点

  1. `UserPreferences` 增字段 `translation_target_language: String`(默认空)
  2. `HotkeyMonitor` 在边沿事件里附带 modifier 状态(Shift held 与否)
  3. `Coordinator::end_session` 根据 modifier 决定走 `PolishMode::*` 还是新的 `PolishMode::Translate`
  4. `polish.rs` 新增 translate prompt 模板
  5. 前端 Settings → 录音 加一行输入框 + 简单 placeholder 例子
  6. 胶囊 UI 增加翻译模式标签

默认 / Fallback

  • `translationTargetLanguage` 为空 → Shift 组合不生效,行为等同单按录音键(普通润色)
  • LLM 调用失败 → 回落到原始转写直接插入(保持 CLAUDE.md "用户的话不会丢"约定)

Closes

合并并取代 #7#7 原方案是固定中→英 + 任意双键,本 issue 扩展为通用目标语言 + 固定 Shift 组合键)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions