1034 tests·provider-backed·no static fallback

Spanish that can defend where it came from.

DialectOS is a full-stack dialect translation surface for Spanish regional meaning: Puerto Rican jugo de china, Caribbean guagua, voseo, taboo verbs, and semantic traps that generic translation demos flatten.

live backend → LLM, static page → vocabulary engine semantic prompt applied receipt on every mode
25Spanish regional variants covered by the app surface
1034tests across runtime, docs, dialect fixtures, and safety checks
17MCP tools for translation, glossary, and research workflows
0hidden fallbacks — client mode is receipt-visible

Try the path we actually ship.

The browser calls /api/translate when a backend is running, otherwise the client engine detects dialects and applies vocabulary adaptations for all 25 variants — with a visible receipt either way.

Backend status checking /api/status…
unknown · insufficient markers
Run a provider-backed translation. The receipt below will show what happened.
🌐
unknown
insufficient markers

The words are not the product. The judgment is.

These are the categories that exposed thin translation behavior: regional polysemy, phrase sense, taboo verbs, grammar norms, and quality drift. The live demo is built to make those failures visible.

Regional names

Food and everyday terms vary by country and can invert meaning if translated literally.

PR: orange juice → jugo de china

Phrase sense

Short English phrases like "pick up" require semantic interpretation before Spanish wording.

PR: tidy room → recoger el cuarto

Taboo verbs

Coger, tomar, and agarrar are not interchangeable across dialects.

MX/PR/PA: avoid coger by default

Pronouns

Voseo, ustedes/vosotros, and formality norms change how instructions should address users.

AR: vos podés, not generic puedes

False friends

Words like guagua can mean bus in one place and baby in another.

PR: take the bus → toma la guagua

Grammar detection

Automatic detection of voseo, leísmo, laísmo, and loísmo flags translations that mismatch their claimed dialect.

ES: le vi → leísmo flagged in non-Spain target

Semantic backstop

Heuristic scores in the borderline zone trigger a second gate: negation preservation, keyword overlap, and structural parity.

"Do not click" → "Haz clic" = negation dropped, auto-rejected

Translation memory

Provider calls are cached by SHA-256 key of (text, dialect, register) with TTL eviction and max-entry caps.

cache hit → no provider call, instant return

Receipts

Every public demo response shows provider, target, fallback count, quality status, and backstop verdict.

provider: llm · quality: judge passed · backstop: ok

Set a dialect. Break the demo on purpose.

Click a target and try adversarial phrases. The point of this page is not to look impressive; it is to make bad translations impossible to hide.

Built for audits, not vibes.

Dual-modeLive backend gets LLM-powered translation. Static pages get client-side dialect detection and vocabulary adaptation with a visible receipt.
Failure-visibleProvider errors, missing model config, quality rejections, negation drops, and malformed requests surface as explicit errors.
Research-readyRegional gaps can flow into proposal-only research tooling before data or prompts are changed.
Cache-auditableTranslation memory hits, misses, and TTL evictions are observable in the execution receipt.