From 2a5e8e2aa254ba9a3989729e287d959c8b41aec4 Mon Sep 17 00:00:00 2001 From: MaxMan <48833066+MaxTheHaters@users.noreply.github.com> Date: Mon, 12 Oct 2026 00:27:39 +0800 Subject: [PATCH] M14: correct Taiwan Traditional Chinese accessibility and form terms (#1023) Correct inverted accessibility wording, pass/fail results, row/column terminology and form-choice labels. Add the missing table-row explanation and regressions tied to rule metadata. Co-authored-by: OpenAI Codex Co-authored-by: Brandon Thomas --- ATTRIBUTION.toml | 2 +- ROADMAP.md | 2 ++ crates/ui-egui/src/i18n/mod.rs | 26 ++++++++++++++++++++++++++ crates/ui-egui/src/i18n/zh-hant.tsv | 25 +++++++++++++------------ docs/roadmap.md | 4 ++++ 5 files changed, 46 insertions(+), 13 deletions(-) diff --git a/ATTRIBUTION.toml b/ATTRIBUTION.toml index a7db5826..60df7267 100644 --- a/ATTRIBUTION.toml +++ b/ATTRIBUTION.toml @@ -30,7 +30,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Traditional Chinese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "5aecc94622ac849c96a05af59c9d38cff790bf8f69351bfbf0ee5a55963ae3bb" +sha256 = "c8d2b9d9ef7931296e960799d3e5e07a7c39acf8ecbdc6194086ff3b1d37061e" [[asset]] path = "crates/ui-egui/src/i18n/cs.tsv" diff --git a/ROADMAP.md b/ROADMAP.md index 556fe492..625b7e22 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -147,6 +147,8 @@ Newest first: the date, what moved, and the new overall estimate. - **2026-10-11 (M13):** CLI run and MCP reject missing, empty, repeated and option-valued --root arguments before any tool/script execution or MCP initialization. A single-hyphen directory name remains valid; synthetic CLI regressions preserve a would-be overwritten file. Estimates unchanged. - **2026-10-11 (M14, #307, Plan 2):** Forms now return terminal fields and the page-widget adoption count from one enumeration, and engine open reuses that result while retaining XFA script-button marking. The 12,000-page/no-form PDF (1,442,052 bytes) and 2,500-orphan-widget PDF (673,432 bytes) produce byte-identical `doc_open`/`doc_info` outputs against upstream `33c14e07cfd742a82bf03baa6b103c01008fa68c`, including the orphan repair note. After one warm-up per binary and three interleaved base/candidate rounds, median open times were 0.16/0.15 s and 0.08/0.07 s, with median peak RSS 62.69/59.98 MiB and 33.28/32.20 MiB. Workspace tests, Clippy, formatting, focused forms/engine/organize tests, and the WASM check pass. A behavior-preserving local binding in `organize` also lets the workspace Clippy gate pass. No estimate change. +- **2026-10-11 (M14, Traditional Chinese semantics):** Corrected accessibility pass/fail labels, the inverted script-accessibility rule, Taiwan row/column terminology and form choice/read-only labels; added the missing table-row explanation. Catalog regressions cover the rule metadata and preserve field names. Milestone and effort estimates unchanged. + - **2026-10-10 (M14, interface size):** Preferences ▸ Interface size scales the whole interface (50–250 %, setting `ui_scale`, control option `ui-scale`); 50 % brings an interface the system draws at 200 % back to 100 % (#456). Auto, the default, follows the desktop's text scaling: on Linux and the BSDs the desktop app reads GNOME's `text-scaling-factor` once at launch, so with Large Text (1.25) on a 1× display the interface no longer draws 13 px labels that show their pixels next to the system's text. The size is egui's zoom factor, so `pixels_per_point` grows with it and page rasters stay one texel per screen pixel; egui's own ⌘+/⌘− interface zoom is turned off so those keys stay page zoom. Still missing: KDE's font DPI and Windows' "Make text bigger" aren't read (both scale only text there), and egui's text is still greyscale-antialiased without the system's gamma, so small text looks rougher than GTK's at 100 %. - **2026-10-10 (M14, #496):** Shortcut displays share a UI formatter across toolbar search, registry menus, command palette, Help and tooltips. Modifier and key names use a dedicated catalog context in every bundled translation; missing entries keep the English key name rather than a command translation. German shows Strg/Umschalt/Entf, macOS retains its symbols, and runtime language changes refresh the display. Regression coverage checks localized layout widths, English/German switching, platform conventions and unchanged command execution. Milestone and effort estimates unchanged. diff --git a/crates/ui-egui/src/i18n/mod.rs b/crates/ui-egui/src/i18n/mod.rs index f8d76839..49f25680 100644 --- a/crates/ui-egui/src/i18n/mod.rs +++ b/crates/ui-egui/src/i18n/mod.rs @@ -1369,6 +1369,32 @@ mod tests { } } + /// Report statuses and rule descriptions must retain their meaning in Taiwan Chinese. + #[test] + fn traditional_chinese_accessibility_meaning() { + use pdfcraft_engine::a11y::{Rule, Status}; + let zh = Lang::from_code("zh-hant").expect("zh-hant registered"); + assert_eq!(tr(zh, Status::Passed.label()), "通過"); + assert_eq!(tr(zh, Status::Failed.label()), "未通過"); + assert_eq!(tr(zh, Rule::Scripts.description()), "沒有妨礙無障礙操作的指令碼"); + assert_eq!(tr(zh, Rule::TableRows.name()), "列"); + assert_eq!(tr(zh, Rule::TableRows.explanation()), "表格列應直接位於表格或其表頭、主體、表尾內。請修正表格標記。"); + assert_eq!(tr(zh, Rule::TableRegularity.description()), "表格每列的欄數必須相同,每欄的列數也必須相同"); + assert_eq!(tr(zh, Rule::TableCells.explanation()), "表格儲存格應位於列內。請修正表格標記。"); + assert_eq!(tr(zh, Rule::TableHeaders.explanation()), "表頭儲存格(TH)讓聽者知道每欄或每列的內容。請標記表頭儲存格。"); + } + + /// A choice in a form is an item, not a project; field notices preserve user-supplied names. + #[test] + fn traditional_chinese_form_vocabulary() { + let zh = Lang::from_code("zh-hant").expect("zh-hant registered"); + assert_eq!(tr(zh, "Item:"), "項目:"); + assert_eq!(tr(zh, "Item List"), "項目清單"); + assert_eq!(tr(zh, "Sort items"), "排序項目"); + assert_eq!(tr(zh, "Read Only"), "唯讀"); + assert_eq!(fmt(tr(zh, "{name} is read-only"), &[("name", "Field{n}")]), "Field{n} 為唯讀"); + } + #[test] fn french_is_registered() { let fr = Lang::from_code("fr").expect("fr registered"); diff --git a/crates/ui-egui/src/i18n/zh-hant.tsv b/crates/ui-egui/src/i18n/zh-hant.tsv index 4267ee03..7c38b012 100644 --- a/crates/ui-egui/src/i18n/zh-hant.tsv +++ b/crates/ui-egui/src/i18n/zh-hant.tsv @@ -159,7 +159,7 @@ Signature panel 簽名面板 {month} {day}, {y} {month}{day}日,{y}年 The document's security settings don't allow filling in form fields 文件安全設定不允許填寫表單欄位 - {name} is read-only {name}為只讀 + {name} is read-only {name} 為唯讀 {name} has no action {name}沒有動作 Previous month 上個月 Next month 下個月 @@ -244,7 +244,7 @@ This field is locked. Unlock it to change its properties. 此欄位已鎖定。解鎖後可更改其屬性。 Tooltip: 提示: Common Properties 常規屬性 - Read Only 只讀 + Read Only 唯讀 Required 必填 Font Size: 字號: Auto 自動 @@ -274,14 +274,14 @@ Check box is checked by default 預設選中核取方塊 Button is checked by default 預設選中按鈕 Buttons with the same name and value are selected in unison 同名同值的按鈕一起選中 - Item: 專案: - Item List 專案列表 + Item: 項目: + Item List 項目清單 Up 上移 Delete {o} 刪除 {o} Add the choices people pick from. 新增供人選擇的選項。 Default: 預設值: (none) (無) - Sort items 排序專案 + Sort items 排序項目 Allow user to enter custom text 允許使用者輸入自定義文字 Multiple selection 多選 Commit selected value immediately 立即提交所選值 @@ -627,8 +627,8 @@ Collapse 摺疊 Expand 展開 {rule} - {status} {rule} - {status} - Passed 透過 - Failed 未透過 + Passed 通過 + Failed 未通過 Needs manual check 需要人工檢驗 Skipped 已跳過 Fix 修復 @@ -684,7 +684,7 @@ Page will not cause screen flicker 頁面不會導致螢幕閃爍 Animation that flashes can cause seizures. Check scripts and media for flicker. 閃爍的動畫可能導致癲癇發作。請檢驗指令碼和媒體是否存在閃爍。 Scripts 指令碼 - No inaccessible scripts 沒有無障礙指令碼 + No inaccessible scripts 沒有妨礙無障礙操作的指令碼 Timed responses 限時回應 Page does not require timed responses 頁面不需要限時回應 People may need more time to respond. Check that nothing has a time limit. 人們可能需要更多時間來回應。請檢驗確認沒有時間限制。 @@ -712,14 +712,14 @@ Other elements alternate text 其他元素替代文字 Other elements that require alternate text 需要替代文字的其他元素 Formulas and similar non-text elements need alternate text. Add alternate text to them. 公式及類似非文字元素需要替代文字。請為它們新增替代文字。 - Rows 行 + Rows 列 TR must be a child of Table, THead, TBody, or TFoot TR 必須是 Table、THead、TBody 或 TFoot 的子級 - Table cells belong in a row. Fix the table's tags. 表格儲存格應位於行內。請修復表格標記。 + Table cells belong in a row. Fix the table's tags. 表格儲存格應位於列內。請修正表格標記。 Headers 表頭 Tables should have headers 表格應有表頭 - Header cells (TH) tell listeners what each column or row holds. Mark the header cells. 表頭儲存格(TH)告訴聽者每列或每行包含的內容。請標記表頭儲存格。 + Header cells (TH) tell listeners what each column or row holds. Mark the header cells. 表頭儲存格(TH)讓聽者知道每欄或每列的內容。請標記表頭儲存格。 Regularity 規則性 - Tables must contain the same number of columns in each row and rows in each column 表格每行必須包含相同數量的列,每列必須包含相同數量的行 + Tables must contain the same number of columns in each row and rows in each column 表格每列的欄數必須相同,每欄的列數也必須相同 Irregular tables confuse cell navigation. Give every row the same number of cells (counting spans). 不規則的表格會妨礙儲存格導覽。請讓每一列具有相同數量的儲存格,並計入合併儲存格。 Summary 摘要 Tables must have a summary 表格必須有摘要 @@ -2086,3 +2086,4 @@ key Space 空格 Resize panel window 調整面板視窗大小 Tools 工具 Inspector 檢查器 + Table rows belong directly in a table or its head, body or foot. Fix the table's tags. 表格列應直接位於表格或其表頭、主體、表尾內。請修正表格標記。 diff --git a/docs/roadmap.md b/docs/roadmap.md index 27bc888d..5c14ccee 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -3,6 +3,7 @@ > **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-11 · **Change:** minor (M6: respect existing form-font encodings; retain source fonts on appearance fallback; estimates unchanged) · **Target:** Adobe Acrobat Pro (Acrobat DC, continuous track 26.002.21931, macOS) > **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-11 · **Change:** minor (M6: keep accepted form values when Tab reopens the same field before Save; estimates unchanged) · **Target:** Adobe Acrobat Pro (Acrobat DC, continuous track 26.002.21931, macOS) > **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-11 · **Change:** minor (M13: reject malformed CLI --root options before dispatch; estimates unchanged) · **Target:** Adobe Acrobat Pro (Acrobat DC, continuous track 26.002.21931, macOS) +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-11 · **Change:** minor (Traditional Chinese accessibility semantics and Taiwan form/table terminology; estimates unchanged) · **Target:** Adobe Acrobat Pro (Acrobat DC, continuous track 26.002.21931, macOS) Forward-looking: the milestones, the current focus and what comes next. The parity numbers behind it are in [target-app-parity.md](target-app-parity.md), the ranked work list in [gaps.md](gaps.md), @@ -84,6 +85,8 @@ total matches the parity estimate. | M12 | Accessibility, compare, measure, search, XFA | 200–380 | 30% | 90–160 | Done: new `a11y` crate with the Accessibility Checker (all 32 rules, report, Fix/Skip/Explain, options dialog and results panel, agent tools).
Done since: 2D distance, perimeter and area measurements with persistent viewport calibration, snapping, live information and CSV export. Missing: autotag, Tags/Order/Content panels, Reading Order tool, alt-text workflow, compare, geospatial/3D measurement, search index, XFA | | M13 | Automation (MCP, Action Wizard, CLI) + AI providers | 60–120 | 45% | 25–45 | Done: MCP resources (document info, text, page images); headless tool table (123 tools incl. signing, optimizing, initial view, links, stamps, data exchange, comment review, forms authoring and scripts, redaction, sanitize, print, add content), opt-in MCP server over stdio, CLI `run`/`tools` (closed stdout pipes exit cleanly), UI control channel with drag. Missing: Action Wizard, AI providers
Done since: CLI run and MCP reject missing, empty, repeated and option-valued --root arguments before any tool/script execution or MCP initialization. A single-hyphen directory name remains valid; synthetic CLI regressions preserve a would-be overwritten file. | | M14 | 1.0 polish: performance, localization, installers | 120–250 | 15% | 80–150 | Done: PhotoCraft's translation system (`i18n/`: TSV catalogs, `tl!`, command-id and plural entries, system-language detection, strict catalog tests); every dialog, panel and notice goes through `tl!`. Catalogs of ≈ 2,000–2,140 entries for Japanese, Simplified and Traditional Chinese, Russian, Bulgarian, German, Spanish, French, Telugu, Hungarian, Ukrainian, Italian, Brazilian Portuguese and Arabic (logical-order catalog put into display order; layout not yet mirrored); Czech covers the menus. Signed and notarized macOS builds, signed Windows installers (x64, x86, ARM64), AppImage, deb, rpm, Flatpak and FreeBSD packages. #307 (bounded large-PDF memory): shared resource indexes and parser metadata, lazy inspection, bounded caches; a 9,156-page file inspects in ≈ 1.8 s at ≈ 500 MiB instead of exceeding 10 GiB. Shortcut display uses localized modifier/key names across menus, toolbar, palette, Help and tooltips (#496). Missing: a right-to-left layout, a Chinese UI face in releases, Hindi/Indonesian/Korean/Vietnamese, file-backed input and global memory budgets, performance budgets, keyboard-only operation | +| M13 | Automation (MCP, Action Wizard, CLI) + AI providers | 60–120 | 45% | 25–45 | Done: MCP resources (document info, text, page images); headless tool table (123 tools incl. signing, optimizing, initial view, links, stamps, data exchange, comment review, forms authoring and scripts, redaction, sanitize, print, add content), opt-in MCP server over stdio, CLI `run`/`tools` (closed stdout pipes exit cleanly), UI control channel with drag. Missing: Action Wizard, AI providers | +| M14 | 1.0 polish: performance, localization, installers | 120–250 | 15% | 80–150 | Done: PhotoCraft's translation system (`i18n/`: TSV catalogs, `tl!`, command-id and plural entries, system-language detection, strict catalog tests); every dialog, panel and notice goes through `tl!`. Catalogs of ≈ 2,000–2,140 entries for Japanese, Simplified and Traditional Chinese, Russian, Bulgarian, German, Spanish, French, Telugu, Hungarian, Ukrainian, Italian, Brazilian Portuguese and Arabic (logical-order catalog put into display order; layout not yet mirrored); Czech covers the menus. Signed and notarized macOS builds, signed Windows installers (x64, x86, ARM64), AppImage, deb, rpm, Flatpak and FreeBSD packages. #307 (bounded large-PDF memory): shared resource indexes and parser metadata, lazy inspection, bounded caches; a 9,156-page file inspects in ≈ 1.8 s at ≈ 500 MiB instead of exceeding 10 GiB. Shortcut display uses localized modifier/key names across menus, toolbar, palette, Help and tooltips (#496). Traditional Chinese accessibility statuses, rule semantics and Taiwan form/table terms have catalog regressions. Missing: a right-to-left layout, a Chinese UI face in releases, Hindi/Indonesian/Korean/Vietnamese, file-backed input and global memory budgets, performance budgets, keyboard-only operation | | | **Total** | **2,085–3,840** | **≈ 49% ready** | **≈ 770–1,400** | Area view of the same work: [target-app-parity.md](target-app-parity.md#by-feature-area) | ## Upcoming milestones, ranked @@ -129,6 +132,7 @@ M2 (renderer), M7 (content editing), M10 (OCR and Office), M11 (Preflight and st | 2026-10-11 | minor | M6: respect existing form-font encodings; retain source fonts on appearance fallback. Estimates unchanged. | | 2026-10-11 | minor | M6: keep accepted form values when Tab reopens the same field before Save. Estimates unchanged. | | 2026-10-11 | minor | M13: reject malformed CLI --root options before dispatch. Estimates unchanged. | +| 2026-10-11 | minor | M14: Traditional Chinese accessibility statuses, script-rule meaning and Taiwan form/table terminology; added a missing table-row explanation and catalog regressions. Estimates unchanged. | | 2026-10-10 | minor | M14: localized shortcut key names (#496), including runtime switching and native layout checks. Estimates unchanged. | | 2026-10-10 | minor | Re-judged convert and share with the cross-app gate rule (only a workflow that can't be completed at all blocks): partial, not blocking → stage alpha | | 2026-10-10 | minor | Added the alpha gate (six core workflows; convert and share fails → pre-alpha, 40–70 h to alpha) and rank 0 in the upcoming milestones |