From 4405a8b4d30b0fcafe2a0882e7efb0fa95276e7b Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 5 Sep 2026 06:59:54 +0000 Subject: [PATCH] docs(i18n): list the bulkActions and datasets groups in the translations guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "What you can translate" table is this page's inventory of the bundle surface, and it omitted two groups that shipped live in 17.3.0 (#14253): `objects.._views..bulkActions..*` and `datasets..*`. The word `dataset` did not occur on the page at all. Both are declared in `packages/spec/src/system/translation.zod.ts`, read by `translateView` (via `translateBulkActionDefs` against `config.bulkActionDefs`) and by `translateDataset`, and emitted by `os i18n extract` — so an author scanning the inventory concluded two live surfaces were not translatable. Adds one bulk-action row, two dataset rows, and the short callout the `datasets` group needs (the page introduced no dataset concept anywhere). Also names `dataset` in the resolved-metadata-types sentence, which listed six of the seven entries in `METADATA_DOCUMENT_TRANSLATORS` — the same omission, one paragraph down from the table. The `_validations` row is untouched; it landed with #14402. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk --- content/docs/ui/translations.mdx | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/content/docs/ui/translations.mdx b/content/docs/ui/translations.mdx index eca5a297c9..32e6a0b77a 100644 --- a/content/docs/ui/translations.mdx +++ b/content/docs/ui/translations.mdx @@ -66,6 +66,7 @@ export default defineStack({ | Field labels, help text, placeholders | `objects..fields..label` / `help` / `placeholder` | | Picklist option labels | `objects..fields..options.` | | View titles, descriptions, empty states | `objects.._views.` | +| Bulk-action copy on a list view (button, confirm prompt, dialog fields) | `objects.._views..bulkActions..label` / `.confirmText` / `.confirmLabel` / `.params..label` / `.help` / `.placeholder` — a bulk param's hint is `help`, not `helpText` | | Action labels, confirm text, success messages | `objects.._actions.` | | Action result dialogs (title / description / acknowledge / field labels) | `objects.._actions..resultDialog` | | Form sections | `objects.._sections.
` | @@ -73,13 +74,16 @@ export default defineStack({ | App navigation | `apps..navigation..label` | | Dashboard label / description | `dashboards..label` / `description` | | Dashboard widget title / description / sub-caption | `dashboards..widgets..title` / `description` / `subCaption` | +| Analytics dataset label / description | `datasets..label` / `description` | +| Dataset dimension and measure labels | `datasets..dimensions..label` / `datasets..measures..label` | | Page labels and `page:header` copy | `pages..label` / `description` / `title` / `subtitle` | | Screen-flow wizards (flow label, screen headings, screen field copy) | `flows..label` / `flows..screens..title` / `.fields..label` / `.placeholder` — see the boundary note below | | Global actions, settings, messages | `globalActions`, `settings`, `messages` | The metadata types resolved per request are **object, view, action, app, -dashboard, and page** — a field's labels are translated as part of its object -document, and so are the labels of any actions the object declares inline +dashboard, dataset, and page** — a field's labels are translated as part of +its object document, and so are the labels of any actions the object declares +inline (#3370). Before that, an object document went out with its authored action labels untouched: `sys_approval_request`'s Approve / Reject rendered in English in a zh-CN workspace for every consumer except the Console, which happened to @@ -95,6 +99,21 @@ translates `widget.description`, `subCaption` translates `widget.options.description`, and neither reaches the other's field. + +**Dataset copy is keyed at the top level, not under the dashboard +(#14253).** A dataset is the analytics definition — its dimensions and its +measures — that widgets bind to by reference, and a measure's label is drawn +*on the dashboard*: under every metric tile and on every chart axis. It gets +its own `datasets.` group rather than a slot under `dashboards.` +because the same measure is drawn by many widgets across many dashboards — +keying it per presentation would ask for the same string once per widget, and +would leave a dataset no dashboard references unaddressable. Below the +dataset the copy is `label` and nothing else: a dimension and a measure each +declare exactly one display string, so `description` belongs to the dataset +itself and writing one on a dimension or measure is rejected with a message +saying so. + + **Page headers are keyed by page name (#3589).** A page's `page:header` component has no stable id, so its `properties.title` / `properties.subtitle`