A149 progress update — from the Italian pilot to a fully-private, multilingual rollout
Summary
The Phase 1 framework is proven, so the work since then has been about scale and staying true to the privacy goal end-to-end. The pilot has grown from one language to a multilingual rollout on a shared ~180-page curated set. For the translation job I used both ChatGPT 5.4 and a local model. This is a progress report and the plan ahead.
Language coverage
| Locale | Status |
|---|---|
| English, Italian | |
| French, Spanish, German, Portuguese, Arabic, Chinese | |
| Hindi, Russian, Japanese, Korean, Turkish, Ukrainian | |
| Swahili, Yoruba, Igbo, Twi, Ewe |
That’s all 12 curated languages beyond the English/Italian baseline drafted end-to-end — the full ~180-page set, UI dictionaries, and frontend wiring — now consolidated and staged for review. The five African languages are actively being translated as I write this.
Same principles as the pilot throughout: repository-controlled content, English fallback, protected-terms CI, no runtime Google Translate.
What’s new
A private translation pipeline. Rather than one cloud API, each language is routed to the best-fit engine, chosen partly for privacy:
- ChatGPT 5.4 for high-resource languages,
- a local open model running on my own GPU for others,
- a specialized open translation model (NLLB-200), also fully local, for low-resource languages.
Quality measured against the live baseline. Google Translate is what readers get today, so it’s my yardstick. Every language is scored with an automatic round-trip check against GT before shipping. Result so far: high/medium-resource languages are on par with or better than Google Translate; nothing ships that regresses below the GT baseline users already have.
Terminology at scale. The protected-terms glossary + CI now enforces the Zcash term list across every language, not just Italian — so “Arborist Calls” stays “Arborist Calls” everywhere.
A broader privacy audit. The original scope was Google Translate; I went further and audited the whole site for other third-party touchpoints (fonts, embeds, CDNs, map tiles, the AI assistant, analytics). Findings were cross-checked by an independent second model. Removing Google Translate is by far the biggest win; the rest are queued as small, self-contained follow-ups.
African languages — the honest part
General-purpose LLMs are strong on major languages but unreliable on low-resource ones, in testing they produced confident-looking output that mistranslated core meaning. So these five use a specialized open translation model built for exactly these languages (Meta’s NLLB-200), run entirely on my own GPU. This track is now in progress: the pipeline is markdown- and terminology-aware — code, links and protected terms are shielded during translation, and any line where a link or term can’t be safely preserved falls back to English rather than risk a broken page. Each language is held to a simple bar: ship only where quality is at least as good as the Google Translate already live (a pure privacy win, no regression), measured with the same automatic round-trip check as every other language. Native speakers can then refine pages over time — improvement is welcome, not a blocker.
Status against the plan
| Item | Status |
|---|---|
| Framework, glossary, contributor docs, Italian pilot | |
| Multi-language expansion (12 curated languages) | |
| Private, local translation pipeline | |
| Automatic quality benchmark vs Google Translate | |
| Low-resource (African) languages | |
| Full-site privacy hardening (beyond GT) | |
| Community refinement |
Next steps
- Settle the merge structure for the batch and open the 12 curated languages for community/editorial review; ship each as it clears the quality bar.
- Finish the African languages on the specialized-model path, run each through the no-regression benchmark, and ship the ones that pass — with community refinement to follow.
- Land the deferred privacy follow-ups as small PRs.
I am also considering implementing a system that will update translated pages semi-automatically when an English update is released.
However, it is important to remember that machine drafts still need people. Automatic scores tell me a translation didn’t regress; they don’t replace a native read. Static translation remains an ongoing community effort, not a one-time automation. Also, round-trip metrics are a screen, not a verdict. They’re biased toward the tool used to measure them, so “within a few points of Google Translate” should be read as “effectively on par,” and native corrections are always welcome.
Your opinion and comments welcome!