MCPbundler
< All Posts
Engineering

How we keep two languages honest without a cron job

MCP Team-August 9, 2026-2 min read

The boring failure mode of any multi-language site is quiet drift: someone edits the English docs, nobody remembers the Spanish version exists, and months later it's confidently wrong in a language most of the team can't read well enough to notice.

The usual fix is a timestamp - "translated more than 30 days after the source was last touched, flag it." We didn't like that. A source page can go untouched for a year and still be perfectly in sync; a translation can be one day old and already stale if the source changed twice since. Time isn't the thing you actually care about. Content is.

So instead of a timestamp, every translatable page carries a content hash - computed from its title, description, and body - and every translation stores the hash of the exact source content it was translated from. Checking staleness is then just: does the stored hash match the source's hash right now? If not, something changed and the translation hasn't caught up, regardless of how much or how little time has passed. It's the same idea as a lockfile - not "is this recent," but "does this match exactly what it claims to be a translation of."

The other decision, which is less clever but matters more: the pipeline that drafts translations with Claude never publishes what it produces directly. A person reads it first. That's slower than "auto-translate and auto-publish," and we think that's correct, not a limitation we're planning to remove - translation is exactly the kind of task where a plausible-sounding wrong answer is worse than a visible gap, and a content hash can tell you a translation is stale, but it can't tell you a translation is good.

Docs and blog ship in English and Spanish today, with more languages a matter of when, not if.