🚀 v6.6.6 — Internationalization, Map Runtime & Location Resilience
🌐 Major improvements to UI internationalization, runtime language switching, map preview runtime behavior, and location assignment reliability.
Key Updates
🌐 GUI Internationalization
- Added TranslationManager as a runtime service on RuntimeContext, backed by the
ui.languagesetting and runtimelanguageChangedrefresh signals. - Added bundled Qt translation resources for German and Simplified Chinese, including
languages.jsonmetadata and package-data coverage for.ts/.qmresources. - Added a language menu under Settings with English, Deutsch, and 简体中文 choices; English remains the fallback language.
- Migrated major GUI surfaces to translated text, including main menus, status-bar feedback, info panel, People dashboard, album navigation, gallery context menus, detail/player controls, share/export feedback, face overlays, edit sidebar controls, and the standalone map preview entry point.
- Added locale-aware GUI formatters for dates, integers, decimals, and file sizes so translated surfaces do not depend on the host system locale.
🧰 i18n Tooling & Guardrails
- Added Python-aware i18n extraction through
tools/extract_i18n_strings.pyandscripts/i18n_extract.sh, coveringsrc/iPhoto/guiandsrc/maps. - Added
scripts/i18n_compile.shfor rebuilding.qmtranslation resources withpyside6-lrelease. - Added
tools/check_i18n_strings.pyand architecture tests to block direct English literals in high-risk GUI APIs such assetText,setToolTip,QAction, dialogs, and status messages. - Added Apple Photos-aligned edit terminology notes under
docs/requirements/i18n/. - Added a long-term i18n UI text guardrail under
docs/misc/.
🗺️ Map Runtime Improvements
- Extended standalone map preview backend selection with explicit
auto,native,python, andlegacymodes. - Added runtime diagnostics for map preview backend selection.
- Hardened map surfaces with opaque backing colors and full-update repaint behavior.
- Added optional map diagnostics through runtime flags.
- Improved marker rendering inside supported map passes.
📍 Location Assignment Resilience
- Assign Location now persists the selected place to
global_index.dbeven when ExifTool is missing or original file metadata writeback fails. - Added user-facing warnings for missing ExifTool or failed GPS writeback while keeping the local database assignment intact.
- Sanitized metadata updates before JSON storage so non-serializable third-party values cannot corrupt asset rows.
🚀 v6.6.6 — 国际化、地图运行时与位置分配可靠性提升
🌐 针对 UI 国际化、运行时语言切换、地图预览运行时行为以及位置分配可靠性进行了全面优化。
核心更新
🌐 GUI 国际化
- 新增
TranslationManager,并将其作为RuntimeContext上的运行时服务,由ui.language设置和运行时languageChanged刷新信号驱动。 - 新增内置 Qt 翻译资源,支持德语和简体中文,并包含
languages.json元数据以及.ts/.qm资源的 package-data 覆盖。 - 在 Settings 下新增语言菜单,支持 English、Deutsch 和 简体中文;English 仍作为默认回退语言。
- 将主要 GUI 界面迁移为可翻译文本,包括主菜单、状态栏反馈、信息面板、People 面板、相册导航、图库右键菜单、详情页 / 播放器控件、分享 / 导出反馈、人脸覆盖层、编辑侧边栏控件以及独立地图预览入口。
- 新增支持区域设置的 GUI 格式化工具,用于日期、整数、小数和文件大小显示,避免翻译界面依赖宿主系统语言环境。
🧰 i18n 工具链与防护机制
- 新增面向 Python 的 i18n 字符串提取工具
tools/extract_i18n_strings.py和scripts/i18n_extract.sh,覆盖src/iPhoto/gui与src/maps。 - 新增
scripts/i18n_compile.sh,用于通过pyside6-lrelease重新生成.qm翻译资源。 - 新增
tools/check_i18n_strings.py和架构测试,阻止在setText、setToolTip、QAction、对话框和状态消息等高风险 GUI API 中直接写入英文文案。 - 在
docs/requirements/i18n/下新增对齐 Apple Photos 的编辑术语说明。 - 在
docs/misc/下新增长期 i18n UI 文案防护规范。
🗺️ 地图运行时改进
- 扩展独立地图预览的后端选择能力,新增明确的
auto、native、python和legacy模式。 - 为地图预览后端选择新增运行时诊断信息。
- 通过不透明背景和 full-update 重绘行为增强地图表面的稳定性。
- 新增可选的地图运行时诊断开关。
- 改进受支持地图渲染流程中的标记点绘制行为。
📍 位置分配可靠性
- 即使 ExifTool 缺失或原始文件元数据回写失败,Assign Location 现在也会将选中的地点保存到
global_index.db。 - 当 ExifTool 缺失或 GPS 写回失败时,新增面向用户的警告提示,同时保留本地数据库中的位置分配结果。
- 在写入 JSON 前清理元数据更新内容,避免第三方不可序列化值破坏资源数据行。