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_