# Round 2 QA Handoff 状态:研发自测完成,待 QA 日期:2026-06-03 分支:`codex/round2-language-settings` worktree:`/Users/ar/Projects/VoiceSnap-2.1.1-Round2` 基线 commit:`f4194105fe06baa18f0145cc59e1914f96f2d4cb` ## 1. 交付内容 本轮实现: - 新增 `LanguageMode` / `LanguageID` 配置字段。 - 扩展 `LanguageProfile`,新增 `en`。 - 新增 `internal/language` 包: - 系统语言检测。 - locale normalize。 - effective language resolver。 - 新增 `ConfigService` 语言 API: - `GetLanguageSettings` - `SetLanguageAuto` - `SetLanguageManual` - 前端 i18n 改为优先使用后端 effective language。 - 设置页新增语言版本控件: - 自动 - 中文 - English - 语言切换不改变 `SelectedModelID`,不触发模型下载、删除或迁移。 ## 2. 变更文件 后端: - `privatevoice.src/app.go` - `privatevoice.src/internal/config/config.go` - `privatevoice.src/internal/config/config_test.go` - `privatevoice.src/internal/language/` - `privatevoice.src/internal/model/profile.go` - `privatevoice.src/internal/model/registry.go` - `privatevoice.src/services/config_service.go` 前端: - `privatevoice.src/frontend/src/App.svelte` - `privatevoice.src/frontend/src/components/settings/GeneralPage.svelte` - `privatevoice.src/frontend/src/lib/i18n/index.ts` - `privatevoice.src/frontend/src/lib/i18n/zh.json` - `privatevoice.src/frontend/src/lib/i18n/en.json` - `privatevoice.src/frontend/src/lib/stores/config.ts` 项目资料: - `02-P-NBL/round-2/` ## 3. 自测结果 已执行: ```bash cd privatevoice.src/frontend npm run build ``` 结果:PASS。 日志: ```text /Users/ar/Projects/VoiceSnap-2.1.1-Round2/02-P-NBL/round-2/logs/npm-run-build-20260603.log ``` 已执行: ```bash cd privatevoice.src go test ./... -count=1 ``` 结果:PASS。 日志: ```text /Users/ar/Projects/VoiceSnap-2.1.1-Round2/02-P-NBL/round-2/logs/go-test-all-20260603.log ``` 已执行: ```bash git diff --check ``` 结果:PASS。 ## 4. QA 重点 必须重点验证: - 老用户缺少 `LanguageMode` / `LanguageID` 的旧 config 可正常升级。 - 中文系统 auto 解析为中文 UI。 - English 系统 auto 解析为 English UI。 - 其他系统语言 auto 解析为 English UI。 - 设置页选择中文后立即中文。 - 设置页选择 English 后立即 English。 - 设置页选择自动后跟随系统语言。 - 重启后语言设置持久化。 - 语言切换不改变 `SelectedModelID`。 - 语言切换不触发模型下载。 - 语言切换不删除或迁移 `models/sensevoice`。 - 语言切换后 replacement、history、热键、音频设备、Dock 设置仍保留。 - 断网已有模型识别仍通过。 ## 5. 已知风险 - 前端 build 仍有既有 Svelte a11y warning,来源为 `UpdateDialog.svelte` 和 `ToggleSwitch.svelte`,非本轮新增控件。 - `npm audit` 仍报告 6 个问题,沿用 Round 1 已知风险。 - 新用户 English UI 本轮仍使用 SenseVoice;Moonshine 要等 Round 3。 - macOS 系统语言检测使用系统 locale / fallback 环境变量,QA 应优先用 mock 或构造配置覆盖确定性路径。 ## 6. 不属于本轮 - Moonshine。 - Parakeet。 - Qwen3-ASR。 - 模型选择页。 - 模型删除/回滚。 - 30+ 语言列表。 - Developer ID 签名和 notarization。