Repository navigation
实现智能翻译,支持书名简介、全书翻译及独立听书 - #25
Merged
Merged
Conversation
zilorn
force-pushed
the
codex/smart-translation
branch
from
October 17, 2026 10:41
3cc81f9 to
9a76695
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
解决的问题 / Problem
阅读外文书籍时需要划词翻译、双语对照、可复用的译文和一致的术语。本 PR 同时修复生成术语表期间换章后新章无法翻译、德语被英文常见词误判,以及显示模式与听书文本相互覆盖的问题。
Fixes #21
改动后的行为 / Resulting behavior
readingText,选择听书使用原文或译文,在双语模式下也可切换。原生与 HTTP 听书、播放预取及用户主动触发的音频预热共用该选择,保留原文高亮/跟读坐标、切换位置和暂停状态。更改听书文本不重启显示翻译。Das war alles, was er wusste.会翻译,在折叠模式也有展开按钮。拉丁语种缺少可靠检测时交给服务自动判断,可能多请求已是目标语言的文本,以避免漏译。docs/images/translation-*.png;逐提交检查无新增二进制文件。中英文文案、使用文档及技能参考已更新。截图只保存在仓库外:
/tmp/readerx-pr25-improved-{390,1280}-{scroll,paged}.png(管理页)及/tmp/readerx-pr25-reading-{390,1280}-{scroll,paged}.png(阅读设置)。已检查手机与桌面图。当前工具无法上传 GitHub 附件,截图通过本地任务交付,不提供失效的仓库图片链接。验证 / Validation
translation-manual-test.mjs新增实际元数据模块回归,覆盖成对翻译、空简介、部分命中补译、完整强制重译、简介持久化/失效、失败/取消保留旧结果、自动开关、保活页暂停、原文切换、共享并发与排队取消。既有 translation-test、translation-storage-test、translation-position-test、glossary-test 均通过;Rust book_store 32 项、data_transfer 38 项通过。/tmp/readerx-pr25-metadata-{390,1280}-{detail,discovery,sheet,settings}.png,未提交二进制图片。node scripts/translation-manual-test.mjs通过。使用实际提供商/引擎/配置/浏览器内存后端,覆盖两种 AI 协议、书名开关/缓存/持久化/配置隔离、失败与取消后迟到结果不覆盖、术语表更新不隐藏书名、仅处理已下载正文、15 段分批与取消后继续;原书名与正文保持不变。/tmp/readerx-pr25-manual-*.png。pnpm exec tsc --noEmit通过。pnpm run i18n:check通过,无缺失 key。未引用扫描排除整个词典目录后,报告 20 个既有未引用 key(提示,不失败);翻译选项及章节状态改用完整 key 映射,避免动态拼接导致误报。pnpm build通过。node scripts/translation-test.mjs、node scripts/glossary-test.mjs通过。覆盖 Chat Completions / Responses 两种协议、空值与纯空白的自定义地址,翻译及术语表均不触发 HTTP 请求;内置默认地址与完整自定义路径保持可用。保存失败保留草稿且无成功提示,重试成功后确认提示与关闭均正常。node scripts/i18n-check-test.mjs通过。在隔离的最小项目中执行真实扫描器,确认词典定义不计作引用、未使用的translation.saved会报告、加入 UI 引用后不再报告,并覆盖删除引用、标签映射及英语复数变体。GlossarySheet与Toasts组件在独立本地验证页、浏览器内存后端下检查 390px / 1280px,均确认保存后关闭抽屉并出现成功提示。截图在仓库外通过本地任务交付;未连接真实 AI 服务或原生宿主。node scripts/translation-test.mjs、translation-storage-test.mjs、translation-position-test.mjs通过。覆盖取消的术语表与新任务收尾竞争、真实阅读调度换章、德语误判、强制重译、取消、缓存复用、全局/本书听书偏好独立合并及旧配置默认值。node scripts/tts-replacements-test.mjs、tts-follow-recovery-test.mjs通过。覆盖实际 Reader 接线、原生/HTTP 合成文本、三种显示模式、窗口/整本音频预热、原文坐标、暂停和取消后迟到译文不出声。src-tauri执行cargo test --locked -p readerx --lib book_store(32 项)和cargo test --locked -p readerx --lib data_transfer(38 项),共 70 项通过,包括真实 SQLite 迁移、原文关联缓存、租约、快照与备份往返。手动复现:开启智能翻译并配置 AI 服务 → 打开外文书 → 在双语模式下独立切换阅读文本,确认页面排版不变、听书使用所选文本 → 切换显示模式,确认听书偏好不变 → 阅读设置进入翻译管理 → 单章重译、取消/重试 → 编辑或重新生成术语表。
取消回归:清空本书术语表并开启自动生成 → 开始翻译后在术语表响应前换章 → 新章应自动翻译,无需重试。语种回归:目标英语、双语折叠,德语示例段落应提供展开翻译按钮。
数据与兼容性 / Data and compatibility
简介新增可选
introEnabled/introTranslation(source/key/text),继续复用translation_books.stateJSON;全局新增autoTranslateMetadata,旧配置缺省 false。无需数据库迁移,原始书名/简介不变;发现页未入架译文仅保留会话缓存,全部沿用翻译数据不参与同步/备份的约束。数据库保持
user_version=4。书名显示开关titleEnabled与titleTranslation(source/key/text)作为可选字段保存在既有translation_books.stateJSON 中,旧书缺省关闭,无需新增迁移;沿用翻译数据不参与同步/备份的约束。v1/v2 自动新增翻译表,v3 仅重建缺少可追溯原文的旧译文缓存,保留书籍、局部设置及术语表。此次不新增数据库迁移。全局设置和本书覆盖项增加
readingText,缺省为original;已有mode仅用于显示,原有书籍与进度不变。译文听书仅转换合成文本,原文正文和阅读坐标不被改写。手动重译复用现有缓存和租约命令。翻译数据、本书配置、术语表及全局翻译配置暂不参与同步/备份。快照清空翻译表并 VACUUM,避免凭据残留;v1/v2 快照跳过不存在的翻译表。服务请求、响应正文和凭据不进入日志。
提交前检查 / Checklist