Language¶
Code, identifiers, the API, MCP tool names and descriptions, logs, commit messages and docs are English. The UI speaks the language its users speak, and every UI string comes from one copy file per surface.
Why¶
English keeps the code, the tool descriptions Claude reads and the docs in one language that every contributor and model handles well. A UI for German-speaking users is German, but strings scattered through components can't be reviewed, reworded or translated together.
How¶
- One copy module per surface: freundebuch has
components/copy.tsfor the web app andbackend/notify/copy.tsfor notifications. Components import strings from it; they don't contain user-facing text. - Tool descriptions and
nextinstructions are English, even in an app whose UI is German: they are written for Claude, not for the user. - The project's
CLAUDE.mdnames the UI language and the copy files. - What the user types (a name, a game's German stat names) is kept as they wrote it, next to the English where the app needs one.
Rules out¶
- Identifiers, logs or docs in German (or mixed).
- User-facing strings inline in components or route handlers.
- Translating what the user wrote.
Reference¶
freundebuch (components/copy.ts, backend/notify/copy.ts, its CLAUDE.md); questlog keeps the game's own language next to the English (values V8).