feat: 体积会话缓存 + 弹窗本地化修复(中文→本地化、补全俄语)+ 受保护应用迁移预警 - #55
Merged
Conversation
- 新增会话级 sizeCache(key=AppItem.id),独立于扫描结果,重扫不丢失已算体积 - 缓存条目记录 bundle mtime,应用原地更新时自动失效并后台重算 - 所有扫描路径统一走 applySizes:命中项在赋值前填充(无"计算中"闪烁),仅未命中项后台并行计算 - 移除按 name 查找的 recalculateAppSize(同名应用会永久卡在"计算中")与 calculateSizes 开关,体积匹配改为按 id Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
弹窗标题/按钮已本地化但正文仍显示中文,根因是 Localizable.xcstrings 中部分多行键存储为字面量 "\n"(反斜杠+n),而 Swift 字面量编译为真实 换行符,导致 .localized 查找不匹配并回退到中文源串。 - 规范化 16 个多行键:14 个改为真实换行符以匹配运行时查找,删除 2 个 已有正确孪生键的孤立重复键,并规范化 271 处译文值。中文(源语言) 保持不变,其余语言现可正确本地化。 - Stub Portal 原生启动器(外部存储未连接对话框)改为按系统语言选择 文案(英文兜底),重新编译通用二进制 StubLauncherBinary。 - Bash 兜底启动器对话框改为英文。 仅影响新迁移的应用;已迁移的 Stub Portal 在重新迁移前仍使用旧启动器。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
结构性换行键修复后,部分用户可见字符串能正确解析了,但其俄语 译文本身是英文(甚至是错误的拉丁转写,如 "Eto prilozhenie..."), 导致俄语界面里弹窗正文/状态提示/错误信息显示为英文。 为 57 条用户可见字符串补全规范的俄语翻译,覆盖: - App Store 外部安装、自更新应用迁移、数据目录迁移/还原/规范化等 确认弹窗正文 - DataDirError / AppMoverError 错误描述 - 状态徽章悬浮说明(Sparkle/Electron/已锁定/未锁定/外部安装) - 数据目录类型与优先级标签(重要/推荐/可选/自定义等)、按钮与空状态 仅修改 ru 译文值;格式化占位符(%@/%lld/%1$@)与源串完全一致, 弹窗内引用的按钮名与实际俄语按钮一致。日志字符串维持英文。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
App Store 应用与 root 拥有的应用,其本地副本通常无法被直接删除或替换, 自动迁移可能以「权限不足」失败。迁移前检测此类应用并弹出预警,说明可改用 访达手动拖动 + AppPorts 创建链接,用户可选择「仍然迁移」或「取消」。 迁移收尾逻辑抽出为 proceedWithMigration 复用。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
新功能「迁移受保护应用前预警」引入了 4 条经 .localized 的中文字符串, 但未加入字符串目录,非中文界面会回退显示中文(与本次修复的问题同类)。 为以下字符串补充英文与俄语翻译(zh-Hans 源 + en + ru,多行键使用真实换行符): - 受保护的应用(标题) - 仍然迁移(按钮) - 预警正文(App Store / root 受保护说明) - 迁移失败的权限不足友好提示 其余语言暂随源回退,待后续补全。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits. |
Folder Mirror(本次主改动):迁移/链接 appSuiteFolder 与 singleAppContainer 时,本地不再对整个文件夹做符号链接,而是创建真实文件夹逐项镜像外部套件—— 内部每个 .app 为 Stub Portal(真实 .app 壳,可被 Launch Services / Spotlight 索引),其余文件/子目录为指向外部的符号链接,并写入隐藏标记 .appports-folder-portal.plist 记录外部真实路径。 - createFolderMirrorPortal:逐项创建 Stub/符号链接,单项 Stub 失败回退为符号链接 - refreshFolderMirror:rescan 时同步外部套件的新增/删除条目与内部 Stub 版本, 递归 lsregister 刷新索引;旧版整体符号链接文件夹安全跳过 - localPortalKind / 扫描器据标记识别已链接、孤立链接,体积按外部真实文件夹计算 - 解链删除本地镜像(外部保留),还原复制外部套件回本地为真实文件夹 - 旧版整体符号链接文件夹保持兼容,仅新迁移使用 Folder Mirror transparentHybrid(原型,feature flag transparentHybridEnabled,默认关闭): 本地为真实 .app 壳 + Stub 启动器,并把 Contents 下未注入的文件/子目录符号链接 镜像到外部真实 app,使硬编码到 /Applications/X.app/Contents/... 的内部路径仍可 解析(需外置磁盘在线)。 测试:AppMigrationServiceTests 15/15、AppScannerTests 11/11;Release 构建通过。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Owner
|
非常感谢你的贡献,今天或明天我会 review 并确认和 #54 是否有冲突💗 |
Owner
# Conflicts: # AppPorts/Localizable.xcstrings
Contributor
Author
Owner
|
Объединили и ожидается, что выложим на этой неделе, спасибо за ваш вклад 💗 |
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.
📝 变更说明 | Description
本 PR 汇总 4 项改动(5 个提交)/ This PR bundles 4 changes (5 commits):
应用体积会话级缓存 | App size session cache (
54a4c73)弹窗中文未本地化修复(结构性)| Popup localization fix (structural) (
6dd9ea2)Localizable.xcstrings中部分多行键以字面量\n(反斜杠+n)存储,而 Swift 字面量编译为真实换行符,导致.localized查找不匹配并回退到中文源串 —— 表现为标题/按钮已本地化、正文却显示中文。.localized):原生启动器按系统语言从内置表选择文案(英文兜底),重新编译通用二进制StubLauncherBinary;bash 兜底改为英文。补全俄语界面翻译 | Complete Russian UI translations (
b60900e)Eto prilozhenie...)。为 57 条用户可见字符串补全规范俄语:弹窗正文、DataDirError/AppMoverError错误描述、状态徽章悬浮说明、数据目录类型/优先级标签、按钮与空状态。%@/%lld/%1$@)与源串完全一致;弹窗内引用的按钮名与实际俄语按钮一致;日志字符串维持英文。迁移受保护应用前预警 | Protected-app migration warning (
633752f,780351a).localized字符串已加入字符串目录(zh-Hans+en+ru,多行键使用真实换行符),避免再次回退中文。🔗 关联 Issue | Related Issues
N/A
🧪 测试情况 | Testing
xcodebuild ... BUILD SUCCEEDED,应用可正常启动).localized/Text的中文键均已在字符串目录中;新增/修改俄语译文的格式化占位符与源串一致;现有键的多语言覆盖无回归)🌐 本地化影响 | Localization Impact
Localizable.xcstringszh-Hans/en/ru,其余 19 种语言暂随源回退,待维护者的 AI 翻译流程补全。因此LocalizationAuditTests会报告这 4 个键缺失翻译(共 76 条 finding,全部集中在这 4 个新键,现有键无回归)—— 属预期,且该检查为 advisory 非阻断。zh-Hans与en的实际显示(可选)LocalizationAuditTests(可选)—— 见上,4 个新键为预期缺失📸 屏幕截图 | Screenshots (Optional)
受保护应用预警弹窗为新增 UI,可在合并前补充截图。
🤖 Generated with Claude Code