From 084acecd22ebdca7aa41c2f6e830acc7d341800c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Sun, 23 Aug 2026 15:57:58 +0000 Subject: [PATCH] localization: "panel plus file names" was the wrong test for content MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 3 guidance said to expect roughly half of FileBrowser to be content that stays English. useFileBrowserApp.ts, the largest file in the phase, was 100% convertible — not one hit was content. The distinction that actually holds: a panel LISTING things renders content, and a file name in a row is the user's. A panel REPORTING about those things owns the sentence — `Renamed to "{{name}}"` is ours and the file name is a parameter, which is where content belongs. So the question is whether a string is a frame around content or the content itself, not whether the panel touches file names. It matters for plurals too: six hand-rolled ones in that file became real entries because Portuguese reorders them, which a frame with a count spliced in cannot express. Recorded because the wrong version of this rule came from me, and left alone it would have had somebody decline conversions that were correct. Co-Authored-By: Claude Opus 5 Officer-Session: 656f5c85-e49a-4f1f-b9f3-042a04b4d043 --- docs/localization.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/localization.md b/docs/localization.md index 9fa3bab6..731c9d68 100644 --- a/docs/localization.md +++ b/docs/localization.md @@ -271,6 +271,20 @@ Getting this wrong is worse than missing a string, because it corrupts data or b - **Agent and chat output.** Whatever Claude or opencode wrote. It is content. - **User content** — file names, paths, terminal output, code, commit messages, note bodies. +- **Not everything a panel renders is content, and "panel plus file names" is the wrong test.** The + guidance during phase 3 was to expect roughly half of FileBrowser's hits to be content and stay English. + `useFileBrowserApp.ts`, the largest file in the phase at 47 hits, turned out **100% convertible**. + + The reason is worth keeping. A panel that LISTS things renders content — a file name in a row is the + user's, and translating it would be absurd. A panel REPORTING about those things owns the sentence: + `Renamed to "{{name}}"` is ours, and the file name sits inside it as a parameter, which is exactly where + content belongs. So the test is not "does this panel touch file names" but "is the string a frame around + content, or the content itself". + + It also matters for plurals. Six hand-rolled ones in that file became real entries because Portuguese + reorders them — `1 item eliminado` against `Deleted 1 item` — which a frame with a count spliced into it + cannot express at all. + - **A label quoted from ANOTHER product's interface.** "Click **Enable**", "set **App name**", "choose **Internal**" in a setup guide. These read like prose and are identifiers: their whole job is to match what the reader will actually see on Google's screen, and Google localises by the reader's _Google_