新功能 (2026-06-19) — i18n / l10n 測試

三項可互相搭配的純標準庫國際化 / 在地化測試輔助工具,走完整五層 (facade、AC_* 執行器指令、MCP 工具、Script Builder)。

偽在地化(Pseudo-localization)

在真正的翻譯出現*之前*,先為 UI 字串加上重音與填充(保留佔位符),以 揪出寫死的字串並預先對版面施壓:

from je_auto_control import pseudo_localize, pseudo_localize_catalog

pseudo_localize("Hello {name}")        # "⟦Hèllo {name}········⟧"
pseudo_localize_catalog({"save": "Save", "cancel": "Cancel"})

佔位符({name} / {{x}} / %s / %d)會原樣保留;``expansion`` 控制填充比例;``⟦…⟧`` 括號讓截斷一眼可見。對應 AC_pseudo_localize / ac_pseudo_localize。畫面中未被加重音(未翻譯)的字串,代表它是未外部化 的寫死文字。

文字溢位偵測

標記估計寬度超過其元件邊界的文字——在地化的頭號 bug(德文/芬蘭文會膨脹 30–50%)。由 AutoControl 既有讀取的 accessibility 邊界計算:

from je_auto_control import check_overflow

issues = check_overflow(elements, avg_char_px=7.0)
# [{"text": "...", "width": 40, "required_px": 400.0, "overflow_px": 360.0}]

寬度以 len(text) * avg_char_px 估計(決定性啟發式)。對應 AC_check_overflow / ac_check_overflow``(未提供 ``elements 時使用 即時 a11y 樹)。

翻譯目錄完整性

把翻譯目錄與基準語系比對:缺漏 / 多餘 / 空白鍵與佔位符不一致——可作為防止 空白 UI 的 CI 閘:

from je_auto_control import check_catalog

report = check_catalog(base_locale, target_locale)
report["missing"]               # target 中缺漏的鍵
report["placeholder_mismatch"]  # 例如 target 漏掉 "{count}"

對應 AC_check_catalog / ac_check_catalog