Summary
Phase 1 of ZecHub Proposal A149 — the repository-controlled translation framework that replaces runtime Google Translate, is implemented and running as a public pilot for the DAO to evaluate:
- Live pilot: https://zechub-wiki-i18n.vercel.app
- Application repo (public): GitHub - bloxster/zechub-wiki-i18n: Fork to remove Google translate from ZecHub · GitHub — branch
feature/static-it-translation-pilot - Content repo (public): GitHub - bloxster/zechub-content-i18n · GitHub — branch
feature/static-it-translation-pilot
Both repositories are public for transparency. No Google Translate script,
widget, cookie, or DOM translation is used anywhere in the translated pages.
The three problems §2 addressed
| Problem identified in the proposal | Outcome |
|---|---|
| Privacy — Google Translate auto-loads, contacting Google infrastructure by default | Eliminated. No Google Translate script/widget/cookie/DOM translation anywhere in the app (verified across the source and public assets). |
| UX / reliability — async MDX sometimes stays English until the user switches languages | Solved. Content is static and repository-controlled, server-rendered from the submodule — no async-vs-translation race. |
| Terminology — e.g. “Arborist Calls” → “Chiamate dell’arboricoltore” | Solved. A protected-terms glossary + CI keeps the 38 proposal terms verbatim; the Italian page keeps “Arborist Calls” unchanged. |
Implementation plan — status against the proposal
| Phase | Deliverable | Status |
|---|---|---|
| 1. Framework | next-intl repo-controlled i18n, locale routes, JSON UI dictionaries, translated MDX, English fallback, predictable PR structure, no runtime Google Translate |
|
| 2. Glossary | Protected-terms glossary | |
| 3. Pilot (Italian) | Italian translation of priority pages | |
| 4. Contributor workflow | Docs: locate/edit files, add languages, protected terms, review | CONTRIBUTING.md + docs/translation-contributor-workflow.md (incl. an “Adding a New Language” guide) |
| 5. Gradual expansion | Page-by-page expansion to the full wiki |
What the pilot delivers
Architecture (Phase 1). A next-intl layer in the Next.js App Router. English stays canonical at its existing unprefixed URLs (e.g. /wallets, /zcash-organizations/electric-coin-company); Italian is served at /it/...; /en/... redirects to canonical English; any /it/... route without an Italian translation falls back to English automatically. UI text, navigation, and metadata come from JSON dictionaries (dictionaries/en.json, dictionaries/it.json) — the Italian dictionary is now at full parity with English, so the home page, navigation/category labels, and footer all render in Italian.
Content delivery. Wiki Markdown is consumed from a build-time git submodule read from local disk — there is no runtime GitHub API call and no GITHUB_TOKEN. To publish new translations: commit in the content repo → git submodule update --remote content in the app repo → commit the new pin → deploy.
Italian pilot content (64 pages, ~38% of the core wiki). Coverage by category:
- Start Here: 10/10 · Using Zcash: 22/22 · Zcash Organizations: 9/9 — all complete
- Zcash Tech: 13/14 · Zcash Community: 8/14
- Zcash Use Cases: 1/7 · Glossary & FAQs: 1/4
- Plus the home page and category navigation in Italian via the UI dictionary.
- Full live per-page status:
translations/TRANSLATION_STATUS.mdin the content repo.
Terminology quality (Phase 2). A protected-terms manifest plus a CI check (scripts/check-protected-terms.mjs) verifies that the 39 protected Zcash terms present in each English source remain verbatim in the Italian translation. The check runs over all 64 translated pages and passes. This is what prevents regressions like “Arborist Calls → Chiamate dell’arboricoltore.”
Privacy result (precise). The pilot removes the need to send wiki page content to Google Translate at runtime; Italian content is maintained and served from repository-controlled translations. It does not yet claim the pages make zero third-party requests — see deferred follow-ups below.
Route convention (disclosure)
The proposal text showed prefixed routes (/en/, /it/, /es/). The pilot keeps English at its existing canonical URLs to avoid breaking current inbound links and search indexing; non-English locales use prefixed routes (/it/...), and /en/... redirects to the canonical English route. This is an implementation refinement that preserves SEO and existing links.
Prior-art credit: contributor 1337bytes
During development, ZecHub contributor @1337bytes opened draft PR #544 exploring next-intl, locale-prefixed App Router pages, and a git-submodule approach for localized Markdown. That is relevant prior architecture work, and the pilot’s switch to a build-time submodule content source was informed by it. The funded Phase 1 additionally delivers the repository-controlled Italian content, English fallback, protected-term validation, removal of runtime Google Translate, and a documented editorial/publication workflow.
Scope note
Per proposal §7, Phase 1 funds the framework, glossary, contributor docs, and a
pilot migration for one language across selected high-priority pages — it does not include translating the entire wiki into every language. Broader coverage is intended for separate contributor PRs / bounties (Phase 5).
Editorial status & deferred items
- The Italian text is a strong first pass and benefits from a final native-speaker editorial review before upstream merge. (Terminology fidelity is already machine-enforced.)
- Deferred privacy follow-ups (separate PRs, not Phase-1 blockers):
YouTubenocookie/click-to-load embeds; local hosting of external image assets (i.ibb.co, GitHub user-attachments).
Next steps
- Community/editorial review of the Italian pilot pages on
https://zechub-wiki-i18n.vercel.app. - On approval, prepare the upstream PR(s) to
ZecHub/zechub-wiki, crediting
@1337bytes priornext-intl/submodule direction. - Open Phase 5 expansion (additional pages/locales) as contributor PRs / bounties.
Caveats
-
Static translation is not “free” just because LLMs and translation APIs can generate drafts quickly. In this pilot I tested several tools (including ChatGPT 5.5, Claude 4.8, DeepSeek V4, DeepL API), but grammar, syntax, tone, and Zcash-specific terminology still required careful review. If ZecHub decides to move fully toward static translations, this should be treated as an ongoing community/editorial effort rather than a one-time automation task.
-
A possible alternative is LibreTranslate: it can provide machine translation similar in purpose to Google Translate, but can be self-hosted instead of loading Google’s runtime translation widget. That may improve the privacy posture, but it would still produce machine translations at runtime (the pages are translated when users open them) and would not provide the same repository-controlled review workflow, terminology enforcement, or stable translated pages as the static approach.
In my opinion, this static translation is the best option but still requires some effort from the community.
Your opinion and comments welcome!