Files
blog/.spec/specs/2026-10-25_add-blog-i18n/tasks.md
T
wait4xandGLM-5.3 4aa79fca06 feat(i18n): UI 字典串接与三页薄化——/en/ 全站落成
- op-gitea 车道:ui.ts 扩 26 键(占位 {n}/{title}/{exif} 约定),五组件
  locale prop 串接,zh 零回归(48 键/18 页实测)
- orchestrator 收尾:gallery/moments/about 三页 body 提取为
  components/pages/*Page(zh/en 薄页双路由),/en/ 全家福 21 页
- 提取工程三坑入库:HTML 注释不可进 frontmatter 模块区;搬移脚本会吃
  开栏 ---;单级页面搬二级目录后 import 全线差一层

验证: astro build 21 页 exit 0;/en/ 七类路由产物断言过;en 页
      ICP 备案保留;zh 侧文案抽查不变

Spec: 2026-10-25_add-blog-i18n
Co-authored-by: GLM-5.3
2026-10-25 09:26:14 +08:00

57 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Phase 3:双语骨架 + 腾讯 TMT 翻译管线 - 任务拆解
## 使用规则
- 每个任务 boundary/verify 齐备;verify 首个反引号 span 为执行命令;迁移教训:verify 只读断言(不重跑生成器)
## 阶段一:实现
- [x] T1 astro i18n 配置 + locale 管道
- claim: orchestrator
- boundary: 只改 astro.config.mjs(i18n 段)与 src/lib/locale.ts(当前语言工具)
- verify: `pnpm astro build`
- [x] T2 UI 字典 + 组件串接
- depends-on: task_0001
- claim: op-gitea(mesh 车道,预约 src/i18n/ 与 Footer/SearchDialog/gallery/moments/about)
- boundary: 新建 src/i18n/ui.ts(zh/en 字典)并串接 Footer/SearchDialog/gallery/moments/about 页的静态文案;不碰 Header/BaseLayout(orchestrator 的语言切换在那)
- verify: `pnpm astro build && grep -q "zh" dist/index.html`
- [x] T3 语言切换组件(Header 中英互跳)
- depends-on: task_0001
- claim: orchestrator
- boundary: 只改 src/components/Header.astro 与 src/lib/locale.ts
- verify: `pnpm astro build && grep -q 'href="/en/"' dist/index.html`
- [x] T4 /en/ 页面骨架 + AI 译文标注组件
- depends-on: task_0001
- claim: orchestrator
- boundary: 新建 src/pages/en/{index.astro,archives/[...slug].astro,archives/index.astro,gallery,moments,about}(复用组件+locale prop);src/components/AiTranslatedBadge.astro;posts-en 集合定义进 content.config.ts
- verify: `pnpm astro build && test -f dist/en/index.html`
- [ ] T5 TMT 翻译管线
- claim: op-artalk(mesh 车道,预约 scripts/translate/)
- boundary: 新建 scripts/translate/{tencent_tmt.py,translate_posts.py}:TC3-HMAC-SHA256 签名(--selftest 模式打印中间量)、段落分块(<2000 字符)、frontmatter 透传(title 翻译、locked:true 跳过)、.en.md 生成到 content/posts-en/、原文哈希记录防重译;凭据从宿主 0600 文件读(标签 Secert* 容错);不碰 src/、astro 配置
- verify: `python3 scripts/translate/translate_posts.py --dry-run`
- [ ] T6 存量翻译执行 + 标注落页
- depends-on: task_0004, task_0005
- claim: op-artalk(执行)+ orchestrator(验收)
- boundary: 真实调用 TMT 译 6 文入 content/posts-en/;/en/archives 模板挂 AiTranslatedBadge(T4 已备)
- verify: `test $(ls content/posts-en/*.md 2>/dev/null | wc -l) -eq 6`
- [x] T7 hreflang + 双语 RSS + sitemap locale
- depends-on: task_0004
- claim: orchestrator
- boundary: BaseLayout 注入 hreflang 双向;src/pages/en/rss.xml.ts;sitemap 配置 i18n
- verify: `pnpm astro build && grep -q hreflang dist/index.html && test -f dist/en/rss.xml`
- [ ] T8 构建验收 + staging
- depends-on: task_0002, task_0003, task_0004, task_0006, task_0007
- claim: orchestrator
- boundary: build.sh 跑 staging;抽检 /en/ 三页(首页/一文/图库)渲染
- verify: `bash infra/deploy/build.sh && test -f ~/docker_apps/blog/www-staging/en/index.html`
---
**当前进度**:由脚本计算,无需手动维护