Phase:M02 — Traditional Chinese / English Localization
類型:M Phase(Modification / Maintenance Phase)
插入時點:M01-C — SCAG / GoS Background Expansion closeout 後,暫停 M01;M02 closeout 後回到 M01-D。
本文件定義 M02-A~M02-H 每個 Subphase 完成後什麼必須為真。具體資料格式、module、API、locale resource layout、translation authoring pipeline、migration 與接線放在開發設計方針.md;自動與人工驗收方式放在測試指南.md。
狀態:M02 已 closeout(2026-08-31)。M02-A~M02-H 全部完成,下一步為 M01-D。 Closeout evidence:
M02-C_CLOSEOUT.md、M02-D_CLOSEOUT.md、M02-E_CLOSEOUT.md、M02-F_CLOSEOUT.md、M02-G_CLOSEOUT.md、M02-H_CLOSEOUT.md。
最後更新:2026-08-31
P0 / P1 已完成 Character Core、Character Builder、Character Sheet、Version History 與 SRD 5.1 Character Content;M01-A~M01-C 進一步建立 Multi-Source Content Pack,並加入 PHB / SCAG / GoS Character Origins / Background content。
在繼續 M01-D~M01-I 大量加入 VGM / VRGR / TCE 內容前,M02 先建立永久的雙語基礎,避免之後每新增一批規則資料都累積 English-only presentation debt。
M02 要解決的是:
name / label / desc 等 presentation text,尚未有正式 locale contract。zh-TW)與 English(en)。zh-TW / en coverage。M02 不改寫正常 P0 → P1 → P2 Roadmap,也不取消 M01-D~M01-J:
M01-A
→ M01-B
→ M01-C
→ 暫停 M01
→ M02-A~M02-H
→ M02 closeout
→ 回到 M01-D
→ M01-E~M01-J
→ P2
M02 第一版正式 locale:
zh-TW — 繁體中文
en — English
第一版不做:
繁中模式:所有納入 localization scope 的系統 UI、規則名稱、規則說明、系統提示與系統提供文字使用繁體中文。
English mode:所有納入 localization scope 的系統 UI、規則名稱、規則說明、系統提示與系統提供文字使用英文。
正常使用流程不得出現可避免的中英混合 presentation,例如:
種族:Wood Elf
背景:Guild Artisan
法術:Fireball
或:
Race:木精靈
Background:公會工匠
下列內容不視為語言混用缺陷:
D&D、SRD、PHB、SCAG、GoS、VGM、VRGR、TCE 等產品/來源縮寫或正式標記。語言切換必須:
切換完成後,使用者不應觀察到持續性的「一部分已切換、一部分仍是上一語言」狀態。
locale preference 保存於目前瀏覽器。
要求:
zh-TW。Canonical identity 永遠使用既有 StableKey,例如:
srd5.1:spell:fireball
phb2014:subrace:wood-elf
scag:background:city-watch
gos:background:marine
切換 locale 不得改變:
Display Name 永遠不是 foreign key,也不得因翻譯不同建立第二個 rules entity。
M02 必須維持:
同一份 mechanics / identity
→ en presentation
→ zh-TW presentation
不得建立兩份會各自演化的 mechanics content,例如:
srd5.1-en
srd5.1-zhTW
不得讓英文版與中文版具有不同 eligibility、choice、數值、grant、reference graph 或 Build 結果。
M02 只改 presentation 能力,不把 rules legality 搬進 frontend。
既有流程仍為:
Builder Draft
→ server choices / compile / validation
→ Review
→ Confirm
→ immutable CharacterBuild / Current State
同一 Draft 在 zh-TW 與 en 下,除 presentation text 外,所有 machine-readable result 必須相同。
第一版 locale 是 browser preference,不是遊戲狀態。
禁止把 locale 寫入:
BuilderDraftPayload。CharacterBuild。CharacterState。因此切換語言不能造成 autosave、revision bump、new version 或 state write。
M02 必須區分:
System-authored / rules-authored text:依 locale 切換。
User-authored free text:保持使用者原文,不自動翻譯、不在切換時重寫。
例如:
若系統提供的 suggestion 需要在選取後仍保有「可隨 locale 切換」的語意,必須保存可辨識的 system identity,而不是只把某一語言的 display string 當唯一身份。
既有已保存且沒有 system identity 的自由文字不得用字串比對、猜測或機器翻譯方式偷偷改寫。
M02 closeout 後,正式支援的 zh-TW / en 不得以「缺繁中就顯示英文」作為正常 production 行為。
缺 required translation 必須:
M02 必須建立一致的 D&D 5e 2014 翻譯術語規則,用來約束核心術語與專有名稱。
docs/暫用規則資訊/ 既有繁中譯名是 glossary 的優先參考輸入。M02-C 定稿時必須逐一比對本次實際使用到的既有名稱;若決定採用不同譯名,必須在 glossary 記錄原參考譯名、正式採用譯名與決策原因。
M02 closeout 後:
glossary = 正式 zh-TW terminology SSOT
docs/暫用規則資訊/ = maintainer reference / legacy reference
不得讓兩者各自成為平行翻譯主來源,也不得靠 regex / global string replacement 把長篇規則文字機械替換成翻譯。
M02 不以「整個 category 是否存在」決定翻譯範圍,而以 field-level product visibility 決定。
M02-C 必須產出可機器驗證的 localizable field policy。某個 canonical field 在 M02 closeout 是否 required,判準為:
當且僅當該 field 在 M02 closeout 當時已存在的產品畫面/正常使用流程中會被顯示給使用者。
因此同一 category 可以同時存在:
例如現有 Character Sheet Inventory selector 已會列出 SRD magic item 名稱,因此 item.name 屬 M02 required;若 item.desc 在 M02 closeout 時仍沒有任何產品畫面顯示,則不因 item category 已存在而強迫提前翻譯。
Monster / Beast 仍依既有 P0 scope guard 延後,不因 M02 提前導入 P4 content。
M02 插入時點固定在 M01-C closeout 後。
M02 closeout 當時正式 enabled packs:
srd5.1
phb2014
scag
gos
但「pack enabled」不代表該 pack 每個自然語言 field 都必須提前翻完。實際 required coverage 由 M02-C 的 localizable field policy 決定。
SRD 5.1 的 required translation scope 為:
M02-C localizable field policy
× srd5.1 runtime entries
× zh-TW / en
名稱、selector label、grant summary、目前頁面實際顯示的 structured text 與長文,只要被 policy 標成 user-visible 就必須完整雙語。
尚無 UI surface 的 SRD field 不納入 M02 completeness;未來某個 Subphase 首次讓該 field 成為 user-visible 時,由該 Subphase 一併補齊所有 supported locale。
M01-B / M01-C 正式導入的 non-SRD content 同樣依 field policy 判斷 required scope,包括目前會出現在 selector / Review / Sheet / roleplay editor 的:
PHB / SCAG / GoS 的 zh-TW 名稱與既有翻譯內容,以對應 docs/暫用規則資訊/ 文件作為初稿/優先參考來源,再由 M02-C glossary 統一審核定稿。
M02 closeout 後恢復 M01-D 時:
任何 Subphase 新增、修改,或因新增畫面而首次 expose user-visible system / rules content,必須同步維護所有正式支援 locale;缺少
zh-TW或en視為該 Subphase 未完成。
因此未來 VGM / VRGR / TCE content 的翻譯不再另開「補翻譯 Phase」,而是內容/畫面本身 Definition of Done 的一部分。
三份 M02 文件固定使用以下名稱與順序:
M02-A — Locale Foundation & Runtime Switch
M02-B — Full UI Copy Localization
M02-C — Localized Content Model & Terminology Contract
M02-D — SRD 5.1 Names & Structured Text
M02-E — SRD 5.1 User-Visible Descriptions
M02-F — PHB / SCAG / GoS Localization
M02-G — Localized Search, Errors & Completeness Gates
M02-H — Full M02 Integration & Closeout
每個 Subphase 必須可獨立實作、驗證、commit;完成時專案必須保持可啟動、可 build、可測試,不得用「等下一個 Subphase 才修」作為已知 regression 的理由。
翻譯資料量可以在單一 Subphase 內依 category 分批產出、review、commit;batch completion 不等於 Subphase closeout。D / E / F 各自完整 scope 未完成前不得宣告該 Subphase 關門。
建立全站唯一 locale runtime state,完成 zh-TW / en 一鍵切換、即時 rerender 與瀏覽器記憶,且證明 locale 與 Draft / Character domain state 完全分離。
zh-TW 與 en 間一鍵切換。zh-TW。把目前網站所有 frontend-owned UI copy 正式納入 localization,不再由 React component 到處散落不可切換的英文/中文 literal。
至少涵蓋目前既有:
aria-label / visually hidden system text。zh-TW 模式中,frontend-owned natural-language UI copy 只顯示繁中。en 模式中,frontend-owned natural-language UI copy 只顯示英文。Server / Content Registry 產生的 rules names / descriptions;這些由 M02-C~F 接管。
建立正式 rules-content localization contract,讓 StableKey / mechanics 與 display language 分離,同時定稿「哪些 field 現在真的需要翻譯」與正式 D&D terminology。
同一 content entry 在兩語下具有相同 StableKey、source / pack identity、references、choices / grants semantics 與 mechanical data;只有 presentation 改變。
所有正式 Content Registry entry 與可見 nested rules presentation,都有一致方式取得目前 locale 對應的 name / short label / description / choice presentation / source label / user-visible structured text。
Builder / Review / Character Sheet 等 server-derived view 若包含 user-visible name / label / message / description,必須能依正式 locale contract 呈現,不能永久把英文 display string 當 domain identity。
Machine-readable code / reference / id 保持語言中立。
產出正式、可機器驗證的 field-level policy,能回答至少:
pack / kind / field
→ user-visible now?
→ required locales
→ reason / surface
M02-D / E / F / G completeness 必須以此 policy 為準,不得各自再維護一份手工 category 清單。
建立 D&D 5e 2014 en ↔ zh-TW glossary。docs/暫用規則資訊/ 的既有繁中譯名必須作為 priority reference input;不同譯名決策要留下對照與理由。
Background / roleplay 等 system suggestion 必須能依 locale 顯示;若採用後仍要 locale-aware,persisted state 必須保留 system identity。使用者手動輸入或改寫的自由文字保持原文。
既有 Character、Build Version、Draft、Current State 不得因加入 localization 失效。M02 不以改 StableKey 或重新建立 Character Version 的方式完成翻譯。
完成 M02-C field policy 中,SRD 5.1 目前 user-visible 的名稱、label 與短型/結構型 presentation 的 zh-TW / en localization。
以 localizable field policy 為唯一範圍來源。典型包含:
若某 category 的 name 目前可見而 desc 尚不可見,只翻 required name,不因 category 存在就提前翻全部長文。
zh-TW / en 下所有 policy-required SRD names / structured fields 完整。補齊 M02-C field policy 中,在 M02 closeout 時已存在產品畫面會顯示的 SRD 長篇/說明型文字;不為尚不存在的未來畫面提前翻完整 SRD 長文庫。
以 localizable field policy 為唯一範圍來源。只要目前 surface 實際顯示,就納入,例如可能包含 spell / feature / trait / condition / skill / weapon property 等 description;若某 field 尚無任何 UI surface,延後到首次 expose 它的 Subphase。
zh-TW 與 en。把 M01-B / M01-C 導入、且依 M02-C policy 在目前產品畫面 user-visible 的 non-SRD presentation 完整納入雙語。
需依 policy 涵蓋目前可見的 Backgrounds / Variants、Variant Human、PHB subraces、origin features、Background Features、starting choices、roleplay suggestions 與其他 presentation。
需依 policy 涵蓋 SCAG Background names、目前可見的 Feature / choice / roleplay presentation、reused PHB roleplay table presentation、source labels。
Roleplay suggestion inheritance 只能重用 suggestion identity / presentation,不得因 localization 改變「roleplay inheritance != mechanical inheritance」。
需依 policy 涵蓋 GoS Background names、目前可見的 Feature / choice / equipment / optional Fisher Tale / Marine Hardship 等 flavor / roleplay presentation。
Optional flavor 在任何 locale 下都仍是 optional,不得因 localization 變成 Confirm blocking choice。
PHB / SCAG / GoS 的 zh-TW 初稿優先取自對應 docs/暫用規則資訊/。若該文件文字品質有 extraction artifact、錯字或與 glossary 衝突,以 M02-C glossary / review 結果為正式準則,不直接把 reference Markdown 當 runtime translation source。
phb2014 / scag / gos policy-required fields 同時具有 zh-TW / en。把 localization 從「看起來會切」提升成可長期維護的正式系統:搜尋/排序/錯誤訊息符合目前 locale,並建立 machine-verifiable translation completeness gate。
所有目前提供 rules-content 搜尋的 selector 必須:
例如繁中模式搜尋 fireball 可以命中並只顯示「火球術」。
有依名稱排序的 UI,依目前 locale display name 排序;locale switch 後重新呈現符合該語言的排序。
validation issue、disabled reason、save / load / confirm error、not-found / invalid-selection、network fallback、rules warning 等 system-owned user-visible message 必須能依目前 locale 顯示。
Machine-readable error / validation code 保持穩定且語言中立。
完整性集合為:
supported locale
× enabled content pack
× M02-C required localizable field
M02 closeout:
locales: zh-TW, en
packs: srd5.1, phb2014, scag, gos
缺任何 required translation 必須造成 test / CI failure;不得以 silent fallback 當成通過。
至少能發現:
以真實使用流程驗證 M02 已達到「兩個純語言模式 + 完整 current-surface translation + Draft-safe instant switch」,並正式把 localization 變成後續所有內容/畫面 Subphase 的完成條件。
至少逐頁確認:
zh-TW 與 en 都不得出現可避免的另一語言 system/rules presentation。
在已有實際未完成 Draft 的情況下驗證 zh-TW → en → zh-TW,過程前後保持 same Draft ID / revision、name / target level、所有 selected StableKeys、ability scores、class progression、structural / spell / equipment choices 與 user roleplay text。
Locale switch 本身不得產生 Draft mutation request。
至少完成:
zh-TW 建立角色 → Confirm → Character Sheet → reload,保持繁中。en 建立角色 → Confirm → Character Sheet → reload,保持 English。至少驗證:
Review / Sheet / selector / grants 不得因跨 source 而漏翻、錯翻或 identity 混用。
M02 不得關門,直到:
srd5.1 required translation coverage = complete。phb2014 required translation coverage = complete。scag required translation coverage = complete。gos required translation coverage = complete。M02 必須保持 P0 / P1 / M01-A~C 既有核心能力:Character Sheet mechanics、Builder legality、Confirm atomicity / idempotency、immutable Build Version、Current State、content source provenance、multi-source StableKey correctness全部不變。
M02 closeout 前需要一次真人 browser smoke,至少確認:
Blocker / Major localization 或 Draft-safety 問題必須在 M02 closeout 前修完。
M02 closeout 必須同步專案 SSOT,而不是只讓永久 localization 規則留在 M02 文件內:
AGENTS.md:目前階段切回 M01-D;工程實作守則加入「新增/修改/首次 expose user-visible system / rules content 必須同步所有 supported locales」的永久要求。PROJECT_BRIEF.md:M02-A~H 全部標記完成,下一步改為 M01-D,Roadmap / current step 同步。規格企劃.md:若產品層 UI 語言描述尚未存在或與實際 M02 行為不一致,同步成兩個純語言模式、即時切換與 browser preference 的產品 SSOT;不得把 schema / API 細節塞入產品規格。data/srd5.1/NOTICE.md:明確標示本專案另提供 SRD 5.1 user-visible presentation text 的繁體中文翻譯,屬 CC BY 4.0 下對原素材的修改/改作;文字必須與實際翻譯 scope 一致,不得宣稱整份 SRD 已完整翻譯。M02 第一版不建立:
srd5.1 複製成中文 mechanics pack。M02-H closeout 後,Localization 成為既有 platform capability。
後續所有 Phase / Subphase 必須遵守:
zh-TW / en。zh-TW / en。M02 closeout 後的下一步固定為:
回到 M01-D — VGM Race Expansion
M01-D~M01-J 完成後,再回正常 Roadmap:
P2 — Room / Campaign / Session / Seat