Skip to content

feat: 翻译功能重构与沉浸式翻译初步实现#7

Merged
hubo1989 merged 21 commits into
mainfrom
featrefactor-translate
Feb 5, 2026
Merged

feat: 翻译功能重构与沉浸式翻译初步实现#7
hubo1989 merged 21 commits into
mainfrom
featrefactor-translate

Conversation

@hubo1989
Copy link
Copy Markdown
Owner

@hubo1989 hubo1989 commented Feb 5, 2026

Summary

  • 修复翻译目标语言设置:从用户配置读取,不再硬编码为中文
  • 修复 Apple Translation API 参数:正确设置 installedSource 和 target
  • 修复 PaddleOCR JSON 解析:正确处理 numpy array() 嵌套格式
  • 新增 ImmersiveTranslationView 沉浸式翻译渲染组件
  • 移除重复的翻译弹窗显示
  • 重构预览窗口组件结构,拆分为多个独立模块

技术细节

翻译引擎修复

  • TranslationEngine.swift: 修正 TranslationSession 初始化参数,installedSource 设为源语言,target 设为目标语言
  • PreviewViewModel+OCR.swift: 从 settings.translationTargetLanguage 读取用户配置的目标语言

PaddleOCR 解析修复

  • 使用括号深度匹配算法替代正则表达式,正确解析嵌套的 array([...], shape=..., dtype=...) 格式
  • 提取实际坐标数据而不是替换为空数组

沉浸式翻译组件

  • ImmersiveTranslationView.swift: 在原文下方显示译文
  • 支持虚线下划线装饰
  • 自动采样背景色和计算对比文字颜色

后续计划

完整的沉浸式翻译效果需要进一步实现:

  1. 画布重绘引擎 - 生成扩展空间的新图像
  2. 精确的布局信息提取
  3. 背景区域智能填充
  4. 用户可配置的译文样式

测试

  • 翻译目标语言正确应用
  • PaddleOCR 结果正确解析
  • 译文显示在预览窗口中

Hubert added 21 commits February 4, 2026 21:36
- Add showTranslationResult() to display translation based on translationMode setting
- Inline mode: use TranslationOverlayController at OCR text positions
- Below mode: use TranslationPopoverController as popover
- Setting changes take effect immediately on next translation
- 在填充后的区域绘制译文
- 译文字体大小根据区域高度自动调整(10-32px)
- 若译文较长,允许向右/下延伸超出原区域
- 实现内容感知填充:采样原文区域边缘像素作为填充色
- 根据背景亮度自动计算对比色(黑/白)确保可读性
主要变更:
- 修复目标语言设置:从用户配置读取翻译目标语言,不再硬编码
- 修复 Apple Translation API 参数:正确设置 installedSource 和 target
- 修复 PaddleOCR JSON 解析:正确处理 numpy array() 格式
- 新增 ImmersiveTranslationView:沉浸式翻译渲染组件
- 移除重复的翻译弹窗
- 重构预览窗口组件结构

技术细节:
- TranslationEngine: 修正 TranslationSession 初始化参数
- PaddleOCREngine: 使用括号匹配算法解析 array() 内容
- ImmersiveTranslationView: 在原文下方显示译文,支持虚线装饰
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant