← Changelog
May 17, 2026 · 2 min

One setting, seventeen languages

Form JSON · instructions.for_agent

// account language: "ja"
You are filling out a form from Tanaka Corp...
Respond in Japanese. All field answers should be written in Japanese.
↓ agent output
1. 名前: 田中太郎
2. 部署: エンジニアリング
3. 今週うまくいったこと: デプロイの自動化...
One setting. Every form, every response, in your language.

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

get started

Ready to get answers worth reading?

Your first form takes 60 seconds. Respondents can fill it in a browser or hand it to their AI.

Make your first form →