diff --git a/docs/plans/2026-09-29-海报语言切换-设计方案.md b/docs/plans/2026-09-29-海报语言切换-设计方案.md new file mode 100644 index 0000000..2d2594b --- /dev/null +++ b/docs/plans/2026-09-29-海报语言切换-设计方案.md @@ -0,0 +1,46 @@ +# 海报语言切换(App 分享二维码海报中/英文版) + +日期:2026-09-29 | 状态:设计已确认(用户 2026-09-29 拍板「弹层内切换」) + +## 背景与问题 + +App 分享页的二维码海报文案跟随 **App 语言**([share_qr_dialog.dart](../../apps/mobile/lib/pages/share_qr_dialog.dart)): +固定文案走 arb(中英双份齐全)、相册标题/场地/地址走多语言回退链、二维码链接自动带 +`?lang=`。但 App 语言默认中文,想出英文海报必须把整个 App 切成英文再切回——实际没人会这么 +用,体感即「只有中文海报」。 + +## 方案(用户选定:弹层内切换) + +海报弹层顶部加「中文 / English」分段切换;**只影响海报预览与下载图,不改 App 语言设置**。 + +1. **交互**:`_PosterSheet` 标题行下方加 `SegmentTabs`(复用 UI-06 组件,light 风格), + 两档「中文」「English」(语言名以自身语言书写,与 language_sheet 同约定)。 + 默认选中 = App 语言前缀(zh→中文,其余→English)。 +2. **固定文案**:扫码提示等按海报语言取 `lookupAppLocalizations(Locale('zh'/'en'))` + (生成代码已提供 lookup,arb 中英双全)——不新增硬编码,与「查重弹窗 l10n」遗留 + 整改方向一致。 +3. **相册字段**:标题/场地/地址复用现有回退链按海报语言取 + (`albumDisplayTitle/Venue/Translations(album, posterLang)`)。相册未填英文翻译时 + 回退相册默认语言——数据问题由后台补翻译,海报不做假翻译。 +4. **二维码**:`?lang=` 跟海报语言(中文海报=zh-CN,英文海报=en),扫码打开的观众页 + 语言与海报一致。弹层外的分享卡片/复制链接仍跟 App 语言。 +5. **不改动**:海报日期为纯数字(语言无关)、布局/配色、下载逻辑(RepaintBoundary 3x + PNG → gal)、弹层 chrome 文案(标题/下载按钮/成功提示仍跟 App 语言)。 + +## 错误处理 + +无新增错误路径(banner 拉取失败回退封面的既有逻辑不变)。 + +## 测试 + +扩展 `apps/mobile/test/pages/share_qr_page_test.dart`: + +- 弹层内有中文/English 切换,默认跟 App 语言; +- 切 English:扫码提示变 "Scan to view photos"、二维码 data 含 `lang=en`、 + 标题取相册英文翻译; +- 切回中文反向验证(提示中文、`lang=zh-CN`、标题取中文翻译)。 + +## 影响面 + +改动集中在 `apps/mobile/lib/pages/share_qr_dialog.dart` + 上述测试文件;不涉及其它页面、 +不碰 apps/viewer(并行会话在改 AdCarousel)。