协作流程(翻译协作、远程同步、冲突合并)
本页介绍翻译协作在应用中的完整闭环:打开、自动保存、远程同步、冲突检测与合并、备份与回退。内容以当前实现为准(TranslateViewModel 与 FileSystemApi)。
前置约定
- 参与对象:本地翻译文件(含文本与标注)、远程存储(服务器文件系统 API)。
- 安全保障:所有覆盖写入前,都会先尝试从远程下载旧版本做时间戳备份(SafePut)。
- 冲突定义:本地基线快照与远程最新版本内容的哈希不一致,且本地也发生了修改。
打开与基线快照
- 打开翻译工程/文件后,系统会:
- 计算当前文件的 SHA-256 哈希,作为基线;
- 载入图片清单并与 PicViewer 绑定;
- 进入自动保存与远程同步的观察状态。
自动保存与远程自动上传
- 自动保存:在空闲或固定时间间隔(约每分钟)生成快照到本地临时目录(bak/)。
- 自动上传:若检测到本地自上次基线以来无冲突变更,且与远程一致或仅本地前进,则会静默上传到远程:
- 直传使用 HttpClient 流式上传(支持进度与 MB/s);
- 文本类小文件仍用内存;大文件使用 LocalPath 直传,零拷贝,低内存占用。
手动保存(Ctrl+S 等)与冲突处理
- 正常保存:
- 若本地基线与远程一致或仅本地有新变更,则直接执行 SafePut:
- 先下载远程旧版保存到时间戳备份;
- 再上传本地新版本到远程。
- 若本地基线与远程一致或仅本地有新变更,则直接执行 SafePut:
- 冲突检测:
- 若本地基线与远程哈希不一致,同时本地也有修改,则判定冲突;
- 系统会弹出合并助手:
- 提供“以本地为准”“以远程为准”“手动合并”选项;
- 产生冲突备份到 conflict/ 目录,便于线下比对。
备份与回退
- 每次安全覆盖(SafePut)都会在本地产生带时间戳的旧版备份。
- 发生冲突时,冲突双方与合并结果都会在 conflict/ 中各自保存一份。
- 回退策略:直接将所需版本复制回工作文件,再执行一次保存即可同步到远程。
可视化进度与性能
- 进度模型包含 BytesSent/BytesTotal 与 SpeedMBps(MB/s)。
- 传输层复用连接,关闭 100-Continue,禁用自动解压,超时无限制,提升大文件稳定性。
常见问题
- 频繁冲突:确认两端是否在不同编辑器同时修改;建议使用合并助手解决一次后,保持单线程编辑。
- 上传超时或失败:检查网络与服务器可用性;应用会自动重试并给出错误提示。
- 备份占空间:可定期清理 bak/ 与 conflict/ 目录中的历史版本。