[PR #1779] [MERGED] feat(website): add maintained multilingual editions #4813

Closed
opened 2026-10-31 00:55:19 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/1779
Author: @N0zoM1z0
Created: 10/11/2026
Status: ✅ Merged
Merged: 10/11/2026
Merged by: @N0zoM1z0

Base: main ← Head: feat/website-multilingual


📝 Commits (5)

  • 12575d4 feat(website): add multilingual editions and translation workflow
  • e0ec6af fix(website): clarify translated terminology and RTL flows
  • 3e66521 fix(website): incorporate multilingual contributor refinements
  • bc5a980 fix(docs): validate translated README website destinations
  • a33db00 test(docs): type README drift scenarios as fixed pairs

📊 Changes

81 files changed (+250793 additions, -494 deletions)

View changed files

📝 .github/workflows/website-pages.yml (+2 -2)
📝 .gitignore (+3 -0)
📝 README_ar.md (+10 -10)
📝 README_de.md (+10 -10)
📝 README_es.md (+10 -10)
📝 README_fa.md (+10 -10)
📝 README_fr.md (+10 -10)
📝 README_id.md (+10 -10)
📝 README_it.md (+10 -10)
📝 README_ja.md (+10 -10)
📝 README_ko.md (+10 -10)
📝 README_pl.md (+10 -10)
📝 README_pt-BR.md (+10 -10)
📝 README_ru.md (+10 -10)
📝 README_th.md (+10 -10)
📝 README_tr.md (+10 -10)
📝 README_uk.md (+10 -10)
📝 README_vi.md (+10 -10)
📝 README_zh-TW.md (+10 -10)
📝 README_zh.md (+10 -10)

...and 61 more files

📄 Description

Summary

Readers can now use the REA website in all 19 README languages. The homepage, onboarding, guides, showcases, blog and interactive examples share one English layout and build into static language editions, with a selector that opens the equivalent page.

Fixes #1022. This supersedes the overlapping infrastructure in #1737. Its CJK font choices, original copy-button label restoration, accessibility wording and portions of the Traditional Chinese onboarding draft are incorporated, with contributor credit.

Problem and expected behavior

The website previously required English, even when readers entered from a translated README. Maintaining separate translated HTML trees would multiply layout work and make stale instructions difficult to identify.

English keeps its existing URLs. Other editions use language prefixes such as /zh-CN/, /ja/ and /pt-BR/. Arabic and Persian have RTL layouts; code and numeric demonstrations retain their reading direction.

Change and scope

  • Standard gettext PO catalogs hold complete sentences, figure labels, runtime messages and search metadata. Extraction preserves unchanged translations and review notes; changed text becomes pending.
  • Missing or fuzzy messages produce a labeled, nonindexable English fallback for the affected page. Completing the catalog restores the translation, sitemap entry and reciprocal hreflang links.
  • Commands, source excerpts, target fixtures, recorded values and literal filenames remain protected. Assets and downloadable examples are shared.
  • The existing manual publisher sends the same generated website/_site/ artifact to Cloudflare and GitHub Pages. Generated language HTML stays ignored.
  • Documentation fact checks compare matching localized README destinations while rejecting changed pages, wrong locales, fragments and query parameters.
  • Translated README links open the matching website language. Contributor docs explain editing, review, previews and drift checks. Builds use Python and polib, without a translation API or frontend framework.

Contract and boundary impact

  • Semantic owner: website extraction and static rendering in scripts/website_i18n.py.
  • CLI/MCP, providers, Evidence and process contracts: unchanged.
  • Generated product metadata, package installation and releases: unchanged.
  • Website publication: generated artifact path changes; the sole publisher remains manually dispatched.

Evidence and regression coverage

Integration checks cover source drift, obsolete/fuzzy translations, fallback and restoration, runtime extraction, invalid placeholders and markup, safe build failure, all language routes, reciprocal metadata, protected evidence, prefix hosting and fixture downloads.

Initial catalogs include machine-assisted drafts and editorial corrections. Further language review is welcome through the documented PO workflow. Layout and interaction checks ran in Linux Chromium; Windows and macOS rendering have not been exercised locally.

Validation performed

  • python scripts/website.py check — 11 regression tests and website verification.
  • python scripts/website.py translations check --strict — all 18 translation catalogs complete, with 1,477 source messages.
  • GNU msgfmt --check-format — all catalogs pass.
  • Focused CI scope tests — 59 pass; product-catalog/documentation regression tests — 11 pass.
  • npm run docs:check — all six artifact and documentation checks pass.
  • npm run check:fast — typecheck and lint pass.
  • Chromium: 646 page visits at 375px and 1440px; 31 interaction groups across root and /rea/ hosting, including copying, calculator, dinosaur, Aegis, FAQ anchors and navigation without JavaScript.
  • Localized SVG labels, RTL diagrams and translated README destinations checked.

Compatibility, safety, and release

Existing English routes and target inputs are preserved. No runtime package release is needed. Catalogs and documentation are authored inputs; generated assets and temporary review tooling are excluded.

Review checklist

  • Concrete enhancement and linked issue.
  • Conventional title and one focused outcome.
  • Meaningful success and failure-path coverage.
  • Maintenance docs and generated-source ownership updated.
  • Final diff checked for private data, unrelated changes 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/1779 **Author:** [@N0zoM1z0](https://github.com/N0zoM1z0) **Created:** 10/11/2026 **Status:** ✅ Merged **Merged:** 10/11/2026 **Merged by:** [@N0zoM1z0](https://github.com/N0zoM1z0) **Base:** `main` ← **Head:** `feat/website-multilingual` --- ### 📝 Commits (5) - [`12575d4`](https://github.com/morluto/rea/commit/12575d4807f5eedad8bc07d423aade9846e42509) feat(website): add multilingual editions and translation workflow - [`e0ec6af`](https://github.com/morluto/rea/commit/e0ec6af2e462d4d7582fffae53ee98d18f1ecb0f) fix(website): clarify translated terminology and RTL flows - [`3e66521`](https://github.com/morluto/rea/commit/3e665214b1b10956a458ae2d3f4abd3eef1e6277) fix(website): incorporate multilingual contributor refinements - [`bc5a980`](https://github.com/morluto/rea/commit/bc5a98044a2813abcd089ef70942eb1c8641bad4) fix(docs): validate translated README website destinations - [`a33db00`](https://github.com/morluto/rea/commit/a33db000806ae4a9f2f5cde2448c7c447308e789) test(docs): type README drift scenarios as fixed pairs ### 📊 Changes **81 files changed** (+250793 additions, -494 deletions) <details> <summary>View changed files</summary> 📝 `.github/workflows/website-pages.yml` (+2 -2) 📝 `.gitignore` (+3 -0) 📝 `README_ar.md` (+10 -10) 📝 `README_de.md` (+10 -10) 📝 `README_es.md` (+10 -10) 📝 `README_fa.md` (+10 -10) 📝 `README_fr.md` (+10 -10) 📝 `README_id.md` (+10 -10) 📝 `README_it.md` (+10 -10) 📝 `README_ja.md` (+10 -10) 📝 `README_ko.md` (+10 -10) 📝 `README_pl.md` (+10 -10) 📝 `README_pt-BR.md` (+10 -10) 📝 `README_ru.md` (+10 -10) 📝 `README_th.md` (+10 -10) 📝 `README_tr.md` (+10 -10) 📝 `README_uk.md` (+10 -10) 📝 `README_vi.md` (+10 -10) 📝 `README_zh-TW.md` (+10 -10) 📝 `README_zh.md` (+10 -10) _...and 61 more files_ </details> ### 📄 Description ## Summary Readers can now use the REA website in all 19 README languages. The homepage, onboarding, guides, showcases, blog and interactive examples share one English layout and build into static language editions, with a selector that opens the equivalent page. Fixes #1022. This supersedes the overlapping infrastructure in #1737. Its CJK font choices, original copy-button label restoration, accessibility wording and portions of the Traditional Chinese onboarding draft are incorporated, with contributor credit. ## Problem and expected behavior The website previously required English, even when readers entered from a translated README. Maintaining separate translated HTML trees would multiply layout work and make stale instructions difficult to identify. English keeps its existing URLs. Other editions use language prefixes such as `/zh-CN/`, `/ja/` and `/pt-BR/`. Arabic and Persian have RTL layouts; code and numeric demonstrations retain their reading direction. ## Change and scope - Standard gettext PO catalogs hold complete sentences, figure labels, runtime messages and search metadata. Extraction preserves unchanged translations and review notes; changed text becomes pending. - Missing or fuzzy messages produce a labeled, nonindexable English fallback for the affected page. Completing the catalog restores the translation, sitemap entry and reciprocal `hreflang` links. - Commands, source excerpts, target fixtures, recorded values and literal filenames remain protected. Assets and downloadable examples are shared. - The existing manual publisher sends the same generated `website/_site/` artifact to Cloudflare and GitHub Pages. Generated language HTML stays ignored. - Documentation fact checks compare matching localized README destinations while rejecting changed pages, wrong locales, fragments and query parameters. - Translated README links open the matching website language. Contributor docs explain editing, review, previews and drift checks. Builds use Python and polib, without a translation API or frontend framework. ## Contract and boundary impact - Semantic owner: website extraction and static rendering in `scripts/website_i18n.py`. - CLI/MCP, providers, Evidence and process contracts: unchanged. - Generated product metadata, package installation and releases: unchanged. - Website publication: generated artifact path changes; the sole publisher remains manually dispatched. ## Evidence and regression coverage Integration checks cover source drift, obsolete/fuzzy translations, fallback and restoration, runtime extraction, invalid placeholders and markup, safe build failure, all language routes, reciprocal metadata, protected evidence, prefix hosting and fixture downloads. Initial catalogs include machine-assisted drafts and editorial corrections. Further language review is welcome through the documented PO workflow. Layout and interaction checks ran in Linux Chromium; Windows and macOS rendering have not been exercised locally. ## Validation performed - `python scripts/website.py check` — 11 regression tests and website verification. - `python scripts/website.py translations check --strict` — all 18 translation catalogs complete, with 1,477 source messages. - GNU `msgfmt --check-format` — all catalogs pass. - Focused CI scope tests — 59 pass; product-catalog/documentation regression tests — 11 pass. - `npm run docs:check` — all six artifact and documentation checks pass. - `npm run check:fast` — typecheck and lint pass. - Chromium: 646 page visits at 375px and 1440px; 31 interaction groups across root and `/rea/` hosting, including copying, calculator, dinosaur, Aegis, FAQ anchors and navigation without JavaScript. - Localized SVG labels, RTL diagrams and translated README destinations checked. ## Compatibility, safety, and release Existing English routes and target inputs are preserved. No runtime package release is needed. Catalogs and documentation are authored inputs; generated assets and temporary review tooling are excluded. ## Review checklist - [x] Concrete enhancement and linked issue. - [x] Conventional title and one focused outcome. - [x] Meaningful success and failure-path coverage. - [x] Maintenance docs and generated-source ownership updated. - [x] Final diff checked for private data, unrelated changes 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 00:55:19 +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#4813
No description provided.