Form JSON · instructions.for_agent
A user in Tokyo set their language to Japanese. The AI responded in Japanese — field answers, pre-fill summaries, the numbered list, all in Japanese. Then they opened the same form in a browser. The submit button said “Submit response.” The required badge said “required.” The data policy label said “Data policy.” All in English.
That's not how language works. If you set your language to Japanese, you're telling us your audience speaks Japanese. Not just the AI — the humans too. The person filling out your sprint retro in a browser also reads Japanese. The submit button should say 回答を送信. The “required” badge should say 必須.
The fix seems obvious in hindsight: translate the UI chrome. Buttons, labels, badges, placeholders, success messages — everything that isn't the form content you wrote. Your field labels stay exactly as you typed them (you already wrote those in your audience's language). We translate the frame around them.
I thought about using a translation API. Call DeepL or Google Translate at render time, cache the results. That's what a lot of products do. I decided against it for one reason: forms should load instantly. A translation API call adds latency, adds a dependency, adds a failure mode. For ~35 strings across 17 languages, a static map is fine. I wrote it by hand (with some help), checked the important ones with native speakers, and shipped it as a single TypeScript file.
Arabic was the interesting one. Arabic is right-to-left. You can't just translate the strings and call it done — the entire layout needs to flip. The submit button goes on the left. The “Edit” arrow points right. The progress bar fills from right to left. One dir="rtl" attribute on the root div handles most of it, because flexbox and CSS grid respect the document direction. I was surprised how little broke.
Here's what the language setting actually does now:
- AI agent instructions: “Respond in Japanese. All field answers should be written in Japanese.”
- Browser form: all UI chrome (buttons, labels, badges, placeholders, success/error messages) rendered in Japanese.
- Date formatting: deadlines shown in locale-appropriate format.
What it does not do: translate your field labels or descriptions. Those are your content. You wrote them in the language your audience speaks. If you wrote “What went well this sprint?” and set language to Japanese, that's on you — we assume you know your audience. (Auto-translating user content is a different feature with different trust implications, and I'm not building it today.)
Seventeen languages shipped: English, Spanish, French, German, Portuguese, Japanese, Chinese, Korean, Hindi, Arabic, Italian, Dutch, Russian, Turkish, Thai, Vietnamese, Indonesian, Polish, and Swedish. If yours isn't there — hi@pluck.one.
— Sumit