Files
church-translate/docs/PLAN-spanish-variants.md
christianandClaude Opus 5 c9eef0672c Church Translate, as it runs at the campuses
Live sermon translation into 100+ languages, running entirely on one Mac per
campus: audio in, voice detection, Whisper on the GPU, NLLB-200 in its own
process, and a built-in web server the congregation reads from on their
phones. No audio leaves the building.

This is the source only. What used to sit beside it — 14 GB of speech and
translation models, 8 GB of voice bundles, 6 GB of natural voices, the Electron
caches, and the app data holding the operator PIN and every service transcript
— is machine state and downloaded assets, and stays in the NAS backup where it
belongs. The vendored node, cloudflared and Windows ffmpeg binaries are out too
(533 MB, re-fetched for packaging); the browser-side runtime beside them is
kept, so a checkout still serves the congregation page.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 15:41:21 -04:00

4.5 KiB

Plan — three Spanish variants for live preaching

The ask

Operator, relaying a native Spanish speaker: the Spanish output is Latin American, and three variants are wanted — Latin American, Spain, Mexican — "fine tuned exactly to how it's supposed to be". No native speaker will be provided; research from the web instead. Nothing may be left out.

Finding 1 — the taxonomy overlaps

es-MX is INSIDE es-419, not beside it. Their differences are lexical only (computadora/ordenador, carro/coche, ícono/icono). es-ES is the one that differs GRAMMATICALLY. So the three deliverables are not three equal problems:

variant differs from es-419 by difficulty
es_419 Latin American — (this is today's output) none
es_MX Mexican word choice low, deterministic
es_ES Spain the whole 2nd-person-plural system high

Reference editions, so each variant has an authority rather than my preference:

  • es_ES → Reina-Valera 1960 (uses vosotros) / LBLA
  • es_419 → NBLA (explicitly uses ustedes for Latin America) / NVI
  • es_MX → NBLA + Mexican lexicon

Finding 2 — why es-ES cannot be a find-and-replace

Spanish 3rd-person-plural is IDENTICAL for "ustedes" (you all) and "ellos" (they). hablan is both. So a target-side rule hablan → habláis corrupts every genuine third-person sentence: "they were there" becomes "you all were there". In scripture. Silently. This is the exact failure class the whole fidelity effort exists to prevent, so a naive transform is not shippable.

Finding 3 — the English source resolves the ambiguity

This is the key idea and it may remove the need for any model change.

The ambiguity is unresolvable in the Spanish. It is already resolved in the ENGLISH, which we still have:

"Open YOUR Bibles."        -> 2nd person -> ustedes-form -> convert
"THEY were there."         -> 3rd person -> ellos-form   -> leave alone

So: convert to vosotros ONLY when the English sentence contains 2nd-person address AND contains NO 3rd-person-plural marker. Mixed sentences ("tell them that you are loved") are left in es-419 form — which a Spaniard understands perfectly, it just reads Latin American. Conservative by construction: the failure mode is "not converted", never "wrongly converted".

Design

NLLB -> guard -> cache -> [es-419 base]
                             |-- es_MX : lexical layer
                             |-- es_ES : gated vosotros transform
                             `-- es_419: as-is

Same shape as pt-variants.js (por_Latn / por_PT share one NLLB result), and it reuses NLLB_ALIAS so the extra variants cost no extra inference.

New pseudo-codes spa_MX and spa_ES, both aliased to spa_Latn at the MT boundary only — exactly how por_PT already works.

es_ES transform components

  1. Gate (on the English source): 2nd-person markers present, 3rd-person-plural markers absent.
  2. Pronouns/possessives: ustedes→vosotros, su(s)→vuestro(s)/vuestra(s), les→os, se (reflexive 2pl)→os, a ustedes→a vosotros.
  3. Verb morphology: 3pl→2pl. -an→-áis; -en→-éis for -er verbs but -en→-ís for -ir verbs, so the verb's class must be known — a table, not a rule. Irregulars (ser, ir, tener, hacer, poder, querer, decir, venir, saber, dar, ver, poner, salir, traer, oír, haber) need explicit entries.
  4. Imperatives: abran→abrid, vengan→venid, miren→mirad — highest frequency in preaching and the most audible difference.

es_MX layer

Lexical only. Word-level, no morphology, no gate needed.

What must not regress

  • Latency: no extra inference. All layers are string work over a shared result.
  • applyOverrides still runs last so an operator pin outranks everything.
  • The English caption and archive keep what was actually said.
  • Voice: speech-text.js has Spanish book-name rules (ES_BOOKS) that fire on 1 Corintios → Primera de Corintios. New variants must not produce forms outside that list or the voice reads "uno Juan".
  • Each variant needs its own voice choice — es_ES should get a Castilian voice (miro/sharvard, measured male), es_MX the Mexican ald.

Open questions for the audit

  1. Is the source-side gate actually safe? Where does it misfire?
  2. Verb-table coverage: what fraction of real sermon Spanish is reachable?
  3. Does adding two pseudo-languages break the shared-cache invariant?
  4. Is vosotros even wanted? RVR1960 uses it and is read across Latin America.
  5. Does the listener page cope with three Spanish entries in the picker?