状态:v0.1 研发拆解稿
所属子项目:02-P-NBL
Round:Round 2
日期:2026-06-03
输入文档:
Round 2 的研发目标是:
建立后端可验证的语言版本配置,并让前端 UI locale 跟随后端 effective language。
本轮不接入新模型,不改变模型选择,不做模型管理 UI。
LanguageMode / LanguageID 配置字段。en language profile。ResolveEffectiveLanguage。ConfigService 语言设置 API。T0 代码现状确认
T1 LanguageProfile 扩展
T2 Config 字段与 normalize
T3 系统语言检测
T4 EffectiveLanguage resolver
T5 ConfigService 语言 API
T6 前端 i18n 初始化改造
T7 设置页语言控件
T8 文案补齐
T9 自动化测试
T10 开发自查与 QA handoff
负责人:后端 + 前端
类型:准备任务
重点文件:
privatevoice.src/internal/model/registry.goprivatevoice.src/internal/model/profile.goprivatevoice.src/internal/config/config.goprivatevoice.src/services/config_service.goprivatevoice.src/frontend/src/lib/i18n/index.tsprivatevoice.src/frontend/src/lib/stores/config.tsprivatevoice.src/frontend/src/components/settings/GeneralPage.svelteprivatevoice.src/frontend/src/lib/i18n/zh.jsonprivatevoice.src/frontend/src/lib/i18n/en.json完成标准:
负责人:后端
建议文件:
privatevoice.src/internal/model/profile.goprivatevoice.src/internal/model/registry.go工作内容:
LanguageProfile 字段是否需要补 NativeName。en profile。DefaultLanguageID。NormalizeLanguageID。ListLanguageProfiles() 的稳定排序,避免前端选项顺序随机。完成标准:
zh-CN 和 en 都可查询。负责人:后端
建议文件:
privatevoice.src/internal/config/config.go工作内容:
LanguageMode stringLanguageID stringLanguageModeAutoLanguageModeManualNormalizeLanguageModeNormalizeLanguageIDLanguageMode=autoLanguageID=zh-CN完成标准:
config.json 可正常加载。LanguageMode 不导致启动失败。LanguageID 不导致启动失败。负责人:后端
建议文件:
privatevoice.src/internal/language/detect.goprivatevoice.src/internal/language/detect_darwin.goprivatevoice.src/internal/language/detect_fallback.go工作内容:
zh-CN 或 en。完成标准:
zh* 解析为 zh-CN。en* 解析为 en。en。en。负责人:后端
建议文件:
privatevoice.src/internal/language/resolver.go工作内容:
ResolveEffectiveLanguage(cfg, detectedLocale)。EffectiveLanguageID、UILocale、DefaultModelID。完成标准:
zh-CN 返回中文。en 返回 English。负责人:后端
建议文件:
privatevoice.src/services/config_service.go工作内容:
LanguageSettings 返回结构。GetLanguageSettings()。SetLanguageAuto()。SetLanguageManual(languageID string)。zh-CN、en。完成标准:
SelectedModelID。负责人:前端
建议文件:
privatevoice.src/frontend/src/lib/i18n/index.tsprivatevoice.src/frontend/src/App.svelteprivatevoice.src/frontend/src/lib/stores/config.ts工作内容:
GetLanguageSettings()。UILocale 调用 setLocale()。navigator.language 作为后端调用失败时的兜底。完成标准:
负责人:前端
建议文件:
privatevoice.src/frontend/src/components/settings/GeneralPage.svelteprivatevoice.src/frontend/src/lib/i18n/zh.jsonprivatevoice.src/frontend/src/lib/i18n/en.json工作内容:
完成标准:
负责人:前端
建议文件:
privatevoice.src/frontend/src/lib/i18n/zh.jsonprivatevoice.src/frontend/src/lib/i18n/en.json工作内容:
完成标准:
t() 不返回 key path。负责人:后端 + 前端
建议后端测试:
config language normalize。language detector normalize。EffectiveLanguage resolver。LanguageRegistry 查询和排序。ConfigService 保存语言设置。建议前端测试或构建检查:
npm run build。完成标准:
go test ./... 通过。负责人:研发
交付内容:
完成标准:
qa-test-plan.md 独立验证。navigator.language 作为唯一事实源。LanguageID 和 SelectedModelID 混为一谈。