[PR #3856] [MERGED] fix(website): correct mistranslated zh-CN catalog entries #5951

Closed
opened 2026-10-31 01:10:41 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/3856
Author: @kukinghan
Created: 10/15/2026
Status: ✅ Merged
Merged: 10/16/2026
Merged by: @morluto

Base: main ← Head: main


📝 Commits (3)

  • 6b37f58 fix(website): correct mistranslated zh-CN catalog entries
  • 7d2945d Update website/locales/zh-CN/messages.po
  • 29e15e9 Update website/locales/zh-CN/messages.po

📊 Changes

1 file changed (+266 additions, -266 deletions)

View changed files

📝 website/locales/zh-CN/messages.po (+266 -266)

📄 Description

fix(website): correct mistranslated zh-CN catalog entries

The zh-CN gettext catalog had not been reviewed. Terminology was taken from
unrelated dictionary senses and several file names, version numbers and
observed byte values were translated as if they were prose, so rendered pages
showed content that did not match the English source or the recorded target
identity.

Rewrites 236 msgstr values across the catalog:

  • Terminology now uses one term per concept: mask -> 掩码, assembly -> 汇编,
      helper -> 辅助函数, source -> 源码, native -> 原生, oracle -> 校验基准,
      authenticator -> 身份验证器, agent -> 编程助手, and flag stays untranslated.
  • Literal values are preserved: MAIN.EXE, main/, Ghidra 12.1.x, 0x5b?,
      export.js, preload.js and npx rea-agents@latest setup are no longer
      translated.
  • Word-salad sentences are rewritten in natural Chinese, including
      "剂将它们转化为方程" -> "编程助手把它们转化为方程".
  • Step-marker separators damaged from "·" to "*" are restored.

No msgid or msgctxt changes, so translations extract is not required and no
entry becomes fuzzy or empty.

Summary

No issue is linked: this is a review of the shipped zh-CN catalog rather than
a reported defect, and no tracking issue exists for it.

The zh-CN gettext catalog had not been reviewed. Terminology was taken from
unrelated dictionary senses and several file names, version numbers and observed
byte values were translated as if they were prose, so rendered pages showed
content that did not match the English source or the recorded target identity.

Problem and expected behavior

locales/zh-CN/messages.po had not been reviewed. Two classes of defect were
present.

Terminology was resolved from unrelated dictionary senses. A CTF page rendered
"读一个面具" for "Read one mask", "复制CTF装配" for "Copy CTF assembly",
"一个角色改变了" for "One character changed", and "剂将它们转化为方程" for
"The agent turns them into equations". The agent — the reader's AI coding
assistant — was rendered as 代理, 智能体, 剂, and in nine places left
untranslated in English inside Chinese prose.

Separately, literal values were translated as if they were prose, so the
rendered page contradicted the English source and the recorded target
identity:

English Was Now
Ghidra 12.1.x Ghidra12.1。x Ghidra 12.1.x
0x5b? 0x5c? 0x5b?0x5c? 0x5b? 0x5c?
MAIN.EXE 主要。EXE文件 MAIN.EXE
main/{ph0} 主要/{ph0} main/{ph0}
npx rea-agents@latest setup npx rea-代理@最新设置 untranslated

site:rea.tools/zh-CN should now show the same technical content as the
English edition, with one term per concept and with filenames, commands,
version numbers and observed values intact.

Change and scope

Rewrites 236 msgstr values. Four groups:

  1. Terminology. One term per concept, applied consistently across every
    affected page: mask → 掩码, assembly → 汇编, helper → 辅助函数,
    source → 源码, native → 原生, oracle → 校验基准, authenticator (Aegis) →
    身份验证器, agent → 编程助手, flag stays untranslated, binary → 二进制,
    closure → 闭包函数, figures → 图示, challenge → 挑战/题目.
    oracle and authenticator previously both rendered 验证器; they are now
    distinct.
  2. Literal preservation. File names, paths, commands, URLs, version
    numbers, hex literals and counts are no longer translated.
  3. Sentence repair. Machine word-salad rewritten into natural Chinese;
    orphaned comma splices, dangling infinitives and translated punctuation
    fixed.
  4. Separator repair. Step markers damaged from · to * restored.

investigation stays 调查 site-wide: it is already consistent across every
page including hand-reviewed ones, so renaming it was out of scope.

Intentionally not included: the 244 obsolete (#~) entries still contain
translated file names and commands. They never render, so they are left for a
separate catalog cleanup rather than mixed into this change.

Contract and boundary impact

  • Semantic owner and earliest changed stage: translation catalog, msgstr
    only. No English source, msgctxt, or source reference changed.
  • Contribution scope fit and linked maintainer decision: not applicable. No new
    provider or capability, and no target execution, injection, mutation or
    protection recovery.
  • CLI and MCP/tool-catalog contract: unchanged.
  • Provider, bridge, target-format, or platform compatibility: unchanged.
  • Evidence, artifact, provenance, or reconstruction contract: unchanged. No
    REA analysis behaviour is touched.
  • Target selection, authority, upstream behavior, and cleanup details (if applicable): not applicable.
  • Generated metadata (docs/public/product-catalog.json), package, or installation impact: not applicable. messages.po is the authored catalog; docs/public/product-catalog.json and skills/ are unrelated generated outputs and were not touched.

Expected effects (check known effects; use documentation-only on its own).
Unchecked items do not establish absence; leave uncertainties visible.

  • Read existing files or captured data.
  • Launch or attach to a process.
  • Inject instrumentation or run scripts/code.
  • Change process memory, registers, files, or configuration.
  • Contact network services.
  • Recover protected code or work around protections.
  • Documentation or usability only; no target interaction.
  • Not sure yet; investigation or maintainer guidance needed.

For evidence-bearing changes:

  • Observed, derived, and inferred claims remain distinguishable.
  • Artifact identity, source provenance, and failed attempts remain preserved.
  • Unsupported, incomplete, unavailable, or uncertain outcomes remain visible.

Evidence and regression coverage

  • Tests added or updated: none. This is a text catalog with no test harness.
  • Base reproduction or other evidence: before this change,
    /zh-CN/showcase/ctf/ rendered 读一个面具, 复制CTF装配 and
    一个角色改变了; /zh-CN/guides/native/ rendered
    但需要现有的Ghidra12.1。x安装. After, each renders the corrected term.
    git diff shows the before/after pair for every changed entry.
  • User-visible CLI/MCP output (if applicable): not applicable.
  • Remaining proof gaps:
    • The full website.py check gate did not complete here. It validated
      the catalogs and shared HTML (Checked 1728 source messages for 19 translation catalogs. / Checked shared HTML (0 pages changed).) and then
      stopped at sharing-image generation, which needs native Cairo
      (Cannot prepare sharing image: No module named 'cairosvg' on first run;
      cairosvg then installed but cannot load libcairo-2.dll). That step is
      environment-dependent and unrelated to this change.
    • No rendered-page check in a browser at either / or /rea/ root, in
      light or dark theme, or at mobile width.
    • No independent second-language reader reviewed the rewritten prose. The
      terminology set is internally consistent and each change was reviewed
      against its English msgid, but stylistic quality is unverified beyond that.
    • The 13 pages and 218 findings behind this change came from a scripted
      review, not an exhaustive line-by-line read of all 1728 entries. Entries
      outside the reported set are unreviewed.

Validation performed

Commands below were run against the edited file; results are observed.

  • python scripts/website.py translations check --language zh-CN —
    Checked 1728 source messages for 19 translation catalogs. /
    zh-CN: 1728/1728 translated; 0 missing or fuzzy (exit 0). This is the
    project gate that could not be run before; polib is now installed, so it
    ran.
  • python scripts/website.py check — partial pass, then exit 1 at sharing-image
    generation. Observed output: Checked 1728 source messages for 19 translation catalogs. / Prepared 380 reading pages in 20 languages. /
    Checked shared HTML (0 pages changed). All translation and HTML stages
    passed; the failure is the Cairo-dependent image step, not this change.
  • Custom gettext parse of all entries, before and after — 1728 active entries
    both times; every quoted string parsed without error.
  • Placeholder parity per entry ({phN} and named placeholders, multiset
    compared against the original msgstr) — 0 failures.
  • msgid / msgctxt drift against the pre-change file — 0 entries changed.
  • Per-entry msgstr line count against the pre-change file — 0 entries
    changed; the diff is 1:1 line replacement (267 insertions, 267 deletions).
  • Empty msgstr count — 0. Fuzzy entry count — 0, before and after.
  • Terminology sweep over all 1728 entries for the wrong forms (面具, 旗帜,
    装配, 本机, 质询, 帮助程序, 陈列柜, 二元, 佣工, 智能体, 剂将) — 0 hits.
  • Standalone untranslated agent remaining in any msgstr — 1, and it is
    correct: …选择 Agent 模式… is a product mode name (Windsurf / Devin
    Desktop / VS Code / GitHub Copilot), not the assistant noun.

Not run: python scripts/website.py serve and any browser inspection.

Compatibility, safety, and release

  • Breaking changes or migration steps: none.
  • Real Hopper/Ghidra, browser, or OS coverage: not applicable; no REA runtime
    code changed.
  • Package or release metadata impact: none.
  • Security, privacy, process, or containment review: not applicable.

Author readiness

Human owner:

  • I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work.
  • I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps.
  • I declare this PR ready for initial maintainer review.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff.
  • The PR has one focused outcome and the title follows type(scope): outcome.
  • Related issue is linked, or the reason for not linking one is stated above.
  • Tests cover changed observable behavior and meaningful failure paths.
  • Owning docs, contracts, and generated metadata are updated where needed.
  • User-visible CLI/MCP changes include representative output.
  • I checked the final diff for secrets, unrelated cleanup, and unsupported claims.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/3856 **Author:** [@kukinghan](https://github.com/kukinghan) **Created:** 10/15/2026 **Status:** ✅ Merged **Merged:** 10/16/2026 **Merged by:** [@morluto](https://github.com/morluto) **Base:** `main` ← **Head:** `main` --- ### 📝 Commits (3) - [`6b37f58`](https://github.com/morluto/rea/commit/6b37f58787e281513033b7e43bf67ef42d8ed9ec) fix(website): correct mistranslated zh-CN catalog entries - [`7d2945d`](https://github.com/morluto/rea/commit/7d2945d4c888e6e6f8bf8a0183158aadf2ead14a) Update website/locales/zh-CN/messages.po - [`29e15e9`](https://github.com/morluto/rea/commit/29e15e984d50f6bd89b8f59336a3d69d046b6526) Update website/locales/zh-CN/messages.po ### 📊 Changes **1 file changed** (+266 additions, -266 deletions) <details> <summary>View changed files</summary> 📝 `website/locales/zh-CN/messages.po` (+266 -266) </details> ### 📄 Description fix(website): correct mistranslated zh-CN catalog entries The zh-CN gettext catalog had not been reviewed. Terminology was taken from unrelated dictionary senses and several file names, version numbers and observed byte values were translated as if they were prose, so rendered pages showed content that did not match the English source or the recorded target identity. Rewrites 236 msgstr values across the catalog: - Terminology now uses one term per concept: mask -> 掩码, assembly -> 汇编,   helper -> 辅助函数, source -> 源码, native -> 原生, oracle -> 校验基准,   authenticator -> 身份验证器, agent -> 编程助手, and flag stays untranslated. - Literal values are preserved: MAIN.EXE, main/, Ghidra 12.1.x, 0x5b?,   export.js, preload.js and npx rea-agents@latest setup are no longer   translated. - Word-salad sentences are rewritten in natural Chinese, including   "剂将它们转化为方程" -> "编程助手把它们转化为方程". - Step-marker separators damaged from "·" to "*" are restored. No msgid or msgctxt changes, so translations extract is not required and no entry becomes fuzzy or empty. ## Summary No issue is linked: this is a review of the shipped zh-CN catalog rather than a reported defect, and no tracking issue exists for it. The zh-CN gettext catalog had not been reviewed. Terminology was taken from unrelated dictionary senses and several file names, version numbers and observed byte values were translated as if they were prose, so rendered pages showed content that did not match the English source or the recorded target identity. ## Problem and expected behavior `locales/zh-CN/messages.po` had not been reviewed. Two classes of defect were present. Terminology was resolved from unrelated dictionary senses. A CTF page rendered "读一个面具" for "Read one mask", "复制CTF装配" for "Copy CTF assembly", "一个角色改变了" for "One character changed", and "剂将它们转化为方程" for "The agent turns them into equations". The agent — the reader's AI coding assistant — was rendered as 代理, 智能体, 剂, and in nine places left untranslated in English inside Chinese prose. Separately, literal values were translated as if they were prose, so the rendered page contradicted the English source and the recorded target identity: | English | Was | Now | |---|---|---| | `Ghidra 12.1.x` | `Ghidra12.1。x` | `Ghidra 12.1.x` | | `0x5b? 0x5c?` | `0x5b?0x5c?` | `0x5b? 0x5c?` | | `MAIN.EXE` | `主要。EXE文件` | `MAIN.EXE` | | `main/{ph0}` | `主要/{ph0}` | `main/{ph0}` | | `npx rea-agents@latest setup` | `npx rea-代理@最新设置` | untranslated | `site:rea.tools/zh-CN` should now show the same technical content as the English edition, with one term per concept and with filenames, commands, version numbers and observed values intact. ## Change and scope Rewrites 236 msgstr values. Four groups: 1. **Terminology.** One term per concept, applied consistently across every affected page: mask → 掩码, assembly → 汇编, helper → 辅助函数, source → 源码, native → 原生, oracle → 校验基准, authenticator (Aegis) → 身份验证器, agent → 编程助手, flag stays untranslated, binary → 二进制, closure → 闭包函数, figures → 图示, challenge → 挑战/题目. `oracle` and `authenticator` previously both rendered 验证器; they are now distinct. 2. **Literal preservation.** File names, paths, commands, URLs, version numbers, hex literals and counts are no longer translated. 3. **Sentence repair.** Machine word-salad rewritten into natural Chinese; orphaned comma splices, dangling infinitives and translated punctuation fixed. 4. **Separator repair.** Step markers damaged from `·` to `*` restored. `investigation` stays 调查 site-wide: it is already consistent across every page including hand-reviewed ones, so renaming it was out of scope. Intentionally **not** included: the 244 obsolete (`#~`) entries still contain translated file names and commands. They never render, so they are left for a separate catalog cleanup rather than mixed into this change. ## Contract and boundary impact - Semantic owner and earliest changed stage: translation catalog, `msgstr` only. No English source, `msgctxt`, or source reference changed. - Contribution scope fit and linked maintainer decision: not applicable. No new provider or capability, and no target execution, injection, mutation or protection recovery. - CLI and MCP/tool-catalog contract: unchanged. - Provider, bridge, target-format, or platform compatibility: unchanged. - Evidence, artifact, provenance, or reconstruction contract: unchanged. No REA analysis behaviour is touched. - Target selection, authority, upstream behavior, and cleanup details (if applicable): not applicable. - Generated metadata (`docs/public/product-catalog.json`), package, or installation impact: not applicable. `messages.po` is the authored catalog; `docs/public/product-catalog.json` and `skills/` are unrelated generated outputs and were not touched. Expected effects (check known effects; use documentation-only on its own). Unchecked items do not establish absence; leave uncertainties visible. - [ ] Read existing files or captured data. - [ ] Launch or attach to a process. - [ ] Inject instrumentation or run scripts/code. - [ ] Change process memory, registers, files, or configuration. - [ ] Contact network services. - [ ] Recover protected code or work around protections. - [x] Documentation or usability only; no target interaction. - [ ] Not sure yet; investigation or maintainer guidance needed. For evidence-bearing changes: - [ ] Observed, derived, and inferred claims remain distinguishable. - [ ] Artifact identity, source provenance, and failed attempts remain preserved. - [ ] Unsupported, incomplete, unavailable, or uncertain outcomes remain visible. ## Evidence and regression coverage - Tests added or updated: none. This is a text catalog with no test harness. - Base reproduction or other evidence: before this change, `/zh-CN/showcase/ctf/` rendered `读一个面具`, `复制CTF装配` and `一个角色改变了`; `/zh-CN/guides/native/` rendered `但需要现有的Ghidra12.1。x安装`. After, each renders the corrected term. `git diff` shows the before/after pair for every changed entry. - User-visible CLI/MCP output (if applicable): not applicable. - Remaining proof gaps: - **The full `website.py check` gate did not complete here.** It validated the catalogs and shared HTML (`Checked 1728 source messages for 19 translation catalogs.` / `Checked shared HTML (0 pages changed).`) and then stopped at sharing-image generation, which needs native Cairo (`Cannot prepare sharing image: No module named 'cairosvg'` on first run; `cairosvg` then installed but cannot load `libcairo-2.dll`). That step is environment-dependent and unrelated to this change. - No rendered-page check in a browser at either `/` or `/rea/` root, in light or dark theme, or at mobile width. - No independent second-language reader reviewed the rewritten prose. The terminology set is internally consistent and each change was reviewed against its English msgid, but stylistic quality is unverified beyond that. - The 13 pages and 218 findings behind this change came from a scripted review, not an exhaustive line-by-line read of all 1728 entries. Entries outside the reported set are unreviewed. ## Validation performed Commands below were run against the edited file; results are observed. - `python scripts/website.py translations check --language zh-CN` — `Checked 1728 source messages for 19 translation catalogs.` / `zh-CN: 1728/1728 translated; 0 missing or fuzzy` (exit 0). This is the project gate that could not be run before; `polib` is now installed, so it ran. - `python scripts/website.py check` — partial pass, then exit 1 at sharing-image generation. Observed output: `Checked 1728 source messages for 19 translation catalogs.` / `Prepared 380 reading pages in 20 languages.` / `Checked shared HTML (0 pages changed).` All translation and HTML stages passed; the failure is the Cairo-dependent image step, not this change. - Custom gettext parse of all entries, before and after — 1728 active entries both times; every quoted string parsed without error. - Placeholder parity per entry (`{phN}` and named placeholders, multiset compared against the original msgstr) — 0 failures. - `msgid` / `msgctxt` drift against the pre-change file — 0 entries changed. - Per-entry msgstr **line count** against the pre-change file — 0 entries changed; the diff is 1:1 line replacement (267 insertions, 267 deletions). - Empty msgstr count — 0. Fuzzy entry count — 0, before and after. - Terminology sweep over all 1728 entries for the wrong forms (面具, 旗帜, 装配, 本机, 质询, 帮助程序, 陈列柜, 二元, 佣工, 智能体, 剂将) — 0 hits. - Standalone untranslated `agent` remaining in any msgstr — 1, and it is correct: `…选择 Agent 模式…` is a product mode name (Windsurf / Devin Desktop / VS Code / GitHub Copilot), not the assistant noun. **Not run:** `python scripts/website.py serve` and any browser inspection. ## Compatibility, safety, and release - Breaking changes or migration steps: none. <!-- For ! / BREAKING CHANGE: show a previously valid call/configuration, its new behavior and migration, and why compatibility/deprecation cannot preserve it. Every release increments minor, including breaking changes; keep breaking markers and migration notes so callers can assess compatibility. See docs/releasing.md. --> - Real Hopper/Ghidra, browser, or OS coverage: not applicable; no REA runtime code changed. - Package or release metadata impact: none. - Security, privacy, process, or containment review: not applicable. ## Author readiness <!-- The human owner completes these declarations before requesting review. The PR author is the owner by default. A different owner must explicitly accept ownership on this PR. AI agents must leave these declarations to a human to dictate to them or there could be catastrophic consequences for many users of REA. Draft PRs may leave them unchecked. These declarations record initial readiness when opening the PR for review; later pushes do not require a new human sign-off. Keep the description and validation evidence current as the work changes. See CONTRIBUTING.md#pull-request-ownership-and-readiness. --> Human owner: <!-- @GitHub-handle --> - [x] I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work. - [x] I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps. - [x] I declare this PR ready for initial maintainer review. ## Before merge <!-- Draft PRs may leave pending items unchecked. Resolve material scope and authority questions before integration. --> - [x] This PR addresses a concrete problem or an agreed enhancement. - [x] Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. - [x] The PR has one focused outcome and the title follows `type(scope): outcome`. - [ ] Related issue is linked, or the reason for not linking one is stated above. - [ ] Tests cover changed observable behavior and meaningful failure paths. - [x] Owning docs, contracts, and generated metadata are updated where needed. - [ ] User-visible CLI/MCP changes include representative output. - [ ] I checked the final diff for secrets, unrelated cleanup, and unsupported claims. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-31 01:10:41 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#5951
No description provided.